From 1770c021cf998ff1b33855b1397f6ea8ff9f7cd7 Mon Sep 17 00:00:00 2001 From: Dan Sinclair Date: Mon, 14 Mar 2016 14:14:16 -0400 Subject: Move xfa/src up to xfa/. This CL moves the xfa/src files up to the xfa/ directory and fixes the includes, include guards, and build files. R=tsepez@chromium.org Review URL: https://codereview.chromium.org/1803723002 . --- xfa/src/fde/css/fde_css.h | 1082 --- xfa/src/fde/css/fde_csscache.cpp | 149 - xfa/src/fde/css/fde_csscache.h | 85 - xfa/src/fde/css/fde_cssdatatable.cpp | 889 --- xfa/src/fde/css/fde_cssdatatable.h | 200 - xfa/src/fde/css/fde_cssdeclaration.cpp | 1377 ---- xfa/src/fde/css/fde_cssdeclaration.h | 158 - xfa/src/fde/css/fde_cssstyleselector.cpp | 1794 ----- xfa/src/fde/css/fde_cssstyleselector.h | 901 --- xfa/src/fde/css/fde_cssstylesheet.cpp | 509 -- xfa/src/fde/css/fde_cssstylesheet.h | 141 - xfa/src/fde/css/fde_csssyntax.cpp | 487 -- xfa/src/fde/css/fde_csssyntax.h | 119 - xfa/src/fde/fde_brush.h | 150 - xfa/src/fde/fde_devbasic.cpp | 550 -- xfa/src/fde/fde_devbasic.h | 20 - xfa/src/fde/fde_gedevice.cpp | 573 -- xfa/src/fde/fde_gedevice.h | 136 - xfa/src/fde/fde_geobject.cpp | 255 - xfa/src/fde/fde_geobject.h | 57 - xfa/src/fde/fde_image.h | 42 - xfa/src/fde/fde_iterator.cpp | 98 - xfa/src/fde/fde_iterator.h | 39 - xfa/src/fde/fde_object.cpp | 25 - xfa/src/fde/fde_object.h | 246 - xfa/src/fde/fde_path.h | 37 - xfa/src/fde/fde_pen.h | 70 - xfa/src/fde/fde_render.cpp | 291 - xfa/src/fde/fde_render.h | 40 - xfa/src/fde/fde_renderdevice.h | 110 - xfa/src/fde/fde_visualset.h | 123 - xfa/src/fde/tto/fde_textout.cpp | 1120 --- xfa/src/fde/tto/fde_textout.h | 102 - xfa/src/fde/xml/fde_xml.h | 226 - xfa/src/fde/xml/fde_xml_imp.cpp | 2100 ------ xfa/src/fde/xml/fde_xml_imp.h | 354 - xfa/src/fee/fde_txtedtbuf.cpp | 403 -- xfa/src/fee/fde_txtedtbuf.h | 92 - xfa/src/fee/fde_txtedtengine.cpp | 1783 ----- xfa/src/fee/fde_txtedtengine.h | 247 - xfa/src/fee/fde_txtedtpage.cpp | 650 -- xfa/src/fee/fde_txtedtpage.h | 168 - xfa/src/fee/fde_txtedtparag.cpp | 150 - xfa/src/fee/fde_txtedtparag.h | 37 - xfa/src/fee/fx_wordbreak/fx_wordbreak.h | 30 - xfa/src/fee/fx_wordbreak/fx_wordbreak_impl.cpp | 238 - xfa/src/fee/fx_wordbreak/fx_wordbreak_impl.h | 78 - xfa/src/fee/fx_wordbreak/fx_wordbreakdata.cpp | 2748 -------- xfa/src/fee/ifde_txtedtbuf.h | 39 - xfa/src/fee/ifde_txtedtengine.h | 258 - xfa/src/fee/ifde_txtedtpage.h | 42 - xfa/src/fgas/crt/fgas_algorithm.cpp | 306 - xfa/src/fgas/crt/fgas_algorithm.h | 54 - xfa/src/fgas/crt/fgas_codepage.cpp | 343 - xfa/src/fgas/crt/fgas_codepage.h | 179 - xfa/src/fgas/crt/fgas_encode.cpp | 193 - xfa/src/fgas/crt/fgas_language.h | 269 - xfa/src/fgas/crt/fgas_memory.cpp | 446 -- xfa/src/fgas/crt/fgas_memory.h | 59 - xfa/src/fgas/crt/fgas_stream.cpp | 1626 ----- xfa/src/fgas/crt/fgas_stream.h | 78 - xfa/src/fgas/crt/fgas_system.cpp | 117 - xfa/src/fgas/crt/fgas_system.h | 23 - xfa/src/fgas/crt/fgas_utils.cpp | 434 -- xfa/src/fgas/crt/fgas_utils.h | 737 -- xfa/src/fgas/font/fgas_font.h | 285 - xfa/src/fgas/font/fgas_fontutils.cpp | 153 - xfa/src/fgas/font/fgas_fontutils.h | 25 - xfa/src/fgas/font/fgas_gefont.cpp | 572 -- xfa/src/fgas/font/fgas_gefont.h | 92 - xfa/src/fgas/font/fgas_stdfontmgr.cpp | 1515 ---- xfa/src/fgas/font/fgas_stdfontmgr.h | 252 - xfa/src/fgas/layout/fgas_linebreak.cpp | 320 - xfa/src/fgas/layout/fgas_linebreak.h | 40 - xfa/src/fgas/layout/fgas_rtfbreak.cpp | 1691 ----- xfa/src/fgas/layout/fgas_rtfbreak.h | 237 - xfa/src/fgas/layout/fgas_textbreak.cpp | 1824 ----- xfa/src/fgas/layout/fgas_textbreak.h | 222 - xfa/src/fgas/layout/fgas_unicode.cpp | 117 - xfa/src/fgas/layout/fgas_unicode.h | 47 - xfa/src/fgas/localization/fgas_datetime.cpp | 550 -- xfa/src/fgas/localization/fgas_datetime.h | 406 -- xfa/src/fgas/localization/fgas_locale.cpp | 5030 -------------- xfa/src/fgas/localization/fgas_locale.h | 206 - xfa/src/fgas/localization/fgas_localeimp.h | 122 - xfa/src/fgas/localization/fgas_localemgr.cpp | 97 - xfa/src/fgas/localization/fgas_localemgr.h | 28 - xfa/src/fgas/xml/fgas_sax.h | 68 - xfa/src/fgas/xml/fgas_sax_imp.cpp | 688 -- xfa/src/fgas/xml/fgas_sax_imp.h | 141 - xfa/src/fwl/basewidget/fwl_barcodeimp.cpp | 221 - xfa/src/fwl/basewidget/fwl_barcodeimp.h | 54 - xfa/src/fwl/basewidget/fwl_caretimp.cpp | 157 - xfa/src/fwl/basewidget/fwl_caretimp.h | 67 - xfa/src/fwl/basewidget/fwl_checkboximp.cpp | 555 -- xfa/src/fwl/basewidget/fwl_checkboximp.h | 64 - xfa/src/fwl/basewidget/fwl_comboboximp.cpp | 1819 ----- xfa/src/fwl/basewidget/fwl_comboboximp.h | 237 - xfa/src/fwl/basewidget/fwl_datetimepickerimp.cpp | 1161 ---- xfa/src/fwl/basewidget/fwl_datetimepickerimp.h | 235 - xfa/src/fwl/basewidget/fwl_editimp.cpp | 2152 ------ xfa/src/fwl/basewidget/fwl_editimp.h | 208 - xfa/src/fwl/basewidget/fwl_formproxyimp.cpp | 55 - xfa/src/fwl/basewidget/fwl_formproxyimp.h | 42 - xfa/src/fwl/basewidget/fwl_listboximp.cpp | 1241 ---- xfa/src/fwl/basewidget/fwl_listboximp.h | 121 - xfa/src/fwl/basewidget/fwl_monthcalendarimp.cpp | 1098 --- xfa/src/fwl/basewidget/fwl_monthcalendarimp.h | 243 - xfa/src/fwl/basewidget/fwl_pictureboximp.cpp | 151 - xfa/src/fwl/basewidget/fwl_pictureboximp.h | 53 - xfa/src/fwl/basewidget/fwl_pushbuttonimp.cpp | 550 -- xfa/src/fwl/basewidget/fwl_pushbuttonimp.h | 65 - xfa/src/fwl/basewidget/fwl_scrollbarimp.cpp | 805 --- xfa/src/fwl/basewidget/fwl_scrollbarimp.h | 139 - xfa/src/fwl/basewidget/fwl_spinbuttonimp.cpp | 429 -- xfa/src/fwl/basewidget/fwl_spinbuttonimp.h | 69 - xfa/src/fwl/basewidget/fwl_tooltipctrlimp.cpp | 293 - xfa/src/fwl/basewidget/fwl_tooltipctrlimp.h | 86 - xfa/src/fwl/basewidget/fxmath_barcodeimp.cpp | 385 - xfa/src/fwl/basewidget/fxmath_barcodeimp.h | 56 - xfa/src/fwl/core/fwl_appimp.cpp | 114 - xfa/src/fwl/core/fwl_appimp.h | 38 - xfa/src/fwl/core/fwl_contentimp.cpp | 94 - xfa/src/fwl/core/fwl_contentimp.h | 35 - xfa/src/fwl/core/fwl_formimp.cpp | 1175 ---- xfa/src/fwl/core/fwl_formimp.h | 193 - xfa/src/fwl/core/fwl_gridimp.cpp | 1378 ---- xfa/src/fwl/core/fwl_gridimp.h | 197 - xfa/src/fwl/core/fwl_noteimp.cpp | 1097 --- xfa/src/fwl/core/fwl_noteimp.h | 157 - xfa/src/fwl/core/fwl_panelimp.cpp | 152 - xfa/src/fwl/core/fwl_panelimp.h | 32 - xfa/src/fwl/core/fwl_sdadapterimp.cpp | 175 - xfa/src/fwl/core/fwl_targetimp.cpp | 44 - xfa/src/fwl/core/fwl_targetimp.h | 27 - xfa/src/fwl/core/fwl_threadimp.cpp | 38 - xfa/src/fwl/core/fwl_threadimp.h | 40 - xfa/src/fwl/core/fwl_timerimp.cpp | 36 - xfa/src/fwl/core/fwl_widgetimp.cpp | 1101 --- xfa/src/fwl/core/fwl_widgetimp.h | 162 - xfa/src/fwl/core/fwl_widgetmgrimp.cpp | 1075 --- xfa/src/fwl/core/fwl_widgetmgrimp.h | 170 - xfa/src/fwl/lightwidget/app.cpp | 33 - xfa/src/fwl/lightwidget/barcode.cpp | 45 - xfa/src/fwl/lightwidget/caret.cpp | 47 - xfa/src/fwl/lightwidget/checkbox.cpp | 57 - xfa/src/fwl/lightwidget/combobox.cpp | 370 - xfa/src/fwl/lightwidget/datetimepicker.cpp | 144 - xfa/src/fwl/lightwidget/edit.cpp | 211 - xfa/src/fwl/lightwidget/listbox.cpp | 302 - xfa/src/fwl/lightwidget/picturebox.cpp | 119 - xfa/src/fwl/lightwidget/pushbutton.cpp | 56 - xfa/src/fwl/lightwidget/scrollbar.cpp | 93 - xfa/src/fwl/lightwidget/theme.cpp | 135 - xfa/src/fwl/lightwidget/tooltipctrl.cpp | 111 - xfa/src/fwl/lightwidget/widget.cpp | 318 - xfa/src/fwl/theme/barcodetp.cpp | 42 - xfa/src/fwl/theme/carettp.cpp | 49 - xfa/src/fwl/theme/checkboxtp.cpp | 532 -- xfa/src/fwl/theme/comboboxtp.cpp | 156 - xfa/src/fwl/theme/datetimepickertp.cpp | 138 - xfa/src/fwl/theme/edittp.cpp | 89 - xfa/src/fwl/theme/formtp.cpp | 893 --- xfa/src/fwl/theme/listboxtp.cpp | 101 - xfa/src/fwl/theme/monthcalendartp.cpp | 582 -- xfa/src/fwl/theme/pictureboxtp.cpp | 36 - xfa/src/fwl/theme/pushbuttontp.cpp | 157 - xfa/src/fwl/theme/scrollbartp.cpp | 377 - xfa/src/fwl/theme/widgettp.cpp | 840 --- xfa/src/fxbarcode/BC_BarCode.cpp | 877 --- xfa/src/fxbarcode/BC_Binarizer.cpp | 34 - xfa/src/fxbarcode/BC_Binarizer.h | 30 - xfa/src/fxbarcode/BC_BinaryBitmap.cpp | 61 - xfa/src/fxbarcode/BC_BinaryBitmap.h | 33 - .../fxbarcode/BC_BufferedImageLuminanceSource.cpp | 171 - .../fxbarcode/BC_BufferedImageLuminanceSource.h | 34 - xfa/src/fxbarcode/BC_DecoderResult.h | 37 - xfa/src/fxbarcode/BC_Dimension.cpp | 46 - xfa/src/fxbarcode/BC_Dimension.h | 29 - xfa/src/fxbarcode/BC_Library.cpp | 121 - xfa/src/fxbarcode/BC_LuminanceSource.cpp | 33 - xfa/src/fxbarcode/BC_LuminanceSource.h | 27 - xfa/src/fxbarcode/BC_Reader.cpp | 10 - xfa/src/fxbarcode/BC_Reader.h | 24 - xfa/src/fxbarcode/BC_ResultPoint.cpp | 31 - xfa/src/fxbarcode/BC_ResultPoint.h | 25 - xfa/src/fxbarcode/BC_TwoDimWriter.cpp | 148 - xfa/src/fxbarcode/BC_TwoDimWriter.h | 35 - xfa/src/fxbarcode/BC_UtilCodingConvert.cpp | 53 - xfa/src/fxbarcode/BC_UtilCodingConvert.h | 29 - xfa/src/fxbarcode/BC_UtilRSS.cpp | 164 - xfa/src/fxbarcode/BC_UtilRSS.h | 34 - xfa/src/fxbarcode/BC_Utils.cpp | 48 - xfa/src/fxbarcode/BC_Writer.cpp | 56 - xfa/src/fxbarcode/BC_Writer.h | 38 - xfa/src/fxbarcode/common/BC_CommonBitArray.cpp | 113 - xfa/src/fxbarcode/common/BC_CommonBitArray.h | 35 - xfa/src/fxbarcode/common/BC_CommonBitMatrix.cpp | 146 - xfa/src/fxbarcode/common/BC_CommonBitMatrix.h | 46 - xfa/src/fxbarcode/common/BC_CommonBitSource.cpp | 71 - xfa/src/fxbarcode/common/BC_CommonBitSource.h | 27 - xfa/src/fxbarcode/common/BC_CommonByteArray.cpp | 99 - xfa/src/fxbarcode/common/BC_CommonByteArray.h | 33 - xfa/src/fxbarcode/common/BC_CommonByteMatrix.cpp | 64 - xfa/src/fxbarcode/common/BC_CommonByteMatrix.h | 34 - .../fxbarcode/common/BC_CommonCharacterSetECI.cpp | 44 - .../fxbarcode/common/BC_CommonCharacterSetECI.h | 29 - .../fxbarcode/common/BC_CommonDecoderResult.cpp | 77 - xfa/src/fxbarcode/common/BC_CommonDecoderResult.h | 45 - xfa/src/fxbarcode/common/BC_CommonECI.cpp | 42 - xfa/src/fxbarcode/common/BC_CommonECI.h | 24 - .../common/BC_CommonPerspectiveTransform.cpp | 153 - .../common/BC_CommonPerspectiveTransform.h | 65 - .../common/BC_GlobalHistogramBinarizer.cpp | 173 - .../fxbarcode/common/BC_GlobalHistogramBinarizer.h | 34 - .../fxbarcode/common/BC_WhiteRectangleDetector.cpp | 254 - .../fxbarcode/common/BC_WhiteRectangleDetector.h | 54 - .../common/reedsolomon/BC_ReedSolomon.cpp | 104 - .../fxbarcode/common/reedsolomon/BC_ReedSolomon.h | 29 - .../common/reedsolomon/BC_ReedSolomonDecoder.cpp | 221 - .../common/reedsolomon/BC_ReedSolomonDecoder.h | 35 - .../common/reedsolomon/BC_ReedSolomonGF256.cpp | 124 - .../common/reedsolomon/BC_ReedSolomonGF256.h | 41 - .../common/reedsolomon/BC_ReedSolomonGF256Poly.cpp | 254 - .../common/reedsolomon/BC_ReedSolomonGF256Poly.h | 43 - xfa/src/fxbarcode/datamatrix/BC_ASCIIEncoder.cpp | 98 - xfa/src/fxbarcode/datamatrix/BC_ASCIIEncoder.h | 27 - xfa/src/fxbarcode/datamatrix/BC_Base256Encoder.cpp | 87 - xfa/src/fxbarcode/datamatrix/BC_Base256Encoder.h | 23 - xfa/src/fxbarcode/datamatrix/BC_C40Encoder.cpp | 198 - xfa/src/fxbarcode/datamatrix/BC_C40Encoder.h | 34 - .../datamatrix/BC_DataMatrixBitMatrixParser.cpp | 378 - .../datamatrix/BC_DataMatrixBitMatrixParser.h | 45 - .../datamatrix/BC_DataMatrixDataBlock.cpp | 115 - .../fxbarcode/datamatrix/BC_DataMatrixDataBlock.h | 32 - .../BC_DataMatrixDecodedBitStreamParser.cpp | 473 -- .../BC_DataMatrixDecodedBitStreamParser.h | 58 - .../fxbarcode/datamatrix/BC_DataMatrixDecoder.cpp | 114 - .../fxbarcode/datamatrix/BC_DataMatrixDecoder.h | 30 - .../fxbarcode/datamatrix/BC_DataMatrixDetector.cpp | 406 -- .../fxbarcode/datamatrix/BC_DataMatrixDetector.h | 78 - .../fxbarcode/datamatrix/BC_DataMatrixReader.cpp | 65 - xfa/src/fxbarcode/datamatrix/BC_DataMatrixReader.h | 28 - .../datamatrix/BC_DataMatrixSymbolInfo144.cpp | 40 - .../datamatrix/BC_DataMatrixSymbolInfo144.h | 20 - .../fxbarcode/datamatrix/BC_DataMatrixVersion.cpp | 173 - .../fxbarcode/datamatrix/BC_DataMatrixVersion.h | 92 - .../fxbarcode/datamatrix/BC_DataMatrixWriter.cpp | 136 - xfa/src/fxbarcode/datamatrix/BC_DataMatrixWriter.h | 33 - .../fxbarcode/datamatrix/BC_DefaultPlacement.cpp | 164 - xfa/src/fxbarcode/datamatrix/BC_DefaultPlacement.h | 40 - xfa/src/fxbarcode/datamatrix/BC_EdifactEncoder.cpp | 154 - xfa/src/fxbarcode/datamatrix/BC_EdifactEncoder.h | 29 - xfa/src/fxbarcode/datamatrix/BC_Encoder.cpp | 10 - xfa/src/fxbarcode/datamatrix/BC_Encoder.h | 21 - xfa/src/fxbarcode/datamatrix/BC_EncoderContext.cpp | 111 - xfa/src/fxbarcode/datamatrix/BC_EncoderContext.h | 55 - .../fxbarcode/datamatrix/BC_ErrorCorrection.cpp | 175 - xfa/src/fxbarcode/datamatrix/BC_ErrorCorrection.h | 39 - .../fxbarcode/datamatrix/BC_HighLevelEncoder.cpp | 375 - xfa/src/fxbarcode/datamatrix/BC_HighLevelEncoder.h | 76 - xfa/src/fxbarcode/datamatrix/BC_SymbolInfo.cpp | 255 - xfa/src/fxbarcode/datamatrix/BC_SymbolInfo.h | 83 - .../fxbarcode/datamatrix/BC_SymbolShapeHint.cpp | 26 - xfa/src/fxbarcode/datamatrix/BC_SymbolShapeHint.h | 21 - xfa/src/fxbarcode/datamatrix/BC_TextEncoder.cpp | 98 - xfa/src/fxbarcode/datamatrix/BC_TextEncoder.h | 19 - xfa/src/fxbarcode/datamatrix/BC_X12Encoder.cpp | 100 - xfa/src/fxbarcode/datamatrix/BC_X12Encoder.h | 24 - xfa/src/fxbarcode/oned/BC_OneDReader.cpp | 175 - xfa/src/fxbarcode/oned/BC_OneDReader.h | 50 - xfa/src/fxbarcode/oned/BC_OneDimReader.cpp | 219 - xfa/src/fxbarcode/oned/BC_OneDimReader.h | 66 - xfa/src/fxbarcode/oned/BC_OneDimWriter.cpp | 437 -- xfa/src/fxbarcode/oned/BC_OneDimWriter.h | 120 - xfa/src/fxbarcode/oned/BC_OnedCodaBarReader.cpp | 212 - xfa/src/fxbarcode/oned/BC_OnedCodaBarReader.h | 36 - xfa/src/fxbarcode/oned/BC_OnedCodaBarWriter.cpp | 231 - xfa/src/fxbarcode/oned/BC_OnedCodaBarWriter.h | 54 - xfa/src/fxbarcode/oned/BC_OnedCode128Reader.cpp | 351 - xfa/src/fxbarcode/oned/BC_OnedCode128Reader.h | 49 - xfa/src/fxbarcode/oned/BC_OnedCode128Writer.cpp | 235 - xfa/src/fxbarcode/oned/BC_OnedCode128Writer.h | 49 - xfa/src/fxbarcode/oned/BC_OnedCode39Reader.cpp | 290 - xfa/src/fxbarcode/oned/BC_OnedCode39Reader.h | 36 - xfa/src/fxbarcode/oned/BC_OnedCode39Writer.cpp | 364 - xfa/src/fxbarcode/oned/BC_OnedCode39Writer.h | 53 - xfa/src/fxbarcode/oned/BC_OnedEAN13Reader.cpp | 96 - xfa/src/fxbarcode/oned/BC_OnedEAN13Reader.h | 31 - xfa/src/fxbarcode/oned/BC_OnedEAN13Writer.cpp | 301 - xfa/src/fxbarcode/oned/BC_OnedEAN13Writer.h | 53 - xfa/src/fxbarcode/oned/BC_OnedEAN8Reader.cpp | 82 - xfa/src/fxbarcode/oned/BC_OnedEAN8Reader.h | 25 - xfa/src/fxbarcode/oned/BC_OnedEAN8Writer.cpp | 268 - xfa/src/fxbarcode/oned/BC_OnedEAN8Writer.h | 55 - xfa/src/fxbarcode/oned/BC_OnedUPCAReader.cpp | 97 - xfa/src/fxbarcode/oned/BC_OnedUPCAReader.h | 43 - xfa/src/fxbarcode/oned/BC_OnedUPCAWriter.cpp | 286 - xfa/src/fxbarcode/oned/BC_OnedUPCAWriter.h | 55 - xfa/src/fxbarcode/pdf417/BC_PDF417.cpp | 586 -- xfa/src/fxbarcode/pdf417/BC_PDF417.h | 64 - .../fxbarcode/pdf417/BC_PDF417BarcodeMatrix.cpp | 90 - xfa/src/fxbarcode/pdf417/BC_PDF417BarcodeMatrix.h | 38 - .../fxbarcode/pdf417/BC_PDF417BarcodeMetadata.cpp | 50 - .../fxbarcode/pdf417/BC_PDF417BarcodeMetadata.h | 33 - xfa/src/fxbarcode/pdf417/BC_PDF417BarcodeRow.cpp | 53 - xfa/src/fxbarcode/pdf417/BC_PDF417BarcodeRow.h | 28 - xfa/src/fxbarcode/pdf417/BC_PDF417BarcodeValue.cpp | 61 - xfa/src/fxbarcode/pdf417/BC_PDF417BarcodeValue.h | 25 - xfa/src/fxbarcode/pdf417/BC_PDF417BoundingBox.cpp | 207 - xfa/src/fxbarcode/pdf417/BC_PDF417BoundingBox.h | 61 - xfa/src/fxbarcode/pdf417/BC_PDF417Codeword.cpp | 70 - xfa/src/fxbarcode/pdf417/BC_PDF417Codeword.h | 37 - .../fxbarcode/pdf417/BC_PDF417CodewordDecoder.cpp | 117 - .../fxbarcode/pdf417/BC_PDF417CodewordDecoder.h | 28 - xfa/src/fxbarcode/pdf417/BC_PDF417Common.cpp | 651 -- xfa/src/fxbarcode/pdf417/BC_PDF417Common.h | 34 - xfa/src/fxbarcode/pdf417/BC_PDF417Compaction.cpp | 26 - xfa/src/fxbarcode/pdf417/BC_PDF417Compaction.h | 18 - .../pdf417/BC_PDF417DecodedBitStreamParser.cpp | 493 -- .../pdf417/BC_PDF417DecodedBitStreamParser.h | 63 - .../fxbarcode/pdf417/BC_PDF417DetectionResult.cpp | 339 - .../fxbarcode/pdf417/BC_PDF417DetectionResult.h | 57 - .../pdf417/BC_PDF417DetectionResultColumn.cpp | 101 - .../pdf417/BC_PDF417DetectionResultColumn.h | 33 - .../BC_PDF417DetectionResultRowIndicatorColumn.cpp | 267 - .../BC_PDF417DetectionResultRowIndicatorColumn.h | 34 - xfa/src/fxbarcode/pdf417/BC_PDF417Detector.cpp | 352 - xfa/src/fxbarcode/pdf417/BC_PDF417Detector.h | 69 - .../fxbarcode/pdf417/BC_PDF417DetectorResult.cpp | 50 - xfa/src/fxbarcode/pdf417/BC_PDF417DetectorResult.h | 26 - xfa/src/fxbarcode/pdf417/BC_PDF417Dimensions.cpp | 46 - xfa/src/fxbarcode/pdf417/BC_PDF417Dimensions.h | 31 - .../pdf417/BC_PDF417ECErrorCorrection.cpp | 389 -- .../fxbarcode/pdf417/BC_PDF417ECErrorCorrection.h | 39 - xfa/src/fxbarcode/pdf417/BC_PDF417ECModulusGF.cpp | 120 - xfa/src/fxbarcode/pdf417/BC_PDF417ECModulusGF.h | 39 - .../fxbarcode/pdf417/BC_PDF417ECModulusPoly.cpp | 332 - xfa/src/fxbarcode/pdf417/BC_PDF417ECModulusPoly.h | 39 - .../fxbarcode/pdf417/BC_PDF417ErrorCorrection.cpp | 165 - .../fxbarcode/pdf417/BC_PDF417ErrorCorrection.h | 30 - .../fxbarcode/pdf417/BC_PDF417HighLevelEncoder.cpp | 427 -- .../fxbarcode/pdf417/BC_PDF417HighLevelEncoder.h | 74 - .../pdf417/BC_PDF417HighLevelEncoder_unittest.cpp | 239 - xfa/src/fxbarcode/pdf417/BC_PDF417Reader.cpp | 149 - xfa/src/fxbarcode/pdf417/BC_PDF417Reader.h | 31 - .../fxbarcode/pdf417/BC_PDF417ResultMetadata.cpp | 50 - xfa/src/fxbarcode/pdf417/BC_PDF417ResultMetadata.h | 32 - .../fxbarcode/pdf417/BC_PDF417ScanningDecoder.cpp | 752 -- .../fxbarcode/pdf417/BC_PDF417ScanningDecoder.h | 119 - xfa/src/fxbarcode/pdf417/BC_PDF417Writer.cpp | 115 - xfa/src/fxbarcode/pdf417/BC_PDF417Writer.h | 28 - xfa/src/fxbarcode/qrcode/BC_FinderPatternInfo.cpp | 41 - xfa/src/fxbarcode/qrcode/BC_FinderPatternInfo.h | 28 - xfa/src/fxbarcode/qrcode/BC_QRAlignmentPattern.cpp | 49 - xfa/src/fxbarcode/qrcode/BC_QRAlignmentPattern.h | 25 - .../qrcode/BC_QRAlignmentPatternFinder.cpp | 200 - .../fxbarcode/qrcode/BC_QRAlignmentPatternFinder.h | 47 - xfa/src/fxbarcode/qrcode/BC_QRBitMatrixParser.cpp | 183 - xfa/src/fxbarcode/qrcode/BC_QRBitMatrixParser.h | 34 - xfa/src/fxbarcode/qrcode/BC_QRCodeReader.cpp | 108 - xfa/src/fxbarcode/qrcode/BC_QRCodeReader.h | 40 - xfa/src/fxbarcode/qrcode/BC_QRCodeWriter.cpp | 107 - xfa/src/fxbarcode/qrcode/BC_QRCodeWriter.h | 41 - xfa/src/fxbarcode/qrcode/BC_QRCoder.cpp | 124 - xfa/src/fxbarcode/qrcode/BC_QRCoder.h | 57 - xfa/src/fxbarcode/qrcode/BC_QRCoderBitVector.cpp | 124 - xfa/src/fxbarcode/qrcode/BC_QRCoderBitVector.h | 35 - xfa/src/fxbarcode/qrcode/BC_QRCoderBlockPair.cpp | 41 - xfa/src/fxbarcode/qrcode/BC_QRCoderBlockPair.h | 25 - xfa/src/fxbarcode/qrcode/BC_QRCoderDecoder.cpp | 129 - xfa/src/fxbarcode/qrcode/BC_QRCoderDecoder.h | 37 - xfa/src/fxbarcode/qrcode/BC_QRCoderECB.cpp | 35 - xfa/src/fxbarcode/qrcode/BC_QRCoderECB.h | 24 - xfa/src/fxbarcode/qrcode/BC_QRCoderECBlocks.cpp | 59 - xfa/src/fxbarcode/qrcode/BC_QRCoderECBlocks.h | 31 - xfa/src/fxbarcode/qrcode/BC_QRCoderEncoder.cpp | 961 --- xfa/src/fxbarcode/qrcode/BC_QRCoderEncoder.h | 133 - .../qrcode/BC_QRCoderErrorCorrectionLevel.cpp | 92 - .../qrcode/BC_QRCoderErrorCorrectionLevel.h | 35 - .../qrcode/BC_QRCoderFormatInformation.cpp | 95 - .../fxbarcode/qrcode/BC_QRCoderFormatInformation.h | 32 - xfa/src/fxbarcode/qrcode/BC_QRCoderMaskUtil.cpp | 198 - xfa/src/fxbarcode/qrcode/BC_QRCoderMaskUtil.h | 27 - xfa/src/fxbarcode/qrcode/BC_QRCoderMatrixUtil.cpp | 478 -- xfa/src/fxbarcode/qrcode/BC_QRCoderMatrixUtil.h | 87 - xfa/src/fxbarcode/qrcode/BC_QRCoderMode.cpp | 179 - xfa/src/fxbarcode/qrcode/BC_QRCoderMode.h | 51 - xfa/src/fxbarcode/qrcode/BC_QRCoderVersion.cpp | 769 -- xfa/src/fxbarcode/qrcode/BC_QRCoderVersion.h | 54 - xfa/src/fxbarcode/qrcode/BC_QRDataBlock.cpp | 111 - xfa/src/fxbarcode/qrcode/BC_QRDataBlock.h | 30 - xfa/src/fxbarcode/qrcode/BC_QRDataMask.cpp | 118 - xfa/src/fxbarcode/qrcode/BC_QRDataMask.h | 28 - .../qrcode/BC_QRDecodedBitStreamParser.cpp | 273 - .../fxbarcode/qrcode/BC_QRDecodedBitStreamParser.h | 59 - xfa/src/fxbarcode/qrcode/BC_QRDetector.cpp | 278 - xfa/src/fxbarcode/qrcode/BC_QRDetector.h | 63 - xfa/src/fxbarcode/qrcode/BC_QRDetectorResult.cpp | 43 - xfa/src/fxbarcode/qrcode/BC_QRDetectorResult.h | 26 - xfa/src/fxbarcode/qrcode/BC_QRFinderPattern.cpp | 68 - xfa/src/fxbarcode/qrcode/BC_QRFinderPattern.h | 31 - .../fxbarcode/qrcode/BC_QRFinderPatternFinder.cpp | 477 -- .../fxbarcode/qrcode/BC_QRFinderPatternFinder.h | 57 - xfa/src/fxbarcode/qrcode/BC_QRGridSampler.cpp | 139 - xfa/src/fxbarcode/qrcode/BC_QRGridSampler.h | 48 - xfa/src/fxbarcode/utils.h | 183 - xfa/src/fxfa/app/xfa_checksum.cpp | 190 - xfa/src/fxfa/app/xfa_checksum.h | 73 - xfa/src/fxfa/app/xfa_ffapp.cpp | 190 - xfa/src/fxfa/app/xfa_ffapp.h | 81 - xfa/src/fxfa/app/xfa_ffbarcode.cpp | 235 - xfa/src/fxfa/app/xfa_ffbarcode.h | 101 - xfa/src/fxfa/app/xfa_ffcheckbutton.cpp | 335 - xfa/src/fxfa/app/xfa_ffcheckbutton.h | 43 - xfa/src/fxfa/app/xfa_ffchoicelist.cpp | 530 -- xfa/src/fxfa/app/xfa_ffchoicelist.h | 96 - xfa/src/fxfa/app/xfa_ffdoc.cpp | 431 -- xfa/src/fxfa/app/xfa_ffdoc.h | 64 - xfa/src/fxfa/app/xfa_ffdochandler.cpp | 110 - xfa/src/fxfa/app/xfa_ffdochandler.h | 50 - xfa/src/fxfa/app/xfa_ffdocview.cpp | 932 --- xfa/src/fxfa/app/xfa_ffdocview.h | 170 - xfa/src/fxfa/app/xfa_ffdraw.cpp | 16 - xfa/src/fxfa/app/xfa_ffdraw.h | 19 - xfa/src/fxfa/app/xfa_ffexclgroup.cpp | 31 - xfa/src/fxfa/app/xfa_ffexclgroup.h | 24 - xfa/src/fxfa/app/xfa_fffield.cpp | 835 --- xfa/src/fxfa/app/xfa_fffield.h | 100 - xfa/src/fxfa/app/xfa_ffimage.cpp | 67 - xfa/src/fxfa/app/xfa_ffimage.h | 25 - xfa/src/fxfa/app/xfa_ffimageedit.cpp | 183 - xfa/src/fxfa/app/xfa_ffimageedit.h | 36 - xfa/src/fxfa/app/xfa_ffnotify.cpp | 648 -- xfa/src/fxfa/app/xfa_ffnotify.h | 99 - xfa/src/fxfa/app/xfa_ffpageview.cpp | 424 -- xfa/src/fxfa/app/xfa_ffpageview.h | 111 - xfa/src/fxfa/app/xfa_ffpath.cpp | 159 - xfa/src/fxfa/app/xfa_ffpath.h | 43 - xfa/src/fxfa/app/xfa_ffpushbutton.cpp | 249 - xfa/src/fxfa/app/xfa_ffpushbutton.h | 50 - xfa/src/fxfa/app/xfa_ffsignature.cpp | 120 - xfa/src/fxfa/app/xfa_ffsignature.h | 43 - xfa/src/fxfa/app/xfa_ffsubform.cpp | 17 - xfa/src/fxfa/app/xfa_ffsubform.h | 19 - xfa/src/fxfa/app/xfa_fftext.cpp | 179 - xfa/src/fxfa/app/xfa_fftext.h | 32 - xfa/src/fxfa/app/xfa_fftextedit.cpp | 796 --- xfa/src/fxfa/app/xfa_fftextedit.h | 138 - xfa/src/fxfa/app/xfa_ffwidget.cpp | 1961 ------ xfa/src/fxfa/app/xfa_ffwidget.h | 187 - xfa/src/fxfa/app/xfa_ffwidgetacc.cpp | 1714 ----- xfa/src/fxfa/app/xfa_ffwidgetacc.h | 44 - xfa/src/fxfa/app/xfa_ffwidgethandler.cpp | 634 -- xfa/src/fxfa/app/xfa_ffwidgethandler.h | 176 - xfa/src/fxfa/app/xfa_fontmgr.cpp | 2089 ------ xfa/src/fxfa/app/xfa_fontmgr.h | 100 - xfa/src/fxfa/app/xfa_fwladapter.cpp | 61 - xfa/src/fxfa/app/xfa_fwladapter.h | 22 - xfa/src/fxfa/app/xfa_fwltheme.cpp | 424 -- xfa/src/fxfa/app/xfa_fwltheme.h | 110 - xfa/src/fxfa/app/xfa_rendercontext.cpp | 77 - xfa/src/fxfa/app/xfa_rendercontext.h | 35 - xfa/src/fxfa/app/xfa_textlayout.cpp | 2001 ------ xfa/src/fxfa/app/xfa_textlayout.h | 425 -- xfa/src/fxfa/fm2js/xfa_error.cpp | 21 - xfa/src/fxfa/fm2js/xfa_error.h | 35 - xfa/src/fxfa/fm2js/xfa_expression.cpp | 627 -- xfa/src/fxfa/fm2js/xfa_expression.h | 191 - xfa/src/fxfa/fm2js/xfa_fm2jsapi.cpp | 65 - xfa/src/fxfa/fm2js/xfa_fm2jsapi.h | 37 - xfa/src/fxfa/fm2js/xfa_fm2jscontext.cpp | 7223 ------------------- xfa/src/fxfa/fm2js/xfa_fm2jscontext.h | 453 -- xfa/src/fxfa/fm2js/xfa_fmparse.cpp | 1051 --- xfa/src/fxfa/fm2js/xfa_fmparse.h | 53 - xfa/src/fxfa/fm2js/xfa_lexer.cpp | 552 -- xfa/src/fxfa/fm2js/xfa_lexer.h | 134 - xfa/src/fxfa/fm2js/xfa_program.cpp | 45 - xfa/src/fxfa/fm2js/xfa_program.h | 28 - xfa/src/fxfa/fm2js/xfa_simpleexpression.cpp | 745 -- xfa/src/fxfa/fm2js/xfa_simpleexpression.h | 292 - xfa/src/fxfa/parser/xfa_basic_data.cpp | 7333 -------------------- xfa/src/fxfa/parser/xfa_basic_data.h | 48 - xfa/src/fxfa/parser/xfa_basic_imp.cpp | 612 -- xfa/src/fxfa/parser/xfa_basic_imp.h | 71 - xfa/src/fxfa/parser/xfa_docdata.h | 36 - xfa/src/fxfa/parser/xfa_doclayout.h | 136 - xfa/src/fxfa/parser/xfa_document.h | 201 - .../parser/xfa_document_datadescription_imp.cpp | 126 - .../fxfa/parser/xfa_document_datadescription_imp.h | 18 - .../fxfa/parser/xfa_document_datamerger_imp.cpp | 1429 ---- xfa/src/fxfa/parser/xfa_document_datamerger_imp.h | 24 - xfa/src/fxfa/parser/xfa_document_imp.cpp | 441 -- xfa/src/fxfa/parser/xfa_document_layout_imp.cpp | 208 - xfa/src/fxfa/parser/xfa_document_layout_imp.h | 49 - xfa/src/fxfa/parser/xfa_document_serialize.cpp | 590 -- xfa/src/fxfa/parser/xfa_document_serialize.h | 40 - xfa/src/fxfa/parser/xfa_layout_appadapter.cpp | 62 - xfa/src/fxfa/parser/xfa_layout_appadapter.h | 77 - xfa/src/fxfa/parser/xfa_layout_itemlayout.cpp | 2968 -------- xfa/src/fxfa/parser/xfa_layout_itemlayout.h | 195 - xfa/src/fxfa/parser/xfa_layout_pagemgr_new.cpp | 1931 ------ xfa/src/fxfa/parser/xfa_layout_pagemgr_new.h | 152 - xfa/src/fxfa/parser/xfa_locale.cpp | 377 - xfa/src/fxfa/parser/xfa_locale.h | 93 - xfa/src/fxfa/parser/xfa_localemgr.cpp | 1305 ---- xfa/src/fxfa/parser/xfa_localemgr.h | 78 - xfa/src/fxfa/parser/xfa_localevalue.cpp | 981 --- xfa/src/fxfa/parser/xfa_localevalue.h | 112 - xfa/src/fxfa/parser/xfa_object.h | 803 --- xfa/src/fxfa/parser/xfa_object_imp.cpp | 5408 --------------- xfa/src/fxfa/parser/xfa_objectacc_imp.cpp | 3760 ---------- xfa/src/fxfa/parser/xfa_parser.h | 38 - xfa/src/fxfa/parser/xfa_parser_imp.cpp | 1568 ----- xfa/src/fxfa/parser/xfa_parser_imp.h | 138 - .../fxfa/parser/xfa_parser_imp_embeddertest.cpp | 15 - xfa/src/fxfa/parser/xfa_script.h | 121 - xfa/src/fxfa/parser/xfa_script_datawindow.cpp | 47 - xfa/src/fxfa/parser/xfa_script_datawindow.h | 34 - .../fxfa/parser/xfa_script_eventpseudomodel.cpp | 269 - xfa/src/fxfa/parser/xfa_script_eventpseudomodel.h | 96 - xfa/src/fxfa/parser/xfa_script_hostpseudomodel.cpp | 800 --- xfa/src/fxfa/parser/xfa_script_hostpseudomodel.h | 89 - xfa/src/fxfa/parser/xfa_script_imp.cpp | 781 --- xfa/src/fxfa/parser/xfa_script_imp.h | 127 - .../fxfa/parser/xfa_script_layoutpseudomodel.cpp | 552 -- xfa/src/fxfa/parser/xfa_script_layoutpseudomodel.h | 64 - xfa/src/fxfa/parser/xfa_script_logpseudomodel.cpp | 33 - xfa/src/fxfa/parser/xfa_script_logpseudomodel.h | 24 - xfa/src/fxfa/parser/xfa_script_nodehelper.cpp | 429 -- xfa/src/fxfa/parser/xfa_script_nodehelper.h | 72 - .../fxfa/parser/xfa_script_resolveprocessor.cpp | 825 --- xfa/src/fxfa/parser/xfa_script_resolveprocessor.h | 86 - .../parser/xfa_script_signaturepseudomodel.cpp | 124 - .../fxfa/parser/xfa_script_signaturepseudomodel.h | 22 - xfa/src/fxfa/parser/xfa_utils.h | 219 - xfa/src/fxfa/parser/xfa_utils_imp.cpp | 403 -- xfa/src/fxfa/parser/xfa_utils_imp_unittest.cpp | 22 - xfa/src/fxgraphics/fx_graphics.cpp | 1548 ----- xfa/src/fxgraphics/fx_path_generator.cpp | 201 - xfa/src/fxgraphics/fx_path_generator.h | 64 - xfa/src/fxgraphics/pre.h | 586 -- xfa/src/fxjse/class.cpp | 348 - xfa/src/fxjse/class.h | 49 - xfa/src/fxjse/context.cpp | 275 - xfa/src/fxjse/context.h | 48 - xfa/src/fxjse/dynprop.cpp | 236 - xfa/src/fxjse/runtime.cpp | 128 - xfa/src/fxjse/runtime.h | 51 - xfa/src/fxjse/scope_inline.h | 108 - xfa/src/fxjse/util_inline.h | 51 - xfa/src/fxjse/value.cpp | 582 -- xfa/src/fxjse/value.h | 241 - 553 files changed, 166540 deletions(-) delete mode 100644 xfa/src/fde/css/fde_css.h delete mode 100644 xfa/src/fde/css/fde_csscache.cpp delete mode 100644 xfa/src/fde/css/fde_csscache.h delete mode 100644 xfa/src/fde/css/fde_cssdatatable.cpp delete mode 100644 xfa/src/fde/css/fde_cssdatatable.h delete mode 100644 xfa/src/fde/css/fde_cssdeclaration.cpp delete mode 100644 xfa/src/fde/css/fde_cssdeclaration.h delete mode 100644 xfa/src/fde/css/fde_cssstyleselector.cpp delete mode 100644 xfa/src/fde/css/fde_cssstyleselector.h delete mode 100644 xfa/src/fde/css/fde_cssstylesheet.cpp delete mode 100644 xfa/src/fde/css/fde_cssstylesheet.h delete mode 100644 xfa/src/fde/css/fde_csssyntax.cpp delete mode 100644 xfa/src/fde/css/fde_csssyntax.h delete mode 100644 xfa/src/fde/fde_brush.h delete mode 100644 xfa/src/fde/fde_devbasic.cpp delete mode 100644 xfa/src/fde/fde_devbasic.h delete mode 100644 xfa/src/fde/fde_gedevice.cpp delete mode 100644 xfa/src/fde/fde_gedevice.h delete mode 100644 xfa/src/fde/fde_geobject.cpp delete mode 100644 xfa/src/fde/fde_geobject.h delete mode 100644 xfa/src/fde/fde_image.h delete mode 100644 xfa/src/fde/fde_iterator.cpp delete mode 100644 xfa/src/fde/fde_iterator.h delete mode 100644 xfa/src/fde/fde_object.cpp delete mode 100644 xfa/src/fde/fde_object.h delete mode 100644 xfa/src/fde/fde_path.h delete mode 100644 xfa/src/fde/fde_pen.h delete mode 100644 xfa/src/fde/fde_render.cpp delete mode 100644 xfa/src/fde/fde_render.h delete mode 100644 xfa/src/fde/fde_renderdevice.h delete mode 100644 xfa/src/fde/fde_visualset.h delete mode 100644 xfa/src/fde/tto/fde_textout.cpp delete mode 100644 xfa/src/fde/tto/fde_textout.h delete mode 100644 xfa/src/fde/xml/fde_xml.h delete mode 100644 xfa/src/fde/xml/fde_xml_imp.cpp delete mode 100644 xfa/src/fde/xml/fde_xml_imp.h delete mode 100644 xfa/src/fee/fde_txtedtbuf.cpp delete mode 100644 xfa/src/fee/fde_txtedtbuf.h delete mode 100644 xfa/src/fee/fde_txtedtengine.cpp delete mode 100644 xfa/src/fee/fde_txtedtengine.h delete mode 100644 xfa/src/fee/fde_txtedtpage.cpp delete mode 100644 xfa/src/fee/fde_txtedtpage.h delete mode 100644 xfa/src/fee/fde_txtedtparag.cpp delete mode 100644 xfa/src/fee/fde_txtedtparag.h delete mode 100644 xfa/src/fee/fx_wordbreak/fx_wordbreak.h delete mode 100644 xfa/src/fee/fx_wordbreak/fx_wordbreak_impl.cpp delete mode 100644 xfa/src/fee/fx_wordbreak/fx_wordbreak_impl.h delete mode 100644 xfa/src/fee/fx_wordbreak/fx_wordbreakdata.cpp delete mode 100644 xfa/src/fee/ifde_txtedtbuf.h delete mode 100644 xfa/src/fee/ifde_txtedtengine.h delete mode 100644 xfa/src/fee/ifde_txtedtpage.h delete mode 100644 xfa/src/fgas/crt/fgas_algorithm.cpp delete mode 100644 xfa/src/fgas/crt/fgas_algorithm.h delete mode 100644 xfa/src/fgas/crt/fgas_codepage.cpp delete mode 100644 xfa/src/fgas/crt/fgas_codepage.h delete mode 100644 xfa/src/fgas/crt/fgas_encode.cpp delete mode 100644 xfa/src/fgas/crt/fgas_language.h delete mode 100644 xfa/src/fgas/crt/fgas_memory.cpp delete mode 100644 xfa/src/fgas/crt/fgas_memory.h delete mode 100644 xfa/src/fgas/crt/fgas_stream.cpp delete mode 100644 xfa/src/fgas/crt/fgas_stream.h delete mode 100644 xfa/src/fgas/crt/fgas_system.cpp delete mode 100644 xfa/src/fgas/crt/fgas_system.h delete mode 100644 xfa/src/fgas/crt/fgas_utils.cpp delete mode 100644 xfa/src/fgas/crt/fgas_utils.h delete mode 100644 xfa/src/fgas/font/fgas_font.h delete mode 100644 xfa/src/fgas/font/fgas_fontutils.cpp delete mode 100644 xfa/src/fgas/font/fgas_fontutils.h delete mode 100644 xfa/src/fgas/font/fgas_gefont.cpp delete mode 100644 xfa/src/fgas/font/fgas_gefont.h delete mode 100644 xfa/src/fgas/font/fgas_stdfontmgr.cpp delete mode 100644 xfa/src/fgas/font/fgas_stdfontmgr.h delete mode 100644 xfa/src/fgas/layout/fgas_linebreak.cpp delete mode 100644 xfa/src/fgas/layout/fgas_linebreak.h delete mode 100644 xfa/src/fgas/layout/fgas_rtfbreak.cpp delete mode 100644 xfa/src/fgas/layout/fgas_rtfbreak.h delete mode 100644 xfa/src/fgas/layout/fgas_textbreak.cpp delete mode 100644 xfa/src/fgas/layout/fgas_textbreak.h delete mode 100644 xfa/src/fgas/layout/fgas_unicode.cpp delete mode 100644 xfa/src/fgas/layout/fgas_unicode.h delete mode 100644 xfa/src/fgas/localization/fgas_datetime.cpp delete mode 100644 xfa/src/fgas/localization/fgas_datetime.h delete mode 100644 xfa/src/fgas/localization/fgas_locale.cpp delete mode 100644 xfa/src/fgas/localization/fgas_locale.h delete mode 100644 xfa/src/fgas/localization/fgas_localeimp.h delete mode 100644 xfa/src/fgas/localization/fgas_localemgr.cpp delete mode 100644 xfa/src/fgas/localization/fgas_localemgr.h delete mode 100644 xfa/src/fgas/xml/fgas_sax.h delete mode 100644 xfa/src/fgas/xml/fgas_sax_imp.cpp delete mode 100644 xfa/src/fgas/xml/fgas_sax_imp.h delete mode 100644 xfa/src/fwl/basewidget/fwl_barcodeimp.cpp delete mode 100644 xfa/src/fwl/basewidget/fwl_barcodeimp.h delete mode 100644 xfa/src/fwl/basewidget/fwl_caretimp.cpp delete mode 100644 xfa/src/fwl/basewidget/fwl_caretimp.h delete mode 100644 xfa/src/fwl/basewidget/fwl_checkboximp.cpp delete mode 100644 xfa/src/fwl/basewidget/fwl_checkboximp.h delete mode 100644 xfa/src/fwl/basewidget/fwl_comboboximp.cpp delete mode 100644 xfa/src/fwl/basewidget/fwl_comboboximp.h delete mode 100644 xfa/src/fwl/basewidget/fwl_datetimepickerimp.cpp delete mode 100644 xfa/src/fwl/basewidget/fwl_datetimepickerimp.h delete mode 100644 xfa/src/fwl/basewidget/fwl_editimp.cpp delete mode 100644 xfa/src/fwl/basewidget/fwl_editimp.h delete mode 100644 xfa/src/fwl/basewidget/fwl_formproxyimp.cpp delete mode 100644 xfa/src/fwl/basewidget/fwl_formproxyimp.h delete mode 100644 xfa/src/fwl/basewidget/fwl_listboximp.cpp delete mode 100644 xfa/src/fwl/basewidget/fwl_listboximp.h delete mode 100644 xfa/src/fwl/basewidget/fwl_monthcalendarimp.cpp delete mode 100644 xfa/src/fwl/basewidget/fwl_monthcalendarimp.h delete mode 100644 xfa/src/fwl/basewidget/fwl_pictureboximp.cpp delete mode 100644 xfa/src/fwl/basewidget/fwl_pictureboximp.h delete mode 100644 xfa/src/fwl/basewidget/fwl_pushbuttonimp.cpp delete mode 100644 xfa/src/fwl/basewidget/fwl_pushbuttonimp.h delete mode 100644 xfa/src/fwl/basewidget/fwl_scrollbarimp.cpp delete mode 100644 xfa/src/fwl/basewidget/fwl_scrollbarimp.h delete mode 100644 xfa/src/fwl/basewidget/fwl_spinbuttonimp.cpp delete mode 100644 xfa/src/fwl/basewidget/fwl_spinbuttonimp.h delete mode 100644 xfa/src/fwl/basewidget/fwl_tooltipctrlimp.cpp delete mode 100644 xfa/src/fwl/basewidget/fwl_tooltipctrlimp.h delete mode 100644 xfa/src/fwl/basewidget/fxmath_barcodeimp.cpp delete mode 100644 xfa/src/fwl/basewidget/fxmath_barcodeimp.h delete mode 100644 xfa/src/fwl/core/fwl_appimp.cpp delete mode 100644 xfa/src/fwl/core/fwl_appimp.h delete mode 100644 xfa/src/fwl/core/fwl_contentimp.cpp delete mode 100644 xfa/src/fwl/core/fwl_contentimp.h delete mode 100644 xfa/src/fwl/core/fwl_formimp.cpp delete mode 100644 xfa/src/fwl/core/fwl_formimp.h delete mode 100644 xfa/src/fwl/core/fwl_gridimp.cpp delete mode 100644 xfa/src/fwl/core/fwl_gridimp.h delete mode 100644 xfa/src/fwl/core/fwl_noteimp.cpp delete mode 100644 xfa/src/fwl/core/fwl_noteimp.h delete mode 100644 xfa/src/fwl/core/fwl_panelimp.cpp delete mode 100644 xfa/src/fwl/core/fwl_panelimp.h delete mode 100644 xfa/src/fwl/core/fwl_sdadapterimp.cpp delete mode 100644 xfa/src/fwl/core/fwl_targetimp.cpp delete mode 100644 xfa/src/fwl/core/fwl_targetimp.h delete mode 100644 xfa/src/fwl/core/fwl_threadimp.cpp delete mode 100644 xfa/src/fwl/core/fwl_threadimp.h delete mode 100644 xfa/src/fwl/core/fwl_timerimp.cpp delete mode 100644 xfa/src/fwl/core/fwl_widgetimp.cpp delete mode 100644 xfa/src/fwl/core/fwl_widgetimp.h delete mode 100644 xfa/src/fwl/core/fwl_widgetmgrimp.cpp delete mode 100644 xfa/src/fwl/core/fwl_widgetmgrimp.h delete mode 100644 xfa/src/fwl/lightwidget/app.cpp delete mode 100644 xfa/src/fwl/lightwidget/barcode.cpp delete mode 100644 xfa/src/fwl/lightwidget/caret.cpp delete mode 100644 xfa/src/fwl/lightwidget/checkbox.cpp delete mode 100644 xfa/src/fwl/lightwidget/combobox.cpp delete mode 100644 xfa/src/fwl/lightwidget/datetimepicker.cpp delete mode 100644 xfa/src/fwl/lightwidget/edit.cpp delete mode 100644 xfa/src/fwl/lightwidget/listbox.cpp delete mode 100644 xfa/src/fwl/lightwidget/picturebox.cpp delete mode 100644 xfa/src/fwl/lightwidget/pushbutton.cpp delete mode 100644 xfa/src/fwl/lightwidget/scrollbar.cpp delete mode 100644 xfa/src/fwl/lightwidget/theme.cpp delete mode 100644 xfa/src/fwl/lightwidget/tooltipctrl.cpp delete mode 100644 xfa/src/fwl/lightwidget/widget.cpp delete mode 100644 xfa/src/fwl/theme/barcodetp.cpp delete mode 100644 xfa/src/fwl/theme/carettp.cpp delete mode 100644 xfa/src/fwl/theme/checkboxtp.cpp delete mode 100644 xfa/src/fwl/theme/comboboxtp.cpp delete mode 100644 xfa/src/fwl/theme/datetimepickertp.cpp delete mode 100644 xfa/src/fwl/theme/edittp.cpp delete mode 100644 xfa/src/fwl/theme/formtp.cpp delete mode 100644 xfa/src/fwl/theme/listboxtp.cpp delete mode 100644 xfa/src/fwl/theme/monthcalendartp.cpp delete mode 100644 xfa/src/fwl/theme/pictureboxtp.cpp delete mode 100644 xfa/src/fwl/theme/pushbuttontp.cpp delete mode 100644 xfa/src/fwl/theme/scrollbartp.cpp delete mode 100644 xfa/src/fwl/theme/widgettp.cpp delete mode 100644 xfa/src/fxbarcode/BC_BarCode.cpp delete mode 100644 xfa/src/fxbarcode/BC_Binarizer.cpp delete mode 100644 xfa/src/fxbarcode/BC_Binarizer.h delete mode 100644 xfa/src/fxbarcode/BC_BinaryBitmap.cpp delete mode 100644 xfa/src/fxbarcode/BC_BinaryBitmap.h delete mode 100644 xfa/src/fxbarcode/BC_BufferedImageLuminanceSource.cpp delete mode 100644 xfa/src/fxbarcode/BC_BufferedImageLuminanceSource.h delete mode 100644 xfa/src/fxbarcode/BC_DecoderResult.h delete mode 100644 xfa/src/fxbarcode/BC_Dimension.cpp delete mode 100644 xfa/src/fxbarcode/BC_Dimension.h delete mode 100644 xfa/src/fxbarcode/BC_Library.cpp delete mode 100644 xfa/src/fxbarcode/BC_LuminanceSource.cpp delete mode 100644 xfa/src/fxbarcode/BC_LuminanceSource.h delete mode 100644 xfa/src/fxbarcode/BC_Reader.cpp delete mode 100644 xfa/src/fxbarcode/BC_Reader.h delete mode 100644 xfa/src/fxbarcode/BC_ResultPoint.cpp delete mode 100644 xfa/src/fxbarcode/BC_ResultPoint.h delete mode 100644 xfa/src/fxbarcode/BC_TwoDimWriter.cpp delete mode 100644 xfa/src/fxbarcode/BC_TwoDimWriter.h delete mode 100644 xfa/src/fxbarcode/BC_UtilCodingConvert.cpp delete mode 100644 xfa/src/fxbarcode/BC_UtilCodingConvert.h delete mode 100644 xfa/src/fxbarcode/BC_UtilRSS.cpp delete mode 100644 xfa/src/fxbarcode/BC_UtilRSS.h delete mode 100644 xfa/src/fxbarcode/BC_Utils.cpp delete mode 100644 xfa/src/fxbarcode/BC_Writer.cpp delete mode 100644 xfa/src/fxbarcode/BC_Writer.h delete mode 100644 xfa/src/fxbarcode/common/BC_CommonBitArray.cpp delete mode 100644 xfa/src/fxbarcode/common/BC_CommonBitArray.h delete mode 100644 xfa/src/fxbarcode/common/BC_CommonBitMatrix.cpp delete mode 100644 xfa/src/fxbarcode/common/BC_CommonBitMatrix.h delete mode 100644 xfa/src/fxbarcode/common/BC_CommonBitSource.cpp delete mode 100644 xfa/src/fxbarcode/common/BC_CommonBitSource.h delete mode 100644 xfa/src/fxbarcode/common/BC_CommonByteArray.cpp delete mode 100644 xfa/src/fxbarcode/common/BC_CommonByteArray.h delete mode 100644 xfa/src/fxbarcode/common/BC_CommonByteMatrix.cpp delete mode 100644 xfa/src/fxbarcode/common/BC_CommonByteMatrix.h delete mode 100644 xfa/src/fxbarcode/common/BC_CommonCharacterSetECI.cpp delete mode 100644 xfa/src/fxbarcode/common/BC_CommonCharacterSetECI.h delete mode 100644 xfa/src/fxbarcode/common/BC_CommonDecoderResult.cpp delete mode 100644 xfa/src/fxbarcode/common/BC_CommonDecoderResult.h delete mode 100644 xfa/src/fxbarcode/common/BC_CommonECI.cpp delete mode 100644 xfa/src/fxbarcode/common/BC_CommonECI.h delete mode 100644 xfa/src/fxbarcode/common/BC_CommonPerspectiveTransform.cpp delete mode 100644 xfa/src/fxbarcode/common/BC_CommonPerspectiveTransform.h delete mode 100644 xfa/src/fxbarcode/common/BC_GlobalHistogramBinarizer.cpp delete mode 100644 xfa/src/fxbarcode/common/BC_GlobalHistogramBinarizer.h delete mode 100644 xfa/src/fxbarcode/common/BC_WhiteRectangleDetector.cpp delete mode 100644 xfa/src/fxbarcode/common/BC_WhiteRectangleDetector.h delete mode 100644 xfa/src/fxbarcode/common/reedsolomon/BC_ReedSolomon.cpp delete mode 100644 xfa/src/fxbarcode/common/reedsolomon/BC_ReedSolomon.h delete mode 100644 xfa/src/fxbarcode/common/reedsolomon/BC_ReedSolomonDecoder.cpp delete mode 100644 xfa/src/fxbarcode/common/reedsolomon/BC_ReedSolomonDecoder.h delete mode 100644 xfa/src/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256.cpp delete mode 100644 xfa/src/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256.h delete mode 100644 xfa/src/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256Poly.cpp delete mode 100644 xfa/src/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256Poly.h delete mode 100644 xfa/src/fxbarcode/datamatrix/BC_ASCIIEncoder.cpp delete mode 100644 xfa/src/fxbarcode/datamatrix/BC_ASCIIEncoder.h delete mode 100644 xfa/src/fxbarcode/datamatrix/BC_Base256Encoder.cpp delete mode 100644 xfa/src/fxbarcode/datamatrix/BC_Base256Encoder.h delete mode 100644 xfa/src/fxbarcode/datamatrix/BC_C40Encoder.cpp delete mode 100644 xfa/src/fxbarcode/datamatrix/BC_C40Encoder.h delete mode 100644 xfa/src/fxbarcode/datamatrix/BC_DataMatrixBitMatrixParser.cpp delete mode 100644 xfa/src/fxbarcode/datamatrix/BC_DataMatrixBitMatrixParser.h delete mode 100644 xfa/src/fxbarcode/datamatrix/BC_DataMatrixDataBlock.cpp delete mode 100644 xfa/src/fxbarcode/datamatrix/BC_DataMatrixDataBlock.h delete mode 100644 xfa/src/fxbarcode/datamatrix/BC_DataMatrixDecodedBitStreamParser.cpp delete mode 100644 xfa/src/fxbarcode/datamatrix/BC_DataMatrixDecodedBitStreamParser.h delete mode 100644 xfa/src/fxbarcode/datamatrix/BC_DataMatrixDecoder.cpp delete mode 100644 xfa/src/fxbarcode/datamatrix/BC_DataMatrixDecoder.h delete mode 100644 xfa/src/fxbarcode/datamatrix/BC_DataMatrixDetector.cpp delete mode 100644 xfa/src/fxbarcode/datamatrix/BC_DataMatrixDetector.h delete mode 100644 xfa/src/fxbarcode/datamatrix/BC_DataMatrixReader.cpp delete mode 100644 xfa/src/fxbarcode/datamatrix/BC_DataMatrixReader.h delete mode 100644 xfa/src/fxbarcode/datamatrix/BC_DataMatrixSymbolInfo144.cpp delete mode 100644 xfa/src/fxbarcode/datamatrix/BC_DataMatrixSymbolInfo144.h delete mode 100644 xfa/src/fxbarcode/datamatrix/BC_DataMatrixVersion.cpp delete mode 100644 xfa/src/fxbarcode/datamatrix/BC_DataMatrixVersion.h delete mode 100644 xfa/src/fxbarcode/datamatrix/BC_DataMatrixWriter.cpp delete mode 100644 xfa/src/fxbarcode/datamatrix/BC_DataMatrixWriter.h delete mode 100644 xfa/src/fxbarcode/datamatrix/BC_DefaultPlacement.cpp delete mode 100644 xfa/src/fxbarcode/datamatrix/BC_DefaultPlacement.h delete mode 100644 xfa/src/fxbarcode/datamatrix/BC_EdifactEncoder.cpp delete mode 100644 xfa/src/fxbarcode/datamatrix/BC_EdifactEncoder.h delete mode 100644 xfa/src/fxbarcode/datamatrix/BC_Encoder.cpp delete mode 100644 xfa/src/fxbarcode/datamatrix/BC_Encoder.h delete mode 100644 xfa/src/fxbarcode/datamatrix/BC_EncoderContext.cpp delete mode 100644 xfa/src/fxbarcode/datamatrix/BC_EncoderContext.h delete mode 100644 xfa/src/fxbarcode/datamatrix/BC_ErrorCorrection.cpp delete mode 100644 xfa/src/fxbarcode/datamatrix/BC_ErrorCorrection.h delete mode 100644 xfa/src/fxbarcode/datamatrix/BC_HighLevelEncoder.cpp delete mode 100644 xfa/src/fxbarcode/datamatrix/BC_HighLevelEncoder.h delete mode 100644 xfa/src/fxbarcode/datamatrix/BC_SymbolInfo.cpp delete mode 100644 xfa/src/fxbarcode/datamatrix/BC_SymbolInfo.h delete mode 100644 xfa/src/fxbarcode/datamatrix/BC_SymbolShapeHint.cpp delete mode 100644 xfa/src/fxbarcode/datamatrix/BC_SymbolShapeHint.h delete mode 100644 xfa/src/fxbarcode/datamatrix/BC_TextEncoder.cpp delete mode 100644 xfa/src/fxbarcode/datamatrix/BC_TextEncoder.h delete mode 100644 xfa/src/fxbarcode/datamatrix/BC_X12Encoder.cpp delete mode 100644 xfa/src/fxbarcode/datamatrix/BC_X12Encoder.h delete mode 100644 xfa/src/fxbarcode/oned/BC_OneDReader.cpp delete mode 100644 xfa/src/fxbarcode/oned/BC_OneDReader.h delete mode 100644 xfa/src/fxbarcode/oned/BC_OneDimReader.cpp delete mode 100644 xfa/src/fxbarcode/oned/BC_OneDimReader.h delete mode 100644 xfa/src/fxbarcode/oned/BC_OneDimWriter.cpp delete mode 100644 xfa/src/fxbarcode/oned/BC_OneDimWriter.h delete mode 100644 xfa/src/fxbarcode/oned/BC_OnedCodaBarReader.cpp delete mode 100644 xfa/src/fxbarcode/oned/BC_OnedCodaBarReader.h delete mode 100644 xfa/src/fxbarcode/oned/BC_OnedCodaBarWriter.cpp delete mode 100644 xfa/src/fxbarcode/oned/BC_OnedCodaBarWriter.h delete mode 100644 xfa/src/fxbarcode/oned/BC_OnedCode128Reader.cpp delete mode 100644 xfa/src/fxbarcode/oned/BC_OnedCode128Reader.h delete mode 100644 xfa/src/fxbarcode/oned/BC_OnedCode128Writer.cpp delete mode 100644 xfa/src/fxbarcode/oned/BC_OnedCode128Writer.h delete mode 100644 xfa/src/fxbarcode/oned/BC_OnedCode39Reader.cpp delete mode 100644 xfa/src/fxbarcode/oned/BC_OnedCode39Reader.h delete mode 100644 xfa/src/fxbarcode/oned/BC_OnedCode39Writer.cpp delete mode 100644 xfa/src/fxbarcode/oned/BC_OnedCode39Writer.h delete mode 100644 xfa/src/fxbarcode/oned/BC_OnedEAN13Reader.cpp delete mode 100644 xfa/src/fxbarcode/oned/BC_OnedEAN13Reader.h delete mode 100644 xfa/src/fxbarcode/oned/BC_OnedEAN13Writer.cpp delete mode 100644 xfa/src/fxbarcode/oned/BC_OnedEAN13Writer.h delete mode 100644 xfa/src/fxbarcode/oned/BC_OnedEAN8Reader.cpp delete mode 100644 xfa/src/fxbarcode/oned/BC_OnedEAN8Reader.h delete mode 100644 xfa/src/fxbarcode/oned/BC_OnedEAN8Writer.cpp delete mode 100644 xfa/src/fxbarcode/oned/BC_OnedEAN8Writer.h delete mode 100644 xfa/src/fxbarcode/oned/BC_OnedUPCAReader.cpp delete mode 100644 xfa/src/fxbarcode/oned/BC_OnedUPCAReader.h delete mode 100644 xfa/src/fxbarcode/oned/BC_OnedUPCAWriter.cpp delete mode 100644 xfa/src/fxbarcode/oned/BC_OnedUPCAWriter.h delete mode 100644 xfa/src/fxbarcode/pdf417/BC_PDF417.cpp delete mode 100644 xfa/src/fxbarcode/pdf417/BC_PDF417.h delete mode 100644 xfa/src/fxbarcode/pdf417/BC_PDF417BarcodeMatrix.cpp delete mode 100644 xfa/src/fxbarcode/pdf417/BC_PDF417BarcodeMatrix.h delete mode 100644 xfa/src/fxbarcode/pdf417/BC_PDF417BarcodeMetadata.cpp delete mode 100644 xfa/src/fxbarcode/pdf417/BC_PDF417BarcodeMetadata.h delete mode 100644 xfa/src/fxbarcode/pdf417/BC_PDF417BarcodeRow.cpp delete mode 100644 xfa/src/fxbarcode/pdf417/BC_PDF417BarcodeRow.h delete mode 100644 xfa/src/fxbarcode/pdf417/BC_PDF417BarcodeValue.cpp delete mode 100644 xfa/src/fxbarcode/pdf417/BC_PDF417BarcodeValue.h delete mode 100644 xfa/src/fxbarcode/pdf417/BC_PDF417BoundingBox.cpp delete mode 100644 xfa/src/fxbarcode/pdf417/BC_PDF417BoundingBox.h delete mode 100644 xfa/src/fxbarcode/pdf417/BC_PDF417Codeword.cpp delete mode 100644 xfa/src/fxbarcode/pdf417/BC_PDF417Codeword.h delete mode 100644 xfa/src/fxbarcode/pdf417/BC_PDF417CodewordDecoder.cpp delete mode 100644 xfa/src/fxbarcode/pdf417/BC_PDF417CodewordDecoder.h delete mode 100644 xfa/src/fxbarcode/pdf417/BC_PDF417Common.cpp delete mode 100644 xfa/src/fxbarcode/pdf417/BC_PDF417Common.h delete mode 100644 xfa/src/fxbarcode/pdf417/BC_PDF417Compaction.cpp delete mode 100644 xfa/src/fxbarcode/pdf417/BC_PDF417Compaction.h delete mode 100644 xfa/src/fxbarcode/pdf417/BC_PDF417DecodedBitStreamParser.cpp delete mode 100644 xfa/src/fxbarcode/pdf417/BC_PDF417DecodedBitStreamParser.h delete mode 100644 xfa/src/fxbarcode/pdf417/BC_PDF417DetectionResult.cpp delete mode 100644 xfa/src/fxbarcode/pdf417/BC_PDF417DetectionResult.h delete mode 100644 xfa/src/fxbarcode/pdf417/BC_PDF417DetectionResultColumn.cpp delete mode 100644 xfa/src/fxbarcode/pdf417/BC_PDF417DetectionResultColumn.h delete mode 100644 xfa/src/fxbarcode/pdf417/BC_PDF417DetectionResultRowIndicatorColumn.cpp delete mode 100644 xfa/src/fxbarcode/pdf417/BC_PDF417DetectionResultRowIndicatorColumn.h delete mode 100644 xfa/src/fxbarcode/pdf417/BC_PDF417Detector.cpp delete mode 100644 xfa/src/fxbarcode/pdf417/BC_PDF417Detector.h delete mode 100644 xfa/src/fxbarcode/pdf417/BC_PDF417DetectorResult.cpp delete mode 100644 xfa/src/fxbarcode/pdf417/BC_PDF417DetectorResult.h delete mode 100644 xfa/src/fxbarcode/pdf417/BC_PDF417Dimensions.cpp delete mode 100644 xfa/src/fxbarcode/pdf417/BC_PDF417Dimensions.h delete mode 100644 xfa/src/fxbarcode/pdf417/BC_PDF417ECErrorCorrection.cpp delete mode 100644 xfa/src/fxbarcode/pdf417/BC_PDF417ECErrorCorrection.h delete mode 100644 xfa/src/fxbarcode/pdf417/BC_PDF417ECModulusGF.cpp delete mode 100644 xfa/src/fxbarcode/pdf417/BC_PDF417ECModulusGF.h delete mode 100644 xfa/src/fxbarcode/pdf417/BC_PDF417ECModulusPoly.cpp delete mode 100644 xfa/src/fxbarcode/pdf417/BC_PDF417ECModulusPoly.h delete mode 100644 xfa/src/fxbarcode/pdf417/BC_PDF417ErrorCorrection.cpp delete mode 100644 xfa/src/fxbarcode/pdf417/BC_PDF417ErrorCorrection.h delete mode 100644 xfa/src/fxbarcode/pdf417/BC_PDF417HighLevelEncoder.cpp delete mode 100644 xfa/src/fxbarcode/pdf417/BC_PDF417HighLevelEncoder.h delete mode 100644 xfa/src/fxbarcode/pdf417/BC_PDF417HighLevelEncoder_unittest.cpp delete mode 100644 xfa/src/fxbarcode/pdf417/BC_PDF417Reader.cpp delete mode 100644 xfa/src/fxbarcode/pdf417/BC_PDF417Reader.h delete mode 100644 xfa/src/fxbarcode/pdf417/BC_PDF417ResultMetadata.cpp delete mode 100644 xfa/src/fxbarcode/pdf417/BC_PDF417ResultMetadata.h delete mode 100644 xfa/src/fxbarcode/pdf417/BC_PDF417ScanningDecoder.cpp delete mode 100644 xfa/src/fxbarcode/pdf417/BC_PDF417ScanningDecoder.h delete mode 100644 xfa/src/fxbarcode/pdf417/BC_PDF417Writer.cpp delete mode 100644 xfa/src/fxbarcode/pdf417/BC_PDF417Writer.h delete mode 100644 xfa/src/fxbarcode/qrcode/BC_FinderPatternInfo.cpp delete mode 100644 xfa/src/fxbarcode/qrcode/BC_FinderPatternInfo.h delete mode 100644 xfa/src/fxbarcode/qrcode/BC_QRAlignmentPattern.cpp delete mode 100644 xfa/src/fxbarcode/qrcode/BC_QRAlignmentPattern.h delete mode 100644 xfa/src/fxbarcode/qrcode/BC_QRAlignmentPatternFinder.cpp delete mode 100644 xfa/src/fxbarcode/qrcode/BC_QRAlignmentPatternFinder.h delete mode 100644 xfa/src/fxbarcode/qrcode/BC_QRBitMatrixParser.cpp delete mode 100644 xfa/src/fxbarcode/qrcode/BC_QRBitMatrixParser.h delete mode 100644 xfa/src/fxbarcode/qrcode/BC_QRCodeReader.cpp delete mode 100644 xfa/src/fxbarcode/qrcode/BC_QRCodeReader.h delete mode 100644 xfa/src/fxbarcode/qrcode/BC_QRCodeWriter.cpp delete mode 100644 xfa/src/fxbarcode/qrcode/BC_QRCodeWriter.h delete mode 100644 xfa/src/fxbarcode/qrcode/BC_QRCoder.cpp delete mode 100644 xfa/src/fxbarcode/qrcode/BC_QRCoder.h delete mode 100644 xfa/src/fxbarcode/qrcode/BC_QRCoderBitVector.cpp delete mode 100644 xfa/src/fxbarcode/qrcode/BC_QRCoderBitVector.h delete mode 100644 xfa/src/fxbarcode/qrcode/BC_QRCoderBlockPair.cpp delete mode 100644 xfa/src/fxbarcode/qrcode/BC_QRCoderBlockPair.h delete mode 100644 xfa/src/fxbarcode/qrcode/BC_QRCoderDecoder.cpp delete mode 100644 xfa/src/fxbarcode/qrcode/BC_QRCoderDecoder.h delete mode 100644 xfa/src/fxbarcode/qrcode/BC_QRCoderECB.cpp delete mode 100644 xfa/src/fxbarcode/qrcode/BC_QRCoderECB.h delete mode 100644 xfa/src/fxbarcode/qrcode/BC_QRCoderECBlocks.cpp delete mode 100644 xfa/src/fxbarcode/qrcode/BC_QRCoderECBlocks.h delete mode 100644 xfa/src/fxbarcode/qrcode/BC_QRCoderEncoder.cpp delete mode 100644 xfa/src/fxbarcode/qrcode/BC_QRCoderEncoder.h delete mode 100644 xfa/src/fxbarcode/qrcode/BC_QRCoderErrorCorrectionLevel.cpp delete mode 100644 xfa/src/fxbarcode/qrcode/BC_QRCoderErrorCorrectionLevel.h delete mode 100644 xfa/src/fxbarcode/qrcode/BC_QRCoderFormatInformation.cpp delete mode 100644 xfa/src/fxbarcode/qrcode/BC_QRCoderFormatInformation.h delete mode 100644 xfa/src/fxbarcode/qrcode/BC_QRCoderMaskUtil.cpp delete mode 100644 xfa/src/fxbarcode/qrcode/BC_QRCoderMaskUtil.h delete mode 100644 xfa/src/fxbarcode/qrcode/BC_QRCoderMatrixUtil.cpp delete mode 100644 xfa/src/fxbarcode/qrcode/BC_QRCoderMatrixUtil.h delete mode 100644 xfa/src/fxbarcode/qrcode/BC_QRCoderMode.cpp delete mode 100644 xfa/src/fxbarcode/qrcode/BC_QRCoderMode.h delete mode 100644 xfa/src/fxbarcode/qrcode/BC_QRCoderVersion.cpp delete mode 100644 xfa/src/fxbarcode/qrcode/BC_QRCoderVersion.h delete mode 100644 xfa/src/fxbarcode/qrcode/BC_QRDataBlock.cpp delete mode 100644 xfa/src/fxbarcode/qrcode/BC_QRDataBlock.h delete mode 100644 xfa/src/fxbarcode/qrcode/BC_QRDataMask.cpp delete mode 100644 xfa/src/fxbarcode/qrcode/BC_QRDataMask.h delete mode 100644 xfa/src/fxbarcode/qrcode/BC_QRDecodedBitStreamParser.cpp delete mode 100644 xfa/src/fxbarcode/qrcode/BC_QRDecodedBitStreamParser.h delete mode 100644 xfa/src/fxbarcode/qrcode/BC_QRDetector.cpp delete mode 100644 xfa/src/fxbarcode/qrcode/BC_QRDetector.h delete mode 100644 xfa/src/fxbarcode/qrcode/BC_QRDetectorResult.cpp delete mode 100644 xfa/src/fxbarcode/qrcode/BC_QRDetectorResult.h delete mode 100644 xfa/src/fxbarcode/qrcode/BC_QRFinderPattern.cpp delete mode 100644 xfa/src/fxbarcode/qrcode/BC_QRFinderPattern.h delete mode 100644 xfa/src/fxbarcode/qrcode/BC_QRFinderPatternFinder.cpp delete mode 100644 xfa/src/fxbarcode/qrcode/BC_QRFinderPatternFinder.h delete mode 100644 xfa/src/fxbarcode/qrcode/BC_QRGridSampler.cpp delete mode 100644 xfa/src/fxbarcode/qrcode/BC_QRGridSampler.h delete mode 100644 xfa/src/fxbarcode/utils.h delete mode 100644 xfa/src/fxfa/app/xfa_checksum.cpp delete mode 100644 xfa/src/fxfa/app/xfa_checksum.h delete mode 100644 xfa/src/fxfa/app/xfa_ffapp.cpp delete mode 100644 xfa/src/fxfa/app/xfa_ffapp.h delete mode 100644 xfa/src/fxfa/app/xfa_ffbarcode.cpp delete mode 100644 xfa/src/fxfa/app/xfa_ffbarcode.h delete mode 100644 xfa/src/fxfa/app/xfa_ffcheckbutton.cpp delete mode 100644 xfa/src/fxfa/app/xfa_ffcheckbutton.h delete mode 100644 xfa/src/fxfa/app/xfa_ffchoicelist.cpp delete mode 100644 xfa/src/fxfa/app/xfa_ffchoicelist.h delete mode 100644 xfa/src/fxfa/app/xfa_ffdoc.cpp delete mode 100644 xfa/src/fxfa/app/xfa_ffdoc.h delete mode 100644 xfa/src/fxfa/app/xfa_ffdochandler.cpp delete mode 100644 xfa/src/fxfa/app/xfa_ffdochandler.h delete mode 100644 xfa/src/fxfa/app/xfa_ffdocview.cpp delete mode 100644 xfa/src/fxfa/app/xfa_ffdocview.h delete mode 100644 xfa/src/fxfa/app/xfa_ffdraw.cpp delete mode 100644 xfa/src/fxfa/app/xfa_ffdraw.h delete mode 100644 xfa/src/fxfa/app/xfa_ffexclgroup.cpp delete mode 100644 xfa/src/fxfa/app/xfa_ffexclgroup.h delete mode 100644 xfa/src/fxfa/app/xfa_fffield.cpp delete mode 100644 xfa/src/fxfa/app/xfa_fffield.h delete mode 100644 xfa/src/fxfa/app/xfa_ffimage.cpp delete mode 100644 xfa/src/fxfa/app/xfa_ffimage.h delete mode 100644 xfa/src/fxfa/app/xfa_ffimageedit.cpp delete mode 100644 xfa/src/fxfa/app/xfa_ffimageedit.h delete mode 100644 xfa/src/fxfa/app/xfa_ffnotify.cpp delete mode 100644 xfa/src/fxfa/app/xfa_ffnotify.h delete mode 100644 xfa/src/fxfa/app/xfa_ffpageview.cpp delete mode 100644 xfa/src/fxfa/app/xfa_ffpageview.h delete mode 100644 xfa/src/fxfa/app/xfa_ffpath.cpp delete mode 100644 xfa/src/fxfa/app/xfa_ffpath.h delete mode 100644 xfa/src/fxfa/app/xfa_ffpushbutton.cpp delete mode 100644 xfa/src/fxfa/app/xfa_ffpushbutton.h delete mode 100644 xfa/src/fxfa/app/xfa_ffsignature.cpp delete mode 100644 xfa/src/fxfa/app/xfa_ffsignature.h delete mode 100644 xfa/src/fxfa/app/xfa_ffsubform.cpp delete mode 100644 xfa/src/fxfa/app/xfa_ffsubform.h delete mode 100644 xfa/src/fxfa/app/xfa_fftext.cpp delete mode 100644 xfa/src/fxfa/app/xfa_fftext.h delete mode 100644 xfa/src/fxfa/app/xfa_fftextedit.cpp delete mode 100644 xfa/src/fxfa/app/xfa_fftextedit.h delete mode 100644 xfa/src/fxfa/app/xfa_ffwidget.cpp delete mode 100644 xfa/src/fxfa/app/xfa_ffwidget.h delete mode 100644 xfa/src/fxfa/app/xfa_ffwidgetacc.cpp delete mode 100644 xfa/src/fxfa/app/xfa_ffwidgetacc.h delete mode 100644 xfa/src/fxfa/app/xfa_ffwidgethandler.cpp delete mode 100644 xfa/src/fxfa/app/xfa_ffwidgethandler.h delete mode 100644 xfa/src/fxfa/app/xfa_fontmgr.cpp delete mode 100644 xfa/src/fxfa/app/xfa_fontmgr.h delete mode 100644 xfa/src/fxfa/app/xfa_fwladapter.cpp delete mode 100644 xfa/src/fxfa/app/xfa_fwladapter.h delete mode 100644 xfa/src/fxfa/app/xfa_fwltheme.cpp delete mode 100644 xfa/src/fxfa/app/xfa_fwltheme.h delete mode 100644 xfa/src/fxfa/app/xfa_rendercontext.cpp delete mode 100644 xfa/src/fxfa/app/xfa_rendercontext.h delete mode 100644 xfa/src/fxfa/app/xfa_textlayout.cpp delete mode 100644 xfa/src/fxfa/app/xfa_textlayout.h delete mode 100644 xfa/src/fxfa/fm2js/xfa_error.cpp delete mode 100644 xfa/src/fxfa/fm2js/xfa_error.h delete mode 100644 xfa/src/fxfa/fm2js/xfa_expression.cpp delete mode 100644 xfa/src/fxfa/fm2js/xfa_expression.h delete mode 100644 xfa/src/fxfa/fm2js/xfa_fm2jsapi.cpp delete mode 100644 xfa/src/fxfa/fm2js/xfa_fm2jsapi.h delete mode 100644 xfa/src/fxfa/fm2js/xfa_fm2jscontext.cpp delete mode 100644 xfa/src/fxfa/fm2js/xfa_fm2jscontext.h delete mode 100644 xfa/src/fxfa/fm2js/xfa_fmparse.cpp delete mode 100644 xfa/src/fxfa/fm2js/xfa_fmparse.h delete mode 100644 xfa/src/fxfa/fm2js/xfa_lexer.cpp delete mode 100644 xfa/src/fxfa/fm2js/xfa_lexer.h delete mode 100644 xfa/src/fxfa/fm2js/xfa_program.cpp delete mode 100644 xfa/src/fxfa/fm2js/xfa_program.h delete mode 100644 xfa/src/fxfa/fm2js/xfa_simpleexpression.cpp delete mode 100644 xfa/src/fxfa/fm2js/xfa_simpleexpression.h delete mode 100644 xfa/src/fxfa/parser/xfa_basic_data.cpp delete mode 100644 xfa/src/fxfa/parser/xfa_basic_data.h delete mode 100644 xfa/src/fxfa/parser/xfa_basic_imp.cpp delete mode 100644 xfa/src/fxfa/parser/xfa_basic_imp.h delete mode 100644 xfa/src/fxfa/parser/xfa_docdata.h delete mode 100644 xfa/src/fxfa/parser/xfa_doclayout.h delete mode 100644 xfa/src/fxfa/parser/xfa_document.h delete mode 100644 xfa/src/fxfa/parser/xfa_document_datadescription_imp.cpp delete mode 100644 xfa/src/fxfa/parser/xfa_document_datadescription_imp.h delete mode 100644 xfa/src/fxfa/parser/xfa_document_datamerger_imp.cpp delete mode 100644 xfa/src/fxfa/parser/xfa_document_datamerger_imp.h delete mode 100644 xfa/src/fxfa/parser/xfa_document_imp.cpp delete mode 100644 xfa/src/fxfa/parser/xfa_document_layout_imp.cpp delete mode 100644 xfa/src/fxfa/parser/xfa_document_layout_imp.h delete mode 100644 xfa/src/fxfa/parser/xfa_document_serialize.cpp delete mode 100644 xfa/src/fxfa/parser/xfa_document_serialize.h delete mode 100644 xfa/src/fxfa/parser/xfa_layout_appadapter.cpp delete mode 100644 xfa/src/fxfa/parser/xfa_layout_appadapter.h delete mode 100644 xfa/src/fxfa/parser/xfa_layout_itemlayout.cpp delete mode 100644 xfa/src/fxfa/parser/xfa_layout_itemlayout.h delete mode 100644 xfa/src/fxfa/parser/xfa_layout_pagemgr_new.cpp delete mode 100644 xfa/src/fxfa/parser/xfa_layout_pagemgr_new.h delete mode 100644 xfa/src/fxfa/parser/xfa_locale.cpp delete mode 100644 xfa/src/fxfa/parser/xfa_locale.h delete mode 100644 xfa/src/fxfa/parser/xfa_localemgr.cpp delete mode 100644 xfa/src/fxfa/parser/xfa_localemgr.h delete mode 100644 xfa/src/fxfa/parser/xfa_localevalue.cpp delete mode 100644 xfa/src/fxfa/parser/xfa_localevalue.h delete mode 100644 xfa/src/fxfa/parser/xfa_object.h delete mode 100644 xfa/src/fxfa/parser/xfa_object_imp.cpp delete mode 100644 xfa/src/fxfa/parser/xfa_objectacc_imp.cpp delete mode 100644 xfa/src/fxfa/parser/xfa_parser.h delete mode 100644 xfa/src/fxfa/parser/xfa_parser_imp.cpp delete mode 100644 xfa/src/fxfa/parser/xfa_parser_imp.h delete mode 100644 xfa/src/fxfa/parser/xfa_parser_imp_embeddertest.cpp delete mode 100644 xfa/src/fxfa/parser/xfa_script.h delete mode 100644 xfa/src/fxfa/parser/xfa_script_datawindow.cpp delete mode 100644 xfa/src/fxfa/parser/xfa_script_datawindow.h delete mode 100644 xfa/src/fxfa/parser/xfa_script_eventpseudomodel.cpp delete mode 100644 xfa/src/fxfa/parser/xfa_script_eventpseudomodel.h delete mode 100644 xfa/src/fxfa/parser/xfa_script_hostpseudomodel.cpp delete mode 100644 xfa/src/fxfa/parser/xfa_script_hostpseudomodel.h delete mode 100644 xfa/src/fxfa/parser/xfa_script_imp.cpp delete mode 100644 xfa/src/fxfa/parser/xfa_script_imp.h delete mode 100644 xfa/src/fxfa/parser/xfa_script_layoutpseudomodel.cpp delete mode 100644 xfa/src/fxfa/parser/xfa_script_layoutpseudomodel.h delete mode 100644 xfa/src/fxfa/parser/xfa_script_logpseudomodel.cpp delete mode 100644 xfa/src/fxfa/parser/xfa_script_logpseudomodel.h delete mode 100644 xfa/src/fxfa/parser/xfa_script_nodehelper.cpp delete mode 100644 xfa/src/fxfa/parser/xfa_script_nodehelper.h delete mode 100644 xfa/src/fxfa/parser/xfa_script_resolveprocessor.cpp delete mode 100644 xfa/src/fxfa/parser/xfa_script_resolveprocessor.h delete mode 100644 xfa/src/fxfa/parser/xfa_script_signaturepseudomodel.cpp delete mode 100644 xfa/src/fxfa/parser/xfa_script_signaturepseudomodel.h delete mode 100644 xfa/src/fxfa/parser/xfa_utils.h delete mode 100644 xfa/src/fxfa/parser/xfa_utils_imp.cpp delete mode 100644 xfa/src/fxfa/parser/xfa_utils_imp_unittest.cpp delete mode 100644 xfa/src/fxgraphics/fx_graphics.cpp delete mode 100644 xfa/src/fxgraphics/fx_path_generator.cpp delete mode 100644 xfa/src/fxgraphics/fx_path_generator.h delete mode 100644 xfa/src/fxgraphics/pre.h delete mode 100644 xfa/src/fxjse/class.cpp delete mode 100644 xfa/src/fxjse/class.h delete mode 100644 xfa/src/fxjse/context.cpp delete mode 100644 xfa/src/fxjse/context.h delete mode 100644 xfa/src/fxjse/dynprop.cpp delete mode 100644 xfa/src/fxjse/runtime.cpp delete mode 100644 xfa/src/fxjse/runtime.h delete mode 100644 xfa/src/fxjse/scope_inline.h delete mode 100644 xfa/src/fxjse/util_inline.h delete mode 100644 xfa/src/fxjse/value.cpp delete mode 100644 xfa/src/fxjse/value.h (limited to 'xfa/src') diff --git a/xfa/src/fde/css/fde_css.h b/xfa/src/fde/css/fde_css.h deleted file mode 100644 index 1e62b66c9a..0000000000 --- a/xfa/src/fde/css/fde_css.h +++ /dev/null @@ -1,1082 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FDE_CSS_FDE_CSS_H_ -#define XFA_SRC_FDE_CSS_FDE_CSS_H_ - -#include "core/include/fxge/fx_dib.h" -#include "xfa/src/fgas/font/fgas_font.h" -#include "xfa/src/fgas/crt/fgas_stream.h" -#include "xfa/src/fgas/crt/fgas_utils.h" - -class IFDE_CSSValue; -class IFDE_CSSValueList; -class IFDE_CSSDeclaration; -class IFDE_CSSSelector; -class IFDE_CSSRule; -class IFDE_CSSStyleSheet; -class IFDE_CSSStyleSheetCache; -class IFDE_CSSSyntaxParser; -class IFDE_CSSRubyStyle; -class IFDE_CSSMultiColumnStyle; -class IFDE_CSSGeneratedContentStyle; -class IFDE_CSSFontStyle; -class IFDE_CSSBoundaryStyle; -class IFDE_CSSPositionStyle; -class IFDE_CSSParagraphStyle; -class IFDE_CSSBackgroundStyle; -class IFDE_CSSListStyle; -class IFDE_CSSTableStyle; -class IFDE_CSSVisualStyle; -class IFDE_CSSComputedStyle; -class IFDE_CSSTagProvider; -class IFDE_CSSAccelerator; -class IFDE_CSSStyleSelector; - -enum FDE_CSSVALUETYPE { - FDE_CSSVALUETYPE_Primitive = 1, - FDE_CSSVALUETYPE_List = 2, - FDE_CSSVALUETYPE_Shorthand, -}; -enum FDE_CSSPRIMITIVETYPE { - FDE_CSSPRIMITIVETYPE_Unknown = 0, - FDE_CSSPRIMITIVETYPE_Number = 1, - FDE_CSSPRIMITIVETYPE_Percent = 2, - FDE_CSSPRIMITIVETYPE_EMS = 3, - FDE_CSSPRIMITIVETYPE_EXS = 4, - FDE_CSSPRIMITIVETYPE_PX = 5, - FDE_CSSPRIMITIVETYPE_CM = 6, - FDE_CSSPRIMITIVETYPE_MM = 7, - FDE_CSSPRIMITIVETYPE_IN = 8, - FDE_CSSPRIMITIVETYPE_PT = 9, - FDE_CSSPRIMITIVETYPE_PC = 10, - FDE_CSSPRIMITIVETYPE_String = 19, - FDE_CSSPRIMITIVETYPE_URI = 20, - FDE_CSSPRIMITIVETYPE_RGB = 25, - FDE_CSSPRIMITIVETYPE_Enum, - FDE_CSSPRIMITIVETYPE_Function, -}; -enum FDE_CSSPROPERTYVALUE { - FDE_CSSPROPERTYVALUE_Bolder, - FDE_CSSPROPERTYVALUE_LowerLatin, - FDE_CSSPROPERTYVALUE_Lowercase, - FDE_CSSPROPERTYVALUE_LowerGreek, - FDE_CSSPROPERTYVALUE_Sesame, - FDE_CSSPROPERTYVALUE_None, - FDE_CSSPROPERTYVALUE_NwResize, - FDE_CSSPROPERTYVALUE_WResize, - FDE_CSSPROPERTYVALUE_Dot, - FDE_CSSPROPERTYVALUE_End, - FDE_CSSPROPERTYVALUE_Ltr, - FDE_CSSPROPERTYVALUE_Pre, - FDE_CSSPROPERTYVALUE_Rtl, - FDE_CSSPROPERTYVALUE_Sub, - FDE_CSSPROPERTYVALUE_Top, - FDE_CSSPROPERTYVALUE_Visible, - FDE_CSSPROPERTYVALUE_Filled, - FDE_CSSPROPERTYVALUE_SwResize, - FDE_CSSPROPERTYVALUE_NoRepeat, - FDE_CSSPROPERTYVALUE_Default, - FDE_CSSPROPERTYVALUE_Transparent, - FDE_CSSPROPERTYVALUE_Ridge, - FDE_CSSPROPERTYVALUE_Right, - FDE_CSSPROPERTYVALUE_HorizontalTb, - FDE_CSSPROPERTYVALUE_DistributeLetter, - FDE_CSSPROPERTYVALUE_DoubleCircle, - FDE_CSSPROPERTYVALUE_Ruby, - FDE_CSSPROPERTYVALUE_Collapse, - FDE_CSSPROPERTYVALUE_Normal, - FDE_CSSPROPERTYVALUE_Avoid, - FDE_CSSPROPERTYVALUE_UpperRoman, - FDE_CSSPROPERTYVALUE_Auto, - FDE_CSSPROPERTYVALUE_Text, - FDE_CSSPROPERTYVALUE_XSmall, - FDE_CSSPROPERTYVALUE_Thin, - FDE_CSSPROPERTYVALUE_Repeat, - FDE_CSSPROPERTYVALUE_Small, - FDE_CSSPROPERTYVALUE_NeResize, - FDE_CSSPROPERTYVALUE_NoContent, - FDE_CSSPROPERTYVALUE_Outside, - FDE_CSSPROPERTYVALUE_EResize, - FDE_CSSPROPERTYVALUE_TableRow, - FDE_CSSPROPERTYVALUE_Bottom, - FDE_CSSPROPERTYVALUE_Underline, - FDE_CSSPROPERTYVALUE_CjkIdeographic, - FDE_CSSPROPERTYVALUE_SeResize, - FDE_CSSPROPERTYVALUE_Fixed, - FDE_CSSPROPERTYVALUE_Double, - FDE_CSSPROPERTYVALUE_Solid, - FDE_CSSPROPERTYVALUE_RubyBaseGroup, - FDE_CSSPROPERTYVALUE_OpenQuote, - FDE_CSSPROPERTYVALUE_Lighter, - FDE_CSSPROPERTYVALUE_LowerRoman, - FDE_CSSPROPERTYVALUE_Strict, - FDE_CSSPROPERTYVALUE_TableCaption, - FDE_CSSPROPERTYVALUE_Oblique, - FDE_CSSPROPERTYVALUE_Decimal, - FDE_CSSPROPERTYVALUE_Loose, - FDE_CSSPROPERTYVALUE_Hebrew, - FDE_CSSPROPERTYVALUE_Hidden, - FDE_CSSPROPERTYVALUE_Dashed, - FDE_CSSPROPERTYVALUE_Embed, - FDE_CSSPROPERTYVALUE_TableRowGroup, - FDE_CSSPROPERTYVALUE_TableColumn, - FDE_CSSPROPERTYVALUE_Static, - FDE_CSSPROPERTYVALUE_Outset, - FDE_CSSPROPERTYVALUE_DecimalLeadingZero, - FDE_CSSPROPERTYVALUE_KeepWords, - FDE_CSSPROPERTYVALUE_KatakanaIroha, - FDE_CSSPROPERTYVALUE_Super, - FDE_CSSPROPERTYVALUE_Center, - FDE_CSSPROPERTYVALUE_TableHeaderGroup, - FDE_CSSPROPERTYVALUE_Inside, - FDE_CSSPROPERTYVALUE_XxLarge, - FDE_CSSPROPERTYVALUE_Triangle, - FDE_CSSPROPERTYVALUE_RubyTextGroup, - FDE_CSSPROPERTYVALUE_Circle, - FDE_CSSPROPERTYVALUE_Hiragana, - FDE_CSSPROPERTYVALUE_RepeatX, - FDE_CSSPROPERTYVALUE_RepeatY, - FDE_CSSPROPERTYVALUE_Move, - FDE_CSSPROPERTYVALUE_HiraganaIroha, - FDE_CSSPROPERTYVALUE_RubyBase, - FDE_CSSPROPERTYVALUE_Scroll, - FDE_CSSPROPERTYVALUE_Smaller, - FDE_CSSPROPERTYVALUE_TableFooterGroup, - FDE_CSSPROPERTYVALUE_Baseline, - FDE_CSSPROPERTYVALUE_Separate, - FDE_CSSPROPERTYVALUE_Armenian, - FDE_CSSPROPERTYVALUE_Open, - FDE_CSSPROPERTYVALUE_Relative, - FDE_CSSPROPERTYVALUE_Thick, - FDE_CSSPROPERTYVALUE_Justify, - FDE_CSSPROPERTYVALUE_Middle, - FDE_CSSPROPERTYVALUE_Always, - FDE_CSSPROPERTYVALUE_DistributeSpace, - FDE_CSSPROPERTYVALUE_LineEdge, - FDE_CSSPROPERTYVALUE_PreWrap, - FDE_CSSPROPERTYVALUE_Medium, - FDE_CSSPROPERTYVALUE_NResize, - FDE_CSSPROPERTYVALUE_ListItem, - FDE_CSSPROPERTYVALUE_Show, - FDE_CSSPROPERTYVALUE_Currentcolor, - FDE_CSSPROPERTYVALUE_NoCloseQuote, - FDE_CSSPROPERTYVALUE_VerticalLr, - FDE_CSSPROPERTYVALUE_VerticalRl, - FDE_CSSPROPERTYVALUE_Pointer, - FDE_CSSPROPERTYVALUE_XxSmall, - FDE_CSSPROPERTYVALUE_Bold, - FDE_CSSPROPERTYVALUE_Both, - FDE_CSSPROPERTYVALUE_SmallCaps, - FDE_CSSPROPERTYVALUE_Katakana, - FDE_CSSPROPERTYVALUE_After, - FDE_CSSPROPERTYVALUE_Horizontal, - FDE_CSSPROPERTYVALUE_Dotted, - FDE_CSSPROPERTYVALUE_Disc, - FDE_CSSPROPERTYVALUE_Georgian, - FDE_CSSPROPERTYVALUE_Inline, - FDE_CSSPROPERTYVALUE_Overline, - FDE_CSSPROPERTYVALUE_Wait, - FDE_CSSPROPERTYVALUE_BreakAll, - FDE_CSSPROPERTYVALUE_UpperAlpha, - FDE_CSSPROPERTYVALUE_Capitalize, - FDE_CSSPROPERTYVALUE_Nowrap, - FDE_CSSPROPERTYVALUE_TextBottom, - FDE_CSSPROPERTYVALUE_NoOpenQuote, - FDE_CSSPROPERTYVALUE_Groove, - FDE_CSSPROPERTYVALUE_Progress, - FDE_CSSPROPERTYVALUE_Larger, - FDE_CSSPROPERTYVALUE_CloseQuote, - FDE_CSSPROPERTYVALUE_TableCell, - FDE_CSSPROPERTYVALUE_PreLine, - FDE_CSSPROPERTYVALUE_Absolute, - FDE_CSSPROPERTYVALUE_InlineTable, - FDE_CSSPROPERTYVALUE_BidiOverride, - FDE_CSSPROPERTYVALUE_InlineBlock, - FDE_CSSPROPERTYVALUE_Inset, - FDE_CSSPROPERTYVALUE_Crosshair, - FDE_CSSPROPERTYVALUE_UpperLatin, - FDE_CSSPROPERTYVALUE_Help, - FDE_CSSPROPERTYVALUE_Hide, - FDE_CSSPROPERTYVALUE_Uppercase, - FDE_CSSPROPERTYVALUE_SResize, - FDE_CSSPROPERTYVALUE_Table, - FDE_CSSPROPERTYVALUE_Blink, - FDE_CSSPROPERTYVALUE_Block, - FDE_CSSPROPERTYVALUE_Start, - FDE_CSSPROPERTYVALUE_TableColumnGroup, - FDE_CSSPROPERTYVALUE_Italic, - FDE_CSSPROPERTYVALUE_LineThrough, - FDE_CSSPROPERTYVALUE_KeepAll, - FDE_CSSPROPERTYVALUE_LowerAlpha, - FDE_CSSPROPERTYVALUE_RunIn, - FDE_CSSPROPERTYVALUE_Square, - FDE_CSSPROPERTYVALUE_XLarge, - FDE_CSSPROPERTYVALUE_Large, - FDE_CSSPROPERTYVALUE_Before, - FDE_CSSPROPERTYVALUE_Left, - FDE_CSSPROPERTYVALUE_TextTop, - FDE_CSSPROPERTYVALUE_RubyText, - FDE_CSSPROPERTYVALUE_NoDisplay, - FDE_CSSPROPERTYVALUE_MAX -}; -class IFDE_CSSValue { - public: - virtual ~IFDE_CSSValue() {} - virtual FDE_CSSVALUETYPE GetType() const = 0; -}; -class IFDE_CSSPrimitiveValue : public IFDE_CSSValue { - public: - virtual FDE_CSSVALUETYPE GetType() const { - return FDE_CSSVALUETYPE_Primitive; - } - virtual FDE_CSSPRIMITIVETYPE GetPrimitiveType() const = 0; - virtual FX_ARGB GetRGBColor() const = 0; - virtual FX_FLOAT GetFloat() const = 0; - virtual const FX_WCHAR* GetString(int32_t& iLength) const = 0; - virtual FDE_CSSPROPERTYVALUE GetEnum() const = 0; - virtual const FX_WCHAR* GetFuncName() const = 0; - virtual int32_t CountArgs() const = 0; - virtual IFDE_CSSValue* GetArgs(int32_t index) const = 0; -}; -class IFDE_CSSValueList : public IFDE_CSSValue { - public: - virtual FDE_CSSVALUETYPE GetType() const { return FDE_CSSVALUETYPE_List; } - virtual int32_t CountValues() const = 0; - virtual IFDE_CSSValue* GetValue(int32_t index) const = 0; -}; -enum FDE_CSSPROPERTY { - FDE_CSSPROPERTY_WritingMode, - FDE_CSSPROPERTY_ColumnRuleWidth, - FDE_CSSPROPERTY_BorderLeft, - FDE_CSSPROPERTY_ColumnRule, - FDE_CSSPROPERTY_Height, - FDE_CSSPROPERTY_CounterReset, - FDE_CSSPROPERTY_Content, - FDE_CSSPROPERTY_RubyPosition, - FDE_CSSPROPERTY_BackgroundColor, - FDE_CSSPROPERTY_Width, - FDE_CSSPROPERTY_Src, - FDE_CSSPROPERTY_Top, - FDE_CSSPROPERTY_Margin, - FDE_CSSPROPERTY_BorderColor, - FDE_CSSPROPERTY_Widows, - FDE_CSSPROPERTY_BorderBottomColor, - FDE_CSSPROPERTY_TextIndent, - FDE_CSSPROPERTY_Right, - FDE_CSSPROPERTY_TextEmphasisStyle, - FDE_CSSPROPERTY_PaddingLeft, - FDE_CSSPROPERTY_ColumnWidth, - FDE_CSSPROPERTY_MarginLeft, - FDE_CSSPROPERTY_Border, - FDE_CSSPROPERTY_BorderTop, - FDE_CSSPROPERTY_RubyOverhang, - FDE_CSSPROPERTY_PageBreakBefore, - FDE_CSSPROPERTY_MaxHeight, - FDE_CSSPROPERTY_MinWidth, - FDE_CSSPROPERTY_BorderLeftColor, - FDE_CSSPROPERTY_Bottom, - FDE_CSSPROPERTY_Quotes, - FDE_CSSPROPERTY_MaxWidth, - FDE_CSSPROPERTY_PaddingRight, - FDE_CSSPROPERTY_ListStyleImage, - FDE_CSSPROPERTY_WhiteSpace, - FDE_CSSPROPERTY_BorderBottom, - FDE_CSSPROPERTY_ListStyleType, - FDE_CSSPROPERTY_WordBreak, - FDE_CSSPROPERTY_OverflowX, - FDE_CSSPROPERTY_OverflowY, - FDE_CSSPROPERTY_BorderTopColor, - FDE_CSSPROPERTY_FontFamily, - FDE_CSSPROPERTY_Cursor, - FDE_CSSPROPERTY_RubyAlign, - FDE_CSSPROPERTY_ColumnRuleColor, - FDE_CSSPROPERTY_FontWeight, - FDE_CSSPROPERTY_BorderRightStyle, - FDE_CSSPROPERTY_MinHeight, - FDE_CSSPROPERTY_Color, - FDE_CSSPROPERTY_LetterSpacing, - FDE_CSSPROPERTY_EmptyCells, - FDE_CSSPROPERTY_TextAlign, - FDE_CSSPROPERTY_RubySpan, - FDE_CSSPROPERTY_Position, - FDE_CSSPROPERTY_BorderStyle, - FDE_CSSPROPERTY_BorderBottomStyle, - FDE_CSSPROPERTY_BorderCollapse, - FDE_CSSPROPERTY_ColumnCount, - FDE_CSSPROPERTY_BorderRightWidth, - FDE_CSSPROPERTY_UnicodeBidi, - FDE_CSSPROPERTY_VerticalAlign, - FDE_CSSPROPERTY_PaddingTop, - FDE_CSSPROPERTY_Columns, - FDE_CSSPROPERTY_Overflow, - FDE_CSSPROPERTY_TableLayout, - FDE_CSSPROPERTY_FontVariant, - FDE_CSSPROPERTY_ListStyle, - FDE_CSSPROPERTY_BackgroundPosition, - FDE_CSSPROPERTY_BorderWidth, - FDE_CSSPROPERTY_TextEmphasisColor, - FDE_CSSPROPERTY_BorderLeftStyle, - FDE_CSSPROPERTY_PageBreakInside, - FDE_CSSPROPERTY_TextEmphasis, - FDE_CSSPROPERTY_BorderBottomWidth, - FDE_CSSPROPERTY_ColumnGap, - FDE_CSSPROPERTY_Orphans, - FDE_CSSPROPERTY_BorderRight, - FDE_CSSPROPERTY_FontSize, - FDE_CSSPROPERTY_PageBreakAfter, - FDE_CSSPROPERTY_CaptionSide, - FDE_CSSPROPERTY_BackgroundRepeat, - FDE_CSSPROPERTY_BorderTopStyle, - FDE_CSSPROPERTY_BorderSpacing, - FDE_CSSPROPERTY_TextTransform, - FDE_CSSPROPERTY_FontStyle, - FDE_CSSPROPERTY_Font, - FDE_CSSPROPERTY_LineHeight, - FDE_CSSPROPERTY_MarginRight, - FDE_CSSPROPERTY_Float, - FDE_CSSPROPERTY_BorderLeftWidth, - FDE_CSSPROPERTY_Display, - FDE_CSSPROPERTY_Clear, - FDE_CSSPROPERTY_ColumnRuleStyle, - FDE_CSSPROPERTY_TextCombine, - FDE_CSSPROPERTY_ListStylePosition, - FDE_CSSPROPERTY_Visibility, - FDE_CSSPROPERTY_PaddingBottom, - FDE_CSSPROPERTY_BackgroundAttachment, - FDE_CSSPROPERTY_BackgroundImage, - FDE_CSSPROPERTY_LineBreak, - FDE_CSSPROPERTY_Background, - FDE_CSSPROPERTY_BorderTopWidth, - FDE_CSSPROPERTY_WordSpacing, - FDE_CSSPROPERTY_BorderRightColor, - FDE_CSSPROPERTY_CounterIncrement, - FDE_CSSPROPERTY_Left, - FDE_CSSPROPERTY_TextDecoration, - FDE_CSSPROPERTY_Padding, - FDE_CSSPROPERTY_MarginBottom, - FDE_CSSPROPERTY_MarginTop, - FDE_CSSPROPERTY_Direction, - FDE_CSSPROPERTY_MAX -}; -class IFDE_CSSDeclaration { - public: - virtual ~IFDE_CSSDeclaration() {} - virtual IFDE_CSSValue* GetProperty(FDE_CSSPROPERTY eProperty, - FX_BOOL& bImportant) const = 0; - virtual FX_POSITION GetStartPosition() const = 0; - virtual void GetNextProperty(FX_POSITION& pos, - FDE_CSSPROPERTY& eProperty, - IFDE_CSSValue*& pValue, - FX_BOOL& bImportant) const = 0; - virtual FX_POSITION GetStartCustom() const = 0; - virtual void GetNextCustom(FX_POSITION& pos, - CFX_WideString& wsName, - CFX_WideString& wsValue) const = 0; -}; -typedef CFX_ArrayTemplate CFDE_CSSDeclarationArray; -enum FDE_CSSPERSUDO { - FDE_CSSPERSUDO_After, - FDE_CSSPERSUDO_Before, - FDE_CSSPERSUDO_NONE -}; -enum FDE_CSSSELECTORTYPE { - FDE_CSSSELECTORTYPE_Element, - FDE_CSSSELECTORTYPE_Descendant, - FDE_CSSSELECTORTYPE_Class, - FDE_CSSSELECTORTYPE_Persudo, - FDE_CSSSELECTORTYPE_ID, -}; -class IFDE_CSSSelector { - public: - virtual ~IFDE_CSSSelector() {} - virtual FDE_CSSSELECTORTYPE GetType() const = 0; - virtual FX_DWORD GetNameHash() const = 0; - virtual IFDE_CSSSelector* GetNextSelector() const = 0; -}; -#define FDE_CSSMEDIATYPE_Braille 0x01 -#define FDE_CSSMEDIATYPE_Emboss 0x02 -#define FDE_CSSMEDIATYPE_Handheld 0x04 -#define FDE_CSSMEDIATYPE_Print 0x08 -#define FDE_CSSMEDIATYPE_Projection 0x10 -#define FDE_CSSMEDIATYPE_Screen 0x20 -#define FDE_CSSMEDIATYPE_TTY 0x40 -#define FDE_CSSMEDIATYPE_TV 0x80 -#define FDE_CSSMEDIATYPE_ALL 0xFF -enum FDE_CSSRULETYPE { - FDE_CSSRULETYPE_Unknown = 0, - FDE_CSSRULETYPE_Style = 1, - FDE_CSSRULETYPE_Media = 4, - FDE_CSSRULETYPE_FontFace = 5, -}; -class IFDE_CSSRule { - public: - virtual ~IFDE_CSSRule() {} - virtual FDE_CSSRULETYPE GetType() const = 0; -}; -typedef CFX_MassArrayTemplate CFDE_CSSRuleArray; -class IFDE_CSSStyleRule : public IFDE_CSSRule { - public: - virtual FDE_CSSRULETYPE GetType() const { return FDE_CSSRULETYPE_Style; } - virtual int32_t CountSelectorLists() const = 0; - virtual IFDE_CSSSelector* GetSelectorList(int32_t index) const = 0; - virtual IFDE_CSSDeclaration* GetDeclaration() const = 0; -}; -class IFDE_CSSMediaRule : public IFDE_CSSRule { - public: - virtual FDE_CSSRULETYPE GetType() const { return FDE_CSSRULETYPE_Media; } - virtual FX_DWORD GetMediaList() const = 0; - virtual int32_t CountRules() const = 0; - virtual IFDE_CSSRule* GetRule(int32_t index) = 0; -}; -class IFDE_CSSFontFaceRule : public IFDE_CSSRule { - public: - virtual FDE_CSSRULETYPE GetType() const { return FDE_CSSRULETYPE_FontFace; } - virtual IFDE_CSSDeclaration* GetDeclaration() const = 0; -}; -class IFDE_CSSStyleSheet : public IFX_Unknown { - public: - static IFDE_CSSStyleSheet* LoadHTMLStandardStyleSheet(); - static IFDE_CSSStyleSheet* LoadFromStream( - const CFX_WideString& szUrl, - IFX_Stream* pStream, - FX_WORD wCodePage, - FX_DWORD dwMediaList = FDE_CSSMEDIATYPE_ALL); - static IFDE_CSSStyleSheet* LoadFromBuffer( - const CFX_WideString& szUrl, - const FX_WCHAR* pBuffer, - int32_t iBufSize, - FX_WORD wCodePage, - FX_DWORD dwMediaList = FDE_CSSMEDIATYPE_ALL); - virtual FX_BOOL GetUrl(CFX_WideString& szUrl) = 0; - virtual FX_DWORD GetMediaList() const = 0; - virtual FX_WORD GetCodePage() const = 0; - - virtual int32_t CountRules() const = 0; - virtual IFDE_CSSRule* GetRule(int32_t index) = 0; -}; -typedef CFX_ArrayTemplate CFDE_CSSStyleSheetArray; -#define FDE_CSSUSERSTYLESHEET (FX_BSTRC("#USERSHEET")) -#define FDE_CSSUAGENTSTYLESHEET (FX_BSTRC("#AGENTSHEET")) -class IFDE_CSSStyleSheetCache { - public: - static IFDE_CSSStyleSheetCache* Create(); - virtual ~IFDE_CSSStyleSheetCache() {} - virtual void Release() = 0; - virtual void SetMaxItems(int32_t iMaxCount = 5) = 0; - virtual void AddStyleSheet(const CFX_ByteStringC& szKey, - IFDE_CSSStyleSheet* pStyleSheet) = 0; - virtual IFDE_CSSStyleSheet* GetStyleSheet( - const CFX_ByteStringC& szKey) const = 0; - virtual void RemoveStyleSheet(const CFX_ByteStringC& szKey) = 0; -}; -enum FDE_CSSSYNTAXSTATUS { - FDE_CSSSYNTAXSTATUS_Error, - FDE_CSSSYNTAXSTATUS_EOS, - FDE_CSSSYNTAXSTATUS_None, - FDE_CSSSYNTAXSTATUS_Charset, - FDE_CSSSYNTAXSTATUS_ImportRule, - FDE_CSSSYNTAXSTATUS_ImportClose, - FDE_CSSSYNTAXSTATUS_PageRule, - FDE_CSSSYNTAXSTATUS_StyleRule, - FDE_CSSSYNTAXSTATUS_FontFaceRule, - FDE_CSSSYNTAXSTATUS_MediaRule, - FDE_CSSSYNTAXSTATUS_MediaType, - FDE_CSSSYNTAXSTATUS_URI, - FDE_CSSSYNTAXSTATUS_Selector, - FDE_CSSSYNTAXSTATUS_DeclOpen, - FDE_CSSSYNTAXSTATUS_DeclClose, - FDE_CSSSYNTAXSTATUS_PropertyName, - FDE_CSSSYNTAXSTATUS_PropertyValue, -}; -class IFDE_CSSSyntaxParser { - public: - static IFDE_CSSSyntaxParser* Create(); - virtual ~IFDE_CSSSyntaxParser() {} - virtual void Release() = 0; - virtual FX_BOOL Init(IFX_Stream* pStream, - int32_t iCSSPlaneSize, - int32_t iTextDataSize = 32, - FX_BOOL bOnlyDeclaration = FALSE) = 0; - virtual FX_BOOL Init(const FX_WCHAR* pBuffer, - int32_t iBufferSize, - int32_t iTextDatSize = 32, - FX_BOOL bOnlyDeclaration = FALSE) = 0; - - virtual FDE_CSSSYNTAXSTATUS DoSyntaxParse() = 0; - virtual const FX_WCHAR* GetCurrentString(int32_t& iLength) const = 0; -}; -enum FDE_CSSLENGTHUNIT { - FDE_CSSLENGTHUNIT_Auto, - FDE_CSSLENGTHUNIT_None, - FDE_CSSLENGTHUNIT_Normal, - FDE_CSSLENGTHUNIT_Point, - FDE_CSSLENGTHUNIT_Percent, -}; -#define FDE_CSSUNITBITS (3) -#define FDE_CSSUNITMASK ((1 << FDE_CSSUNITBITS) - 1) -struct FDE_CSSLENGTH { - FDE_CSSLENGTH& Set(FDE_CSSLENGTHUNIT eUnit) { - m_iData = eUnit; - return *this; - } - FDE_CSSLENGTH& Set(FDE_CSSLENGTHUNIT eUnit, FX_FLOAT fValue) { - m_iData = ((intptr_t)(fValue * 1024.0f) << FDE_CSSUNITBITS) | eUnit; - return *this; - } - FDE_CSSLENGTHUNIT GetUnit() const { - return (FDE_CSSLENGTHUNIT)(m_iData & FDE_CSSUNITMASK); - } - FX_FLOAT GetValue() const { return (m_iData >> FDE_CSSUNITBITS) / 1024.0f; } - FX_BOOL NonZero() const { return (m_iData >> FDE_CSSUNITBITS) != 0; } - - private: - intptr_t m_iData; -}; -struct FDE_CSSPOINT { - FDE_CSSPOINT& Set(FDE_CSSLENGTHUNIT eUnit) { - x.Set(eUnit); - y.Set(eUnit); - return *this; - } - FDE_CSSPOINT& Set(FDE_CSSLENGTHUNIT eUnit, FX_FLOAT fValue) { - x.Set(eUnit, fValue); - y.Set(eUnit, fValue); - return *this; - } - FDE_CSSLENGTH x, y; -}; -struct FDE_CSSSIZE { - FDE_CSSSIZE& Set(FDE_CSSLENGTHUNIT eUnit) { - cx.Set(eUnit); - cy.Set(eUnit); - return *this; - } - FDE_CSSSIZE& Set(FDE_CSSLENGTHUNIT eUnit, FX_FLOAT fValue) { - cx.Set(eUnit, fValue); - cy.Set(eUnit, fValue); - return *this; - } - FDE_CSSLENGTH cx, cy; -}; -struct FDE_CSSRECT { - FDE_CSSRECT& Set(FDE_CSSLENGTHUNIT eUnit) { - left.Set(eUnit); - top.Set(eUnit); - right.Set(eUnit); - bottom.Set(eUnit); - return *this; - } - FDE_CSSRECT& Set(FDE_CSSLENGTHUNIT eUnit, FX_FLOAT fValue) { - left.Set(eUnit, fValue); - top.Set(eUnit, fValue); - right.Set(eUnit, fValue); - bottom.Set(eUnit, fValue); - return *this; - } - - FDE_CSSLENGTH left, top, right, bottom; -}; -enum FDE_CSSBKGATTACHMENT { - FDE_CSSBKGATTACHMENT_Scroll, - FDE_CSSBKGATTACHMENT_Fixed, -}; -enum FDE_CSSBKGREPEAT { - FDE_CSSBKGREPEAT_Repeat, - FDE_CSSBKGREPEAT_RepeatX, - FDE_CSSBKGREPEAT_RepeatY, - FDE_CSSBKGREPEAT_NoRepeat, -}; -enum FDE_CSSBORDERSTYLE { - FDE_CSSBORDERSTYLE_None, - FDE_CSSBORDERSTYLE_Hidden, - FDE_CSSBORDERSTYLE_Dotted, - FDE_CSSBORDERSTYLE_Dashed, - FDE_CSSBORDERSTYLE_Solid, - FDE_CSSBORDERSTYLE_Double, - FDE_CSSBORDERSTYLE_Groove, - FDE_CSSBORDERSTYLE_Ridge, - FDE_CSSBORDERSTYLE_Inset, - FDE_CSSBORDERSTYLE_outset, -}; -enum FDE_CSSCLEAR { - FDE_CSSCLEAR_None, - FDE_CSSCLEAR_Left, - FDE_CSSCLEAR_Right, - FDE_CSSCLEAR_Both, -}; -enum FDE_CSSDISPLAY { - FDE_CSSDISPLAY_None, - FDE_CSSDISPLAY_ListItem, - FDE_CSSDISPLAY_RunIn, - FDE_CSSDISPLAY_Block, - FDE_CSSDISPLAY_Inline, - FDE_CSSDISPLAY_InlineBlock, - FDE_CSSDISPLAY_InlineTable, - FDE_CSSDISPLAY_Table, - FDE_CSSDISPLAY_TableRow, - FDE_CSSDISPLAY_TableCell, - FDE_CSSDISPLAY_TableCaption, - FDE_CSSDISPLAY_TableColumn, - FDE_CSSDISPLAY_TableRowGroup, - FDE_CSSDISPLAY_TableColumnGroup, - FDE_CSSDISPLAY_TableHeaderGroup, - FDE_CSSDISPLAY_TableFooterGroup, - FDE_CSSDISPLAY_Ruby, - FDE_CSSDISPLAY_RubyBase, - FDE_CSSDISPLAY_RubyText, - FDE_CSSDISPLSY_RubyBaseGroup, - FDE_CSSDISPLAY_RubyTextGroup, -}; -enum FDE_CSSVISIBILITY { - FDE_CSSVISIBILITY_Visible, - FDE_CSSVISIBILITY_Hidden, - FDE_CSSVISIBILITY_Collapse, -}; -enum FDE_CSSFONTSTYLE { - FDE_CSSFONTSTYLE_Normal, - FDE_CSSFONTSTYLE_Italic, -}; -enum FDE_CSSFLOAT { - FDE_CSSFLOAT_None, - FDE_CSSFLOAT_Left, - FDE_CSSFLOAT_Right, -}; -enum FDE_CSSWRITINGMODE { - FDE_CSSWRITINGMODE_HorizontalTb, - FDE_CSSWRITINGMODE_VerticalRl, - FDE_CSSWRITINGMODE_VerticalLr, -}; -enum FDE_CSSWORDBREAK { - FDE_CSSWORDBREAK_Normal, - FDE_CSSWORDBREAK_KeepAll, - FDE_CSSWORDBREAK_BreakAll, - FDE_CSSWORDBREAK_KeepWords, -}; -enum FDE_CSSPAGEBREAK { - FDE_CSSPAGEBREAK_Auto, - FDE_CSSPAGEBREAK_Always, - FDE_CSSPAGEBREAK_Avoid, - FDE_CSSPAGEBREAK_Left, - FDE_CSSPAGEBREAK_Right, -}; -enum FDE_CSSOVERFLOW { - FDE_CSSOVERFLOW_Visible, - FDE_CSSOVERFLOW_Hidden, - FDE_CSSOVERFLOW_Scroll, - FDE_CSSOVERFLOW_Auto, - FDE_CSSOVERFLOW_NoDisplay, - FDE_CSSOVERFLOW_NoContent, -}; -enum FDE_CSSLINEBREAK { - FDE_CSSLINEBREAK_Auto, - FDE_CSSLINEBREAK_Loose, - FDE_CSSLINEBREAK_Normal, - FDE_CSSLINEBREAK_Strict, -}; -enum FDE_CSSTEXTEMPHASISFILL { - FDE_CSSTEXTEMPHASISFILL_Filled, - FDE_CSSTEXTEMPHASISFILL_Open, -}; -enum FDE_CSSTEXTEMPHASISMARK { - FDE_CSSTEXTEMPHASISMARK_None, - FDE_CSSTEXTEMPHASISMARK_Auto, - FDE_CSSTEXTEMPHASISMARK_Dot, - FDE_CSSTEXTEMPHASISMARK_Circle, - FDE_CSSTEXTEMPHASISMARK_DoubleCircle, - FDE_CSSTEXTEMPHASISMARK_Triangle, - FDE_CSSTEXTEMPHASISMARK_Sesame, - FDE_CSSTEXTEMPHASISMARK_Custom, -}; -enum FDE_CSSTEXTCOMBINE { - FDE_CSSTEXTCOMBINE_Horizontal, - FDE_CSSTEXTCOMBINE_None, -}; -enum FDE_CSSCURSOR { - FDE_CSSCURSOR_Auto, - FDE_CSSCURSOR_Crosshair, - FDE_CSSCURSOR_Default, - FDE_CSSCURSOR_Pointer, - FDE_CSSCURSOR_Move, - FDE_CSSCURSOR_EResize, - FDE_CSSCURSOR_NeResize, - FDE_CSSCURSOR_NwResize, - FDE_CSSCURSOR_NResize, - FDE_CSSCURSOR_SeResize, - FDE_CSSCURSOR_SwResize, - FDE_CSSCURSOR_SResize, - FDE_CSSCURSOR_WResize, - FDE_CSSCURSOR_Text, - FDE_CSSCURSOR_Wait, - FDE_CSSCURSOR_Help, - FDE_CSSCURSOR_Progress, -}; -enum FDE_CSSPOSITION { - FDE_CSSPOSITION_Static, - FDE_CSSPOSITION_Relative, - FDE_CSSPOSITION_Absolute, - FDE_CSSPOSITION_Fixed, -}; -enum FDE_CSSCAPTIONSIDE { - FDE_CSSCAPTIONSIDE_Top, - FDE_CSSCAPTIONSIDE_Bottom, - FDE_CSSCAPTIONSIDE_Left, - FDE_CSSCAPTIONSIDE_Right, - FDE_CSSCAPTIONSIDE_Before, - FDE_CSSCAPTIONSIDE_After, -}; -enum FDE_CSSRUBYALIGN { - FDE_CSSRUBYALIGN_Auto, - FDE_CSSRUBYALIGN_Start, - FDE_CSSRUBYALIGN_Left, - FDE_CSSRUBYALIGN_Center, - FDE_CSSRUBYALIGN_End, - FDE_CSSRUBYALIGN_Right, - FDE_CSSRUBYALIGN_DistributeLetter, - FDE_CSSRUBYALIGN_DistributeSpace, - FDE_CSSRUBYALIGN_LineEdge, -}; -enum FDE_CSSRUBYOVERHANG { - FDE_CSSRUBYOVERHANG_Auto, - FDE_CSSRUBYOVERHANG_Start, - FDE_CSSRUBYOVERHANG_End, - FDE_CSSRUBYOVERHANG_None, -}; -enum FDE_CSSRUBYPOSITION { - FDE_CSSRUBYPOSITION_Before, - FDE_CSSRUBYPOSITION_After, - FDE_CSSRUBYPOSITION_Right, - FDE_CSSRUBYPOSITION_Inline, -}; -enum FDE_CSSRUBYSPAN { - FDE_CSSRUBYSPAN_None, - FDE_CSSRUBYSPAN_Attr, -}; -enum FDE_CSSTEXTALIGN { - FDE_CSSTEXTALIGN_Left, - FDE_CSSTEXTALIGN_Right, - FDE_CSSTEXTALIGN_Center, - FDE_CSSTEXTALIGN_Justify, - FDE_CSSTEXTALIGN_JustifyAll, -}; -enum FDE_CSSVERTICALALIGN { - FDE_CSSVERTICALALIGN_Baseline, - FDE_CSSVERTICALALIGN_Sub, - FDE_CSSVERTICALALIGN_Super, - FDE_CSSVERTICALALIGN_Top, - FDE_CSSVERTICALALIGN_TextTop, - FDE_CSSVERTICALALIGN_Middle, - FDE_CSSVERTICALALIGN_Bottom, - FDE_CSSVERTICALALIGN_TextBottom, - FDE_CSSVERTICALALIGN_Number, -}; -enum FDE_CSSLISTSTYLETYPE { - FDE_CSSLISTSTYLETYPE_Disc, - FDE_CSSLISTSTYLETYPE_Circle, - FDE_CSSLISTSTYLETYPE_Square, - FDE_CSSLISTSTYLETYPE_Decimal, - FDE_CSSLISTSTYLETYPE_DecimalLeadingZero, - FDE_CSSLISTSTYLETYPE_LowerRoman, - FDE_CSSLISTSTYLETYPE_UpperRoman, - FDE_CSSLISTSTYLETYPE_LowerGreek, - FDE_CSSLISTSTYLETYPE_LowerLatin, - FDE_CSSLISTSTYLETYPE_UpperLatin, - FDE_CSSLISTSTYLETYPE_Armenian, - FDE_CSSLISTSTYLETYPE_Georgian, - FDE_CSSLISTSTYLETYPE_LowerAlpha, - FDE_CSSLISTSTYLETYPE_UpperAlpha, - FDE_CSSLISTSTYLETYPE_None, - FDE_CSSLISTSTYLETYPE_CjkIdeographic, - FDE_CSSLISTSTYLETYPE_Hebrew, - FDE_CSSLISTSTYLETYPE_Hiragana, - FDE_CSSLISTSTYLETYPE_HiraganaIroha, - FDE_CSSLISTSTYLETYPE_Katakana, - FDE_CSSLISTSTYLETYPE_KatakanaIroha, -}; -enum FDE_CSSLISTSTYLEPOSITION { - FDE_CSSLISTSTYLEPOSITION_Outside, - FDE_CSSLISTSTYLEPOSITION_Inside, -}; -enum FDE_CSSWHITESPACE { - FDE_CSSWHITESPACE_Normal, - FDE_CSSWHITESPACE_Pre, - FDE_CSSWHITESPACE_Nowrap, - FDE_CSSWHITESPACE_PreWrap, - FDE_CSSWHITESPACE_PreLine, -}; -enum FDE_CSSFONTVARIANT { - FDE_CSSFONTVARIANT_Normal, - FDE_CSSFONTVARIANT_SmallCaps, -}; -enum FDE_CSSTEXTTRANSFORM { - FDE_CSSTEXTTRANSFORM_None, - FDE_CSSTEXTTRANSFORM_Capitalize, - FDE_CSSTEXTTRANSFORM_UpperCase, - FDE_CSSTEXTTRANSFORM_LowerCase, -}; -enum FDE_CSSTEXTDECORATION { - FDE_CSSTEXTDECORATION_None = 0, - FDE_CSSTEXTDECORATION_Underline = 1, - FDE_CSSTEXTDECORATION_Overline = 2, - FDE_CSSTEXTDECORATION_LineThrough = 4, - FDE_CSSTEXTDECORATION_Blink = 8, - FDE_CSSTEXTDECORATION_Double = 16, -}; -class IFDE_CSSRubyStyle { - public: - virtual ~IFDE_CSSRubyStyle() {} - virtual FDE_CSSRUBYALIGN GetRubyAlign() const = 0; - virtual FDE_CSSRUBYOVERHANG GetRubyOverhang() const = 0; - virtual FDE_CSSRUBYPOSITION GetRubyPosition() const = 0; - virtual FDE_CSSRUBYSPAN GetRubySpanType() const = 0; - virtual IFDE_CSSValue* GetRubySpanAttr() const = 0; -}; -class IFDE_CSSMultiColumnStyle { - public: - virtual ~IFDE_CSSMultiColumnStyle() {} - virtual const FDE_CSSLENGTH& GetColumnCount() const = 0; - virtual const FDE_CSSLENGTH& GetColumnGap() const = 0; - virtual FX_ARGB GetColumnRuleColor() const = 0; - virtual FDE_CSSBORDERSTYLE GetColumnRuleStyle() const = 0; - virtual const FDE_CSSLENGTH& GetColumnRuleWidth() const = 0; - virtual const FDE_CSSLENGTH& GetColumnWidth() const = 0; - virtual void SetColumnCount(const FDE_CSSLENGTH& columnCount) = 0; - virtual void SetColumnGap(const FDE_CSSLENGTH& columnGap) = 0; - virtual void SetColumnRuleColor(FX_ARGB dwColumnRuleColor) = 0; - virtual void SetColumnRuleStyle(FDE_CSSBORDERSTYLE eColumnRuleStyle) = 0; - virtual void SetColumnRuleWidth(const FDE_CSSLENGTH& columnRuleWidth) = 0; - virtual void SetColumnWidth(const FDE_CSSLENGTH& columnWidth) = 0; -}; -class IFDE_CSSGeneratedContentStyle { - public: - virtual ~IFDE_CSSGeneratedContentStyle() {} - virtual int32_t CountCounters() = 0; - virtual const FX_WCHAR* GetCounterIdentifier(int32_t index) = 0; - virtual FX_BOOL GetCounterReset(int32_t index, int32_t& iValue) = 0; - virtual FX_BOOL GetCounterIncrement(int32_t index, int32_t& iValue) = 0; - virtual IFDE_CSSValueList* GetContent() const = 0; - virtual int32_t CountQuotes() const = 0; - virtual const FX_WCHAR* GetQuotes(int32_t index) const = 0; -}; -class IFDE_CSSFontStyle { - public: - virtual ~IFDE_CSSFontStyle() {} - virtual int32_t CountFontFamilies() const = 0; - virtual const FX_WCHAR* GetFontFamily(int32_t index) const = 0; - virtual FX_WORD GetFontWeight() const = 0; - virtual FDE_CSSFONTVARIANT GetFontVariant() const = 0; - virtual FDE_CSSFONTSTYLE GetFontStyle() const = 0; - virtual FX_FLOAT GetFontSize() const = 0; - virtual FX_ARGB GetColor() const = 0; - virtual void SetFontWeight(FX_WORD wFontWeight) = 0; - virtual void SetFontVariant(FDE_CSSFONTVARIANT eFontVariant) = 0; - virtual void SetFontStyle(FDE_CSSFONTSTYLE eFontStyle) = 0; - virtual void SetFontSize(FX_FLOAT fFontSize) = 0; - virtual void SetColor(FX_ARGB dwFontColor) = 0; -}; -class IFDE_CSSBoundaryStyle { - public: - virtual ~IFDE_CSSBoundaryStyle() {} - virtual FX_ARGB GetBorderLeftColor() const = 0; - virtual FX_ARGB GetBorderTopColor() const = 0; - virtual FX_ARGB GetBorderRightColor() const = 0; - virtual FX_ARGB GetBorderBottomColor() const = 0; - virtual FDE_CSSBORDERSTYLE GetBorderLeftStyle() const = 0; - virtual FDE_CSSBORDERSTYLE GetBorderTopStyle() const = 0; - virtual FDE_CSSBORDERSTYLE GetBorderRightStyle() const = 0; - virtual FDE_CSSBORDERSTYLE GetBorderBottomStyle() const = 0; - virtual const FDE_CSSRECT* GetBorderWidth() const = 0; - virtual const FDE_CSSRECT* GetMarginWidth() const = 0; - virtual const FDE_CSSRECT* GetPaddingWidth() const = 0; - virtual void SetBorderLeftColor(FX_ARGB dwBorderColor) = 0; - virtual void SetBorderTopColor(FX_ARGB dwBorderColor) = 0; - virtual void SetBorderRightColor(FX_ARGB dwBorderColor) = 0; - virtual void SetBorderBottomColor(FX_ARGB dwBorderColor) = 0; - - virtual void SetBorderLeftStyle(FDE_CSSBORDERSTYLE eBorderStyle) = 0; - virtual void SetBorderTopStyle(FDE_CSSBORDERSTYLE eBorderStyle) = 0; - virtual void SetBorderRightStyle(FDE_CSSBORDERSTYLE eBorderStyle) = 0; - virtual void SetBorderBottomStyle(FDE_CSSBORDERSTYLE eBorderStyle) = 0; - - virtual void SetBorderWidth(const FDE_CSSRECT& rect) = 0; - virtual void SetMarginWidth(const FDE_CSSRECT& rect) = 0; - virtual void SetPaddingWidth(const FDE_CSSRECT& rect) = 0; -}; -class IFDE_CSSPositionStyle { - public: - virtual ~IFDE_CSSPositionStyle() {} - virtual FDE_CSSDISPLAY GetDisplay() const = 0; - virtual const FDE_CSSSIZE& GetBoxSize() const = 0; - virtual const FDE_CSSSIZE& GetMinBoxSize() const = 0; - virtual const FDE_CSSSIZE& GetMaxBoxSize() const = 0; - virtual FDE_CSSFLOAT GetFloat() const = 0; - virtual FDE_CSSCLEAR GetClear() const = 0; - virtual FDE_CSSPOSITION GetPosition() const = 0; - virtual FDE_CSSLENGTH GetTop() const = 0; - virtual FDE_CSSLENGTH GetBottom() const = 0; - virtual FDE_CSSLENGTH GetLeft() const = 0; - virtual FDE_CSSLENGTH GetRight() const = 0; - virtual void SetDisplay(FDE_CSSDISPLAY eDisplay) = 0; - virtual void SetBoxSize(const FDE_CSSSIZE& boxSize) = 0; - virtual void SetMinBoxSize(const FDE_CSSSIZE& minBoxSize) = 0; - virtual void SetMaxBoxSize(const FDE_CSSSIZE& maxBoxSize) = 0; - virtual void SetFloat(FDE_CSSFLOAT eFloat) = 0; - virtual void SetClear(FDE_CSSCLEAR eClear) = 0; -}; -class IFDE_CSSParagraphStyle { - public: - virtual ~IFDE_CSSParagraphStyle() {} - virtual FX_FLOAT GetLineHeight() const = 0; - virtual FDE_CSSWHITESPACE GetWhiteSpace() const = 0; - virtual const FDE_CSSLENGTH& GetTextIndent() const = 0; - virtual FDE_CSSTEXTALIGN GetTextAlign() const = 0; - virtual FDE_CSSVERTICALALIGN GetVerticalAlign() const = 0; - virtual FX_FLOAT GetNumberVerticalAlign() const = 0; - virtual FDE_CSSTEXTTRANSFORM GetTextTransform() const = 0; - virtual FX_DWORD GetTextDecoration() const = 0; - virtual const FDE_CSSLENGTH& GetLetterSpacing() const = 0; - virtual const FDE_CSSLENGTH& GetWordSpacing() const = 0; - virtual FDE_CSSWRITINGMODE GetWritingMode() const = 0; - virtual FDE_CSSWORDBREAK GetWordBreak() const = 0; - virtual int32_t GetWidows() const = 0; - virtual FX_ARGB GetTextEmphasisColor() const = 0; - virtual FDE_CSSPAGEBREAK GetPageBreakBefore() const = 0; - virtual FDE_CSSPAGEBREAK GetPageBreakAfter() const = 0; - virtual FDE_CSSPAGEBREAK GetPageBreakInside() const = 0; - virtual int32_t GetOrphans() const = 0; - virtual FDE_CSSLINEBREAK GetLineBreak() const = 0; - virtual FDE_CSSTEXTEMPHASISMARK GetTextEmphasisMark() const = 0; - virtual FDE_CSSTEXTEMPHASISFILL GetTextEmphasisFill() const = 0; - virtual const FX_WCHAR* GetTextEmphasisCustom() const = 0; - virtual FDE_CSSTEXTCOMBINE GetTextCombineType() const = 0; - virtual FX_BOOL HasTextCombineNumber() const = 0; - virtual FX_FLOAT GetTextCombineNumber() const = 0; - virtual void SetLineHeight(FX_FLOAT fLineHeight) = 0; - virtual void SetWhiteSpace(FDE_CSSWHITESPACE eWhiteSpace) = 0; - virtual void SetTextIndent(const FDE_CSSLENGTH& textIndent) = 0; - virtual void SetTextAlign(FDE_CSSTEXTALIGN eTextAlign) = 0; - virtual void SetVerticalAlign(FDE_CSSVERTICALALIGN eVerticalAlign) = 0; - virtual void SetNumberVerticalAlign(FX_FLOAT fAlign) = 0; - virtual void SetTextTransform(FDE_CSSTEXTTRANSFORM eTextTransform) = 0; - virtual void SetTextDecoration(FX_DWORD dwTextDecoration) = 0; - virtual void SetLetterSpacing(const FDE_CSSLENGTH& letterSpacing) = 0; - virtual void SetWordSpacing(const FDE_CSSLENGTH& wordSpacing) = 0; - virtual void SetWritingMode(FDE_CSSWRITINGMODE eWritingMode) = 0; - virtual void SetWordBreak(FDE_CSSWORDBREAK eWordBreak) = 0; - virtual void SetWidows(int32_t iWidows) = 0; - virtual void SetTextEmphasisColor(FX_ARGB dwTextEmphasisColor) = 0; - virtual void SetPageBreakBefore(FDE_CSSPAGEBREAK ePageBreakBefore) = 0; - virtual void SetPageBreakAfter(FDE_CSSPAGEBREAK ePageBreakAfter) = 0; - virtual void SetPageBreakInside(FDE_CSSPAGEBREAK ePageBreakInside) = 0; - virtual void SetOrphans(int32_t iOrphans) = 0; - virtual void SetLineBreak(FDE_CSSLINEBREAK eLineBreak) = 0; -}; -class IFDE_CSSBackgroundStyle { - public: - virtual ~IFDE_CSSBackgroundStyle() {} - virtual FX_ARGB GetBKGColor() const = 0; - virtual const FX_WCHAR* GetBKGImage() const = 0; - virtual FDE_CSSBKGREPEAT GetBKGRepeat() const = 0; - virtual FDE_CSSBKGATTACHMENT GetBKGAttachment() const = 0; - virtual const FDE_CSSPOINT& GetBKGPosition() const = 0; - virtual void SetBKGColor(FX_ARGB dwBKGColor) = 0; - virtual void SetBKGPosition(const FDE_CSSPOINT& bkgPosition) = 0; -}; -class IFDE_CSSListStyle { - public: - virtual ~IFDE_CSSListStyle() {} - virtual FDE_CSSLISTSTYLETYPE GetListStyleType() const = 0; - virtual FDE_CSSLISTSTYLEPOSITION GetListStylePosition() const = 0; - virtual const FX_WCHAR* GetListStyleImage() const = 0; - virtual void SetListStyleType(FDE_CSSLISTSTYLETYPE eListStyleType) = 0; - virtual void SetListStylePosition( - FDE_CSSLISTSTYLEPOSITION eListStylePosition) = 0; -}; -class IFDE_CSSTableStyle { - public: - virtual ~IFDE_CSSTableStyle() {} - virtual FDE_CSSCAPTIONSIDE GetCaptionSide() const = 0; -}; -class IFDE_CSSVisualStyle { - public: - virtual ~IFDE_CSSVisualStyle() {} - virtual FDE_CSSVISIBILITY GetVisibility() const = 0; - virtual FDE_CSSOVERFLOW GetOverflowX() const = 0; - virtual FDE_CSSOVERFLOW GetOverflowY() const = 0; - virtual void SetVisibility(FDE_CSSVISIBILITY eVisibility) = 0; -}; -class IFDE_CSSComputedStyle : public IFX_Unknown { - public: - virtual void Reset() = 0; - virtual IFDE_CSSFontStyle* GetFontStyles() const = 0; - virtual IFDE_CSSBoundaryStyle* GetBoundaryStyles() const = 0; - virtual IFDE_CSSPositionStyle* GetPositionStyles() const = 0; - virtual IFDE_CSSParagraphStyle* GetParagraphStyles() const = 0; - virtual IFDE_CSSBackgroundStyle* GetBackgroundStyles() const = 0; - virtual IFDE_CSSVisualStyle* GetVisualStyles() const = 0; - virtual IFDE_CSSListStyle* GetListStyles() const = 0; - virtual IFDE_CSSMultiColumnStyle* GetMultiColumnStyle() const = 0; - virtual IFDE_CSSTableStyle* GetTableStyle() const = 0; - virtual IFDE_CSSGeneratedContentStyle* GetGeneratedContentStyle() const = 0; - virtual IFDE_CSSRubyStyle* GetRubyStyle() const = 0; - virtual FX_BOOL GetCustomStyle(const CFX_WideStringC& wsName, - CFX_WideString& wsValue) const = 0; -}; -enum FDE_CSSSTYLESHEETGROUP { - FDE_CSSSTYLESHEETGROUP_UserAgent, - FDE_CSSSTYLESHEETGROUP_User, - FDE_CSSSTYLESHEETGROUP_Author, - FDE_CSSSTYLESHEETGROUP_MAX, -}; -enum FDE_CSSSTYLESHEETPRIORITY { - FDE_CSSSTYLESHEETPRIORITY_High, - FDE_CSSSTYLESHEETPRIORITY_Mid, - FDE_CSSSTYLESHEETPRIORITY_Low, - FDE_CSSSTYLESHEETPRIORITY_MAX, -}; -class IFDE_CSSTagProvider { - public: - virtual ~IFDE_CSSTagProvider() {} - virtual CFX_WideStringC GetTagName() = 0; - virtual FX_POSITION GetFirstAttribute() = 0; - virtual void GetNextAttribute(FX_POSITION& pos, - CFX_WideStringC& wsAttr, - CFX_WideStringC& wsValue) = 0; -}; -class IFDE_CSSAccelerator { - public: - virtual ~IFDE_CSSAccelerator() {} - virtual void OnEnterTag(IFDE_CSSTagProvider* pTag) = 0; - virtual void OnLeaveTag(IFDE_CSSTagProvider* pTag) = 0; -}; -class IFDE_CSSStyleSelector { - public: - static IFDE_CSSStyleSelector* Create(); - virtual ~IFDE_CSSStyleSelector() {} - virtual void Release() = 0; - virtual void SetFontMgr(IFX_FontMgr* pFontMgr) = 0; - virtual void SetDefFontSize(FX_FLOAT fFontSize) = 0; - virtual FX_BOOL SetStyleSheet(FDE_CSSSTYLESHEETGROUP eType, - IFDE_CSSStyleSheet* pSheet) = 0; - virtual FX_BOOL SetStyleSheets(FDE_CSSSTYLESHEETGROUP eType, - const CFDE_CSSStyleSheetArray* pArray) = 0; - virtual void SetStylePriority(FDE_CSSSTYLESHEETGROUP eType, - FDE_CSSSTYLESHEETPRIORITY ePriority) = 0; - virtual void UpdateStyleIndex(FX_DWORD dwMediaList) = 0; - virtual IFDE_CSSAccelerator* InitAccelerator() = 0; - virtual IFDE_CSSComputedStyle* CreateComputedStyle( - IFDE_CSSComputedStyle* pParentStyle) = 0; - virtual int32_t MatchDeclarations( - IFDE_CSSTagProvider* pTag, - CFDE_CSSDeclarationArray& matchedDecls, - FDE_CSSPERSUDO ePersudoType = FDE_CSSPERSUDO_NONE) = 0; - virtual void ComputeStyle(IFDE_CSSTagProvider* pTag, - const IFDE_CSSDeclaration** ppDeclArray, - int32_t iDeclCount, - IFDE_CSSComputedStyle* pDestStyle) = 0; -}; - -#endif // XFA_SRC_FDE_CSS_FDE_CSS_H_ diff --git a/xfa/src/fde/css/fde_csscache.cpp b/xfa/src/fde/css/fde_csscache.cpp deleted file mode 100644 index 012585bfd0..0000000000 --- a/xfa/src/fde/css/fde_csscache.cpp +++ /dev/null @@ -1,149 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fde/css/fde_csscache.h" - -#include - -#include "core/include/fxcrt/fx_ext.h" - -FDE_CSSCacheItem::FDE_CSSCacheItem(IFDE_CSSStyleSheet* p) - : pStylesheet(p), dwActivity(0) { - FXSYS_assert(pStylesheet); - pStylesheet->AddRef(); -} -FDE_CSSCacheItem::~FDE_CSSCacheItem() { - pStylesheet->Release(); -} -IFDE_CSSStyleSheetCache* IFDE_CSSStyleSheetCache::Create() { - return new CFDE_CSSStyleSheetCache; -} - -CFDE_CSSStyleSheetCache::CFDE_CSSStyleSheetCache() - : m_pFixedStore(NULL), m_iMaxItems(5) {} - -CFDE_CSSStyleSheetCache::~CFDE_CSSStyleSheetCache() { - for (const auto& pair : m_Stylesheets) { - FXTARGET_DeleteWith(FDE_CSSCacheItem, m_pFixedStore, pair.second); - } - m_Stylesheets.clear(); - if (m_pFixedStore) { - m_pFixedStore->Release(); - } -} -void CFDE_CSSStyleSheetCache::AddStyleSheet(const CFX_ByteStringC& szKey, - IFDE_CSSStyleSheet* pStyleSheet) { - FXSYS_assert(pStyleSheet != NULL); - if (m_pFixedStore == NULL) { - m_pFixedStore = - FX_CreateAllocator(FX_ALLOCTYPE_Fixed, std::max(10, m_iMaxItems), - sizeof(FDE_CSSCacheItem)); - FXSYS_assert(m_pFixedStore != NULL); - } - auto it = m_Stylesheets.find(szKey); - if (it != m_Stylesheets.end()) { - FDE_CSSCacheItem* pItem = it->second; - if (pItem->pStylesheet != pStyleSheet) { - pItem->pStylesheet->Release(); - pItem->pStylesheet = pStyleSheet; - pItem->pStylesheet->AddRef(); - pItem->dwActivity = 0; - } - } else { - while (static_cast(m_Stylesheets.size()) >= m_iMaxItems) { - RemoveLowestActivityItem(); - } - m_Stylesheets[szKey] = - FXTARGET_NewWith(m_pFixedStore) FDE_CSSCacheItem(pStyleSheet); - } -} -IFDE_CSSStyleSheet* CFDE_CSSStyleSheetCache::GetStyleSheet( - const CFX_ByteStringC& szKey) const { - auto it = m_Stylesheets.find(szKey); - if (it == m_Stylesheets.end()) { - return nullptr; - } - FDE_CSSCacheItem* pItem = it->second; - pItem->dwActivity++; - pItem->pStylesheet->AddRef(); - return pItem->pStylesheet; -} -void CFDE_CSSStyleSheetCache::RemoveStyleSheet(const CFX_ByteStringC& szKey) { - auto it = m_Stylesheets.find(szKey); - if (it == m_Stylesheets.end()) { - return; - } - FXTARGET_DeleteWith(FDE_CSSCacheItem, m_pFixedStore, it->second); - m_Stylesheets.erase(it); -} -void CFDE_CSSStyleSheetCache::RemoveLowestActivityItem() { - auto found = m_Stylesheets.end(); - for (auto it = m_Stylesheets.begin(); it != m_Stylesheets.end(); ++it) { - switch (it->first.GetID()) { - case FXBSTR_ID('#', 'U', 'S', 'E'): - case FXBSTR_ID('#', 'A', 'G', 'E'): - continue; - } - if (found == m_Stylesheets.end() || - it->second->dwActivity > found->second->dwActivity) { - found = it; - } - } - if (found != m_Stylesheets.end()) { - FXTARGET_DeleteWith(FDE_CSSCacheItem, m_pFixedStore, found->second); - m_Stylesheets.erase(found); - } -} -FDE_CSSTagCache::FDE_CSSTagCache(FDE_CSSTagCache* parent, - IFDE_CSSTagProvider* tag) - : pTag(tag), - pParent(parent), - dwIDHash(0), - dwTagHash(0), - iClassIndex(0), - dwClassHashs(1) { - FXSYS_assert(pTag != NULL); - CFX_WideStringC wsValue, wsName = pTag->GetTagName(); - dwTagHash = - FX_HashCode_String_GetW(wsName.GetPtr(), wsName.GetLength(), TRUE); - FX_POSITION pos = pTag->GetFirstAttribute(); - while (pos != NULL) { - pTag->GetNextAttribute(pos, wsName, wsValue); - FX_DWORD dwNameHash = - FX_HashCode_String_GetW(wsName.GetPtr(), wsName.GetLength(), TRUE); - static const FX_DWORD s_dwIDHash = FX_HashCode_String_GetW(L"id", 2, TRUE); - static const FX_DWORD s_dwClassHash = - FX_HashCode_String_GetW(L"class", 5, TRUE); - if (dwNameHash == s_dwClassHash) { - FX_DWORD dwHash = - FX_HashCode_String_GetW(wsValue.GetPtr(), wsValue.GetLength()); - dwClassHashs.Add(dwHash); - } else if (dwNameHash == s_dwIDHash) { - dwIDHash = FX_HashCode_String_GetW(wsValue.GetPtr(), wsValue.GetLength()); - } - } -} -FDE_CSSTagCache::FDE_CSSTagCache(const FDE_CSSTagCache& it) - : pTag(it.pTag), - pParent(it.pParent), - dwIDHash(it.dwIDHash), - dwTagHash(it.dwTagHash), - iClassIndex(0), - dwClassHashs(1) { - if (it.dwClassHashs.GetSize() > 0) { - dwClassHashs.Copy(it.dwClassHashs); - } -} -void CFDE_CSSAccelerator::OnEnterTag(IFDE_CSSTagProvider* pTag) { - FDE_CSSTagCache* pTop = GetTopElement(); - FDE_CSSTagCache item(pTop, pTag); - m_Stack.Push(item); -} -void CFDE_CSSAccelerator::OnLeaveTag(IFDE_CSSTagProvider* pTag) { - FXSYS_assert(m_Stack.GetTopElement()); - FXSYS_assert(m_Stack.GetTopElement()->GetTag() == pTag); - m_Stack.Pop(); -} diff --git a/xfa/src/fde/css/fde_csscache.h b/xfa/src/fde/css/fde_csscache.h deleted file mode 100644 index e10bea77f5..0000000000 --- a/xfa/src/fde/css/fde_csscache.h +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FDE_CSS_FDE_CSSCACHE_H_ -#define XFA_SRC_FDE_CSS_FDE_CSSCACHE_H_ - -#include - -#include "xfa/src/fde/css/fde_css.h" -#include "xfa/src/fgas/crt/fgas_memory.h" - -class FDE_CSSCacheItem : public CFX_Target { - public: - explicit FDE_CSSCacheItem(IFDE_CSSStyleSheet* p); - ~FDE_CSSCacheItem(); - - IFDE_CSSStyleSheet* pStylesheet; - FX_DWORD dwActivity; -}; - -class CFDE_CSSStyleSheetCache : public IFDE_CSSStyleSheetCache, - public CFX_Target { - public: - CFDE_CSSStyleSheetCache(); - ~CFDE_CSSStyleSheetCache(); - virtual void Release() { delete this; } - - virtual void SetMaxItems(int32_t iMaxCount = 5) { - FXSYS_assert(iMaxCount >= 3); - m_iMaxItems = iMaxCount; - } - - virtual void AddStyleSheet(const CFX_ByteStringC& szKey, - IFDE_CSSStyleSheet* pStyleSheet); - virtual IFDE_CSSStyleSheet* GetStyleSheet(const CFX_ByteStringC& szKey) const; - virtual void RemoveStyleSheet(const CFX_ByteStringC& szKey); - - protected: - void RemoveLowestActivityItem(); - std::map m_Stylesheets; - IFX_MEMAllocator* m_pFixedStore; - int32_t m_iMaxItems; -}; - -class FDE_CSSTagCache : public CFX_Target { - public: - FDE_CSSTagCache(FDE_CSSTagCache* parent, IFDE_CSSTagProvider* tag); - FDE_CSSTagCache(const FDE_CSSTagCache& it); - FDE_CSSTagCache* GetParent() const { return pParent; } - IFDE_CSSTagProvider* GetTag() const { return pTag; } - FX_DWORD HashID() const { return dwIDHash; } - FX_DWORD HashTag() const { return dwTagHash; } - int32_t CountHashClass() const { return dwClassHashs.GetSize(); } - void SetClassIndex(int32_t index) { iClassIndex = index; } - FX_DWORD HashClass() const { - return iClassIndex < dwClassHashs.GetSize() - ? dwClassHashs.GetAt(iClassIndex) - : 0; - } - - protected: - IFDE_CSSTagProvider* pTag; - FDE_CSSTagCache* pParent; - FX_DWORD dwIDHash; - FX_DWORD dwTagHash; - int32_t iClassIndex; - CFDE_DWordArray dwClassHashs; -}; -typedef CFX_ObjectStackTemplate CFDE_CSSTagStack; - -class CFDE_CSSAccelerator : public IFDE_CSSAccelerator, public CFX_Target { - public: - virtual void OnEnterTag(IFDE_CSSTagProvider* pTag); - virtual void OnLeaveTag(IFDE_CSSTagProvider* pTag); - void Clear() { m_Stack.RemoveAll(); } - FDE_CSSTagCache* GetTopElement() const { return m_Stack.GetTopElement(); } - - protected: - CFDE_CSSTagStack m_Stack; -}; - -#endif // XFA_SRC_FDE_CSS_FDE_CSSCACHE_H_ diff --git a/xfa/src/fde/css/fde_cssdatatable.cpp b/xfa/src/fde/css/fde_cssdatatable.cpp deleted file mode 100644 index 5ad83e7b25..0000000000 --- a/xfa/src/fde/css/fde_cssdatatable.cpp +++ /dev/null @@ -1,889 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fde/css/fde_cssdatatable.h" - -#include "core/include/fxcrt/fx_ext.h" -#include "xfa/src/fgas/crt/fgas_algorithm.h" -#include "xfa/src/fgas/crt/fgas_codepage.h" -#include "xfa/src/fgas/crt/fgas_system.h" - -FX_BOOL FDE_CSSLengthToFloat(const FDE_CSSLENGTH& len, - FX_FLOAT fPercentBase, - FX_FLOAT& fResult) { - switch (len.GetUnit()) { - case FDE_CSSLENGTHUNIT_Point: - fResult = len.GetValue(); - return TRUE; - case FDE_CSSLENGTHUNIT_Percent: - fResult = len.GetValue() * fPercentBase; - return TRUE; - default: - return FALSE; - } -} -CFX_FloatRect FDE_CSSBoundaryToRect(IFDE_CSSBoundaryStyle* pBoundStyle, - FX_FLOAT fContainerWidth, - FX_BOOL bPadding, - FX_BOOL bBorder, - FX_BOOL bMargin) { - FXSYS_assert(pBoundStyle != NULL); - FX_FLOAT fResult; - const FDE_CSSRECT* pRect; - CFX_FloatRect rect(0, 0, 0, 0); - if (bPadding) { - pRect = pBoundStyle->GetPaddingWidth(); - if (pRect != NULL) { - if (FDE_CSSLengthToFloat(pRect->left, fContainerWidth, fResult)) { - rect.left += fResult; - } - if (FDE_CSSLengthToFloat(pRect->top, fContainerWidth, fResult)) { - rect.top += fResult; - } - if (FDE_CSSLengthToFloat(pRect->right, fContainerWidth, fResult)) { - rect.right += fResult; - } - if (FDE_CSSLengthToFloat(pRect->bottom, fContainerWidth, fResult)) { - rect.bottom += fResult; - } - } - } - if (bBorder) { - pRect = pBoundStyle->GetBorderWidth(); - if (pRect != NULL) { - if (FDE_CSSLengthToFloat(pRect->left, fContainerWidth, fResult)) { - rect.left += fResult; - } - if (FDE_CSSLengthToFloat(pRect->top, fContainerWidth, fResult)) { - rect.top += fResult; - } - if (FDE_CSSLengthToFloat(pRect->right, fContainerWidth, fResult)) { - rect.right += fResult; - } - if (FDE_CSSLengthToFloat(pRect->bottom, fContainerWidth, fResult)) { - rect.bottom += fResult; - } - } - } - if (bMargin) { - pRect = pBoundStyle->GetMarginWidth(); - if (pRect != NULL) { - if (FDE_CSSLengthToFloat(pRect->left, fContainerWidth, fResult)) { - rect.left += fResult; - } - if (FDE_CSSLengthToFloat(pRect->top, fContainerWidth, fResult)) { - rect.top += fResult; - } - if (FDE_CSSLengthToFloat(pRect->right, fContainerWidth, fResult)) { - rect.right += fResult; - } - if (FDE_CSSLengthToFloat(pRect->bottom, fContainerWidth, fResult)) { - rect.bottom += fResult; - } - } - } - return rect; -} -FX_DWORD FDE_CSSFontStyleToFDE(IFDE_CSSFontStyle* pFontStyle) { - FXSYS_assert(pFontStyle != NULL); - FX_DWORD dwFontStyle = FX_FONTSTYLE_Normal; - if (pFontStyle->GetFontStyle() == FDE_CSSFONTSTYLE_Italic) { - dwFontStyle |= FX_FONTSTYLE_Italic; - } - if (pFontStyle->GetFontWeight() >= 700) { - dwFontStyle |= FX_FONTSTYLE_Bold; - } - return dwFontStyle; -} -static const FDE_CSSPROPERTYTABLE g_FDE_CSSProperties[] = { - {FDE_CSSPROPERTY_WritingMode, L"writing-mode", 0x01878076, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeEnum}, - {FDE_CSSPROPERTY_ColumnRuleWidth, L"column-rule-width", 0x0200FB00, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeEnum | - FDE_CSSVALUETYPE_MaybeNumber}, - {FDE_CSSPROPERTY_BorderLeft, L"border-left", 0x04080036, - FDE_CSSVALUETYPE_Shorthand}, - {FDE_CSSPROPERTY_ColumnRule, L"column-rule", 0x04C83DF3, - FDE_CSSVALUETYPE_Shorthand}, - {FDE_CSSPROPERTY_Height, L"height", 0x05A5C519, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeEnum | - FDE_CSSVALUETYPE_MaybeNumber}, - {FDE_CSSPROPERTY_CounterReset, L"counter-reset", 0x0894F9B0, - FDE_CSSVALUETYPE_List | FDE_CSSVALUETYPE_MaybeEnum | - FDE_CSSVALUETYPE_MaybeNumber | FDE_CSSVALUETYPE_MaybeString}, - {FDE_CSSPROPERTY_Content, L"content", 0x097BE91B, - FDE_CSSVALUETYPE_List | FDE_CSSVALUETYPE_MaybeEnum | - FDE_CSSVALUETYPE_MaybeURI | FDE_CSSVALUETYPE_MaybeString}, - {FDE_CSSPROPERTY_RubyPosition, L"ruby-position", 0x09ACD024, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeEnum}, - {FDE_CSSPROPERTY_BackgroundColor, L"background-color", 0x09E8E8AC, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeEnum | - FDE_CSSVALUETYPE_MaybeColor}, - {FDE_CSSPROPERTY_Width, L"width", 0x0A8A8F80, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeEnum | - FDE_CSSVALUETYPE_MaybeNumber}, - {FDE_CSSPROPERTY_Src, L"src", 0x0BD37048, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeURI}, - {FDE_CSSPROPERTY_Top, L"top", 0x0BEDAF33, FDE_CSSVALUETYPE_Primitive | - FDE_CSSVALUETYPE_MaybeEnum | - FDE_CSSVALUETYPE_MaybeNumber}, - {FDE_CSSPROPERTY_Margin, L"margin", 0x0CB016BE, - FDE_CSSVALUETYPE_List | FDE_CSSVALUETYPE_MaybeEnum | - FDE_CSSVALUETYPE_MaybeNumber}, - {FDE_CSSPROPERTY_BorderColor, L"border-color", 0x0CBB528A, - FDE_CSSVALUETYPE_List | FDE_CSSVALUETYPE_MaybeEnum | - FDE_CSSVALUETYPE_MaybeColor}, - {FDE_CSSPROPERTY_Widows, L"widows", 0x1026C59D, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeNumber}, - {FDE_CSSPROPERTY_BorderBottomColor, L"border-bottom-color", 0x121E22EC, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeEnum | - FDE_CSSVALUETYPE_MaybeColor}, - {FDE_CSSPROPERTY_TextIndent, L"text-indent", 0x169ADB74, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeNumber}, - {FDE_CSSPROPERTY_Right, L"right", 0x193ADE3E, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeEnum | - FDE_CSSVALUETYPE_MaybeNumber}, - {FDE_CSSPROPERTY_TextEmphasisStyle, L"text-emphasis-style", 0x20DBAF4A, - FDE_CSSVALUETYPE_List | FDE_CSSVALUETYPE_MaybeEnum | - FDE_CSSVALUETYPE_MaybeString}, - {FDE_CSSPROPERTY_PaddingLeft, L"padding-left", 0x228CF02F, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeNumber}, - {FDE_CSSPROPERTY_ColumnWidth, L"column-width", 0x24C9AC9B, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeEnum | - FDE_CSSVALUETYPE_MaybeNumber}, - {FDE_CSSPROPERTY_MarginLeft, L"margin-left", 0x297C5656, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeNumber | - FDE_CSSVALUETYPE_MaybeEnum}, - {FDE_CSSPROPERTY_Border, L"border", 0x2A23349E, FDE_CSSVALUETYPE_Shorthand}, - {FDE_CSSPROPERTY_BorderTop, L"border-top", 0x2B866ADE, - FDE_CSSVALUETYPE_Shorthand}, - {FDE_CSSPROPERTY_RubyOverhang, L"ruby-overhang", 0x2CCA0D89, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeEnum}, - {FDE_CSSPROPERTY_PageBreakBefore, L"page-break-before", 0x3119B36F, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeEnum}, - {FDE_CSSPROPERTY_MaxHeight, L"max-height", 0x343597EC, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeNumber}, - {FDE_CSSPROPERTY_MinWidth, L"min-width", 0x35832871, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeNumber}, - {FDE_CSSPROPERTY_BorderLeftColor, L"border-left-color", 0x35C64022, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeEnum | - FDE_CSSVALUETYPE_MaybeColor}, - {FDE_CSSPROPERTY_Bottom, L"bottom", 0x399F02B5, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeEnum | - FDE_CSSVALUETYPE_MaybeNumber}, - {FDE_CSSPROPERTY_Quotes, L"quotes", 0x3D8C6A01, - FDE_CSSVALUETYPE_List | FDE_CSSVALUETYPE_MaybeString}, - {FDE_CSSPROPERTY_MaxWidth, L"max-width", 0x3EA274F3, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeNumber}, - {FDE_CSSPROPERTY_PaddingRight, L"padding-right", 0x3F616AC2, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeNumber}, - {FDE_CSSPROPERTY_ListStyleImage, L"list-style-image", 0x42A8A86A, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeEnum | - FDE_CSSVALUETYPE_MaybeURI}, - {FDE_CSSPROPERTY_WhiteSpace, L"white-space", 0x42F0429A, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeEnum}, - {FDE_CSSPROPERTY_BorderBottom, L"border-bottom", 0x452CE780, - FDE_CSSVALUETYPE_Shorthand}, - {FDE_CSSPROPERTY_ListStyleType, L"list-style-type", 0x48094789, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeEnum}, - {FDE_CSSPROPERTY_WordBreak, L"word-break", 0x4D74A3CE, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeEnum}, - {FDE_CSSPROPERTY_OverflowX, L"overflow-x", 0x4ECEBF99, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeEnum}, - {FDE_CSSPROPERTY_OverflowY, L"overflow-y", 0x4ECEBF9A, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeEnum}, - {FDE_CSSPROPERTY_BorderTopColor, L"border-top-color", 0x5109B8CA, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeEnum | - FDE_CSSVALUETYPE_MaybeColor}, - {FDE_CSSPROPERTY_FontFamily, L"font-family", 0x574686E6, - FDE_CSSVALUETYPE_List | FDE_CSSVALUETYPE_MaybeString}, - {FDE_CSSPROPERTY_Cursor, L"cursor", 0x59DFCA5E, - FDE_CSSVALUETYPE_List | FDE_CSSVALUETYPE_MaybeEnum | - FDE_CSSVALUETYPE_MaybeString}, - {FDE_CSSPROPERTY_RubyAlign, L"ruby-align", 0x6077BDFA, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeEnum}, - {FDE_CSSPROPERTY_ColumnRuleColor, L"column-rule-color", 0x65DDFD9F, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeEnum | - FDE_CSSVALUETYPE_MaybeColor}, - {FDE_CSSPROPERTY_FontWeight, L"font-weight", 0x6692F60C, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeEnum | - FDE_CSSVALUETYPE_MaybeNumber}, - {FDE_CSSPROPERTY_BorderRightStyle, L"border-right-style", 0x6920DDA7, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeEnum}, - {FDE_CSSPROPERTY_MinHeight, L"min-height", 0x6AAE312A, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeNumber}, - {FDE_CSSPROPERTY_Color, L"color", 0x6E67921F, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeEnum | - FDE_CSSVALUETYPE_MaybeColor}, - {FDE_CSSPROPERTY_LetterSpacing, L"letter-spacing", 0x70536102, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeEnum | - FDE_CSSVALUETYPE_MaybeNumber}, - {FDE_CSSPROPERTY_EmptyCells, L"empty-cells", 0x7531528F, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeEnum}, - {FDE_CSSPROPERTY_TextAlign, L"text-align", 0x7553F1BD, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeEnum}, - {FDE_CSSPROPERTY_RubySpan, L"ruby-span", 0x76FCFCE1, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeEnum | - FDE_CSSVALUETYPE_MaybeFunction}, - {FDE_CSSPROPERTY_Position, L"position", 0x814F82B5, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeEnum}, - {FDE_CSSPROPERTY_BorderStyle, L"border-style", 0x82A4CD5C, - FDE_CSSVALUETYPE_List | FDE_CSSVALUETYPE_MaybeEnum}, - {FDE_CSSPROPERTY_BorderBottomStyle, L"border-bottom-style", 0x88079DBE, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeEnum}, - {FDE_CSSPROPERTY_BorderCollapse, L"border-collapse", 0x8883C7FE, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeEnum}, - {FDE_CSSPROPERTY_ColumnCount, L"column-count", 0x89936A64, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeEnum | - FDE_CSSVALUETYPE_MaybeNumber}, - {FDE_CSSPROPERTY_BorderRightWidth, L"border-right-width", 0x8F5A6036, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeEnum | - FDE_CSSVALUETYPE_MaybeNumber}, - {FDE_CSSPROPERTY_UnicodeBidi, L"unicode-bidi", 0x91670F6C, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeEnum}, - {FDE_CSSPROPERTY_VerticalAlign, L"vertical-align", 0x934A87D2, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeEnum | - FDE_CSSVALUETYPE_MaybeNumber}, - {FDE_CSSPROPERTY_PaddingTop, L"padding-top", 0x959D22B7, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeNumber}, - {FDE_CSSPROPERTY_Columns, L"columns", 0x96FA5D81, - FDE_CSSVALUETYPE_Shorthand}, - {FDE_CSSPROPERTY_Overflow, L"overflow", 0x97B76B54, - FDE_CSSVALUETYPE_Shorthand}, - {FDE_CSSPROPERTY_TableLayout, L"table-layout", 0x9B1CB4B3, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeEnum}, - {FDE_CSSPROPERTY_FontVariant, L"font-variant", 0x9C785779, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeEnum}, - {FDE_CSSPROPERTY_ListStyle, L"list-style", 0x9E6C471A, - FDE_CSSVALUETYPE_Shorthand}, - {FDE_CSSPROPERTY_BackgroundPosition, L"background-position", 0xA8846D22, - FDE_CSSVALUETYPE_List | FDE_CSSVALUETYPE_MaybeEnum | - FDE_CSSVALUETYPE_MaybeNumber}, - {FDE_CSSPROPERTY_BorderWidth, L"border-width", 0xA8DE4FEB, - FDE_CSSVALUETYPE_List | FDE_CSSVALUETYPE_MaybeEnum | - FDE_CSSVALUETYPE_MaybeNumber}, - {FDE_CSSPROPERTY_TextEmphasisColor, L"text-emphasis-color", 0xAAF23478, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeEnum | - FDE_CSSVALUETYPE_MaybeColor}, - {FDE_CSSPROPERTY_BorderLeftStyle, L"border-left-style", 0xABAFBAF4, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeEnum}, - {FDE_CSSPROPERTY_PageBreakInside, L"page-break-inside", 0xACB695F8, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeEnum}, - {FDE_CSSPROPERTY_TextEmphasis, L"text-emphasis", 0xAD0E580C, - FDE_CSSVALUETYPE_Shorthand}, - {FDE_CSSPROPERTY_BorderBottomWidth, L"border-bottom-width", 0xAE41204D, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeEnum | - FDE_CSSVALUETYPE_MaybeNumber}, - {FDE_CSSPROPERTY_ColumnGap, L"column-gap", 0xB5C1BA73, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeEnum | - FDE_CSSVALUETYPE_MaybeNumber}, - {FDE_CSSPROPERTY_Orphans, L"orphans", 0xB716467B, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeNumber}, - {FDE_CSSPROPERTY_BorderRight, L"border-right", 0xB78E9EA9, - FDE_CSSVALUETYPE_Shorthand}, - {FDE_CSSPROPERTY_FontSize, L"font-size", 0xB93956DF, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeEnum | - FDE_CSSVALUETYPE_MaybeNumber}, - {FDE_CSSPROPERTY_PageBreakAfter, L"page-break-after", 0xBC358AEE, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeEnum}, - {FDE_CSSPROPERTY_CaptionSide, L"caption-side", 0xC03F3560, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeEnum}, - {FDE_CSSPROPERTY_BackgroundRepeat, L"background-repeat", 0xC2C2FDCE, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeEnum}, - {FDE_CSSPROPERTY_BorderTopStyle, L"border-top-style", 0xC6F3339C, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeEnum}, - {FDE_CSSPROPERTY_BorderSpacing, L"border-spacing", 0xC72030F0, - FDE_CSSVALUETYPE_List | FDE_CSSVALUETYPE_MaybeNumber}, - {FDE_CSSPROPERTY_TextTransform, L"text-transform", 0xC88EEA6E, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeEnum}, - {FDE_CSSPROPERTY_FontStyle, L"font-style", 0xCB1950F5, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeEnum}, - {FDE_CSSPROPERTY_Font, L"font", 0xCD308B77, FDE_CSSVALUETYPE_Shorthand}, - {FDE_CSSPROPERTY_LineHeight, L"line-height", 0xCFCACE2E, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeEnum | - FDE_CSSVALUETYPE_MaybeNumber}, - {FDE_CSSPROPERTY_MarginRight, L"margin-right", 0xD13C58C9, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeNumber | - FDE_CSSVALUETYPE_MaybeEnum}, - {FDE_CSSPROPERTY_Float, L"float", 0xD1532876, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeEnum}, - {FDE_CSSPROPERTY_BorderLeftWidth, L"border-left-width", 0xD1E93D83, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeEnum | - FDE_CSSVALUETYPE_MaybeNumber}, - {FDE_CSSPROPERTY_Display, L"display", 0xD4224C36, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeEnum}, - {FDE_CSSPROPERTY_Clear, L"clear", 0xD8ED1467, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeEnum}, - {FDE_CSSPROPERTY_ColumnRuleStyle, L"column-rule-style", 0xDBC77871, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeEnum}, - {FDE_CSSPROPERTY_TextCombine, L"text-combine", 0xDC5207CF, - FDE_CSSVALUETYPE_List | FDE_CSSVALUETYPE_MaybeEnum | - FDE_CSSVALUETYPE_MaybeNumber}, - {FDE_CSSPROPERTY_ListStylePosition, L"list-style-position", 0xE1A1DE3C, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeEnum}, - {FDE_CSSPROPERTY_Visibility, L"visibility", 0xE29F5168, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeEnum}, - {FDE_CSSPROPERTY_PaddingBottom, L"padding-bottom", 0xE555B3B9, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeNumber}, - {FDE_CSSPROPERTY_BackgroundAttachment, L"background-attachment", 0xE77981F6, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeEnum}, - {FDE_CSSPROPERTY_BackgroundImage, L"background-image", 0xE9AEB710, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeEnum | - FDE_CSSVALUETYPE_MaybeURI}, - {FDE_CSSPROPERTY_LineBreak, L"line-break", 0xEA2D1D9A, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeEnum}, - {FDE_CSSPROPERTY_Background, L"background", 0xEB49DD40, - FDE_CSSVALUETYPE_Shorthand}, - {FDE_CSSPROPERTY_BorderTopWidth, L"border-top-width", 0xED2CB62B, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeEnum | - FDE_CSSVALUETYPE_MaybeNumber}, - {FDE_CSSPROPERTY_WordSpacing, L"word-spacing", 0xEDA63BAE, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeEnum | - FDE_CSSVALUETYPE_MaybeNumber}, - {FDE_CSSPROPERTY_BorderRightColor, L"border-right-color", 0xF33762D5, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeEnum | - FDE_CSSVALUETYPE_MaybeColor}, - {FDE_CSSPROPERTY_CounterIncrement, L"counter-increment", 0xF4CFB1B2, - FDE_CSSVALUETYPE_List | FDE_CSSVALUETYPE_MaybeEnum | - FDE_CSSVALUETYPE_MaybeNumber | FDE_CSSVALUETYPE_MaybeString}, - {FDE_CSSPROPERTY_Left, L"left", 0xF5AD782B, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeEnum | - FDE_CSSVALUETYPE_MaybeNumber}, - {FDE_CSSPROPERTY_TextDecoration, L"text-decoration", 0xF7C634BA, - FDE_CSSVALUETYPE_List | FDE_CSSVALUETYPE_MaybeEnum}, - {FDE_CSSPROPERTY_Padding, L"padding", 0xF8C373F7, - FDE_CSSVALUETYPE_List | FDE_CSSVALUETYPE_MaybeNumber}, - {FDE_CSSPROPERTY_MarginBottom, L"margin-bottom", 0xF93485A0, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeNumber | - FDE_CSSVALUETYPE_MaybeEnum}, - {FDE_CSSPROPERTY_MarginTop, L"margin-top", 0xFE51DCFE, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeNumber | - FDE_CSSVALUETYPE_MaybeEnum}, - {FDE_CSSPROPERTY_Direction, L"direction", 0xFE746E61, - FDE_CSSVALUETYPE_Primitive | FDE_CSSVALUETYPE_MaybeEnum}, -}; -static const FDE_CSSPROPERTYVALUETABLE g_FDE_CSSPropertyValues[] = { - {FDE_CSSPROPERTYVALUE_Bolder, L"bolder", 0x009F1058}, - {FDE_CSSPROPERTYVALUE_LowerLatin, L"lower-latin", 0x016014CE}, - {FDE_CSSPROPERTYVALUE_Lowercase, L"lowercase", 0x02ACB805}, - {FDE_CSSPROPERTYVALUE_LowerGreek, L"lower-greek", 0x03D81D64}, - {FDE_CSSPROPERTYVALUE_Sesame, L"sesame", 0x0432ECDE}, - {FDE_CSSPROPERTYVALUE_None, L"none", 0x048B6670}, - {FDE_CSSPROPERTYVALUE_NwResize, L"nw-resize", 0x054B4BE4}, - {FDE_CSSPROPERTYVALUE_WResize, L"w-resize", 0x0A2F8D76}, - {FDE_CSSPROPERTYVALUE_Dot, L"dot", 0x0A48CB27}, - {FDE_CSSPROPERTYVALUE_End, L"end", 0x0A631437}, - {FDE_CSSPROPERTYVALUE_Ltr, L"ltr", 0x0B1B56D2}, - {FDE_CSSPROPERTYVALUE_Pre, L"pre", 0x0B848587}, - {FDE_CSSPROPERTYVALUE_Rtl, L"rtl", 0x0BB92C52}, - {FDE_CSSPROPERTYVALUE_Sub, L"sub", 0x0BD37FAA}, - {FDE_CSSPROPERTYVALUE_Top, L"top", 0x0BEDAF33}, - {FDE_CSSPROPERTYVALUE_Visible, L"visible", 0x0F55D7EE}, - {FDE_CSSPROPERTYVALUE_Filled, L"filled", 0x10827DD0}, - {FDE_CSSPROPERTYVALUE_SwResize, L"sw-resize", 0x10B548E9}, - {FDE_CSSPROPERTYVALUE_NoRepeat, L"no-repeat", 0x1235C18B}, - {FDE_CSSPROPERTYVALUE_Default, L"default", 0x14DA2125}, - {FDE_CSSPROPERTYVALUE_Transparent, L"transparent", 0x17B64DB2}, - {FDE_CSSPROPERTYVALUE_Ridge, L"ridge", 0x18EBEE4B}, - {FDE_CSSPROPERTYVALUE_Right, L"right", 0x193ADE3E}, - {FDE_CSSPROPERTYVALUE_HorizontalTb, L"horizontal-tb", 0x1A66A86D}, - {FDE_CSSPROPERTYVALUE_DistributeLetter, L"distribute-letter", 0x1EDBD75C}, - {FDE_CSSPROPERTYVALUE_DoubleCircle, L"double-circle", 0x1FF082BA}, - {FDE_CSSPROPERTYVALUE_Ruby, L"ruby", 0x20D66C02}, - {FDE_CSSPROPERTYVALUE_Collapse, L"collapse", 0x2128D673}, - {FDE_CSSPROPERTYVALUE_Normal, L"normal", 0x247CF3E9}, - {FDE_CSSPROPERTYVALUE_Avoid, L"avoid", 0x24E684B3}, - {FDE_CSSPROPERTYVALUE_UpperRoman, L"upper-roman", 0x28BAC2B6}, - {FDE_CSSPROPERTYVALUE_Auto, L"auto", 0x2B35B6D9}, - {FDE_CSSPROPERTYVALUE_Text, L"text", 0x2D08AF85}, - {FDE_CSSPROPERTYVALUE_XSmall, L"x-small", 0x2D2FCAFE}, - {FDE_CSSPROPERTYVALUE_Thin, L"thin", 0x2D574D53}, - {FDE_CSSPROPERTYVALUE_Repeat, L"repeat", 0x306614A1}, - {FDE_CSSPROPERTYVALUE_Small, L"small", 0x316A3739}, - {FDE_CSSPROPERTYVALUE_NeResize, L"ne-resize", 0x31FD5E12}, - {FDE_CSSPROPERTYVALUE_NoContent, L"no-content", 0x33A1C545}, - {FDE_CSSPROPERTYVALUE_Outside, L"outside", 0x36DF693D}, - {FDE_CSSPROPERTYVALUE_EResize, L"e-resize", 0x36E19FA4}, - {FDE_CSSPROPERTYVALUE_TableRow, L"table-row", 0x3912A02D}, - {FDE_CSSPROPERTYVALUE_Bottom, L"bottom", 0x399F02B5}, - {FDE_CSSPROPERTYVALUE_Underline, L"underline", 0x3A0273A6}, - {FDE_CSSPROPERTYVALUE_CjkIdeographic, L"cjk-ideographic", 0x3A641CC4}, - {FDE_CSSPROPERTYVALUE_SeResize, L"se-resize", 0x3D675B17}, - {FDE_CSSPROPERTYVALUE_Fixed, L"fixed", 0x3D7DEB10}, - {FDE_CSSPROPERTYVALUE_Double, L"double", 0x3D98515B}, - {FDE_CSSPROPERTYVALUE_Solid, L"solid", 0x40623B5B}, - {FDE_CSSPROPERTYVALUE_RubyBaseGroup, L"ruby-base-group", 0x41014E84}, - {FDE_CSSPROPERTYVALUE_OpenQuote, L"open-quote", 0x44A41E8D}, - {FDE_CSSPROPERTYVALUE_Lighter, L"lighter", 0x45BEB7AF}, - {FDE_CSSPROPERTYVALUE_LowerRoman, L"lower-roman", 0x5044D253}, - {FDE_CSSPROPERTYVALUE_Strict, L"strict", 0x52F4EBD9}, - {FDE_CSSPROPERTYVALUE_TableCaption, L"table-caption", 0x5325CD63}, - {FDE_CSSPROPERTYVALUE_Oblique, L"oblique", 0x53EBDDB1}, - {FDE_CSSPROPERTYVALUE_Decimal, L"decimal", 0x54034C2F}, - {FDE_CSSPROPERTYVALUE_Loose, L"loose", 0x54D3A1E2}, - {FDE_CSSPROPERTYVALUE_Hebrew, L"hebrew", 0x565792DD}, - {FDE_CSSPROPERTYVALUE_Hidden, L"hidden", 0x573CB40C}, - {FDE_CSSPROPERTYVALUE_Dashed, L"dashed", 0x58A3DD29}, - {FDE_CSSPROPERTYVALUE_Embed, L"embed", 0x59C8F27D}, - {FDE_CSSPROPERTYVALUE_TableRowGroup, L"table-row-group", 0x5A43BD07}, - {FDE_CSSPROPERTYVALUE_TableColumn, L"table-column", 0x5E705DA3}, - {FDE_CSSPROPERTYVALUE_Static, L"static", 0x5E7555E8}, - {FDE_CSSPROPERTYVALUE_Outset, L"outset", 0x61236164}, - {FDE_CSSPROPERTYVALUE_DecimalLeadingZero, L"decimal-leading-zero", - 0x61DFC55D}, - {FDE_CSSPROPERTYVALUE_KeepWords, L"keep-words", 0x63964801}, - {FDE_CSSPROPERTYVALUE_KatakanaIroha, L"katakana-iroha", 0x65D7C91C}, - {FDE_CSSPROPERTYVALUE_Super, L"super", 0x6A4F842F}, - {FDE_CSSPROPERTYVALUE_Center, L"center", 0x6C51AFC1}, - {FDE_CSSPROPERTYVALUE_TableHeaderGroup, L"table-header-group", 0x706103D8}, - {FDE_CSSPROPERTYVALUE_Inside, L"inside", 0x709CB0FC}, - {FDE_CSSPROPERTYVALUE_XxLarge, L"xx-large", 0x70BB1508}, - {FDE_CSSPROPERTYVALUE_Triangle, L"triangle", 0x7524EDF6}, - {FDE_CSSPROPERTYVALUE_RubyTextGroup, L"ruby-text-group", 0x78C2B98E}, - {FDE_CSSPROPERTYVALUE_Circle, L"circle", 0x7ABEC0D2}, - {FDE_CSSPROPERTYVALUE_Hiragana, L"hiragana", 0x7BF5E25B}, - {FDE_CSSPROPERTYVALUE_RepeatX, L"repeat-x", 0x7C8F3226}, - {FDE_CSSPROPERTYVALUE_RepeatY, L"repeat-y", 0x7C8F3227}, - {FDE_CSSPROPERTYVALUE_Move, L"move", 0x7DA03417}, - {FDE_CSSPROPERTYVALUE_HiraganaIroha, L"hiragana-iroha", 0x7EE863FB}, - {FDE_CSSPROPERTYVALUE_RubyBase, L"ruby-base", 0x7FD1B1EA}, - {FDE_CSSPROPERTYVALUE_Scroll, L"scroll", 0x84787AEF}, - {FDE_CSSPROPERTYVALUE_Smaller, L"smaller", 0x849769F0}, - {FDE_CSSPROPERTYVALUE_TableFooterGroup, L"table-footer-group", 0x85BDD97E}, - {FDE_CSSPROPERTYVALUE_Baseline, L"baseline", 0x87436BA3}, - {FDE_CSSPROPERTYVALUE_Separate, L"separate", 0x877C66B5}, - {FDE_CSSPROPERTYVALUE_Armenian, L"armenian", 0x889BE4EB}, - {FDE_CSSPROPERTYVALUE_Open, L"open", 0x8B90E1F2}, - {FDE_CSSPROPERTYVALUE_Relative, L"relative", 0x8C995B5C}, - {FDE_CSSPROPERTYVALUE_Thick, L"thick", 0x8CC35EB3}, - {FDE_CSSPROPERTYVALUE_Justify, L"justify", 0x8D269CAE}, - {FDE_CSSPROPERTYVALUE_Middle, L"middle", 0x947FA00F}, - {FDE_CSSPROPERTYVALUE_Always, L"always", 0x959AB231}, - {FDE_CSSPROPERTYVALUE_DistributeSpace, L"distribute-space", 0x97A20E58}, - {FDE_CSSPROPERTYVALUE_LineEdge, L"line-edge", 0x9A845D2A}, - {FDE_CSSPROPERTYVALUE_PreWrap, L"pre-wrap", 0x9D59588E}, - {FDE_CSSPROPERTYVALUE_Medium, L"medium", 0xA084A381}, - {FDE_CSSPROPERTYVALUE_NResize, L"n-resize", 0xA088968D}, - {FDE_CSSPROPERTYVALUE_ListItem, L"list-item", 0xA32382B8}, - {FDE_CSSPROPERTYVALUE_Show, L"show", 0xA66C10C1}, - {FDE_CSSPROPERTYVALUE_Currentcolor, L"currentColor", 0xA7883922}, - {FDE_CSSPROPERTYVALUE_NoCloseQuote, L"no-close-quote", 0xA79CBFFB}, - {FDE_CSSPROPERTYVALUE_VerticalLr, L"vertical-lr", 0xA8673F65}, - {FDE_CSSPROPERTYVALUE_VerticalRl, L"vertical-rl", 0xA8675E25}, - {FDE_CSSPROPERTYVALUE_Pointer, L"pointer", 0xA90929C1}, - {FDE_CSSPROPERTYVALUE_XxSmall, L"xx-small", 0xADE1FC76}, - {FDE_CSSPROPERTYVALUE_Bold, L"bold", 0xB18313A1}, - {FDE_CSSPROPERTYVALUE_Both, L"both", 0xB1833CAD}, - {FDE_CSSPROPERTYVALUE_SmallCaps, L"small-caps", 0xB299428D}, - {FDE_CSSPROPERTYVALUE_Katakana, L"katakana", 0xB421A4BC}, - {FDE_CSSPROPERTYVALUE_After, L"after", 0xB6B44172}, - {FDE_CSSPROPERTYVALUE_Horizontal, L"horizontal", 0xB7732DEA}, - {FDE_CSSPROPERTYVALUE_Dotted, L"dotted", 0xB88652A4}, - {FDE_CSSPROPERTYVALUE_Disc, L"disc", 0xBEBC18C3}, - {FDE_CSSPROPERTYVALUE_Georgian, L"georgian", 0xBEF99E8C}, - {FDE_CSSPROPERTYVALUE_Inline, L"inline", 0xC02D649F}, - {FDE_CSSPROPERTYVALUE_Overline, L"overline", 0xC0EC9FA4}, - {FDE_CSSPROPERTYVALUE_Wait, L"wait", 0xC1613BB5}, - {FDE_CSSPROPERTYVALUE_BreakAll, L"break-all", 0xC3145BAB}, - {FDE_CSSPROPERTYVALUE_UpperAlpha, L"upper-alpha", 0xC52D4A9F}, - {FDE_CSSPROPERTYVALUE_Capitalize, L"capitalize", 0xC5321D46}, - {FDE_CSSPROPERTYVALUE_Nowrap, L"nowrap", 0xC7994417}, - {FDE_CSSPROPERTYVALUE_TextBottom, L"text-bottom", 0xC7D08D87}, - {FDE_CSSPROPERTYVALUE_NoOpenQuote, L"no-open-quote", 0xC8CD7877}, - {FDE_CSSPROPERTYVALUE_Groove, L"groove", 0xCB24A412}, - {FDE_CSSPROPERTYVALUE_Progress, L"progress", 0xCD1D9835}, - {FDE_CSSPROPERTYVALUE_Larger, L"larger", 0xCD3C409D}, - {FDE_CSSPROPERTYVALUE_CloseQuote, L"close-quote", 0xCF8696D1}, - {FDE_CSSPROPERTYVALUE_TableCell, L"table-cell", 0xCFB5E595}, - {FDE_CSSPROPERTYVALUE_PreLine, L"pre-line", 0xD04FEDBC}, - {FDE_CSSPROPERTYVALUE_Absolute, L"absolute", 0xD0B2D55F}, - {FDE_CSSPROPERTYVALUE_InlineTable, L"inline-table", 0xD131F494}, - {FDE_CSSPROPERTYVALUE_BidiOverride, L"bidi-override", 0xD161FDE5}, - {FDE_CSSPROPERTYVALUE_InlineBlock, L"inline-block", 0xD26A8BD7}, - {FDE_CSSPROPERTYVALUE_Inset, L"inset", 0xD6F23243}, - {FDE_CSSPROPERTYVALUE_Crosshair, L"crosshair", 0xD6F8018E}, - {FDE_CSSPROPERTYVALUE_UpperLatin, L"upper-latin", 0xD9D60531}, - {FDE_CSSPROPERTYVALUE_Help, L"help", 0xDA002969}, - {FDE_CSSPROPERTYVALUE_Hide, L"hide", 0xDA69395A}, - {FDE_CSSPROPERTYVALUE_Uppercase, L"uppercase", 0xDAD595A8}, - {FDE_CSSPROPERTYVALUE_SResize, L"s-resize", 0xDB3AADF2}, - {FDE_CSSPROPERTYVALUE_Table, L"table", 0xDB9BE968}, - {FDE_CSSPROPERTYVALUE_Blink, L"blink", 0xDC36E390}, - {FDE_CSSPROPERTYVALUE_Block, L"block", 0xDCD480AB}, - {FDE_CSSPROPERTYVALUE_Start, L"start", 0xE1D9D5AE}, - {FDE_CSSPROPERTYVALUE_TableColumnGroup, L"table-column-group", 0xE2258EFD}, - {FDE_CSSPROPERTYVALUE_Italic, L"italic", 0xE31D5396}, - {FDE_CSSPROPERTYVALUE_LineThrough, L"line-through", 0xE4C5A276}, - {FDE_CSSPROPERTYVALUE_KeepAll, L"keep-all", 0xE704A72B}, - {FDE_CSSPROPERTYVALUE_LowerAlpha, L"lower-alpha", 0xECB75A3C}, - {FDE_CSSPROPERTYVALUE_RunIn, L"run-in", 0xEEC930B9}, - {FDE_CSSPROPERTYVALUE_Square, L"square", 0xEF85D351}, - {FDE_CSSPROPERTYVALUE_XLarge, L"x-large", 0xF008E390}, - {FDE_CSSPROPERTYVALUE_Large, L"large", 0xF4434FCB}, - {FDE_CSSPROPERTYVALUE_Before, L"before", 0xF4FFCE73}, - {FDE_CSSPROPERTYVALUE_Left, L"left", 0xF5AD782B}, - {FDE_CSSPROPERTYVALUE_TextTop, L"text-top", 0xFCB58D45}, - {FDE_CSSPROPERTYVALUE_RubyText, L"ruby-text", 0xFCC77174}, - {FDE_CSSPROPERTYVALUE_NoDisplay, L"no-display", 0xFE482860}, -}; -static const FDE_CSSMEDIATYPETABLE g_FDE_CSSMediaTypes[] = { - {0xF09, 0x02}, {0x4880, 0x20}, {0x536A, 0x80}, - {0x741D, 0x10}, {0x76ED, 0x08}, {0x7CFB, 0x01}, - {0x9578, 0x04}, {0xC8E1, 0x40}, {0xD0F9, 0xFF}, -}; -static const FDE_CSSLENGTHUNITTABLE g_FDE_CSSLengthUnits[] = { - {0x0672, 3}, {0x067D, 4}, {0x1AF7, 8}, {0x2F7A, 7}, - {0x3ED3, 10}, {0x3EE4, 9}, {0x3EE8, 5}, {0xFC30, 6}, -}; -static const FDE_CSSCOLORTABLE g_FDE_CSSColors[] = { - {0x031B47FE, 0xff000080}, {0x0BB8DF5B, 0xffff0000}, - {0x0D82A78C, 0xff800000}, {0x2ACC82E8, 0xff00ffff}, - {0x2D083986, 0xff008080}, {0x4A6A6195, 0xffc0c0c0}, - {0x546A8EF3, 0xff808080}, {0x65C9169C, 0xffffa500}, - {0x8422BB61, 0xffffffff}, {0x9271A558, 0xff800080}, - {0xA65A3EE3, 0xffff00ff}, {0xB1345708, 0xff0000ff}, - {0xB6D2CF1F, 0xff808000}, {0xD19B5E1C, 0xffffff00}, - {0xDB64391D, 0xff000000}, {0xF616D507, 0xff00ff00}, - {0xF6EFFF31, 0xff008000}, -}; -static const FDE_CSSPERSUDOTABLE g_FDE_CSSPersudoType[] = { - {FDE_CSSPERSUDO_After, L":after", 0x16EE1FEC}, - {FDE_CSSPERSUDO_Before, L":before", 0x7DCDDE2D}, -}; -FDE_LPCCSSPERSUDOTABLE FDE_GetCSSPersudoByEnum(FDE_CSSPERSUDO ePersudo) { - return (ePersudo < FDE_CSSPERSUDO_NONE) ? (g_FDE_CSSPersudoType + ePersudo) - : NULL; -} -FDE_LPCCSSPROPERTYTABLE FDE_GetCSSPropertyByName(const FX_WCHAR* pszName, - int32_t iLength) { - FXSYS_assert(pszName != NULL && iLength > 0); - FX_DWORD dwHash = FX_HashCode_String_GetW(pszName, iLength, TRUE); - int32_t iEnd = FDE_CSSPROPERTY_MAX - 1; - int32_t iMid, iStart = 0; - FX_DWORD dwMid; - do { - iMid = (iStart + iEnd) / 2; - dwMid = g_FDE_CSSProperties[iMid].dwHash; - if (dwHash == dwMid) { - return g_FDE_CSSProperties + iMid; - } else if (dwHash > dwMid) { - iStart = iMid + 1; - } else { - iEnd = iMid - 1; - } - } while (iStart <= iEnd); - return NULL; -} -FDE_LPCCSSPROPERTYTABLE FDE_GetCSSPropertyByEnum(FDE_CSSPROPERTY eName) { - return (eName < FDE_CSSPROPERTY_MAX) ? (g_FDE_CSSProperties + eName) : NULL; -} -FDE_LPCCSSPROPERTYVALUETABLE FDE_GetCSSPropertyValueByName( - const FX_WCHAR* pszName, - int32_t iLength) { - FXSYS_assert(pszName != NULL && iLength > 0); - FX_DWORD dwHash = FX_HashCode_String_GetW(pszName, iLength, TRUE); - int32_t iEnd = FDE_CSSPROPERTYVALUE_MAX - 1; - int32_t iMid, iStart = 0; - FX_DWORD dwMid; - do { - iMid = (iStart + iEnd) / 2; - dwMid = g_FDE_CSSPropertyValues[iMid].dwHash; - if (dwHash == dwMid) { - return g_FDE_CSSPropertyValues + iMid; - } else if (dwHash > dwMid) { - iStart = iMid + 1; - } else { - iEnd = iMid - 1; - } - } while (iStart <= iEnd); - return NULL; -} -FDE_LPCCSSPROPERTYVALUETABLE FDE_GetCSSPropertyValueByEnum( - FDE_CSSPROPERTYVALUE eName) { - return (eName < FDE_CSSPROPERTYVALUE_MAX) ? (g_FDE_CSSPropertyValues + eName) - : NULL; -} -FDE_LPCCSSMEDIATYPETABLE FDE_GetCSSMediaTypeByName(const FX_WCHAR* pszName, - int32_t iLength) { - FXSYS_assert(pszName != NULL && iLength > 0); - FX_WORD wHash = (FX_WORD)FX_HashCode_String_GetW(pszName, iLength, TRUE); - int32_t iEnd = - sizeof(g_FDE_CSSMediaTypes) / sizeof(FDE_CSSMEDIATYPETABLE) - 1; - int32_t iMid, iStart = 0; - FX_WORD uMid; - do { - iMid = (iStart + iEnd) / 2; - uMid = g_FDE_CSSMediaTypes[iMid].wHash; - if (wHash == uMid) { - return g_FDE_CSSMediaTypes + iMid; - } else if (wHash > uMid) { - iStart = iMid + 1; - } else { - iEnd = iMid - 1; - } - } while (iStart <= iEnd); - return NULL; -} -FDE_LPCCSSLENGTHUNITTABLE FDE_GetCSSLengthUnitByName(const FX_WCHAR* pszName, - int32_t iLength) { - FXSYS_assert(pszName != NULL && iLength > 0); - FX_WORD wHash = (FX_WORD)FX_HashCode_String_GetW(pszName, iLength, TRUE); - int32_t iEnd = - sizeof(g_FDE_CSSLengthUnits) / sizeof(FDE_CSSLENGTHUNITTABLE) - 1; - int32_t iMid, iStart = 0; - FX_WORD wMid; - do { - iMid = (iStart + iEnd) / 2; - wMid = g_FDE_CSSLengthUnits[iMid].wHash; - if (wHash == wMid) { - return g_FDE_CSSLengthUnits + iMid; - } else if (wHash > wMid) { - iStart = iMid + 1; - } else { - iEnd = iMid - 1; - } - } while (iStart <= iEnd); - return NULL; -} -FDE_LPCCSSCOLORTABLE FDE_GetCSSColorByName(const FX_WCHAR* pszName, - int32_t iLength) { - FXSYS_assert(pszName != NULL && iLength > 0); - FX_DWORD dwHash = FX_HashCode_String_GetW(pszName, iLength, TRUE); - int32_t iEnd = sizeof(g_FDE_CSSColors) / sizeof(FDE_CSSCOLORTABLE) - 1; - int32_t iMid, iStart = 0; - FX_DWORD dwMid; - do { - iMid = (iStart + iEnd) / 2; - dwMid = g_FDE_CSSColors[iMid].dwHash; - if (dwHash == dwMid) { - return g_FDE_CSSColors + iMid; - } else if (dwHash > dwMid) { - iStart = iMid + 1; - } else { - iEnd = iMid - 1; - } - } while (iStart <= iEnd); - return NULL; -} -FX_BOOL FDE_ParseCSSNumber(const FX_WCHAR* pszValue, - int32_t iValueLen, - FX_FLOAT& fValue, - FDE_CSSPRIMITIVETYPE& eUnit) { - FXSYS_assert(pszValue != NULL && iValueLen > 0); - int32_t iUsedLen = 0; - fValue = FX_wcstof(pszValue, iValueLen, &iUsedLen); - if (iUsedLen <= 0) { - return FALSE; - } - iValueLen -= iUsedLen; - pszValue += iUsedLen; - eUnit = FDE_CSSPRIMITIVETYPE_Number; - if (iValueLen >= 1 && *pszValue == '%') { - eUnit = FDE_CSSPRIMITIVETYPE_Percent; - } else if (iValueLen == 2) { - FDE_LPCCSSLENGTHUNITTABLE pUnit = FDE_GetCSSLengthUnitByName(pszValue, 2); - if (pUnit != NULL) { - eUnit = (FDE_CSSPRIMITIVETYPE)pUnit->wValue; - } - } - return TRUE; -} - -FX_BOOL FDE_ParseCSSString(const FX_WCHAR* pszValue, - int32_t iValueLen, - int32_t& iOffset, - int32_t& iLength) { - FXSYS_assert(pszValue != NULL && iValueLen > 0); - iOffset = 0; - iLength = iValueLen; - if (iValueLen >= 2) { - FX_WCHAR first = pszValue[0], last = pszValue[iValueLen - 1]; - if ((first == '\"' && last == '\"') || (first == '\'' && last == '\'')) { - iOffset = 1, iLength -= 2; - } - } - return iValueLen > 0; -} - -FX_BOOL FDE_ParseCSSURI(const FX_WCHAR* pszValue, - int32_t iValueLen, - int32_t& iOffset, - int32_t& iLength) { - FXSYS_assert(pszValue != NULL && iValueLen > 0); - if (iValueLen < 6 || pszValue[iValueLen - 1] != ')' || - FX_wcsnicmp(L"url(", pszValue, 4)) { - return FALSE; - } - if (FDE_ParseCSSString(pszValue + 4, iValueLen - 5, iOffset, iLength)) { - iOffset += 4; - return TRUE; - } - return FALSE; -} - -FX_BOOL FDE_ParseCSSColor(const FX_WCHAR* pszValue, - int32_t iValueLen, - FX_ARGB& dwColor) { - FXSYS_assert(pszValue != NULL && iValueLen > 0); - if (*pszValue == '#') { - switch (iValueLen) { - case 4: { - uint8_t red = FX_Hex2Dec((uint8_t)pszValue[1], (uint8_t)pszValue[1]); - uint8_t green = FX_Hex2Dec((uint8_t)pszValue[2], (uint8_t)pszValue[2]); - uint8_t blue = FX_Hex2Dec((uint8_t)pszValue[3], (uint8_t)pszValue[3]); - dwColor = ArgbEncode(255, red, green, blue); - } - return TRUE; - case 7: { - uint8_t red = FX_Hex2Dec((uint8_t)pszValue[1], (uint8_t)pszValue[2]); - uint8_t green = FX_Hex2Dec((uint8_t)pszValue[3], (uint8_t)pszValue[4]); - uint8_t blue = FX_Hex2Dec((uint8_t)pszValue[5], (uint8_t)pszValue[6]); - dwColor = ArgbEncode(255, red, green, blue); - } - return TRUE; - } - } else if (iValueLen >= 10) { - if (pszValue[iValueLen - 1] != ')' || FX_wcsnicmp(L"rgb(", pszValue, 4)) { - return FALSE; - } - uint8_t rgb[3] = {0}; - FX_FLOAT fValue; - FDE_CSSPRIMITIVETYPE eType; - CFDE_CSSValueListParser list(pszValue + 4, iValueLen - 5, ','); - for (int32_t i = 0; i < 3; ++i) { - if (!list.NextValue(eType, pszValue, iValueLen)) { - return FALSE; - } - if (eType != FDE_CSSPRIMITIVETYPE_Number) { - return FALSE; - } - if (!FDE_ParseCSSNumber(pszValue, iValueLen, fValue, eType)) { - return FALSE; - } - rgb[i] = eType == FDE_CSSPRIMITIVETYPE_Percent - ? FXSYS_round(fValue * 2.55f) - : FXSYS_round(fValue); - } - dwColor = ArgbEncode(255, rgb[0], rgb[1], rgb[2]); - return TRUE; - } else { - FDE_LPCCSSCOLORTABLE pColor = FDE_GetCSSColorByName(pszValue, iValueLen); - if (pColor != NULL) { - dwColor = pColor->dwValue; - return TRUE; - } - } - return FALSE; -} - -CFDE_CSSValueList::CFDE_CSSValueList(IFX_MEMAllocator* pStaticStore, - const CFDE_CSSValueArray& list) { - m_iCount = list.GetSize(); - int32_t iByteCount = m_iCount * sizeof(IFDE_CSSValue*); - m_ppList = (IFDE_CSSValue**)pStaticStore->Alloc(iByteCount); - FXSYS_memcpy(m_ppList, list.GetData(), iByteCount); -} -FX_BOOL CFDE_CSSValueListParser::NextValue(FDE_CSSPRIMITIVETYPE& eType, - const FX_WCHAR*& pStart, - int32_t& iLength) { - while (m_pCur < m_pEnd && (*m_pCur <= ' ' || *m_pCur == m_Separator)) { - ++m_pCur; - } - if (m_pCur >= m_pEnd) { - return FALSE; - } - eType = FDE_CSSPRIMITIVETYPE_Unknown; - pStart = m_pCur; - iLength = 0; - FX_WCHAR wch = *m_pCur; - if (wch == '#') { - iLength = SkipTo(' '); - if (iLength == 4 || iLength == 7) { - eType = FDE_CSSPRIMITIVETYPE_RGB; - } - } else if ((wch >= '0' && wch <= '9') || wch == '.' || wch == '-' || - wch == '+') { - while (m_pCur < m_pEnd && (*m_pCur > ' ' && *m_pCur != m_Separator)) { - ++m_pCur; - } - iLength = m_pCur - pStart; - if (iLength > 0) { - eType = FDE_CSSPRIMITIVETYPE_Number; - } - } else if (wch == '\"' || wch == '\'') { - pStart++; - iLength = SkipTo(wch) - 1; - m_pCur++; - eType = FDE_CSSPRIMITIVETYPE_String; - } else if (m_pEnd - m_pCur > 5 && m_pCur[3] == '(') { - if (FX_wcsnicmp(L"url", m_pCur, 3) == 0) { - wch = m_pCur[4]; - if (wch == '\"' || wch == '\'') { - pStart += 5; - iLength = SkipTo(wch) - 6; - m_pCur += 2; - } else { - pStart += 4; - iLength = SkipTo(')') - 4; - m_pCur++; - } - eType = FDE_CSSPRIMITIVETYPE_URI; - } else if (FX_wcsnicmp(L"rgb", m_pCur, 3) == 0) { - iLength = SkipTo(')') + 1; - m_pCur++; - eType = FDE_CSSPRIMITIVETYPE_RGB; - } - } else { - iLength = SkipTo(m_Separator, TRUE, TRUE); - eType = FDE_CSSPRIMITIVETYPE_String; - } - return m_pCur <= m_pEnd && iLength > 0; -} -int32_t CFDE_CSSValueListParser::SkipTo(FX_WCHAR wch, - FX_BOOL bWSSeparator, - FX_BOOL bBrContinue) { - const FX_WCHAR* pStart = m_pCur; - if (!bBrContinue) { - if (bWSSeparator) { - while ((++m_pCur < m_pEnd) && (*m_pCur != wch) && (*m_pCur > ' ')) { - continue; - } - } else { - while (++m_pCur < m_pEnd && *m_pCur != wch) { - continue; - } - } - - } else { - int32_t iBracketCount = 0; - if (bWSSeparator) { - while ((m_pCur < m_pEnd) && (*m_pCur != wch) && (*m_pCur > ' ')) { - if (*m_pCur == '(') { - iBracketCount++; - } else if (*m_pCur == ')') { - iBracketCount--; - } - m_pCur++; - } - } else { - while (m_pCur < m_pEnd && *m_pCur != wch) { - if (*m_pCur == '(') { - iBracketCount++; - } else if (*m_pCur == ')') { - iBracketCount--; - } - m_pCur++; - } - } - while (iBracketCount > 0 && m_pCur < m_pEnd) { - if (*m_pCur == ')') { - iBracketCount--; - } - m_pCur++; - } - } - return m_pCur - pStart; -} diff --git a/xfa/src/fde/css/fde_cssdatatable.h b/xfa/src/fde/css/fde_cssdatatable.h deleted file mode 100644 index 950b8d358d..0000000000 --- a/xfa/src/fde/css/fde_cssdatatable.h +++ /dev/null @@ -1,200 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FDE_CSS_FDE_CSSDATATABLE_H_ -#define XFA_SRC_FDE_CSS_FDE_CSSDATATABLE_H_ - -#include "core/include/fxcrt/fx_system.h" -#include "xfa/src/fde/css/fde_css.h" -#include "xfa/src/fgas/crt/fgas_memory.h" - -class CFDE_CSSFunction : public CFX_Target { - public: - CFDE_CSSFunction(const FX_WCHAR* pszFuncName, IFDE_CSSValueList* pArgList) - : m_pArgList(pArgList), m_pszFuncName(pszFuncName) { - FXSYS_assert(pArgList != NULL); - } - int32_t CountArgs() const { return m_pArgList->CountValues(); } - IFDE_CSSValue* GetArgs(int32_t index) const { - return m_pArgList->GetValue(index); - } - const FX_WCHAR* GetFuncName() const { return m_pszFuncName; } - - protected: - IFDE_CSSValueList* m_pArgList; - const FX_WCHAR* m_pszFuncName; -}; -class CFDE_CSSPrimitiveValue : public IFDE_CSSPrimitiveValue, - public CFX_Target { - public: - CFDE_CSSPrimitiveValue(const CFDE_CSSPrimitiveValue& src) { *this = src; } - CFDE_CSSPrimitiveValue(FX_ARGB color) - : m_eType(FDE_CSSPRIMITIVETYPE_RGB), m_dwColor(color) {} - CFDE_CSSPrimitiveValue(FDE_CSSPROPERTYVALUE eValue) - : m_eType(FDE_CSSPRIMITIVETYPE_Enum), m_eEnum(eValue) {} - CFDE_CSSPrimitiveValue(FDE_CSSPRIMITIVETYPE eType, FX_FLOAT fValue) - : m_eType(eType), m_fNumber(fValue) {} - CFDE_CSSPrimitiveValue(FDE_CSSPRIMITIVETYPE eType, const FX_WCHAR* pValue) - : m_eType(eType), m_pString(pValue) { - FXSYS_assert(m_pString != NULL); - } - CFDE_CSSPrimitiveValue(CFDE_CSSFunction* pFunction) - : m_eType(FDE_CSSPRIMITIVETYPE_Function), m_pFunction(pFunction) {} - - virtual FDE_CSSPRIMITIVETYPE GetPrimitiveType() const { return m_eType; } - - virtual FX_ARGB GetRGBColor() const { - FXSYS_assert(m_eType == FDE_CSSPRIMITIVETYPE_RGB); - return m_dwColor; - } - virtual FX_FLOAT GetFloat() const { - FXSYS_assert(m_eType >= FDE_CSSPRIMITIVETYPE_Number && - m_eType <= FDE_CSSPRIMITIVETYPE_PC); - return m_fNumber; - } - virtual const FX_WCHAR* GetString(int32_t& iLength) const { - FXSYS_assert(m_eType >= FDE_CSSPRIMITIVETYPE_String && - m_eType <= FDE_CSSPRIMITIVETYPE_URI); - iLength = FXSYS_wcslen(m_pString); - return m_pString; - } - virtual FDE_CSSPROPERTYVALUE GetEnum() const { - FXSYS_assert(m_eType == FDE_CSSPRIMITIVETYPE_Enum); - return m_eEnum; - } - virtual const FX_WCHAR* GetFuncName() const { - FXSYS_assert(m_eType == FDE_CSSPRIMITIVETYPE_Function); - return m_pFunction->GetFuncName(); - } - virtual int32_t CountArgs() const { - FXSYS_assert(m_eType == FDE_CSSPRIMITIVETYPE_Function); - return m_pFunction->CountArgs(); - } - virtual IFDE_CSSValue* GetArgs(int32_t index) const { - FXSYS_assert(m_eType == FDE_CSSPRIMITIVETYPE_Function); - return m_pFunction->GetArgs(index); - } - - FDE_CSSPRIMITIVETYPE m_eType; - union { - FX_ARGB m_dwColor; - FX_FLOAT m_fNumber; - const FX_WCHAR* m_pString; - FDE_CSSPROPERTYVALUE m_eEnum; - CFDE_CSSFunction* m_pFunction; - }; -}; -typedef CFX_ArrayTemplate CFDE_CSSPrimitiveArray; -typedef CFX_ArrayTemplate CFDE_CSSValueArray; -class CFDE_CSSValueList : public IFDE_CSSValueList, public CFX_Target { - public: - CFDE_CSSValueList(IFX_MEMAllocator* pStaticStore, - const CFDE_CSSValueArray& list); - virtual int32_t CountValues() const { return m_iCount; } - virtual IFDE_CSSValue* GetValue(int32_t index) const { - return m_ppList[index]; - } - - protected: - IFDE_CSSValue** m_ppList; - int32_t m_iCount; -}; -class CFDE_CSSValueListParser : public CFX_Target { - public: - CFDE_CSSValueListParser(const FX_WCHAR* psz, int32_t iLen, FX_WCHAR separator) - : m_Separator(separator), m_pCur(psz), m_pEnd(psz + iLen) { - FXSYS_assert(psz != NULL && iLen > 0); - } - FX_BOOL NextValue(FDE_CSSPRIMITIVETYPE& eType, - const FX_WCHAR*& pStart, - int32_t& iLength); - FX_WCHAR m_Separator; - - protected: - int32_t SkipTo(FX_WCHAR wch, - FX_BOOL bWSSeparator = FALSE, - FX_BOOL bBrContinue = FALSE); - const FX_WCHAR* m_pCur; - const FX_WCHAR* m_pEnd; -}; - -#define FDE_CSSVALUETYPE_MaybeNumber 0x0100 -#define FDE_CSSVALUETYPE_MaybeEnum 0x0200 -#define FDE_CSSVALUETYPE_MaybeURI 0x0400 -#define FDE_CSSVALUETYPE_MaybeString 0x0800 -#define FDE_CSSVALUETYPE_MaybeColor 0x1000 -#define FDE_CSSVALUETYPE_MaybeFunction 0x2000 -#define FDE_IsOnlyValue(type, enum) \ - (((type) & ~(enum)) == FDE_CSSVALUETYPE_Primitive) -struct FDE_CSSPROPERTYTABLE { - FDE_CSSPROPERTY eName; - const FX_WCHAR* pszName; - FX_DWORD dwHash; - FX_DWORD dwType; -}; -typedef FDE_CSSPROPERTYTABLE const* FDE_LPCCSSPROPERTYTABLE; - -FDE_LPCCSSPROPERTYTABLE FDE_GetCSSPropertyByName(const FX_WCHAR* pszName, - int32_t iLength); -FDE_LPCCSSPROPERTYTABLE FDE_GetCSSPropertyByEnum(FDE_CSSPROPERTY eName); -struct FDE_CSSPROPERTYVALUETABLE { - FDE_CSSPROPERTYVALUE eName; - const FX_WCHAR* pszName; - FX_DWORD dwHash; -}; -typedef FDE_CSSPROPERTYVALUETABLE const* FDE_LPCCSSPROPERTYVALUETABLE; - -FDE_LPCCSSPROPERTYVALUETABLE FDE_GetCSSPropertyValueByName( - const FX_WCHAR* pszName, - int32_t iLength); -FDE_LPCCSSPROPERTYVALUETABLE FDE_GetCSSPropertyValueByEnum( - FDE_CSSPROPERTYVALUE eName); -struct FDE_CSSMEDIATYPETABLE { - FX_WORD wHash; - FX_WORD wValue; -}; -typedef FDE_CSSMEDIATYPETABLE const* FDE_LPCCSSMEDIATYPETABLE; -FDE_LPCCSSMEDIATYPETABLE FDE_GetCSSMediaTypeByName(const FX_WCHAR* pszName, - int32_t iLength); -struct FDE_CSSLENGTHUNITTABLE { - FX_WORD wHash; - FX_WORD wValue; -}; -typedef FDE_CSSLENGTHUNITTABLE const* FDE_LPCCSSLENGTHUNITTABLE; -FDE_LPCCSSLENGTHUNITTABLE FDE_GetCSSLengthUnitByName(const FX_WCHAR* pszName, - int32_t iLength); -struct FDE_CSSCOLORTABLE { - FX_DWORD dwHash; - FX_ARGB dwValue; -}; -typedef FDE_CSSCOLORTABLE const* FDE_LPCCSSCOLORTABLE; -FDE_LPCCSSCOLORTABLE FDE_GetCSSColorByName(const FX_WCHAR* pszName, - int32_t iLength); -struct FDE_CSSPERSUDOTABLE { - FDE_CSSPERSUDO eName; - const FX_WCHAR* pszName; - FX_DWORD dwHash; -}; -typedef FDE_CSSPERSUDOTABLE const* FDE_LPCCSSPERSUDOTABLE; - -FDE_LPCCSSPERSUDOTABLE FDE_GetCSSPersudoByEnum(FDE_CSSPERSUDO ePersudo); -FX_BOOL FDE_ParseCSSNumber(const FX_WCHAR* pszValue, - int32_t iValueLen, - FX_FLOAT& fValue, - FDE_CSSPRIMITIVETYPE& eUnit); -FX_BOOL FDE_ParseCSSString(const FX_WCHAR* pszValue, - int32_t iValueLen, - int32_t& iOffset, - int32_t& iLength); -FX_BOOL FDE_ParseCSSColor(const FX_WCHAR* pszValue, - int32_t iValueLen, - FX_ARGB& dwColor); -FX_BOOL FDE_ParseCSSURI(const FX_WCHAR* pszValue, - int32_t iValueLen, - int32_t& iOffset, - int32_t& iLength); - -#endif // XFA_SRC_FDE_CSS_FDE_CSSDATATABLE_H_ diff --git a/xfa/src/fde/css/fde_cssdeclaration.cpp b/xfa/src/fde/css/fde_cssdeclaration.cpp deleted file mode 100644 index 073c14d414..0000000000 --- a/xfa/src/fde/css/fde_cssdeclaration.cpp +++ /dev/null @@ -1,1377 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fde/css/fde_cssdeclaration.h" - -#include "core/include/fxcrt/fx_ext.h" -#include "xfa/src/fgas/crt/fgas_system.h" - -IFDE_CSSValue* CFDE_CSSDeclaration::GetProperty(FDE_CSSPROPERTY eProperty, - FX_BOOL& bImportant) const { - for (const FDE_CSSPropertyHolder* pHolder = m_pFirstProperty; pHolder; - pHolder = pHolder->pNext) { - if (pHolder->eProperty == eProperty) { - bImportant = pHolder->bImportant; - return pHolder->pValue; - } - } - return NULL; -} -FX_POSITION CFDE_CSSDeclaration::GetStartPosition() const { - return (FX_POSITION)m_pFirstProperty; -} -void CFDE_CSSDeclaration::GetNextProperty(FX_POSITION& pos, - FDE_CSSPROPERTY& eProperty, - IFDE_CSSValue*& pValue, - FX_BOOL& bImportant) const { - const FDE_CSSPropertyHolder* pHolder = (const FDE_CSSPropertyHolder*)pos; - FXSYS_assert(pHolder != NULL); - bImportant = pHolder->bImportant; - eProperty = (FDE_CSSPROPERTY)pHolder->eProperty; - pValue = pHolder->pValue; - pos = (FX_POSITION)pHolder->pNext; -} -FX_POSITION CFDE_CSSDeclaration::GetStartCustom() const { - return (FX_POSITION)m_pFirstCustom; -} -void CFDE_CSSDeclaration::GetNextCustom(FX_POSITION& pos, - CFX_WideString& wsName, - CFX_WideString& wsValue) const { - const FDE_CSSCustomProperty* pProperty = (const FDE_CSSCustomProperty*)pos; - if (pProperty == NULL) { - return; - } - wsName = pProperty->pwsName; - wsValue = pProperty->pwsValue; - pos = (FX_POSITION)pProperty->pNext; -} -const FX_WCHAR* CFDE_CSSDeclaration::CopyToLocal( - const FDE_CSSPROPERTYARGS* pArgs, - const FX_WCHAR* pszValue, - int32_t iValueLen) { - FXSYS_assert(iValueLen > 0); - CFX_MapPtrToPtr* pCache = pArgs->pStringCache; - void* pKey = NULL; - if (pCache) { - void* pszCached = NULL; - pKey = - (void*)(uintptr_t)FX_HashCode_String_GetW(pszValue, iValueLen, FALSE); - if (pCache->Lookup(pKey, pszCached)) { - return (const FX_WCHAR*)pszCached; - } - } - FX_WCHAR* psz = - (FX_WCHAR*)pArgs->pStaticStore->Alloc((iValueLen + 1) * sizeof(FX_WCHAR)); - if (psz == NULL) { - return NULL; - } - FXSYS_wcsncpy(psz, pszValue, iValueLen); - psz[iValueLen] = '\0'; - if (pCache) { - pCache->SetAt(pKey, psz); - } - return psz; -} -IFDE_CSSPrimitiveValue* CFDE_CSSDeclaration::NewNumberValue( - IFX_MEMAllocator* pStaticStore, - FDE_CSSPRIMITIVETYPE eUnit, - FX_FLOAT fValue) const { - static CFDE_CSSPrimitiveValue s_ZeroValue(FDE_CSSPRIMITIVETYPE_Number, 0.0f); - if (eUnit == FDE_CSSPRIMITIVETYPE_Number && FXSYS_fabs(fValue) < 0.001f) { - return &s_ZeroValue; - } - return FXTARGET_NewWith(pStaticStore) CFDE_CSSPrimitiveValue(eUnit, fValue); -} -inline IFDE_CSSPrimitiveValue* CFDE_CSSDeclaration::NewEnumValue( - IFX_MEMAllocator* pStaticStore, - FDE_CSSPROPERTYVALUE eValue) const { - return FXTARGET_NewWith(pStaticStore) CFDE_CSSPrimitiveValue(eValue); -} -void CFDE_CSSDeclaration::AddPropertyHolder(IFX_MEMAllocator* pStaticStore, - FDE_CSSPROPERTY eProperty, - IFDE_CSSValue* pValue, - FX_BOOL bImportant) { - FDE_CSSPropertyHolder* pHolder = - FXTARGET_NewWith(pStaticStore) FDE_CSSPropertyHolder; - pHolder->bImportant = bImportant; - pHolder->eProperty = eProperty; - pHolder->pValue = pValue; - pHolder->pNext = NULL; - if (m_pLastProperty == NULL) { - m_pLastProperty = m_pFirstProperty = pHolder; - } else { - m_pLastProperty->pNext = pHolder; - m_pLastProperty = pHolder; - } -} -FX_BOOL CFDE_CSSDeclaration::AddProperty(const FDE_CSSPROPERTYARGS* pArgs, - const FX_WCHAR* pszValue, - int32_t iValueLen) { - FXSYS_assert(iValueLen > 0); - FX_BOOL bImportant = FALSE; - if (iValueLen >= 10 && pszValue[iValueLen - 10] == '!' && - FX_wcsnicmp(L"important", pszValue + iValueLen - 9, 9) == 0) { - if ((iValueLen -= 10) == 0) { - return FALSE; - } - bImportant = TRUE; - } - const FX_DWORD dwType = pArgs->pProperty->dwType; - switch (dwType & 0x0F) { - case FDE_CSSVALUETYPE_Primitive: { - static const FX_DWORD g_ValueGuessOrder[] = { - FDE_CSSVALUETYPE_MaybeNumber, FDE_CSSVALUETYPE_MaybeEnum, - FDE_CSSVALUETYPE_MaybeColor, FDE_CSSVALUETYPE_MaybeURI, - FDE_CSSVALUETYPE_MaybeFunction, FDE_CSSVALUETYPE_MaybeString, - }; - static const int32_t g_ValueGuessCount = - sizeof(g_ValueGuessOrder) / sizeof(FX_DWORD); - for (int32_t i = 0; i < g_ValueGuessCount; ++i) { - const FX_DWORD dwMatch = dwType & g_ValueGuessOrder[i]; - if (dwMatch == 0) { - continue; - } - IFDE_CSSValue* pCSSValue = NULL; - switch (dwMatch) { - case FDE_CSSVALUETYPE_MaybeFunction: - pCSSValue = ParseFunction(pArgs, pszValue, iValueLen); - break; - case FDE_CSSVALUETYPE_MaybeNumber: - pCSSValue = ParseNumber(pArgs, pszValue, iValueLen); - break; - case FDE_CSSVALUETYPE_MaybeEnum: - pCSSValue = ParseEnum(pArgs, pszValue, iValueLen); - break; - case FDE_CSSVALUETYPE_MaybeColor: - pCSSValue = ParseColor(pArgs, pszValue, iValueLen); - break; - case FDE_CSSVALUETYPE_MaybeURI: - pCSSValue = ParseURI(pArgs, pszValue, iValueLen); - break; - case FDE_CSSVALUETYPE_MaybeString: - pCSSValue = ParseString(pArgs, pszValue, iValueLen); - break; - default: - break; - } - if (pCSSValue != NULL) { - AddPropertyHolder(pArgs->pStaticStore, pArgs->pProperty->eName, - pCSSValue, bImportant); - return TRUE; - } - if (FDE_IsOnlyValue(dwType, g_ValueGuessOrder[i])) { - return FALSE; - } - } - } break; - case FDE_CSSVALUETYPE_Shorthand: { - IFX_MEMAllocator* pStaticStore = pArgs->pStaticStore; - IFDE_CSSValue *pColor, *pStyle, *pWidth; - switch (pArgs->pProperty->eName) { - case FDE_CSSPROPERTY_Font: - return ParseFontProperty(pArgs, pszValue, iValueLen, bImportant); - case FDE_CSSPROPERTY_Background: - return ParseBackgroundProperty(pArgs, pszValue, iValueLen, - bImportant); - case FDE_CSSPROPERTY_ListStyle: - return ParseListStyleProperty(pArgs, pszValue, iValueLen, bImportant); - case FDE_CSSPROPERTY_Border: - if (ParseBorderPropoerty(pStaticStore, pszValue, iValueLen, pColor, - pStyle, pWidth)) { - AddBorderProperty(pStaticStore, pColor, pStyle, pWidth, bImportant, - FDE_CSSPROPERTY_BorderLeftColor, - FDE_CSSPROPERTY_BorderLeftStyle, - FDE_CSSPROPERTY_BorderLeftWidth); - AddBorderProperty(pStaticStore, pColor, pStyle, pWidth, bImportant, - FDE_CSSPROPERTY_BorderTopColor, - FDE_CSSPROPERTY_BorderTopStyle, - FDE_CSSPROPERTY_BorderTopWidth); - AddBorderProperty(pStaticStore, pColor, pStyle, pWidth, bImportant, - FDE_CSSPROPERTY_BorderRightColor, - FDE_CSSPROPERTY_BorderRightStyle, - FDE_CSSPROPERTY_BorderRightWidth); - AddBorderProperty(pStaticStore, pColor, pStyle, pWidth, bImportant, - FDE_CSSPROPERTY_BorderBottomColor, - FDE_CSSPROPERTY_BorderBottomStyle, - FDE_CSSPROPERTY_BorderBottomWidth); - return TRUE; - } - break; - case FDE_CSSPROPERTY_BorderLeft: - if (ParseBorderPropoerty(pStaticStore, pszValue, iValueLen, pColor, - pStyle, pWidth)) { - AddBorderProperty(pStaticStore, pColor, pStyle, pWidth, bImportant, - FDE_CSSPROPERTY_BorderLeftColor, - FDE_CSSPROPERTY_BorderLeftStyle, - FDE_CSSPROPERTY_BorderLeftWidth); - return TRUE; - } - break; - case FDE_CSSPROPERTY_BorderTop: - if (ParseBorderPropoerty(pStaticStore, pszValue, iValueLen, pColor, - pStyle, pWidth)) { - AddBorderProperty(pStaticStore, pColor, pStyle, pWidth, bImportant, - FDE_CSSPROPERTY_BorderTopColor, - FDE_CSSPROPERTY_BorderTopStyle, - FDE_CSSPROPERTY_BorderTopWidth); - return TRUE; - } - break; - case FDE_CSSPROPERTY_BorderRight: - if (ParseBorderPropoerty(pStaticStore, pszValue, iValueLen, pColor, - pStyle, pWidth)) { - AddBorderProperty(pStaticStore, pColor, pStyle, pWidth, bImportant, - FDE_CSSPROPERTY_BorderRightColor, - FDE_CSSPROPERTY_BorderRightStyle, - FDE_CSSPROPERTY_BorderRightWidth); - return TRUE; - } - break; - case FDE_CSSPROPERTY_BorderBottom: - if (ParseBorderPropoerty(pStaticStore, pszValue, iValueLen, pColor, - pStyle, pWidth)) { - AddBorderProperty(pStaticStore, pColor, pStyle, pWidth, bImportant, - FDE_CSSPROPERTY_BorderBottomColor, - FDE_CSSPROPERTY_BorderBottomStyle, - FDE_CSSPROPERTY_BorderBottomWidth); - return TRUE; - } - break; - case FDE_CSSPROPERTY_Overflow: - return ParseOverflowProperty(pArgs, pszValue, iValueLen, bImportant); - case FDE_CSSPROPERTY_ColumnRule: - return ParseColumnRuleProperty(pArgs, pszValue, iValueLen, - bImportant); - default: - break; - } - } break; - case FDE_CSSVALUETYPE_List: - switch (pArgs->pProperty->eName) { - case FDE_CSSPROPERTY_CounterIncrement: - case FDE_CSSPROPERTY_CounterReset: - return ParseCounterProperty(pArgs, pszValue, iValueLen, bImportant); - case FDE_CSSPROPERTY_Content: - return ParseContentProperty(pArgs, pszValue, iValueLen, bImportant); - default: - return ParseValueListProperty(pArgs, pszValue, iValueLen, bImportant); - } - default: - FXSYS_assert(FALSE); - break; - } - return FALSE; -} -FX_BOOL CFDE_CSSDeclaration::AddProperty(const FDE_CSSPROPERTYARGS* pArgs, - const FX_WCHAR* pszName, - int32_t iNameLen, - const FX_WCHAR* pszValue, - int32_t iValueLen) { - FDE_CSSCustomProperty* pProperty = - FXTARGET_NewWith(pArgs->pStaticStore) FDE_CSSCustomProperty; - pProperty->pwsName = CopyToLocal(pArgs, pszName, iNameLen); - pProperty->pwsValue = CopyToLocal(pArgs, pszValue, iValueLen); - pProperty->pNext = NULL; - if (m_pLastCustom == NULL) { - m_pLastCustom = m_pFirstCustom = pProperty; - } else { - m_pLastCustom->pNext = pProperty; - m_pLastCustom = pProperty; - } - return TRUE; -} -IFDE_CSSValue* CFDE_CSSDeclaration::ParseNumber( - const FDE_CSSPROPERTYARGS* pArgs, - const FX_WCHAR* pszValue, - int32_t iValueLen) { - FX_FLOAT fValue; - FDE_CSSPRIMITIVETYPE eUnit; - if (!FDE_ParseCSSNumber(pszValue, iValueLen, fValue, eUnit)) { - return NULL; - } - return NewNumberValue(pArgs->pStaticStore, eUnit, fValue); -} -IFDE_CSSValue* CFDE_CSSDeclaration::ParseEnum(const FDE_CSSPROPERTYARGS* pArgs, - const FX_WCHAR* pszValue, - int32_t iValueLen) { - const FDE_CSSPROPERTYVALUETABLE* pValue = - FDE_GetCSSPropertyValueByName(pszValue, iValueLen); - return pValue ? NewEnumValue(pArgs->pStaticStore, pValue->eName) : NULL; -} -IFDE_CSSValue* CFDE_CSSDeclaration::ParseColor(const FDE_CSSPROPERTYARGS* pArgs, - const FX_WCHAR* pszValue, - int32_t iValueLen) { - FX_ARGB dwColor; - if (!FDE_ParseCSSColor(pszValue, iValueLen, dwColor)) { - return NULL; - } - return FXTARGET_NewWith(pArgs->pStaticStore) CFDE_CSSPrimitiveValue(dwColor); -} -IFDE_CSSValue* CFDE_CSSDeclaration::ParseURI(const FDE_CSSPROPERTYARGS* pArgs, - const FX_WCHAR* pszValue, - int32_t iValueLen) { - int32_t iOffset; - if (!FDE_ParseCSSURI(pszValue, iValueLen, iOffset, iValueLen)) { - return NULL; - } - if (iValueLen <= 0) { - return NULL; - } - pszValue = CopyToLocal(pArgs, pszValue + iOffset, iValueLen); - return pszValue - ? FXTARGET_NewWith(pArgs->pStaticStore) - CFDE_CSSPrimitiveValue(FDE_CSSPRIMITIVETYPE_URI, pszValue) - : NULL; -} -IFDE_CSSValue* CFDE_CSSDeclaration::ParseString( - const FDE_CSSPROPERTYARGS* pArgs, - const FX_WCHAR* pszValue, - int32_t iValueLen) { - int32_t iOffset; - if (!FDE_ParseCSSString(pszValue, iValueLen, iOffset, iValueLen)) { - return NULL; - } - if (iValueLen <= 0) { - return NULL; - } - pszValue = CopyToLocal(pArgs, pszValue + iOffset, iValueLen); - return pszValue - ? FXTARGET_NewWith(pArgs->pStaticStore) - CFDE_CSSPrimitiveValue(FDE_CSSPRIMITIVETYPE_String, pszValue) - : NULL; -} -IFDE_CSSValue* CFDE_CSSDeclaration::ParseFunction( - const FDE_CSSPROPERTYARGS* pArgs, - const FX_WCHAR* pszValue, - int32_t iValueLen) { - if (pszValue[iValueLen - 1] != ')') { - return NULL; - } - int32_t iStartBracket = 0; - while (pszValue[iStartBracket] != '(') { - if (iStartBracket < iValueLen) { - iStartBracket++; - } else { - return NULL; - } - } - if (iStartBracket == 0) { - return NULL; - } - const FX_WCHAR* pszFuncName = CopyToLocal(pArgs, pszValue, iStartBracket); - pszValue += (iStartBracket + 1); - iValueLen -= (iStartBracket + 2); - CFDE_CSSValueArray argumentArr; - CFDE_CSSValueListParser parser(pszValue, iValueLen, ','); - FDE_CSSPRIMITIVETYPE ePrimitiveType; - while (parser.NextValue(ePrimitiveType, pszValue, iValueLen)) { - switch (ePrimitiveType) { - case FDE_CSSPRIMITIVETYPE_String: { - const FDE_CSSPROPERTYVALUETABLE* pPropertyValue = - FDE_GetCSSPropertyValueByName(pszValue, iValueLen); - if (pPropertyValue != NULL) { - argumentArr.Add( - NewEnumValue(pArgs->pStaticStore, pPropertyValue->eName)); - continue; - } - IFDE_CSSValue* pFunctionValue = - ParseFunction(pArgs, pszValue, iValueLen); - if (pFunctionValue != NULL) { - argumentArr.Add(pFunctionValue); - continue; - } - argumentArr.Add(FXTARGET_NewWith(pArgs->pStaticStore) - CFDE_CSSPrimitiveValue( - FDE_CSSPRIMITIVETYPE_String, - CopyToLocal(pArgs, pszValue, iValueLen))); - } break; - case FDE_CSSPRIMITIVETYPE_Number: { - FX_FLOAT fValue; - if (FDE_ParseCSSNumber(pszValue, iValueLen, fValue, ePrimitiveType)) { - argumentArr.Add( - NewNumberValue(pArgs->pStaticStore, ePrimitiveType, fValue)); - } - } break; - default: - argumentArr.Add(FXTARGET_NewWith(pArgs->pStaticStore) - CFDE_CSSPrimitiveValue( - FDE_CSSPRIMITIVETYPE_String, - CopyToLocal(pArgs, pszValue, iValueLen))); - break; - } - } - IFDE_CSSValueList* pArgumentList = FXTARGET_NewWith(pArgs->pStaticStore) - CFDE_CSSValueList(pArgs->pStaticStore, argumentArr); - CFDE_CSSFunction* pFunction = FXTARGET_NewWith(pArgs->pStaticStore) - CFDE_CSSFunction(pszFuncName, pArgumentList); - return FXTARGET_NewWith(pArgs->pStaticStore) - CFDE_CSSPrimitiveValue(pFunction); -} -FX_BOOL CFDE_CSSDeclaration::ParseContentProperty( - const FDE_CSSPROPERTYARGS* pArgs, - const FX_WCHAR* pszValue, - int32_t iValueLen, - FX_BOOL bImportant) { - IFX_MEMAllocator* pStaticStore = (IFX_MEMAllocator*)pArgs->pStaticStore; - CFDE_CSSValueListParser parser(pszValue, iValueLen, ' '); - FDE_CSSPRIMITIVETYPE eType; - CFDE_CSSValueArray list; - while (parser.NextValue(eType, pszValue, iValueLen)) { - switch (eType) { - case FDE_CSSPRIMITIVETYPE_URI: - list.Add(FXTARGET_NewWith(pStaticStore) CFDE_CSSPrimitiveValue( - eType, CopyToLocal(pArgs, pszValue, iValueLen))); - break; - case FDE_CSSPRIMITIVETYPE_Number: - return FALSE; - case FDE_CSSPRIMITIVETYPE_String: { - const FDE_CSSPROPERTYVALUETABLE* pValue = - FDE_GetCSSPropertyValueByName(pszValue, iValueLen); - if (pValue != NULL) { - switch (pValue->eName) { - case FDE_CSSPROPERTYVALUE_Normal: - case FDE_CSSPROPERTYVALUE_None: { - if (list.GetSize() == 0) { - list.Add(NewEnumValue(pStaticStore, pValue->eName)); - } else { - return FALSE; - } - } break; - case FDE_CSSPROPERTYVALUE_OpenQuote: - case FDE_CSSPROPERTYVALUE_CloseQuote: - case FDE_CSSPROPERTYVALUE_NoOpenQuote: - case FDE_CSSPROPERTYVALUE_NoCloseQuote: - list.Add(NewEnumValue(pStaticStore, pValue->eName)); - break; - default: - return FALSE; - } - continue; - } - IFDE_CSSValue* pFunction = ParseFunction(pArgs, pszValue, iValueLen); - if (pFunction != NULL) { - list.Add(pFunction); - continue; - } - list.Add(FXTARGET_NewWith(pStaticStore) CFDE_CSSPrimitiveValue( - eType, CopyToLocal(pArgs, pszValue, iValueLen))); - } break; - case FDE_CSSPRIMITIVETYPE_RGB: - return FALSE; - default: - break; - } - } - if (list.GetSize() == 0) { - return FALSE; - } - AddPropertyHolder(pStaticStore, pArgs->pProperty->eName, - FXTARGET_NewWith(pStaticStore) - CFDE_CSSValueList(pStaticStore, list), - bImportant); - return TRUE; -} -FX_BOOL CFDE_CSSDeclaration::ParseCounterProperty( - const FDE_CSSPROPERTYARGS* pArgs, - const FX_WCHAR* pszValue, - int32_t iValueLen, - FX_BOOL bImportant) { - IFX_MEMAllocator* pStaticStore = pArgs->pStaticStore; - CFDE_CSSValueListParser parser(pszValue, iValueLen, ' '); - CFDE_CSSValueArray list; - CFDE_CSSValueArray listFull; - FDE_CSSPRIMITIVETYPE eType; - while (parser.NextValue(eType, pszValue, iValueLen)) { - switch (eType) { - case FDE_CSSPRIMITIVETYPE_Number: { - FX_FLOAT fValue; - if (FDE_ParseCSSNumber(pszValue, iValueLen, fValue, eType)) { - if (list.GetSize() == 1) { - list.Add(NewNumberValue(pStaticStore, eType, fValue)); - listFull.Add(FXTARGET_NewWith(pStaticStore) - CFDE_CSSValueList(pStaticStore, list)); - list.RemoveAll(); - } else { - return FALSE; - } - } - } break; - case FDE_CSSPRIMITIVETYPE_String: { - if (list.GetSize() == 0) { - pszValue = CopyToLocal(pArgs, pszValue, iValueLen); - list.Add(FXTARGET_NewWith(pStaticStore) CFDE_CSSPrimitiveValue( - FDE_CSSPRIMITIVETYPE_String, pszValue)); - } else { - listFull.Add(FXTARGET_NewWith(pStaticStore) - CFDE_CSSValueList(pStaticStore, list)); - list.RemoveAll(); - pszValue = CopyToLocal(pArgs, pszValue, iValueLen); - list.Add(FXTARGET_NewWith(pStaticStore) CFDE_CSSPrimitiveValue( - FDE_CSSPRIMITIVETYPE_String, pszValue)); - } - } break; - default: - break; - } - } - if (list.GetSize() == 1) { - listFull.Add(FXTARGET_NewWith(pStaticStore) - CFDE_CSSValueList(pStaticStore, list)); - } - if (listFull.GetSize() == 0) { - return FALSE; - } - AddPropertyHolder(pStaticStore, pArgs->pProperty->eName, - FXTARGET_NewWith(pStaticStore) - CFDE_CSSValueList(pStaticStore, listFull), - bImportant); - return TRUE; -} -FX_BOOL CFDE_CSSDeclaration::ParseValueListProperty( - const FDE_CSSPROPERTYARGS* pArgs, - const FX_WCHAR* pszValue, - int32_t iValueLen, - FX_BOOL bImportant) { - IFX_MEMAllocator* pStaticStore = pArgs->pStaticStore; - FX_WCHAR separator = - (pArgs->pProperty->eName == FDE_CSSPROPERTY_FontFamily) ? ',' : ' '; - CFDE_CSSValueListParser parser(pszValue, iValueLen, separator); - const FX_DWORD dwType = pArgs->pProperty->dwType; - FDE_CSSPRIMITIVETYPE eType; - CFDE_CSSValueArray list; - while (parser.NextValue(eType, pszValue, iValueLen)) { - switch (eType) { - case FDE_CSSPRIMITIVETYPE_Number: - if (dwType & FDE_CSSVALUETYPE_MaybeNumber) { - FX_FLOAT fValue; - if (FDE_ParseCSSNumber(pszValue, iValueLen, fValue, eType)) { - list.Add(NewNumberValue(pStaticStore, eType, fValue)); - } - } - break; - case FDE_CSSPRIMITIVETYPE_String: - if (dwType & FDE_CSSVALUETYPE_MaybeColor) { - FX_ARGB dwColor; - if (FDE_ParseCSSColor(pszValue, iValueLen, dwColor)) { - list.Add(FXTARGET_NewWith(pStaticStore) - CFDE_CSSPrimitiveValue(dwColor)); - continue; - } - } - if (dwType & FDE_CSSVALUETYPE_MaybeEnum) { - const FDE_CSSPROPERTYVALUETABLE* pValue = - FDE_GetCSSPropertyValueByName(pszValue, iValueLen); - if (pValue != NULL) { - list.Add(NewEnumValue(pStaticStore, pValue->eName)); - continue; - } - } - if (dwType & FDE_CSSVALUETYPE_MaybeString) { - pszValue = CopyToLocal(pArgs, pszValue, iValueLen); - list.Add(FXTARGET_NewWith(pStaticStore) CFDE_CSSPrimitiveValue( - FDE_CSSPRIMITIVETYPE_String, pszValue)); - } - break; - case FDE_CSSPRIMITIVETYPE_RGB: - if (dwType & FDE_CSSVALUETYPE_MaybeColor) { - FX_ARGB dwColor; - if (FDE_ParseCSSColor(pszValue, iValueLen, dwColor)) { - list.Add(FXTARGET_NewWith(pStaticStore) - CFDE_CSSPrimitiveValue(dwColor)); - } - } - break; - default: - break; - } - } - if (list.GetSize() == 0) { - return FALSE; - } - switch (pArgs->pProperty->eName) { - case FDE_CSSPROPERTY_BorderColor: - return Add4ValuesProperty( - pStaticStore, list, bImportant, FDE_CSSPROPERTY_BorderLeftColor, - FDE_CSSPROPERTY_BorderTopColor, FDE_CSSPROPERTY_BorderRightColor, - FDE_CSSPROPERTY_BorderBottomColor); - case FDE_CSSPROPERTY_BorderStyle: - return Add4ValuesProperty( - pStaticStore, list, bImportant, FDE_CSSPROPERTY_BorderLeftStyle, - FDE_CSSPROPERTY_BorderTopStyle, FDE_CSSPROPERTY_BorderRightStyle, - FDE_CSSPROPERTY_BorderBottomStyle); - case FDE_CSSPROPERTY_BorderWidth: - return Add4ValuesProperty( - pStaticStore, list, bImportant, FDE_CSSPROPERTY_BorderLeftWidth, - FDE_CSSPROPERTY_BorderTopWidth, FDE_CSSPROPERTY_BorderRightWidth, - FDE_CSSPROPERTY_BorderBottomWidth); - case FDE_CSSPROPERTY_Margin: - return Add4ValuesProperty( - pStaticStore, list, bImportant, FDE_CSSPROPERTY_MarginLeft, - FDE_CSSPROPERTY_MarginTop, FDE_CSSPROPERTY_MarginRight, - FDE_CSSPROPERTY_MarginBottom); - case FDE_CSSPROPERTY_Padding: - return Add4ValuesProperty( - pStaticStore, list, bImportant, FDE_CSSPROPERTY_PaddingLeft, - FDE_CSSPROPERTY_PaddingTop, FDE_CSSPROPERTY_PaddingRight, - FDE_CSSPROPERTY_PaddingBottom); - default: { - CFDE_CSSValueList* pList = - FXTARGET_NewWith(pStaticStore) CFDE_CSSValueList(pStaticStore, list); - AddPropertyHolder(pStaticStore, pArgs->pProperty->eName, pList, - bImportant); - return TRUE; - } break; - } - return FALSE; -} -FX_BOOL CFDE_CSSDeclaration::Add4ValuesProperty(IFX_MEMAllocator* pStaticStore, - const CFDE_CSSValueArray& list, - FX_BOOL bImportant, - FDE_CSSPROPERTY eLeft, - FDE_CSSPROPERTY eTop, - FDE_CSSPROPERTY eRight, - FDE_CSSPROPERTY eBottom) { - switch (list.GetSize()) { - case 1: - AddPropertyHolder(pStaticStore, eLeft, list[0], bImportant); - AddPropertyHolder(pStaticStore, eTop, list[0], bImportant); - AddPropertyHolder(pStaticStore, eRight, list[0], bImportant); - AddPropertyHolder(pStaticStore, eBottom, list[0], bImportant); - return TRUE; - case 2: - AddPropertyHolder(pStaticStore, eLeft, list[1], bImportant); - AddPropertyHolder(pStaticStore, eTop, list[0], bImportant); - AddPropertyHolder(pStaticStore, eRight, list[1], bImportant); - AddPropertyHolder(pStaticStore, eBottom, list[0], bImportant); - return TRUE; - case 3: - AddPropertyHolder(pStaticStore, eLeft, list[1], bImportant); - AddPropertyHolder(pStaticStore, eTop, list[0], bImportant); - AddPropertyHolder(pStaticStore, eRight, list[1], bImportant); - AddPropertyHolder(pStaticStore, eBottom, list[2], bImportant); - return TRUE; - case 4: - AddPropertyHolder(pStaticStore, eLeft, list[3], bImportant); - AddPropertyHolder(pStaticStore, eTop, list[0], bImportant); - AddPropertyHolder(pStaticStore, eRight, list[1], bImportant); - AddPropertyHolder(pStaticStore, eBottom, list[2], bImportant); - return TRUE; - default: - break; - } - return FALSE; -} -FX_BOOL CFDE_CSSDeclaration::ParseBorderPropoerty( - IFX_MEMAllocator* pStaticStore, - const FX_WCHAR* pszValue, - int32_t iValueLen, - IFDE_CSSValue*& pColor, - IFDE_CSSValue*& pStyle, - IFDE_CSSValue*& pWidth) const { - pColor = pStyle = pWidth = NULL; - CFDE_CSSValueListParser parser(pszValue, iValueLen, ' '); - FDE_CSSPRIMITIVETYPE eType; - while (parser.NextValue(eType, pszValue, iValueLen)) { - switch (eType) { - case FDE_CSSPRIMITIVETYPE_Number: - if (pWidth == NULL) { - FX_FLOAT fValue; - if (FDE_ParseCSSNumber(pszValue, iValueLen, fValue, eType)) { - pWidth = NewNumberValue(pStaticStore, eType, fValue); - } - } - break; - case FDE_CSSPRIMITIVETYPE_RGB: - if (pColor == NULL) { - FX_ARGB dwColor; - if (FDE_ParseCSSColor(pszValue, iValueLen, dwColor)) { - pColor = - FXTARGET_NewWith(pStaticStore) CFDE_CSSPrimitiveValue(dwColor); - } - } - break; - case FDE_CSSPRIMITIVETYPE_String: { - const FDE_CSSCOLORTABLE* pColorItem = - FDE_GetCSSColorByName(pszValue, iValueLen); - if (pColorItem != NULL) { - if (pColor == NULL) { - pColor = FXTARGET_NewWith(pStaticStore) - CFDE_CSSPrimitiveValue(pColorItem->dwValue); - } - continue; - } - const FDE_CSSPROPERTYVALUETABLE* pValue = - FDE_GetCSSPropertyValueByName(pszValue, iValueLen); - if (pValue == NULL) { - continue; - } - switch (pValue->eName) { - case FDE_CSSPROPERTYVALUE_Transparent: - if (pColor == NULL) { - pColor = FXTARGET_NewWith(pStaticStore) - CFDE_CSSPrimitiveValue((FX_ARGB)0); - } - break; - case FDE_CSSPROPERTYVALUE_Thin: - case FDE_CSSPROPERTYVALUE_Thick: - case FDE_CSSPROPERTYVALUE_Medium: - if (pWidth == NULL) { - pWidth = NewEnumValue(pStaticStore, pValue->eName); - } - break; - case FDE_CSSPROPERTYVALUE_None: - case FDE_CSSPROPERTYVALUE_Hidden: - case FDE_CSSPROPERTYVALUE_Dotted: - case FDE_CSSPROPERTYVALUE_Dashed: - case FDE_CSSPROPERTYVALUE_Solid: - case FDE_CSSPROPERTYVALUE_Double: - case FDE_CSSPROPERTYVALUE_Groove: - case FDE_CSSPROPERTYVALUE_Ridge: - case FDE_CSSPROPERTYVALUE_Inset: - case FDE_CSSPROPERTYVALUE_Outset: - if (pStyle == NULL) { - pStyle = NewEnumValue(pStaticStore, pValue->eName); - } - break; - default: - break; - } - }; break; - default: - break; - } - } - if (pColor == NULL) { - pColor = FXTARGET_NewWith(pStaticStore) CFDE_CSSPrimitiveValue((FX_ARGB)0); - } - if (pStyle == NULL) { - pStyle = NewEnumValue(pStaticStore, FDE_CSSPROPERTYVALUE_None); - } - if (pWidth == NULL) { - pWidth = NewNumberValue(pStaticStore, FDE_CSSPRIMITIVETYPE_Number, 0.0f); - } - return TRUE; -} -void CFDE_CSSDeclaration::AddBorderProperty(IFX_MEMAllocator* pStaticStore, - IFDE_CSSValue* pColor, - IFDE_CSSValue* pStyle, - IFDE_CSSValue* pWidth, - FX_BOOL bImportant, - FDE_CSSPROPERTY eColor, - FDE_CSSPROPERTY eStyle, - FDE_CSSPROPERTY eWidth) { - AddPropertyHolder(pStaticStore, eStyle, pStyle, bImportant); - AddPropertyHolder(pStaticStore, eWidth, pWidth, bImportant); - AddPropertyHolder(pStaticStore, eColor, pColor, bImportant); -} -FX_BOOL CFDE_CSSDeclaration::ParseListStyleProperty( - const FDE_CSSPROPERTYARGS* pArgs, - const FX_WCHAR* pszValue, - int32_t iValueLen, - FX_BOOL bImportant) { - IFX_MEMAllocator* pStaticStore = pArgs->pStaticStore; - CFDE_CSSValueListParser parser(pszValue, iValueLen, ' '); - IFDE_CSSPrimitiveValue *pType = NULL, *pImage = NULL, *pPosition = NULL; - FDE_CSSPRIMITIVETYPE eType; - while (parser.NextValue(eType, pszValue, iValueLen)) { - switch (eType) { - case FDE_CSSPRIMITIVETYPE_URI: - if (pImage == NULL) { - pImage = FXTARGET_NewWith(pStaticStore) CFDE_CSSPrimitiveValue( - eType, CopyToLocal(pArgs, pszValue, iValueLen)); - } - break; - case FDE_CSSPRIMITIVETYPE_String: { - const FDE_CSSPROPERTYVALUETABLE* pValue = - FDE_GetCSSPropertyValueByName(pszValue, iValueLen); - if (pValue == NULL) { - break; - } - switch (pValue->eName) { - case FDE_CSSPROPERTYVALUE_None: - if (pImage == NULL) { - pImage = NewEnumValue(pStaticStore, pValue->eName); - } else if (pType == NULL) { - pImage = NewEnumValue(pStaticStore, pValue->eName); - } - break; - case FDE_CSSPROPERTYVALUE_Inside: - case FDE_CSSPROPERTYVALUE_Outside: - if (pPosition == NULL) { - pPosition = NewEnumValue(pStaticStore, pValue->eName); - } - break; - case FDE_CSSPROPERTYVALUE_Disc: - case FDE_CSSPROPERTYVALUE_Circle: - case FDE_CSSPROPERTYVALUE_Square: - case FDE_CSSPROPERTYVALUE_Decimal: - case FDE_CSSPROPERTYVALUE_DecimalLeadingZero: - case FDE_CSSPROPERTYVALUE_LowerRoman: - case FDE_CSSPROPERTYVALUE_UpperRoman: - case FDE_CSSPROPERTYVALUE_LowerGreek: - case FDE_CSSPROPERTYVALUE_LowerLatin: - case FDE_CSSPROPERTYVALUE_UpperLatin: - case FDE_CSSPROPERTYVALUE_Armenian: - case FDE_CSSPROPERTYVALUE_Georgian: - case FDE_CSSPROPERTYVALUE_LowerAlpha: - case FDE_CSSPROPERTYVALUE_UpperAlpha: - if (pType == NULL) { - pType = NewEnumValue(pStaticStore, pValue->eName); - } - break; - default: - break; - } - }; break; - default: - break; - } - } - if (pPosition == NULL) { - pPosition = NewEnumValue(pStaticStore, FDE_CSSPROPERTYVALUE_Outside); - } - if (pImage == NULL) { - pImage = NewEnumValue(pStaticStore, FDE_CSSPROPERTYVALUE_None); - } - if (pType == NULL) { - pType = NewEnumValue(pStaticStore, FDE_CSSPROPERTYVALUE_None); - } - AddPropertyHolder(pStaticStore, FDE_CSSPROPERTY_ListStylePosition, pPosition, - bImportant); - AddPropertyHolder(pStaticStore, FDE_CSSPROPERTY_ListStyleImage, pImage, - bImportant); - AddPropertyHolder(pStaticStore, FDE_CSSPROPERTY_ListStyleType, pType, - bImportant); - return TRUE; -} -FX_BOOL CFDE_CSSDeclaration::ParseBackgroundProperty( - const FDE_CSSPROPERTYARGS* pArgs, - const FX_WCHAR* pszValue, - int32_t iValueLen, - FX_BOOL bImportant) { - IFX_MEMAllocator* pStaticStore = pArgs->pStaticStore; - CFDE_CSSValueListParser parser(pszValue, iValueLen, ' '); - IFDE_CSSPrimitiveValue *pColor = NULL, *pImage = NULL, *pRepeat = NULL; - IFDE_CSSPrimitiveValue *pPosX = NULL, *pPosY = NULL, *pAttachment = NULL; - FDE_CSSPRIMITIVETYPE eType; - while (parser.NextValue(eType, pszValue, iValueLen)) { - switch (eType) { - case FDE_CSSPRIMITIVETYPE_URI: - if (pImage == NULL) { - pImage = FXTARGET_NewWith(pStaticStore) CFDE_CSSPrimitiveValue( - eType, CopyToLocal(pArgs, pszValue, iValueLen)); - } - break; - case FDE_CSSPRIMITIVETYPE_Number: { - FX_FLOAT fValue; - if (!FDE_ParseCSSNumber(pszValue, iValueLen, fValue, eType)) { - break; - } - if (pPosX == NULL) { - pPosX = NewNumberValue(pStaticStore, eType, fValue); - } else if (pPosY == NULL) { - pPosY = NewNumberValue(pStaticStore, eType, fValue); - } - } break; - case FDE_CSSPRIMITIVETYPE_String: { - const FDE_CSSPROPERTYVALUETABLE* pValue = - FDE_GetCSSPropertyValueByName(pszValue, iValueLen); - if (pValue != NULL) { - switch (pValue->eName) { - case FDE_CSSPROPERTYVALUE_None: - if (pImage == NULL) { - pImage = NewEnumValue(pStaticStore, pValue->eName); - } - break; - case FDE_CSSPROPERTYVALUE_Transparent: - if (pColor == NULL) { - pColor = FXTARGET_NewWith(pStaticStore) - CFDE_CSSPrimitiveValue((FX_ARGB)0); - } - break; - case FDE_CSSPROPERTYVALUE_Fixed: - case FDE_CSSPROPERTYVALUE_Scroll: - if (pAttachment == NULL) { - pAttachment = NewEnumValue(pStaticStore, pValue->eName); - } - break; - case FDE_CSSPROPERTYVALUE_Repeat: - case FDE_CSSPROPERTYVALUE_RepeatX: - case FDE_CSSPROPERTYVALUE_RepeatY: - case FDE_CSSPROPERTYVALUE_NoRepeat: - if (pRepeat == NULL) { - pRepeat = NewEnumValue(pStaticStore, pValue->eName); - } - break; - case FDE_CSSPROPERTYVALUE_Left: - case FDE_CSSPROPERTYVALUE_Right: - if (pPosX == NULL) { - pPosX = NewEnumValue(pStaticStore, pValue->eName); - } - break; - case FDE_CSSPROPERTYVALUE_Top: - case FDE_CSSPROPERTYVALUE_Bottom: - if (pPosY == NULL) { - pPosX = NewEnumValue(pStaticStore, pValue->eName); - } - break; - case FDE_CSSPROPERTYVALUE_Center: - if (pPosX == NULL) { - pPosX = NewEnumValue(pStaticStore, pValue->eName); - } else if (pPosY == NULL) { - pPosX = NewEnumValue(pStaticStore, pValue->eName); - } - break; - default: - break; - } - break; - } - const FDE_CSSCOLORTABLE* pColorItem = - FDE_GetCSSColorByName(pszValue, iValueLen); - if (pColorItem != NULL) { - if (pColor == NULL) { - pColor = FXTARGET_NewWith(pStaticStore) - CFDE_CSSPrimitiveValue(pColorItem->dwValue); - } - } - } break; - case FDE_CSSPRIMITIVETYPE_RGB: - if (pColor == NULL) { - FX_ARGB dwColor; - if (FDE_ParseCSSColor(pszValue, iValueLen, dwColor)) { - pColor = - FXTARGET_NewWith(pStaticStore) CFDE_CSSPrimitiveValue(dwColor); - } - } - break; - default: - break; - } - } - if (pColor == NULL) { - pColor = FXTARGET_NewWith(pStaticStore) CFDE_CSSPrimitiveValue((FX_ARGB)0); - } - if (pImage == NULL) { - pImage = NewEnumValue(pStaticStore, FDE_CSSPROPERTYVALUE_None); - } - if (pRepeat == NULL) { - pRepeat = NewEnumValue(pStaticStore, FDE_CSSPROPERTYVALUE_Repeat); - } - if (pAttachment == NULL) { - pAttachment = NewEnumValue(pStaticStore, FDE_CSSPROPERTYVALUE_Scroll); - } - if (pPosX == NULL) { - pPosX = NewNumberValue(pStaticStore, FDE_CSSPRIMITIVETYPE_Number, 0.0f); - pPosY = NewNumberValue(pStaticStore, FDE_CSSPRIMITIVETYPE_Number, 0.0f); - } else if (pPosY == NULL) { - pPosY = NewNumberValue(pStaticStore, FDE_CSSPRIMITIVETYPE_Number, 0.0f); - } - CFDE_CSSValueArray position; - position.Add(pPosX); - position.Add(pPosY); - CFDE_CSSValueList* pPosList = - FXTARGET_NewWith(pStaticStore) CFDE_CSSValueList(pStaticStore, position); - AddPropertyHolder(pStaticStore, FDE_CSSPROPERTY_BackgroundColor, pColor, - bImportant); - AddPropertyHolder(pStaticStore, FDE_CSSPROPERTY_BackgroundImage, pImage, - bImportant); - AddPropertyHolder(pStaticStore, FDE_CSSPROPERTY_BackgroundRepeat, pRepeat, - bImportant); - AddPropertyHolder(pStaticStore, FDE_CSSPROPERTY_BackgroundPosition, pPosList, - bImportant); - AddPropertyHolder(pStaticStore, FDE_CSSPROPERTY_BackgroundAttachment, - pAttachment, bImportant); - return TRUE; -} -FX_BOOL CFDE_CSSDeclaration::ParseFontProperty(const FDE_CSSPROPERTYARGS* pArgs, - const FX_WCHAR* pszValue, - int32_t iValueLen, - FX_BOOL bImportant) { - IFX_MEMAllocator* pStaticStore = pArgs->pStaticStore; - CFDE_CSSValueListParser parser(pszValue, iValueLen, '/'); - IFDE_CSSPrimitiveValue *pStyle = NULL, *pVariant = NULL, *pWeight = NULL; - IFDE_CSSPrimitiveValue *pFontSize = NULL, *pLineHeight = NULL; - CFDE_CSSValueArray familyList; - FDE_CSSPRIMITIVETYPE eType; - while (parser.NextValue(eType, pszValue, iValueLen)) { - switch (eType) { - case FDE_CSSPRIMITIVETYPE_String: { - const FDE_CSSPROPERTYVALUETABLE* pValue = - FDE_GetCSSPropertyValueByName(pszValue, iValueLen); - if (pValue != NULL) { - switch (pValue->eName) { - case FDE_CSSPROPERTYVALUE_XxSmall: - case FDE_CSSPROPERTYVALUE_XSmall: - case FDE_CSSPROPERTYVALUE_Small: - case FDE_CSSPROPERTYVALUE_Medium: - case FDE_CSSPROPERTYVALUE_Large: - case FDE_CSSPROPERTYVALUE_XLarge: - case FDE_CSSPROPERTYVALUE_XxLarge: - case FDE_CSSPROPERTYVALUE_Smaller: - case FDE_CSSPROPERTYVALUE_Larger: - if (pFontSize == NULL) { - pFontSize = NewEnumValue(pStaticStore, pValue->eName); - } - continue; - case FDE_CSSPROPERTYVALUE_Bold: - case FDE_CSSPROPERTYVALUE_Bolder: - case FDE_CSSPROPERTYVALUE_Lighter: - if (pWeight == NULL) { - pWeight = NewEnumValue(pStaticStore, pValue->eName); - } - continue; - case FDE_CSSPROPERTYVALUE_Italic: - case FDE_CSSPROPERTYVALUE_Oblique: - if (pStyle == NULL) { - pStyle = NewEnumValue(pStaticStore, pValue->eName); - } - continue; - case FDE_CSSPROPERTYVALUE_SmallCaps: - if (pVariant == NULL) { - pVariant = NewEnumValue(pStaticStore, pValue->eName); - } - continue; - case FDE_CSSPROPERTYVALUE_Normal: - if (pStyle == NULL) { - pStyle = NewEnumValue(pStaticStore, pValue->eName); - } else if (pVariant == NULL) { - pVariant = NewEnumValue(pStaticStore, pValue->eName); - } else if (pWeight == NULL) { - pWeight = NewEnumValue(pStaticStore, pValue->eName); - } else if (pFontSize == NULL) { - pFontSize = NewEnumValue(pStaticStore, pValue->eName); - } else if (pLineHeight == NULL) { - pLineHeight = NewEnumValue(pStaticStore, pValue->eName); - } - continue; - default: - break; - } - } - if (pFontSize != NULL) { - familyList.Add(FXTARGET_NewWith(pStaticStore) CFDE_CSSPrimitiveValue( - eType, CopyToLocal(pArgs, pszValue, iValueLen))); - } - parser.m_Separator = ','; - } break; - case FDE_CSSPRIMITIVETYPE_Number: { - FX_FLOAT fValue; - if (!FDE_ParseCSSNumber(pszValue, iValueLen, fValue, eType)) { - break; - } - if (eType == FDE_CSSPRIMITIVETYPE_Number) { - switch ((int32_t)fValue) { - case 100: - case 200: - case 300: - case 400: - case 500: - case 600: - case 700: - case 800: - case 900: - if (pWeight == NULL) { - pWeight = NewNumberValue(pStaticStore, - FDE_CSSPRIMITIVETYPE_Number, fValue); - } - continue; - } - } - if (pFontSize == NULL) { - pFontSize = NewNumberValue(pStaticStore, eType, fValue); - } else if (pLineHeight == NULL) { - pLineHeight = NewNumberValue(pStaticStore, eType, fValue); - } - } break; - default: - break; - } - } - if (pStyle == NULL) { - pStyle = NewEnumValue(pStaticStore, FDE_CSSPROPERTYVALUE_Normal); - } - if (pVariant == NULL) { - pVariant = NewEnumValue(pStaticStore, FDE_CSSPROPERTYVALUE_Normal); - } - if (pWeight == NULL) { - pWeight = NewEnumValue(pStaticStore, FDE_CSSPROPERTYVALUE_Normal); - } - if (pFontSize == NULL) { - pFontSize = NewEnumValue(pStaticStore, FDE_CSSPROPERTYVALUE_Medium); - } - if (pLineHeight == NULL) { - pLineHeight = NewEnumValue(pStaticStore, FDE_CSSPROPERTYVALUE_Normal); - } - AddPropertyHolder(pStaticStore, FDE_CSSPROPERTY_FontStyle, pStyle, - bImportant); - AddPropertyHolder(pStaticStore, FDE_CSSPROPERTY_FontVariant, pVariant, - bImportant); - AddPropertyHolder(pStaticStore, FDE_CSSPROPERTY_FontWeight, pWeight, - bImportant); - AddPropertyHolder(pStaticStore, FDE_CSSPROPERTY_FontSize, pFontSize, - bImportant); - AddPropertyHolder(pStaticStore, FDE_CSSPROPERTY_LineHeight, pLineHeight, - bImportant); - if (familyList.GetSize() > 0) { - CFDE_CSSValueList* pList = FXTARGET_NewWith(pStaticStore) - CFDE_CSSValueList(pStaticStore, familyList); - AddPropertyHolder(pStaticStore, FDE_CSSPROPERTY_FontFamily, pList, - bImportant); - } - return TRUE; -} -FX_BOOL CFDE_CSSDeclaration::ParseColumnRuleProperty( - const FDE_CSSPROPERTYARGS* pArgs, - const FX_WCHAR* pszValue, - int32_t iValueLen, - FX_BOOL bImportant) { - IFX_MEMAllocator* pStaticStore = pArgs->pStaticStore; - CFDE_CSSValueListParser parser(pszValue, iValueLen, ' '); - IFDE_CSSPrimitiveValue* pColumnRuleWidth = NULL; - IFDE_CSSPrimitiveValue* pColumnRuleStyle = NULL; - IFDE_CSSPrimitiveValue* pColumnRuleColor = NULL; - FDE_CSSPRIMITIVETYPE eType; - while (parser.NextValue(eType, pszValue, iValueLen)) { - switch (eType) { - case FDE_CSSPRIMITIVETYPE_String: { - const FDE_CSSPROPERTYVALUETABLE* pValue = - FDE_GetCSSPropertyValueByName(pszValue, iValueLen); - if (pValue != NULL) { - switch (pValue->eName) { - case FDE_CSSPROPERTYVALUE_None: - case FDE_CSSPROPERTYVALUE_Hidden: - case FDE_CSSPROPERTYVALUE_Dotted: - case FDE_CSSPROPERTYVALUE_Dashed: - case FDE_CSSPROPERTYVALUE_Solid: - case FDE_CSSPROPERTYVALUE_Double: - case FDE_CSSPROPERTYVALUE_Groove: - case FDE_CSSPROPERTYVALUE_Ridge: - case FDE_CSSPROPERTYVALUE_Inset: - case FDE_CSSPROPERTYVALUE_Outset: - if (pColumnRuleStyle == NULL) { - pColumnRuleStyle = NewEnumValue(pStaticStore, pValue->eName); - } - break; - case FDE_CSSPROPERTYVALUE_Transparent: - if (pColumnRuleColor == NULL) { - pColumnRuleColor = NewEnumValue(pStaticStore, pValue->eName); - } - break; - case FDE_CSSPROPERTYVALUE_Thin: - case FDE_CSSPROPERTYVALUE_Medium: - case FDE_CSSPROPERTYVALUE_Thick: - if (pColumnRuleWidth == NULL) { - pColumnRuleWidth = NewEnumValue(pStaticStore, pValue->eName); - } - break; - default: - break; - } - continue; - } - FX_ARGB dwColor; - if (FDE_ParseCSSColor(pszValue, iValueLen, dwColor) && - pColumnRuleColor == NULL) { - pColumnRuleColor = FXTARGET_NewWith(pStaticStore) - CFDE_CSSPrimitiveValue((FX_ARGB)dwColor); - continue; - } - } break; - case FDE_CSSPRIMITIVETYPE_Number: { - FX_FLOAT fValue; - if (FDE_ParseCSSNumber(pszValue, iValueLen, fValue, eType) && - pColumnRuleWidth == NULL) { - pColumnRuleWidth = NewNumberValue(pStaticStore, eType, fValue); - } - } break; - case FDE_CSSPRIMITIVETYPE_RGB: { - FX_ARGB dwColor; - if (pColumnRuleColor == NULL && - FDE_ParseCSSColor(pszValue, iValueLen, dwColor)) { - pColumnRuleColor = FXTARGET_NewWith(pStaticStore) - CFDE_CSSPrimitiveValue((FX_ARGB)dwColor); - } - } break; - default: - break; - } - } - if (pColumnRuleColor == NULL && pColumnRuleStyle == NULL && - pColumnRuleWidth == NULL) { - return FALSE; - } - if (pColumnRuleStyle == NULL) { - pColumnRuleStyle = NewEnumValue(pStaticStore, FDE_CSSPROPERTYVALUE_None); - } - if (pColumnRuleWidth == NULL) { - pColumnRuleWidth = NewEnumValue(pStaticStore, FDE_CSSPROPERTYVALUE_Medium); - } - if (pColumnRuleColor == NULL) { - pColumnRuleColor = - FXTARGET_NewWith(pStaticStore) CFDE_CSSPrimitiveValue((FX_ARGB)0); - } - AddPropertyHolder(pStaticStore, FDE_CSSPROPERTY_ColumnRuleStyle, - pColumnRuleStyle, bImportant); - AddPropertyHolder(pStaticStore, FDE_CSSPROPERTY_ColumnRuleWidth, - pColumnRuleWidth, bImportant); - AddPropertyHolder(pStaticStore, FDE_CSSPROPERTY_ColumnRuleColor, - pColumnRuleColor, bImportant); - return TRUE; -} -FX_BOOL CFDE_CSSDeclaration::ParseTextEmphasisProperty( - FDE_CSSPROPERTYARGS* pArgs, - const FX_WCHAR* pszValue, - int32_t iValueLen, - FX_BOOL bImportant) { - IFX_MEMAllocator* pStaticStore = pArgs->pStaticStore; - CFDE_CSSValueListParser parser(pszValue, iValueLen, ' '); - CFDE_CSSValueArray arrEmphasisStyle; - FDE_CSSPRIMITIVETYPE eType; - IFDE_CSSPrimitiveValue* pEmphasisColor = NULL; - while (parser.NextValue(eType, pszValue, iValueLen)) { - switch (eType) { - case FDE_CSSPRIMITIVETYPE_String: { - const FDE_CSSPROPERTYVALUETABLE* pValue = - FDE_GetCSSPropertyValueByName(pszValue, iValueLen); - if (pValue != NULL) { - arrEmphasisStyle.Add(NewEnumValue(pStaticStore, pValue->eName)); - continue; - } - FX_ARGB dwColor; - if (FDE_ParseCSSColor(pszValue, iValueLen, dwColor)) { - pEmphasisColor = - FXTARGET_NewWith(pStaticStore) CFDE_CSSPrimitiveValue(dwColor); - continue; - } - pszValue = CopyToLocal(pArgs, pszValue, iValueLen); - arrEmphasisStyle.Add( - FXTARGET_NewWith(pStaticStore) - CFDE_CSSPrimitiveValue(FDE_CSSPRIMITIVETYPE_String, pszValue)); - } break; - case FDE_CSSPRIMITIVETYPE_RGB: { - FX_ARGB dwColor; - if (FDE_ParseCSSColor(pszValue, iValueLen, dwColor)) { - pEmphasisColor = - FXTARGET_NewWith(pStaticStore) CFDE_CSSPrimitiveValue(dwColor); - } - } break; - default: - break; - } - } - if (arrEmphasisStyle.GetSize() != 0) { - AddPropertyHolder(pStaticStore, FDE_CSSPROPERTY_TextEmphasisStyle, - FXTARGET_NewWith(pStaticStore) - CFDE_CSSValueList(pStaticStore, arrEmphasisStyle), - bImportant); - } - if (pEmphasisColor != NULL) { - AddPropertyHolder(pStaticStore, FDE_CSSPROPERTY_TextEmphasisColor, - pEmphasisColor, bImportant); - } - return TRUE; -} -FX_BOOL CFDE_CSSDeclaration::ParseColumnsProperty( - const FDE_CSSPROPERTYARGS* pArgs, - const FX_WCHAR* pszValue, - int32_t iValueLen, - FX_BOOL bImportant) { - IFX_MEMAllocator* pStaticStore = pArgs->pStaticStore; - CFDE_CSSValueListParser parser(pszValue, iValueLen, ' '); - IFDE_CSSPrimitiveValue* pColumnWidth = NULL; - IFDE_CSSPrimitiveValue* pColumnCount = NULL; - FDE_CSSPRIMITIVETYPE eType; - while (parser.NextValue(eType, pszValue, iValueLen)) { - switch (eType) { - case FDE_CSSPRIMITIVETYPE_String: { - const FDE_CSSPROPERTYVALUETABLE* pValue = - FDE_GetCSSPropertyValueByName(pszValue, iValueLen); - if (pValue == NULL && pValue->eName == FDE_CSSPROPERTYVALUE_Auto) { - pColumnWidth = NewEnumValue(pStaticStore, pValue->eName); - } - } break; - case FDE_CSSPRIMITIVETYPE_Number: { - FX_FLOAT fValue; - if (FDE_ParseCSSNumber(pszValue, iValueLen, fValue, eType)) { - switch (eType) { - case FDE_CSSPRIMITIVETYPE_Number: - if (pColumnCount == NULL) { - pColumnCount = NewNumberValue(pStaticStore, eType, fValue); - } - break; - default: - if (pColumnWidth == NULL) { - pColumnWidth = NewNumberValue(pStaticStore, eType, fValue); - } - break; - } - } - } break; - default: - break; - } - } - if (pColumnWidth == NULL && pColumnCount == NULL) { - return FALSE; - } else if (pColumnWidth == NULL) { - pColumnWidth = NewEnumValue(pStaticStore, FDE_CSSPROPERTYVALUE_Auto); - } else if (pColumnCount == NULL) { - pColumnCount = NewEnumValue(pStaticStore, FDE_CSSPROPERTYVALUE_Auto); - } - AddPropertyHolder(pStaticStore, FDE_CSSPROPERTY_ColumnWidth, pColumnWidth, - bImportant); - AddPropertyHolder(pStaticStore, FDE_CSSPROPERTY_ColumnCount, pColumnCount, - bImportant); - return TRUE; -} -FX_BOOL CFDE_CSSDeclaration::ParseOverflowProperty( - const FDE_CSSPROPERTYARGS* pArgs, - const FX_WCHAR* pszValue, - int32_t iValueLen, - FX_BOOL bImportant) { - IFX_MEMAllocator* pStaticStore = pArgs->pStaticStore; - CFDE_CSSValueListParser parser(pszValue, iValueLen, ' '); - IFDE_CSSPrimitiveValue* pOverflowX = NULL; - IFDE_CSSPrimitiveValue* pOverflowY = NULL; - FDE_CSSPRIMITIVETYPE eType; - while (parser.NextValue(eType, pszValue, iValueLen)) { - if (eType == FDE_CSSPRIMITIVETYPE_String) { - const FDE_CSSPROPERTYVALUETABLE* pValue = - FDE_GetCSSPropertyValueByName(pszValue, iValueLen); - if (pValue != NULL) { - switch (pValue->eName) { - case FDE_CSSOVERFLOW_Visible: - case FDE_CSSOVERFLOW_Hidden: - case FDE_CSSOVERFLOW_Scroll: - case FDE_CSSOVERFLOW_Auto: - case FDE_CSSOVERFLOW_NoDisplay: - case FDE_CSSOVERFLOW_NoContent: - if (pOverflowX != NULL && pOverflowY != NULL) { - return FALSE; - } else if (pOverflowX == NULL) { - pOverflowX = NewEnumValue(pStaticStore, pValue->eName); - } else if (pOverflowY == NULL) { - pOverflowY = NewEnumValue(pStaticStore, pValue->eName); - } - break; - default: - break; - } - } - } - } - if (pOverflowX == NULL && pOverflowY == NULL) { - return FALSE; - } else if (pOverflowY == NULL) { - pOverflowY = NewEnumValue(pStaticStore, pOverflowX->GetEnum()); - } - AddPropertyHolder(pStaticStore, FDE_CSSPROPERTY_OverflowX, pOverflowX, - bImportant); - AddPropertyHolder(pStaticStore, FDE_CSSPROPERTY_OverflowY, pOverflowY, - bImportant); - return TRUE; -} diff --git a/xfa/src/fde/css/fde_cssdeclaration.h b/xfa/src/fde/css/fde_cssdeclaration.h deleted file mode 100644 index 9866b20f4c..0000000000 --- a/xfa/src/fde/css/fde_cssdeclaration.h +++ /dev/null @@ -1,158 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FDE_CSS_FDE_CSSDECLARATION_H_ -#define XFA_SRC_FDE_CSS_FDE_CSSDECLARATION_H_ - -#include "xfa/src/fde/css/fde_cssdatatable.h" - -class FDE_CSSPropertyHolder : public CFX_Target { - public: - int16_t eProperty; - int16_t bImportant; - IFDE_CSSValue* pValue; - FDE_CSSPropertyHolder* pNext; -}; - -class FDE_CSSCustomProperty : public CFX_Target { - public: - const FX_WCHAR* pwsName; - const FX_WCHAR* pwsValue; - FDE_CSSCustomProperty* pNext; -}; - -struct FDE_CSSPROPERTYARGS { - IFX_MEMAllocator* pStaticStore; - CFX_MapPtrToPtr* pStringCache; - FDE_LPCCSSPROPERTYTABLE pProperty; -}; - -class CFDE_CSSDeclaration : public IFDE_CSSDeclaration, public CFX_Target { - public: - CFDE_CSSDeclaration() - : m_pFirstProperty(NULL), - m_pLastProperty(NULL), - m_pFirstCustom(NULL), - m_pLastCustom(NULL) {} - virtual IFDE_CSSValue* GetProperty(FDE_CSSPROPERTY eProperty, - FX_BOOL& bImportant) const; - virtual FX_POSITION GetStartPosition() const; - virtual void GetNextProperty(FX_POSITION& pos, - FDE_CSSPROPERTY& eProperty, - IFDE_CSSValue*& pValue, - FX_BOOL& bImportant) const; - virtual FX_POSITION GetStartCustom() const; - virtual void GetNextCustom(FX_POSITION& pos, - CFX_WideString& wsName, - CFX_WideString& wsValue) const; - FX_BOOL AddProperty(const FDE_CSSPROPERTYARGS* pArgs, - const FX_WCHAR* pszValue, - int32_t iValueLen); - FX_BOOL AddProperty(const FDE_CSSPROPERTYARGS* pArgs, - const FX_WCHAR* pszName, - int32_t iNameLen, - const FX_WCHAR* pszValue, - int32_t iValueLen); - - protected: - FX_BOOL ParseTextEmphasisProperty(FDE_CSSPROPERTYARGS* pArgs, - const FX_WCHAR* pszValue, - int32_t iValueLen, - FX_BOOL bImportant); - FX_BOOL ParseColumnsProperty(const FDE_CSSPROPERTYARGS* pArgs, - const FX_WCHAR* pszValue, - int32_t iValueLen, - FX_BOOL bImportant); - FX_BOOL ParseColumnRuleProperty(const FDE_CSSPROPERTYARGS* pArgs, - const FX_WCHAR* pszValue, - int32_t iValueLen, - FX_BOOL bImportant); - FX_BOOL ParseOverflowProperty(const FDE_CSSPROPERTYARGS* pArgs, - const FX_WCHAR* pszValue, - int32_t iValueLen, - FX_BOOL bImportant); - FX_BOOL ParseFontProperty(const FDE_CSSPROPERTYARGS* pArgs, - const FX_WCHAR* pszValue, - int32_t iValueLen, - FX_BOOL bImportant); - FX_BOOL ParseBackgroundProperty(const FDE_CSSPROPERTYARGS* pArgs, - const FX_WCHAR* pszValue, - int32_t iValueLen, - FX_BOOL bImportant); - FX_BOOL ParseListStyleProperty(const FDE_CSSPROPERTYARGS* pArgs, - const FX_WCHAR* pszValue, - int32_t iValueLen, - FX_BOOL bImportant); - FX_BOOL ParseBorderPropoerty(IFX_MEMAllocator* pStaticStore, - const FX_WCHAR* pszValue, - int32_t iValueLen, - IFDE_CSSValue*& pColor, - IFDE_CSSValue*& pStyle, - IFDE_CSSValue*& pWidth) const; - void AddBorderProperty(IFX_MEMAllocator* pStaticStore, - IFDE_CSSValue* pColor, - IFDE_CSSValue* pStyle, - IFDE_CSSValue* pWidth, - FX_BOOL bImportant, - FDE_CSSPROPERTY eColor, - FDE_CSSPROPERTY eStyle, - FDE_CSSPROPERTY eWidth); - FX_BOOL ParseContentProperty(const FDE_CSSPROPERTYARGS* pArgs, - const FX_WCHAR* pszValue, - int32_t iValueLen, - FX_BOOL bImportant); - FX_BOOL ParseCounterProperty(const FDE_CSSPROPERTYARGS* pArgs, - const FX_WCHAR* pszValue, - int32_t iValueLen, - FX_BOOL bImportant); - FX_BOOL ParseValueListProperty(const FDE_CSSPROPERTYARGS* pArgs, - const FX_WCHAR* pszValue, - int32_t iValueLen, - FX_BOOL bImportant); - FX_BOOL Add4ValuesProperty(IFX_MEMAllocator* pStaticStore, - const CFDE_CSSValueArray& list, - FX_BOOL bImportant, - FDE_CSSPROPERTY eLeft, - FDE_CSSPROPERTY eTop, - FDE_CSSPROPERTY eRight, - FDE_CSSPROPERTY eBottom); - IFDE_CSSValue* ParseNumber(const FDE_CSSPROPERTYARGS* pArgs, - const FX_WCHAR* pszValue, - int32_t iValueLen); - IFDE_CSSValue* ParseEnum(const FDE_CSSPROPERTYARGS* pArgs, - const FX_WCHAR* pszValue, - int32_t iValueLen); - IFDE_CSSValue* ParseColor(const FDE_CSSPROPERTYARGS* pArgs, - const FX_WCHAR* pszValue, - int32_t iValueLen); - IFDE_CSSValue* ParseURI(const FDE_CSSPROPERTYARGS* pArgs, - const FX_WCHAR* pszValue, - int32_t iValueLen); - IFDE_CSSValue* ParseString(const FDE_CSSPROPERTYARGS* pArgs, - const FX_WCHAR* pszValue, - int32_t iValueLen); - IFDE_CSSValue* ParseFunction(const FDE_CSSPROPERTYARGS* pArgs, - const FX_WCHAR* pszValue, - int32_t iValueLen); - const FX_WCHAR* CopyToLocal(const FDE_CSSPROPERTYARGS* pArgs, - const FX_WCHAR* pszValue, - int32_t iValueLen); - void AddPropertyHolder(IFX_MEMAllocator* pStaticStore, - FDE_CSSPROPERTY eProperty, - IFDE_CSSValue* pValue, - FX_BOOL bImportant); - IFDE_CSSPrimitiveValue* NewNumberValue(IFX_MEMAllocator* pStaticStore, - FDE_CSSPRIMITIVETYPE eUnit, - FX_FLOAT fValue) const; - IFDE_CSSPrimitiveValue* NewEnumValue(IFX_MEMAllocator* pStaticStore, - FDE_CSSPROPERTYVALUE eValue) const; - FDE_CSSPropertyHolder* m_pFirstProperty; - FDE_CSSPropertyHolder* m_pLastProperty; - FDE_CSSCustomProperty* m_pFirstCustom; - FDE_CSSCustomProperty* m_pLastCustom; -}; - -#endif // XFA_SRC_FDE_CSS_FDE_CSSDECLARATION_H_ diff --git a/xfa/src/fde/css/fde_cssstyleselector.cpp b/xfa/src/fde/css/fde_cssstyleselector.cpp deleted file mode 100644 index ff82f9d956..0000000000 --- a/xfa/src/fde/css/fde_cssstyleselector.cpp +++ /dev/null @@ -1,1794 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fde/css/fde_cssstyleselector.h" - -#include - -#include "xfa/src/fde/css/fde_csscache.h" -#include "xfa/src/fde/css/fde_cssdeclaration.h" - -int32_t CFDE_CSSCounterStyle::FindIndex(const FX_WCHAR* pszIdentifier) { - int32_t iCount = m_arrCounterData.GetSize(); - for (int32_t i = 0; i < iCount; i++) { - if (FXSYS_wcscmp(pszIdentifier, m_arrCounterData.ElementAt(i).m_pszIdent) == - 0) { - return i; - } - } - return -1; -} -void CFDE_CSSCounterStyle::DoUpdateIndex(IFDE_CSSValueList* pList) { - if (pList == NULL) { - return; - } - int32_t iCount = pList->CountValues(); - FX_FLOAT fDefValue = 1.0; - FX_BOOL bDefIncrement = TRUE; - if (pList == m_pCounterReset) { - fDefValue = 0.0; - bDefIncrement = FALSE; - } - for (int32_t i = 0; i < iCount; i++) { - IFDE_CSSValueList* pCounter = (IFDE_CSSValueList*)pList->GetValue(i); - int32_t iLen; - const FX_WCHAR* pszIdentifier = - ((IFDE_CSSPrimitiveValue*)(pCounter->GetValue(0)))->GetString(iLen); - FX_FLOAT fValue = fDefValue; - if (pCounter->CountValues() > 1) { - fValue = ((IFDE_CSSPrimitiveValue*)(pCounter->GetValue(1)))->GetFloat(); - } - int32_t iIndex = FindIndex(pszIdentifier); - if (iIndex == -1) { - FDE_CSSCOUNTERDATA data; - data.m_pszIdent = pszIdentifier; - if (bDefIncrement) { - data.m_bIncrement = TRUE; - data.m_iIncVal = (int32_t)fValue; - } else { - data.m_iResetVal = (int32_t)fValue; - data.m_bReset = TRUE; - } - m_arrCounterData.Add(data); - } else { - FDE_CSSCOUNTERDATA& data = m_arrCounterData.ElementAt(iIndex); - if (bDefIncrement) { - data.m_bIncrement = TRUE; - data.m_iIncVal += (int32_t)fValue; - } else { - data.m_bReset = TRUE; - data.m_iResetVal = (int32_t)fValue; - } - } - } -} -void CFDE_CSSCounterStyle::UpdateIndex() { - if (!m_bIndexDirty) { - return; - } - m_arrCounterData.RemoveAll(); - DoUpdateIndex(m_pCounterInc); - DoUpdateIndex(m_pCounterReset); - m_bIndexDirty = FALSE; -} -FDE_CSSTEXTEMPHASISMARK CFDE_CSSComputedStyle::GetTextEmphasisMark() const { - if (m_InheritedData.m_eTextEmphasisMark != FDE_CSSTEXTEMPHASISMARK_Auto) { - return (FDE_CSSTEXTEMPHASISMARK)m_InheritedData.m_eTextEmphasisMark; - } - if (m_InheritedData.m_eWritingMode == FDE_CSSWRITINGMODE_HorizontalTb) { - return FDE_CSSTEXTEMPHASISMARK_Dot; - } - return FDE_CSSTEXTEMPHASISMARK_Sesame; -} -FDE_CSSRuleData::FDE_CSSRuleData(IFDE_CSSSelector* pSel, - IFDE_CSSDeclaration* pDecl, - FX_DWORD dwPos) - : pSelector(pSel), pDeclaration(pDecl), dwPriority(dwPos), pNext(NULL) { - static const FX_DWORD s_Specific[5] = {0x00010000, 0x00010000, 0x00100000, - 0x00100000, 0x01000000}; - for (; pSel != NULL; pSel = pSel->GetNextSelector()) { - FDE_CSSSELECTORTYPE eType = pSel->GetType(); - if (eType > FDE_CSSSELECTORTYPE_Descendant || - pSel->GetNameHash() != FDE_CSSUNIVERSALHASH) { - dwPriority += s_Specific[eType]; - } - } -} -void CFDE_CSSRuleCollection::Clear() { - m_IDRules.RemoveAll(); - m_TagRules.RemoveAll(); - m_ClassRules.RemoveAll(); - m_pUniversalRules = NULL; - m_pStaticStore = NULL; - m_iSelectors = 0; -} -void CFDE_CSSRuleCollection::AddRulesFrom(const CFDE_CSSStyleSheetArray& sheets, - FX_DWORD dwMediaList, - IFX_FontMgr* pFontMgr) { - int32_t iSheets = sheets.GetSize(); - for (int32_t i = 0; i < iSheets; ++i) { - IFDE_CSSStyleSheet* pSheet = sheets.GetAt(i); - if (FX_DWORD dwMatchMedia = pSheet->GetMediaList() & dwMediaList) { - int32_t iRules = pSheet->CountRules(); - for (int32_t j = 0; j < iRules; j++) { - AddRulesFrom(pSheet, pSheet->GetRule(j), dwMatchMedia, pFontMgr); - } - } - } -} -void CFDE_CSSRuleCollection::AddRulesFrom(IFDE_CSSStyleSheet* pStyleSheet, - IFDE_CSSRule* pRule, - FX_DWORD dwMediaList, - IFX_FontMgr* pFontMgr) { - switch (pRule->GetType()) { - case FDE_CSSRULETYPE_Style: { - IFDE_CSSStyleRule* pStyleRule = (IFDE_CSSStyleRule*)pRule; - IFDE_CSSDeclaration* pDeclaration = pStyleRule->GetDeclaration(); - int32_t iSelectors = pStyleRule->CountSelectorLists(); - for (int32_t i = 0; i < iSelectors; ++i) { - IFDE_CSSSelector* pSelector = pStyleRule->GetSelectorList(i); - if (pSelector->GetType() == FDE_CSSSELECTORTYPE_Persudo) { - FDE_CSSRuleData* pData = NewRuleData(pSelector, pDeclaration); - AddRuleTo(m_pPersudoRules, pData); - continue; - } - if (pSelector->GetNameHash() != FDE_CSSUNIVERSALHASH) { - AddRuleTo(m_TagRules, pSelector->GetNameHash(), pSelector, - pDeclaration); - continue; - } - IFDE_CSSSelector* pNext = pSelector->GetNextSelector(); - if (pNext == NULL) { - FDE_CSSRuleData* pData = NewRuleData(pSelector, pDeclaration); - AddRuleTo(m_pUniversalRules, pData); - continue; - } - switch (pNext->GetType()) { - case FDE_CSSSELECTORTYPE_ID: - AddRuleTo(m_IDRules, pNext->GetNameHash(), pSelector, pDeclaration); - break; - case FDE_CSSSELECTORTYPE_Class: - AddRuleTo(m_ClassRules, pNext->GetNameHash(), pSelector, - pDeclaration); - break; - case FDE_CSSSELECTORTYPE_Descendant: - case FDE_CSSSELECTORTYPE_Element: - AddRuleTo(m_pUniversalRules, NewRuleData(pSelector, pDeclaration)); - break; - default: - FXSYS_assert(FALSE); - break; - } - } - } break; - case FDE_CSSRULETYPE_Media: { - IFDE_CSSMediaRule* pMediaRule = (IFDE_CSSMediaRule*)pRule; - if (pMediaRule->GetMediaList() & dwMediaList) { - int32_t iRules = pMediaRule->CountRules(); - for (int32_t i = 0; i < iRules; ++i) { - AddRulesFrom(pStyleSheet, pMediaRule->GetRule(i), dwMediaList, - pFontMgr); - } - } - } break; - default: - break; - } -} -void CFDE_CSSRuleCollection::AddRuleTo(CFX_MapPtrToPtr& map, - FX_DWORD dwKey, - IFDE_CSSSelector* pSel, - IFDE_CSSDeclaration* pDecl) { - void* pKey = (void*)(uintptr_t)dwKey; - FDE_CSSRuleData* pData = NewRuleData(pSel, pDecl); - FDE_CSSRuleData* pList = NULL; - if (!map.Lookup(pKey, (void*&)pList)) { - map.SetAt(pKey, pData); - } else if (AddRuleTo(pList, pData)) { - map.SetAt(pKey, pList); - } -} - -FX_BOOL CFDE_CSSRuleCollection::AddRuleTo(FDE_CSSRuleData*& pList, - FDE_CSSRuleData* pData) { - if (pList) { - pData->pNext = pList->pNext; - pList->pNext = pData; - return FALSE; - } - - pList = pData; - return TRUE; -} - -FDE_CSSRuleData* CFDE_CSSRuleCollection::NewRuleData( - IFDE_CSSSelector* pSel, - IFDE_CSSDeclaration* pDecl) { - return FXTARGET_NewWith(m_pStaticStore) - FDE_CSSRuleData(pSel, pDecl, ++m_iSelectors); -} - -IFDE_CSSStyleSelector* IFDE_CSSStyleSelector::Create() { - return new CFDE_CSSStyleSelector; -} -CFDE_CSSStyleSelector::CFDE_CSSStyleSelector() - : m_pFontMgr(NULL), - m_fDefFontSize(12.0f), - m_pRuleDataStore(NULL), - m_pInlineStyleStore(NULL), - m_pFixedStyleStore(NULL), - m_pAccelerator(NULL) { - m_ePriorities[FDE_CSSSTYLESHEETPRIORITY_High] = FDE_CSSSTYLESHEETGROUP_Author; - m_ePriorities[FDE_CSSSTYLESHEETPRIORITY_Mid] = FDE_CSSSTYLESHEETGROUP_User; - m_ePriorities[FDE_CSSSTYLESHEETPRIORITY_Low] = - FDE_CSSSTYLESHEETGROUP_UserAgent; -} -CFDE_CSSStyleSelector::~CFDE_CSSStyleSelector() { - Reset(); - if (m_pInlineStyleStore != NULL) { - m_pInlineStyleStore->Release(); - } - if (m_pFixedStyleStore != NULL) { - m_pFixedStyleStore->Release(); - } - if (m_pAccelerator != NULL) { - delete m_pAccelerator; - } -} -void CFDE_CSSStyleSelector::SetFontMgr(IFX_FontMgr* pFontMgr) { - m_pFontMgr = pFontMgr; -} -void CFDE_CSSStyleSelector::SetDefFontSize(FX_FLOAT fFontSize) { - FXSYS_assert(fFontSize > 0); - m_fDefFontSize = fFontSize; -} -IFDE_CSSAccelerator* CFDE_CSSStyleSelector::InitAccelerator() { - if (m_pAccelerator == NULL) { - m_pAccelerator = new CFDE_CSSAccelerator; - FXSYS_assert(m_pAccelerator != NULL); - } - m_pAccelerator->Clear(); - return m_pAccelerator; -} -IFDE_CSSComputedStyle* CFDE_CSSStyleSelector::CreateComputedStyle( - IFDE_CSSComputedStyle* pParentStyle) { - if (m_pFixedStyleStore == NULL) { - m_pFixedStyleStore = FX_CreateAllocator(FX_ALLOCTYPE_Fixed, 16, - sizeof(CFDE_CSSComputedStyle)); - FXSYS_assert(m_pFixedStyleStore != NULL); - } - CFDE_CSSComputedStyle* pStyle = FXTARGET_NewWith(m_pFixedStyleStore) - CFDE_CSSComputedStyle(m_pFixedStyleStore); - if (pParentStyle) { - pStyle->m_InheritedData = - ((CFDE_CSSComputedStyle*)pParentStyle)->m_InheritedData; - } else { - pStyle->m_InheritedData.Reset(); - } - pStyle->m_NonInheritedData.Reset(); - return pStyle; -} -FX_BOOL CFDE_CSSStyleSelector::SetStyleSheet(FDE_CSSSTYLESHEETGROUP eType, - IFDE_CSSStyleSheet* pSheet) { - FXSYS_assert(eType < FDE_CSSSTYLESHEETGROUP_MAX); - CFDE_CSSStyleSheetArray& dest = m_SheetGroups[eType]; - dest.RemoveAt(0, dest.GetSize()); - if (pSheet != NULL) { - dest.Add(pSheet); - } - return TRUE; -} -FX_BOOL CFDE_CSSStyleSelector::SetStyleSheets( - FDE_CSSSTYLESHEETGROUP eType, - const CFDE_CSSStyleSheetArray* pArray) { - FXSYS_assert(eType < FDE_CSSSTYLESHEETGROUP_MAX); - CFDE_CSSStyleSheetArray& dest = m_SheetGroups[eType]; - if (pArray == NULL) { - dest.RemoveAt(0, dest.GetSize()); - } else { - dest.Copy(*pArray); - } - return TRUE; -} -void CFDE_CSSStyleSelector::SetStylePriority( - FDE_CSSSTYLESHEETGROUP eType, - FDE_CSSSTYLESHEETPRIORITY ePriority) { - m_ePriorities[ePriority] = eType; -} -void CFDE_CSSStyleSelector::UpdateStyleIndex(FX_DWORD dwMediaList) { - Reset(); - m_pRuleDataStore = FX_CreateAllocator(FX_ALLOCTYPE_Static, 1024, 0); - FXSYS_assert(m_pRuleDataStore != NULL); - for (int32_t iGroup = 0; iGroup < FDE_CSSSTYLESHEETGROUP_MAX; ++iGroup) { - CFDE_CSSRuleCollection& rules = m_RuleCollection[iGroup]; - rules.m_pStaticStore = m_pRuleDataStore; - rules.AddRulesFrom(m_SheetGroups[iGroup], dwMediaList, m_pFontMgr); - } -} -void CFDE_CSSStyleSelector::Reset() { - for (int32_t iGroup = 0; iGroup < FDE_CSSSTYLESHEETGROUP_MAX; ++iGroup) { - m_RuleCollection[iGroup].Clear(); - } - if (m_pRuleDataStore != NULL) { - m_pRuleDataStore->Release(); - m_pRuleDataStore = NULL; - } -} -int32_t CFDE_CSSStyleSelector::MatchDeclarations( - IFDE_CSSTagProvider* pTag, - CFDE_CSSDeclarationArray& matchedDecls, - FDE_CSSPERSUDO ePersudoType) { - FXSYS_assert(m_pAccelerator != NULL && pTag != NULL); - FDE_CSSTagCache* pCache = m_pAccelerator->GetTopElement(); - FXSYS_assert(pCache != NULL && pCache->GetTag() == pTag); - matchedDecls.RemoveAt(0, matchedDecls.GetSize()); - for (int32_t ePriority = FDE_CSSSTYLESHEETPRIORITY_MAX - 1; ePriority >= 0; - --ePriority) { - FDE_CSSSTYLESHEETGROUP eGroup = m_ePriorities[ePriority]; - CFDE_CSSRuleCollection& rules = m_RuleCollection[eGroup]; - if (rules.CountSelectors() == 0) { - continue; - } - if (ePersudoType == FDE_CSSPERSUDO_NONE) { - MatchRules(pCache, rules.GetUniversalRuleData(), ePersudoType); - if (pCache->HashTag()) { - MatchRules(pCache, rules.GetTagRuleData(pCache->HashTag()), - ePersudoType); - } - int32_t iCount = pCache->CountHashClass(); - for (int32_t i = 0; i < iCount; i++) { - pCache->SetClassIndex(i); - MatchRules(pCache, rules.GetClassRuleData(pCache->HashClass()), - ePersudoType); - } - } else { - MatchRules(pCache, rules.GetPersudoRuleData(), ePersudoType); - } - - std::sort(m_MatchedRules.begin(), m_MatchedRules.end(), - [](const FDE_CSSRuleData* p1, const FDE_CSSRuleData* p2) { - return p1->dwPriority < p2->dwPriority; - }); - for (const auto& rule : m_MatchedRules) - matchedDecls.Add(rule->pDeclaration); - m_MatchedRules.clear(); - } - return matchedDecls.GetSize(); -} - -void CFDE_CSSStyleSelector::MatchRules(FDE_CSSTagCache* pCache, - FDE_CSSRuleData* pList, - FDE_CSSPERSUDO ePersudoType) { - while (pList) { - if (MatchSelector(pCache, pList->pSelector, ePersudoType)) - m_MatchedRules.push_back(pList); - pList = pList->pNext; - } -} - -FX_BOOL CFDE_CSSStyleSelector::MatchSelector(FDE_CSSTagCache* pCache, - IFDE_CSSSelector* pSel, - FDE_CSSPERSUDO ePersudoType) { - FX_DWORD dwHash; - while (pSel != NULL && pCache != NULL) { - switch (pSel->GetType()) { - case FDE_CSSSELECTORTYPE_Descendant: - dwHash = pSel->GetNameHash(); - while ((pCache = pCache->GetParent()) != NULL) { - if (dwHash != FDE_CSSUNIVERSALHASH && dwHash != pCache->HashTag()) { - continue; - } - if (MatchSelector(pCache, pSel->GetNextSelector(), ePersudoType)) { - return TRUE; - } - } - return FALSE; - case FDE_CSSSELECTORTYPE_ID: - dwHash = pCache->HashID(); - if (dwHash != pSel->GetNameHash()) { - return FALSE; - } - break; - case FDE_CSSSELECTORTYPE_Class: - dwHash = pCache->HashClass(); - if (dwHash != pSel->GetNameHash()) { - return FALSE; - } - break; - case FDE_CSSSELECTORTYPE_Element: - dwHash = pSel->GetNameHash(); - if (dwHash != FDE_CSSUNIVERSALHASH && dwHash != pCache->HashTag()) { - return FALSE; - } - break; - case FDE_CSSSELECTORTYPE_Persudo: - dwHash = FDE_GetCSSPersudoByEnum(ePersudoType)->dwHash; - if (dwHash != pSel->GetNameHash()) { - return FALSE; - } - break; - default: - FXSYS_assert(FALSE); - break; - } - pSel = pSel->GetNextSelector(); - } - return pSel == NULL && pCache != NULL; -} - -void CFDE_CSSStyleSelector::ComputeStyle( - IFDE_CSSTagProvider* pTag, - const IFDE_CSSDeclaration** ppDeclArray, - int32_t iDeclCount, - IFDE_CSSComputedStyle* pDestStyle) { - FXSYS_assert(iDeclCount >= 0); - FXSYS_assert(pDestStyle); - FX_POSITION pos = pTag->GetFirstAttribute(); - if (pos != NULL) { - if (m_pInlineStyleStore == NULL) { - m_pInlineStyleStore = FX_CreateAllocator(FX_ALLOCTYPE_Static, 2048, 0); - } - CFDE_CSSDeclaration* pDecl = NULL; - CFX_WideStringC wsAttri, wsValue; - FX_DWORD dwAttriHash; - do { - pTag->GetNextAttribute(pos, wsAttri, wsValue); - dwAttriHash = - FX_HashCode_String_GetW(wsAttri.GetPtr(), wsAttri.GetLength(), TRUE); - static const FX_DWORD s_dwStyleHash = - FX_HashCode_String_GetW(L"style", 5, TRUE); - static const FX_DWORD s_dwAlignHash = - FX_HashCode_String_GetW(L"align", 5, TRUE); - if (dwAttriHash == s_dwStyleHash) { - if (pDecl == NULL) { - pDecl = FXTARGET_NewWith(m_pInlineStyleStore) CFDE_CSSDeclaration; - } - AppendInlineStyle(pDecl, wsValue.GetPtr(), wsValue.GetLength()); - } else if (dwAttriHash == s_dwAlignHash) { - if (pDecl == NULL) { - pDecl = FXTARGET_NewWith(m_pInlineStyleStore) CFDE_CSSDeclaration; - } - FDE_CSSPROPERTYARGS args; - args.pStringCache = NULL; - args.pStaticStore = m_pInlineStyleStore; - args.pProperty = FDE_GetCSSPropertyByEnum(FDE_CSSPROPERTY_TextAlign); - pDecl->AddProperty(&args, wsValue.GetPtr(), wsValue.GetLength()); - } - } while (pos != NULL); - if (pDecl != NULL) { - CFDE_CSSDeclarationArray decls; - decls.SetSize(iDeclCount + 1); - IFDE_CSSDeclaration** ppInline = decls.GetData(); - FXSYS_memcpy(ppInline, ppDeclArray, - iDeclCount * sizeof(IFDE_CSSDeclaration*)); - ppInline[iDeclCount++] = pDecl; - ApplyDeclarations(TRUE, (const IFDE_CSSDeclaration**)ppInline, iDeclCount, - pDestStyle); - ApplyDeclarations(FALSE, (const IFDE_CSSDeclaration**)ppInline, - iDeclCount, pDestStyle); - return; - } - } - if (iDeclCount > 0) { - FXSYS_assert(ppDeclArray != NULL); - ApplyDeclarations(TRUE, ppDeclArray, iDeclCount, pDestStyle); - ApplyDeclarations(FALSE, ppDeclArray, iDeclCount, pDestStyle); - } -} -void CFDE_CSSStyleSelector::ApplyDeclarations( - FX_BOOL bPriority, - const IFDE_CSSDeclaration** ppDeclArray, - int32_t iDeclCount, - IFDE_CSSComputedStyle* pDestStyle) { - CFDE_CSSComputedStyle* pComputedStyle = (CFDE_CSSComputedStyle*)pDestStyle; - IFDE_CSSValue* pVal; - FX_BOOL bImportant; - int32_t i; - if (bPriority) { - IFDE_CSSValue *pLastest = NULL, *pImportant = NULL; - for (i = 0; i < iDeclCount; ++i) { - pVal = ppDeclArray[i]->GetProperty(FDE_CSSPROPERTY_FontSize, bImportant); - if (pVal == NULL) { - continue; - } else if (bImportant) { - pImportant = pVal; - } else { - pLastest = pVal; - } - } - if (pImportant) { - ApplyProperty(FDE_CSSPROPERTY_FontSize, pImportant, pComputedStyle); - } else if (pLastest) { - ApplyProperty(FDE_CSSPROPERTY_FontSize, pLastest, pComputedStyle); - } - } else { - CFDE_CSSDeclarationArray importants; - const IFDE_CSSDeclaration* pDecl = NULL; - FDE_CSSPROPERTY eProp; - FX_POSITION pos; - for (i = 0; i < iDeclCount; ++i) { - pDecl = ppDeclArray[i]; - pos = pDecl->GetStartPosition(); - while (pos != NULL) { - pDecl->GetNextProperty(pos, eProp, pVal, bImportant); - if (eProp == FDE_CSSPROPERTY_FontSize) { - continue; - } else if (!bImportant) { - ApplyProperty(eProp, pVal, pComputedStyle); - } else if (importants.GetSize() == 0 || - importants[importants.GetUpperBound()] != pDecl) { - importants.Add((IFDE_CSSDeclaration*)pDecl); - } - } - } - iDeclCount = importants.GetSize(); - for (i = 0; i < iDeclCount; ++i) { - pDecl = importants[i]; - pos = pDecl->GetStartPosition(); - while (pos != NULL) { - pDecl->GetNextProperty(pos, eProp, pVal, bImportant); - if (bImportant && eProp != FDE_CSSPROPERTY_FontSize) { - ApplyProperty(eProp, pVal, pComputedStyle); - } - } - } - CFX_WideString wsName, wsValue; - pos = pDecl->GetStartCustom(); - while (pos) { - pDecl->GetNextCustom(pos, wsName, wsValue); - pComputedStyle->AddCustomStyle(wsName, wsValue); - } - } -} -void CFDE_CSSStyleSelector::AppendInlineStyle(CFDE_CSSDeclaration* pDecl, - const FX_WCHAR* psz, - int32_t iLen) { - FXSYS_assert(pDecl != NULL && psz != NULL && iLen > 0); - IFDE_CSSSyntaxParser* pSyntax = IFDE_CSSSyntaxParser::Create(); - if (pSyntax == NULL) { - return; - } - if (pSyntax->Init(psz, iLen, 32, TRUE)) { - int32_t iLen; - const FX_WCHAR* psz; - FDE_CSSPROPERTYARGS args; - args.pStringCache = NULL; - args.pStaticStore = m_pInlineStyleStore; - args.pProperty = NULL; - CFX_WideString wsName; - for (;;) { - FDE_CSSSYNTAXSTATUS eStatus = pSyntax->DoSyntaxParse(); - if (eStatus == FDE_CSSSYNTAXSTATUS_PropertyName) { - psz = pSyntax->GetCurrentString(iLen); - args.pProperty = FDE_GetCSSPropertyByName(psz, iLen); - if (args.pProperty == NULL) { - wsName = CFX_WideStringC(psz, iLen); - } - } else if (eStatus == FDE_CSSSYNTAXSTATUS_PropertyValue) { - if (args.pProperty != NULL) { - psz = pSyntax->GetCurrentString(iLen); - if (iLen > 0) { - pDecl->AddProperty(&args, psz, iLen); - } - } else if (iLen > 0) { - psz = pSyntax->GetCurrentString(iLen); - if (iLen > 0) { - pDecl->AddProperty(&args, wsName, wsName.GetLength(), psz, iLen); - } - } - } else { - break; - } - } - } - pSyntax->Release(); -} -#define FDE_CSSNONINHERITS (pComputedStyle->m_NonInheritedData) -#define FDE_CSSINHERITS (pComputedStyle->m_InheritedData) -#define FDE_CSSFONTSIZE (FDE_CSSINHERITS.m_fFontSize) -void CFDE_CSSStyleSelector::ApplyProperty( - FDE_CSSPROPERTY eProperty, - IFDE_CSSValue* pValue, - CFDE_CSSComputedStyle* pComputedStyle) { - if (pValue->GetType() == FDE_CSSVALUETYPE_Primitive) { - IFDE_CSSPrimitiveValue* pPrimitive = (IFDE_CSSPrimitiveValue*)pValue; - FDE_CSSPRIMITIVETYPE eType = pPrimitive->GetPrimitiveType(); - switch (eProperty) { - case FDE_CSSPROPERTY_Display: - if (eType == FDE_CSSPRIMITIVETYPE_Enum) { - FDE_CSSNONINHERITS.m_eDisplay = ToDisplay(pPrimitive->GetEnum()); - } - break; - case FDE_CSSPROPERTY_FontSize: { - FX_FLOAT& fFontSize = FDE_CSSFONTSIZE; - if (eType >= FDE_CSSPRIMITIVETYPE_Number && - eType <= FDE_CSSPRIMITIVETYPE_PC) { - fFontSize = ApplyNumber(eType, pPrimitive->GetFloat(), fFontSize); - } else if (eType == FDE_CSSPRIMITIVETYPE_Enum) { - fFontSize = ToFontSize(pPrimitive->GetEnum(), fFontSize); - } - } break; - case FDE_CSSPROPERTY_LineHeight: - if (eType == FDE_CSSPRIMITIVETYPE_Number) { - FDE_CSSINHERITS.m_fLineHeight = - pPrimitive->GetFloat() * FDE_CSSFONTSIZE; - } else if (eType > FDE_CSSPRIMITIVETYPE_Number && - eType <= FDE_CSSPRIMITIVETYPE_PC) { - FDE_CSSINHERITS.m_fLineHeight = - ApplyNumber(eType, pPrimitive->GetFloat(), FDE_CSSFONTSIZE); - } - break; - case FDE_CSSPROPERTY_TextAlign: - if (eType == FDE_CSSPRIMITIVETYPE_Enum) { - FDE_CSSINHERITS.m_eTextAligh = ToTextAlign(pPrimitive->GetEnum()); - } - break; - case FDE_CSSPROPERTY_TextIndent: - SetLengthWithPercent(FDE_CSSINHERITS.m_TextIndent, eType, pPrimitive, - FDE_CSSFONTSIZE); - break; - case FDE_CSSPROPERTY_FontWeight: - if (eType == FDE_CSSPRIMITIVETYPE_Enum) { - FDE_CSSINHERITS.m_wFontWeight = ToFontWeight(pPrimitive->GetEnum()); - } else if (eType == FDE_CSSPRIMITIVETYPE_Number) { - int32_t iValue = (int32_t)pPrimitive->GetFloat() / 100; - if (iValue >= 1 && iValue <= 9) { - FDE_CSSINHERITS.m_wFontWeight = iValue * 100; - } - } - break; - case FDE_CSSPROPERTY_FontStyle: - if (eType == FDE_CSSPRIMITIVETYPE_Enum) { - FDE_CSSINHERITS.m_eFontStyle = ToFontStyle(pPrimitive->GetEnum()); - } - break; - case FDE_CSSPROPERTY_Color: - if (eType == FDE_CSSPRIMITIVETYPE_RGB) { - FDE_CSSINHERITS.m_dwFontColor = pPrimitive->GetRGBColor(); - } - break; - case FDE_CSSPROPERTY_MarginLeft: - FDE_CSSNONINHERITS.m_bHasMargin |= - SetLengthWithPercent(FDE_CSSNONINHERITS.m_MarginWidth.left, eType, - pPrimitive, FDE_CSSFONTSIZE); - break; - case FDE_CSSPROPERTY_MarginTop: - FDE_CSSNONINHERITS.m_bHasMargin |= - SetLengthWithPercent(FDE_CSSNONINHERITS.m_MarginWidth.top, eType, - pPrimitive, FDE_CSSFONTSIZE); - break; - case FDE_CSSPROPERTY_MarginRight: - FDE_CSSNONINHERITS.m_bHasMargin |= - SetLengthWithPercent(FDE_CSSNONINHERITS.m_MarginWidth.right, eType, - pPrimitive, FDE_CSSFONTSIZE); - break; - case FDE_CSSPROPERTY_MarginBottom: - FDE_CSSNONINHERITS.m_bHasMargin |= - SetLengthWithPercent(FDE_CSSNONINHERITS.m_MarginWidth.bottom, eType, - pPrimitive, FDE_CSSFONTSIZE); - break; - case FDE_CSSPROPERTY_PaddingLeft: - FDE_CSSNONINHERITS.m_bHasPadding |= - SetLengthWithPercent(FDE_CSSNONINHERITS.m_PaddingWidth.left, eType, - pPrimitive, FDE_CSSFONTSIZE); - break; - case FDE_CSSPROPERTY_PaddingTop: - FDE_CSSNONINHERITS.m_bHasPadding |= - SetLengthWithPercent(FDE_CSSNONINHERITS.m_PaddingWidth.top, eType, - pPrimitive, FDE_CSSFONTSIZE); - break; - case FDE_CSSPROPERTY_PaddingRight: - FDE_CSSNONINHERITS.m_bHasPadding |= - SetLengthWithPercent(FDE_CSSNONINHERITS.m_PaddingWidth.right, eType, - pPrimitive, FDE_CSSFONTSIZE); - break; - case FDE_CSSPROPERTY_PaddingBottom: - FDE_CSSNONINHERITS.m_bHasPadding |= - SetLengthWithPercent(FDE_CSSNONINHERITS.m_PaddingWidth.bottom, - eType, pPrimitive, FDE_CSSFONTSIZE); - break; - case FDE_CSSPROPERTY_BorderLeftWidth: - FDE_CSSNONINHERITS.m_bHasBorder |= - SetLengthWithPercent(FDE_CSSNONINHERITS.m_BorderWidth.left, eType, - pPrimitive, FDE_CSSFONTSIZE); - break; - case FDE_CSSPROPERTY_BorderTopWidth: - FDE_CSSNONINHERITS.m_bHasBorder |= - SetLengthWithPercent(FDE_CSSNONINHERITS.m_BorderWidth.top, eType, - pPrimitive, FDE_CSSFONTSIZE); - break; - case FDE_CSSPROPERTY_BorderRightWidth: - FDE_CSSNONINHERITS.m_bHasBorder |= - SetLengthWithPercent(FDE_CSSNONINHERITS.m_BorderWidth.right, eType, - pPrimitive, FDE_CSSFONTSIZE); - break; - case FDE_CSSPROPERTY_BorderBottomWidth: - FDE_CSSNONINHERITS.m_bHasBorder |= - SetLengthWithPercent(FDE_CSSNONINHERITS.m_BorderWidth.bottom, eType, - pPrimitive, FDE_CSSFONTSIZE); - break; - case FDE_CSSPROPERTY_BorderLeftStyle: - if (eType == FDE_CSSPRIMITIVETYPE_Enum) { - FDE_CSSNONINHERITS.m_eBDRLeftStyle = - ToBorderStyle(pPrimitive->GetEnum()); - } - break; - case FDE_CSSPROPERTY_BorderTopStyle: - if (eType == FDE_CSSPRIMITIVETYPE_Enum) { - FDE_CSSNONINHERITS.m_eBDRTopStyle = - ToBorderStyle(pPrimitive->GetEnum()); - } - break; - case FDE_CSSPROPERTY_BorderRightStyle: - if (eType == FDE_CSSPRIMITIVETYPE_Enum) { - FDE_CSSNONINHERITS.m_eBDRRightStyle = - ToBorderStyle(pPrimitive->GetEnum()); - } - break; - case FDE_CSSPROPERTY_BorderBottomStyle: - if (eType == FDE_CSSPRIMITIVETYPE_Enum) { - FDE_CSSNONINHERITS.m_eBDRBottomStyle = - ToBorderStyle(pPrimitive->GetEnum()); - } - break; - case FDE_CSSPROPERTY_BorderLeftColor: - if (eType == FDE_CSSPRIMITIVETYPE_RGB) { - FDE_CSSNONINHERITS.m_dwBDRLeftColor = pPrimitive->GetRGBColor(); - } - break; - case FDE_CSSPROPERTY_BorderTopColor: - if (eType == FDE_CSSPRIMITIVETYPE_RGB) { - FDE_CSSNONINHERITS.m_dwBDRTopColor = pPrimitive->GetRGBColor(); - } - break; - case FDE_CSSPROPERTY_BorderRightColor: - if (eType == FDE_CSSPRIMITIVETYPE_RGB) { - FDE_CSSNONINHERITS.m_dwBDRRightColor = pPrimitive->GetRGBColor(); - } - break; - case FDE_CSSPROPERTY_BorderBottomColor: - if (eType == FDE_CSSPRIMITIVETYPE_RGB) { - FDE_CSSNONINHERITS.m_dwBDRBottomColor = pPrimitive->GetRGBColor(); - } - break; - case FDE_CSSPROPERTY_ListStyleType: - if (eType == FDE_CSSPRIMITIVETYPE_Enum) { - FDE_CSSNONINHERITS.m_eListStyleType = - ToListStyleType(pPrimitive->GetEnum()); - } - break; - case FDE_CSSPROPERTY_ListStylePosition: - if (eType == FDE_CSSPRIMITIVETYPE_Enum) { - FDE_CSSNONINHERITS.m_eListStylePosition = - ToListStylePosition(pPrimitive->GetEnum()); - } - break; - case FDE_CSSPROPERTY_BackgroundColor: - if (eType == FDE_CSSPRIMITIVETYPE_RGB) { - FDE_CSSNONINHERITS.m_dwBKGColor = pPrimitive->GetRGBColor(); - } else if (eType == FDE_CSSPRIMITIVETYPE_Enum) { - FDE_CSSNONINHERITS.m_dwBKGColor = 0; - } - break; - case FDE_CSSPROPERTY_Visibility: - if (eType == FDE_CSSPRIMITIVETYPE_Enum) { - FDE_CSSINHERITS.m_eVisibility = ToVisibility(pPrimitive->GetEnum()); - } - break; - case FDE_CSSPROPERTY_Width: - SetLengthWithPercent(FDE_CSSNONINHERITS.m_BoxSize.cx, eType, pPrimitive, - FDE_CSSFONTSIZE); - break; - case FDE_CSSPROPERTY_Height: - SetLengthWithPercent(FDE_CSSNONINHERITS.m_BoxSize.cy, eType, pPrimitive, - FDE_CSSFONTSIZE); - break; - case FDE_CSSPROPERTY_MinWidth: - SetLengthWithPercent(FDE_CSSNONINHERITS.m_MinBoxSize.cx, eType, - pPrimitive, FDE_CSSFONTSIZE); - break; - case FDE_CSSPROPERTY_MinHeight: - SetLengthWithPercent(FDE_CSSNONINHERITS.m_MinBoxSize.cy, eType, - pPrimitive, FDE_CSSFONTSIZE); - break; - case FDE_CSSPROPERTY_MaxWidth: - SetLengthWithPercent(FDE_CSSNONINHERITS.m_MaxBoxSize.cx, eType, - pPrimitive, FDE_CSSFONTSIZE); - break; - case FDE_CSSPROPERTY_MaxHeight: - SetLengthWithPercent(FDE_CSSNONINHERITS.m_MaxBoxSize.cy, eType, - pPrimitive, FDE_CSSFONTSIZE); - break; - case FDE_CSSPROPERTY_VerticalAlign: - if (eType == FDE_CSSPRIMITIVETYPE_Enum) { - FDE_CSSNONINHERITS.m_eVerticalAlign = - ToVerticalAlign(pPrimitive->GetEnum()); - } else if (eType >= FDE_CSSPRIMITIVETYPE_Number && - eType <= FDE_CSSPRIMITIVETYPE_PC) { - FDE_CSSNONINHERITS.m_eVerticalAlign = FDE_CSSVERTICALALIGN_Number; - FDE_CSSNONINHERITS.m_fVerticalAlign = - ApplyNumber(eType, pPrimitive->GetFloat(), FDE_CSSFONTSIZE); - } - break; - case FDE_CSSPROPERTY_WhiteSpace: - if (eType == FDE_CSSPRIMITIVETYPE_Enum) { - FDE_CSSINHERITS.m_eWhiteSpace = ToWhiteSpace(pPrimitive->GetEnum()); - } - break; - case FDE_CSSPROPERTY_TextTransform: - if (eType == FDE_CSSPRIMITIVETYPE_Enum) { - FDE_CSSINHERITS.m_eTextTransform = - ToTextTransform(pPrimitive->GetEnum()); - } - break; - case FDE_CSSPROPERTY_FontVariant: - if (eType == FDE_CSSPRIMITIVETYPE_Enum) { - FDE_CSSINHERITS.m_eFontVariant = ToFontVariant(pPrimitive->GetEnum()); - } - break; - case FDE_CSSPROPERTY_LetterSpacing: - if (eType == FDE_CSSPRIMITIVETYPE_Percent) { - break; - } else if (eType == FDE_CSSPRIMITIVETYPE_Enum) { - FDE_CSSINHERITS.m_LetterSpacing.Set(FDE_CSSLENGTHUNIT_Normal); - } else if (eType >= FDE_CSSPRIMITIVETYPE_Number && - eType <= FDE_CSSPRIMITIVETYPE_PC) { - SetLengthWithPercent(FDE_CSSINHERITS.m_LetterSpacing, eType, - pPrimitive, FDE_CSSFONTSIZE); - } - break; - case FDE_CSSPROPERTY_WordSpacing: - if (eType == FDE_CSSPRIMITIVETYPE_Percent) { - break; - } else if (eType == FDE_CSSPRIMITIVETYPE_Enum) { - FDE_CSSINHERITS.m_WordSpacing.Set(FDE_CSSLENGTHUNIT_Normal); - } else if (eType >= FDE_CSSPRIMITIVETYPE_Number && - eType <= FDE_CSSPRIMITIVETYPE_PC) { - SetLengthWithPercent(FDE_CSSINHERITS.m_WordSpacing, eType, pPrimitive, - FDE_CSSFONTSIZE); - } - break; - case FDE_CSSPROPERTY_Float: - if (eType == FDE_CSSPRIMITIVETYPE_Enum) { - FDE_CSSNONINHERITS.m_eFloat = ToFloat(pPrimitive->GetEnum()); - } - break; - case FDE_CSSPROPERTY_Clear: - if (eType == FDE_CSSPRIMITIVETYPE_Enum) { - FDE_CSSNONINHERITS.m_eClear = ToClear(pPrimitive->GetEnum()); - } - break; - case FDE_CSSPROPERTY_WritingMode: - if (eType == FDE_CSSPRIMITIVETYPE_Enum) { - FDE_CSSINHERITS.m_eWritingMode = ToWritingMode(pPrimitive->GetEnum()); - } - break; - case FDE_CSSPROPERTY_WordBreak: - if (eType == FDE_CSSPRIMITIVETYPE_Enum) { - FDE_CSSINHERITS.m_eWordBreak = ToWordBreak(pPrimitive->GetEnum()); - } - break; - case FDE_CSSPROPERTY_Widows: - if (eType == FDE_CSSPRIMITIVETYPE_Number) { - FDE_CSSINHERITS.m_iWidows = (int32_t)pPrimitive->GetFloat(); - } - break; - case FDE_CSSPROPERTY_Orphans: - if (eType == FDE_CSSPRIMITIVETYPE_Number) { - FDE_CSSINHERITS.m_iOrphans = (int32_t)pPrimitive->GetFloat(); - } - break; - case FDE_CSSPROPERTY_TextEmphasisColor: - if (eType == FDE_CSSPRIMITIVETYPE_Enum) { - switch (pPrimitive->GetEnum()) { - case FDE_CSSPROPERTYVALUE_Transparent: - FDE_CSSINHERITS.m_dwTextEmphasisColor = 0; - FDE_CSSINHERITS.m_bTextEmphasisColorCurrent = FALSE; - break; - case FDE_CSSPROPERTYVALUE_Currentcolor: - FDE_CSSINHERITS.m_bTextEmphasisColorCurrent = TRUE; - break; - default: - break; - } - } else if (eType == FDE_CSSPRIMITIVETYPE_RGB) { - FDE_CSSINHERITS.m_dwTextEmphasisColor = pPrimitive->GetRGBColor(); - FDE_CSSINHERITS.m_bTextEmphasisColorCurrent = FALSE; - } - break; - case FDE_CSSPROPERTY_PageBreakBefore: - if (eType == FDE_CSSPRIMITIVETYPE_Enum) { - FDE_CSSNONINHERITS.m_ePageBreakBefore = - ToPageBreak(pPrimitive->GetEnum()); - } - break; - case FDE_CSSPROPERTY_PageBreakAfter: - if (eType == FDE_CSSPRIMITIVETYPE_Enum) { - FDE_CSSNONINHERITS.m_ePageBreakAfter = - ToPageBreak(pPrimitive->GetEnum()); - } - break; - case FDE_CSSPROPERTY_PageBreakInside: - if (eType == FDE_CSSPRIMITIVETYPE_Enum) { - FDE_CSSNONINHERITS.m_ePageBreakInside = - ToPageBreak(pPrimitive->GetEnum()); - } - break; - case FDE_CSSPROPERTY_OverflowX: - if (eType == FDE_CSSPRIMITIVETYPE_Enum) { - FDE_CSSNONINHERITS.m_eOverflowX = ToOverflow(pPrimitive->GetEnum()); - } - break; - case FDE_CSSPROPERTY_OverflowY: - if (eType == FDE_CSSPRIMITIVETYPE_Enum) { - FDE_CSSNONINHERITS.m_eOverflowY = ToOverflow(pPrimitive->GetEnum()); - } - break; - case FDE_CSSPROPERTY_LineBreak: - if (eType == FDE_CSSPRIMITIVETYPE_Enum) { - FDE_CSSINHERITS.m_eLineBreak = ToLineBreak(pPrimitive->GetEnum()); - } - break; - case FDE_CSSPROPERTY_ColumnCount: - if (eType == FDE_CSSPRIMITIVETYPE_Enum) { - FDE_CSSNONINHERITS.m_ColumnCount.Set(FDE_CSSLENGTHUNIT_Auto); - } else if (eType == FDE_CSSPRIMITIVETYPE_Number) { - FDE_CSSNONINHERITS.m_ColumnCount.Set(FDE_CSSLENGTHUNIT_Point, - pPrimitive->GetFloat()); - } - break; - case FDE_CSSPROPERTY_ColumnGap: - SetLengthWithPercent(FDE_CSSNONINHERITS.m_ColumnGap, eType, pPrimitive, - FDE_CSSFONTSIZE); - break; - case FDE_CSSPROPERTY_ColumnRuleColor: - if (eType == FDE_CSSPRIMITIVETYPE_RGB) { - FDE_CSSNONINHERITS.m_dwColumnRuleColor = pPrimitive->GetRGBColor(); - FDE_CSSNONINHERITS.m_bColumnRuleColorSame = FALSE; - } - break; - case FDE_CSSPROPERTY_ColumnRuleStyle: - if (eType == FDE_CSSPRIMITIVETYPE_Enum) { - FDE_CSSNONINHERITS.m_eColumnRuleStyle = - ToBorderStyle(pPrimitive->GetEnum()); - } - break; - case FDE_CSSPROPERTY_ColumnRuleWidth: - SetLengthWithPercent(FDE_CSSNONINHERITS.m_ColumnRuleWidth, eType, - pPrimitive, FDE_CSSFONTSIZE); - break; - case FDE_CSSPROPERTY_ColumnWidth: - SetLengthWithPercent(FDE_CSSNONINHERITS.m_ColumnWidth, eType, - pPrimitive, FDE_CSSFONTSIZE); - break; - case FDE_CSSPROPERTY_BackgroundImage: - if (eType == FDE_CSSPRIMITIVETYPE_Enum) { - FDE_CSSNONINHERITS.m_pszBKGImage = NULL; - } else if (eType == FDE_CSSPRIMITIVETYPE_URI) { - int32_t iLength; - FDE_CSSNONINHERITS.m_pszBKGImage = pPrimitive->GetString(iLength); - } - break; - case FDE_CSSPROPERTY_Position: - if (eType == FDE_CSSPRIMITIVETYPE_Enum) { - FDE_CSSNONINHERITS.m_ePosition = ToPosition(pPrimitive->GetEnum()); - } - break; - case FDE_CSSPROPERTY_Top: - SetLengthWithPercent(FDE_CSSNONINHERITS.m_Top, eType, pPrimitive, - FDE_CSSFONTSIZE); - break; - case FDE_CSSPROPERTY_Bottom: - SetLengthWithPercent(FDE_CSSNONINHERITS.m_Bottom, eType, pPrimitive, - FDE_CSSFONTSIZE); - break; - case FDE_CSSPROPERTY_Left: - SetLengthWithPercent(FDE_CSSNONINHERITS.m_Left, eType, pPrimitive, - FDE_CSSFONTSIZE); - break; - case FDE_CSSPROPERTY_Right: - SetLengthWithPercent(FDE_CSSNONINHERITS.m_Right, eType, pPrimitive, - FDE_CSSFONTSIZE); - break; - case FDE_CSSPROPERTY_ListStyleImage: - if (eType == FDE_CSSPRIMITIVETYPE_Enum) { - FDE_CSSINHERITS.m_pszListStyleImage = NULL; - } else if (eType == FDE_CSSPRIMITIVETYPE_URI) { - int32_t iLength; - FDE_CSSINHERITS.m_pszListStyleImage = pPrimitive->GetString(iLength); - } - break; - case FDE_CSSPROPERTY_CaptionSide: - if (eType == FDE_CSSPRIMITIVETYPE_Enum) { - FDE_CSSINHERITS.m_eCaptionSide = ToCaptionSide(pPrimitive->GetEnum()); - } - break; - case FDE_CSSPROPERTY_BackgroundRepeat: - if (eType == FDE_CSSPRIMITIVETYPE_Enum) { - FDE_CSSNONINHERITS.m_eBKGRepeat = ToBKGRepeat(pPrimitive->GetEnum()); - } - break; - case FDE_CSSPROPERTY_BackgroundAttachment: - if (eType == FDE_CSSPRIMITIVETYPE_Enum) { - FDE_CSSNONINHERITS.m_eBKGAttachment = - ToBKGAttachment(pPrimitive->GetEnum()); - } - break; - case FDE_CSSPROPERTY_RubyAlign: - if (eType == FDE_CSSPRIMITIVETYPE_Enum) { - FDE_CSSINHERITS.m_eRubyAlign = ToRubyAlign(pPrimitive->GetEnum()); - } - break; - case FDE_CSSPROPERTY_RubyOverhang: - if (eType == FDE_CSSPRIMITIVETYPE_Enum) { - FDE_CSSINHERITS.m_eRubyOverhang = - ToRubyOverhang(pPrimitive->GetEnum()); - } - break; - case FDE_CSSPROPERTY_RubyPosition: - if (eType == FDE_CSSPRIMITIVETYPE_Enum) { - FDE_CSSINHERITS.m_eRubyPosition = - ToRubyPosition(pPrimitive->GetEnum()); - } - break; - case FDE_CSSPROPERTY_RubySpan: - FDE_CSSNONINHERITS.m_pRubySpan = pPrimitive; - break; - default: - break; - } - } else if (pValue->GetType() == FDE_CSSVALUETYPE_List) { - IFDE_CSSValueList* pList = (IFDE_CSSValueList*)pValue; - int32_t iCount = pList->CountValues(); - if (iCount > 0) { - switch (eProperty) { - case FDE_CSSPROPERTY_FontFamily: - FDE_CSSINHERITS.m_pFontFamily = pList; - break; - case FDE_CSSPROPERTY_TextDecoration: - FDE_CSSNONINHERITS.m_dwTextDecoration = ToTextDecoration(pList); - break; - case FDE_CSSPROPERTY_CounterIncrement: { - if (FDE_CSSNONINHERITS.m_pCounterStyle == NULL) { - FDE_CSSNONINHERITS.m_pCounterStyle = new CFDE_CSSCounterStyle; - } - FDE_CSSNONINHERITS.m_pCounterStyle->SetCounterIncrementList(pList); - } break; - case FDE_CSSPROPERTY_CounterReset: { - if (FDE_CSSNONINHERITS.m_pCounterStyle == NULL) { - FDE_CSSNONINHERITS.m_pCounterStyle = new CFDE_CSSCounterStyle; - } - FDE_CSSNONINHERITS.m_pCounterStyle->SetCounterResetList(pList); - } break; - case FDE_CSSPROPERTY_Content: - FDE_CSSNONINHERITS.m_pContentList = pList; - break; - case FDE_CSSPROPERTY_Quotes: - FDE_CSSINHERITS.m_pQuotes = pList; - break; - case FDE_CSSPROPERTY_TextCombine: { - for (int32_t i = 0; i < pList->CountValues(); i++) { - IFDE_CSSPrimitiveValue* pVal = - (IFDE_CSSPrimitiveValue*)pList->GetValue(i); - switch (pVal->GetPrimitiveType()) { - case FDE_CSSPRIMITIVETYPE_Enum: { - switch (pVal->GetEnum()) { - case FDE_CSSPROPERTYVALUE_None: { - FDE_CSSNONINHERITS.m_eTextCombine = FDE_CSSTEXTCOMBINE_None; - FDE_CSSNONINHERITS.m_bHasTextCombineNumber = FALSE; - } break; - case FDE_CSSPROPERTYVALUE_Horizontal: { - FDE_CSSNONINHERITS.m_eTextCombine = - FDE_CSSTEXTCOMBINE_Horizontal; - FDE_CSSNONINHERITS.m_bHasTextCombineNumber = FALSE; - } break; - default: - break; - } - } break; - case FDE_CSSPRIMITIVETYPE_Number: - FDE_CSSNONINHERITS.m_fTextCombineNumber = pVal->GetFloat(); - break; - default: - break; - } - } - } break; - case FDE_CSSPROPERTY_TextEmphasisStyle: { - FDE_CSSTEXTEMPHASISFILL eFill; - FDE_CSSTEXTEMPHASISMARK eMark; - for (int32_t i = 0; i < pList->CountValues(); i++) { - IFDE_CSSPrimitiveValue* pVal = - (IFDE_CSSPrimitiveValue*)pList->GetValue(i); - switch (pVal->GetPrimitiveType()) { - case FDE_CSSPRIMITIVETYPE_Enum: { - if (ToTextEmphasisFill(pVal->GetEnum(), eFill)) { - FDE_CSSINHERITS.m_eTextEmphasisFill = eFill; - continue; - } else if (ToTextEmphasisMark(pVal->GetEnum(), eMark)) { - FDE_CSSINHERITS.m_eTextEmphasisMark = eMark; - } - } break; - case FDE_CSSPRIMITIVETYPE_String: { - FDE_CSSINHERITS.m_eTextEmphasisMark = - FDE_CSSTEXTEMPHASISMARK_Custom; - int32_t iLen; - FDE_CSSINHERITS.m_pszTextEmphasisCustomMark = - pVal->GetString(iLen); - } break; - default: - break; - } - } - } break; - default: - break; - } - } - } else { - FXSYS_assert(FALSE); - } -} -FX_FLOAT CFDE_CSSStyleSelector::ApplyNumber(FDE_CSSPRIMITIVETYPE eUnit, - FX_FLOAT fValue, - FX_FLOAT fPercentBase) { - switch (eUnit) { - case FDE_CSSPRIMITIVETYPE_PX: - case FDE_CSSPRIMITIVETYPE_Number: - return fValue * 72 / 96; - case FDE_CSSPRIMITIVETYPE_PT: - return fValue; - case FDE_CSSPRIMITIVETYPE_EMS: - case FDE_CSSPRIMITIVETYPE_EXS: - return fValue * fPercentBase; - case FDE_CSSPRIMITIVETYPE_Percent: - return fValue * fPercentBase / 100.0f; - case FDE_CSSPRIMITIVETYPE_CM: - return fValue * 28.3464f; - case FDE_CSSPRIMITIVETYPE_MM: - return fValue * 2.8346f; - case FDE_CSSPRIMITIVETYPE_IN: - return fValue * 72.0f; - case FDE_CSSPRIMITIVETYPE_PC: - return fValue / 12.0f; - default: - return fValue; - } -} -FDE_CSSRUBYSPAN CFDE_CSSStyleSelector::ToRubySpan(FDE_CSSPROPERTYVALUE eValue) { - switch (eValue) { - case FDE_CSSPROPERTYVALUE_None: - default: - return FDE_CSSRUBYSPAN_None; - } -} -FDE_CSSRUBYPOSITION CFDE_CSSStyleSelector::ToRubyPosition( - FDE_CSSPROPERTYVALUE eValue) { - switch (eValue) { - case FDE_CSSPROPERTYVALUE_Before: - return FDE_CSSRUBYPOSITION_Before; - case FDE_CSSPROPERTYVALUE_After: - return FDE_CSSRUBYPOSITION_After; - case FDE_CSSPROPERTYVALUE_Right: - return FDE_CSSRUBYPOSITION_Right; - case FDE_CSSPROPERTYVALUE_Inline: - return FDE_CSSRUBYPOSITION_Inline; - default: - return FDE_CSSRUBYPOSITION_Before; - } -} -FDE_CSSRUBYOVERHANG CFDE_CSSStyleSelector::ToRubyOverhang( - FDE_CSSPROPERTYVALUE eValue) { - switch (eValue) { - case FDE_CSSPROPERTYVALUE_Auto: - return FDE_CSSRUBYOVERHANG_Auto; - case FDE_CSSPROPERTYVALUE_Start: - return FDE_CSSRUBYOVERHANG_Start; - case FDE_CSSPROPERTYVALUE_End: - return FDE_CSSRUBYOVERHANG_End; - case FDE_CSSPROPERTYVALUE_None: - default: - return FDE_CSSRUBYOVERHANG_None; - } -} -FDE_CSSRUBYALIGN CFDE_CSSStyleSelector::ToRubyAlign( - FDE_CSSPROPERTYVALUE eValue) { - switch (eValue) { - case FDE_CSSPROPERTYVALUE_Auto: - return FDE_CSSRUBYALIGN_Auto; - case FDE_CSSPROPERTYVALUE_Start: - return FDE_CSSRUBYALIGN_Start; - case FDE_CSSPROPERTYVALUE_Left: - return FDE_CSSRUBYALIGN_End; - case FDE_CSSPROPERTYVALUE_Center: - return FDE_CSSRUBYALIGN_Center; - case FDE_CSSPROPERTYVALUE_End: - return FDE_CSSRUBYALIGN_End; - case FDE_CSSPROPERTYVALUE_Right: - return FDE_CSSRUBYALIGN_Right; - case FDE_CSSPROPERTYVALUE_DistributeLetter: - return FDE_CSSRUBYALIGN_DistributeLetter; - case FDE_CSSPROPERTYVALUE_DistributeSpace: - return FDE_CSSRUBYALIGN_DistributeSpace; - case FDE_CSSPROPERTYVALUE_LineEdge: - return FDE_CSSRUBYALIGN_LineEdge; - default: - return FDE_CSSRUBYALIGN_Auto; - } -} -FX_BOOL CFDE_CSSStyleSelector::ToTextEmphasisMark( - FDE_CSSPROPERTYVALUE eValue, - FDE_CSSTEXTEMPHASISMARK& eMark) { - switch (eValue) { - case FDE_CSSPROPERTYVALUE_None: - eMark = FDE_CSSTEXTEMPHASISMARK_None; - return TRUE; - case FDE_CSSPROPERTYVALUE_Dot: - eMark = FDE_CSSTEXTEMPHASISMARK_Dot; - return TRUE; - case FDE_CSSPROPERTYVALUE_Circle: - eMark = FDE_CSSTEXTEMPHASISMARK_Circle; - return TRUE; - case FDE_CSSPROPERTYVALUE_DoubleCircle: - eMark = FDE_CSSTEXTEMPHASISMARK_DoubleCircle; - return TRUE; - case FDE_CSSPROPERTYVALUE_Triangle: - eMark = FDE_CSSTEXTEMPHASISMARK_Triangle; - return TRUE; - case FDE_CSSPROPERTYVALUE_Sesame: - eMark = FDE_CSSTEXTEMPHASISMARK_Sesame; - return TRUE; - default: - return FALSE; - } -} -FX_BOOL CFDE_CSSStyleSelector::ToTextEmphasisFill( - FDE_CSSPROPERTYVALUE eValue, - FDE_CSSTEXTEMPHASISFILL& eFill) { - switch (eValue) { - case FDE_CSSPROPERTYVALUE_Filled: - eFill = FDE_CSSTEXTEMPHASISFILL_Filled; - return TRUE; - case FDE_CSSPROPERTYVALUE_Open: - eFill = FDE_CSSTEXTEMPHASISFILL_Open; - return TRUE; - default: - return FALSE; - } -} -FDE_CSSBKGATTACHMENT CFDE_CSSStyleSelector::ToBKGAttachment( - FDE_CSSPROPERTYVALUE eValue) { - switch (eValue) { - case FDE_CSSPROPERTYVALUE_Fixed: - return FDE_CSSBKGATTACHMENT_Fixed; - case FDE_CSSPROPERTYVALUE_Scroll: - return FDE_CSSBKGATTACHMENT_Scroll; - default: - return FDE_CSSBKGATTACHMENT_Fixed; - } -} -FDE_CSSCAPTIONSIDE CFDE_CSSStyleSelector::ToCaptionSide( - FDE_CSSPROPERTYVALUE eValue) { - switch (eValue) { - case FDE_CSSPROPERTYVALUE_Top: - return FDE_CSSCAPTIONSIDE_Top; - case FDE_CSSPROPERTYVALUE_Bottom: - return FDE_CSSCAPTIONSIDE_Bottom; - case FDE_CSSPROPERTYVALUE_Left: - return FDE_CSSCAPTIONSIDE_Left; - case FDE_CSSPROPERTYVALUE_Right: - return FDE_CSSCAPTIONSIDE_Right; - case FDE_CSSPROPERTYVALUE_Before: - return FDE_CSSCAPTIONSIDE_Before; - case FDE_CSSPROPERTYVALUE_After: - return FDE_CSSCAPTIONSIDE_After; - default: - return FDE_CSSCAPTIONSIDE_Top; - } -} -FDE_CSSPOSITION CFDE_CSSStyleSelector::ToPosition(FDE_CSSPROPERTYVALUE eValue) { - switch (eValue) { - case FDE_CSSPROPERTYVALUE_Static: - return FDE_CSSPOSITION_Static; - case FDE_CSSPROPERTYVALUE_Relative: - return FDE_CSSPOSITION_Relative; - case FDE_CSSPROPERTYVALUE_Fixed: - return FDE_CSSPOSITION_Fixed; - case FDE_CSSPROPERTYVALUE_Absolute: - return FDE_CSSPOSITION_Absolute; - default: - return FDE_CSSPOSITION_Static; - } -} -FDE_CSSCURSOR CFDE_CSSStyleSelector::ToCursor(FDE_CSSPROPERTYVALUE eValue) { - switch (eValue) { - case FDE_CSSPROPERTYVALUE_Auto: - return FDE_CSSCURSOR_Auto; - case FDE_CSSPROPERTYVALUE_Crosshair: - return FDE_CSSCURSOR_Crosshair; - case FDE_CSSPROPERTYVALUE_Default: - return FDE_CSSCURSOR_Default; - case FDE_CSSPROPERTYVALUE_Pointer: - return FDE_CSSCURSOR_Pointer; - case FDE_CSSPROPERTYVALUE_Move: - return FDE_CSSCURSOR_Move; - case FDE_CSSPROPERTYVALUE_EResize: - return FDE_CSSCURSOR_EResize; - case FDE_CSSPROPERTYVALUE_NeResize: - return FDE_CSSCURSOR_NeResize; - case FDE_CSSPROPERTYVALUE_NwResize: - return FDE_CSSCURSOR_NwResize; - case FDE_CSSPROPERTYVALUE_NResize: - return FDE_CSSCURSOR_NResize; - case FDE_CSSPROPERTYVALUE_SeResize: - return FDE_CSSCURSOR_SeResize; - case FDE_CSSPROPERTYVALUE_SwResize: - return FDE_CSSCURSOR_SwResize; - default: - return FDE_CSSCURSOR_Auto; - } -} -FDE_CSSBKGREPEAT CFDE_CSSStyleSelector::ToBKGRepeat( - FDE_CSSPROPERTYVALUE eValue) { - switch (eValue) { - case FDE_CSSPROPERTYVALUE_Repeat: - return FDE_CSSBKGREPEAT_Repeat; - case FDE_CSSPROPERTYVALUE_RepeatX: - return FDE_CSSBKGREPEAT_RepeatX; - case FDE_CSSPROPERTYVALUE_RepeatY: - return FDE_CSSBKGREPEAT_RepeatY; - case FDE_CSSPROPERTYVALUE_NoRepeat: - return FDE_CSSBKGREPEAT_NoRepeat; - default: - return FDE_CSSBKGREPEAT_Repeat; - } -} -FDE_CSSTEXTCOMBINE CFDE_CSSStyleSelector::ToTextCombine( - FDE_CSSPROPERTYVALUE eValue) { - switch (eValue) { - case FDE_CSSPROPERTYVALUE_Horizontal: - return FDE_CSSTEXTCOMBINE_Horizontal; - case FDE_CSSPROPERTYVALUE_None: - default: - return FDE_CSSTEXTCOMBINE_None; - } -} -FDE_CSSLINEBREAK CFDE_CSSStyleSelector::ToLineBreak( - FDE_CSSPROPERTYVALUE eValue) { - switch (eValue) { - case FDE_CSSPROPERTYVALUE_Auto: - return FDE_CSSLINEBREAK_Auto; - case FDE_CSSPROPERTYVALUE_Loose: - return FDE_CSSLINEBREAK_Loose; - case FDE_CSSPROPERTYVALUE_Normal: - return FDE_CSSLINEBREAK_Normal; - case FDE_CSSPROPERTYVALUE_Strict: - return FDE_CSSLINEBREAK_Strict; - default: - return FDE_CSSLINEBREAK_Auto; - } -} -FDE_CSSOVERFLOW CFDE_CSSStyleSelector::ToOverflow(FDE_CSSPROPERTYVALUE eValue) { - switch (eValue) { - case FDE_CSSPROPERTYVALUE_Visible: - return FDE_CSSOVERFLOW_Visible; - case FDE_CSSPROPERTYVALUE_Hidden: - return FDE_CSSOVERFLOW_Hidden; - case FDE_CSSPROPERTYVALUE_Scroll: - return FDE_CSSOVERFLOW_Scroll; - case FDE_CSSPROPERTYVALUE_Auto: - return FDE_CSSOVERFLOW_Auto; - case FDE_CSSPROPERTYVALUE_NoDisplay: - return FDE_CSSOVERFLOW_NoDisplay; - case FDE_CSSPROPERTYVALUE_NoContent: - return FDE_CSSOVERFLOW_NoContent; - default: - return FDE_CSSOVERFLOW_Visible; - } -} -FDE_CSSWRITINGMODE CFDE_CSSStyleSelector::ToWritingMode( - FDE_CSSPROPERTYVALUE eValue) { - switch (eValue) { - case FDE_CSSPROPERTYVALUE_HorizontalTb: - return FDE_CSSWRITINGMODE_HorizontalTb; - case FDE_CSSPROPERTYVALUE_VerticalRl: - return FDE_CSSWRITINGMODE_VerticalRl; - case FDE_CSSPROPERTYVALUE_VerticalLr: - return FDE_CSSWRITINGMODE_VerticalLr; - default: - return FDE_CSSWRITINGMODE_HorizontalTb; - } -} -FDE_CSSWORDBREAK CFDE_CSSStyleSelector::ToWordBreak( - FDE_CSSPROPERTYVALUE eValue) { - switch (eValue) { - case FDE_CSSPROPERTYVALUE_Normal: - return FDE_CSSWORDBREAK_Normal; - case FDE_CSSPROPERTYVALUE_KeepAll: - return FDE_CSSWORDBREAK_KeepAll; - case FDE_CSSPROPERTYVALUE_BreakAll: - return FDE_CSSWORDBREAK_BreakAll; - case FDE_CSSPROPERTYVALUE_KeepWords: - return FDE_CSSWORDBREAK_KeepWords; - default: - return FDE_CSSWORDBREAK_Normal; - } -} -FDE_CSSFLOAT CFDE_CSSStyleSelector::ToFloat(FDE_CSSPROPERTYVALUE eValue) { - switch (eValue) { - case FDE_CSSPROPERTYVALUE_Left: - return FDE_CSSFLOAT_Left; - case FDE_CSSPROPERTYVALUE_Right: - return FDE_CSSFLOAT_Right; - case FDE_CSSPROPERTYVALUE_None: - return FDE_CSSFLOAT_None; - default: - return FDE_CSSFLOAT_None; - } -} -FDE_CSSCLEAR CFDE_CSSStyleSelector::ToClear(FDE_CSSPROPERTYVALUE eValue) { - switch (eValue) { - case FDE_CSSPROPERTYVALUE_None: - return FDE_CSSCLEAR_None; - case FDE_CSSPROPERTYVALUE_Left: - return FDE_CSSCLEAR_Left; - case FDE_CSSPROPERTYVALUE_Right: - return FDE_CSSCLEAR_Right; - case FDE_CSSPROPERTYVALUE_Both: - return FDE_CSSCLEAR_Both; - default: - return FDE_CSSCLEAR_None; - } -} -FDE_CSSPAGEBREAK CFDE_CSSStyleSelector::ToPageBreak( - FDE_CSSPROPERTYVALUE eValue) { - switch (eValue) { - case FDE_CSSPROPERTYVALUE_Avoid: - return FDE_CSSPAGEBREAK_Avoid; - case FDE_CSSPROPERTYVALUE_Auto: - return FDE_CSSPAGEBREAK_Auto; - case FDE_CSSPROPERTYVALUE_Always: - return FDE_CSSPAGEBREAK_Always; - case FDE_CSSPROPERTYVALUE_Left: - return FDE_CSSPAGEBREAK_Left; - case FDE_CSSPROPERTYVALUE_Right: - return FDE_CSSPAGEBREAK_Right; - default: - return FDE_CSSPAGEBREAK_Auto; - } -} -FDE_CSSDISPLAY CFDE_CSSStyleSelector::ToDisplay(FDE_CSSPROPERTYVALUE eValue) { - switch (eValue) { - case FDE_CSSPROPERTYVALUE_Inline: - return FDE_CSSDISPLAY_Inline; - case FDE_CSSPROPERTYVALUE_Block: - return FDE_CSSDISPLAY_Block; - case FDE_CSSPROPERTYVALUE_None: - return FDE_CSSDISPLAY_None; - case FDE_CSSPROPERTYVALUE_ListItem: - return FDE_CSSDISPLAY_ListItem; - case FDE_CSSPROPERTYVALUE_TableCell: - return FDE_CSSDISPLAY_TableCell; - case FDE_CSSPROPERTYVALUE_TableRow: - return FDE_CSSDISPLAY_TableRow; - case FDE_CSSPROPERTYVALUE_Table: - return FDE_CSSDISPLAY_Table; - case FDE_CSSPROPERTYVALUE_TableCaption: - return FDE_CSSDISPLAY_TableCaption; - case FDE_CSSPROPERTYVALUE_TableRowGroup: - return FDE_CSSDISPLAY_TableRowGroup; - case FDE_CSSPROPERTYVALUE_TableHeaderGroup: - return FDE_CSSDISPLAY_TableHeaderGroup; - case FDE_CSSPROPERTYVALUE_TableFooterGroup: - return FDE_CSSDISPLAY_TableFooterGroup; - case FDE_CSSPROPERTYVALUE_TableColumnGroup: - return FDE_CSSDISPLAY_TableColumnGroup; - case FDE_CSSPROPERTYVALUE_TableColumn: - return FDE_CSSDISPLAY_TableColumn; - case FDE_CSSPROPERTYVALUE_InlineTable: - return FDE_CSSDISPLAY_InlineTable; - case FDE_CSSPROPERTYVALUE_InlineBlock: - return FDE_CSSDISPLAY_InlineBlock; - case FDE_CSSPROPERTYVALUE_RunIn: - return FDE_CSSDISPLAY_RunIn; - case FDE_CSSPROPERTYVALUE_Ruby: - return FDE_CSSDISPLAY_Ruby; - case FDE_CSSPROPERTYVALUE_RubyBase: - return FDE_CSSDISPLAY_RubyBase; - case FDE_CSSPROPERTYVALUE_RubyText: - return FDE_CSSDISPLAY_RubyText; - case FDE_CSSPROPERTYVALUE_RubyBaseGroup: - return FDE_CSSDISPLSY_RubyBaseGroup; - case FDE_CSSPROPERTYVALUE_RubyTextGroup: - return FDE_CSSDISPLAY_RubyTextGroup; - default: - return FDE_CSSDISPLAY_Inline; - } -} -FDE_CSSTEXTALIGN CFDE_CSSStyleSelector::ToTextAlign( - FDE_CSSPROPERTYVALUE eValue) { - switch (eValue) { - case FDE_CSSPROPERTYVALUE_Left: - return FDE_CSSTEXTALIGN_Left; - case FDE_CSSPROPERTYVALUE_Center: - return FDE_CSSTEXTALIGN_Center; - case FDE_CSSPROPERTYVALUE_Right: - return FDE_CSSTEXTALIGN_Right; - case FDE_CSSPROPERTYVALUE_Justify: - return FDE_CSSTEXTALIGN_Justify; - default: - return FDE_CSSTEXTALIGN_Left; - } -} -FX_WORD CFDE_CSSStyleSelector::ToFontWeight(FDE_CSSPROPERTYVALUE eValue) { - switch (eValue) { - case FDE_CSSPROPERTYVALUE_Normal: - return 400; - case FDE_CSSPROPERTYVALUE_Bold: - return 700; - case FDE_CSSPROPERTYVALUE_Bolder: - return 900; - case FDE_CSSPROPERTYVALUE_Lighter: - return 200; - default: - return 400; - } -} -FDE_CSSFONTSTYLE CFDE_CSSStyleSelector::ToFontStyle( - FDE_CSSPROPERTYVALUE eValue) { - switch (eValue) { - case FDE_CSSPROPERTYVALUE_Italic: - case FDE_CSSPROPERTYVALUE_Oblique: - return FDE_CSSFONTSTYLE_Italic; - default: - return FDE_CSSFONTSTYLE_Normal; - } -} -FDE_CSSBORDERSTYLE CFDE_CSSStyleSelector::ToBorderStyle( - FDE_CSSPROPERTYVALUE eValue) { - switch (eValue) { - case FDE_CSSPROPERTYVALUE_None: - return FDE_CSSBORDERSTYLE_None; - case FDE_CSSPROPERTYVALUE_Solid: - return FDE_CSSBORDERSTYLE_Solid; - case FDE_CSSPROPERTYVALUE_Hidden: - return FDE_CSSBORDERSTYLE_Hidden; - case FDE_CSSPROPERTYVALUE_Dotted: - return FDE_CSSBORDERSTYLE_Dotted; - case FDE_CSSPROPERTYVALUE_Dashed: - return FDE_CSSBORDERSTYLE_Dashed; - case FDE_CSSPROPERTYVALUE_Double: - return FDE_CSSBORDERSTYLE_Double; - case FDE_CSSPROPERTYVALUE_Groove: - return FDE_CSSBORDERSTYLE_Groove; - case FDE_CSSPROPERTYVALUE_Ridge: - return FDE_CSSBORDERSTYLE_Ridge; - case FDE_CSSPROPERTYVALUE_Inset: - return FDE_CSSBORDERSTYLE_Inset; - case FDE_CSSPROPERTYVALUE_Outset: - return FDE_CSSBORDERSTYLE_outset; - default: - return FDE_CSSBORDERSTYLE_None; - } -} -FX_BOOL CFDE_CSSStyleSelector::SetLengthWithPercent( - FDE_CSSLENGTH& width, - FDE_CSSPRIMITIVETYPE eType, - IFDE_CSSPrimitiveValue* pPrimitive, - FX_FLOAT fFontSize) { - if (eType == FDE_CSSPRIMITIVETYPE_Percent) { - width.Set(FDE_CSSLENGTHUNIT_Percent, pPrimitive->GetFloat() / 100.0f); - return width.NonZero(); - } else if (eType >= FDE_CSSPRIMITIVETYPE_Number && - eType <= FDE_CSSPRIMITIVETYPE_PC) { - FX_FLOAT fValue = ApplyNumber(eType, pPrimitive->GetFloat(), fFontSize); - width.Set(FDE_CSSLENGTHUNIT_Point, fValue); - return width.NonZero(); - } else if (eType == FDE_CSSPRIMITIVETYPE_Enum) { - switch (pPrimitive->GetEnum()) { - case FDE_CSSPROPERTYVALUE_Auto: - width.Set(FDE_CSSLENGTHUNIT_Auto); - return TRUE; - case FDE_CSSPROPERTYVALUE_None: - width.Set(FDE_CSSLENGTHUNIT_None); - return TRUE; - case FDE_CSSPROPERTYVALUE_Thin: - width.Set(FDE_CSSLENGTHUNIT_Point, 2); - return TRUE; - case FDE_CSSPROPERTYVALUE_Medium: - width.Set(FDE_CSSLENGTHUNIT_Point, 3); - return TRUE; - case FDE_CSSPROPERTYVALUE_Thick: - width.Set(FDE_CSSLENGTHUNIT_Point, 4); - return TRUE; - default: - return FALSE; - } - } - return FALSE; -} -FX_FLOAT CFDE_CSSStyleSelector::ToFontSize(FDE_CSSPROPERTYVALUE eValue, - FX_FLOAT fCurFontSize) { - switch (eValue) { - case FDE_CSSPROPERTYVALUE_XxSmall: - return m_fDefFontSize / 1.2f / 1.2f / 1.2f; - case FDE_CSSPROPERTYVALUE_XSmall: - return m_fDefFontSize / 1.2f / 1.2f; - case FDE_CSSPROPERTYVALUE_Small: - return m_fDefFontSize / 1.2f; - case FDE_CSSPROPERTYVALUE_Medium: - return m_fDefFontSize; - case FDE_CSSPROPERTYVALUE_Large: - return m_fDefFontSize * 1.2f; - case FDE_CSSPROPERTYVALUE_XLarge: - return m_fDefFontSize * 1.2f * 1.2f; - case FDE_CSSPROPERTYVALUE_XxLarge: - return m_fDefFontSize * 1.2f * 1.2f * 1.2f; - case FDE_CSSPROPERTYVALUE_Larger: - return fCurFontSize * 1.2f; - case FDE_CSSPROPERTYVALUE_Smaller: - return fCurFontSize / 1.2f; - default: - return fCurFontSize; - } -} -FDE_CSSVERTICALALIGN CFDE_CSSStyleSelector::ToVerticalAlign( - FDE_CSSPROPERTYVALUE eValue) { - switch (eValue) { - case FDE_CSSPROPERTYVALUE_Baseline: - return FDE_CSSVERTICALALIGN_Baseline; - case FDE_CSSPROPERTYVALUE_Middle: - return FDE_CSSVERTICALALIGN_Middle; - case FDE_CSSPROPERTYVALUE_Bottom: - return FDE_CSSVERTICALALIGN_Bottom; - case FDE_CSSPROPERTYVALUE_Super: - return FDE_CSSVERTICALALIGN_Super; - case FDE_CSSPROPERTYVALUE_Sub: - return FDE_CSSVERTICALALIGN_Sub; - case FDE_CSSPROPERTYVALUE_Top: - return FDE_CSSVERTICALALIGN_Top; - case FDE_CSSPROPERTYVALUE_TextTop: - return FDE_CSSVERTICALALIGN_TextTop; - case FDE_CSSPROPERTYVALUE_TextBottom: - return FDE_CSSVERTICALALIGN_TextBottom; - default: - return FDE_CSSVERTICALALIGN_Baseline; - } -} -FDE_CSSLISTSTYLETYPE CFDE_CSSStyleSelector::ToListStyleType( - FDE_CSSPROPERTYVALUE eValue) { - switch (eValue) { - case FDE_CSSPROPERTYVALUE_None: - return FDE_CSSLISTSTYLETYPE_None; - case FDE_CSSPROPERTYVALUE_Disc: - return FDE_CSSLISTSTYLETYPE_Disc; - case FDE_CSSPROPERTYVALUE_Circle: - return FDE_CSSLISTSTYLETYPE_Circle; - case FDE_CSSPROPERTYVALUE_Square: - return FDE_CSSLISTSTYLETYPE_Square; - case FDE_CSSPROPERTYVALUE_Decimal: - return FDE_CSSLISTSTYLETYPE_Decimal; - case FDE_CSSPROPERTYVALUE_DecimalLeadingZero: - return FDE_CSSLISTSTYLETYPE_DecimalLeadingZero; - case FDE_CSSPROPERTYVALUE_LowerRoman: - return FDE_CSSLISTSTYLETYPE_LowerRoman; - case FDE_CSSPROPERTYVALUE_UpperRoman: - return FDE_CSSLISTSTYLETYPE_UpperRoman; - case FDE_CSSPROPERTYVALUE_LowerGreek: - return FDE_CSSLISTSTYLETYPE_LowerGreek; - case FDE_CSSPROPERTYVALUE_LowerLatin: - return FDE_CSSLISTSTYLETYPE_LowerLatin; - case FDE_CSSPROPERTYVALUE_UpperLatin: - return FDE_CSSLISTSTYLETYPE_UpperLatin; - case FDE_CSSPROPERTYVALUE_Armenian: - return FDE_CSSLISTSTYLETYPE_Armenian; - case FDE_CSSPROPERTYVALUE_Georgian: - return FDE_CSSLISTSTYLETYPE_Georgian; - case FDE_CSSPROPERTYVALUE_LowerAlpha: - return FDE_CSSLISTSTYLETYPE_LowerAlpha; - case FDE_CSSPROPERTYVALUE_UpperAlpha: - return FDE_CSSLISTSTYLETYPE_UpperAlpha; - case FDE_CSSPROPERTYVALUE_CjkIdeographic: - return FDE_CSSLISTSTYLETYPE_CjkIdeographic; - case FDE_CSSPROPERTYVALUE_Hebrew: - return FDE_CSSLISTSTYLETYPE_Hebrew; - case FDE_CSSLISTSTYLETYPE_Hiragana: - return FDE_CSSLISTSTYLETYPE_Hiragana; - case FDE_CSSLISTSTYLETYPE_HiraganaIroha: - return FDE_CSSLISTSTYLETYPE_HiraganaIroha; - case FDE_CSSLISTSTYLETYPE_Katakana: - return FDE_CSSLISTSTYLETYPE_Katakana; - case FDE_CSSLISTSTYLETYPE_KatakanaIroha: - return FDE_CSSLISTSTYLETYPE_KatakanaIroha; - default: - return FDE_CSSLISTSTYLETYPE_Disc; - } -} -FDE_CSSLISTSTYLEPOSITION CFDE_CSSStyleSelector::ToListStylePosition( - FDE_CSSPROPERTYVALUE eValue) { - return eValue == FDE_CSSPROPERTYVALUE_Inside - ? FDE_CSSLISTSTYLEPOSITION_Inside - : FDE_CSSLISTSTYLEPOSITION_Outside; -} -FDE_CSSVISIBILITY CFDE_CSSStyleSelector::ToVisibility( - FDE_CSSPROPERTYVALUE eValue) { - switch (eValue) { - case FDE_CSSPROPERTYVALUE_Visible: - return FDE_CSSVISIBILITY_Visible; - case FDE_CSSPROPERTYVALUE_Hidden: - return FDE_CSSVISIBILITY_Hidden; - case FDE_CSSPROPERTYVALUE_Collapse: - return FDE_CSSVISIBILITY_Collapse; - default: - return FDE_CSSVISIBILITY_Visible; - } -} -FDE_CSSWHITESPACE CFDE_CSSStyleSelector::ToWhiteSpace( - FDE_CSSPROPERTYVALUE eValue) { - switch (eValue) { - case FDE_CSSPROPERTYVALUE_Normal: - return FDE_CSSWHITESPACE_Normal; - case FDE_CSSPROPERTYVALUE_Pre: - return FDE_CSSWHITESPACE_Pre; - case FDE_CSSPROPERTYVALUE_Nowrap: - return FDE_CSSWHITESPACE_Nowrap; - case FDE_CSSPROPERTYVALUE_PreWrap: - return FDE_CSSWHITESPACE_PreWrap; - case FDE_CSSPROPERTYVALUE_PreLine: - return FDE_CSSWHITESPACE_PreLine; - default: - return FDE_CSSWHITESPACE_Normal; - } -} -FX_DWORD CFDE_CSSStyleSelector::ToTextDecoration(IFDE_CSSValueList* pValue) { - FX_DWORD dwDecoration = 0; - for (int32_t i = pValue->CountValues() - 1; i >= 0; --i) { - IFDE_CSSPrimitiveValue* pPrimitive = - (IFDE_CSSPrimitiveValue*)pValue->GetValue(i); - if (pPrimitive->GetPrimitiveType() == FDE_CSSPRIMITIVETYPE_Enum) { - switch (pPrimitive->GetEnum()) { - case FDE_CSSPROPERTYVALUE_Underline: - dwDecoration |= FDE_CSSTEXTDECORATION_Underline; - break; - case FDE_CSSPROPERTYVALUE_LineThrough: - dwDecoration |= FDE_CSSTEXTDECORATION_LineThrough; - break; - case FDE_CSSPROPERTYVALUE_Overline: - dwDecoration |= FDE_CSSTEXTDECORATION_Overline; - break; - case FDE_CSSPROPERTYVALUE_Blink: - dwDecoration |= FDE_CSSTEXTDECORATION_Blink; - break; - case FDE_CSSPROPERTYVALUE_Double: - dwDecoration |= FDE_CSSTEXTDECORATION_Double; - break; - default: - break; - } - } - } - return dwDecoration; -} -FDE_CSSTEXTTRANSFORM CFDE_CSSStyleSelector::ToTextTransform( - FDE_CSSPROPERTYVALUE eValue) { - switch (eValue) { - case FDE_CSSPROPERTYVALUE_None: - return FDE_CSSTEXTTRANSFORM_None; - case FDE_CSSPROPERTYVALUE_Capitalize: - return FDE_CSSTEXTTRANSFORM_Capitalize; - case FDE_CSSPROPERTYVALUE_Uppercase: - return FDE_CSSTEXTTRANSFORM_UpperCase; - case FDE_CSSPROPERTYVALUE_Lowercase: - return FDE_CSSTEXTTRANSFORM_LowerCase; - default: - return FDE_CSSTEXTTRANSFORM_None; - } -} -FDE_CSSFONTVARIANT CFDE_CSSStyleSelector::ToFontVariant( - FDE_CSSPROPERTYVALUE eValue) { - return eValue == FDE_CSSPROPERTYVALUE_SmallCaps ? FDE_CSSFONTVARIANT_SmallCaps - : FDE_CSSFONTVARIANT_Normal; -} diff --git a/xfa/src/fde/css/fde_cssstyleselector.h b/xfa/src/fde/css/fde_cssstyleselector.h deleted file mode 100644 index 5f5ee095be..0000000000 --- a/xfa/src/fde/css/fde_cssstyleselector.h +++ /dev/null @@ -1,901 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FDE_CSS_FDE_CSSSTYLESELECTOR_H_ -#define XFA_SRC_FDE_CSS_FDE_CSSSTYLESELECTOR_H_ - -#include - -#include "core/include/fxcrt/fx_ext.h" -#include "xfa/src/fde/css/fde_css.h" -#include "xfa/src/fde/css/fde_csscache.h" -#include "xfa/src/fde/css/fde_cssdeclaration.h" -#include "xfa/src/fgas/crt/fgas_memory.h" -#include "xfa/src/fgas/crt/fgas_system.h" - -#define FDE_CSSUNIVERSALHASH ('*') - -class FDE_CSSRuleData : public CFX_Target { - public: - FDE_CSSRuleData(IFDE_CSSSelector* pSel, - IFDE_CSSDeclaration* pDecl, - FX_DWORD dwPos); - - IFDE_CSSSelector* pSelector; - IFDE_CSSDeclaration* pDeclaration; - FX_DWORD dwPriority; - FDE_CSSRuleData* pNext; -}; - -class CFDE_CSSRuleCollection : public CFX_Target { - public: - CFDE_CSSRuleCollection() - : m_pStaticStore(nullptr), - m_pUniversalRules(nullptr), - m_pPersudoRules(nullptr), - m_iSelectors(0) {} - ~CFDE_CSSRuleCollection() { Clear(); } - void AddRulesFrom(const CFDE_CSSStyleSheetArray& sheets, - FX_DWORD dwMediaList, - IFX_FontMgr* pFontMgr); - void Clear(); - - int32_t CountSelectors() const { return m_iSelectors; } - FDE_CSSRuleData* GetIDRuleData(FX_DWORD dwIDHash) { - void* pData; - return m_IDRules.Lookup((void*)(uintptr_t)dwIDHash, pData) - ? (FDE_CSSRuleData*)pData - : NULL; - } - FDE_CSSRuleData* GetTagRuleData(FX_DWORD dwTagHasn) { - void* pData; - return m_TagRules.Lookup((void*)(uintptr_t)dwTagHasn, pData) - ? (FDE_CSSRuleData*)pData - : NULL; - } - FDE_CSSRuleData* GetClassRuleData(FX_DWORD dwIDHash) { - void* pData; - return m_ClassRules.Lookup((void*)(uintptr_t)dwIDHash, pData) - ? (FDE_CSSRuleData*)pData - : NULL; - } - FDE_CSSRuleData* GetUniversalRuleData() { return m_pUniversalRules; } - FDE_CSSRuleData* GetPersudoRuleData() { return m_pPersudoRules; } - IFX_MEMAllocator* m_pStaticStore; - - protected: - void AddRulesFrom(IFDE_CSSStyleSheet* pStyleSheet, - IFDE_CSSRule* pRule, - FX_DWORD dwMediaList, - IFX_FontMgr* pFontMgr); - void AddRuleTo(CFX_MapPtrToPtr& map, - FX_DWORD dwKey, - IFDE_CSSSelector* pSel, - IFDE_CSSDeclaration* pDecl); - FX_BOOL AddRuleTo(FDE_CSSRuleData*& pList, FDE_CSSRuleData* pData); - FDE_CSSRuleData* NewRuleData(IFDE_CSSSelector* pSel, - IFDE_CSSDeclaration* pDecl); - CFX_MapPtrToPtr m_IDRules; - CFX_MapPtrToPtr m_TagRules; - CFX_MapPtrToPtr m_ClassRules; - FDE_CSSRuleData* m_pUniversalRules; - FDE_CSSRuleData* m_pPersudoRules; - int32_t m_iSelectors; -}; -class CFDE_CSSAccelerator; -class CFDE_CSSComputedStyle; -class CFDE_CSSStyleSelector : public IFDE_CSSStyleSelector, public CFX_Target { - public: - CFDE_CSSStyleSelector(); - ~CFDE_CSSStyleSelector(); - virtual void Release() { delete this; } - - virtual void SetFontMgr(IFX_FontMgr* pFontMgr); - virtual void SetDefFontSize(FX_FLOAT fFontSize); - - virtual FX_BOOL SetStyleSheet(FDE_CSSSTYLESHEETGROUP eType, - IFDE_CSSStyleSheet* pSheet); - virtual FX_BOOL SetStyleSheets(FDE_CSSSTYLESHEETGROUP eType, - const CFDE_CSSStyleSheetArray* pArray); - virtual void SetStylePriority(FDE_CSSSTYLESHEETGROUP eType, - FDE_CSSSTYLESHEETPRIORITY ePriority); - virtual void UpdateStyleIndex(FX_DWORD dwMediaList); - virtual IFDE_CSSAccelerator* InitAccelerator(); - virtual IFDE_CSSComputedStyle* CreateComputedStyle( - IFDE_CSSComputedStyle* pParentStyle); - virtual int32_t MatchDeclarations( - IFDE_CSSTagProvider* pTag, - CFDE_CSSDeclarationArray& matchedDecls, - FDE_CSSPERSUDO ePersudoType = FDE_CSSPERSUDO_NONE); - virtual void ComputeStyle(IFDE_CSSTagProvider* pTag, - const IFDE_CSSDeclaration** ppDeclArray, - int32_t iDeclCount, - IFDE_CSSComputedStyle* pDestStyle); - - protected: - void Reset(); - void MatchRules(FDE_CSSTagCache* pCache, - FDE_CSSRuleData* pList, - FDE_CSSPERSUDO ePersudoType); - FX_BOOL MatchSelector(FDE_CSSTagCache* pCache, - IFDE_CSSSelector* pSel, - FDE_CSSPERSUDO ePersudoType); - void AppendInlineStyle(CFDE_CSSDeclaration* pDecl, - const FX_WCHAR* psz, - int32_t iLen); - void ApplyDeclarations(FX_BOOL bPriority, - const IFDE_CSSDeclaration** ppDeclArray, - int32_t iDeclCount, - IFDE_CSSComputedStyle* pDestStyle); - void ApplyProperty(FDE_CSSPROPERTY eProperty, - IFDE_CSSValue* pValue, - CFDE_CSSComputedStyle* pComputedStyle); - - FX_FLOAT ApplyNumber(FDE_CSSPRIMITIVETYPE eUnit, - FX_FLOAT fValue, - FX_FLOAT fPercentBase); - FX_BOOL SetLengthWithPercent(FDE_CSSLENGTH& width, - FDE_CSSPRIMITIVETYPE eType, - IFDE_CSSPrimitiveValue* pPrimitive, - FX_FLOAT fFontSize); - FX_FLOAT ToFontSize(FDE_CSSPROPERTYVALUE eValue, FX_FLOAT fCurFontSize); - FDE_CSSDISPLAY ToDisplay(FDE_CSSPROPERTYVALUE eValue); - FDE_CSSTEXTALIGN ToTextAlign(FDE_CSSPROPERTYVALUE eValue); - FX_WORD ToFontWeight(FDE_CSSPROPERTYVALUE eValue); - FDE_CSSFONTSTYLE ToFontStyle(FDE_CSSPROPERTYVALUE eValue); - FDE_CSSBORDERSTYLE ToBorderStyle(FDE_CSSPROPERTYVALUE eValue); - FDE_CSSVERTICALALIGN ToVerticalAlign(FDE_CSSPROPERTYVALUE eValue); - FDE_CSSLISTSTYLETYPE ToListStyleType(FDE_CSSPROPERTYVALUE eValue); - FDE_CSSLISTSTYLEPOSITION ToListStylePosition(FDE_CSSPROPERTYVALUE eValue); - FDE_CSSVISIBILITY ToVisibility(FDE_CSSPROPERTYVALUE eValue); - FDE_CSSWHITESPACE ToWhiteSpace(FDE_CSSPROPERTYVALUE eValue); - FX_DWORD ToTextDecoration(IFDE_CSSValueList* pList); - FDE_CSSTEXTTRANSFORM ToTextTransform(FDE_CSSPROPERTYVALUE eValue); - FDE_CSSFONTVARIANT ToFontVariant(FDE_CSSPROPERTYVALUE eValue); - FDE_CSSFLOAT ToFloat(FDE_CSSPROPERTYVALUE eValue); - FDE_CSSCLEAR ToClear(FDE_CSSPROPERTYVALUE eValue); - FDE_CSSWRITINGMODE ToWritingMode(FDE_CSSPROPERTYVALUE eValue); - FDE_CSSWORDBREAK ToWordBreak(FDE_CSSPROPERTYVALUE eValue); - FDE_CSSPAGEBREAK ToPageBreak(FDE_CSSPROPERTYVALUE eValue); - FDE_CSSOVERFLOW ToOverflow(FDE_CSSPROPERTYVALUE eValue); - FDE_CSSLINEBREAK ToLineBreak(FDE_CSSPROPERTYVALUE eValue); - FDE_CSSTEXTCOMBINE ToTextCombine(FDE_CSSPROPERTYVALUE eValue); - FX_BOOL ToTextEmphasisMark(FDE_CSSPROPERTYVALUE eValue, - FDE_CSSTEXTEMPHASISMARK& eMark); - FX_BOOL ToTextEmphasisFill(FDE_CSSPROPERTYVALUE eValue, - FDE_CSSTEXTEMPHASISFILL& eFill); - FDE_CSSCURSOR ToCursor(FDE_CSSPROPERTYVALUE eValue); - FDE_CSSPOSITION ToPosition(FDE_CSSPROPERTYVALUE eValue); - FDE_CSSCAPTIONSIDE ToCaptionSide(FDE_CSSPROPERTYVALUE eValue); - FDE_CSSBKGREPEAT ToBKGRepeat(FDE_CSSPROPERTYVALUE eValue); - FDE_CSSBKGATTACHMENT ToBKGAttachment(FDE_CSSPROPERTYVALUE eValue); - FDE_CSSRUBYALIGN ToRubyAlign(FDE_CSSPROPERTYVALUE eValue); - FDE_CSSRUBYOVERHANG ToRubyOverhang(FDE_CSSPROPERTYVALUE eValue); - FDE_CSSRUBYPOSITION ToRubyPosition(FDE_CSSPROPERTYVALUE eValue); - FDE_CSSRUBYSPAN ToRubySpan(FDE_CSSPROPERTYVALUE eValue); - IFX_FontMgr* m_pFontMgr; - FX_FLOAT m_fDefFontSize; - IFX_MEMAllocator* m_pRuleDataStore; - CFDE_CSSStyleSheetArray m_SheetGroups[FDE_CSSSTYLESHEETGROUP_MAX]; - CFDE_CSSRuleCollection m_RuleCollection[FDE_CSSSTYLESHEETGROUP_MAX]; - FDE_CSSSTYLESHEETGROUP m_ePriorities[FDE_CSSSTYLESHEETPRIORITY_MAX]; - IFX_MEMAllocator* m_pInlineStyleStore; - IFX_MEMAllocator* m_pFixedStyleStore; - CFDE_CSSAccelerator* m_pAccelerator; - std::vector m_MatchedRules; -}; - -struct FDE_CSSCOUNTERDATA { - public: - FDE_CSSCOUNTERDATA() { FXSYS_memset(this, 0, sizeof(FDE_CSSCOUNTERDATA)); } - FX_BOOL GetCounterIncrement(int32_t& iValue) { - iValue = m_iIncVal; - return m_bIncrement; - } - FX_BOOL GetCounterReset(int32_t& iValue) { - iValue = m_iResetVal; - return m_bReset; - } - - const FX_WCHAR* m_pszIdent; - FX_BOOL m_bIncrement; - FX_BOOL m_bReset; - int32_t m_iIncVal; - int32_t m_iResetVal; -}; - -class CFDE_CSSCounterStyle { - public: - CFDE_CSSCounterStyle() : m_pCounterInc(NULL), m_pCounterReset(NULL) {} - void SetCounterIncrementList(IFDE_CSSValueList* pList) { - m_pCounterInc = pList; - m_bIndexDirty = TRUE; - } - void SetCounterResetList(IFDE_CSSValueList* pList) { - m_pCounterReset = pList; - m_bIndexDirty = TRUE; - } - int32_t CountCounters() { - UpdateIndex(); - return m_arrCounterData.GetSize(); - } - FX_BOOL GetCounterIncrement(int32_t index, int32_t& iValue) { - UpdateIndex(); - return m_arrCounterData.ElementAt(index).GetCounterIncrement(iValue); - } - FX_BOOL GetCounterReset(int32_t index, int32_t& iValue) { - UpdateIndex(); - return m_arrCounterData.ElementAt(index).GetCounterReset(iValue); - } - const FX_WCHAR* GetCounterIdentifier(int32_t index) { - UpdateIndex(); - return m_arrCounterData.ElementAt(index).m_pszIdent; - } - - protected: - void UpdateIndex(); - void DoUpdateIndex(IFDE_CSSValueList* pList); - int32_t FindIndex(const FX_WCHAR* pszIdentifier); - IFDE_CSSValueList* m_pCounterInc; - IFDE_CSSValueList* m_pCounterReset; - CFX_ArrayTemplate m_arrCounterData; - FX_BOOL m_bIndexDirty; -}; -class CFDE_CSSInheritedData { - public: - void Reset() { - FXSYS_memset(this, 0, sizeof(CFDE_CSSInheritedData)); - m_LetterSpacing.Set(FDE_CSSLENGTHUNIT_Normal); - m_WordSpacing.Set(FDE_CSSLENGTHUNIT_Normal); - m_TextIndent.Set(FDE_CSSLENGTHUNIT_Point, 0); - m_fFontSize = 12.0f; - m_fLineHeight = 14.0f; - m_wFontWeight = 400; - m_dwFontColor = 0xFF000000; - m_iWidows = 2; - m_bTextEmphasisColorCurrent = TRUE; - m_iOrphans = 2; - } - const FX_WCHAR* m_pszListStyleImage; - FDE_CSSLENGTH m_LetterSpacing; - FDE_CSSLENGTH m_WordSpacing; - FDE_CSSLENGTH m_TextIndent; - IFDE_CSSValueList* m_pFontFamily; - IFDE_CSSValueList* m_pQuotes; - IFDE_CSSValueList* m_pCursorUris; - FDE_CSSCURSOR m_eCursor; - FX_FLOAT m_fFontSize; - FX_FLOAT m_fLineHeight; - FX_ARGB m_dwFontColor; - FX_ARGB m_dwTextEmphasisColor; - FX_WORD m_wFontWeight; - int32_t m_iWidows; - int32_t m_iOrphans; - const FX_WCHAR* m_pszTextEmphasisCustomMark; - FX_WORD m_eFontVariant : 1; - FX_WORD m_eFontStyle : 1; - FX_WORD m_bTextEmphasisColorCurrent : 1; - FX_WORD m_eTextAligh : 2; - FX_WORD m_eVisibility : 2; - FX_WORD m_eWhiteSpace : 3; - FX_WORD m_eTextTransform : 2; - FX_WORD m_eWritingMode : 2; - FX_WORD m_eWordBreak : 2; - FX_WORD m_eLineBreak : 2; - FX_WORD m_eTextEmphasisFill : 1; - FX_WORD m_eTextEmphasisMark : 3; - FX_WORD m_eCaptionSide : 3; - - FX_WORD m_eRubyAlign : 4; - FX_WORD m_eRubyOverhang : 2; - FX_WORD m_eRubyPosition : 2; -}; -class CFDE_CSSNonInheritedData { - public: - void Reset() { - FXSYS_memset(this, 0, sizeof(CFDE_CSSNonInheritedData)); - m_MarginWidth = m_BorderWidth = - m_PaddingWidth.Set(FDE_CSSLENGTHUNIT_Point, 0); - m_MinBoxSize.Set(FDE_CSSLENGTHUNIT_Point, 0); - m_MaxBoxSize.Set(FDE_CSSLENGTHUNIT_None); - m_eDisplay = FDE_CSSDISPLAY_Inline; - m_fVerticalAlign = 0.0f; - m_ColumnCount.Set(FDE_CSSLENGTHUNIT_Auto); - m_ColumnGap.Set(FDE_CSSLENGTHUNIT_Normal); - m_bColumnRuleColorSame = TRUE; - m_ColumnWidth.Set(FDE_CSSLENGTHUNIT_Auto); - m_ColumnRuleWidth.Set(FDE_CSSLENGTHUNIT_Auto); - m_eTextCombine = FDE_CSSTEXTCOMBINE_None; - } - - IFDE_CSSValueList* m_pContentList; - CFDE_CSSCounterStyle* m_pCounterStyle; - FDE_CSSRECT m_MarginWidth; - FDE_CSSRECT m_BorderWidth; - FDE_CSSRECT m_PaddingWidth; - FDE_CSSSIZE m_BoxSize; - FDE_CSSSIZE m_MinBoxSize; - FDE_CSSSIZE m_MaxBoxSize; - FDE_CSSPOINT m_BKGPosition; - const FX_WCHAR* m_pszBKGImage; - FX_ARGB m_dwBKGColor; - FX_ARGB m_dwBDRLeftColor; - FX_ARGB m_dwBDRTopColor; - FX_ARGB m_dwBDRRightColor; - FX_ARGB m_dwBDRBottomColor; - IFDE_CSSValue* m_pRubySpan; - FDE_CSSLENGTH m_ColumnCount; - FDE_CSSLENGTH m_ColumnGap; - FDE_CSSLENGTH m_ColumnRuleWidth; - FDE_CSSLENGTH m_ColumnWidth; - FX_ARGB m_dwColumnRuleColor; - FDE_CSSLENGTH m_Top; - FDE_CSSLENGTH m_Bottom; - FDE_CSSLENGTH m_Left; - FDE_CSSLENGTH m_Right; - - FX_FLOAT m_fVerticalAlign; - FX_FLOAT m_fTextCombineNumber; - FX_DWORD m_eBDRLeftStyle : 4; - FX_DWORD m_eBDRTopStyle : 4; - FX_DWORD m_eBDRRightStyle : 4; - FX_DWORD m_eBDRBottomStyle : 4; - FX_DWORD m_eDisplay : 5; - FX_DWORD m_eVerticalAlign : 4; - FX_DWORD m_eListStyleType : 5; - FX_DWORD m_eColumnRuleStyle : 4; - FX_DWORD m_ePageBreakInside : 3; - FX_DWORD m_ePageBreakAfter : 3; - FX_DWORD m_ePageBreakBefore : 3; - FX_DWORD m_ePosition : 2; - FX_DWORD m_eBKGRepeat : 2; - FX_DWORD m_eFloat : 2; - FX_DWORD m_eClear : 2; - FX_DWORD m_eOverflowX : 3; - FX_DWORD m_eOverflowY : 3; - FX_DWORD m_eListStylePosition : 1; - FX_DWORD m_eBKGAttachment : 1; - FX_DWORD m_bHasMargin : 1; - FX_DWORD m_bHasBorder : 1; - FX_DWORD m_bHasPadding : 1; - FX_DWORD m_dwTextDecoration : 5; - FX_DWORD m_eTextCombine : 1; - FX_DWORD m_bColumnRuleColorSame : 1; - FX_DWORD m_bHasTextCombineNumber : 1; -}; -class CFDE_CSSComputedStyle : public IFDE_CSSComputedStyle, - public IFDE_CSSFontStyle, - public IFDE_CSSBoundaryStyle, - public IFDE_CSSPositionStyle, - public IFDE_CSSParagraphStyle, - public IFDE_CSSBackgroundStyle, - public IFDE_CSSVisualStyle, - public IFDE_CSSListStyle, - public IFDE_CSSMultiColumnStyle, - public IFDE_CSSGeneratedContentStyle, - public IFDE_CSSTableStyle, - public IFDE_CSSRubyStyle, - public CFX_Target { - public: - CFDE_CSSComputedStyle(IFX_MEMAllocator* pAlloc) - : m_dwRefCount(1), m_pAllocator(pAlloc) {} - ~CFDE_CSSComputedStyle() {} - virtual FX_DWORD AddRef() { return ++m_dwRefCount; } - virtual FX_DWORD Release() { - FX_DWORD dwRefCount = --m_dwRefCount; - if (dwRefCount == 0) { - if (m_NonInheritedData.m_pCounterStyle != NULL) { - delete m_NonInheritedData.m_pCounterStyle; - } - FXTARGET_DeleteWith(CFDE_CSSComputedStyle, m_pAllocator, this); - } - return dwRefCount; - } - - virtual void Reset() { - m_InheritedData.Reset(); - m_NonInheritedData.Reset(); - } - virtual IFDE_CSSFontStyle* GetFontStyles() const { - return (IFDE_CSSFontStyle * const) this; - } - virtual IFDE_CSSBoundaryStyle* GetBoundaryStyles() const { - return (IFDE_CSSBoundaryStyle * const) this; - } - virtual IFDE_CSSPositionStyle* GetPositionStyles() const { - return (IFDE_CSSPositionStyle * const) this; - } - virtual IFDE_CSSParagraphStyle* GetParagraphStyles() const { - return (IFDE_CSSParagraphStyle * const) this; - } - virtual IFDE_CSSBackgroundStyle* GetBackgroundStyles() const { - return (IFDE_CSSBackgroundStyle * const) this; - } - virtual IFDE_CSSVisualStyle* GetVisualStyles() const { - return (IFDE_CSSVisualStyle * const) this; - } - virtual IFDE_CSSListStyle* GetListStyles() const { - return (IFDE_CSSListStyle * const) this; - } - virtual IFDE_CSSTableStyle* GetTableStyle() const { - return (IFDE_CSSTableStyle * const) this; - } - virtual IFDE_CSSMultiColumnStyle* GetMultiColumnStyle() const { - return (IFDE_CSSMultiColumnStyle * const) this; - } - virtual IFDE_CSSGeneratedContentStyle* GetGeneratedContentStyle() const { - return (IFDE_CSSGeneratedContentStyle * const) this; - } - virtual IFDE_CSSRubyStyle* GetRubyStyle() const { - return (IFDE_CSSRubyStyle * const) this; - } - virtual FX_BOOL GetCustomStyle(const CFX_WideStringC& wsName, - CFX_WideString& wsValue) const { - for (int32_t i = m_CustomProperties.GetSize() - 2; i > -1; i -= 2) { - if (wsName == m_CustomProperties[i]) { - wsValue = m_CustomProperties[i + 1]; - return TRUE; - } - } - return FALSE; - } - virtual FDE_CSSRUBYALIGN GetRubyAlign() const { - return (FDE_CSSRUBYALIGN)m_InheritedData.m_eRubyAlign; - } - virtual FDE_CSSRUBYPOSITION GetRubyPosition() const { - return (FDE_CSSRUBYPOSITION)m_InheritedData.m_eRubyPosition; - } - virtual FDE_CSSRUBYOVERHANG GetRubyOverhang() const { - return (FDE_CSSRUBYOVERHANG)m_InheritedData.m_eRubyOverhang; - } - virtual FDE_CSSRUBYSPAN GetRubySpanType() const { - return m_NonInheritedData.m_pRubySpan == NULL ? FDE_CSSRUBYSPAN_None - : FDE_CSSRUBYSPAN_Attr; - } - virtual IFDE_CSSValue* GetRubySpanAttr() const { - return m_NonInheritedData.m_pRubySpan; - } - virtual FDE_CSSCAPTIONSIDE GetCaptionSide() const { - return (FDE_CSSCAPTIONSIDE)m_InheritedData.m_eCaptionSide; - } - virtual int32_t CountCounters() { - return (m_NonInheritedData.m_pCounterStyle == NULL) - ? 0 - : m_NonInheritedData.m_pCounterStyle->CountCounters(); - } - virtual const FX_WCHAR* GetCounterIdentifier(int32_t index) { - return m_NonInheritedData.m_pCounterStyle->GetCounterIdentifier(index); - } - virtual FX_BOOL GetCounterReset(int32_t index, int32_t& iValue) { - return m_NonInheritedData.m_pCounterStyle->GetCounterReset(index, iValue); - } - virtual FX_BOOL GetCounterIncrement(int32_t index, int32_t& iValue) { - return m_NonInheritedData.m_pCounterStyle->GetCounterIncrement(index, - iValue); - } - virtual IFDE_CSSValueList* GetContent() const { - return m_NonInheritedData.m_pContentList; - } - virtual int32_t CountQuotes() const { - return m_InheritedData.m_pQuotes == NULL - ? 0 - : m_InheritedData.m_pQuotes->CountValues(); - } - virtual const FX_WCHAR* GetQuotes(int32_t index) const { - FXSYS_assert(m_InheritedData.m_pQuotes != NULL && - m_InheritedData.m_pQuotes->CountValues() > index); - return ((IFDE_CSSPrimitiveValue*)(m_InheritedData.m_pQuotes->GetValue( - index))) - ->GetString(index); - } - virtual const FDE_CSSLENGTH& GetColumnCount() const { - return m_NonInheritedData.m_ColumnCount; - } - virtual const FDE_CSSLENGTH& GetColumnGap() const { - return m_NonInheritedData.m_ColumnGap; - } - virtual FX_ARGB GetColumnRuleColor() const { - return m_NonInheritedData.m_bColumnRuleColorSame - ? m_InheritedData.m_dwFontColor - : m_NonInheritedData.m_dwColumnRuleColor; - } - virtual FDE_CSSBORDERSTYLE GetColumnRuleStyle() const { - return (FDE_CSSBORDERSTYLE)m_NonInheritedData.m_eColumnRuleStyle; - } - virtual const FDE_CSSLENGTH& GetColumnRuleWidth() const { - return m_NonInheritedData.m_ColumnRuleWidth; - } - virtual const FDE_CSSLENGTH& GetColumnWidth() const { - return m_NonInheritedData.m_ColumnWidth; - } - virtual void SetColumnCount(const FDE_CSSLENGTH& columnCount) { - m_NonInheritedData.m_ColumnCount = columnCount; - } - virtual void SetColumnGap(const FDE_CSSLENGTH& columnGap) { - m_NonInheritedData.m_ColumnGap = columnGap; - } - virtual void SetColumnRuleColor(FX_ARGB dwColumnRuleColor) { - m_NonInheritedData.m_dwColumnRuleColor = dwColumnRuleColor, - m_NonInheritedData.m_bColumnRuleColorSame = FALSE; - } - virtual void SetColumnRuleStyle(FDE_CSSBORDERSTYLE eColumnRuleStyle) { - m_NonInheritedData.m_eColumnRuleStyle = eColumnRuleStyle; - } - virtual void SetColumnRuleWidth(const FDE_CSSLENGTH& columnRuleWidth) { - m_NonInheritedData.m_ColumnRuleWidth = columnRuleWidth; - } - virtual void SetColumnWidth(const FDE_CSSLENGTH& columnWidth) { - m_NonInheritedData.m_ColumnWidth = columnWidth; - } - virtual int32_t CountFontFamilies() const { - return m_InheritedData.m_pFontFamily - ? m_InheritedData.m_pFontFamily->CountValues() - : 0; - } - virtual const FX_WCHAR* GetFontFamily(int32_t index) const { - return ((IFDE_CSSPrimitiveValue*)(m_InheritedData.m_pFontFamily->GetValue( - index))) - ->GetString(index); - } - virtual FX_WORD GetFontWeight() const { - return m_InheritedData.m_wFontWeight; - } - virtual FDE_CSSFONTVARIANT GetFontVariant() const { - return (FDE_CSSFONTVARIANT)m_InheritedData.m_eFontVariant; - } - virtual FDE_CSSFONTSTYLE GetFontStyle() const { - return (FDE_CSSFONTSTYLE)m_InheritedData.m_eFontStyle; - } - virtual FX_FLOAT GetFontSize() const { return m_InheritedData.m_fFontSize; } - virtual FX_ARGB GetColor() const { return m_InheritedData.m_dwFontColor; } - virtual void SetFontWeight(FX_WORD wFontWeight) { - m_InheritedData.m_wFontWeight = wFontWeight; - } - virtual void SetFontVariant(FDE_CSSFONTVARIANT eFontVariant) { - m_InheritedData.m_eFontVariant = eFontVariant; - } - virtual void SetFontStyle(FDE_CSSFONTSTYLE eFontStyle) { - m_InheritedData.m_eFontStyle = eFontStyle; - } - virtual void SetFontSize(FX_FLOAT fFontSize) { - m_InheritedData.m_fFontSize = fFontSize; - } - virtual void SetColor(FX_ARGB dwFontColor) { - m_InheritedData.m_dwFontColor = dwFontColor; - } - virtual FX_ARGB GetBorderLeftColor() const { - return m_NonInheritedData.m_dwBDRLeftColor; - } - virtual FX_ARGB GetBorderTopColor() const { - return m_NonInheritedData.m_dwBDRTopColor; - } - virtual FX_ARGB GetBorderRightColor() const { - return m_NonInheritedData.m_dwBDRRightColor; - } - virtual FX_ARGB GetBorderBottomColor() const { - return m_NonInheritedData.m_dwBDRBottomColor; - } - - virtual FDE_CSSBORDERSTYLE GetBorderLeftStyle() const { - return (FDE_CSSBORDERSTYLE)m_NonInheritedData.m_eBDRLeftStyle; - } - virtual FDE_CSSBORDERSTYLE GetBorderTopStyle() const { - return (FDE_CSSBORDERSTYLE)m_NonInheritedData.m_eBDRTopStyle; - } - virtual FDE_CSSBORDERSTYLE GetBorderRightStyle() const { - return (FDE_CSSBORDERSTYLE)m_NonInheritedData.m_eBDRRightStyle; - } - virtual FDE_CSSBORDERSTYLE GetBorderBottomStyle() const { - return (FDE_CSSBORDERSTYLE)m_NonInheritedData.m_eBDRBottomStyle; - } - - virtual const FDE_CSSRECT* GetBorderWidth() const { - return m_NonInheritedData.m_bHasBorder ? &(m_NonInheritedData.m_BorderWidth) - : NULL; - } - virtual const FDE_CSSRECT* GetMarginWidth() const { - return m_NonInheritedData.m_bHasMargin ? &(m_NonInheritedData.m_MarginWidth) - : NULL; - } - virtual const FDE_CSSRECT* GetPaddingWidth() const { - return m_NonInheritedData.m_bHasPadding - ? &(m_NonInheritedData.m_PaddingWidth) - : NULL; - } - virtual void SetBorderLeftColor(FX_ARGB dwBorderColor) { - m_NonInheritedData.m_dwBDRLeftColor = dwBorderColor; - } - virtual void SetBorderTopColor(FX_ARGB dwBorderColor) { - m_NonInheritedData.m_dwBDRTopColor = dwBorderColor; - } - virtual void SetBorderRightColor(FX_ARGB dwBorderColor) { - m_NonInheritedData.m_dwBDRRightColor = dwBorderColor; - } - virtual void SetBorderBottomColor(FX_ARGB dwBorderColor) { - m_NonInheritedData.m_dwBDRBottomColor = dwBorderColor; - } - - virtual void SetBorderLeftStyle(FDE_CSSBORDERSTYLE eBorderStyle) { - m_NonInheritedData.m_eBDRLeftStyle = eBorderStyle; - } - virtual void SetBorderTopStyle(FDE_CSSBORDERSTYLE eBorderStyle) { - m_NonInheritedData.m_eBDRTopStyle = eBorderStyle; - } - virtual void SetBorderRightStyle(FDE_CSSBORDERSTYLE eBorderStyle) { - m_NonInheritedData.m_eBDRRightStyle = eBorderStyle; - } - virtual void SetBorderBottomStyle(FDE_CSSBORDERSTYLE eBorderStyle) { - m_NonInheritedData.m_eBDRBottomStyle = eBorderStyle; - } - - virtual void SetBorderWidth(const FDE_CSSRECT& rect) { - m_NonInheritedData.m_BorderWidth = rect; - m_NonInheritedData.m_bHasBorder = TRUE; - } - virtual void SetMarginWidth(const FDE_CSSRECT& rect) { - m_NonInheritedData.m_MarginWidth = rect; - m_NonInheritedData.m_bHasMargin = TRUE; - } - virtual void SetPaddingWidth(const FDE_CSSRECT& rect) { - m_NonInheritedData.m_PaddingWidth = rect; - m_NonInheritedData.m_bHasPadding = TRUE; - } - virtual FDE_CSSDISPLAY GetDisplay() const { - return (FDE_CSSDISPLAY)m_NonInheritedData.m_eDisplay; - } - virtual const FDE_CSSSIZE& GetBoxSize() const { - return m_NonInheritedData.m_BoxSize; - } - virtual const FDE_CSSSIZE& GetMinBoxSize() const { - return m_NonInheritedData.m_MinBoxSize; - } - virtual const FDE_CSSSIZE& GetMaxBoxSize() const { - return m_NonInheritedData.m_MaxBoxSize; - } - virtual FDE_CSSFLOAT GetFloat() const { - return (FDE_CSSFLOAT)m_NonInheritedData.m_eFloat; - } - virtual FDE_CSSCLEAR GetClear() const { - return (FDE_CSSCLEAR)m_NonInheritedData.m_eClear; - } - virtual FDE_CSSPOSITION GetPosition() const { - return (FDE_CSSPOSITION)m_NonInheritedData.m_ePosition; - } - virtual FDE_CSSLENGTH GetTop() const { return m_NonInheritedData.m_Top; } - virtual FDE_CSSLENGTH GetBottom() const { - return m_NonInheritedData.m_Bottom; - } - virtual FDE_CSSLENGTH GetLeft() const { return m_NonInheritedData.m_Left; } - virtual FDE_CSSLENGTH GetRight() const { return m_NonInheritedData.m_Right; } - - virtual void SetDisplay(FDE_CSSDISPLAY eDisplay) { - m_NonInheritedData.m_eDisplay = eDisplay; - } - virtual void SetBoxSize(const FDE_CSSSIZE& size) { - m_NonInheritedData.m_BoxSize = size; - } - virtual void SetMinBoxSize(const FDE_CSSSIZE& size) { - m_NonInheritedData.m_MinBoxSize = size; - } - virtual void SetMaxBoxSize(const FDE_CSSSIZE& size) { - m_NonInheritedData.m_MaxBoxSize = size; - } - virtual void SetFloat(FDE_CSSFLOAT eFloat) { - m_NonInheritedData.m_eFloat = eFloat; - } - virtual void SetClear(FDE_CSSCLEAR eClear) { - m_NonInheritedData.m_eClear = eClear; - } - virtual FX_FLOAT GetLineHeight() const { - return m_InheritedData.m_fLineHeight; - } - virtual FDE_CSSWHITESPACE GetWhiteSpace() const { - return (FDE_CSSWHITESPACE)m_InheritedData.m_eWhiteSpace; - } - virtual const FDE_CSSLENGTH& GetTextIndent() const { - return m_InheritedData.m_TextIndent; - } - virtual FDE_CSSTEXTALIGN GetTextAlign() const { - return (FDE_CSSTEXTALIGN)m_InheritedData.m_eTextAligh; - } - virtual FDE_CSSVERTICALALIGN GetVerticalAlign() const { - return (FDE_CSSVERTICALALIGN)m_NonInheritedData.m_eVerticalAlign; - } - virtual FX_FLOAT GetNumberVerticalAlign() const { - return m_NonInheritedData.m_fVerticalAlign; - } - virtual FDE_CSSTEXTTRANSFORM GetTextTransform() const { - return (FDE_CSSTEXTTRANSFORM)m_InheritedData.m_eTextTransform; - } - virtual FX_DWORD GetTextDecoration() const { - return m_NonInheritedData.m_dwTextDecoration; - } - virtual const FDE_CSSLENGTH& GetLetterSpacing() const { - return m_InheritedData.m_LetterSpacing; - } - virtual const FDE_CSSLENGTH& GetWordSpacing() const { - return m_InheritedData.m_WordSpacing; - } - virtual FDE_CSSWRITINGMODE GetWritingMode() const { - return (FDE_CSSWRITINGMODE)m_InheritedData.m_eWritingMode; - } - virtual FDE_CSSWORDBREAK GetWordBreak() const { - return (FDE_CSSWORDBREAK)m_InheritedData.m_eWordBreak; - } - virtual int32_t GetWidows() const { return m_InheritedData.m_iWidows; } - virtual FX_ARGB GetTextEmphasisColor() const { - return m_InheritedData.m_bTextEmphasisColorCurrent - ? m_InheritedData.m_dwFontColor - : m_InheritedData.m_dwTextEmphasisColor; - } - virtual FDE_CSSPAGEBREAK GetPageBreakBefore() const { - return (FDE_CSSPAGEBREAK)m_NonInheritedData.m_ePageBreakBefore; - } - virtual FDE_CSSPAGEBREAK GetPageBreakAfter() const { - return (FDE_CSSPAGEBREAK)m_NonInheritedData.m_ePageBreakAfter; - } - virtual FDE_CSSPAGEBREAK GetPageBreakInside() const { - return (FDE_CSSPAGEBREAK)m_NonInheritedData.m_ePageBreakInside; - } - virtual int32_t GetOrphans() const { return m_InheritedData.m_iOrphans; } - virtual FDE_CSSLINEBREAK GetLineBreak() const { - return (FDE_CSSLINEBREAK)m_InheritedData.m_eLineBreak; - } - virtual FDE_CSSTEXTEMPHASISMARK GetTextEmphasisMark() const; - virtual FDE_CSSTEXTEMPHASISFILL GetTextEmphasisFill() const { - return (FDE_CSSTEXTEMPHASISFILL)m_InheritedData.m_eTextEmphasisFill; - } - virtual const FX_WCHAR* GetTextEmphasisCustom() const { - FXSYS_assert(m_InheritedData.m_eTextEmphasisMark == - FDE_CSSTEXTEMPHASISMARK_Custom); - return m_InheritedData.m_pszTextEmphasisCustomMark; - } - virtual FDE_CSSTEXTCOMBINE GetTextCombineType() const { - return (FDE_CSSTEXTCOMBINE)m_NonInheritedData.m_eTextCombine; - } - virtual FX_BOOL HasTextCombineNumber() const { - return m_NonInheritedData.m_bHasTextCombineNumber; - } - virtual FX_FLOAT GetTextCombineNumber() const { - FXSYS_assert(m_NonInheritedData.m_eTextCombine == - FDE_CSSTEXTCOMBINE_Horizontal); - return m_NonInheritedData.m_fTextCombineNumber; - } - virtual void SetLineHeight(FX_FLOAT fLineHeight) { - m_InheritedData.m_fLineHeight = fLineHeight; - } - virtual void SetWhiteSpace(FDE_CSSWHITESPACE eWhiteSpace) { - m_InheritedData.m_eWhiteSpace = eWhiteSpace; - } - virtual void SetTextIndent(const FDE_CSSLENGTH& textIndent) { - m_InheritedData.m_TextIndent = textIndent; - } - virtual void SetTextAlign(FDE_CSSTEXTALIGN eTextAlign) { - m_InheritedData.m_eTextAligh = eTextAlign; - } - virtual void SetVerticalAlign(FDE_CSSVERTICALALIGN eVerticalAlign) { - m_NonInheritedData.m_eVerticalAlign = eVerticalAlign; - } - virtual void SetNumberVerticalAlign(FX_FLOAT fAlign) { - m_NonInheritedData.m_eVerticalAlign = FDE_CSSVERTICALALIGN_Number, - m_NonInheritedData.m_fVerticalAlign = fAlign; - } - virtual void SetTextTransform(FDE_CSSTEXTTRANSFORM eTextTransform) { - m_InheritedData.m_eTextTransform = eTextTransform; - } - virtual void SetTextDecoration(FX_DWORD dwTextDecoration) { - m_NonInheritedData.m_dwTextDecoration = dwTextDecoration; - } - virtual void SetLetterSpacing(const FDE_CSSLENGTH& letterSpacing) { - m_InheritedData.m_LetterSpacing = letterSpacing; - } - virtual void SetWordSpacing(const FDE_CSSLENGTH& wordSpacing) { - m_InheritedData.m_WordSpacing = wordSpacing; - } - virtual void SetWritingMode(FDE_CSSWRITINGMODE eWritingMode) { - m_InheritedData.m_eWritingMode = eWritingMode; - } - virtual void SetWordBreak(FDE_CSSWORDBREAK eWordBreak) { - m_InheritedData.m_eWordBreak = eWordBreak; - } - virtual void SetWidows(int32_t iWidows) { - m_InheritedData.m_iWidows = iWidows; - } - virtual void SetTextEmphasisColor(FX_ARGB dwTextEmphasisColor) { - m_InheritedData.m_dwTextEmphasisColor = dwTextEmphasisColor, - m_InheritedData.m_bTextEmphasisColorCurrent = FALSE; - } - virtual void SetPageBreakBefore(FDE_CSSPAGEBREAK ePageBreakBefore) { - m_NonInheritedData.m_ePageBreakBefore = ePageBreakBefore; - } - virtual void SetPageBreakAfter(FDE_CSSPAGEBREAK ePageBreakAfter) { - m_NonInheritedData.m_ePageBreakAfter = ePageBreakAfter; - } - virtual void SetPageBreakInside(FDE_CSSPAGEBREAK ePageBreakInside) { - m_NonInheritedData.m_ePageBreakInside = ePageBreakInside; - } - virtual void SetOrphans(int32_t iOrphans) { - m_InheritedData.m_iOrphans = iOrphans; - } - virtual void SetLineBreak(FDE_CSSLINEBREAK eLineBreak) { - m_InheritedData.m_eLineBreak = eLineBreak; - } - virtual FX_ARGB GetBKGColor() const { - return m_NonInheritedData.m_dwBKGColor; - } - virtual const FX_WCHAR* GetBKGImage() const { - return m_NonInheritedData.m_pszBKGImage; - } - virtual const FDE_CSSPOINT& GetBKGPosition() const { - return m_NonInheritedData.m_BKGPosition; - } - virtual FDE_CSSBKGREPEAT GetBKGRepeat() const { - return (FDE_CSSBKGREPEAT)m_NonInheritedData.m_eBKGRepeat; - } - virtual FDE_CSSBKGATTACHMENT GetBKGAttachment() const { - return (FDE_CSSBKGATTACHMENT)m_NonInheritedData.m_eBKGAttachment; - } - virtual void SetBKGColor(FX_ARGB dwBKGColor) { - m_NonInheritedData.m_dwBKGColor = dwBKGColor; - } - virtual void SetBKGPosition(const FDE_CSSPOINT& bkgPosition) { - m_NonInheritedData.m_BKGPosition = bkgPosition; - } - virtual FDE_CSSVISIBILITY GetVisibility() const { - return (FDE_CSSVISIBILITY)m_InheritedData.m_eVisibility; - } - virtual FDE_CSSOVERFLOW GetOverflowX() const { - return (FDE_CSSOVERFLOW)m_NonInheritedData.m_eOverflowX; - } - virtual FDE_CSSOVERFLOW GetOverflowY() const { - return (FDE_CSSOVERFLOW)m_NonInheritedData.m_eOverflowY; - } - virtual int32_t CountCursorUrls() const { - return m_InheritedData.m_pCursorUris == NULL - ? 0 - : m_InheritedData.m_pCursorUris->CountValues(); - } - virtual const FX_WCHAR* GetCursorUrl(int32_t index) const { - FXSYS_assert(m_InheritedData.m_pCursorUris != NULL); - return ((IFDE_CSSPrimitiveValue*)(m_InheritedData.m_pCursorUris->GetValue( - index))) - ->GetString(index); - } - virtual FDE_CSSCURSOR GetCursorType() const { - return m_InheritedData.m_eCursor; - } - virtual void SetVisibility(FDE_CSSVISIBILITY eVisibility) { - m_InheritedData.m_eVisibility = eVisibility; - } - virtual FDE_CSSLISTSTYLETYPE GetListStyleType() const { - return (FDE_CSSLISTSTYLETYPE)m_NonInheritedData.m_eListStyleType; - } - virtual FDE_CSSLISTSTYLEPOSITION GetListStylePosition() const { - return (FDE_CSSLISTSTYLEPOSITION)m_NonInheritedData.m_eListStylePosition; - } - virtual const FX_WCHAR* GetListStyleImage() const { - return m_InheritedData.m_pszListStyleImage; - } - virtual void SetListStyleType(FDE_CSSLISTSTYLETYPE eListStyleType) { - m_NonInheritedData.m_eListStyleType = eListStyleType; - } - virtual void SetListStylePosition( - FDE_CSSLISTSTYLEPOSITION eListStylePosition) { - m_NonInheritedData.m_eListStylePosition = eListStylePosition; - } - void AddCustomStyle(const CFX_WideString& wsName, - const CFX_WideString& wsValue) { - m_CustomProperties.Add(wsName); - m_CustomProperties.Add(wsValue); - } - FX_DWORD m_dwRefCount; - IFX_MEMAllocator* m_pAllocator; - CFDE_CSSInheritedData m_InheritedData; - CFDE_CSSNonInheritedData m_NonInheritedData; - CFX_WideStringArray m_CustomProperties; -}; - -#endif // XFA_SRC_FDE_CSS_FDE_CSSSTYLESELECTOR_H_ diff --git a/xfa/src/fde/css/fde_cssstylesheet.cpp b/xfa/src/fde/css/fde_cssstylesheet.cpp deleted file mode 100644 index 9b18dd2552..0000000000 --- a/xfa/src/fde/css/fde_cssstylesheet.cpp +++ /dev/null @@ -1,509 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fde/css/fde_cssstylesheet.h" - -#include "xfa/src/fde/css/fde_cssdatatable.h" -#include "xfa/src/fde/css/fde_csssyntax.h" -#include "xfa/src/fgas/crt/fgas_codepage.h" - -IFDE_CSSStyleSheet* IFDE_CSSStyleSheet::LoadHTMLStandardStyleSheet() { - static const FX_WCHAR* s_pStyle = - L"html,address,blockquote,body,dd,div,dl,dt,fieldset,form,frame,frameset," - L"h1,h2,h3,h4,h5,h6,noframes,ol,p,ul,center,dir,hr,menu,pre{display:" - L"block}" - L"li{display:list-item}head{display:none}table{display:table}tr{display:" - L"table-row}thead{display:table-header-group}tbody{display:table-row-" - L"group}tfoot{display:table-footer-group}" - L"col{display:table-column}colgroup{display:table-column-group}td,th{" - L"display:table-cell}caption{display:table-caption}th{font-weight:bolder;" - L"text-align:center}caption{text-align:center}" - L"body{margin:0}h1{font-size:2em;margin:.67em " - L"0}h2{font-size:1.5em;margin:.75em 0}h3{font-size:1.17em;margin:.83em " - L"0}h4,p,blockquote,ul,fieldset,form,ol,dl,dir,menu{margin:1.12em 0}" - L"h5{font-size:.83em;margin:1.5em 0}h6{font-size:.75em;margin:1.67em " - L"0}h1,h2,h3,h4,h5,h6,b,strong{font-weight:bolder}blockquote{margin-left:" - L"40px;margin-right:40px}i,cite,em,var,address{font-style:italic}" - L"pre,tt,code,kbd,samp{font-family:monospace}pre{white-space:pre}button," - L"textarea,input,select{display:inline-block}big{font-size:1.17em}small," - L"sub,sup{font-size:.83em}sub{vertical-align:sub}" - L"sup{vertical-align:super}table{border-spacing:2px}thead,tbody,tfoot{" - L"vertical-align:middle}td,th,tr{vertical-align:inherit}s,strike,del{" - L"text-decoration:line-through}hr{border:1px inset silver}" - L"ol,ul,dir,menu,dd{margin-left:40px}ol{list-style-type:decimal}ol ul,ul " - L"ol,ul ul,ol " - L"ol{margin-top:0;margin-bottom:0}u,ins{text-decoration:underline}center{" - L"text-align:center}" - L"ruby{display:ruby}rt{display:ruby-text;font-size:.5em}rb{display:ruby-" - L"base}rbc{display:ruby-base-group}rtc{display:ruby-text-group}" - L"q:before{content:open-quote}q:after{content:close-quote}" - L"rp{display:none}"; - return IFDE_CSSStyleSheet::LoadFromBuffer( - CFX_WideString(), s_pStyle, FXSYS_wcslen(s_pStyle), FX_CODEPAGE_UTF8); -} - -IFDE_CSSStyleSheet* IFDE_CSSStyleSheet::LoadFromStream( - const CFX_WideString& szUrl, - IFX_Stream* pStream, - FX_WORD wCodePage, - FX_DWORD dwMediaList) { - CFDE_CSSStyleSheet* pStyleSheet = new CFDE_CSSStyleSheet(dwMediaList); - if (!pStyleSheet->LoadFromStream(szUrl, pStream, wCodePage)) { - pStyleSheet->Release(); - pStyleSheet = NULL; - } - return pStyleSheet; -} -IFDE_CSSStyleSheet* IFDE_CSSStyleSheet::LoadFromBuffer( - const CFX_WideString& szUrl, - const FX_WCHAR* pBuffer, - int32_t iBufSize, - FX_WORD wCodePage, - FX_DWORD dwMediaList) { - CFDE_CSSStyleSheet* pStyleSheet = new CFDE_CSSStyleSheet(dwMediaList); - if (!pStyleSheet->LoadFromBuffer(szUrl, pBuffer, iBufSize, wCodePage)) { - pStyleSheet->Release(); - pStyleSheet = NULL; - } - return pStyleSheet; -} -CFDE_CSSStyleSheet::CFDE_CSSStyleSheet(FX_DWORD dwMediaList) - : m_wCodePage(FX_CODEPAGE_UTF8), - m_wRefCount(1), - m_dwMediaList(dwMediaList), - m_pAllocator(NULL) { - FXSYS_assert(m_dwMediaList > 0); -} -CFDE_CSSStyleSheet::~CFDE_CSSStyleSheet() { - Reset(); -} -void CFDE_CSSStyleSheet::Reset() { - for (int32_t i = m_RuleArray.GetSize() - 1; i >= 0; --i) { - IFDE_CSSRule* pRule = m_RuleArray.GetAt(i); - switch (pRule->GetType()) { - case FDE_CSSRULETYPE_Style: - ((CFDE_CSSStyleRule*)pRule)->~CFDE_CSSStyleRule(); - break; - case FDE_CSSRULETYPE_Media: - ((CFDE_CSSMediaRule*)pRule)->~CFDE_CSSMediaRule(); - break; - case FDE_CSSRULETYPE_FontFace: - ((CFDE_CSSFontFaceRule*)pRule)->~CFDE_CSSFontFaceRule(); - break; - default: - FXSYS_assert(FALSE); - break; - } - } - m_RuleArray.RemoveAll(); - m_Selectors.RemoveAll(); - m_StringCache.RemoveAll(); - if (m_pAllocator) { - m_pAllocator->Release(); - m_pAllocator = NULL; - } -} -FX_DWORD CFDE_CSSStyleSheet::AddRef() { - return ++m_wRefCount; -} -FX_DWORD CFDE_CSSStyleSheet::Release() { - FX_DWORD dwRefCount = --m_wRefCount; - if (dwRefCount == 0) { - delete this; - } - return dwRefCount; -} -int32_t CFDE_CSSStyleSheet::CountRules() const { - return m_RuleArray.GetSize(); -} -IFDE_CSSRule* CFDE_CSSStyleSheet::GetRule(int32_t index) { - return m_RuleArray.GetAt(index); -} -FX_BOOL CFDE_CSSStyleSheet::LoadFromStream(const CFX_WideString& szUrl, - IFX_Stream* pStream, - FX_WORD wCodePage) { - FXSYS_assert(pStream != NULL); - IFDE_CSSSyntaxParser* pSyntax = IFDE_CSSSyntaxParser::Create(); - if (pSyntax == NULL) { - return FALSE; - } - if (pStream->GetCodePage() != wCodePage) { - pStream->SetCodePage(wCodePage); - } - FX_BOOL bRet = pSyntax->Init(pStream, 4096) && LoadFromSyntax(pSyntax); - pSyntax->Release(); - m_wCodePage = wCodePage; - m_szUrl = szUrl; - return bRet; -} -FX_BOOL CFDE_CSSStyleSheet::LoadFromBuffer(const CFX_WideString& szUrl, - const FX_WCHAR* pBuffer, - int32_t iBufSize, - FX_WORD wCodePage) { - FXSYS_assert(pBuffer != NULL && iBufSize > 0); - IFDE_CSSSyntaxParser* pSyntax = IFDE_CSSSyntaxParser::Create(); - if (pSyntax == NULL) { - return FALSE; - } - FX_BOOL bRet = pSyntax->Init(pBuffer, iBufSize) && LoadFromSyntax(pSyntax); - pSyntax->Release(); - m_wCodePage = wCodePage; - m_szUrl = szUrl; - return bRet; -} -FX_BOOL CFDE_CSSStyleSheet::LoadFromSyntax(IFDE_CSSSyntaxParser* pSyntax) { - Reset(); - m_pAllocator = FX_CreateAllocator(FX_ALLOCTYPE_Static, 1024, 0); - if (m_pAllocator == NULL) { - return FALSE; - } - FDE_CSSSYNTAXSTATUS eStatus; - do { - switch (eStatus = pSyntax->DoSyntaxParse()) { - case FDE_CSSSYNTAXSTATUS_StyleRule: - eStatus = LoadStyleRule(pSyntax, m_RuleArray); - break; - case FDE_CSSSYNTAXSTATUS_MediaRule: - eStatus = LoadMediaRule(pSyntax); - break; - case FDE_CSSSYNTAXSTATUS_FontFaceRule: - eStatus = LoadFontFaceRule(pSyntax, m_RuleArray); - break; - case FDE_CSSSYNTAXSTATUS_ImportRule: - eStatus = LoadImportRule(pSyntax); - break; - case FDE_CSSSYNTAXSTATUS_PageRule: - eStatus = LoadPageRule(pSyntax); - break; - default: - break; - } - } while (eStatus >= FDE_CSSSYNTAXSTATUS_None); - m_Selectors.RemoveAll(); - m_StringCache.RemoveAll(); - return eStatus != FDE_CSSSYNTAXSTATUS_Error; -} -FDE_CSSSYNTAXSTATUS CFDE_CSSStyleSheet::LoadMediaRule( - IFDE_CSSSyntaxParser* pSyntax) { - FX_DWORD dwMediaList = 0; - CFDE_CSSMediaRule* pMediaRule = NULL; - for (;;) { - switch (pSyntax->DoSyntaxParse()) { - case FDE_CSSSYNTAXSTATUS_MediaType: { - int32_t iLen; - const FX_WCHAR* psz = pSyntax->GetCurrentString(iLen); - FDE_LPCCSSMEDIATYPETABLE pMediaType = - FDE_GetCSSMediaTypeByName(psz, iLen); - if (pMediaType != NULL) { - dwMediaList |= pMediaType->wValue; - } - } break; - case FDE_CSSSYNTAXSTATUS_StyleRule: - if (pMediaRule == NULL) { - SkipRuleSet(pSyntax); - } else { - FDE_CSSSYNTAXSTATUS eStatus = - LoadStyleRule(pSyntax, pMediaRule->GetArray()); - if (eStatus < FDE_CSSSYNTAXSTATUS_None) { - return eStatus; - } - } - break; - case FDE_CSSSYNTAXSTATUS_DeclOpen: - if ((dwMediaList & m_dwMediaList) > 0 && pMediaRule == NULL) { - pMediaRule = - FXTARGET_NewWith(m_pAllocator) CFDE_CSSMediaRule(dwMediaList); - m_RuleArray.Add(pMediaRule); - } - break; - case FDE_CSSSYNTAXSTATUS_DeclClose: - return FDE_CSSSYNTAXSTATUS_None; - FDE_CSSSWITCHDEFAULTS(); - } - } -} -FDE_CSSSYNTAXSTATUS CFDE_CSSStyleSheet::LoadStyleRule( - IFDE_CSSSyntaxParser* pSyntax, - CFDE_CSSRuleArray& ruleArray) { - m_Selectors.RemoveAt(0, m_Selectors.GetSize()); - CFDE_CSSStyleRule* pStyleRule = NULL; - const FX_WCHAR* pszValue = NULL; - int32_t iValueLen = 0; - FDE_CSSPROPERTYARGS propertyArgs; - propertyArgs.pStaticStore = m_pAllocator; - propertyArgs.pStringCache = &m_StringCache; - propertyArgs.pProperty = NULL; - CFX_WideString wsName; - for (;;) { - switch (pSyntax->DoSyntaxParse()) { - case FDE_CSSSYNTAXSTATUS_Selector: { - pszValue = pSyntax->GetCurrentString(iValueLen); - IFDE_CSSSelector* pSelector = - CFDE_CSSSelector::FromString(m_pAllocator, pszValue, iValueLen); - if (pSelector != NULL) { - m_Selectors.Add(pSelector); - } - } break; - case FDE_CSSSYNTAXSTATUS_PropertyName: - pszValue = pSyntax->GetCurrentString(iValueLen); - propertyArgs.pProperty = FDE_GetCSSPropertyByName(pszValue, iValueLen); - if (propertyArgs.pProperty == NULL) { - wsName = CFX_WideStringC(pszValue, iValueLen); - } - break; - case FDE_CSSSYNTAXSTATUS_PropertyValue: - if (propertyArgs.pProperty != NULL) { - pszValue = pSyntax->GetCurrentString(iValueLen); - if (iValueLen > 0) { - pStyleRule->GetDeclImp().AddProperty(&propertyArgs, pszValue, - iValueLen); - } - } else if (iValueLen > 0) { - pszValue = pSyntax->GetCurrentString(iValueLen); - if (iValueLen > 0) { - pStyleRule->GetDeclImp().AddProperty( - &propertyArgs, wsName, wsName.GetLength(), pszValue, iValueLen); - } - } - break; - case FDE_CSSSYNTAXSTATUS_DeclOpen: - if (pStyleRule == NULL && m_Selectors.GetSize() > 0) { - pStyleRule = FXTARGET_NewWith(m_pAllocator) CFDE_CSSStyleRule; - pStyleRule->SetSelector(m_pAllocator, m_Selectors); - ruleArray.Add(pStyleRule); - } else { - SkipRuleSet(pSyntax); - return FDE_CSSSYNTAXSTATUS_None; - } - break; - case FDE_CSSSYNTAXSTATUS_DeclClose: - if (pStyleRule != NULL && - pStyleRule->GetDeclImp().GetStartPosition() == NULL) { - pStyleRule->~CFDE_CSSStyleRule(); - ruleArray.RemoveLast(1); - } - return FDE_CSSSYNTAXSTATUS_None; - FDE_CSSSWITCHDEFAULTS(); - } - } -} -FDE_CSSSYNTAXSTATUS CFDE_CSSStyleSheet::LoadFontFaceRule( - IFDE_CSSSyntaxParser* pSyntax, - CFDE_CSSRuleArray& ruleArray) { - CFDE_CSSFontFaceRule* pFontFaceRule = NULL; - const FX_WCHAR* pszValue = NULL; - int32_t iValueLen = 0; - FDE_CSSPROPERTYARGS propertyArgs; - propertyArgs.pStaticStore = m_pAllocator; - propertyArgs.pStringCache = &m_StringCache; - propertyArgs.pProperty = NULL; - for (;;) { - switch (pSyntax->DoSyntaxParse()) { - case FDE_CSSSYNTAXSTATUS_PropertyName: - pszValue = pSyntax->GetCurrentString(iValueLen); - propertyArgs.pProperty = FDE_GetCSSPropertyByName(pszValue, iValueLen); - break; - case FDE_CSSSYNTAXSTATUS_PropertyValue: - if (propertyArgs.pProperty != NULL) { - pszValue = pSyntax->GetCurrentString(iValueLen); - if (iValueLen > 0) { - pFontFaceRule->GetDeclImp().AddProperty(&propertyArgs, pszValue, - iValueLen); - } - } - break; - case FDE_CSSSYNTAXSTATUS_DeclOpen: - if (pFontFaceRule == NULL) { - pFontFaceRule = FXTARGET_NewWith(m_pAllocator) CFDE_CSSFontFaceRule; - ruleArray.Add(pFontFaceRule); - } - break; - case FDE_CSSSYNTAXSTATUS_DeclClose: - return FDE_CSSSYNTAXSTATUS_None; - FDE_CSSSWITCHDEFAULTS(); - } - } - return FDE_CSSSYNTAXSTATUS_None; -} -FDE_CSSSYNTAXSTATUS CFDE_CSSStyleSheet::LoadImportRule( - IFDE_CSSSyntaxParser* pSyntax) { - for (;;) { - switch (pSyntax->DoSyntaxParse()) { - case FDE_CSSSYNTAXSTATUS_ImportClose: - return FDE_CSSSYNTAXSTATUS_None; - case FDE_CSSSYNTAXSTATUS_URI: - break; - FDE_CSSSWITCHDEFAULTS(); - } - } -} -FDE_CSSSYNTAXSTATUS CFDE_CSSStyleSheet::LoadPageRule( - IFDE_CSSSyntaxParser* pSyntax) { - return SkipRuleSet(pSyntax); -} -FDE_CSSSYNTAXSTATUS CFDE_CSSStyleSheet::SkipRuleSet( - IFDE_CSSSyntaxParser* pSyntax) { - for (;;) { - switch (pSyntax->DoSyntaxParse()) { - case FDE_CSSSYNTAXSTATUS_Selector: - case FDE_CSSSYNTAXSTATUS_DeclOpen: - case FDE_CSSSYNTAXSTATUS_PropertyName: - case FDE_CSSSYNTAXSTATUS_PropertyValue: - break; - case FDE_CSSSYNTAXSTATUS_DeclClose: - return FDE_CSSSYNTAXSTATUS_None; - FDE_CSSSWITCHDEFAULTS(); - } - } - return FDE_CSSSYNTAXSTATUS_None; -} -void CFDE_CSSStyleRule::SetSelector(IFX_MEMAllocator* pStaticStore, - const CFDE_CSSSelectorArray& list) { - FXSYS_assert(m_ppSelector == NULL); - m_iSelectors = list.GetSize(); - m_ppSelector = (IFDE_CSSSelector**)pStaticStore->Alloc( - m_iSelectors * sizeof(IFDE_CSSSelector*)); - for (int32_t i = 0; i < m_iSelectors; ++i) { - m_ppSelector[i] = list.GetAt(i); - } -} -CFDE_CSSMediaRule::~CFDE_CSSMediaRule() { - for (int32_t i = m_RuleArray.GetSize() - 1; i >= 0; --i) { - IFDE_CSSRule* pRule = m_RuleArray.GetAt(i); - switch (pRule->GetType()) { - case FDE_CSSRULETYPE_Style: - ((CFDE_CSSStyleRule*)pRule)->~CFDE_CSSStyleRule(); - break; - default: - FXSYS_assert(FALSE); - break; - } - } -} -inline FX_BOOL FDE_IsCSSChar(FX_WCHAR wch) { - return (wch >= 'a' && wch <= 'z') || (wch >= 'A' && wch <= 'Z'); -} -int32_t FDE_GetCSSPersudoLen(const FX_WCHAR* psz, const FX_WCHAR* pEnd) { - FXSYS_assert(*psz == ':'); - const FX_WCHAR* pStart = psz; - while (psz < pEnd) { - FX_WCHAR wch = *psz; - if (FDE_IsCSSChar(wch) || wch == ':') { - ++psz; - } else { - break; - } - } - return psz - pStart; -} -int32_t FDE_GetCSSNameLen(const FX_WCHAR* psz, const FX_WCHAR* pEnd) { - const FX_WCHAR* pStart = psz; - while (psz < pEnd) { - FX_WCHAR wch = *psz; - if (FDE_IsCSSChar(wch) || (wch >= '0' && wch <= '9') || wch == '_' || - wch == '-') { - ++psz; - } else { - break; - } - } - return psz - pStart; -} -IFDE_CSSSelector* CFDE_CSSSelector::FromString(IFX_MEMAllocator* pStaticStore, - const FX_WCHAR* psz, - int32_t iLen) { - FXSYS_assert(pStaticStore != NULL && psz != NULL && iLen > 0); - const FX_WCHAR* pStart = psz; - const FX_WCHAR* pEnd = psz + iLen; - for (; psz < pEnd; ++psz) { - switch (*psz) { - case '>': - case '[': - case '+': - return NULL; - } - } - CFDE_CSSSelector *pFirst = NULL, *pLast = NULL; - CFDE_CSSSelector *pPersudoFirst = NULL, *pPersudoLast = NULL; - for (psz = pStart; psz < pEnd;) { - FX_WCHAR wch = *psz; - if (wch == '.' || wch == '#') { - if (psz == pStart || psz[-1] == ' ') { - CFDE_CSSSelector* p = FXTARGET_NewWith(pStaticStore) - CFDE_CSSSelector(FDE_CSSSELECTORTYPE_Element, L"*", 1, TRUE); - if (p == NULL) { - return NULL; - } - if (pFirst != NULL) { - pFirst->SetType(FDE_CSSSELECTORTYPE_Descendant); - p->SetNext(pFirst); - } - pFirst = pLast = p; - } - FXSYS_assert(pLast != NULL); - int32_t iNameLen = FDE_GetCSSNameLen(++psz, pEnd); - if (iNameLen == 0) { - return NULL; - } - FDE_CSSSELECTORTYPE eType = - wch == '.' ? FDE_CSSSELECTORTYPE_Class : FDE_CSSSELECTORTYPE_ID; - CFDE_CSSSelector* p = FXTARGET_NewWith(pStaticStore) - CFDE_CSSSelector(eType, psz, iNameLen, FALSE); - if (p == NULL) { - return NULL; - } - p->SetNext(pLast->GetNextSelector()); - pLast->SetNext(p); - pLast = p; - psz += iNameLen; - } else if (FDE_IsCSSChar(wch) || wch == '*') { - int32_t iNameLen = wch == '*' ? 1 : FDE_GetCSSNameLen(psz, pEnd); - if (iNameLen == 0) { - return NULL; - } - CFDE_CSSSelector* p = FXTARGET_NewWith(pStaticStore) - CFDE_CSSSelector(FDE_CSSSELECTORTYPE_Element, psz, iNameLen, TRUE); - if (p == NULL) { - return NULL; - } - if (pFirst == NULL) { - pFirst = pLast = p; - } else { - pFirst->SetType(FDE_CSSSELECTORTYPE_Descendant); - p->SetNext(pFirst); - pFirst = pLast = p; - } - psz += iNameLen; - } else if (wch == ':') { - int32_t iNameLen = FDE_GetCSSPersudoLen(psz, pEnd); - if (iNameLen == 0) { - return NULL; - } - CFDE_CSSSelector* p = FXTARGET_NewWith(pStaticStore) - CFDE_CSSSelector(FDE_CSSSELECTORTYPE_Persudo, psz, iNameLen, TRUE); - if (p == NULL) { - return NULL; - } - if (pPersudoFirst == NULL) { - pPersudoFirst = pPersudoLast = p; - } else { - pPersudoLast->SetNext(p); - pPersudoLast = p; - } - psz += iNameLen; - } else if (wch == ' ') { - psz++; - } else { - return NULL; - } - } - if (pPersudoFirst == NULL) { - return pFirst; - } else { - pPersudoLast->SetNext(pFirst); - return pPersudoFirst; - } -} diff --git a/xfa/src/fde/css/fde_cssstylesheet.h b/xfa/src/fde/css/fde_cssstylesheet.h deleted file mode 100644 index 5e11c74b4e..0000000000 --- a/xfa/src/fde/css/fde_cssstylesheet.h +++ /dev/null @@ -1,141 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FDE_CSS_FDE_CSSSTYLESHEET_H_ -#define XFA_SRC_FDE_CSS_FDE_CSSSTYLESHEET_H_ - -#include "core/include/fxcrt/fx_ext.h" -#include "xfa/src/fde/css/fde_cssdeclaration.h" - -class CFDE_CSSSelector : public IFDE_CSSSelector, public CFX_Target { - public: - CFDE_CSSSelector(FDE_CSSSELECTORTYPE eType, - const FX_WCHAR* psz, - int32_t iLen, - FX_BOOL bIgnoreCase) - : m_eType(eType), - m_dwHash(FX_HashCode_String_GetW(psz, iLen, bIgnoreCase)), - m_pNext(NULL) {} - virtual FDE_CSSSELECTORTYPE GetType() const { return m_eType; } - - virtual FX_DWORD GetNameHash() const { return m_dwHash; } - - virtual IFDE_CSSSelector* GetNextSelector() const { return m_pNext; } - static IFDE_CSSSelector* FromString(IFX_MEMAllocator* pStaticStore, - const FX_WCHAR* psz, - int32_t iLen); - void SetNext(IFDE_CSSSelector* pNext) { m_pNext = pNext; } - - protected: - static CFDE_CSSSelector* ParseSelector(IFX_MEMAllocator* pStaticStore, - const FX_WCHAR* psz, - int32_t& iOff, - int32_t iLen, - FDE_CSSSELECTORTYPE eType); - void SetType(FDE_CSSSELECTORTYPE eType) { m_eType = eType; } - FDE_CSSSELECTORTYPE m_eType; - FX_DWORD m_dwHash; - IFDE_CSSSelector* m_pNext; -}; -typedef CFX_ArrayTemplate CFDE_CSSSelectorArray; -class CFDE_CSSStyleRule : public IFDE_CSSStyleRule, public CFX_Target { - public: - CFDE_CSSStyleRule() : m_ppSelector(NULL), m_iSelectors(0) {} - virtual int32_t CountSelectorLists() const { return m_iSelectors; } - virtual IFDE_CSSSelector* GetSelectorList(int32_t index) const { - return m_ppSelector[index]; - } - - virtual IFDE_CSSDeclaration* GetDeclaration() const { - return (IFDE_CSSDeclaration*)&m_Declaration; - } - CFDE_CSSDeclaration& GetDeclImp() { return m_Declaration; } - void SetSelector(IFX_MEMAllocator* pStaticStore, - const CFDE_CSSSelectorArray& list); - - protected: - CFDE_CSSDeclaration m_Declaration; - IFDE_CSSSelector** m_ppSelector; - int32_t m_iSelectors; -}; -class CFDE_CSSMediaRule : public IFDE_CSSMediaRule, public CFX_Target { - public: - CFDE_CSSMediaRule(FX_DWORD dwMediaList) : m_dwMediaList(dwMediaList) {} - ~CFDE_CSSMediaRule(); - - virtual FX_DWORD GetMediaList() const { return m_dwMediaList; } - - virtual int32_t CountRules() const { return m_RuleArray.GetSize(); } - virtual IFDE_CSSRule* GetRule(int32_t index) { - return m_RuleArray.GetAt(index); - } - CFDE_CSSRuleArray& GetArray() { return m_RuleArray; } - - protected: - FX_DWORD m_dwMediaList; - CFDE_CSSRuleArray m_RuleArray; -}; -class CFDE_CSSFontFaceRule : public IFDE_CSSFontFaceRule, public CFX_Target { - public: - virtual IFDE_CSSDeclaration* GetDeclaration() const { - return (IFDE_CSSDeclaration*)&m_Declaration; - } - CFDE_CSSDeclaration& GetDeclImp() { return m_Declaration; } - - protected: - CFDE_CSSDeclaration m_Declaration; -}; -#define FDE_CSSSWITCHDEFAULTS() \ - case FDE_CSSSYNTAXSTATUS_EOS: \ - return FDE_CSSSYNTAXSTATUS_EOS; \ - case FDE_CSSSYNTAXSTATUS_Error: \ - default: \ - return FDE_CSSSYNTAXSTATUS_Error; -class CFDE_CSSStyleSheet : public IFDE_CSSStyleSheet, public CFX_Target { - public: - CFDE_CSSStyleSheet(FX_DWORD dwMediaList); - ~CFDE_CSSStyleSheet(); - virtual FX_DWORD AddRef(); - virtual FX_DWORD Release(); - - virtual FX_BOOL GetUrl(CFX_WideString& szUrl) { - szUrl = m_szUrl; - return szUrl.GetLength() > 0; - } - virtual FX_DWORD GetMediaList() const { return m_dwMediaList; } - virtual FX_WORD GetCodePage() const { return m_wCodePage; } - virtual int32_t CountRules() const; - virtual IFDE_CSSRule* GetRule(int32_t index); - FX_BOOL LoadFromStream(const CFX_WideString& szUrl, - IFX_Stream* pStream, - FX_WORD wCodePage); - FX_BOOL LoadFromBuffer(const CFX_WideString& szUrl, - const FX_WCHAR* pBuffer, - int32_t iBufSize, - FX_WORD wCodePage); - - protected: - void Reset(); - FX_BOOL LoadFromSyntax(IFDE_CSSSyntaxParser* pSyntax); - FDE_CSSSYNTAXSTATUS LoadStyleRule(IFDE_CSSSyntaxParser* pSyntax, - CFDE_CSSRuleArray& ruleArray); - FDE_CSSSYNTAXSTATUS LoadImportRule(IFDE_CSSSyntaxParser* pSyntax); - FDE_CSSSYNTAXSTATUS LoadPageRule(IFDE_CSSSyntaxParser* pSyntax); - FDE_CSSSYNTAXSTATUS LoadMediaRule(IFDE_CSSSyntaxParser* pSyntax); - FDE_CSSSYNTAXSTATUS LoadFontFaceRule(IFDE_CSSSyntaxParser* pSyntax, - CFDE_CSSRuleArray& ruleArray); - FDE_CSSSYNTAXSTATUS SkipRuleSet(IFDE_CSSSyntaxParser* pSyntax); - FX_WORD m_wCodePage; - FX_WORD m_wRefCount; - FX_DWORD m_dwMediaList; - IFX_MEMAllocator* m_pAllocator; - CFDE_CSSRuleArray m_RuleArray; - CFX_WideString m_szUrl; - CFDE_CSSSelectorArray m_Selectors; - CFX_MapPtrToPtr m_StringCache; -}; - -#endif // XFA_SRC_FDE_CSS_FDE_CSSSTYLESHEET_H_ diff --git a/xfa/src/fde/css/fde_csssyntax.cpp b/xfa/src/fde/css/fde_csssyntax.cpp deleted file mode 100644 index 5fe502e8b9..0000000000 --- a/xfa/src/fde/css/fde_csssyntax.cpp +++ /dev/null @@ -1,487 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fde/css/fde_csssyntax.h" - -#include "xfa/src/fde/css/fde_cssdatatable.h" -#include "xfa/src/fgas/crt/fgas_codepage.h" - -#ifdef _cplusplus -extern "C" { -#endif - -inline FX_BOOL FDE_IsSelectorStart(FX_WCHAR wch) { - return wch == '.' || wch == '#' || wch == '*' || (wch >= 'a' && wch <= 'z') || - (wch >= 'A' && wch <= 'Z'); -} - -#ifdef _cplusplus -}; -#endif - -IFDE_CSSSyntaxParser* IFDE_CSSSyntaxParser::Create() { - return new CFDE_CSSSyntaxParser; -} -CFDE_CSSSyntaxParser::CFDE_CSSSyntaxParser() - : m_pStream(NULL), - m_iStreamPos(0), - m_iPlaneSize(0), - m_iTextDatLen(0), - m_dwCheck((FX_DWORD)-1), - m_eMode(FDE_CSSSYNTAXMODE_RuleSet), - m_eStatus(FDE_CSSSYNTAXSTATUS_None) {} -CFDE_CSSSyntaxParser::~CFDE_CSSSyntaxParser() { - m_TextData.Reset(); - m_TextPlane.Reset(); -} -FX_BOOL CFDE_CSSSyntaxParser::Init(IFX_Stream* pStream, - int32_t iCSSPlaneSize, - int32_t iTextDataSize, - FX_BOOL bOnlyDeclaration) { - FXSYS_assert(pStream != NULL && iCSSPlaneSize > 0 && iTextDataSize > 0); - Reset(bOnlyDeclaration); - if (!m_TextData.EstimateSize(iTextDataSize)) { - return FALSE; - } - uint8_t bom[4]; - m_pStream = pStream; - m_iStreamPos = m_pStream->GetBOM(bom); - m_iPlaneSize = iCSSPlaneSize; - return TRUE; -} -FX_BOOL CFDE_CSSSyntaxParser::Init(const FX_WCHAR* pBuffer, - int32_t iBufferSize, - int32_t iTextDatSize, - FX_BOOL bOnlyDeclaration) { - FXSYS_assert(pBuffer != NULL && iBufferSize > 0 && iTextDatSize > 0); - Reset(bOnlyDeclaration); - if (!m_TextData.EstimateSize(iTextDatSize)) { - return FALSE; - } - return m_TextPlane.AttachBuffer(pBuffer, iBufferSize); -} -void CFDE_CSSSyntaxParser::Reset(FX_BOOL bOnlyDeclaration) { - m_TextPlane.Reset(); - m_TextData.Reset(); - m_pStream = NULL; - m_iStreamPos = 0; - m_iTextDatLen = 0; - m_dwCheck = (FX_DWORD)-1; - m_eStatus = FDE_CSSSYNTAXSTATUS_None; - m_eMode = bOnlyDeclaration ? FDE_CSSSYNTAXMODE_PropertyName - : FDE_CSSSYNTAXMODE_RuleSet; -} -FDE_CSSSYNTAXSTATUS CFDE_CSSSyntaxParser::DoSyntaxParse() { - while (m_eStatus >= FDE_CSSSYNTAXSTATUS_None) { - if (m_TextPlane.IsEOF()) { - if (m_pStream == NULL) { - if (m_eMode == FDE_CSSSYNTAXMODE_PropertyValue && - m_TextData.GetLength() > 0) { - SaveTextData(); - return m_eStatus = FDE_CSSSYNTAXSTATUS_PropertyValue; - } - return m_eStatus = FDE_CSSSYNTAXSTATUS_EOS; - } - FX_BOOL bEOS; - int32_t iLen = m_TextPlane.LoadFromStream(m_pStream, m_iStreamPos, - m_iPlaneSize, bEOS); - m_iStreamPos = m_pStream->GetPosition(); - if (iLen < 1) { - if (m_eMode == FDE_CSSSYNTAXMODE_PropertyValue && - m_TextData.GetLength() > 0) { - SaveTextData(); - return m_eStatus = FDE_CSSSYNTAXSTATUS_PropertyValue; - } - return m_eStatus = FDE_CSSSYNTAXSTATUS_EOS; - } - } - FX_WCHAR wch; - while (!m_TextPlane.IsEOF()) { - wch = m_TextPlane.GetChar(); - switch (m_eMode) { - case FDE_CSSSYNTAXMODE_RuleSet: - switch (wch) { - case '@': - m_TextPlane.MoveNext(); - SwitchMode(FDE_CSSSYNTAXMODE_AtRule); - break; - case '}': - m_TextPlane.MoveNext(); - if (RestoreMode()) { - return FDE_CSSSYNTAXSTATUS_DeclClose; - } else { - return m_eStatus = FDE_CSSSYNTAXSTATUS_Error; - } - break; - case '/': - if (m_TextPlane.GetNextChar() == '*') { - m_ModeStack.Push(m_eMode); - SwitchMode(FDE_CSSSYNTAXMODE_Comment); - break; - } - default: - if (wch <= ' ') { - m_TextPlane.MoveNext(); - } else if (FDE_IsSelectorStart(wch)) { - SwitchMode(FDE_CSSSYNTAXMODE_Selector); - return FDE_CSSSYNTAXSTATUS_StyleRule; - } else { - return m_eStatus = FDE_CSSSYNTAXSTATUS_Error; - } - break; - } - break; - case FDE_CSSSYNTAXMODE_Selector: - switch (wch) { - case ',': - m_TextPlane.MoveNext(); - SwitchMode(FDE_CSSSYNTAXMODE_Selector); - if (m_iTextDatLen > 0) { - return FDE_CSSSYNTAXSTATUS_Selector; - } - break; - case '{': - if (m_TextData.GetLength() > 0) { - SaveTextData(); - return FDE_CSSSYNTAXSTATUS_Selector; - } else { - m_TextPlane.MoveNext(); - m_ModeStack.Push(FDE_CSSSYNTAXMODE_RuleSet); - SwitchMode(FDE_CSSSYNTAXMODE_PropertyName); - return FDE_CSSSYNTAXSTATUS_DeclOpen; - } - break; - case '/': - if (m_TextPlane.GetNextChar() == '*') { - if (SwitchToComment() > 0) { - return FDE_CSSSYNTAXSTATUS_Selector; - } - break; - } - default: - AppendChar(wch); - break; - } - break; - case FDE_CSSSYNTAXMODE_PropertyName: - switch (wch) { - case ':': - m_TextPlane.MoveNext(); - SwitchMode(FDE_CSSSYNTAXMODE_PropertyValue); - return FDE_CSSSYNTAXSTATUS_PropertyName; - case '}': - m_TextPlane.MoveNext(); - if (RestoreMode()) { - return FDE_CSSSYNTAXSTATUS_DeclClose; - } else { - return m_eStatus = FDE_CSSSYNTAXSTATUS_Error; - } - break; - case '/': - if (m_TextPlane.GetNextChar() == '*') { - if (SwitchToComment() > 0) { - return FDE_CSSSYNTAXSTATUS_PropertyName; - } - break; - } - default: - AppendChar(wch); - break; - } - break; - case FDE_CSSSYNTAXMODE_PropertyValue: - switch (wch) { - case ';': - m_TextPlane.MoveNext(); - case '}': - SwitchMode(FDE_CSSSYNTAXMODE_PropertyName); - return FDE_CSSSYNTAXSTATUS_PropertyValue; - case '/': - if (m_TextPlane.GetNextChar() == '*') { - if (SwitchToComment() > 0) { - return FDE_CSSSYNTAXSTATUS_PropertyValue; - } - break; - } - default: - AppendChar(wch); - break; - } - break; - case FDE_CSSSYNTAXMODE_Comment: - if (wch == '/' && m_TextData.GetLength() > 0 && - m_TextData.GetAt(m_TextData.GetLength() - 1) == '*') { - RestoreMode(); - } else { - m_TextData.AppendChar(wch); - } - m_TextPlane.MoveNext(); - break; - case FDE_CSSSYNTAXMODE_MediaType: - switch (wch) { - case ',': - m_TextPlane.MoveNext(); - SwitchMode(FDE_CSSSYNTAXMODE_MediaType); - if (m_iTextDatLen > 0) { - return FDE_CSSSYNTAXSTATUS_MediaType; - } - break; - case '{': { - FDE_CSSSYNTAXMODE* pMode = m_ModeStack.GetTopElement(); - if (pMode == NULL || *pMode != FDE_CSSSYNTAXMODE_MediaRule) { - return m_eStatus = FDE_CSSSYNTAXSTATUS_Error; - } - if (m_TextData.GetLength() > 0) { - SaveTextData(); - return FDE_CSSSYNTAXSTATUS_MediaType; - } else { - m_TextPlane.MoveNext(); - *pMode = FDE_CSSSYNTAXMODE_RuleSet; - SwitchMode(FDE_CSSSYNTAXMODE_RuleSet); - return FDE_CSSSYNTAXSTATUS_DeclOpen; - } - } break; - case ';': { - FDE_CSSSYNTAXMODE* pMode = m_ModeStack.GetTopElement(); - if (pMode == NULL || *pMode != FDE_CSSSYNTAXMODE_Import) { - return m_eStatus = FDE_CSSSYNTAXSTATUS_Error; - } - if (m_TextData.GetLength() > 0) { - SaveTextData(); - if (IsImportEnabled()) { - return FDE_CSSSYNTAXSTATUS_MediaType; - } - } else { - FX_BOOL bEnabled = IsImportEnabled(); - m_TextPlane.MoveNext(); - m_ModeStack.Pop(); - SwitchMode(FDE_CSSSYNTAXMODE_RuleSet); - if (bEnabled) { - DisableImport(); - return FDE_CSSSYNTAXSTATUS_ImportClose; - } - } - } break; - case '/': - if (m_TextPlane.GetNextChar() == '*') { - if (SwitchToComment() > 0) { - return FDE_CSSSYNTAXSTATUS_MediaType; - } - break; - } - default: - AppendChar(wch); - break; - } - break; - case FDE_CSSSYNTAXMODE_URI: { - FDE_CSSSYNTAXMODE* pMode = m_ModeStack.GetTopElement(); - if (pMode == NULL || *pMode != FDE_CSSSYNTAXMODE_Import) { - return m_eStatus = FDE_CSSSYNTAXSTATUS_Error; - } - if (wch <= ' ' || wch == ';') { - int32_t iURIStart, iURILength = m_TextData.GetLength(); - if (iURILength > 0 && - FDE_ParseCSSURI(m_TextData.GetBuffer(), iURILength, iURIStart, - iURILength)) { - m_TextData.Subtract(iURIStart, iURILength); - SwitchMode(FDE_CSSSYNTAXMODE_MediaType); - if (IsImportEnabled()) { - return FDE_CSSSYNTAXSTATUS_URI; - } else { - break; - } - } - } - AppendChar(wch); - } break; - case FDE_CSSSYNTAXMODE_AtRule: - if (wch > ' ') { - AppendChar(wch); - } else { - int32_t iLen = m_TextData.GetLength(); - const FX_WCHAR* psz = m_TextData.GetBuffer(); - if (FXSYS_wcsncmp(L"charset", psz, iLen) == 0) { - SwitchMode(FDE_CSSSYNTAXMODE_Charset); - } else if (FXSYS_wcsncmp(L"import", psz, iLen) == 0) { - m_ModeStack.Push(FDE_CSSSYNTAXMODE_Import); - SwitchMode(FDE_CSSSYNTAXMODE_URI); - if (IsImportEnabled()) { - return FDE_CSSSYNTAXSTATUS_ImportRule; - } else { - break; - } - } else if (FXSYS_wcsncmp(L"media", psz, iLen) == 0) { - m_ModeStack.Push(FDE_CSSSYNTAXMODE_MediaRule); - SwitchMode(FDE_CSSSYNTAXMODE_MediaType); - return FDE_CSSSYNTAXSTATUS_MediaRule; - } else if (FXSYS_wcsncmp(L"font-face", psz, iLen) == 0) { - SwitchMode(FDE_CSSSYNTAXMODE_Selector); - return FDE_CSSSYNTAXSTATUS_FontFaceRule; - } else if (FXSYS_wcsncmp(L"page", psz, iLen) == 0) { - SwitchMode(FDE_CSSSYNTAXMODE_Selector); - return FDE_CSSSYNTAXSTATUS_PageRule; - } else { - SwitchMode(FDE_CSSSYNTAXMODE_UnknownRule); - } - } - break; - case FDE_CSSSYNTAXMODE_Charset: - if (wch == ';') { - m_TextPlane.MoveNext(); - SwitchMode(FDE_CSSSYNTAXMODE_RuleSet); - if (IsCharsetEnabled()) { - DisableCharset(); - if (m_iTextDatLen > 0) { - if (m_pStream != NULL) { - FX_WORD wCodePage = FX_GetCodePageFormStringW( - m_TextData.GetBuffer(), m_iTextDatLen); - if (wCodePage < 0xFFFF && - m_pStream->GetCodePage() != wCodePage) { - m_pStream->SetCodePage(wCodePage); - } - } - return FDE_CSSSYNTAXSTATUS_Charset; - } - } - } else { - AppendChar(wch); - } - break; - case FDE_CSSSYNTAXMODE_UnknownRule: - if (wch == ';') { - SwitchMode(FDE_CSSSYNTAXMODE_RuleSet); - } - m_TextPlane.MoveNext(); - break; - default: - FXSYS_assert(FALSE); - break; - } - } - } - return m_eStatus; -} -FX_BOOL CFDE_CSSSyntaxParser::IsImportEnabled() const { - if ((m_dwCheck & FDE_CSSSYNTAXCHECK_AllowImport) == 0) { - return FALSE; - } - if (m_ModeStack.GetSize() > 1) { - return FALSE; - } - return TRUE; -} -inline FX_BOOL CFDE_CSSSyntaxParser::AppendChar(FX_WCHAR wch) { - m_TextPlane.MoveNext(); - if (m_TextData.GetLength() > 0 || wch > ' ') { - m_TextData.AppendChar(wch); - return TRUE; - } - return FALSE; -} -inline int32_t CFDE_CSSSyntaxParser::SaveTextData() { - m_iTextDatLen = m_TextData.TrimEnd(); - m_TextData.Clear(); - return m_iTextDatLen; -} -inline void CFDE_CSSSyntaxParser::SwitchMode(FDE_CSSSYNTAXMODE eMode) { - m_eMode = eMode; - SaveTextData(); -} -inline int32_t CFDE_CSSSyntaxParser::SwitchToComment() { - int32_t iLength = m_TextData.GetLength(); - m_ModeStack.Push(m_eMode); - SwitchMode(FDE_CSSSYNTAXMODE_Comment); - return iLength; -} -inline FX_BOOL CFDE_CSSSyntaxParser::RestoreMode() { - FDE_CSSSYNTAXMODE* pMode = m_ModeStack.GetTopElement(); - if (pMode == NULL) { - return FALSE; - } - SwitchMode(*pMode); - m_ModeStack.Pop(); - return TRUE; -} -const FX_WCHAR* CFDE_CSSSyntaxParser::GetCurrentString(int32_t& iLength) const { - iLength = m_iTextDatLen; - return m_TextData.GetBuffer(); -} -CFDE_CSSTextBuf::CFDE_CSSTextBuf() - : m_bExtBuf(FALSE), - m_pBuffer(NULL), - m_iBufLen(0), - m_iDatLen(0), - m_iDatPos(0) {} -CFDE_CSSTextBuf::~CFDE_CSSTextBuf() { - Reset(); -} -void CFDE_CSSTextBuf::Reset() { - if (!m_bExtBuf) { - FX_Free(m_pBuffer); - m_pBuffer = NULL; - } - m_iDatPos = m_iDatLen = m_iBufLen; -} -FX_BOOL CFDE_CSSTextBuf::AttachBuffer(const FX_WCHAR* pBuffer, - int32_t iBufLen) { - Reset(); - m_pBuffer = (FX_WCHAR*)pBuffer; - m_iDatLen = m_iBufLen = iBufLen; - return m_bExtBuf = TRUE; -} -FX_BOOL CFDE_CSSTextBuf::EstimateSize(int32_t iAllocSize) { - FXSYS_assert(iAllocSize > 0); - Clear(); - m_bExtBuf = FALSE; - return ExpandBuf(iAllocSize); -} -int32_t CFDE_CSSTextBuf::LoadFromStream(IFX_Stream* pTxtStream, - int32_t iStreamOffset, - int32_t iMaxChars, - FX_BOOL& bEOS) { - FXSYS_assert(iStreamOffset >= 0 && iMaxChars > 0); - Clear(); - m_bExtBuf = FALSE; - if (!ExpandBuf(iMaxChars)) { - return 0; - } - if (pTxtStream->GetPosition() != iStreamOffset) { - pTxtStream->Seek(FX_STREAMSEEK_Begin, iStreamOffset); - } - m_iDatLen = pTxtStream->ReadString(m_pBuffer, iMaxChars, bEOS); - return m_iDatLen; -} -FX_BOOL CFDE_CSSTextBuf::ExpandBuf(int32_t iDesiredSize) { - if (m_bExtBuf) { - return FALSE; - } - if (!m_pBuffer) { - m_pBuffer = FX_Alloc(FX_WCHAR, iDesiredSize); - } else if (m_iBufLen != iDesiredSize) { - m_pBuffer = FX_Realloc(FX_WCHAR, m_pBuffer, iDesiredSize); - } else { - return TRUE; - } - if (!m_pBuffer) { - m_iBufLen = 0; - return FALSE; - } - m_iBufLen = iDesiredSize; - return TRUE; -} -void CFDE_CSSTextBuf::Subtract(int32_t iStart, int32_t iLength) { - FXSYS_assert(iStart >= 0 && iLength > 0); - if (iLength > m_iDatLen - iStart) { - iLength = m_iDatLen - iStart; - } - if (iLength < 0) { - iLength = 0; - } else { - FXSYS_memmove(m_pBuffer, m_pBuffer + iStart, iLength * sizeof(FX_WCHAR)); - } - m_iDatLen = iLength; -} diff --git a/xfa/src/fde/css/fde_csssyntax.h b/xfa/src/fde/css/fde_csssyntax.h deleted file mode 100644 index dc7acdb3d5..0000000000 --- a/xfa/src/fde/css/fde_csssyntax.h +++ /dev/null @@ -1,119 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FDE_CSS_FDE_CSSSYNTAX_H_ -#define XFA_SRC_FDE_CSS_FDE_CSSSYNTAX_H_ - -#include "xfa/src/fde/css/fde_css.h" -#include "xfa/src/fgas/crt/fgas_memory.h" -#include "xfa/src/fgas/crt/fgas_stream.h" - -class CFDE_CSSTextBuf : public CFX_Target { - public: - CFDE_CSSTextBuf(); - ~CFDE_CSSTextBuf(); - FX_BOOL AttachBuffer(const FX_WCHAR* pBuffer, int32_t iBufLen); - FX_BOOL EstimateSize(int32_t iAllocSize); - int32_t LoadFromStream(IFX_Stream* pTxtStream, - int32_t iStreamOffset, - int32_t iMaxChars, - FX_BOOL& bEOS); - FX_BOOL AppendChar(FX_WCHAR wch) { - if (m_iDatLen >= m_iBufLen && !ExpandBuf(m_iBufLen * 2)) { - return FALSE; - } - return (m_pBuffer[m_iDatLen++] = wch), TRUE; - } - void Clear() { m_iDatPos = m_iDatLen = 0; } - void Reset(); - int32_t TrimEnd() { - while (m_iDatLen > 0 && m_pBuffer[m_iDatLen - 1] <= ' ') { - --m_iDatLen; - } - AppendChar(0); - return --m_iDatLen; - } - void Subtract(int32_t iStart, int32_t iLength); - FX_BOOL IsEOF() const { return m_iDatPos >= m_iDatLen; } - FX_WCHAR GetAt(int32_t index) const { return m_pBuffer[index]; } - FX_WCHAR GetChar() const { return m_pBuffer[m_iDatPos]; } - FX_WCHAR GetNextChar() const { - return (m_iDatPos + 1 >= m_iDatLen) ? 0 : m_pBuffer[m_iDatPos + 1]; - } - void MoveNext() { m_iDatPos++; } - int32_t GetLength() const { return m_iDatLen; } - const FX_WCHAR* GetBuffer() const { return m_pBuffer; } - - protected: - FX_BOOL ExpandBuf(int32_t iDesiredSize); - FX_BOOL m_bExtBuf; - FX_WCHAR* m_pBuffer; - int32_t m_iBufLen; - int32_t m_iDatLen; - int32_t m_iDatPos; -}; - -#define FDE_CSSSYNTAXCHECK_AllowCharset 1 -#define FDE_CSSSYNTAXCHECK_AllowImport 2 - -enum FDE_CSSSYNTAXMODE { - FDE_CSSSYNTAXMODE_RuleSet, - FDE_CSSSYNTAXMODE_Comment, - FDE_CSSSYNTAXMODE_AtRule, - FDE_CSSSYNTAXMODE_UnknownRule, - FDE_CSSSYNTAXMODE_Charset, - FDE_CSSSYNTAXMODE_Import, - FDE_CSSSYNTAXMODE_MediaRule, - FDE_CSSSYNTAXMODE_URI, - FDE_CSSSYNTAXMODE_MediaType, - FDE_CSSSYNTAXMODE_Selector, - FDE_CSSSYNTAXMODE_PropertyName, - FDE_CSSSYNTAXMODE_PropertyValue, -}; - -class CFDE_CSSSyntaxParser : public IFDE_CSSSyntaxParser, public CFX_Target { - public: - CFDE_CSSSyntaxParser(); - ~CFDE_CSSSyntaxParser(); - virtual void Release() { delete this; } - virtual FX_BOOL Init(IFX_Stream* pStream, - int32_t iCSSPlaneSize, - int32_t iTextDataSize = 32, - FX_BOOL bOnlyDeclaration = FALSE); - virtual FX_BOOL Init(const FX_WCHAR* pBuffer, - int32_t iBufferSize, - int32_t iTextDatSize = 32, - FX_BOOL bOnlyDeclaration = FALSE); - virtual FDE_CSSSYNTAXSTATUS DoSyntaxParse(); - virtual const FX_WCHAR* GetCurrentString(int32_t& iLength) const; - - protected: - void Reset(FX_BOOL bOnlyDeclaration); - void SwitchMode(FDE_CSSSYNTAXMODE eMode); - int32_t SwitchToComment(); - - FX_BOOL RestoreMode(); - FX_BOOL AppendChar(FX_WCHAR wch); - int32_t SaveTextData(); - FX_BOOL IsCharsetEnabled() const { - return (m_dwCheck & FDE_CSSSYNTAXCHECK_AllowCharset) != 0; - } - void DisableCharset() { m_dwCheck = FDE_CSSSYNTAXCHECK_AllowImport; } - FX_BOOL IsImportEnabled() const; - void DisableImport() { m_dwCheck = 0; } - IFX_Stream* m_pStream; - int32_t m_iStreamPos; - int32_t m_iPlaneSize; - CFDE_CSSTextBuf m_TextData; - CFDE_CSSTextBuf m_TextPlane; - int32_t m_iTextDatLen; - FX_DWORD m_dwCheck; - FDE_CSSSYNTAXMODE m_eMode; - FDE_CSSSYNTAXSTATUS m_eStatus; - CFX_StackTemplate m_ModeStack; -}; - -#endif // XFA_SRC_FDE_CSS_FDE_CSSSYNTAX_H_ diff --git a/xfa/src/fde/fde_brush.h b/xfa/src/fde/fde_brush.h deleted file mode 100644 index 00edeebe73..0000000000 --- a/xfa/src/fde/fde_brush.h +++ /dev/null @@ -1,150 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FDE_FDE_BRUSH_H_ -#define XFA_SRC_FDE_FDE_BRUSH_H_ - -#include "core/include/fxcrt/fx_system.h" -#include "core/include/fxge/fx_dib.h" - -class IFDE_Image; - -#define FDE_BRUSHTYPE_Unknown -1 -#define FDE_BRUSHTYPE_Solid 0 -#define FDE_BRUSHTYPE_Hatch 1 -#define FDE_BRUSHTYPE_Texture 2 -#define FDE_BRUSHTYPE_LinearGradient 3 -#define FDE_BRUSHTYPE_MAX 3 -#define FDE_WRAPMODE_Tile 0 -#define FDE_WRAPMODE_TileFlipX 1 -#define FDE_WRAPMODE_TileFlipY 2 -#define FDE_WRAPMODE_TileFlipXY 3 -#define FDE_WRAPMODE_Clamp 4 - -struct FDE_GRADIENTCOLOR { - FX_FLOAT pos; - FX_ARGB color; -}; -typedef CFX_ArrayTemplate CFDE_GradientColors; - -class IFDE_Brush { - public: - static IFDE_Brush* Create(int32_t iType); - virtual ~IFDE_Brush() {} - virtual void Release() = 0; - virtual int32_t GetType() const = 0; -}; - -class IFDE_SolidBrush : public IFDE_Brush { - public: - virtual FX_ARGB GetColor() const = 0; - virtual void SetColor(FX_ARGB color) = 0; - virtual const CFX_Matrix& GetMatrix() const = 0; - virtual void ResetMatrix() = 0; - virtual void TranslateMatrix(FX_FLOAT dx, FX_FLOAT dy) = 0; - virtual void RotateMatrix(FX_FLOAT fRadian) = 0; - virtual void ScaleMatrix(FX_FLOAT sx, FX_FLOAT sy) = 0; - virtual void ConcatMatrix(const CFX_Matrix& matrix) = 0; - virtual void SetMatrix(const CFX_Matrix& matrix) = 0; -}; - -#define FDE_HATCHSTYLE_Horizontal 0 -#define FDE_HATCHSTYLE_Vertical 1 -#define FDE_HATCHSTYLE_ForwardDiagonal 2 -#define FDE_HATCHSTYLE_BackwardDiagonal 3 -#define FDE_HATCHSTYLE_Cross 4 -#define FDE_HATCHSTYLE_DiagonalCross 5 -#define FDE_HATCHSTYLE_05Percent 6 -#define FDE_HATCHSTYLE_10Percent 7 -#define FDE_HATCHSTYLE_20Percent 8 -#define FDE_HATCHSTYLE_25Percent 9 -#define FDE_HATCHSTYLE_30Percent 10 -#define FDE_HATCHSTYLE_40Percent 11 -#define FDE_HATCHSTYLE_50Percent 12 -#define FDE_HATCHSTYLE_60Percent 13 -#define FDE_HATCHSTYLE_70Percent 14 -#define FDE_HATCHSTYLE_75Percent 15 -#define FDE_HATCHSTYLE_80Percent 16 -#define FDE_HATCHSTYLE_90Percent 17 -#define FDE_HATCHSTYLE_LightDownwardDiagonal 18 -#define FDE_HATCHSTYLE_LightUpwardDiagonal 19 -#define FDE_HATCHSTYLE_DarkDownwardDiagonal 20 -#define FDE_HATCHSTYLE_DarkUpwardDiagonal 21 -#define FDE_HATCHSTYLE_WideDownwardDiagonal 22 -#define FDE_HATCHSTYLE_WideUpwardDiagonal 23 -#define FDE_HATCHSTYLE_LightVertical 24 -#define FDE_HATCHSTYLE_LightHorizontal 25 -#define FDE_HATCHSTYLE_NarrowVertical 26 -#define FDE_HATCHSTYLE_NarrowHorizontal 27 -#define FDE_HATCHSTYLE_DarkVertical 28 -#define FDE_HATCHSTYLE_DarkHorizontal 29 -#define FDE_HATCHSTYLE_DashedDownwardDiagonal 30 -#define FDE_HATCHSTYLE_DashedUpwardDiagonal 31 -#define FDE_HATCHSTYLE_DashedHorizontal 32 -#define FDE_HATCHSTYLE_DashedVertical 33 -#define FDE_HATCHSTYLE_SmallConfetti 34 -#define FDE_HATCHSTYLE_LargeConfetti 35 -#define FDE_HATCHSTYLE_ZigZag 36 -#define FDE_HATCHSTYLE_Wave 37 -#define FDE_HATCHSTYLE_DiagonalBrick 38 -#define FDE_HATCHSTYLE_HorizontalBrick 39 -#define FDE_HATCHSTYLE_Weave 40 -#define FDE_HATCHSTYLE_Plaid 41 -#define FDE_HATCHSTYLE_Divot 42 -#define FDE_HATCHSTYLE_DottedGrid 43 -#define FDE_HATCHSTYLE_DottedDiamond 44 -#define FDE_HATCHSTYLE_Shingle 45 -#define FDE_HATCHSTYLE_Trellis 46 -#define FDE_HATCHSTYLE_Sphere 47 -#define FDE_HATCHSTYLE_SmallGrid 48 -#define FDE_HATCHSTYLE_SmallCheckerBoard 49 -#define FDE_HATCHSTYLE_LargeCheckerBoard 50 -#define FDE_HATCHSTYLE_OutlinedDiamond 51 -#define FDE_HATCHSTYLE_SolidDiamond 52 -#define FDE_HATCHSTYLE_Total 53 -#define FDE_HATCHSTYLE_LargeGrid FDE_HATCHSTYLE_Cross -#define FDE_HATCHSTYLE_Min FDE_HATCHSTYLE_Horizontal -#define FDE_HATCHSTYLE_Max (FDE_HATCHSTYLE_Total - 1) - -class IFDE_HatchBrush : public IFDE_Brush { - public: - virtual FX_ARGB GetColor(FX_BOOL bForegroundColor) const = 0; - virtual void SetColor(FX_ARGB color, FX_BOOL bForegroundColor) = 0; - virtual int32_t GetHatchStyle() const = 0; - virtual FX_BOOL SetHatchStyle(int32_t iHatchStyle) = 0; -}; - -class IFDE_TextureBrush : public IFDE_Brush { - public: - virtual IFDE_Image* GetImage() const = 0; - virtual void SetImage(IFDE_Image* pImage, FX_BOOL bAutoRelease) = 0; - virtual int32_t GetWrapMode() const = 0; - virtual void SetWrapMode(int32_t iWrapMode) = 0; -}; - -#define FDE_LINEARGRADIENTMODE_Horizontal 0 -#define FDE_LINEARGRADIENTMODE_Vertical 1 -#define FDE_LINEARGRADIENTMODE_ForwardDiagonal 2 -#define FDE_LINEARGRADIENTMODE_BackwardDiagonal 3 - -class IFDE_LinearGradientBrush : public IFDE_Brush { - public: - virtual void GetLinearPoints(CFX_PointF& startingPoint, - CFX_PointF& endingPoint) const = 0; - virtual void SetLinearPoints(const CFX_PointF& startingPoint, - const CFX_PointF& endingPoint) = 0; - virtual void GetLinearColors(FX_ARGB& startingColor, - FX_ARGB& endingColor) const = 0; - virtual void SetLinearColors(const FX_ARGB& startingColor, - const FX_ARGB& endingColor) = 0; - virtual int32_t CountGradientColors() const = 0; - virtual FX_BOOL GetGradientColors(CFDE_GradientColors& colors) const = 0; - virtual FX_BOOL SetGradientColors(const CFDE_GradientColors& colors) = 0; - virtual int32_t GetWrapMode() const = 0; - virtual void SetWrapMode(int32_t iWrapMode) = 0; -}; - -#endif // XFA_SRC_FDE_FDE_BRUSH_H_ diff --git a/xfa/src/fde/fde_devbasic.cpp b/xfa/src/fde/fde_devbasic.cpp deleted file mode 100644 index c119110846..0000000000 --- a/xfa/src/fde/fde_devbasic.cpp +++ /dev/null @@ -1,550 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fde/fde_devbasic.h" - -#include - -#include "xfa/src/fde/fde_brush.h" - -static const FDE_HATCHDATA gs_HatchBitmapData[FDE_HATCHSTYLE_Total] = { - {16, - 16, - { - 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - }}, - {16, - 16, - { - 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, - 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, - 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, - 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, - 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, - 0x80, 0x80, 0x00, 0x00, - }}, - {16, - 16, - { - 0x80, 0x80, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x20, 0x20, 0x00, 0x00, - 0x10, 0x10, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, - 0x02, 0x02, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, - 0x40, 0x40, 0x00, 0x00, 0x20, 0x20, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, - 0x08, 0x08, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, - 0x01, 0x01, 0x00, 0x00, - }}, - {16, - 16, - { - 0x01, 0x01, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, - 0x08, 0x08, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x20, 0x20, 0x00, 0x00, - 0x40, 0x40, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, - 0x02, 0x02, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, - 0x10, 0x10, 0x00, 0x00, 0x20, 0x20, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, - 0x80, 0x80, 0x00, 0x00, - }}, - {16, - 16, - { - 0xff, 0xff, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, - 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, - 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, - 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, - 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, - 0x80, 0x80, 0x00, 0x00, - }}, - {16, - 16, - { - 0x81, 0x81, 0x00, 0x00, 0x42, 0x42, 0x00, 0x00, 0x24, 0x24, 0x00, 0x00, - 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x24, 0x24, 0x00, 0x00, - 0x42, 0x42, 0x00, 0x00, 0x81, 0x81, 0x00, 0x00, 0x81, 0x81, 0x00, 0x00, - 0x42, 0x42, 0x00, 0x00, 0x24, 0x24, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, - 0x18, 0x18, 0x00, 0x00, 0x24, 0x24, 0x00, 0x00, 0x42, 0x42, 0x00, 0x00, - 0x81, 0x81, 0x00, 0x00, - }}, - {16, - 16, - { - 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - }}, - {16, - 16, - { - 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - }}, - {16, - 16, - { - 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x22, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x22, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - }}, - {16, - 16, - { - 0x88, 0x88, 0x00, 0x00, 0x22, 0x22, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, - 0x22, 0x22, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, 0x22, 0x22, 0x00, 0x00, - 0x88, 0x88, 0x00, 0x00, 0x22, 0x22, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, - 0x22, 0x22, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, 0x22, 0x22, 0x00, 0x00, - 0x88, 0x88, 0x00, 0x00, 0x22, 0x22, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, - 0x22, 0x22, 0x00, 0x00, - }}, - {16, - 16, - { - 0xaa, 0xaa, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0xaa, 0xaa, 0x00, 0x00, - 0x11, 0x11, 0x00, 0x00, 0xaa, 0xaa, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, - 0xaa, 0xaa, 0x00, 0x00, 0x11, 0x11, 0x00, 0x00, 0xaa, 0xaa, 0x00, 0x00, - 0x44, 0x44, 0x00, 0x00, 0xaa, 0xaa, 0x00, 0x00, 0x11, 0x11, 0x00, 0x00, - 0xaa, 0xaa, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0xaa, 0xaa, 0x00, 0x00, - 0x11, 0x11, 0x00, 0x00, - }}, - {16, - 16, - { - 0xaa, 0xaa, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0xaa, 0xaa, 0x00, 0x00, - 0x51, 0x51, 0x00, 0x00, 0xaa, 0xaa, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, - 0xaa, 0xaa, 0x00, 0x00, 0x15, 0x15, 0x00, 0x00, 0xaa, 0xaa, 0x00, 0x00, - 0x55, 0x55, 0x00, 0x00, 0xaa, 0xaa, 0x00, 0x00, 0x51, 0x51, 0x00, 0x00, - 0xaa, 0xaa, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0xaa, 0xaa, 0x00, 0x00, - 0x15, 0x15, 0x00, 0x00, - }}, - {16, - 16, - { - 0xaa, 0xaa, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0xaa, 0xaa, 0x00, 0x00, - 0x55, 0x55, 0x00, 0x00, 0xaa, 0xaa, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, - 0xaa, 0xaa, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0xaa, 0xaa, 0x00, 0x00, - 0x55, 0x55, 0x00, 0x00, 0xaa, 0xaa, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, - 0xaa, 0xaa, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0xaa, 0xaa, 0x00, 0x00, - 0x55, 0x55, 0x00, 0x00, - }}, - {16, - 16, - { - 0xee, 0xee, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0xbb, 0xbb, 0x00, 0x00, - 0x55, 0x55, 0x00, 0x00, 0xee, 0xee, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, - 0xbb, 0xbb, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0xee, 0xee, 0x00, 0x00, - 0x55, 0x55, 0x00, 0x00, 0xbb, 0xbb, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, - 0xee, 0xee, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0xbb, 0xbb, 0x00, 0x00, - 0x55, 0x55, 0x00, 0x00, - }}, - {16, - 16, - { - 0x77, 0x77, 0x00, 0x00, 0xdd, 0xdd, 0x00, 0x00, 0x77, 0x77, 0x00, 0x00, - 0xdd, 0xdd, 0x00, 0x00, 0x77, 0x77, 0x00, 0x00, 0xdd, 0xdd, 0x00, 0x00, - 0x77, 0x77, 0x00, 0x00, 0xdd, 0xdd, 0x00, 0x00, 0x77, 0x77, 0x00, 0x00, - 0xdd, 0xdd, 0x00, 0x00, 0x77, 0x77, 0x00, 0x00, 0xdd, 0xdd, 0x00, 0x00, - 0x77, 0x77, 0x00, 0x00, 0xdd, 0xdd, 0x00, 0x00, 0x77, 0x77, 0x00, 0x00, - 0xdd, 0xdd, 0x00, 0x00, - }}, - {16, - 16, - { - 0x77, 0x77, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xdd, 0xdd, 0x00, 0x00, - 0xff, 0xff, 0x00, 0x00, 0x77, 0x77, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, - 0xdd, 0xdd, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x77, 0x77, 0x00, 0x00, - 0xff, 0xff, 0x00, 0x00, 0xdd, 0xdd, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, - 0x77, 0x77, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xdd, 0xdd, 0x00, 0x00, - 0xff, 0xff, 0x00, 0x00, - }}, - {16, - 16, - { - 0xef, 0xef, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xfe, 0xfe, 0x00, 0x00, - 0xff, 0xff, 0x00, 0x00, 0xef, 0xef, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, - 0xfe, 0xfe, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xef, 0xef, 0x00, 0x00, - 0xff, 0xff, 0x00, 0x00, 0xfe, 0xfe, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, - 0xef, 0xef, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xfe, 0xfe, 0x00, 0x00, - 0xff, 0xff, 0x00, 0x00, - }}, - {16, - 16, - { - 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, - 0xf7, 0xf7, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, - 0xff, 0xff, 0x00, 0x00, 0x7f, 0x7f, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, - 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xf7, 0xf7, 0x00, 0x00, - 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, - 0x7f, 0x7f, 0x00, 0x00, - }}, - {16, - 16, - { - 0x88, 0x88, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x22, 0x22, 0x00, 0x00, - 0x11, 0x11, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, - 0x22, 0x22, 0x00, 0x00, 0x11, 0x11, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, - 0x44, 0x44, 0x00, 0x00, 0x22, 0x22, 0x00, 0x00, 0x11, 0x11, 0x00, 0x00, - 0x88, 0x88, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x22, 0x22, 0x00, 0x00, - 0x11, 0x11, 0x00, 0x00, - }}, - {16, - 16, - { - 0x11, 0x11, 0x00, 0x00, 0x22, 0x22, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, - 0x88, 0x88, 0x00, 0x00, 0x11, 0x11, 0x00, 0x00, 0x22, 0x22, 0x00, 0x00, - 0x44, 0x44, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, 0x11, 0x11, 0x00, 0x00, - 0x22, 0x22, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, - 0x11, 0x11, 0x00, 0x00, 0x22, 0x22, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, - 0x88, 0x88, 0x00, 0x00, - }}, - {16, - 16, - { - 0xcc, 0xcc, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x33, 0x33, 0x00, 0x00, - 0x99, 0x99, 0x00, 0x00, 0xcc, 0xcc, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, - 0x33, 0x33, 0x00, 0x00, 0x99, 0x99, 0x00, 0x00, 0xcc, 0xcc, 0x00, 0x00, - 0x66, 0x66, 0x00, 0x00, 0x33, 0x33, 0x00, 0x00, 0x99, 0x99, 0x00, 0x00, - 0xcc, 0xcc, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x33, 0x33, 0x00, 0x00, - 0x99, 0x99, 0x00, 0x00, - }}, - {16, - 16, - { - 0x33, 0x33, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0xcc, 0xcc, 0x00, 0x00, - 0x99, 0x99, 0x00, 0x00, 0x33, 0x33, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, - 0xcc, 0xcc, 0x00, 0x00, 0x99, 0x99, 0x00, 0x00, 0x33, 0x33, 0x00, 0x00, - 0x66, 0x66, 0x00, 0x00, 0xcc, 0xcc, 0x00, 0x00, 0x99, 0x99, 0x00, 0x00, - 0x33, 0x33, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0xcc, 0xcc, 0x00, 0x00, - 0x99, 0x99, 0x00, 0x00, - }}, - {16, - 16, - { - 0xc1, 0xc1, 0x00, 0x00, 0xe0, 0xe0, 0x00, 0x00, 0x70, 0x70, 0x00, 0x00, - 0x38, 0x38, 0x00, 0x00, 0x1c, 0x1c, 0x00, 0x00, 0x0e, 0x0e, 0x00, 0x00, - 0x07, 0x07, 0x00, 0x00, 0x83, 0x83, 0x00, 0x00, 0xc1, 0xc1, 0x00, 0x00, - 0xe0, 0xe0, 0x00, 0x00, 0x70, 0x70, 0x00, 0x00, 0x38, 0x38, 0x00, 0x00, - 0x1c, 0x1c, 0x00, 0x00, 0x0e, 0x0e, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, - 0x83, 0x83, 0x00, 0x00, - }}, - {16, - 16, - { - 0x83, 0x83, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, 0x0e, 0x0e, 0x00, 0x00, - 0x1c, 0x1c, 0x00, 0x00, 0x38, 0x38, 0x00, 0x00, 0x70, 0x70, 0x00, 0x00, - 0xe0, 0xe0, 0x00, 0x00, 0xc1, 0xc1, 0x00, 0x00, 0x83, 0x83, 0x00, 0x00, - 0x07, 0x07, 0x00, 0x00, 0x0e, 0x0e, 0x00, 0x00, 0x1c, 0x1c, 0x00, 0x00, - 0x38, 0x38, 0x00, 0x00, 0x70, 0x70, 0x00, 0x00, 0xe0, 0xe0, 0x00, 0x00, - 0xc1, 0xc1, 0x00, 0x00, - }}, - {16, - 16, - { - 0x88, 0x88, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, - 0x88, 0x88, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, - 0x88, 0x88, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, - 0x88, 0x88, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, - 0x88, 0x88, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, - 0x88, 0x88, 0x00, 0x00, - }}, - {16, - 16, - { - 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - }}, - {16, - 16, - { - 0x55, 0x55, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, - 0x55, 0x55, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, - 0x55, 0x55, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, - 0x55, 0x55, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, - 0x55, 0x55, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, - 0x55, 0x55, 0x00, 0x00, - }}, - {16, - 16, - { - 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - }}, - {16, - 16, - { - 0xcc, 0xcc, 0x00, 0x00, 0xcc, 0xcc, 0x00, 0x00, 0xcc, 0xcc, 0x00, 0x00, - 0xcc, 0xcc, 0x00, 0x00, 0xcc, 0xcc, 0x00, 0x00, 0xcc, 0xcc, 0x00, 0x00, - 0xcc, 0xcc, 0x00, 0x00, 0xcc, 0xcc, 0x00, 0x00, 0xcc, 0xcc, 0x00, 0x00, - 0xcc, 0xcc, 0x00, 0x00, 0xcc, 0xcc, 0x00, 0x00, 0xcc, 0xcc, 0x00, 0x00, - 0xcc, 0xcc, 0x00, 0x00, 0xcc, 0xcc, 0x00, 0x00, 0xcc, 0xcc, 0x00, 0x00, - 0xcc, 0xcc, 0x00, 0x00, - }}, - {16, - 16, - { - 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, - 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - }}, - {16, - 16, - { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, - 0x44, 0x44, 0x00, 0x00, 0x22, 0x22, 0x00, 0x00, 0x11, 0x11, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, - 0x22, 0x22, 0x00, 0x00, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - }}, - {16, - 16, - { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x00, 0x00, - 0x22, 0x22, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x00, 0x00, 0x22, 0x22, 0x00, 0x00, - 0x44, 0x44, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - }}, - {16, - 16, - { - 0xf0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xf0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - }}, - {16, - 16, - { - 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, - 0x80, 0x80, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, - 0x08, 0x08, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, - 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, - 0x08, 0x08, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, - 0x08, 0x08, 0x00, 0x00, - }}, - {16, - 16, - { - 0x80, 0x80, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, - 0x02, 0x02, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, - 0x20, 0x20, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, - 0x08, 0x08, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, - 0x10, 0x10, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x20, 0x20, 0x00, 0x00, - 0x04, 0x04, 0x00, 0x00, - }}, - {16, - 16, - { - 0xb1, 0xb1, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, - 0x1b, 0x1b, 0x00, 0x00, 0xd8, 0xd8, 0x00, 0x00, 0xc0, 0xc0, 0x00, 0x00, - 0x0c, 0x0c, 0x00, 0x00, 0x8d, 0x8d, 0x00, 0x00, 0xb1, 0xb1, 0x00, 0x00, - 0x30, 0x30, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x1b, 0x1b, 0x00, 0x00, - 0xd8, 0xd8, 0x00, 0x00, 0xc0, 0xc0, 0x00, 0x00, 0x0c, 0x0c, 0x00, 0x00, - 0x8d, 0x8d, 0x00, 0x00, - }}, - {16, - 16, - { - 0x81, 0x81, 0x00, 0x00, 0x42, 0x42, 0x00, 0x00, 0x24, 0x24, 0x00, 0x00, - 0x18, 0x18, 0x00, 0x00, 0x81, 0x81, 0x00, 0x00, 0x42, 0x42, 0x00, 0x00, - 0x24, 0x24, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x81, 0x81, 0x00, 0x00, - 0x42, 0x42, 0x00, 0x00, 0x24, 0x24, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, - 0x81, 0x81, 0x00, 0x00, 0x42, 0x42, 0x00, 0x00, 0x24, 0x24, 0x00, 0x00, - 0x18, 0x18, 0x00, 0x00, - }}, - {16, - 16, - { - 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x25, 0x25, 0x00, 0x00, - 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, - 0x25, 0x25, 0x00, 0x00, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x18, 0x18, 0x00, 0x00, 0x25, 0x25, 0x00, 0x00, 0xc0, 0xc0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x25, 0x25, 0x00, 0x00, - 0xc0, 0xc0, 0x00, 0x00, - }}, - {16, - 16, - { - 0x01, 0x01, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, - 0x08, 0x08, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x24, 0x24, 0x00, 0x00, - 0x42, 0x42, 0x00, 0x00, 0x81, 0x81, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, - 0x02, 0x02, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, - 0x18, 0x18, 0x00, 0x00, 0x24, 0x24, 0x00, 0x00, 0x42, 0x42, 0x00, 0x00, - 0x81, 0x81, 0x00, 0x00, - }}, - {16, - 16, - { - 0xff, 0xff, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, - 0x80, 0x80, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, - 0x08, 0x08, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, - 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, - 0xff, 0xff, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, - 0x08, 0x08, 0x00, 0x00, - }}, - {16, - 16, - { - 0x88, 0x88, 0x00, 0x00, 0x54, 0x54, 0x00, 0x00, 0x22, 0x22, 0x00, 0x00, - 0x45, 0x45, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, 0x14, 0x14, 0x00, 0x00, - 0x22, 0x22, 0x00, 0x00, 0x51, 0x51, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, - 0x54, 0x54, 0x00, 0x00, 0x22, 0x22, 0x00, 0x00, 0x45, 0x45, 0x00, 0x00, - 0x88, 0x88, 0x00, 0x00, 0x14, 0x14, 0x00, 0x00, 0x22, 0x22, 0x00, 0x00, - 0x51, 0x51, 0x00, 0x00, - }}, - {16, - 16, - { - 0xaa, 0xaa, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0xaa, 0xaa, 0x00, 0x00, - 0x55, 0x55, 0x00, 0x00, 0xf0, 0xf0, 0x00, 0x00, 0xf0, 0xf0, 0x00, 0x00, - 0xf0, 0xf0, 0x00, 0x00, 0xf0, 0xf0, 0x00, 0x00, 0xaa, 0xaa, 0x00, 0x00, - 0x55, 0x55, 0x00, 0x00, 0xaa, 0xaa, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, - 0xf0, 0xf0, 0x00, 0x00, 0xf0, 0xf0, 0x00, 0x00, 0xf0, 0xf0, 0x00, 0x00, - 0xf0, 0xf0, 0x00, 0x00, - }}, - {16, - 16, - { - 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, - 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, - 0x01, 0x01, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x10, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, - 0x80, 0x80, 0x00, 0x00, - }}, - {16, - 16, - { - 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - }}, - {16, - 16, - { - 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x22, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x22, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - }}, - {16, - 16, - { - 0x03, 0x03, 0x00, 0x00, 0x84, 0x84, 0x00, 0x00, 0x48, 0x48, 0x00, 0x00, - 0x30, 0x30, 0x00, 0x00, 0x0c, 0x0c, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, - 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, - 0x84, 0x84, 0x00, 0x00, 0x48, 0x48, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, - 0x0c, 0x0c, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, - 0x01, 0x01, 0x00, 0x00, - }}, - {16, - 16, - { - 0xff, 0xff, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, - 0x99, 0x99, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, - 0xff, 0xff, 0x00, 0x00, 0x99, 0x99, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, - 0x66, 0x66, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x99, 0x99, 0x00, 0x00, - 0xff, 0xff, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, - 0x99, 0x99, 0x00, 0x00, - }}, - {16, - 16, - { - 0x77, 0x77, 0x00, 0x00, 0x89, 0x89, 0x00, 0x00, 0x8f, 0x8f, 0x00, 0x00, - 0x8f, 0x8f, 0x00, 0x00, 0x77, 0x77, 0x00, 0x00, 0x98, 0x98, 0x00, 0x00, - 0xf8, 0xf8, 0x00, 0x00, 0xf8, 0xf8, 0x00, 0x00, 0x77, 0x77, 0x00, 0x00, - 0x89, 0x89, 0x00, 0x00, 0x8f, 0x8f, 0x00, 0x00, 0x8f, 0x8f, 0x00, 0x00, - 0x77, 0x77, 0x00, 0x00, 0x98, 0x98, 0x00, 0x00, 0xf8, 0xf8, 0x00, 0x00, - 0xf8, 0xf8, 0x00, 0x00, - }}, - {16, - 16, - { - 0xff, 0xff, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, - 0x88, 0x88, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, - 0x88, 0x88, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, - 0x88, 0x88, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, - 0xff, 0xff, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, - 0x88, 0x88, 0x00, 0x00, - }}, - {16, - 16, - { - 0x99, 0x99, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, - 0x99, 0x99, 0x00, 0x00, 0x99, 0x99, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, - 0x66, 0x66, 0x00, 0x00, 0x99, 0x99, 0x00, 0x00, 0x99, 0x99, 0x00, 0x00, - 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x99, 0x99, 0x00, 0x00, - 0x99, 0x99, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, - 0x99, 0x99, 0x00, 0x00, - }}, - {16, - 16, - { - 0xf0, 0xf0, 0x00, 0x00, 0xf0, 0xf0, 0x00, 0x00, 0xf0, 0xf0, 0x00, 0x00, - 0xf0, 0xf0, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, - 0x0f, 0x0f, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0xf0, 0xf0, 0x00, 0x00, - 0xf0, 0xf0, 0x00, 0x00, 0xf0, 0xf0, 0x00, 0x00, 0xf0, 0xf0, 0x00, 0x00, - 0x0f, 0x0f, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, - 0x0f, 0x0f, 0x00, 0x00, - }}, - {16, - 16, - { - 0x82, 0x82, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x28, 0x28, 0x00, 0x00, - 0x10, 0x10, 0x00, 0x00, 0x28, 0x28, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, - 0x82, 0x82, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x82, 0x82, 0x00, 0x00, - 0x44, 0x44, 0x00, 0x00, 0x28, 0x28, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, - 0x28, 0x28, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x82, 0x82, 0x00, 0x00, - 0x01, 0x01, 0x00, 0x00, - }}, - {16, - 16, - { - 0x10, 0x10, 0x00, 0x00, 0x38, 0x38, 0x00, 0x00, 0x7c, 0x7c, 0x00, 0x00, - 0xfe, 0xfe, 0x00, 0x00, 0x7c, 0x7c, 0x00, 0x00, 0x38, 0x38, 0x00, 0x00, - 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, - 0x38, 0x38, 0x00, 0x00, 0x7c, 0x7c, 0x00, 0x00, 0xfe, 0xfe, 0x00, 0x00, - 0x7c, 0x7c, 0x00, 0x00, 0x38, 0x38, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - }}, -}; -FDE_LPCHATCHDATA FDE_DEVGetHatchData(int32_t iHatchStyle) { - if (iHatchStyle < FDE_HATCHSTYLE_Min || iHatchStyle > FDE_HATCHSTYLE_Max) { - return NULL; - } - return &gs_HatchBitmapData[iHatchStyle]; -} diff --git a/xfa/src/fde/fde_devbasic.h b/xfa/src/fde/fde_devbasic.h deleted file mode 100644 index 6b27bebb0c..0000000000 --- a/xfa/src/fde/fde_devbasic.h +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FDE_FDE_DEVBASIC_H_ -#define XFA_SRC_FDE_FDE_DEVBASIC_H_ - -#include - -struct FDE_HATCHDATA { - int32_t iWidth; - int32_t iHeight; - uint8_t MaskBits[64]; -}; -typedef FDE_HATCHDATA const* FDE_LPCHATCHDATA; -FDE_LPCHATCHDATA FDE_DEVGetHatchData(int32_t iHatchStyle); - -#endif // XFA_SRC_FDE_FDE_DEVBASIC_H_ diff --git a/xfa/src/fde/fde_gedevice.cpp b/xfa/src/fde/fde_gedevice.cpp deleted file mode 100644 index 13ae1bb330..0000000000 --- a/xfa/src/fde/fde_gedevice.cpp +++ /dev/null @@ -1,573 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fde/fde_gedevice.h" - -#include - -#include "xfa/src/fde/fde_brush.h" -#include "xfa/src/fde/fde_devbasic.h" -#include "xfa/src/fde/fde_geobject.h" -#include "xfa/src/fde/fde_image.h" -#include "xfa/src/fde/fde_pen.h" - -FX_BOOL FDE_GetStockHatchMask(int32_t iHatchStyle, CFX_DIBitmap& hatchMask) { - FDE_LPCHATCHDATA pData = FDE_DEVGetHatchData(iHatchStyle); - if (!pData) { - return FALSE; - } - hatchMask.Create(pData->iWidth, pData->iHeight, FXDIB_1bppMask); - FXSYS_memcpy(hatchMask.GetBuffer(), pData->MaskBits, - hatchMask.GetPitch() * pData->iHeight); - return TRUE; -} - -IFDE_RenderDevice* IFDE_RenderDevice::Create(CFX_DIBitmap* pBitmap, - FX_BOOL bRgbByteOrder) { - if (pBitmap == NULL) { - return NULL; - } - CFX_FxgeDevice* pDevice = new CFX_FxgeDevice; - pDevice->Attach(pBitmap, 0, bRgbByteOrder); - return new CFDE_FxgeDevice(pDevice, TRUE); -} -IFDE_RenderDevice* IFDE_RenderDevice::Create(CFX_RenderDevice* pDevice) { - return pDevice ? new CFDE_FxgeDevice(pDevice, FALSE) : nullptr; -} -CFDE_FxgeDevice::CFDE_FxgeDevice(CFX_RenderDevice* pDevice, - FX_BOOL bOwnerDevice) - : m_pDevice(pDevice), - m_bOwnerDevice(bOwnerDevice), - m_pCharPos(NULL), - m_iCharCount(0) { - FXSYS_assert(pDevice != NULL); - FX_RECT rt = m_pDevice->GetClipBox(); - m_rtClip.Set((FX_FLOAT)rt.left, (FX_FLOAT)rt.top, (FX_FLOAT)rt.Width(), - (FX_FLOAT)rt.Height()); -} -CFDE_FxgeDevice::~CFDE_FxgeDevice() { - FX_Free(m_pCharPos); - if (m_bOwnerDevice) - delete m_pDevice; -} -int32_t CFDE_FxgeDevice::GetWidth() const { - return m_pDevice->GetWidth(); -} -int32_t CFDE_FxgeDevice::GetHeight() const { - return m_pDevice->GetHeight(); -} -FDE_HDEVICESTATE CFDE_FxgeDevice::SaveState() { - m_pDevice->SaveState(); - return NULL; -} -void CFDE_FxgeDevice::RestoreState(FDE_HDEVICESTATE hState) { - m_pDevice->RestoreState(); - const FX_RECT& rt = m_pDevice->GetClipBox(); - m_rtClip.Set((FX_FLOAT)rt.left, (FX_FLOAT)rt.top, (FX_FLOAT)rt.Width(), - (FX_FLOAT)rt.Height()); -} -FX_BOOL CFDE_FxgeDevice::SetClipRect(const CFX_RectF& rtClip) { - m_rtClip = rtClip; - return m_pDevice->SetClip_Rect(FX_RECT((int32_t)FXSYS_floor(rtClip.left), - (int32_t)FXSYS_floor(rtClip.top), - (int32_t)FXSYS_ceil(rtClip.right()), - (int32_t)FXSYS_ceil(rtClip.bottom()))); -} -const CFX_RectF& CFDE_FxgeDevice::GetClipRect() { - return m_rtClip; -} -FX_BOOL CFDE_FxgeDevice::SetClipPath(const IFDE_Path* pClip) { - return FALSE; -} -IFDE_Path* CFDE_FxgeDevice::GetClipPath() const { - return NULL; -} -FX_FLOAT CFDE_FxgeDevice::GetDpiX() const { - return 96; -} -FX_FLOAT CFDE_FxgeDevice::GetDpiY() const { - return 96; -} -FX_BOOL CFDE_FxgeDevice::DrawImage(CFX_DIBSource* pDib, - const CFX_RectF* pSrcRect, - const CFX_RectF& dstRect, - const CFX_Matrix* pImgMatrix, - const CFX_Matrix* pDevMatrix) { - FXSYS_assert(pDib != NULL); - CFX_RectF srcRect; - if (pSrcRect) { - srcRect = *pSrcRect; - } else { - srcRect.Set(0, 0, (FX_FLOAT)pDib->GetWidth(), (FX_FLOAT)pDib->GetHeight()); - } - if (srcRect.IsEmpty()) { - return FALSE; - } - CFX_Matrix dib2fxdev; - if (pImgMatrix) { - dib2fxdev = *pImgMatrix; - } else { - dib2fxdev.SetIdentity(); - } - dib2fxdev.a = dstRect.width; - dib2fxdev.d = -dstRect.height; - dib2fxdev.e = dstRect.left; - dib2fxdev.f = dstRect.bottom(); - if (pDevMatrix) { - dib2fxdev.Concat(*pDevMatrix); - } - void* handle = NULL; - m_pDevice->StartDIBits(pDib, 255, 0, (const CFX_Matrix*)&dib2fxdev, 0, - handle); - while (m_pDevice->ContinueDIBits(handle, NULL)) { - } - m_pDevice->CancelDIBits(handle); - return handle != NULL; -} -FX_BOOL CFDE_FxgeDevice::DrawString(IFDE_Brush* pBrush, - IFX_Font* pFont, - const FXTEXT_CHARPOS* pCharPos, - int32_t iCount, - FX_FLOAT fFontSize, - const CFX_Matrix* pMatrix) { - FXSYS_assert(pBrush != NULL && pFont != NULL && pCharPos != NULL && - iCount > 0); - CFX_FontCache* pCache = CFX_GEModule::Get()->GetFontCache(); - CFX_Font* pFxFont = (CFX_Font*)pFont->GetDevFont(); - switch (pBrush->GetType()) { - case FDE_BRUSHTYPE_Solid: { - FX_ARGB argb = ((IFDE_SolidBrush*)pBrush)->GetColor(); - if ((pFont->GetFontStyles() & FX_FONTSTYLE_Italic) != 0 && - !pFxFont->IsItalic()) { - FXTEXT_CHARPOS* pCP = (FXTEXT_CHARPOS*)pCharPos; - FX_FLOAT* pAM; - for (int32_t i = 0; i < iCount; ++i) { - static const FX_FLOAT mc = 0.267949f; - pAM = pCP->m_AdjustMatrix; - pAM[2] = mc * pAM[0] + pAM[2]; - pAM[3] = mc * pAM[1] + pAM[3]; - pCP++; - } - } - FXTEXT_CHARPOS* pCP = (FXTEXT_CHARPOS*)pCharPos; - IFX_Font* pCurFont = NULL; - IFX_Font* pSTFont = NULL; - FXTEXT_CHARPOS* pCurCP = NULL; - int32_t iCurCount = 0; -#if _FXM_PLATFORM_ != _FXM_PLATFORM_WINDOWS_ - FX_DWORD dwFontStyle = pFont->GetFontStyles(); - CFX_Font FxFont; - CFX_SubstFont SubstFxFont; - FxFont.SetSubstFont(&SubstFxFont); - SubstFxFont.m_Weight = dwFontStyle & FX_FONTSTYLE_Bold ? 700 : 400; - SubstFxFont.m_WeightCJK = SubstFxFont.m_Weight; - SubstFxFont.m_ItalicAngle = dwFontStyle & FX_FONTSTYLE_Italic ? -12 : 0; - SubstFxFont.m_bItlicCJK = !!(dwFontStyle & FX_FONTSTYLE_Italic); -#endif // _FXM_PLATFORM_ != _FXM_PLATFORM_WINDOWS_ - for (int32_t i = 0; i < iCount; ++i) { - pSTFont = pFont->GetSubstFont((int32_t)pCP->m_GlyphIndex); - pCP->m_GlyphIndex &= 0x00FFFFFF; - pCP->m_bFontStyle = FALSE; - if (pCurFont != pSTFont) { - if (pCurFont != NULL) { - pFxFont = (CFX_Font*)pCurFont->GetDevFont(); -#if _FXM_PLATFORM_ != _FXM_PLATFORM_WINDOWS_ - FxFont.SetFace(pFxFont->GetFace()); - m_pDevice->DrawNormalText(iCurCount, pCurCP, &FxFont, pCache, - -fFontSize, (const CFX_Matrix*)pMatrix, - argb, FXTEXT_CLEARTYPE); -#else - m_pDevice->DrawNormalText(iCurCount, pCurCP, pFxFont, pCache, - -fFontSize, (const CFX_Matrix*)pMatrix, - argb, FXTEXT_CLEARTYPE); -#endif // _FXM_PLATFORM_ != _FXM_PLATFORM_WINDOWS_ - } - pCurFont = pSTFont; - pCurCP = pCP; - iCurCount = 1; - } else { - iCurCount++; - } - pCP++; - } - if (pCurFont != NULL && iCurCount) { - pFxFont = (CFX_Font*)pCurFont->GetDevFont(); -#if _FXM_PLATFORM_ != _FXM_PLATFORM_WINDOWS_ - FxFont.SetFace(pFxFont->GetFace()); - FX_BOOL bRet = m_pDevice->DrawNormalText( - iCurCount, pCurCP, &FxFont, pCache, -fFontSize, - (const CFX_Matrix*)pMatrix, argb, FXTEXT_CLEARTYPE); - FxFont.SetSubstFont(nullptr); - FxFont.SetFace(nullptr); - return bRet; -#else - return m_pDevice->DrawNormalText(iCurCount, pCurCP, pFxFont, pCache, - -fFontSize, (const CFX_Matrix*)pMatrix, - argb, FXTEXT_CLEARTYPE); -#endif // _FXM_PLATFORM_ != _FXM_PLATFORM_WINDOWS_ - } -#if _FXM_PLATFORM_ != _FXM_PLATFORM_WINDOWS_ - FxFont.SetSubstFont(nullptr); - FxFont.SetFace(nullptr); -#endif // _FXM_PLATFORM_ != _FXM_PLATFORM_WINDOWS_ - return TRUE; - } break; - default: - return FALSE; - } -} -FX_BOOL CFDE_FxgeDevice::DrawBezier(IFDE_Pen* pPen, - FX_FLOAT fPenWidth, - const CFX_PointF& pt1, - const CFX_PointF& pt2, - const CFX_PointF& pt3, - const CFX_PointF& pt4, - const CFX_Matrix* pMatrix) { - CFX_PointsF points; - points.Add(pt1); - points.Add(pt2); - points.Add(pt3); - points.Add(pt4); - CFDE_Path path; - path.AddBezier(points); - return DrawPath(pPen, fPenWidth, &path, pMatrix); -} -FX_BOOL CFDE_FxgeDevice::DrawCurve(IFDE_Pen* pPen, - FX_FLOAT fPenWidth, - const CFX_PointsF& points, - FX_BOOL bClosed, - FX_FLOAT fTension, - const CFX_Matrix* pMatrix) { - CFDE_Path path; - path.AddCurve(points, bClosed, fTension); - return DrawPath(pPen, fPenWidth, &path, pMatrix); -} -FX_BOOL CFDE_FxgeDevice::DrawEllipse(IFDE_Pen* pPen, - FX_FLOAT fPenWidth, - const CFX_RectF& rect, - const CFX_Matrix* pMatrix) { - CFDE_Path path; - path.AddEllipse(rect); - return DrawPath(pPen, fPenWidth, &path, pMatrix); -} -FX_BOOL CFDE_FxgeDevice::DrawLines(IFDE_Pen* pPen, - FX_FLOAT fPenWidth, - const CFX_PointsF& points, - const CFX_Matrix* pMatrix) { - CFDE_Path path; - path.AddLines(points); - return DrawPath(pPen, fPenWidth, &path, pMatrix); -} -FX_BOOL CFDE_FxgeDevice::DrawLine(IFDE_Pen* pPen, - FX_FLOAT fPenWidth, - const CFX_PointF& pt1, - const CFX_PointF& pt2, - const CFX_Matrix* pMatrix) { - CFDE_Path path; - path.AddLine(pt1, pt2); - return DrawPath(pPen, fPenWidth, &path, pMatrix); -} -FX_BOOL CFDE_FxgeDevice::DrawPath(IFDE_Pen* pPen, - FX_FLOAT fPenWidth, - const IFDE_Path* pPath, - const CFX_Matrix* pMatrix) { - CFDE_Path* pGePath = (CFDE_Path*)pPath; - if (pGePath == NULL) { - return FALSE; - } - CFX_GraphStateData graphState; - if (!CreatePen(pPen, fPenWidth, graphState)) { - return FALSE; - } - return m_pDevice->DrawPath(&pGePath->m_Path, (const CFX_Matrix*)pMatrix, - &graphState, 0, pPen->GetColor(), 0); -} -FX_BOOL CFDE_FxgeDevice::DrawPolygon(IFDE_Pen* pPen, - FX_FLOAT fPenWidth, - const CFX_PointsF& points, - const CFX_Matrix* pMatrix) { - CFDE_Path path; - path.AddPolygon(points); - return DrawPath(pPen, fPenWidth, &path, pMatrix); -} -FX_BOOL CFDE_FxgeDevice::DrawRectangle(IFDE_Pen* pPen, - FX_FLOAT fPenWidth, - const CFX_RectF& rect, - const CFX_Matrix* pMatrix) { - CFDE_Path path; - path.AddRectangle(rect); - return DrawPath(pPen, fPenWidth, &path, pMatrix); -} -FX_BOOL CFDE_FxgeDevice::FillClosedCurve(IFDE_Brush* pBrush, - const CFX_PointsF& points, - FX_FLOAT fTension, - const CFX_Matrix* pMatrix) { - CFDE_Path path; - path.AddCurve(points, TRUE, fTension); - return FillPath(pBrush, &path, pMatrix); -} -FX_BOOL CFDE_FxgeDevice::FillEllipse(IFDE_Brush* pBrush, - const CFX_RectF& rect, - const CFX_Matrix* pMatrix) { - CFDE_Path path; - path.AddEllipse(rect); - return FillPath(pBrush, &path, pMatrix); -} -FX_BOOL CFDE_FxgeDevice::FillPolygon(IFDE_Brush* pBrush, - const CFX_PointsF& points, - const CFX_Matrix* pMatrix) { - CFDE_Path path; - path.AddPolygon(points); - return FillPath(pBrush, &path, pMatrix); -} -FX_BOOL CFDE_FxgeDevice::FillRectangle(IFDE_Brush* pBrush, - const CFX_RectF& rect, - const CFX_Matrix* pMatrix) { - CFDE_Path path; - path.AddRectangle(rect); - return FillPath(pBrush, &path, pMatrix); -} -FX_BOOL CFDE_FxgeDevice::CreatePen(IFDE_Pen* pPen, - FX_FLOAT fPenWidth, - CFX_GraphStateData& graphState) { - if (pPen == NULL) { - return FALSE; - } - graphState.m_LineCap = (CFX_GraphStateData::LineCap)pPen->GetLineCap(); - graphState.m_LineJoin = (CFX_GraphStateData::LineJoin)pPen->GetLineJoin(); - graphState.m_LineWidth = fPenWidth; - graphState.m_MiterLimit = pPen->GetMiterLimit(); - graphState.m_DashPhase = pPen->GetDashPhase(); - CFX_FloatArray dashArray; - switch (pPen->GetDashStyle()) { - case FDE_DASHSTYLE_Dash: - dashArray.Add(3); - dashArray.Add(1); - break; - case FDE_DASHSTYLE_Dot: - dashArray.Add(1); - dashArray.Add(1); - break; - case FDE_DASHSTYLE_DashDot: - dashArray.Add(3); - dashArray.Add(1); - dashArray.Add(1); - dashArray.Add(1); - break; - case FDE_DASHSTYLE_DashDotDot: - dashArray.Add(3); - dashArray.Add(1); - dashArray.Add(1); - dashArray.Add(1); - dashArray.Add(1); - dashArray.Add(1); - break; - case FDE_DASHSTYLE_Customized: - pPen->GetDashArray(dashArray); - break; - } - int32_t iDashCount = dashArray.GetSize(); - if (iDashCount > 0) { - graphState.SetDashCount(iDashCount); - for (int32_t i = 0; i < iDashCount; ++i) { - graphState.m_DashArray[i] = dashArray[i] * fPenWidth; - } - } - return TRUE; -} -typedef FX_BOOL (CFDE_FxgeDevice::*pfFillPath)(IFDE_Brush* pBrush, - const CFX_PathData* pPath, - const CFX_Matrix* pMatrix); -static const pfFillPath gs_FillPath[] = { - &CFDE_FxgeDevice::FillSolidPath, &CFDE_FxgeDevice::FillHatchPath, - &CFDE_FxgeDevice::FillTexturePath, &CFDE_FxgeDevice::FillLinearGradientPath, -}; -FX_BOOL CFDE_FxgeDevice::FillPath(IFDE_Brush* pBrush, - const IFDE_Path* pPath, - const CFX_Matrix* pMatrix) { - CFDE_Path* pGePath = (CFDE_Path*)pPath; - if (pGePath == NULL) { - return FALSE; - } - if (pBrush == NULL) { - return FALSE; - } - int32_t iType = pBrush->GetType(); - if (iType < 0 || iType > FDE_BRUSHTYPE_MAX) { - return FALSE; - } - return (this->*gs_FillPath[iType])(pBrush, &pGePath->m_Path, pMatrix); -} -FX_BOOL CFDE_FxgeDevice::FillSolidPath(IFDE_Brush* pBrush, - const CFX_PathData* pPath, - const CFX_Matrix* pMatrix) { - FXSYS_assert(pPath && pBrush && pBrush->GetType() == FDE_BRUSHTYPE_Solid); - IFDE_SolidBrush* pSolidBrush = (IFDE_SolidBrush*)pBrush; - return m_pDevice->DrawPath(pPath, (const CFX_Matrix*)pMatrix, NULL, - pSolidBrush->GetColor(), 0, FXFILL_WINDING); -} -FX_BOOL CFDE_FxgeDevice::FillHatchPath(IFDE_Brush* pBrush, - const CFX_PathData* pPath, - const CFX_Matrix* pMatrix) { - FXSYS_assert(pPath && pBrush && pBrush->GetType() == FDE_BRUSHTYPE_Hatch); - IFDE_HatchBrush* pHatchBrush = (IFDE_HatchBrush*)pBrush; - int32_t iStyle = pHatchBrush->GetHatchStyle(); - if (iStyle < FDE_HATCHSTYLE_Min || iStyle > FDE_HATCHSTYLE_Max) { - return FALSE; - } - CFX_DIBitmap mask; - if (!FDE_GetStockHatchMask(iStyle, mask)) { - return FALSE; - } - FX_ARGB dwForeColor = pHatchBrush->GetColor(TRUE); - FX_ARGB dwBackColor = pHatchBrush->GetColor(FALSE); - CFX_FloatRect rectf = pPath->GetBoundingBox(); - if (pMatrix) { - rectf.Transform((const CFX_Matrix*)pMatrix); - } - FX_RECT rect(FXSYS_round(rectf.left), FXSYS_round(rectf.top), - FXSYS_round(rectf.right), FXSYS_round(rectf.bottom)); - m_pDevice->SaveState(); - m_pDevice->StartRendering(); - m_pDevice->SetClip_PathFill(pPath, (const CFX_Matrix*)pMatrix, - FXFILL_WINDING); - m_pDevice->FillRect(&rect, dwBackColor); - for (int32_t j = rect.bottom; j < rect.top; j += mask.GetHeight()) - for (int32_t i = rect.left; i < rect.right; i += mask.GetWidth()) { - m_pDevice->SetBitMask(&mask, i, j, dwForeColor); - } - m_pDevice->EndRendering(); - m_pDevice->RestoreState(); - return TRUE; -} -FX_BOOL CFDE_FxgeDevice::FillTexturePath(IFDE_Brush* pBrush, - const CFX_PathData* pPath, - const CFX_Matrix* pMatrix) { - FXSYS_assert(pPath && pBrush && pBrush->GetType() == FDE_BRUSHTYPE_Texture); - IFDE_TextureBrush* pTextureBrush = static_cast(pBrush); - IFDE_Image* pImage = pTextureBrush->GetImage(); - if (!pImage) - return FALSE; - - CFX_Size size(pImage->GetImageWidth(), pImage->GetImageHeight()); - CFX_DIBitmap bmp; - bmp.Create(size.x, size.y, FXDIB_Argb); - if (!pImage->StartLoadImage(&bmp, 0, 0, size.x, size.y, 0, 0, size.x, - size.y)) { - return FALSE; - } - if (pImage->DoLoadImage() < 100) { - return FALSE; - } - pImage->StopLoadImage(); - return WrapTexture(pTextureBrush->GetWrapMode(), &bmp, pPath, pMatrix); -} -FX_BOOL CFDE_FxgeDevice::WrapTexture(int32_t iWrapMode, - const CFX_DIBitmap* pBitmap, - const CFX_PathData* pPath, - const CFX_Matrix* pMatrix) { - CFX_FloatRect rectf = pPath->GetBoundingBox(); - if (pMatrix) { - rectf.Transform((const CFX_Matrix*)pMatrix); - } - FX_RECT rect(FXSYS_round(rectf.left), FXSYS_round(rectf.top), - FXSYS_round(rectf.right), FXSYS_round(rectf.bottom)); - rect.Normalize(); - if (rect.IsEmpty()) { - return FALSE; - } - m_pDevice->SaveState(); - m_pDevice->StartRendering(); - m_pDevice->SetClip_PathFill(pPath, (const CFX_Matrix*)pMatrix, - FXFILL_WINDING); - switch (iWrapMode) { - case FDE_WRAPMODE_Tile: - case FDE_WRAPMODE_TileFlipX: - case FDE_WRAPMODE_TileFlipY: - case FDE_WRAPMODE_TileFlipXY: { - FX_BOOL bFlipX = iWrapMode == FDE_WRAPMODE_TileFlipXY || - iWrapMode == FDE_WRAPMODE_TileFlipX; - FX_BOOL bFlipY = iWrapMode == FDE_WRAPMODE_TileFlipXY || - iWrapMode == FDE_WRAPMODE_TileFlipY; - const CFX_DIBitmap* pFlip[2][2]; - pFlip[0][0] = pBitmap; - pFlip[0][1] = bFlipX ? pBitmap->FlipImage(TRUE, FALSE) : pBitmap; - pFlip[1][0] = bFlipY ? pBitmap->FlipImage(FALSE, TRUE) : pBitmap; - pFlip[1][1] = - (bFlipX || bFlipY) ? pBitmap->FlipImage(bFlipX, bFlipY) : pBitmap; - int32_t iCounterY = 0; - for (int32_t j = rect.top; j < rect.bottom; j += pBitmap->GetHeight()) { - int32_t indexY = iCounterY++ % 2; - int32_t iCounterX = 0; - for (int32_t i = rect.left; i < rect.right; i += pBitmap->GetWidth()) { - int32_t indexX = iCounterX++ % 2; - m_pDevice->SetDIBits(pFlip[indexY][indexX], i, j); - } - } - if (pFlip[0][1] != pFlip[0][0]) { - delete pFlip[0][1]; - } - if (pFlip[1][0] != pFlip[0][0]) { - delete pFlip[1][0]; - } - if (pFlip[1][1] != pFlip[0][0]) { - delete pFlip[1][1]; - } - } break; - case FDE_WRAPMODE_Clamp: { - m_pDevice->SetDIBits(pBitmap, rect.left, rect.bottom); - } break; - } - m_pDevice->EndRendering(); - m_pDevice->RestoreState(); - return TRUE; -} -FX_BOOL CFDE_FxgeDevice::FillLinearGradientPath(IFDE_Brush* pBrush, - const CFX_PathData* pPath, - const CFX_Matrix* pMatrix) { - FXSYS_assert(pPath && pBrush && - pBrush->GetType() == FDE_BRUSHTYPE_LinearGradient); - IFDE_LinearGradientBrush* pLinearBrush = (IFDE_LinearGradientBrush*)pBrush; - CFX_PointF pt0, pt1; - pLinearBrush->GetLinearPoints(pt0, pt1); - CFX_VectorF fDiagonal(pt0, pt1); - FX_FLOAT fTheta = FXSYS_atan2(fDiagonal.y, fDiagonal.x); - FX_FLOAT fLength = fDiagonal.Length(); - FX_FLOAT fTotalX = fLength / FXSYS_cos(fTheta); - FX_FLOAT fTotalY = fLength / FXSYS_cos(FX_PI / 2 - fTheta); - FX_FLOAT fSteps = std::max(fTotalX, fTotalY); - FX_FLOAT dx = fTotalX / fSteps; - FX_FLOAT dy = fTotalY / fSteps; - FX_ARGB cr0, cr1; - pLinearBrush->GetLinearColors(cr0, cr1); - FX_FLOAT a0 = FXARGB_A(cr0); - FX_FLOAT r0 = FXARGB_R(cr0); - FX_FLOAT g0 = FXARGB_G(cr0); - FX_FLOAT b0 = FXARGB_B(cr0); - FX_FLOAT da = (FXARGB_A(cr1) - a0) / fSteps; - FX_FLOAT dr = (FXARGB_R(cr1) - r0) / fSteps; - FX_FLOAT dg = (FXARGB_G(cr1) - g0) / fSteps; - FX_FLOAT db = (FXARGB_B(cr1) - b0) / fSteps; - CFX_DIBitmap bmp; - bmp.Create(FXSYS_round(FXSYS_fabs(fDiagonal.x)), - FXSYS_round(FXSYS_fabs(fDiagonal.y)), FXDIB_Argb); - CFX_FxgeDevice dev; - dev.Attach(&bmp); - pt1 = pt0; - int32_t iSteps = FXSYS_round(FXSYS_ceil(fSteps)); - while (--iSteps >= 0) { - cr0 = ArgbEncode(FXSYS_round(a0), FXSYS_round(r0), FXSYS_round(g0), - FXSYS_round(b0)); - dev.DrawCosmeticLine(pt0.x, pt0.y, pt1.x, pt1.y, cr0); - pt1.x += dx; - pt0.y += dy; - a0 += da; - r0 += dr; - g0 += dg; - b0 += db; - } - return WrapTexture(pLinearBrush->GetWrapMode(), &bmp, pPath, pMatrix); -} diff --git a/xfa/src/fde/fde_gedevice.h b/xfa/src/fde/fde_gedevice.h deleted file mode 100644 index fa91ab151a..0000000000 --- a/xfa/src/fde/fde_gedevice.h +++ /dev/null @@ -1,136 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FDE_FDE_GEDEVICE_H_ -#define XFA_SRC_FDE_FDE_GEDEVICE_H_ - -#include "xfa/src/fde/fde_renderdevice.h" -#include "xfa/src/fgas/crt/fgas_memory.h" - -class CFDE_FxgeDevice : public IFDE_RenderDevice, public CFX_Target { - public: - CFDE_FxgeDevice(CFX_RenderDevice* pDevice, FX_BOOL bOwnerDevice); - ~CFDE_FxgeDevice(); - virtual void Release() { delete this; } - - virtual int32_t GetWidth() const; - virtual int32_t GetHeight() const; - virtual FDE_HDEVICESTATE SaveState(); - virtual void RestoreState(FDE_HDEVICESTATE hState); - virtual FX_BOOL SetClipPath(const IFDE_Path* pClip); - virtual IFDE_Path* GetClipPath() const; - virtual FX_BOOL SetClipRect(const CFX_RectF& rtClip); - virtual const CFX_RectF& GetClipRect(); - - virtual FX_FLOAT GetDpiX() const; - virtual FX_FLOAT GetDpiY() const; - - virtual FX_BOOL DrawImage(CFX_DIBSource* pDib, - const CFX_RectF* pSrcRect, - const CFX_RectF& dstRect, - const CFX_Matrix* pImgMatrix = NULL, - const CFX_Matrix* pDevMatrix = NULL); - virtual FX_BOOL DrawString(IFDE_Brush* pBrush, - IFX_Font* pFont, - const FXTEXT_CHARPOS* pCharPos, - int32_t iCount, - FX_FLOAT fFontSize, - const CFX_Matrix* pMatrix = NULL); - virtual FX_BOOL DrawBezier(IFDE_Pen* pPen, - FX_FLOAT fPenWidth, - const CFX_PointF& pt1, - const CFX_PointF& pt2, - const CFX_PointF& pt3, - const CFX_PointF& pt4, - const CFX_Matrix* pMatrix = NULL); - virtual FX_BOOL DrawCurve(IFDE_Pen* pPen, - FX_FLOAT fPenWidth, - const CFX_PointsF& points, - FX_BOOL bClosed, - FX_FLOAT fTension = 0.5f, - const CFX_Matrix* pMatrix = NULL); - virtual FX_BOOL DrawEllipse(IFDE_Pen* pPen, - FX_FLOAT fPenWidth, - const CFX_RectF& rect, - const CFX_Matrix* pMatrix = NULL); - virtual FX_BOOL DrawLines(IFDE_Pen* pPen, - FX_FLOAT fPenWidth, - const CFX_PointsF& points, - const CFX_Matrix* pMatrix = NULL); - virtual FX_BOOL DrawLine(IFDE_Pen* pPen, - FX_FLOAT fPenWidth, - const CFX_PointF& pt1, - const CFX_PointF& pt2, - const CFX_Matrix* pMatrix = NULL); - virtual FX_BOOL DrawPath(IFDE_Pen* pPen, - FX_FLOAT fPenWidth, - const IFDE_Path* pPath, - const CFX_Matrix* pMatrix = NULL); - virtual FX_BOOL DrawPolygon(IFDE_Pen* pPen, - FX_FLOAT fPenWidth, - const CFX_PointsF& points, - const CFX_Matrix* pMatrix = NULL); - virtual FX_BOOL DrawRectangle(IFDE_Pen* pPen, - FX_FLOAT fPenWidth, - const CFX_RectF& rect, - const CFX_Matrix* pMatrix = NULL); - virtual FX_BOOL FillClosedCurve(IFDE_Brush* pBrush, - const CFX_PointsF& points, - FX_FLOAT fTension = 0.5f, - const CFX_Matrix* pMatrix = NULL); - virtual FX_BOOL FillEllipse(IFDE_Brush* pBrush, - const CFX_RectF& rect, - const CFX_Matrix* pMatrix = NULL); - virtual FX_BOOL FillPath(IFDE_Brush* pBrush, - const IFDE_Path* pPath, - const CFX_Matrix* pMatrix = NULL); - virtual FX_BOOL FillPolygon(IFDE_Brush* pBrush, - const CFX_PointsF& points, - const CFX_Matrix* pMatrix = NULL); - virtual FX_BOOL FillRectangle(IFDE_Brush* pBrush, - const CFX_RectF& rect, - const CFX_Matrix* pMatrix = NULL); - FX_BOOL FillSolidPath(IFDE_Brush* pBrush, - const CFX_PathData* pPath, - const CFX_Matrix* pMatrix); - FX_BOOL FillHatchPath(IFDE_Brush* pBrush, - const CFX_PathData* pPath, - const CFX_Matrix* pMatrix); - FX_BOOL FillTexturePath(IFDE_Brush* pBrush, - const CFX_PathData* pPath, - const CFX_Matrix* pMatrix); - FX_BOOL FillLinearGradientPath(IFDE_Brush* pBrush, - const CFX_PathData* pPath, - const CFX_Matrix* pMatrix); - FX_BOOL DrawSolidString(IFDE_Brush* pBrush, - IFX_Font* pFont, - const FXTEXT_CHARPOS* pCharPos, - int32_t iCount, - FX_FLOAT fFontSize, - const CFX_Matrix* pMatrix); - FX_BOOL DrawStringPath(IFDE_Brush* pBrush, - IFX_Font* pFont, - const FXTEXT_CHARPOS* pCharPos, - int32_t iCount, - FX_FLOAT fFontSize, - const CFX_Matrix* pMatrix); - - protected: - FX_BOOL CreatePen(IFDE_Pen* pPen, - FX_FLOAT fPenWidth, - CFX_GraphStateData& graphState); - FX_BOOL WrapTexture(int32_t iWrapMode, - const CFX_DIBitmap* pBitmap, - const CFX_PathData* pPath, - const CFX_Matrix* pMatrix); - CFX_RenderDevice* m_pDevice; - CFX_RectF m_rtClip; - FX_BOOL m_bOwnerDevice; - FXTEXT_CHARPOS* m_pCharPos; - int32_t m_iCharCount; -}; - -#endif // XFA_SRC_FDE_FDE_GEDEVICE_H_ diff --git a/xfa/src/fde/fde_geobject.cpp b/xfa/src/fde/fde_geobject.cpp deleted file mode 100644 index 3170692fe7..0000000000 --- a/xfa/src/fde/fde_geobject.cpp +++ /dev/null @@ -1,255 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fde/fde_geobject.h" - -#include "xfa/src/fde/fde_object.h" - -IFDE_Path* IFDE_Path::Create() { - return new CFDE_Path; -} -FX_BOOL CFDE_Path::StartFigure() { - return CloseFigure(); -} -FX_BOOL CFDE_Path::CloseFigure() { - FX_PATHPOINT* pPoint = GetLastPoint(); - if (pPoint) { - pPoint->m_Flag |= FXPT_CLOSEFIGURE; - } - return TRUE; -} -FX_PATHPOINT* CFDE_Path::GetLastPoint(int32_t iCount) const { - if (iCount < 1) { - return NULL; - } - int32_t iPoints = m_Path.GetPointCount(); - if (iCount > iPoints) { - return NULL; - } - return m_Path.GetPoints() + iPoints - iCount; -} -FX_BOOL CFDE_Path::FigureClosed() const { - FX_PATHPOINT* pPoint = GetLastPoint(); - return pPoint ? (pPoint->m_Flag & FXPT_CLOSEFIGURE) : TRUE; -} -FX_PATHPOINT* CFDE_Path::AddPoints(int32_t iCount) { - if (iCount < 1) { - return NULL; - } - int32_t iPoints = m_Path.GetPointCount(); - m_Path.AddPointCount(iCount); - return m_Path.GetPoints() + iPoints; -} -void CFDE_Path::MoveTo(FX_FLOAT fx, FX_FLOAT fy) { - FX_PATHPOINT* pPoint = AddPoints(1); - pPoint->m_PointX = fx; - pPoint->m_PointY = fy; - pPoint->m_Flag = FXPT_MOVETO; -} -void CFDE_Path::LineTo(FX_FLOAT fx, FX_FLOAT fy) { - FX_PATHPOINT* pPoint = AddPoints(1); - pPoint->m_PointX = fx; - pPoint->m_PointY = fy; - pPoint->m_Flag = FXPT_LINETO; -} -void CFDE_Path::BezierTo(const CFX_PointF& p1, - const CFX_PointF& p2, - const CFX_PointF& p3) { - FX_PATHPOINT* p = AddPoints(3); - p[0].m_PointX = p1.x; - p[0].m_PointY = p1.y; - p[0].m_Flag = FXPT_BEZIERTO; - p[1].m_PointX = p2.x; - p[1].m_PointY = p2.y; - p[1].m_Flag = FXPT_BEZIERTO; - p[2].m_PointX = p3.x; - p[2].m_PointY = p3.y; - p[2].m_Flag = FXPT_BEZIERTO; -} -void CFDE_Path::ArcTo(FX_BOOL bStart, - const CFX_RectF& rect, - FX_FLOAT startAngle, - FX_FLOAT endAngle) { - FX_FLOAT rx = rect.width / 2; - FX_FLOAT ry = rect.height / 2; - FX_FLOAT cx = rect.left + rx; - FX_FLOAT cy = rect.top + ry; - FX_FLOAT alpha = - FXSYS_atan2(rx * FXSYS_sin(startAngle), ry * FXSYS_cos(startAngle)); - FX_FLOAT beta = - FXSYS_atan2(rx * FXSYS_sin(endAngle), ry * FXSYS_cos(endAngle)); - if (FXSYS_fabs(beta - alpha) > FX_PI) { - if (beta > alpha) { - beta -= 2 * FX_PI; - } else { - alpha -= 2 * FX_PI; - } - } - FX_FLOAT half_delta = (beta - alpha) / 2; - FX_FLOAT bcp = 4.0f / 3 * (1 - FXSYS_cos(half_delta)) / FXSYS_sin(half_delta); - FX_FLOAT sin_alpha = FXSYS_sin(alpha); - FX_FLOAT sin_beta = FXSYS_sin(beta); - FX_FLOAT cos_alpha = FXSYS_cos(alpha); - FX_FLOAT cos_beta = FXSYS_cos(beta); - if (bStart) - MoveTo(CFX_PointF(cx + rx * cos_alpha, cy + ry * sin_alpha)); - - BezierTo(CFX_PointF(cx + rx * (cos_alpha - bcp * sin_alpha), - cy + ry * (sin_alpha + bcp * cos_alpha)), - CFX_PointF(cx + rx * (cos_beta + bcp * sin_beta), - cy + ry * (sin_beta - bcp * cos_beta)), - CFX_PointF(cx + rx * cos_beta, cy + ry * sin_beta)); -} - -void CFDE_Path::AddBezier(const CFX_PointsF& points) { - if (points.GetSize() != 4) { - return; - } - const CFX_PointF* p = points.GetData(); - MoveTo(p[0]); - BezierTo(p[1], p[2], p[3]); -} -void CFDE_Path::AddBeziers(const CFX_PointsF& points) { - int32_t iCount = points.GetSize(); - if (iCount < 4) { - return; - } - const CFX_PointF* p = points.GetData(); - const CFX_PointF* pEnd = p + iCount; - MoveTo(p[0]); - for (++p; p <= pEnd - 3; p += 3) { - BezierTo(p[0], p[1], p[2]); - } -} -void CFDE_Path::GetCurveTangents(const CFX_PointsF& points, - CFX_PointsF& tangents, - FX_BOOL bClosed, - FX_FLOAT fTension) const { - int32_t iCount = points.GetSize(); - tangents.SetSize(iCount); - if (iCount < 3) { - return; - } - FX_FLOAT fCoefficient = fTension / 3.0f; - const CFX_PointF* pPoints = points.GetData(); - CFX_PointF* pTangents = tangents.GetData(); - for (int32_t i = 0; i < iCount; ++i) { - int32_t r = i + 1; - int32_t s = i - 1; - if (r >= iCount) { - r = bClosed ? (r - iCount) : (iCount - 1); - } - if (s < 0) { - s = bClosed ? (s + iCount) : 0; - } - pTangents[i].x += (fCoefficient * (pPoints[r].x - pPoints[s].x)); - pTangents[i].y += (fCoefficient * (pPoints[r].y - pPoints[s].y)); - } -} -void CFDE_Path::AddCurve(const CFX_PointsF& points, - FX_BOOL bClosed, - FX_FLOAT fTension) { - int32_t iLast = points.GetUpperBound(); - if (iLast < 1) { - return; - } - CFX_PointsF tangents; - GetCurveTangents(points, tangents, bClosed, fTension); - const CFX_PointF* pPoints = points.GetData(); - CFX_PointF* pTangents = tangents.GetData(); - MoveTo(pPoints[0]); - for (int32_t i = 0; i < iLast; ++i) { - BezierTo(CFX_PointF(pPoints[i].x + pTangents[i].x, - pPoints[i].y + pTangents[i].y), - CFX_PointF(pPoints[i + 1].x - pTangents[i + 1].x, - pPoints[i + 1].y - pTangents[i + 1].y), - CFX_PointF(pPoints[i + 1].x, pPoints[i + 1].y)); - } - if (bClosed) { - BezierTo(CFX_PointF(pPoints[iLast].x + pTangents[iLast].x, - pPoints[iLast].y + pTangents[iLast].y), - CFX_PointF(pPoints[0].x - pTangents[0].x, - pPoints[0].y - pTangents[0].y), - CFX_PointF(pPoints[0].x, pPoints[0].y)); - CloseFigure(); - } -} -void CFDE_Path::AddEllipse(const CFX_RectF& rect) { - FX_FLOAT fStartAngle = 0; - FX_FLOAT fEndAngle = FX_PI / 2; - for (int32_t i = 0; i < 4; ++i) { - ArcTo(i == 0, rect, fStartAngle, fEndAngle); - fStartAngle += FX_PI / 2; - fEndAngle += FX_PI / 2; - } - CloseFigure(); -} -void CFDE_Path::AddLine(const CFX_PointF& pt1, const CFX_PointF& pt2) { - FX_PATHPOINT* pLast = GetLastPoint(); - if (pLast == NULL || FXSYS_fabs(pLast->m_PointX - pt1.x) > 0.001 || - FXSYS_fabs(pLast->m_PointY - pt1.y) > 0.001) { - MoveTo(pt1); - } - LineTo(pt2); -} -void CFDE_Path::AddPath(const IFDE_Path* pSrc, FX_BOOL bConnect) { - CFDE_Path* pPath = (CFDE_Path*)pSrc; - if (pPath == NULL) { - return; - } - int32_t iCount = pPath->m_Path.GetPointCount(); - if (iCount < 1) { - return; - } - if (bConnect) { - LineTo(pPath->m_Path.GetPointX(0), pPath->m_Path.GetPointY(0)); - } - m_Path.Append(&pPath->m_Path, NULL); -} -void CFDE_Path::AddPolygon(const CFX_PointsF& points) { - int32_t iCount = points.GetSize(); - if (iCount < 2) { - return; - } - AddLines(points); - const CFX_PointF* p = points.GetData(); - if (FXSYS_fabs(p[0].x - p[iCount - 1].x) < 0.01f || - FXSYS_fabs(p[0].y - p[iCount - 1].y) < 0.01f) { - LineTo(p[0]); - } - CloseFigure(); -} -void CFDE_Path::AddLines(const CFX_PointsF& points) { - int32_t iCount = points.GetSize(); - if (iCount < 2) { - return; - } - const CFX_PointF* p = points.GetData(); - const CFX_PointF* pEnd = p + iCount; - MoveTo(p[0]); - for (++p; p < pEnd; ++p) { - LineTo(*p); - } -} -void CFDE_Path::AddRectangle(const CFX_RectF& rect) { - MoveTo(rect.TopLeft()); - LineTo(rect.TopRight()); - LineTo(rect.BottomRight()); - LineTo(rect.BottomLeft()); - CloseFigure(); -} -void CFDE_Path::GetBBox(CFX_RectF& bbox) const { - CFX_FloatRect rect = m_Path.GetBoundingBox(); - bbox.Set(rect.left, rect.top, rect.Width(), rect.Height()); - bbox.Normalize(); -} -void CFDE_Path::GetBBox(CFX_RectF& bbox, - FX_FLOAT fLineWidth, - FX_FLOAT fMiterLimit) const { - CFX_FloatRect rect = m_Path.GetBoundingBox(fLineWidth, fMiterLimit); - bbox.Set(rect.left, rect.top, rect.Width(), rect.Height()); - bbox.Normalize(); -} diff --git a/xfa/src/fde/fde_geobject.h b/xfa/src/fde/fde_geobject.h deleted file mode 100644 index 1f5cc4d056..0000000000 --- a/xfa/src/fde/fde_geobject.h +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FDE_FDE_GEOBJECT_H_ -#define XFA_SRC_FDE_FDE_GEOBJECT_H_ - -#include "core/include/fxge/fx_ge.h" -#include "xfa/src/fde/fde_path.h" -#include "xfa/src/fgas/crt/fgas_memory.h" - -class CFDE_Path : public IFDE_Path, public CFX_Target { - public: - virtual void Release() { delete this; } - - virtual FX_BOOL StartFigure(); - virtual FX_BOOL CloseFigure(); - - virtual void AddBezier(const CFX_PointsF& points); - virtual void AddBeziers(const CFX_PointsF& points); - virtual void AddCurve(const CFX_PointsF& points, - FX_BOOL bClosed, - FX_FLOAT fTension = 0.5f); - virtual void AddEllipse(const CFX_RectF& rect); - virtual void AddLines(const CFX_PointsF& points); - virtual void AddLine(const CFX_PointF& pt1, const CFX_PointF& pt2); - virtual void AddPath(const IFDE_Path* pSrc, FX_BOOL bConnect); - virtual void AddPolygon(const CFX_PointsF& points); - virtual void AddRectangle(const CFX_RectF& rect); - virtual void GetBBox(CFX_RectF& bbox) const; - virtual void GetBBox(CFX_RectF& bbox, - FX_FLOAT fLineWidth, - FX_FLOAT fMiterLimit) const; - FX_PATHPOINT* AddPoints(int32_t iCount); - FX_PATHPOINT* GetLastPoint(int32_t iCount = 1) const; - FX_BOOL FigureClosed() const; - void MoveTo(FX_FLOAT fx, FX_FLOAT fy); - void LineTo(FX_FLOAT fx, FX_FLOAT fy); - void BezierTo(const CFX_PointF& p1, - const CFX_PointF& p2, - const CFX_PointF& p3); - void ArcTo(FX_BOOL bStart, - const CFX_RectF& rect, - FX_FLOAT startAngle, - FX_FLOAT endAngle); - void MoveTo(const CFX_PointF& p0) { MoveTo(p0.x, p0.y); } - void LineTo(const CFX_PointF& p1) { LineTo(p1.x, p1.y); } - void GetCurveTangents(const CFX_PointsF& points, - CFX_PointsF& tangents, - FX_BOOL bClosed, - FX_FLOAT fTension) const; - CFX_PathData m_Path; -}; - -#endif // XFA_SRC_FDE_FDE_GEOBJECT_H_ diff --git a/xfa/src/fde/fde_image.h b/xfa/src/fde/fde_image.h deleted file mode 100644 index a9f16dee6f..0000000000 --- a/xfa/src/fde/fde_image.h +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FDE_FDE_IMAGE_H_ -#define XFA_SRC_FDE_FDE_IMAGE_H_ - -#include "xfa/src/fgas/crt/fgas_memory.h" -#include "xfa/src/fgas/crt/fgas_stream.h" -#include "xfa/src/fgas/crt/fgas_utils.h" - -class IFDE_Image { - public: - virtual ~IFDE_Image() {} - virtual void Release() = 0; - virtual FX_BOOL LoadImage() = 0; - virtual void FreeImage() = 0; - virtual int32_t CountFrames() const = 0; - virtual FX_BOOL LoadFrame(int32_t index) = 0; - virtual CFX_DIBitmap* GetFrameImage() = 0; - virtual int32_t GetImageFormat() const = 0; - virtual int32_t GetImageWidth() const = 0; - virtual int32_t GetImageHeight() const = 0; - virtual int32_t GetDelayTime(int32_t iFrameIndex) const = 0; - virtual int32_t GetLoopCount() const = 0; - virtual FX_BOOL StartLoadImage(CFX_DIBitmap* pDIBitmap, - int32_t dibX, - int32_t dibY, - int32_t dibCX, - int32_t dibCY, - int32_t imgX, - int32_t imgY, - int32_t imgCX, - int32_t imgCY, - int32_t iFrameIndex = 0) = 0; - virtual int32_t DoLoadImage(IFX_Pause* pPause = NULL) = 0; - virtual void StopLoadImage() = 0; -}; - -#endif // XFA_SRC_FDE_FDE_IMAGE_H_ diff --git a/xfa/src/fde/fde_iterator.cpp b/xfa/src/fde/fde_iterator.cpp deleted file mode 100644 index 71be02ea9d..0000000000 --- a/xfa/src/fde/fde_iterator.cpp +++ /dev/null @@ -1,98 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fde/fde_iterator.h" - -#include "xfa/src/fgas/crt/fgas_utils.h" - -IFDE_VisualSetIterator* IFDE_VisualSetIterator::Create() { - return new CFDE_VisualSetIterator; -} -CFDE_VisualSetIterator::CFDE_VisualSetIterator() : m_dwFilter(0) {} -CFDE_VisualSetIterator::~CFDE_VisualSetIterator() { - m_CanvasStack.RemoveAll(); -} -FX_BOOL CFDE_VisualSetIterator::AttachCanvas(IFDE_CanvasSet* pCanvas) { - FXSYS_assert(pCanvas != NULL); - m_CanvasStack.RemoveAll(); - FDE_CANVASITEM canvas; - canvas.hCanvas = NULL; - canvas.pCanvas = pCanvas; - canvas.hPos = pCanvas->GetFirstPosition(NULL); - if (canvas.hPos == NULL) { - return FALSE; - } - return m_CanvasStack.Push(canvas) == 0; -} -FX_BOOL CFDE_VisualSetIterator::FilterObjects(FX_DWORD dwObjects) { - if (m_CanvasStack.GetSize() == 0) { - return FALSE; - } - while (m_CanvasStack.GetSize() > 1) { - m_CanvasStack.Pop(); - } - m_dwFilter = dwObjects & ~(FX_DWORD)FDE_VISUALOBJ_Widget; - if (dwObjects & FDE_VISUALOBJ_Widget) { - m_dwFilter |= 0xFF00; - } - FDE_CANVASITEM* pCanvas = m_CanvasStack.GetTopElement(); - FXSYS_assert(pCanvas != NULL && pCanvas->pCanvas != NULL); - pCanvas->hPos = pCanvas->pCanvas->GetFirstPosition(NULL); - return pCanvas->hPos != NULL; -} -void CFDE_VisualSetIterator::Reset() { - FilterObjects(m_dwFilter); -} -FDE_HVISUALOBJ CFDE_VisualSetIterator::GetNext(IFDE_VisualSet*& pVisualSet, - FDE_HVISUALOBJ* phCanvasObj, - IFDE_CanvasSet** ppCanvasSet) { - while (m_CanvasStack.GetSize() > 0) { - FDE_CANVASITEM* pCanvas = m_CanvasStack.GetTopElement(); - FXSYS_assert(pCanvas != NULL && pCanvas->pCanvas != NULL); - if (pCanvas->hPos == NULL) { - if (m_CanvasStack.GetSize() == 1) { - break; - } - m_CanvasStack.Pop(); - continue; - } - do { - FDE_HVISUALOBJ hObj = pCanvas->pCanvas->GetNext( - pCanvas->hCanvas, pCanvas->hPos, pVisualSet); - FXSYS_assert(hObj != NULL); - FDE_VISUALOBJTYPE eType = pVisualSet->GetType(); - if (eType == FDE_VISUALOBJ_Canvas) { - FDE_CANVASITEM canvas; - canvas.hCanvas = hObj; - canvas.pCanvas = (IFDE_CanvasSet*)pVisualSet; - canvas.hPos = canvas.pCanvas->GetFirstPosition(hObj); - m_CanvasStack.Push(canvas); - break; - } - FX_DWORD dwObj = - (eType == FDE_VISUALOBJ_Widget) - ? (FX_DWORD)((IFDE_WidgetSet*)pVisualSet)->GetWidgetType(hObj) - : (FX_DWORD)eType; - if ((m_dwFilter & dwObj) != 0) { - if (ppCanvasSet) { - *ppCanvasSet = pCanvas->pCanvas; - } - if (phCanvasObj) { - *phCanvasObj = pCanvas->hCanvas; - } - return hObj; - } - } while (pCanvas->hPos != NULL); - } - if (ppCanvasSet) { - *ppCanvasSet = NULL; - } - if (phCanvasObj) { - *phCanvasObj = NULL; - } - pVisualSet = NULL; - return NULL; -} diff --git a/xfa/src/fde/fde_iterator.h b/xfa/src/fde/fde_iterator.h deleted file mode 100644 index 2bb4c1a19f..0000000000 --- a/xfa/src/fde/fde_iterator.h +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FDE_FDE_ITERATOR_H_ -#define XFA_SRC_FDE_FDE_ITERATOR_H_ - -#include "xfa/src/fde/fde_visualset.h" -#include "xfa/src/fgas/crt/fgas_memory.h" - -struct FDE_CANVASITEM { - IFDE_CanvasSet* pCanvas; - FDE_HVISUALOBJ hCanvas; - FX_POSITION hPos; -}; - -class CFDE_VisualSetIterator : public IFDE_VisualSetIterator, - public CFX_Target { - public: - CFDE_VisualSetIterator(); - ~CFDE_VisualSetIterator(); - virtual void Release() { delete this; } - - virtual FX_BOOL AttachCanvas(IFDE_CanvasSet* pCanvas); - virtual FX_BOOL FilterObjects(FX_DWORD dwObjects = 0xFFFFFFFF); - - virtual void Reset(); - virtual FDE_HVISUALOBJ GetNext(IFDE_VisualSet*& pVisualSet, - FDE_HVISUALOBJ* phCanvasObj = NULL, - IFDE_CanvasSet** ppCanvasSet = NULL); - - protected: - FX_DWORD m_dwFilter; - CFX_StackTemplate m_CanvasStack; -}; - -#endif // XFA_SRC_FDE_FDE_ITERATOR_H_ diff --git a/xfa/src/fde/fde_object.cpp b/xfa/src/fde/fde_object.cpp deleted file mode 100644 index 1350ae9e9b..0000000000 --- a/xfa/src/fde/fde_object.cpp +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fde/fde_object.h" - -IFDE_Pen* IFDE_Pen::Create() { - return new CFDE_Pen(); -} -IFDE_Brush* IFDE_Brush::Create(int32_t iType) { - switch (iType) { - case FDE_BRUSHTYPE_Solid: - return new CFDE_SolidBrush; - case FDE_BRUSHTYPE_Hatch: - return new CFDE_HatchBrush; - case FDE_BRUSHTYPE_Texture: - return new CFDE_TextureBrush; - case FDE_BRUSHTYPE_LinearGradient: - return new CFDE_LinearBrush; - default: - return NULL; - } -} diff --git a/xfa/src/fde/fde_object.h b/xfa/src/fde/fde_object.h deleted file mode 100644 index d9e5737fa0..0000000000 --- a/xfa/src/fde/fde_object.h +++ /dev/null @@ -1,246 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FDE_FDE_OBJECT_H_ -#define XFA_SRC_FDE_FDE_OBJECT_H_ - -#include - -#include "core/include/fxge/fx_dib.h" -#include "xfa/src/fde/fde_brush.h" -#include "xfa/src/fde/fde_pen.h" -#include "xfa/src/fgas/crt/fgas_memory.h" - -class CFDE_Pen : public IFDE_Pen, public CFX_Target { - public: - CFDE_Pen() - : m_Color(0), - m_iLineCap(0), - m_iLineJoin(0), - m_iDashStyle(0), - m_fDashPhase(0), - m_fMiterLimit(10), - m_bAutoRelease(FALSE), - m_pBrush(NULL) {} - - ~CFDE_Pen() { - if (m_pBrush && m_bAutoRelease) { - m_pBrush->Release(); - } - } - virtual void Release() { delete this; } - - virtual int32_t GetType() const { - return m_pBrush ? m_pBrush->GetType() : FDE_PENTYPE_SolidColor; - } - - virtual FX_ARGB GetColor() const { return m_Color; } - virtual void SetColor(FX_ARGB color) { m_Color = color; } - virtual IFDE_Brush* GetBrush() const { return m_pBrush; } - virtual void SetBrush(IFDE_Brush* pBrush, FX_BOOL bAutoRelease) { - m_bAutoRelease = bAutoRelease; - m_pBrush = pBrush; - if (m_pBrush && m_pBrush->GetType() == FDE_BRUSHTYPE_Solid) { - m_Color = ((IFDE_SolidBrush*)m_pBrush)->GetColor(); - } - } - virtual int32_t GetLineCap() const { return m_iLineCap; } - virtual void SetLineCap(int32_t iLineCap) { m_iLineCap = iLineCap; } - virtual int32_t GetDashStyle() const { return m_iDashStyle; } - virtual void SetDashStyle(int32_t iDashStyle) { m_iDashStyle = iDashStyle; } - virtual FX_FLOAT GetDashPhase() const { return m_fDashPhase; } - virtual void SetDashPhase(FX_FLOAT fPhase) { m_fDashPhase = fPhase; } - virtual int32_t CountDashArray() const { return m_DashArray.GetSize(); } - virtual int32_t GetDashArray(CFX_FloatArray& dashArray) const { - dashArray.Copy(m_DashArray); - return dashArray.GetSize(); - } - virtual void SetDashArray(const CFX_FloatArray& dashArray) { - m_DashArray.Copy(dashArray); - } - virtual int32_t GetLineJoin() const { return m_iLineJoin; } - virtual void SetLineJoin(int32_t iLineJoin) { m_iLineJoin = iLineJoin; } - virtual FX_FLOAT GetMiterLimit() const { return m_fMiterLimit; } - virtual void SetMiterLimit(FX_FLOAT fMiterLimit) { - m_fMiterLimit = fMiterLimit; - } - virtual int32_t CountCompoundPatterns() const { - return m_CompoundPatterns.GetSize(); - } - virtual FX_BOOL GetCompoundPatterns( - CFDE_CompoundPatterns& compoundPatterns) const { - return compoundPatterns.Copy(m_CompoundPatterns), TRUE; - } - virtual FX_BOOL SetCompoundPatterns( - const CFDE_CompoundPatterns& compoundPatterns) { - return m_CompoundPatterns.Copy(compoundPatterns), TRUE; - } - - FX_ARGB m_Color; - int32_t m_iLineCap; - int32_t m_iLineJoin; - int32_t m_iDashStyle; - FX_FLOAT m_fDashPhase; - FX_FLOAT m_fMiterLimit; - FX_BOOL m_bAutoRelease; - IFDE_Brush* m_pBrush; - CFX_FloatArray m_DashArray; - CFDE_CompoundPatterns m_CompoundPatterns; -}; -class CFDE_SolidBrush : public IFDE_SolidBrush, public CFX_Target { - public: - CFDE_SolidBrush() : m_Color(0xFF000000) { m_Matrix.SetIdentity(); } - - virtual void Release() { delete this; } - virtual int32_t GetType() const { return FDE_BRUSHTYPE_Solid; } - virtual const CFX_Matrix& GetMatrix() const { return m_Matrix; } - virtual void ResetMatrix() { m_Matrix.SetIdentity(); } - virtual void TranslateMatrix(FX_FLOAT dx, FX_FLOAT dy) { - m_Matrix.Translate(dx, dy); - } - virtual void RotateMatrix(FX_FLOAT fRadian) { m_Matrix.Rotate(fRadian); } - virtual void ScaleMatrix(FX_FLOAT sx, FX_FLOAT sy) { m_Matrix.Scale(sx, sy); } - virtual void ConcatMatrix(const CFX_Matrix& matrix) { - m_Matrix.Concat(matrix); - } - virtual void SetMatrix(const CFX_Matrix& matrix) { m_Matrix = matrix; } - virtual FX_ARGB GetColor() const { return m_Color; } - virtual void SetColor(FX_ARGB color) { m_Color = color; } - - FX_ARGB m_Color; - CFX_Matrix m_Matrix; -}; -class CFDE_HatchBrush : public IFDE_HatchBrush, public CFX_Target { - public: - CFDE_HatchBrush() : m_iStyle(-1), m_BackColor(0), m_ForeColor(0) { - m_Matrix.SetIdentity(); - } - - virtual void Release() { delete this; } - virtual int32_t GetType() const { return FDE_BRUSHTYPE_Hatch; } - virtual const CFX_Matrix& GetMatrix() const { return m_Matrix; } - virtual void ResetMatrix() { m_Matrix.SetIdentity(); } - virtual void TranslateMatrix(FX_FLOAT dx, FX_FLOAT dy) { - m_Matrix.Translate(dx, dy); - } - virtual void RotateMatrix(FX_FLOAT fRadian) { m_Matrix.Rotate(fRadian); } - virtual void ScaleMatrix(FX_FLOAT sx, FX_FLOAT sy) { m_Matrix.Scale(sx, sy); } - virtual void ConcatMatrix(const CFX_Matrix& matrix) { - m_Matrix.Concat(matrix); - } - virtual void SetMatrix(const CFX_Matrix& matrix) { m_Matrix = matrix; } - virtual FX_ARGB GetColor(FX_BOOL bForegroundColor) const { - return bForegroundColor ? m_ForeColor : m_BackColor; - } - virtual void SetColor(FX_ARGB color, FX_BOOL bForegroundColor) { - if (bForegroundColor) { - m_ForeColor = color; - } else { - m_BackColor = color; - } - } - - virtual int32_t GetHatchStyle() const { return m_iStyle; } - virtual FX_BOOL SetHatchStyle(int32_t iHatchStyle) { - m_iStyle = iHatchStyle; - return m_iStyle >= FDE_HATCHSTYLE_Min && m_iStyle <= FDE_HATCHSTYLE_Max; - } - int32_t m_iStyle; - FX_ARGB m_BackColor; - FX_ARGB m_ForeColor; - CFX_Matrix m_Matrix; -}; -class CFDE_TextureBrush : public IFDE_TextureBrush, public CFX_Target { - public: - CFDE_TextureBrush() : m_iWrap(0), m_pImage(NULL), m_bAutoRelease(FALSE) { - m_Matrix.SetIdentity(); - } - - virtual void Release() { delete this; } - virtual int32_t GetType() const { return FDE_BRUSHTYPE_Texture; } - virtual const CFX_Matrix& GetMatrix() const { return m_Matrix; } - virtual void ResetMatrix() { m_Matrix.SetIdentity(); } - virtual void TranslateMatrix(FX_FLOAT dx, FX_FLOAT dy) { - m_Matrix.Translate(dx, dy); - } - virtual void RotateMatrix(FX_FLOAT fRadian) { m_Matrix.Rotate(fRadian); } - virtual void ScaleMatrix(FX_FLOAT sx, FX_FLOAT sy) { m_Matrix.Scale(sx, sy); } - virtual void ConcatMatrix(const CFX_Matrix& matrix) { - m_Matrix.Concat(matrix); - } - virtual void SetMatrix(const CFX_Matrix& matrix) { m_Matrix = matrix; } - virtual IFDE_Image* GetImage() const { return m_pImage; } - virtual void SetImage(IFDE_Image* pImage, FX_BOOL bAutoRelease) { - m_pImage = pImage; - m_bAutoRelease = bAutoRelease; - } - virtual int32_t GetWrapMode() const { return m_iWrap; } - virtual void SetWrapMode(int32_t iWrapMode) { m_iWrap = iWrapMode; } - int32_t m_iWrap; - IFDE_Image* m_pImage; - FX_BOOL m_bAutoRelease; - CFX_Matrix m_Matrix; -}; -class CFDE_LinearBrush : public IFDE_LinearGradientBrush, public CFX_Target { - public: - CFDE_LinearBrush() : m_EndColor(0), m_StartColor(0), m_iWrapMode(0) { - m_StartPoint.x = m_StartPoint.y = m_EndPoint.x = m_EndPoint.y = 0; - m_Matrix.SetIdentity(); - } - - virtual void Release() { delete this; } - virtual int32_t GetType() const { return FDE_BRUSHTYPE_LinearGradient; } - virtual const CFX_Matrix& GetMatrix() const { return m_Matrix; } - virtual void ResetMatrix() { m_Matrix.SetIdentity(); } - virtual void TranslateMatrix(FX_FLOAT dx, FX_FLOAT dy) { - m_Matrix.Translate(dx, dy); - } - virtual void RotateMatrix(FX_FLOAT fRadian) { m_Matrix.Rotate(fRadian); } - virtual void ScaleMatrix(FX_FLOAT sx, FX_FLOAT sy) { m_Matrix.Scale(sx, sy); } - virtual void ConcatMatrix(const CFX_Matrix& matrix) { - m_Matrix.Concat(matrix); - } - virtual void SetMatrix(const CFX_Matrix& matrix) { m_Matrix = matrix; } - virtual void GetLinearPoints(CFX_PointF& startingPoint, - CFX_PointF& endingPoint) const { - startingPoint = m_StartPoint; - endingPoint = m_EndPoint; - } - virtual void SetLinearPoints(const CFX_PointF& startingPoint, - const CFX_PointF& endingPoint) { - m_StartPoint = startingPoint; - m_EndPoint = endingPoint; - } - virtual void GetLinearColors(FX_ARGB& startingColor, - FX_ARGB& endingColor) const { - startingColor = m_StartColor; - endingColor = m_EndColor; - } - virtual void SetLinearColors(const FX_ARGB& startingColor, - const FX_ARGB& endingColor) { - m_StartColor = startingColor; - m_EndColor = endingColor; - } - virtual int32_t CountGradientColors() const { return m_GradColors.GetSize(); } - virtual FX_BOOL GetGradientColors(CFDE_GradientColors& colors) const { - return colors.Copy(m_GradColors), TRUE; - } - virtual FX_BOOL SetGradientColors(const CFDE_GradientColors& colors) { - return m_GradColors.Copy(colors), TRUE; - } - - virtual int32_t GetWrapMode() const { return m_iWrapMode; } - virtual void SetWrapMode(int32_t iWrapMode) { m_iWrapMode = iWrapMode; } - CFX_PointF m_EndPoint; - CFX_PointF m_StartPoint; - FX_ARGB m_EndColor; - FX_ARGB m_StartColor; - CFDE_GradientColors m_GradColors; - int32_t m_iWrapMode; - CFX_Matrix m_Matrix; -}; - -#endif // XFA_SRC_FDE_FDE_OBJECT_H_ diff --git a/xfa/src/fde/fde_path.h b/xfa/src/fde/fde_path.h deleted file mode 100644 index a6a8d674d6..0000000000 --- a/xfa/src/fde/fde_path.h +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FDE_FDE_PATH_H_ -#define XFA_SRC_FDE_FDE_PATH_H_ - -#include "core/include/fxcrt/fx_coordinates.h" -#include "core/include/fxcrt/fx_system.h" - -class IFDE_Path { - public: - static IFDE_Path* Create(); - virtual ~IFDE_Path() {} - virtual void Release() = 0; - virtual FX_BOOL StartFigure() = 0; - virtual FX_BOOL CloseFigure() = 0; - virtual void AddBezier(const CFX_PointsF& points) = 0; - virtual void AddBeziers(const CFX_PointsF& points) = 0; - virtual void AddCurve(const CFX_PointsF& points, - FX_BOOL bClosed, - FX_FLOAT fTension = 0.5f) = 0; - virtual void AddEllipse(const CFX_RectF& rect) = 0; - virtual void AddLines(const CFX_PointsF& points) = 0; - virtual void AddLine(const CFX_PointF& pt1, const CFX_PointF& pt2) = 0; - virtual void AddPath(const IFDE_Path* pSrc, FX_BOOL bConnect) = 0; - virtual void AddPolygon(const CFX_PointsF& points) = 0; - virtual void AddRectangle(const CFX_RectF& rect) = 0; - virtual void GetBBox(CFX_RectF& bbox) const = 0; - virtual void GetBBox(CFX_RectF& bbox, - FX_FLOAT fLineWidth, - FX_FLOAT fMiterLimit) const = 0; -}; - -#endif // XFA_SRC_FDE_FDE_PATH_H_ diff --git a/xfa/src/fde/fde_pen.h b/xfa/src/fde/fde_pen.h deleted file mode 100644 index adaa2da256..0000000000 --- a/xfa/src/fde/fde_pen.h +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FDE_FDE_PEN_H_ -#define XFA_SRC_FDE_FDE_PEN_H_ - -class IFDE_Pen; - -#define FDE_PENTYPE_Unknown FDE_BRUSHTYPE_Unknown -#define FDE_PENTYPE_SolidColor FDE_BRUSHTYPE_Solid -#define FDE_PENTYPE_HatchBrush FDE_BRUSHTYPE_Hatch -#define FDE_PENTYPE_TextureBrush FDE_BRUSHTYPE_Texture -#define FDE_PENTYPE_LinearGradient FDE_BRUSHTYPE_LinearGradient -#define FDE_PENTYPE_MAX FDE_BRUSHTYPE_MAX - -#define FDE_DASHSTYLE_Solid 0 -#define FDE_DASHSTYLE_Dash 1 -#define FDE_DASHSTYLE_Dot 2 -#define FDE_DASHSTYLE_DashDot 3 -#define FDE_DASHSTYLE_DashDotDot 4 -#define FDE_DASHSTYLE_Customized 5 - -#define FDE_LINEJOIN_Miter 0 -#define FDE_LINEJOIN_Round 1 -#define FDE_LINEJOIN_Bevel 2 - -#define FDE_LINECAP_Flat 0 -#define FDE_LINECAP_Round 1 -#define FDE_LINECAP_Square 2 - -struct FDE_COMPOUNDPATTERN { - FX_FLOAT pos; - FX_FLOAT width; -}; -typedef CFX_ArrayTemplate CFDE_CompoundPatterns; - -class IFDE_Pen { - public: - static IFDE_Pen* Create(); - virtual ~IFDE_Pen() {} - virtual void Release() = 0; - virtual int32_t GetType() const = 0; - virtual FX_ARGB GetColor() const = 0; - virtual void SetColor(FX_ARGB color) = 0; - virtual IFDE_Brush* GetBrush() const = 0; - virtual void SetBrush(IFDE_Brush* pBrush, FX_BOOL bAutoRelease) = 0; - virtual int32_t GetLineCap() const = 0; - virtual void SetLineCap(int32_t iLineCap) = 0; - virtual int32_t GetDashStyle() const = 0; - virtual void SetDashStyle(int32_t iDashStyle) = 0; - virtual FX_FLOAT GetDashPhase() const = 0; - virtual void SetDashPhase(FX_FLOAT fPhase) = 0; - virtual int32_t CountDashArray() const = 0; - virtual int32_t GetDashArray(CFX_FloatArray& dashArray) const = 0; - virtual void SetDashArray(const CFX_FloatArray& dashArray) = 0; - virtual int32_t GetLineJoin() const = 0; - virtual void SetLineJoin(int32_t iLineJoin) = 0; - virtual FX_FLOAT GetMiterLimit() const = 0; - virtual void SetMiterLimit(FX_FLOAT fMiterLimit) = 0; - virtual int32_t CountCompoundPatterns() const = 0; - virtual FX_BOOL GetCompoundPatterns( - CFDE_CompoundPatterns& compoundPatterns) const = 0; - virtual FX_BOOL SetCompoundPatterns( - const CFDE_CompoundPatterns& compoundPatterns) = 0; -}; - -#endif // XFA_SRC_FDE_FDE_PEN_H_ diff --git a/xfa/src/fde/fde_render.cpp b/xfa/src/fde/fde_render.cpp deleted file mode 100644 index b4330cc084..0000000000 --- a/xfa/src/fde/fde_render.cpp +++ /dev/null @@ -1,291 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fde/fde_render.h" - -#include "xfa/src/fde/fde_renderdevice.h" -#include "xfa/src/fgas/crt/fgas_memory.h" - -#define FDE_PATHRENDER_Stroke 1 -#define FDE_PATHRENDER_Fill 2 - -namespace { - -class CFDE_RenderContext : public IFDE_RenderContext, - public CFX_Target { - public: - CFDE_RenderContext(); - virtual ~CFDE_RenderContext(); - virtual void Release() { delete this; } - virtual FX_BOOL StartRender(IFDE_RenderDevice* pRenderDevice, - IFDE_CanvasSet* pCanvasSet, - const CFX_Matrix& tmDoc2Device); - virtual FDE_RENDERSTATUS GetStatus() const { return m_eStatus; } - virtual FDE_RENDERSTATUS DoRender(IFX_Pause* pPause = NULL); - virtual void StopRender(); - void RenderPath(IFDE_PathSet* pPathSet, FDE_HVISUALOBJ hPath); - void RenderText(IFDE_TextSet* pTextSet, FDE_HVISUALOBJ hText); - FX_BOOL ApplyClip(IFDE_VisualSet* pVisualSet, - FDE_HVISUALOBJ hObj, - FDE_HDEVICESTATE& hState); - void RestoreClip(FDE_HDEVICESTATE hState); - - protected: - FDE_RENDERSTATUS m_eStatus; - IFDE_RenderDevice* m_pRenderDevice; - IFDE_SolidBrush* m_pSolidBrush; - CFX_Matrix m_Transform; - FXTEXT_CHARPOS* m_pCharPos; - int32_t m_iCharPosCount; - IFDE_VisualSetIterator* m_pIterator; -}; - -} // namespace - -void FDE_GetPageMatrix(CFX_Matrix& pageMatrix, - const CFX_RectF& docPageRect, - const CFX_Rect& devicePageRect, - int32_t iRotate, - FX_DWORD dwCoordinatesType) { - FXSYS_assert(iRotate >= 0 && iRotate <= 3); - FX_BOOL bFlipX = (dwCoordinatesType & 0x01) != 0; - FX_BOOL bFlipY = (dwCoordinatesType & 0x02) != 0; - CFX_Matrix m; - m.Set((bFlipX ? -1.0f : 1.0f), 0, 0, (bFlipY ? -1.0f : 1.0f), 0, 0); - if (iRotate == 0 || iRotate == 2) { - m.a *= (FX_FLOAT)devicePageRect.width / docPageRect.width; - m.d *= (FX_FLOAT)devicePageRect.height / docPageRect.height; - } else { - m.a *= (FX_FLOAT)devicePageRect.height / docPageRect.width; - m.d *= (FX_FLOAT)devicePageRect.width / docPageRect.height; - } - m.Rotate(iRotate * 1.57079632675f); - switch (iRotate) { - case 0: - m.e = bFlipX ? (FX_FLOAT)devicePageRect.right() - : (FX_FLOAT)devicePageRect.left; - m.f = bFlipY ? (FX_FLOAT)devicePageRect.bottom() - : (FX_FLOAT)devicePageRect.top; - break; - case 1: - m.e = bFlipY ? (FX_FLOAT)devicePageRect.left - : (FX_FLOAT)devicePageRect.right(); - m.f = bFlipX ? (FX_FLOAT)devicePageRect.bottom() - : (FX_FLOAT)devicePageRect.top; - break; - case 2: - m.e = bFlipX ? (FX_FLOAT)devicePageRect.left - : (FX_FLOAT)devicePageRect.right(); - m.f = bFlipY ? (FX_FLOAT)devicePageRect.top - : (FX_FLOAT)devicePageRect.bottom(); - break; - case 3: - m.e = bFlipY ? (FX_FLOAT)devicePageRect.right() - : (FX_FLOAT)devicePageRect.left; - m.f = bFlipX ? (FX_FLOAT)devicePageRect.top - : (FX_FLOAT)devicePageRect.bottom(); - break; - default: - break; - } - pageMatrix = m; -} -IFDE_RenderContext* IFDE_RenderContext::Create() { - return new CFDE_RenderContext; -} -CFDE_RenderContext::CFDE_RenderContext() - : m_eStatus(FDE_RENDERSTATUS_Reset), - m_pRenderDevice(NULL), - m_pSolidBrush(NULL), - m_Transform(), - m_pCharPos(NULL), - m_iCharPosCount(0), - m_pIterator(NULL) { - m_Transform.SetIdentity(); -} -CFDE_RenderContext::~CFDE_RenderContext() { - StopRender(); -} -FX_BOOL CFDE_RenderContext::StartRender(IFDE_RenderDevice* pRenderDevice, - IFDE_CanvasSet* pCanvasSet, - const CFX_Matrix& tmDoc2Device) { - if (m_pRenderDevice != NULL) { - return FALSE; - } - if (pRenderDevice == NULL) { - return FALSE; - } - if (pCanvasSet == NULL) { - return FALSE; - } - - m_eStatus = FDE_RENDERSTATUS_Paused; - m_pRenderDevice = pRenderDevice; - m_Transform = tmDoc2Device; - if (m_pIterator == NULL) { - m_pIterator = IFDE_VisualSetIterator::Create(); - FXSYS_assert(m_pIterator != NULL); - } - return m_pIterator->AttachCanvas(pCanvasSet) && m_pIterator->FilterObjects(); -} -FDE_RENDERSTATUS CFDE_RenderContext::DoRender(IFX_Pause* pPause) { - if (m_pRenderDevice == NULL) { - return FDE_RENDERSTATUS_Failed; - } - if (m_pIterator == NULL) { - return FDE_RENDERSTATUS_Failed; - } - FDE_RENDERSTATUS eStatus = FDE_RENDERSTATUS_Paused; - CFX_Matrix rm; - rm.SetReverse(m_Transform); - CFX_RectF rtDocClip = m_pRenderDevice->GetClipRect(); - if (rtDocClip.IsEmpty()) { - rtDocClip.left = rtDocClip.top = 0; - rtDocClip.width = (FX_FLOAT)m_pRenderDevice->GetWidth(); - rtDocClip.height = (FX_FLOAT)m_pRenderDevice->GetHeight(); - } - rm.TransformRect(rtDocClip); - IFDE_VisualSet* pVisualSet; - FDE_HVISUALOBJ hVisualObj; - CFX_RectF rtObj; - int32_t iCount = 0; - while (TRUE) { - hVisualObj = m_pIterator->GetNext(pVisualSet); - if (hVisualObj == NULL || pVisualSet == NULL) { - eStatus = FDE_RENDERSTATUS_Done; - break; - } - rtObj.Empty(); - pVisualSet->GetRect(hVisualObj, rtObj); - if (!rtDocClip.IntersectWith(rtObj)) { - continue; - } - switch (pVisualSet->GetType()) { - case FDE_VISUALOBJ_Text: - RenderText((IFDE_TextSet*)pVisualSet, hVisualObj); - iCount += 5; - break; - case FDE_VISUALOBJ_Path: - RenderPath((IFDE_PathSet*)pVisualSet, hVisualObj); - iCount += 20; - break; - case FDE_VISUALOBJ_Widget: - iCount += 10; - break; - case FDE_VISUALOBJ_Canvas: - FXSYS_assert(FALSE); - break; - default: - break; - } - if (iCount >= 100 && pPause != NULL && pPause->NeedToPauseNow()) { - eStatus = FDE_RENDERSTATUS_Paused; - break; - } - } - return m_eStatus = eStatus; -} -void CFDE_RenderContext::StopRender() { - m_eStatus = FDE_RENDERSTATUS_Reset; - m_pRenderDevice = nullptr; - m_Transform.SetIdentity(); - if (m_pIterator) { - m_pIterator->Release(); - m_pIterator = nullptr; - } - if (m_pSolidBrush) { - m_pSolidBrush->Release(); - m_pSolidBrush = nullptr; - } - FX_Free(m_pCharPos); - m_pCharPos = nullptr; - m_iCharPosCount = 0; -} -void CFDE_RenderContext::RenderText(IFDE_TextSet* pTextSet, - FDE_HVISUALOBJ hText) { - FXSYS_assert(m_pRenderDevice != NULL); - FXSYS_assert(pTextSet != NULL && hText != NULL); - IFX_Font* pFont = pTextSet->GetFont(hText); - if (pFont == NULL) { - return; - } - int32_t iCount = pTextSet->GetDisplayPos(hText, NULL, FALSE); - if (iCount < 1) { - return; - } - if (m_pSolidBrush == NULL) { - m_pSolidBrush = (IFDE_SolidBrush*)IFDE_Brush::Create(FDE_BRUSHTYPE_Solid); - if (m_pSolidBrush == NULL) { - return; - } - } - if (m_pCharPos == NULL) { - m_pCharPos = FX_Alloc(FXTEXT_CHARPOS, iCount); - } else if (m_iCharPosCount < iCount) { - m_pCharPos = FX_Realloc(FXTEXT_CHARPOS, m_pCharPos, iCount); - } - if (m_iCharPosCount < iCount) { - m_iCharPosCount = iCount; - } - iCount = pTextSet->GetDisplayPos(hText, m_pCharPos, FALSE); - FX_FLOAT fFontSize = pTextSet->GetFontSize(hText); - FX_ARGB dwColor = pTextSet->GetFontColor(hText); - m_pSolidBrush->SetColor(dwColor); - FDE_HDEVICESTATE hState; - FX_BOOL bClip = ApplyClip(pTextSet, hText, hState); - m_pRenderDevice->DrawString(m_pSolidBrush, pFont, m_pCharPos, iCount, - fFontSize, &m_Transform); - if (bClip) { - RestoreClip(hState); - } -} -void CFDE_RenderContext::RenderPath(IFDE_PathSet* pPathSet, - FDE_HVISUALOBJ hPath) { - FXSYS_assert(m_pRenderDevice != NULL); - FXSYS_assert(pPathSet != NULL && hPath != NULL); - IFDE_Path* pPath = pPathSet->GetPath(hPath); - if (pPath == NULL) { - return; - } - FDE_HDEVICESTATE hState; - FX_BOOL bClip = ApplyClip(pPathSet, hPath, hState); - int32_t iRenderMode = pPathSet->GetRenderMode(hPath); - if (iRenderMode & FDE_PATHRENDER_Stroke) { - IFDE_Pen* pPen = pPathSet->GetPen(hPath); - FX_FLOAT fWidth = pPathSet->GetPenWidth(hPath); - if (pPen != NULL && fWidth > 0) { - m_pRenderDevice->DrawPath(pPen, fWidth, pPath, &m_Transform); - } - } - if (iRenderMode & FDE_PATHRENDER_Fill) { - IFDE_Brush* pBrush = pPathSet->GetBrush(hPath); - if (pBrush != NULL) { - m_pRenderDevice->FillPath(pBrush, pPath, &m_Transform); - } - } - if (bClip) { - RestoreClip(hState); - } -} -FX_BOOL CFDE_RenderContext::ApplyClip(IFDE_VisualSet* pVisualSet, - FDE_HVISUALOBJ hObj, - FDE_HDEVICESTATE& hState) { - CFX_RectF rtClip; - if (!pVisualSet->GetClip(hObj, rtClip)) { - return FALSE; - } - CFX_RectF rtObj; - pVisualSet->GetRect(hObj, rtObj); - rtClip.Offset(rtObj.left, rtObj.top); - m_Transform.TransformRect(rtClip); - const CFX_RectF& rtDevClip = m_pRenderDevice->GetClipRect(); - rtClip.Intersect(rtDevClip); - hState = m_pRenderDevice->SaveState(); - return m_pRenderDevice->SetClipRect(rtClip); -} -void CFDE_RenderContext::RestoreClip(FDE_HDEVICESTATE hState) { - m_pRenderDevice->RestoreState(hState); -} diff --git a/xfa/src/fde/fde_render.h b/xfa/src/fde/fde_render.h deleted file mode 100644 index 2995d10aae..0000000000 --- a/xfa/src/fde/fde_render.h +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FDE_FDE_RENDER_H_ -#define XFA_SRC_FDE_FDE_RENDER_H_ - -#include "core/include/fxcrt/fx_coordinates.h" -#include "xfa/src/fde/fde_visualset.h" - -class IFDE_RenderDevice; - -void FDE_GetPageMatrix(CFX_Matrix& pageMatrix, - const CFX_RectF& docPageRect, - const CFX_Rect& devicePageRect, - int32_t iRotate, - FX_DWORD dwCoordinatesType = 0); -enum FDE_RENDERSTATUS { - FDE_RENDERSTATUS_Reset = 0, - FDE_RENDERSTATUS_Paused, - FDE_RENDERSTATUS_Done, - FDE_RENDERSTATUS_Failed, -}; - -class IFDE_RenderContext { - public: - static IFDE_RenderContext* Create(); - virtual ~IFDE_RenderContext() {} - virtual void Release() = 0; - virtual FX_BOOL StartRender(IFDE_RenderDevice* pRenderDevice, - IFDE_CanvasSet* pCanvasSet, - const CFX_Matrix& tmDoc2Device) = 0; - virtual FDE_RENDERSTATUS GetStatus() const = 0; - virtual FDE_RENDERSTATUS DoRender(IFX_Pause* pPause = NULL) = 0; - virtual void StopRender() = 0; -}; - -#endif // XFA_SRC_FDE_FDE_RENDER_H_ diff --git a/xfa/src/fde/fde_renderdevice.h b/xfa/src/fde/fde_renderdevice.h deleted file mode 100644 index 63a36642d9..0000000000 --- a/xfa/src/fde/fde_renderdevice.h +++ /dev/null @@ -1,110 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FDE_FDE_RENDERDEVICE_H_ -#define XFA_SRC_FDE_FDE_RENDERDEVICE_H_ - -#include "core/include/fxcrt/fx_coordinates.h" -#include "core/include/fxge/fx_font.h" -#include "core/include/fxge/fx_ge.h" -#include "xfa/src/fde/fde_path.h" -#include "xfa/src/fgas/font/fgas_font.h" - -class IFDE_Pen; -class IFDE_Brush; -class CFX_DIBitmap; -class CFX_DIBSource; - -typedef struct FDE_HDEVICESTATE_ { void* pData; } * FDE_HDEVICESTATE; - -class IFDE_RenderDevice { - public: - static IFDE_RenderDevice* Create(CFX_DIBitmap* pBitmap, - FX_BOOL bRgbByteOrder = FALSE); - static IFDE_RenderDevice* Create(CFX_RenderDevice* pDevice); - virtual ~IFDE_RenderDevice() {} - virtual void Release() = 0; - - virtual int32_t GetWidth() const = 0; - virtual int32_t GetHeight() const = 0; - virtual FDE_HDEVICESTATE SaveState() = 0; - virtual void RestoreState(FDE_HDEVICESTATE hState) = 0; - virtual FX_BOOL SetClipPath(const IFDE_Path* pClip) = 0; - virtual IFDE_Path* GetClipPath() const = 0; - virtual FX_BOOL SetClipRect(const CFX_RectF& rtClip) = 0; - virtual const CFX_RectF& GetClipRect() = 0; - - virtual FX_FLOAT GetDpiX() const = 0; - virtual FX_FLOAT GetDpiY() const = 0; - - virtual FX_BOOL DrawImage(CFX_DIBSource* pDib, - const CFX_RectF* pSrcRect, - const CFX_RectF& dstRect, - const CFX_Matrix* pImgMatrix = NULL, - const CFX_Matrix* pDevMatrix = NULL) = 0; - virtual FX_BOOL DrawString(IFDE_Brush* pBrush, - IFX_Font* pFont, - const FXTEXT_CHARPOS* pCharPos, - int32_t iCount, - FX_FLOAT fFontSize, - const CFX_Matrix* pMatrix = NULL) = 0; - virtual FX_BOOL DrawBezier(IFDE_Pen* pPen, - FX_FLOAT fPenWidth, - const CFX_PointF& pt1, - const CFX_PointF& pt2, - const CFX_PointF& pt3, - const CFX_PointF& pt4, - const CFX_Matrix* pMatrix = NULL) = 0; - virtual FX_BOOL DrawCurve(IFDE_Pen* pPen, - FX_FLOAT fPenWidth, - const CFX_PointsF& points, - FX_BOOL bClosed, - FX_FLOAT fTension = 0.5f, - const CFX_Matrix* pMatrix = NULL) = 0; - virtual FX_BOOL DrawEllipse(IFDE_Pen* pPen, - FX_FLOAT fPenWidth, - const CFX_RectF& rect, - const CFX_Matrix* pMatrix = NULL) = 0; - virtual FX_BOOL DrawLines(IFDE_Pen* pPen, - FX_FLOAT fPenWidth, - const CFX_PointsF& points, - const CFX_Matrix* pMatrix = NULL) = 0; - virtual FX_BOOL DrawLine(IFDE_Pen* pPen, - FX_FLOAT fPenWidth, - const CFX_PointF& pt1, - const CFX_PointF& pt2, - const CFX_Matrix* pMatrix = NULL) = 0; - virtual FX_BOOL DrawPath(IFDE_Pen* pPen, - FX_FLOAT fPenWidth, - const IFDE_Path* pPath, - const CFX_Matrix* pMatrix = NULL) = 0; - virtual FX_BOOL DrawPolygon(IFDE_Pen* pPen, - FX_FLOAT fPenWidth, - const CFX_PointsF& points, - const CFX_Matrix* pMatrix = NULL) = 0; - virtual FX_BOOL DrawRectangle(IFDE_Pen* pPen, - FX_FLOAT fPenWidth, - const CFX_RectF& rect, - const CFX_Matrix* pMatrix = NULL) = 0; - virtual FX_BOOL FillClosedCurve(IFDE_Brush* pBrush, - const CFX_PointsF& points, - FX_FLOAT fTension = 0.5f, - const CFX_Matrix* pMatrix = NULL) = 0; - virtual FX_BOOL FillEllipse(IFDE_Brush* pBrush, - const CFX_RectF& rect, - const CFX_Matrix* pMatrix = NULL) = 0; - virtual FX_BOOL FillPath(IFDE_Brush* pBrush, - const IFDE_Path* pPath, - const CFX_Matrix* pMatrix = NULL) = 0; - virtual FX_BOOL FillPolygon(IFDE_Brush* pBrush, - const CFX_PointsF& points, - const CFX_Matrix* pMatrix = NULL) = 0; - virtual FX_BOOL FillRectangle(IFDE_Brush* pBrush, - const CFX_RectF& rect, - const CFX_Matrix* pMatrix = NULL) = 0; -}; - -#endif // XFA_SRC_FDE_FDE_RENDERDEVICE_H_ diff --git a/xfa/src/fde/fde_visualset.h b/xfa/src/fde/fde_visualset.h deleted file mode 100644 index 71c431f1fc..0000000000 --- a/xfa/src/fde/fde_visualset.h +++ /dev/null @@ -1,123 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FDE_FDE_VISUALSET_H_ -#define XFA_SRC_FDE_FDE_VISUALSET_H_ - -#include "core/include/fxcrt/fx_coordinates.h" -#include "core/include/fxcrt/fx_system.h" -#include "core/include/fxge/fx_dib.h" -#include "core/include/fxge/fx_ge.h" -#include "xfa/src/fde/fde_brush.h" -#include "xfa/src/fde/fde_image.h" -#include "xfa/src/fde/fde_path.h" -#include "xfa/src/fde/fde_pen.h" -#include "xfa/src/fgas/font/fgas_font.h" - -enum FDE_VISUALOBJTYPE { - FDE_VISUALOBJ_Canvas = 0x00, - FDE_VISUALOBJ_Text = 0x01, - FDE_VISUALOBJ_Image = 0x02, - FDE_VISUALOBJ_Path = 0x04, - FDE_VISUALOBJ_Widget = 0x08, -}; - -typedef struct FDE_HVISUALOBJ_ { void* pData; } const* FDE_HVISUALOBJ; - -class IFDE_VisualSet { - public: - virtual ~IFDE_VisualSet() {} - virtual FDE_VISUALOBJTYPE GetType() = 0; - virtual FX_BOOL GetBBox(FDE_HVISUALOBJ hVisualObj, CFX_RectF& bbox) = 0; - virtual FX_BOOL GetMatrix(FDE_HVISUALOBJ hVisualObj, CFX_Matrix& matrix) = 0; - virtual FX_BOOL GetRect(FDE_HVISUALOBJ hVisualObj, CFX_RectF& rt) = 0; - virtual FX_BOOL GetClip(FDE_HVISUALOBJ hVisualObj, CFX_RectF& rt) = 0; -}; - -class IFDE_CanvasSet : public IFDE_VisualSet { - public: - virtual FX_POSITION GetFirstPosition(FDE_HVISUALOBJ hCanvas) = 0; - virtual FDE_HVISUALOBJ GetNext(FDE_HVISUALOBJ hCanvas, - FX_POSITION& pos, - IFDE_VisualSet*& pVisualSet) = 0; - virtual FDE_HVISUALOBJ GetParentCanvas(FDE_HVISUALOBJ hCanvas, - IFDE_VisualSet*& pVisualSet) = 0; -}; - -class IFDE_TextSet : public IFDE_VisualSet { - public: - virtual int32_t GetString(FDE_HVISUALOBJ hText, CFX_WideString& wsText) = 0; - virtual IFX_Font* GetFont(FDE_HVISUALOBJ hText) = 0; - virtual FX_FLOAT GetFontSize(FDE_HVISUALOBJ hText) = 0; - virtual FX_ARGB GetFontColor(FDE_HVISUALOBJ hText) = 0; - virtual int32_t GetDisplayPos(FDE_HVISUALOBJ hText, - FXTEXT_CHARPOS* pCharPos, - FX_BOOL bCharCode = FALSE, - CFX_WideString* pWSForms = NULL) = 0; - virtual int32_t GetCharRects(FDE_HVISUALOBJ hText, - CFX_RectFArray& rtArray) = 0; -}; - -struct FDE_IMAGEFILTERPARAMS : public CFX_Target { - int32_t iFilterType; -}; - -class IFDE_ImageSet : public IFDE_VisualSet { - public: - virtual IFDE_Image* GetImage(FDE_HVISUALOBJ hImage) = 0; - virtual FX_POSITION GetFirstFilterPosition(FDE_HVISUALOBJ hImage) = 0; - virtual const FDE_IMAGEFILTERPARAMS* GetNextFilter(FDE_HVISUALOBJ hImage, - FX_POSITION& pos) = 0; -}; - -class IFDE_PathSet : public IFDE_VisualSet { - public: - virtual IFDE_Path* GetPath(FDE_HVISUALOBJ hPath) = 0; - virtual int32_t GetFillMode(FDE_HVISUALOBJ hPath) = 0; - virtual int32_t GetRenderMode(FDE_HVISUALOBJ hPath) = 0; - virtual IFDE_Pen* GetPen(FDE_HVISUALOBJ hPath) = 0; - virtual FX_FLOAT GetPenWidth(FDE_HVISUALOBJ hPath) = 0; - virtual IFDE_Brush* GetBrush(FDE_HVISUALOBJ hPath) = 0; -}; - -enum FDE_WIDGETOBJ { - FDE_WIDGETOBJ_Unknown = 0x0000, - FDE_WIDGETOBJ_Anchor = 0x0100, - FDE_WIDGETOBJ_NamedDest = 0x0200, - FDE_WIDGETOBJ_HyperLink = 0x0400, -}; - -class IFDE_WidgetSet : public IFDE_VisualSet { - public: - virtual FDE_WIDGETOBJ GetWidgetType(FDE_HVISUALOBJ hWidget) = 0; - virtual FX_FLOAT GetFloat(FDE_HVISUALOBJ hWidget, - int32_t iParameter, - FX_FLOAT fDefVal = 0.0f) = 0; - virtual int32_t GetInteger(FDE_HVISUALOBJ hWidget, - int32_t iParameter, - int32_t iDefVal = 0) = 0; - virtual FX_BOOL GetString(FDE_HVISUALOBJ hWidget, - int32_t iParameter, - CFX_WideString& wsValue) = 0; - virtual FX_BOOL GetRects(FDE_HVISUALOBJ hWidget, - int32_t iParameter, - CFX_RectFArray& rects) = 0; -}; - -class IFDE_VisualSetIterator { - public: - static IFDE_VisualSetIterator* Create(); - virtual ~IFDE_VisualSetIterator() {} - virtual void Release() = 0; - virtual FX_BOOL AttachCanvas(IFDE_CanvasSet* pCanvas) = 0; - virtual FX_BOOL FilterObjects(FX_DWORD dwObjects = 0xFFFFFFFF) = 0; - virtual void Reset() = 0; - virtual FDE_HVISUALOBJ GetNext(IFDE_VisualSet*& pVisualSet, - FDE_HVISUALOBJ* phCanvasObj = NULL, - IFDE_CanvasSet** ppCanvasSet = NULL) = 0; -}; - -#endif // XFA_SRC_FDE_FDE_VISUALSET_H_ diff --git a/xfa/src/fde/tto/fde_textout.cpp b/xfa/src/fde/tto/fde_textout.cpp deleted file mode 100644 index fc3e4ab24b..0000000000 --- a/xfa/src/fde/tto/fde_textout.cpp +++ /dev/null @@ -1,1120 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fde/tto/fde_textout.h" - -#include - -#include "core/include/fxcrt/fx_coordinates.h" -#include "core/include/fxcrt/fx_system.h" -#include "xfa/src/fde/fde_brush.h" -#include "xfa/src/fde/fde_pen.h" -#include "xfa/src/fde/fde_renderdevice.h" -#include "xfa/src/fgas/crt/fgas_memory.h" -#include "xfa/src/fgas/crt/fgas_utils.h" -#include "xfa/src/fgas/layout/fgas_textbreak.h" - -namespace { - -struct FDE_TTOPIECE { - public: - int32_t iStartChar; - int32_t iChars; - FX_DWORD dwCharStyles; - CFX_RectF rtPiece; -}; -typedef FDE_TTOPIECE* FDE_LPTTOPIECE; -typedef CFX_MassArrayTemplate CFDE_TTOPieceArray; - -class CFDE_TTOLine : public CFX_Target { - public: - CFDE_TTOLine(); - CFDE_TTOLine(const CFDE_TTOLine& ttoLine); - ~CFDE_TTOLine(); - int32_t AddPiece(int32_t index, const FDE_TTOPIECE& ttoPiece); - int32_t GetSize() const; - FDE_LPTTOPIECE GetPtrAt(int32_t index); - void RemoveLast(int32_t iCount); - void RemoveAll(FX_BOOL bLeaveMemory); - FX_BOOL m_bNewReload; - CFDE_TTOPieceArray m_pieces; - - protected: - int32_t m_iPieceCount; -}; -typedef CFX_ObjectMassArrayTemplate CFDE_TTOLineArray; - -class CFDE_TextOut : public IFDE_TextOut, public CFX_Target { - public: - CFDE_TextOut(); - ~CFDE_TextOut(); - virtual void Release() { delete this; } - virtual void SetFont(IFX_Font* pFont); - virtual void SetFontSize(FX_FLOAT fFontSize); - virtual void SetTextColor(FX_ARGB color); - virtual void SetStyles(FX_DWORD dwStyles); - virtual void SetTabWidth(FX_FLOAT fTabWidth); - virtual void SetEllipsisString(const CFX_WideString& wsEllipsis); - virtual void SetParagraphBreakChar(FX_WCHAR wch); - virtual void SetAlignment(int32_t iAlignment); - virtual void SetLineSpace(FX_FLOAT fLineSpace); - virtual void SetDIBitmap(CFX_DIBitmap* pDIB); - virtual void SetRenderDevice(CFX_RenderDevice* pDevice); - virtual void SetClipRect(const CFX_Rect& rtClip); - virtual void SetClipRect(const CFX_RectF& rtClip); - virtual void SetMatrix(const CFX_Matrix& matrix); - virtual void SetLineBreakTolerance(FX_FLOAT fTolerance); - virtual void CalcSize(const FX_WCHAR* pwsStr, - int32_t iLength, - CFX_Size& size); - virtual void CalcSize(const FX_WCHAR* pwsStr, - int32_t iLength, - CFX_SizeF& size); - virtual void CalcSize(const FX_WCHAR* pwsStr, - int32_t iLength, - CFX_Rect& rect); - virtual void CalcSize(const FX_WCHAR* pwsStr, - int32_t iLength, - CFX_RectF& rect); - - virtual void DrawText(const FX_WCHAR* pwsStr, - int32_t iLength, - int32_t x, - int32_t y); - virtual void DrawText(const FX_WCHAR* pwsStr, - int32_t iLength, - FX_FLOAT x, - FX_FLOAT y); - virtual void DrawText(const FX_WCHAR* pwsStr, - int32_t iLength, - const CFX_Rect& rect); - virtual void DrawText(const FX_WCHAR* pwsStr, - int32_t iLength, - const CFX_RectF& rect); - - virtual void SetLogicClipRect(const CFX_RectF& rtClip); - virtual void CalcLogicSize(const FX_WCHAR* pwsStr, - int32_t iLength, - CFX_SizeF& size); - virtual void CalcLogicSize(const FX_WCHAR* pwsStr, - int32_t iLength, - CFX_RectF& rect); - virtual void DrawLogicText(const FX_WCHAR* pwsStr, - int32_t iLength, - FX_FLOAT x, - FX_FLOAT y); - virtual void DrawLogicText(const FX_WCHAR* pwsStr, - int32_t iLength, - const CFX_RectF& rect); - virtual int32_t GetTotalLines(); - - protected: - void CalcTextSize(const FX_WCHAR* pwsStr, int32_t iLength, CFX_RectF& rect); - FX_BOOL RetrieveLineWidth(FX_DWORD dwBreakStatus, - FX_FLOAT& fStartPos, - FX_FLOAT& fWidth, - FX_FLOAT& fHeight); - void SetLineWidth(CFX_RectF& rect); - void DrawText(const FX_WCHAR* pwsStr, - int32_t iLength, - const CFX_RectF& rect, - const CFX_RectF& rtClip); - void LoadText(const FX_WCHAR* pwsStr, int32_t iLength, const CFX_RectF& rect); - void LoadEllipsis(); - void ExpandBuffer(int32_t iSize, int32_t iType); - void RetrieveEllPieces(int32_t*& pCharWidths); - - void Reload(const CFX_RectF& rect); - void ReloadLinePiece(CFDE_TTOLine* pLine, const CFX_RectF& rect); - FX_BOOL RetriecePieces(FX_DWORD dwBreakStatus, - int32_t& iStartChar, - int32_t& iPieceWidths, - FX_BOOL bReload, - const CFX_RectF& rect); - void AppendPiece(const FDE_TTOPIECE& ttoPiece, - FX_BOOL bNeedReload, - FX_BOOL bEnd); - void ReplaceWidthEllipsis(); - void DoAlignment(const CFX_RectF& rect); - void OnDraw(const CFX_RectF& rtClip); - int32_t GetDisplayPos(FDE_LPTTOPIECE pPiece); - int32_t GetCharRects(FDE_LPTTOPIECE pPiece); - - void ToTextRun(const FDE_LPTTOPIECE pPiece, FX_TXTRUN& tr); - void DrawLine(const FDE_LPTTOPIECE pPiece, IFDE_Pen*& pPen); - - IFX_TxtBreak* m_pTxtBreak; - IFX_Font* m_pFont; - FX_FLOAT m_fFontSize; - FX_FLOAT m_fLineSpace; - FX_FLOAT m_fLinePos; - FX_FLOAT m_fTolerance; - int32_t m_iAlignment; - int32_t m_iTxtBkAlignment; - int32_t* m_pCharWidths; - int32_t m_iChars; - int32_t* m_pEllCharWidths; - int32_t m_iEllChars; - FX_WCHAR m_wParagraphBkChar; - FX_ARGB m_TxtColor; - FX_DWORD m_dwStyles; - FX_DWORD m_dwTxtBkStyles; - CFX_WideString m_wsEllipsis; - FX_BOOL m_bElliChanged; - int32_t m_iEllipsisWidth; - CFX_WideString m_wsText; - CFX_RectF m_rtClip; - CFX_RectF m_rtLogicClip; - CFX_Matrix m_Matrix; - CFDE_TTOLineArray m_ttoLines; - int32_t m_iCurLine; - int32_t m_iCurPiece; - int32_t m_iTotalLines; - FXTEXT_CHARPOS* m_pCharPos; - int32_t m_iCharPosSize; - IFDE_RenderDevice* m_pRenderDevice; - CFX_Int32Array m_hotKeys; - CFX_RectFArray m_rectArray; -}; - -} // namespace - -IFDE_TextOut* IFDE_TextOut::Create() { - return new CFDE_TextOut; -} -CFDE_TextOut::CFDE_TextOut() - : m_pFont(NULL), - m_fFontSize(12.0f), - m_fLineSpace(m_fFontSize), - m_fLinePos(0.0f), - m_fTolerance(0.0f), - m_iAlignment(0), - m_iTxtBkAlignment(0), - m_pCharWidths(NULL), - m_iChars(0), - m_pEllCharWidths(NULL), - m_iEllChars(0), - m_wParagraphBkChar(L'\n'), - m_TxtColor(0xFF000000), - m_dwStyles(0), - m_dwTxtBkStyles(0), - m_bElliChanged(FALSE), - m_iEllipsisWidth(0), - m_ttoLines(5), - m_iCurLine(0), - m_iCurPiece(0), - m_iTotalLines(0), - m_pCharPos(NULL), - m_iCharPosSize(0), - m_pRenderDevice(NULL) { - m_pTxtBreak = IFX_TxtBreak::Create(FX_TXTBREAKPOLICY_None); - FXSYS_assert(m_pTxtBreak != NULL); - m_Matrix.SetIdentity(); - m_rtClip.Reset(); - m_rtLogicClip.Reset(); -} -CFDE_TextOut::~CFDE_TextOut() { - if (m_pTxtBreak) { - m_pTxtBreak->Release(); - } - FX_Free(m_pCharWidths); - FX_Free(m_pEllCharWidths); - if (m_pRenderDevice) { - m_pRenderDevice->Release(); - } - FX_Free(m_pCharPos); - m_ttoLines.RemoveAll(); -} -void CFDE_TextOut::SetFont(IFX_Font* pFont) { - FXSYS_assert(pFont); - m_pFont = pFont; - m_pTxtBreak->SetFont(pFont); -} -void CFDE_TextOut::SetFontSize(FX_FLOAT fFontSize) { - FXSYS_assert(fFontSize > 0); - m_fFontSize = fFontSize; - m_pTxtBreak->SetFontSize(fFontSize); -} -void CFDE_TextOut::SetTextColor(FX_ARGB color) { - m_TxtColor = color; -} -void CFDE_TextOut::SetStyles(FX_DWORD dwStyles) { - m_dwStyles = dwStyles; - m_dwTxtBkStyles = 0; - if (dwStyles & FDE_TTOSTYLE_SingleLine) { - m_dwTxtBkStyles |= FX_TXTLAYOUTSTYLE_SingleLine; - } - if (dwStyles & FDE_TTOSTYLE_ExpandTab) { - m_dwTxtBkStyles |= FX_TXTLAYOUTSTYLE_ExpandTab; - } - if (dwStyles & FDE_TTOSTYLE_ArabicShapes) { - m_dwTxtBkStyles |= FX_TXTLAYOUTSTYLE_ArabicShapes; - } - if (dwStyles & FDE_TTOSTYLE_RTL) { - m_dwTxtBkStyles |= FX_TXTLAYOUTSTYLE_RTLReadingOrder; - } - if (dwStyles & FDE_TTOSTYLE_ArabicContext) { - m_dwTxtBkStyles |= FX_TXTLAYOUTSTYLE_ArabicContext; - } - if (dwStyles & FDE_TTOSTYLE_VerticalLayout) { - m_dwTxtBkStyles |= - (FX_TXTLAYOUTSTYLE_VerticalChars | FX_TXTLAYOUTSTYLE_VerticalLayout); - } - m_pTxtBreak->SetLayoutStyles(m_dwTxtBkStyles); -} -void CFDE_TextOut::SetTabWidth(FX_FLOAT fTabWidth) { - FXSYS_assert(fTabWidth > 1.0f); - m_pTxtBreak->SetTabWidth(fTabWidth, FALSE); -} -void CFDE_TextOut::SetEllipsisString(const CFX_WideString& wsEllipsis) { - m_bElliChanged = TRUE; - m_wsEllipsis = wsEllipsis; -} -void CFDE_TextOut::SetParagraphBreakChar(FX_WCHAR wch) { - m_wParagraphBkChar = wch; - m_pTxtBreak->SetParagraphBreakChar(wch); -} -void CFDE_TextOut::SetAlignment(int32_t iAlignment) { - m_iAlignment = iAlignment; - switch (m_iAlignment) { - case FDE_TTOALIGNMENT_TopCenter: - case FDE_TTOALIGNMENT_Center: - case FDE_TTOALIGNMENT_BottomCenter: - m_iTxtBkAlignment = FX_TXTLINEALIGNMENT_Center; - break; - case FDE_TTOALIGNMENT_TopRight: - case FDE_TTOALIGNMENT_CenterRight: - case FDE_TTOALIGNMENT_BottomRight: - m_iTxtBkAlignment = FX_TXTLINEALIGNMENT_Right; - break; - default: - m_iTxtBkAlignment = FX_TXTLINEALIGNMENT_Left; - break; - } - m_pTxtBreak->SetAlignment(m_iTxtBkAlignment); -} -void CFDE_TextOut::SetLineSpace(FX_FLOAT fLineSpace) { - FXSYS_assert(fLineSpace > 1.0f); - m_fLineSpace = fLineSpace; -} -void CFDE_TextOut::SetDIBitmap(CFX_DIBitmap* pDIB) { - FXSYS_assert(pDIB != NULL); - if (m_pRenderDevice != NULL) { - m_pRenderDevice->Release(); - } - m_pRenderDevice = IFDE_RenderDevice::Create(pDIB); -} -void CFDE_TextOut::SetRenderDevice(CFX_RenderDevice* pDevice) { - FXSYS_assert(pDevice != NULL); - if (m_pRenderDevice != NULL) { - m_pRenderDevice->Release(); - } - m_pRenderDevice = IFDE_RenderDevice::Create(pDevice); -} -void CFDE_TextOut::SetClipRect(const CFX_Rect& rtClip) { - m_rtClip.Set((FX_FLOAT)rtClip.left, (FX_FLOAT)rtClip.top, - (FX_FLOAT)rtClip.Width(), (FX_FLOAT)rtClip.Height()); -} -void CFDE_TextOut::SetClipRect(const CFX_RectF& rtClip) { - m_rtClip = rtClip; -} -void CFDE_TextOut::SetLogicClipRect(const CFX_RectF& rtClip) { - m_rtLogicClip = rtClip; -} -void CFDE_TextOut::SetMatrix(const CFX_Matrix& matrix) { - m_Matrix = matrix; -} -void CFDE_TextOut::SetLineBreakTolerance(FX_FLOAT fTolerance) { - m_fTolerance = fTolerance; - m_pTxtBreak->SetLineBreakTolerance(m_fTolerance); -} -int32_t CFDE_TextOut::GetTotalLines() { - return m_iTotalLines; -} -void CFDE_TextOut::CalcSize(const FX_WCHAR* pwsStr, - int32_t iLength, - CFX_Size& size) { - CFX_RectF rtText; - rtText.Set(0.0f, 0.0f, (FX_FLOAT)size.x, (FX_FLOAT)size.y); - CalcSize(pwsStr, iLength, rtText); - size.x = (int32_t)rtText.Width(); - size.y = (int32_t)rtText.Height(); -} -void CFDE_TextOut::CalcSize(const FX_WCHAR* pwsStr, - int32_t iLength, - CFX_SizeF& size) { - CFX_RectF rtText; - rtText.Set(0.0f, 0.0f, size.x, size.y); - CalcSize(pwsStr, iLength, rtText); - size.x = rtText.Width(); - size.y = rtText.Height(); -} -void CFDE_TextOut::CalcSize(const FX_WCHAR* pwsStr, - int32_t iLength, - CFX_Rect& rect) { - CFX_RectF rtText; - rtText.Set((FX_FLOAT)rect.left, (FX_FLOAT)rect.top, (FX_FLOAT)rect.Width(), - (FX_FLOAT)rect.Height()); - CalcSize(pwsStr, iLength, rtText); - rect.Set((int32_t)rtText.left, (int32_t)rtText.top, (int32_t)rtText.Width(), - (int32_t)rtText.Height()); -} -void CFDE_TextOut::CalcSize(const FX_WCHAR* pwsStr, - int32_t iLength, - CFX_RectF& rect) { - if (pwsStr == NULL || iLength < 1) { - rect.width = 0.0f; - rect.height = 0.0f; - } else { - CFX_Matrix rm; - rm.SetReverse(m_Matrix); - rm.TransformRect(rect); - CalcTextSize(pwsStr, iLength, rect); - m_Matrix.TransformRect(rect); - } -} -void CFDE_TextOut::CalcLogicSize(const FX_WCHAR* pwsStr, - int32_t iLength, - CFX_SizeF& size) { - CFX_RectF rtText; - rtText.Set(0.0f, 0.0f, size.x, size.y); - CalcLogicSize(pwsStr, iLength, rtText); - size.x = rtText.Width(); - size.y = rtText.Height(); -} -void CFDE_TextOut::CalcLogicSize(const FX_WCHAR* pwsStr, - int32_t iLength, - CFX_RectF& rect) { - if (pwsStr == NULL || iLength < 1) { - rect.width = 0.0f; - rect.height = 0.0f; - } else { - CalcTextSize(pwsStr, iLength, rect); - } -} -void CFDE_TextOut::CalcTextSize(const FX_WCHAR* pwsStr, - int32_t iLength, - CFX_RectF& rect) { - FXSYS_assert(m_pFont != NULL && m_fFontSize >= 1.0f); - SetLineWidth(rect); - m_iTotalLines = 0; - const FX_WCHAR* pStr = pwsStr; - FX_BOOL bHotKey = !!(m_dwStyles & FDE_TTOSTYLE_HotKey); - FX_BOOL bVertical = !!(m_dwStyles & FDE_TTOSTYLE_VerticalLayout); - FX_FLOAT fWidth = 0.0f; - FX_FLOAT fHeight = 0.0f; - FX_FLOAT fStartPos = bVertical ? rect.bottom() : rect.right(); - FX_DWORD dwBreakStatus = 0; - FX_WCHAR wPreChar = 0; - FX_WCHAR wch; - FX_WCHAR wBreak = 0; - while (iLength-- > 0) { - wch = *pStr++; - if (wBreak == 0 && (wch == L'\n' || wch == L'\r')) { - wBreak = wch; - m_pTxtBreak->SetParagraphBreakChar(wch); - } - if (bHotKey && wch == L'&' && wPreChar != L'&') { - wPreChar = wch; - continue; - } - dwBreakStatus = m_pTxtBreak->AppendChar(wch); - if (dwBreakStatus > FX_TXTBREAK_PieceBreak) { - RetrieveLineWidth(dwBreakStatus, fStartPos, fWidth, fHeight); - } - wPreChar = 0; - } - dwBreakStatus = m_pTxtBreak->EndBreak(FX_TXTBREAK_ParagraphBreak); - if (dwBreakStatus > FX_TXTBREAK_PieceBreak) { - RetrieveLineWidth(dwBreakStatus, fStartPos, fWidth, fHeight); - } - m_pTxtBreak->Reset(); - FX_FLOAT fInc = rect.Height() - fHeight; - if (bVertical) { - fInc = rect.Width() - fHeight; - } - if (m_iAlignment >= FDE_TTOALIGNMENT_CenterLeft && - m_iAlignment < FDE_TTOALIGNMENT_BottomLeft) { - fInc /= 2.0f; - } else if (m_iAlignment < FDE_TTOALIGNMENT_CenterLeft) { - fInc = 0.0f; - } - if (bVertical) { - rect.top += fStartPos; - rect.left += fInc; - rect.width = fHeight; - rect.height = std::min(fWidth, rect.Height()); - } else { - rect.left += fStartPos; - rect.top += fInc; - rect.width = std::min(fWidth, rect.Width()); - rect.height = fHeight; - if (m_dwStyles & FDE_TTOSTYLE_LastLineHeight) { - rect.height -= m_fLineSpace - m_fFontSize; - } - } -} -void CFDE_TextOut::SetLineWidth(CFX_RectF& rect) { - if ((m_dwStyles & FDE_TTOSTYLE_SingleLine) == 0) { - FX_FLOAT fLineWidth = 0.0f; - if (m_dwStyles & FDE_TTOSTYLE_VerticalLayout) { - if (rect.Height() < 1.0f) { - rect.height = m_fFontSize * 1000.0f; - } - fLineWidth = rect.Height(); - } else { - if (rect.Width() < 1.0f) { - rect.width = m_fFontSize * 1000.0f; - } - fLineWidth = rect.Width(); - } - m_pTxtBreak->SetLineWidth(fLineWidth); - } -} -FX_BOOL CFDE_TextOut::RetrieveLineWidth(FX_DWORD dwBreakStatus, - FX_FLOAT& fStartPos, - FX_FLOAT& fWidth, - FX_FLOAT& fHeight) { - if (dwBreakStatus <= FX_TXTBREAK_PieceBreak) { - return FALSE; - } - FX_FLOAT fLineStep = - (m_fLineSpace > m_fFontSize) ? m_fLineSpace : m_fFontSize; - FX_BOOL bLineWrap = !!(m_dwStyles & FDE_TTOSTYLE_LineWrap); - FX_FLOAT fLineWidth = 0.0f; - int32_t iCount = m_pTxtBreak->CountBreakPieces(); - for (int32_t i = 0; i < iCount; i++) { - const CFX_TxtPiece* pPiece = m_pTxtBreak->GetBreakPiece(i); - fLineWidth += (FX_FLOAT)pPiece->m_iWidth / 20000.0f; - fStartPos = std::min(fStartPos, (FX_FLOAT)pPiece->m_iStartPos / 20000.0f); - } - m_pTxtBreak->ClearBreakPieces(); - if (dwBreakStatus == FX_TXTBREAK_ParagraphBreak) { - m_pTxtBreak->Reset(); - } - if (!bLineWrap && dwBreakStatus == FX_TXTBREAK_LineBreak) { - fWidth += fLineWidth; - } else { - fWidth = std::max(fWidth, fLineWidth); - fHeight += fLineStep; - } - m_iTotalLines++; - return TRUE; -} -void CFDE_TextOut::DrawText(const FX_WCHAR* pwsStr, - int32_t iLength, - int32_t x, - int32_t y) { - CFX_RectF rtText; - rtText.Set((FX_FLOAT)x, (FX_FLOAT)y, m_fFontSize * 1000.0f, - m_fFontSize * 1000.0f); - DrawText(pwsStr, iLength, rtText); -} -void CFDE_TextOut::DrawText(const FX_WCHAR* pwsStr, - int32_t iLength, - FX_FLOAT x, - FX_FLOAT y) { - CFX_RectF rtText; - rtText.Set(x, y, m_fFontSize * 1000.0f, m_fFontSize * 1000.0f); - DrawText(pwsStr, iLength, rtText); -} -void CFDE_TextOut::DrawText(const FX_WCHAR* pwsStr, - int32_t iLength, - const CFX_Rect& rect) { - CFX_RectF rtText; - rtText.Set((FX_FLOAT)rect.left, (FX_FLOAT)rect.top, (FX_FLOAT)rect.width, - (FX_FLOAT)rect.height); - DrawText(pwsStr, iLength, rtText); -} -void CFDE_TextOut::DrawText(const FX_WCHAR* pwsStr, - int32_t iLength, - const CFX_RectF& rect) { - CFX_RectF rtText; - rtText.Set(rect.left, rect.top, rect.width, rect.height); - CFX_Matrix rm; - rm.SetReverse(m_Matrix); - rm.TransformRect(rtText); - DrawText(pwsStr, iLength, rtText, m_rtClip); -} -void CFDE_TextOut::DrawLogicText(const FX_WCHAR* pwsStr, - int32_t iLength, - FX_FLOAT x, - FX_FLOAT y) { - CFX_RectF rtText; - rtText.Set(x, y, m_fFontSize * 1000.0f, m_fFontSize * 1000.0f); - DrawLogicText(pwsStr, iLength, rtText); -} -void CFDE_TextOut::DrawLogicText(const FX_WCHAR* pwsStr, - int32_t iLength, - const CFX_RectF& rect) { - CFX_RectF rtClip; - rtClip.Set(m_rtLogicClip.left, m_rtLogicClip.top, m_rtLogicClip.width, - m_rtLogicClip.height); - m_Matrix.TransformRect(rtClip); - DrawText(pwsStr, iLength, rect, rtClip); -} -void CFDE_TextOut::DrawText(const FX_WCHAR* pwsStr, - int32_t iLength, - const CFX_RectF& rect, - const CFX_RectF& rtClip) { - FXSYS_assert(m_pFont != NULL && m_fFontSize >= 1.0f); - if (pwsStr == NULL || iLength < 1) { - return; - } - if (rect.width < m_fFontSize || rect.height < m_fFontSize) { - return; - } - FX_FLOAT fLineWidth = rect.width; - if (m_dwStyles & FDE_TTOSTYLE_VerticalLayout) { - fLineWidth = rect.height; - } - m_pTxtBreak->SetLineWidth(fLineWidth); - m_ttoLines.RemoveAll(TRUE); - m_wsText.Empty(); - LoadText(pwsStr, iLength, rect); - if (m_dwStyles & FDE_TTOSTYLE_Ellipsis) { - ReplaceWidthEllipsis(); - } - Reload(rect); - DoAlignment(rect); - OnDraw(rtClip); -} -void CFDE_TextOut::ExpandBuffer(int32_t iSize, int32_t iType) { - switch (iType) { - case 0: - if (!m_pCharWidths) { - m_pCharWidths = FX_Alloc(int32_t, iSize); - m_iChars = iSize; - } else if (m_iChars < iSize) { - m_pCharWidths = FX_Realloc(int32_t, m_pCharWidths, iSize); - m_iChars = iSize; - } - FXSYS_memset(m_pCharWidths, 0, iSize * sizeof(int32_t)); - break; - case 1: - if (!m_pEllCharWidths) { - m_pEllCharWidths = FX_Alloc(int32_t, iSize); - m_iEllChars = iSize; - } else if (m_iEllChars < iSize) { - m_pEllCharWidths = FX_Realloc(int32_t, m_pEllCharWidths, iSize); - m_iEllChars = iSize; - } - FXSYS_memset(m_pEllCharWidths, 0, iSize * sizeof(int32_t)); - break; - case 2: - if (m_pCharPos == NULL) { - m_pCharPos = FX_Alloc(FXTEXT_CHARPOS, iSize); - m_iCharPosSize = iSize; - } else if (m_iCharPosSize < iSize) { - m_pCharPos = FX_Realloc(FXTEXT_CHARPOS, m_pCharPos, iSize); - m_iCharPosSize = iSize; - } - break; - } -} -void CFDE_TextOut::LoadEllipsis() { - if (!m_bElliChanged) { - return; - } - m_bElliChanged = FALSE; - m_iEllipsisWidth = 0; - int32_t iLength = m_wsEllipsis.GetLength(); - if (iLength < 1) { - return; - } - ExpandBuffer(iLength, 1); - const FX_WCHAR* pStr = (const FX_WCHAR*)m_wsEllipsis; - int32_t* pCharWidths = m_pEllCharWidths; - FX_DWORD dwBreakStatus; - FX_WCHAR wch; - while (iLength-- > 0) { - wch = *pStr++; - dwBreakStatus = m_pTxtBreak->AppendChar(wch); - if (dwBreakStatus > FX_TXTBREAK_PieceBreak) { - RetrieveEllPieces(pCharWidths); - } - } - dwBreakStatus = m_pTxtBreak->EndBreak(FX_TXTBREAK_ParagraphBreak); - if (dwBreakStatus > FX_TXTBREAK_PieceBreak) { - RetrieveEllPieces(pCharWidths); - } - m_pTxtBreak->Reset(); -} -void CFDE_TextOut::RetrieveEllPieces(int32_t*& pCharWidths) { - int32_t iCount = m_pTxtBreak->CountBreakPieces(); - CFX_Char* pTC; - for (int32_t i = 0; i < iCount; i++) { - const CFX_TxtPiece* pPiece = m_pTxtBreak->GetBreakPiece(i); - int32_t iPieceChars = pPiece->GetLength(); - for (int32_t j = 0; j < iPieceChars; j++) { - pTC = pPiece->GetCharPtr(j); - if (pTC->m_iCharWidth <= 0) { - *pCharWidths = 0; - } else { - *pCharWidths = pTC->m_iCharWidth; - } - m_iEllipsisWidth += *pCharWidths; - pCharWidths++; - } - } - m_pTxtBreak->ClearBreakPieces(); -} -void CFDE_TextOut::LoadText(const FX_WCHAR* pwsStr, - int32_t iLength, - const CFX_RectF& rect) { - FX_WCHAR* pStr = m_wsText.GetBuffer(iLength); - int32_t iTxtLength = iLength; - ExpandBuffer(iTxtLength, 0); - FX_BOOL bHotKey = !!(m_dwStyles & FDE_TTOSTYLE_HotKey); - FX_BOOL bVertical = !!(m_dwStyles & FDE_TTOSTYLE_VerticalLayout); - FX_BOOL bLineWrap = !!(m_dwStyles & FDE_TTOSTYLE_LineWrap); - FX_FLOAT fLineStep = - (m_fLineSpace > m_fFontSize) ? m_fLineSpace : m_fFontSize; - FX_FLOAT fLineStop = bVertical ? rect.left : rect.bottom(); - m_fLinePos = bVertical ? rect.right() : rect.top; - if (bVertical) { - fLineStep = -fLineStep; - } - m_hotKeys.RemoveAll(); - int32_t iStartChar = 0; - int32_t iChars = 0; - int32_t iPieceWidths = 0; - FX_DWORD dwBreakStatus; - FX_WCHAR wch; - FX_BOOL bRet = FALSE; - while (iTxtLength-- > 0) { - wch = *pwsStr++; - if (wch == L'&' && bHotKey && (pStr - 1) != NULL && *(pStr - 1) != L'&') { - if (iTxtLength > 0) { - m_hotKeys.Add(iChars); - } - continue; - } - *pStr++ = wch; - iChars++; - dwBreakStatus = m_pTxtBreak->AppendChar(wch); - if (dwBreakStatus > FX_TXTBREAK_PieceBreak) { - FX_BOOL bEndofLine = - RetriecePieces(dwBreakStatus, iStartChar, iPieceWidths, FALSE, rect); - if (bEndofLine && (bLineWrap || (dwBreakStatus > FX_TXTBREAK_LineBreak && - !bLineWrap))) { - iPieceWidths = 0; - m_iCurLine++; - m_fLinePos += fLineStep; - } - if ((bVertical && m_fLinePos + fLineStep < fLineStop) || - (!bVertical && m_fLinePos + fLineStep > fLineStop)) { - int32_t iCurLine = m_iCurLine; - if (bEndofLine) { - iCurLine--; - } - CFDE_TTOLine* pLine = m_ttoLines.GetPtrAt(iCurLine); - pLine->m_bNewReload = TRUE; - bRet = TRUE; - break; - } - } - } - dwBreakStatus = m_pTxtBreak->EndBreak(FX_TXTBREAK_ParagraphBreak); - if (dwBreakStatus > FX_TXTBREAK_PieceBreak && !bRet) { - RetriecePieces(dwBreakStatus, iStartChar, iPieceWidths, FALSE, rect); - } - m_pTxtBreak->ClearBreakPieces(); - m_pTxtBreak->Reset(); - m_wsText.ReleaseBuffer(iLength); -} -FX_BOOL CFDE_TextOut::RetriecePieces(FX_DWORD dwBreakStatus, - int32_t& iStartChar, - int32_t& iPieceWidths, - FX_BOOL bReload, - const CFX_RectF& rect) { - FX_BOOL bSingleLine = !!(m_dwStyles & FDE_TTOSTYLE_SingleLine); - FX_BOOL bLineWrap = !!(m_dwStyles & FDE_TTOSTYLE_LineWrap); - FX_BOOL bVertical = !!(m_dwStyles & FDE_TTOSTYLE_VerticalLayout); - FX_FLOAT fLineStep = - (m_fLineSpace > m_fFontSize) ? m_fLineSpace : m_fFontSize; - if (bVertical) { - fLineStep = -fLineStep; - } - CFX_Char* pTC = NULL; - FX_BOOL bNeedReload = FALSE; - FX_FLOAT fLineWidth = bVertical ? rect.Height() : rect.Width(); - int32_t iLineWidth = FXSYS_round(fLineWidth * 20000.0f); - int32_t iCount = m_pTxtBreak->CountBreakPieces(); - for (int32_t i = 0; i < iCount; i++) { - const CFX_TxtPiece* pPiece = m_pTxtBreak->GetBreakPiece(i); - int32_t iPieceChars = pPiece->GetLength(); - int32_t iChar = iStartChar; - int32_t iWidth = 0; - int32_t j = 0; - for (; j < iPieceChars; j++) { - pTC = pPiece->GetCharPtr(j); - int32_t iCurCharWidth = pTC->m_iCharWidth > 0 ? pTC->m_iCharWidth : 0; - if (bSingleLine || !bLineWrap) { - if (iLineWidth - iPieceWidths - iWidth < iCurCharWidth) { - bNeedReload = TRUE; - break; - } - } - iWidth += iCurCharWidth; - m_pCharWidths[iChar++] = iCurCharWidth; - } - if (j == 0 && !bReload) { - CFDE_TTOLine* pLine = m_ttoLines.GetPtrAt(m_iCurLine); - pLine->m_bNewReload = TRUE; - } else if (j > 0) { - CFX_RectF rtPiece; - if (bVertical) { - rtPiece.left = m_fLinePos; - rtPiece.top = rect.top + (FX_FLOAT)pPiece->m_iStartPos / 20000.0f; - rtPiece.width = fLineStep; - rtPiece.height = iWidth / 20000.0f; - } else { - rtPiece.left = rect.left + (FX_FLOAT)pPiece->m_iStartPos / 20000.0f; - rtPiece.top = m_fLinePos; - rtPiece.width = iWidth / 20000.0f; - rtPiece.height = fLineStep; - } - FDE_TTOPIECE ttoPiece; - ttoPiece.iStartChar = iStartChar; - ttoPiece.iChars = j; - ttoPiece.rtPiece = rtPiece; - ttoPiece.dwCharStyles = pPiece->m_dwCharStyles; - if (FX_IsOdd(pPiece->m_iBidiLevel)) { - ttoPiece.dwCharStyles |= FX_TXTCHARSTYLE_OddBidiLevel; - } - AppendPiece(ttoPiece, bNeedReload, (bReload && i == iCount - 1)); - } - iStartChar += iPieceChars; - iPieceWidths += iWidth; - } - m_pTxtBreak->ClearBreakPieces(); - FX_BOOL bRet = bSingleLine || bLineWrap || (!bLineWrap && bNeedReload) || - dwBreakStatus == FX_TXTBREAK_ParagraphBreak; - return bRet; -} -void CFDE_TextOut::AppendPiece(const FDE_TTOPIECE& ttoPiece, - FX_BOOL bNeedReload, - FX_BOOL bEnd) { - if (m_iCurLine >= m_ttoLines.GetSize()) { - CFDE_TTOLine ttoLine; - ttoLine.m_bNewReload = bNeedReload; - m_iCurPiece = ttoLine.AddPiece(m_iCurPiece, ttoPiece); - m_iCurLine = m_ttoLines.Add(ttoLine); - } else { - CFDE_TTOLine* pLine = m_ttoLines.GetPtrAt(m_iCurLine); - pLine->m_bNewReload = bNeedReload; - m_iCurPiece = pLine->AddPiece(m_iCurPiece, ttoPiece); - if (bEnd) { - int32_t iPieces = pLine->GetSize(); - if (m_iCurPiece < iPieces) { - pLine->RemoveLast(iPieces - m_iCurPiece - 1); - } - } - } - if (!bEnd && bNeedReload) { - m_iCurPiece = 0; - } -} -void CFDE_TextOut::ReplaceWidthEllipsis() { - LoadEllipsis(); - int32_t iLength = m_wsEllipsis.GetLength(); - if (iLength < 1) { - return; - } - int32_t iLines = m_ttoLines.GetSize(); - for (int32_t i = 0; i < iLines; i++) { - CFDE_TTOLine* pLine = m_ttoLines.GetPtrAt(i); - if (!pLine->m_bNewReload) { - continue; - } - int32_t iEllipsisCharIndex = iLength - 1; - int32_t iCharWidth = 0; - int32_t iCharCount = 0; - int32_t iPiece = pLine->GetSize(); - while (iPiece-- > 0) { - FDE_LPTTOPIECE pPiece = pLine->GetPtrAt(iPiece); - if (pPiece == NULL) { - break; - } - for (int32_t j = pPiece->iChars - 1; j >= 0; j--) { - if (iEllipsisCharIndex < 0) { - break; - } - int32_t index = pPiece->iStartChar + j; - iCharWidth += m_pCharWidths[index]; - iCharCount++; - if (iCharCount <= iLength) { - m_wsText.SetAt(index, m_wsEllipsis.GetAt(iEllipsisCharIndex)); - m_pCharWidths[index] = m_pEllCharWidths[iEllipsisCharIndex]; - } else if (iCharWidth <= m_iEllipsisWidth) { - m_wsText.SetAt(index, 0); - m_pCharWidths[index] = 0; - } - iEllipsisCharIndex--; - } - if (iEllipsisCharIndex < 0) { - break; - } - } - } -} -void CFDE_TextOut::Reload(const CFX_RectF& rect) { - int32_t iCount = m_ttoLines.GetSize(); - for (int32_t i = 0; i < iCount; i++) { - CFDE_TTOLine* pLine = m_ttoLines.GetPtrAt(i); - if (pLine == NULL || !pLine->m_bNewReload) { - continue; - } - m_iCurLine = i; - m_iCurPiece = 0; - ReloadLinePiece(pLine, rect); - } -} -void CFDE_TextOut::ReloadLinePiece(CFDE_TTOLine* pLine, const CFX_RectF& rect) { - const FX_WCHAR* pwsStr = (const FX_WCHAR*)m_wsText; - FX_BOOL bVertical = !!(m_dwStyles & FDE_TTOSTYLE_VerticalLayout); - int32_t iPieceWidths = 0; - FDE_LPTTOPIECE pPiece = pLine->GetPtrAt(0); - int32_t iStartChar = pPiece->iStartChar; - m_fLinePos = bVertical ? pPiece->rtPiece.left : pPiece->rtPiece.top; - int32_t iPieceCount = pLine->GetSize(); - int32_t iPieceIndex = 0; - FX_DWORD dwBreakStatus = 0; - FX_WCHAR wch; - while (iPieceIndex < iPieceCount) { - int32_t iStar = iStartChar; - int32_t iEnd = pPiece->iChars + iStar; - while (iStar < iEnd) { - wch = *(pwsStr + iStar); - dwBreakStatus = m_pTxtBreak->AppendChar(wch); - if (dwBreakStatus > FX_TXTBREAK_PieceBreak) { - RetriecePieces(dwBreakStatus, iStartChar, iPieceWidths, TRUE, rect); - } - iStar++; - } - iPieceIndex++; - pPiece = pLine->GetPtrAt(iPieceIndex); - } - dwBreakStatus = m_pTxtBreak->EndBreak(FX_TXTBREAK_ParagraphBreak); - if (dwBreakStatus > FX_TXTBREAK_PieceBreak) { - RetriecePieces(dwBreakStatus, iStartChar, iPieceWidths, TRUE, rect); - } - m_pTxtBreak->Reset(); -} -void CFDE_TextOut::DoAlignment(const CFX_RectF& rect) { - FX_BOOL bVertical = !!(m_dwStyles & FDE_TTOSTYLE_VerticalLayout); - FX_FLOAT fLineStopS = bVertical ? rect.right() : rect.bottom(); - int32_t iLines = m_ttoLines.GetSize(); - if (iLines < 1) { - return; - } - CFDE_TTOLine* pLine = m_ttoLines.GetPtrAt(iLines - 1); - FDE_LPTTOPIECE pPiece = pLine->GetPtrAt(0); - if (pPiece == NULL) { - return; - } - FX_FLOAT fLineStopD = - bVertical ? pPiece->rtPiece.right() : pPiece->rtPiece.bottom(); - FX_FLOAT fInc = fLineStopS - fLineStopD; - if (m_iAlignment >= FDE_TTOALIGNMENT_CenterLeft && - m_iAlignment < FDE_TTOALIGNMENT_BottomLeft) { - fInc /= 2.0f; - } else if (m_iAlignment < FDE_TTOALIGNMENT_CenterLeft) { - fInc = 0.0f; - } - if (fInc < 1.0f) { - return; - } - for (int32_t i = 0; i < iLines; i++) { - CFDE_TTOLine* pLine = m_ttoLines.GetPtrAt(i); - int32_t iPieces = pLine->GetSize(); - for (int32_t j = 0; j < iPieces; j++) { - FDE_LPTTOPIECE pPiece = pLine->GetPtrAt(j); - if (bVertical) { - pPiece->rtPiece.left += fInc; - } else { - pPiece->rtPiece.top += fInc; - } - } - } -} -void CFDE_TextOut::OnDraw(const CFX_RectF& rtClip) { - if (m_pRenderDevice == NULL) { - return; - } - int32_t iLines = m_ttoLines.GetSize(); - if (iLines < 1) { - return; - } - IFDE_SolidBrush* pBrush = - (IFDE_SolidBrush*)IFDE_Brush::Create(FDE_BRUSHTYPE_Solid); - pBrush->SetColor(m_TxtColor); - IFDE_Pen* pPen = NULL; - FDE_HDEVICESTATE hDev = m_pRenderDevice->SaveState(); - if (rtClip.Width() > 0.0f && rtClip.Height() > 0.0f) { - m_pRenderDevice->SetClipRect(rtClip); - } - for (int32_t i = 0; i < iLines; i++) { - CFDE_TTOLine* pLine = m_ttoLines.GetPtrAt(i); - int32_t iPieces = pLine->GetSize(); - for (int32_t j = 0; j < iPieces; j++) { - FDE_LPTTOPIECE pPiece = pLine->GetPtrAt(j); - if (pPiece == NULL) { - continue; - } - int32_t iCount = GetDisplayPos(pPiece); - if (iCount > 0) { - m_pRenderDevice->DrawString(pBrush, m_pFont, m_pCharPos, iCount, - m_fFontSize, &m_Matrix); - } - DrawLine(pPiece, pPen); - } - } - m_pRenderDevice->RestoreState(hDev); - if (pBrush) { - pBrush->Release(); - } - if (pPen) { - pPen->Release(); - } -} -int32_t CFDE_TextOut::GetDisplayPos(FDE_LPTTOPIECE pPiece) { - FX_TXTRUN tr; - ToTextRun(pPiece, tr); - ExpandBuffer(tr.iLength, 2); - return m_pTxtBreak->GetDisplayPos(&tr, m_pCharPos); -} -int32_t CFDE_TextOut::GetCharRects(FDE_LPTTOPIECE pPiece) { - FX_TXTRUN tr; - ToTextRun(pPiece, tr); - m_rectArray.RemoveAll(); - return m_pTxtBreak->GetCharRects(&tr, m_rectArray); -} -void CFDE_TextOut::ToTextRun(const FDE_LPTTOPIECE pPiece, FX_TXTRUN& tr) { - tr.pAccess = NULL; - tr.pIdentity = NULL; - tr.pStr = (const FX_WCHAR*)m_wsText + pPiece->iStartChar; - tr.pWidths = m_pCharWidths + pPiece->iStartChar; - tr.iLength = pPiece->iChars; - tr.pFont = m_pFont; - tr.fFontSize = m_fFontSize; - tr.dwStyles = m_dwTxtBkStyles; - tr.iCharRotation = 0; - tr.dwCharStyles = pPiece->dwCharStyles; - tr.wLineBreakChar = m_wParagraphBkChar; - tr.pRect = &pPiece->rtPiece; -} -void CFDE_TextOut::DrawLine(const FDE_LPTTOPIECE pPiece, IFDE_Pen*& pPen) { - FX_BOOL bUnderLine = !!(m_dwStyles & FDE_TTOSTYLE_Underline); - FX_BOOL bStrikeOut = !!(m_dwStyles & FDE_TTOSTYLE_Strikeout); - FX_BOOL bHotKey = !!(m_dwStyles & FDE_TTOSTYLE_HotKey); - FX_BOOL bVertical = !!(m_dwStyles & FDE_TTOSTYLE_VerticalLayout); - if (!bUnderLine && !bStrikeOut && !bHotKey) { - return; - } - if (pPen == NULL) { - pPen = IFDE_Pen::Create(); - pPen->SetColor(m_TxtColor); - } - IFDE_Path* pPath = IFDE_Path::Create(); - int32_t iLineCount = 0; - CFX_RectF rtText = pPiece->rtPiece; - CFX_PointF pt1, pt2; - if (bUnderLine) { - if (bVertical) { - pt1.x = rtText.left; - pt1.y = rtText.top; - pt2.x = rtText.left; - pt2.y = rtText.bottom(); - } else { - pt1.x = rtText.left; - pt1.y = rtText.bottom(); - pt2.x = rtText.right(); - pt2.y = rtText.bottom(); - } - pPath->AddLine(pt1, pt2); - iLineCount++; - } - if (bStrikeOut) { - if (bVertical) { - pt1.x = rtText.left + rtText.width * 2.0f / 5.0f; - pt1.y = rtText.top; - pt2.x = pt1.x; - pt2.y = rtText.bottom(); - } else { - pt1.x = rtText.left; - pt1.y = rtText.bottom() - rtText.height * 2.0f / 5.0f; - pt2.x = rtText.right(); - pt2.y = pt1.y; - } - pPath->AddLine(pt1, pt2); - iLineCount++; - } - if (bHotKey) { - int32_t iHotKeys = m_hotKeys.GetSize(); - int32_t iCount = GetCharRects(pPiece); - if (iCount > 0) { - for (int32_t i = 0; i < iHotKeys; i++) { - int32_t iCharIndex = m_hotKeys.GetAt(i); - if (iCharIndex >= pPiece->iStartChar && - iCharIndex < pPiece->iStartChar + pPiece->iChars) { - CFX_RectF rect = m_rectArray.GetAt(iCharIndex - pPiece->iStartChar); - if (bVertical) { - pt1.x = rect.left; - pt1.y = rect.top; - pt2.x = rect.left; - pt2.y = rect.bottom(); - } else { - pt1.x = rect.left; - pt1.y = rect.bottom(); - pt2.x = rect.right(); - pt2.y = rect.bottom(); - } - pPath->AddLine(pt1, pt2); - iLineCount++; - } - } - } - } - if (iLineCount > 0) { - m_pRenderDevice->DrawPath(pPen, 1, pPath, &m_Matrix); - } - pPath->Release(); -} -CFDE_TTOLine::CFDE_TTOLine() - : m_bNewReload(FALSE), m_pieces(5), m_iPieceCount(0) {} -CFDE_TTOLine::CFDE_TTOLine(const CFDE_TTOLine& ttoLine) : m_pieces(5) { - m_bNewReload = ttoLine.m_bNewReload; - m_iPieceCount = ttoLine.m_iPieceCount; - m_pieces.Copy(ttoLine.m_pieces); -} -CFDE_TTOLine::~CFDE_TTOLine() {} -int32_t CFDE_TTOLine::AddPiece(int32_t index, const FDE_TTOPIECE& ttoPiece) { - if (index >= m_iPieceCount) { - index = m_pieces.Add(ttoPiece) + 1; - m_iPieceCount++; - } else { - FDE_TTOPIECE& piece = m_pieces.GetAt(index); - piece = ttoPiece; - } - return index; -} -int32_t CFDE_TTOLine::GetSize() const { - return m_iPieceCount; -} -FDE_LPTTOPIECE CFDE_TTOLine::GetPtrAt(int32_t index) { - if (index >= m_iPieceCount) { - return NULL; - } - return m_pieces.GetPtrAt(index); -} -void CFDE_TTOLine::RemoveLast(int32_t iCount) { - m_pieces.RemoveLast(iCount); -} -void CFDE_TTOLine::RemoveAll(FX_BOOL bLeaveMemory) { - m_pieces.RemoveAll(bLeaveMemory); -} diff --git a/xfa/src/fde/tto/fde_textout.h b/xfa/src/fde/tto/fde_textout.h deleted file mode 100644 index 0b8074bad7..0000000000 --- a/xfa/src/fde/tto/fde_textout.h +++ /dev/null @@ -1,102 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FDE_TTO_FDE_TEXTOUT_H_ -#define XFA_SRC_FDE_TTO_FDE_TEXTOUT_H_ - -#include "core/include/fxge/fx_dib.h" -#include "core/include/fxge/fx_ge.h" -#include "xfa/src/fgas/font/fgas_font.h" - -#define FDE_TTOSTYLE_Underline 0x0001 -#define FDE_TTOSTYLE_Strikeout 0x0002 -#define FDE_TTOSTYLE_VerticalLayout 0x0004 -#define FDE_TTOSTYLE_SingleLine 0x0010 -#define FDE_TTOSTYLE_ExpandTab 0x0020 -#define FDE_TTOSTYLE_HotKey 0x0040 -#define FDE_TTOSTYLE_Ellipsis 0x0080 -#define FDE_TTOSTYLE_LineWrap 0x0100 -#define FDE_TTOSTYLE_ArabicShapes 0x0200 -#define FDE_TTOSTYLE_RTL 0x0400 -#define FDE_TTOSTYLE_ArabicContext 0x0800 -#define FDE_TTOSTYLE_LastLineHeight 0x1000 -#define FDE_TTOALIGNMENT_TopLeft 0 -#define FDE_TTOALIGNMENT_TopCenter 1 -#define FDE_TTOALIGNMENT_TopRight 2 -#define FDE_TTOALIGNMENT_TopAuto 3 -#define FDE_TTOALIGNMENT_CenterLeft 4 -#define FDE_TTOALIGNMENT_Center 5 -#define FDE_TTOALIGNMENT_CenterRight 6 -#define FDE_TTOALIGNMENT_CenterAuto 7 -#define FDE_TTOALIGNMENT_BottomLeft 8 -#define FDE_TTOALIGNMENT_BottomCenter 9 -#define FDE_TTOALIGNMENT_BottomRight 10 -#define FDE_TTOALIGNMENT_BottomAuto 11 - -class IFDE_TextOut { - public: - static IFDE_TextOut* Create(); - virtual ~IFDE_TextOut() {} - virtual void Release() = 0; - virtual void SetFont(IFX_Font* pFont) = 0; - virtual void SetFontSize(FX_FLOAT fFontSize) = 0; - virtual void SetTextColor(FX_ARGB color) = 0; - virtual void SetStyles(FX_DWORD dwStyles) = 0; - virtual void SetTabWidth(FX_FLOAT fTabWidth) = 0; - virtual void SetEllipsisString(const CFX_WideString& wsEllipsis) = 0; - virtual void SetParagraphBreakChar(FX_WCHAR wch) = 0; - virtual void SetAlignment(int32_t iAlignment) = 0; - virtual void SetLineSpace(FX_FLOAT fLineSpace) = 0; - virtual void SetDIBitmap(CFX_DIBitmap* pDIB) = 0; - virtual void SetRenderDevice(CFX_RenderDevice* pDevice) = 0; - virtual void SetClipRect(const CFX_Rect& rtClip) = 0; - virtual void SetClipRect(const CFX_RectF& rtClip) = 0; - virtual void SetMatrix(const CFX_Matrix& matrix) = 0; - virtual void SetLineBreakTolerance(FX_FLOAT fTolerance) = 0; - virtual void CalcSize(const FX_WCHAR* pwsStr, - int32_t iLength, - CFX_Size& size) = 0; - virtual void CalcSize(const FX_WCHAR* pwsStr, - int32_t iLength, - CFX_SizeF& size) = 0; - virtual void CalcSize(const FX_WCHAR* pwsStr, - int32_t iLength, - CFX_Rect& rect) = 0; - virtual void CalcSize(const FX_WCHAR* pwsStr, - int32_t iLength, - CFX_RectF& rect) = 0; - virtual void DrawText(const FX_WCHAR* pwsStr, - int32_t iLength, - int32_t x, - int32_t y) = 0; - virtual void DrawText(const FX_WCHAR* pwsStr, - int32_t iLength, - FX_FLOAT x, - FX_FLOAT y) = 0; - virtual void DrawText(const FX_WCHAR* pwsStr, - int32_t iLength, - const CFX_Rect& rect) = 0; - virtual void DrawText(const FX_WCHAR* pwsStr, - int32_t iLength, - const CFX_RectF& rect) = 0; - virtual void SetLogicClipRect(const CFX_RectF& rtClip) = 0; - virtual void CalcLogicSize(const FX_WCHAR* pwsStr, - int32_t iLength, - CFX_SizeF& size) = 0; - virtual void CalcLogicSize(const FX_WCHAR* pwsStr, - int32_t iLength, - CFX_RectF& rect) = 0; - virtual void DrawLogicText(const FX_WCHAR* pwsStr, - int32_t iLength, - FX_FLOAT x, - FX_FLOAT y) = 0; - virtual void DrawLogicText(const FX_WCHAR* pwsStr, - int32_t iLength, - const CFX_RectF& rect) = 0; - virtual int32_t GetTotalLines() = 0; -}; - -#endif // XFA_SRC_FDE_TTO_FDE_TEXTOUT_H_ diff --git a/xfa/src/fde/xml/fde_xml.h b/xfa/src/fde/xml/fde_xml.h deleted file mode 100644 index 03e2a60806..0000000000 --- a/xfa/src/fde/xml/fde_xml.h +++ /dev/null @@ -1,226 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FDE_XML_FDE_XML_H_ -#define XFA_SRC_FDE_XML_FDE_XML_H_ - -#include "xfa/src/fgas/crt/fgas_stream.h" -#include "xfa/src/fgas/crt/fgas_utils.h" - -class IFDE_XMLNode; -class IFDE_XMLInstruction; -class IFDE_XMLDeclaration; -class IFDE_XMLElement; -class IFDE_XMLText; -class IFDE_XMLDoc; -class IFDE_XMLParser; -class IFDE_XMLSyntaxParser; - -enum FDE_XMLNODETYPE { - FDE_XMLNODE_Unknown = 0, - FDE_XMLNODE_Instruction, - FDE_XMLNODE_Element, - FDE_XMLNODE_Text, - FDE_XMLNODE_CharData, -}; - -struct FDE_XMLNODE { - int32_t iNodeNum; - FDE_XMLNODETYPE eNodeType; -}; -typedef CFX_StackTemplate CFDE_XMLNodeStack; - -FX_BOOL FDE_IsXMLValidChar(FX_WCHAR ch); -FX_BOOL FDE_IsXMLWhiteSpace(FX_WCHAR ch); -FX_BOOL FDE_IsXMLNameChar(FX_WCHAR ch, FX_BOOL bFirstChar); - -class IFDE_XMLNode { - public: - virtual ~IFDE_XMLNode() {} - virtual void Release() = 0; - virtual FDE_XMLNODETYPE GetType() const = 0; - virtual int32_t CountChildNodes() const = 0; - virtual IFDE_XMLNode* GetChildNode(int32_t index) const = 0; - virtual int32_t GetChildNodeIndex(IFDE_XMLNode* pNode) const = 0; - virtual IFDE_XMLNode* GetPath(const FX_WCHAR* pPath, - int32_t iLength = -1, - FX_BOOL bQualifiedName = TRUE) const = 0; - virtual int32_t InsertChildNode(IFDE_XMLNode* pNode, int32_t index = -1) = 0; - virtual void RemoveChildNode(IFDE_XMLNode* pNode) = 0; - virtual void DeleteChildren() = 0; - enum NodeItem { - Root = 0, - Parent, - FirstSibling, - PriorSibling, - NextSibling, - LastSibling, - FirstNeighbor, - PriorNeighbor, - NextNeighbor, - LastNeighbor, - FirstChild, - LastChild - }; - virtual IFDE_XMLNode* GetNodeItem(NodeItem eItem) const = 0; - virtual int32_t GetNodeLevel() const = 0; - virtual FX_BOOL InsertNodeItem(IFDE_XMLNode::NodeItem eItem, - IFDE_XMLNode* pNode) = 0; - virtual IFDE_XMLNode* RemoveNodeItem(IFDE_XMLNode::NodeItem eItem) = 0; - virtual IFDE_XMLNode* Clone(FX_BOOL bRecursive) = 0; - virtual void SaveXMLNode(IFX_Stream* pXMLStream) = 0; -}; -class IFDE_XMLInstruction : public IFDE_XMLNode { - public: - static IFDE_XMLInstruction* Create(const CFX_WideString& wsTarget); - virtual void GetTargetName(CFX_WideString& wsTarget) const = 0; - virtual int32_t CountAttributes() const = 0; - virtual FX_BOOL GetAttribute(int32_t index, - CFX_WideString& wsAttriName, - CFX_WideString& wsAttriValue) const = 0; - virtual FX_BOOL HasAttribute(const FX_WCHAR* pwsAttriName) const = 0; - virtual void GetString(const FX_WCHAR* pwsAttriName, - CFX_WideString& wsAttriValue, - const FX_WCHAR* pwsDefValue = NULL) const = 0; - virtual void SetString(const CFX_WideString& wsAttriName, - const CFX_WideString& wsAttriValue) = 0; - virtual int32_t GetInteger(const FX_WCHAR* pwsAttriName, - int32_t iDefValue = 0) const = 0; - virtual void SetInteger(const FX_WCHAR* pwsAttriName, - int32_t iAttriValue) = 0; - virtual FX_FLOAT GetFloat(const FX_WCHAR* pwsAttriName, - FX_FLOAT fDefValue = 0) const = 0; - virtual void SetFloat(const FX_WCHAR* pwsAttriName, FX_FLOAT fAttriValue) = 0; - virtual void RemoveAttribute(const FX_WCHAR* pwsAttriName) = 0; - virtual int32_t CountData() const = 0; - virtual FX_BOOL GetData(int32_t index, CFX_WideString& wsData) const = 0; - virtual void AppendData(const CFX_WideString& wsData) = 0; - virtual void RemoveData(int32_t index) = 0; -}; -class IFDE_XMLElement : public IFDE_XMLNode { - public: - static IFDE_XMLElement* Create(const CFX_WideString& wsTag); - virtual void GetTagName(CFX_WideString& wsTag) const = 0; - virtual void GetLocalTagName(CFX_WideString& wsTag) const = 0; - virtual void GetNamespacePrefix(CFX_WideString& wsPrefix) const = 0; - virtual void GetNamespaceURI(CFX_WideString& wsNamespace) const = 0; - virtual int32_t CountAttributes() const = 0; - virtual FX_BOOL GetAttribute(int32_t index, - CFX_WideString& wsAttriName, - CFX_WideString& wsAttriValue) const = 0; - virtual FX_BOOL HasAttribute(const FX_WCHAR* pwsAttriName) const = 0; - virtual void GetString(const FX_WCHAR* pwsAttriName, - CFX_WideString& wsAttriValue, - const FX_WCHAR* pwsDefValue = NULL) const = 0; - virtual void SetString(const CFX_WideString& wsAttriName, - const CFX_WideString& wsAttriValue) = 0; - virtual int32_t GetInteger(const FX_WCHAR* pwsAttriName, - int32_t iDefValue = 0) const = 0; - virtual void SetInteger(const FX_WCHAR* pwsAttriName, - int32_t iAttriValue) = 0; - virtual FX_FLOAT GetFloat(const FX_WCHAR* pwsAttriName, - FX_FLOAT fDefValue = 0) const = 0; - virtual void SetFloat(const FX_WCHAR* pwsAttriName, FX_FLOAT fAttriValue) = 0; - virtual void RemoveAttribute(const FX_WCHAR* pwsAttriName) = 0; - virtual void GetTextData(CFX_WideString& wsText) const = 0; - virtual void SetTextData(const CFX_WideString& wsText) = 0; -}; -class IFDE_XMLText : public IFDE_XMLNode { - public: - static IFDE_XMLText* Create(const CFX_WideString& wsText); - virtual void GetText(CFX_WideString& wsText) const = 0; - virtual void SetText(const CFX_WideString& wsText) = 0; -}; -class IFDE_XMLDeclaration : public IFDE_XMLNode { - public: -}; -class IFDE_XMLCharData : public IFDE_XMLDeclaration { - public: - static IFDE_XMLCharData* Create(const CFX_WideString& wsCData); - virtual ~IFDE_XMLCharData() {} - - virtual void GetCharData(CFX_WideString& wsCData) const = 0; - virtual void SetCharData(const CFX_WideString& wsCData) = 0; -}; - -struct FDE_XMLREADERHANDLER { - void* pData; - void (*OnTagEnter)(FDE_XMLREADERHANDLER* pThis, - FDE_XMLNODETYPE eType, - const CFX_WideString& wsTagName); - void (*OnTagBreak)(FDE_XMLREADERHANDLER* pThis, - const CFX_WideString& wsTagName); - void (*OnTagClose)(FDE_XMLREADERHANDLER* pThis, - const CFX_WideString& wsTagName); - void (*OnAttribute)(FDE_XMLREADERHANDLER* pThis, - const CFX_WideString& wsName, - const CFX_WideString& wsValue); - void (*OnData)(FDE_XMLREADERHANDLER* pThis, - FDE_XMLNODETYPE eType, - const CFX_WideString& wsValue); -}; - -class IFDE_XMLDoc { - public: - static IFDE_XMLDoc* Create(); - virtual ~IFDE_XMLDoc() {} - virtual void Release() = 0; - virtual FX_BOOL LoadXML(IFX_Stream* pXMLStream, - int32_t iXMLPlaneSize = 8192, - int32_t iTextDataSize = 256, - FDE_XMLREADERHANDLER* pHandler = NULL) = 0; - virtual FX_BOOL LoadXML(IFDE_XMLParser* pXMLParser) = 0; - virtual int32_t DoLoad(IFX_Pause* pPause = NULL) = 0; - virtual void CloseXML() = 0; - virtual IFDE_XMLNode* GetRoot() const = 0; - virtual void SaveXML(IFX_Stream* pXMLStream = NULL, - FX_BOOL bSaveBOM = TRUE) = 0; - virtual void SaveXMLNode(IFX_Stream* pXMLStream, IFDE_XMLNode* pNode) = 0; -}; -class IFDE_XMLParser { - public: - virtual ~IFDE_XMLParser() {} - virtual void Release() = 0; - virtual int32_t DoParser(IFX_Pause* pPause) = 0; -}; -#define FDE_XMLSYNTAXSTATUS_None 0x00 -#define FDE_XMLSYNTAXSTATUS_InstructionOpen 0x01 -#define FDE_XMLSYNTAXSTATUS_InstructionClose 0x02 -#define FDE_XMLSYNTAXSTATUS_ElementOpen 0x03 -#define FDE_XMLSYNTAXSTATUS_ElementBreak 0x04 -#define FDE_XMLSYNTAXSTATUS_ElementClose 0x05 -#define FDE_XMLSYNTAXSTATUS_TargetName 0x06 -#define FDE_XMLSYNTAXSTATUS_TagName 0x07 -#define FDE_XMLSYNTAXSTATUS_AttriName 0x08 -#define FDE_XMLSYNTAXSTATUS_AttriValue 0x09 -#define FDE_XMLSYNTAXSTATUS_Text 0x0A -#define FDE_XMLSYNTAXSTATUS_CData 0x0B -#define FDE_XMLSYNTAXSTATUS_TargetData 0x0C -#define FDE_XMLSYNTAXSTATUS_Error 0xFE -#define FDE_XMLSYNTAXSTATUS_EOS 0xFF -class IFDE_XMLSyntaxParser { - public: - static IFDE_XMLSyntaxParser* Create(); - virtual ~IFDE_XMLSyntaxParser() {} - virtual void Release() = 0; - virtual void Init(IFX_Stream* pStream, - int32_t iXMLPlaneSize, - int32_t iTextDataSize = 256) = 0; - virtual FX_DWORD DoSyntaxParse() = 0; - virtual int32_t GetStatus() const = 0; - virtual int32_t GetCurrentPos() const = 0; - virtual FX_FILESIZE GetCurrentBinaryPos() const = 0; - virtual int32_t GetCurrentNodeNumber() const = 0; - virtual int32_t GetLastNodeNumber() const = 0; - virtual void GetTargetName(CFX_WideString& wsTarget) const = 0; - virtual void GetTagName(CFX_WideString& wsTag) const = 0; - virtual void GetAttributeName(CFX_WideString& wsAttriName) const = 0; - virtual void GetAttributeValue(CFX_WideString& wsAttriValue) const = 0; - virtual void GetTextData(CFX_WideString& wsText) const = 0; - virtual void GetTargetData(CFX_WideString& wsData) const = 0; -}; - -#endif // XFA_SRC_FDE_XML_FDE_XML_H_ diff --git a/xfa/src/fde/xml/fde_xml_imp.cpp b/xfa/src/fde/xml/fde_xml_imp.cpp deleted file mode 100644 index 94e5de6b93..0000000000 --- a/xfa/src/fde/xml/fde_xml_imp.cpp +++ /dev/null @@ -1,2100 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fde/xml/fde_xml_imp.h" - -#include - -#include "xfa/src/fgas/crt/fgas_system.h" -#include "xfa/src/fgas/crt/fgas_codepage.h" - -#define FDE_XMLVALIDCHARRANGENUM 5 - -static const FX_WCHAR g_XMLValidCharRange[FDE_XMLVALIDCHARRANGENUM][2] = { - {0x09, 0x09}, - {0x0A, 0x0A}, - {0x0D, 0x0D}, - {0x20, 0xD7FF}, - {0xE000, 0xFFFD}}; - -FX_BOOL FDE_IsXMLValidChar(FX_WCHAR ch) { - int32_t iStart = 0, iEnd = FDE_XMLVALIDCHARRANGENUM - 1, iMid; - while (iStart <= iEnd) { - iMid = (iStart + iEnd) / 2; - if (ch < g_XMLValidCharRange[iMid][0]) { - iEnd = iMid - 1; - } else if (ch > g_XMLValidCharRange[iMid][1]) { - iStart = iMid + 1; - } else { - return TRUE; - } - } - return FALSE; -} -FX_BOOL FDE_IsXMLWhiteSpace(FX_WCHAR ch) { - return ch == L' ' || ch == 0x0A || ch == 0x0D || ch == 0x09; -} - -struct FDE_XMLNAMECHAR { - FX_WCHAR wStart; - FX_WCHAR wEnd; - FX_BOOL bStartChar; -}; - -#define FDE_XMLNAMECHARSNUM 20 -static FDE_XMLNAMECHAR g_XMLNameChars[FDE_XMLNAMECHARSNUM] = { - {L'-', L'.', FALSE}, {L'0', L'9', FALSE}, {L':', L':', FALSE}, - {L'A', L'Z', TRUE}, {L'_', L'_', TRUE}, {L'a', L'z', TRUE}, - {0xB7, 0xB7, FALSE}, {0xC0, 0xD6, TRUE}, {0xD8, 0xF6, TRUE}, - {0xF8, 0x02FF, TRUE}, {0x0300, 0x036F, FALSE}, {0x0370, 0x037D, TRUE}, - {0x037F, 0x1FFF, TRUE}, {0x200C, 0x200D, TRUE}, {0x203F, 0x2040, FALSE}, - {0x2070, 0x218F, TRUE}, {0x2C00, 0x2FEF, TRUE}, {0x3001, 0xD7FF, TRUE}, - {0xF900, 0xFDCF, TRUE}, {0xFDF0, 0xFFFD, TRUE}, -}; - -FX_BOOL FDE_IsXMLNameChar(FX_WCHAR ch, FX_BOOL bFirstChar) { - int32_t iStart = 0, iEnd = FDE_XMLNAMECHARSNUM - 1, iMid; - while (iStart <= iEnd) { - iMid = (iStart + iEnd) / 2; - if (ch < g_XMLNameChars[iMid].wStart) { - iEnd = iMid - 1; - } else if (ch > g_XMLNameChars[iMid].wEnd) { - iStart = iMid + 1; - } else { - if (bFirstChar) { - return g_XMLNameChars[iMid].bStartChar; - } - return TRUE; - } - } - return FALSE; -} - -CFDE_XMLNode::CFDE_XMLNode() - : m_pParent(NULL), m_pChild(NULL), m_pPrior(NULL), m_pNext(NULL) {} -CFDE_XMLNode::~CFDE_XMLNode() { - DeleteChildren(); -} -void CFDE_XMLNode::DeleteChildren() { - CFDE_XMLNode *pChild = m_pChild, *pTemp; - while (pChild != NULL) { - pTemp = pChild->m_pNext; - pChild->Release(); - pChild = pTemp; - } - m_pChild = NULL; -} -int32_t CFDE_XMLNode::CountChildNodes() const { - int32_t iCount = 0; - CFDE_XMLNode* pChild = m_pChild; - while (pChild != NULL) { - iCount++; - pChild = pChild->m_pNext; - } - return iCount; -} -CFDE_XMLNode* CFDE_XMLNode::GetChildNode(int32_t index) const { - CFDE_XMLNode* pChild = m_pChild; - while (pChild != NULL) { - if (index == 0) { - return pChild; - } - index--; - pChild = pChild->m_pNext; - } - return NULL; -} -int32_t CFDE_XMLNode::GetChildNodeIndex(CFDE_XMLNode* pNode) const { - int32_t index = 0; - CFDE_XMLNode* pChild = m_pChild; - while (pChild != NULL) { - if (pChild == pNode) { - return index; - } - index++; - pChild = pChild->m_pNext; - } - return -1; -} -CFDE_XMLNode* CFDE_XMLNode::GetPath(const FX_WCHAR* pPath, - int32_t iLength, - FX_BOOL bQualifiedName) const { - FXSYS_assert(pPath != NULL); - if (iLength < 0) { - iLength = FXSYS_wcslen(pPath); - } - if (iLength == 0) { - return NULL; - } - CFX_WideString csPath; - const FX_WCHAR* pStart = pPath; - const FX_WCHAR* pEnd = pPath + iLength; - FX_WCHAR ch; - while (pStart < pEnd) { - ch = *pStart++; - if (ch == L'/') { - break; - } else { - csPath += ch; - } - } - iLength -= pStart - pPath; - CFDE_XMLNode* pFind = NULL; - if (csPath.GetLength() < 1) { - pFind = GetNodeItem(IFDE_XMLNode::Root); - } else if (csPath.Compare(L"..") == 0) { - pFind = m_pParent; - } else if (csPath.Compare(L".") == 0) { - pFind = (CFDE_XMLNode*)this; - } else { - CFX_WideString wsTag; - CFDE_XMLNode* pNode = m_pChild; - while (pNode != NULL) { - if (pNode->GetType() == FDE_XMLNODE_Element) { - if (bQualifiedName) { - ((CFDE_XMLElement*)pNode)->GetTagName(wsTag); - } else { - ((CFDE_XMLElement*)pNode)->GetLocalTagName(wsTag); - } - if (wsTag.Compare(csPath) == 0) { - if (iLength < 1) { - pFind = pNode; - } else { - pFind = pNode->GetPath(pStart, iLength, bQualifiedName); - } - if (pFind != NULL) { - return pFind; - } - } - } - pNode = pNode->m_pNext; - } - } - if (pFind == NULL || iLength < 1) { - return pFind; - } - return pFind->GetPath(pStart, iLength, bQualifiedName); -} -int32_t CFDE_XMLNode::InsertChildNode(CFDE_XMLNode* pNode, int32_t index) { - FXSYS_assert(pNode != NULL); - pNode->m_pParent = this; - if (m_pChild == NULL) { - m_pChild = pNode; - pNode->m_pPrior = NULL; - pNode->m_pNext = NULL; - return 0; - } else if (index == 0) { - pNode->m_pNext = m_pChild; - pNode->m_pPrior = NULL; - m_pChild->m_pPrior = pNode; - m_pChild = pNode; - return 0; - } - int32_t iCount = 0; - CFDE_XMLNode* pFind = m_pChild; - while (++iCount != index && pFind->m_pNext != NULL) { - pFind = pFind->m_pNext; - } - pNode->m_pPrior = pFind; - pNode->m_pNext = pFind->m_pNext; - if (pFind->m_pNext != NULL) { - pFind->m_pNext->m_pPrior = pNode; - } - pFind->m_pNext = pNode; - return iCount; -} -void CFDE_XMLNode::RemoveChildNode(CFDE_XMLNode* pNode) { - FXSYS_assert(m_pChild != NULL && pNode != NULL); - if (m_pChild == pNode) { - m_pChild = pNode->m_pNext; - } else { - pNode->m_pPrior->m_pNext = pNode->m_pNext; - } - if (pNode->m_pNext != NULL) { - pNode->m_pNext->m_pPrior = pNode->m_pPrior; - } - pNode->m_pParent = NULL; - pNode->m_pNext = NULL; - pNode->m_pPrior = NULL; -} -CFDE_XMLNode* CFDE_XMLNode::GetNodeItem(IFDE_XMLNode::NodeItem eItem) const { - switch (eItem) { - case IFDE_XMLNode::Root: { - CFDE_XMLNode* pParent = (CFDE_XMLNode*)this; - while (pParent->m_pParent != NULL) { - pParent = pParent->m_pParent; - } - return pParent; - } - case IFDE_XMLNode::Parent: - return m_pParent; - case IFDE_XMLNode::FirstSibling: { - CFDE_XMLNode* pItem = (CFDE_XMLNode*)this; - while (pItem->m_pPrior != NULL) { - pItem = pItem->m_pPrior; - } - return pItem == (CFDE_XMLNode*)this ? NULL : pItem; - } - case IFDE_XMLNode::PriorSibling: - return m_pPrior; - case IFDE_XMLNode::NextSibling: - return m_pNext; - case IFDE_XMLNode::LastSibling: { - CFDE_XMLNode* pItem = (CFDE_XMLNode*)this; - while (pItem->m_pNext != NULL) { - pItem = pItem->m_pNext; - } - return pItem == (CFDE_XMLNode*)this ? NULL : pItem; - } - case IFDE_XMLNode::FirstNeighbor: { - CFDE_XMLNode* pParent = (CFDE_XMLNode*)this; - while (pParent->m_pParent != NULL) { - pParent = pParent->m_pParent; - } - return pParent == (CFDE_XMLNode*)this ? NULL : pParent; - } - case IFDE_XMLNode::PriorNeighbor: { - if (m_pPrior == NULL) { - return m_pParent; - } - CFDE_XMLNode* pItem = m_pPrior; - while (CFDE_XMLNode* pTemp = pItem->m_pChild) { - pItem = pTemp; - while ((pTemp = pItem->m_pNext) != NULL) { - pItem = pTemp; - } - } - return pItem; - } - case IFDE_XMLNode::NextNeighbor: { - if (m_pChild != NULL) { - return m_pChild; - } - if (m_pNext != NULL) { - return m_pNext; - } - CFDE_XMLNode* pItem = m_pParent; - while (pItem != NULL) { - if (pItem->m_pNext != NULL) { - return pItem->m_pNext; - } - pItem = pItem->m_pParent; - } - return NULL; - } - case IFDE_XMLNode::LastNeighbor: { - CFDE_XMLNode* pItem = (CFDE_XMLNode*)this; - while (pItem->m_pParent != NULL) { - pItem = pItem->m_pParent; - } - while (TRUE) { - while (pItem->m_pNext != NULL) { - pItem = pItem->m_pNext; - } - if (pItem->m_pChild == NULL) { - break; - } - pItem = pItem->m_pChild; - } - return pItem == (CFDE_XMLNode*)this ? NULL : pItem; - } - case IFDE_XMLNode::FirstChild: - return m_pChild; - case IFDE_XMLNode::LastChild: { - if (m_pChild == NULL) { - return NULL; - } - CFDE_XMLNode* pChild = m_pChild; - while (pChild->m_pNext != NULL) { - pChild = pChild->m_pNext; - } - return pChild; - } - default: - break; - } - return NULL; -} -int32_t CFDE_XMLNode::GetNodeLevel() const { - int32_t iLevel = 0; - CFDE_XMLNode* pItem = (CFDE_XMLNode*)this; - while ((pItem = pItem->m_pParent) != NULL) { - iLevel++; - } - return iLevel; -} -FX_BOOL CFDE_XMLNode::InsertNodeItem(IFDE_XMLNode::NodeItem eItem, - CFDE_XMLNode* pNode) { - FXSYS_assert(pNode != NULL); - switch (eItem) { - case IFDE_XMLNode::NextSibling: { - pNode->m_pParent = m_pParent; - pNode->m_pNext = m_pNext; - pNode->m_pPrior = this; - if (m_pNext) { - m_pNext->m_pPrior = pNode; - } - m_pNext = pNode; - return TRUE; - } - case IFDE_XMLNode::PriorSibling: { - pNode->m_pParent = m_pParent; - pNode->m_pNext = this; - pNode->m_pPrior = m_pPrior; - if (m_pPrior) { - m_pPrior->m_pNext = pNode; - } else if (m_pParent) { - m_pParent->m_pChild = pNode; - } - m_pPrior = pNode; - return TRUE; - } - default: - return FALSE; - } - return FALSE; -} -CFDE_XMLNode* CFDE_XMLNode::RemoveNodeItem(IFDE_XMLNode::NodeItem eItem) { - CFDE_XMLNode* pNode = NULL; - switch (eItem) { - case IFDE_XMLNode::NextSibling: - if (m_pNext) { - pNode = m_pNext; - m_pNext = pNode->m_pNext; - if (m_pNext) { - m_pNext->m_pPrior = this; - } - pNode->m_pParent = NULL; - pNode->m_pNext = NULL; - pNode->m_pPrior = NULL; - } - break; - default: - break; - } - return pNode; -} -CFDE_XMLNode* CFDE_XMLNode::Clone(FX_BOOL bRecursive) { - return NULL; -} -void CFDE_XMLNode::SaveXMLNode(IFX_Stream* pXMLStream) { - CFDE_XMLNode* pNode = (CFDE_XMLNode*)this; - FXSYS_assert(pXMLStream != NULL && pNode != NULL); - switch (pNode->GetType()) { - case FDE_XMLNODE_Instruction: { - CFX_WideString ws; - CFDE_XMLInstruction* pInstruction = (CFDE_XMLInstruction*)pNode; - if (pInstruction->m_wsTarget.CompareNoCase(L"xml") == 0) { - ws = L"GetCodePage(); - if (wCodePage == FX_CODEPAGE_UTF16LE) { - ws += L"UTF-16"; - } else if (wCodePage == FX_CODEPAGE_UTF16BE) { - ws += L"UTF-16be"; - } else { - ws += L"UTF-8"; - } - ws += L"\"?>"; - pXMLStream->WriteString(ws, ws.GetLength()); - } else { - ws.Format(L"m_wsTarget); - pXMLStream->WriteString(ws, ws.GetLength()); - CFX_WideStringArray& attributes = pInstruction->m_Attributes; - int32_t i, iCount = attributes.GetSize(); - CFX_WideString wsValue; - for (i = 0; i < iCount; i += 2) { - ws = L" "; - ws += attributes[i]; - ws += L"=\""; - wsValue = attributes[i + 1]; - wsValue.Replace(L"&", L"&"); - wsValue.Replace(L"<", L"<"); - wsValue.Replace(L">", L">"); - wsValue.Replace(L"\'", L"'"); - wsValue.Replace(L"\"", L"""); - ws += wsValue; - ws += L"\""; - pXMLStream->WriteString(ws, ws.GetLength()); - } - CFX_WideStringArray& targetdata = pInstruction->m_TargetData; - iCount = targetdata.GetSize(); - for (i = 0; i < iCount; i++) { - ws = L" \""; - ws += targetdata[i]; - ws += L"\""; - pXMLStream->WriteString(ws, ws.GetLength()); - } - ws = L"?>"; - pXMLStream->WriteString(ws, ws.GetLength()); - } - } break; - case FDE_XMLNODE_Element: { - CFX_WideString ws; - ws = L"<"; - ws += ((CFDE_XMLElement*)pNode)->m_wsTag; - pXMLStream->WriteString(ws, ws.GetLength()); - CFX_WideStringArray& attributes = ((CFDE_XMLElement*)pNode)->m_Attributes; - int32_t iCount = attributes.GetSize(); - CFX_WideString wsValue; - for (int32_t i = 0; i < iCount; i += 2) { - ws = L" "; - ws += attributes[i]; - ws += L"=\""; - wsValue = attributes[i + 1]; - wsValue.Replace(L"&", L"&"); - wsValue.Replace(L"<", L"<"); - wsValue.Replace(L">", L">"); - wsValue.Replace(L"\'", L"'"); - wsValue.Replace(L"\"", L"""); - ws += wsValue; - ws += L"\""; - pXMLStream->WriteString(ws, ws.GetLength()); - } - if (pNode->m_pChild == NULL) { - ws = L"\n/>"; - pXMLStream->WriteString(ws, ws.GetLength()); - } else { - ws = L"\n>"; - pXMLStream->WriteString(ws, ws.GetLength()); - CFDE_XMLNode* pChild = pNode->m_pChild; - while (pChild != NULL) { - pChild->SaveXMLNode(pXMLStream); - pChild = pChild->m_pNext; - } - ws = L"m_wsTag; - ws += L"\n>"; - pXMLStream->WriteString(ws, ws.GetLength()); - } - } break; - case FDE_XMLNODE_Text: { - CFX_WideString ws = ((CFDE_XMLText*)pNode)->m_wsText; - ws.Replace(L"&", L"&"); - ws.Replace(L"<", L"<"); - ws.Replace(L">", L">"); - ws.Replace(L"\'", L"'"); - ws.Replace(L"\"", L"""); - pXMLStream->WriteString(ws, ws.GetLength()); - } break; - case FDE_XMLNODE_CharData: { - CFX_WideString ws = L"m_wsCharData; - ws += L"]]>"; - pXMLStream->WriteString(ws, ws.GetLength()); - } break; - case FDE_XMLNODE_Unknown: - break; - default: - break; - } -} -void CFDE_XMLNode::CloneChildren(CFDE_XMLNode* pClone) { - if (!m_pChild) { - return; - } - CFDE_XMLNode* pNext = m_pChild; - CFDE_XMLNode* pCloneNext = pNext->Clone(TRUE); - pClone->InsertChildNode(pCloneNext); - pNext = pNext->m_pNext; - while (pNext) { - CFDE_XMLNode* pChild = pNext->Clone(TRUE); - pCloneNext->InsertNodeItem(IFDE_XMLNode::NextSibling, pChild); - pCloneNext = pChild; - pNext = pNext->m_pNext; - } -} -IFDE_XMLInstruction* IFDE_XMLInstruction::Create( - const CFX_WideString& wsTarget) { - return (IFDE_XMLInstruction*)new CFDE_XMLInstruction(wsTarget); -} -CFDE_XMLInstruction::CFDE_XMLInstruction(const CFX_WideString& wsTarget) - : m_wsTarget(wsTarget) { - FXSYS_assert(m_wsTarget.GetLength() > 0); -} -CFDE_XMLNode* CFDE_XMLInstruction::Clone(FX_BOOL bRecursive) { - CFDE_XMLInstruction* pClone = new CFDE_XMLInstruction(m_wsTarget); - if (!pClone) { - return pClone; - } - pClone->m_Attributes.Copy(m_Attributes); - pClone->m_TargetData.Copy(m_TargetData); - if (bRecursive) { - CloneChildren(pClone); - } - return pClone; -} -int32_t CFDE_XMLInstruction::CountAttributes() const { - return m_Attributes.GetSize() / 2; -} -FX_BOOL CFDE_XMLInstruction::GetAttribute(int32_t index, - CFX_WideString& wsAttriName, - CFX_WideString& wsAttriValue) const { - int32_t iCount = m_Attributes.GetSize(); - FXSYS_assert(index > -1 && index < iCount / 2); - for (int32_t i = 0; i < iCount; i += 2) { - if (index == 0) { - wsAttriName = m_Attributes[i]; - wsAttriValue = m_Attributes[i + 1]; - return TRUE; - } - index--; - } - return FALSE; -} -FX_BOOL CFDE_XMLInstruction::HasAttribute(const FX_WCHAR* pwsAttriName) const { - int32_t iCount = m_Attributes.GetSize(); - for (int32_t i = 0; i < iCount; i += 2) { - if (m_Attributes[i].Compare(pwsAttriName) == 0) { - return TRUE; - } - } - return FALSE; -} -void CFDE_XMLInstruction::GetString(const FX_WCHAR* pwsAttriName, - CFX_WideString& wsAttriValue, - const FX_WCHAR* pwsDefValue) const { - int32_t iCount = m_Attributes.GetSize(); - for (int32_t i = 0; i < iCount; i += 2) { - if (m_Attributes[i].Compare(pwsAttriName) == 0) { - wsAttriValue = m_Attributes[i + 1]; - return; - } - } - wsAttriValue = pwsDefValue; -} -void CFDE_XMLInstruction::SetString(const CFX_WideString& wsAttriName, - const CFX_WideString& wsAttriValue) { - FXSYS_assert(wsAttriName.GetLength() > 0); - int32_t iCount = m_Attributes.GetSize(); - for (int32_t i = 0; i < iCount; i += 2) { - if (m_Attributes[i].Compare(wsAttriName) == 0) { - m_Attributes[i] = wsAttriName; - m_Attributes[i + 1] = wsAttriValue; - return; - } - } - m_Attributes.Add(wsAttriName); - m_Attributes.Add(wsAttriValue); -} -int32_t CFDE_XMLInstruction::GetInteger(const FX_WCHAR* pwsAttriName, - int32_t iDefValue) const { - int32_t iCount = m_Attributes.GetSize(); - for (int32_t i = 0; i < iCount; i += 2) { - if (m_Attributes[i].Compare(pwsAttriName) == 0) { - return FXSYS_wtoi((const FX_WCHAR*)m_Attributes[i + 1]); - } - } - return iDefValue; -} -void CFDE_XMLInstruction::SetInteger(const FX_WCHAR* pwsAttriName, - int32_t iAttriValue) { - CFX_WideString wsValue; - wsValue.Format(L"%d", iAttriValue); - SetString(pwsAttriName, wsValue); -} -FX_FLOAT CFDE_XMLInstruction::GetFloat(const FX_WCHAR* pwsAttriName, - FX_FLOAT fDefValue) const { - int32_t iCount = m_Attributes.GetSize(); - for (int32_t i = 0; i < iCount; i += 2) { - if (m_Attributes[i].Compare(pwsAttriName) == 0) { - return FX_wcstof((const FX_WCHAR*)m_Attributes[i + 1]); - } - } - return fDefValue; -} -void CFDE_XMLInstruction::SetFloat(const FX_WCHAR* pwsAttriName, - FX_FLOAT fAttriValue) { - CFX_WideString wsValue; - wsValue.Format(L"%f", fAttriValue); - SetString(pwsAttriName, wsValue); -} -void CFDE_XMLInstruction::RemoveAttribute(const FX_WCHAR* pwsAttriName) { - int32_t iCount = m_Attributes.GetSize(); - for (int32_t i = 0; i < iCount; i += 2) { - if (m_Attributes[i].Compare(pwsAttriName) == 0) { - m_Attributes.RemoveAt(i + 1); - m_Attributes.RemoveAt(i); - return; - } - } -} -int32_t CFDE_XMLInstruction::CountData() const { - return m_TargetData.GetSize(); -} -FX_BOOL CFDE_XMLInstruction::GetData(int32_t index, - CFX_WideString& wsData) const { - if (index < 0 || index >= m_TargetData.GetSize()) { - return FALSE; - } - wsData = m_TargetData[index]; - return TRUE; -} -void CFDE_XMLInstruction::AppendData(const CFX_WideString& wsData) { - m_TargetData.Add(wsData); -} -void CFDE_XMLInstruction::RemoveData(int32_t index) { - m_TargetData.RemoveAt(index); -} -IFDE_XMLElement* IFDE_XMLElement::Create(const CFX_WideString& wsTag) { - return (IFDE_XMLElement*)new CFDE_XMLElement(wsTag); -} -CFDE_XMLElement::CFDE_XMLElement(const CFX_WideString& wsTag) - : CFDE_XMLNode(), m_wsTag(wsTag), m_Attributes() { - FXSYS_assert(m_wsTag.GetLength() > 0); -} -CFDE_XMLElement::~CFDE_XMLElement() { - m_Attributes.RemoveAll(); -} -CFDE_XMLNode* CFDE_XMLElement::Clone(FX_BOOL bRecursive) { - CFDE_XMLElement* pClone = new CFDE_XMLElement(m_wsTag); - if (!pClone) { - return NULL; - } - pClone->m_Attributes.Copy(m_Attributes); - if (bRecursive) { - CloneChildren(pClone); - } else { - CFX_WideString wsText; - CFDE_XMLNode* pChild = m_pChild; - while (pChild != NULL) { - switch (pChild->GetType()) { - case FDE_XMLNODE_Text: - wsText += ((CFDE_XMLText*)pChild)->m_wsText; - break; - default: - break; - } - pChild = pChild->m_pNext; - } - pClone->SetTextData(wsText); - } - return pClone; -} -void CFDE_XMLElement::GetTagName(CFX_WideString& wsTag) const { - wsTag = m_wsTag; -} -void CFDE_XMLElement::GetLocalTagName(CFX_WideString& wsTag) const { - FX_STRSIZE iFind = m_wsTag.Find(L':', 0); - if (iFind < 0) { - wsTag = m_wsTag; - } else { - wsTag = m_wsTag.Right(m_wsTag.GetLength() - iFind - 1); - } -} -void CFDE_XMLElement::GetNamespacePrefix(CFX_WideString& wsPrefix) const { - FX_STRSIZE iFind = m_wsTag.Find(L':', 0); - if (iFind < 0) { - wsPrefix.Empty(); - } else { - wsPrefix = m_wsTag.Left(iFind); - } -} -void CFDE_XMLElement::GetNamespaceURI(CFX_WideString& wsNamespace) const { - CFX_WideString wsAttri(L"xmlns"), wsPrefix; - GetNamespacePrefix(wsPrefix); - if (wsPrefix.GetLength() > 0) { - wsAttri += L":"; - wsAttri += wsPrefix; - } - wsNamespace.Empty(); - CFDE_XMLNode* pNode = (CFDE_XMLNode*)this; - while (pNode != NULL) { - if (pNode->GetType() != FDE_XMLNODE_Element) { - break; - } - CFDE_XMLElement* pElement = (CFDE_XMLElement*)pNode; - if (!pElement->HasAttribute(wsAttri)) { - pNode = pNode->GetNodeItem(IFDE_XMLNode::Parent); - continue; - } - pElement->GetString(wsAttri, wsNamespace); - break; - } -} -int32_t CFDE_XMLElement::CountAttributes() const { - return m_Attributes.GetSize() / 2; -} -FX_BOOL CFDE_XMLElement::GetAttribute(int32_t index, - CFX_WideString& wsAttriName, - CFX_WideString& wsAttriValue) const { - int32_t iCount = m_Attributes.GetSize(); - FXSYS_assert(index > -1 && index < iCount / 2); - for (int32_t i = 0; i < iCount; i += 2) { - if (index == 0) { - wsAttriName = m_Attributes[i]; - wsAttriValue = m_Attributes[i + 1]; - return TRUE; - } - index--; - } - return FALSE; -} -FX_BOOL CFDE_XMLElement::HasAttribute(const FX_WCHAR* pwsAttriName) const { - int32_t iCount = m_Attributes.GetSize(); - for (int32_t i = 0; i < iCount; i += 2) { - if (m_Attributes[i].Compare(pwsAttriName) == 0) { - return TRUE; - } - } - return FALSE; -} -void CFDE_XMLElement::GetString(const FX_WCHAR* pwsAttriName, - CFX_WideString& wsAttriValue, - const FX_WCHAR* pwsDefValue) const { - int32_t iCount = m_Attributes.GetSize(); - for (int32_t i = 0; i < iCount; i += 2) { - if (m_Attributes[i].Compare(pwsAttriName) == 0) { - wsAttriValue = m_Attributes[i + 1]; - return; - } - } - wsAttriValue = pwsDefValue; -} -void CFDE_XMLElement::SetString(const CFX_WideString& wsAttriName, - const CFX_WideString& wsAttriValue) { - FXSYS_assert(wsAttriName.GetLength() > 0); - int32_t iCount = m_Attributes.GetSize(); - for (int32_t i = 0; i < iCount; i += 2) { - if (m_Attributes[i].Compare(wsAttriName) == 0) { - m_Attributes[i] = wsAttriName; - m_Attributes[i + 1] = wsAttriValue; - return; - } - } - m_Attributes.Add(wsAttriName); - m_Attributes.Add(wsAttriValue); -} -int32_t CFDE_XMLElement::GetInteger(const FX_WCHAR* pwsAttriName, - int32_t iDefValue) const { - int32_t iCount = m_Attributes.GetSize(); - for (int32_t i = 0; i < iCount; i += 2) { - if (m_Attributes[i].Compare(pwsAttriName) == 0) { - return FXSYS_wtoi((const FX_WCHAR*)m_Attributes[i + 1]); - } - } - return iDefValue; -} -void CFDE_XMLElement::SetInteger(const FX_WCHAR* pwsAttriName, - int32_t iAttriValue) { - CFX_WideString wsValue; - wsValue.Format(L"%d", iAttriValue); - SetString(pwsAttriName, wsValue); -} -FX_FLOAT CFDE_XMLElement::GetFloat(const FX_WCHAR* pwsAttriName, - FX_FLOAT fDefValue) const { - int32_t iCount = m_Attributes.GetSize(); - for (int32_t i = 0; i < iCount; i += 2) { - if (m_Attributes[i].Compare(pwsAttriName) == 0) { - return FX_wcstof((const FX_WCHAR*)m_Attributes[i + 1]); - } - } - return fDefValue; -} -void CFDE_XMLElement::SetFloat(const FX_WCHAR* pwsAttriName, - FX_FLOAT fAttriValue) { - CFX_WideString wsValue; - wsValue.Format(L"%f", fAttriValue); - SetString(pwsAttriName, wsValue); -} -void CFDE_XMLElement::RemoveAttribute(const FX_WCHAR* pwsAttriName) { - int32_t iCount = m_Attributes.GetSize(); - for (int32_t i = 0; i < iCount; i += 2) { - if (m_Attributes[i].Compare(pwsAttriName) == 0) { - m_Attributes.RemoveAt(i + 1); - m_Attributes.RemoveAt(i); - return; - } - } -} -void CFDE_XMLElement::GetTextData(CFX_WideString& wsText) const { - CFX_WideTextBuf buffer; - CFDE_XMLNode* pChild = m_pChild; - while (pChild != NULL) { - switch (pChild->GetType()) { - case FDE_XMLNODE_Text: - buffer << ((CFDE_XMLText*)pChild)->m_wsText; - break; - case FDE_XMLNODE_CharData: - buffer << ((CFDE_XMLCharData*)pChild)->m_wsCharData; - break; - default: - break; - } - pChild = pChild->m_pNext; - } - wsText = buffer.GetWideString(); -} -void CFDE_XMLElement::SetTextData(const CFX_WideString& wsText) { - if (wsText.GetLength() < 1) { - return; - } - InsertChildNode(new CFDE_XMLText(wsText)); -} -IFDE_XMLText* IFDE_XMLText::Create(const CFX_WideString& wsText) { - return (IFDE_XMLText*)new CFDE_XMLText(wsText); -} -CFDE_XMLText::CFDE_XMLText(const CFX_WideString& wsText) - : CFDE_XMLNode(), m_wsText(wsText) {} -CFDE_XMLNode* CFDE_XMLText::Clone(FX_BOOL bRecursive) { - CFDE_XMLText* pClone = new CFDE_XMLText(m_wsText); - return pClone; -} -IFDE_XMLCharData* IFDE_XMLCharData::Create(const CFX_WideString& wsCData) { - return (IFDE_XMLCharData*)new CFDE_XMLCharData(wsCData); -} -CFDE_XMLCharData::CFDE_XMLCharData(const CFX_WideString& wsCData) - : CFDE_XMLDeclaration(), m_wsCharData(wsCData) {} -CFDE_XMLNode* CFDE_XMLCharData::Clone(FX_BOOL bRecursive) { - CFDE_XMLCharData* pClone = new CFDE_XMLCharData(m_wsCharData); - return pClone; -} -IFDE_XMLDoc* IFDE_XMLDoc::Create() { - return (IFDE_XMLDoc*)new CFDE_XMLDoc; -} -CFDE_XMLDoc::CFDE_XMLDoc() - : m_pRoot(NULL), m_pSyntaxParser(NULL), m_pXMLParser(NULL) { - Reset(TRUE); - CFDE_XMLInstruction* pXML = new CFDE_XMLInstruction(L"xml"); - m_pRoot->InsertChildNode(pXML); -} -CFDE_XMLDoc::~CFDE_XMLDoc() { - Reset(FALSE); -} -void CFDE_XMLDoc::Reset(FX_BOOL bInitRoot) { - m_iStatus = 0; - m_pStream = NULL; - if (bInitRoot) { - if (m_pRoot == NULL) { - m_pRoot = new CFDE_XMLNode; - } else { - m_pRoot->DeleteChildren(); - } - } else { - if (m_pRoot != NULL) { - m_pRoot->Release(); - m_pRoot = NULL; - } - } - ReleaseParser(); -} -void CFDE_XMLDoc::ReleaseParser() { - if (m_pXMLParser != NULL) { - m_pXMLParser->Release(); - m_pXMLParser = NULL; - } - if (m_pSyntaxParser != NULL) { - m_pSyntaxParser->Release(); - m_pSyntaxParser = NULL; - } -} -FX_BOOL CFDE_XMLDoc::LoadXML(IFX_Stream* pXMLStream, - int32_t iXMLPlaneSize, - int32_t iTextDataSize, - FDE_XMLREADERHANDLER* pHandler) { - if (pXMLStream == NULL) { - return FALSE; - } - Reset(TRUE); - iXMLPlaneSize = iXMLPlaneSize / 1024; - if (iXMLPlaneSize < 1) { - iXMLPlaneSize = 1; - } - iXMLPlaneSize *= 1024; - if (iXMLPlaneSize < 4096) { - iXMLPlaneSize = 4096; - } - iTextDataSize = iTextDataSize / 128; - if (iTextDataSize < 1) { - iTextDataSize = 1; - } - iTextDataSize *= 128; - if (iTextDataSize < 128) { - iTextDataSize = 128; - } - m_pStream = pXMLStream; - FX_WORD wCodePage = m_pStream->GetCodePage(); - if (wCodePage != FX_CODEPAGE_UTF16LE && wCodePage != FX_CODEPAGE_UTF16BE && - wCodePage != FX_CODEPAGE_UTF8) { - m_pStream->SetCodePage(FX_CODEPAGE_UTF8); - } - m_pSyntaxParser = IFDE_XMLSyntaxParser::Create(); - if (m_pSyntaxParser == NULL) { - return FALSE; - } - m_pSyntaxParser->Init(m_pStream, iXMLPlaneSize, iTextDataSize); - if (pHandler == NULL) { - m_pXMLParser = new CFDE_XMLDOMParser(m_pRoot, m_pSyntaxParser); - } else { - m_pXMLParser = new CFDE_XMLSAXParser(pHandler, m_pSyntaxParser); - } - return TRUE; -} -FX_BOOL CFDE_XMLDoc::LoadXML(IFDE_XMLParser* pXMLParser) { - if (pXMLParser == NULL) { - return FALSE; - } - Reset(TRUE); - m_pXMLParser = pXMLParser; - return m_pXMLParser != NULL; -} -int32_t CFDE_XMLDoc::DoLoad(IFX_Pause* pPause) { - if (m_iStatus >= 100) { - return m_iStatus; - } - FXSYS_assert(m_pXMLParser != NULL); - return m_iStatus = m_pXMLParser->DoParser(pPause); -} -void CFDE_XMLDoc::CloseXML() { - ReleaseParser(); -} -void CFDE_XMLDoc::SaveXMLNode(IFX_Stream* pXMLStream, IFDE_XMLNode* pINode) { - CFDE_XMLNode* pNode = (CFDE_XMLNode*)pINode; - FXSYS_assert(pXMLStream != NULL && pNode != NULL); - switch (pNode->GetType()) { - case FDE_XMLNODE_Instruction: { - CFX_WideString ws; - CFDE_XMLInstruction* pInstruction = (CFDE_XMLInstruction*)pNode; - if (pInstruction->m_wsTarget.CompareNoCase(L"xml") == 0) { - ws = L"GetCodePage(); - if (wCodePage == FX_CODEPAGE_UTF16LE) { - ws += L"UTF-16"; - } else if (wCodePage == FX_CODEPAGE_UTF16BE) { - ws += L"UTF-16be"; - } else { - ws += L"UTF-8"; - } - ws += L"\"?>"; - pXMLStream->WriteString(ws, ws.GetLength()); - } else { - ws.Format(L"m_wsTarget); - pXMLStream->WriteString(ws, ws.GetLength()); - CFX_WideStringArray& attributes = pInstruction->m_Attributes; - int32_t i, iCount = attributes.GetSize(); - CFX_WideString wsValue; - for (i = 0; i < iCount; i += 2) { - ws = L" "; - ws += attributes[i]; - ws += L"=\""; - wsValue = attributes[i + 1]; - wsValue.Replace(L"&", L"&"); - wsValue.Replace(L"<", L"<"); - wsValue.Replace(L">", L">"); - wsValue.Replace(L"\'", L"'"); - wsValue.Replace(L"\"", L"""); - ws += wsValue; - ws += L"\""; - pXMLStream->WriteString(ws, ws.GetLength()); - } - CFX_WideStringArray& targetdata = pInstruction->m_TargetData; - iCount = targetdata.GetSize(); - for (i = 0; i < iCount; i++) { - ws = L" \""; - ws += targetdata[i]; - ws += L"\""; - pXMLStream->WriteString(ws, ws.GetLength()); - } - ws = L"?>"; - pXMLStream->WriteString(ws, ws.GetLength()); - } - } break; - case FDE_XMLNODE_Element: { - CFX_WideString ws; - ws = L"<"; - ws += ((CFDE_XMLElement*)pNode)->m_wsTag; - pXMLStream->WriteString(ws, ws.GetLength()); - CFX_WideStringArray& attributes = ((CFDE_XMLElement*)pNode)->m_Attributes; - int32_t iCount = attributes.GetSize(); - CFX_WideString wsValue; - for (int32_t i = 0; i < iCount; i += 2) { - ws = L" "; - ws += attributes[i]; - ws += L"=\""; - wsValue = attributes[i + 1]; - wsValue.Replace(L"&", L"&"); - wsValue.Replace(L"<", L"<"); - wsValue.Replace(L">", L">"); - wsValue.Replace(L"\'", L"'"); - wsValue.Replace(L"\"", L"""); - ws += wsValue; - ws += L"\""; - pXMLStream->WriteString(ws, ws.GetLength()); - } - if (pNode->m_pChild == NULL) { - ws = L"\n/>"; - pXMLStream->WriteString(ws, ws.GetLength()); - } else { - ws = L"\n>"; - pXMLStream->WriteString(ws, ws.GetLength()); - CFDE_XMLNode* pChild = pNode->m_pChild; - while (pChild != NULL) { - SaveXMLNode(pXMLStream, (IFDE_XMLNode*)pChild); - pChild = pChild->m_pNext; - } - ws = L"m_wsTag; - ws += L"\n>"; - pXMLStream->WriteString(ws, ws.GetLength()); - } - } break; - case FDE_XMLNODE_Text: { - CFX_WideString ws = ((CFDE_XMLText*)pNode)->m_wsText; - ws.Replace(L"&", L"&"); - ws.Replace(L"<", L"<"); - ws.Replace(L">", L">"); - ws.Replace(L"\'", L"'"); - ws.Replace(L"\"", L"""); - pXMLStream->WriteString(ws, ws.GetLength()); - } break; - case FDE_XMLNODE_CharData: { - CFX_WideString ws = L"m_wsCharData; - ws += L"]]>"; - pXMLStream->WriteString(ws, ws.GetLength()); - } break; - case FDE_XMLNODE_Unknown: - break; - default: - break; - } -} -void CFDE_XMLDoc::SaveXML(IFX_Stream* pXMLStream, FX_BOOL bSaveBOM) { - if (pXMLStream == NULL || pXMLStream == m_pStream) { - m_pStream->Seek(FX_STREAMSEEK_Begin, 0); - pXMLStream = m_pStream; - } - FXSYS_assert((pXMLStream->GetAccessModes() & FX_STREAMACCESS_Text) != 0); - FXSYS_assert((pXMLStream->GetAccessModes() & FX_STREAMACCESS_Write) != 0); - FX_WORD wCodePage = pXMLStream->GetCodePage(); - if (wCodePage != FX_CODEPAGE_UTF16LE && wCodePage != FX_CODEPAGE_UTF16BE && - wCodePage != FX_CODEPAGE_UTF8) { - wCodePage = FX_CODEPAGE_UTF8; - pXMLStream->SetCodePage(wCodePage); - } - if (bSaveBOM) { - pXMLStream->WriteString(L"\xFEFF", 1); - } - CFDE_XMLNode* pNode = m_pRoot->m_pChild; - while (pNode != NULL) { - SaveXMLNode(pXMLStream, (IFDE_XMLNode*)pNode); - pNode = pNode->m_pNext; - } - if (pXMLStream == m_pStream) { - int32_t iPos = pXMLStream->GetPosition(); - pXMLStream->SetLength(iPos); - } -} -CFDE_XMLDOMParser::CFDE_XMLDOMParser(CFDE_XMLNode* pRoot, - IFDE_XMLSyntaxParser* pParser) - : m_pParser(pParser), - m_pParent(pRoot), - m_pChild(NULL), - m_NodeStack(16), - m_ws1(), - m_ws2() { - m_NodeStack.Push(m_pParent); -} -CFDE_XMLDOMParser::~CFDE_XMLDOMParser() { - m_NodeStack.RemoveAll(); - m_ws1.Empty(); - m_ws2.Empty(); -} -int32_t CFDE_XMLDOMParser::DoParser(IFX_Pause* pPause) { - FX_DWORD dwRet; - int32_t iCount = 0; - while (TRUE) { - dwRet = m_pParser->DoSyntaxParse(); - switch (dwRet) { - case FDE_XMLSYNTAXSTATUS_InstructionOpen: - break; - case FDE_XMLSYNTAXSTATUS_InstructionClose: - if (m_pChild->GetType() != FDE_XMLNODE_Instruction) { - dwRet = FDE_XMLSYNTAXSTATUS_Error; - break; - } - m_pChild = m_pParent; - break; - case FDE_XMLSYNTAXSTATUS_ElementOpen: - case FDE_XMLSYNTAXSTATUS_ElementBreak: - break; - case FDE_XMLSYNTAXSTATUS_ElementClose: - if (m_pChild->GetType() != FDE_XMLNODE_Element) { - dwRet = FDE_XMLSYNTAXSTATUS_Error; - break; - } - m_pParser->GetTagName(m_ws1); - ((CFDE_XMLElement*)m_pChild)->GetTagName(m_ws2); - if (m_ws1.GetLength() > 0 && m_ws1.Compare(m_ws2) != 0) { - dwRet = FDE_XMLSYNTAXSTATUS_Error; - break; - } - m_NodeStack.Pop(); - if (m_NodeStack.GetSize() < 1) { - dwRet = FDE_XMLSYNTAXSTATUS_Error; - break; - } - m_pParent = (CFDE_XMLNode*)*m_NodeStack.GetTopElement(); - m_pChild = m_pParent; - iCount++; - break; - case FDE_XMLSYNTAXSTATUS_TargetName: - m_pParser->GetTargetName(m_ws1); - m_pChild = new CFDE_XMLInstruction(m_ws1); - m_pParent->InsertChildNode(m_pChild); - m_ws1.Empty(); - break; - case FDE_XMLSYNTAXSTATUS_TagName: - m_pParser->GetTagName(m_ws1); - m_pChild = new CFDE_XMLElement(m_ws1); - m_pParent->InsertChildNode(m_pChild); - m_NodeStack.Push(m_pChild); - m_pParent = m_pChild; - break; - case FDE_XMLSYNTAXSTATUS_AttriName: - m_pParser->GetAttributeName(m_ws1); - break; - case FDE_XMLSYNTAXSTATUS_AttriValue: - if (m_pChild == NULL) { - dwRet = FDE_XMLSYNTAXSTATUS_Error; - break; - } - m_pParser->GetAttributeName(m_ws2); - if (m_pChild->GetType() == FDE_XMLNODE_Element) { - ((CFDE_XMLElement*)m_pChild)->SetString(m_ws1, m_ws2); - } else if (m_pChild->GetType() == FDE_XMLNODE_Instruction) { - ((CFDE_XMLInstruction*)m_pChild)->SetString(m_ws1, m_ws2); - } - m_ws1.Empty(); - break; - case FDE_XMLSYNTAXSTATUS_Text: - m_pParser->GetTextData(m_ws1); - m_pChild = new CFDE_XMLText(m_ws1); - m_pParent->InsertChildNode(m_pChild); - m_pChild = m_pParent; - break; - case FDE_XMLSYNTAXSTATUS_CData: - m_pParser->GetTextData(m_ws1); - m_pChild = new CFDE_XMLCharData(m_ws1); - m_pParent->InsertChildNode(m_pChild); - m_pChild = m_pParent; - break; - case FDE_XMLSYNTAXSTATUS_TargetData: - if (m_pChild == NULL || - m_pChild->GetType() != FDE_XMLNODE_Instruction) { - dwRet = FDE_XMLSYNTAXSTATUS_Error; - break; - } - if (!m_ws1.IsEmpty()) { - ((CFDE_XMLInstruction*)m_pChild)->AppendData(m_ws1); - } - m_pParser->GetTargetData(m_ws1); - ((CFDE_XMLInstruction*)m_pChild)->AppendData(m_ws1); - m_ws1.Empty(); - break; - default: - break; - } - if (dwRet == FDE_XMLSYNTAXSTATUS_Error || - dwRet == FDE_XMLSYNTAXSTATUS_EOS) { - break; - } - if (pPause != NULL && iCount > 500 && pPause->NeedToPauseNow()) { - break; - } - } - return m_pParser->GetStatus(); -} -CFDE_XMLSAXParser::CFDE_XMLSAXParser(FDE_XMLREADERHANDLER* pHandler, - IFDE_XMLSyntaxParser* pParser) - : m_pHandler(pHandler), - m_pParser(pParser), - m_TagStack(16), - m_pTagTop(NULL), - m_ws1(), - m_ws2() {} -CFDE_XMLSAXParser::~CFDE_XMLSAXParser() { - m_TagStack.RemoveAll(); - m_ws1.Empty(); - m_ws2.Empty(); -} -int32_t CFDE_XMLSAXParser::DoParser(IFX_Pause* pPause) { - FX_DWORD dwRet = 0; - int32_t iCount = 0; - while (TRUE) { - dwRet = m_pParser->DoSyntaxParse(); - switch (dwRet) { - case FDE_XMLSYNTAXSTATUS_ElementBreak: - if (m_pTagTop == NULL) { - dwRet = FDE_XMLSYNTAXSTATUS_Error; - break; - } - if (m_pTagTop->eType == FDE_XMLNODE_Element) { - m_pHandler->OnTagBreak(m_pHandler, m_pTagTop->wsTagName); - } - break; - case FDE_XMLSYNTAXSTATUS_ElementClose: - if (m_pTagTop == NULL || m_pTagTop->eType != FDE_XMLNODE_Element) { - dwRet = FDE_XMLSYNTAXSTATUS_Error; - break; - } - m_pParser->GetTagName(m_ws1); - if (m_ws1.GetLength() > 0 && m_ws1.Compare(m_pTagTop->wsTagName) != 0) { - dwRet = FDE_XMLSYNTAXSTATUS_Error; - break; - } else if (m_ws1.GetLength() == 0) { - m_pHandler->OnTagBreak(m_pHandler, m_pTagTop->wsTagName); - } - m_pHandler->OnTagClose(m_pHandler, m_pTagTop->wsTagName); - Pop(); - iCount++; - break; - case FDE_XMLSYNTAXSTATUS_TargetName: { - m_pParser->GetTargetName(m_ws1); - CFDE_XMLTAG xmlTag; - xmlTag.wsTagName = m_ws1; - xmlTag.eType = FDE_XMLNODE_Instruction; - Push(xmlTag); - m_pHandler->OnTagEnter(m_pHandler, FDE_XMLNODE_Instruction, - m_pTagTop->wsTagName); - m_ws1.Empty(); - } break; - case FDE_XMLSYNTAXSTATUS_TagName: { - m_pParser->GetTargetName(m_ws1); - CFDE_XMLTAG xmlTag; - xmlTag.wsTagName = m_ws1; - xmlTag.eType = FDE_XMLNODE_Element; - Push(xmlTag); - m_pHandler->OnTagEnter(m_pHandler, FDE_XMLNODE_Element, - m_pTagTop->wsTagName); - } break; - case FDE_XMLSYNTAXSTATUS_AttriName: - m_pParser->GetTargetName(m_ws1); - break; - case FDE_XMLSYNTAXSTATUS_AttriValue: - m_pParser->GetAttributeName(m_ws2); - if (m_pTagTop == NULL) { - dwRet = FDE_XMLSYNTAXSTATUS_Error; - break; - } - if (m_pTagTop->eType == FDE_XMLNODE_Element) { - m_pHandler->OnAttribute(m_pHandler, m_ws1, m_ws2); - } - m_ws1.Empty(); - break; - case FDE_XMLSYNTAXSTATUS_CData: - m_pParser->GetTextData(m_ws1); - m_pHandler->OnData(m_pHandler, FDE_XMLNODE_CharData, m_ws1); - break; - case FDE_XMLSYNTAXSTATUS_Text: - m_pParser->GetTextData(m_ws1); - m_pHandler->OnData(m_pHandler, FDE_XMLNODE_Text, m_ws1); - break; - case FDE_XMLSYNTAXSTATUS_TargetData: - m_pParser->GetTargetData(m_ws1); - m_pHandler->OnData(m_pHandler, FDE_XMLNODE_Instruction, m_ws1); - m_ws1.Empty(); - break; - default: - break; - } - if (dwRet == FDE_XMLSYNTAXSTATUS_Error || - dwRet == FDE_XMLSYNTAXSTATUS_EOS) { - break; - } - if (pPause != NULL && iCount > 500 && pPause->NeedToPauseNow()) { - break; - } - } - return m_pParser->GetStatus(); -} -inline void CFDE_XMLSAXParser::Push(const CFDE_XMLTAG& xmlTag) { - m_TagStack.Push(xmlTag); - m_pTagTop = m_TagStack.GetTopElement(); -} -inline void CFDE_XMLSAXParser::Pop() { - m_TagStack.Pop(); - m_pTagTop = m_TagStack.GetTopElement(); -} - -CFDE_BlockBuffer::CFDE_BlockBuffer(int32_t iAllocStep) - : m_iDataLength(0), - m_iBufferSize(0), - m_iAllocStep(iAllocStep), - m_iStartPosition(0) {} -CFDE_BlockBuffer::~CFDE_BlockBuffer() { - ClearBuffer(); -} -FX_WCHAR* CFDE_BlockBuffer::GetAvailableBlock(int32_t& iIndexInBlock) { - iIndexInBlock = 0; - if (!m_BlockArray.GetSize()) { - return nullptr; - } - int32_t iRealIndex = m_iStartPosition + m_iDataLength; - if (iRealIndex == m_iBufferSize) { - FX_WCHAR* pBlock = FX_Alloc(FX_WCHAR, m_iAllocStep); - m_BlockArray.Add(pBlock); - m_iBufferSize += m_iAllocStep; - return pBlock; - } - iIndexInBlock = iRealIndex % m_iAllocStep; - return (FX_WCHAR*)m_BlockArray[iRealIndex / m_iAllocStep]; -} -FX_BOOL CFDE_BlockBuffer::InitBuffer(int32_t iBufferSize) { - ClearBuffer(); - int32_t iNumOfBlock = (iBufferSize - 1) / m_iAllocStep + 1; - for (int32_t i = 0; i < iNumOfBlock; i++) { - m_BlockArray.Add(FX_Alloc(FX_WCHAR, m_iAllocStep)); - } - m_iBufferSize = iNumOfBlock * m_iAllocStep; - return TRUE; -} -void CFDE_BlockBuffer::SetTextChar(int32_t iIndex, FX_WCHAR ch) { - if (iIndex < 0) { - return; - } - int32_t iRealIndex = m_iStartPosition + iIndex; - int32_t iBlockIndex = iRealIndex / m_iAllocStep; - int32_t iInnerIndex = iRealIndex % m_iAllocStep; - int32_t iBlockSize = m_BlockArray.GetSize(); - if (iBlockIndex >= iBlockSize) { - int32_t iNewBlocks = iBlockIndex - iBlockSize + 1; - do { - FX_WCHAR* pBlock = FX_Alloc(FX_WCHAR, m_iAllocStep); - m_BlockArray.Add(pBlock); - m_iBufferSize += m_iAllocStep; - } while (--iNewBlocks); - } - FX_WCHAR* pTextData = (FX_WCHAR*)m_BlockArray[iBlockIndex]; - *(pTextData + iInnerIndex) = ch; - if (m_iDataLength <= iIndex) { - m_iDataLength = iIndex + 1; - } -} -int32_t CFDE_BlockBuffer::DeleteTextChars(int32_t iCount, FX_BOOL bDirection) { - if (iCount <= 0) { - return m_iDataLength; - } - if (iCount >= m_iDataLength) { - Reset(FALSE); - return 0; - } - if (bDirection) { - m_iStartPosition += iCount; - m_iDataLength -= iCount; - } else { - m_iDataLength -= iCount; - } - return m_iDataLength; -} -void CFDE_BlockBuffer::GetTextData(CFX_WideString& wsTextData, - int32_t iStart, - int32_t iLength) const { - wsTextData.Empty(); - int32_t iMaybeDataLength = m_iBufferSize - 1 - m_iStartPosition; - if (iStart < 0 || iStart > iMaybeDataLength) { - return; - } - if (iLength == -1 || iLength > iMaybeDataLength) { - iLength = iMaybeDataLength; - } - if (iLength <= 0) { - return; - } - FX_WCHAR* pBuf = wsTextData.GetBuffer(iLength); - if (!pBuf) { - return; - } - int32_t iStartBlockIndex = 0; - int32_t iStartInnerIndex = 0; - TextDataIndex2BufIndex(iStart, iStartBlockIndex, iStartInnerIndex); - int32_t iEndBlockIndex = 0; - int32_t iEndInnerIndex = 0; - TextDataIndex2BufIndex(iStart + iLength, iEndBlockIndex, iEndInnerIndex); - int32_t iPointer = 0; - for (int32_t i = iStartBlockIndex; i <= iEndBlockIndex; i++) { - int32_t iBufferPointer = 0; - int32_t iCopyLength = m_iAllocStep; - if (i == iStartBlockIndex) { - iCopyLength -= iStartInnerIndex; - iBufferPointer = iStartInnerIndex; - } - if (i == iEndBlockIndex) { - iCopyLength -= ((m_iAllocStep - 1) - iEndInnerIndex); - } - FX_WCHAR* pBlockBuf = (FX_WCHAR*)m_BlockArray[i]; - FXSYS_memcpy(pBuf + iPointer, pBlockBuf + iBufferPointer, - iCopyLength * sizeof(FX_WCHAR)); - iPointer += iCopyLength; - } - wsTextData.ReleaseBuffer(iLength); -} -void CFDE_BlockBuffer::TextDataIndex2BufIndex(const int32_t iIndex, - int32_t& iBlockIndex, - int32_t& iInnerIndex) const { - FXSYS_assert(iIndex >= 0); - int32_t iRealIndex = m_iStartPosition + iIndex; - iBlockIndex = iRealIndex / m_iAllocStep; - iInnerIndex = iRealIndex % m_iAllocStep; -} -void CFDE_BlockBuffer::ClearBuffer() { - m_iBufferSize = 0; - int32_t iSize = m_BlockArray.GetSize(); - for (int32_t i = 0; i < iSize; i++) { - FX_Free(m_BlockArray[i]); - m_BlockArray[i] = NULL; - } - m_BlockArray.RemoveAll(); -} - -IFDE_XMLSyntaxParser* IFDE_XMLSyntaxParser::Create() { - return new CFDE_XMLSyntaxParser; -} - -CFDE_XMLSyntaxParser::CFDE_XMLSyntaxParser() - : m_pStream(nullptr), - m_iXMLPlaneSize(-1), - m_iCurrentPos(0), - m_iCurrentNodeNum(-1), - m_iLastNodeNum(-1), - m_iParsedChars(0), - m_iParsedBytes(0), - m_pBuffer(nullptr), - m_iBufferChars(0), - m_bEOS(FALSE), - m_pStart(nullptr), - m_pEnd(nullptr), - m_XMLNodeStack(16), - m_iAllocStep(m_BlockBuffer.GetAllocStep()), - m_iDataLength(m_BlockBuffer.GetDataLengthRef()), - m_pCurrentBlock(nullptr), - m_iIndexInBlock(0), - m_iTextDataLength(0), - m_dwStatus(FDE_XMLSYNTAXSTATUS_None), - m_dwMode(FDE_XMLSYNTAXMODE_Text), - m_wQuotationMark(0), - m_iEntityStart(-1), - m_SkipStack(16) { - m_CurNode.iNodeNum = -1; - m_CurNode.eNodeType = FDE_XMLNODE_Unknown; -} -void CFDE_XMLSyntaxParser::Init(IFX_Stream* pStream, - int32_t iXMLPlaneSize, - int32_t iTextDataSize) { - FXSYS_assert(m_pStream == NULL && m_pBuffer == NULL); - FXSYS_assert(pStream != NULL && iXMLPlaneSize > 0); - int32_t iStreamLength = pStream->GetLength(); - FXSYS_assert(iStreamLength > 0); - m_pStream = pStream; - m_iXMLPlaneSize = std::min(iXMLPlaneSize, iStreamLength); - uint8_t bom[4]; - m_iCurrentPos = m_pStream->GetBOM(bom); - FXSYS_assert(m_pBuffer == NULL); - m_pBuffer = FX_Alloc(FX_WCHAR, m_iXMLPlaneSize); - m_pStart = m_pEnd = m_pBuffer; - FXSYS_assert(!m_BlockBuffer.IsInitialized()); - m_BlockBuffer.InitBuffer(); - m_pCurrentBlock = m_BlockBuffer.GetAvailableBlock(m_iIndexInBlock); - m_iParsedBytes = m_iParsedChars = 0; - m_iBufferChars = 0; -} -FX_DWORD CFDE_XMLSyntaxParser::DoSyntaxParse() { - if (m_dwStatus == FDE_XMLSYNTAXSTATUS_Error || - m_dwStatus == FDE_XMLSYNTAXSTATUS_EOS) { - return m_dwStatus; - } - FXSYS_assert(m_pStream && m_pBuffer && m_BlockBuffer.IsInitialized()); - int32_t iStreamLength = m_pStream->GetLength(); - int32_t iPos; - FX_WCHAR ch; - FX_DWORD dwStatus = FDE_XMLSYNTAXSTATUS_None; - while (TRUE) { - if (m_pStart >= m_pEnd) { - if (m_bEOS || m_iCurrentPos >= iStreamLength) { - m_dwStatus = FDE_XMLSYNTAXSTATUS_EOS; - return m_dwStatus; - } - m_iParsedChars += (m_pEnd - m_pBuffer); - m_iParsedBytes = m_iCurrentPos; - if (m_pStream->GetPosition() != m_iCurrentPos) { - m_pStream->Seek(FX_STREAMSEEK_Begin, m_iCurrentPos); - } - m_iBufferChars = - m_pStream->ReadString(m_pBuffer, m_iXMLPlaneSize, m_bEOS); - iPos = m_pStream->GetPosition(); - if (m_iBufferChars < 1) { - m_iCurrentPos = iStreamLength; - m_dwStatus = FDE_XMLSYNTAXSTATUS_EOS; - return m_dwStatus; - } - m_iCurrentPos = iPos; - m_pStart = m_pBuffer; - m_pEnd = m_pBuffer + m_iBufferChars; - } - while (m_pStart < m_pEnd) { - ch = *m_pStart; - switch (m_dwMode) { - case FDE_XMLSYNTAXMODE_Text: - if (ch == L'<') { - if (m_iDataLength > 0) { - m_iTextDataLength = m_iDataLength; - m_BlockBuffer.Reset(); - m_pCurrentBlock = - m_BlockBuffer.GetAvailableBlock(m_iIndexInBlock); - m_iEntityStart = -1; - dwStatus = FDE_XMLSYNTAXSTATUS_Text; - } else { - m_pStart++; - m_dwMode = FDE_XMLSYNTAXMODE_Node; - } - } else { - ParseTextChar(ch); - } - break; - case FDE_XMLSYNTAXMODE_Node: - if (ch == L'!') { - m_pStart++; - m_dwMode = FDE_XMLSYNTAXMODE_SkipCommentOrDecl; - } else if (ch == L'/') { - m_pStart++; - m_dwMode = FDE_XMLSYNTAXMODE_CloseElement; - } else if (ch == L'?') { - m_iLastNodeNum++; - m_iCurrentNodeNum = m_iLastNodeNum; - m_CurNode.iNodeNum = m_iLastNodeNum; - m_CurNode.eNodeType = FDE_XMLNODE_Instruction; - m_XMLNodeStack.Push(m_CurNode); - m_pStart++; - m_dwMode = FDE_XMLSYNTAXMODE_Target; - dwStatus = FDE_XMLSYNTAXSTATUS_InstructionOpen; - } else { - m_iLastNodeNum++; - m_iCurrentNodeNum = m_iLastNodeNum; - m_CurNode.iNodeNum = m_iLastNodeNum; - m_CurNode.eNodeType = FDE_XMLNODE_Element; - m_XMLNodeStack.Push(m_CurNode); - m_dwMode = FDE_XMLSYNTAXMODE_Tag; - dwStatus = FDE_XMLSYNTAXSTATUS_ElementOpen; - } - break; - case FDE_XMLSYNTAXMODE_Target: - case FDE_XMLSYNTAXMODE_Tag: - if (!FDE_IsXMLNameChar(ch, m_iDataLength < 1)) { - if (m_iDataLength < 1) { - m_dwStatus = FDE_XMLSYNTAXSTATUS_Error; - return m_dwStatus; - } else { - m_iTextDataLength = m_iDataLength; - m_BlockBuffer.Reset(); - m_pCurrentBlock = - m_BlockBuffer.GetAvailableBlock(m_iIndexInBlock); - if (m_dwMode != FDE_XMLSYNTAXMODE_Target) { - dwStatus = FDE_XMLSYNTAXSTATUS_TagName; - } else { - dwStatus = FDE_XMLSYNTAXSTATUS_TargetName; - } - m_dwMode = FDE_XMLSYNTAXMODE_AttriName; - } - } else { - if (m_iIndexInBlock == m_iAllocStep) { - m_pCurrentBlock = - m_BlockBuffer.GetAvailableBlock(m_iIndexInBlock); - if (!m_pCurrentBlock) { - return FDE_XMLSYNTAXSTATUS_Error; - } - } - m_pCurrentBlock[m_iIndexInBlock++] = ch; - m_iDataLength++; - m_pStart++; - } - break; - case FDE_XMLSYNTAXMODE_AttriName: - if (m_iDataLength < 1 && FDE_IsXMLWhiteSpace(ch)) { - m_pStart++; - break; - } - if (!FDE_IsXMLNameChar(ch, m_iDataLength < 1)) { - if (m_iDataLength < 1) { - if (m_CurNode.eNodeType == FDE_XMLNODE_Element) { - if (ch == L'>' || ch == L'/') { - m_dwMode = FDE_XMLSYNTAXMODE_BreakElement; - break; - } - } else if (m_CurNode.eNodeType == FDE_XMLNODE_Instruction) { - if (ch == L'?') { - m_dwMode = FDE_XMLSYNTAXMODE_CloseInstruction; - m_pStart++; - } else { - m_dwMode = FDE_XMLSYNTAXMODE_TargetData; - } - break; - } - m_dwStatus = FDE_XMLSYNTAXSTATUS_Error; - return m_dwStatus; - } else { - if (m_CurNode.eNodeType == FDE_XMLNODE_Instruction) { - if (ch != '=' && !FDE_IsXMLWhiteSpace(ch)) { - m_dwMode = FDE_XMLSYNTAXMODE_TargetData; - break; - } - } - m_iTextDataLength = m_iDataLength; - m_BlockBuffer.Reset(); - m_pCurrentBlock = - m_BlockBuffer.GetAvailableBlock(m_iIndexInBlock); - m_dwMode = FDE_XMLSYNTAXMODE_AttriEqualSign; - dwStatus = FDE_XMLSYNTAXSTATUS_AttriName; - } - } else { - if (m_iIndexInBlock == m_iAllocStep) { - m_pCurrentBlock = - m_BlockBuffer.GetAvailableBlock(m_iIndexInBlock); - if (!m_pCurrentBlock) { - return FDE_XMLSYNTAXSTATUS_Error; - } - } - m_pCurrentBlock[m_iIndexInBlock++] = ch; - m_iDataLength++; - m_pStart++; - } - break; - case FDE_XMLSYNTAXMODE_AttriEqualSign: - if (FDE_IsXMLWhiteSpace(ch)) { - m_pStart++; - break; - } - if (ch != L'=') { - if (m_CurNode.eNodeType == FDE_XMLNODE_Instruction) { - m_dwMode = FDE_XMLSYNTAXMODE_TargetData; - break; - } - m_dwStatus = FDE_XMLSYNTAXSTATUS_Error; - return m_dwStatus; - } else { - m_dwMode = FDE_XMLSYNTAXMODE_AttriQuotation; - m_pStart++; - } - break; - case FDE_XMLSYNTAXMODE_AttriQuotation: - if (FDE_IsXMLWhiteSpace(ch)) { - m_pStart++; - break; - } - if (ch != L'\"' && ch != L'\'') { - m_dwStatus = FDE_XMLSYNTAXSTATUS_Error; - return m_dwStatus; - } else { - m_wQuotationMark = ch; - m_dwMode = FDE_XMLSYNTAXMODE_AttriValue; - m_pStart++; - } - break; - case FDE_XMLSYNTAXMODE_AttriValue: - if (ch == m_wQuotationMark) { - if (m_iEntityStart > -1) { - m_dwStatus = FDE_XMLSYNTAXSTATUS_Error; - return m_dwStatus; - } - m_iTextDataLength = m_iDataLength; - m_wQuotationMark = 0; - m_BlockBuffer.Reset(); - m_pCurrentBlock = m_BlockBuffer.GetAvailableBlock(m_iIndexInBlock); - m_pStart++; - m_dwMode = FDE_XMLSYNTAXMODE_AttriName; - dwStatus = FDE_XMLSYNTAXSTATUS_AttriValue; - } else { - ParseTextChar(ch); - } - break; - case FDE_XMLSYNTAXMODE_CloseInstruction: - if (ch != L'>') { - if (m_iIndexInBlock == m_iAllocStep) { - m_pCurrentBlock = - m_BlockBuffer.GetAvailableBlock(m_iIndexInBlock); - if (!m_pCurrentBlock) { - return FDE_XMLSYNTAXSTATUS_Error; - } - } - m_pCurrentBlock[m_iIndexInBlock++] = ch; - m_iDataLength++; - m_dwMode = FDE_XMLSYNTAXMODE_TargetData; - } else if (m_iDataLength > 0) { - m_iTextDataLength = m_iDataLength; - m_BlockBuffer.Reset(); - m_pCurrentBlock = m_BlockBuffer.GetAvailableBlock(m_iIndexInBlock); - dwStatus = FDE_XMLSYNTAXSTATUS_TargetData; - } else { - m_pStart++; - FDE_XMLNODE* pXMLNode = m_XMLNodeStack.GetTopElement(); - if (pXMLNode == NULL) { - m_dwStatus = FDE_XMLSYNTAXSTATUS_Error; - return m_dwStatus; - } - m_XMLNodeStack.Pop(); - pXMLNode = m_XMLNodeStack.GetTopElement(); - if (pXMLNode == NULL) { - m_CurNode.iNodeNum = -1; - m_CurNode.eNodeType = FDE_XMLNODE_Unknown; - } else { - m_CurNode = *pXMLNode; - } - m_iCurrentNodeNum = m_CurNode.iNodeNum; - m_BlockBuffer.Reset(); - m_pCurrentBlock = m_BlockBuffer.GetAvailableBlock(m_iIndexInBlock); - m_dwMode = FDE_XMLSYNTAXMODE_Text; - dwStatus = FDE_XMLSYNTAXSTATUS_InstructionClose; - } - break; - case FDE_XMLSYNTAXMODE_BreakElement: - if (ch == L'>') { - m_dwMode = FDE_XMLSYNTAXMODE_Text; - dwStatus = FDE_XMLSYNTAXSTATUS_ElementBreak; - } else if (ch == L'/') { - m_dwMode = FDE_XMLSYNTAXMODE_CloseElement; - } else { - m_dwStatus = FDE_XMLSYNTAXSTATUS_Error; - return m_dwStatus; - } - m_pStart++; - break; - case FDE_XMLSYNTAXMODE_CloseElement: - if (!FDE_IsXMLNameChar(ch, m_iDataLength < 1)) { - if (ch == L'>') { - FDE_XMLNODE* pXMLNode = m_XMLNodeStack.GetTopElement(); - if (pXMLNode == NULL) { - m_dwStatus = FDE_XMLSYNTAXSTATUS_Error; - return m_dwStatus; - } - m_XMLNodeStack.Pop(); - pXMLNode = m_XMLNodeStack.GetTopElement(); - if (pXMLNode == NULL) { - m_CurNode.iNodeNum = -1; - m_CurNode.eNodeType = FDE_XMLNODE_Unknown; - } else { - m_CurNode = *pXMLNode; - } - m_iCurrentNodeNum = m_CurNode.iNodeNum; - m_iTextDataLength = m_iDataLength; - m_BlockBuffer.Reset(); - m_pCurrentBlock = - m_BlockBuffer.GetAvailableBlock(m_iIndexInBlock); - m_dwMode = FDE_XMLSYNTAXMODE_Text; - dwStatus = FDE_XMLSYNTAXSTATUS_ElementClose; - } else if (!FDE_IsXMLWhiteSpace(ch)) { - m_dwStatus = FDE_XMLSYNTAXSTATUS_Error; - return m_dwStatus; - } - } else { - if (m_iIndexInBlock == m_iAllocStep) { - m_pCurrentBlock = - m_BlockBuffer.GetAvailableBlock(m_iIndexInBlock); - if (!m_pCurrentBlock) { - return FDE_XMLSYNTAXSTATUS_Error; - } - } - m_pCurrentBlock[m_iIndexInBlock++] = ch; - m_iDataLength++; - } - m_pStart++; - break; - case FDE_XMLSYNTAXMODE_SkipCommentOrDecl: - if (ch == '-') { - m_dwMode = FDE_XMLSYNTAXMODE_SkipComment; - } else { - m_dwMode = FDE_XMLSYNTAXMODE_SkipDeclNode; - m_SkipChar = L'>'; - m_SkipStack.Push(L'>'); - } - break; - case FDE_XMLSYNTAXMODE_SkipDeclNode: - if (m_SkipChar == L'\'' || m_SkipChar == L'\"') { - m_pStart++; - if (ch != m_SkipChar) { - break; - } - m_SkipStack.Pop(); - FX_DWORD* pDWord = m_SkipStack.GetTopElement(); - if (pDWord == NULL) { - m_dwMode = FDE_XMLSYNTAXMODE_Text; - } else { - m_SkipChar = (FX_WCHAR)*pDWord; - } - } else { - switch (ch) { - case L'<': - m_SkipChar = L'>'; - m_SkipStack.Push(L'>'); - break; - case L'[': - m_SkipChar = L']'; - m_SkipStack.Push(L']'); - break; - case L'(': - m_SkipChar = L')'; - m_SkipStack.Push(L')'); - break; - case L'\'': - m_SkipChar = L'\''; - m_SkipStack.Push(L'\''); - break; - case L'\"': - m_SkipChar = L'\"'; - m_SkipStack.Push(L'\"'); - break; - default: - if (ch == m_SkipChar) { - m_SkipStack.Pop(); - FX_DWORD* pDWord = m_SkipStack.GetTopElement(); - if (pDWord == NULL) { - if (m_iDataLength >= 9) { - CFX_WideString wsHeader; - m_BlockBuffer.GetTextData(wsHeader, 0, 7); - if (wsHeader.Equal(FX_WSTRC(L"[CDATA["))) { - CFX_WideString wsTailer; - m_BlockBuffer.GetTextData(wsTailer, m_iDataLength - 2, - 2); - if (wsTailer.Equal(FX_WSTRC(L"]]"))) { - m_BlockBuffer.DeleteTextChars(7, TRUE); - m_BlockBuffer.DeleteTextChars(2, FALSE); - dwStatus = FDE_XMLSYNTAXSTATUS_CData; - } - } - } - m_iTextDataLength = m_iDataLength; - m_BlockBuffer.Reset(); - m_pCurrentBlock = - m_BlockBuffer.GetAvailableBlock(m_iIndexInBlock); - m_dwMode = FDE_XMLSYNTAXMODE_Text; - } else { - m_SkipChar = (FX_WCHAR)*pDWord; - } - } - break; - } - if (m_SkipStack.GetSize() > 0) { - if (m_iIndexInBlock == m_iAllocStep) { - m_pCurrentBlock = - m_BlockBuffer.GetAvailableBlock(m_iIndexInBlock); - if (!m_pCurrentBlock) { - return FDE_XMLSYNTAXSTATUS_Error; - } - } - m_pCurrentBlock[m_iIndexInBlock++] = ch; - m_iDataLength++; - } - m_pStart++; - } - break; - case FDE_XMLSYNTAXMODE_SkipComment: - if (ch == L'-') { - if (m_iIndexInBlock == m_iAllocStep) { - m_pCurrentBlock = - m_BlockBuffer.GetAvailableBlock(m_iIndexInBlock); - if (!m_pCurrentBlock) { - return FDE_XMLSYNTAXSTATUS_Error; - } - } - m_pCurrentBlock[m_iIndexInBlock++] = L'-'; - m_iDataLength++; - } else if (ch == L'>') { - if (m_iDataLength > 1) { - m_BlockBuffer.Reset(); - m_pCurrentBlock = - m_BlockBuffer.GetAvailableBlock(m_iIndexInBlock); - m_dwMode = FDE_XMLSYNTAXMODE_Text; - } - } else { - m_BlockBuffer.Reset(); - m_pCurrentBlock = m_BlockBuffer.GetAvailableBlock(m_iIndexInBlock); - } - m_pStart++; - break; - case FDE_XMLSYNTAXMODE_TargetData: - if (FDE_IsXMLWhiteSpace(ch)) { - if (m_iDataLength < 1) { - m_pStart++; - break; - } else if (m_wQuotationMark == 0) { - m_iTextDataLength = m_iDataLength; - m_wQuotationMark = 0; - m_BlockBuffer.Reset(); - m_pCurrentBlock = - m_BlockBuffer.GetAvailableBlock(m_iIndexInBlock); - m_pStart++; - dwStatus = FDE_XMLSYNTAXSTATUS_TargetData; - break; - } - } - if (ch == '?') { - m_dwMode = FDE_XMLSYNTAXMODE_CloseInstruction; - m_pStart++; - } else if (ch == '\"') { - if (m_wQuotationMark == 0) { - m_wQuotationMark = ch; - m_pStart++; - } else if (ch == m_wQuotationMark) { - m_iTextDataLength = m_iDataLength; - m_wQuotationMark = 0; - m_BlockBuffer.Reset(); - m_pCurrentBlock = - m_BlockBuffer.GetAvailableBlock(m_iIndexInBlock); - m_pStart++; - dwStatus = FDE_XMLSYNTAXSTATUS_TargetData; - } else { - m_dwStatus = FDE_XMLSYNTAXSTATUS_Error; - return m_dwStatus; - } - } else { - if (m_iIndexInBlock == m_iAllocStep) { - m_pCurrentBlock = - m_BlockBuffer.GetAvailableBlock(m_iIndexInBlock); - if (!m_pCurrentBlock) { - return FDE_XMLSYNTAXSTATUS_Error; - } - } - m_pCurrentBlock[m_iIndexInBlock++] = ch; - m_iDataLength++; - m_pStart++; - } - break; - default: - break; - } - if (dwStatus != FDE_XMLSYNTAXSTATUS_None) { - return dwStatus; - } - } - } - return 0; -} - -CFDE_XMLSyntaxParser::~CFDE_XMLSyntaxParser() { - if (m_pCurrentBlock) { - m_pCurrentBlock = NULL; - } - FX_Free(m_pBuffer); -} - -int32_t CFDE_XMLSyntaxParser::GetStatus() const { - if (m_pStream == NULL) { - return -1; - } - int32_t iStreamLength = m_pStream->GetLength(); - if (iStreamLength < 1) { - return 100; - } - if (m_dwStatus == FDE_XMLSYNTAXSTATUS_Error) { - return -1; - } - if (m_dwStatus == FDE_XMLSYNTAXSTATUS_EOS) { - return 100; - } - return m_iParsedBytes * 100 / iStreamLength; -} -static int32_t FX_GetUTF8EncodeLength(const FX_WCHAR* pSrc, int32_t iSrcLen) { - FX_DWORD unicode = 0; - int32_t iDstNum = 0; - while (iSrcLen-- > 0) { - unicode = *pSrc++; - int nbytes = 0; - if ((FX_DWORD)unicode < 0x80) { - nbytes = 1; - } else if ((FX_DWORD)unicode < 0x800) { - nbytes = 2; - } else if ((FX_DWORD)unicode < 0x10000) { - nbytes = 3; - } else if ((FX_DWORD)unicode < 0x200000) { - nbytes = 4; - } else if ((FX_DWORD)unicode < 0x4000000) { - nbytes = 5; - } else { - nbytes = 6; - } - iDstNum += nbytes; - } - return iDstNum; -} -FX_FILESIZE CFDE_XMLSyntaxParser::GetCurrentBinaryPos() const { - if (m_pStream == NULL) { - return 0; - } - int32_t nSrcLen = m_pStart - m_pBuffer; - int32_t nDstLen = FX_GetUTF8EncodeLength(m_pBuffer, nSrcLen); - return m_iParsedBytes + nDstLen; -} - -void CFDE_XMLSyntaxParser::ParseTextChar(FX_WCHAR ch) { - if (m_iIndexInBlock == m_iAllocStep) { - m_pCurrentBlock = m_BlockBuffer.GetAvailableBlock(m_iIndexInBlock); - if (!m_pCurrentBlock) { - return; - } - } - m_pCurrentBlock[m_iIndexInBlock++] = ch; - m_iDataLength++; - if (m_iEntityStart > -1 && ch == L';') { - CFX_WideString csEntity; - m_BlockBuffer.GetTextData(csEntity, m_iEntityStart + 1, - (m_iDataLength - 1) - m_iEntityStart - 1); - int32_t iLen = csEntity.GetLength(); - if (iLen > 0) { - if (csEntity[0] == L'#') { - ch = 0; - FX_WCHAR w; - if (iLen > 1 && csEntity[1] == L'x') { - for (int32_t i = 2; i < iLen; i++) { - w = csEntity[i]; - if (w >= L'0' && w <= L'9') { - ch = (ch << 4) + w - L'0'; - } else if (w >= L'A' && w <= L'F') { - ch = (ch << 4) + w - 55; - } else if (w >= L'a' && w <= L'f') { - ch = (ch << 4) + w - 87; - } else { - break; - } - } - } else { - for (int32_t i = 1; i < iLen; i++) { - w = csEntity[i]; - if (w < L'0' || w > L'9') { - break; - } - ch = ch * 10 + w - L'0'; - } - } - if (ch != 0) { - m_BlockBuffer.SetTextChar(m_iEntityStart, ch); - m_iEntityStart++; - } - } else { - if (csEntity.Compare(L"amp") == 0) { - m_BlockBuffer.SetTextChar(m_iEntityStart, L'&'); - m_iEntityStart++; - } else if (csEntity.Compare(L"lt") == 0) { - m_BlockBuffer.SetTextChar(m_iEntityStart, L'<'); - m_iEntityStart++; - } else if (csEntity.Compare(L"gt") == 0) { - m_BlockBuffer.SetTextChar(m_iEntityStart, L'>'); - m_iEntityStart++; - } else if (csEntity.Compare(L"apos") == 0) { - m_BlockBuffer.SetTextChar(m_iEntityStart, L'\''); - m_iEntityStart++; - } else if (csEntity.Compare(L"quot") == 0) { - m_BlockBuffer.SetTextChar(m_iEntityStart, L'\"'); - m_iEntityStart++; - } - } - } - m_BlockBuffer.DeleteTextChars(m_iDataLength - m_iEntityStart, FALSE); - m_pCurrentBlock = m_BlockBuffer.GetAvailableBlock(m_iIndexInBlock); - m_iEntityStart = -1; - } else { - if (m_iEntityStart < 0 && ch == L'&') { - m_iEntityStart = m_iDataLength - 1; - } - } - m_pStart++; -} diff --git a/xfa/src/fde/xml/fde_xml_imp.h b/xfa/src/fde/xml/fde_xml_imp.h deleted file mode 100644 index 815d746d31..0000000000 --- a/xfa/src/fde/xml/fde_xml_imp.h +++ /dev/null @@ -1,354 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FDE_XML_FDE_XML_IMP_H_ -#define XFA_SRC_FDE_XML_FDE_XML_IMP_H_ - -#include "core/include/fxcrt/fx_system.h" -#include "xfa/src/fde/xml/fde_xml.h" -#include "xfa/src/fgas/crt/fgas_memory.h" -#include "xfa/src/fgas/crt/fgas_stream.h" - -class CFDE_BlockBuffer; -class CFDE_XMLInstruction; -class CFDE_XMLElement; -class CFDE_XMLText; -class CFDE_XMLDoc; -class IFDE_XMLParser; -class CFDE_XMLDOMParser; -class CFDE_XMLSAXParser; -class CFDE_XMLSyntaxParser; - -class CFDE_XMLNode : public CFX_Target { - public: - CFDE_XMLNode(); - virtual void Release() { delete this; } - virtual FDE_XMLNODETYPE GetType() const { return FDE_XMLNODE_Unknown; } - virtual int32_t CountChildNodes() const; - virtual CFDE_XMLNode* GetChildNode(int32_t index) const; - virtual int32_t GetChildNodeIndex(CFDE_XMLNode* pNode) const; - virtual CFDE_XMLNode* GetPath(const FX_WCHAR* pPath, - int32_t iLength = -1, - FX_BOOL bQualifiedName = TRUE) const; - virtual int32_t InsertChildNode(CFDE_XMLNode* pNode, int32_t index = -1); - virtual void RemoveChildNode(CFDE_XMLNode* pNode); - virtual void DeleteChildren(); - virtual CFDE_XMLNode* GetNodeItem(IFDE_XMLNode::NodeItem eItem) const; - virtual int32_t GetNodeLevel() const; - virtual FX_BOOL InsertNodeItem(IFDE_XMLNode::NodeItem eItem, - CFDE_XMLNode* pNode); - virtual CFDE_XMLNode* RemoveNodeItem(IFDE_XMLNode::NodeItem eItem); - virtual CFDE_XMLNode* Clone(FX_BOOL bRecursive); - virtual void SaveXMLNode(IFX_Stream* pXMLStream); - - public: - ~CFDE_XMLNode(); - void CloneChildren(CFDE_XMLNode* pClone); - CFDE_XMLNode* m_pParent; - CFDE_XMLNode* m_pChild; - CFDE_XMLNode* m_pPrior; - CFDE_XMLNode* m_pNext; -}; -class CFDE_XMLInstruction : public CFDE_XMLNode { - public: - CFDE_XMLInstruction(const CFX_WideString& wsTarget); - virtual void Release() { delete this; } - virtual FDE_XMLNODETYPE GetType() const { return FDE_XMLNODE_Instruction; } - virtual CFDE_XMLNode* Clone(FX_BOOL bRecursive); - virtual void GetTargetName(CFX_WideString& wsTarget) const { - wsTarget = m_wsTarget; - } - virtual int32_t CountAttributes() const; - virtual FX_BOOL GetAttribute(int32_t index, - CFX_WideString& wsAttriName, - CFX_WideString& wsAttriValue) const; - virtual FX_BOOL HasAttribute(const FX_WCHAR* pwsAttriName) const; - virtual void GetString(const FX_WCHAR* pwsAttriName, - CFX_WideString& wsAttriValue, - const FX_WCHAR* pwsDefValue = NULL) const; - virtual void SetString(const CFX_WideString& wsAttriName, - const CFX_WideString& wsAttriValue); - virtual int32_t GetInteger(const FX_WCHAR* pwsAttriName, - int32_t iDefValue = 0) const; - virtual void SetInteger(const FX_WCHAR* pwsAttriName, int32_t iAttriValue); - virtual FX_FLOAT GetFloat(const FX_WCHAR* pwsAttriName, - FX_FLOAT fDefValue = 0) const; - virtual void SetFloat(const FX_WCHAR* pwsAttriName, FX_FLOAT fAttriValue); - virtual void RemoveAttribute(const FX_WCHAR* pwsAttriName); - virtual int32_t CountData() const; - virtual FX_BOOL GetData(int32_t index, CFX_WideString& wsData) const; - virtual void AppendData(const CFX_WideString& wsData); - virtual void RemoveData(int32_t index); - - public: - ~CFDE_XMLInstruction() {} - CFX_WideString m_wsTarget; - CFX_WideStringArray m_Attributes; - CFX_WideStringArray m_TargetData; -}; -class CFDE_XMLElement : public CFDE_XMLNode { - public: - CFDE_XMLElement(const CFX_WideString& wsTag); - virtual void Release() { delete this; } - virtual FDE_XMLNODETYPE GetType() const { return FDE_XMLNODE_Element; } - virtual CFDE_XMLNode* Clone(FX_BOOL bRecursive); - virtual void GetTagName(CFX_WideString& wsTag) const; - virtual void GetLocalTagName(CFX_WideString& wsTag) const; - virtual void GetNamespacePrefix(CFX_WideString& wsPrefix) const; - virtual void GetNamespaceURI(CFX_WideString& wsNamespace) const; - virtual int32_t CountAttributes() const; - virtual FX_BOOL GetAttribute(int32_t index, - CFX_WideString& wsAttriName, - CFX_WideString& wsAttriValue) const; - virtual FX_BOOL HasAttribute(const FX_WCHAR* pwsAttriName) const; - virtual void GetString(const FX_WCHAR* pwsAttriName, - CFX_WideString& wsAttriValue, - const FX_WCHAR* pwsDefValue = NULL) const; - virtual void SetString(const CFX_WideString& wsAttriName, - const CFX_WideString& wsAttriValue); - virtual int32_t GetInteger(const FX_WCHAR* pwsAttriName, - int32_t iDefValue = 0) const; - virtual void SetInteger(const FX_WCHAR* pwsAttriName, int32_t iAttriValue); - virtual FX_FLOAT GetFloat(const FX_WCHAR* pwsAttriName, - FX_FLOAT fDefValue = 0) const; - virtual void SetFloat(const FX_WCHAR* pwsAttriName, FX_FLOAT fAttriValue); - virtual void RemoveAttribute(const FX_WCHAR* pwsAttriName); - virtual void GetTextData(CFX_WideString& wsText) const; - virtual void SetTextData(const CFX_WideString& wsText); - - public: - ~CFDE_XMLElement(); - CFX_WideString m_wsTag; - CFX_WideStringArray m_Attributes; -}; -class CFDE_XMLText : public CFDE_XMLNode { - public: - CFDE_XMLText(const CFX_WideString& wsText); - virtual void Release() { delete this; } - virtual FDE_XMLNODETYPE GetType() const { return FDE_XMLNODE_Text; } - virtual CFDE_XMLNode* Clone(FX_BOOL bRecursive); - virtual void GetText(CFX_WideString& wsText) const { wsText = m_wsText; } - virtual void SetText(const CFX_WideString& wsText) { m_wsText = wsText; } - - public: - ~CFDE_XMLText() {} - CFX_WideString m_wsText; -}; -class CFDE_XMLDeclaration : public CFDE_XMLNode { - public: - CFDE_XMLDeclaration() : CFDE_XMLNode() {} -}; -class CFDE_XMLCharData : public CFDE_XMLDeclaration { - public: - CFDE_XMLCharData(const CFX_WideString& wsCData); - - virtual void Release() { delete this; } - virtual FDE_XMLNODETYPE GetType() const { return FDE_XMLNODE_CharData; } - virtual CFDE_XMLNode* Clone(FX_BOOL bRecursive); - virtual void GetCharData(CFX_WideString& wsCharData) const { - wsCharData = m_wsCharData; - } - virtual void SetCharData(const CFX_WideString& wsCData) { - m_wsCharData = wsCData; - } - - public: - ~CFDE_XMLCharData() {} - - CFX_WideString m_wsCharData; -}; -class CFDE_XMLDoc : public CFX_Target { - public: - CFDE_XMLDoc(); - ~CFDE_XMLDoc(); - virtual void Release() { delete this; } - virtual FX_BOOL LoadXML(IFX_Stream* pXMLStream, - int32_t iXMLPlaneSize = 8192, - int32_t iTextDataSize = 256, - FDE_XMLREADERHANDLER* pHandler = NULL); - virtual FX_BOOL LoadXML(IFDE_XMLParser* pXMLParser); - virtual int32_t DoLoad(IFX_Pause* pPause = NULL); - virtual void CloseXML(); - virtual CFDE_XMLNode* GetRoot() const { return m_pRoot; } - virtual void SaveXML(IFX_Stream* pXMLStream = NULL, FX_BOOL bSaveBOM = TRUE); - virtual void SaveXMLNode(IFX_Stream* pXMLStream, IFDE_XMLNode* pNode); - - protected: - IFX_Stream* m_pStream; - int32_t m_iStatus; - CFDE_XMLNode* m_pRoot; - IFDE_XMLSyntaxParser* m_pSyntaxParser; - IFDE_XMLParser* m_pXMLParser; - void Reset(FX_BOOL bInitRoot); - void ReleaseParser(); -}; -typedef CFX_StackTemplate CFDE_XMLDOMNodeStack; -class CFDE_XMLDOMParser : public IFDE_XMLParser, public CFX_Target { - public: - CFDE_XMLDOMParser(CFDE_XMLNode* pRoot, IFDE_XMLSyntaxParser* pParser); - ~CFDE_XMLDOMParser(); - - virtual void Release() { delete this; } - virtual int32_t DoParser(IFX_Pause* pPause); - - private: - IFDE_XMLSyntaxParser* m_pParser; - CFDE_XMLNode* m_pParent; - CFDE_XMLNode* m_pChild; - CFDE_XMLDOMNodeStack m_NodeStack; - CFX_WideString m_ws1; - CFX_WideString m_ws2; -}; -class CFDE_XMLTAG : public CFX_Target { - public: - CFDE_XMLTAG() : eType(FDE_XMLNODE_Unknown) {} - CFDE_XMLTAG(const CFDE_XMLTAG& src) - : wsTagName(src.wsTagName), eType(src.eType) {} - CFX_WideString wsTagName; - FDE_XMLNODETYPE eType; -}; -typedef CFX_ObjectStackTemplate CFDE_XMLTagStack; -class CFDE_XMLSAXParser : public IFDE_XMLParser, public CFX_Target { - public: - CFDE_XMLSAXParser(FDE_XMLREADERHANDLER* pHandler, - IFDE_XMLSyntaxParser* pParser); - ~CFDE_XMLSAXParser(); - - virtual void Release() { delete this; } - virtual int32_t DoParser(IFX_Pause* pPause); - - private: - void Push(const CFDE_XMLTAG& xmlTag); - void Pop(); - FDE_XMLREADERHANDLER* m_pHandler; - IFDE_XMLSyntaxParser* m_pParser; - CFDE_XMLTagStack m_TagStack; - CFDE_XMLTAG* m_pTagTop; - CFX_WideString m_ws1; - CFX_WideString m_ws2; -}; - -class CFDE_BlockBuffer : public CFX_Target { - public: - CFDE_BlockBuffer(int32_t iAllocStep = 1024 * 1024); - ~CFDE_BlockBuffer(); - - FX_BOOL InitBuffer(int32_t iBufferSize = 1024 * 1024); - FX_BOOL IsInitialized() { return m_iBufferSize / m_iAllocStep >= 1; } - void ReleaseBuffer() { delete this; } - FX_WCHAR* GetAvailableBlock(int32_t& iIndexInBlock); - inline int32_t GetAllocStep() const { return m_iAllocStep; } - inline int32_t& GetDataLengthRef() { return m_iDataLength; } - inline void Reset(FX_BOOL bReserveData = TRUE) { - if (!bReserveData) { - m_iStartPosition = 0; - } - m_iDataLength = 0; - } - void SetTextChar(int32_t iIndex, FX_WCHAR ch); - int32_t DeleteTextChars(int32_t iCount, FX_BOOL bDirection = TRUE); - void GetTextData(CFX_WideString& wsTextData, - int32_t iStart = 0, - int32_t iLength = -1) const; - - protected: - inline void TextDataIndex2BufIndex(const int32_t iIndex, - int32_t& iBlockIndex, - int32_t& iInnerIndex) const; - void ClearBuffer(); - CFX_PtrArray m_BlockArray; - int32_t m_iDataLength; - int32_t m_iBufferSize; - int32_t m_iAllocStep; - int32_t m_iStartPosition; -}; - -#define FDE_XMLSYNTAXMODE_Text 0 -#define FDE_XMLSYNTAXMODE_Node 1 -#define FDE_XMLSYNTAXMODE_Target 2 -#define FDE_XMLSYNTAXMODE_Tag 3 -#define FDE_XMLSYNTAXMODE_AttriName 4 -#define FDE_XMLSYNTAXMODE_AttriEqualSign 5 -#define FDE_XMLSYNTAXMODE_AttriQuotation 6 -#define FDE_XMLSYNTAXMODE_AttriValue 7 -#define FDE_XMLSYNTAXMODE_Entity 8 -#define FDE_XMLSYNTAXMODE_EntityDecimal 9 -#define FDE_XMLSYNTAXMODE_EntityHex 10 -#define FDE_XMLSYNTAXMODE_CloseInstruction 11 -#define FDE_XMLSYNTAXMODE_BreakElement 12 -#define FDE_XMLSYNTAXMODE_CloseElement 13 -#define FDE_XMLSYNTAXMODE_SkipDeclNode 14 -#define FDE_XMLSYNTAXMODE_DeclCharData 15 -#define FDE_XMLSYNTAXMODE_SkipComment 16 -#define FDE_XMLSYNTAXMODE_SkipCommentOrDecl 17 -#define FDE_XMLSYNTAXMODE_TargetData 18 -class CFDE_XMLSyntaxParser : public IFDE_XMLSyntaxParser, public CFX_Target { - public: - CFDE_XMLSyntaxParser(); - ~CFDE_XMLSyntaxParser(); - virtual void Release() { delete this; } - virtual void Init(IFX_Stream* pStream, - int32_t iXMLPlaneSize, - int32_t iTextDataSize = 256); - virtual FX_DWORD DoSyntaxParse(); - virtual int32_t GetStatus() const; - virtual int32_t GetCurrentPos() const { - return m_iParsedChars + (m_pStart - m_pBuffer); - } - virtual FX_FILESIZE GetCurrentBinaryPos() const; - virtual int32_t GetCurrentNodeNumber() const { return m_iCurrentNodeNum; } - virtual int32_t GetLastNodeNumber() const { return m_iLastNodeNum; } - - virtual void GetTargetName(CFX_WideString& wsTarget) const { - m_BlockBuffer.GetTextData(wsTarget, 0, m_iTextDataLength); - } - virtual void GetTagName(CFX_WideString& wsTag) const { - m_BlockBuffer.GetTextData(wsTag, 0, m_iTextDataLength); - } - virtual void GetAttributeName(CFX_WideString& wsAttriName) const { - m_BlockBuffer.GetTextData(wsAttriName, 0, m_iTextDataLength); - } - virtual void GetAttributeValue(CFX_WideString& wsAttriValue) const { - m_BlockBuffer.GetTextData(wsAttriValue, 0, m_iTextDataLength); - } - virtual void GetTextData(CFX_WideString& wsText) const { - m_BlockBuffer.GetTextData(wsText, 0, m_iTextDataLength); - } - virtual void GetTargetData(CFX_WideString& wsData) const { - m_BlockBuffer.GetTextData(wsData, 0, m_iTextDataLength); - } - - protected: - IFX_Stream* m_pStream; - int32_t m_iXMLPlaneSize; - int32_t m_iCurrentPos; - int32_t m_iCurrentNodeNum; - int32_t m_iLastNodeNum; - int32_t m_iParsedChars; - int32_t m_iParsedBytes; - FX_WCHAR* m_pBuffer; - int32_t m_iBufferChars; - FX_BOOL m_bEOS; - FX_WCHAR* m_pStart; - FX_WCHAR* m_pEnd; - FDE_XMLNODE m_CurNode; - CFDE_XMLNodeStack m_XMLNodeStack; - CFDE_BlockBuffer m_BlockBuffer; - int32_t m_iAllocStep; - int32_t& m_iDataLength; - FX_WCHAR* m_pCurrentBlock; - int32_t m_iIndexInBlock; - int32_t m_iTextDataLength; - FX_DWORD m_dwStatus; - FX_DWORD m_dwMode; - FX_WCHAR m_wQuotationMark; - int32_t m_iEntityStart; - CFX_DWordStack m_SkipStack; - FX_WCHAR m_SkipChar; - inline void ParseTextChar(FX_WCHAR ch); -}; - -#endif // XFA_SRC_FDE_XML_FDE_XML_IMP_H_ diff --git a/xfa/src/fee/fde_txtedtbuf.cpp b/xfa/src/fee/fde_txtedtbuf.cpp deleted file mode 100644 index 93a12dd282..0000000000 --- a/xfa/src/fee/fde_txtedtbuf.cpp +++ /dev/null @@ -1,403 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fee/fde_txtedtbuf.h" - -#include - -#include "xfa/src/fee/ifde_txtedtbuf.h" -#include "xfa/src/fee/ifde_txtedtengine.h" - -#define FDE_DEFCHUNKCOUNT 2 -#define FDE_TXTEDT_FORMATBLOCK_BGN 0xFFF9 -#define FDE_TXTEDT_FORMATBLOCK_END 0xFFFB -#define FDE_TXTEDT_ZEROWIDTHSPACE 0x200B - -CFDE_TxtEdtBufIter::CFDE_TxtEdtBufIter(CFDE_TxtEdtBuf* pBuf, FX_WCHAR wcAlias) - : m_pBuf(pBuf), - m_nCurChunk(0), - m_nCurIndex(0), - m_nIndex(0), - m_Alias(wcAlias) { - FXSYS_assert(m_pBuf); -} -CFDE_TxtEdtBufIter::~CFDE_TxtEdtBufIter() {} -void CFDE_TxtEdtBufIter::Release() { - delete this; -} -FX_BOOL CFDE_TxtEdtBufIter::Next(FX_BOOL bPrev) { - if (bPrev) { - if (m_nIndex == 0) { - return FALSE; - } - FXSYS_assert(m_nCurChunk < m_pBuf->m_Chunks.GetSize()); - CFDE_TxtEdtBuf::FDE_LPCHUNKHEADER lpChunk = NULL; - if (m_nCurIndex > 0) { - m_nCurIndex--; - } else { - while (m_nCurChunk > 0) { - --m_nCurChunk; - lpChunk = - (CFDE_TxtEdtBuf::FDE_LPCHUNKHEADER)m_pBuf->m_Chunks[m_nCurChunk]; - if (lpChunk->nUsed > 0) { - m_nCurIndex = lpChunk->nUsed - 1; - break; - } - } - } - FXSYS_assert(m_nCurChunk >= 0); - m_nIndex--; - return TRUE; - } else { - if (m_nIndex >= (m_pBuf->m_nTotal - 1)) { - return FALSE; - } - FXSYS_assert(m_nCurChunk < m_pBuf->m_Chunks.GetSize()); - CFDE_TxtEdtBuf::FDE_LPCHUNKHEADER lpChunk = - (CFDE_TxtEdtBuf::FDE_LPCHUNKHEADER)m_pBuf->m_Chunks[m_nCurChunk]; - if (lpChunk->nUsed != (m_nCurIndex + 1)) { - m_nCurIndex++; - } else { - int32_t nEnd = m_pBuf->m_Chunks.GetSize() - 1; - while (m_nCurChunk < nEnd) { - m_nCurChunk++; - CFDE_TxtEdtBuf::FDE_LPCHUNKHEADER lpChunkTemp = - (CFDE_TxtEdtBuf::FDE_LPCHUNKHEADER)m_pBuf->m_Chunks[m_nCurChunk]; - if (lpChunkTemp->nUsed > 0) { - m_nCurIndex = 0; - break; - } - } - } - m_nIndex++; - return TRUE; - } -} -void CFDE_TxtEdtBufIter::SetAt(int32_t nIndex) { - FXSYS_assert(nIndex >= 0 && nIndex < m_pBuf->m_nTotal); - CFDE_TxtEdtBuf::FDE_CHUNKPLACE cp; - m_pBuf->Index2CP(nIndex, cp); - m_nIndex = nIndex; - m_nCurChunk = cp.nChunkIndex; - m_nCurIndex = cp.nCharIndex; -} -int32_t CFDE_TxtEdtBufIter::GetAt() const { - return m_nIndex; -} -FX_WCHAR CFDE_TxtEdtBufIter::GetChar() { - FXSYS_assert(m_nIndex >= 0 && m_nIndex < m_pBuf->m_nTotal); - if (m_Alias == 0 || m_nIndex == (m_pBuf->m_nTotal - 1)) { - return ((CFDE_TxtEdtBuf::FDE_LPCHUNKHEADER)m_pBuf->m_Chunks[m_nCurChunk]) - ->wChars[m_nCurIndex]; - } - return m_Alias; -} -FX_BOOL CFDE_TxtEdtBufIter::IsEOF(FX_BOOL bTail) const { - return bTail ? m_nIndex == (m_pBuf->GetTextLength() - 2) : m_nIndex == 0; -} -IFX_CharIter* CFDE_TxtEdtBufIter::Clone() { - CFDE_TxtEdtBufIter* pIter = new CFDE_TxtEdtBufIter(m_pBuf); - pIter->m_nCurChunk = m_nCurChunk; - pIter->m_nCurIndex = m_nCurIndex; - pIter->m_nIndex = m_nIndex; - pIter->m_Alias = m_Alias; - return pIter; -} -CFDE_TxtEdtBuf::CFDE_TxtEdtBuf(int32_t nDefChunkSize) - : m_nChunkSize(nDefChunkSize), - m_nTotal(0), - m_bChanged(FALSE), - m_pAllocator(NULL) { - FXSYS_assert(m_nChunkSize); - ResetChunkBuffer(FDE_DEFCHUNKCOUNT, m_nChunkSize); -} -void CFDE_TxtEdtBuf::Release() { - delete this; -} -CFDE_TxtEdtBuf::~CFDE_TxtEdtBuf() { - Clear(TRUE); - m_pAllocator->Release(); - m_Chunks.RemoveAll(); -} -FX_BOOL CFDE_TxtEdtBuf::SetChunkSize(int32_t nChunkSize) { - FXSYS_assert(nChunkSize); - ResetChunkBuffer(FDE_DEFCHUNKCOUNT, nChunkSize); - return TRUE; -} -int32_t CFDE_TxtEdtBuf::GetChunkSize() const { - return m_nChunkSize; -} -int32_t CFDE_TxtEdtBuf::GetTextLength() const { - return m_nTotal; -} -void CFDE_TxtEdtBuf::SetText(const CFX_WideString& wsText) { - FXSYS_assert(!wsText.IsEmpty()); - Clear(FALSE); - int32_t nTextLength = wsText.GetLength(); - int32_t nNeedCount = - ((nTextLength - 1) / m_nChunkSize + 1) - m_Chunks.GetSize(); - int32_t i = 0; - for (i = 0; i < nNeedCount; i++) { - FDE_LPCHUNKHEADER lpChunk = (FDE_LPCHUNKHEADER)m_pAllocator->Alloc( - sizeof(FDE_CHUNKHEADER) + (m_nChunkSize - 1) * sizeof(FX_WCHAR)); - lpChunk->nUsed = 0; - m_Chunks.Add(lpChunk); - } - int32_t nTotalCount = m_Chunks.GetSize(); - const FX_WCHAR* lpSrcBuf = wsText.c_str(); - int32_t nLeave = nTextLength; - int32_t nCopyedLength = m_nChunkSize; - for (i = 0; i < nTotalCount && nLeave > 0; i++) { - if (nLeave < nCopyedLength) { - nCopyedLength = nLeave; - } - FDE_LPCHUNKHEADER lpChunk = (FDE_LPCHUNKHEADER)m_Chunks[i]; - FXSYS_memcpy(lpChunk->wChars, lpSrcBuf, nCopyedLength * sizeof(FX_WCHAR)); - nLeave -= nCopyedLength; - lpSrcBuf += nCopyedLength; - lpChunk->nUsed = nCopyedLength; - } - m_nTotal = nTextLength; - m_bChanged = TRUE; -} -void CFDE_TxtEdtBuf::GetText(CFX_WideString& wsText) const { - GetRange(wsText, 0, m_nTotal); -} -FX_WCHAR CFDE_TxtEdtBuf::GetCharByIndex(int32_t nIndex) const { - FXSYS_assert(nIndex >= 0 && nIndex < GetTextLength()); - FDE_LPCHUNKHEADER pChunkHeader = NULL; - int32_t nTotal = 0; - int32_t nCount = m_Chunks.GetSize(); - int32_t i = 0; - for (i = 0; i < nCount; i++) { - pChunkHeader = (FDE_LPCHUNKHEADER)m_Chunks[i]; - nTotal += pChunkHeader->nUsed; - if (nTotal > nIndex) { - break; - } - } - FXSYS_assert(pChunkHeader); - return pChunkHeader->wChars[pChunkHeader->nUsed - (nTotal - nIndex)]; -} -void CFDE_TxtEdtBuf::GetRange(CFX_WideString& wsText, - int32_t nBegin, - int32_t nLength) const { - FDE_CHUNKPLACE cp; - Index2CP(nBegin, cp); - int32_t nLeave = nLength; - int32_t nCount = m_Chunks.GetSize(); - FX_WCHAR* lpDstBuf = wsText.GetBuffer(nLength); - int32_t nChunkIndex = cp.nChunkIndex; - FDE_LPCHUNKHEADER lpChunkHeader = (FDE_LPCHUNKHEADER)m_Chunks[nChunkIndex]; - int32_t nCopyLength = lpChunkHeader->nUsed - cp.nCharIndex; - FX_WCHAR* lpSrcBuf = lpChunkHeader->wChars + cp.nCharIndex; - while (nLeave > 0) { - if (nLeave <= nCopyLength) { - nCopyLength = nLeave; - } - FXSYS_memcpy(lpDstBuf, lpSrcBuf, nCopyLength * sizeof(FX_WCHAR)); - nChunkIndex++; - if (nChunkIndex >= nCount) { - break; - } - lpChunkHeader = (FDE_LPCHUNKHEADER)m_Chunks[nChunkIndex]; - lpSrcBuf = lpChunkHeader->wChars; - nLeave -= nCopyLength; - lpDstBuf += nCopyLength; - nCopyLength = lpChunkHeader->nUsed; - } - wsText.ReleaseBuffer(); -} -void CFDE_TxtEdtBuf::Insert(int32_t nPos, - const FX_WCHAR* lpText, - int32_t nLength) { - FXSYS_assert(nPos >= 0 && nPos <= m_nTotal); - FDE_CHUNKPLACE cp; - Index2CP(nPos, cp); - int32_t nLengthTemp = nLength; - if (cp.nCharIndex != 0) { - FDE_LPCHUNKHEADER lpNewChunk = (FDE_LPCHUNKHEADER)m_pAllocator->Alloc( - sizeof(FDE_CHUNKHEADER) + (m_nChunkSize - 1) * sizeof(FX_WCHAR)); - FDE_LPCHUNKHEADER lpChunk = (FDE_LPCHUNKHEADER)m_Chunks[cp.nChunkIndex]; - int32_t nCopy = lpChunk->nUsed - cp.nCharIndex; - FXSYS_memcpy(lpNewChunk->wChars, lpChunk->wChars + cp.nCharIndex, - nCopy * sizeof(FX_WCHAR)); - lpChunk->nUsed -= nCopy; - cp.nChunkIndex++; - m_Chunks.InsertAt(cp.nChunkIndex, lpNewChunk); - lpNewChunk->nUsed = nCopy; - cp.nCharIndex = 0; - } - if (cp.nChunkIndex != 0) { - FDE_LPCHUNKHEADER lpChunk = (FDE_LPCHUNKHEADER)m_Chunks[cp.nChunkIndex - 1]; - if (lpChunk->nUsed != m_nChunkSize) { - cp.nChunkIndex--; - int32_t nFree = m_nChunkSize - lpChunk->nUsed; - int32_t nCopy = std::min(nLengthTemp, nFree); - FXSYS_memcpy(lpChunk->wChars + lpChunk->nUsed, lpText, - nCopy * sizeof(FX_WCHAR)); - lpText += nCopy; - nLengthTemp -= nCopy; - lpChunk->nUsed += nCopy; - cp.nChunkIndex++; - } - } - while (nLengthTemp > 0) { - FDE_LPCHUNKHEADER lpChunk = (FDE_LPCHUNKHEADER)m_pAllocator->Alloc( - sizeof(FDE_CHUNKHEADER) + (m_nChunkSize - 1) * sizeof(FX_WCHAR)); - FXSYS_assert(lpChunk); - int32_t nCopy = std::min(nLengthTemp, m_nChunkSize); - FXSYS_memcpy(lpChunk->wChars, lpText, nCopy * sizeof(FX_WCHAR)); - lpText += nCopy; - nLengthTemp -= nCopy; - lpChunk->nUsed = nCopy; - m_Chunks.InsertAt(cp.nChunkIndex, lpChunk); - cp.nChunkIndex++; - } - m_nTotal += nLength; - m_bChanged = TRUE; -} -void CFDE_TxtEdtBuf::Delete(int32_t nIndex, int32_t nLength) { - FXSYS_assert(nLength > 0 && nIndex >= 0 && nIndex + nLength <= m_nTotal); - FDE_CHUNKPLACE cpEnd; - Index2CP(nIndex + nLength - 1, cpEnd); - m_nTotal -= nLength; - FDE_LPCHUNKHEADER lpChunk = (FDE_LPCHUNKHEADER)m_Chunks[cpEnd.nChunkIndex]; - int32_t nFirstPart = cpEnd.nCharIndex + 1; - int32_t nMovePart = lpChunk->nUsed - nFirstPart; - if (nMovePart != 0) { - int32_t nDelete = std::min(nFirstPart, nLength); - FXSYS_memmove(lpChunk->wChars + nFirstPart - nDelete, - lpChunk->wChars + nFirstPart, nMovePart * sizeof(FX_WCHAR)); - lpChunk->nUsed -= nDelete; - nLength -= nDelete; - cpEnd.nChunkIndex--; - } - while (nLength > 0) { - lpChunk = (FDE_LPCHUNKHEADER)m_Chunks[cpEnd.nChunkIndex]; - int32_t nDeleted = std::min(lpChunk->nUsed, nLength); - lpChunk->nUsed -= nDeleted; - if (lpChunk->nUsed == 0) { - m_pAllocator->Free(lpChunk); - m_Chunks.RemoveAt(cpEnd.nChunkIndex); - lpChunk = NULL; - } - nLength -= nDeleted; - cpEnd.nChunkIndex--; - } - m_bChanged = TRUE; -} -void CFDE_TxtEdtBuf::Clear(FX_BOOL bRelease) { - int32_t i = 0; - int32_t nCount = m_Chunks.GetSize(); - if (bRelease) { - while (i < nCount) { - m_pAllocator->Free(m_Chunks[i++]); - } - m_Chunks.RemoveAll(); - } else { - while (i < nCount) { - ((FDE_LPCHUNKHEADER)m_Chunks[i++])->nUsed = 0; - } - } - m_nTotal = 0; - m_bChanged = TRUE; -} -FX_BOOL CFDE_TxtEdtBuf::Optimize(IFX_Pause* pPause) { - if (m_bChanged == FALSE) { - return TRUE; - } - if (m_nTotal == 0) { - return TRUE; - } - int32_t nCount = m_Chunks.GetSize(); - if (nCount == 0) { - return TRUE; - } - int32_t i = 0; - for (; i < nCount; i++) { - FDE_LPCHUNKHEADER lpChunk = (FDE_LPCHUNKHEADER)m_Chunks[i]; - if (lpChunk->nUsed == 0) { - m_pAllocator->Free(lpChunk); - m_Chunks.RemoveAt(i); - --i; - --nCount; - } - } - if (pPause != NULL && pPause->NeedToPauseNow()) { - return FALSE; - } - FDE_LPCHUNKHEADER lpPreChunk = (FDE_LPCHUNKHEADER)m_Chunks[0]; - FDE_LPCHUNKHEADER lpCurChunk = NULL; - for (i = 1; i < nCount; i++) { - lpCurChunk = (FDE_LPCHUNKHEADER)m_Chunks[i]; - if (lpPreChunk->nUsed + lpCurChunk->nUsed <= m_nChunkSize) { - FXSYS_memcpy(lpPreChunk->wChars + lpPreChunk->nUsed, lpCurChunk->wChars, - lpCurChunk->nUsed * sizeof(FX_WCHAR)); - lpPreChunk->nUsed += lpCurChunk->nUsed; - m_pAllocator->Free(lpCurChunk); - m_Chunks.RemoveAt(i); - --i; - --nCount; - } else { - lpPreChunk = lpCurChunk; - } - if (pPause != NULL && pPause->NeedToPauseNow()) { - return FALSE; - } - } - m_bChanged = FALSE; - return TRUE; -} -void CFDE_TxtEdtBuf::ResetChunkBuffer(int32_t nDefChunkCount, - int32_t nChunkSize) { - FXSYS_assert(nChunkSize); - FXSYS_assert(nDefChunkCount); - if (m_pAllocator) { - m_pAllocator->Release(); - m_pAllocator = NULL; - } - m_Chunks.RemoveAll(); - m_nChunkSize = nChunkSize; - int32_t nChunkLength = - sizeof(FDE_CHUNKHEADER) + (m_nChunkSize - 1) * sizeof(FX_WCHAR); - m_pAllocator = - FX_CreateAllocator(FX_ALLOCTYPE_Fixed, nDefChunkCount, nChunkLength); - FXSYS_assert(m_pAllocator); - FDE_LPCHUNKHEADER lpChunkHeader = - (FDE_LPCHUNKHEADER)m_pAllocator->Alloc(nChunkLength); - FXSYS_assert(lpChunkHeader); - lpChunkHeader->nUsed = 0; - m_Chunks.Add(lpChunkHeader); - m_nTotal = 0; -} -int32_t CFDE_TxtEdtBuf::CP2Index(const FDE_CHUNKPLACE& cp) const { - int32_t nTotal = cp.nCharIndex; - int32_t i = 0; - for (i = 0; i < cp.nChunkIndex; i++) { - nTotal += ((FDE_LPCHUNKHEADER)m_Chunks[i])->nUsed; - } - return nTotal; -} -void CFDE_TxtEdtBuf::Index2CP(int32_t nIndex, FDE_CHUNKPLACE& cp) const { - FXSYS_assert(nIndex <= GetTextLength()); - if (nIndex == m_nTotal) { - cp.nChunkIndex = m_Chunks.GetSize() - 1; - cp.nCharIndex = ((FDE_LPCHUNKHEADER)m_Chunks[cp.nChunkIndex])->nUsed; - return; - } - int32_t i = 0; - int32_t nTotal = 0; - int32_t nCount = m_Chunks.GetSize(); - for (; i < nCount; i++) { - nTotal += ((FDE_LPCHUNKHEADER)m_Chunks[i])->nUsed; - if (nTotal > nIndex) { - break; - } - } - cp.nChunkIndex = i; - cp.nCharIndex = ((FDE_LPCHUNKHEADER)m_Chunks[i])->nUsed - (nTotal - nIndex); -} diff --git a/xfa/src/fee/fde_txtedtbuf.h b/xfa/src/fee/fde_txtedtbuf.h deleted file mode 100644 index 9fb6ac1b87..0000000000 --- a/xfa/src/fee/fde_txtedtbuf.h +++ /dev/null @@ -1,92 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FEE_FDE_TXTEDTBUF_H_ -#define XFA_SRC_FEE_FDE_TXTEDTBUF_H_ - -#include "xfa/src/fee/ifde_txtedtbuf.h" -#include "xfa/src/fee/ifde_txtedtengine.h" -#include "xfa/src/fgas/crt/fgas_memory.h" - -class IFX_CharIter; -class CFDE_TxtEdtBuf; - -class CFDE_TxtEdtBufIter : public IFX_CharIter { - public: - CFDE_TxtEdtBufIter(CFDE_TxtEdtBuf* pBuf, FX_WCHAR wcAlias = 0); - - virtual void Release(); - virtual FX_BOOL Next(FX_BOOL bPrev = FALSE); - virtual FX_WCHAR GetChar(); - virtual void SetAt(int32_t nIndex); - virtual int32_t GetAt() const; - virtual FX_BOOL IsEOF(FX_BOOL bTail = TRUE) const; - virtual IFX_CharIter* Clone(); - - protected: - ~CFDE_TxtEdtBufIter(); - - private: - CFDE_TxtEdtBuf* m_pBuf; - int32_t m_nCurChunk; - int32_t m_nCurIndex; - int32_t m_nIndex; - FX_WCHAR m_Alias; -}; -class CFDE_TxtEdtBuf : public IFDE_TxtEdtBuf { - friend class CFDE_TxtEdtBufIter; - struct _FDE_CHUNKHEADER { - int32_t nUsed; - FX_WCHAR wChars[1]; - }; - typedef _FDE_CHUNKHEADER FDE_CHUNKHEADER; - typedef _FDE_CHUNKHEADER* FDE_LPCHUNKHEADER; - struct _FDE_CHUNKPLACE { - int32_t nChunkIndex; - int32_t nCharIndex; - }; - typedef _FDE_CHUNKPLACE FDE_CHUNKPLACE; - typedef _FDE_CHUNKPLACE* FDE_LPCHUNKPLACE; - - public: - CFDE_TxtEdtBuf(int32_t nDefChunkSize = FDE_DEFCHUNKLENGTH); - - virtual void Release(); - virtual FX_BOOL SetChunkSize(int32_t nChunkSize); - virtual int32_t GetChunkSize() const; - virtual int32_t GetTextLength() const; - virtual void SetText(const CFX_WideString& wsText); - virtual void GetText(CFX_WideString& wsText) const; - virtual FX_WCHAR GetCharByIndex(int32_t nIndex) const; - virtual void GetRange(CFX_WideString& wsText, - int32_t nBegine, - int32_t nCount = -1) const; - - virtual void Insert(int32_t nPos, - const FX_WCHAR* lpText, - int32_t nLength = 1); - virtual void Delete(int32_t nIndex, int32_t nLength = 1); - virtual void Clear(FX_BOOL bRelease = TRUE); - - virtual FX_BOOL Optimize(IFX_Pause* pPause = NULL); - - protected: - virtual ~CFDE_TxtEdtBuf(); - - private: - void ResetChunkBuffer(int32_t nDefChunkCount, int32_t nChunkSize); - int32_t CP2Index(const FDE_CHUNKPLACE& cp) const; - void Index2CP(int32_t nIndex, FDE_CHUNKPLACE& cp) const; - - int32_t m_nChunkSize; - - int32_t m_nTotal; - FX_BOOL m_bChanged; - CFX_PtrArray m_Chunks; - IFX_MEMAllocator* m_pAllocator; -}; - -#endif // XFA_SRC_FEE_FDE_TXTEDTBUF_H_ diff --git a/xfa/src/fee/fde_txtedtengine.cpp b/xfa/src/fee/fde_txtedtengine.cpp deleted file mode 100644 index 9f8fe5b4e6..0000000000 --- a/xfa/src/fee/fde_txtedtengine.cpp +++ /dev/null @@ -1,1783 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fee/fde_txtedtengine.h" - -#include - -#include "xfa/src/fde/tto/fde_textout.h" -#include "xfa/src/fee/fde_txtedtbuf.h" -#include "xfa/src/fee/fde_txtedtparag.h" -#include "xfa/src/fee/ifde_txtedtbuf.h" -#include "xfa/src/fee/ifde_txtedtengine.h" -#include "xfa/src/fee/ifde_txtedtpage.h" - -#define FDE_PAGEWIDTH_MAX 0xFFFF -#define FDE_TXTPLATESIZE (1024 * 12) -#define FDE_UNICODE_PARAGRAPH_SPERATOR (0x2029) -#define FDE_TXTEDT_DORECORD_INS 0 -#define FDE_TXTEDT_DORECORD_DEL 1 - -IFDE_TxtEdtEngine* IFDE_TxtEdtEngine::Create() { - return new CFDE_TxtEdtEngine(); -} -CFDE_TxtEdtEngine::CFDE_TxtEdtEngine() - : m_pTextBreak(nullptr), - m_nPageLineCount(20), - m_nLineCount(0), - m_nAnchorPos(-1), - m_nLayoutPos(0), - m_fCaretPosReserve(0.0), - m_nCaret(0), - m_bBefore(TRUE), - m_nCaretPage(0), - m_dwFindFlags(0), - m_bLock(FALSE), - m_nLimit(0), - m_wcAliasChar(L'*'), - m_nFirstLineEnd(FDE_TXTEDIT_LINEEND_Auto), - m_bAutoLineEnd(TRUE), - m_wLineEnd(FDE_UNICODE_PARAGRAPH_SPERATOR) { - FXSYS_memset(&m_rtCaret, 0, sizeof(CFX_RectF)); - m_pTxtBuf = new CFDE_TxtEdtBuf(); - m_bAutoLineEnd = (m_Param.nLineEnd == FDE_TXTEDIT_LINEEND_Auto); -} -CFDE_TxtEdtEngine::~CFDE_TxtEdtEngine() { - if (m_pTxtBuf) { - m_pTxtBuf->Release(); - m_pTxtBuf = NULL; - } - if (m_pTextBreak) { - m_pTextBreak->Release(); - m_pTextBreak = NULL; - } - RemoveAllParags(); - RemoveAllPages(); - m_Param.pEventSink = NULL; - ClearSelection(); -} -void CFDE_TxtEdtEngine::Release() { - delete this; -} -void CFDE_TxtEdtEngine::SetEditParams(const FDE_TXTEDTPARAMS& params) { - if (m_pTextBreak == NULL) { - m_pTextBreak = IFX_TxtBreak::Create(FX_TXTBREAKPOLICY_None); - } - FXSYS_memcpy(&m_Param, ¶ms, sizeof(FDE_TXTEDTPARAMS)); - m_wLineEnd = params.wLineBreakChar; - m_bAutoLineEnd = (m_Param.nLineEnd == FDE_TXTEDIT_LINEEND_Auto); - UpdateTxtBreak(); -} -const FDE_TXTEDTPARAMS* CFDE_TxtEdtEngine::GetEditParams() const { - return &m_Param; -} -int32_t CFDE_TxtEdtEngine::CountPages() const { - if (m_nLineCount == 0) { - return 0; - } - return ((m_nLineCount - 1) / m_nPageLineCount) + 1; -} -IFDE_TxtEdtPage* CFDE_TxtEdtEngine::GetPage(int32_t nIndex) { - if (m_PagePtrArray.GetSize() <= nIndex) { - return NULL; - } - return (IFDE_TxtEdtPage*)m_PagePtrArray[nIndex]; -} -FX_BOOL CFDE_TxtEdtEngine::SetBufChunkSize(int32_t nChunkSize) { - return m_pTxtBuf->SetChunkSize(nChunkSize); -} -void CFDE_TxtEdtEngine::SetTextByStream(IFX_Stream* pStream) { - ResetEngine(); - int32_t nIndex = 0; - if (pStream != NULL && pStream->GetLength()) { - int32_t nStreamLength = pStream->GetLength(); - FX_BOOL bValid = TRUE; - if (m_nLimit > 0 && nStreamLength > m_nLimit) { - bValid = FALSE; - } - FX_BOOL bPreIsCR = FALSE; - if (bValid) { - uint8_t bom[4]; - int32_t nPos = pStream->GetBOM(bom); - pStream->Seek(FX_STREAMSEEK_Begin, nPos); - int32_t nPlateSize = std::min(nStreamLength, m_pTxtBuf->GetChunkSize()); - FX_WCHAR* lpwstr = FX_Alloc(FX_WCHAR, nPlateSize); - FX_BOOL bEos = false; - while (!bEos) { - int32_t nRead = pStream->ReadString(lpwstr, nPlateSize, bEos); - bPreIsCR = ReplaceParagEnd(lpwstr, nRead, bPreIsCR); - m_pTxtBuf->Insert(nIndex, lpwstr, nRead); - nIndex += nRead; - } - FX_Free(lpwstr); - } - } - m_pTxtBuf->Insert(nIndex, &m_wLineEnd, 1); - RebuildParagraphs(); -} -void CFDE_TxtEdtEngine::SetText(const CFX_WideString& wsText) { - ResetEngine(); - int32_t nLength = wsText.GetLength(); - if (nLength > 0) { - CFX_WideString wsTemp; - FX_WCHAR* lpBuffer = wsTemp.GetBuffer(nLength); - FXSYS_memcpy(lpBuffer, wsText.c_str(), nLength * sizeof(FX_WCHAR)); - ReplaceParagEnd(lpBuffer, nLength, FALSE); - wsTemp.ReleaseBuffer(nLength); - if (m_nLimit > 0 && nLength > m_nLimit) { - wsTemp.Delete(m_nLimit, nLength - m_nLimit); - nLength = m_nLimit; - } - m_pTxtBuf->SetText(wsTemp); - } - m_pTxtBuf->Insert(nLength, &m_wLineEnd, 1); - RebuildParagraphs(); -} -int32_t CFDE_TxtEdtEngine::GetTextLength() const { - return GetTextBufLength(); -} -void CFDE_TxtEdtEngine::GetText(CFX_WideString& wsText, - int32_t nStart, - int32_t nCount) { - int32_t nTextBufLength = GetTextBufLength(); - if (nCount == -1) { - nCount = nTextBufLength - nStart; - } - m_pTxtBuf->GetRange(wsText, nStart, nCount); - RecoverParagEnd(wsText); -} - -void CFDE_TxtEdtEngine::ClearText() { - DeleteRange(0, -1); -} -int32_t CFDE_TxtEdtEngine::GetCaretRect(CFX_RectF& rtCaret) const { - rtCaret = m_rtCaret; - return m_nCaret; -} -int32_t CFDE_TxtEdtEngine::GetCaretPos() const { - if (IsLocked()) { - return 0; - } - return m_nCaret + (m_bBefore ? 0 : 1); -} -int32_t CFDE_TxtEdtEngine::SetCaretPos(int32_t nIndex, FX_BOOL bBefore) { - if (IsLocked()) { - return 0; - } - FXSYS_assert(nIndex >= 0 && nIndex <= GetTextBufLength()); - if (m_PagePtrArray.GetSize() <= m_nCaretPage) { - return 0; - } - m_bBefore = bBefore; - m_nCaret = nIndex; - MovePage2Char(m_nCaret); - GetCaretRect(m_rtCaret, m_nCaretPage, m_nCaret, m_bBefore); - if (!m_bBefore) { - m_nCaret++; - m_bBefore = TRUE; - } - m_fCaretPosReserve = (m_Param.dwLayoutStyles & FDE_TEXTEDITLAYOUT_DocVertical) - ? m_rtCaret.top - : m_rtCaret.left; - m_Param.pEventSink->On_CaretChanged(this, m_nCaretPage, 0); - m_nAnchorPos = -1; - return m_nCaret; -} -int32_t CFDE_TxtEdtEngine::MoveCaretPos(FDE_TXTEDTMOVECARET eMoveCaret, - FX_BOOL bShift, - FX_BOOL bCtrl) { - if (IsLocked()) { - return 0; - } - if (m_PagePtrArray.GetSize() <= m_nCaretPage) { - return 0; - } - FX_BOOL bSelChange = FALSE; - if (IsSelect()) { - ClearSelection(); - bSelChange = TRUE; - } - if (bShift) { - if (m_nAnchorPos == -1) { - m_nAnchorPos = m_nCaret; - } - } else { - m_nAnchorPos = -1; - } - FX_BOOL bVertical = m_Param.dwLayoutStyles & FDE_TEXTEDITLAYOUT_DocVertical; - switch (eMoveCaret) { - case MC_Left: { - if (bVertical) { - CFX_PointF ptCaret; - if (MoveUp(ptCaret)) { - UpdateCaretIndex(ptCaret); - } - } else { - FX_BOOL bBefore = TRUE; - int32_t nIndex = MoveBackward(bBefore); - if (nIndex >= 0) { - UpdateCaretRect(nIndex, bBefore); - } - } - } break; - case MC_Right: { - if (bVertical) { - CFX_PointF ptCaret; - if (MoveDown(ptCaret)) { - UpdateCaretIndex(ptCaret); - } - } else { - FX_BOOL bBefore = TRUE; - int32_t nIndex = MoveForward(bBefore); - if (nIndex >= 0) { - UpdateCaretRect(nIndex, bBefore); - } - } - } break; - case MC_Up: { - if (bVertical) { - FX_BOOL bBefore = TRUE; - int32_t nIndex = MoveBackward(bBefore); - if (nIndex >= 0) { - UpdateCaretRect(nIndex, bBefore); - } - } else { - CFX_PointF ptCaret; - if (MoveUp(ptCaret)) { - UpdateCaretIndex(ptCaret); - } - } - } break; - case MC_Down: { - if (bVertical) { - FX_BOOL bBefore = TRUE; - int32_t nIndex = MoveForward(bBefore); - if (nIndex >= 0) { - UpdateCaretRect(nIndex, bBefore); - } - } else { - CFX_PointF ptCaret; - if (MoveDown(ptCaret)) { - UpdateCaretIndex(ptCaret); - } - } - } break; - case MC_WordBackward: - break; - case MC_WordForward: - break; - case MC_LineStart: - MoveLineStart(); - break; - case MC_LineEnd: - MoveLineEnd(); - break; - case MC_ParagStart: - MoveParagStart(); - break; - case MC_ParagEnd: - MoveParagEnd(); - break; - case MC_PageDown: - break; - case MC_PageUp: - break; - case MC_Home: - MoveHome(); - break; - case MC_End: - MoveEnd(); - break; - default: - break; - } - if (bShift && m_nAnchorPos != -1 && (m_nAnchorPos != m_nCaret)) { - AddSelRange(std::min(m_nAnchorPos, m_nCaret), - FXSYS_abs(m_nAnchorPos - m_nCaret)); - m_Param.pEventSink->On_SelChanged(this); - } - if (bSelChange) { - m_Param.pEventSink->On_SelChanged(this); - } - return m_nCaret; -} -void CFDE_TxtEdtEngine::Lock() { - m_bLock = TRUE; -} -void CFDE_TxtEdtEngine::Unlock() { - m_bLock = FALSE; -} -FX_BOOL CFDE_TxtEdtEngine::IsLocked() const { - return m_bLock; -} -int32_t CFDE_TxtEdtEngine::Insert(int32_t nStart, - const FX_WCHAR* lpText, - int32_t nLength) { - if (IsLocked()) { - return FDE_TXTEDT_MODIFY_RET_F_Locked; - } - CFX_WideString wsTemp; - FX_WCHAR* lpBuffer = wsTemp.GetBuffer(nLength); - FXSYS_memcpy(lpBuffer, lpText, nLength * sizeof(FX_WCHAR)); - ReplaceParagEnd(lpBuffer, nLength, FALSE); - wsTemp.ReleaseBuffer(nLength); - FX_BOOL bPart = FALSE; - if (m_nLimit > 0) { - int32_t nTotalLength = GetTextBufLength(); - int32_t nCount = m_SelRangePtrArr.GetSize(); - for (int32_t i = 0; i < nCount; i++) { - FDE_LPTXTEDTSELRANGE lpSelRange = m_SelRangePtrArr.GetAt(i); - nTotalLength -= lpSelRange->nCount; - } - int32_t nExpectLength = nTotalLength + nLength; - if (nTotalLength == m_nLimit) { - return FDE_TXTEDT_MODIFY_RET_F_Full; - } - if (nExpectLength > m_nLimit) { - nLength -= (nExpectLength - m_nLimit); - bPart = TRUE; - } - } - if ((m_Param.dwMode & FDE_TEXTEDITMODE_LimitArea_Vert) || - (m_Param.dwMode & FDE_TEXTEDITMODE_LimitArea_Horz)) { - int32_t nTemp = nLength; - if (m_Param.dwMode & FDE_TEXTEDITMODE_Password) { - CFX_WideString wsText; - while (nLength > 0) { - GetPreInsertText(wsText, m_nCaret, lpBuffer, nLength); - int32_t nTotal = wsText.GetLength(); - FX_WCHAR* lpBuf = wsText.GetBuffer(nTotal); - for (int32_t i = 0; i < nTotal; i++) { - lpBuf[i] = m_wcAliasChar; - } - wsText.ReleaseBuffer(nTotal); - if (IsFitArea(wsText)) { - break; - } - nLength--; - } - } else { - CFX_WideString wsText; - while (nLength > 0) { - GetPreInsertText(wsText, m_nCaret, lpBuffer, nLength); - if (IsFitArea(wsText)) { - break; - } - nLength--; - } - } - if (nLength == 0) { - return FDE_TXTEDT_MODIFY_RET_F_Full; - } - if (nLength < nTemp) { - bPart = TRUE; - } - } - if (m_Param.dwMode & FDE_TEXTEDITMODE_Validate) { - CFX_WideString wsText; - GetPreInsertText(wsText, m_nCaret, lpBuffer, nLength); - if (!m_Param.pEventSink->On_Validate(this, wsText)) { - return FDE_TXTEDT_MODIFY_RET_F_Invalidate; - } - } - if (IsSelect()) { - DeleteSelect(); - } - if (!(m_Param.dwMode & FDE_TEXTEDITMODE_NoRedoUndo)) { - IFDE_TxtEdtDoRecord* pRecord = - new CFDE_TxtEdtDoRecord_Insert(this, m_nCaret, lpBuffer, nLength); - CFX_ByteString bsDoRecord; - pRecord->Serialize(bsDoRecord); - m_Param.pEventSink->On_AddDoRecord(this, bsDoRecord); - pRecord->Release(); - } - GetText(m_ChangeInfo.wsPrevText, 0); - Inner_Insert(m_nCaret, lpBuffer, nLength); - m_ChangeInfo.nChangeType = FDE_TXTEDT_TEXTCHANGE_TYPE_Insert; - m_ChangeInfo.wsInsert = CFX_WideString(lpBuffer, nLength); - nStart = m_nCaret; - nStart += nLength; - FX_WCHAR wChar = m_pTxtBuf->GetCharByIndex(nStart - 1); - FX_BOOL bBefore = TRUE; - if (wChar != L'\n' && wChar != L'\r') { - nStart--; - bBefore = FALSE; - } - SetCaretPos(nStart, bBefore); - m_Param.pEventSink->On_TextChanged(this, m_ChangeInfo); - return bPart ? FDE_TXTEDT_MODIFY_RET_S_Part : FDE_TXTEDT_MODIFY_RET_S_Normal; -} -int32_t CFDE_TxtEdtEngine::Delete(int32_t nStart, FX_BOOL bBackspace) { - if (IsLocked()) { - return FDE_TXTEDT_MODIFY_RET_F_Locked; - } - if (IsSelect()) { - DeleteSelect(); - return FDE_TXTEDT_MODIFY_RET_S_Normal; - } - - int32_t nCount = 1; - if (bBackspace) { - if (nStart == 0) { - return FDE_TXTEDT_MODIFY_RET_F_Boundary; - } - if (nStart > 2 && m_pTxtBuf->GetCharByIndex(nStart - 1) == L'\n' && - m_pTxtBuf->GetCharByIndex(nStart - 2) == L'\r') { - nStart--; - nCount++; - } - nStart--; - } else { - if (nStart == GetTextBufLength()) { - return FDE_TXTEDT_MODIFY_RET_F_Full; - } - if ((nStart + 1 < GetTextBufLength()) && - (m_pTxtBuf->GetCharByIndex(nStart) == L'\r') && - (m_pTxtBuf->GetCharByIndex(nStart + 1) == L'\n')) { - nCount++; - } - } - if (m_Param.dwMode & FDE_TEXTEDITMODE_Validate) { - CFX_WideString wsText; - GetPreDeleteText(wsText, nStart, nCount); - if (!m_Param.pEventSink->On_Validate(this, wsText)) { - return FDE_TXTEDT_MODIFY_RET_F_Invalidate; - } - } - if (!(m_Param.dwMode & FDE_TEXTEDITMODE_NoRedoUndo)) { - CFX_WideString wsRange; - m_pTxtBuf->GetRange(wsRange, nStart, nCount); - IFDE_TxtEdtDoRecord* pRecord = - new CFDE_TxtEdtDoRecord_DeleteRange(this, nStart, m_nCaret, wsRange); - CFX_ByteString bsDoRecord; - pRecord->Serialize(bsDoRecord); - m_Param.pEventSink->On_AddDoRecord(this, bsDoRecord); - pRecord->Release(); - } - m_ChangeInfo.nChangeType = FDE_TXTEDT_TEXTCHANGE_TYPE_Delete; - GetText(m_ChangeInfo.wsDelete, nStart, nCount); - Inner_DeleteRange(nStart, nCount); - SetCaretPos(nStart + ((!bBackspace && nStart > 0) ? -1 : 0), - (bBackspace || nStart == 0)); - m_Param.pEventSink->On_TextChanged(this, m_ChangeInfo); - return FDE_TXTEDT_MODIFY_RET_S_Normal; -} -int32_t CFDE_TxtEdtEngine::DeleteRange(int32_t nStart, int32_t nCount) { - if (IsLocked()) { - return FDE_TXTEDT_MODIFY_RET_F_Locked; - } - if (nCount == -1) { - nCount = GetTextBufLength(); - } - if (nCount == 0) { - return FDE_TXTEDT_MODIFY_RET_S_Normal; - } - if (m_Param.dwMode & FDE_TEXTEDITMODE_Validate) { - CFX_WideString wsText; - GetPreDeleteText(wsText, nStart, nCount); - if (!m_Param.pEventSink->On_Validate(this, wsText)) { - return FDE_TXTEDT_MODIFY_RET_F_Invalidate; - } - } - DeleteRange_DoRecord(nStart, nCount); - m_Param.pEventSink->On_TextChanged(this, m_ChangeInfo); - SetCaretPos(nStart, TRUE); - return FDE_TXTEDT_MODIFY_RET_S_Normal; -} -int32_t CFDE_TxtEdtEngine::Replace(int32_t nStart, - int32_t nLength, - const CFX_WideString& wsReplace) { - if (IsLocked()) { - return FDE_TXTEDT_MODIFY_RET_F_Locked; - } - if (nStart < 0 || (nStart + nLength > GetTextBufLength())) { - return FDE_TXTEDT_MODIFY_RET_F_Boundary; - } - if (m_Param.dwMode & FDE_TEXTEDITMODE_Validate) { - CFX_WideString wsText; - GetPreReplaceText(wsText, nStart, nLength, wsReplace.c_str(), - wsReplace.GetLength()); - if (!m_Param.pEventSink->On_Validate(this, wsText)) { - return FDE_TXTEDT_MODIFY_RET_F_Invalidate; - } - } - if (IsSelect()) { - ClearSelection(); - } - m_ChangeInfo.nChangeType = FDE_TXTEDT_TEXTCHANGE_TYPE_Replace; - GetText(m_ChangeInfo.wsDelete, nStart, nLength); - if (nLength > 0) { - Inner_DeleteRange(nStart, nLength); - } - int32_t nTextLength = wsReplace.GetLength(); - if (nTextLength > 0) { - Inner_Insert(nStart, wsReplace.c_str(), nTextLength); - } - m_ChangeInfo.wsInsert = CFX_WideString(wsReplace.c_str(), nTextLength); - nStart += nTextLength; - FX_WCHAR wChar = m_pTxtBuf->GetCharByIndex(nStart - 1); - FX_BOOL bBefore = TRUE; - if (wChar != L'\n' && wChar != L'\r') { - nStart--; - bBefore = FALSE; - } - SetCaretPos(nStart, bBefore); - m_Param.pEventSink->On_PageUnload(this, m_nCaretPage, 0); - m_Param.pEventSink->On_PageLoad(this, m_nCaretPage, 0); - m_Param.pEventSink->On_TextChanged(this, m_ChangeInfo); - return FDE_TXTEDT_MODIFY_RET_S_Normal; -} -void CFDE_TxtEdtEngine::SetLimit(int32_t nLimit) { - m_nLimit = nLimit; -} -void CFDE_TxtEdtEngine::SetAliasChar(FX_WCHAR wcAlias) { - m_wcAliasChar = wcAlias; -} - -void CFDE_TxtEdtEngine::RemoveSelRange(int32_t nStart, int32_t nCount) { - FDE_LPTXTEDTSELRANGE lpTemp = NULL; - int32_t nRangeCount = m_SelRangePtrArr.GetSize(); - int32_t i = 0; - for (i = 0; i < nRangeCount; i++) { - lpTemp = m_SelRangePtrArr[i]; - if (lpTemp->nStart == nStart && lpTemp->nCount == nCount) { - delete lpTemp; - m_SelRangePtrArr.RemoveAt(i); - return; - } - } -} - -void CFDE_TxtEdtEngine::AddSelRange(int32_t nStart, int32_t nCount) { - if (nCount == -1) { - nCount = GetTextLength() - nStart; - } - int32_t nSize = m_SelRangePtrArr.GetSize(); - if (nSize <= 0) { - FDE_LPTXTEDTSELRANGE lpSelRange = new FDE_TXTEDTSELRANGE; - lpSelRange->nStart = nStart; - lpSelRange->nCount = nCount; - m_SelRangePtrArr.Add(lpSelRange); - m_Param.pEventSink->On_SelChanged(this); - return; - } - FDE_LPTXTEDTSELRANGE lpTemp = NULL; - lpTemp = m_SelRangePtrArr[nSize - 1]; - if (nStart >= lpTemp->nStart + lpTemp->nCount) { - FDE_LPTXTEDTSELRANGE lpSelRange = new FDE_TXTEDTSELRANGE; - lpSelRange->nStart = nStart; - lpSelRange->nCount = nCount; - m_SelRangePtrArr.Add(lpSelRange); - m_Param.pEventSink->On_SelChanged(this); - return; - } - int32_t nEnd = nStart + nCount - 1; - FX_BOOL bBegin = FALSE; - int32_t nRangeBgn = 0; - int32_t nRangeCnt = 0; - for (int32_t i = 0; i < nSize; i++) { - lpTemp = m_SelRangePtrArr[i]; - int32_t nTempBgn = lpTemp->nStart; - int32_t nTempEnd = nTempBgn + lpTemp->nCount - 1; - if (bBegin) { - if (nEnd < nTempBgn) { - break; - } else if (nStart >= nTempBgn && nStart <= nTempEnd) { - nRangeCnt++; - break; - } - nRangeCnt++; - } else { - if (nStart <= nTempEnd) { - nRangeBgn = i; - if (nEnd < nTempBgn) { - break; - } - nRangeCnt = 1; - bBegin = TRUE; - } - } - } - if (nRangeCnt == 0) { - FDE_LPTXTEDTSELRANGE lpSelRange = new FDE_TXTEDTSELRANGE; - lpSelRange->nStart = nStart; - lpSelRange->nCount = nCount; - m_SelRangePtrArr.InsertAt(nRangeBgn, lpSelRange); - } else { - lpTemp = m_SelRangePtrArr[nRangeBgn]; - lpTemp->nStart = nStart; - lpTemp->nCount = nCount; - nRangeCnt--; - nRangeBgn++; - while (nRangeCnt--) { - delete m_SelRangePtrArr[nRangeBgn]; - m_SelRangePtrArr.RemoveAt(nRangeBgn); - } - } - m_Param.pEventSink->On_SelChanged(this); -} - -int32_t CFDE_TxtEdtEngine::CountSelRanges() { - return m_SelRangePtrArr.GetSize(); -} -int32_t CFDE_TxtEdtEngine::GetSelRange(int32_t nIndex, int32_t& nStart) { - nStart = m_SelRangePtrArr[nIndex]->nStart; - return m_SelRangePtrArr[nIndex]->nCount; -} -void CFDE_TxtEdtEngine::ClearSelection() { - int32_t nCount = m_SelRangePtrArr.GetSize(); - FDE_LPTXTEDTSELRANGE lpRange = NULL; - int32_t i = 0; - for (i = 0; i < nCount; i++) { - lpRange = m_SelRangePtrArr[i]; - if (lpRange != NULL) { - delete lpRange; - lpRange = NULL; - } - } - m_SelRangePtrArr.RemoveAll(); - if (nCount && m_Param.pEventSink) { - m_Param.pEventSink->On_SelChanged(this); - } -} -FX_BOOL CFDE_TxtEdtEngine::Redo(const CFX_ByteStringC& bsRedo) { - if (IsLocked()) { - return FALSE; - } - if (m_Param.dwMode & FDE_TEXTEDITMODE_NoRedoUndo) { - return FALSE; - } - IFDE_TxtEdtDoRecord* pDoRecord = IFDE_TxtEdtDoRecord::Create(bsRedo); - FXSYS_assert(pDoRecord); - if (pDoRecord == NULL) { - return FALSE; - } - FX_BOOL bOK = pDoRecord->Redo(); - pDoRecord->Release(); - return bOK; -} -FX_BOOL CFDE_TxtEdtEngine::Undo(const CFX_ByteStringC& bsUndo) { - if (IsLocked()) { - return FALSE; - } - if (m_Param.dwMode & FDE_TEXTEDITMODE_NoRedoUndo) { - return FALSE; - } - IFDE_TxtEdtDoRecord* pDoRecord = IFDE_TxtEdtDoRecord::Create(bsUndo); - FXSYS_assert(pDoRecord); - if (pDoRecord == NULL) { - return FALSE; - } - FX_BOOL bOK = pDoRecord->Undo(); - pDoRecord->Release(); - return bOK; -} -int32_t CFDE_TxtEdtEngine::StartLayout() { - Lock(); - RemoveAllPages(); - m_nLayoutPos = 0; - m_nLineCount = 0; - return 0; -} -int32_t CFDE_TxtEdtEngine::DoLayout(IFX_Pause* pPause) { - int32_t nCount = m_ParagPtrArray.GetSize(); - CFDE_TxtEdtParag* pParag = NULL; - int32_t nLineCount = 0; - for (; m_nLayoutPos < nCount; m_nLayoutPos++) { - pParag = m_ParagPtrArray[m_nLayoutPos]; - pParag->CalcLines(); - nLineCount += pParag->m_nLineCount; - if ((pPause != NULL) && (nLineCount > m_nPageLineCount) && - pPause->NeedToPauseNow()) { - m_nLineCount += nLineCount; - return (++m_nLayoutPos * 100) / nCount; - } - } - m_nLineCount += nLineCount; - return 100; -} -void CFDE_TxtEdtEngine::EndLayout() { - UpdatePages(); - int32_t nLength = GetTextLength(); - if (m_nCaret > nLength) { - m_nCaret = nLength; - } - int32_t nIndex = m_nCaret; - if (!m_bBefore) { - nIndex--; - } - m_rtCaret.Set(0, 0, 1, m_Param.fFontSize); - Unlock(); -} -FX_BOOL CFDE_TxtEdtEngine::Optimize(IFX_Pause* pPause) { - return m_pTxtBuf->Optimize(pPause); -} -IFDE_TxtEdtBuf* CFDE_TxtEdtEngine::GetTextBuf() const { - return (IFDE_TxtEdtBuf*)m_pTxtBuf; -} -int32_t CFDE_TxtEdtEngine::GetTextBufLength() const { - return m_pTxtBuf->GetTextLength() - 1; -} -IFX_TxtBreak* CFDE_TxtEdtEngine::GetTextBreak() const { - return m_pTextBreak; -} -int32_t CFDE_TxtEdtEngine::GetLineCount() const { - return m_nLineCount; -} -int32_t CFDE_TxtEdtEngine::GetPageLineCount() const { - return m_nPageLineCount; -} -int32_t CFDE_TxtEdtEngine::CountParags() const { - return m_ParagPtrArray.GetSize(); -} -IFDE_TxtEdtParag* CFDE_TxtEdtEngine::GetParag(int32_t nParagIndex) const { - return m_ParagPtrArray[nParagIndex]; -} -IFX_CharIter* CFDE_TxtEdtEngine::CreateCharIter() { - if (!m_pTxtBuf) { - return NULL; - } - return new CFDE_TxtEdtBufIter((CFDE_TxtEdtBuf*)m_pTxtBuf); -} -int32_t CFDE_TxtEdtEngine::Line2Parag(int32_t nStartParag, - int32_t nStartLineofParag, - int32_t nLineIndex, - int32_t& nStartLine) const { - int32_t nLineTotal = nStartLineofParag; - int32_t nCount = m_ParagPtrArray.GetSize(); - CFDE_TxtEdtParag* pParag = NULL; - int32_t i = nStartParag; - for (; i < nCount; i++) { - pParag = m_ParagPtrArray[i]; - nLineTotal += pParag->m_nLineCount; - if (nLineTotal > nLineIndex) { - break; - } - } - nStartLine = nLineTotal - pParag->m_nLineCount; - return i; -} -void CFDE_TxtEdtEngine::GetPreDeleteText(CFX_WideString& wsText, - int32_t nIndex, - int32_t nLength) { - GetText(wsText, 0, GetTextBufLength()); - wsText.Delete(nIndex, nLength); -} -void CFDE_TxtEdtEngine::GetPreInsertText(CFX_WideString& wsText, - int32_t nIndex, - const FX_WCHAR* lpText, - int32_t nLength) { - GetText(wsText, 0, GetTextBufLength()); - int32_t nSelIndex = 0; - int32_t nSelLength = 0; - int32_t nSelCount = CountSelRanges(); - while (nSelCount--) { - nSelLength = GetSelRange(nSelCount, nSelIndex); - wsText.Delete(nSelIndex, nSelLength); - nIndex = nSelIndex; - } - CFX_WideString wsTemp; - int32_t nOldLength = wsText.GetLength(); - const FX_WCHAR* pOldBuffer = wsText.c_str(); - FX_WCHAR* lpBuffer = wsTemp.GetBuffer(nOldLength + nLength); - FXSYS_memcpy(lpBuffer, pOldBuffer, (nIndex) * sizeof(FX_WCHAR)); - FXSYS_memcpy(lpBuffer + nIndex, lpText, nLength * sizeof(FX_WCHAR)); - FXSYS_memcpy(lpBuffer + nIndex + nLength, pOldBuffer + nIndex, - (nOldLength - nIndex) * sizeof(FX_WCHAR)); - wsTemp.ReleaseBuffer(nOldLength + nLength); - wsText = wsTemp; -} -void CFDE_TxtEdtEngine::GetPreReplaceText(CFX_WideString& wsText, - int32_t nIndex, - int32_t nOriginLength, - const FX_WCHAR* lpText, - int32_t nLength) { - GetText(wsText, 0, GetTextBufLength()); - int32_t nSelIndex = 0; - int32_t nSelLength = 0; - int32_t nSelCount = CountSelRanges(); - while (nSelCount--) { - nSelLength = GetSelRange(nSelCount, nSelIndex); - wsText.Delete(nSelIndex, nSelLength); - } - wsText.Delete(nIndex, nOriginLength); - int32_t i = 0; - for (i = 0; i < nLength; i++) { - wsText.Insert(nIndex++, lpText[i]); - } -} -void CFDE_TxtEdtEngine::Inner_Insert(int32_t nStart, - const FX_WCHAR* lpText, - int32_t nLength) { - FXSYS_assert(nLength > 0); - FDE_TXTEDTPARAGPOS ParagPos; - TextPos2ParagPos(nStart, ParagPos); - m_Param.pEventSink->On_PageUnload(this, m_nCaretPage, 0); - int32_t nParagCount = m_ParagPtrArray.GetSize(); - int32_t i = 0; - for (i = ParagPos.nParagIndex + 1; i < nParagCount; i++) { - m_ParagPtrArray[i]->m_nCharStart += nLength; - } - CFDE_TxtEdtParag* pParag = m_ParagPtrArray[ParagPos.nParagIndex]; - int32_t nReserveLineCount = pParag->m_nLineCount; - int32_t nReserveCharStart = pParag->m_nCharStart; - int32_t nLeavePart = ParagPos.nCharIndex; - int32_t nCutPart = pParag->m_nCharCount - ParagPos.nCharIndex; - int32_t nTextStart = 0; - FX_WCHAR wCurChar = L' '; - const FX_WCHAR* lpPos = lpText; - FX_BOOL bFirst = TRUE; - int32_t nParagIndex = ParagPos.nParagIndex; - for (i = 0; i < nLength; i++, lpPos++) { - wCurChar = *lpPos; - if (wCurChar == m_wLineEnd) { - if (bFirst) { - pParag->m_nCharCount = nLeavePart + (i - nTextStart + 1); - pParag->m_nLineCount = -1; - nReserveCharStart += pParag->m_nCharCount; - bFirst = FALSE; - } else { - pParag = new CFDE_TxtEdtParag(this); - pParag->m_nLineCount = -1; - pParag->m_nCharCount = i - nTextStart + 1; - pParag->m_nCharStart = nReserveCharStart; - m_ParagPtrArray.InsertAt(++nParagIndex, pParag); - nReserveCharStart += pParag->m_nCharCount; - } - nTextStart = i + 1; - } - } - if (bFirst) { - pParag->m_nCharCount += nLength; - pParag->m_nLineCount = -1; - bFirst = FALSE; - } else { - pParag = new CFDE_TxtEdtParag(this); - pParag->m_nLineCount = -1; - pParag->m_nCharCount = nLength - nTextStart + nCutPart; - pParag->m_nCharStart = nReserveCharStart; - m_ParagPtrArray.InsertAt(++nParagIndex, pParag); - } - m_pTxtBuf->Insert(nStart, lpText, nLength); - int32_t nTotalLineCount = 0; - for (i = ParagPos.nParagIndex; i <= nParagIndex; i++) { - pParag = m_ParagPtrArray[i]; - pParag->CalcLines(); - nTotalLineCount += pParag->m_nLineCount; - } - m_nLineCount += nTotalLineCount - nReserveLineCount; - m_Param.pEventSink->On_PageLoad(this, m_nCaretPage, 0); - UpdatePages(); -} - -void CFDE_TxtEdtEngine::Inner_DeleteRange(int32_t nStart, int32_t nCount) { - if (nCount == -1) { - nCount = m_pTxtBuf->GetTextLength() - nStart; - } - int32_t nEnd = nStart + nCount - 1; - FXSYS_assert(nStart >= 0 && nEnd < m_pTxtBuf->GetTextLength()); - m_Param.pEventSink->On_PageUnload(this, m_nCaretPage, 0); - FDE_TXTEDTPARAGPOS ParagPosBgn, ParagPosEnd; - TextPos2ParagPos(nStart, ParagPosBgn); - TextPos2ParagPos(nEnd, ParagPosEnd); - CFDE_TxtEdtParag* pParag = m_ParagPtrArray[ParagPosEnd.nParagIndex]; - FX_BOOL bLastParag = FALSE; - if (ParagPosEnd.nCharIndex == pParag->m_nCharCount - 1) { - if (ParagPosEnd.nParagIndex < m_ParagPtrArray.GetSize() - 1) { - ParagPosEnd.nParagIndex++; - } else { - bLastParag = TRUE; - } - } - int32_t nTotalLineCount = 0; - int32_t nTotalCharCount = 0; - int32_t i = 0; - for (i = ParagPosBgn.nParagIndex; i <= ParagPosEnd.nParagIndex; i++) { - CFDE_TxtEdtParag* pParag = m_ParagPtrArray[i]; - pParag->CalcLines(); - nTotalLineCount += pParag->m_nLineCount; - nTotalCharCount += pParag->m_nCharCount; - } - m_pTxtBuf->Delete(nStart, nCount); - int32_t nNextParagIndex = (ParagPosBgn.nCharIndex == 0 && bLastParag) - ? ParagPosBgn.nParagIndex - : (ParagPosBgn.nParagIndex + 1); - for (i = nNextParagIndex; i <= ParagPosEnd.nParagIndex; i++) { - CFDE_TxtEdtParag* pParag = m_ParagPtrArray[nNextParagIndex]; - delete pParag; - m_ParagPtrArray.RemoveAt(nNextParagIndex); - } - if (!(bLastParag && ParagPosBgn.nCharIndex == 0)) { - pParag = m_ParagPtrArray[ParagPosBgn.nParagIndex]; - pParag->m_nCharCount = nTotalCharCount - nCount; - pParag->CalcLines(); - nTotalLineCount -= pParag->m_nLineCount; - } - int32_t nParagCount = m_ParagPtrArray.GetSize(); - for (i = nNextParagIndex; i < nParagCount; i++) { - m_ParagPtrArray[i]->m_nCharStart -= nCount; - } - m_nLineCount -= nTotalLineCount; - UpdatePages(); - int32_t nPageCount = CountPages(); - if (m_nCaretPage >= nPageCount) { - m_nCaretPage = nPageCount - 1; - } - m_Param.pEventSink->On_PageLoad(this, m_nCaretPage, 0); -} -void CFDE_TxtEdtEngine::DeleteRange_DoRecord(int32_t nStart, - int32_t nCount, - FX_BOOL bSel) { - FXSYS_assert(nStart >= 0); - if (nCount == -1) { - nCount = GetTextLength() - nStart; - } - FXSYS_assert((nStart + nCount) <= m_pTxtBuf->GetTextLength()); - - if (!(m_Param.dwMode & FDE_TEXTEDITMODE_NoRedoUndo)) { - CFX_WideString wsRange; - m_pTxtBuf->GetRange(wsRange, nStart, nCount); - IFDE_TxtEdtDoRecord* pRecord = new CFDE_TxtEdtDoRecord_DeleteRange( - this, nStart, m_nCaret, wsRange, bSel); - CFX_ByteString bsDoRecord; - pRecord->Serialize(bsDoRecord); - m_Param.pEventSink->On_AddDoRecord(this, bsDoRecord); - pRecord->Release(); - } - m_ChangeInfo.nChangeType = FDE_TXTEDT_TEXTCHANGE_TYPE_Delete; - GetText(m_ChangeInfo.wsDelete, nStart, nCount); - Inner_DeleteRange(nStart, nCount); -} -void CFDE_TxtEdtEngine::ResetEngine() { - RemoveAllPages(); - RemoveAllParags(); - ClearSelection(); - m_nCaret = 0; - m_pTxtBuf->Clear(FALSE); - m_nCaret = 0; -} -void CFDE_TxtEdtEngine::RebuildParagraphs() { - RemoveAllParags(); - FX_WCHAR wChar = L' '; - int32_t nParagStart = 0; - int32_t nIndex = 0; - IFX_CharIter* pIter = new CFDE_TxtEdtBufIter((CFDE_TxtEdtBuf*)m_pTxtBuf); - pIter->SetAt(0); - do { - wChar = pIter->GetChar(); - nIndex = pIter->GetAt(); - if (wChar == m_wLineEnd) { - CFDE_TxtEdtParag* pParag = new CFDE_TxtEdtParag(this); - pParag->m_nCharStart = nParagStart; - pParag->m_nCharCount = nIndex - nParagStart + 1; - pParag->m_nLineCount = -1; - m_ParagPtrArray.Add(pParag); - nParagStart = nIndex + 1; - } - } while (pIter->Next()); - pIter->Release(); -} -void CFDE_TxtEdtEngine::RemoveAllParags() { - int32_t nCount = m_ParagPtrArray.GetSize(); - int32_t i = 0; - for (i = 0; i < nCount; i++) { - CFDE_TxtEdtParag* pParag = m_ParagPtrArray[i]; - if (pParag) { - delete pParag; - } - } - m_ParagPtrArray.RemoveAll(); -} -void CFDE_TxtEdtEngine::RemoveAllPages() { - int32_t nCount = m_PagePtrArray.GetSize(); - int32_t i = 0; - for (i = 0; i < nCount; i++) { - IFDE_TxtEdtPage* pPage = m_PagePtrArray[i]; - if (pPage) { - pPage->Release(); - } - } - m_PagePtrArray.RemoveAll(); -} -void CFDE_TxtEdtEngine::UpdateParags() { - int32_t nCount = m_ParagPtrArray.GetSize(); - if (nCount == 0) { - return; - } - CFDE_TxtEdtParag* pParag = NULL; - int32_t nLineCount = 0; - int32_t i = 0; - for (i = 0; i < nCount; i++) { - pParag = m_ParagPtrArray[i]; - if (pParag->m_nLineCount == -1) { - pParag->CalcLines(); - } - nLineCount += pParag->m_nLineCount; - } - m_nLineCount = nLineCount; -} -void CFDE_TxtEdtEngine::UpdatePages() { - if (m_nLineCount == 0) { - return; - } - int32_t nPageCount = (m_nLineCount - 1) / (m_nPageLineCount) + 1; - int32_t nSize = m_PagePtrArray.GetSize(); - if (nSize == nPageCount) { - return; - } - if (nSize > nPageCount) { - IFDE_TxtEdtPage* pPage = NULL; - int32_t i = 0; - for (i = nSize - 1; i >= nPageCount; i--) { - pPage = m_PagePtrArray[i]; - if (pPage) { - pPage->Release(); - } - m_PagePtrArray.RemoveAt(i); - } - m_Param.pEventSink->On_PageCountChanged(this); - return; - } - if (nSize < nPageCount) { - IFDE_TxtEdtPage* pPage = NULL; - int32_t i = 0; - for (i = nSize; i < nPageCount; i++) { - pPage = IFDE_TxtEdtPage::Create(this, i); - m_PagePtrArray.Add(pPage); - } - m_Param.pEventSink->On_PageCountChanged(this); - return; - } -} -void CFDE_TxtEdtEngine::UpdateTxtBreak() { - FX_DWORD dwStyle = m_pTextBreak->GetLayoutStyles(); - if (m_Param.dwMode & FDE_TEXTEDITMODE_MultiLines) { - dwStyle &= ~FX_TXTLAYOUTSTYLE_SingleLine; - } else { - dwStyle |= FX_TXTLAYOUTSTYLE_SingleLine; - } - if (m_Param.dwLayoutStyles & FDE_TEXTEDITLAYOUT_DocVertical) { - dwStyle |= FX_TXTLAYOUTSTYLE_VerticalLayout; - } else { - dwStyle &= ~FX_TXTLAYOUTSTYLE_VerticalLayout; - } - if (m_Param.dwLayoutStyles & FDE_TEXTEDITLAYOUT_LineReserve) { - dwStyle |= FX_TXTLAYOUTSTYLE_ReverseLine; - } else { - dwStyle &= ~FX_TXTLAYOUTSTYLE_ReverseLine; - } - if (m_Param.dwLayoutStyles & FDE_TEXTEDITLAYOUT_RTL) { - dwStyle |= FX_TXTLAYOUTSTYLE_RTLReadingOrder; - } else { - dwStyle &= ~FX_TXTLAYOUTSTYLE_RTLReadingOrder; - } - if (m_Param.dwLayoutStyles & FDE_TEXTEDITLAYOUT_CombText) { - dwStyle |= FX_TXTLAYOUTSTYLE_CombText; - } else { - dwStyle &= ~FX_TXTLAYOUTSTYLE_CombText; - } - if (m_Param.dwLayoutStyles & FDE_TEXTEDITLAYOUT_CharVertial) { - dwStyle |= FX_TXTLAYOUTSTYLE_VerticalChars; - } else { - dwStyle &= ~FX_TXTLAYOUTSTYLE_VerticalChars; - } - if (m_Param.dwLayoutStyles & FDE_TEXTEDITLAYOUT_ExpandTab) { - dwStyle |= FX_TXTLAYOUTSTYLE_ExpandTab; - } else { - dwStyle &= ~FX_TXTLAYOUTSTYLE_ExpandTab; - } - if (m_Param.dwLayoutStyles & FDE_TEXTEDITLAYOUT_ArabicContext) { - dwStyle |= FX_TXTLAYOUTSTYLE_ArabicContext; - } else { - dwStyle &= ~FX_TXTLAYOUTSTYLE_ArabicContext; - } - if (m_Param.dwLayoutStyles & FDE_TEXTEDITLAYOUT_ArabicShapes) { - dwStyle |= FX_TXTLAYOUTSTYLE_ArabicShapes; - } else { - dwStyle &= ~FX_TXTLAYOUTSTYLE_ArabicShapes; - } - m_pTextBreak->SetLayoutStyles(dwStyle); - FX_DWORD dwAligment = 0; - if (m_Param.dwAlignment & FDE_TEXTEDITALIGN_Justified) { - dwAligment |= FX_TXTLINEALIGNMENT_Justified; - } else if (m_Param.dwAlignment & FDE_TEXTEDITALIGN_Distributed) { - dwAligment |= FX_TXTLINEALIGNMENT_Distributed; - } - if (m_Param.dwAlignment & FDE_TEXTEDITALIGN_Center) { - dwAligment |= FX_TXTLINEALIGNMENT_Center; - } else if (m_Param.dwAlignment & FDE_TEXTEDITALIGN_Right) { - dwAligment |= FX_TXTLINEALIGNMENT_Right; - } - m_pTextBreak->SetAlignment(dwAligment); - if (m_Param.dwLayoutStyles & FDE_TEXTEDITLAYOUT_DocVertical) { - if (m_Param.dwMode & FDE_TEXTEDITMODE_AutoLineWrap) { - m_pTextBreak->SetLineWidth(m_Param.fPlateHeight); - } else { - m_pTextBreak->SetLineWidth(FDE_PAGEWIDTH_MAX); - } - } else { - if (m_Param.dwMode & FDE_TEXTEDITMODE_AutoLineWrap) { - m_pTextBreak->SetLineWidth(m_Param.fPlateWidth); - } else { - m_pTextBreak->SetLineWidth(FDE_PAGEWIDTH_MAX); - } - } - m_nPageLineCount = m_Param.nLineCount; - if (m_Param.dwLayoutStyles & FDE_TEXTEDITLAYOUT_CombText) { - FX_FLOAT fCombWidth = - m_Param.dwLayoutStyles & FDE_TEXTEDITLAYOUT_DocVertical - ? m_Param.fPlateHeight - : m_Param.fPlateWidth; - if (m_nLimit > 0) { - fCombWidth /= m_nLimit; - } - m_pTextBreak->SetCombWidth(fCombWidth); - } - m_pTextBreak->SetFont(m_Param.pFont); - m_pTextBreak->SetFontSize(m_Param.fFontSize); - m_pTextBreak->SetTabWidth(m_Param.fTabWidth, m_Param.bTabEquidistant); - m_pTextBreak->SetDefaultChar(m_Param.wDefChar); - m_pTextBreak->SetParagraphBreakChar(m_Param.wLineBreakChar); - m_pTextBreak->SetCharRotation(m_Param.nCharRotation); - m_pTextBreak->SetLineBreakTolerance(m_Param.fFontSize * 0.2f); - m_pTextBreak->SetHorizontalScale(m_Param.nHorzScale); - m_pTextBreak->SetCharSpace(m_Param.fCharSpace); -} -FX_BOOL CFDE_TxtEdtEngine::ReplaceParagEnd(FX_WCHAR*& lpText, - int32_t& nLength, - FX_BOOL bPreIsCR) { - for (int32_t i = 0; i < nLength; i++) { - FX_WCHAR wc = lpText[i]; - switch (wc) { - case L'\r': { - lpText[i] = m_wLineEnd; - bPreIsCR = TRUE; - } break; - case L'\n': { - if (bPreIsCR == TRUE) { - int32_t nNext = i + 1; - if (nNext < nLength) { - FXSYS_memmove(lpText + i, lpText + nNext, - (nLength - nNext) * sizeof(FX_WCHAR)); - } - i--; - nLength--; - bPreIsCR = FALSE; - if (m_bAutoLineEnd) { - m_nFirstLineEnd = FDE_TXTEDIT_LINEEND_CRLF; - m_bAutoLineEnd = FALSE; - } - } else { - lpText[i] = m_wLineEnd; - if (m_bAutoLineEnd) { - m_nFirstLineEnd = FDE_TXTEDIT_LINEEND_LF; - m_bAutoLineEnd = FALSE; - } - } - } break; - default: { - if (bPreIsCR && m_bAutoLineEnd) { - m_nFirstLineEnd = FDE_TXTEDIT_LINEEND_CR; - m_bAutoLineEnd = FALSE; - } - bPreIsCR = FALSE; - } break; - } - } - return bPreIsCR; -} -void CFDE_TxtEdtEngine::RecoverParagEnd(CFX_WideString& wsText) { - FX_WCHAR wc = (m_nFirstLineEnd == FDE_TXTEDIT_LINEEND_CR) ? L'\n' : L'\r'; - if (m_nFirstLineEnd == FDE_TXTEDIT_LINEEND_CRLF) { - CFX_ArrayTemplate PosArr; - int32_t nLength = wsText.GetLength(); - int32_t i = 0; - FX_WCHAR* lpPos = (FX_WCHAR*)(const FX_WCHAR*)wsText; - for (i = 0; i < nLength; i++, lpPos++) { - if (*lpPos == m_wLineEnd) { - *lpPos = wc; - PosArr.Add(i); - } - } - const FX_WCHAR* lpSrcBuf = wsText.c_str(); - CFX_WideString wsTemp; - int32_t nCount = PosArr.GetSize(); - FX_WCHAR* lpDstBuf = wsTemp.GetBuffer(nLength + nCount); - int32_t nDstPos = 0; - int32_t nSrcPos = 0; - for (i = 0; i < nCount; i++) { - int32_t nPos = PosArr[i]; - int32_t nCopyLen = nPos - nSrcPos + 1; - FXSYS_memcpy(lpDstBuf + nDstPos, lpSrcBuf + nSrcPos, - nCopyLen * sizeof(FX_WCHAR)); - nDstPos += nCopyLen; - nSrcPos += nCopyLen; - lpDstBuf[nDstPos] = L'\n'; - nDstPos++; - } - if (nSrcPos < nLength) { - FXSYS_memcpy(lpDstBuf + nDstPos, lpSrcBuf + nSrcPos, - (nLength - nSrcPos) * sizeof(FX_WCHAR)); - } - wsTemp.ReleaseBuffer(nLength + nCount); - wsText = wsTemp; - } else { - int32_t nLength = wsText.GetLength(); - FX_WCHAR* lpBuf = (FX_WCHAR*)(const FX_WCHAR*)wsText; - for (int32_t i = 0; i < nLength; i++, lpBuf++) { - if (*lpBuf == m_wLineEnd) { - *lpBuf = wc; - } - } - } -} -int32_t CFDE_TxtEdtEngine::MovePage2Char(int32_t nIndex) { - FXSYS_assert(nIndex >= 0); - FXSYS_assert(nIndex <= m_pTxtBuf->GetTextLength()); - if (m_nCaretPage >= 0) { - IFDE_TxtEdtPage* pPage = m_PagePtrArray[m_nCaretPage]; - m_Param.pEventSink->On_PageLoad(this, m_nCaretPage, 0); - int32_t nPageCharStart = pPage->GetCharStart(); - int32_t nPageCharCount = pPage->GetCharCount(); - if (nIndex >= nPageCharStart && nIndex < nPageCharStart + nPageCharCount) { - m_Param.pEventSink->On_PageUnload(this, m_nCaretPage, 0); - return m_nCaretPage; - } - m_Param.pEventSink->On_PageUnload(this, m_nCaretPage, 0); - } - CFDE_TxtEdtParag* pParag = NULL; - int32_t nLineCount = 0; - int32_t nParagCount = m_ParagPtrArray.GetSize(); - int32_t i = 0; - for (i = 0; i < nParagCount; i++) { - pParag = m_ParagPtrArray[i]; - if (pParag->m_nCharStart <= nIndex && - nIndex < (pParag->m_nCharStart + pParag->m_nCharCount)) { - break; - } - nLineCount += pParag->m_nLineCount; - } - pParag->LoadParag(); - int32_t nLineStart = -1; - int32_t nLineCharCount = -1; - for (i = 0; i < pParag->m_nLineCount; i++) { - pParag->GetLineRange(i, nLineStart, nLineCharCount); - if (nLineStart <= nIndex && nIndex < (nLineStart + nLineCharCount)) { - break; - } - } - FXSYS_assert(i < pParag->m_nLineCount); - nLineCount += (i + 1); - m_nCaretPage = (nLineCount - 1) / m_nPageLineCount + 1 - 1; - m_Param.pEventSink->On_PageChange(this, m_nCaretPage); - pParag->UnloadParag(); - return m_nCaretPage; -} -void CFDE_TxtEdtEngine::TextPos2ParagPos(int32_t nIndex, - FDE_TXTEDTPARAGPOS& ParagPos) const { - FXSYS_assert(nIndex >= 0 && nIndex < m_pTxtBuf->GetTextLength()); - int32_t nCount = m_ParagPtrArray.GetSize(); - int32_t nBgn = 0; - int32_t nMid = 0; - int32_t nEnd = nCount - 1; - while (nEnd > nBgn) { - nMid = (nBgn + nEnd) / 2; - CFDE_TxtEdtParag* pParag = m_ParagPtrArray[nMid]; - if (nIndex < pParag->m_nCharStart) { - nEnd = nMid - 1; - } else if (nIndex >= (pParag->m_nCharStart + pParag->m_nCharCount)) { - nBgn = nMid + 1; - } else { - break; - } - } - if (nBgn == nEnd) { - nMid = nBgn; - } - FXSYS_assert(nIndex >= m_ParagPtrArray[nMid]->m_nCharStart && - (nIndex < m_ParagPtrArray[nMid]->m_nCharStart + - m_ParagPtrArray[nMid]->m_nCharCount)); - ParagPos.nParagIndex = nMid; - ParagPos.nCharIndex = nIndex - m_ParagPtrArray[nMid]->m_nCharStart; -} -int32_t CFDE_TxtEdtEngine::MoveForward(FX_BOOL& bBefore) { - if (m_nCaret == m_pTxtBuf->GetTextLength() - 1) { - return -1; - } - int32_t nCaret = m_nCaret; - if ((nCaret + 1 < m_pTxtBuf->GetTextLength()) && - (m_pTxtBuf->GetCharByIndex(nCaret) == L'\r') && - (m_pTxtBuf->GetCharByIndex(nCaret + 1) == L'\n')) { - nCaret++; - } - nCaret++; - bBefore = TRUE; - return nCaret; -} -int32_t CFDE_TxtEdtEngine::MoveBackward(FX_BOOL& bBefore) { - if (m_nCaret == 0) { - return FALSE; - } - int32_t nCaret = m_nCaret; - if (nCaret > 2 && m_pTxtBuf->GetCharByIndex(nCaret - 1) == L'\n' && - m_pTxtBuf->GetCharByIndex(nCaret - 2) == L'\r') { - nCaret--; - } - nCaret--; - bBefore = TRUE; - return nCaret; -} -FX_BOOL CFDE_TxtEdtEngine::MoveUp(CFX_PointF& ptCaret) { - IFDE_TxtEdtPage* pPage = GetPage(m_nCaretPage); - const CFX_RectF& rtContent = pPage->GetContentsBox(); - if (m_Param.dwLayoutStyles & FDE_TEXTEDITLAYOUT_DocVertical) { - ptCaret.x = m_rtCaret.left + m_rtCaret.width / 2 - m_Param.fLineSpace; - ptCaret.y = m_fCaretPosReserve; - FX_BOOL bLineReserve = - m_Param.dwLayoutStyles & FDE_TEXTEDITLAYOUT_LineReserve; - if (ptCaret.x < rtContent.left) { - if (bLineReserve) { - if (m_nCaretPage == CountPages() - 1) { - return FALSE; - } - } else { - if (m_nCaretPage == 0) { - return FALSE; - } - } - if (bLineReserve) { - m_nCaretPage++; - } else { - m_nCaretPage--; - } - m_Param.pEventSink->On_PageChange(this, m_nCaretPage); - ptCaret.x -= rtContent.left; - IFDE_TxtEdtPage* pCurPage = GetPage(m_nCaretPage); - ptCaret.x += pCurPage->GetContentsBox().right(); - } - } else { - ptCaret.x = m_fCaretPosReserve; - ptCaret.y = m_rtCaret.top + m_rtCaret.height / 2 - m_Param.fLineSpace; - if (ptCaret.y < rtContent.top) { - if (m_nCaretPage == 0) { - return FALSE; - } - ptCaret.y -= rtContent.top; - m_nCaretPage--; - m_Param.pEventSink->On_PageChange(this, m_nCaretPage); - IFDE_TxtEdtPage* pCurPage = GetPage(m_nCaretPage); - ptCaret.y += pCurPage->GetContentsBox().bottom(); - } - } - return TRUE; -} -FX_BOOL CFDE_TxtEdtEngine::MoveDown(CFX_PointF& ptCaret) { - IFDE_TxtEdtPage* pPage = GetPage(m_nCaretPage); - const CFX_RectF& rtContent = pPage->GetContentsBox(); - if (m_Param.dwLayoutStyles & FDE_TEXTEDITLAYOUT_DocVertical) { - ptCaret.x = m_rtCaret.left + m_rtCaret.width / 2 + m_Param.fLineSpace; - ptCaret.y = m_fCaretPosReserve; - if (ptCaret.x >= rtContent.right()) { - FX_BOOL bLineReserve = - m_Param.dwLayoutStyles & FDE_TEXTEDITLAYOUT_LineReserve; - if (bLineReserve) { - if (m_nCaretPage == 0) { - return FALSE; - } - } else { - if (m_nCaretPage == CountPages() - 1) { - return FALSE; - } - } - if (bLineReserve) { - m_nCaretPage--; - } else { - m_nCaretPage++; - } - m_Param.pEventSink->On_PageChange(this, m_nCaretPage); - ptCaret.x -= rtContent.right(); - IFDE_TxtEdtPage* pCurPage = GetPage(m_nCaretPage); - ptCaret.x += pCurPage->GetContentsBox().left; - } - } else { - ptCaret.x = m_fCaretPosReserve; - ptCaret.y = m_rtCaret.top + m_rtCaret.height / 2 + m_Param.fLineSpace; - if (ptCaret.y >= rtContent.bottom()) { - if (m_nCaretPage == CountPages() - 1) { - return FALSE; - } - ptCaret.y -= rtContent.bottom(); - m_nCaretPage++; - m_Param.pEventSink->On_PageChange(this, m_nCaretPage); - IFDE_TxtEdtPage* pCurPage = GetPage(m_nCaretPage); - ptCaret.y += pCurPage->GetContentsBox().top; - } - } - return TRUE; -} -FX_BOOL CFDE_TxtEdtEngine::MoveLineStart() { - int32_t nIndex = m_bBefore ? m_nCaret : m_nCaret - 1; - FDE_TXTEDTPARAGPOS ParagPos; - TextPos2ParagPos(nIndex, ParagPos); - CFDE_TxtEdtParag* pParag = m_ParagPtrArray[ParagPos.nParagIndex]; - pParag->LoadParag(); - int32_t nLineCount = pParag->m_nLineCount; - int32_t i = 0; - int32_t nStart = 0; - int32_t nCount = 0; - for (; i < nLineCount; i++) { - pParag->GetLineRange(i, nStart, nCount); - if (nIndex >= nStart && nIndex < nStart + nCount) { - break; - } - } - UpdateCaretRect(nStart, TRUE); - pParag->UnloadParag(); - return TRUE; -} -FX_BOOL CFDE_TxtEdtEngine::MoveLineEnd() { - int32_t nIndex = m_bBefore ? m_nCaret : m_nCaret - 1; - FDE_TXTEDTPARAGPOS ParagPos; - TextPos2ParagPos(nIndex, ParagPos); - CFDE_TxtEdtParag* pParag = m_ParagPtrArray[ParagPos.nParagIndex]; - pParag->LoadParag(); - int32_t nLineCount = pParag->m_nLineCount; - int32_t i = 0; - int32_t nStart = 0; - int32_t nCount = 0; - for (; i < nLineCount; i++) { - pParag->GetLineRange(i, nStart, nCount); - if (nIndex >= nStart && nIndex < nStart + nCount) { - break; - } - } - nIndex = nStart + nCount - 1; - FXSYS_assert(nIndex <= GetTextBufLength()); - FX_WCHAR wChar = m_pTxtBuf->GetCharByIndex(nIndex); - FX_BOOL bBefore = FALSE; - if (nIndex <= GetTextBufLength()) { - if (wChar == L'\r') { - bBefore = TRUE; - } else if (wChar == L'\n' && nIndex > nStart) { - bBefore = TRUE; - nIndex--; - wChar = m_pTxtBuf->GetCharByIndex(nIndex); - if (wChar != L'\r') { - nIndex++; - } - } - } - UpdateCaretRect(nIndex, bBefore); - pParag->UnloadParag(); - return TRUE; -} -FX_BOOL CFDE_TxtEdtEngine::MoveParagStart() { - int32_t nIndex = m_bBefore ? m_nCaret : m_nCaret - 1; - FDE_TXTEDTPARAGPOS ParagPos; - TextPos2ParagPos(nIndex, ParagPos); - CFDE_TxtEdtParag* pParag = m_ParagPtrArray[ParagPos.nParagIndex]; - UpdateCaretRect(pParag->m_nCharStart, TRUE); - return TRUE; -} -FX_BOOL CFDE_TxtEdtEngine::MoveParagEnd() { - int32_t nIndex = m_bBefore ? m_nCaret : m_nCaret - 1; - FDE_TXTEDTPARAGPOS ParagPos; - TextPos2ParagPos(nIndex, ParagPos); - CFDE_TxtEdtParag* pParag = m_ParagPtrArray[ParagPos.nParagIndex]; - nIndex = pParag->m_nCharStart + pParag->m_nCharCount - 1; - FX_WCHAR wChar = m_pTxtBuf->GetCharByIndex(nIndex); - if (wChar == L'\n' && nIndex > 0) { - nIndex--; - wChar = m_pTxtBuf->GetCharByIndex(nIndex); - if (wChar != L'\r') { - nIndex++; - } - } - UpdateCaretRect(nIndex, TRUE); - return TRUE; -} -FX_BOOL CFDE_TxtEdtEngine::MoveHome() { - UpdateCaretRect(0, TRUE); - return TRUE; -} -FX_BOOL CFDE_TxtEdtEngine::MoveEnd() { - UpdateCaretRect(GetTextBufLength(), TRUE); - return TRUE; -} - -FX_BOOL CFDE_TxtEdtEngine::IsFitArea(CFX_WideString& wsText) { - IFDE_TextOut* pTextOut = IFDE_TextOut::Create(); - pTextOut->SetLineSpace(m_Param.fLineSpace); - pTextOut->SetFont(m_Param.pFont); - pTextOut->SetFontSize(m_Param.fFontSize); - CFX_RectF rcText; - FXSYS_memset(&rcText, 0, sizeof(rcText)); - FX_DWORD dwStyle = 0; - if (!(m_Param.dwMode & FDE_TEXTEDITMODE_MultiLines)) { - dwStyle |= FDE_TTOSTYLE_SingleLine; - } - if (m_Param.dwMode & FDE_TEXTEDITMODE_AutoLineWrap) { - dwStyle |= FDE_TTOSTYLE_LineWrap; - rcText.width = m_Param.fPlateWidth; - } else { - rcText.width = 65535; - } - pTextOut->SetStyles(dwStyle); - wsText += L"\n"; - pTextOut->CalcLogicSize(wsText, wsText.GetLength(), rcText); - pTextOut->Release(); - wsText.Delete(wsText.GetLength() - 1); - if ((m_Param.dwMode & FDE_TEXTEDITMODE_LimitArea_Horz) && - (rcText.width > m_Param.fPlateWidth)) { - return FALSE; - } - if ((m_Param.dwMode & FDE_TEXTEDITMODE_LimitArea_Vert) && - (rcText.height > m_Param.fLineSpace * m_Param.nLineCount)) { - return FALSE; - } - return TRUE; -} -void CFDE_TxtEdtEngine::UpdateCaretRect(int32_t nIndex, FX_BOOL bBefore) { - MovePage2Char(nIndex); - GetCaretRect(m_rtCaret, m_nCaretPage, nIndex, bBefore); - m_nCaret = nIndex; - m_bBefore = bBefore; - if (!m_bBefore) { - m_nCaret++; - m_bBefore = TRUE; - } - m_fCaretPosReserve = (m_Param.dwLayoutStyles & FDE_TEXTEDITLAYOUT_DocVertical) - ? m_rtCaret.top - : m_rtCaret.left; - m_Param.pEventSink->On_CaretChanged(this, m_nCaretPage, 0); -} -void CFDE_TxtEdtEngine::GetCaretRect(CFX_RectF& rtCaret, - int32_t nPageIndex, - int32_t nCaret, - FX_BOOL bBefore) { - IFDE_TxtEdtPage* pPage = m_PagePtrArray[m_nCaretPage]; - m_Param.pEventSink->On_PageLoad(this, m_nCaretPage, 0); - FX_BOOL bCombText = m_Param.dwLayoutStyles & FDE_TEXTEDITLAYOUT_CombText; - int32_t nIndexInpage = nCaret - pPage->GetCharStart(); - if (bBefore && bCombText && nIndexInpage > 0) { - nIndexInpage--; - bBefore = FALSE; - } - int32_t nBIDILevel = pPage->GetCharRect(nIndexInpage, rtCaret, bCombText); - if (m_Param.dwLayoutStyles & FDE_TEXTEDITLAYOUT_DocVertical) { - if ((!FX_IsOdd(nBIDILevel) && !bBefore) || - (FX_IsOdd(nBIDILevel) && bBefore)) { - rtCaret.Offset(0, rtCaret.height - 1.0f); - } - if (rtCaret.height == 0 && rtCaret.top > 1.0f) { - rtCaret.top -= 1.0f; - } - rtCaret.height = 1.0f; - } else { - if ((!FX_IsOdd(nBIDILevel) && !bBefore) || - (FX_IsOdd(nBIDILevel) && bBefore)) { - rtCaret.Offset(rtCaret.width - 1.0f, 0); - } - if (rtCaret.width == 0 && rtCaret.left > 1.0f) { - rtCaret.left -= 1.0f; - } - rtCaret.width = 1.0f; - } - m_Param.pEventSink->On_PageUnload(this, m_nCaretPage, 0); -} -void CFDE_TxtEdtEngine::UpdateCaretIndex(const CFX_PointF& ptCaret) { - IFDE_TxtEdtPage* pPage = m_PagePtrArray[m_nCaretPage]; - m_Param.pEventSink->On_PageLoad(this, m_nCaretPage, 0); - m_nCaret = pPage->GetCharIndex(ptCaret, m_bBefore); - GetCaretRect(m_rtCaret, m_nCaretPage, m_nCaret, m_bBefore); - if (!m_bBefore) { - m_nCaret++; - m_bBefore = TRUE; - } - m_Param.pEventSink->On_CaretChanged(this, m_nCaretPage); - m_Param.pEventSink->On_PageUnload(this, m_nCaretPage, 0); -} -FX_BOOL CFDE_TxtEdtEngine::IsSelect() { - return m_SelRangePtrArr.GetSize() > 0; -} -void CFDE_TxtEdtEngine::DeleteSelect() { - int32_t nCountRange = CountSelRanges(); - if (nCountRange > 0) { - int32_t nSelStart; - int32_t nSelCount; - while (nCountRange > 0) { - nSelCount = GetSelRange(--nCountRange, nSelStart); - FDE_LPTXTEDTSELRANGE lpTemp = m_SelRangePtrArr[nCountRange]; - delete lpTemp; - m_SelRangePtrArr.RemoveAt(nCountRange); - DeleteRange_DoRecord(nSelStart, nSelCount, TRUE); - } - ClearSelection(); - m_Param.pEventSink->On_TextChanged(this, m_ChangeInfo); - m_Param.pEventSink->On_SelChanged(this); - SetCaretPos(nSelStart, TRUE); - return; - } -} -IFDE_TxtEdtDoRecord* IFDE_TxtEdtDoRecord::Create( - const CFX_ByteStringC& bsDoRecord) { - const FX_CHAR* lpBuf = bsDoRecord.GetCStr(); - int32_t nType = *((int32_t*)lpBuf); - switch (nType) { - case FDE_TXTEDT_DORECORD_INS: - return new CFDE_TxtEdtDoRecord_Insert(bsDoRecord); - case FDE_TXTEDT_DORECORD_DEL: - return new CFDE_TxtEdtDoRecord_DeleteRange(bsDoRecord); - default: - break; - } - return NULL; -} -CFDE_TxtEdtDoRecord_Insert::CFDE_TxtEdtDoRecord_Insert( - const CFX_ByteStringC& bsDoRecord) { - Deserialize(bsDoRecord); -} -CFDE_TxtEdtDoRecord_Insert::CFDE_TxtEdtDoRecord_Insert( - CFDE_TxtEdtEngine* pEngine, - int32_t nCaret, - const FX_WCHAR* lpText, - int32_t nLength) - : m_pEngine(pEngine), m_nCaret(nCaret) { - FXSYS_assert(pEngine); - FX_WCHAR* lpBuffer = m_wsInsert.GetBuffer(nLength); - FXSYS_memcpy(lpBuffer, lpText, nLength * sizeof(FX_WCHAR)); - m_wsInsert.ReleaseBuffer(); -} -CFDE_TxtEdtDoRecord_Insert::~CFDE_TxtEdtDoRecord_Insert() {} -void CFDE_TxtEdtDoRecord_Insert::Release() { - delete this; -} -FX_BOOL CFDE_TxtEdtDoRecord_Insert::Undo() { - if (m_pEngine->IsSelect()) { - m_pEngine->ClearSelection(); - } - m_pEngine->Inner_DeleteRange(m_nCaret, m_wsInsert.GetLength()); - FDE_TXTEDTPARAMS& Param = m_pEngine->m_Param; - m_pEngine->m_ChangeInfo.nChangeType = FDE_TXTEDT_TEXTCHANGE_TYPE_Delete; - m_pEngine->m_ChangeInfo.wsDelete = m_wsInsert; - Param.pEventSink->On_TextChanged(m_pEngine, m_pEngine->m_ChangeInfo); - m_pEngine->SetCaretPos(m_nCaret, TRUE); - return TRUE; -} -FX_BOOL CFDE_TxtEdtDoRecord_Insert::Redo() { - m_pEngine->Inner_Insert(m_nCaret, m_wsInsert.c_str(), m_wsInsert.GetLength()); - FDE_TXTEDTPARAMS& Param = m_pEngine->m_Param; - m_pEngine->m_ChangeInfo.nChangeType = FDE_TXTEDT_TEXTCHANGE_TYPE_Insert; - m_pEngine->m_ChangeInfo.wsDelete = m_wsInsert; - Param.pEventSink->On_TextChanged(m_pEngine, m_pEngine->m_ChangeInfo); - m_pEngine->SetCaretPos(m_nCaret, FALSE); - return TRUE; -} -void CFDE_TxtEdtDoRecord_Insert::Serialize(CFX_ByteString& bsDoRecord) const { - CFX_ArchiveSaver ArchiveSaver; - ArchiveSaver << int32_t(FDE_TXTEDT_DORECORD_INS); - ArchiveSaver << (int32_t)(uintptr_t)m_pEngine; - ArchiveSaver << m_nCaret; - ArchiveSaver << m_wsInsert; - int32_t nLength = ArchiveSaver.GetLength(); - const uint8_t* lpSrcBuf = ArchiveSaver.GetBuffer(); - FX_CHAR* lpDstBuf = bsDoRecord.GetBuffer(nLength); - FXSYS_memcpy(lpDstBuf, lpSrcBuf, nLength); - bsDoRecord.ReleaseBuffer(nLength); -} -void CFDE_TxtEdtDoRecord_Insert::Deserialize( - const CFX_ByteStringC& bsDoRecord) { - CFX_ArchiveLoader ArchiveLoader((const uint8_t*)bsDoRecord.GetCStr(), - bsDoRecord.GetLength()); - int32_t nType = 0; - ArchiveLoader >> nType; - FXSYS_assert(nType == FDE_TXTEDT_DORECORD_INS); - int32_t nEngine = 0; - ArchiveLoader >> nEngine; - m_pEngine = (CFDE_TxtEdtEngine*)(uintptr_t)nEngine; - ArchiveLoader >> m_nCaret; - ArchiveLoader >> m_wsInsert; -} -CFDE_TxtEdtDoRecord_DeleteRange::CFDE_TxtEdtDoRecord_DeleteRange( - const CFX_ByteStringC& bsDoRecord) { - Deserialize(bsDoRecord); -} -CFDE_TxtEdtDoRecord_DeleteRange::CFDE_TxtEdtDoRecord_DeleteRange( - CFDE_TxtEdtEngine* pEngine, - int32_t nIndex, - int32_t nCaret, - const CFX_WideString& wsRange, - FX_BOOL bSel) - : m_pEngine(pEngine), - m_bSel(bSel), - m_nIndex(nIndex), - m_nCaret(nCaret), - m_wsRange(wsRange) { - FXSYS_assert(pEngine); -} -CFDE_TxtEdtDoRecord_DeleteRange::~CFDE_TxtEdtDoRecord_DeleteRange() {} -void CFDE_TxtEdtDoRecord_DeleteRange::Release() { - delete this; -} -FX_BOOL CFDE_TxtEdtDoRecord_DeleteRange::Undo() { - if (m_pEngine->IsSelect()) { - m_pEngine->ClearSelection(); - } - m_pEngine->Inner_Insert(m_nIndex, m_wsRange.c_str(), m_wsRange.GetLength()); - if (m_bSel) { - m_pEngine->AddSelRange(m_nIndex, m_wsRange.GetLength()); - } - FDE_TXTEDTPARAMS& Param = m_pEngine->m_Param; - m_pEngine->m_ChangeInfo.nChangeType = FDE_TXTEDT_TEXTCHANGE_TYPE_Insert; - m_pEngine->m_ChangeInfo.wsDelete = m_wsRange; - Param.pEventSink->On_TextChanged(m_pEngine, m_pEngine->m_ChangeInfo); - m_pEngine->SetCaretPos(m_nCaret, TRUE); - return TRUE; -} -FX_BOOL CFDE_TxtEdtDoRecord_DeleteRange::Redo() { - m_pEngine->Inner_DeleteRange(m_nIndex, m_wsRange.GetLength()); - if (m_bSel) { - m_pEngine->RemoveSelRange(m_nIndex, m_wsRange.GetLength()); - } - FDE_TXTEDTPARAMS& Param = m_pEngine->m_Param; - m_pEngine->m_ChangeInfo.nChangeType = FDE_TXTEDT_TEXTCHANGE_TYPE_Insert; - m_pEngine->m_ChangeInfo.wsDelete = m_wsRange; - Param.pEventSink->On_TextChanged(m_pEngine, m_pEngine->m_ChangeInfo); - m_pEngine->SetCaretPos(m_nIndex, TRUE); - return TRUE; -} -void CFDE_TxtEdtDoRecord_DeleteRange::Serialize( - CFX_ByteString& bsDoRecord) const { - CFX_ArchiveSaver ArchiveSaver; - ArchiveSaver << int32_t(FDE_TXTEDT_DORECORD_DEL); - ArchiveSaver << (int32_t)(uintptr_t)m_pEngine; - ArchiveSaver << (int32_t)m_bSel; - ArchiveSaver << m_nIndex; - ArchiveSaver << m_nCaret; - ArchiveSaver << m_wsRange; - int32_t nLength = ArchiveSaver.GetLength(); - const uint8_t* lpSrcBuf = ArchiveSaver.GetBuffer(); - FX_CHAR* lpDstBuf = bsDoRecord.GetBuffer(nLength); - FXSYS_memcpy(lpDstBuf, lpSrcBuf, nLength); - bsDoRecord.ReleaseBuffer(nLength); -} -void CFDE_TxtEdtDoRecord_DeleteRange::Deserialize( - const CFX_ByteStringC& bsDoRecord) { - CFX_ArchiveLoader ArchiveLoader((const uint8_t*)bsDoRecord.GetCStr(), - bsDoRecord.GetLength()); - int32_t nType = 0; - ArchiveLoader >> nType; - FXSYS_assert(nType == FDE_TXTEDT_DORECORD_DEL); - int32_t nEngine = 0; - ArchiveLoader >> nEngine; - m_pEngine = (CFDE_TxtEdtEngine*)(uintptr_t)nEngine; - int32_t iSel = 0; - ArchiveLoader >> iSel; - m_bSel = !!iSel; - ArchiveLoader >> m_nIndex; - ArchiveLoader >> m_nCaret; - ArchiveLoader >> m_wsRange; -} diff --git a/xfa/src/fee/fde_txtedtengine.h b/xfa/src/fee/fde_txtedtengine.h deleted file mode 100644 index ef1270f3d5..0000000000 --- a/xfa/src/fee/fde_txtedtengine.h +++ /dev/null @@ -1,247 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FEE_FDE_TXTEDTENGINE_H_ -#define XFA_SRC_FEE_FDE_TXTEDTENGINE_H_ - -#include "core/include/fxcrt/fx_string.h" -#include "xfa/src/fee/ifde_txtedtbuf.h" -#include "xfa/src/fee/ifde_txtedtengine.h" - -class IFX_TxtBreak; -class IFX_CharIter; -class CFDE_TxtEdtParag; -class CFDE_TxtEdtDoRecord_Insert; -class CFDE_TxtEdtDoRecord_DeleteRange; - -class IFDE_TxtEdtDoRecord { - public: - static IFDE_TxtEdtDoRecord* Create(const CFX_ByteStringC& bsDoRecord); - virtual ~IFDE_TxtEdtDoRecord() {} - virtual void Release() = 0; - virtual FX_BOOL Redo() = 0; - virtual FX_BOOL Undo() = 0; - virtual void Serialize(CFX_ByteString& bsDoRecord) const = 0; -}; - -class CFDE_TxtEdtEngine : public IFDE_TxtEdtEngine { - friend class CFDE_TxtEdtDoRecord_Insert; - friend class CFDE_TxtEdtDoRecord_DeleteRange; - friend class CFDE_TxtEdtPage; - struct _FDE_TXTEDTSELRANGE { - int32_t nStart; - int32_t nCount; - }; - typedef _FDE_TXTEDTSELRANGE FDE_TXTEDTSELRANGE; - typedef _FDE_TXTEDTSELRANGE* FDE_LPTXTEDTSELRANGE; - struct _FDE_TXTEDTPARAGPOS { - int32_t nParagIndex; - int32_t nCharIndex; - }; - typedef _FDE_TXTEDTPARAGPOS FDE_TXTEDTPARAGPOS; - typedef _FDE_TXTEDTPARAGPOS* FDE_LPTXTEDTPARAGPOS; - - public: - CFDE_TxtEdtEngine(); - virtual void Release(); - - virtual void SetEditParams(const FDE_TXTEDTPARAMS& params); - virtual const FDE_TXTEDTPARAMS* GetEditParams() const; - - virtual int32_t CountPages() const; - virtual IFDE_TxtEdtPage* GetPage(int32_t nIndex); - - virtual FX_BOOL SetBufChunkSize(int32_t nChunkSize); - virtual void SetTextByStream(IFX_Stream* pStream); - virtual void SetText(const CFX_WideString& wsText); - virtual int32_t GetTextLength() const; - virtual void GetText(CFX_WideString& wsText, - int32_t nStart, - int32_t nCount = -1); - virtual void ClearText(); - - virtual int32_t GetCaretRect(CFX_RectF& rtCaret) const; - virtual int32_t GetCaretPos() const; - virtual int32_t SetCaretPos(int32_t nIndex, FX_BOOL bBefore); - virtual int32_t MoveCaretPos(FDE_TXTEDTMOVECARET eMoveCaret, - FX_BOOL bShift = FALSE, - FX_BOOL bCtrl = FALSE); - virtual void Lock(); - virtual void Unlock(); - virtual FX_BOOL IsLocked() const; - - virtual int32_t Insert(int32_t nStart, - const FX_WCHAR* lpText, - int32_t nLength); - virtual int32_t Delete(int32_t nStart, FX_BOOL bBackspace = FALSE); - virtual int32_t DeleteRange(int32_t nStart, int32_t nCount = -1); - virtual int32_t Replace(int32_t nStart, - int32_t nLength, - const CFX_WideString& wsReplace); - - virtual void SetLimit(int32_t nLimit); - virtual void SetAliasChar(FX_WCHAR wcAlias); - - void RemoveSelRange(int32_t nStart, int32_t nCount = -1); - - virtual void AddSelRange(int32_t nStart, int32_t nCount = -1); - virtual int32_t CountSelRanges(); - virtual int32_t GetSelRange(int32_t nIndex, int32_t& nStart); - virtual void ClearSelection(); - - virtual FX_BOOL Redo(const CFX_ByteStringC& bsRedo); - virtual FX_BOOL Undo(const CFX_ByteStringC& bsUndo); - - virtual int32_t StartLayout(); - virtual int32_t DoLayout(IFX_Pause* pPause); - virtual void EndLayout(); - - virtual FX_BOOL Optimize(IFX_Pause* pPause = NULL); - virtual int32_t CountParags() const; - virtual IFDE_TxtEdtParag* GetParag(int32_t nParagIndex) const; - virtual IFX_CharIter* CreateCharIter(); - IFDE_TxtEdtBuf* GetTextBuf() const; - int32_t GetTextBufLength() const; - IFX_TxtBreak* GetTextBreak() const; - int32_t GetLineCount() const; - int32_t GetPageLineCount() const; - - int32_t Line2Parag(int32_t nStartParag, - int32_t nStartLineofParag, - int32_t nLineIndex, - int32_t& nStartLine) const; - FX_WCHAR GetAliasChar() const { return m_wcAliasChar; } - - protected: - virtual ~CFDE_TxtEdtEngine(); - - private: - void Inner_Insert(int32_t nStart, const FX_WCHAR* lpText, int32_t nLength); - void GetPreDeleteText(CFX_WideString& wsText, - int32_t nIndex, - int32_t nLength); - void GetPreInsertText(CFX_WideString& wsText, - int32_t nIndex, - const FX_WCHAR* lpText, - int32_t nLength); - void GetPreReplaceText(CFX_WideString& wsText, - int32_t nIndex, - int32_t nOriginLength, - const FX_WCHAR* lpText, - int32_t nLength); - - void Inner_DeleteRange(int32_t nStart, int32_t nCount = -1); - void DeleteRange_DoRecord(int32_t nStart, - int32_t nCount, - FX_BOOL bSel = FALSE); - void ResetEngine(); - void RebuildParagraphs(); - void RemoveAllParags(); - void RemoveAllPages(); - void UpdateParags(); - void UpdatePages(); - void UpdateTxtBreak(); - - FX_BOOL ReplaceParagEnd(FX_WCHAR*& lpText, - int32_t& nLength, - FX_BOOL bPreIsCR = FALSE); - void RecoverParagEnd(CFX_WideString& wsText); - int32_t MovePage2Char(int32_t nIndex); - void TextPos2ParagPos(int32_t nIndex, FDE_TXTEDTPARAGPOS& ParagPos) const; - int32_t MoveForward(FX_BOOL& bBefore); - int32_t MoveBackward(FX_BOOL& bBefore); - FX_BOOL MoveUp(CFX_PointF& ptCaret); - FX_BOOL MoveDown(CFX_PointF& ptCaret); - FX_BOOL MoveLineStart(); - FX_BOOL MoveLineEnd(); - FX_BOOL MoveParagStart(); - FX_BOOL MoveParagEnd(); - FX_BOOL MoveHome(); - FX_BOOL MoveEnd(); - FX_BOOL IsFitArea(CFX_WideString& wsText); - void UpdateCaretRect(int32_t nIndex, FX_BOOL bBefore = TRUE); - void GetCaretRect(CFX_RectF& rtCaret, - int32_t nPageIndex, - int32_t nCaret, - FX_BOOL bBefore = TRUE); - void UpdateCaretIndex(const CFX_PointF& ptCaret); - - FX_BOOL IsSelect(); - void DeleteSelect(); - - IFDE_TxtEdtBuf* m_pTxtBuf; - IFX_TxtBreak* m_pTextBreak; - FDE_TXTEDTPARAMS m_Param; - CFX_ArrayTemplate m_PagePtrArray; - CFX_ArrayTemplate m_ParagPtrArray; - CFX_ArrayTemplate m_SelRangePtrArr; - int32_t m_nPageLineCount; - int32_t m_nLineCount; - int32_t m_nAnchorPos; - int32_t m_nLayoutPos; - FX_FLOAT m_fCaretPosReserve; - int32_t m_nCaret; - FX_BOOL m_bBefore; - int32_t m_nCaretPage; - CFX_RectF m_rtCaret; - FX_DWORD m_dwFindFlags; - FX_BOOL m_bLock; - int32_t m_nLimit; - FX_WCHAR m_wcAliasChar; - int32_t m_nFirstLineEnd; - FX_BOOL m_bAutoLineEnd; - FX_WCHAR m_wLineEnd; - FDE_TXTEDT_TEXTCHANGE_INFO m_ChangeInfo; -}; - -class CFDE_TxtEdtDoRecord_Insert : public IFDE_TxtEdtDoRecord { - public: - CFDE_TxtEdtDoRecord_Insert(const CFX_ByteStringC& bsDoRecord); - CFDE_TxtEdtDoRecord_Insert(CFDE_TxtEdtEngine* pEngine, - int32_t nCaret, - const FX_WCHAR* lpText, - int32_t nLength); - virtual void Release(); - virtual FX_BOOL Undo(); - virtual FX_BOOL Redo(); - virtual void Serialize(CFX_ByteString& bsDoRecord) const; - - protected: - ~CFDE_TxtEdtDoRecord_Insert(); - void Deserialize(const CFX_ByteStringC& bsDoRecord); - - private: - CFDE_TxtEdtEngine* m_pEngine; - int32_t m_nCaret; - CFX_WideString m_wsInsert; -}; - -class CFDE_TxtEdtDoRecord_DeleteRange : public IFDE_TxtEdtDoRecord { - public: - CFDE_TxtEdtDoRecord_DeleteRange(const CFX_ByteStringC& bsDoRecord); - CFDE_TxtEdtDoRecord_DeleteRange(CFDE_TxtEdtEngine* pEngine, - int32_t nIndex, - int32_t nCaret, - const CFX_WideString& wsRange, - FX_BOOL bSel = FALSE); - virtual void Release(); - virtual FX_BOOL Undo(); - virtual FX_BOOL Redo(); - virtual void Serialize(CFX_ByteString& bsDoRecord) const; - - protected: - ~CFDE_TxtEdtDoRecord_DeleteRange(); - void Deserialize(const CFX_ByteStringC& bsDoRecord); - - private: - CFDE_TxtEdtEngine* m_pEngine; - FX_BOOL m_bSel; - int32_t m_nIndex; - int32_t m_nCaret; - CFX_WideString m_wsRange; -}; - -#endif // XFA_SRC_FEE_FDE_TXTEDTENGINE_H_ diff --git a/xfa/src/fee/fde_txtedtpage.cpp b/xfa/src/fee/fde_txtedtpage.cpp deleted file mode 100644 index 932832fd6f..0000000000 --- a/xfa/src/fee/fde_txtedtpage.cpp +++ /dev/null @@ -1,650 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fee/fde_txtedtpage.h" - -#include - -#include "xfa/src/fee/fx_wordbreak/fx_wordbreak.h" -#include "xfa/src/fee/fde_txtedtbuf.h" -#include "xfa/src/fee/fde_txtedtengine.h" -#include "xfa/src/fee/fde_txtedtparag.h" -#include "xfa/src/fee/ifde_txtedtbuf.h" -#include "xfa/src/fee/ifde_txtedtengine.h" -#include "xfa/src/fee/ifde_txtedtpage.h" - -#define FDE_TXTEDT_TOLERANCE 0.1f - -IFDE_TxtEdtPage* IFDE_TxtEdtPage::Create(IFDE_TxtEdtEngine* pEngine, - int32_t nIndex) { - return (IFDE_TxtEdtPage*)new CFDE_TxtEdtPage(pEngine, nIndex); -} -CFDE_TxtEdtTextSet::CFDE_TxtEdtTextSet(CFDE_TxtEdtPage* pPage) - : m_pPage(pPage) {} -CFDE_TxtEdtTextSet::~CFDE_TxtEdtTextSet() {} -FDE_VISUALOBJTYPE CFDE_TxtEdtTextSet::GetType() { - return FDE_VISUALOBJ_Text; -} -FX_BOOL CFDE_TxtEdtTextSet::GetBBox(FDE_HVISUALOBJ hVisualObj, - CFX_RectF& bbox) { - return FALSE; -} -FX_BOOL CFDE_TxtEdtTextSet::GetMatrix(FDE_HVISUALOBJ hVisualObj, - CFX_Matrix& matrix) { - return FALSE; -} -FX_BOOL CFDE_TxtEdtTextSet::GetRect(FDE_HVISUALOBJ hVisualObj, CFX_RectF& rt) { - rt = ((FDE_TEXTEDITPIECE*)(hVisualObj))->rtPiece; - return TRUE; -} -FX_BOOL CFDE_TxtEdtTextSet::GetClip(FDE_HVISUALOBJ hVisualObj, CFX_RectF& rt) { - return FALSE; -} -int32_t CFDE_TxtEdtTextSet::GetString(FDE_HVISUALOBJ hText, - CFX_WideString& wsText) { - FDE_TEXTEDITPIECE* pPiece = (FDE_TEXTEDITPIECE*)hText; - FX_WCHAR* pBuffer = wsText.GetBuffer(pPiece->nCount); - for (int32_t i = 0; i < pPiece->nCount; i++) { - pBuffer[i] = m_pPage->GetChar((void*)hText, i); - } - wsText.ReleaseBuffer(pPiece->nCount); - return pPiece->nCount; -} -IFX_Font* CFDE_TxtEdtTextSet::GetFont(FDE_HVISUALOBJ hText) { - return m_pPage->GetEngine()->GetEditParams()->pFont; -} -FX_FLOAT CFDE_TxtEdtTextSet::GetFontSize(FDE_HVISUALOBJ hText) { - return m_pPage->GetEngine()->GetEditParams()->fFontSize; -} -FX_ARGB CFDE_TxtEdtTextSet::GetFontColor(FDE_HVISUALOBJ hText) { - return m_pPage->GetEngine()->GetEditParams()->dwFontColor; -} -int32_t CFDE_TxtEdtTextSet::GetDisplayPos(FDE_HVISUALOBJ hText, - FXTEXT_CHARPOS* pCharPos, - FX_BOOL bCharCode, - CFX_WideString* pWSForms) { - if (hText == NULL) { - return 0; - } - FDE_TEXTEDITPIECE* pPiece = (FDE_TEXTEDITPIECE*)hText; - int32_t nLength = pPiece->nCount; - if (nLength < 1) { - return 0; - } - CFDE_TxtEdtEngine* pEngine = (CFDE_TxtEdtEngine*)(m_pPage->GetEngine()); - const FDE_TXTEDTPARAMS* pTextParams = pEngine->GetEditParams(); - IFX_TxtBreak* pBreak = pEngine->GetTextBreak(); - FX_DWORD dwLayoutStyle = pBreak->GetLayoutStyles(); - FX_TXTRUN tr; - tr.pAccess = m_pPage; - tr.pIdentity = (void*)hText; - tr.pStr = NULL; - tr.pWidths = NULL; - tr.iLength = nLength; - tr.pFont = pTextParams->pFont; - tr.fFontSize = pTextParams->fFontSize; - tr.dwStyles = dwLayoutStyle; - tr.iCharRotation = pTextParams->nCharRotation; - tr.dwCharStyles = pPiece->dwCharStyles; - tr.pRect = &(pPiece->rtPiece); - tr.wLineBreakChar = pTextParams->wLineBreakChar; - return pBreak->GetDisplayPos(&tr, pCharPos, bCharCode, pWSForms); -} -int32_t CFDE_TxtEdtTextSet::GetCharRects(FDE_HVISUALOBJ hText, - CFX_RectFArray& rtArray) { - return GetCharRects_Impl(hText, rtArray); -} -int32_t CFDE_TxtEdtTextSet::GetCharRects_Impl(FDE_HVISUALOBJ hText, - CFX_RectFArray& rtArray, - FX_BOOL bBBox) { - if (hText == NULL) { - return 0; - } - FDE_TEXTEDITPIECE* pPiece = (FDE_TEXTEDITPIECE*)hText; - CFDE_TxtEdtEngine* pEngine = (CFDE_TxtEdtEngine*)(m_pPage->GetEngine()); - int32_t nLength = pPiece->nCount; - if (nLength < 1) { - return 0; - } - const FDE_TXTEDTPARAMS* pTextParams = pEngine->GetEditParams(); - FX_DWORD dwLayoutStyle = pEngine->GetTextBreak()->GetLayoutStyles(); - FX_TXTRUN tr; - tr.pAccess = m_pPage; - tr.pIdentity = (void*)hText; - tr.pStr = NULL; - tr.pWidths = NULL; - tr.iLength = nLength; - tr.pFont = pTextParams->pFont; - tr.fFontSize = pTextParams->fFontSize; - tr.dwStyles = dwLayoutStyle; - tr.iCharRotation = pTextParams->nCharRotation; - tr.dwCharStyles = pPiece->dwCharStyles; - tr.pRect = &(pPiece->rtPiece); - tr.wLineBreakChar = pTextParams->wLineBreakChar; - return pEngine->GetTextBreak()->GetCharRects(&tr, rtArray, bBBox); -} -CFDE_TxtEdtPage::CFDE_TxtEdtPage(IFDE_TxtEdtEngine* pEngine, int32_t nPageIndex) - : m_pIter(nullptr), - m_pTextSet(nullptr), - m_pBgnParag(nullptr), - m_pEndParag(nullptr), - m_nRefCount(0), - m_nPageStart(-1), - m_nCharCount(0), - m_nPageIndex(nPageIndex), - m_bLoaded(FALSE), - m_pCharWidth(nullptr) { - FXSYS_memset(&m_rtPage, 0, sizeof(CFX_RectF)); - FXSYS_memset(&m_rtPageMargin, 0, sizeof(CFX_RectF)); - FXSYS_memset(&m_rtPageContents, 0, sizeof(CFX_RectF)); - FXSYS_memset(&m_rtPageCanvas, 0, sizeof(CFX_RectF)); - m_pEditEngine = (CFDE_TxtEdtEngine*)pEngine; -} -CFDE_TxtEdtPage::~CFDE_TxtEdtPage() { - m_PieceMassArr.RemoveAll(TRUE); - if (m_pTextSet) { - delete m_pTextSet; - m_pTextSet = NULL; - } - if (m_pCharWidth) { - delete[] m_pCharWidth; - m_pCharWidth = NULL; - } - if (m_pIter != NULL) { - m_pIter->Release(); - m_pIter = NULL; - } -} -void CFDE_TxtEdtPage::Release() { - delete this; -} -IFDE_TxtEdtEngine* CFDE_TxtEdtPage::GetEngine() const { - return (IFDE_TxtEdtEngine*)m_pEditEngine; -} -FDE_VISUALOBJTYPE CFDE_TxtEdtPage::GetType() { - return FDE_VISUALOBJ_Text; -} -FX_BOOL CFDE_TxtEdtPage::GetBBox(FDE_HVISUALOBJ hVisualObj, CFX_RectF& bbox) { - return FALSE; -} -FX_BOOL CFDE_TxtEdtPage::GetMatrix(FDE_HVISUALOBJ hVisualObj, - CFX_Matrix& matrix) { - return FALSE; -} -FX_BOOL CFDE_TxtEdtPage::GetRect(FDE_HVISUALOBJ hVisualObj, CFX_RectF& rt) { - return FALSE; -} -FX_BOOL CFDE_TxtEdtPage::GetClip(FDE_HVISUALOBJ hVisualObj, CFX_RectF& rt) { - return FALSE; -} -int32_t CFDE_TxtEdtPage::GetCharRect(int32_t nIndex, - CFX_RectF& rect, - FX_BOOL bBBox) const { - FXSYS_assert(m_nRefCount > 0); - FXSYS_assert(nIndex >= 0 && nIndex < m_nCharCount); - if (m_nRefCount < 1) { - return 0; - } - int32_t nCount = m_PieceMassArr.GetSize(); - for (int32_t i = 0; i < nCount; i++) { - const FDE_TEXTEDITPIECE* pPiece = m_PieceMassArr.GetPtrAt(i); - if (nIndex >= pPiece->nStart && - nIndex < (pPiece->nStart + pPiece->nCount)) { - CFX_RectFArray rectArr; - if (bBBox) { - m_pTextSet->GetCharRects_Impl((FDE_HVISUALOBJ)pPiece, rectArr, bBBox); - } else { - m_pTextSet->GetCharRects((FDE_HVISUALOBJ)pPiece, rectArr); - } - rect = rectArr[nIndex - pPiece->nStart]; - return pPiece->nBidiLevel; - } - } - FXSYS_assert(0); - return 0; -} -int32_t CFDE_TxtEdtPage::GetCharIndex(const CFX_PointF& fPoint, - FX_BOOL& bBefore) { - FX_BOOL bVertical = m_pEditEngine->GetEditParams()->dwLayoutStyles & - FDE_TEXTEDITLAYOUT_DocVertical; - CFX_PointF ptF = fPoint; - NormalizePt2Rect(ptF, m_rtPageContents, FDE_TXTEDT_TOLERANCE); - int32_t nCount = m_PieceMassArr.GetSize(); - CFX_RectF rtLine; - int32_t nBgn = 0; - int32_t nEnd = 0; - FX_BOOL bInLine = FALSE; - int32_t i = 0; - for (i = 0; i < nCount; i++) { - const FDE_TEXTEDITPIECE* pPiece = m_PieceMassArr.GetPtrAt(i); - if (!bInLine && (bVertical ? (pPiece->rtPiece.left <= ptF.x && - pPiece->rtPiece.right() > ptF.x) - : (pPiece->rtPiece.top <= ptF.y && - pPiece->rtPiece.bottom() > ptF.y))) { - nBgn = nEnd = i; - rtLine = pPiece->rtPiece; - bInLine = TRUE; - } else if (bInLine) { - if (bVertical ? (!(pPiece->rtPiece.left <= ptF.x && - pPiece->rtPiece.right() > ptF.x)) - : (pPiece->rtPiece.bottom() <= ptF.y || - pPiece->rtPiece.top > ptF.y)) { - nEnd = i - 1; - break; - } else { - rtLine.Union(pPiece->rtPiece); - } - } - } - NormalizePt2Rect(ptF, rtLine, FDE_TXTEDT_TOLERANCE); - int32_t nCaret = 0; - FDE_TEXTEDITPIECE* pPiece = NULL; - for (i = nBgn; i <= nEnd; i++) { - pPiece = m_PieceMassArr.GetPtrAt(i); - nCaret = m_nPageStart + pPiece->nStart; - if (pPiece->rtPiece.Contains(ptF)) { - CFX_RectFArray rectArr; - m_pTextSet->GetCharRects((FDE_HVISUALOBJ)pPiece, rectArr); - int32_t nRtCount = rectArr.GetSize(); - for (int32_t j = 0; j < nRtCount; j++) { - if (rectArr[j].Contains(ptF)) { - nCaret = m_nPageStart + pPiece->nStart + j; - if (nCaret >= m_pEditEngine->GetTextBufLength()) { - bBefore = TRUE; - return m_pEditEngine->GetTextBufLength(); - } - FX_WCHAR wChar = m_pEditEngine->GetTextBuf()->GetCharByIndex(nCaret); - if (wChar == L'\n' || wChar == L'\r') { - if (wChar == L'\n') { - if (m_pEditEngine->GetTextBuf()->GetCharByIndex(nCaret - 1) == - L'\r') { - nCaret--; - } - } - bBefore = TRUE; - return nCaret; - } - if (bVertical - ? (ptF.y > ((rectArr[j].top + rectArr[j].bottom()) / 2)) - : (ptF.x > ((rectArr[j].left + rectArr[j].right()) / 2))) { - bBefore = FX_IsOdd(pPiece->nBidiLevel); - } else { - bBefore = !FX_IsOdd(pPiece->nBidiLevel); - } - return nCaret; - } - } - } - } - bBefore = TRUE; - return nCaret; -} -int32_t CFDE_TxtEdtPage::GetCharStart() const { - return m_nPageStart; -} -int32_t CFDE_TxtEdtPage::GetCharCount() const { - return m_nCharCount; -} -int32_t CFDE_TxtEdtPage::GetDisplayPos(const CFX_RectF& rtClip, - FXTEXT_CHARPOS*& pCharPos, - CFX_RectF* pBBox) const { - pCharPos = FX_Alloc(FXTEXT_CHARPOS, m_nCharCount); - int32_t nCharPosCount = 0; - FDE_HVISUALOBJ hVisualObj = NULL; - int32_t nVisualObjCount = m_PieceMassArr.GetSize(); - FXTEXT_CHARPOS* pos = pCharPos; - CFX_RectF rtObj; - for (int32_t i = 0; i < nVisualObjCount; i++) { - hVisualObj = (FDE_HVISUALOBJ)m_PieceMassArr.GetPtrAt(i); - m_pTextSet->GetRect(hVisualObj, rtObj); - if (!rtClip.IntersectWith(rtObj)) { - continue; - } - int32_t nCount = m_pTextSet->GetDisplayPos(hVisualObj, pos, FALSE); - nCharPosCount += nCount; - pos += nCount; - } - if ((nCharPosCount * 5) < (m_nCharCount << 2)) { - FXTEXT_CHARPOS* pTemp = FX_Alloc(FXTEXT_CHARPOS, nCharPosCount); - FXSYS_memcpy(pTemp, pCharPos, sizeof(FXTEXT_CHARPOS) * nCharPosCount); - FX_Free(pCharPos); - pCharPos = pTemp; - } - return nCharPosCount; -} -void CFDE_TxtEdtPage::CalcRangeRectArray(int32_t nStart, - int32_t nCount, - CFX_RectFArray& RectFArr) const { - int32_t nPieceCount = m_PieceMassArr.GetSize(); - int32_t nEnd = nStart + nCount - 1; - FX_BOOL bInRange = FALSE; - for (int32_t i = 0; i < nPieceCount; i++) { - FDE_TEXTEDITPIECE* piece = m_PieceMassArr.GetPtrAt(i); - if (!bInRange) { - if (nStart >= piece->nStart && nStart < (piece->nStart + piece->nCount)) { - int32_t nRangeEnd = piece->nCount - 1; - FX_BOOL bEnd = FALSE; - if (nEnd >= piece->nStart && nEnd < (piece->nStart + piece->nCount)) { - nRangeEnd = nEnd - piece->nStart; - bEnd = TRUE; - } - CFX_RectFArray rcArr; - m_pTextSet->GetCharRects((FDE_HVISUALOBJ)piece, rcArr); - CFX_RectF rectPiece = rcArr[nStart - piece->nStart]; - rectPiece.Union(rcArr[nRangeEnd]); - RectFArr.Add(rectPiece); - if (bEnd) { - return; - } - bInRange = TRUE; - } - } else { - if (nEnd >= piece->nStart && nEnd < (piece->nStart + piece->nCount)) { - CFX_RectFArray rcArr; - m_pTextSet->GetCharRects((FDE_HVISUALOBJ)piece, rcArr); - CFX_RectF rectPiece = rcArr[0]; - rectPiece.Union(rcArr[nEnd - piece->nStart]); - RectFArr.Add(rectPiece); - return; - } - RectFArr.Add(piece->rtPiece); - } - } -} - -int32_t CFDE_TxtEdtPage::SelectWord(const CFX_PointF& fPoint, int32_t& nCount) { - if (m_nRefCount < 0) { - return -1; - } - IFDE_TxtEdtBuf* pBuf = m_pEditEngine->GetTextBuf(); - FX_BOOL bBefore; - int32_t nIndex = GetCharIndex(fPoint, bBefore); - if (nIndex == m_pEditEngine->GetTextBufLength()) { - nIndex = m_pEditEngine->GetTextBufLength() - 1; - } - if (nIndex < 0) { - return -1; - } - IFX_WordBreak* pIter = FX_WordBreak_Create(); - pIter->Attach(new CFDE_TxtEdtBufIter((CFDE_TxtEdtBuf*)pBuf)); - pIter->SetAt(nIndex); - nCount = pIter->GetWordLength(); - int32_t nRet = pIter->GetWordPos(); - pIter->Release(); - return nRet; -} -FX_BOOL CFDE_TxtEdtPage::IsLoaded(const CFX_RectF* pClipBox) { - return m_bLoaded; -} -int32_t CFDE_TxtEdtPage::LoadPage(const CFX_RectF* pClipBox, - IFX_Pause* pPause) { - if (m_nRefCount > 0) { - m_nRefCount++; - return m_nRefCount; - } - IFDE_TxtEdtBuf* pBuf = m_pEditEngine->GetTextBuf(); - const FDE_TXTEDTPARAMS* pParams = m_pEditEngine->GetEditParams(); - if (m_pIter != NULL) { - m_pIter->Release(); - } - FX_WCHAR wcAlias = 0; - if (pParams->dwMode & FDE_TEXTEDITMODE_Password) { - wcAlias = m_pEditEngine->GetAliasChar(); - } - m_pIter = new CFDE_TxtEdtBufIter((CFDE_TxtEdtBuf*)pBuf, wcAlias); - IFX_TxtBreak* pBreak = m_pEditEngine->GetTextBreak(); - pBreak->EndBreak(FX_TXTBREAK_ParagraphBreak); - pBreak->ClearBreakPieces(); - int32_t nPageLineCount = m_pEditEngine->GetPageLineCount(); - int32_t nStartLine = nPageLineCount * m_nPageIndex; - int32_t nEndLine = std::min((nStartLine + nPageLineCount - 1), - (m_pEditEngine->GetLineCount() - 1)); - int32_t nPageStart, nPageEnd, nTemp, nBgnParag, nStartLineInParag, nEndParag, - nEndLineInParag; - nBgnParag = m_pEditEngine->Line2Parag(0, 0, nStartLine, nStartLineInParag); - m_pBgnParag = (CFDE_TxtEdtParag*)m_pEditEngine->GetParag(nBgnParag); - m_pBgnParag->LoadParag(); - m_pBgnParag->GetLineRange(nStartLine - nStartLineInParag, nPageStart, nTemp); - nEndParag = m_pEditEngine->Line2Parag(nBgnParag, nStartLineInParag, nEndLine, - nEndLineInParag); - m_pEndParag = (CFDE_TxtEdtParag*)m_pEditEngine->GetParag(nEndParag); - m_pEndParag->LoadParag(); - m_pEndParag->GetLineRange(nEndLine - nEndLineInParag, nPageEnd, nTemp); - nPageEnd += (nTemp - 1); - FX_BOOL bVertial = pParams->dwLayoutStyles & FDE_TEXTEDITLAYOUT_DocVertical; - FX_BOOL bLineReserve = - pParams->dwLayoutStyles & FDE_TEXTEDITLAYOUT_LineReserve; - FX_FLOAT fLineStart = - bVertial - ? (bLineReserve ? (pParams->fPlateWidth - pParams->fLineSpace) : 0.0f) - : 0.0f; - FX_FLOAT fLineStep = - (bVertial && bLineReserve) ? (-pParams->fLineSpace) : pParams->fLineSpace; - FX_FLOAT fLinePos = fLineStart; - if (m_pTextSet == NULL) { - m_pTextSet = new CFDE_TxtEdtTextSet(this); - } - m_PieceMassArr.RemoveAll(TRUE); - FX_DWORD dwBreakStatus = FX_TXTBREAK_None; - int32_t nPieceStart = 0; - if (m_pCharWidth != NULL) { - delete[] m_pCharWidth; - } - m_pCharWidth = new int32_t[nPageEnd - nPageStart + 1]; - pBreak->EndBreak(FX_TXTBREAK_ParagraphBreak); - pBreak->ClearBreakPieces(); - m_nPageStart = nPageStart; - m_nCharCount = nPageEnd - nPageStart + 1; - FX_BOOL bReload = FALSE; - FX_FLOAT fDefCharWidth = 0; - IFX_CharIter* pIter = m_pIter->Clone(); - pIter->SetAt(nPageStart); - m_pIter->SetAt(nPageStart); - FX_BOOL bFirstPiece = TRUE; - do { - if (bReload) { - dwBreakStatus = pBreak->EndBreak(FX_TXTBREAK_ParagraphBreak); - } else { - FX_WCHAR wAppend = pIter->GetChar(); - dwBreakStatus = pBreak->AppendChar(wAppend); - } - if (pIter->GetAt() == nPageEnd && dwBreakStatus < FX_TXTBREAK_LineBreak) { - dwBreakStatus = pBreak->EndBreak(FX_TXTBREAK_ParagraphBreak); - } - if (dwBreakStatus > FX_TXTBREAK_PieceBreak) { - int32_t nPieceCount = pBreak->CountBreakPieces(); - for (int32_t j = 0; j < nPieceCount; j++) { - const CFX_TxtPiece* pPiece = pBreak->GetBreakPiece(j); - FDE_TEXTEDITPIECE TxtEdtPiece; - FXSYS_memset(&TxtEdtPiece, 0, sizeof(FDE_TEXTEDITPIECE)); - TxtEdtPiece.nBidiLevel = pPiece->m_iBidiLevel; - TxtEdtPiece.nCount = pPiece->GetLength(); - TxtEdtPiece.nStart = nPieceStart; - TxtEdtPiece.dwCharStyles = pPiece->m_dwCharStyles; - if (FX_IsOdd(pPiece->m_iBidiLevel)) { - TxtEdtPiece.dwCharStyles |= FX_TXTCHARSTYLE_OddBidiLevel; - } - FX_FLOAT fParaBreakWidth = 0.0f; - if (pPiece->m_dwStatus > FX_TXTBREAK_PieceBreak) { - FX_WCHAR wRtChar = pParams->wLineBreakChar; - if (TxtEdtPiece.nCount >= 2) { - FX_WCHAR wChar = pBuf->GetCharByIndex( - m_nPageStart + TxtEdtPiece.nStart + TxtEdtPiece.nCount - 1); - FX_WCHAR wCharPre = pBuf->GetCharByIndex( - m_nPageStart + TxtEdtPiece.nStart + TxtEdtPiece.nCount - 2); - if (wChar == wRtChar) { - fParaBreakWidth += fDefCharWidth; - } - if (wCharPre == wRtChar) { - fParaBreakWidth += fDefCharWidth; - } - } else if (TxtEdtPiece.nCount >= 1) { - FX_WCHAR wChar = pBuf->GetCharByIndex( - m_nPageStart + TxtEdtPiece.nStart + TxtEdtPiece.nCount - 1); - if (wChar == wRtChar) { - fParaBreakWidth += fDefCharWidth; - } - } - } - if (pParams->dwLayoutStyles & FDE_TEXTEDITLAYOUT_DocVertical) { - TxtEdtPiece.rtPiece.left = fLinePos; - TxtEdtPiece.rtPiece.top = (FX_FLOAT)pPiece->m_iStartPos / 20000.0f; - TxtEdtPiece.rtPiece.width = pParams->fLineSpace; - TxtEdtPiece.rtPiece.height = - (FX_FLOAT)pPiece->m_iWidth / 20000.0f + fParaBreakWidth; - } else { - TxtEdtPiece.rtPiece.left = (FX_FLOAT)pPiece->m_iStartPos / 20000.0f; - TxtEdtPiece.rtPiece.top = fLinePos; - TxtEdtPiece.rtPiece.width = - (FX_FLOAT)pPiece->m_iWidth / 20000.0f + fParaBreakWidth; - TxtEdtPiece.rtPiece.height = pParams->fLineSpace; - } - if (bFirstPiece) { - m_rtPageContents = TxtEdtPiece.rtPiece; - bFirstPiece = FALSE; - } else { - m_rtPageContents.Union(TxtEdtPiece.rtPiece); - } - nPieceStart += TxtEdtPiece.nCount; - m_PieceMassArr.Add(TxtEdtPiece); - for (int32_t k = 0; k < TxtEdtPiece.nCount; k++) { - CFX_Char* ptc = pPiece->GetCharPtr(k); - m_pCharWidth[TxtEdtPiece.nStart + k] = ptc->m_iCharWidth; - } - } - fLinePos += fLineStep; - pBreak->ClearBreakPieces(); - } - if (pIter->GetAt() == nPageEnd && dwBreakStatus == FX_TXTBREAK_LineBreak) { - bReload = TRUE; - pIter->Next(TRUE); - } - } while (pIter->Next(FALSE) && (pIter->GetAt() <= nPageEnd)); - if (m_rtPageContents.left != 0) { - FX_FLOAT fDelta = 0.0f; - if (m_rtPageContents.width < pParams->fPlateWidth) { - if (pParams->dwAlignment & FDE_TEXTEDITALIGN_Right) { - fDelta = pParams->fPlateWidth - m_rtPageContents.width; - } else if (pParams->dwAlignment & FDE_TEXTEDITALIGN_Center) { - if ((pParams->dwLayoutStyles & FDE_TEXTEDITLAYOUT_CombText) && - m_nCharCount > 1) { - int32_t nCount = m_nCharCount - 1; - int32_t n = (m_pEditEngine->m_nLimit - nCount) / 2; - fDelta = (m_rtPageContents.width / nCount) * n; - } else { - fDelta = (pParams->fPlateWidth - m_rtPageContents.width) / 2; - } - } - } - FX_FLOAT fOffset = m_rtPageContents.left - fDelta; - int32_t nCount = m_PieceMassArr.GetSize(); - for (int32_t i = 0; i < nCount; i++) { - FDE_TEXTEDITPIECE* pPiece = m_PieceMassArr.GetPtrAt(i); - pPiece->rtPiece.Offset(-fOffset, 0.0f); - } - m_rtPageContents.Offset(-fOffset, 0.0f); - } - if (m_pEditEngine->GetEditParams()->dwLayoutStyles & - FDE_TEXTEDITLAYOUT_LastLineHeight) { - m_rtPageContents.height -= pParams->fLineSpace - pParams->fFontSize; - int32_t nCount = m_PieceMassArr.GetSize(); - FDE_TEXTEDITPIECE* pPiece = m_PieceMassArr.GetPtrAt(nCount - 1); - pPiece->rtPiece.height = pParams->fFontSize; - } - pIter->Release(); - m_nRefCount = 1; - m_bLoaded = TRUE; - return 0; -} -void CFDE_TxtEdtPage::UnloadPage(const CFX_RectF* pClipBox) { - FXSYS_assert(m_nRefCount > 0); - m_nRefCount--; - if (m_nRefCount == 0) { - m_PieceMassArr.RemoveAll(); - if (m_pTextSet) { - delete m_pTextSet; - m_pTextSet = NULL; - } - if (m_pCharWidth) { - delete[] m_pCharWidth; - m_pCharWidth = NULL; - } - if (m_pBgnParag) { - m_pBgnParag->UnloadParag(); - } - if (m_pEndParag) { - m_pEndParag->UnloadParag(); - } - if (m_pIter) { - m_pIter->Release(); - m_pIter = NULL; - } - m_pBgnParag = NULL; - m_pEndParag = NULL; - } -} - -const CFX_RectF& CFDE_TxtEdtPage::GetContentsBox() { - return m_rtPageContents; -} -FX_POSITION CFDE_TxtEdtPage::GetFirstPosition(FDE_HVISUALOBJ hCanvas) { - if (m_PieceMassArr.GetSize() < 1) { - return NULL; - } - return (FX_POSITION)1; -} -FDE_HVISUALOBJ CFDE_TxtEdtPage::GetNext(FDE_HVISUALOBJ hCanvas, - FX_POSITION& pos, - IFDE_VisualSet*& pVisualSet) { - if (m_pTextSet == NULL) { - pos = NULL; - return NULL; - } - int32_t nPos = (int32_t)(uintptr_t)pos; - pVisualSet = m_pTextSet; - if (nPos + 1 > m_PieceMassArr.GetSize()) { - pos = NULL; - } else { - pos = (FX_POSITION)(uintptr_t)(nPos + 1); - } - return (FDE_HVISUALOBJ)(m_PieceMassArr.GetPtrAt(nPos - 1)); -} -FDE_HVISUALOBJ CFDE_TxtEdtPage::GetParentCanvas(FDE_HVISUALOBJ hCanvas, - IFDE_VisualSet*& pVisualSet) { - return NULL; -} -FX_WCHAR CFDE_TxtEdtPage::GetChar(void* pIdentity, int32_t index) const { - int32_t nIndex = - m_nPageStart + ((FDE_TEXTEDITPIECE*)pIdentity)->nStart + index; - if (nIndex != m_pIter->GetAt()) { - m_pIter->SetAt(nIndex); - } - FX_WCHAR wChar = m_pIter->GetChar(); - m_pIter->Next(); - return wChar; -} -int32_t CFDE_TxtEdtPage::GetWidth(void* pIdentity, int32_t index) const { - int32_t nWidth = - m_pCharWidth[((FDE_TEXTEDITPIECE*)pIdentity)->nStart + index]; - return nWidth; -} -void CFDE_TxtEdtPage::NormalizePt2Rect(CFX_PointF& ptF, - const CFX_RectF& rtF, - FX_FLOAT fTolerance) const { - if (rtF.Contains(ptF.x, ptF.y)) { - return; - } - if (ptF.x < rtF.left) { - ptF.x = rtF.left; - } else if (ptF.x >= rtF.right()) { - ptF.x = rtF.right() - fTolerance; - } - if (ptF.y < rtF.top) { - ptF.y = rtF.top; - } else if (ptF.y >= rtF.bottom()) { - ptF.y = rtF.bottom() - fTolerance; - } -} diff --git a/xfa/src/fee/fde_txtedtpage.h b/xfa/src/fee/fde_txtedtpage.h deleted file mode 100644 index 2ea0725de5..0000000000 --- a/xfa/src/fee/fde_txtedtpage.h +++ /dev/null @@ -1,168 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FEE_FDE_TXTEDTPAGE_H_ -#define XFA_SRC_FEE_FDE_TXTEDTPAGE_H_ - -#include "core/include/fxcrt/fx_coordinates.h" -#include "core/include/fxcrt/fx_string.h" -#include "xfa/src/fde/fde_visualset.h" -#include "xfa/src/fee/ifde_txtedtpage.h" -#include "xfa/src/fgas/crt/fgas_utils.h" - -class IFX_CharIter; -class CFDE_TxtEdtEngine; -class CFDE_TxtEdtPage; -class CFDE_TxtEdtParag; - -enum FDE_TXTEDT_CHARTYPE { - FDE_TXTEDT_CHARTYPE_Unknown = 0, - FDE_TXTEDT_CHARTYPE_Tab, - FDE_TXTEDT_CHARTYPE_Space, - FDE_TXTEDT_CHARTYPE_Punctuation, - FDE_TXTEDT_CHARTYPE_LineBreak, - FDE_TXTEDT_CHARTYPE_Number, - FDE_TXTEDT_CHARTYPE_Char, - FDE_TXTEDT_CHARTYPE_CJK, -}; - -inline FDE_TXTEDT_CHARTYPE FDE_GetEditSelCharType(FX_WCHAR wChar) { - if (wChar == 0x9) { - return FDE_TXTEDT_CHARTYPE_Tab; - } else if (wChar == 0x20 || wChar == 0xA0) { - return FDE_TXTEDT_CHARTYPE_Space; - } else if (wChar == 0x9 || wChar == 0x20 || wChar == 0xA0 || - (wChar >= L'!' && wChar <= L'/') || - (wChar >= L':' && wChar <= L'@') || - (wChar >= L'[' && wChar <= L'^') || - (wChar >= L'{' && wChar <= L'~') || wChar == 0x60) { - return FDE_TXTEDT_CHARTYPE_Punctuation; - } else if (wChar == 0x0a || wChar == 0x0d) { - return FDE_TXTEDT_CHARTYPE_LineBreak; - } else if (wChar >= '0' && wChar <= '9') { - return FDE_TXTEDT_CHARTYPE_Number; - } else if ((wChar >= 0x2e80 && wChar <= 0x2eff) || - (wChar >= 0x3000 && wChar <= 0x303f) || - (wChar >= 0x31c0 && wChar <= 0x31ef) || - (wChar >= 0x3200 && wChar <= 0x32ff) || - (wChar >= 0x3300 && wChar <= 0x33ff) || - (wChar >= 0x3400 && wChar <= 0x4dbf) || - (wChar >= 0x4e00 && wChar <= 0x9fff) || - (wChar >= 0xf900 && wChar <= 0xfaff) || - (wChar >= 0xfe30 && wChar <= 0xfe4f)) { - return FDE_TXTEDT_CHARTYPE_CJK; - } else { - return FDE_TXTEDT_CHARTYPE_Char; - } -} - -struct FDE_TEXTEDITPIECE { - int32_t nStart; - int32_t nCount; - int32_t nBidiLevel; - CFX_RectF rtPiece; - FX_DWORD dwCharStyles; -}; -typedef CFX_MassArrayTemplate CFDE_TXTEDTPieceMassArray; - -class CFDE_TxtEdtTextSet : public IFDE_TextSet { - public: - CFDE_TxtEdtTextSet(CFDE_TxtEdtPage* pPage); - ~CFDE_TxtEdtTextSet(); - - virtual FDE_VISUALOBJTYPE GetType(); - virtual FX_BOOL GetBBox(FDE_HVISUALOBJ hVisualObj, CFX_RectF& bbox); - virtual FX_BOOL GetMatrix(FDE_HVISUALOBJ hVisualObj, CFX_Matrix& matrix); - virtual FX_BOOL GetRect(FDE_HVISUALOBJ hVisualObj, CFX_RectF& rt); - virtual FX_BOOL GetClip(FDE_HVISUALOBJ hVisualObj, CFX_RectF& rt); - virtual int32_t GetString(FDE_HVISUALOBJ hText, CFX_WideString& wsText); - virtual IFX_Font* GetFont(FDE_HVISUALOBJ hText); - virtual FX_FLOAT GetFontSize(FDE_HVISUALOBJ hText); - virtual FX_ARGB GetFontColor(FDE_HVISUALOBJ hText); - virtual int32_t GetDisplayPos(FDE_HVISUALOBJ hText, - FXTEXT_CHARPOS* pCharPos, - FX_BOOL bCharCode = FALSE, - CFX_WideString* pWSForms = NULL); - virtual int32_t GetCharRects(FDE_HVISUALOBJ hText, CFX_RectFArray& rtArray); - virtual int32_t GetCharRects_Impl(FDE_HVISUALOBJ hText, - CFX_RectFArray& rtArray, - FX_BOOL bBBox = FALSE); - - private: - CFDE_TxtEdtPage* m_pPage; -}; - -class CFDE_TxtEdtPage : public IFDE_TxtEdtPage { - public: - CFDE_TxtEdtPage(IFDE_TxtEdtEngine* pEngine, int32_t nLineIndex); - - // IFDE_TxtEditPage: - void Release() override; - IFDE_TxtEdtEngine* GetEngine() const override; - int32_t GetCharRect(int32_t nIndex, - CFX_RectF& rect, - FX_BOOL bBBox = FALSE) const override; - int32_t GetCharIndex(const CFX_PointF& fPoint, FX_BOOL& bBefore) override; - void CalcRangeRectArray(int32_t nStart, - int32_t nCount, - CFX_RectFArray& RectFArr) const override; - int32_t SelectWord(const CFX_PointF& fPoint, int32_t& nCount) override; - int32_t GetCharStart() const override; - int32_t GetCharCount() const override; - int32_t GetDisplayPos(const CFX_RectF& rtClip, - FXTEXT_CHARPOS*& pCharPos, - CFX_RectF* pBBox) const override; - FX_BOOL IsLoaded(const CFX_RectF* pClipBox) override; - int32_t LoadPage(const CFX_RectF* pClipBox, IFX_Pause* pPause) override; - void UnloadPage(const CFX_RectF* pClipBox) override; - const CFX_RectF& GetContentsBox() override; - - // IFDE_VisualSet: - FDE_VISUALOBJTYPE GetType() override; - FX_BOOL GetBBox(FDE_HVISUALOBJ hVisualObj, CFX_RectF& bbox) override; - FX_BOOL GetMatrix(FDE_HVISUALOBJ hVisualObj, CFX_Matrix& matrix) override; - FX_BOOL GetRect(FDE_HVISUALOBJ hVisualObj, CFX_RectF& rt) override; - FX_BOOL GetClip(FDE_HVISUALOBJ hVisualObj, CFX_RectF& rt) override; - - // IFDE_CanvasSet: - FX_POSITION GetFirstPosition(FDE_HVISUALOBJ hCanvas) override; - FDE_HVISUALOBJ GetNext(FDE_HVISUALOBJ hCanvas, - FX_POSITION& pos, - IFDE_VisualSet*& pVisualSet) override; - FDE_HVISUALOBJ GetParentCanvas(FDE_HVISUALOBJ hCanvas, - IFDE_VisualSet*& pVisualSet) override; - - // IFX_TxtAccess: - FX_WCHAR GetChar(void* pIdentity, int32_t index) const override; - int32_t GetWidth(void* pIdentity, int32_t index) const override; - - protected: - virtual ~CFDE_TxtEdtPage(); - - private: - void NormalizePt2Rect(CFX_PointF& ptF, - const CFX_RectF& rtF, - FX_FLOAT fTolerance) const; - - IFX_CharIter* m_pIter; - CFDE_TxtEdtTextSet* m_pTextSet; - CFDE_TxtEdtEngine* m_pEditEngine; - CFDE_TXTEDTPieceMassArray m_PieceMassArr; - CFDE_TxtEdtParag* m_pBgnParag; - CFDE_TxtEdtParag* m_pEndParag; - int32_t m_nRefCount; - int32_t m_nPageStart; - int32_t m_nCharCount; - int32_t m_nPageIndex; - FX_BOOL m_bLoaded; - CFX_RectF m_rtPage; - CFX_RectF m_rtPageMargin; - CFX_RectF m_rtPageContents; - CFX_RectF m_rtPageCanvas; - int32_t* m_pCharWidth; -}; - -#endif // XFA_SRC_FEE_FDE_TXTEDTPAGE_H_ diff --git a/xfa/src/fee/fde_txtedtparag.cpp b/xfa/src/fee/fde_txtedtparag.cpp deleted file mode 100644 index 32f846b52b..0000000000 --- a/xfa/src/fee/fde_txtedtparag.cpp +++ /dev/null @@ -1,150 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fee/fde_txtedtparag.h" - -#include "xfa/src/fee/fde_txtedtbuf.h" -#include "xfa/src/fee/fde_txtedtengine.h" -#include "xfa/src/fee/fx_wordbreak/fx_wordbreak.h" -#include "xfa/src/fee/ifde_txtedtbuf.h" -#include "xfa/src/fee/ifde_txtedtengine.h" -#include "xfa/src/fgas/layout/fgas_textbreak.h" - -CFDE_TxtEdtParag::CFDE_TxtEdtParag(CFDE_TxtEdtEngine* pEngine) - : m_nCharStart(0), - m_nCharCount(0), - m_nLineCount(0), - m_lpData(NULL), - m_pEngine(pEngine) { - FXSYS_assert(m_pEngine); -} -CFDE_TxtEdtParag::~CFDE_TxtEdtParag() { - if (m_lpData != NULL) { - FX_Free(m_lpData); - } -} -void CFDE_TxtEdtParag::LoadParag() { - if (m_lpData != NULL) { - ((int32_t*)m_lpData)[0]++; - return; - } - IFX_TxtBreak* pTxtBreak = m_pEngine->GetTextBreak(); - IFDE_TxtEdtBuf* pTxtBuf = m_pEngine->GetTextBuf(); - const FDE_TXTEDTPARAMS* pParam = m_pEngine->GetEditParams(); - FX_WCHAR wcAlias = 0; - if (pParam->dwMode & FDE_TEXTEDITMODE_Password) { - wcAlias = m_pEngine->GetAliasChar(); - } - IFX_CharIter* pIter = - new CFDE_TxtEdtBufIter((CFDE_TxtEdtBuf*)pTxtBuf, wcAlias); - pIter->SetAt(m_nCharStart); - int32_t nEndIndex = m_nCharStart + m_nCharCount; - CFX_ArrayTemplate LineBaseArr; - FX_BOOL bReload = FALSE; - FX_DWORD dwBreakStatus = FX_TXTBREAK_None; - do { - if (bReload) { - dwBreakStatus = pTxtBreak->EndBreak(FX_TXTBREAK_ParagraphBreak); - } else { - FX_WCHAR wAppend = pIter->GetChar(); - dwBreakStatus = pTxtBreak->AppendChar(wAppend); - } - if (pIter->GetAt() + 1 == nEndIndex && - dwBreakStatus < FX_TXTBREAK_LineBreak) { - dwBreakStatus = pTxtBreak->EndBreak(FX_TXTBREAK_ParagraphBreak); - } - if (dwBreakStatus > FX_TXTBREAK_PieceBreak) { - int32_t nCount = pTxtBreak->CountBreakPieces(); - int32_t nTotal = 0; - for (int32_t j = 0; j < nCount; j++) { - const CFX_TxtPiece* Piece = pTxtBreak->GetBreakPiece(j); - nTotal += Piece->GetLength(); - } - LineBaseArr.Add(nTotal); - pTxtBreak->ClearBreakPieces(); - } - if ((pIter->GetAt() + 1 == nEndIndex) && - (dwBreakStatus == FX_TXTBREAK_LineBreak)) { - bReload = TRUE; - pIter->Next(TRUE); - } - } while (pIter->Next(FALSE) && (pIter->GetAt() < nEndIndex)); - pIter->Release(); - pTxtBreak->EndBreak(FX_TXTBREAK_ParagraphBreak); - pTxtBreak->ClearBreakPieces(); - int32_t nLineCount = LineBaseArr.GetSize(); - m_nLineCount = nLineCount; - if (m_lpData == NULL) { - m_lpData = FX_Alloc(int32_t, nLineCount + 1); - } else { - m_lpData = FX_Realloc(int32_t, m_lpData, (nLineCount + 1)); - } - int32_t* pIntArr = (int32_t*)m_lpData; - pIntArr[0] = 1; - m_nLineCount = nLineCount; - pIntArr++; - for (int32_t j = 0; j < nLineCount; j++, pIntArr++) { - *pIntArr = LineBaseArr[j]; - } - LineBaseArr.RemoveAll(); -} -void CFDE_TxtEdtParag::UnloadParag() { - FXSYS_assert(m_lpData != NULL); - ((int32_t*)m_lpData)[0]--; - FXSYS_assert(((int32_t*)m_lpData)[0] >= 0); - if (((int32_t*)m_lpData)[0] == 0) { - FX_Free(m_lpData); - m_lpData = NULL; - } -} -void CFDE_TxtEdtParag::CalcLines() { - IFX_TxtBreak* pTxtBreak = m_pEngine->GetTextBreak(); - IFDE_TxtEdtBuf* pTxtBuf = m_pEngine->GetTextBuf(); - IFX_CharIter* pIter = new CFDE_TxtEdtBufIter((CFDE_TxtEdtBuf*)pTxtBuf); - int32_t nCount = 0; - FX_DWORD dwBreakStatus = FX_TXTBREAK_None; - int32_t nEndIndex = m_nCharStart + m_nCharCount; - pIter->SetAt(m_nCharStart); - FX_BOOL bReload = FALSE; - do { - if (bReload) { - dwBreakStatus = pTxtBreak->EndBreak(FX_TXTBREAK_ParagraphBreak); - } else { - FX_WCHAR wAppend = pIter->GetChar(); - dwBreakStatus = pTxtBreak->AppendChar(wAppend); - } - if (pIter->GetAt() + 1 == nEndIndex && - dwBreakStatus < FX_TXTBREAK_LineBreak) { - dwBreakStatus = pTxtBreak->EndBreak(FX_TXTBREAK_ParagraphBreak); - } - if (dwBreakStatus > FX_TXTBREAK_PieceBreak) { - nCount++; - pTxtBreak->ClearBreakPieces(); - } - if ((pIter->GetAt() + 1 == nEndIndex) && - (dwBreakStatus == FX_TXTBREAK_LineBreak)) { - bReload = TRUE; - pIter->Next(TRUE); - } - } while (pIter->Next(FALSE) && (pIter->GetAt() < nEndIndex)); - pIter->Release(); - pTxtBreak->EndBreak(FX_TXTBREAK_ParagraphBreak); - pTxtBreak->ClearBreakPieces(); - m_nLineCount = nCount; -} -void CFDE_TxtEdtParag::GetLineRange(int32_t nLineIndex, - int32_t& nStart, - int32_t& nCount) const { - int32_t* pLineBaseArr = (int32_t*)m_lpData; - FXSYS_assert(nLineIndex < m_nLineCount); - nStart = m_nCharStart; - pLineBaseArr++; - for (int32_t i = 0; i < nLineIndex; i++) { - nStart += *pLineBaseArr; - pLineBaseArr++; - } - nCount = *pLineBaseArr; -} diff --git a/xfa/src/fee/fde_txtedtparag.h b/xfa/src/fee/fde_txtedtparag.h deleted file mode 100644 index 5af04970a1..0000000000 --- a/xfa/src/fee/fde_txtedtparag.h +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FEE_FDE_TXTEDTPARAG_H_ -#define XFA_SRC_FEE_FDE_TXTEDTPARAG_H_ - -#include "xfa/src/fee/ifde_txtedtengine.h" - -class CFDE_TxtEdtEngine; - -class CFDE_TxtEdtParag : public IFDE_TxtEdtParag { - public: - explicit CFDE_TxtEdtParag(CFDE_TxtEdtEngine* pEngine); - ~CFDE_TxtEdtParag(); - - virtual int32_t GetTextLength() const { return m_nCharCount; } - virtual int32_t GetStartIndex() const { return m_nCharStart; } - virtual int32_t CountLines() const { return m_nLineCount; } - virtual void GetLineRange(int32_t nLineIndex, - int32_t& nStart, - int32_t& nCount) const; - void LoadParag(); - void UnloadParag(); - void CalcLines(); - int32_t m_nCharStart; - int32_t m_nCharCount; - int32_t m_nLineCount; - - private: - void* m_lpData; - CFDE_TxtEdtEngine* m_pEngine; -}; - -#endif // XFA_SRC_FEE_FDE_TXTEDTPARAG_H_ diff --git a/xfa/src/fee/fx_wordbreak/fx_wordbreak.h b/xfa/src/fee/fx_wordbreak/fx_wordbreak.h deleted file mode 100644 index f67afb6305..0000000000 --- a/xfa/src/fee/fx_wordbreak/fx_wordbreak.h +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FEE_FX_WORDBREAK_FX_WORDBREAK_H_ -#define XFA_SRC_FEE_FX_WORDBREAK_FX_WORDBREAK_H_ - -#include "core/include/fxcrt/fx_string.h" -#include "core/include/fxcrt/fx_system.h" - -class IFX_CharIter; - -class IFX_WordBreak { - public: - virtual ~IFX_WordBreak() {} - virtual void Release() = 0; - virtual void Attach(IFX_CharIter* pIter) = 0; - virtual void Attach(const CFX_WideString& wsText) = 0; - virtual FX_BOOL Next(FX_BOOL bPrev) = 0; - virtual void SetAt(int32_t nIndex) = 0; - virtual int32_t GetWordPos() const = 0; - virtual int32_t GetWordLength() const = 0; - virtual void GetWord(CFX_WideString& wsWord) const = 0; - virtual FX_BOOL IsEOF(FX_BOOL bTail = TRUE) const = 0; -}; -IFX_WordBreak* FX_WordBreak_Create(); - -#endif // XFA_SRC_FEE_FX_WORDBREAK_FX_WORDBREAK_H_ diff --git a/xfa/src/fee/fx_wordbreak/fx_wordbreak_impl.cpp b/xfa/src/fee/fx_wordbreak/fx_wordbreak_impl.cpp deleted file mode 100644 index 036b4f80fa..0000000000 --- a/xfa/src/fee/fx_wordbreak/fx_wordbreak_impl.cpp +++ /dev/null @@ -1,238 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fee/fx_wordbreak/fx_wordbreak_impl.h" - -FX_WordBreakProp FX_GetWordBreakProperty(FX_WCHAR wcCodePoint) { - FX_DWORD dwProperty = - (FX_DWORD)gs_FX_WordBreak_CodePointProperties[wcCodePoint >> 1]; - return (FX_WordBreakProp)(((wcCodePoint) & 1) ? (dwProperty & 0x0F) - : (dwProperty >> 4)); -} -CFX_CharIter::CFX_CharIter(const CFX_WideString& wsText) - : m_wsText(wsText), m_nIndex(0) { - FXSYS_assert(!wsText.IsEmpty()); -} -CFX_CharIter::~CFX_CharIter() {} -void CFX_CharIter::Release() { - delete this; -} -FX_BOOL CFX_CharIter::Next(FX_BOOL bPrev) { - if (bPrev) { - if (m_nIndex <= 0) { - return FALSE; - } - m_nIndex--; - } else { - if (m_nIndex + 1 >= m_wsText.GetLength()) { - return FALSE; - } - m_nIndex++; - } - return TRUE; -} -FX_WCHAR CFX_CharIter::GetChar() { - return m_wsText.GetAt(m_nIndex); -} -void CFX_CharIter::SetAt(int32_t nIndex) { - if (nIndex < 0 || nIndex >= m_wsText.GetLength()) { - return; - } - m_nIndex = nIndex; -} -int32_t CFX_CharIter::GetAt() const { - return m_nIndex; -} -FX_BOOL CFX_CharIter::IsEOF(FX_BOOL bTail) const { - return bTail ? (m_nIndex + 1 == m_wsText.GetLength()) : (m_nIndex == 0); -} -IFX_CharIter* CFX_CharIter::Clone() { - CFX_CharIter* pIter = new CFX_CharIter(m_wsText); - pIter->m_nIndex = m_nIndex; - return pIter; -} -CFX_WordBreak::CFX_WordBreak() : m_pPreIter(NULL), m_pCurIter(NULL) {} -CFX_WordBreak::~CFX_WordBreak() { - if (m_pPreIter) { - m_pPreIter->Release(); - m_pPreIter = NULL; - } - if (m_pCurIter) { - m_pCurIter->Release(); - m_pCurIter = NULL; - } -} -void CFX_WordBreak::Release() { - delete this; -} -void CFX_WordBreak::Attach(IFX_CharIter* pIter) { - FXSYS_assert(pIter); - m_pCurIter = pIter; -} -void CFX_WordBreak::Attach(const CFX_WideString& wsText) { - m_pCurIter = new CFX_CharIter(wsText); -} -FX_BOOL CFX_WordBreak::Next(FX_BOOL bPrev) { - IFX_CharIter* pIter = bPrev ? m_pPreIter->Clone() : m_pCurIter->Clone(); - if (pIter->IsEOF(!bPrev)) { - return FALSE; - } - pIter->Next(bPrev); - if (!FindNextBreakPos(pIter, bPrev, TRUE)) { - pIter->Release(); - return FALSE; - } - if (bPrev) { - m_pCurIter->Release(); - m_pCurIter = m_pPreIter; - m_pCurIter->Next(TRUE); - m_pPreIter = pIter; - } else { - m_pPreIter->Release(); - m_pPreIter = m_pCurIter; - m_pPreIter->Next(); - m_pCurIter = pIter; - } - return TRUE; -} -void CFX_WordBreak::SetAt(int32_t nIndex) { - if (m_pPreIter) { - m_pPreIter->Release(); - m_pPreIter = NULL; - } - m_pCurIter->SetAt(nIndex); - FindNextBreakPos(m_pCurIter, TRUE, FALSE); - m_pPreIter = m_pCurIter; - m_pCurIter = m_pPreIter->Clone(); - FindNextBreakPos(m_pCurIter, FALSE, FALSE); -} -int32_t CFX_WordBreak::GetWordPos() const { - return m_pPreIter->GetAt(); -} -int32_t CFX_WordBreak::GetWordLength() const { - return m_pCurIter->GetAt() - m_pPreIter->GetAt() + 1; -} -void CFX_WordBreak::GetWord(CFX_WideString& wsWord) const { - int32_t nWordLength = GetWordLength(); - if (nWordLength <= 0) { - return; - } - FX_WCHAR* lpBuf = wsWord.GetBuffer(nWordLength); - IFX_CharIter* pTempIter = m_pPreIter->Clone(); - int32_t i = 0; - while (pTempIter->GetAt() <= m_pCurIter->GetAt()) { - lpBuf[i++] = pTempIter->GetChar(); - FX_BOOL bEnd = pTempIter->Next(); - if (!bEnd) { - break; - } - } - pTempIter->Release(); - wsWord.ReleaseBuffer(nWordLength); -} -FX_BOOL CFX_WordBreak::IsEOF(FX_BOOL bTail) const { - return m_pCurIter->IsEOF(bTail); -} -FX_BOOL CFX_WordBreak::FindNextBreakPos(IFX_CharIter* pIter, - FX_BOOL bPrev, - FX_BOOL bFromNext) { - FX_WordBreakProp ePreType = FX_WordBreakProp_None; - FX_WordBreakProp eCurType = FX_WordBreakProp_None; - FX_WordBreakProp eNextType = FX_WordBreakProp_None; - if (pIter->IsEOF(!bPrev)) { - return TRUE; - } - if (!(bFromNext || pIter->IsEOF(bPrev))) { - pIter->Next(!bPrev); - FX_WCHAR wcTemp = pIter->GetChar(); - ePreType = FX_GetWordBreakProperty(wcTemp); - pIter->Next(bPrev); - } - FX_WCHAR wcTemp = pIter->GetChar(); - eCurType = FX_GetWordBreakProperty(wcTemp); - FX_BOOL bFirst = TRUE; - do { - pIter->Next(bPrev); - FX_WCHAR wcTemp = pIter->GetChar(); - eNextType = FX_GetWordBreakProperty(wcTemp); - FX_WORD wBreak = - gs_FX_WordBreak_Table[eCurType] & ((FX_WORD)(1 << eNextType)); - if (wBreak) { - if (pIter->IsEOF(!bPrev)) { - pIter->Next(!bPrev); - return TRUE; - } - if (bFirst) { - int32_t nFlags = 0; - if (eCurType == FX_WordBreakProp_MidLetter) { - if (eNextType == FX_WordBreakProp_ALetter) { - nFlags = 1; - } - } else if (eCurType == FX_WordBreakProp_MidNum) { - if (eNextType == FX_WordBreakProp_Numberic) { - nFlags = 2; - } - } else if (eCurType == FX_WordBreakProp_MidNumLet) { - if (eNextType == FX_WordBreakProp_ALetter) { - nFlags = 1; - } else if (eNextType == FX_WordBreakProp_Numberic) { - nFlags = 2; - } - } - if (nFlags > 0) { - FXSYS_assert(nFlags <= 2); - if (!((nFlags == 1 && ePreType == FX_WordBreakProp_ALetter) || - (nFlags == 2 && ePreType == FX_WordBreakProp_Numberic))) { - pIter->Next(!bPrev); - return TRUE; - } - pIter->Next(bPrev); - wBreak = FALSE; - } - bFirst = FALSE; - } - if (wBreak) { - int32_t nFlags = 0; - if (eNextType == FX_WordBreakProp_MidLetter) { - if (eCurType == FX_WordBreakProp_ALetter) { - nFlags = 1; - } - } else if (eNextType == FX_WordBreakProp_MidNum) { - if (eCurType == FX_WordBreakProp_Numberic) { - nFlags = 2; - } - } else if (eNextType == FX_WordBreakProp_MidNumLet) { - if (eCurType == FX_WordBreakProp_ALetter) { - nFlags = 1; - } else if (eCurType == FX_WordBreakProp_Numberic) { - nFlags = 2; - } - } - if (nFlags <= 0) { - pIter->Next(!bPrev); - return TRUE; - } - FXSYS_assert(nFlags <= 2); - pIter->Next(bPrev); - wcTemp = pIter->GetChar(); - eNextType = (FX_WordBreakProp)FX_GetWordBreakProperty(wcTemp); - if (!((nFlags == 1 && eNextType == FX_WordBreakProp_ALetter) || - (nFlags == 2 && eNextType == FX_WordBreakProp_Numberic))) { - pIter->Next(!bPrev); - pIter->Next(!bPrev); - return TRUE; - } - } - } - ePreType = eCurType; - eCurType = eNextType; - bFirst = FALSE; - } while (!pIter->IsEOF(!bPrev)); - return TRUE; -} -IFX_WordBreak* FX_WordBreak_Create() { - return new CFX_WordBreak; -} diff --git a/xfa/src/fee/fx_wordbreak/fx_wordbreak_impl.h b/xfa/src/fee/fx_wordbreak/fx_wordbreak_impl.h deleted file mode 100644 index 253d83b9dc..0000000000 --- a/xfa/src/fee/fx_wordbreak/fx_wordbreak_impl.h +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FEE_FX_WORDBREAK_FX_WORDBREAK_IMPL_H_ -#define XFA_SRC_FEE_FX_WORDBREAK_FX_WORDBREAK_IMPL_H_ - -#include - -#include "core/include/fxcrt/fx_string.h" -#include "core/include/fxcrt/fx_system.h" -#include "xfa/src/fee/fx_wordbreak/fx_wordbreak.h" -#include "xfa/src/fee/fx_wordbreak/fx_wordbreak_impl.h" -#include "xfa/src/fee/ifde_txtedtengine.h" - -extern const FX_WORD gs_FX_WordBreak_Table[16]; -extern const uint8_t gs_FX_WordBreak_CodePointProperties[(0xFFFF - 1) / 2 + 1]; -enum FX_WordBreakProp { - FX_WordBreakProp_None = 0, - FX_WordBreakProp_CR, - FX_WordBreakProp_LF, - FX_WordBreakProp_NewLine, - FX_WordBreakProp_Extend, - FX_WordBreakProp_Format, - FX_WordBreakProp_KataKana, - FX_WordBreakProp_ALetter, - FX_WordBreakProp_MidLetter, - FX_WordBreakProp_MidNum, - FX_WordBreakProp_MidNumLet, - FX_WordBreakProp_Numberic, - FX_WordBreakProp_ExtendNumLet, -}; -FX_WordBreakProp FX_GetWordBreakProperty(FX_WCHAR wcCodePoint); -class CFX_CharIter : public IFX_CharIter { - public: - CFX_CharIter(const CFX_WideString& wsText); - virtual void Release(); - virtual FX_BOOL Next(FX_BOOL bPrev = FALSE); - virtual FX_WCHAR GetChar(); - virtual void SetAt(int32_t nIndex); - virtual int32_t GetAt() const; - virtual FX_BOOL IsEOF(FX_BOOL bTail = TRUE) const; - virtual IFX_CharIter* Clone(); - - protected: - ~CFX_CharIter(); - - private: - const CFX_WideString& m_wsText; - int32_t m_nIndex; -}; -class CFX_WordBreak : public IFX_WordBreak { - public: - CFX_WordBreak(); - virtual void Release(); - virtual void Attach(IFX_CharIter* pIter); - virtual void Attach(const CFX_WideString& wsText); - virtual FX_BOOL Next(FX_BOOL bPrev); - virtual void SetAt(int32_t nIndex); - virtual int32_t GetWordPos() const; - virtual int32_t GetWordLength() const; - virtual void GetWord(CFX_WideString& wsWord) const; - virtual FX_BOOL IsEOF(FX_BOOL bTail) const; - - protected: - ~CFX_WordBreak(); - FX_BOOL FindNextBreakPos(IFX_CharIter* pIter, - FX_BOOL bPrev, - FX_BOOL bFromNext = TRUE); - - private: - IFX_CharIter* m_pPreIter; - IFX_CharIter* m_pCurIter; -}; - -#endif // XFA_SRC_FEE_FX_WORDBREAK_FX_WORDBREAK_IMPL_H_ diff --git a/xfa/src/fee/fx_wordbreak/fx_wordbreakdata.cpp b/xfa/src/fee/fx_wordbreak/fx_wordbreakdata.cpp deleted file mode 100644 index ea1a31fb3c..0000000000 --- a/xfa/src/fee/fx_wordbreak/fx_wordbreakdata.cpp +++ /dev/null @@ -1,2748 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fee/fx_wordbreak/fx_wordbreak_impl.h" - -const FX_WORD gs_FX_WordBreak_Table[16] = { - 0xFFFF, 0xFFF9, 0xFFFB, 0xFFFB, 0xFFFB, 0xFFFB, 0xEFBB, 0xE77B, - 0xFFFB, 0xFFFB, 0xFFFB, 0xE77B, 0xE73B, 0xFFFB, 0xFFFB, 0xFFFB, -}; - -const uint8_t gs_FX_WordBreak_CodePointProperties[(0xFFFF - 1) / 2 + 1] = - // NOLINTNEXTLINE - { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x90, 0xA0, - 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0x89, 0x00, 0x00, 0x07, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x70, 0x00, 0x0C, - 0x07, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x70, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x70, 0x05, 0x00, 0x00, 0x00, 0x07, 0x08, 0x00, 0x70, 0x00, 0x00, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x70, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x70, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x00, 0x00, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0x77, 0x70, 0x00, - 0x00, 0x00, 0x70, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, - 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, - 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, - 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, - 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x77, 0x77, 0x70, 0x77, - 0x00, 0x77, 0x77, 0x90, 0x00, 0x00, 0x00, 0x78, 0x77, 0x70, 0x70, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x07, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x07, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x04, 0x44, 0x44, 0x44, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x07, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x70, - 0x07, 0x00, 0x00, 0x00, 0x07, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x09, 0x00, 0x00, 0x00, 0x04, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, - 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, - 0x44, 0x44, 0x44, 0x04, 0x04, 0x40, 0x44, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x70, 0x00, 0x00, 0x77, 0x77, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x55, 0x55, 0x00, 0x00, 0x00, 0x00, 0x99, 0x00, 0x44, 0x44, 0x44, 0x44, - 0x44, 0x40, 0x00, 0x00, 0x07, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x74, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x40, - 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0x0B, 0x90, 0x77, 0x47, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x07, 0x44, - 0x44, 0x44, 0x45, 0x44, 0x44, 0x44, 0x47, 0x74, 0x40, 0x44, 0x44, 0x77, - 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0x77, 0x70, 0x07, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x05, 0x74, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x44, 0x44, 0x44, 0x44, - 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x40, 0x07, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x44, 0x44, 0x44, 0x44, 0x44, - 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xBB, 0xBB, 0xBB, 0xBB, - 0xBB, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x74, 0x44, 0x44, 0x44, 0x44, 0x77, 0x00, - 0x90, 0x70, 0x00, 0x00, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x44, 0x44, 0x74, 0x44, 0x44, 0x44, 0x44, 0x74, 0x44, - 0x74, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x44, 0x44, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x00, 0x47, 0x44, 0x44, 0x44, 0x44, 0x44, - 0x44, 0x44, 0x44, 0x40, 0x74, 0x44, 0x44, 0x00, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x44, 0x00, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0x07, 0x70, 0x00, 0x00, - 0x07, 0x77, 0x77, 0x77, 0x04, 0x44, 0x07, 0x77, 0x77, 0x77, 0x70, 0x07, - 0x70, 0x07, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x70, 0x77, 0x77, 0x77, 0x70, 0x70, 0x00, 0x77, 0x77, 0x00, 0x47, 0x44, - 0x44, 0x44, 0x40, 0x04, 0x40, 0x04, 0x44, 0x70, 0x00, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x77, 0x07, 0x77, 0x44, 0x00, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, - 0x77, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x44, 0x07, 0x77, - 0x77, 0x70, 0x00, 0x07, 0x70, 0x07, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x70, 0x77, 0x77, 0x77, 0x70, 0x77, 0x07, 0x70, - 0x77, 0x00, 0x40, 0x44, 0x44, 0x40, 0x00, 0x04, 0x40, 0x04, 0x44, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x07, 0x77, 0x70, 0x70, 0x00, 0x00, 0x00, 0xBB, - 0xBB, 0xBB, 0xBB, 0xBB, 0x44, 0x77, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x04, 0x44, 0x07, 0x77, 0x77, 0x77, 0x77, 0x07, 0x77, 0x07, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x70, 0x77, 0x77, 0x77, - 0x70, 0x77, 0x07, 0x77, 0x77, 0x00, 0x47, 0x44, 0x44, 0x44, 0x44, 0x04, - 0x44, 0x04, 0x44, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x77, 0x44, 0x00, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x04, 0x44, 0x07, 0x77, 0x77, 0x77, 0x70, 0x07, - 0x70, 0x07, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x70, 0x77, 0x77, 0x77, 0x70, 0x77, 0x07, 0x77, 0x77, 0x00, 0x47, 0x44, - 0x44, 0x44, 0x40, 0x04, 0x40, 0x04, 0x44, 0x00, 0x00, 0x00, 0x00, 0x44, - 0x00, 0x00, 0x77, 0x07, 0x77, 0x44, 0x00, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, - 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x07, 0x77, - 0x77, 0x70, 0x00, 0x77, 0x70, 0x77, 0x77, 0x00, 0x07, 0x70, 0x70, 0x77, - 0x00, 0x07, 0x70, 0x00, 0x77, 0x70, 0x00, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x00, 0x00, 0x44, 0x44, 0x40, 0x00, 0x44, 0x40, 0x44, 0x44, 0x00, - 0x70, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xBB, - 0xBB, 0xBB, 0xBB, 0xBB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x04, 0x44, 0x07, 0x77, 0x77, 0x77, 0x70, 0x77, 0x70, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x70, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x07, 0x77, 0x77, 0x00, 0x07, 0x44, 0x44, 0x44, 0x40, 0x44, - 0x40, 0x44, 0x44, 0x00, 0x00, 0x00, 0x04, 0x40, 0x77, 0x00, 0x00, 0x00, - 0x77, 0x44, 0x00, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x07, 0x77, 0x77, 0x77, 0x70, 0x77, - 0x70, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x70, 0x77, 0x77, 0x77, 0x77, 0x77, 0x07, 0x77, 0x77, 0x00, 0x47, 0x44, - 0x44, 0x44, 0x40, 0x44, 0x40, 0x44, 0x44, 0x00, 0x00, 0x00, 0x04, 0x40, - 0x00, 0x00, 0x00, 0x70, 0x77, 0x44, 0x00, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x07, 0x77, - 0x77, 0x77, 0x70, 0x77, 0x70, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x70, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x00, 0x07, 0x44, 0x44, 0x44, 0x40, 0x44, 0x40, 0x44, 0x44, 0x00, - 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x77, 0x44, 0x00, 0xBB, - 0xBB, 0xBB, 0xBB, 0xBB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0x77, 0x77, - 0x00, 0x44, 0x07, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x70, - 0x00, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x07, 0x77, 0x77, 0x77, 0x77, 0x07, 0x00, 0x77, 0x77, 0x77, 0x70, - 0x00, 0x40, 0x00, 0x04, 0x44, 0x44, 0x40, 0x40, 0x44, 0x44, 0x44, 0x44, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x44, 0x44, 0x44, 0x40, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x04, 0x44, 0x44, 0x44, 0x40, 0xBB, 0xBB, 0xBB, 0xBB, - 0xBB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x44, 0x44, - 0x44, 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x44, 0x00, - 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x44, 0x00, 0x00, 0x00, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x04, 0x04, 0x04, 0x00, 0x00, 0x44, 0x77, 0x77, 0x77, 0x77, - 0x07, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x70, 0x00, 0x04, 0x44, 0x44, 0x44, - 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x40, 0x44, 0x77, 0x77, 0x00, 0x00, - 0x44, 0x44, 0x44, 0x44, 0x04, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, - 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x40, 0x00, - 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, - 0x44, 0x44, 0x44, 0x40, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x44, 0x40, 0x44, 0x40, 0x04, - 0x44, 0x44, 0x44, 0x00, 0x04, 0x44, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x04, 0xBB, 0xBB, 0xBB, 0xBB, - 0xBB, 0x44, 0x44, 0x00, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x70, 0x70, 0x00, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x70, 0x77, 0x77, 0x00, 0x77, 0x77, 0x77, 0x70, 0x70, 0x77, 0x77, 0x00, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x70, 0x77, 0x77, 0x00, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x70, 0x77, 0x77, 0x00, 0x77, 0x77, 0x77, 0x70, - 0x70, 0x77, 0x77, 0x00, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x70, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x70, 0x77, 0x77, 0x00, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x70, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x70, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x07, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x70, 0x07, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x07, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x70, 0x00, 0x00, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x70, 0x00, 0x77, 0x70, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x70, 0x77, - 0x77, 0x44, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x44, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x44, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x70, 0x77, - 0x70, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x44, - 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, - 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0xBB, 0xBB, 0xBB, 0xBB, - 0xBB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x44, 0x00, 0xBB, 0xBB, 0xBB, 0xBB, - 0xBB, 0x00, 0x00, 0x00, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x00, 0x00, 0x00, 0x00, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x74, 0x70, 0x00, 0x00, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x70, 0x00, - 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x00, 0x00, 0x44, 0x44, 0x44, 0x44, - 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x40, 0x00, 0x00, 0x00, - 0x44, 0x00, 0x00, 0x00, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xB0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x74, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x44, - 0x44, 0x44, 0x44, 0x40, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, - 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x40, 0x04, 0xBB, 0xBB, 0xBB, 0xBB, - 0xBB, 0x00, 0x00, 0x00, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x44, 0x44, 0x47, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x47, 0x77, - 0x77, 0x77, 0x00, 0x00, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x44, 0x44, 0x44, 0x44, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x44, 0x47, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x74, 0x44, 0x44, 0x44, - 0x44, 0x40, 0x00, 0x77, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, - 0x00, 0x00, 0x00, 0x00, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0x00, 0x07, 0x77, - 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x44, 0x40, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, - 0x44, 0x44, 0x44, 0x44, 0x47, 0x77, 0x74, 0x77, 0x77, 0x40, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, - 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x40, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x44, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x00, 0x77, 0x77, 0x77, 0x00, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x00, 0x77, 0x77, 0x77, 0x00, - 0x77, 0x77, 0x77, 0x77, 0x07, 0x07, 0x07, 0x07, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x00, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x70, 0x77, 0x77, 0x77, 0x70, 0x70, 0x00, 0x77, 0x70, 0x77, - 0x77, 0x77, 0x70, 0x00, 0x77, 0x77, 0x00, 0x77, 0x77, 0x77, 0x00, 0x00, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x70, 0x00, 0x00, 0x77, 0x70, 0x77, - 0x77, 0x77, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x55, - 0x00, 0x00, 0x00, 0x00, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0x08, - 0x33, 0x55, 0x55, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, - 0xC0, 0x00, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x50, 0x00, 0x00, 0x55, 0x55, 0x55, - 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x77, 0x77, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, - 0x44, 0x44, 0x44, 0x44, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x70, 0x00, 0x07, 0x00, 0x77, 0x77, 0x77, 0x77, 0x77, 0x07, 0x00, - 0x07, 0x77, 0x77, 0x00, 0x00, 0x00, 0x70, 0x70, 0x70, 0x77, 0x77, 0x07, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x00, 0x77, 0x77, 0x00, 0x00, 0x07, 0x77, - 0x77, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x70, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x70, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x70, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x70, 0x00, - 0x00, 0x07, 0x77, 0x74, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x70, 0x00, 0x00, 0x00, 0x00, 0x77, 0x77, 0x77, 0x70, - 0x77, 0x77, 0x77, 0x70, 0x77, 0x77, 0x77, 0x70, 0x77, 0x77, 0x77, 0x70, - 0x77, 0x77, 0x77, 0x70, 0x77, 0x77, 0x77, 0x70, 0x77, 0x77, 0x77, 0x70, - 0x77, 0x77, 0x77, 0x70, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, - 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x44, - 0x06, 0x66, 0x66, 0x00, 0x00, 0x07, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x04, 0x46, 0x60, 0x00, 0x66, 0x66, 0x66, 0x66, - 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, - 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, - 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, - 0x66, 0x66, 0x66, 0x66, 0x66, 0x60, 0x66, 0x66, 0x00, 0x00, 0x07, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x00, 0x07, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x70, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, - 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, - 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x60, - 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, - 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, - 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, - 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x00, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x70, 0x00, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0x77, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x00, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x74, 0x44, 0x40, 0x00, 0x00, 0x00, 0x00, 0x44, 0x07, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x00, 0x00, 0x00, 0x00, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x44, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x07, 0x77, 0x77, 0x77, 0x77, 0x00, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x70, 0x07, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x77, 0x77, - 0x77, 0x47, 0x77, 0x47, 0x77, 0x74, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x74, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x44, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, - 0x44, 0x44, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0xBB, 0xBB, 0xBB, 0xBB, - 0xBB, 0x00, 0x00, 0x00, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, - 0x44, 0x77, 0x77, 0x77, 0x00, 0x07, 0x00, 0x00, 0xBB, 0xBB, 0xBB, 0xBB, - 0xBB, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x44, 0x44, 0x44, 0x44, 0x00, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x74, 0x44, 0x44, 0x44, 0x44, - 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x70, 0x00, - 0x44, 0x44, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x74, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x40, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x07, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x74, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x40, 0x00, 0x00, 0x00, 0x00, - 0x77, 0x74, 0x77, 0x77, 0x77, 0x77, 0x44, 0x00, 0xBB, 0xBB, 0xBB, 0xBB, - 0xBB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x44, 0x40, 0x04, - 0x40, 0x00, 0x00, 0x44, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x74, 0x44, 0x44, 0x44, 0x40, 0x44, 0x00, - 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0x00, 0x00, 0x00, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x70, 0x00, 0x07, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x77, 0x77, 0x77, 0x70, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x07, 0x77, 0x77, 0x00, 0x00, 0x07, 0x47, 0x77, 0x77, 0x77, 0x77, - 0x70, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x70, 0x77, 0x77, 0x70, 0x70, - 0x77, 0x07, 0x70, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x07, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x00, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x00, 0x00, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, - 0x90, 0x08, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x44, 0x40, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0xCC, 0x90, 0xA0, 0x98, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x77, 0x77, 0x70, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x70, 0x05, - 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x90, 0xA0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x89, 0x00, 0x00, 0x07, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x70, 0x00, 0x0C, 0x07, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x70, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, - 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, - 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x44, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x70, - 0x00, 0x77, 0x77, 0x77, 0x00, 0x77, 0x77, 0x77, 0x00, 0x77, 0x77, 0x77, - 0x00, 0x77, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x05, 0x55, 0x00, 0x00, -}; diff --git a/xfa/src/fee/ifde_txtedtbuf.h b/xfa/src/fee/ifde_txtedtbuf.h deleted file mode 100644 index 8cc7dfeab5..0000000000 --- a/xfa/src/fee/ifde_txtedtbuf.h +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FEE_IFDE_TXTEDTBUF_H_ -#define XFA_SRC_FEE_IFDE_TXTEDTBUF_H_ - -#include "core/include/fxcrt/fx_basic.h" - -#define FDE_DEFCHUNKLENGTH (1024) - -class IFDE_TxtEdtBuf { - public: - virtual ~IFDE_TxtEdtBuf() {} - virtual void Release() = 0; - - virtual FX_BOOL SetChunkSize(int32_t nChunkSize) = 0; - virtual int32_t GetChunkSize() const = 0; - virtual int32_t GetTextLength() const = 0; - virtual void SetText(const CFX_WideString& wsText) = 0; - virtual void GetText(CFX_WideString& wsText) const = 0; - virtual FX_WCHAR GetCharByIndex(int32_t nIndex) const = 0; - virtual void GetRange(CFX_WideString& wsText, - int32_t nBegin, - int32_t nCount = -1) const = 0; - - virtual void Insert(int32_t nPos, - const FX_WCHAR* lpText, - int32_t nLength = 1) = 0; - virtual void Delete(int32_t nIndex, int32_t nLength = 1) = 0; - - virtual void Clear(FX_BOOL bRelease = TRUE) = 0; - - virtual FX_BOOL Optimize(IFX_Pause* pPause = NULL) = 0; -}; - -#endif // XFA_SRC_FEE_IFDE_TXTEDTBUF_H_ diff --git a/xfa/src/fee/ifde_txtedtengine.h b/xfa/src/fee/ifde_txtedtengine.h deleted file mode 100644 index f49e086768..0000000000 --- a/xfa/src/fee/ifde_txtedtengine.h +++ /dev/null @@ -1,258 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FEE_IFDE_TXTEDTENGINE_H_ -#define XFA_SRC_FEE_IFDE_TXTEDTENGINE_H_ - -#include "core/include/fxge/fx_dib.h" -#include "xfa/src/fgas/font/fgas_font.h" - -class IFDE_TxtEdtPage; -class IFDE_TxtEdtEngine; -class IFDE_TxtEdtEventSink; -class IFDE_TxtEdtParag; - -typedef struct FDE_HTXTEDTFIND_ { void* pData; } * FDE_HTXTEDTFIND; - -#define FDE_TXTEDT_FIND_FLAGS_Prev (0L << 0) -#define FDE_TXTEDT_FIND_FLAGS_Next (1L << 0) -#define FDE_TXTEDT_FIND_FLAGS_WholeWord (1L << 1) -#define FDE_TXTEDT_FIND_FLAGS_NoCase (1L << 2) - -#define FDE_TEXTEDITMODE_MultiLines (1L << 0) -#define FDE_TEXTEDITMODE_AutoLineWrap (1L << 1) -#define FDE_TEXTEDITMODE_ReadOnly (1L << 2) -#define FDE_TEXTEDITMODE_LimitArea_Vert (1L << 3) -#define FDE_TEXTEDITMODE_LimitArea_Horz (1L << 4) -#define FDE_TEXTEDITMODE_NoRedoUndo (1L << 5) -#define FDE_TEXTEDITMODE_FIELD_TAB (1L << 6) -#define FDE_TEXTEDITMODE_FIELD_AUTO (1L << 7) -#define FDE_TEXTEDITMODE_Validate (1L << 8) -#define FDE_TEXTEDITMODE_Password (1L << 9) - -#define FDE_TEXTEDITALIGN_Left (0L << 0) -#define FDE_TEXTEDITALIGN_Center (1L << 0) -#define FDE_TEXTEDITALIGN_Right (2L << 0) -#define FDE_TEXTEDITALIGN_Normal (1L << 3) -#define FDE_TEXTEDITALIGN_Justified (1L << 4) -#define FDE_TEXTEDITALIGN_Distributed (1L << 5) - -#define FDE_TEXTEDITLAYOUT_DocVertical (1L << 0) -#define FDE_TEXTEDITLAYOUT_CharVertial (1L << 1) -#define FDE_TEXTEDITLAYOUT_LineReserve (1L << 2) -#define FDE_TEXTEDITLAYOUT_RTL (1L << 3) -#define FDE_TEXTEDITLAYOUT_CombText (1L << 4) -#define FDE_TEXTEDITLAYOUT_ExpandTab (1L << 5) -#define FDE_TEXTEDITLAYOUT_ArabicContext (1L << 6) -#define FDE_TEXTEDITLAYOUT_ArabicShapes (1L << 7) -#define FDE_TEXTEDITLAYOUT_LastLineHeight (1L << 8) - -enum FDE_TXTEDTMOVECARET { - MC_MoveNone = 0, - MC_Left, - MC_Right, - MC_Up, - MC_Down, - MC_WordBackward, - MC_WordForward, - MC_LineStart, - MC_LineEnd, - MC_ParagStart, - MC_ParagEnd, - MC_PageUp, - MC_PageDown, - MC_Home, - MC_End, -}; -enum FDE_TXTEDT_MODIFY_RET { - FDE_TXTEDT_MODIFY_RET_F_Tab = -6, - FDE_TXTEDT_MODIFY_RET_F_Locked = -5, - FDE_TXTEDT_MODIFY_RET_F_Invalidate = -4, - FDE_TXTEDT_MODIFY_RET_F_Boundary = -3, - FDE_TXTEDT_MODIFY_RET_F_Full = -2, - FDE_TXTEDT_MODIFY_RET_F_Normal = -1, - FDE_TXTEDT_MODIFY_RET_S_Normal = 0, - FDE_TXTEDT_MODIFY_RET_S_Full = 1, - FDE_TXTEDT_MODIFY_RET_S_Part = 2, - FDE_TXTEDT_MODIFY_RET_S_Empty = 3, - FDE_TXTEDT_MODIFY_RET_T_Tab = 4, -}; -enum FDE_TXTEDIT_LINEEND { - FDE_TXTEDIT_LINEEND_Auto, - FDE_TXTEDIT_LINEEND_CRLF, - FDE_TXTEDIT_LINEEND_CR, - FDE_TXTEDIT_LINEEND_LF, -}; -struct _FDE_TXTEDTPARAMS { - _FDE_TXTEDTPARAMS() - : fPlateWidth(0), - fPlateHeight(0), - nLineCount(0), - dwLayoutStyles(0), - dwAlignment(0), - dwMode(0), - pFont(NULL), - fFontSize(10.0f), - dwFontColor(0xff000000), - fLineSpace(10.0f), - fTabWidth(36), - bTabEquidistant(FALSE), - wDefChar(0xFEFF), - wLineBreakChar('\n'), - nCharRotation(0), - nLineEnd(0), - nHorzScale(100), - fCharSpace(0), - pEventSink(NULL) {} - FX_FLOAT fPlateWidth; - FX_FLOAT fPlateHeight; - int32_t nLineCount; - FX_DWORD dwLayoutStyles; - FX_DWORD dwAlignment; - FX_DWORD dwMode; - IFX_Font* pFont; - FX_FLOAT fFontSize; - FX_ARGB dwFontColor; - FX_FLOAT fLineSpace; - FX_FLOAT fTabWidth; - FX_BOOL bTabEquidistant; - FX_WCHAR wDefChar; - FX_WCHAR wLineBreakChar; - int32_t nCharRotation; - int32_t nLineEnd; - int32_t nHorzScale; - FX_FLOAT fCharSpace; - IFDE_TxtEdtEventSink* pEventSink; -}; -typedef _FDE_TXTEDTPARAMS FDE_TXTEDTPARAMS; -typedef _FDE_TXTEDTPARAMS* FDE_LPTXTEDTPARAMS; -enum FDE_TXTEDT_TEXTCHANGE_TYPE { - FDE_TXTEDT_TEXTCHANGE_TYPE_Insert = 0, - FDE_TXTEDT_TEXTCHANGE_TYPE_Delete, - FDE_TXTEDT_TEXTCHANGE_TYPE_Replace, -}; -struct _FDE_TXTEDT_TEXTCHANGE_INFO { - int32_t nChangeType; - CFX_WideString wsInsert; - CFX_WideString wsDelete; - CFX_WideString wsPrevText; -}; -typedef _FDE_TXTEDT_TEXTCHANGE_INFO FDE_TXTEDT_TEXTCHANGE_INFO; -typedef _FDE_TXTEDT_TEXTCHANGE_INFO* FDE_LPTXTEDT_TEXTCHANGE_INFO; -class IFDE_TxtEdtEventSink { - public: - virtual ~IFDE_TxtEdtEventSink() {} - virtual void On_CaretChanged(IFDE_TxtEdtEngine* pEdit, - int32_t nPage, - FX_BOOL bVisible = TRUE) = 0; - virtual void On_TextChanged(IFDE_TxtEdtEngine* pEdit, - FDE_TXTEDT_TEXTCHANGE_INFO& ChangeInfo) = 0; - virtual void On_PageCountChanged(IFDE_TxtEdtEngine* pEdit) = 0; - virtual void On_SelChanged(IFDE_TxtEdtEngine* pEdit) = 0; - virtual FX_BOOL On_PageLoad(IFDE_TxtEdtEngine* pEdit, - int32_t nPageIndex, - int32_t nPurpose) = 0; - virtual FX_BOOL On_PageUnload(IFDE_TxtEdtEngine* pEdit, - int32_t nPageIndex, - int32_t nPurpose) = 0; - virtual FX_BOOL On_PageChange(IFDE_TxtEdtEngine* pEdit, - int32_t nPageIndex) = 0; - virtual void On_AddDoRecord(IFDE_TxtEdtEngine* pEdit, - const CFX_ByteStringC& bsDoRecord) = 0; - virtual FX_BOOL On_ValidateField(IFDE_TxtEdtEngine* pEdit, - int32_t nBlockIndex, - int32_t nFieldIndex, - const CFX_WideString& wsFieldText, - int32_t nCharIndex) = 0; - virtual FX_BOOL On_ValidateBlock(IFDE_TxtEdtEngine* pEdit, - int32_t nBlockIndex) = 0; - virtual FX_BOOL On_GetBlockFormatText(IFDE_TxtEdtEngine* pEdit, - int32_t nBlockIndex, - CFX_WideString& wsBlockText) = 0; - virtual FX_BOOL On_Validate(IFDE_TxtEdtEngine* pEdit, - CFX_WideString& wsText) = 0; -}; -class IFX_CharIter { - public: - virtual ~IFX_CharIter() {} - virtual void Release() = 0; - virtual FX_BOOL Next(FX_BOOL bPrev = FALSE) = 0; - virtual FX_WCHAR GetChar() = 0; - virtual void SetAt(int32_t nIndex) = 0; - virtual int32_t GetAt() const = 0; - virtual FX_BOOL IsEOF(FX_BOOL bTail = TRUE) const = 0; - virtual IFX_CharIter* Clone() = 0; -}; -class IFDE_TxtEdtEngine { - public: - static IFDE_TxtEdtEngine* Create(); - - virtual ~IFDE_TxtEdtEngine() {} - virtual void Release() = 0; - virtual void SetEditParams(const FDE_TXTEDTPARAMS& params) = 0; - virtual const FDE_TXTEDTPARAMS* GetEditParams() const = 0; - - virtual int32_t CountPages() const = 0; - virtual IFDE_TxtEdtPage* GetPage(int32_t nIndex) = 0; - virtual FX_BOOL SetBufChunkSize(int32_t nChunkSize) = 0; - virtual void SetTextByStream(IFX_Stream* pStream) = 0; - virtual void SetText(const CFX_WideString& wsText) = 0; - virtual int32_t GetTextLength() const = 0; - virtual void GetText(CFX_WideString& wsText, - int32_t nStart, - int32_t nCount = -1) = 0; - virtual void ClearText() = 0; - - virtual int32_t GetCaretRect(CFX_RectF& rtCaret) const = 0; - virtual int32_t GetCaretPos() const = 0; - virtual int32_t SetCaretPos(int32_t nIndex, FX_BOOL bBefore = TRUE) = 0; - virtual int32_t MoveCaretPos(FDE_TXTEDTMOVECARET eMoveCaret, - FX_BOOL bShift = FALSE, - FX_BOOL bCtrl = FALSE) = 0; - - virtual void Lock() = 0; - virtual void Unlock() = 0; - virtual FX_BOOL IsLocked() const = 0; - - virtual int32_t Insert(int32_t nStart, - const FX_WCHAR* lpText, - int32_t nLength) = 0; - virtual int32_t Delete(int32_t nStart, FX_BOOL bBackspace = FALSE) = 0; - virtual int32_t DeleteRange(int32_t nStart, int32_t nCount = -1) = 0; - virtual int32_t Replace(int32_t nStart, - int32_t nLength, - const CFX_WideString& wsReplace) = 0; - virtual void SetLimit(int32_t nLimit) = 0; - virtual void SetAliasChar(FX_WCHAR wAlias) = 0; - virtual void AddSelRange(int32_t nStart, int32_t nCount = -1) = 0; - virtual int32_t CountSelRanges() = 0; - virtual int32_t GetSelRange(int32_t nIndex, int32_t& nStart) = 0; - virtual void ClearSelection() = 0; - - virtual FX_BOOL Redo(const CFX_ByteStringC& bsRedo) = 0; - virtual FX_BOOL Undo(const CFX_ByteStringC& bsUndo) = 0; - - virtual int32_t StartLayout() = 0; - virtual int32_t DoLayout(IFX_Pause* pPause) = 0; - virtual void EndLayout() = 0; - - virtual FX_BOOL Optimize(IFX_Pause* pPause = NULL) = 0; - virtual int32_t CountParags() const = 0; - virtual IFDE_TxtEdtParag* GetParag(int32_t nParagIndex) const = 0; - virtual IFX_CharIter* CreateCharIter() = 0; -}; -class IFDE_TxtEdtParag { - public: - virtual ~IFDE_TxtEdtParag() {} - virtual int32_t GetTextLength() const = 0; - virtual int32_t GetStartIndex() const = 0; - virtual int32_t CountLines() const = 0; - virtual void GetLineRange(int32_t nLineIndex, - int32_t& nStart, - int32_t& nCount) const = 0; -}; - -#endif // XFA_SRC_FEE_IFDE_TXTEDTENGINE_H_ diff --git a/xfa/src/fee/ifde_txtedtpage.h b/xfa/src/fee/ifde_txtedtpage.h deleted file mode 100644 index f76498d7ed..0000000000 --- a/xfa/src/fee/ifde_txtedtpage.h +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FEE_IFDE_TXTEDTPAGE_H_ -#define XFA_SRC_FEE_IFDE_TXTEDTPAGE_H_ - -#include "core/include/fxge/fx_ge.h" -#include "xfa/src/fde/fde_visualset.h" -#include "xfa/src/fgas/layout/fgas_textbreak.h" - -class IFDE_TxtEdtEngine; -class IFDE_TxtEdtPage : public IFDE_CanvasSet, public IFX_TxtAccess { - public: - static IFDE_TxtEdtPage* Create(IFDE_TxtEdtEngine* pEngine, int32_t nIndex); - - virtual void Release() = 0; - - virtual IFDE_TxtEdtEngine* GetEngine() const = 0; - virtual int32_t GetCharRect(int32_t nIndex, - CFX_RectF& rect, - FX_BOOL bBBox = FALSE) const = 0; - virtual int32_t GetCharIndex(const CFX_PointF& fPoint, FX_BOOL& bBefore) = 0; - virtual void CalcRangeRectArray(int32_t nStart, - int32_t nCount, - CFX_RectFArray& RectFArr) const = 0; - virtual int32_t SelectWord(const CFX_PointF& fPoint, int32_t& nCount) = 0; - virtual int32_t GetCharStart() const = 0; - virtual int32_t GetCharCount() const = 0; - - virtual int32_t GetDisplayPos(const CFX_RectF& rtClip, - FXTEXT_CHARPOS*& pCharPos, - CFX_RectF* pBBox) const = 0; - virtual FX_BOOL IsLoaded(const CFX_RectF* pClipBox) = 0; - virtual int32_t LoadPage(const CFX_RectF* pClipBox, IFX_Pause* pPause) = 0; - virtual void UnloadPage(const CFX_RectF* pClipBox) = 0; - virtual const CFX_RectF& GetContentsBox() = 0; -}; - -#endif // XFA_SRC_FEE_IFDE_TXTEDTPAGE_H_ diff --git a/xfa/src/fgas/crt/fgas_algorithm.cpp b/xfa/src/fgas/crt/fgas_algorithm.cpp deleted file mode 100644 index 60b43ac886..0000000000 --- a/xfa/src/fgas/crt/fgas_algorithm.cpp +++ /dev/null @@ -1,306 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fgas/crt/fgas_algorithm.h" - -#include "core/include/fxcrt/fx_basic.h" - -#ifdef __cplusplus -extern "C" { -#endif - -static const FX_CHAR g_FXBase64EncoderMap[64] = { - 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', - 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', - 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', - 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', - '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/', -}; - -struct FX_BASE64DATA { - FX_DWORD data1 : 2; - FX_DWORD data2 : 6; - FX_DWORD data3 : 4; - FX_DWORD data4 : 4; - FX_DWORD data5 : 6; - FX_DWORD data6 : 2; - FX_DWORD data7 : 8; -}; - -static void FX_Base64EncodePiece(const FX_BASE64DATA& src, - int32_t iBytes, - FX_CHAR dst[4]) { - dst[0] = g_FXBase64EncoderMap[src.data2]; - FX_DWORD b = src.data1 << 4; - if (iBytes > 1) { - b |= src.data4; - } - dst[1] = g_FXBase64EncoderMap[b]; - if (iBytes > 1) { - b = src.data3 << 2; - if (iBytes > 2) { - b |= src.data6; - } - dst[2] = g_FXBase64EncoderMap[b]; - if (iBytes > 2) { - dst[3] = g_FXBase64EncoderMap[src.data5]; - } else { - dst[3] = '='; - } - } else { - dst[2] = dst[3] = '='; - } -} -int32_t FX_Base64EncodeA(const uint8_t* pSrc, int32_t iSrcLen, FX_CHAR* pDst) { - FXSYS_assert(pSrc != NULL); - if (iSrcLen < 1) { - return 0; - } - if (pDst == NULL) { - int32_t iDstLen = iSrcLen / 3 * 4; - if ((iSrcLen % 3) != 0) { - iDstLen += 4; - } - return iDstLen; - } - FX_BASE64DATA srcData; - int32_t iBytes = 3; - FX_CHAR* pDstEnd = pDst; - while (iSrcLen > 0) { - if (iSrcLen > 2) { - ((uint8_t*)&srcData)[0] = *pSrc++; - ((uint8_t*)&srcData)[1] = *pSrc++; - ((uint8_t*)&srcData)[2] = *pSrc++; - iSrcLen -= 3; - } else { - *((FX_DWORD*)&srcData) = 0; - ((uint8_t*)&srcData)[0] = *pSrc++; - if (iSrcLen > 1) { - ((uint8_t*)&srcData)[1] = *pSrc++; - } - iBytes = iSrcLen; - iSrcLen = 0; - } - FX_Base64EncodePiece(srcData, iBytes, pDstEnd); - pDstEnd += 4; - } - return pDstEnd - pDst; -} - -static const uint8_t g_FXBase64DecoderMap[256] = { - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3E, 0xFF, 0xFF, 0xFF, 0x3F, - 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, - 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, - 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, - 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, - 0x31, 0x32, 0x33, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, -}; -static void FX_Base64DecodePiece(const FX_CHAR src[4], - int32_t iChars, - FX_BASE64DATA& dst, - int32_t& iBytes) { - FXSYS_assert(iChars > 0 && iChars < 5); - iBytes = 1; - dst.data2 = g_FXBase64DecoderMap[(uint8_t)src[0]]; - if (iChars > 1) { - uint8_t b = g_FXBase64DecoderMap[(uint8_t)src[1]]; - dst.data1 = b >> 4; - dst.data4 = b; - if (iChars > 2) { - iBytes = 2; - b = g_FXBase64DecoderMap[(uint8_t)src[2]]; - dst.data3 = b >> 2; - dst.data6 = b; - if (iChars > 3) { - iBytes = 3; - dst.data5 = g_FXBase64DecoderMap[(uint8_t)src[3]]; - } else { - dst.data5 = 0; - } - } else { - dst.data3 = 0; - } - } else { - dst.data1 = 0; - } -} -int32_t FX_Base64DecodeA(const FX_CHAR* pSrc, int32_t iSrcLen, uint8_t* pDst) { - FXSYS_assert(pSrc != NULL); - if (iSrcLen < 1) { - return 0; - } - while (iSrcLen > 0 && pSrc[iSrcLen - 1] == '=') { - iSrcLen--; - } - if (iSrcLen < 1) { - return 0; - } - if (pDst == NULL) { - int32_t iDstLen = iSrcLen / 4 * 3; - iSrcLen %= 4; - if (iSrcLen == 1) { - iDstLen += 1; - } else if (iSrcLen == 2) { - iDstLen += 1; - } else if (iSrcLen == 3) { - iDstLen += 2; - } - return iDstLen; - } - FX_CHAR srcData[4]; - FX_BASE64DATA dstData; - int32_t iChars = 4, iBytes; - uint8_t* pDstEnd = pDst; - while (iSrcLen > 0) { - if (iSrcLen > 3) { - *((FX_DWORD*)srcData) = *((FX_DWORD*)pSrc); - pSrc += 4; - iSrcLen -= 4; - } else { - *((FX_DWORD*)&dstData) = 0; - *((FX_DWORD*)srcData) = 0; - srcData[0] = *pSrc++; - if (iSrcLen > 1) { - srcData[1] = *pSrc++; - } - if (iSrcLen > 2) { - srcData[2] = *pSrc++; - } - iChars = iSrcLen; - iSrcLen = 0; - } - FX_Base64DecodePiece(srcData, iChars, dstData, iBytes); - *pDstEnd++ = ((uint8_t*)&dstData)[0]; - if (iBytes > 1) { - *pDstEnd++ = ((uint8_t*)&dstData)[1]; - } - if (iBytes > 2) { - *pDstEnd++ = ((uint8_t*)&dstData)[2]; - } - } - return pDstEnd - pDst; -} -int32_t FX_Base64DecodeW(const FX_WCHAR* pSrc, int32_t iSrcLen, uint8_t* pDst) { - FXSYS_assert(pSrc != NULL); - if (iSrcLen < 1) { - return 0; - } - while (iSrcLen > 0 && pSrc[iSrcLen - 1] == '=') { - iSrcLen--; - } - if (iSrcLen < 1) { - return 0; - } - if (pDst == NULL) { - int32_t iDstLen = iSrcLen / 4 * 3; - iSrcLen %= 4; - if (iSrcLen == 1) { - iDstLen += 1; - } else if (iSrcLen == 2) { - iDstLen += 1; - } else if (iSrcLen == 3) { - iDstLen += 2; - } - return iDstLen; - } - FX_CHAR srcData[4]; - FX_BASE64DATA dstData; - int32_t iChars = 4, iBytes; - uint8_t* pDstEnd = pDst; - while (iSrcLen > 0) { - if (iSrcLen > 3) { - srcData[0] = (FX_CHAR)*pSrc++; - srcData[1] = (FX_CHAR)*pSrc++; - srcData[2] = (FX_CHAR)*pSrc++; - srcData[3] = (FX_CHAR)*pSrc++; - iSrcLen -= 4; - } else { - *((FX_DWORD*)&dstData) = 0; - *((FX_DWORD*)srcData) = 0; - srcData[0] = (FX_CHAR)*pSrc++; - if (iSrcLen > 1) { - srcData[1] = (FX_CHAR)*pSrc++; - } - if (iSrcLen > 2) { - srcData[2] = (FX_CHAR)*pSrc++; - } - iChars = iSrcLen; - iSrcLen = 0; - } - FX_Base64DecodePiece(srcData, iChars, dstData, iBytes); - *pDstEnd++ = ((uint8_t*)&dstData)[0]; - if (iBytes > 1) { - *pDstEnd++ = ((uint8_t*)&dstData)[1]; - } - if (iBytes > 2) { - *pDstEnd++ = ((uint8_t*)&dstData)[2]; - } - } - return pDstEnd - pDst; -} - -static const uint8_t g_FXHex2DecMap[256] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, - 0, 0, 0, 0, 0, 10, 11, 12, 13, 14, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 11, 12, - 13, 14, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -}; -uint8_t FX_Hex2Dec(uint8_t hexHigh, uint8_t hexLow) { - return (g_FXHex2DecMap[hexHigh] << 4) + g_FXHex2DecMap[hexLow]; -} -int32_t FX_SeparateStringW(const FX_WCHAR* pStr, - int32_t iStrLen, - FX_WCHAR delimiter, - CFX_WideStringArray& pieces) { - if (pStr == NULL) { - return 0; - } - if (iStrLen < 0) { - iStrLen = FXSYS_wcslen(pStr); - } - const FX_WCHAR* pToken = pStr; - const FX_WCHAR* pEnd = pStr + iStrLen; - while (TRUE) { - if (pStr >= pEnd || delimiter == *pStr) { - CFX_WideString sub(pToken, pStr - pToken); - pieces.Add(sub); - pToken = pStr + 1; - if (pStr >= pEnd) { - break; - } - } - pStr++; - } - return pieces.GetSize(); -} -#ifdef __cplusplus -} -#endif diff --git a/xfa/src/fgas/crt/fgas_algorithm.h b/xfa/src/fgas/crt/fgas_algorithm.h deleted file mode 100644 index f819716820..0000000000 --- a/xfa/src/fgas/crt/fgas_algorithm.h +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FGAS_CRT_FGAS_ALGORITHM_H_ -#define XFA_SRC_FGAS_CRT_FGAS_ALGORITHM_H_ - -#include - -#include "core/include/fxcrt/fx_basic.h" - -#ifdef __cplusplus -extern "C" { -#endif - -int32_t FX_Base64EncodeA(const uint8_t* pSrc, int32_t iSrcLen, FX_CHAR* pDst); -int32_t FX_Base64DecodeA(const FX_CHAR* pSrc, int32_t iSrcLen, uint8_t* pDst); -int32_t FX_Base64DecodeW(const FX_WCHAR* pSrc, int32_t iSrcLen, uint8_t* pDst); -uint8_t FX_Hex2Dec(uint8_t hexHigh, uint8_t hexLow); -int32_t FX_SeparateStringW(const FX_WCHAR* pStr, - int32_t iStrLen, - FX_WCHAR delimiter, - CFX_WideStringArray& pieces); -#ifdef __cplusplus -}; -#endif - -template -class CFX_DSPATemplate { - public: - int32_t Lookup(const baseType& find, const baseType* pArray, int32_t iCount) { - FXSYS_assert(pArray != NULL); - if (iCount < 1) { - return -1; - } - int32_t iStart = 0, iEnd = iCount - 1, iMid; - do { - iMid = (iStart + iEnd) / 2; - const baseType& v = pArray[iMid]; - if (find == v) { - return iMid; - } else if (find < v) { - iEnd = iMid - 1; - } else { - iStart = iMid + 1; - } - } while (iStart <= iEnd); - return -1; - } -}; - -#endif // XFA_SRC_FGAS_CRT_FGAS_ALGORITHM_H_ diff --git a/xfa/src/fgas/crt/fgas_codepage.cpp b/xfa/src/fgas/crt/fgas_codepage.cpp deleted file mode 100644 index 622c4174bc..0000000000 --- a/xfa/src/fgas/crt/fgas_codepage.cpp +++ /dev/null @@ -1,343 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "core/include/fxcrt/fx_ext.h" -#include "xfa/src/fgas/crt/fgas_codepage.h" -#include "xfa/src/fgas/crt/fgas_language.h" - -static const FX_CHARSET_MAP g_FXCharset2CodePageTable[] = { - {0, 1252}, {1, 0}, {2, 42}, {77, 10000}, {78, 10001}, - {79, 10003}, {80, 10008}, {81, 10002}, {83, 10005}, {84, 10004}, - {85, 10006}, {86, 10081}, {87, 10021}, {88, 10029}, {89, 10007}, - {128, 932}, {129, 949}, {130, 1361}, {134, 936}, {136, 950}, - {161, 1253}, {162, 1254}, {163, 1258}, {177, 1255}, {178, 1256}, - {186, 1257}, {204, 1251}, {222, 874}, {238, 1250}, {254, 437}, - {255, 850}, -}; -FX_WORD FX_GetCodePageFromCharset(uint8_t charset) { - int32_t iEnd = sizeof(g_FXCharset2CodePageTable) / sizeof(FX_CHARSET_MAP) - 1; - FXSYS_assert(iEnd >= 0); - int32_t iStart = 0, iMid; - do { - iMid = (iStart + iEnd) / 2; - const FX_CHARSET_MAP& cp = g_FXCharset2CodePageTable[iMid]; - if (charset == cp.charset) { - return cp.codepage; - } else if (charset < cp.charset) { - iEnd = iMid - 1; - } else { - iStart = iMid + 1; - } - } while (iStart <= iEnd); - return 0xFFFF; -} -static const FX_CHARSET_MAP g_FXCodepage2CharsetTable[] = { - {1, 0}, {2, 42}, {254, 437}, {255, 850}, {222, 874}, - {128, 932}, {134, 936}, {129, 949}, {136, 950}, {238, 1250}, - {204, 1251}, {0, 1252}, {161, 1253}, {162, 1254}, {177, 1255}, - {178, 1256}, {186, 1257}, {163, 1258}, {130, 1361}, {77, 10000}, - {78, 10001}, {79, 10003}, {80, 10008}, {81, 10002}, {83, 10005}, - {84, 10004}, {85, 10006}, {86, 10081}, {87, 10021}, {88, 10029}, - {89, 10007}, -}; -FX_WORD FX_GetCharsetFromCodePage(FX_WORD codepage) { - int32_t iEnd = sizeof(g_FXCodepage2CharsetTable) / sizeof(FX_CHARSET_MAP) - 1; - FXSYS_assert(iEnd >= 0); - int32_t iStart = 0, iMid; - do { - iMid = (iStart + iEnd) / 2; - const FX_CHARSET_MAP& cp = g_FXCodepage2CharsetTable[iMid]; - if (codepage == cp.codepage) { - return cp.charset; - } else if (codepage < cp.codepage) { - iEnd = iMid - 1; - } else { - iStart = iMid + 1; - } - } while (iStart <= iEnd); - return 0xFFFF; -} -const FX_LANG2CPMAP g_FXLang2CodepageTable[] = { - {FX_LANG_Arabic_SaudiArabia, FX_CODEPAGE_MSWin_Arabic}, - {FX_LANG_Bulgarian_Bulgaria, FX_CODEPAGE_MSWin_Cyrillic}, - {FX_LANG_Catalan_Catalan, FX_CODEPAGE_MSWin_WesternEuropean}, - {FX_LANG_Chinese_Taiwan, FX_CODEPAGE_ChineseTraditional}, - {FX_LANG_CzechRepublic, FX_CODEPAGE_MSWin_EasternEuropean}, - {FX_LANG_Danish_Denmark, FX_CODEPAGE_MSWin_WesternEuropean}, - {FX_LANG_German_Germany, FX_CODEPAGE_MSWin_WesternEuropean}, - {FX_LANG_Greek_Greece, FX_CODEPAGE_MSWin_Greek}, - {FX_LANG_English_UnitedStates, FX_CODEPAGE_MSWin_WesternEuropean}, - {FX_LANG_Spanish_TraditionalSort, FX_CODEPAGE_MSWin_WesternEuropean}, - {FX_LANG_Finnish_Finland, FX_CODEPAGE_MSWin_WesternEuropean}, - {FX_LANG_French_France, FX_CODEPAGE_MSWin_WesternEuropean}, - {FX_LANG_Hebrew_Israel, FX_CODEPAGE_MSWin_Hebrew}, - {FX_LANG_Hungarian_Hungary, FX_CODEPAGE_MSWin_EasternEuropean}, - {FX_LANG_Icelandic_Iceland, FX_CODEPAGE_MSWin_WesternEuropean}, - {FX_LANG_Italian_Italy, FX_CODEPAGE_MSWin_WesternEuropean}, - {FX_LANG_Japanese_Japan, FX_CODEPAGE_ShiftJIS}, - {FX_LANG_Korean_Korea, FX_CODEPAGE_Korean}, - {FX_LANG_Dutch_Netherlands, FX_CODEPAGE_MSWin_WesternEuropean}, - {FX_LANG_Norwegian_Bokmal, FX_CODEPAGE_MSWin_WesternEuropean}, - {FX_LANG_Polish_Poland, FX_CODEPAGE_MSWin_EasternEuropean}, - {FX_LANG_Portuguese_Brazil, FX_CODEPAGE_MSWin_WesternEuropean}, - {FX_LANG_Romanian_Romania, FX_CODEPAGE_MSWin_EasternEuropean}, - {FX_LANG_Russian_Russia, FX_CODEPAGE_MSWin_Cyrillic}, - {FX_LANG_Croatian_Croatia, FX_CODEPAGE_MSWin_EasternEuropean}, - {FX_LANG_Slovak_Slovakia, FX_CODEPAGE_MSWin_EasternEuropean}, - {FX_LANG_Albanian_Albania, FX_CODEPAGE_MSWin_EasternEuropean}, - {FX_LANG_Swedish_Sweden, FX_CODEPAGE_MSWin_WesternEuropean}, - {FX_LANG_Thai_Thailand, FX_CODEPAGE_MSDOS_Thai}, - {FX_LANG_Turkish_Turkey, FX_CODEPAGE_MSWin_Turkish}, - {FX_LANG_Urdu_Pakistan, FX_CODEPAGE_MSWin_Arabic}, - {FX_LANG_Indonesian_Indonesia, FX_CODEPAGE_MSWin_WesternEuropean}, - {FX_LANG_Ukrainian_Ukraine, FX_CODEPAGE_MSWin_Cyrillic}, - {FX_LANG_Belarusian_Belarus, FX_CODEPAGE_MSWin_Cyrillic}, - {FX_LANG_Slovenian_Slovenia, FX_CODEPAGE_MSWin_EasternEuropean}, - {FX_LANG_Estonian_Estonia, FX_CODEPAGE_MSWin_Baltic}, - {FX_LANG_Latvian_Latvia, FX_CODEPAGE_MSWin_Baltic}, - {FX_LANG_Lithuanian_Lithuania, FX_CODEPAGE_MSWin_Baltic}, - {FX_LANG_Persian, FX_CODEPAGE_MSWin_Arabic}, - {FX_LANG_Vietnamese_Vietnam, FX_CODEPAGE_MSWin_Vietnamese}, - {FX_LANG_Armenian_Armenia, FX_CODEPAGE_DefANSI}, - {FX_LANG_Azerbaijan_Latin, FX_CODEPAGE_MSWin_Turkish}, - {FX_LANG_Basque_Basque, FX_CODEPAGE_MSWin_WesternEuropean}, - {FX_LANG_Macedonian, FX_CODEPAGE_MSWin_Cyrillic}, - {FX_LANG_Afrikaans_SouthAfrica, FX_CODEPAGE_MSWin_WesternEuropean}, - {FX_LANG_Georgian_Georgia, FX_CODEPAGE_DefANSI}, - {FX_LANG_Faroese_FaroeIslands, FX_CODEPAGE_MSWin_WesternEuropean}, - {FX_LANG_Hindi_India, FX_CODEPAGE_DefANSI}, - {FX_LANG_Malay_Malaysia, FX_CODEPAGE_MSWin_WesternEuropean}, - {FX_LANG_Kazakh_Kazakhstan, FX_CODEPAGE_MSWin_Cyrillic}, - {FX_LANG_Kyrgyz_Kyrgyzstan, FX_CODEPAGE_MSWin_Cyrillic}, - {FX_LANG_Kiswahili_Kenya, FX_CODEPAGE_MSWin_WesternEuropean}, - {FX_LANG_Uzbek_LatinUzbekistan, FX_CODEPAGE_MSWin_Turkish}, - {FX_LANG_Tatar_Russia, FX_CODEPAGE_MSWin_Cyrillic}, - {FX_LANG_Punjabi_India, FX_CODEPAGE_DefANSI}, - {FX_LANG_Gujarati_India, FX_CODEPAGE_DefANSI}, - {FX_LANG_Tamil_India, FX_CODEPAGE_DefANSI}, - {FX_LANG_Telugu_India, FX_CODEPAGE_DefANSI}, - {FX_LANG_Kannada_India, FX_CODEPAGE_DefANSI}, - {FX_LANG_Marathi_India, FX_CODEPAGE_DefANSI}, - {FX_LANG_SanskritIndia, FX_CODEPAGE_DefANSI}, - {FX_LANG_Mongolian_CyrillicMongolia, FX_CODEPAGE_MSWin_Cyrillic}, - {FX_LANG_Galician_Galician, FX_CODEPAGE_MSWin_WesternEuropean}, - {FX_LANG_Konkani_India, FX_CODEPAGE_DefANSI}, - {FX_LANG_Syriac_Syria, FX_CODEPAGE_DefANSI}, - {FX_LANG_Divehi_Maldives, FX_CODEPAGE_DefANSI}, - {FX_LANG_Arabic_Iraq, FX_CODEPAGE_MSWin_Arabic}, - {FX_LANG_Chinese_PRC, FX_CODEPAGE_ChineseSimplified}, - {FX_LANG_German_Switzerland, FX_CODEPAGE_MSWin_WesternEuropean}, - {FX_LANG_English_UnitedKingdom, FX_CODEPAGE_MSWin_WesternEuropean}, - {FX_LANG_Spanish_Mexico, FX_CODEPAGE_MSWin_WesternEuropean}, - {FX_LANG_French_Belgium, FX_CODEPAGE_MSWin_WesternEuropean}, - {FX_LANG_Italian_Switzerland, FX_CODEPAGE_MSWin_WesternEuropean}, - {FX_LANG_Dutch_Belgium, FX_CODEPAGE_MSWin_WesternEuropean}, - {FX_LANG_Norwegian_Nynorsk, FX_CODEPAGE_MSWin_WesternEuropean}, - {FX_LANG_Portuguese_Portugal, FX_CODEPAGE_MSWin_WesternEuropean}, - {FX_LANG_SerbianLatin_Serbia, FX_CODEPAGE_MSWin_EasternEuropean}, - {FX_LANG_Swedish_Finland, FX_CODEPAGE_MSWin_WesternEuropean}, - {FX_LANG_Azerbaijan_Cyrillic, FX_CODEPAGE_MSWin_Cyrillic}, - {FX_LANG_Malay_BruneiDarussalam, FX_CODEPAGE_MSWin_WesternEuropean}, - {FX_LANG_Uzbek_CyrillicUzbekistan, FX_CODEPAGE_MSWin_Cyrillic}, - {FX_LANG_Arabic_Egypt, FX_CODEPAGE_MSWin_Arabic}, - {FX_LANG_Chinese_HongKong, FX_CODEPAGE_ChineseTraditional}, - {FX_LANG_German_Austria, FX_CODEPAGE_MSWin_WesternEuropean}, - {FX_LANG_English_Australia, FX_CODEPAGE_MSWin_WesternEuropean}, - {FX_LANG_Spanish_InternationalSort, FX_CODEPAGE_MSWin_WesternEuropean}, - {FX_LANG_French_Canada, FX_CODEPAGE_MSWin_WesternEuropean}, - {FX_LANG_SerbianCyrillic_Serbia, FX_CODEPAGE_MSWin_Cyrillic}, - {FX_LANG_Arabic_Libya, FX_CODEPAGE_MSWin_Arabic}, - {FX_LANG_Chinese_Singapore, FX_CODEPAGE_ChineseSimplified}, - {FX_LANG_German_Luxembourg, FX_CODEPAGE_MSWin_WesternEuropean}, - {FX_LANG_English_Canada, FX_CODEPAGE_MSWin_WesternEuropean}, - {FX_LANG_Spanish_Guatemala, FX_CODEPAGE_MSWin_WesternEuropean}, - {FX_LANG_French_Switzerland, FX_CODEPAGE_MSWin_WesternEuropean}, - {FX_LANG_Arabic_Algeria, FX_CODEPAGE_MSWin_Arabic}, - {FX_LANG_Chinese_Macao, FX_CODEPAGE_ChineseTraditional}, - {FX_LANG_German_Liechtenstein, FX_CODEPAGE_MSWin_WesternEuropean}, - {FX_LANG_English_NewZealand, FX_CODEPAGE_MSWin_WesternEuropean}, - {FX_LANG_Spanish_CostaRica, FX_CODEPAGE_MSWin_WesternEuropean}, - {FX_LANG_French_Luxembourg, FX_CODEPAGE_MSWin_WesternEuropean}, - {FX_LANG_Arabic_Morocco, FX_CODEPAGE_MSWin_Arabic}, - {FX_LANG_English_Ireland, FX_CODEPAGE_MSWin_WesternEuropean}, - {FX_LANG_Spanish_Panama, FX_CODEPAGE_MSWin_WesternEuropean}, - {FX_LANG_French_Monaco, FX_CODEPAGE_MSWin_WesternEuropean}, - {FX_LANG_Arabic_Tunisia, FX_CODEPAGE_MSWin_Arabic}, - {FX_LANG_English_SouthAfrica, FX_CODEPAGE_MSWin_WesternEuropean}, - {FX_LANG_Spanish_DominicanRepublic, FX_CODEPAGE_MSWin_WesternEuropean}, - {FX_LANG_Arabic_Oman, FX_CODEPAGE_MSWin_Arabic}, - {FX_LANG_English_Jamaica, FX_CODEPAGE_MSWin_WesternEuropean}, - {FX_LANG_Spanish_Venezuela, FX_CODEPAGE_MSWin_WesternEuropean}, - {FX_LANG_Arabic_Yemen, FX_CODEPAGE_MSWin_Arabic}, - {FX_LANG_English_Caribbean, FX_CODEPAGE_MSWin_WesternEuropean}, - {FX_LANG_Spanish_Colombia, FX_CODEPAGE_MSWin_WesternEuropean}, - {FX_LANG_Arabic_Syria, FX_CODEPAGE_MSWin_Arabic}, - {FX_LANG_English_Belize, FX_CODEPAGE_MSWin_WesternEuropean}, - {FX_LANG_Spanish_Peru, FX_CODEPAGE_MSWin_WesternEuropean}, - {FX_LANG_Arabic_Jordan, FX_CODEPAGE_MSWin_Arabic}, - {FX_LANG_English_TrinidadTobago, FX_CODEPAGE_MSWin_WesternEuropean}, - {FX_LANG_Spanish_Argentina, FX_CODEPAGE_MSWin_WesternEuropean}, - {FX_LANG_Arabic_Lebanon, FX_CODEPAGE_MSWin_Arabic}, - {FX_LANG_English_Zimbabwe, FX_CODEPAGE_MSWin_WesternEuropean}, - {FX_LANG_Spanish_Ecuador, FX_CODEPAGE_MSWin_WesternEuropean}, - {FX_LANG_Arabic_Kuwait, FX_CODEPAGE_MSWin_Arabic}, - {FX_LANG_English_Philippines, FX_CODEPAGE_MSWin_WesternEuropean}, - {FX_LANG_Spanish_Chile, FX_CODEPAGE_MSWin_WesternEuropean}, - {FX_LANG_Arabic_UAE, FX_CODEPAGE_MSWin_Arabic}, - {FX_LANG_Spanish_Uruguay, FX_CODEPAGE_MSWin_WesternEuropean}, - {FX_LANG_Arabic_Bahrain, FX_CODEPAGE_MSWin_Arabic}, - {FX_LANG_Spanish_Paraguay, FX_CODEPAGE_MSWin_WesternEuropean}, - {FX_LANG_Arabic_Qatar, FX_CODEPAGE_MSWin_Arabic}, - {FX_LANG_Spanish_Bolivia, FX_CODEPAGE_MSWin_WesternEuropean}, - {FX_LANG_Spanish_ElSalvador, FX_CODEPAGE_MSWin_WesternEuropean}, - {FX_LANG_Spanish_Honduras, FX_CODEPAGE_MSWin_WesternEuropean}, - {FX_LANG_Spanish_Nicaragua, FX_CODEPAGE_MSWin_WesternEuropean}, - {FX_LANG_Spanish_PuertoRico, FX_CODEPAGE_MSWin_WesternEuropean}, -}; -FX_WORD FX_GetDefCodePageByLanguage(FX_WORD wLanguage) { - int32_t iEnd = sizeof(g_FXLang2CodepageTable) / sizeof(FX_LANG2CPMAP) - 1; - FXSYS_assert(iEnd >= 0); - int32_t iStart = 0, iMid; - do { - iMid = (iStart + iEnd) / 2; - const FX_LANG2CPMAP& cp = g_FXLang2CodepageTable[iMid]; - if (wLanguage == cp.wLanguage) { - return cp.wCodepage; - } else if (wLanguage < cp.wLanguage) { - iEnd = iMid - 1; - } else { - iStart = iMid + 1; - } - } while (iStart <= iEnd); - return 0xFFFF; -} -static const FX_STR2CPHASH g_FXCPHashTable[] = { - {0xd45, 0x6faf}, {0xd46, 0x6fb0}, {0xd47, 0x6fb1}, - {0xd48, 0x6fb2}, {0xd49, 0x4e6}, {0xd4d, 0x6fbd}, - {0xe9e, 0x4e4}, {0xc998, 0x1b5}, {0x18ef0, 0x3a8}, - {0x19f85, 0x5182}, {0x2e2335, 0x3b6}, {0x325153, 0x5182}, - {0x145bded, 0x2716}, {0x3c9a5f2, 0xc6f3}, {0x4c45f2d, 0x3a4}, - {0x4c45f4e, 0xc431}, {0x58caf51, 0x4e4}, {0x5a5cd7d, 0x3a8}, - {0x5a6c6a7, 0x4e4}, {0x5a6ca0b, 0x1b5}, {0x5a6cd68, 0x307}, - {0x5a6d8d3, 0x4e4}, {0x5a6d948, 0x354}, {0x5a6d96b, 0x362}, - {0x5a6d984, 0x366}, {0x5a90e35, 0x1b5}, {0x5e0cf00, 0x6fb5}, - {0x609c324, 0x551}, {0x617d97f, 0x5182}, {0x6a6fd91, 0xfde8}, - {0x6a6fd92, 0xfde9}, {0x6b102de, 0xcadc}, {0x6b10f48, 0x4e89}, - {0x1020805f, 0x4e4}, {0x10f0524c, 0x6fb5}, {0x11d558fe, 0x6fb0}, - {0x13898d19, 0xc42d}, {0x13898d3a, 0xc431}, {0x138a319e, 0x6fb1}, - {0x14679c09, 0x96c6}, {0x153f0a3d, 0x6fb2}, {0x1576eeb3, 0x4e20}, - {0x169a0ce6, 0xc6f9}, {0x16f3e2dc, 0x6fb3}, {0x18a8bb7a, 0x6fb4}, - {0x1a5d9419, 0x6fb5}, {0x1a847b48, 0x3a8}, {0x1b762419, 0xcec8}, - {0x1b9d7847, 0x475}, {0x1c126cb9, 0x6fb6}, {0x1ccdbc7d, 0x4f42}, - {0x1d330f5f, 0x2714}, {0x1dc74559, 0x4e6}, {0x1edd80da, 0x4e4}, - {0x23e4b03d, 0xfde8}, {0x24f28a16, 0x4f3d}, {0x286e7a32, 0x2715}, - {0x2c7c18ed, 0x3a8}, {0x2e2103b7, 0x2713}, {0x304bf479, 0x6fb4}, - {0x304bf47d, 0x6fb5}, {0x309bb869, 0xfde8}, {0x309bb86a, 0xfde9}, - {0x33664357, 0x3b6}, {0x352d6b49, 0x3a4}, {0x36f5661c, 0x1b5}, - {0x392e8f48, 0xcadc}, {0x3dc7c64c, 0x47c}, {0x3ed2e8e1, 0x4e4}, - {0x3f0c2fea, 0xcaed}, {0x3f0fef8f, 0xc6f2}, {0x3f5e130f, 0x5182}, - {0x47174d1f, 0x3a8}, {0x49686b7b, 0x6fb4}, {0x4b80b0d9, 0x3a4}, - {0x4dcda97a, 0x4e4}, {0x4dcda9b6, 0x4e4}, {0x4e881e6a, 0x5221}, - {0x4ffdf5a1, 0x36a}, {0x4ffdf5a5, 0x6fbd}, {0x5241ce16, 0x4e8b}, - {0x546bab9d, 0x4e4}, {0x54a3d64e, 0x6fb6}, {0x562179bd, 0x5161}, - {0x57c1df15, 0xc6f7}, {0x61ff6e62, 0x4f36}, {0x6359c7d8, 0x4f35}, - {0x63f3c335, 0x3a8}, {0x645a0f78, 0x477}, {0x691ac2fd, 0x275f}, - {0x6dc2eab0, 0x2d0}, {0x6dc2eeef, 0x35e}, {0x6dc2ef10, 0x36a}, - {0x7103138a, 0x47d}, {0x710dfbd0, 0xc6f5}, {0x7319f6cb, 0x36a}, - {0x745096ad, 0x3a8}, {0x74866229, 0x4e8c}, {0x77185fa5, 0x3a8}, - {0x7953f002, 0x6faf}, {0x7953f003, 0x6fb0}, {0x7953f004, 0x6fb1}, - {0x7953f005, 0x6fb2}, {0x7953f006, 0x6fb7}, {0x7953f00a, 0x6fbd}, - {0x7c577571, 0x2761}, {0x7e8c8ff1, 0x479}, {0x8031f47f, 0x3b5}, - {0x8031f481, 0x3b5}, {0x80c4a710, 0x5187}, {0x857c7e14, 0xfde8}, - {0x857c7e15, 0xfde9}, {0x86b59c90, 0x4e4}, {0x86b59c91, 0x6fb0}, - {0x86b59c92, 0x6fb1}, {0x86b59c93, 0x6fb2}, {0x86b59c94, 0x6fb3}, - {0x86b59c95, 0x6fb4}, {0x86b59c96, 0x6fb5}, {0x86b59c97, 0x4e7}, - {0x86b59c98, 0x4e6}, {0x8b4b24ec, 0x5190}, {0x8face362, 0x4e4}, - {0x8ff9ec2a, 0xfde9}, {0x919d3989, 0xcadc}, {0x9967e5ad, 0x4e22}, - {0x99f8b933, 0x6fbd}, {0x9bd2a380, 0x4fc7}, {0x9befad23, 0x4f38}, - {0x9c7ac649, 0x4f3c}, {0xa02468db, 0xdeae}, {0xa02468ec, 0xdeab}, - {0xa024692a, 0xdeaa}, {0xa0246997, 0xdeb2}, {0xa02469ff, 0xdeb0}, - {0xa0246a3d, 0xdeb1}, {0xa0246a8c, 0xdeaf}, {0xa0246a9a, 0xdeb3}, - {0xa0246b16, 0xdeac}, {0xa0246b1a, 0xdead}, {0xa071addc, 0x4b1}, - {0xa38b62dc, 0x474}, {0xa4c09fed, 0x3a8}, {0xa51e86e5, 0x4e7}, - {0xa67ab13e, 0x3a4}, {0xa7414244, 0x51a9}, {0xa9ddbead, 0xc6fb}, - {0xab24ffab, 0x4e8a}, {0xabef8ac4, 0x2710}, {0xabfa20ac, 0x6fb4}, - {0xad36895e, 0x4e2}, {0xad36895f, 0x4e3}, {0xaf310e90, 0x402}, - {0xaf31166f, 0x4e8}, {0xaf7277a5, 0x3b6}, {0xafc0d8b3, 0x96c6}, - {0xb0fd5dba, 0xcae0}, {0xb0fd5e95, 0xcadc}, {0xb1052893, 0x7149}, - {0xb1e98745, 0x36a}, {0xb277e91c, 0x5166}, {0xb2f7eac5, 0xcae0}, - {0xb2f7eba0, 0xcadc}, {0xb2f7ebc1, 0x3b5}, {0xb53fa77d, 0x3a8}, - {0xb6391138, 0x6fb5}, {0xb7358b7f, 0x6fb6}, {0xb8c42b40, 0x4e4}, - {0xb8c42ea4, 0x1b5}, {0xb8c439e7, 0x2e1}, {0xb8c43a61, 0x307}, - {0xb8c43d6c, 0x4e4}, {0xb8c43ddf, 0x352}, {0xb8c43de1, 0x354}, - {0xb8c43de6, 0x359}, {0xb8c43dff, 0x35d}, {0xb8c43e04, 0x362}, - {0xb8c43e07, 0x365}, {0xbcd29a7f, 0x3a8}, {0xbce34e78, 0x5182}, - {0xbce34e7b, 0x556a}, {0xbce81504, 0x3b5}, {0xbd8a4c95, 0x272d}, - {0xbdd89dad, 0x4e4}, {0xbdd89dae, 0x6fb0}, {0xbdd89daf, 0x6fb1}, - {0xbdd89db0, 0x6fb2}, {0xbdd89db1, 0x4e6}, {0xbdd89db5, 0x6fbd}, - {0xc1756e9f, 0x36b}, {0xc7482444, 0x47a}, {0xc9281c18, 0x4e4}, - {0xc9ef95df, 0x47b}, {0xccc9db0d, 0x4e4}, {0xccc9db0e, 0x6fb0}, - {0xcd73425f, 0x3b6}, {0xce38b40b, 0x4b0}, {0xce99e549, 0x25}, - {0xcf598740, 0x4e7}, {0xcf6d6f78, 0x4e4}, {0xcf758df6, 0x3a4}, - {0xd1266e51, 0x6fb5}, {0xd2910213, 0x2718}, {0xd29196bb, 0x2712}, - {0xd3eb2fc2, 0x476}, {0xd442dc2c, 0x4fc4}, {0xd9da4da4, 0x2711}, - {0xdbad2f42, 0x4e4}, {0xdbad2f43, 0x6fb0}, {0xdbad2f44, 0x6fb1}, - {0xdbad2f45, 0x6fb2}, {0xdbad2f46, 0x6fb3}, {0xdbad2f47, 0x6fb4}, - {0xdbad2f48, 0x6fb5}, {0xdbad2f49, 0x6fb6}, {0xdbad2f4a, 0x4e6}, - {0xdc438033, 0x4f31}, {0xdccb439b, 0x477}, {0xdccdc626, 0x3b5}, - {0xdd80a595, 0x4e4}, {0xdd80a596, 0x6fb0}, {0xdd80a59e, 0x6fb1}, - {0xdd80a5b4, 0x6fb2}, {0xdd80a5d9, 0x6fb5}, {0xdd80a5da, 0x6fb4}, - {0xdd80a5fa, 0x6fb6}, {0xdd80a615, 0x6fb3}, {0xdd80a619, 0x4e6}, - {0xdd80a61a, 0x3b5}, {0xdd80c0f8, 0x4e9f}, {0xdf7e46ff, 0x4fc8}, - {0xdf8680fd, 0x556a}, {0xdfb0bd6e, 0xc42d}, {0xdff05486, 0x2c4}, - {0xe3323399, 0x3a4}, {0xe60412dd, 0x3b5}, {0xeee47add, 0x4b0}, - {0xf021a186, 0x4e2}, {0xf021a187, 0x4e3}, {0xf021a188, 0x4e4}, - {0xf021a189, 0x4e5}, {0xf021a18a, 0x4e6}, {0xf021a18b, 0x4e7}, - {0xf021a18c, 0x4e8}, {0xf021a18d, 0x4e9}, {0xf021a18e, 0x4ea}, - {0xf0700456, 0x6fb3}, {0xf274f175, 0x3b5}, {0xf2a9730b, 0x3a8}, - {0xf3d463c2, 0x3a4}, {0xf52a70a3, 0xc42e}, {0xf5693147, 0x6fb3}, - {0xf637e157, 0x478}, {0xfc213f3a, 0x2717}, {0xff654d14, 0x3b5}, -}; -FX_WORD FX_GetCodePageFromStringA(const FX_CHAR* pStr, int32_t iLength) { - FXSYS_assert(pStr != NULL); - if (iLength < 0) { - iLength = FXSYS_strlen(pStr); - } - if (iLength == 0) { - return 0xFFFF; - } - uint32_t uHash = FX_HashCode_String_GetA(pStr, iLength, TRUE); - int32_t iStart = 0, iMid; - int32_t iEnd = sizeof(g_FXCPHashTable) / sizeof(FX_STR2CPHASH) - 1; - FXSYS_assert(iEnd >= 0); - do { - iMid = (iStart + iEnd) / 2; - const FX_STR2CPHASH& cp = g_FXCPHashTable[iMid]; - if (uHash == cp.uHash) { - return (FX_WORD)cp.uCodePage; - } else if (uHash < cp.uHash) { - iEnd = iMid - 1; - } else { - iStart = iMid + 1; - } - } while (iStart <= iEnd); - return 0xFFFF; -} -FX_WORD FX_GetCodePageFormStringW(const FX_WCHAR* pStr, int32_t iLength) { - if (iLength < 0) { - iLength = FXSYS_wcslen(pStr); - } - if (iLength == 0) { - return 0xFFFF; - } - CFX_ByteString csStr; - FX_CHAR* pBuf = csStr.GetBuffer(iLength + 1); - for (int32_t i = 0; i < iLength; ++i) { - *pBuf++ = (FX_CHAR)*pStr++; - } - csStr.ReleaseBuffer(iLength); - return FX_GetCodePageFromStringA(csStr, iLength); -} diff --git a/xfa/src/fgas/crt/fgas_codepage.h b/xfa/src/fgas/crt/fgas_codepage.h deleted file mode 100644 index e9111d1ec4..0000000000 --- a/xfa/src/fgas/crt/fgas_codepage.h +++ /dev/null @@ -1,179 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FGAS_CRT_FGAS_CODEPAGE_H_ -#define XFA_SRC_FGAS_CRT_FGAS_CODEPAGE_H_ - -#include "core/include/fxcrt/fx_basic.h" - -#define FX_CODEPAGE_DefANSI 0 -#define FX_CODEPAGE_DefOEM 1 -#define FX_CODEPAGE_DefMAC 2 -#define FX_CODEPAGE_Thread 3 -#define FX_CODEPAGE_Symbol 42 -#define FX_CODEPAGE_MSDOS_US 437 -#define FX_CODEPAGE_Arabic_ASMO708 708 -#define FX_CODEPAGE_Arabic_ASMO449Plus 709 -#define FX_CODEPAGE_Arabic_Transparent 710 -#define FX_CODEPAGE_Arabic_NafithaEnhanced 711 -#define FX_CODEPAGE_Arabic_TransparentASMO 720 -#define FX_CODEPAGE_MSDOS_Greek1 737 -#define FX_CODEPAGE_MSDOS_Baltic 775 -#define FX_CODEPAGE_MSWin31_WesternEuropean 819 -#define FX_CODEPAGE_MSDOS_WesternEuropean 850 -#define FX_CODEPAGE_MSDOS_EasternEuropean 852 -#define FX_CODEPAGE_MSDOS_Latin3 853 -#define FX_CODEPAGE_MSDOS_Cyrillic 855 -#define FX_CODEPAGE_MSDOS_Turkish 857 -#define FX_CODEPAGE_MSDOS_Latin1Euro 858 -#define FX_CODEPAGE_MSDOS_Portuguese 860 -#define FX_CODEPAGE_MSDOS_Icelandic 861 -#define FX_CODEPAGE_MSDOS_Hebrew 862 -#define FX_CODEPAGE_MSDOS_FrenchCanadian 863 -#define FX_CODEPAGE_MSDOS_Arabic 864 -#define FX_CODEPAGE_MSDOS_Norwegian 865 -#define FX_CODEPAGE_MSDOS_Russian 866 -#define FX_CODEPAGE_MSDOS_Greek2 869 -#define FX_CODEPAGE_MSDOS_Thai 874 -#define FX_CODEPAGE_MSDOS_KamenickyCS 895 -#define FX_CODEPAGE_ShiftJIS 932 -#define FX_CODEPAGE_ChineseSimplified 936 -#define FX_CODEPAGE_Korean 949 -#define FX_CODEPAGE_ChineseTraditional 950 -#define FX_CODEPAGE_UTF16LE 1200 -#define FX_CODEPAGE_UTF16BE 1201 -#define FX_CODEPAGE_MSWin_EasternEuropean 1250 -#define FX_CODEPAGE_MSWin_Cyrillic 1251 -#define FX_CODEPAGE_MSWin_WesternEuropean 1252 -#define FX_CODEPAGE_MSWin_Greek 1253 -#define FX_CODEPAGE_MSWin_Turkish 1254 -#define FX_CODEPAGE_MSWin_Hebrew 1255 -#define FX_CODEPAGE_MSWin_Arabic 1256 -#define FX_CODEPAGE_MSWin_Baltic 1257 -#define FX_CODEPAGE_MSWin_Vietnamese 1258 -#define FX_CODEPAGE_Johab 1361 -#define FX_CODEPAGE_MAC_Roman 10000 -#define FX_CODEPAGE_MAC_ShiftJIS 10001 -#define FX_CODEPAGE_MAC_ChineseTraditional 10002 -#define FX_CODEPAGE_MAC_Korean 10003 -#define FX_CODEPAGE_MAC_Arabic 10004 -#define FX_CODEPAGE_MAC_Hebrew 10005 -#define FX_CODEPAGE_MAC_Greek 10006 -#define FX_CODEPAGE_MAC_Cyrillic 10007 -#define FX_CODEPAGE_MAC_ChineseSimplified 10008 -#define FX_CODEPAGE_MAC_Thai 10021 -#define FX_CODEPAGE_MAC_EasternEuropean 10029 -#define FX_CODEPAGE_MAC_Turkish 10081 -#define FX_CODEPAGE_UTF32LE 12000 -#define FX_CODEPAGE_UTF32BE 12001 -#define FX_CODEPAGE_ISO8859_1 28591 -#define FX_CODEPAGE_ISO8859_2 28592 -#define FX_CODEPAGE_ISO8859_3 28593 -#define FX_CODEPAGE_ISO8859_4 28594 -#define FX_CODEPAGE_ISO8859_5 28595 -#define FX_CODEPAGE_ISO8859_6 28596 -#define FX_CODEPAGE_ISO8859_7 28597 -#define FX_CODEPAGE_ISO8859_8 28598 -#define FX_CODEPAGE_ISO8859_9 28599 -#define FX_CODEPAGE_ISO8859_10 28600 -#define FX_CODEPAGE_ISO8859_11 28601 -#define FX_CODEPAGE_ISO8859_12 28602 -#define FX_CODEPAGE_ISO8859_13 28603 -#define FX_CODEPAGE_ISO8859_14 28604 -#define FX_CODEPAGE_ISO8859_15 28605 -#define FX_CODEPAGE_ISO8859_16 28606 -#define FX_CODEPAGE_ISCII_Devanagari 57002 -#define FX_CODEPAGE_ISCII_Bengali 57003 -#define FX_CODEPAGE_ISCII_Tamil 57004 -#define FX_CODEPAGE_ISCII_Telugu 57005 -#define FX_CODEPAGE_ISCII_Assamese 57006 -#define FX_CODEPAGE_ISCII_Oriya 57007 -#define FX_CODEPAGE_ISCII_Kannada 57008 -#define FX_CODEPAGE_ISCII_Malayalam 57009 -#define FX_CODEPAGE_ISCII_Gujarati 57010 -#define FX_CODEPAGE_ISCII_Punjabi 57011 -#define FX_CODEPAGE_UTF7 65000 -#define FX_CODEPAGE_UTF8 65001 -#define FX_CHARSET_ANSI 0 -#define FX_CHARSET_Default 1 -#define FX_CHARSET_Symbol 2 -#define FX_CHARSET_MAC_Roman 77 -#define FX_CHARSET_MAC_ShiftJIS 78 -#define FX_CHARSET_MAC_Korean 79 -#define FX_CHARSET_MAC_ChineseSimplified 80 -#define FX_CHARSET_MAC_ChineseTriditional 81 -#define FX_CHARSET_MAC_Johab 82 -#define FX_CHARSET_MAC_Hebrew 83 -#define FX_CHARSET_MAC_Arabic 84 -#define FX_CHARSET_MAC_Greek 85 -#define FX_CHARSET_MAC_Turkish 86 -#define FX_CHARSET_MAC_Thai 87 -#define FX_CHARSET_MAC_EasternEuropean 88 -#define FX_CHARSET_MAC_Cyrillic 89 -#define FX_CHARSET_ShiftJIS 128 -#define FX_CHARSET_Korean 129 -#define FX_CHARSET_Johab 130 -#define FX_CHARSET_ChineseSimplified 134 -#define FX_CHARSET_ChineseTriditional 136 -#define FX_CHARSET_MSWin_Greek 161 -#define FX_CHARSET_MSWin_Turkish 162 -#define FX_CHARSET_MSWin_Vietnamese 163 -#define FX_CHARSET_MSWin_Hebrew 177 -#define FX_CHARSET_MSWin_Arabic 178 -#define FX_CHARSET_ArabicTraditional 179 -#define FX_CHARSET_ArabicUser 180 -#define FX_CHARSET_HebrewUser 181 -#define FX_CHARSET_MSWin_Baltic 186 -#define FX_CHARSET_MSWin_Cyrillic 204 -#define FX_CHARSET_Thai 222 -#define FX_CHARSET_MSWin_EasterEuropean 238 -#define FX_CHARSET_US 254 -#define FX_CHARSET_OEM 255 - -FX_WORD FX_GetCodePageFromCharset(uint8_t charset); -FX_WORD FX_GetCharsetFromCodePage(FX_WORD codepage); -FX_WORD FX_GetCodePageFromStringA(const FX_CHAR* pStr, int32_t iLength); -FX_WORD FX_GetCodePageFormStringW(const FX_WCHAR* pStr, int32_t iLength); -FX_WORD FX_GetDefCodePageByLanguage(FX_WORD wLanguage); -void FX_SwapByteOrder(FX_WCHAR* pStr, int32_t iLength); -void FX_SwapByteOrderCopy(const FX_WCHAR* pSrc, - FX_WCHAR* pDst, - int32_t iLength); -void FX_UTF16ToWChar(void* pBuffer, int32_t iLength); -void FX_UTF16ToWCharCopy(const FX_WORD* pUTF16, - FX_WCHAR* pWChar, - int32_t iLength); -void FX_WCharToUTF16(void* pBuffer, int32_t iLength); -void FX_WCharToUTF16Copy(const FX_WCHAR* pWChar, - FX_WORD* pUTF16, - int32_t iLength); -int32_t FX_DecodeString(FX_WORD wCodePage, - const FX_CHAR* pSrc, - int32_t* pSrcLen, - FX_WCHAR* pDst, - int32_t* pDstLen, - FX_BOOL bErrBreak = FALSE); -int32_t FX_UTF8Decode(const FX_CHAR* pSrc, - int32_t* pSrcLen, - FX_WCHAR* pDst, - int32_t* pDstLen); - -struct FX_STR2CPHASH { - uint32_t uHash; - uint32_t uCodePage; -}; - -struct FX_CHARSET_MAP { - uint16_t charset; - uint16_t codepage; -}; - -struct FX_LANG2CPMAP { - FX_WORD wLanguage; - FX_WORD wCodepage; -}; - -#endif // XFA_SRC_FGAS_CRT_FGAS_CODEPAGE_H_ diff --git a/xfa/src/fgas/crt/fgas_encode.cpp b/xfa/src/fgas/crt/fgas_encode.cpp deleted file mode 100644 index 564ccf63c4..0000000000 --- a/xfa/src/fgas/crt/fgas_encode.cpp +++ /dev/null @@ -1,193 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fgas/crt/fgas_codepage.h" - -void FX_SwapByteOrder(FX_WCHAR* pStr, int32_t iLength) { - FXSYS_assert(pStr != NULL); - if (iLength < 0) { - iLength = FXSYS_wcslen(pStr); - } - FX_WORD wch; - if (sizeof(FX_WCHAR) > 2) { - while (iLength-- > 0) { - wch = (FX_WORD)*pStr; - wch = (wch >> 8) | (wch << 8); - wch &= 0x00FF; - *pStr++ = wch; - } - } else { - while (iLength-- > 0) { - wch = (FX_WORD)*pStr; - wch = (wch >> 8) | (wch << 8); - *pStr++ = wch; - } - } -} -void FX_SwapByteOrderCopy(const FX_WCHAR* pSrc, - FX_WCHAR* pDst, - int32_t iLength) { - FXSYS_assert(pSrc != NULL && pDst != NULL); - if (iLength < 0) { - iLength = FXSYS_wcslen(pSrc); - } - FX_WORD wch; - if (sizeof(FX_WCHAR) > 2) { - while (iLength-- > 0) { - wch = (FX_WORD)*pSrc++; - wch = (wch >> 8) | (wch << 8); - wch &= 0x00FF; - *pDst++ = wch; - } - } else { - while (iLength-- > 0) { - wch = (FX_WORD)*pSrc++; - wch = (wch >> 8) | (wch << 8); - *pDst++ = wch; - } - } -} -void FX_UTF16ToWChar(void* pBuffer, int32_t iLength) { - FXSYS_assert(pBuffer != NULL && iLength > 0); - if (sizeof(FX_WCHAR) == 2) { - return; - } - FX_WORD* pSrc = (FX_WORD*)pBuffer; - FX_WCHAR* pDst = (FX_WCHAR*)pBuffer; - while (--iLength >= 0) { - pDst[iLength] = (FX_WCHAR)pSrc[iLength]; - } -} -void FX_UTF16ToWCharCopy(const FX_WORD* pUTF16, - FX_WCHAR* pWChar, - int32_t iLength) { - FXSYS_assert(pUTF16 != NULL && pWChar != NULL && iLength > 0); - if (sizeof(FX_WCHAR) == 2) { - FXSYS_memcpy(pWChar, pUTF16, iLength * sizeof(FX_WCHAR)); - } else { - while (--iLength >= 0) { - pWChar[iLength] = (FX_WCHAR)pUTF16[iLength]; - } - } -} -void FX_WCharToUTF16(void* pBuffer, int32_t iLength) { - FXSYS_assert(pBuffer != NULL && iLength > 0); - if (sizeof(FX_WCHAR) == 2) { - return; - } - const FX_WCHAR* pSrc = (const FX_WCHAR*)pBuffer; - FX_WORD* pDst = (FX_WORD*)pBuffer; - while (--iLength >= 0) { - *pDst++ = (FX_WORD)*pSrc++; - } -} -void FX_WCharToUTF16Copy(const FX_WCHAR* pWChar, - FX_WORD* pUTF16, - int32_t iLength) { - FXSYS_assert(pWChar != NULL && pUTF16 != NULL && iLength > 0); - if (sizeof(FX_WCHAR) == 2) { - FXSYS_memcpy(pUTF16, pWChar, iLength * sizeof(FX_WCHAR)); - } else { - while (--iLength >= 0) { - *pUTF16++ = (FX_WORD)*pWChar++; - } - } -} -inline FX_DWORD FX_DWordFromBytes(const uint8_t* pStr) { - return FXBSTR_ID(pStr[3], pStr[2], pStr[1], pStr[0]); -} -inline FX_WORD FX_WordFromBytes(const uint8_t* pStr) { - return (pStr[1] << 8 | pStr[0]); -} -int32_t FX_DecodeString(FX_WORD wCodePage, - const FX_CHAR* pSrc, - int32_t* pSrcLen, - FX_WCHAR* pDst, - int32_t* pDstLen, - FX_BOOL bErrBreak) { - if (wCodePage == FX_CODEPAGE_UTF8) { - return FX_UTF8Decode(pSrc, pSrcLen, pDst, pDstLen); - } - return -1; -} -int32_t FX_UTF8Decode(const FX_CHAR* pSrc, - int32_t* pSrcLen, - FX_WCHAR* pDst, - int32_t* pDstLen) { - if (pSrcLen == NULL || pDstLen == NULL) { - return -1; - } - int32_t iSrcLen = *pSrcLen; - if (iSrcLen < 1) { - *pSrcLen = *pDstLen = 0; - return 1; - } - int32_t iDstLen = *pDstLen; - FX_BOOL bValidDst = (pDst != NULL && iDstLen > 0); - FX_DWORD dwCode = 0; - int32_t iPending = 0; - int32_t iSrcNum = 0, iDstNum = 0; - int32_t k = 0; - int32_t iIndex = 0; - k = 1; - while (iIndex < iSrcLen) { - uint8_t byte = (uint8_t) * (pSrc + iIndex); - if (byte < 0x80) { - iPending = 0; - k = 1; - iDstNum++; - iSrcNum += k; - if (bValidDst) { - *pDst++ = byte; - if (iDstNum >= iDstLen) { - break; - } - } - } else if (byte < 0xc0) { - if (iPending < 1) { - break; - } - iPending--; - dwCode |= (byte & 0x3f) << (iPending * 6); - if (iPending == 0) { - iDstNum++; - iSrcNum += k; - if (bValidDst) { - *pDst++ = dwCode; - if (iDstNum >= iDstLen) { - break; - } - } - } - } else if (byte < 0xe0) { - iPending = 1; - k = 2; - dwCode = (byte & 0x1f) << 6; - } else if (byte < 0xf0) { - iPending = 2; - k = 3; - dwCode = (byte & 0x0f) << 12; - } else if (byte < 0xf8) { - iPending = 3; - k = 4; - dwCode = (byte & 0x07) << 18; - } else if (byte < 0xfc) { - iPending = 4; - k = 5; - dwCode = (byte & 0x03) << 24; - } else if (byte < 0xfe) { - iPending = 5; - k = 6; - dwCode = (byte & 0x01) << 30; - } else { - break; - } - iIndex++; - } - *pSrcLen = iSrcNum; - *pDstLen = iDstNum; - return 1; -} diff --git a/xfa/src/fgas/crt/fgas_language.h b/xfa/src/fgas/crt/fgas_language.h deleted file mode 100644 index 15f32e1379..0000000000 --- a/xfa/src/fgas/crt/fgas_language.h +++ /dev/null @@ -1,269 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FGAS_CRT_FGAS_LANGUAGE_H_ -#define XFA_SRC_FGAS_CRT_FGAS_LANGUAGE_H_ - -#define FX_LANG_Neutral 0x0000 -#define FX_LANG_Invariant 0x007f -#define FX_LANG_UserDefault 0x0400 -#define FX_LANG_SystemDefault 0x0800 -#define FX_LANG_Afrikaans_SouthAfrica 0x0436 -#define FX_LANG_Albanian_Albania 0x041c -#define FX_LANG_Alsatian_France 0x0484 -#define FX_LANG_Amharic_Ethiopia 0x045e -#define FX_LANG_Arabic_Algeria 0x1401 -#define FX_LANG_Arabic_Bahrain 0x3c01 -#define FX_LANG_Arabic_Egypt 0x0c01 -#define FX_LANG_Arabic_Iraq 0x0801 -#define FX_LANG_Arabic_Jordan 0x2c01 -#define FX_LANG_Arabic_Kuwait 0x3401 -#define FX_LANG_Arabic_Lebanon 0x3001 -#define FX_LANG_Arabic_Libya 0x1001 -#define FX_LANG_Arabic_Morocco 0x1801 -#define FX_LANG_Arabic_Oman 0x2001 -#define FX_LANG_Arabic_Qatar 0x4001 -#define FX_LANG_Arabic_SaudiArabia 0x0401 -#define FX_LANG_Arabic_Syria 0x2801 -#define FX_LANG_Arabic_Tunisia 0x1c01 -#define FX_LANG_Arabic_UAE 0x3801 -#define FX_LANG_Arabic_Yemen 0x2401 -#define FX_LANG_Armenian_Armenia 0x042b -#define FX_LANG_Assamese_India 0x044d -#define FX_LANG_Azerbaijan_Cyrillic 0x082c -#define FX_LANG_Azerbaijan_Latin 0x042c -#define FX_LANG_Bashkir_Russia 0x046d -#define FX_LANG_Basque_Basque 0x042d -#define FX_LANG_Belarusian_Belarus 0x0423 -#define FX_LANG_Bengali_Bangladesh 0x0845 -#define FX_LANG_Bengali_India 0x0445 -#define FX_LANG_Bosnia_Herzegovina 0x101a -#define FX_LANG_Bosnian_Cyrillic 0x201a -#define FX_LANG_Bosnian_Latin 0x141a -#define FX_LANG_Breton_France 0x047e -#define FX_LANG_Bulgarian_Bulgaria 0x0402 -#define FX_LANG_Burmese 0x0455 -#define FX_LANG_Catalan_Catalan 0x0403 -#define FX_LANG_Cherokee 0x045c -#define FX_LANG_Chinese_HongKong 0x0c04 -#define FX_LANG_Chinese_Macao 0x1404 -#define FX_LANG_Chinese_PRC 0x0804 -#define FX_LANG_Chinese_Singapore 0x1004 -#define FX_LANG_Chinese_Taiwan 0x0404 -#define FX_LANG_Corsican_France 0x0483 -#define FX_LANG_Croatian_Croatia 0x041a -#define FX_LANG_Croatian_Latin 0x101a -#define FX_LANG_CustomCurrent 0x0c00 -#define FX_LANG_CzechRepublic 0x0405 -#define FX_LANG_Danish_Denmark 0x0406 -#define FX_LANG_Dari_Afghanistan 0x048c -#define FX_LANG_Divehi_Maldives 0x0465 -#define FX_LANG_Dutch_Belgium 0x0813 -#define FX_LANG_Dutch_Netherlands 0x0413 -#define FX_LANG_Dutch_Preferred 0x0013 -#define FX_LANG_Dzongkha 0x0851 -#define FX_LANG_Edo 0x0466 -#define FX_LANG_English_Australia 0x0c09 -#define FX_LANG_English_Belize 0x2809 -#define FX_LANG_English_Canada 0x1009 -#define FX_LANG_English_Caribbean 0x2409 -#define FX_LANG_English_HongKong 0x3c09 -#define FX_LANG_English_India 0x4009 -#define FX_LANG_English_Indonesia 0x3809 -#define FX_LANG_English_Ireland 0x1809 -#define FX_LANG_English_Jamaica 0x2009 -#define FX_LANG_English_Malaysia 0x4409 -#define FX_LANG_English_NewZealand 0x1409 -#define FX_LANG_English_Philippines 0x3409 -#define FX_LANG_English_Singapore 0x4809 -#define FX_LANG_English_SouthAfrica 0x1c09 -#define FX_LANG_English_TrinidadTobago 0x2c09 -#define FX_LANG_English_UnitedKingdom 0x0809 -#define FX_LANG_English_UnitedStates 0x0409 -#define FX_LANG_English_Zimbabwe 0x3009 -#define FX_LANG_Estonian_Estonia 0x0425 -#define FX_LANG_Faroese_FaroeIslands 0x0438 -#define FX_LANG_Filipino_Philippines 0x0464 -#define FX_LANG_Finnish_Finland 0x040b -#define FX_LANG_French_Belgium 0x080c -#define FX_LANG_French_Cameroon 0x2c0c -#define FX_LANG_French_Canada 0x0c0c -#define FX_LANG_French_CongoDRC 0x240c -#define FX_LANG_French_CotedIvoire 0x300c -#define FX_LANG_French_France 0x040c -#define FX_LANG_French_Haiti 0x3c0c -#define FX_LANG_French_Luxembourg 0x140c -#define FX_LANG_French_Mali 0x340c -#define FX_LANG_French_Monaco 0x180c -#define FX_LANG_French_Morocco 0x380c -#define FX_LANG_French_Reunion 0x200c -#define FX_LANG_French_Senegal 0x280c -#define FX_LANG_French_Switzerland 0x100c -#define FX_LANG_French_WestIndies 0x1c0c -#define FX_LANG_Frisian_Netherlands 0x0462 -#define FX_LANG_Fulfulde 0x0467 -#define FX_LANG_Gaelic_Ireland 0x083c -#define FX_LANG_Gaelic_Scotland 0x043c -#define FX_LANG_Galician_Galician 0x0456 -#define FX_LANG_Georgian_Georgia 0x0437 -#define FX_LANG_German_Austria 0x0c07 -#define FX_LANG_German_Germany 0x0407 -#define FX_LANG_German_Liechtenstein 0x1407 -#define FX_LANG_German_Luxembourg 0x1007 -#define FX_LANG_German_Switzerland 0x0807 -#define FX_LANG_Greek_Greece 0x0408 -#define FX_LANG_Greenlandic_Greenland 0x046f -#define FX_LANG_Guarani 0x0474 -#define FX_LANG_Gujarati_India 0x0447 -#define FX_LANG_Hausa_LatinNigeria 0x0468 -#define FX_LANG_Hawaiian 0x0475 -#define FX_LANG_Hebrew_Israel 0x040d -#define FX_LANG_Hindi_India 0x0439 -#define FX_LANG_Hungarian_Hungary 0x040e -#define FX_LANG_Ibibio_Nigeria 0x0469 -#define FX_LANG_Icelandic_Iceland 0x040f -#define FX_LANG_Igbo_Nigeria 0x0470 -#define FX_LANG_Indonesian_Indonesia 0x0421 -#define FX_LANG_Inuktitut_LatinCanada 0x085d -#define FX_LANG_Inuktitut_SyllabicsCanada 0x045d -#define FX_LANG_IsiXhosa_SouthAfrica 0x0434 -#define FX_LANG_IsiZulu_SouthAfrica 0x0435 -#define FX_LANG_Italian_Italy 0x0410 -#define FX_LANG_Italian_Switzerland 0x0810 -#define FX_LANG_Japanese_Japan 0x0411 -#define FX_LANG_Kannada_India 0x044b -#define FX_LANG_Kanuri 0x0471 -#define FX_LANG_Kashmiri 0x0860 -#define FX_LANG_Kashmiri_Arabic 0x0460 -#define FX_LANG_Kazakh_Kazakhstan 0x043f -#define FX_LANG_Khmer_Cambodia 0x0453 -#define FX_LANG_Kiche_Guatemala 0x0486 -#define FX_LANG_Kinyarwanda_Rwanda 0x0487 -#define FX_LANG_Kiswahili_Kenya 0x0441 -#define FX_LANG_Konkani_India 0x0457 -#define FX_LANG_Korean_Korea 0x0412 -#define FX_LANG_Kyrgyz_Kyrgyzstan 0x0440 -#define FX_LANG_Lao_LaoPDR 0x0454 -#define FX_LANG_Latin 0x0476 -#define FX_LANG_Latvian_Latvia 0x0426 -#define FX_LANG_Lithuanian_Lithuania 0x0427 -#define FX_LANG_LithuanianTrad 0x0827 -#define FX_LANG_Lower Sorbian_Germany 0x082e -#define FX_LANG_Luxembourgish_Luxembourg 0x046e -#define FX_LANG_Macedonian 0x042f -#define FX_LANG_Malay_BruneiDarussalam 0x083e -#define FX_LANG_Malay_Malaysia 0x043e -#define FX_LANG_Malayalam_India 0x044c -#define FX_LANG_Maldivian 0x0465 -#define FX_LANG_Maltese_Malta 0x043a -#define FX_LANG_Manipuri 0x0458 -#define FX_LANG_Maori_NewZealand 0x0481 -#define FX_LANG_Mapudungun_Chile 0x047a -#define FX_LANG_Marathi_India 0x044e -#define FX_LANG_Mohawk_Mohawk 0x047c -#define FX_LANG_Mongolian_CyrillicMongolia 0x0450 -#define FX_LANG_Mongolian_TraditionalMongolian 0x0850 -#define FX_LANG_Nepali_India 0x0861 -#define FX_LANG_Nepali_Nepal 0x0461 -#define FX_LANG_Norwegian_Bokmal 0x0414 -#define FX_LANG_Norwegian_Nynorsk 0x0814 -#define FX_LANG_Occitan_France 0x0482 -#define FX_LANG_Oriya_India 0x0448 -#define FX_LANG_Oromo 0x0472 -#define FX_LANG_Papiamentu 0x0479 -#define FX_LANG_Pashto_Afghanistan 0x0463 -#define FX_LANG_Persian 0x0429 -#define FX_LANG_Polish_Poland 0x0415 -#define FX_LANG_Portuguese_Brazil 0x0416 -#define FX_LANG_Portuguese_Portugal 0x0816 -#define FX_LANG_Punjabi_India 0x0446 -#define FX_LANG_Punjabi_Pakistan 0x0846 -#define FX_LANG_Quechua_Bolivia 0x046b -#define FX_LANG_Quechua_Ecuador 0x086b -#define FX_LANG_Quechua_Peru 0x0c6b -#define FX_LANG_Romanian_Moldova 0x0818 -#define FX_LANG_Romanian_Romania 0x0418 -#define FX_LANG_Romansh_Switzerland 0x0417 -#define FX_LANG_Russian_Moldova 0x0819 -#define FX_LANG_Russian_Russia 0x0419 -#define FX_LANG_Sami_InariFinland 0x243b -#define FX_LANG_Sami_LuleNorway 0x103b -#define FX_LANG_Sami_LuleSweden 0x143b -#define FX_LANG_Sami_NorthernFinland 0x0c3b -#define FX_LANG_Sami_NorthernNorway 0x043b -#define FX_LANG_Sami_NorthernSweden 0x083b -#define FX_LANG_Sami_SkoltFinland 0x203b -#define FX_LANG_Sami_SouthernNorway 0x183b -#define FX_LANG_Sami_SouthernSweden 0x1c3b -#define FX_LANG_SanskritIndia 0x044f -#define FX_LANG_SerbianCyrillic_BosniaHerzegovina 0x1c1a -#define FX_LANG_SerbianCyrillic_Serbia 0x0c1a -#define FX_LANG_SerbianLatin_BosniaHerzegovina 0x181a -#define FX_LANG_SerbianLatin_Serbia 0x081a -#define FX_LANG_SesothoSaLeboa 0x046c -#define FX_LANG_Setswana_SouthAfrica 0x0432 -#define FX_LANG_Sindhi_Arabic 0x0859 -#define FX_LANG_Sindhi_Devanagari 0x0459 -#define FX_LANG_Sinhala_SriLanka 0x045b -#define FX_LANG_Slovak_Slovakia 0x041b -#define FX_LANG_Slovenian_Slovenia 0x0424 -#define FX_LANG_Somali 0x0477 -#define FX_LANG_Spanish_Argentina 0x2c0a -#define FX_LANG_Spanish_Bolivia 0x400a -#define FX_LANG_Spanish_Chile 0x340a -#define FX_LANG_Spanish_Colombia 0x240a -#define FX_LANG_Spanish_CostaRica 0x140a -#define FX_LANG_Spanish_DominicanRepublic 0x1c0a -#define FX_LANG_Spanish_Ecuador 0x300a -#define FX_LANG_Spanish_ElSalvador 0x440a -#define FX_LANG_Spanish_Guatemala 0x100a -#define FX_LANG_Spanish_Honduras 0x480a -#define FX_LANG_Spanish_Mexico 0x080a -#define FX_LANG_Spanish_Nicaragua 0x4c0a -#define FX_LANG_Spanish_Panama 0x180a -#define FX_LANG_Spanish_Paraguay 0x3c0a -#define FX_LANG_Spanish_Peru 0x280a -#define FX_LANG_Spanish_PuertoRico 0x500a -#define FX_LANG_Spanish_InternationalSort 0x0c0a -#define FX_LANG_Spanish_TraditionalSort 0x040a -#define FX_LANG_Spanish_UnitedStates 0x540a -#define FX_LANG_Spanish_Uruguay 0x380a -#define FX_LANG_Spanish_Venezuela 0x200a -#define FX_LANG_Sutu_SouthAfrica 0x0430 -#define FX_LANG_Swedish_Finland 0x081d -#define FX_LANG_Swedish_Sweden 0x041d -#define FX_LANG_Syriac_Syria 0x045a -#define FX_LANG_Tajik_CyrillicTajikistan 0x0428 -#define FX_LANG_Tamazight_ArabicMorocco 0x045f -#define FX_LANG_Tamazight_LatinAlgeria 0x085f -#define FX_LANG_Tamil_India 0x0449 -#define FX_LANG_Tatar_Russia 0x0444 -#define FX_LANG_Telugu_India 0x044a -#define FX_LANG_Thai_Thailand 0x041e -#define FX_LANG_TibetanPRC 0x0451 -#define FX_LANG_Tigrigna_Eritrea 0x0873 -#define FX_LANG_Tigrigna_Ethiopia 0x0473 -#define FX_LANG_Tsonga 0x0431 -#define FX_LANG_Turkish_Turkey 0x041f -#define FX_LANG_Turkmen_Turkmenistan 0x0442 -#define FX_LANG_UighurPRC 0x0480 -#define FX_LANG_Ukrainian_Ukraine 0x0422 -#define FX_LANG_UpperSorbian_Germany 0x042e -#define FX_LANG_Urdu_Pakistan 0x0420 -#define FX_LANG_Urdu_India 0x0820 -#define FX_LANG_Uzbek_CyrillicUzbekistan 0x0843 -#define FX_LANG_Uzbek_LatinUzbekistan 0x0443 -#define FX_LANG_Venda 0x0433 -#define FX_LANG_Vietnamese_Vietnam 0x042a -#define FX_LANG_Welsh_UnitedKingdom 0x0452 -#define FX_LANG_Wolof_Senegal 0x0488 -#define FX_LANG_Xhosa 0x0434 -#define FX_LANG_Yakut_Russia 0x0485 -#define FX_LANG_YiPRC 0x0478 -#define FX_LANG_Yiddish 0x043d -#define FX_LANG_Yoruba_Nigeria 0x046a - -#endif // XFA_SRC_FGAS_CRT_FGAS_LANGUAGE_H_ diff --git a/xfa/src/fgas/crt/fgas_memory.cpp b/xfa/src/fgas/crt/fgas_memory.cpp deleted file mode 100644 index c88c7e3aac..0000000000 --- a/xfa/src/fgas/crt/fgas_memory.cpp +++ /dev/null @@ -1,446 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fgas/crt/fgas_memory.h" - -#include - -namespace { - -class CFX_DefStore : public IFX_MEMAllocator, public CFX_Target { - public: - CFX_DefStore() {} - ~CFX_DefStore() {} - virtual void Release() { delete this; } - virtual void* Alloc(size_t size) { return FX_Alloc(uint8_t, size); } - virtual void Free(void* pBlock) { FX_Free(pBlock); } - virtual size_t GetBlockSize() const { return 0; } - virtual size_t GetDefChunkSize() const { return 0; } - virtual size_t SetDefChunkSize(size_t size) { return 0; } - virtual size_t GetCurrentDataSize() const { return 0; } -}; - -#if _FX_OS_ != _FX_ANDROID_ -#pragma pack(push, 1) -#endif -struct FX_STATICSTORECHUNK { - FX_STATICSTORECHUNK* pNextChunk; - size_t iChunkSize; - size_t iFreeSize; -}; -#if _FX_OS_ != _FX_ANDROID_ -#pragma pack(pop) -#endif - -class CFX_StaticStore : public IFX_MEMAllocator, public CFX_Target { - public: - CFX_StaticStore(size_t iDefChunkSize = 4096); - ~CFX_StaticStore(); - virtual void Release() { delete this; } - virtual void* Alloc(size_t size); - virtual void Free(void* pBlock) {} - virtual size_t GetBlockSize() const { return 0; } - virtual size_t GetDefChunkSize() const { return m_iDefChunkSize; } - virtual size_t SetDefChunkSize(size_t size); - virtual size_t GetCurrentDataSize() const { return m_iAllocatedSize; } - - protected: - size_t m_iAllocatedSize; - size_t m_iDefChunkSize; - FX_STATICSTORECHUNK* m_pChunk; - FX_STATICSTORECHUNK* m_pLastChunk; - FX_STATICSTORECHUNK* AllocChunk(size_t size); - FX_STATICSTORECHUNK* FindChunk(size_t size); -}; - -#if _FX_OS_ != _FX_ANDROID_ -#pragma pack(push, 1) -#endif -struct FX_FIXEDSTORECHUNK { - uint8_t* FirstFlag() { return reinterpret_cast(this + 1); } - uint8_t* FirstBlock() { return FirstFlag() + iChunkSize; } - - FX_FIXEDSTORECHUNK* pNextChunk; - size_t iChunkSize; - size_t iFreeNum; -}; -#if _FX_OS_ != _FX_ANDROID_ -#pragma pack(pop) -#endif - -class CFX_FixedStore : public IFX_MEMAllocator, public CFX_Target { - public: - CFX_FixedStore(size_t iBlockSize, size_t iBlockNumsInChunk); - virtual ~CFX_FixedStore(); - virtual void Release() { delete this; } - virtual void* Alloc(size_t size); - virtual void Free(void* pBlock); - virtual size_t GetBlockSize() const { return m_iBlockSize; } - virtual size_t GetDefChunkSize() const { return m_iDefChunkSize; } - virtual size_t SetDefChunkSize(size_t iChunkSize); - virtual size_t GetCurrentDataSize() const { return 0; } - - protected: - FX_FIXEDSTORECHUNK* AllocChunk(); - - size_t m_iBlockSize; - size_t m_iDefChunkSize; - FX_FIXEDSTORECHUNK* m_pChunk; -}; - -#if _FX_OS_ != _FX_ANDROID_ -#pragma pack(push, 1) -#endif -struct FX_DYNAMICSTOREBLOCK { - uint8_t* Data() { return reinterpret_cast(this + 1); } - FX_DYNAMICSTOREBLOCK* NextBlock() { - return reinterpret_cast(Data() + iBlockSize); - } - size_t iBlockSize; - FX_BOOL bUsed; -}; - -struct FX_DYNAMICSTORECHUNK { - FX_DYNAMICSTOREBLOCK* FirstBlock() { - return reinterpret_cast(this + 1); - } - FX_DYNAMICSTORECHUNK* pNextChunk; - size_t iChunkSize; - size_t iFreeSize; -}; -#if _FX_OS_ != _FX_ANDROID_ -#pragma pack(pop) -#endif - -class CFX_DynamicStore : public IFX_MEMAllocator, public CFX_Target { - public: - CFX_DynamicStore(size_t iDefChunkSize = 4096); - virtual ~CFX_DynamicStore(); - virtual void Release() { delete this; } - virtual void* Alloc(size_t size); - virtual void Free(void* pBlock); - virtual size_t GetBlockSize() const { return 0; } - virtual size_t GetDefChunkSize() const { return m_iDefChunkSize; } - virtual size_t SetDefChunkSize(size_t size); - virtual size_t GetCurrentDataSize() const { return 0; } - - protected: - FX_DYNAMICSTORECHUNK* AllocChunk(size_t size); - - size_t m_iDefChunkSize; - FX_DYNAMICSTORECHUNK* m_pChunk; -}; - -} // namespace - -#define FX_4BYTEALIGN(size) (((size) + 3) / 4 * 4) - -IFX_MEMAllocator* FX_CreateAllocator(FX_ALLOCTYPE eType, - size_t chunkSize, - size_t blockSize) { - switch (eType) { - case FX_ALLOCTYPE_Dynamic: - return new CFX_DynamicStore(chunkSize); - case FX_ALLOCTYPE_Default: - return new CFX_DefStore(); - case FX_ALLOCTYPE_Static: - return new CFX_StaticStore(chunkSize); - case FX_ALLOCTYPE_Fixed: - return new CFX_FixedStore(blockSize, chunkSize); - default: - return NULL; - } -} -CFX_StaticStore::CFX_StaticStore(size_t iDefChunkSize) - : m_iAllocatedSize(0), - m_iDefChunkSize(iDefChunkSize), - m_pChunk(NULL), - m_pLastChunk(NULL) { - FXSYS_assert(m_iDefChunkSize != 0); -} -CFX_StaticStore::~CFX_StaticStore() { - FX_STATICSTORECHUNK* pChunk = m_pChunk; - while (pChunk) { - FX_STATICSTORECHUNK* pNext = pChunk->pNextChunk; - FX_Free(pChunk); - pChunk = pNext; - } -} -FX_STATICSTORECHUNK* CFX_StaticStore::AllocChunk(size_t size) { - FXSYS_assert(size != 0); - FX_STATICSTORECHUNK* pChunk = (FX_STATICSTORECHUNK*)FX_Alloc( - uint8_t, sizeof(FX_STATICSTORECHUNK) + size); - pChunk->iChunkSize = size; - pChunk->iFreeSize = size; - pChunk->pNextChunk = NULL; - if (m_pLastChunk == NULL) { - m_pChunk = pChunk; - } else { - m_pLastChunk->pNextChunk = pChunk; - } - m_pLastChunk = pChunk; - return pChunk; -} -FX_STATICSTORECHUNK* CFX_StaticStore::FindChunk(size_t size) { - FXSYS_assert(size != 0); - if (m_pLastChunk == NULL || m_pLastChunk->iFreeSize < size) { - return AllocChunk(std::max(m_iDefChunkSize, size)); - } - return m_pLastChunk; -} -void* CFX_StaticStore::Alloc(size_t size) { - size = FX_4BYTEALIGN(size); - FXSYS_assert(size != 0); - FX_STATICSTORECHUNK* pChunk = FindChunk(size); - FXSYS_assert(pChunk->iFreeSize >= size); - uint8_t* p = (uint8_t*)pChunk; - p += sizeof(FX_STATICSTORECHUNK) + pChunk->iChunkSize - pChunk->iFreeSize; - pChunk->iFreeSize -= size; - m_iAllocatedSize += size; - return p; -} -size_t CFX_StaticStore::SetDefChunkSize(size_t size) { - FXSYS_assert(size != 0); - size_t v = m_iDefChunkSize; - m_iDefChunkSize = size; - return v; -} -CFX_FixedStore::CFX_FixedStore(size_t iBlockSize, size_t iBlockNumsInChunk) - : m_iBlockSize(FX_4BYTEALIGN(iBlockSize)), - m_iDefChunkSize(FX_4BYTEALIGN(iBlockNumsInChunk)), - m_pChunk(NULL) { - FXSYS_assert(m_iBlockSize != 0 && m_iDefChunkSize != 0); -} -CFX_FixedStore::~CFX_FixedStore() { - FX_FIXEDSTORECHUNK* pChunk = m_pChunk; - while (pChunk) { - FX_FIXEDSTORECHUNK* pNext = pChunk->pNextChunk; - FX_Free(pChunk); - pChunk = pNext; - } -} -FX_FIXEDSTORECHUNK* CFX_FixedStore::AllocChunk() { - int32_t iTotalSize = sizeof(FX_FIXEDSTORECHUNK) + m_iDefChunkSize + - m_iBlockSize * m_iDefChunkSize; - FX_FIXEDSTORECHUNK* pChunk = - (FX_FIXEDSTORECHUNK*)FX_Alloc(uint8_t, iTotalSize); - if (pChunk == NULL) { - return NULL; - } - FXSYS_memset(pChunk->FirstFlag(), 0, m_iDefChunkSize); - pChunk->pNextChunk = m_pChunk; - pChunk->iChunkSize = m_iDefChunkSize; - pChunk->iFreeNum = m_iDefChunkSize; - m_pChunk = pChunk; - return pChunk; -} -void* CFX_FixedStore::Alloc(size_t size) { - if (size > m_iBlockSize) { - return NULL; - } - FX_FIXEDSTORECHUNK* pChunk = m_pChunk; - while (pChunk != NULL) { - if (pChunk->iFreeNum > 0) { - break; - } - pChunk = pChunk->pNextChunk; - } - if (pChunk == NULL) { - pChunk = AllocChunk(); - } - FXSYS_assert(pChunk != NULL); - uint8_t* pFlags = pChunk->FirstFlag(); - size_t i = 0; - for (; i < pChunk->iChunkSize; i++) - if (pFlags[i] == 0) { - break; - } - FXSYS_assert(i < pChunk->iChunkSize); - pFlags[i] = 1; - pChunk->iFreeNum--; - return pChunk->FirstBlock() + i * m_iBlockSize; -} -void CFX_FixedStore::Free(void* pBlock) { - FXSYS_assert(pBlock != NULL); - FX_FIXEDSTORECHUNK* pPrior = NULL; - FX_FIXEDSTORECHUNK* pChunk = m_pChunk; - uint8_t* pStart = NULL; - uint8_t* pEnd; - while (pChunk != NULL) { - pStart = pChunk->FirstBlock(); - if (pBlock >= pStart) { - pEnd = pStart + m_iBlockSize * pChunk->iChunkSize; - if (pBlock < pEnd) { - break; - } - } - pPrior = pChunk, pChunk = pChunk->pNextChunk; - } - FXSYS_assert(pChunk != NULL); - size_t iPos = ((uint8_t*)pBlock - pStart) / m_iBlockSize; - FXSYS_assert(iPos < pChunk->iChunkSize); - uint8_t* pFlags = pChunk->FirstFlag(); - if (pFlags[iPos] == 0) { - return; - } - pFlags[iPos] = 0; - pChunk->iFreeNum++; - if (pChunk->iFreeNum == pChunk->iChunkSize) { - if (pPrior == NULL) { - m_pChunk = pChunk->pNextChunk; - } else { - pPrior->pNextChunk = pChunk->pNextChunk; - } - FX_Free(pChunk); - } -} -size_t CFX_FixedStore::SetDefChunkSize(size_t iChunkSize) { - FXSYS_assert(iChunkSize != 0); - size_t v = m_iDefChunkSize; - m_iDefChunkSize = FX_4BYTEALIGN(iChunkSize); - return v; -} -CFX_DynamicStore::CFX_DynamicStore(size_t iDefChunkSize) - : m_iDefChunkSize(iDefChunkSize), m_pChunk(NULL) { - FXSYS_assert(m_iDefChunkSize != 0); -} -CFX_DynamicStore::~CFX_DynamicStore() { - FX_DYNAMICSTORECHUNK* pChunk = m_pChunk; - while (pChunk) { - FX_DYNAMICSTORECHUNK* pNext = pChunk->pNextChunk; - FX_Free(pChunk); - pChunk = pNext; - } -} -FX_DYNAMICSTORECHUNK* CFX_DynamicStore::AllocChunk(size_t size) { - FXSYS_assert(size != 0); - FX_DYNAMICSTORECHUNK* pChunk = (FX_DYNAMICSTORECHUNK*)FX_Alloc( - uint8_t, - sizeof(FX_DYNAMICSTORECHUNK) + sizeof(FX_DYNAMICSTOREBLOCK) * 2 + size); - if (pChunk == NULL) { - return NULL; - } - pChunk->iChunkSize = size; - pChunk->iFreeSize = size; - FX_DYNAMICSTOREBLOCK* pBlock = pChunk->FirstBlock(); - pBlock->iBlockSize = size; - pBlock->bUsed = FALSE; - pBlock = pBlock->NextBlock(); - pBlock->iBlockSize = 0; - pBlock->bUsed = TRUE; - if (m_pChunk != NULL && size >= m_iDefChunkSize) { - FX_DYNAMICSTORECHUNK* pLast = m_pChunk; - while (pLast->pNextChunk != NULL) { - pLast = pLast->pNextChunk; - } - pLast->pNextChunk = pChunk; - pChunk->pNextChunk = NULL; - } else { - pChunk->pNextChunk = m_pChunk; - m_pChunk = pChunk; - } - return pChunk; -} -void* CFX_DynamicStore::Alloc(size_t size) { - size = FX_4BYTEALIGN(size); - FXSYS_assert(size != 0); - FX_DYNAMICSTORECHUNK* pChunk = m_pChunk; - FX_DYNAMICSTOREBLOCK* pBlock = NULL; - while (pChunk != NULL) { - if (pChunk->iFreeSize >= size) { - pBlock = pChunk->FirstBlock(); - FX_BOOL bFind = FALSE; - while (pBlock->iBlockSize != 0) { - if (!pBlock->bUsed && pBlock->iBlockSize >= size) { - bFind = TRUE; - break; - } - pBlock = pBlock->NextBlock(); - } - if (bFind) { - break; - } - } - pChunk = pChunk->pNextChunk; - } - if (pChunk == NULL) { - pChunk = AllocChunk(std::max(m_iDefChunkSize, size)); - pBlock = pChunk->FirstBlock(); - } - FXSYS_assert(pChunk != NULL && pBlock != NULL); - size_t m = size + sizeof(FX_DYNAMICSTOREBLOCK); - pBlock->bUsed = TRUE; - if (pBlock->iBlockSize > m) { - size_t n = pBlock->iBlockSize; - pBlock->iBlockSize = size; - FX_DYNAMICSTOREBLOCK* pNextBlock = pBlock->NextBlock(); - pNextBlock->bUsed = FALSE; - pNextBlock->iBlockSize = n - size - sizeof(FX_DYNAMICSTOREBLOCK); - pChunk->iFreeSize -= size + sizeof(FX_DYNAMICSTOREBLOCK); - } else { - pChunk->iFreeSize -= pBlock->iBlockSize; - } - return pBlock->Data(); -} -void CFX_DynamicStore::Free(void* pBlock) { - FXSYS_assert(pBlock != NULL); - FX_DYNAMICSTORECHUNK* pPriorChunk = NULL; - FX_DYNAMICSTORECHUNK* pChunk = m_pChunk; - while (pChunk != NULL) { - if (pBlock > pChunk && - pBlock <= ((uint8_t*)pChunk + sizeof(FX_DYNAMICSTORECHUNK) + - pChunk->iChunkSize)) { - break; - } - pPriorChunk = pChunk, pChunk = pChunk->pNextChunk; - } - FXSYS_assert(pChunk != NULL); - FX_DYNAMICSTOREBLOCK* pPriorBlock = NULL; - FX_DYNAMICSTOREBLOCK* pFindBlock = pChunk->FirstBlock(); - while (pFindBlock->iBlockSize != 0) { - if (pBlock == (void*)pFindBlock->Data()) { - break; - } - pPriorBlock = pFindBlock; - pFindBlock = pFindBlock->NextBlock(); - } - FXSYS_assert(pFindBlock->iBlockSize != 0 && pFindBlock->bUsed && - pBlock == (void*)pFindBlock->Data()); - pFindBlock->bUsed = FALSE; - pChunk->iFreeSize += pFindBlock->iBlockSize; - if (pPriorBlock == NULL) { - pPriorBlock = pChunk->FirstBlock(); - } else if (pPriorBlock->bUsed) { - pPriorBlock = pFindBlock; - } - pFindBlock = pPriorBlock; - size_t sizeFree = 0; - size_t sizeBlock = 0; - while (pFindBlock->iBlockSize != 0 && !pFindBlock->bUsed) { - if (pFindBlock != pPriorBlock) { - sizeFree += sizeof(FX_DYNAMICSTOREBLOCK); - sizeBlock += sizeof(FX_DYNAMICSTOREBLOCK); - } - sizeBlock += pFindBlock->iBlockSize; - pFindBlock = pFindBlock->NextBlock(); - } - pPriorBlock->iBlockSize = sizeBlock; - pChunk->iFreeSize += sizeFree; - if (pChunk->iFreeSize == pChunk->iChunkSize) { - if (pPriorChunk == NULL) { - m_pChunk = pChunk->pNextChunk; - } else { - pPriorChunk->pNextChunk = pChunk->pNextChunk; - } - FX_Free(pChunk); - } -} -size_t CFX_DynamicStore::SetDefChunkSize(size_t size) { - FXSYS_assert(size != 0); - size_t v = m_iDefChunkSize; - m_iDefChunkSize = size; - return v; -} diff --git a/xfa/src/fgas/crt/fgas_memory.h b/xfa/src/fgas/crt/fgas_memory.h deleted file mode 100644 index 90a8ddaf9a..0000000000 --- a/xfa/src/fgas/crt/fgas_memory.h +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FGAS_CRT_FGAS_MEMORY_H_ -#define XFA_SRC_FGAS_CRT_FGAS_MEMORY_H_ - -#include "core/include/fxcrt/fx_memory.h" -#include "core/include/fxcrt/fx_system.h" - -class IFX_MEMAllocator; -class CFX_Target; -enum FX_ALLOCTYPE { - FX_ALLOCTYPE_Default = 0, - FX_ALLOCTYPE_Static, - FX_ALLOCTYPE_Fixed, - FX_ALLOCTYPE_Dynamic, -}; - -class IFX_MEMAllocator { - public: - virtual ~IFX_MEMAllocator() {} - virtual void Release() = 0; - virtual void* Alloc(size_t size) = 0; - virtual void Free(void* pBlock) = 0; - virtual size_t GetBlockSize() const = 0; - virtual size_t GetDefChunkSize() const = 0; - virtual size_t SetDefChunkSize(size_t size) = 0; - virtual size_t GetCurrentDataSize() const = 0; -}; - -IFX_MEMAllocator* FX_CreateAllocator(FX_ALLOCTYPE eType, - size_t chunkSize, - size_t blockSize); -class CFX_Target { - public: - virtual ~CFX_Target() {} - void* operator new(size_t size) { return FX_Alloc(uint8_t, size); } - void operator delete(void* p) { FX_Free(p); } - void* operator new(size_t size, IFX_MEMAllocator* pAllocator) { - return pAllocator->Alloc(size); - } - void operator delete(void* p, IFX_MEMAllocator* pAllocator) { - pAllocator->Free(p); - } - void* operator new(size_t size, void* place) { return place; } - void operator delete(void* p, void* place) {} -}; - -#define FXTARGET_NewWith(__allocator__) new (__allocator__) -#define FXTARGET_DeleteWith(__class__, __allocator__, pointer) \ - { \ - (pointer)->~__class__(); \ - (pointer)->operator delete((pointer), (__allocator__)); \ - } - -#endif // XFA_SRC_FGAS_CRT_FGAS_MEMORY_H_ diff --git a/xfa/src/fgas/crt/fgas_stream.cpp b/xfa/src/fgas/crt/fgas_stream.cpp deleted file mode 100644 index c515b56662..0000000000 --- a/xfa/src/fgas/crt/fgas_stream.cpp +++ /dev/null @@ -1,1626 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fgas/crt/fgas_stream.h" - -#include - -#include "xfa/src/fgas/crt/fgas_system.h" -#include "xfa/src/fgas/crt/fgas_codepage.h" - -namespace { - -class CFX_StreamImp { - public: - virtual void Release() { delete this; } - virtual FX_DWORD GetAccessModes() const { return m_dwAccess; } - virtual int32_t GetLength() const = 0; - virtual int32_t Seek(FX_STREAMSEEK eSeek, int32_t iOffset) = 0; - virtual int32_t GetPosition() = 0; - virtual FX_BOOL IsEOF() const = 0; - virtual int32_t ReadData(uint8_t* pBuffer, int32_t iBufferSize) = 0; - virtual int32_t ReadString(FX_WCHAR* pStr, - int32_t iMaxLength, - FX_BOOL& bEOS) = 0; - virtual int32_t WriteData(const uint8_t* pBuffer, int32_t iBufferSize) = 0; - virtual int32_t WriteString(const FX_WCHAR* pStr, int32_t iLength) = 0; - virtual void Flush() = 0; - virtual FX_BOOL SetLength(int32_t iLength) = 0; - - protected: - CFX_StreamImp(); - virtual ~CFX_StreamImp() {} - FX_DWORD m_dwAccess; -}; - -class CFX_FileStreamImp : public CFX_StreamImp { - public: - CFX_FileStreamImp(); - virtual ~CFX_FileStreamImp(); - FX_BOOL LoadFile(const FX_WCHAR* pszSrcFileName, FX_DWORD dwAccess); - virtual int32_t GetLength() const; - virtual int32_t Seek(FX_STREAMSEEK eSeek, int32_t iOffset); - virtual int32_t GetPosition(); - virtual FX_BOOL IsEOF() const; - virtual int32_t ReadData(uint8_t* pBuffer, int32_t iBufferSize); - virtual int32_t ReadString(FX_WCHAR* pStr, int32_t iMaxLength, FX_BOOL& bEOS); - virtual int32_t WriteData(const uint8_t* pBuffer, int32_t iBufferSize); - virtual int32_t WriteString(const FX_WCHAR* pStr, int32_t iLength); - virtual void Flush(); - virtual FX_BOOL SetLength(int32_t iLength); - - protected: - FXSYS_FILE* m_hFile; - int32_t m_iLength; -}; - -class CFX_BufferStreamImp : public CFX_StreamImp { - public: - CFX_BufferStreamImp(); - virtual ~CFX_BufferStreamImp() {} - FX_BOOL LoadBuffer(uint8_t* pData, int32_t iTotalSize, FX_DWORD dwAccess); - virtual int32_t GetLength() const; - virtual int32_t Seek(FX_STREAMSEEK eSeek, int32_t iOffset); - virtual int32_t GetPosition(); - virtual FX_BOOL IsEOF() const; - virtual int32_t ReadData(uint8_t* pBuffer, int32_t iBufferSize); - virtual int32_t ReadString(FX_WCHAR* pStr, int32_t iMaxLength, FX_BOOL& bEOS); - virtual int32_t WriteData(const uint8_t* pBuffer, int32_t iBufferSize); - virtual int32_t WriteString(const FX_WCHAR* pStr, int32_t iLength); - virtual void Flush() {} - virtual FX_BOOL SetLength(int32_t iLength) { return FALSE; } - - protected: - uint8_t* m_pData; - int32_t m_iTotalSize; - int32_t m_iPosition; - int32_t m_iLength; -}; - -class CFX_FileReadStreamImp : public CFX_StreamImp { - public: - CFX_FileReadStreamImp(); - virtual ~CFX_FileReadStreamImp() {} - FX_BOOL LoadFileRead(IFX_FileRead* pFileRead, FX_DWORD dwAccess); - virtual int32_t GetLength() const; - virtual int32_t Seek(FX_STREAMSEEK eSeek, int32_t iOffset); - virtual int32_t GetPosition() { return m_iPosition; } - virtual FX_BOOL IsEOF() const; - - virtual int32_t ReadData(uint8_t* pBuffer, int32_t iBufferSize); - virtual int32_t ReadString(FX_WCHAR* pStr, int32_t iMaxLength, FX_BOOL& bEOS); - virtual int32_t WriteData(const uint8_t* pBuffer, int32_t iBufferSize) { - return 0; - } - virtual int32_t WriteString(const FX_WCHAR* pStr, int32_t iLength) { - return 0; - } - virtual void Flush() {} - virtual FX_BOOL SetLength(int32_t iLength) { return FALSE; } - - protected: - IFX_FileRead* m_pFileRead; - int32_t m_iPosition; - int32_t m_iLength; -}; - -class CFX_BufferReadStreamImp : public CFX_StreamImp { - public: - CFX_BufferReadStreamImp(); - ~CFX_BufferReadStreamImp(); - FX_BOOL LoadBufferRead(IFX_BufferRead* pBufferRead, - int32_t iFileSize, - FX_DWORD dwAccess, - FX_BOOL bReleaseBufferRead); - - virtual int32_t GetLength() const; - virtual int32_t Seek(FX_STREAMSEEK eSeek, int32_t iOffset); - virtual int32_t GetPosition() { return m_iPosition; } - virtual FX_BOOL IsEOF() const; - - virtual int32_t ReadData(uint8_t* pBuffer, int32_t iBufferSize); - virtual int32_t ReadString(FX_WCHAR* pStr, int32_t iMaxLength, FX_BOOL& bEOS); - virtual int32_t WriteData(const uint8_t* pBuffer, int32_t iBufferSize) { - return 0; - } - virtual int32_t WriteString(const FX_WCHAR* pStr, int32_t iLength) { - return 0; - } - virtual void Flush() {} - virtual FX_BOOL SetLength(int32_t iLength) { return FALSE; } - - private: - IFX_BufferRead* m_pBufferRead; - FX_BOOL m_bReleaseBufferRead; - int32_t m_iPosition; - int32_t m_iBufferSize; -}; - -class CFX_FileWriteStreamImp : public CFX_StreamImp { - public: - CFX_FileWriteStreamImp(); - virtual ~CFX_FileWriteStreamImp() {} - FX_BOOL LoadFileWrite(IFX_FileWrite* pFileWrite, FX_DWORD dwAccess); - virtual int32_t GetLength() const; - virtual int32_t Seek(FX_STREAMSEEK eSeek, int32_t iOffset); - virtual int32_t GetPosition() { return m_iPosition; } - virtual FX_BOOL IsEOF() const; - virtual int32_t ReadData(uint8_t* pBuffer, int32_t iBufferSize) { return 0; } - virtual int32_t ReadString(FX_WCHAR* pStr, - int32_t iMaxLength, - FX_BOOL& bEOS) { - return 0; - } - virtual int32_t WriteData(const uint8_t* pBuffer, int32_t iBufferSize); - virtual int32_t WriteString(const FX_WCHAR* pStr, int32_t iLength); - virtual void Flush(); - virtual FX_BOOL SetLength(int32_t iLength) { return FALSE; } - - protected: - IFX_FileWrite* m_pFileWrite; - int32_t m_iPosition; -}; - -enum FX_STREAMTYPE { - FX_SREAMTYPE_Unknown = 0, - FX_STREAMTYPE_File, - FX_STREAMTYPE_Buffer, - FX_STREAMTYPE_Stream, - FX_STREAMTYPE_BufferRead, -}; - -class CFX_Stream : public IFX_Stream { - public: - CFX_Stream(); - ~CFX_Stream(); - FX_BOOL LoadFile(const FX_WCHAR* pszSrcFileName, FX_DWORD dwAccess); - FX_BOOL LoadBuffer(uint8_t* pData, int32_t iTotalSize, FX_DWORD dwAccess); - FX_BOOL LoadFileRead(IFX_FileRead* pFileRead, FX_DWORD dwAccess); - FX_BOOL LoadFileWrite(IFX_FileWrite* pFileWrite, FX_DWORD dwAccess); - FX_BOOL LoadBufferRead(IFX_BufferRead* pBufferRead, - int32_t iFileSize, - FX_DWORD dwAccess, - FX_BOOL bReleaseBufferRead); - virtual void Release(); - virtual IFX_Stream* Retain(); - virtual FX_DWORD GetAccessModes() const { return m_dwAccess; } - virtual int32_t GetLength() const; - virtual int32_t Seek(FX_STREAMSEEK eSeek, int32_t iOffset); - virtual int32_t GetPosition(); - virtual FX_BOOL IsEOF() const; - virtual int32_t ReadData(uint8_t* pBuffer, int32_t iBufferSize); - virtual int32_t ReadString(FX_WCHAR* pStr, - int32_t iMaxLength, - FX_BOOL& bEOS, - int32_t const* pByteSize = NULL); - virtual int32_t WriteData(const uint8_t* pBuffer, int32_t iBufferSize); - virtual int32_t WriteString(const FX_WCHAR* pStr, int32_t iLength); - virtual void Flush(); - virtual FX_BOOL SetLength(int32_t iLength); - virtual int32_t GetBOM(uint8_t bom[4]) const; - virtual FX_WORD GetCodePage() const; - virtual FX_WORD SetCodePage(FX_WORD wCodePage); - virtual IFX_Stream* CreateSharedStream(FX_DWORD dwAccess, - int32_t iOffset, - int32_t iLength); - - protected: - FX_STREAMTYPE m_eStreamType; - CFX_StreamImp* m_pStreamImp; - FX_DWORD m_dwAccess; - int32_t m_iTotalSize; - int32_t m_iPosition; - int32_t m_iStart; - int32_t m_iLength; - int32_t m_iRefCount; -}; - -class CFX_TextStream : public IFX_Stream { - public: - CFX_TextStream(IFX_Stream* pStream, FX_BOOL bDelStream); - ~CFX_TextStream(); - virtual void Release(); - virtual IFX_Stream* Retain(); - - virtual FX_DWORD GetAccessModes() const; - virtual int32_t GetLength() const; - virtual int32_t Seek(FX_STREAMSEEK eSeek, int32_t iOffset); - virtual int32_t GetPosition(); - virtual FX_BOOL IsEOF() const; - - virtual int32_t ReadData(uint8_t* pBuffer, int32_t iBufferSize); - virtual int32_t ReadString(FX_WCHAR* pStr, - int32_t iMaxLength, - FX_BOOL& bEOS, - int32_t const* pByteSize = NULL); - virtual int32_t WriteData(const uint8_t* pBuffer, int32_t iBufferSize); - virtual int32_t WriteString(const FX_WCHAR* pStr, int32_t iLength); - virtual void Flush(); - virtual FX_BOOL SetLength(int32_t iLength); - - virtual int32_t GetBOM(uint8_t bom[4]) const; - virtual FX_WORD GetCodePage() const; - virtual FX_WORD SetCodePage(FX_WORD wCodePage); - - virtual IFX_Stream* CreateSharedStream(FX_DWORD dwAccess, - int32_t iOffset, - int32_t iLength); - - protected: - FX_WORD m_wCodePage; - int32_t m_wBOMLength; - FX_DWORD m_dwBOM; - uint8_t* m_pBuf; - int32_t m_iBufSize; - FX_BOOL m_bDelStream; - IFX_Stream* m_pStreamImp; - int32_t m_iRefCount; - void InitStream(); -}; - -class CFGAS_FileRead : public IFX_FileRead { - public: - CFGAS_FileRead(IFX_Stream* pStream, FX_BOOL bReleaseStream); - virtual ~CFGAS_FileRead(); - virtual void Release() { delete this; } - virtual FX_FILESIZE GetSize(); - virtual FX_BOOL ReadBlock(void* buffer, FX_FILESIZE offset, size_t size); - - protected: - FX_BOOL m_bReleaseStream; - IFX_Stream* m_pStream; -}; - -class CFX_BufferAccImp : public IFX_FileRead { - public: - CFX_BufferAccImp(IFX_BufferRead* pBufferRead, - FX_FILESIZE iFileSize, - FX_BOOL bReleaseStream); - virtual ~CFX_BufferAccImp(); - virtual void Release() { delete this; } - virtual FX_FILESIZE GetSize(); - virtual FX_BOOL ReadBlock(void* buffer, FX_FILESIZE offset, size_t size); - - protected: - IFX_BufferRead* m_pBufferRead; - FX_BOOL m_bReleaseStream; - FX_FILESIZE m_iBufSize; -}; - -class CFGAS_FileWrite : public IFX_FileWrite { - public: - CFGAS_FileWrite(IFX_Stream* pStream, FX_BOOL bReleaseStream); - virtual ~CFGAS_FileWrite(); - virtual void Release() { delete this; } - virtual FX_FILESIZE GetSize(); - virtual FX_BOOL Flush(); - virtual FX_BOOL WriteBlock(const void* pData, size_t size); - virtual FX_BOOL WriteBlock(const void* pData, - FX_FILESIZE offset, - size_t size); - - protected: - IFX_Stream* m_pStream; - FX_BOOL m_bReleaseStream; -}; - -} // namespace - -IFX_Stream* IFX_Stream::CreateStream(IFX_BufferRead* pBufferRead, - FX_DWORD dwAccess, - int32_t iFileSize, - FX_BOOL bReleaseBufferRead) { - CFX_Stream* pSR = new CFX_Stream; - if (!pSR->LoadBufferRead(pBufferRead, iFileSize, dwAccess, - bReleaseBufferRead)) { - pSR->Release(); - return NULL; - } - if (dwAccess & FX_STREAMACCESS_Text) { - return new CFX_TextStream(pSR, TRUE); - } - return pSR; -} -IFX_Stream* IFX_Stream::CreateStream(IFX_FileRead* pFileRead, - FX_DWORD dwAccess) { - CFX_Stream* pSR = new CFX_Stream; - if (!pSR->LoadFileRead(pFileRead, dwAccess)) { - pSR->Release(); - return NULL; - } - if (dwAccess & FX_STREAMACCESS_Text) { - return new CFX_TextStream(pSR, TRUE); - } - return pSR; -} -IFX_Stream* IFX_Stream::CreateStream(IFX_FileWrite* pFileWrite, - FX_DWORD dwAccess) { - CFX_Stream* pSR = new CFX_Stream; - if (!pSR->LoadFileWrite(pFileWrite, dwAccess)) { - pSR->Release(); - return NULL; - } - if (dwAccess & FX_STREAMACCESS_Text) { - return new CFX_TextStream(pSR, TRUE); - } - return pSR; -} -IFX_Stream* IFX_Stream::CreateStream(const FX_WCHAR* pszFileName, - FX_DWORD dwAccess) { - CFX_Stream* pSR = new CFX_Stream; - if (!pSR->LoadFile(pszFileName, dwAccess)) { - pSR->Release(); - return NULL; - } - if (dwAccess & FX_STREAMACCESS_Text) { - return new CFX_TextStream(pSR, TRUE); - } - return pSR; -} -IFX_Stream* IFX_Stream::CreateStream(uint8_t* pData, - int32_t length, - FX_DWORD dwAccess) { - CFX_Stream* pSR = new CFX_Stream; - if (!pSR->LoadBuffer(pData, length, dwAccess)) { - pSR->Release(); - return NULL; - } - if (dwAccess & FX_STREAMACCESS_Text) { - return new CFX_TextStream(pSR, TRUE); - } - return pSR; -} - -CFX_StreamImp::CFX_StreamImp() : m_dwAccess(0) {} -CFX_FileStreamImp::CFX_FileStreamImp() - : CFX_StreamImp(), m_hFile(NULL), m_iLength(0) {} -CFX_FileStreamImp::~CFX_FileStreamImp() { - if (m_hFile != NULL) { - FXSYS_fclose(m_hFile); - } -} -FX_BOOL CFX_FileStreamImp::LoadFile(const FX_WCHAR* pszSrcFileName, - FX_DWORD dwAccess) { - FXSYS_assert(m_hFile == NULL); - FXSYS_assert(pszSrcFileName != NULL && FXSYS_wcslen(pszSrcFileName) > 0); -#if _FX_OS_ == _FX_WIN32_DESKTOP_ || _FX_OS_ == _FX_WIN32_MOBILE_ || \ - _FX_OS_ == _FX_WIN64_ - CFX_WideString wsMode; - if (dwAccess & FX_STREAMACCESS_Write) { - if (dwAccess & FX_STREAMACCESS_Append) { - wsMode = L"a+b"; - } else if (dwAccess & FX_STREAMACCESS_Truncate) { - wsMode = L"w+b"; - } else { - wsMode = L"r+b"; - } - } else { - wsMode = L"rb"; - } - m_hFile = FXSYS_wfopen(pszSrcFileName, wsMode); - - if (!m_hFile) { - if (dwAccess & FX_STREAMACCESS_Write) { - if (dwAccess & FX_STREAMACCESS_Create) - m_hFile = FXSYS_wfopen(pszSrcFileName, L"w+b"); - - if (!m_hFile) { - m_hFile = FXSYS_wfopen(pszSrcFileName, L"r+b"); - if (!m_hFile) - return FALSE; - - if (dwAccess & FX_STREAMACCESS_Truncate) - FX_fsetsize(m_hFile, 0); - } - } else { - return FALSE; - } - } -#else - CFX_ByteString wsMode; - if (dwAccess & FX_STREAMACCESS_Write) { - if (dwAccess & FX_STREAMACCESS_Append) { - wsMode = "a+b"; - } else if (dwAccess & FX_STREAMACCESS_Truncate) { - wsMode = "w+b"; - } else { - wsMode = "r+b"; - } - } else { - wsMode = "rb"; - } - CFX_ByteString szFileName = CFX_ByteString::FromUnicode(pszSrcFileName); - m_hFile = FXSYS_fopen(szFileName, wsMode); - if (m_hFile == NULL) { - if (dwAccess & FX_STREAMACCESS_Write) { - if (dwAccess & FX_STREAMACCESS_Create) { - m_hFile = FXSYS_fopen(szFileName, "w+b"); - } - if (m_hFile == NULL) { - m_hFile = FXSYS_fopen(szFileName, "r+b"); - if (m_hFile == NULL) { - return FALSE; - } - if (dwAccess & FX_STREAMACCESS_Truncate) { - FX_fsetsize(m_hFile, 0); - } - } - } else { - return FALSE; - } - } -#endif - m_dwAccess = dwAccess; - if ((dwAccess & (FX_STREAMACCESS_Write | FX_STREAMACCESS_Truncate)) == - (FX_STREAMACCESS_Write | FX_STREAMACCESS_Truncate)) { - m_iLength = 0; - } else { - m_iLength = FX_filelength(m_hFile); - } - return TRUE; -} -int32_t CFX_FileStreamImp::GetLength() const { - FXSYS_assert(m_hFile != NULL); - return m_iLength; -} -int32_t CFX_FileStreamImp::Seek(FX_STREAMSEEK eSeek, int32_t iOffset) { - FXSYS_assert(m_hFile != NULL); - FXSYS_fseek(m_hFile, iOffset, eSeek); - return FXSYS_ftell(m_hFile); -} -int32_t CFX_FileStreamImp::GetPosition() { - FXSYS_assert(m_hFile != NULL); - return FXSYS_ftell(m_hFile); -} -FX_BOOL CFX_FileStreamImp::IsEOF() const { - FXSYS_assert(m_hFile != NULL); - return FXSYS_ftell(m_hFile) >= m_iLength; -} -int32_t CFX_FileStreamImp::ReadData(uint8_t* pBuffer, int32_t iBufferSize) { - FXSYS_assert(m_hFile != NULL); - FXSYS_assert(pBuffer != NULL && iBufferSize > 0); - return FXSYS_fread(pBuffer, 1, iBufferSize, m_hFile); -} -int32_t CFX_FileStreamImp::ReadString(FX_WCHAR* pStr, - int32_t iMaxLength, - FX_BOOL& bEOS) { - FXSYS_assert(m_hFile != NULL); - FXSYS_assert(pStr != NULL && iMaxLength > 0); - if (m_iLength <= 0) { - return 0; - } - int32_t iPosition = FXSYS_ftell(m_hFile); - int32_t iLen = std::min((m_iLength - iPosition) / 2, iMaxLength); - if (iLen <= 0) { - return 0; - } - iLen = FXSYS_fread(pStr, 2, iLen, m_hFile); - int32_t iCount = 0; - while (*pStr != L'\0' && iCount < iLen) { - pStr++, iCount++; - } - iPosition += iCount * 2; - if (FXSYS_ftell(m_hFile) != iPosition) { - FXSYS_fseek(m_hFile, iPosition, 0); - } - bEOS = (iPosition >= m_iLength); - return iCount; -} -int32_t CFX_FileStreamImp::WriteData(const uint8_t* pBuffer, - int32_t iBufferSize) { - FXSYS_assert(m_hFile != NULL && (m_dwAccess & FX_STREAMACCESS_Write) != 0); - FXSYS_assert(pBuffer != NULL && iBufferSize > 0); - int32_t iRet = FXSYS_fwrite(pBuffer, 1, iBufferSize, m_hFile); - if (iRet != 0) { - int32_t iPos = FXSYS_ftell(m_hFile); - if (iPos > m_iLength) { - m_iLength = iPos; - } - } - return iRet; -} -int32_t CFX_FileStreamImp::WriteString(const FX_WCHAR* pStr, int32_t iLength) { - FXSYS_assert(m_hFile != NULL && (m_dwAccess & FX_STREAMACCESS_Write) != 0); - FXSYS_assert(pStr != NULL && iLength > 0); - int32_t iRet = FXSYS_fwrite(pStr, 2, iLength, m_hFile); - if (iRet != 0) { - int32_t iPos = FXSYS_ftell(m_hFile); - if (iPos > m_iLength) { - m_iLength = iPos; - } - } - return iRet; -} -void CFX_FileStreamImp::Flush() { - FXSYS_assert(m_hFile != NULL && (m_dwAccess & FX_STREAMACCESS_Write) != 0); - FXSYS_fflush(m_hFile); -} -FX_BOOL CFX_FileStreamImp::SetLength(int32_t iLength) { - FXSYS_assert(m_hFile != NULL && (m_dwAccess & FX_STREAMACCESS_Write) != 0); - FX_BOOL bRet = FX_fsetsize(m_hFile, iLength); - m_iLength = FX_filelength(m_hFile); - return bRet; -} -CFX_FileReadStreamImp::CFX_FileReadStreamImp() - : m_pFileRead(NULL), m_iPosition(0), m_iLength(0) {} -FX_BOOL CFX_FileReadStreamImp::LoadFileRead(IFX_FileRead* pFileRead, - FX_DWORD dwAccess) { - FXSYS_assert(m_pFileRead == NULL && pFileRead != NULL); - if (dwAccess & FX_STREAMACCESS_Write) { - return FALSE; - } - m_pFileRead = pFileRead; - m_iLength = m_pFileRead->GetSize(); - return TRUE; -} -int32_t CFX_FileReadStreamImp::GetLength() const { - return m_iLength; -} -int32_t CFX_FileReadStreamImp::Seek(FX_STREAMSEEK eSeek, int32_t iOffset) { - switch (eSeek) { - case FX_STREAMSEEK_Begin: - m_iPosition = iOffset; - break; - case FX_STREAMSEEK_Current: - m_iPosition += iOffset; - break; - case FX_STREAMSEEK_End: - m_iPosition = m_iLength + iOffset; - break; - } - if (m_iPosition < 0) { - m_iPosition = 0; - } else if (m_iPosition >= m_iLength) { - m_iPosition = m_iLength; - } - return m_iPosition; -} -FX_BOOL CFX_FileReadStreamImp::IsEOF() const { - return m_iPosition >= m_iLength; -} -int32_t CFX_FileReadStreamImp::ReadData(uint8_t* pBuffer, int32_t iBufferSize) { - FXSYS_assert(m_pFileRead != NULL); - FXSYS_assert(pBuffer != NULL && iBufferSize > 0); - if (iBufferSize > m_iLength - m_iPosition) { - iBufferSize = m_iLength - m_iPosition; - } - if (m_pFileRead->ReadBlock(pBuffer, m_iPosition, iBufferSize)) { - m_iPosition += iBufferSize; - return iBufferSize; - } - return 0; -} -int32_t CFX_FileReadStreamImp::ReadString(FX_WCHAR* pStr, - int32_t iMaxLength, - FX_BOOL& bEOS) { - FXSYS_assert(m_pFileRead != NULL); - FXSYS_assert(pStr != NULL && iMaxLength > 0); - iMaxLength = ReadData((uint8_t*)pStr, iMaxLength * 2) / 2; - if (iMaxLength <= 0) { - return 0; - } - int32_t i = 0; - while (i < iMaxLength && pStr[i] != L'\0') { - ++i; - } - bEOS = (m_iPosition >= m_iLength) || pStr[i] == L'\0'; - return i; -} -CFX_BufferReadStreamImp::CFX_BufferReadStreamImp() - : m_pBufferRead(NULL), - m_bReleaseBufferRead(FALSE), - m_iPosition(0), - m_iBufferSize(0) {} -CFX_BufferReadStreamImp::~CFX_BufferReadStreamImp() { - if (m_bReleaseBufferRead && m_pBufferRead != NULL) { - m_pBufferRead->Release(); - } -} -FX_BOOL CFX_BufferReadStreamImp::LoadBufferRead(IFX_BufferRead* pBufferRead, - int32_t iFileSize, - FX_DWORD dwAccess, - FX_BOOL bReleaseBufferRead) { - FXSYS_assert(m_pBufferRead == NULL && pBufferRead != NULL); - if (dwAccess & FX_STREAMACCESS_Write) { - return FALSE; - } - m_bReleaseBufferRead = bReleaseBufferRead; - m_pBufferRead = pBufferRead; - m_iBufferSize = iFileSize; - if (m_iBufferSize >= 0) { - return TRUE; - } - if (!m_pBufferRead->ReadNextBlock(TRUE)) { - return FALSE; - } - m_iBufferSize = m_pBufferRead->GetBlockSize(); - while (!m_pBufferRead->IsEOF()) { - m_pBufferRead->ReadNextBlock(FALSE); - m_iBufferSize += m_pBufferRead->GetBlockSize(); - } - return TRUE; -} -int32_t CFX_BufferReadStreamImp::GetLength() const { - return m_iBufferSize; -} -int32_t CFX_BufferReadStreamImp::Seek(FX_STREAMSEEK eSeek, int32_t iOffset) { - int32_t iLength = GetLength(); - switch (eSeek) { - case FX_STREAMSEEK_Begin: - m_iPosition = iOffset; - break; - case FX_STREAMSEEK_Current: - m_iPosition += iOffset; - break; - case FX_STREAMSEEK_End: - m_iPosition = iLength + iOffset; - break; - } - if (m_iPosition < 0) { - m_iPosition = 0; - } else if (m_iPosition >= iLength) { - m_iPosition = iLength; - } - return m_iPosition; -} -FX_BOOL CFX_BufferReadStreamImp::IsEOF() const { - return m_pBufferRead ? m_pBufferRead->IsEOF() : TRUE; -} -int32_t CFX_BufferReadStreamImp::ReadData(uint8_t* pBuffer, - int32_t iBufferSize) { - FXSYS_assert(m_pBufferRead != NULL); - FXSYS_assert(pBuffer != NULL && iBufferSize > 0); - int32_t iLength = GetLength(); - if (m_iPosition >= iLength) { - return 0; - } - if (iBufferSize > iLength - m_iPosition) { - iBufferSize = iLength - m_iPosition; - } - FX_DWORD dwBlockOffset = m_pBufferRead->GetBlockOffset(); - FX_DWORD dwBlockSize = m_pBufferRead->GetBlockSize(); - if (m_iPosition < (int32_t)dwBlockOffset) { - if (!m_pBufferRead->ReadNextBlock(TRUE)) { - return 0; - } - dwBlockOffset = m_pBufferRead->GetBlockOffset(); - dwBlockSize = m_pBufferRead->GetBlockSize(); - } - while (m_iPosition < (int32_t)dwBlockOffset || - m_iPosition >= (int32_t)(dwBlockOffset + dwBlockSize)) { - if (m_pBufferRead->IsEOF() || !m_pBufferRead->ReadNextBlock(FALSE)) { - break; - } - dwBlockOffset = m_pBufferRead->GetBlockOffset(); - dwBlockSize = m_pBufferRead->GetBlockSize(); - } - if (m_iPosition < (int32_t)dwBlockOffset || - m_iPosition >= (int32_t)(dwBlockOffset + dwBlockSize)) { - return 0; - } - const uint8_t* pBufferTmp = m_pBufferRead->GetBlockBuffer(); - FX_DWORD dwOffsetTmp = m_iPosition - dwBlockOffset; - FX_DWORD dwCopySize = - std::min(iBufferSize, (int32_t)(dwBlockSize - dwOffsetTmp)); - FXSYS_memcpy(pBuffer, pBufferTmp + dwOffsetTmp, dwCopySize); - dwOffsetTmp = dwCopySize; - iBufferSize -= dwCopySize; - while (iBufferSize > 0) { - if (!m_pBufferRead->ReadNextBlock(FALSE)) { - break; - } - dwBlockOffset = m_pBufferRead->GetBlockOffset(); - dwBlockSize = m_pBufferRead->GetBlockSize(); - pBufferTmp = m_pBufferRead->GetBlockBuffer(); - dwCopySize = std::min((FX_DWORD)iBufferSize, dwBlockSize); - FXSYS_memcpy(pBuffer + dwOffsetTmp, pBufferTmp, dwCopySize); - dwOffsetTmp += dwCopySize; - iBufferSize -= dwCopySize; - } - m_iPosition += dwOffsetTmp; - return dwOffsetTmp; -} -int32_t CFX_BufferReadStreamImp::ReadString(FX_WCHAR* pStr, - int32_t iMaxLength, - FX_BOOL& bEOS) { - FXSYS_assert(m_pBufferRead != NULL); - FXSYS_assert(pStr != NULL && iMaxLength > 0); - iMaxLength = ReadData((uint8_t*)pStr, iMaxLength * 2) / 2; - if (iMaxLength <= 0) { - return 0; - } - int32_t i = 0; - while (i < iMaxLength && pStr[i] != L'\0') { - ++i; - } - bEOS = (m_iPosition >= GetLength()) || pStr[i] == L'\0'; - return i; -} -CFX_FileWriteStreamImp::CFX_FileWriteStreamImp() - : m_pFileWrite(NULL), m_iPosition(0) {} -FX_BOOL CFX_FileWriteStreamImp::LoadFileWrite(IFX_FileWrite* pFileWrite, - FX_DWORD dwAccess) { - FXSYS_assert(m_pFileWrite == NULL && pFileWrite != NULL); - if (dwAccess & FX_STREAMACCESS_Read) { - return FALSE; - } - if (dwAccess & FX_STREAMACCESS_Append) { - m_iPosition = pFileWrite->GetSize(); - } - m_pFileWrite = pFileWrite; - return TRUE; -} -int32_t CFX_FileWriteStreamImp::GetLength() const { - if (!m_pFileWrite) { - return 0; - } - return (int32_t)m_pFileWrite->GetSize(); -} -int32_t CFX_FileWriteStreamImp::Seek(FX_STREAMSEEK eSeek, int32_t iOffset) { - int32_t iLength = GetLength(); - switch (eSeek) { - case FX_STREAMSEEK_Begin: - m_iPosition = iOffset; - break; - case FX_STREAMSEEK_Current: - m_iPosition += iOffset; - break; - case FX_STREAMSEEK_End: - m_iPosition = iLength + iOffset; - break; - } - if (m_iPosition < 0) { - m_iPosition = 0; - } else if (m_iPosition >= iLength) { - m_iPosition = iLength; - } - return m_iPosition; -} -FX_BOOL CFX_FileWriteStreamImp::IsEOF() const { - return m_iPosition >= GetLength(); -} -int32_t CFX_FileWriteStreamImp::WriteData(const uint8_t* pBuffer, - int32_t iBufferSize) { - if (!m_pFileWrite) { - return 0; - } - if (m_pFileWrite->WriteBlock(pBuffer, m_iPosition, iBufferSize)) { - m_iPosition += iBufferSize; - } - return iBufferSize; -} -int32_t CFX_FileWriteStreamImp::WriteString(const FX_WCHAR* pStr, - int32_t iLength) { - return WriteData((const uint8_t*)pStr, iLength * sizeof(FX_WCHAR)); -} -void CFX_FileWriteStreamImp::Flush() { - if (m_pFileWrite) { - m_pFileWrite->Flush(); - } -} -CFX_BufferStreamImp::CFX_BufferStreamImp() - : CFX_StreamImp(), - m_pData(NULL), - m_iTotalSize(0), - m_iPosition(0), - m_iLength(0) {} -FX_BOOL CFX_BufferStreamImp::LoadBuffer(uint8_t* pData, - int32_t iTotalSize, - FX_DWORD dwAccess) { - FXSYS_assert(m_pData == NULL); - FXSYS_assert(pData != NULL && iTotalSize > 0); - m_dwAccess = dwAccess; - m_pData = pData; - m_iTotalSize = iTotalSize; - m_iPosition = 0; - m_iLength = (dwAccess & FX_STREAMACCESS_Write) != 0 ? 0 : iTotalSize; - return TRUE; -} -int32_t CFX_BufferStreamImp::GetLength() const { - FXSYS_assert(m_pData != NULL); - return m_iLength; -} -int32_t CFX_BufferStreamImp::Seek(FX_STREAMSEEK eSeek, int32_t iOffset) { - FXSYS_assert(m_pData != NULL); - if (eSeek == FX_STREAMSEEK_Begin) { - m_iPosition = iOffset; - } else if (eSeek == FX_STREAMSEEK_Current) { - m_iPosition += iOffset; - } else if (eSeek == FX_STREAMSEEK_End) { - m_iPosition = m_iLength + iOffset; - } - if (m_iPosition > m_iLength) { - m_iPosition = m_iLength; - } - if (m_iPosition < 0) { - m_iPosition = 0; - } - return m_iPosition; -} -int32_t CFX_BufferStreamImp::GetPosition() { - FXSYS_assert(m_pData != NULL); - return m_iPosition; -} -FX_BOOL CFX_BufferStreamImp::IsEOF() const { - FXSYS_assert(m_pData != NULL); - return m_iPosition >= m_iLength; -} -int32_t CFX_BufferStreamImp::ReadData(uint8_t* pBuffer, int32_t iBufferSize) { - FXSYS_assert(m_pData != NULL); - FXSYS_assert(pBuffer != NULL && iBufferSize > 0); - int32_t iLen = std::min(m_iLength - m_iPosition, iBufferSize); - if (iLen <= 0) { - return 0; - } - FXSYS_memcpy(pBuffer, m_pData + m_iPosition, iLen); - m_iPosition += iLen; - return iLen; -} -int32_t CFX_BufferStreamImp::ReadString(FX_WCHAR* pStr, - int32_t iMaxLength, - FX_BOOL& bEOS) { - FXSYS_assert(m_pData != NULL); - FXSYS_assert(pStr != NULL && iMaxLength > 0); - int32_t iLen = std::min((m_iLength - m_iPosition) / 2, iMaxLength); - if (iLen <= 0) { - return 0; - } - const FX_WCHAR* pSrc = (const FX_WCHAR*)(FX_CHAR*)(m_pData + m_iPosition); - int32_t iCount = 0; - while (*pSrc != L'\0' && iCount < iLen) { - *pStr++ = *pSrc++, iCount++; - } - m_iPosition += iCount * 2; - bEOS = (*pSrc == L'\0') || (m_iPosition >= m_iLength); - return iCount; -} -int32_t CFX_BufferStreamImp::WriteData(const uint8_t* pBuffer, - int32_t iBufferSize) { - FXSYS_assert(m_pData != NULL && (m_dwAccess & FX_STREAMACCESS_Write) != 0); - FXSYS_assert(pBuffer != NULL && iBufferSize > 0); - int32_t iLen = std::min(m_iTotalSize - m_iPosition, iBufferSize); - if (iLen <= 0) { - return 0; - } - FXSYS_memcpy(m_pData + m_iPosition, pBuffer, iLen); - m_iPosition += iLen; - if (m_iPosition > m_iLength) { - m_iLength = m_iPosition; - } - return iLen; -} -int32_t CFX_BufferStreamImp::WriteString(const FX_WCHAR* pStr, - int32_t iLength) { - FXSYS_assert(m_pData != NULL && (m_dwAccess & FX_STREAMACCESS_Write) != 0); - FXSYS_assert(pStr != NULL && iLength > 0); - int32_t iLen = std::min((m_iTotalSize - m_iPosition) / 2, iLength); - if (iLen <= 0) { - return 0; - } - FXSYS_memcpy(m_pData + m_iPosition, pStr, iLen * 2); - m_iPosition += iLen * 2; - if (m_iPosition > m_iLength) { - m_iLength = m_iPosition; - } - return iLen; -} -IFX_Stream* IFX_Stream::CreateTextStream(IFX_Stream* pBaseStream, - FX_BOOL bDeleteOnRelease) { - FXSYS_assert(pBaseStream != NULL); - return new CFX_TextStream(pBaseStream, bDeleteOnRelease); -} -CFX_TextStream::CFX_TextStream(IFX_Stream* pStream, FX_BOOL bDelStream) - : m_wCodePage(FX_CODEPAGE_DefANSI), - m_wBOMLength(0), - m_dwBOM(0), - m_pBuf(NULL), - m_iBufSize(0), - m_bDelStream(bDelStream), - m_pStreamImp(pStream), - m_iRefCount(1) { - FXSYS_assert(m_pStreamImp != NULL); - m_pStreamImp->Retain(); - InitStream(); -} -CFX_TextStream::~CFX_TextStream() { - m_pStreamImp->Release(); - if (m_bDelStream) { - m_pStreamImp->Release(); - } - if (m_pBuf != NULL) { - FX_Free(m_pBuf); - } -} -void CFX_TextStream::InitStream() { - int32_t iPosition = m_pStreamImp->GetPosition(); - m_pStreamImp->Seek(FX_STREAMSEEK_Begin, 0); - m_pStreamImp->ReadData((uint8_t*)&m_dwBOM, 3); -#if _FX_ENDIAN_ == _FX_LITTLE_ENDIAN_ - m_dwBOM &= 0x00FFFFFF; - if (m_dwBOM == 0x00BFBBEF) { - m_wBOMLength = 3; - m_wCodePage = FX_CODEPAGE_UTF8; - } else { - m_dwBOM &= 0x0000FFFF; - if (m_dwBOM == 0x0000FFFE) { - m_wBOMLength = 2; - m_wCodePage = FX_CODEPAGE_UTF16BE; - } else if (m_dwBOM == 0x0000FEFF) { - m_wBOMLength = 2; - m_wCodePage = FX_CODEPAGE_UTF16LE; - } else { - m_wBOMLength = 0; - m_dwBOM = 0; - m_wCodePage = FXSYS_GetACP(); - } - } -#else - m_dwBOM &= 0xFFFFFF00; - if (m_dwBOM == 0xEFBBBF00) { - m_wBOMLength = 3; - m_wCodePage = FX_CODEPAGE_UTF8; - } else { - m_dwBOM &= 0xFFFF0000; - if (m_dwBOM == 0xFEFF0000) { - m_wBOMLength = 2; - m_wCodePage = FX_CODEPAGE_UTF16BE; - } else if (m_dwBOM == 0xFFFE0000) { - m_wBOMLength = 2; - m_wCodePage = FX_CODEPAGE_UTF16LE; - } else { - m_wBOMLength = 0; - m_dwBOM = 0; - m_wCodePage = FXSYS_GetACP(); - } - } -#endif - m_pStreamImp->Seek(FX_STREAMSEEK_Begin, std::max(m_wBOMLength, iPosition)); -} -void CFX_TextStream::Release() { - if (--m_iRefCount < 1) { - delete this; - } -} -IFX_Stream* CFX_TextStream::Retain() { - m_iRefCount++; - return this; -} -FX_DWORD CFX_TextStream::GetAccessModes() const { - return m_pStreamImp->GetAccessModes() | FX_STREAMACCESS_Text; -} -int32_t CFX_TextStream::GetLength() const { - return m_pStreamImp->GetLength(); -} -int32_t CFX_TextStream::Seek(FX_STREAMSEEK eSeek, int32_t iOffset) { - return m_pStreamImp->Seek(eSeek, iOffset); -} -int32_t CFX_TextStream::GetPosition() { - return m_pStreamImp->GetPosition(); -} -FX_BOOL CFX_TextStream::IsEOF() const { - return m_pStreamImp->IsEOF(); -} -int32_t CFX_TextStream::ReadData(uint8_t* pBuffer, int32_t iBufferSize) { - return m_pStreamImp->ReadData(pBuffer, iBufferSize); -} -int32_t CFX_TextStream::WriteData(const uint8_t* pBuffer, int32_t iBufferSize) { - return m_pStreamImp->WriteData(pBuffer, iBufferSize); -} -void CFX_TextStream::Flush() { - m_pStreamImp->Flush(); -} -FX_BOOL CFX_TextStream::SetLength(int32_t iLength) { - return m_pStreamImp->SetLength(iLength); -} -FX_WORD CFX_TextStream::GetCodePage() const { - return m_wCodePage; -} -IFX_Stream* CFX_TextStream::CreateSharedStream(FX_DWORD dwAccess, - int32_t iOffset, - int32_t iLength) { - IFX_Stream* pSR = - m_pStreamImp->CreateSharedStream(dwAccess, iOffset, iLength); - if (pSR == NULL) { - return NULL; - } - if (dwAccess & FX_STREAMACCESS_Text) { - return new CFX_TextStream(pSR, TRUE); - } - return pSR; -} -int32_t CFX_TextStream::GetBOM(uint8_t bom[4]) const { - if (m_wBOMLength < 1) { - return 0; - } - *(FX_DWORD*)bom = m_dwBOM; - return m_wBOMLength; -} -FX_WORD CFX_TextStream::SetCodePage(FX_WORD wCodePage) { - if (m_wBOMLength > 0) { - return m_wCodePage; - } - FX_WORD v = m_wCodePage; - m_wCodePage = wCodePage; - return v; -} -int32_t CFX_TextStream::ReadString(FX_WCHAR* pStr, - int32_t iMaxLength, - FX_BOOL& bEOS, - int32_t const* pByteSize) { - FXSYS_assert(pStr != NULL && iMaxLength > 0); - if (m_pStreamImp == NULL) { - return -1; - } - int32_t iLen; - if (m_wCodePage == FX_CODEPAGE_UTF16LE || - m_wCodePage == FX_CODEPAGE_UTF16BE) { - int32_t iBytes = pByteSize == NULL ? iMaxLength * 2 : *pByteSize; - iLen = m_pStreamImp->ReadData((uint8_t*)pStr, iBytes); - iMaxLength = iLen / 2; - if (sizeof(FX_WCHAR) > 2) { - FX_UTF16ToWChar(pStr, iMaxLength); - } -#if _FX_ENDIAN_ == _FX_BIG_ENDIAN_ - if (m_wCodePage == FX_CODEPAGE_UTF16LE) { - FX_SwapByteOrder(pStr, iMaxLength); - } -#else - if (m_wCodePage == FX_CODEPAGE_UTF16BE) { - FX_SwapByteOrder(pStr, iMaxLength); - } -#endif - } else { - int32_t pos = m_pStreamImp->GetPosition(); - int32_t iBytes = pByteSize == NULL ? iMaxLength : *pByteSize; - iBytes = std::min(iBytes, m_pStreamImp->GetLength() - pos); - if (iBytes > 0) { - if (m_pBuf == NULL) { - m_pBuf = FX_Alloc(uint8_t, iBytes); - m_iBufSize = iBytes; - } else if (iBytes > m_iBufSize) { - m_pBuf = FX_Realloc(uint8_t, m_pBuf, iBytes); - m_iBufSize = iBytes; - } - iLen = m_pStreamImp->ReadData(m_pBuf, iBytes); - int32_t iSrc = iLen; - int32_t iDecode = FX_DecodeString(m_wCodePage, (const FX_CHAR*)m_pBuf, - &iSrc, pStr, &iMaxLength, TRUE); - m_pStreamImp->Seek(FX_STREAMSEEK_Current, iSrc - iLen); - if (iDecode < 1) { - return -1; - } - } else { - iMaxLength = 0; - } - } - bEOS = m_pStreamImp->IsEOF(); - return iMaxLength; -} -int32_t CFX_TextStream::WriteString(const FX_WCHAR* pStr, int32_t iLength) { - FXSYS_assert(pStr != NULL && iLength > 0); - if ((m_pStreamImp->GetAccessModes() & FX_STREAMACCESS_Write) == 0) { - return -1; - } - if (m_wCodePage == FX_CODEPAGE_UTF8) { - int32_t len = iLength; - CFX_UTF8Encoder encoder; - while (len-- > 0) { - encoder.Input(*pStr++); - } - CFX_ByteStringC bsResult = encoder.GetResult(); - m_pStreamImp->WriteData((const uint8_t*)bsResult.GetCStr(), - bsResult.GetLength()); - } - return iLength; -} -CFX_Stream::CFX_Stream() - : m_eStreamType(FX_SREAMTYPE_Unknown), - m_pStreamImp(NULL), - m_dwAccess(0), - m_iTotalSize(0), - m_iPosition(0), - m_iStart(0), - m_iLength(0), - m_iRefCount(1) {} -CFX_Stream::~CFX_Stream() { - if (m_eStreamType != FX_STREAMTYPE_Stream && m_pStreamImp != NULL) { - m_pStreamImp->Release(); - } -} -FX_BOOL CFX_Stream::LoadFile(const FX_WCHAR* pszSrcFileName, - FX_DWORD dwAccess) { - if (m_eStreamType != FX_SREAMTYPE_Unknown || m_pStreamImp != NULL) { - return FALSE; - } - if (pszSrcFileName == NULL || FXSYS_wcslen(pszSrcFileName) < 1) { - return FALSE; - } - m_pStreamImp = new CFX_FileStreamImp(); - FX_BOOL bRet = - ((CFX_FileStreamImp*)m_pStreamImp)->LoadFile(pszSrcFileName, dwAccess); - if (!bRet) { - m_pStreamImp->Release(); - m_pStreamImp = NULL; - } else { - m_eStreamType = FX_STREAMTYPE_File; - m_dwAccess = dwAccess; - m_iLength = m_pStreamImp->GetLength(); - } - return bRet; -} -FX_BOOL CFX_Stream::LoadFileRead(IFX_FileRead* pFileRead, FX_DWORD dwAccess) { - if (m_eStreamType != FX_SREAMTYPE_Unknown || m_pStreamImp != NULL) { - return FALSE; - } - if (pFileRead == NULL) { - return FALSE; - } - m_pStreamImp = new CFX_FileReadStreamImp(); - FX_BOOL bRet = - ((CFX_FileReadStreamImp*)m_pStreamImp)->LoadFileRead(pFileRead, dwAccess); - if (!bRet) { - m_pStreamImp->Release(); - m_pStreamImp = NULL; - } else { - m_eStreamType = FX_STREAMTYPE_File; - m_dwAccess = dwAccess; - m_iLength = m_pStreamImp->GetLength(); - } - return bRet; -} -FX_BOOL CFX_Stream::LoadFileWrite(IFX_FileWrite* pFileWrite, - FX_DWORD dwAccess) { - if (m_eStreamType != FX_SREAMTYPE_Unknown || m_pStreamImp != NULL) { - return FALSE; - } - if (pFileWrite == NULL) { - return FALSE; - } - m_pStreamImp = new CFX_FileWriteStreamImp(); - FX_BOOL bRet = ((CFX_FileWriteStreamImp*)m_pStreamImp) - ->LoadFileWrite(pFileWrite, dwAccess); - if (!bRet) { - m_pStreamImp->Release(); - m_pStreamImp = NULL; - } else { - m_eStreamType = FX_STREAMTYPE_File; - m_dwAccess = dwAccess; - m_iLength = m_pStreamImp->GetLength(); - } - return bRet; -} -FX_BOOL CFX_Stream::LoadBuffer(uint8_t* pData, - int32_t iTotalSize, - FX_DWORD dwAccess) { - if (m_eStreamType != FX_SREAMTYPE_Unknown || m_pStreamImp != NULL) { - return FALSE; - } - if (pData == NULL || iTotalSize < 1) { - return FALSE; - } - m_pStreamImp = new CFX_BufferStreamImp(); - FX_BOOL bRet = ((CFX_BufferStreamImp*)m_pStreamImp) - ->LoadBuffer(pData, iTotalSize, dwAccess); - if (!bRet) { - m_pStreamImp->Release(); - m_pStreamImp = NULL; - } else { - m_eStreamType = FX_STREAMTYPE_Buffer; - m_dwAccess = dwAccess; - m_iLength = m_pStreamImp->GetLength(); - } - return bRet; -} -FX_BOOL CFX_Stream::LoadBufferRead(IFX_BufferRead* pBufferRead, - int32_t iFileSize, - FX_DWORD dwAccess, - FX_BOOL bReleaseBufferRead) { - if (m_eStreamType != FX_SREAMTYPE_Unknown || m_pStreamImp != NULL) { - return FALSE; - } - if (!pBufferRead) { - return FALSE; - } - m_pStreamImp = new CFX_BufferReadStreamImp; - FX_BOOL bRet = ((CFX_BufferReadStreamImp*)m_pStreamImp) - ->LoadBufferRead(pBufferRead, iFileSize, dwAccess, - bReleaseBufferRead); - if (!bRet) { - m_pStreamImp->Release(); - m_pStreamImp = NULL; - } else { - m_eStreamType = FX_STREAMTYPE_BufferRead; - m_dwAccess = dwAccess; - m_iLength = m_pStreamImp->GetLength(); - } - return bRet; -} -void CFX_Stream::Release() { - if (--m_iRefCount < 1) { - delete this; - } -} -IFX_Stream* CFX_Stream::Retain() { - m_iRefCount++; - return this; -} -int32_t CFX_Stream::GetLength() const { - if (m_pStreamImp == NULL) { - return -1; - } - if (m_eStreamType == FX_STREAMTYPE_File || - m_eStreamType == FX_STREAMTYPE_Buffer) { - return m_pStreamImp->GetLength(); - } - return m_iLength; -} -int32_t CFX_Stream::Seek(FX_STREAMSEEK eSeek, int32_t iOffset) { - if (m_pStreamImp == NULL) { - return -1; - } - if (m_eStreamType == FX_STREAMTYPE_File || - m_eStreamType == FX_STREAMTYPE_Buffer) { - return m_iPosition = m_pStreamImp->Seek(eSeek, iOffset); - } - int32_t iEnd = m_iStart + m_iLength; - int32_t iPosition = m_iStart + iOffset; - if (eSeek == FX_STREAMSEEK_Begin) { - m_iPosition = iPosition; - } else if (eSeek == FX_STREAMSEEK_Current) { - m_iPosition += iOffset; - } else if (eSeek == FX_STREAMSEEK_End) { - m_iPosition = iEnd + iOffset; - } - if (m_iPosition > iEnd) { - m_iPosition = iEnd; - } - if (m_iPosition < m_iStart) { - m_iPosition = m_iStart; - } - return m_iPosition - m_iStart; -} -int32_t CFX_Stream::GetPosition() { - if (m_pStreamImp == NULL) { - return -1; - } - if (m_eStreamType == FX_STREAMTYPE_File || - m_eStreamType == FX_STREAMTYPE_Buffer) { - return m_iPosition = m_pStreamImp->GetPosition(); - } - return m_iPosition - m_iStart; -} -FX_BOOL CFX_Stream::IsEOF() const { - if (m_pStreamImp == NULL) { - return TRUE; - } - if (m_eStreamType == FX_STREAMTYPE_File || - m_eStreamType == FX_STREAMTYPE_Buffer) { - return m_pStreamImp->IsEOF(); - } - return m_iPosition >= m_iStart + m_iLength; -} -int32_t CFX_Stream::ReadData(uint8_t* pBuffer, int32_t iBufferSize) { - FXSYS_assert(pBuffer != NULL && iBufferSize > 0); - if (m_pStreamImp == NULL) { - return -1; - } - int32_t iLen = std::min(m_iStart + m_iLength - m_iPosition, iBufferSize); - if (iLen <= 0) { - return 0; - } - if (m_pStreamImp->GetPosition() != m_iPosition) { - m_pStreamImp->Seek(FX_STREAMSEEK_Begin, m_iPosition); - } - iLen = m_pStreamImp->ReadData(pBuffer, iLen); - m_iPosition = m_pStreamImp->GetPosition(); - return iLen; -} -int32_t CFX_Stream::ReadString(FX_WCHAR* pStr, - int32_t iMaxLength, - FX_BOOL& bEOS, - int32_t const* pByteSize) { - FXSYS_assert(pStr != NULL && iMaxLength > 0); - if (m_pStreamImp == NULL) { - return -1; - } - int32_t iEnd = m_iStart + m_iLength; - int32_t iLen = iEnd - m_iPosition; - if (pByteSize != NULL) { - iLen = std::min(iLen, *pByteSize); - } - iLen = std::min(iEnd / 2, iMaxLength); - if (iLen <= 0) { - return 0; - } - if (m_pStreamImp->GetPosition() != m_iPosition) { - m_pStreamImp->Seek(FX_STREAMSEEK_Begin, m_iPosition); - } - iLen = m_pStreamImp->ReadString(pStr, iLen, bEOS); - m_iPosition = m_pStreamImp->GetPosition(); - if (iLen > 0 && m_iPosition >= iEnd) { - bEOS = TRUE; - } - return iLen; -} -int32_t CFX_Stream::WriteData(const uint8_t* pBuffer, int32_t iBufferSize) { - FXSYS_assert(pBuffer != NULL && iBufferSize > 0); - if (m_pStreamImp == NULL) { - return -1; - } - if ((m_dwAccess & FX_STREAMACCESS_Write) == 0) { - return -1; - } - int32_t iLen = iBufferSize; - if (m_eStreamType == FX_STREAMTYPE_Stream) { - iLen = std::min(m_iStart + m_iTotalSize - m_iPosition, iBufferSize); - if (iLen <= 0) { - return 0; - } - } - int32_t iEnd = m_iStart + m_iLength; - if (m_pStreamImp->GetPosition() != m_iPosition) { - m_pStreamImp->Seek(FX_STREAMSEEK_Begin, m_iPosition); - } - iLen = m_pStreamImp->WriteData(pBuffer, iLen); - m_iPosition = m_pStreamImp->GetPosition(); - if (m_iPosition > iEnd) { - m_iLength = m_iPosition - m_iStart; - } - return iLen; -} -int32_t CFX_Stream::WriteString(const FX_WCHAR* pStr, int32_t iLength) { - FXSYS_assert(pStr != NULL && iLength > 0); - if (m_pStreamImp == NULL) { - return -1; - } - if ((m_dwAccess & FX_STREAMACCESS_Write) == 0) { - return -1; - } - int32_t iLen = iLength; - if (m_eStreamType == FX_STREAMTYPE_Stream) { - iLen = std::min((m_iStart + m_iTotalSize - m_iPosition) / 2, iLength); - if (iLen <= 0) { - return 0; - } - } - int32_t iEnd = m_iStart + m_iLength; - if (m_pStreamImp->GetPosition() != m_iPosition) { - m_pStreamImp->Seek(FX_STREAMSEEK_Begin, m_iPosition); - } - iLen = m_pStreamImp->WriteString(pStr, iLen); - m_iPosition = m_pStreamImp->GetPosition(); - if (m_iPosition > iEnd) { - m_iLength = m_iPosition - m_iStart; - } - return iLen; -} -void CFX_Stream::Flush() { - if (m_pStreamImp == NULL) { - return; - } - if ((m_dwAccess & FX_STREAMACCESS_Write) == 0) { - return; - } - m_pStreamImp->Flush(); -} -FX_BOOL CFX_Stream::SetLength(int32_t iLength) { - if (m_pStreamImp == NULL) { - return FALSE; - } - if ((m_dwAccess & FX_STREAMACCESS_Write) == 0) { - return FALSE; - } - return m_pStreamImp->SetLength(iLength); -} -int32_t CFX_Stream::GetBOM(uint8_t bom[4]) const { - if (m_pStreamImp == NULL) { - return -1; - } - return 0; -} -FX_WORD CFX_Stream::GetCodePage() const { -#if _FX_ENDIAN_ == _FX_LITTLE_ENDIAN_ - return FX_CODEPAGE_UTF16LE; -#else - return FX_CODEPAGE_UTF16BE; -#endif -} -FX_WORD CFX_Stream::SetCodePage(FX_WORD wCodePage) { -#if _FX_ENDIAN_ == _FX_LITTLE_ENDIAN_ - return FX_CODEPAGE_UTF16LE; -#else - return FX_CODEPAGE_UTF16BE; -#endif -} -IFX_Stream* CFX_Stream::CreateSharedStream(FX_DWORD dwAccess, - int32_t iOffset, - int32_t iLength) { - FXSYS_assert(iLength > 0); - if (m_pStreamImp == NULL) { - return NULL; - } - if ((m_dwAccess & FX_STREAMACCESS_Text) != 0 && - (dwAccess & FX_STREAMACCESS_Text) == 0) { - return NULL; - } - if ((m_dwAccess & FX_STREAMACCESS_Write) == 0 && - (dwAccess & FX_STREAMACCESS_Write) != 0) { - return NULL; - } - int32_t iStart = m_iStart + iOffset; - int32_t iTotal = m_iStart + m_iLength; - if (iStart < m_iStart || iStart >= iTotal) { - return NULL; - } - int32_t iEnd = iStart + iLength; - if (iEnd < iStart || iEnd > iTotal) { - return NULL; - } - CFX_Stream* pShared = new CFX_Stream; - pShared->m_eStreamType = FX_STREAMTYPE_Stream; - pShared->m_pStreamImp = m_pStreamImp; - pShared->m_dwAccess = dwAccess; - pShared->m_iTotalSize = iLength; - pShared->m_iPosition = iStart; - pShared->m_iStart = iStart; - pShared->m_iLength = (dwAccess & FX_STREAMACCESS_Write) != 0 ? 0 : iLength; - if (dwAccess & FX_STREAMACCESS_Text) { - return IFX_Stream::CreateTextStream(pShared, TRUE); - } - return pShared; -} -IFX_FileRead* FX_CreateFileRead(IFX_Stream* pBaseStream, - FX_BOOL bReleaseStream) { - FXSYS_assert(pBaseStream != NULL); - return new CFGAS_FileRead(pBaseStream, bReleaseStream); -} -CFGAS_FileRead::CFGAS_FileRead(IFX_Stream* pStream, FX_BOOL bReleaseStream) - : m_bReleaseStream(bReleaseStream), m_pStream(pStream) { - FXSYS_assert(m_pStream != NULL); -} -CFGAS_FileRead::~CFGAS_FileRead() { - if (m_bReleaseStream) { - m_pStream->Release(); - } -} -FX_FILESIZE CFGAS_FileRead::GetSize() { - return (FX_FILESIZE)m_pStream->GetLength(); -} -FX_BOOL CFGAS_FileRead::ReadBlock(void* buffer, - FX_FILESIZE offset, - size_t size) { - m_pStream->Seek(FX_STREAMSEEK_Begin, (int32_t)offset); - int32_t iLen = m_pStream->ReadData((uint8_t*)buffer, (int32_t)size); - return iLen == (int32_t)size; -} - -IFX_FileRead* FX_CreateFileRead(IFX_BufferRead* pBufferRead, - FX_FILESIZE iFileSize, - FX_BOOL bReleaseStream) { - if (!pBufferRead) { - return NULL; - } - return new CFX_BufferAccImp(pBufferRead, iFileSize, bReleaseStream); -} -CFX_BufferAccImp::CFX_BufferAccImp(IFX_BufferRead* pBufferRead, - FX_FILESIZE iFileSize, - FX_BOOL bReleaseStream) - : m_pBufferRead(pBufferRead), - m_bReleaseStream(bReleaseStream), - m_iBufSize(iFileSize) { - FXSYS_assert(m_pBufferRead); -} -CFX_BufferAccImp::~CFX_BufferAccImp() { - if (m_bReleaseStream && m_pBufferRead) { - m_pBufferRead->Release(); - } -} -FX_FILESIZE CFX_BufferAccImp::GetSize() { - if (!m_pBufferRead) { - return 0; - } - if (m_iBufSize >= 0) { - return m_iBufSize; - } - if (!m_pBufferRead->ReadNextBlock(TRUE)) { - return 0; - } - m_iBufSize = (FX_FILESIZE)m_pBufferRead->GetBlockSize(); - while (!m_pBufferRead->IsEOF()) { - m_pBufferRead->ReadNextBlock(FALSE); - m_iBufSize += (FX_FILESIZE)m_pBufferRead->GetBlockSize(); - } - return m_iBufSize; -} -FX_BOOL CFX_BufferAccImp::ReadBlock(void* buffer, - FX_FILESIZE offset, - size_t size) { - if (!m_pBufferRead) { - return FALSE; - } - if (!buffer || !size) { - return TRUE; - } - FX_FILESIZE dwBufSize = GetSize(); - if (offset >= dwBufSize) { - return FALSE; - } - size_t dwBlockSize = m_pBufferRead->GetBlockSize(); - FX_FILESIZE dwBlockOffset = m_pBufferRead->GetBlockOffset(); - if (offset < dwBlockOffset) { - if (!m_pBufferRead->ReadNextBlock(TRUE)) { - return FALSE; - } - dwBlockSize = m_pBufferRead->GetBlockSize(); - dwBlockOffset = m_pBufferRead->GetBlockOffset(); - } - while (offset < dwBlockOffset || - offset >= (FX_FILESIZE)(dwBlockOffset + dwBlockSize)) { - if (m_pBufferRead->IsEOF() || !m_pBufferRead->ReadNextBlock(FALSE)) { - break; - } - dwBlockSize = m_pBufferRead->GetBlockSize(); - dwBlockOffset = m_pBufferRead->GetBlockOffset(); - } - if (offset < dwBlockOffset || - offset >= (FX_FILESIZE)(dwBlockOffset + dwBlockSize)) { - return FALSE; - } - const uint8_t* pBuffer = m_pBufferRead->GetBlockBuffer(); - const FX_FILESIZE dwOffset = offset - dwBlockOffset; - size_t dwCopySize = - std::min(size, static_cast(dwBlockSize - dwOffset)); - FXSYS_memcpy(buffer, pBuffer + dwOffset, dwCopySize); - offset = dwCopySize; - size -= dwCopySize; - while (size) { - if (!m_pBufferRead->ReadNextBlock(FALSE)) { - break; - } - dwBlockOffset = m_pBufferRead->GetBlockOffset(); - dwBlockSize = m_pBufferRead->GetBlockSize(); - pBuffer = m_pBufferRead->GetBlockBuffer(); - dwCopySize = std::min(size, dwBlockSize); - FXSYS_memcpy(((uint8_t*)buffer) + offset, pBuffer, dwCopySize); - offset += dwCopySize; - size -= dwCopySize; - } - return TRUE; -} - -IFX_FileWrite* FX_CreateFileWrite(IFX_Stream* pBaseStream, - FX_BOOL bReleaseStream) { - FXSYS_assert(pBaseStream != NULL); - return new CFGAS_FileWrite(pBaseStream, bReleaseStream); -} - -CFGAS_FileWrite::CFGAS_FileWrite(IFX_Stream* pStream, FX_BOOL bReleaseStream) - : m_pStream(pStream), m_bReleaseStream(bReleaseStream) { - FXSYS_assert(m_pStream != NULL); -} -CFGAS_FileWrite::~CFGAS_FileWrite() { - if (m_bReleaseStream) { - m_pStream->Release(); - } -} -FX_FILESIZE CFGAS_FileWrite::GetSize() { - return m_pStream->GetLength(); -} -FX_BOOL CFGAS_FileWrite::Flush() { - m_pStream->Flush(); - return TRUE; -} -FX_BOOL CFGAS_FileWrite::WriteBlock(const void* pData, size_t size) { - return m_pStream->WriteData((const uint8_t*)pData, (int32_t)size) == - (int32_t)size; -} -FX_BOOL CFGAS_FileWrite::WriteBlock(const void* pData, - FX_FILESIZE offset, - size_t size) { - m_pStream->Seek(FX_STREAMSEEK_Begin, offset); - int32_t iLen = m_pStream->WriteData((uint8_t*)pData, (int32_t)size); - return iLen == (int32_t)size; -} diff --git a/xfa/src/fgas/crt/fgas_stream.h b/xfa/src/fgas/crt/fgas_stream.h deleted file mode 100644 index cc40a76cc6..0000000000 --- a/xfa/src/fgas/crt/fgas_stream.h +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FGAS_CRT_FGAS_STREAM_H_ -#define XFA_SRC_FGAS_CRT_FGAS_STREAM_H_ - -#include "core/include/fxcrt/fx_stream.h" -#include "core/include/fxcrt/fx_system.h" - -class IFX_Stream; - -IFX_FileRead* FX_CreateFileRead(IFX_Stream* pBaseStream, - FX_BOOL bReleaseStream = FALSE); -IFX_FileRead* FX_CreateFileRead(IFX_BufferRead* pBufferRead, - FX_FILESIZE iFileSize = -1, - FX_BOOL bReleaseStream = TRUE); -IFX_FileWrite* FX_CreateFileWrite(IFX_Stream* pBaseStream, - FX_BOOL bReleaseStream = FALSE); -enum FX_STREAMACCESS { - FX_STREAMACCESS_Binary = 0x00, - FX_STREAMACCESS_Text = 0x01, - FX_STREAMACCESS_Read = 0x02, - FX_STREAMACCESS_Write = 0x04, - FX_STREAMACCESS_Truncate = 0x10, - FX_STREAMACCESS_Append = 0x20, - FX_STREAMACCESS_Create = 0x80, -}; - -enum FX_STREAMSEEK { - FX_STREAMSEEK_Begin = 0, - FX_STREAMSEEK_Current, - FX_STREAMSEEK_End, -}; - -class IFX_Stream { - public: - static IFX_Stream* CreateStream(IFX_FileRead* pFileRead, FX_DWORD dwAccess); - static IFX_Stream* CreateStream(IFX_FileWrite* pFileWrite, FX_DWORD dwAccess); - static IFX_Stream* CreateStream(const FX_WCHAR* pszFileName, - FX_DWORD dwAccess); - static IFX_Stream* CreateStream(uint8_t* pData, - int32_t length, - FX_DWORD dwAccess); - static IFX_Stream* CreateStream(IFX_BufferRead* pBufferRead, - FX_DWORD dwAccess, - int32_t iFileSize = -1, - FX_BOOL bReleaseBufferRead = TRUE); - static IFX_Stream* CreateTextStream(IFX_Stream* pBaseStream, - FX_BOOL bDeleteOnRelease); - virtual ~IFX_Stream() {} - virtual void Release() = 0; - virtual IFX_Stream* Retain() = 0; - virtual FX_DWORD GetAccessModes() const = 0; - virtual int32_t GetLength() const = 0; - virtual int32_t Seek(FX_STREAMSEEK eSeek, int32_t iOffset) = 0; - virtual int32_t GetPosition() = 0; - virtual FX_BOOL IsEOF() const = 0; - virtual int32_t ReadData(uint8_t* pBuffer, int32_t iBufferSize) = 0; - virtual int32_t ReadString(FX_WCHAR* pStr, - int32_t iMaxLength, - FX_BOOL& bEOS, - int32_t const* pByteSize = NULL) = 0; - virtual int32_t WriteData(const uint8_t* pBuffer, int32_t iBufferSize) = 0; - virtual int32_t WriteString(const FX_WCHAR* pStr, int32_t iLength) = 0; - virtual void Flush() = 0; - virtual FX_BOOL SetLength(int32_t iLength) = 0; - virtual int32_t GetBOM(uint8_t bom[4]) const = 0; - virtual FX_WORD GetCodePage() const = 0; - virtual FX_WORD SetCodePage(FX_WORD wCodePage) = 0; - virtual IFX_Stream* CreateSharedStream(FX_DWORD dwAccess, - int32_t iOffset, - int32_t iLength) = 0; -}; - -#endif // XFA_SRC_FGAS_CRT_FGAS_STREAM_H_ diff --git a/xfa/src/fgas/crt/fgas_system.cpp b/xfa/src/fgas/crt/fgas_system.cpp deleted file mode 100644 index a4ca7546e0..0000000000 --- a/xfa/src/fgas/crt/fgas_system.cpp +++ /dev/null @@ -1,117 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fgas/crt/fgas_system.h" - -#include - -#include "core/include/fxcrt/fx_system.h" - -#if _FX_OS_ == _FX_WIN32_DESKTOP_ || _FX_OS_ == _FX_WIN32_MOBILE_ || \ - _FX_OS_ == _FX_WIN64_ -#include -#elif _FX_OS_ == _FX_LINUX_DESKTOP_ || _FX_OS_ == _FX_LINUX_Mini_ -#include -#endif - -namespace { - -inline FX_BOOL FX_isupper(int32_t ch) { - return ch >= 'A' && ch <= 'Z'; -} - -inline int32_t FX_tolower(int32_t ch) { - return FX_isupper(ch) ? (ch + 0x20) : ch; -} - -} // namespace - -int32_t FX_wcsnicmp(const FX_WCHAR* s1, const FX_WCHAR* s2, size_t count) { - FXSYS_assert(s1 != NULL && s2 != NULL && count > 0); - FX_WCHAR wch1 = 0, wch2 = 0; - while (count-- > 0) { - wch1 = (FX_WCHAR)FX_tolower(*s1++); - wch2 = (FX_WCHAR)FX_tolower(*s2++); - if (wch1 != wch2) { - break; - } - } - return wch1 - wch2; -} - -int32_t FX_filelength(FXSYS_FILE* file) { - FXSYS_assert(file != NULL); -#if _FX_OS_ == _FX_WIN32_DESKTOP_ || _FX_OS_ == _FX_WIN64_ - return _filelength(_fileno(file)); -#else - int32_t iPos = FXSYS_ftell(file); - FXSYS_fseek(file, 0, FXSYS_SEEK_END); - int32_t iLen = FXSYS_ftell(file); - FXSYS_fseek(file, iPos, FXSYS_SEEK_SET); - return iLen; -#endif -} - -FX_BOOL FX_fsetsize(FXSYS_FILE* file, int32_t size) { - FXSYS_assert(file != NULL); -#if _FX_OS_ == _FX_WIN32_DESKTOP_ || _FX_OS_ == _FX_WIN64_ - return _chsize(_fileno(file), size) == 0; -#elif _FX_OS_ == _FX_WIN32_MOBILE_ - HANDLE hFile = _fileno(file); - FX_DWORD dwPos = ::SetFilePointer(hFile, 0, 0, FILE_CURRENT); - ::SetFilePointer(hFile, size, 0, FILE_BEGIN); - FX_BOOL bRet = ::SetEndOfFile(hFile); - ::SetFilePointer(hFile, (int32_t)dwPos, 0, FILE_BEGIN); - return bRet; -#else - return FALSE; -#endif -} - -FX_FLOAT FX_wcstof(const FX_WCHAR* pwsStr, int32_t iLength, int32_t* pUsedLen) { - FXSYS_assert(pwsStr != NULL); - if (iLength < 0) { - iLength = FXSYS_wcslen(pwsStr); - } - if (iLength == 0) { - return 0.0f; - } - int32_t iUsedLen = 0; - FX_BOOL bNegtive = FALSE; - switch (pwsStr[iUsedLen]) { - case '-': - bNegtive = TRUE; - case '+': - iUsedLen++; - break; - } - FX_FLOAT fValue = 0.0f; - while (iUsedLen < iLength) { - FX_WCHAR wch = pwsStr[iUsedLen]; - if (wch >= L'0' && wch <= L'9') { - fValue = fValue * 10.0f + (wch - L'0'); - } else { - break; - } - iUsedLen++; - } - if (iUsedLen < iLength && pwsStr[iUsedLen] == L'.') { - FX_FLOAT fPrecise = 0.1f; - while (++iUsedLen < iLength) { - FX_WCHAR wch = pwsStr[iUsedLen]; - if (wch >= L'0' && wch <= L'9') { - fValue += (wch - L'0') * fPrecise; - fPrecise *= 0.1f; - } else { - break; - } - } - } - if (pUsedLen) { - *pUsedLen = iUsedLen; - } - return bNegtive ? -fValue : fValue; -} diff --git a/xfa/src/fgas/crt/fgas_system.h b/xfa/src/fgas/crt/fgas_system.h deleted file mode 100644 index fb5a88efb5..0000000000 --- a/xfa/src/fgas/crt/fgas_system.h +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FGAS_CRT_FGAS_SYSTEM_H_ -#define XFA_SRC_FGAS_CRT_FGAS_SYSTEM_H_ - -#include "core/include/fxcrt/fx_system.h" - -#define FX_RAD2DEG(r) ((r)*180.0f / FX_PI) -#define FX_DEG2RAD(a) ((a)*FX_PI / 180.0f) - -FX_FLOAT FX_wcstof(const FX_WCHAR* pwsStr, - int32_t iLength = -1, - int32_t* pUsedLen = NULL); -int32_t FX_wcsnicmp(const FX_WCHAR* s1, const FX_WCHAR* s2, size_t count); - -int32_t FX_filelength(FXSYS_FILE* file); -FX_BOOL FX_fsetsize(FXSYS_FILE* file, int32_t size); - -#endif // XFA_SRC_FGAS_CRT_FGAS_SYSTEM_H_ diff --git a/xfa/src/fgas/crt/fgas_utils.cpp b/xfa/src/fgas/crt/fgas_utils.cpp deleted file mode 100644 index 8b3ed0aa0b..0000000000 --- a/xfa/src/fgas/crt/fgas_utils.cpp +++ /dev/null @@ -1,434 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fgas/crt/fgas_utils.h" - -#include - -#include "core/include/fxcrt/fx_basic.h" - -class FX_BASEARRAYDATA : public CFX_Target { - public: - FX_BASEARRAYDATA(int32_t growsize, int32_t blocksize) - : iGrowSize(growsize), - iBlockSize(blocksize), - iTotalCount(0), - iBlockCount(0), - pBuffer(nullptr) {} - - ~FX_BASEARRAYDATA() { FX_Free(pBuffer); } - - int32_t iGrowSize; - int32_t iBlockSize; - int32_t iTotalCount; - int32_t iBlockCount; - uint8_t* pBuffer; -}; -CFX_BaseArray::CFX_BaseArray(int32_t iGrowSize, int32_t iBlockSize) { - FXSYS_assert(iGrowSize > 0 && iBlockSize > 0); - m_pData = new FX_BASEARRAYDATA(iGrowSize, iBlockSize); -} -CFX_BaseArray::~CFX_BaseArray() { - RemoveAll(); - delete m_pData; -} -int32_t CFX_BaseArray::GetSize() const { - return m_pData->iBlockCount; -} -int32_t CFX_BaseArray::GetBlockSize() const { - return m_pData->iBlockSize; -} -uint8_t* CFX_BaseArray::AddSpaceTo(int32_t index) { - FXSYS_assert(index > -1); - uint8_t*& pBuffer = m_pData->pBuffer; - int32_t& iTotalCount = m_pData->iTotalCount; - int32_t iBlockSize = m_pData->iBlockSize; - if (index >= iTotalCount) { - int32_t iGrowSize = m_pData->iGrowSize; - iTotalCount = (index / iGrowSize + 1) * iGrowSize; - int32_t iNewSize = iTotalCount * iBlockSize; - if (!pBuffer) { - pBuffer = FX_Alloc(uint8_t, iNewSize); - } else { - pBuffer = FX_Realloc(uint8_t, pBuffer, iNewSize); - } - } - int32_t& iBlockCount = m_pData->iBlockCount; - if (index >= iBlockCount) { - iBlockCount = index + 1; - } - return pBuffer + index * iBlockSize; -} -uint8_t* CFX_BaseArray::GetAt(int32_t index) const { - FXSYS_assert(index > -1 && index < m_pData->iBlockCount); - return m_pData->pBuffer + index * m_pData->iBlockSize; -} -uint8_t* CFX_BaseArray::GetBuffer() const { - return m_pData->pBuffer; -} -int32_t CFX_BaseArray::Append(const CFX_BaseArray& src, - int32_t iStart, - int32_t iCount) { - int32_t iBlockSize = m_pData->iBlockSize; - FXSYS_assert(iBlockSize == src.m_pData->iBlockSize); - int32_t& iBlockCount = m_pData->iBlockCount; - int32_t iAdded = src.GetSize(); - FXSYS_assert(iStart > -1 && iStart < iAdded); - if (iCount < 0) { - iCount = iAdded; - } - if (iStart + iCount > iAdded) { - iCount = iAdded - iStart; - } - if (iCount < 1) { - return 0; - } - uint8_t* pDst = m_pData->pBuffer + iBlockCount * iBlockSize; - AddSpaceTo(iBlockCount + iCount - 1); - FXSYS_memcpy(pDst, src.m_pData->pBuffer + iStart * iBlockSize, - iCount * iBlockSize); - return iCount; -} -int32_t CFX_BaseArray::Copy(const CFX_BaseArray& src, - int32_t iStart, - int32_t iCount) { - int32_t iBlockSize = m_pData->iBlockSize; - FXSYS_assert(iBlockSize == src.m_pData->iBlockSize); - int32_t iCopied = src.GetSize(); - FXSYS_assert(iStart > -1 && iStart < iCopied); - if (iCount < 0) { - iCount = iCopied; - } - if (iStart + iCount > iCopied) { - iCount = iCopied - iStart; - } - if (iCount < 1) { - return 0; - } - RemoveAll(TRUE); - AddSpaceTo(iCount - 1); - FXSYS_memcpy(m_pData->pBuffer, src.m_pData->pBuffer + iStart * iBlockSize, - iCount * iBlockSize); - return iCount; -} -int32_t CFX_BaseArray::RemoveLast(int32_t iCount) { - int32_t& iBlockCount = m_pData->iBlockCount; - if (iCount < 0 || iCount > iBlockCount) { - iCount = iBlockCount; - iBlockCount = 0; - } else { - iBlockCount -= iCount; - } - return iCount; -} -void CFX_BaseArray::RemoveAll(FX_BOOL bLeaveMemory) { - if (!bLeaveMemory) { - uint8_t*& pBuffer = m_pData->pBuffer; - if (pBuffer != NULL) { - FX_Free(pBuffer); - pBuffer = NULL; - } - m_pData->iTotalCount = 0; - } - m_pData->iBlockCount = 0; -} - -CFX_BaseMassArrayImp::CFX_BaseMassArrayImp(int32_t iChunkSize, - int32_t iBlockSize) - : m_iChunkSize(iChunkSize), - m_iBlockSize(iBlockSize), - m_iChunkCount(0), - m_iBlockCount(0) { - FXSYS_assert(m_iChunkSize > 0 && m_iBlockSize > 0); - m_pData = new CFX_PtrArray; - m_pData->SetSize(16); -} -CFX_BaseMassArrayImp::~CFX_BaseMassArrayImp() { - RemoveAll(); - delete m_pData; -} -uint8_t* CFX_BaseMassArrayImp::AddSpaceTo(int32_t index) { - FXSYS_assert(index > -1); - uint8_t* pChunk; - if (index < m_iBlockCount) { - pChunk = (uint8_t*)m_pData->GetAt(index / m_iChunkSize); - } else { - int32_t iMemSize = m_iChunkSize * m_iBlockSize; - while (TRUE) { - if (index < m_iChunkCount * m_iChunkSize) { - pChunk = (uint8_t*)m_pData->GetAt(index / m_iChunkSize); - break; - } else { - pChunk = FX_Alloc(uint8_t, iMemSize); - if (m_iChunkCount < m_pData->GetSize()) { - m_pData->SetAt(m_iChunkCount, pChunk); - } else { - m_pData->Add(pChunk); - } - m_iChunkCount++; - } - } - } - FXSYS_assert(pChunk != NULL); - m_iBlockCount = index + 1; - return pChunk + (index % m_iChunkSize) * m_iBlockSize; -} -uint8_t* CFX_BaseMassArrayImp::GetAt(int32_t index) const { - FXSYS_assert(index > -1 && index < m_iBlockCount); - uint8_t* pChunk = (uint8_t*)m_pData->GetAt(index / m_iChunkSize); - FXSYS_assert(pChunk != NULL); - return pChunk + (index % m_iChunkSize) * m_iBlockSize; -} -int32_t CFX_BaseMassArrayImp::Append(const CFX_BaseMassArrayImp& src, - int32_t iStart, - int32_t iCount) { - FXSYS_assert(m_iBlockSize == src.m_iBlockSize); - int32_t iAdded = src.m_iBlockCount; - FXSYS_assert(iStart > -1 && iStart < iAdded); - if (iCount < 0) { - iCount = iAdded; - } - if (iStart + iCount > iAdded) { - iCount = iAdded - iStart; - } - if (iCount < 1) { - return m_iBlockCount; - } - int32_t iBlockCount = m_iBlockCount; - int32_t iTotal = m_iBlockCount + iCount; - AddSpaceTo(iTotal - 1); - Append(iBlockCount, src, iStart, iCount); - return m_iBlockCount; -} -int32_t CFX_BaseMassArrayImp::Copy(const CFX_BaseMassArrayImp& src, - int32_t iStart, - int32_t iCount) { - FXSYS_assert(m_iBlockSize == src.m_iBlockSize); - int32_t iCopied = src.m_iBlockCount; - FXSYS_assert(iStart > -1); - if (iStart >= iCopied) { - return 0; - } - RemoveAll(TRUE); - if (iCount < 0) { - iCount = iCopied; - } - if (iStart + iCount > iCopied) { - iCount = iCopied - iStart; - } - if (iCount < 1) { - return 0; - } - if (m_iBlockCount < iCount) { - AddSpaceTo(iCount - 1); - } - Append(0, src, iStart, iCount); - return m_iBlockCount; -} - -void CFX_BaseMassArrayImp::Append(int32_t iDstStart, - const CFX_BaseMassArrayImp& src, - int32_t iSrcStart, - int32_t iSrcCount) { - FXSYS_assert(iDstStart > -1); - FXSYS_assert(m_iBlockSize == src.m_iBlockSize); - FXSYS_assert(src.m_iBlockCount > 0); - FXSYS_assert(m_iBlockCount >= iDstStart + iSrcCount); - FXSYS_assert(iSrcStart > -1); - FXSYS_assert(iSrcStart < src.m_iBlockCount); - FXSYS_assert(iSrcCount > 0); - FXSYS_assert(iSrcStart + iSrcCount <= src.m_iBlockCount); - - int32_t iDstChunkIndex = iDstStart / m_iChunkSize; - int32_t iSrcChunkIndex = iSrcStart / src.m_iChunkSize; - uint8_t* pDstChunk = (uint8_t*)GetAt(iDstStart); - uint8_t* pSrcChunk = (uint8_t*)src.GetAt(iSrcStart); - int32_t iDstChunkSize = m_iChunkSize - (iDstStart % m_iChunkSize); - int32_t iSrcChunkSize = src.m_iChunkSize - (iSrcStart % src.m_iChunkSize); - int32_t iCopySize = - std::min(iSrcCount, std::min(iSrcChunkSize, iDstChunkSize)); - int32_t iCopyBytes = iCopySize * m_iBlockSize; - while (iSrcCount > 0) { - FXSYS_assert(pDstChunk != NULL && pSrcChunk != NULL); - FXSYS_memcpy(pDstChunk, pSrcChunk, iCopyBytes); - iSrcCount -= iCopySize; - iSrcChunkSize -= iCopySize; - if (iSrcChunkSize < 1) { - iSrcChunkSize = src.m_iChunkSize; - iSrcChunkIndex++; - pSrcChunk = (uint8_t*)src.m_pData->GetAt(iSrcChunkIndex); - } else { - pSrcChunk += iCopyBytes; - } - iDstChunkSize -= iCopySize; - if (iDstChunkSize < 1) { - iDstChunkSize = m_iChunkSize; - iDstChunkIndex++; - pDstChunk = (uint8_t*)m_pData->GetAt(iDstChunkIndex); - } else { - pDstChunk += iCopyBytes; - } - iCopySize = std::min(iSrcCount, std::min(iSrcChunkSize, iDstChunkSize)); - iCopyBytes = iCopySize * m_iBlockSize; - } -} -int32_t CFX_BaseMassArrayImp::RemoveLast(int32_t iCount) { - if (iCount < 0 || iCount >= m_iBlockCount) { - m_iBlockCount = 0; - } else { - m_iBlockCount -= iCount; - } - return m_iBlockCount; -} -void CFX_BaseMassArrayImp::RemoveAll(FX_BOOL bLeaveMemory) { - if (bLeaveMemory) { - m_iBlockCount = 0; - return; - } - for (int32_t i = 0; i < m_iChunkCount; i++) { - void* p = m_pData->GetAt(i); - if (p == NULL) { - continue; - } - FX_Free(p); - } - m_pData->RemoveAll(); - m_iChunkCount = 0; - m_iBlockCount = 0; -} -CFX_BaseMassArray::CFX_BaseMassArray(int32_t iChunkSize, int32_t iBlockSize) { - m_pData = new CFX_BaseMassArrayImp(iChunkSize, iBlockSize); -} -CFX_BaseMassArray::~CFX_BaseMassArray() { - delete m_pData; -} -int32_t CFX_BaseMassArray::GetSize() const { - return m_pData->m_iBlockCount; -} -uint8_t* CFX_BaseMassArray::AddSpaceTo(int32_t index) { - return m_pData->AddSpaceTo(index); -} -uint8_t* CFX_BaseMassArray::GetAt(int32_t index) const { - return m_pData->GetAt(index); -} -int32_t CFX_BaseMassArray::Append(const CFX_BaseMassArray& src, - int32_t iStart, - int32_t iCount) { - return m_pData->Append(*(CFX_BaseMassArrayImp*)src.m_pData, iStart, iCount); -} -int32_t CFX_BaseMassArray::Copy(const CFX_BaseMassArray& src, - int32_t iStart, - int32_t iCount) { - return m_pData->Copy(*(CFX_BaseMassArrayImp*)src.m_pData, iStart, iCount); -} -int32_t CFX_BaseMassArray::RemoveLast(int32_t iCount) { - return m_pData->RemoveLast(iCount); -} -void CFX_BaseMassArray::RemoveAll(FX_BOOL bLeaveMemory) { - m_pData->RemoveAll(bLeaveMemory); -} - -struct FX_BASEDISCRETEARRAYDATA { - int32_t iBlockSize; - int32_t iChunkSize; - int32_t iChunkCount; - CFX_PtrArray ChunkBuffer; -}; - -CFX_BaseDiscreteArray::CFX_BaseDiscreteArray(int32_t iChunkSize, - int32_t iBlockSize) { - FXSYS_assert(iChunkSize > 0 && iBlockSize > 0); - FX_BASEDISCRETEARRAYDATA* pData = new FX_BASEDISCRETEARRAYDATA; - m_pData = pData; - pData->ChunkBuffer.SetSize(16); - pData->iChunkCount = 0; - pData->iChunkSize = iChunkSize; - pData->iBlockSize = iBlockSize; -} -CFX_BaseDiscreteArray::~CFX_BaseDiscreteArray() { - RemoveAll(); - delete static_cast(m_pData); -} -uint8_t* CFX_BaseDiscreteArray::AddSpaceTo(int32_t index) { - FXSYS_assert(index > -1); - FX_BASEDISCRETEARRAYDATA* pData = (FX_BASEDISCRETEARRAYDATA*)m_pData; - int32_t& iChunkCount = pData->iChunkCount; - int32_t iChunkSize = pData->iChunkSize; - uint8_t* pChunk = NULL; - int32_t iChunk = index / iChunkSize; - if (iChunk < iChunkCount) { - pChunk = (uint8_t*)pData->ChunkBuffer.GetAt(iChunk); - } - if (!pChunk) { - pChunk = FX_Alloc2D(uint8_t, iChunkSize, pData->iBlockSize); - FXSYS_memset(pChunk, 0, iChunkSize * pData->iBlockSize); - pData->ChunkBuffer.SetAtGrow(iChunk, pChunk); - if (iChunkCount <= iChunk) { - iChunkCount = iChunk + 1; - } - } - return pChunk + (index % iChunkSize) * pData->iBlockSize; -} -uint8_t* CFX_BaseDiscreteArray::GetAt(int32_t index) const { - FXSYS_assert(index > -1); - FX_BASEDISCRETEARRAYDATA* pData = (FX_BASEDISCRETEARRAYDATA*)m_pData; - int32_t iChunkSize = pData->iChunkSize; - int32_t iChunk = index / iChunkSize; - if (iChunk >= pData->iChunkCount) { - return NULL; - } - uint8_t* pChunk = (uint8_t*)pData->ChunkBuffer.GetAt(iChunk); - if (pChunk == NULL) { - return NULL; - } - return pChunk + (index % iChunkSize) * pData->iBlockSize; -} -void CFX_BaseDiscreteArray::RemoveAll() { - FX_BASEDISCRETEARRAYDATA* pData = (FX_BASEDISCRETEARRAYDATA*)m_pData; - CFX_PtrArray& ChunkBuffer = pData->ChunkBuffer; - int32_t& iChunkCount = pData->iChunkCount; - for (int32_t i = 0; i < iChunkCount; i++) { - void* p = ChunkBuffer.GetAt(i); - if (p == NULL) { - continue; - } - FX_Free(p); - } - ChunkBuffer.RemoveAll(); - iChunkCount = 0; -} -CFX_BaseStack::CFX_BaseStack(int32_t iChunkSize, int32_t iBlockSize) { - m_pData = new CFX_BaseMassArrayImp(iChunkSize, iBlockSize); -} -CFX_BaseStack::~CFX_BaseStack() { - delete (CFX_BaseMassArrayImp*)m_pData; -} -uint8_t* CFX_BaseStack::Push() { - return m_pData->AddSpace(); -} -void CFX_BaseStack::Pop() { - int32_t& iBlockCount = m_pData->m_iBlockCount; - if (iBlockCount < 1) { - return; - } - iBlockCount--; -} -uint8_t* CFX_BaseStack::GetTopElement() const { - int32_t iSize = m_pData->m_iBlockCount; - if (iSize < 1) { - return NULL; - } - return m_pData->GetAt(iSize - 1); -} -int32_t CFX_BaseStack::GetSize() const { - return m_pData->m_iBlockCount; -} -uint8_t* CFX_BaseStack::GetAt(int32_t index) const { - return m_pData->GetAt(index); -} -void CFX_BaseStack::RemoveAll(FX_BOOL bLeaveMemory) { - m_pData->RemoveAll(bLeaveMemory); -} diff --git a/xfa/src/fgas/crt/fgas_utils.h b/xfa/src/fgas/crt/fgas_utils.h deleted file mode 100644 index f52255a5d3..0000000000 --- a/xfa/src/fgas/crt/fgas_utils.h +++ /dev/null @@ -1,737 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FGAS_CRT_FGAS_UTILS_H_ -#define XFA_SRC_FGAS_CRT_FGAS_UTILS_H_ - -#include "core/include/fxcrt/fx_coordinates.h" -#include "xfa/src/fgas/crt/fgas_memory.h" - -class FX_BASEARRAYDATA; - -template -class CFX_CPLTree; - -class CFX_BaseArray : public CFX_Target { - protected: - CFX_BaseArray(int32_t iGrowSize, int32_t iBlockSize); - ~CFX_BaseArray(); - int32_t GetSize() const; - int32_t GetBlockSize() const; - uint8_t* AddSpaceTo(int32_t index); - uint8_t* GetAt(int32_t index) const; - uint8_t* GetBuffer() const; - int32_t Append(const CFX_BaseArray& src, - int32_t iStart = 0, - int32_t iCount = -1); - int32_t Copy(const CFX_BaseArray& src, - int32_t iStart = 0, - int32_t iCount = -1); - int32_t RemoveLast(int32_t iCount = -1); - void RemoveAll(FX_BOOL bLeaveMemory = FALSE); - - FX_BASEARRAYDATA* m_pData; -}; - -template -class CFX_BaseArrayTemplate : public CFX_BaseArray { - public: - CFX_BaseArrayTemplate(int32_t iGrowSize = 100) - : CFX_BaseArray(iGrowSize, sizeof(baseType)) {} - CFX_BaseArrayTemplate(int32_t iGrowSize, int32_t iBlockSize) - : CFX_BaseArray(iGrowSize, iBlockSize) {} - int32_t GetSize() const { return CFX_BaseArray::GetSize(); } - int32_t GetBlockSize() const { return CFX_BaseArray::GetBlockSize(); } - baseType* AddSpace() { - return (baseType*)CFX_BaseArray::AddSpaceTo(CFX_BaseArray::GetSize()); - } - int32_t Add(const baseType& element) { - int32_t index = CFX_BaseArray::GetSize(); - *(baseType*)CFX_BaseArray::AddSpaceTo(index) = element; - return index; - } - baseType* GetBuffer() const { return (baseType*)CFX_BaseArray::GetBuffer(); } - baseType& GetAt(int32_t index) const { - return *(baseType*)CFX_BaseArray::GetAt(index); - } - baseType* GetPtrAt(int32_t index) const { - return (baseType*)CFX_BaseArray::GetAt(index); - } - void SetAt(int32_t index, const baseType& element) { - *(baseType*)CFX_BaseArray::GetAt(index) = element; - } - void SetAtGrow(int32_t index, const baseType& element) { - *(baseType*)CFX_BaseArray::AddSpaceTo(index) = element; - } - int32_t Append(const CFX_BaseArrayTemplate& src, - int32_t iStart = 0, - int32_t iCount = -1) { - return CFX_BaseArray::Append(src, iStart, iCount); - } - int32_t Copy(const CFX_BaseArrayTemplate& src, - int32_t iStart = 0, - int32_t iCount = -1) { - return CFX_BaseArray::Copy(src, iStart, iCount); - } - int32_t RemoveLast(int32_t iCount = -1) { - return CFX_BaseArray::RemoveLast(iCount); - } - void RemoveAll(FX_BOOL bLeaveMemory = FALSE) { - CFX_BaseArray::RemoveAll(bLeaveMemory); - } -}; -typedef CFX_BaseArrayTemplate CFDE_PtrArray; -typedef CFX_BaseArrayTemplate CFDE_DWordArray; -typedef CFX_BaseArrayTemplate CFDE_WordArray; - -template -class CFX_ObjectBaseArrayTemplate : public CFX_BaseArray { - public: - CFX_ObjectBaseArrayTemplate(int32_t iGrowSize = 100) - : CFX_BaseArray(iGrowSize, sizeof(baseType)) {} - ~CFX_ObjectBaseArrayTemplate() { RemoveAll(FALSE); } - int32_t GetSize() const { return CFX_BaseArray::GetSize(); } - int32_t GetBlockSize() const { return CFX_BaseArray::GetBlockSize(); } - int32_t Add(const baseType& element) { - int32_t index = CFX_BaseArray::GetSize(); - baseType* p = (baseType*)CFX_BaseArray::AddSpaceTo(index); - new ((void*)p) baseType(element); - return index; - } - baseType& GetAt(int32_t index) const { - return *(baseType*)CFX_BaseArray::GetAt(index); - } - baseType* GetPtrAt(int32_t index) const { - return (baseType*)CFX_BaseArray::GetAt(index); - } - int32_t Append(const CFX_ObjectBaseArrayTemplate& src, - int32_t iStart = 0, - int32_t iCount = -1) { - FXSYS_assert(GetBlockSize() == src.GetBlockSize()); - if (iCount == 0) { - return 0; - } - int32_t iSize = src.GetSize(); - FXSYS_assert(iStart > -1 && iStart < iSize); - if (iCount < 0) { - iCount = iSize; - } - if (iStart + iCount > iSize) { - iCount = iSize - iStart; - } - if (iCount < 1) { - return 0; - } - iSize = CFX_BaseArray::GetSize(); - CFX_BaseArray::AddSpaceTo(iSize + iCount - 1); - uint8_t** pStart = CFX_BaseArray::GetAt(iSize); - int32_t iBlockSize = CFX_BaseArray::GetBlockSize(); - iSize = iStart + iCount; - for (int32_t i = iStart; i < iSize; i++) { - FXTARGET_NewWith((void*)pStart) baseType(src.GetAt(i)); - pStart += iBlockSize; - } - return iCount; - } - int32_t Copy(const CFX_ObjectBaseArrayTemplate& src, - int32_t iStart = 0, - int32_t iCount = -1) { - FXSYS_assert(GetBlockSize() == src.GetBlockSize()); - if (iCount == 0) { - return 0; - } - int32_t iSize = src.GetSize(); - FXSYS_assert(iStart > -1 && iStart < iSize); - if (iCount < 0) { - iCount = iSize; - } - if (iStart + iCount > iSize) { - iCount = iSize - iStart; - } - if (iCount < 1) { - return 0; - } - RemoveAll(TRUE); - CFX_BaseArray::AddSpaceTo(iCount - 1); - uint8_t** pStart = CFX_BaseArray::GetAt(0); - int32_t iBlockSize = CFX_BaseArray::GetBlockSize(); - iSize = iStart + iCount; - for (int32_t i = iStart; i < iSize; i++) { - new ((void*)pStart) baseType(src.GetAt(i)); - pStart += iBlockSize; - } - return iCount; - } - int32_t RemoveLast(int32_t iCount = -1) { - int32_t iSize = CFX_BaseArray::GetSize(); - if (iCount < 0 || iCount > iSize) { - iCount = iSize; - } - if (iCount == 0) { - return iSize; - } - for (int32_t i = iSize - iCount; i < iSize; i++) { - ((baseType*)GetPtrAt(i))->~baseType(); - } - return CFX_BaseArray::RemoveLast(iCount); - } - void RemoveAll(FX_BOOL bLeaveMemory = FALSE) { - int32_t iSize = CFX_BaseArray::GetSize(); - for (int32_t i = 0; i < iSize; i++) { - ((baseType*)GetPtrAt(i))->~baseType(); - } - CFX_BaseArray::RemoveAll(bLeaveMemory); - } -}; - -class CFX_BaseMassArrayImp : public CFX_Target { - public: - CFX_BaseMassArrayImp(int32_t iChunkSize, int32_t iBlockSize); - ~CFX_BaseMassArrayImp(); - uint8_t* AddSpace() { return AddSpaceTo(m_iBlockCount); } - uint8_t* AddSpaceTo(int32_t index); - uint8_t* GetAt(int32_t index) const; - int32_t Append(const CFX_BaseMassArrayImp& src, - int32_t iStart = 0, - int32_t iCount = -1); - int32_t Copy(const CFX_BaseMassArrayImp& src, - int32_t iStart = 0, - int32_t iCount = -1); - int32_t RemoveLast(int32_t iCount = -1); - void RemoveAll(FX_BOOL bLeaveMemory = FALSE); - int32_t m_iChunkSize; - int32_t m_iBlockSize; - int32_t m_iChunkCount; - int32_t m_iBlockCount; - CFX_PtrArray* m_pData; - - protected: - void Append(int32_t iDstStart, - const CFX_BaseMassArrayImp& src, - int32_t iSrcStart = 0, - int32_t iSrcCount = -1); -}; - -class CFX_BaseMassArray : public CFX_Target { - protected: - CFX_BaseMassArray(int32_t iChunkSize, int32_t iBlockSize); - ~CFX_BaseMassArray(); - int32_t GetSize() const; - uint8_t* AddSpaceTo(int32_t index); - uint8_t* GetAt(int32_t index) const; - int32_t Append(const CFX_BaseMassArray& src, - int32_t iStart = 0, - int32_t iCount = -1); - int32_t Copy(const CFX_BaseMassArray& src, - int32_t iStart = 0, - int32_t iCount = -1); - int32_t RemoveLast(int32_t iCount = -1); - void RemoveAll(FX_BOOL bLeaveMemory = FALSE); - CFX_BaseMassArrayImp* m_pData; -}; - -template -class CFX_MassArrayTemplate : public CFX_BaseMassArray { - public: - CFX_MassArrayTemplate(int32_t iChunkSize = 100) - : CFX_BaseMassArray(iChunkSize, sizeof(baseType)) {} - CFX_MassArrayTemplate(int32_t iChunkSize, int32_t iBlockSize) - : CFX_BaseMassArray(iChunkSize, iBlockSize) {} - int32_t GetSize() const { return CFX_BaseMassArray::GetSize(); } - baseType* AddSpace() { - return (baseType*)CFX_BaseMassArray::AddSpaceTo( - CFX_BaseMassArray::GetSize()); - } - int32_t Add(const baseType& element) { - int32_t index = CFX_BaseMassArray::GetSize(); - *(baseType*)CFX_BaseMassArray::AddSpaceTo(index) = element; - return index; - } - baseType& GetAt(int32_t index) const { - return *(baseType*)CFX_BaseMassArray::GetAt(index); - } - baseType* GetPtrAt(int32_t index) const { - return (baseType*)CFX_BaseMassArray::GetAt(index); - } - void SetAt(int32_t index, const baseType& element) { - *(baseType*)CFX_BaseMassArray::GetAt(index) = element; - } - void SetAtGrow(int32_t index, const baseType& element) { - *(baseType*)CFX_BaseMassArray::AddSpaceTo(index) = element; - } - int32_t Append(const CFX_MassArrayTemplate& src, - int32_t iStart = 0, - int32_t iCount = -1) { - return CFX_BaseMassArray::Append(src, iStart, iCount); - } - int32_t Copy(const CFX_MassArrayTemplate& src, - int32_t iStart = 0, - int32_t iCount = -1) { - return CFX_BaseMassArray::Copy(src, iStart, iCount); - } - int32_t RemoveLast(int32_t iCount = -1) { - return CFX_BaseMassArray::RemoveLast(iCount); - } - void RemoveAll(FX_BOOL bLeaveMemory = FALSE) { - CFX_BaseMassArray::RemoveAll(bLeaveMemory); - } -}; -typedef CFX_MassArrayTemplate CFX_PtrMassArray; -typedef CFX_MassArrayTemplate CFX_Int32MassArray; -typedef CFX_MassArrayTemplate CFX_DWordMassArray; -typedef CFX_MassArrayTemplate CFX_WordMassArray; -typedef CFX_MassArrayTemplate CFX_RectMassArray; -typedef CFX_MassArrayTemplate CFX_RectFMassArray; - -template -class CFX_ObjectMassArrayTemplate : public CFX_BaseMassArray { - public: - CFX_ObjectMassArrayTemplate(int32_t iChunkSize = 100) - : CFX_BaseMassArray(iChunkSize, sizeof(baseType)) {} - ~CFX_ObjectMassArrayTemplate() { RemoveAll(FALSE); } - int32_t GetSize() const { return CFX_BaseMassArray::GetSize(); } - int32_t Add(const baseType& element) { - int32_t index = CFX_BaseMassArray::GetSize(); - baseType* p = (baseType*)CFX_BaseMassArray::AddSpaceTo(index); - new ((void*)p) baseType(element); - return index; - } - baseType& GetAt(int32_t index) const { - return *(baseType*)CFX_BaseMassArray::GetAt(index); - } - baseType* GetPtrAt(int32_t index) const { - return (baseType*)CFX_BaseMassArray::GetAt(index); - } - int32_t Append(const CFX_ObjectMassArrayTemplate& src, - int32_t iStart = 0, - int32_t iCount = -1) { - if (iCount == 0) { - return CFX_BaseMassArray::GetSize(); - } - int32_t iSize = src.GetSize(); - FXSYS_assert(iStart > -1 && iStart < iSize); - if (iCount < 0) { - iCount = iSize; - } - int32_t iEnd = iStart + iCount; - if (iEnd > iSize) { - iEnd = iSize; - } - for (int32_t i = iStart; i < iEnd; i++) { - Add(src.GetAt(i)); - } - return CFX_BaseMassArray::GetSize(); - } - int32_t Copy(const CFX_ObjectMassArrayTemplate& src, - int32_t iStart = 0, - int32_t iCount = -1) { - if (iCount == 0) { - return CFX_BaseMassArray::GetSize(); - } - int32_t iSize = src.GetSize(); - FXSYS_assert(iStart > -1 && iStart < iSize); - if (iCount < 0) { - iCount = iSize; - } - int32_t iEnd = iStart + iCount; - if (iEnd > iSize) { - iEnd = iSize; - } - RemoveAll(TRUE); - for (int32_t i = iStart; i < iEnd; i++) { - Add(src.GetAt(i)); - } - return CFX_BaseMassArray::GetSize(); - } - int32_t RemoveLast(int32_t iCount = -1) { - int32_t iSize = CFX_BaseMassArray::GetSize(); - if (iCount < 0 || iCount > iSize) { - iCount = iSize; - } - if (iCount == 0) { - return iSize; - } - for (int32_t i = iSize - iCount; i < iSize; i++) { - ((baseType*)GetPtrAt(i))->~baseType(); - } - return CFX_BaseMassArray::RemoveLast(iCount); - } - void RemoveAll(FX_BOOL bLeaveMemory = FALSE) { - int32_t iSize = CFX_BaseMassArray::GetSize(); - for (int32_t i = 0; i < iSize; i++) { - ((baseType*)GetPtrAt(i))->~baseType(); - } - CFX_BaseMassArray::RemoveAll(bLeaveMemory); - } -}; - -class CFX_BaseDiscreteArray : public CFX_Target { - protected: - CFX_BaseDiscreteArray(int32_t iChunkSize, int32_t iBlockSize); - ~CFX_BaseDiscreteArray(); - uint8_t* AddSpaceTo(int32_t index); - uint8_t* GetAt(int32_t index) const; - void RemoveAll(); - void* m_pData; -}; - -template -class CFX_DiscreteArrayTemplate : public CFX_BaseDiscreteArray { - public: - CFX_DiscreteArrayTemplate(int32_t iChunkSize = 100) - : CFX_BaseDiscreteArray(iChunkSize, sizeof(baseType)) {} - baseType& GetAt(int32_t index, const baseType& defValue) const { - baseType* p = (baseType*)CFX_BaseDiscreteArray::GetAt(index); - return p == NULL ? (baseType&)defValue : *p; - } - baseType* GetPtrAt(int32_t index) const { - return (baseType*)CFX_BaseDiscreteArray::GetAt(index); - } - void SetAtGrow(int32_t index, const baseType& element) { - *(baseType*)CFX_BaseDiscreteArray::AddSpaceTo(index) = element; - } - void RemoveAll() { CFX_BaseDiscreteArray::RemoveAll(); } -}; -typedef CFX_DiscreteArrayTemplate CFX_PtrDiscreteArray; -typedef CFX_DiscreteArrayTemplate CFX_DWordDiscreteArray; -typedef CFX_DiscreteArrayTemplate CFX_WordDiscreteArray; - -class CFX_BaseStack : public CFX_Target { - protected: - CFX_BaseStack(int32_t iChunkSize, int32_t iBlockSize); - ~CFX_BaseStack(); - uint8_t* Push(); - void Pop(); - uint8_t* GetTopElement() const; - int32_t GetSize() const; - uint8_t* GetAt(int32_t index) const; - void RemoveAll(FX_BOOL bLeaveMemory = FALSE); - CFX_BaseMassArrayImp* m_pData; -}; - -template -class CFX_StackTemplate : public CFX_BaseStack { - public: - CFX_StackTemplate(int32_t iChunkSize = 100) - : CFX_BaseStack(iChunkSize, sizeof(baseType)) {} - int32_t Push(const baseType& element) { - int32_t index = CFX_BaseStack::GetSize(); - *(baseType*)CFX_BaseStack::Push() = element; - return index; - } - void Pop() { CFX_BaseStack::Pop(); } - baseType* GetTopElement() const { - return (baseType*)CFX_BaseStack::GetTopElement(); - } - int32_t GetSize() const { return CFX_BaseStack::GetSize(); } - baseType* GetAt(int32_t index) const { - return (baseType*)CFX_BaseStack::GetAt(index); - } - void RemoveAll(FX_BOOL bLeaveMemory = FALSE) { - CFX_BaseStack::RemoveAll(bLeaveMemory); - } -}; -typedef CFX_StackTemplate CFX_PtrStack; -typedef CFX_StackTemplate CFX_DWordStack; -typedef CFX_StackTemplate CFX_WordStack; -typedef CFX_StackTemplate CFX_Int32Stack; - -template -class CFX_ObjectStackTemplate : public CFX_BaseStack { - public: - CFX_ObjectStackTemplate(int32_t iChunkSize = 100) - : CFX_BaseStack(iChunkSize, sizeof(baseType)) {} - ~CFX_ObjectStackTemplate() { RemoveAll(); } - int32_t Push(const baseType& element) { - int32_t index = CFX_BaseStack::GetSize(); - baseType* p = (baseType*)CFX_BaseStack::Push(); - new ((void*)p) baseType(element); - return index; - } - void Pop() { - baseType* p = (baseType*)CFX_BaseStack::GetTopElement(); - if (p != NULL) { - p->~baseType(); - } - CFX_BaseStack::Pop(); - } - baseType* GetTopElement() const { - return (baseType*)CFX_BaseStack::GetTopElement(); - } - int32_t GetSize() const { return CFX_BaseStack::GetSize(); } - baseType* GetAt(int32_t index) const { - return (baseType*)CFX_BaseStack::GetAt(index); - } - void RemoveAll(FX_BOOL bLeaveMemory = FALSE) { - int32_t iSize = CFX_BaseStack::GetSize(); - for (int32_t i = 0; i < iSize; i++) { - ((baseType*)CFX_BaseStack::GetAt(i))->~baseType(); - } - CFX_BaseStack::RemoveAll(bLeaveMemory); - } - int32_t Copy(const CFX_ObjectStackTemplate& src, - int32_t iStart = 0, - int32_t iCount = -1) { - if (iCount == 0) { - return CFX_BaseStack::GetSize(); - } - int32_t iSize = src.GetSize(); - FXSYS_assert(iStart > -1 && iStart < iSize); - if (iCount < 0) { - iCount = iSize; - } - int32_t iEnd = iStart + iCount; - if (iEnd > iSize) { - iEnd = iSize; - } - RemoveAll(TRUE); - for (int32_t i = iStart; i < iEnd; i++) { - Push(*src.GetAt(i)); - } - return CFX_BaseStack::GetSize(); - } -}; - -template -class CFX_CPLTreeNode : public CFX_Target { - public: - typedef CFX_CPLTreeNode CPLTreeNode; - CFX_CPLTreeNode() - : m_pParentNode(NULL), - m_pChildNode(NULL), - m_pPrevNode(NULL), - m_pNextNode(NULL), - m_Data() {} - enum TreeNode { - Root = 0, - Parent, - FirstSibling, - PreviousSibling, - NextSibling, - LastSibling, - FirstNeighbor, - PreviousNeighbor, - NextNeighbor, - LastNeighbor, - FirstChild, - LastChild - }; - CPLTreeNode* GetNode(TreeNode eNode) const { - switch (eNode) { - case Root: { - CPLTreeNode* pParent = (CPLTreeNode*)this; - CPLTreeNode* pTemp; - while ((pTemp = pParent->m_pParentNode) != NULL) { - pParent = pTemp; - } - return pParent; - } - case Parent: - return m_pParentNode; - case FirstSibling: { - CPLTreeNode* pNode = (CPLTreeNode*)this; - CPLTreeNode* pTemp; - while ((pTemp = pNode->m_pPrevNode) != NULL) { - pNode = pTemp; - } - return pNode == (CPLTreeNode*)this ? NULL : pNode; - } - case PreviousSibling: - return m_pPrevNode; - case NextSibling: - return m_pNextNode; - case LastSibling: { - CPLTreeNode* pNode = (CPLTreeNode*)this; - CPLTreeNode* pTemp; - while ((pTemp = pNode->m_pNextNode) != NULL) { - pNode = pTemp; - } - return pNode == (CPLTreeNode*)this ? NULL : pNode; - } - case FirstNeighbor: { - CPLTreeNode* pParent = (CPLTreeNode*)this; - CPLTreeNode* pTemp; - while ((pTemp = pParent->m_pParentNode) != NULL) { - pParent = pTemp; - } - return pParent == (CPLTreeNode*)this ? NULL : pParent; - } - case PreviousNeighbor: { - if (m_pPrevNode == NULL) { - return m_pParentNode; - } - CPLTreeNode* pNode = m_pPrevNode; - CPLTreeNode* pTemp; - while ((pTemp = pNode->m_pChildNode) != NULL) { - pNode = pTemp; - while ((pTemp = pNode->m_pNextNode) != NULL) { - pNode = pTemp; - } - } - return pNode; - } - case NextNeighbor: { - if (m_pChildNode != NULL) { - return m_pChildNode; - } - if (m_pNextNode != NULL) { - return m_pNextNode; - } - CPLTreeNode* pNode = m_pParentNode; - while (pNode != NULL) { - if (pNode->m_pNextNode != NULL) { - return pNode->m_pNextNode; - } - pNode = pNode->m_pParentNode; - } - return NULL; - } - case LastNeighbor: { - CPLTreeNode* pNode = (CPLTreeNode*)this; - CPLTreeNode* pTemp; - while ((pTemp = pNode->m_pParentNode) != NULL) { - pNode = pTemp; - } - while (TRUE) { - CPLTreeNode* pTemp; - while ((pTemp = pNode->m_pNextNode) != NULL) { - pNode = pTemp; - } - if (pNode->m_pChildNode == NULL) { - break; - } - pNode = pNode->m_pChildNode; - } - return pNode == (CPLTreeNode*)this ? NULL : pNode; - } - case FirstChild: - return m_pChildNode; - case LastChild: { - if (m_pChildNode == NULL) { - return NULL; - } - CPLTreeNode* pChild = m_pChildNode; - CPLTreeNode* pTemp; - while ((pTemp = pChild->m_pNextNode) != NULL) { - pChild = pTemp; - } - return pChild; - } - default: - break; - } - return NULL; - } - void SetParentNode(CPLTreeNode* pNode) { m_pParentNode = pNode; } - int32_t CountChildNodes() const { - int32_t iCount = 0; - CPLTreeNode* pNode = m_pChildNode; - while (pNode) { - iCount++; - pNode = pNode->m_pNextNode; - } - return iCount; - } - CPLTreeNode* GetChildNode(int32_t iIndex) const { - int32_t iCount = 0; - CPLTreeNode* pNode = m_pChildNode; - while (pNode) { - if (iIndex == iCount) { - return pNode; - } - iCount++; - pNode = pNode->m_pNextNode; - } - return NULL; - } - int32_t GetNodeIndex() const { - int32_t index = 0; - CPLTreeNode* pNode = m_pPrevNode; - while (pNode != NULL) { - index++; - pNode = pNode->m_pPrevNode; - } - return index; - } - FX_BOOL IsParentNode(const CPLTreeNode* pNode) const { - CPLTreeNode* pParent = m_pParentNode; - while (pParent != NULL) { - if (pParent == pNode) { - return TRUE; - } - pParent = pParent->GetTreeNode(Parent); - } - return FALSE; - } - FX_BOOL IsChildNode(const CPLTreeNode* pNode) const { - if (pNode == NULL) { - return FALSE; - } - return pNode->IsParentNode((const CPLTreeNode*)this); - } - void SetChildNode(CPLTreeNode* pNode) { m_pChildNode = pNode; } - void SetPrevNode(CPLTreeNode* pNode) { m_pPrevNode = pNode; } - void SetNextNode(CPLTreeNode* pNode) { m_pNextNode = pNode; } - int32_t GetNodeLevel() const { - int32_t iLevel = 0; - CPLTreeNode* pNode = (CPLTreeNode*)this; - while ((pNode = pNode->m_pParentNode) != NULL) { - iLevel++; - } - return iLevel; - } - bool IsRootNode() const { return !m_pParentNode; } - baseType GetData() const { return m_Data; } - void SetData(baseType data) { m_Data = data; } - - protected: - CPLTreeNode* m_pParentNode; - CPLTreeNode* m_pChildNode; - CPLTreeNode* m_pPrevNode; - CPLTreeNode* m_pNextNode; - baseType m_Data; - friend class CFX_CPLTree; -}; - -template -class CFX_CPLTree { - public: - typedef CFX_CPLTreeNode CPLTreeNode; - CFX_CPLTree() : m_Root() {} - ~CFX_CPLTree() { - CPLTreeNode* pNode = m_Root.GetNode(CPLTreeNode::LastNeighbor); - while (pNode != NULL) { - if (pNode->IsRootNode()) { - break; - } - CPLTreeNode* pTemp = pNode->GetNode(CPLTreeNode::PreviousNeighbor); - delete pNode; - pNode = pTemp; - } - } - CPLTreeNode* GetRoot() { return &m_Root; } - CPLTreeNode* AddChild(baseType data, CPLTreeNode* pParent = NULL) { - if (pParent == NULL) { - pParent = &m_Root; - } - CPLTreeNode* pChild = new CPLTreeNode; - pChild->SetParentNode(pParent); - pChild->SetData(data); - if (pParent->m_pChildNode == NULL) { - pParent->m_pChildNode = pChild; - } else { - CPLTreeNode* pLast = pParent->GetNode(CPLTreeNode::LastChild); - pChild->SetPrevNode(pLast); - pLast->SetNextNode(pChild); - } - return pChild; - } - - protected: - CPLTreeNode m_Root; -}; - -#endif // XFA_SRC_FGAS_CRT_FGAS_UTILS_H_ diff --git a/xfa/src/fgas/font/fgas_font.h b/xfa/src/fgas/font/fgas_font.h deleted file mode 100644 index 0484dee3e6..0000000000 --- a/xfa/src/fgas/font/fgas_font.h +++ /dev/null @@ -1,285 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FGAS_FONT_FGAS_FONT_H_ -#define XFA_SRC_FGAS_FONT_FGAS_FONT_H_ - -#include "core/include/fxge/fx_font.h" -#include "xfa/src/fgas/crt/fgas_stream.h" - -#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ -#include "xfa/src/fgas/crt/fgas_memory.h" -#include "xfa/src/fgas/crt/fgas_utils.h" -#endif // _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ - -class IFX_Font; -class IFX_FontMgr; - -#define FX_FONTSTYLE_Normal 0x00 -#define FX_FONTSTYLE_FixedPitch 0x01 -#define FX_FONTSTYLE_Serif 0x02 -#define FX_FONTSTYLE_Symbolic 0x04 -#define FX_FONTSTYLE_Script 0x08 -#define FX_FONTSTYLE_Italic 0x40 -#define FX_FONTSTYLE_Bold 0x40000 -#define FX_FONTSTYLE_BoldItalic (FX_FONTSTYLE_Bold | FX_FONTSTYLE_Italic) -#define FX_FONTSTYLE_ExactMatch 0x80000000 -#define FX_FONTDECORATION_Underline 0x00000001 -#define FX_FONTDECORATION_Strikeout 0x00000002 -#define FX_FONTDECORATION_Overline 0x00000004 -#define FX_FONTDECORATION_Emphasis 0x00000008 -#define FX_FONTDECORATION_Superscript 0x00000010 -#define FX_FONTDECORATION_Subscript 0x00000020 -#define FX_FONTDECORATION_SmallCapital 0x00000040 -#define FX_FONTDECORATION_Capital 0x00000080 -#define FX_FONTDECORATION_Lowercase 0x000000C0 -#define FX_FONTDECORATION_Raised 0x00000100 -#define FX_FONTDECORATION_Sunken 0x00000200 -#define FX_FONTDECORATION_Shadow 0x00000400 -#define FX_FONTDECORATION_BoundingShape 0x20000000 -#define FX_FONTDECORATION_Hide 0x40000000 -#define FX_FONTDECORATION_StrokeFill 0x80000000 -#define FX_BOUNDINGSHAPE_None 0 -#define FX_BOUNDINGSHAPE_Circle 1 -#define FX_BOUNDINGSHAPE_Square 2 -#define FX_BOUNDINGSHAPE_Triangle 3 -#define FX_BOUNDINGSHAPE_Diamond 4 - -class IFX_FontProvider { - public: - virtual ~IFX_FontProvider() {} - virtual FX_BOOL GetCharWidth(IFX_Font* pFont, - FX_WCHAR wUnicode, - int32_t& iWidth, - FX_BOOL bCharCode = FALSE) = 0; -}; - -class IFX_Font { - public: - static IFX_Font* LoadFont(const FX_WCHAR* pszFontFamily, - FX_DWORD dwFontStyles, - FX_WORD wCodePage, - IFX_FontMgr* pFontMgr); - static IFX_Font* LoadFont(const uint8_t* pBuffer, - int32_t iLength, - IFX_FontMgr* pFontMgr); - static IFX_Font* LoadFont(const FX_WCHAR* pszFileName, IFX_FontMgr* pFontMgr); - static IFX_Font* LoadFont(IFX_Stream* pFontStream, - IFX_FontMgr* pFontMgr, - FX_BOOL bSaveStream = FALSE); - static IFX_Font* LoadFont(CFX_Font* pExtFont, - IFX_FontMgr* pFontMgr, - FX_BOOL bTakeOver = FALSE); - virtual ~IFX_Font() {} - virtual void Release() = 0; - virtual IFX_Font* Retain() = 0; - virtual IFX_Font* Derive(FX_DWORD dwFontStyles, FX_WORD wCodePage = 0) = 0; - virtual void GetFamilyName(CFX_WideString& wsFamily) const = 0; - virtual void GetPsName(CFX_WideString& wsName) const = 0; - virtual FX_DWORD GetFontStyles() const = 0; - virtual uint8_t GetCharSet() const = 0; - virtual FX_BOOL GetCharWidth(FX_WCHAR wUnicode, - int32_t& iWidth, - FX_BOOL bCharCode = FALSE) = 0; - virtual int32_t GetGlyphIndex(FX_WCHAR wUnicode, - FX_BOOL bCharCode = FALSE) = 0; - virtual int32_t GetAscent() const = 0; - virtual int32_t GetDescent() const = 0; - virtual FX_BOOL GetCharBBox(FX_WCHAR wUnicode, - CFX_Rect& bbox, - FX_BOOL bCharCode = FALSE) = 0; - virtual FX_BOOL GetBBox(CFX_Rect& bbox) = 0; - virtual int32_t GetItalicAngle() const = 0; - virtual void Reset() = 0; - virtual IFX_Font* GetSubstFont(int32_t iGlyphIndex) const = 0; - virtual void* GetDevFont() const = 0; - virtual void SetFontProvider(IFX_FontProvider* pProvider) = 0; -#if _FXM_PLATFORM_ != _FXM_PLATFORM_WINDOWS_ - virtual void SetLogicalFontStyle(FX_DWORD dwLogFontStyle) = 0; -#endif -}; -#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ -struct FX_FONTMATCHPARAMS { - const FX_WCHAR* pwsFamily; - FX_DWORD dwFontStyles; - FX_DWORD dwUSB; - FX_DWORD dwMatchFlags; - FX_WCHAR wUnicode; - FX_WORD wCodePage; -}; -typedef FX_FONTMATCHPARAMS* FX_LPFONTMATCHPARAMS; -typedef FX_FONTMATCHPARAMS const* FX_LPCFONTMATCHPARAMS; - -struct FX_FONTSIGNATURE { - FX_DWORD fsUsb[4]; - FX_DWORD fsCsb[2]; -}; -inline bool operator==(const FX_FONTSIGNATURE& left, - const FX_FONTSIGNATURE& right) { - return left.fsUsb[0] == right.fsUsb[0] && left.fsUsb[1] == right.fsUsb[1] && - left.fsUsb[2] == right.fsUsb[2] && left.fsUsb[3] == right.fsUsb[3] && - left.fsCsb[0] == right.fsCsb[0] && left.fsCsb[1] == right.fsCsb[1]; -} - -struct FX_FONTDESCRIPTOR { - FX_WCHAR wsFontFace[32]; - FX_DWORD dwFontStyles; - uint8_t uCharSet; - FX_FONTSIGNATURE FontSignature; -}; -typedef FX_FONTDESCRIPTOR* FX_LPFONTDESCRIPTOR; -typedef FX_FONTDESCRIPTOR const* FX_LPCFONTDESCRIPTOR; -typedef CFX_MassArrayTemplate CFX_FontDescriptors; -inline bool operator==(const FX_FONTDESCRIPTOR& left, - const FX_FONTDESCRIPTOR& right) { - return left.uCharSet == right.uCharSet && - left.dwFontStyles == right.dwFontStyles && - left.FontSignature == right.FontSignature && - FXSYS_wcscmp(left.wsFontFace, right.wsFontFace) == 0; -} - -#define FX_FONTMATCHPARA_MacthStyle 0x01 -#define FX_FONTMATCHPARA_MacthFamily 0x02 -#define FX_FONTMATCHPARA_MacthUnicode 0x04 -typedef void (*FX_LPEnumAllFonts)(CFX_FontDescriptors& fonts, - void* pUserData, - const FX_WCHAR* pwsFaceName, - FX_WCHAR wUnicode); -FX_LPEnumAllFonts FX_GetDefFontEnumerator(); -typedef FX_LPCFONTDESCRIPTOR (*FX_LPMatchFont)(FX_LPFONTMATCHPARAMS pParams, - const CFX_FontDescriptors& fonts, - void* pUserData); -FX_LPMatchFont FX_GetDefFontMatchor(); -class IFX_FontMgr { - public: - static IFX_FontMgr* Create(FX_LPEnumAllFonts pEnumerator, - FX_LPMatchFont pMatcher = NULL, - void* pUserData = NULL); - virtual ~IFX_FontMgr() {} - virtual void Release() = 0; - virtual IFX_Font* GetDefFontByCodePage( - FX_WORD wCodePage, - FX_DWORD dwFontStyles, - const FX_WCHAR* pszFontFamily = NULL) = 0; - virtual IFX_Font* GetDefFontByCharset( - uint8_t nCharset, - FX_DWORD dwFontStyles, - const FX_WCHAR* pszFontFamily = NULL) = 0; - virtual IFX_Font* GetDefFontByUnicode( - FX_WCHAR wUnicode, - FX_DWORD dwFontStyles, - const FX_WCHAR* pszFontFamily = NULL) = 0; - virtual IFX_Font* GetDefFontByLanguage( - FX_WORD wLanguage, - FX_DWORD dwFontStyles, - const FX_WCHAR* pszFontFamily = NULL) = 0; - virtual IFX_Font* LoadFont(const FX_WCHAR* pszFontFamily, - FX_DWORD dwFontStyles, - FX_WORD wCodePage = 0xFFFF) = 0; - virtual IFX_Font* LoadFont(const uint8_t* pBuffer, int32_t iLength) = 0; - virtual IFX_Font* LoadFont(const FX_WCHAR* pszFileName) = 0; - virtual IFX_Font* LoadFont(IFX_Stream* pFontStream, - const FX_WCHAR* pszFontAlias = NULL, - FX_DWORD dwFontStyles = 0, - FX_WORD wCodePage = 0, - FX_BOOL bSaveStream = FALSE) = 0; - virtual IFX_Font* LoadFont(IFX_Font* pSrcFont, - FX_DWORD dwFontStyles, - FX_WORD wCodePage = 0xFFFF) = 0; - virtual void ClearFontCache() = 0; - virtual void RemoveFont(IFX_Font* pFont) = 0; -}; -#else -class IFX_FontMgrDelegate { - public: - virtual ~IFX_FontMgrDelegate() {} - virtual IFX_Font* GetDefFontByCodePage( - IFX_FontMgr* pFontMgr, - FX_WORD wCodePage, - FX_DWORD dwFontStyles, - const FX_WCHAR* pszFontFamily = NULL) = 0; - virtual IFX_Font* GetDefFontByCharset( - IFX_FontMgr* pFontMgr, - uint8_t nCharset, - FX_DWORD dwFontStyles, - const FX_WCHAR* pszFontFamily = NULL) = 0; - virtual IFX_Font* GetDefFontByUnicode( - IFX_FontMgr* pFontMgr, - FX_WCHAR wUnicode, - FX_DWORD dwFontStyles, - const FX_WCHAR* pszFontFamily = NULL) = 0; - virtual IFX_Font* GetDefFontByLanguage( - IFX_FontMgr* pFontMgr, - FX_WORD wLanguage, - FX_DWORD dwFontStyles, - const FX_WCHAR* pszFontFamily = NULL) = 0; -}; -class IFX_FontSourceEnum { - public: - virtual ~IFX_FontSourceEnum() {} - virtual void Release() = 0; - virtual FX_POSITION GetStartPosition(void* pUserData = NULL) = 0; - virtual IFX_FileAccess* GetNext(FX_POSITION& pos, void* pUserData = NULL) = 0; -}; -IFX_FontSourceEnum* FX_CreateDefaultFontSourceEnum(); -class IFX_FontMgr { - public: - static IFX_FontMgr* Create(IFX_FontSourceEnum* pFontEnum, - IFX_FontMgrDelegate* pDelegate = NULL, - void* pUserData = NULL); - virtual ~IFX_FontMgr() {} - virtual void Release() = 0; - virtual IFX_Font* GetDefFontByCodePage( - FX_WORD wCodePage, - FX_DWORD dwFontStyles, - const FX_WCHAR* pszFontFamily = NULL) = 0; - virtual IFX_Font* GetDefFontByCharset( - uint8_t nCharset, - FX_DWORD dwFontStyles, - const FX_WCHAR* pszFontFamily = NULL) = 0; - virtual IFX_Font* GetDefFontByUnicode( - FX_WCHAR wUnicode, - FX_DWORD dwFontStyles, - const FX_WCHAR* pszFontFamily = NULL) = 0; - virtual IFX_Font* GetDefFontByLanguage( - FX_WORD wLanguage, - FX_DWORD dwFontStyles, - const FX_WCHAR* pszFontFamily = NULL) = 0; - virtual IFX_Font* GetFontByCodePage(FX_WORD wCodePage, - FX_DWORD dwFontStyles, - const FX_WCHAR* pszFontFamily = NULL) = 0; - inline IFX_Font* LoadFont(const FX_WCHAR* pszFontFamily, - FX_DWORD dwFontStyles, - FX_WORD wCodePage) { - return GetFontByCodePage(wCodePage, dwFontStyles, pszFontFamily); - } - virtual IFX_Font* GetFontByCharset(uint8_t nCharset, - FX_DWORD dwFontStyles, - const FX_WCHAR* pszFontFamily = NULL) = 0; - virtual IFX_Font* GetFontByUnicode(FX_WCHAR wUnicode, - FX_DWORD dwFontStyles, - const FX_WCHAR* pszFontFamily = NULL) = 0; - virtual IFX_Font* GetFontByLanguage(FX_WORD wLanguage, - FX_DWORD dwFontStyles, - const FX_WCHAR* pszFontFamily = NULL) = 0; - virtual IFX_Font* LoadFont(const uint8_t* pBuffer, - int32_t iLength, - int32_t iFaceIndex, - int32_t* pFaceCount = NULL) = 0; - virtual IFX_Font* LoadFont(const FX_WCHAR* pszFileName, - int32_t iFaceIndex, - int32_t* pFaceCount = NULL) = 0; - virtual IFX_Font* LoadFont(IFX_Stream* pFontStream, - int32_t iFaceIndex, - int32_t* pFaceCount = NULL, - FX_BOOL bSaveStream = FALSE) = 0; - - virtual void ClearFontCache() = 0; - virtual void RemoveFont(IFX_Font* pFont) = 0; -}; -#endif - -#endif // XFA_SRC_FGAS_FONT_FGAS_FONT_H_ diff --git a/xfa/src/fgas/font/fgas_fontutils.cpp b/xfa/src/fgas/font/fgas_fontutils.cpp deleted file mode 100644 index 62f26f515a..0000000000 --- a/xfa/src/fgas/font/fgas_fontutils.cpp +++ /dev/null @@ -1,153 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fgas/font/fgas_fontutils.h" - -#include "core/include/fxcrt/fx_ext.h" -#include "xfa/src/fgas/font/fgas_font.h" - -FX_DWORD FGAS_GetFontHashCode(FX_WORD wCodePage, FX_DWORD dwFontStyles) { - FX_DWORD dwHash = wCodePage; - if (dwFontStyles & FX_FONTSTYLE_FixedPitch) { - dwHash |= 0x00010000; - } - if (dwFontStyles & FX_FONTSTYLE_Serif) { - dwHash |= 0x00020000; - } - if (dwFontStyles & FX_FONTSTYLE_Symbolic) { - dwHash |= 0x00040000; - } - if (dwFontStyles & FX_FONTSTYLE_Script) { - dwHash |= 0x00080000; - } - if (dwFontStyles & FX_FONTSTYLE_Italic) { - dwHash |= 0x00100000; - } - if (dwFontStyles & FX_FONTSTYLE_Bold) { - dwHash |= 0x00200000; - } - return dwHash; -} -FX_DWORD FGAS_GetFontFamilyHash(const FX_WCHAR* pszFontFamily, - FX_DWORD dwFontStyles, - FX_WORD wCodePage) { - CFX_WideString wsFont(pszFontFamily); - if (dwFontStyles & FX_FONTSTYLE_Bold) { - wsFont += L"Bold"; - } - if (dwFontStyles & FX_FONTSTYLE_Italic) { - wsFont += L"Italic"; - } - wsFont += wCodePage; - return FX_HashCode_String_GetW((const FX_WCHAR*)wsFont, wsFont.GetLength()); -} -static const FGAS_FONTUSB g_FXGdiFontUSBTable[] = { - {0x0000, 0x007F, 0, 1252}, {0x0080, 0x00FF, 1, 1252}, - {0x0100, 0x017F, 2, 1250}, {0x0180, 0x024F, 3, 1250}, - {0x0250, 0x02AF, 4, 0xFFFF}, {0x02B0, 0x02FF, 5, 0xFFFF}, - {0x0300, 0x036F, 6, 0xFFFF}, {0x0370, 0x03FF, 7, 1253}, - {0x0400, 0x04FF, 9, 1251}, {0x0500, 0x052F, 9, 0xFFFF}, - {0x0530, 0x058F, 10, 0xFFFF}, {0x0590, 0x05FF, 11, 1255}, - {0x0600, 0x06FF, 13, 1256}, {0x0700, 0x074F, 71, 0xFFFF}, - {0x0750, 0x077F, 13, 0xFFFF}, {0x0780, 0x07BF, 72, 0xFFFF}, - {0x07C0, 0x07FF, 14, 0xFFFF}, {0x0800, 0x08FF, 999, 0xFFFF}, - {0x0900, 0x097F, 15, 0xFFFF}, {0x0980, 0x09FF, 16, 0xFFFF}, - {0x0A00, 0x0A7F, 17, 0xFFFF}, {0x0A80, 0x0AFF, 18, 0xFFFF}, - {0x0B00, 0x0B7F, 19, 0xFFFF}, {0x0B80, 0x0BFF, 20, 0xFFFF}, - {0x0C00, 0x0C7F, 21, 0xFFFF}, {0x0C80, 0x0CFF, 22, 0xFFFF}, - {0x0D00, 0x0D7F, 23, 0xFFFF}, {0x0D80, 0x0DFF, 73, 0xFFFF}, - {0x0E00, 0x0E7F, 24, 874}, {0x0E80, 0x0EFF, 25, 0xFFFF}, - {0x0F00, 0x0FFF, 70, 0xFFFF}, {0x1000, 0x109F, 74, 0xFFFF}, - {0x10A0, 0x10FF, 26, 0xFFFF}, {0x1100, 0x11FF, 28, 0xFFFF}, - {0x1200, 0x137F, 75, 0xFFFF}, {0x1380, 0x139F, 75, 0xFFFF}, - {0x13A0, 0x13FF, 76, 0xFFFF}, {0x1400, 0x167F, 77, 0xFFFF}, - {0x1680, 0x169F, 78, 0xFFFF}, {0x16A0, 0x16FF, 79, 0xFFFF}, - {0x1700, 0x171F, 84, 0xFFFF}, {0x1720, 0x173F, 84, 0xFFFF}, - {0x1740, 0x175F, 84, 0xFFFF}, {0x1760, 0x177F, 84, 0xFFFF}, - {0x1780, 0x17FF, 80, 0xFFFF}, {0x1800, 0x18AF, 81, 0xFFFF}, - {0x18B0, 0x18FF, 999, 0xFFFF}, {0x1900, 0x194F, 93, 0xFFFF}, - {0x1950, 0x197F, 94, 0xFFFF}, {0x1980, 0x19DF, 95, 0xFFFF}, - {0x19E0, 0x19FF, 80, 0xFFFF}, {0x1A00, 0x1A1F, 96, 0xFFFF}, - {0x1A20, 0x1AFF, 999, 0xFFFF}, {0x1B00, 0x1B7F, 27, 0xFFFF}, - {0x1B80, 0x1BBF, 112, 0xFFFF}, {0x1BC0, 0x1BFF, 999, 0xFFFF}, - {0x1C00, 0x1C4F, 113, 0xFFFF}, {0x1C50, 0x1C7F, 114, 0xFFFF}, - {0x1C80, 0x1CFF, 999, 0xFFFF}, {0x1D00, 0x1D7F, 4, 0xFFFF}, - {0x1D80, 0x1DBF, 4, 0xFFFF}, {0x1DC0, 0x1DFF, 6, 0xFFFF}, - {0x1E00, 0x1EFF, 29, 0xFFFF}, {0x1F00, 0x1FFF, 30, 0xFFFF}, - {0x2000, 0x206F, 31, 0xFFFF}, {0x2070, 0x209F, 32, 0xFFFF}, - {0x20A0, 0x20CF, 33, 0xFFFF}, {0x20D0, 0x20FF, 34, 0xFFFF}, - {0x2100, 0x214F, 35, 0xFFFF}, {0x2150, 0x215F, 36, 0xFFFF}, - {0x2160, 0x216B, 36, 936}, {0x216C, 0x216F, 36, 0xFFFF}, - {0x2170, 0x2179, 36, 936}, {0x217A, 0x218F, 36, 0xFFFF}, - {0x2190, 0x2199, 37, 949}, {0x219A, 0x21FF, 37, 0xFFFF}, - {0x2200, 0x22FF, 38, 0xFFFF}, {0x2300, 0x23FF, 39, 0xFFFF}, - {0x2400, 0x243F, 40, 0xFFFF}, {0x2440, 0x245F, 41, 0xFFFF}, - {0x2460, 0x2473, 42, 932}, {0x2474, 0x249B, 42, 936}, - {0x249C, 0x24E9, 42, 949}, {0x24EA, 0x24FF, 42, 0xFFFF}, - {0x2500, 0x2573, 43, 936}, {0x2574, 0x257F, 43, 0xFFFF}, - {0x2580, 0x2580, 44, 0xFFFF}, {0x2581, 0x258F, 44, 936}, - {0x2590, 0x259F, 44, 0xFFFF}, {0x25A0, 0x25FF, 45, 0xFFFF}, - {0x2600, 0x26FF, 46, 0xFFFF}, {0x2700, 0x27BF, 47, 0xFFFF}, - {0x27C0, 0x27EF, 38, 0xFFFF}, {0x27F0, 0x27FF, 37, 0xFFFF}, - {0x2800, 0x28FF, 82, 0xFFFF}, {0x2900, 0x297F, 37, 0xFFFF}, - {0x2980, 0x29FF, 38, 0xFFFF}, {0x2A00, 0x2AFF, 38, 0xFFFF}, - {0x2B00, 0x2BFF, 37, 0xFFFF}, {0x2C00, 0x2C5F, 97, 0xFFFF}, - {0x2C60, 0x2C7F, 29, 0xFFFF}, {0x2C80, 0x2CFF, 8, 0xFFFF}, - {0x2D00, 0x2D2F, 26, 0xFFFF}, {0x2D30, 0x2D7F, 98, 0xFFFF}, - {0x2D80, 0x2DDF, 75, 0xFFFF}, {0x2DE0, 0x2DFF, 9, 0xFFFF}, - {0x2E00, 0x2E7F, 31, 0xFFFF}, {0x2E80, 0x2EFF, 59, 0xFFFF}, - {0x2F00, 0x2FDF, 59, 0xFFFF}, {0x2FE0, 0x2FEF, 999, 0xFFFF}, - {0x2FF0, 0x2FFF, 59, 0xFFFF}, {0x3000, 0x303F, 48, 0xFFFF}, - {0x3040, 0x309F, 49, 932}, {0x30A0, 0x30FF, 50, 932}, - {0x3100, 0x3129, 51, 936}, {0x312A, 0x312F, 51, 0xFFFF}, - {0x3130, 0x318F, 52, 949}, {0x3190, 0x319F, 59, 0xFFFF}, - {0x31A0, 0x31BF, 51, 0xFFFF}, {0x31C0, 0x31EF, 61, 0xFFFF}, - {0x31F0, 0x31FF, 50, 0xFFFF}, {0x3200, 0x321C, 54, 949}, - {0x321D, 0x325F, 54, 0xFFFF}, {0x3260, 0x327F, 54, 949}, - {0x3280, 0x32FF, 54, 0xFFFF}, {0x3300, 0x3387, 55, 0xFFFF}, - {0x3388, 0x33D0, 55, 949}, {0x33D1, 0x33FF, 55, 0xFFFF}, - {0x3400, 0x4DBF, 59, 0xFFFF}, {0x4DC0, 0x4DFF, 99, 0xFFFF}, - {0x4E00, 0x9FA5, 59, 936}, {0x9FA6, 0x9FFF, 59, 0xFFFF}, - {0xA000, 0xA48F, 83, 0xFFFF}, {0xA490, 0xA4CF, 83, 0xFFFF}, - {0xA4D0, 0xA4FF, 999, 0xFFFF}, {0xA500, 0xA63F, 12, 0xFFFF}, - {0xA640, 0xA69F, 9, 0xFFFF}, {0xA6A0, 0xA6FF, 999, 0xFFFF}, - {0xA700, 0xA71F, 5, 0xFFFF}, {0xA720, 0xA7FF, 29, 0xFFFF}, - {0xA800, 0xA82F, 100, 0xFFFF}, {0xA830, 0xA8FF, 999, 0xFFFF}, - {0xA840, 0xA87F, 53, 0xFFFF}, {0xA880, 0xA8DF, 115, 0xFFFF}, - {0xA8E0, 0xA8FF, 999, 0xFFFF}, {0xA900, 0xA92F, 116, 0xFFFF}, - {0xA930, 0xA95F, 117, 0xFFFF}, {0xA960, 0xA9FF, 999, 0xFFFF}, - {0xAA00, 0xAA5F, 118, 0xFFFF}, {0xAA60, 0xABFF, 999, 0xFFFF}, - {0xAC00, 0xD7AF, 56, 949}, {0xD7B0, 0xD7FF, 999, 0xFFFF}, - {0xD800, 0xDB7F, 57, 0xFFFF}, {0xDB80, 0xDBFF, 57, 0xFFFF}, - {0xDC00, 0xDFFF, 57, 0xFFFF}, {0xE000, 0xE814, 60, 0xFFFF}, - {0xE815, 0xE864, 60, 936}, {0xE865, 0xF8FF, 60, 0xFFFF}, - {0xF900, 0xFA0B, 61, 949}, {0xFA0C, 0xFA0D, 61, 936}, - {0xFA0E, 0xFA2D, 61, 932}, {0xFA2E, 0xFAFF, 61, 0xFFFF}, - {0xFB00, 0xFB4F, 62, 0xFFFF}, {0xFB50, 0xFDFF, 63, 1256}, - {0xFE00, 0xFE0F, 91, 0xFFFF}, {0xFE10, 0xFE1F, 65, 0xFFFF}, - {0xFE20, 0xFE2F, 64, 0xFFFF}, {0xFE30, 0xFE4F, 65, 0xFFFF}, - {0xFE50, 0xFE6F, 66, 0xFFFF}, {0xFE70, 0xFEFF, 67, 1256}, - {0xFF00, 0xFF5F, 68, 936}, {0xFF60, 0xFF9F, 68, 932}, - {0xFFA0, 0xFFEF, 68, 0xFFFF}, -}; - -const FGAS_FONTUSB* FGAS_GetUnicodeBitField(FX_WCHAR wUnicode) { - int32_t iEnd = sizeof(g_FXGdiFontUSBTable) / sizeof(FGAS_FONTUSB) - 1; - FXSYS_assert(iEnd >= 0); - int32_t iStart = 0, iMid; - do { - iMid = (iStart + iEnd) / 2; - const FGAS_FONTUSB& usb = g_FXGdiFontUSBTable[iMid]; - if (wUnicode < usb.wStartUnicode) { - iEnd = iMid - 1; - } else if (wUnicode > usb.wEndUnicode) { - iStart = iMid + 1; - } else { - return &usb; - } - } while (iStart <= iEnd); - return NULL; -} diff --git a/xfa/src/fgas/font/fgas_fontutils.h b/xfa/src/fgas/font/fgas_fontutils.h deleted file mode 100644 index 4cceb68574..0000000000 --- a/xfa/src/fgas/font/fgas_fontutils.h +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FGAS_FONT_FGAS_FONTUTILS_H_ -#define XFA_SRC_FGAS_FONT_FGAS_FONTUTILS_H_ - -#include "core/include/fxcrt/fx_string.h" - -struct FGAS_FONTUSB { - FX_WCHAR wStartUnicode; - FX_WCHAR wEndUnicode; - FX_WORD wBitField; - FX_WORD wCodePage; -}; - -FX_DWORD FGAS_GetFontHashCode(FX_WORD wCodePage, FX_DWORD dwFontStyles); -FX_DWORD FGAS_GetFontFamilyHash(const FX_WCHAR* pszFontFamily, - FX_DWORD dwFontStyles, - FX_WORD wCodePage); -const FGAS_FONTUSB* FGAS_GetUnicodeBitField(FX_WCHAR wUnicode); - -#endif // XFA_SRC_FGAS_FONT_FGAS_FONTUTILS_H_ diff --git a/xfa/src/fgas/font/fgas_gefont.cpp b/xfa/src/fgas/font/fgas_gefont.cpp deleted file mode 100644 index df614a57c3..0000000000 --- a/xfa/src/fgas/font/fgas_gefont.cpp +++ /dev/null @@ -1,572 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fgas/font/fgas_gefont.h" - -#include "xfa/src/fgas/crt/fgas_codepage.h" -#include "xfa/src/fgas/font/fgas_fontutils.h" - -IFX_Font* IFX_Font::LoadFont(const FX_WCHAR* pszFontFamily, - FX_DWORD dwFontStyles, - FX_WORD wCodePage, - IFX_FontMgr* pFontMgr) { -#if _FXM_PLATFORM_ != _FXM_PLATFORM_WINDOWS_ - if (NULL != pFontMgr) { - return pFontMgr->GetFontByCodePage(wCodePage, dwFontStyles, pszFontFamily); - } - return NULL; -#else - CFX_GEFont* pFont = new CFX_GEFont(pFontMgr); - if (!pFont->LoadFont(pszFontFamily, dwFontStyles, wCodePage)) { - pFont->Release(); - return NULL; - } - return pFont; -#endif -} -IFX_Font* IFX_Font::LoadFont(const uint8_t* pBuffer, - int32_t iLength, - IFX_FontMgr* pFontMgr) { -#if _FXM_PLATFORM_ != _FXM_PLATFORM_WINDOWS_ - if (NULL != pFontMgr) { - return pFontMgr->LoadFont(pBuffer, iLength, 0, NULL); - } - return NULL; -#else - CFX_GEFont* pFont = new CFX_GEFont(pFontMgr); - if (!pFont->LoadFont(pBuffer, iLength)) { - pFont->Release(); - return NULL; - } - return pFont; -#endif -} -IFX_Font* IFX_Font::LoadFont(const FX_WCHAR* pszFileName, - IFX_FontMgr* pFontMgr) { -#if _FXM_PLATFORM_ != _FXM_PLATFORM_WINDOWS_ - if (NULL != pFontMgr) { - return pFontMgr->LoadFont(pszFileName, 0, NULL); - } - return NULL; -#else - CFX_GEFont* pFont = new CFX_GEFont(pFontMgr); - if (!pFont->LoadFont(pszFileName)) { - pFont->Release(); - return NULL; - } - return pFont; -#endif -} -IFX_Font* IFX_Font::LoadFont(IFX_Stream* pFontStream, - IFX_FontMgr* pFontMgr, - FX_BOOL bSaveStream) { -#if _FXM_PLATFORM_ != _FXM_PLATFORM_WINDOWS_ - if (NULL != pFontMgr) { - return pFontMgr->LoadFont(pFontStream, 0, NULL); - } - return NULL; -#else - CFX_GEFont* pFont = new CFX_GEFont(pFontMgr); - if (!pFont->LoadFont(pFontStream, bSaveStream)) { - pFont->Release(); - return NULL; - } - return pFont; -#endif -} -IFX_Font* IFX_Font::LoadFont(CFX_Font* pExtFont, - IFX_FontMgr* pFontMgr, - FX_BOOL bTakeOver) { - CFX_GEFont* pFont = new CFX_GEFont(pFontMgr); - if (!pFont->LoadFont(pExtFont, bTakeOver)) { - pFont->Release(); - return NULL; - } - return pFont; -} -CFX_GEFont::CFX_GEFont(IFX_FontMgr* pFontMgr) - : -#if _FXM_PLATFORM_ != _FXM_PLATFORM_WINDOWS_ - m_bUseLogFontStyle(FALSE), - m_dwLogFontStyle(0), -#endif - m_pFont(NULL), - m_pFontMgr(pFontMgr), - m_iRefCount(1), - m_bExtFont(FALSE), - m_pStream(NULL), - m_pFileRead(NULL), - m_pFontEncoding(NULL), - m_pCharWidthMap(NULL), - m_pRectArray(NULL), - m_pBBoxMap(NULL), - m_pProvider(NULL), - m_wCharSet(0xFFFF), - m_SubstFonts(), - m_FontMapper(16) { -} - -CFX_GEFont::CFX_GEFont(const CFX_GEFont& src, FX_DWORD dwFontStyles) - : -#if _FXM_PLATFORM_ != _FXM_PLATFORM_WINDOWS_ - m_bUseLogFontStyle(FALSE), - m_dwLogFontStyle(0), -#endif - m_pFont(NULL), - m_pFontMgr(src.m_pFontMgr), - m_iRefCount(1), - m_bExtFont(FALSE), - m_pStream(NULL), - m_pFileRead(NULL), - m_pFontEncoding(NULL), - m_pCharWidthMap(NULL), - m_pRectArray(NULL), - m_pBBoxMap(NULL), - m_pProvider(NULL), - m_wCharSet(0xFFFF), - m_SubstFonts(), - m_FontMapper(16) { - m_pFont = new CFX_Font; - FXSYS_assert(m_pFont != NULL); - FXSYS_assert(src.m_pFont != NULL); - m_pFont->LoadClone(src.m_pFont); - CFX_SubstFont* pSubst = m_pFont->GetSubstFont(); - if (!pSubst) { - pSubst = new CFX_SubstFont; - m_pFont->SetSubstFont(pSubst); - } - pSubst->m_Weight = - (dwFontStyles & FX_FONTSTYLE_Bold) ? FXFONT_FW_BOLD : FXFONT_FW_NORMAL; - if (dwFontStyles & FX_FONTSTYLE_Italic) { - pSubst->m_SubstFlags |= FXFONT_SUBST_ITALIC; - } - InitFont(); -} -CFX_GEFont::~CFX_GEFont() { - int32_t iCount = m_SubstFonts.GetSize(); - for (int32_t i = 0; i < iCount; i++) { - IFX_Font* pFont = (IFX_Font*)m_SubstFonts[i]; - pFont->Release(); - } - m_SubstFonts.RemoveAll(); - m_FontMapper.RemoveAll(); - if (m_pFileRead != NULL) { - m_pFileRead->Release(); - } - if (m_pStream != NULL) { - m_pStream->Release(); - } - if (m_pFontEncoding != NULL) { - delete m_pFontEncoding; - } - if (m_pCharWidthMap != NULL) { - delete m_pCharWidthMap; - } - if (m_pRectArray != NULL) { - delete m_pRectArray; - } - if (m_pBBoxMap != NULL) { - delete m_pBBoxMap; - } - if (m_pFont != NULL && !m_bExtFont) { - delete m_pFont; - } -} -void CFX_GEFont::Release() { - if (--m_iRefCount < 1) { - if (m_pFontMgr != NULL) { - m_pFontMgr->RemoveFont(this); - } - delete this; - } -} -IFX_Font* CFX_GEFont::Retain() { - ++m_iRefCount; - return this; -} -FX_BOOL CFX_GEFont::LoadFont(const FX_WCHAR* pszFontFamily, - FX_DWORD dwFontStyles, - FX_WORD wCodePage) { - if (m_pFont) { - return FALSE; - } - CFX_ByteString csFontFamily; - if (pszFontFamily != NULL) { - csFontFamily = CFX_ByteString::FromUnicode(pszFontFamily); - } - FX_DWORD dwFlags = 0; - if (dwFontStyles & FX_FONTSTYLE_FixedPitch) { - dwFlags |= FXFONT_FIXED_PITCH; - } - if (dwFontStyles & FX_FONTSTYLE_Serif) { - dwFlags |= FXFONT_SERIF; - } - if (dwFontStyles & FX_FONTSTYLE_Symbolic) { - dwFlags |= FXFONT_SYMBOLIC; - } - if (dwFontStyles & FX_FONTSTYLE_Script) { - dwFlags |= FXFONT_SCRIPT; - } - if (dwFontStyles & FX_FONTSTYLE_Italic) { - dwFlags |= FXFONT_ITALIC; - } - if (dwFontStyles & FX_FONTSTYLE_Bold) { - dwFlags |= FXFONT_BOLD; - } - if (dwFontStyles & FX_FONTSTYLE_ExactMatch) { - dwFlags |= FXFONT_EXACTMATCH; - } - int32_t iWeight = - (dwFontStyles & FX_FONTSTYLE_Bold) ? FXFONT_FW_BOLD : FXFONT_FW_NORMAL; - FX_WORD wCharSet = FX_GetCharsetFromCodePage(wCodePage); - if (wCharSet == 0xFFFF) { - wCharSet = FXSYS_GetACP(); - } - m_wCharSet = wCharSet; - m_pFont = new CFX_Font; - if ((dwFlags & FXFONT_ITALIC) && (dwFlags & FXFONT_BOLD)) { - csFontFamily += ",BoldItalic"; - } else if (dwFlags & FXFONT_BOLD) { - csFontFamily += ",Bold"; - } else if (dwFlags & FXFONT_ITALIC) { - csFontFamily += ",Italic"; - } - m_pFont->LoadSubst(csFontFamily, TRUE, dwFlags, iWeight, 0, wCodePage); - FX_BOOL bRet = m_pFont->GetFace() != nullptr; - if (bRet) { - bRet = InitFont(); - } - return bRet; -} -FX_BOOL CFX_GEFont::LoadFont(const uint8_t* pBuffer, int32_t length) { - if (m_pFont) { - return FALSE; - } - m_pFont = new CFX_Font; - FX_BOOL bRet = m_pFont->LoadEmbedded(pBuffer, length); - if (bRet) { - bRet = InitFont(); - } - m_wCharSet = 0xFFFF; - return bRet; -} -FX_BOOL CFX_GEFont::LoadFont(const FX_WCHAR* pszFileName) { - if (m_pFont || m_pStream || m_pFileRead) { - return FALSE; - } - m_pStream = IFX_Stream::CreateStream( - pszFileName, FX_STREAMACCESS_Binary | FX_STREAMACCESS_Read); - m_pFileRead = FX_CreateFileRead(m_pStream); - FX_BOOL bRet = FALSE; - if (m_pStream && m_pFileRead) { - m_pFont = new CFX_Font; - bRet = m_pFont->LoadFile(m_pFileRead); - if (bRet) { - bRet = InitFont(); - } else { - m_pFileRead->Release(); - m_pFileRead = nullptr; - } - } - m_wCharSet = 0xFFFF; - return bRet; -} -FX_BOOL CFX_GEFont::LoadFont(IFX_Stream* pFontStream, FX_BOOL bSaveStream) { - if (m_pFont || m_pFileRead || !pFontStream || pFontStream->GetLength() < 1) { - return FALSE; - } - if (bSaveStream) { - m_pStream = pFontStream; - } - m_pFileRead = FX_CreateFileRead(pFontStream); - m_pFont = new CFX_Font; - FX_BOOL bRet = m_pFont->LoadFile(m_pFileRead); - if (bRet) { - bRet = InitFont(); - } else { - m_pFileRead->Release(); - m_pFileRead = nullptr; - } - m_wCharSet = 0xFFFF; - return bRet; -} -FX_BOOL CFX_GEFont::LoadFont(CFX_Font* pExtFont, FX_BOOL bTakeOver) { - if (m_pFont || !pExtFont) { - return FALSE; - } - m_pFont = pExtFont; - FX_BOOL bRet = !!m_pFont; - if (bRet) { - m_bExtFont = !bTakeOver; - bRet = InitFont(); - } else { - m_bExtFont = TRUE; - } - m_wCharSet = 0xFFFF; - return bRet; -} -FX_BOOL CFX_GEFont::InitFont() { - if (!m_pFont) { - return FALSE; - } - if (!m_pFontEncoding) { - m_pFontEncoding = FX_CreateFontEncodingEx(m_pFont); - if (!m_pFontEncoding) { - return FALSE; - } - } - if (!m_pCharWidthMap) { - m_pCharWidthMap = new CFX_WordDiscreteArray(1024); - } - if (!m_pRectArray) { - m_pRectArray = new CFX_RectMassArray(16); - } - if (!m_pBBoxMap) { - m_pBBoxMap = new CFX_MapPtrToPtr(16); - } - return TRUE; -} -IFX_Font* CFX_GEFont::Derive(FX_DWORD dwFontStyles, FX_WORD wCodePage) { - if (GetFontStyles() == dwFontStyles) { - return Retain(); - } - return new CFX_GEFont(*this, dwFontStyles); -} -uint8_t CFX_GEFont::GetCharSet() const { - if (m_wCharSet != 0xFFFF) { - return (uint8_t)m_wCharSet; - } - if (!m_pFont->GetSubstFont()) { - return FX_CHARSET_Default; - } - return m_pFont->GetSubstFont()->m_Charset; -} -void CFX_GEFont::GetFamilyName(CFX_WideString& wsFamily) const { - if (!m_pFont->GetSubstFont() || - m_pFont->GetSubstFont()->m_Family.GetLength() == 0) { - wsFamily = CFX_WideString::FromLocal(m_pFont->GetFamilyName()); - } else { - wsFamily = CFX_WideString::FromLocal(m_pFont->GetSubstFont()->m_Family); - } -} -void CFX_GEFont::GetPsName(CFX_WideString& wsName) const { - wsName = m_pFont->GetPsName(); -} -FX_DWORD CFX_GEFont::GetFontStyles() const { - FXSYS_assert(m_pFont != NULL); -#if _FXM_PLATFORM_ != _FXM_PLATFORM_WINDOWS_ - if (m_bUseLogFontStyle) { - return m_dwLogFontStyle; - } -#endif - FX_DWORD dwStyles = 0; - if (!m_pFont->GetSubstFont()) { - if (m_pFont->IsBold()) { - dwStyles |= FX_FONTSTYLE_Bold; - } - if (m_pFont->IsItalic()) { - dwStyles |= FX_FONTSTYLE_Italic; - } - } else { - if (m_pFont->GetSubstFont()->m_Weight == FXFONT_FW_BOLD) { - dwStyles |= FX_FONTSTYLE_Bold; - } - if (m_pFont->GetSubstFont()->m_SubstFlags & FXFONT_SUBST_ITALIC) { - dwStyles |= FX_FONTSTYLE_Italic; - } - } - return dwStyles; -} -FX_BOOL CFX_GEFont::GetCharWidth(FX_WCHAR wUnicode, - int32_t& iWidth, - FX_BOOL bCharCode) { - return GetCharWidth(wUnicode, iWidth, TRUE, bCharCode); -} -FX_BOOL CFX_GEFont::GetCharWidth(FX_WCHAR wUnicode, - int32_t& iWidth, - FX_BOOL bRecursive, - FX_BOOL bCharCode) { - FXSYS_assert(m_pCharWidthMap != NULL); - iWidth = m_pCharWidthMap->GetAt(wUnicode, 0); - if (iWidth < 1) { - if (!m_pProvider || - !m_pProvider->GetCharWidth(this, wUnicode, iWidth, bCharCode)) { - IFX_Font* pFont = NULL; - int32_t iGlyph = GetGlyphIndex(wUnicode, TRUE, &pFont, bCharCode); - if (iGlyph != 0xFFFF && pFont != NULL) { - if (pFont == (IFX_Font*)this) { - iWidth = m_pFont->GetGlyphWidth(iGlyph); - if (iWidth < 0) { - iWidth = -1; - } - } else if (((CFX_GEFont*)pFont) - ->GetCharWidth(wUnicode, iWidth, FALSE, bCharCode)) { - return TRUE; - } - } else { - iWidth = -1; - } - } - m_pCharWidthMap->SetAtGrow(wUnicode, (int16_t)iWidth); - } else if (iWidth == 65535) { - iWidth = -1; - } - return iWidth > 0; -} -FX_BOOL CFX_GEFont::GetCharBBox(FX_WCHAR wUnicode, - CFX_Rect& bbox, - FX_BOOL bCharCode) { - return GetCharBBox(wUnicode, bbox, TRUE, bCharCode); -} -FX_BOOL CFX_GEFont::GetCharBBox(FX_WCHAR wUnicode, - CFX_Rect& bbox, - FX_BOOL bRecursive, - FX_BOOL bCharCode) { - FXSYS_assert(m_pRectArray != NULL); - FXSYS_assert(m_pBBoxMap != NULL); - void* pRect = NULL; - if (!m_pBBoxMap->Lookup((void*)(uintptr_t)wUnicode, pRect)) { - IFX_Font* pFont = NULL; - int32_t iGlyph = GetGlyphIndex(wUnicode, TRUE, &pFont, bCharCode); - if (iGlyph != 0xFFFF && pFont != NULL) { - if (pFont == (IFX_Font*)this) { - FX_RECT rtBBox; - if (m_pFont->GetGlyphBBox(iGlyph, rtBBox)) { - CFX_Rect rt; - rt.Set(rtBBox.left, rtBBox.top, rtBBox.Width(), rtBBox.Height()); - int32_t index = m_pRectArray->Add(rt); - pRect = m_pRectArray->GetPtrAt(index); - m_pBBoxMap->SetAt((void*)(uintptr_t)wUnicode, pRect); - } - } else if (((CFX_GEFont*)pFont) - ->GetCharBBox(wUnicode, bbox, FALSE, bCharCode)) { - return TRUE; - } - } - } - if (!pRect) - return FALSE; - - bbox = *static_cast(pRect); - return TRUE; -} -FX_BOOL CFX_GEFont::GetBBox(CFX_Rect& bbox) { - FX_RECT rt(0, 0, 0, 0); - FX_BOOL bRet = m_pFont->GetBBox(rt); - if (bRet) { - bbox.left = rt.left; - bbox.width = rt.Width(); - bbox.top = rt.bottom; - bbox.height = -rt.Height(); - } - return bRet; -} -int32_t CFX_GEFont::GetItalicAngle() const { - if (!m_pFont->GetSubstFont()) { - return 0; - } - return m_pFont->GetSubstFont()->m_ItalicAngle; -} -int32_t CFX_GEFont::GetGlyphIndex(FX_WCHAR wUnicode, FX_BOOL bCharCode) { - return GetGlyphIndex(wUnicode, TRUE, NULL, bCharCode); -} -int32_t CFX_GEFont::GetGlyphIndex(FX_WCHAR wUnicode, - FX_BOOL bRecursive, - IFX_Font** ppFont, - FX_BOOL bCharCode) { - FXSYS_assert(m_pFontEncoding != NULL); - int32_t iGlyphIndex = m_pFontEncoding->GlyphFromCharCode(wUnicode); - if (iGlyphIndex > 0) { - if (ppFont != NULL) { - *ppFont = (IFX_Font*)this; - } - return iGlyphIndex; - } - const FGAS_FONTUSB* pFontUSB = FGAS_GetUnicodeBitField(wUnicode); - if (pFontUSB == NULL) { - return 0xFFFF; - } - FX_WORD wBitField = pFontUSB->wBitField; - if (wBitField >= 128) { - return 0xFFFF; - } - IFX_Font* pFont = NULL; - m_FontMapper.Lookup((void*)(uintptr_t)wUnicode, (void*&)pFont); - if (pFont != NULL && pFont != (IFX_Font*)this) { - iGlyphIndex = - ((CFX_GEFont*)pFont)->GetGlyphIndex(wUnicode, FALSE, NULL, bCharCode); - if (iGlyphIndex != 0xFFFF) { - int32_t i = m_SubstFonts.Find(pFont); - if (i > -1) { - iGlyphIndex |= ((i + 1) << 24); - if (ppFont != NULL) { - *ppFont = pFont; - } - return iGlyphIndex; - } - } - } - if (m_pFontMgr != NULL && bRecursive) { - CFX_WideString wsFamily; - GetFamilyName(wsFamily); -#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ - IFX_Font* pFont = m_pFontMgr->GetDefFontByUnicode( - wUnicode, GetFontStyles(), (const FX_WCHAR*)wsFamily); -#else - IFX_Font* pFont = m_pFontMgr->GetFontByUnicode(wUnicode, GetFontStyles(), - (const FX_WCHAR*)wsFamily); - if (NULL == pFont) { - pFont = m_pFontMgr->GetFontByUnicode(wUnicode, GetFontStyles(), NULL); - } -#endif - if (pFont != NULL) { - if (pFont == (IFX_Font*)this) { - pFont->Release(); - return 0xFFFF; - } - m_FontMapper.SetAt((void*)(uintptr_t)wUnicode, (void*)pFont); - int32_t i = m_SubstFonts.GetSize(); - m_SubstFonts.Add(pFont); - iGlyphIndex = - ((CFX_GEFont*)pFont)->GetGlyphIndex(wUnicode, FALSE, NULL, bCharCode); - if (iGlyphIndex != 0xFFFF) { - iGlyphIndex |= ((i + 1) << 24); - if (ppFont != NULL) { - *ppFont = pFont; - } - return iGlyphIndex; - } - } - } - return 0xFFFF; -} -int32_t CFX_GEFont::GetAscent() const { - return m_pFont->GetAscent(); -} -int32_t CFX_GEFont::GetDescent() const { - return m_pFont->GetDescent(); -} -void CFX_GEFont::Reset() { - int32_t iCount = m_SubstFonts.GetSize(); - for (int32_t i = 0; i < iCount; i++) { - IFX_Font* pFont = (IFX_Font*)m_SubstFonts[i]; - ((CFX_GEFont*)pFont)->Reset(); - } - if (m_pCharWidthMap != NULL) { - m_pCharWidthMap->RemoveAll(); - } - if (m_pBBoxMap != NULL) { - m_pBBoxMap->RemoveAll(); - } - if (m_pRectArray != NULL) { - m_pRectArray->RemoveAll(); - } -} -IFX_Font* CFX_GEFont::GetSubstFont(int32_t iGlyphIndex) const { - iGlyphIndex = ((FX_DWORD)iGlyphIndex) >> 24; - return iGlyphIndex == 0 ? (IFX_Font*)this - : (IFX_Font*)m_SubstFonts[iGlyphIndex - 1]; -} diff --git a/xfa/src/fgas/font/fgas_gefont.h b/xfa/src/fgas/font/fgas_gefont.h deleted file mode 100644 index 1bc8a6a902..0000000000 --- a/xfa/src/fgas/font/fgas_gefont.h +++ /dev/null @@ -1,92 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FGAS_FONT_FGAS_GEFONT_H_ -#define XFA_SRC_FGAS_FONT_FGAS_GEFONT_H_ - -#include "xfa/src/fgas/crt/fgas_utils.h" -#include "xfa/src/fgas/font/fgas_font.h" - -#define FXFONT_SUBST_ITALIC 0x02 - -class CFX_GEFont : public IFX_Font { - public: - CFX_GEFont(const CFX_GEFont& src, FX_DWORD dwFontStyles); - CFX_GEFont(IFX_FontMgr* pFontMgr); - ~CFX_GEFont(); - virtual void Release(); - virtual IFX_Font* Retain(); - FX_BOOL LoadFont(const FX_WCHAR* pszFontFamily, - FX_DWORD dwFontStyles, - FX_WORD wCodePage); - FX_BOOL LoadFont(const uint8_t* pBuffer, int32_t length); - FX_BOOL LoadFont(const FX_WCHAR* pszFileName); - FX_BOOL LoadFont(IFX_Stream* pFontStream, FX_BOOL bSaveStream); - FX_BOOL LoadFont(CFX_Font* pExtFont, FX_BOOL bTakeOver = FALSE); - virtual IFX_Font* Derive(FX_DWORD dwFontStyles, FX_WORD wCodePage = 0); - virtual void GetFamilyName(CFX_WideString& wsFamily) const; - virtual void GetPsName(CFX_WideString& wsName) const; - virtual FX_DWORD GetFontStyles() const; - virtual uint8_t GetCharSet() const; - virtual FX_BOOL GetCharWidth(FX_WCHAR wUnicode, - int32_t& iWidth, - FX_BOOL bCharCode = FALSE); - virtual int32_t GetGlyphIndex(FX_WCHAR wUnicode, FX_BOOL bCharCode = FALSE); - virtual int32_t GetAscent() const; - virtual int32_t GetDescent() const; - virtual FX_BOOL GetCharBBox(FX_WCHAR wUnicode, - CFX_Rect& bbox, - FX_BOOL bCharCode = FALSE); - virtual FX_BOOL GetBBox(CFX_Rect& bbox); - virtual int32_t GetItalicAngle() const; - virtual void Reset(); - virtual IFX_Font* GetSubstFont(int32_t iGlyphIndex) const; - virtual void* GetDevFont() const { return (void*)m_pFont; } - virtual void SetFontProvider(IFX_FontProvider* pProvider) { - m_pProvider = pProvider; - } -#if _FXM_PLATFORM_ != _FXM_PLATFORM_WINDOWS_ - virtual void SetLogicalFontStyle(FX_DWORD dwLogFontStyle) { - m_bUseLogFontStyle = TRUE; - m_dwLogFontStyle = dwLogFontStyle; - } -#endif - - protected: -#if _FXM_PLATFORM_ != _FXM_PLATFORM_WINDOWS_ - FX_BOOL m_bUseLogFontStyle; - FX_DWORD m_dwLogFontStyle; -#endif - CFX_Font* m_pFont; - IFX_FontMgr* m_pFontMgr; - int32_t m_iRefCount; - FX_BOOL m_bExtFont; - IFX_Stream* m_pStream; - IFX_FileRead* m_pFileRead; - CFX_UnicodeEncoding* m_pFontEncoding; - CFX_WordDiscreteArray* m_pCharWidthMap; - CFX_RectMassArray* m_pRectArray; - CFX_MapPtrToPtr* m_pBBoxMap; - IFX_FontProvider* m_pProvider; - FX_WORD m_wCharSet; - CFX_PtrArray m_SubstFonts; - CFX_MapPtrToPtr m_FontMapper; - FX_BOOL InitFont(); - FX_BOOL GetCharBBox(FX_WCHAR wUnicode, - CFX_Rect& bbox, - FX_BOOL bRecursive, - FX_BOOL bCharCode = FALSE); - FX_BOOL GetCharWidth(FX_WCHAR wUnicode, - int32_t& iWidth, - FX_BOOL bRecursive, - FX_BOOL bCharCode = FALSE); - int32_t GetGlyphIndex(FX_WCHAR wUnicode, - FX_BOOL bRecursive, - IFX_Font** ppFont, - FX_BOOL bCharCode = FALSE); -}; - -#endif // XFA_SRC_FGAS_FONT_FGAS_GEFONT_H_ diff --git a/xfa/src/fgas/font/fgas_stdfontmgr.cpp b/xfa/src/fgas/font/fgas_stdfontmgr.cpp deleted file mode 100644 index 99f1fdda44..0000000000 --- a/xfa/src/fgas/font/fgas_stdfontmgr.cpp +++ /dev/null @@ -1,1515 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fgas/font/fgas_stdfontmgr.h" - -#include "core/include/fxcrt/fx_stream.h" -#include "xfa/src/fgas/crt/fgas_codepage.h" -#include "xfa/src/fgas/font/fgas_fontutils.h" - -#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ -IFX_FontMgr* IFX_FontMgr::Create(FX_LPEnumAllFonts pEnumerator, - FX_LPMatchFont pMatcher, - void* pUserData) { - return new CFX_StdFontMgrImp(pEnumerator, pMatcher, pUserData); -} -CFX_StdFontMgrImp::CFX_StdFontMgrImp(FX_LPEnumAllFonts pEnumerator, - FX_LPMatchFont pMatcher, - void* pUserData) - : m_pMatcher(pMatcher), - m_pEnumerator(pEnumerator), - m_FontFaces(), - m_Fonts(), - m_CPFonts(8), - m_FamilyFonts(16), - m_UnicodeFonts(16), - m_BufferFonts(4), - m_FileFonts(4), - m_StreamFonts(4), - m_DeriveFonts(4), - m_pUserData(pUserData) { - if (m_pEnumerator != NULL) { - m_pEnumerator(m_FontFaces, m_pUserData, NULL, 0xFEFF); - } - if (m_pMatcher == NULL) { - m_pMatcher = FX_DefFontMatcher; - } - FXSYS_assert(m_pMatcher != NULL); -} -CFX_StdFontMgrImp::~CFX_StdFontMgrImp() { - m_FontFaces.RemoveAll(); - m_CPFonts.RemoveAll(); - m_FamilyFonts.RemoveAll(); - m_UnicodeFonts.RemoveAll(); - m_BufferFonts.RemoveAll(); - m_FileFonts.RemoveAll(); - m_StreamFonts.RemoveAll(); - m_DeriveFonts.RemoveAll(); - for (int32_t i = m_Fonts.GetUpperBound(); i >= 0; i--) { - IFX_Font* pFont = (IFX_Font*)m_Fonts[i]; - if (pFont != NULL) { - pFont->Release(); - } - } - m_Fonts.RemoveAll(); -} -IFX_Font* CFX_StdFontMgrImp::GetDefFontByCodePage( - FX_WORD wCodePage, - FX_DWORD dwFontStyles, - const FX_WCHAR* pszFontFamily) { - FX_DWORD dwHash = FGAS_GetFontHashCode(wCodePage, dwFontStyles); - IFX_Font* pFont = NULL; - if (m_CPFonts.Lookup((void*)(uintptr_t)dwHash, (void*&)pFont)) { - return pFont ? LoadFont(pFont, dwFontStyles, wCodePage) : NULL; - } - FX_LPCFONTDESCRIPTOR pFD; - if ((pFD = FindFont(pszFontFamily, dwFontStyles, TRUE, wCodePage)) == NULL) { - if ((pFD = FindFont(NULL, dwFontStyles, TRUE, wCodePage)) == NULL) { - if ((pFD = FindFont(NULL, dwFontStyles, FALSE, wCodePage)) == NULL) - return NULL; - } - } - FXSYS_assert(pFD != NULL); - pFont = IFX_Font::LoadFont(pFD->wsFontFace, dwFontStyles, wCodePage, this); - if (pFont != NULL) { - m_Fonts.Add(pFont); - m_CPFonts.SetAt((void*)(uintptr_t)dwHash, (void*)pFont); - dwHash = FGAS_GetFontFamilyHash(pFD->wsFontFace, dwFontStyles, wCodePage); - m_FamilyFonts.SetAt((void*)(uintptr_t)dwHash, (void*)pFont); - return LoadFont(pFont, dwFontStyles, wCodePage); - } - return NULL; -} -IFX_Font* CFX_StdFontMgrImp::GetDefFontByCharset( - uint8_t nCharset, - FX_DWORD dwFontStyles, - const FX_WCHAR* pszFontFamily) { - return GetDefFontByCodePage(FX_GetCodePageFromCharset(nCharset), dwFontStyles, - pszFontFamily); -} - -IFX_Font* CFX_StdFontMgrImp::GetDefFontByUnicode( - FX_WCHAR wUnicode, - FX_DWORD dwFontStyles, - const FX_WCHAR* pszFontFamily) { - const FGAS_FONTUSB* pRet = FGAS_GetUnicodeBitField(wUnicode); - if (pRet->wBitField == 999) - return nullptr; - - FX_DWORD dwHash = - FGAS_GetFontFamilyHash(pszFontFamily, dwFontStyles, pRet->wBitField); - IFX_Font* pFont = nullptr; - if (m_UnicodeFonts.Lookup((void*)(uintptr_t)dwHash, (void*&)pFont)) - return pFont ? LoadFont(pFont, dwFontStyles, pRet->wCodePage) : nullptr; - - FX_LPCFONTDESCRIPTOR pFD = - FindFont(pszFontFamily, dwFontStyles, FALSE, pRet->wCodePage, - pRet->wBitField, wUnicode); - if (!pFD && pszFontFamily) { - pFD = FindFont(nullptr, dwFontStyles, FALSE, pRet->wCodePage, - pRet->wBitField, wUnicode); - } - if (!pFD) - return nullptr; - - FX_WORD wCodePage = FX_GetCodePageFromCharset(pFD->uCharSet); - const FX_WCHAR* pFontFace = pFD->wsFontFace; - pFont = IFX_Font::LoadFont(pFontFace, dwFontStyles, wCodePage, this); - if (pFont) { - m_Fonts.Add(pFont); - m_UnicodeFonts.SetAt((void*)(uintptr_t)dwHash, (void*)pFont); - dwHash = FGAS_GetFontHashCode(wCodePage, dwFontStyles); - m_CPFonts.SetAt((void*)(uintptr_t)dwHash, (void*)pFont); - dwHash = FGAS_GetFontFamilyHash(pFontFace, dwFontStyles, wCodePage); - m_FamilyFonts.SetAt((void*)(uintptr_t)dwHash, (void*)pFont); - return LoadFont(pFont, dwFontStyles, wCodePage); - } - return nullptr; -} - -IFX_Font* CFX_StdFontMgrImp::GetDefFontByLanguage( - FX_WORD wLanguage, - FX_DWORD dwFontStyles, - const FX_WCHAR* pszFontFamily) { - return GetDefFontByCodePage(FX_GetDefCodePageByLanguage(wLanguage), - dwFontStyles, pszFontFamily); -} -IFX_Font* CFX_StdFontMgrImp::LoadFont(const FX_WCHAR* pszFontFamily, - FX_DWORD dwFontStyles, - FX_WORD wCodePage) { - FX_DWORD dwHash = - FGAS_GetFontFamilyHash(pszFontFamily, dwFontStyles, wCodePage); - IFX_Font* pFont = NULL; - if (m_FamilyFonts.Lookup((void*)(uintptr_t)dwHash, (void*&)pFont)) { - return pFont ? LoadFont(pFont, dwFontStyles, wCodePage) : NULL; - } - FX_LPCFONTDESCRIPTOR pFD = NULL; - if ((pFD = FindFont(pszFontFamily, dwFontStyles, TRUE, wCodePage)) == NULL) { - if ((pFD = FindFont(pszFontFamily, dwFontStyles, FALSE, wCodePage)) == - NULL) { - return NULL; - } - } - FXSYS_assert(pFD != NULL); - if (wCodePage == 0xFFFF) { - wCodePage = FX_GetCodePageFromCharset(pFD->uCharSet); - } - pFont = IFX_Font::LoadFont(pFD->wsFontFace, dwFontStyles, wCodePage, this); - if (pFont != NULL) { - m_Fonts.Add(pFont); - m_FamilyFonts.SetAt((void*)(uintptr_t)dwHash, (void*)pFont); - dwHash = FGAS_GetFontHashCode(wCodePage, dwFontStyles); - m_CPFonts.SetAt((void*)(uintptr_t)dwHash, (void*)pFont); - return LoadFont(pFont, dwFontStyles, wCodePage); - } - return NULL; -} -IFX_Font* CFX_StdFontMgrImp::LoadFont(const uint8_t* pBuffer, int32_t iLength) { - FXSYS_assert(pBuffer != NULL && iLength > 0); - IFX_Font* pFont = NULL; - if (m_BufferFonts.Lookup((void*)pBuffer, (void*&)pFont)) { - if (pFont != NULL) { - return pFont->Retain(); - } - } - pFont = IFX_Font::LoadFont(pBuffer, iLength, this); - if (pFont != NULL) { - m_Fonts.Add(pFont); - m_BufferFonts.SetAt((void*)pBuffer, pFont); - return pFont->Retain(); - } - return NULL; -} -IFX_Font* CFX_StdFontMgrImp::LoadFont(const FX_WCHAR* pszFileName) { - FXSYS_assert(pszFileName != NULL); - FX_DWORD dwHash = FX_HashCode_String_GetW(pszFileName, -1); - IFX_Font* pFont = NULL; - if (m_FileFonts.Lookup((void*)(uintptr_t)dwHash, (void*&)pFont)) { - if (pFont != NULL) { - return pFont->Retain(); - } - } - pFont = IFX_Font::LoadFont(pszFileName, NULL); - if (pFont != NULL) { - m_Fonts.Add(pFont); - m_FileFonts.SetAt((void*)(uintptr_t)dwHash, (void*)pFont); - return pFont->Retain(); - } - return NULL; -} -IFX_Font* CFX_StdFontMgrImp::LoadFont(IFX_Stream* pFontStream, - const FX_WCHAR* pszFontAlias, - FX_DWORD dwFontStyles, - FX_WORD wCodePage, - FX_BOOL bSaveStream) { - FXSYS_assert(pFontStream != NULL && pFontStream->GetLength() > 0); - IFX_Font* pFont = NULL; - if (m_StreamFonts.Lookup((void*)pFontStream, (void*&)pFont)) { - if (pFont != NULL) { - if (pszFontAlias != NULL) { - FX_DWORD dwHash = - FGAS_GetFontFamilyHash(pszFontAlias, dwFontStyles, wCodePage); - m_FamilyFonts.SetAt((void*)(uintptr_t)dwHash, (void*)pFont); - } - return LoadFont(pFont, dwFontStyles, wCodePage); - } - } - pFont = IFX_Font::LoadFont(pFontStream, this, bSaveStream); - if (pFont != NULL) { - m_Fonts.Add(pFont); - m_StreamFonts.SetAt((void*)pFontStream, (void*)pFont); - if (pszFontAlias != NULL) { - FX_DWORD dwHash = - FGAS_GetFontFamilyHash(pszFontAlias, dwFontStyles, wCodePage); - m_FamilyFonts.SetAt((void*)(uintptr_t)dwHash, (void*)pFont); - } - return LoadFont(pFont, dwFontStyles, wCodePage); - } - return NULL; -} -IFX_Font* CFX_StdFontMgrImp::LoadFont(IFX_Font* pSrcFont, - FX_DWORD dwFontStyles, - FX_WORD wCodePage) { - FXSYS_assert(pSrcFont != NULL); - if (pSrcFont->GetFontStyles() == dwFontStyles) { - return pSrcFont->Retain(); - } - void* buffer[3] = {pSrcFont, (void*)(uintptr_t)dwFontStyles, - (void*)(uintptr_t)wCodePage}; - FX_DWORD dwHash = - FX_HashCode_String_GetA((const FX_CHAR*)buffer, 3 * sizeof(void*)); - IFX_Font* pFont = NULL; - if (m_DeriveFonts.GetCount() > 0) { - m_DeriveFonts.Lookup((void*)(uintptr_t)dwHash, (void*&)pFont); - if (pFont != NULL) { - return pFont->Retain(); - } - } - pFont = pSrcFont->Derive(dwFontStyles, wCodePage); - if (pFont != NULL) { - m_DeriveFonts.SetAt((void*)(uintptr_t)dwHash, (void*)pFont); - int32_t index = m_Fonts.Find(pFont); - if (index < 0) { - m_Fonts.Add(pFont); - pFont->Retain(); - } - return pFont; - } - return NULL; -} -void CFX_StdFontMgrImp::ClearFontCache() { - int32_t iCount = m_Fonts.GetSize(); - for (int32_t i = 0; i < iCount; i++) { - IFX_Font* pFont = (IFX_Font*)m_Fonts[i]; - if (pFont != NULL) { - pFont->Reset(); - } - } -} -void CFX_StdFontMgrImp::RemoveFont(CFX_MapPtrToPtr& fontMap, IFX_Font* pFont) { - FX_POSITION pos = fontMap.GetStartPosition(); - void* pKey; - void* pFind; - while (pos != NULL) { - pFind = NULL; - fontMap.GetNextAssoc(pos, pKey, pFind); - if (pFind != (void*)pFont) { - continue; - } - fontMap.RemoveKey(pKey); - break; - } -} -void CFX_StdFontMgrImp::RemoveFont(IFX_Font* pFont) { - RemoveFont(m_CPFonts, pFont); - RemoveFont(m_FamilyFonts, pFont); - RemoveFont(m_UnicodeFonts, pFont); - RemoveFont(m_BufferFonts, pFont); - RemoveFont(m_FileFonts, pFont); - RemoveFont(m_StreamFonts, pFont); - RemoveFont(m_DeriveFonts, pFont); - int32_t iFind = m_Fonts.Find(pFont); - if (iFind > -1) { - m_Fonts.RemoveAt(iFind, 1); - } -} -FX_LPCFONTDESCRIPTOR CFX_StdFontMgrImp::FindFont(const FX_WCHAR* pszFontFamily, - FX_DWORD dwFontStyles, - FX_DWORD dwMatchFlags, - FX_WORD wCodePage, - FX_DWORD dwUSB, - FX_WCHAR wUnicode) { - if (m_pMatcher == NULL) { - return NULL; - } - FX_FONTMATCHPARAMS params; - FXSYS_memset(¶ms, 0, sizeof(params)); - params.dwUSB = dwUSB; - params.wUnicode = wUnicode; - params.wCodePage = wCodePage; - params.pwsFamily = pszFontFamily; - params.dwFontStyles = dwFontStyles; - params.dwMatchFlags = dwMatchFlags; - FX_LPCFONTDESCRIPTOR pDesc = m_pMatcher(¶ms, m_FontFaces, m_pUserData); - if (pDesc) { - return pDesc; - } - if (pszFontFamily && m_pEnumerator) { - CFX_FontDescriptors namedFonts; - m_pEnumerator(namedFonts, m_pUserData, pszFontFamily, wUnicode); - params.pwsFamily = NULL; - pDesc = m_pMatcher(¶ms, namedFonts, m_pUserData); - if (pDesc == NULL) { - return NULL; - } - for (int32_t i = m_FontFaces.GetSize() - 1; i >= 0; i--) { - FX_LPCFONTDESCRIPTOR pMatch = m_FontFaces.GetPtrAt(i); - if (*pMatch == *pDesc) { - return pMatch; - } - } - int index = m_FontFaces.Add(*pDesc); - return m_FontFaces.GetPtrAt(index); - } - return NULL; -} -FX_LPCFONTDESCRIPTOR FX_DefFontMatcher(FX_LPFONTMATCHPARAMS pParams, - const CFX_FontDescriptors& fonts, - void* pUserData) { - FX_LPCFONTDESCRIPTOR pBestFont = NULL; - int32_t iBestSimilar = 0; - FX_BOOL bMatchStyle = - (pParams->dwMatchFlags & FX_FONTMATCHPARA_MacthStyle) > 0; - int32_t iCount = fonts.GetSize(); - for (int32_t i = 0; i < iCount; ++i) { - FX_LPCFONTDESCRIPTOR pFont = fonts.GetPtrAt(i); - if ((pFont->dwFontStyles & FX_FONTSTYLE_BoldItalic) == - FX_FONTSTYLE_BoldItalic) { - continue; - } - if (pParams->pwsFamily) { - if (FXSYS_wcsicmp(pParams->pwsFamily, pFont->wsFontFace)) { - continue; - } - if (pFont->uCharSet == FX_CHARSET_Symbol) { - return pFont; - } - } - if (pFont->uCharSet == FX_CHARSET_Symbol) { - continue; - } - if (pParams->wCodePage != 0xFFFF) { - if (FX_GetCodePageFromCharset(pFont->uCharSet) != pParams->wCodePage) { - continue; - } - } else { - if (pParams->dwUSB < 128) { - FX_DWORD dwByte = pParams->dwUSB / 32; - FX_DWORD dwUSB = 1 << (pParams->dwUSB % 32); - if ((pFont->FontSignature.fsUsb[dwByte] & dwUSB) == 0) { - continue; - } - } - } - if (bMatchStyle) { - if ((pFont->dwFontStyles & 0x0F) == (pParams->dwFontStyles & 0x0F)) { - return pFont; - } else { - continue; - } - } - if (pParams->pwsFamily != NULL) { - if (FXSYS_wcsicmp(pParams->pwsFamily, pFont->wsFontFace) == 0) { - return pFont; - } - } - int32_t iSimilarValue = FX_GetSimilarValue(pFont, pParams->dwFontStyles); - if (iBestSimilar < iSimilarValue) { - iBestSimilar = iSimilarValue; - pBestFont = pFont; - } - } - return iBestSimilar < 1 ? NULL : pBestFont; -} -int32_t FX_GetSimilarValue(FX_LPCFONTDESCRIPTOR pFont, FX_DWORD dwFontStyles) { - int32_t iValue = 0; - if ((dwFontStyles & FX_FONTSTYLE_Symbolic) == - (pFont->dwFontStyles & FX_FONTSTYLE_Symbolic)) { - iValue += 64; - } - if ((dwFontStyles & FX_FONTSTYLE_FixedPitch) == - (pFont->dwFontStyles & FX_FONTSTYLE_FixedPitch)) { - iValue += 32; - } - if ((dwFontStyles & FX_FONTSTYLE_Serif) == - (pFont->dwFontStyles & FX_FONTSTYLE_Serif)) { - iValue += 16; - } - if ((dwFontStyles & FX_FONTSTYLE_Script) == - (pFont->dwFontStyles & FX_FONTSTYLE_Script)) { - iValue += 8; - } - return iValue; -} -FX_LPMatchFont FX_GetDefFontMatchor() { - return FX_DefFontMatcher; -} -FX_DWORD FX_GetGdiFontStyles(const LOGFONTW& lf) { - FX_DWORD dwStyles = 0; - if ((lf.lfPitchAndFamily & 0x03) == FIXED_PITCH) { - dwStyles |= FX_FONTSTYLE_FixedPitch; - } - uint8_t nFamilies = lf.lfPitchAndFamily & 0xF0; - if (nFamilies == FF_ROMAN) { - dwStyles |= FX_FONTSTYLE_Serif; - } - if (nFamilies == FF_SCRIPT) { - dwStyles |= FX_FONTSTYLE_Script; - } - if (lf.lfCharSet == SYMBOL_CHARSET) { - dwStyles |= FX_FONTSTYLE_Symbolic; - } - return dwStyles; -} -static int32_t CALLBACK FX_GdiFontEnumProc(ENUMLOGFONTEX* lpelfe, - NEWTEXTMETRICEX* lpntme, - DWORD dwFontType, - LPARAM lParam) { - if (dwFontType != TRUETYPE_FONTTYPE) { - return 1; - } - const LOGFONTW& lf = ((LPENUMLOGFONTEXW)lpelfe)->elfLogFont; - if (lf.lfFaceName[0] == L'@') { - return 1; - } - FX_LPFONTDESCRIPTOR pFont = FX_Alloc(FX_FONTDESCRIPTOR, 1); - FXSYS_memset(pFont, 0, sizeof(FX_FONTDESCRIPTOR)); - pFont->uCharSet = lf.lfCharSet; - pFont->dwFontStyles = FX_GetGdiFontStyles(lf); - FXSYS_wcsncpy(pFont->wsFontFace, (const FX_WCHAR*)lf.lfFaceName, 31); - pFont->wsFontFace[31] = 0; - FXSYS_memcpy(&pFont->FontSignature, &lpntme->ntmFontSig, - sizeof(lpntme->ntmFontSig)); - ((CFX_FontDescriptors*)lParam)->Add(*pFont); - FX_Free(pFont); - return 1; -} -static void FX_EnumGdiFonts(CFX_FontDescriptors& fonts, - void* pUserData, - const FX_WCHAR* pwsFaceName, - FX_WCHAR wUnicode) { - HDC hDC = ::GetDC(NULL); - LOGFONTW lfFind; - FXSYS_memset(&lfFind, 0, sizeof(lfFind)); - lfFind.lfCharSet = DEFAULT_CHARSET; - if (pwsFaceName) { - FXSYS_wcsncpy((FX_WCHAR*)lfFind.lfFaceName, pwsFaceName, 31); - lfFind.lfFaceName[31] = 0; - } - EnumFontFamiliesExW(hDC, (LPLOGFONTW)&lfFind, - (FONTENUMPROCW)FX_GdiFontEnumProc, (LPARAM)&fonts, 0); - ::ReleaseDC(NULL, hDC); -} -FX_LPEnumAllFonts FX_GetDefFontEnumerator() { - return FX_EnumGdiFonts; -} -#else -const FX_CHAR* g_FontFolders[] = { -#if _FXM_PLATFORM_ == _FXM_PLATFORM_LINUX_ - "/usr/share/fonts", "/usr/share/X11/fonts/Type1", - "/usr/share/X11/fonts/TTF", "/usr/local/share/fonts", -#elif _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ - "~/Library/Fonts", "/Library/Fonts", "/System/Library/Fonts", -#elif _FXM_PLATFORM_ == _FXM_PLATFORM_ANDROID_ - "/system/fonts", -#endif -}; - -CFX_FontSourceEnum_File::CFX_FontSourceEnum_File() { - for (size_t i = 0; i < FX_ArraySize(g_FontFolders); ++i) - m_FolderPaths.Add(g_FontFolders[i]); -} - -CFX_ByteString CFX_FontSourceEnum_File::GetNextFile() { -Restart: - void* pCurHandle = - m_FolderQueue.GetSize() == 0 - ? NULL - : m_FolderQueue.GetDataPtr(m_FolderQueue.GetSize() - 1)->pFileHandle; - if (NULL == pCurHandle) { - if (m_FolderPaths.GetSize() < 1) { - return ""; - } - pCurHandle = FX_OpenFolder(m_FolderPaths[m_FolderPaths.GetSize() - 1]); - FX_HandleParentPath hpp; - hpp.pFileHandle = pCurHandle; - hpp.bsParentPath = m_FolderPaths[m_FolderPaths.GetSize() - 1]; - m_FolderQueue.Add(hpp); - } - CFX_ByteString bsName; - FX_BOOL bFolder; - CFX_ByteString bsFolderSpearator = - CFX_ByteString::FromUnicode(CFX_WideString(FX_GetFolderSeparator())); - while (TRUE) { - if (!FX_GetNextFile(pCurHandle, bsName, bFolder)) { - FX_CloseFolder(pCurHandle); - m_FolderQueue.RemoveAt(m_FolderQueue.GetSize() - 1); - if (m_FolderQueue.GetSize() == 0) { - m_FolderPaths.RemoveAt(m_FolderPaths.GetSize() - 1); - if (m_FolderPaths.GetSize() == 0) { - return ""; - } else { - goto Restart; - } - } - pCurHandle = - m_FolderQueue.GetDataPtr(m_FolderQueue.GetSize() - 1)->pFileHandle; - continue; - } - if (bsName == "." || bsName == "..") { - continue; - } - if (bFolder) { - FX_HandleParentPath hpp; - hpp.bsParentPath = - m_FolderQueue.GetDataPtr(m_FolderQueue.GetSize() - 1)->bsParentPath + - bsFolderSpearator + bsName; - hpp.pFileHandle = FX_OpenFolder(hpp.bsParentPath); - if (hpp.pFileHandle == NULL) { - continue; - } - m_FolderQueue.Add(hpp); - pCurHandle = hpp.pFileHandle; - continue; - } - bsName = - m_FolderQueue.GetDataPtr(m_FolderQueue.GetSize() - 1)->bsParentPath + - bsFolderSpearator + bsName; - break; - } - return bsName; -} -FX_POSITION CFX_FontSourceEnum_File::GetStartPosition(void* pUserData) { - m_wsNext = GetNextFile().UTF8Decode(); - if (0 == m_wsNext.GetLength()) { - return (FX_POSITION)0; - } - return (FX_POSITION)-1; -} -IFX_FileAccess* CFX_FontSourceEnum_File::GetNext(FX_POSITION& pos, - void* pUserData) { - IFX_FileAccess* pAccess = FX_CreateDefaultFileAccess(m_wsNext); - m_wsNext = GetNextFile().UTF8Decode(); - pos = 0 != m_wsNext.GetLength() ? pAccess : NULL; - return (IFX_FileAccess*)pAccess; -} -IFX_FontSourceEnum* FX_CreateDefaultFontSourceEnum() { - return (IFX_FontSourceEnum*)new CFX_FontSourceEnum_File; -} -IFX_FontMgr* IFX_FontMgr::Create(IFX_FontSourceEnum* pFontEnum, - IFX_FontMgrDelegate* pDelegate, - void* pUserData) { - if (NULL == pFontEnum) { - return NULL; - } - CFX_FontMgrImp* pFontMgr = - new CFX_FontMgrImp(pFontEnum, pDelegate, pUserData); - if (pFontMgr->EnumFonts()) { - return pFontMgr; - } - delete pFontMgr; - return NULL; -} -CFX_FontMgrImp::CFX_FontMgrImp(IFX_FontSourceEnum* pFontEnum, - IFX_FontMgrDelegate* pDelegate, - void* pUserData) - : m_pFontSource(pFontEnum), - m_pDelegate(pDelegate), - m_pUserData(pUserData) {} - -FX_BOOL CFX_FontMgrImp::EnumFontsFromFontMapper() { - CFX_FontMapper* pFontMapper = - CFX_GEModule::Get()->GetFontMgr()->GetBuiltinMapper(); - if (!pFontMapper) - return FALSE; - IFX_SystemFontInfo* pSystemFontInfo = pFontMapper->GetSystemFontInfo(); - if (!pSystemFontInfo) - return FALSE; - pSystemFontInfo->EnumFontList(pFontMapper); - for (int32_t i = 0; i < pFontMapper->GetFaceSize(); ++i) { - IFX_FileRead* pFontStream = - CreateFontStream(pFontMapper, pSystemFontInfo, i); - if (!pFontStream) - continue; - CFX_WideString wsFaceName = - CFX_WideString::FromLocal(pFontMapper->GetFaceName(i).c_str()); - RegisterFaces(pFontStream, &wsFaceName); - pFontStream->Release(); - } - if (m_InstalledFonts.GetSize() == 0) - return FALSE; - return TRUE; -} -FX_BOOL CFX_FontMgrImp::EnumFontsFromFiles() { - CFX_GEModule::Get()->GetFontMgr()->InitFTLibrary(); - FX_POSITION pos = m_pFontSource->GetStartPosition(); - IFX_FileAccess* pFontSource = nullptr; - IFX_FileRead* pFontStream = nullptr; - while (pos) { - pFontSource = m_pFontSource->GetNext(pos); - pFontStream = pFontSource->CreateFileStream(FX_FILEMODE_ReadOnly); - if (!pFontStream) { - pFontSource->Release(); - continue; - } - RegisterFaces(pFontStream, nullptr); - pFontStream->Release(); - pFontSource->Release(); - } - if (m_InstalledFonts.GetSize() == 0) - return FALSE; - return TRUE; -} -FX_BOOL CFX_FontMgrImp::EnumFonts() { - if (EnumFontsFromFontMapper()) - return TRUE; - return EnumFontsFromFiles(); -} -void CFX_FontMgrImp::Release() { - for (int32_t i = 0; i < m_InstalledFonts.GetSize(); i++) { - delete m_InstalledFonts[i]; - } - FX_POSITION pos = m_Hash2CandidateList.GetStartPosition(); - while (pos) { - FX_DWORD dwHash; - CFX_FontDescriptorInfos* pDescs; - m_Hash2CandidateList.GetNextAssoc(pos, dwHash, pDescs); - if (NULL != pDescs) { - delete pDescs; - } - } - pos = m_Hash2Fonts.GetStartPosition(); - while (pos) { - FX_DWORD dwHash; - CFX_ArrayTemplate* pFonts; - m_Hash2Fonts.GetNextAssoc(pos, dwHash, pFonts); - if (NULL != pFonts) { - delete pFonts; - } - } - m_Hash2Fonts.RemoveAll(); - pos = m_Hash2FileAccess.GetStartPosition(); - while (pos) { - FX_DWORD dwHash; - IFX_FileAccess* pFileAccess; - m_Hash2FileAccess.GetNextAssoc(pos, dwHash, pFileAccess); - if (NULL != pFileAccess) { - pFileAccess->Release(); - } - } - pos = m_FileAccess2IFXFont.GetStartPosition(); - while (pos) { - FX_DWORD dwHash; - IFX_Font* pFont; - m_FileAccess2IFXFont.GetNextAssoc(pos, dwHash, pFont); - if (NULL != pFont) { - pFont->Release(); - } - } - pos = m_IFXFont2FileRead.GetStartPosition(); - while (pos) { - IFX_Font* pFont; - IFX_FileRead* pFileRead; - m_IFXFont2FileRead.GetNextAssoc(pos, pFont, pFileRead); - pFileRead->Release(); - } - delete this; -} -IFX_Font* CFX_FontMgrImp::GetDefFontByCodePage(FX_WORD wCodePage, - FX_DWORD dwFontStyles, - const FX_WCHAR* pszFontFamily) { - return NULL == m_pDelegate ? NULL : m_pDelegate->GetDefFontByCodePage( - this, wCodePage, dwFontStyles, - pszFontFamily); -} -IFX_Font* CFX_FontMgrImp::GetDefFontByCharset(uint8_t nCharset, - FX_DWORD dwFontStyles, - const FX_WCHAR* pszFontFamily) { - return NULL == m_pDelegate ? NULL - : m_pDelegate->GetDefFontByCharset( - this, nCharset, dwFontStyles, pszFontFamily); -} -IFX_Font* CFX_FontMgrImp::GetDefFontByUnicode(FX_WCHAR wUnicode, - FX_DWORD dwFontStyles, - const FX_WCHAR* pszFontFamily) { - return NULL == m_pDelegate ? NULL - : m_pDelegate->GetDefFontByUnicode( - this, wUnicode, dwFontStyles, pszFontFamily); -} -IFX_Font* CFX_FontMgrImp::GetDefFontByLanguage(FX_WORD wLanguage, - FX_DWORD dwFontStyles, - const FX_WCHAR* pszFontFamily) { - return NULL == m_pDelegate ? NULL : m_pDelegate->GetDefFontByLanguage( - this, wLanguage, dwFontStyles, - pszFontFamily); -} -IFX_Font* CFX_FontMgrImp::GetFontByCodePage(FX_WORD wCodePage, - FX_DWORD dwFontStyles, - const FX_WCHAR* pszFontFamily) { - CFX_ByteString bsHash; - bsHash.Format("%d, %d", wCodePage, dwFontStyles); - bsHash += CFX_WideString(pszFontFamily).UTF8Encode(); - FX_DWORD dwHash = FX_HashCode_String_GetA(bsHash, bsHash.GetLength()); - CFX_ArrayTemplate* pFonts = NULL; - IFX_Font* pFont = NULL; - if (m_Hash2Fonts.Lookup(dwHash, pFonts)) { - if (NULL == pFonts) { - return NULL; - } - if (0 != pFonts->GetSize()) { - return pFonts->GetAt(0)->Retain(); - } - } - if (!pFonts) - pFonts = new CFX_ArrayTemplate; - m_Hash2Fonts.SetAt(dwHash, pFonts); - CFX_FontDescriptorInfos* sortedFonts = NULL; - if (!m_Hash2CandidateList.Lookup(dwHash, sortedFonts)) { - sortedFonts = new CFX_FontDescriptorInfos; - MatchFonts(*sortedFonts, wCodePage, dwFontStyles, - CFX_WideString(pszFontFamily), 0); - m_Hash2CandidateList.SetAt(dwHash, sortedFonts); - } - if (sortedFonts->GetSize() == 0) { - return NULL; - } - CFX_FontDescriptor* pDesc = sortedFonts->GetAt(0).pFont; - if (pDesc->m_pFileAccess) - pFont = LoadFont(pDesc->m_pFileAccess, pDesc->m_nFaceIndex, nullptr); - else - pFont = LoadFont(pDesc->m_wsFaceName, pDesc->m_nFaceIndex, nullptr); - if (NULL != pFont) { - pFont->SetLogicalFontStyle(dwFontStyles); - } - pFonts->Add(pFont); - return pFont; -} -IFX_Font* CFX_FontMgrImp::GetFontByCharset(uint8_t nCharset, - FX_DWORD dwFontStyles, - const FX_WCHAR* pszFontFamily) { - return GetFontByCodePage(FX_GetCodePageFromCharset(nCharset), dwFontStyles, - pszFontFamily); -} -IFX_Font* CFX_FontMgrImp::GetFontByUnicode(FX_WCHAR wUnicode, - FX_DWORD dwFontStyles, - const FX_WCHAR* pszFontFamily) { - IFX_Font* pFont = nullptr; - if (m_FailedUnicodes2NULL.Lookup(wUnicode, pFont)) - return nullptr; - const FGAS_FONTUSB* x = FGAS_GetUnicodeBitField(wUnicode); - FX_WORD wCodePage = x ? x->wCodePage : 0xFFFF; - FX_WORD wBitField = x ? x->wBitField : 0x03E7; - CFX_ByteString bsHash; - if (wCodePage == 0xFFFF) - bsHash.Format("%d, %d, %d", wCodePage, wBitField, dwFontStyles); - else - bsHash.Format("%d, %d", wCodePage, dwFontStyles); - bsHash += CFX_WideString(pszFontFamily).UTF8Encode(); - FX_DWORD dwHash = FX_HashCode_String_GetA(bsHash, bsHash.GetLength()); - CFX_ArrayTemplate* pFonts = nullptr; - if (m_Hash2Fonts.Lookup(dwHash, pFonts)) { - if (!pFonts) - return nullptr; - for (int32_t i = 0; i < pFonts->GetSize(); ++i) { - if (VerifyUnicode(pFonts->GetAt(i), wUnicode)) - return pFonts->GetAt(i)->Retain(); - } - } - if (!pFonts) - pFonts = new CFX_ArrayTemplate; - m_Hash2Fonts.SetAt(dwHash, pFonts); - CFX_FontDescriptorInfos* sortedFonts = nullptr; - if (!m_Hash2CandidateList.Lookup(dwHash, sortedFonts)) { - sortedFonts = new CFX_FontDescriptorInfos; - MatchFonts(*sortedFonts, wCodePage, dwFontStyles, - CFX_WideString(pszFontFamily), wUnicode); - m_Hash2CandidateList.SetAt(dwHash, sortedFonts); - } - for (int32_t i = 0; i < sortedFonts->GetSize(); ++i) { - CFX_FontDescriptor* pDesc = sortedFonts->GetAt(i).pFont; - if (!VerifyUnicode(pDesc, wUnicode)) - continue; - if (pDesc->m_pFileAccess) - pFont = LoadFont(pDesc->m_pFileAccess, pDesc->m_nFaceIndex, nullptr); - else - pFont = LoadFont(pDesc->m_wsFaceName, pDesc->m_nFaceIndex, nullptr); - if (!pFont) - continue; - pFont->SetLogicalFontStyle(dwFontStyles); - pFonts->Add(pFont); - return pFont; - } - if (!pszFontFamily) - m_FailedUnicodes2NULL.SetAt(wUnicode, nullptr); - return nullptr; -} -FX_BOOL CFX_FontMgrImp::VerifyUnicode(CFX_FontDescriptor* pDesc, - FX_WCHAR wcUnicode) { - IFX_FileRead* pFileRead = nullptr; - if (pDesc->m_pFileAccess) - pFileRead = pDesc->m_pFileAccess->CreateFileStream(FX_FILEMODE_ReadOnly); - else - pFileRead = CreateFontStream(pDesc->m_wsFaceName.UTF8Encode()); - if (!pFileRead) - return FALSE; - FXFT_Face pFace = LoadFace(pFileRead, pDesc->m_nFaceIndex); - FT_Error retCharmap = FXFT_Select_Charmap(pFace, FXFT_ENCODING_UNICODE); - FT_Error retIndex = FXFT_Get_Char_Index(pFace, wcUnicode); - pFileRead->Release(); - if (!pFace) - return FALSE; - if (FXFT_Get_Face_External_Stream(pFace)) - FXFT_Clear_Face_External_Stream(pFace); - FXFT_Done_Face(pFace); - return !retCharmap && retIndex; -} -FX_BOOL CFX_FontMgrImp::VerifyUnicode(IFX_Font* pFont, FX_WCHAR wcUnicode) { - if (NULL == pFont) { - return FALSE; - } - FXFT_Face pFace = ((CFX_Font*)pFont->GetDevFont())->GetFace(); - FXFT_CharMap charmap = FXFT_Get_Face_Charmap(pFace); - if (0 != FXFT_Select_Charmap(pFace, FXFT_ENCODING_UNICODE)) { - return FALSE; - } - if (0 == FXFT_Get_Char_Index(pFace, wcUnicode)) { - FXFT_Set_Charmap(pFace, charmap); - return FALSE; - } - return TRUE; -} -IFX_Font* CFX_FontMgrImp::GetFontByLanguage(FX_WORD wLanguage, - FX_DWORD dwFontStyles, - const FX_WCHAR* pszFontFamily) { - return GetFontByCodePage(FX_GetDefCodePageByLanguage(wLanguage), dwFontStyles, - pszFontFamily); -} -IFX_Font* CFX_FontMgrImp::LoadFont(const uint8_t* pBuffer, - int32_t iLength, - int32_t iFaceIndex, - int32_t* pFaceCount) { - void* Hash[2] = {(void*)(uintptr_t)pBuffer, (void*)(uintptr_t)iLength}; - FX_DWORD dwHash = - FX_HashCode_String_GetA((const FX_CHAR*)Hash, 2 * sizeof(void*)); - IFX_FileAccess* pFontAccess = NULL; - if (!m_Hash2FileAccess.Lookup(dwHash, pFontAccess)) { - } - if (NULL != pFontAccess) { - return LoadFont(pFontAccess, iFaceIndex, pFaceCount, TRUE); - } else { - return NULL; - } -} -IFX_Font* CFX_FontMgrImp::LoadFont(const FX_WCHAR* pszFileName, - int32_t iFaceIndex, - int32_t* pFaceCount) { - CFX_ByteString bsHash; - bsHash += CFX_WideString(pszFileName).UTF8Encode(); - FX_DWORD dwHash = - FX_HashCode_String_GetA((const FX_CHAR*)bsHash, bsHash.GetLength()); - IFX_FileAccess* pFontAccess = NULL; - if (!m_Hash2FileAccess.Lookup(dwHash, pFontAccess)) { - pFontAccess = FX_CreateDefaultFileAccess(pszFileName); - m_Hash2FileAccess.SetAt(dwHash, pFontAccess); - } - if (NULL != pFontAccess) { - return LoadFont(pFontAccess, iFaceIndex, pFaceCount, TRUE); - } else { - return NULL; - } -} -IFX_Font* CFX_FontMgrImp::LoadFont(IFX_Stream* pFontStream, - int32_t iFaceIndex, - int32_t* pFaceCount, - FX_BOOL bSaveStream) { - void* Hash[1] = {(void*)(uintptr_t)pFontStream}; - FX_DWORD dwHash = - FX_HashCode_String_GetA((const FX_CHAR*)Hash, 1 * sizeof(void*)); - IFX_FileAccess* pFontAccess = NULL; - if (!m_Hash2FileAccess.Lookup(dwHash, pFontAccess)) { - } - if (NULL != pFontAccess) { - return LoadFont(pFontAccess, iFaceIndex, pFaceCount, TRUE); - } else { - return NULL; - } -} -IFX_Font* CFX_FontMgrImp::LoadFont(IFX_FileAccess* pFontAccess, - int32_t iFaceIndex, - int32_t* pFaceCount, - FX_BOOL bWantCache) { - FX_DWORD dwHash = 0; - IFX_Font* pFont = NULL; - if (bWantCache) { - CFX_ByteString bsHash; - bsHash.Format("%d, %d", (uintptr_t)pFontAccess, iFaceIndex); - dwHash = FX_HashCode_String_GetA(bsHash, bsHash.GetLength()); - if (m_FileAccess2IFXFont.Lookup(dwHash, pFont)) { - if (NULL != pFont) { - if (NULL != pFaceCount) { - *pFaceCount = ((CFX_Font*)pFont->GetDevFont())->GetFace()->num_faces; - } - return pFont->Retain(); - } - } - } - CFX_Font* pInternalFont = new CFX_Font; - IFX_FileRead* pFontStream = - pFontAccess->CreateFileStream(FX_FILEMODE_ReadOnly); - if (NULL == pFontStream) { - delete pInternalFont; - return NULL; - } - if (!pInternalFont->LoadFile(pFontStream, iFaceIndex)) { - delete pInternalFont; - pFontStream->Release(); - return NULL; - } - pFont = IFX_Font::LoadFont(pInternalFont, this, TRUE); - if (NULL == pFont) { - delete pInternalFont; - pFontStream->Release(); - return NULL; - } - if (bWantCache) { - m_FileAccess2IFXFont.SetAt(dwHash, pFont); - } - m_IFXFont2FileRead.SetAt(pFont, pFontStream); - if (NULL != pFaceCount) { - *pFaceCount = ((CFX_Font*)pFont->GetDevFont())->GetFace()->num_faces; - } - return pFont; -} -IFX_Font* CFX_FontMgrImp::LoadFont(const CFX_WideString& wsFaceName, - int32_t iFaceIndex, - int32_t* pFaceCount) { - CFX_FontMgr* pFontMgr = CFX_GEModule::Get()->GetFontMgr(); - CFX_FontMapper* pFontMapper = pFontMgr->GetBuiltinMapper(); - if (!pFontMapper) - return nullptr; - IFX_SystemFontInfo* pSystemFontInfo = pFontMapper->GetSystemFontInfo(); - if (!pSystemFontInfo) - return nullptr; - IFX_FileRead* pFontStream = CreateFontStream(wsFaceName.UTF8Encode()); - if (!pFontStream) - return nullptr; - if (!LoadFace(pFontStream, 0)) { - pFontStream->Release(); - return nullptr; - } - CFX_Font* pInternalFont = new CFX_Font(); - if (!pInternalFont->LoadFile(pFontStream, iFaceIndex)) { - pFontStream->Release(); - return nullptr; - } - IFX_Font* pFont = IFX_Font::LoadFont(pInternalFont, this, FALSE); - if (!pFont) { - pFontStream->Release(); - return nullptr; - } - m_IFXFont2FileRead.SetAt(pFont, pFontStream); - if (pFaceCount) - *pFaceCount = ((CFX_Font*)pFont->GetDevFont())->GetFace()->num_faces; - return pFont; -} -extern "C" { -unsigned long _ftStreamRead(FXFT_Stream stream, - unsigned long offset, - unsigned char* buffer, - unsigned long count) { - if (count == 0) { - return 0; - } - IFX_FileRead* pFile = (IFX_FileRead*)stream->descriptor.pointer; - int res = pFile->ReadBlock(buffer, offset, count); - if (res) { - return count; - } - return 0; -} -void _ftStreamClose(FXFT_Stream stream) {} -}; - -FXFT_Face CFX_FontMgrImp::LoadFace(IFX_FileRead* pFontStream, - int32_t iFaceIndex) { - if (!pFontStream) - return nullptr; - - CFX_FontMgr* pFontMgr = CFX_GEModule::Get()->GetFontMgr(); - pFontMgr->InitFTLibrary(); - FXFT_Library library = pFontMgr->GetFTLibrary(); - if (!library) - return nullptr; - - FXFT_Stream ftStream = FX_Alloc(FXFT_StreamRec, 1); - FXSYS_memset(ftStream, 0, sizeof(FXFT_StreamRec)); - ftStream->base = NULL; - ftStream->descriptor.pointer = pFontStream; - ftStream->pos = 0; - ftStream->size = (unsigned long)pFontStream->GetSize(); - ftStream->read = _ftStreamRead; - ftStream->close = _ftStreamClose; - - FXFT_Open_Args ftArgs; - FXSYS_memset(&ftArgs, 0, sizeof(FXFT_Open_Args)); - ftArgs.flags |= FT_OPEN_STREAM; - ftArgs.stream = ftStream; - - FXFT_Face pFace = NULL; - if (FXFT_Open_Face(library, &ftArgs, iFaceIndex, &pFace)) { - FX_Free(ftStream); - return nullptr; - } - - FXFT_Set_Pixel_Sizes(pFace, 0, 64); - return pFace; -} - -IFX_FileRead* CFX_FontMgrImp::CreateFontStream( - CFX_FontMapper* pFontMapper, - IFX_SystemFontInfo* pSystemFontInfo, - FX_DWORD index) { - int iExact = 0; - void* hFont = pSystemFontInfo->MapFont( - 0, 0, FXFONT_DEFAULT_CHARSET, 0, pFontMapper->GetFaceName(index), iExact); - if (!hFont) - return nullptr; - FX_DWORD dwFileSize = pSystemFontInfo->GetFontData(hFont, 0, nullptr, 0); - if (dwFileSize == 0) - return nullptr; - uint8_t* pBuffer = FX_Alloc(uint8_t, dwFileSize + 1); - dwFileSize = pSystemFontInfo->GetFontData(hFont, 0, pBuffer, dwFileSize); - return FX_CreateMemoryStream(pBuffer, dwFileSize, TRUE); -} - -IFX_FileRead* CFX_FontMgrImp::CreateFontStream( - const CFX_ByteString& bsFaceName) { - CFX_FontMgr* pFontMgr = CFX_GEModule::Get()->GetFontMgr(); - CFX_FontMapper* pFontMapper = pFontMgr->GetBuiltinMapper(); - if (!pFontMapper) - return nullptr; - IFX_SystemFontInfo* pSystemFontInfo = pFontMapper->GetSystemFontInfo(); - if (!pSystemFontInfo) - return nullptr; - pSystemFontInfo->EnumFontList(pFontMapper); - for (int32_t i = 0; i < pFontMapper->GetFaceSize(); ++i) { - if (pFontMapper->GetFaceName(i) == bsFaceName) - return CreateFontStream(pFontMapper, pSystemFontInfo, i); - } - return nullptr; -} -int32_t CFX_FontMgrImp::MatchFonts(CFX_FontDescriptorInfos& MatchedFonts, - FX_WORD wCodePage, - FX_DWORD dwFontStyles, - const CFX_WideString& FontName, - FX_WCHAR wcUnicode) { - MatchedFonts.RemoveAll(); - CFX_WideString wsNormalizedFontName = FontName; - static const int32_t nMax = 0xffff; - CFX_FontDescriptor* pFont = NULL; - int32_t nCount = m_InstalledFonts.GetSize(); - for (int32_t i = 0; i < nCount; i++) { - pFont = m_InstalledFonts[i]; - int32_t nPenalty = CalcPenalty(pFont, wCodePage, dwFontStyles, - wsNormalizedFontName, wcUnicode); - if (nPenalty >= 0xFFFF) { - continue; - } - FX_FontDescriptorInfo FontInfo; - FontInfo.pFont = pFont; - FontInfo.nPenalty = nPenalty; - MatchedFonts.Add(FontInfo); - if (MatchedFonts.GetSize() == nMax) { - break; - } - } - if (MatchedFonts.GetSize() == 0) { - return 0; - } - CFX_SSortTemplate ssort; - ssort.ShellSort(MatchedFonts.GetData(), MatchedFonts.GetSize()); - return MatchedFonts.GetSize(); -} -struct FX_BitCodePage { - FX_WORD wBit; - FX_WORD wCodePage; -}; -static const FX_BitCodePage g_Bit2CodePage[] = { - {0, 1252}, {1, 1250}, {2, 1251}, {3, 1253}, {4, 1254}, {5, 1255}, - {6, 1256}, {7, 1257}, {8, 1258}, {9, 0}, {10, 0}, {11, 0}, - {12, 0}, {13, 0}, {14, 0}, {15, 0}, {16, 874}, {17, 932}, - {18, 936}, {19, 949}, {20, 950}, {21, 1361}, {22, 0}, {23, 0}, - {24, 0}, {25, 0}, {26, 0}, {27, 0}, {28, 0}, {29, 0}, - {30, 0}, {31, 0}, {32, 0}, {33, 0}, {34, 0}, {35, 0}, - {36, 0}, {37, 0}, {38, 0}, {39, 0}, {40, 0}, {41, 0}, - {42, 0}, {43, 0}, {44, 0}, {45, 0}, {46, 0}, {47, 0}, - {48, 869}, {49, 866}, {50, 865}, {51, 864}, {52, 863}, {53, 862}, - {54, 861}, {55, 860}, {56, 857}, {57, 855}, {58, 852}, {59, 775}, - {60, 737}, {61, 708}, {62, 850}, {63, 437}, -}; - -FX_WORD FX_GetCodePageBit(FX_WORD wCodePage) { - for (size_t i = 0; i < FX_ArraySize(g_Bit2CodePage); ++i) { - if (g_Bit2CodePage[i].wCodePage == wCodePage) - return g_Bit2CodePage[i].wBit; - } - return (FX_WORD)-1; -} - -FX_WORD FX_GetUnicodeBit(FX_WCHAR wcUnicode) { - const FGAS_FONTUSB* x = FGAS_GetUnicodeBitField(wcUnicode); - return x ? x->wBitField : 999; -} - -int32_t CFX_FontMgrImp::CalcPenalty(CFX_FontDescriptor* pInstalled, - FX_WORD wCodePage, - FX_DWORD dwFontStyles, - const CFX_WideString& FontName, - FX_WCHAR wcUnicode) { - int32_t nPenalty = 30000; - if (0 != FontName.GetLength()) { - if (FontName != pInstalled->m_wsFaceName) { - int32_t i; - for (i = 0; i < pInstalled->m_wsFamilyNames.GetSize(); i++) { - if (pInstalled->m_wsFamilyNames[i] == FontName) { - break; - } - } - if (i == pInstalled->m_wsFamilyNames.GetSize()) { - nPenalty += 0xFFFF; - } else { - nPenalty -= 28000; - } - } else { - nPenalty -= 30000; - } - if (30000 == nPenalty && - 0 == IsPartName(pInstalled->m_wsFaceName, FontName)) { - int32_t i; - for (i = 0; i < pInstalled->m_wsFamilyNames.GetSize(); i++) { - if (0 != IsPartName(pInstalled->m_wsFamilyNames[i], FontName)) { - break; - } - } - if (i == pInstalled->m_wsFamilyNames.GetSize()) { - nPenalty += 0xFFFF; - } else { - nPenalty -= 26000; - } - } else { - nPenalty -= 27000; - } - } - FX_DWORD dwStyleMask = pInstalled->m_dwFontStyles ^ dwFontStyles; - if (dwStyleMask & FX_FONTSTYLE_Bold) { - nPenalty += 4500; - } - if (dwStyleMask & FX_FONTSTYLE_FixedPitch) { - nPenalty += 10000; - } - if (dwStyleMask & FX_FONTSTYLE_Italic) { - nPenalty += 10000; - } - if (dwStyleMask & FX_FONTSTYLE_Serif) { - nPenalty += 500; - } - if (dwStyleMask & FX_FONTSTYLE_Symbolic) { - nPenalty += 0xFFFF; - } - if (nPenalty >= 0xFFFF) { - return 0xFFFF; - } - FX_WORD wBit = - ((0 == wCodePage || 0xFFFF == wCodePage) ? (FX_WORD)-1 - : FX_GetCodePageBit(wCodePage)); - if (wBit != (FX_WORD)-1) { - FXSYS_assert(wBit < 64); - if (0 == (pInstalled->m_dwCsb[wBit / 32] & (1 << (wBit % 32)))) { - nPenalty += 0xFFFF; - } else { - nPenalty -= 60000; - } - } - wBit = - ((0 == wcUnicode || 0xFFFE == wcUnicode) ? (FX_WORD)999 - : FX_GetUnicodeBit(wcUnicode)); - if (wBit != (FX_WORD)999) { - FXSYS_assert(wBit < 128); - if (0 == (pInstalled->m_dwUsb[wBit / 32] & (1 << (wBit % 32)))) { - nPenalty += 0xFFFF; - } else { - nPenalty -= 60000; - } - } - return nPenalty; -} -void CFX_FontMgrImp::ClearFontCache() { - FX_POSITION pos = m_Hash2CandidateList.GetStartPosition(); - while (pos) { - FX_DWORD dwHash; - CFX_FontDescriptorInfos* pDescs; - m_Hash2CandidateList.GetNextAssoc(pos, dwHash, pDescs); - if (NULL != pDescs) { - delete pDescs; - } - } - pos = m_FileAccess2IFXFont.GetStartPosition(); - while (pos) { - FX_DWORD dwHash; - IFX_Font* pFont; - m_FileAccess2IFXFont.GetNextAssoc(pos, dwHash, pFont); - if (NULL != pFont) { - pFont->Release(); - } - } - pos = m_IFXFont2FileRead.GetStartPosition(); - while (pos) { - IFX_Font* pFont; - IFX_FileRead* pFileRead; - m_IFXFont2FileRead.GetNextAssoc(pos, pFont, pFileRead); - pFileRead->Release(); - } -} -void CFX_FontMgrImp::RemoveFont(IFX_Font* pEFont) { - if (NULL == pEFont) { - return; - } - IFX_FileRead* pFileRead; - if (m_IFXFont2FileRead.Lookup(pEFont, pFileRead)) { - pFileRead->Release(); - m_IFXFont2FileRead.RemoveKey(pEFont); - } - FX_POSITION pos; - pos = m_FileAccess2IFXFont.GetStartPosition(); - while (pos) { - FX_DWORD dwHash; - IFX_Font* pCFont; - m_FileAccess2IFXFont.GetNextAssoc(pos, dwHash, pCFont); - if (pCFont == pEFont) { - m_FileAccess2IFXFont.RemoveKey(dwHash); - break; - } - } - pos = m_Hash2Fonts.GetStartPosition(); - while (pos) { - FX_DWORD dwHash; - CFX_ArrayTemplate* pFonts; - m_Hash2Fonts.GetNextAssoc(pos, dwHash, pFonts); - if (NULL != pFonts) { - for (int32_t i = 0; i < pFonts->GetSize(); i++) { - if (pFonts->GetAt(i) == pEFont) { - pFonts->SetAt(i, NULL); - } - } - } else { - m_Hash2Fonts.RemoveKey(dwHash); - } - } -} -void CFX_FontMgrImp::RegisterFace(FXFT_Face pFace, - CFX_FontDescriptors& Fonts, - const CFX_WideString* pFaceName, - IFX_FileAccess* pFontAccess) { - if (0 == (pFace->face_flags & FT_FACE_FLAG_SCALABLE)) { - return; - } - CFX_FontDescriptor* pFont = new CFX_FontDescriptor; - pFont->m_dwFontStyles |= FXFT_Is_Face_Bold(pFace) ? FX_FONTSTYLE_Bold : 0; - pFont->m_dwFontStyles |= FXFT_Is_Face_Italic(pFace) ? FX_FONTSTYLE_Italic : 0; - pFont->m_dwFontStyles |= GetFlags(pFace); - CFX_WordArray Charsets; - GetCharsets(pFace, Charsets); - GetUSBCSB(pFace, pFont->m_dwUsb, pFont->m_dwCsb); - unsigned long nLength = 0; - FT_ULong dwTag; - uint8_t* pTable = NULL; - FT_ENC_TAG(dwTag, 'n', 'a', 'm', 'e'); - unsigned int error = FXFT_Load_Sfnt_Table(pFace, dwTag, 0, NULL, &nLength); - if (0 == error && 0 != nLength) { - pTable = FX_Alloc(uint8_t, nLength); - error = FXFT_Load_Sfnt_Table(pFace, dwTag, 0, pTable, NULL); - if (0 != error) { - FX_Free(pTable); - pTable = NULL; - } - } - GetNames(pTable, pFont->m_wsFamilyNames); - if (NULL != pTable) { - FX_Free(pTable); - } - pFont->m_wsFamilyNames.Add(CFX_ByteString(pFace->family_name).UTF8Decode()); - if (pFaceName) { - pFont->m_wsFaceName = *pFaceName; - } else { - pFont->m_wsFaceName = - CFX_WideString::FromLocal(FXFT_Get_Postscript_Name(pFace)); - } - pFont->m_nFaceIndex = pFace->face_index; - if (pFontAccess) - pFont->m_pFileAccess = pFontAccess->Retain(); - else - pFont->m_pFileAccess = nullptr; - Fonts.Add(pFont); -} -void CFX_FontMgrImp::RegisterFaces(IFX_FileRead* pFontStream, - const CFX_WideString* pFaceName) { - int32_t index = 0; - int32_t num_faces = 0; - do { - FXFT_Face pFace = LoadFace(pFontStream, index++); - if (!pFace) - continue; - // All faces keep number of faces. It can be retrieved from any one face. - if (!num_faces) - num_faces = pFace->num_faces; - RegisterFace(pFace, m_InstalledFonts, pFaceName, nullptr); - if (FXFT_Get_Face_External_Stream(pFace)) - FXFT_Clear_Face_External_Stream(pFace); - FXFT_Done_Face(pFace); - } while (index < num_faces); -} -FX_DWORD CFX_FontMgrImp::GetFlags(FXFT_Face pFace) { - FX_DWORD flag = 0; - if (FT_IS_FIXED_WIDTH(pFace)) { - flag |= FX_FONTSTYLE_FixedPitch; - } - TT_OS2* pOS2 = (TT_OS2*)FT_Get_Sfnt_Table(pFace, ft_sfnt_os2); - if (!pOS2) { - return flag; - } - if (pOS2->ulCodePageRange1 & (1 << 31)) { - flag |= FX_FONTSTYLE_Symbolic; - } - if (pOS2->panose[0] == 2) { - uint8_t uSerif = pOS2->panose[1]; - if ((uSerif > 1 && uSerif < 10) || uSerif > 13) { - flag |= FX_FONTSTYLE_Serif; - } - } - return flag; -} -#define GetUInt8(p) ((uint8_t)((p)[0])) -#define GetUInt16(p) ((uint16_t)((p)[0] << 8 | (p)[1])) -#define GetUInt32(p) \ - ((uint32_t)((p)[0] << 24 | (p)[1] << 16 | (p)[2] << 8 | (p)[3])) -void CFX_FontMgrImp::GetNames(const uint8_t* name_table, - CFX_WideStringArray& Names) { - if (NULL == name_table) { - return; - } - uint8_t* lpTable = (uint8_t*)name_table; - CFX_WideString wsFamily; - uint8_t* sp = lpTable + 2; - uint8_t* lpNameRecord = lpTable + 6; - uint16_t nNameCount = GetUInt16(sp); - uint8_t* lpStr = lpTable + GetUInt16(sp + 2); - for (uint16_t j = 0; j < nNameCount; j++) { - uint16_t nNameID = GetUInt16(lpNameRecord + j * 12 + 6); - if (nNameID != 1) { - continue; - } - uint16_t nPlatformID = GetUInt16(lpNameRecord + j * 12 + 0); - uint16_t nNameLength = GetUInt16(lpNameRecord + j * 12 + 8); - uint16_t nNameOffset = GetUInt16(lpNameRecord + j * 12 + 10); - wsFamily.Empty(); - if (nPlatformID != 1) { - for (uint16_t k = 0; k < nNameLength / 2; k++) { - FX_WCHAR wcTemp = GetUInt16(lpStr + nNameOffset + k * 2); - wsFamily += wcTemp; - } - Names.Add(wsFamily); - } else { - for (uint16_t k = 0; k < nNameLength; k++) { - FX_WCHAR wcTemp = GetUInt8(lpStr + nNameOffset + k); - wsFamily += wcTemp; - } - Names.Add(wsFamily); - } - } -} -#undef GetUInt8 -#undef GetUInt16 -#undef GetUInt32 -struct FX_BIT2CHARSET { - FX_WORD wBit; - FX_WORD wCharset; -}; -FX_BIT2CHARSET g_FX_Bit2Charset1[16] = { - {1 << 0, FX_CHARSET_ANSI}, - {1 << 1, FX_CHARSET_MSWin_EasterEuropean}, - {1 << 2, FX_CHARSET_MSWin_Cyrillic}, - {1 << 3, FX_CHARSET_MSWin_Greek}, - {1 << 4, FX_CHARSET_MSWin_Turkish}, - {1 << 5, FX_CHARSET_MSWin_Hebrew}, - {1 << 6, FX_CHARSET_MSWin_Arabic}, - {1 << 7, FX_CHARSET_MSWin_Baltic}, - {1 << 8, FX_CHARSET_MSWin_Vietnamese}, - {1 << 9, FX_CHARSET_Default}, - {1 << 10, FX_CHARSET_Default}, - {1 << 11, FX_CHARSET_Default}, - {1 << 12, FX_CHARSET_Default}, - {1 << 13, FX_CHARSET_Default}, - {1 << 14, FX_CHARSET_Default}, - {1 << 15, FX_CHARSET_Default}, -}; -FX_BIT2CHARSET g_FX_Bit2Charset2[16] = { - {1 << 0, FX_CHARSET_Thai}, - {1 << 1, FX_CHARSET_ShiftJIS}, - {1 << 2, FX_CHARSET_ChineseSimplified}, - {1 << 3, FX_CHARSET_Korean}, - {1 << 4, FX_CHARSET_ChineseTriditional}, - {1 << 5, FX_CHARSET_Johab}, - {1 << 6, FX_CHARSET_Default}, - {1 << 7, FX_CHARSET_Default}, - {1 << 8, FX_CHARSET_Default}, - {1 << 9, FX_CHARSET_Default}, - {1 << 10, FX_CHARSET_Default}, - {1 << 11, FX_CHARSET_Default}, - {1 << 12, FX_CHARSET_Default}, - {1 << 13, FX_CHARSET_Default}, - {1 << 14, FX_CHARSET_OEM}, - {1 << 15, FX_CHARSET_Symbol}, -}; -FX_BIT2CHARSET g_FX_Bit2Charset3[16] = { - {1 << 0, FX_CHARSET_Default}, {1 << 1, FX_CHARSET_Default}, - {1 << 2, FX_CHARSET_Default}, {1 << 3, FX_CHARSET_Default}, - {1 << 4, FX_CHARSET_Default}, {1 << 5, FX_CHARSET_Default}, - {1 << 6, FX_CHARSET_Default}, {1 << 7, FX_CHARSET_Default}, - {1 << 8, FX_CHARSET_Default}, {1 << 9, FX_CHARSET_Default}, - {1 << 10, FX_CHARSET_Default}, {1 << 11, FX_CHARSET_Default}, - {1 << 12, FX_CHARSET_Default}, {1 << 13, FX_CHARSET_Default}, - {1 << 14, FX_CHARSET_Default}, {1 << 15, FX_CHARSET_Default}, -}; -FX_BIT2CHARSET g_FX_Bit2Charset4[16] = { - {1 << 0, FX_CHARSET_Default}, {1 << 1, FX_CHARSET_Default}, - {1 << 2, FX_CHARSET_Default}, {1 << 3, FX_CHARSET_Default}, - {1 << 4, FX_CHARSET_Default}, {1 << 5, FX_CHARSET_Default}, - {1 << 6, FX_CHARSET_Default}, {1 << 7, FX_CHARSET_Default}, - {1 << 8, FX_CHARSET_Default}, {1 << 9, FX_CHARSET_Default}, - {1 << 10, FX_CHARSET_Default}, {1 << 11, FX_CHARSET_Default}, - {1 << 12, FX_CHARSET_Default}, {1 << 13, FX_CHARSET_Default}, - {1 << 14, FX_CHARSET_Default}, {1 << 15, FX_CHARSET_US}, -}; -#define CODEPAGERANGE_IMPLEMENT(n) \ - for (int32_t i = 0; i < 16; i++) { \ - if ((a##n & g_FX_Bit2Charset##n[i].wBit) != 0) { \ - Charsets.Add(g_FX_Bit2Charset##n[i].wCharset); \ - } \ - } -void CFX_FontMgrImp::GetCharsets(FXFT_Face pFace, CFX_WordArray& Charsets) { - Charsets.RemoveAll(); - TT_OS2* pOS2 = (TT_OS2*)FT_Get_Sfnt_Table(pFace, ft_sfnt_os2); - if (NULL != pOS2) { - FX_WORD a1, a2, a3, a4; - a1 = pOS2->ulCodePageRange1 & 0x0000ffff; - CODEPAGERANGE_IMPLEMENT(1); - a2 = (pOS2->ulCodePageRange1 >> 16) & 0x0000ffff; - CODEPAGERANGE_IMPLEMENT(2); - a3 = pOS2->ulCodePageRange2 & 0x0000ffff; - CODEPAGERANGE_IMPLEMENT(3); - a4 = (pOS2->ulCodePageRange2 >> 16) & 0x0000ffff; - CODEPAGERANGE_IMPLEMENT(4); - } else { - Charsets.Add(FX_CHARSET_Default); - } -} -#undef CODEPAGERANGE_IMPLEMENT -void CFX_FontMgrImp::GetUSBCSB(FXFT_Face pFace, FX_DWORD* USB, FX_DWORD* CSB) { - TT_OS2* pOS2 = (TT_OS2*)FT_Get_Sfnt_Table(pFace, ft_sfnt_os2); - if (NULL != pOS2) { - USB[0] = pOS2->ulUnicodeRange1; - USB[1] = pOS2->ulUnicodeRange2; - USB[2] = pOS2->ulUnicodeRange3; - USB[3] = pOS2->ulUnicodeRange4; - CSB[0] = pOS2->ulCodePageRange1; - CSB[1] = pOS2->ulCodePageRange2; - } else { - USB[0] = 0; - USB[1] = 0; - USB[2] = 0; - USB[3] = 0; - CSB[0] = 0; - CSB[1] = 0; - } -} -int32_t CFX_FontMgrImp::IsPartName(const CFX_WideString& Name1, - const CFX_WideString& Name2) { - if (Name1.Find((const FX_WCHAR*)Name2) != -1) { - return 1; - } - return 0; -} -#endif diff --git a/xfa/src/fgas/font/fgas_stdfontmgr.h b/xfa/src/fgas/font/fgas_stdfontmgr.h deleted file mode 100644 index cf16033919..0000000000 --- a/xfa/src/fgas/font/fgas_stdfontmgr.h +++ /dev/null @@ -1,252 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FGAS_FONT_FGAS_STDFONTMGR_H_ -#define XFA_SRC_FGAS_FONT_FGAS_STDFONTMGR_H_ - -#include "core/include/fxcrt/fx_ext.h" -#include "core/include/fxge/fx_freetype.h" -#include "core/include/fxge/fx_ge.h" -#include "third_party/freetype/include/freetype/fttypes.h" -#include "xfa/src/fgas/font/fgas_font.h" - -#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ -int32_t FX_GetSimilarValue(FX_LPCFONTDESCRIPTOR pFont, FX_DWORD dwFontStyles); -FX_LPCFONTDESCRIPTOR FX_DefFontMatcher(FX_LPFONTMATCHPARAMS pParams, - const CFX_FontDescriptors& fonts, - void* pUserData); - -class CFX_StdFontMgrImp : public IFX_FontMgr { - public: - CFX_StdFontMgrImp(FX_LPEnumAllFonts pEnumerator, - FX_LPMatchFont pMatcher, - void* pUserData); - ~CFX_StdFontMgrImp(); - virtual void Release() { delete this; } - virtual IFX_Font* GetDefFontByCodePage(FX_WORD wCodePage, - FX_DWORD dwFontStyles, - const FX_WCHAR* pszFontFamily = NULL); - virtual IFX_Font* GetDefFontByCharset(uint8_t nCharset, - FX_DWORD dwFontStyles, - const FX_WCHAR* pszFontFamily = NULL); - virtual IFX_Font* GetDefFontByUnicode(FX_WCHAR wUnicode, - FX_DWORD dwFontStyles, - const FX_WCHAR* pszFontFamily = NULL); - virtual IFX_Font* GetDefFontByLanguage(FX_WORD wLanguage, - FX_DWORD dwFontStyles, - const FX_WCHAR* pszFontFamily = NULL); - virtual IFX_Font* LoadFont(const FX_WCHAR* pszFontFamily, - FX_DWORD dwFontStyles, - FX_WORD wCodePage = 0xFFFF); - virtual IFX_Font* LoadFont(const uint8_t* pBuffer, int32_t iLength); - virtual IFX_Font* LoadFont(const FX_WCHAR* pszFileName); - virtual IFX_Font* LoadFont(IFX_Stream* pFontStream, - const FX_WCHAR* pszFontAlias = NULL, - FX_DWORD dwFontStyles = 0, - FX_WORD wCodePage = 0, - FX_BOOL bSaveStream = FALSE); - virtual IFX_Font* LoadFont(IFX_Font* pSrcFont, - FX_DWORD dwFontStyles, - FX_WORD wCodePage = 0xFFFF); - virtual void ClearFontCache(); - virtual void RemoveFont(IFX_Font* pFont); - - protected: - FX_LPMatchFont m_pMatcher; - FX_LPEnumAllFonts m_pEnumerator; - CFX_FontDescriptors m_FontFaces; - CFX_PtrArray m_Fonts; - CFX_MapPtrToPtr m_CPFonts; - CFX_MapPtrToPtr m_FamilyFonts; - CFX_MapPtrToPtr m_UnicodeFonts; - CFX_MapPtrToPtr m_BufferFonts; - CFX_MapPtrToPtr m_FileFonts; - CFX_MapPtrToPtr m_StreamFonts; - CFX_MapPtrToPtr m_DeriveFonts; - void* m_pUserData; - void RemoveFont(CFX_MapPtrToPtr& fontMap, IFX_Font* pFont); - FX_LPCFONTDESCRIPTOR FindFont(const FX_WCHAR* pszFontFamily, - FX_DWORD dwFontStyles, - FX_DWORD dwMatchFlags, - FX_WORD wCodePage, - FX_DWORD dwUSB = 999, - FX_WCHAR wUnicode = 0); - IFX_Font* GetFont(FX_LPCFONTDESCRIPTOR pFD, FX_DWORD dwFontStyles); -}; -FX_DWORD FX_GetGdiFontStyles(const LOGFONTW& lf); - -#else - -class CFX_FontDescriptor { - public: - CFX_FontDescriptor() - : m_pFileAccess(NULL), m_nFaceIndex(0), m_dwFontStyles(0) { - m_dwUsb[0] = m_dwUsb[1] = m_dwUsb[2] = m_dwUsb[3] = 0; - m_dwCsb[0] = m_dwCsb[1] = 0; - } - ~CFX_FontDescriptor() { - if (NULL != m_pFileAccess) { - m_pFileAccess->Release(); - } - } - IFX_FileAccess* m_pFileAccess; - int32_t m_nFaceIndex; - CFX_WideString m_wsFaceName; - CFX_WideStringArray m_wsFamilyNames; - FX_DWORD m_dwFontStyles; - FX_DWORD m_dwUsb[4]; - FX_DWORD m_dwCsb[2]; -}; -typedef CFX_ArrayTemplate CFX_FontDescriptors; - -struct FX_FontDescriptorInfo { - public: - CFX_FontDescriptor* pFont; - int32_t nPenalty; - - bool operator>(const FX_FontDescriptorInfo& other) const { - return nPenalty > other.nPenalty; - } - bool operator<(const FX_FontDescriptorInfo& other) const { - return nPenalty < other.nPenalty; - } - bool operator==(const FX_FontDescriptorInfo& other) const { - return nPenalty == other.nPenalty; - } -}; -typedef CFX_ArrayTemplate CFX_FontDescriptorInfos; - -struct FX_HandleParentPath { - FX_HandleParentPath() {} - FX_HandleParentPath(const FX_HandleParentPath& x) { - pFileHandle = x.pFileHandle; - bsParentPath = x.bsParentPath; - } - void* pFileHandle; - CFX_ByteString bsParentPath; -}; - -class CFX_FontSourceEnum_File : public IFX_FontSourceEnum { - public: - CFX_FontSourceEnum_File(); - virtual void Release() { delete this; } - virtual FX_POSITION GetStartPosition(void* pUserData = NULL); - virtual IFX_FileAccess* GetNext(FX_POSITION& pos, void* pUserData = NULL); - - private: - CFX_ByteString GetNextFile(); - CFX_WideString m_wsNext; - CFX_ObjectArray m_FolderQueue; - CFX_ByteStringArray m_FolderPaths; -}; -typedef CFX_MapPtrTemplate CFX_HashFileMap; -typedef CFX_MapPtrTemplate CFX_HashFontMap; -typedef CFX_MapPtrTemplate - CFX_HashFontDescsMap; -typedef CFX_MapPtrTemplate*> - CFX_HashFontsMap; -typedef CFX_MapPtrTemplate CFX_UnicodeFontMap; -typedef CFX_MapPtrTemplate*> - CFX_FileFontMap; -typedef CFX_MapPtrTemplate CFX_FonStreamtMap; - -class CFX_FontMgrImp : public IFX_FontMgr { - public: - CFX_FontMgrImp(IFX_FontSourceEnum* pFontEnum, - IFX_FontMgrDelegate* pDelegate = NULL, - void* pUserData = NULL); - virtual void Release(); - virtual IFX_Font* GetDefFontByCodePage(FX_WORD wCodePage, - FX_DWORD dwFontStyles, - const FX_WCHAR* pszFontFamily = NULL); - virtual IFX_Font* GetDefFontByCharset(uint8_t nCharset, - FX_DWORD dwFontStyles, - const FX_WCHAR* pszFontFamily = NULL); - virtual IFX_Font* GetDefFontByUnicode(FX_WCHAR wUnicode, - FX_DWORD dwFontStyles, - const FX_WCHAR* pszFontFamily = NULL); - virtual IFX_Font* GetDefFontByLanguage(FX_WORD wLanguage, - FX_DWORD dwFontStyles, - const FX_WCHAR* pszFontFamily = NULL); - virtual IFX_Font* GetFontByCodePage(FX_WORD wCodePage, - FX_DWORD dwFontStyles, - const FX_WCHAR* pszFontFamily = NULL); - virtual IFX_Font* GetFontByCharset(uint8_t nCharset, - FX_DWORD dwFontStyles, - const FX_WCHAR* pszFontFamily = NULL); - virtual IFX_Font* GetFontByUnicode(FX_WCHAR wUnicode, - FX_DWORD dwFontStyles, - const FX_WCHAR* pszFontFamily = NULL); - virtual IFX_Font* GetFontByLanguage(FX_WORD wLanguage, - FX_DWORD dwFontStyles, - const FX_WCHAR* pszFontFamily = NULL); - virtual IFX_Font* LoadFont(const uint8_t* pBuffer, - int32_t iLength, - int32_t iFaceIndex, - int32_t* pFaceCount); - virtual IFX_Font* LoadFont(const FX_WCHAR* pszFileName, - int32_t iFaceIndex, - int32_t* pFaceCount); - virtual IFX_Font* LoadFont(IFX_Stream* pFontStream, - int32_t iFaceIndex, - int32_t* pFaceCount, - FX_BOOL bSaveStream = FALSE); - virtual IFX_Font* LoadFont(const CFX_WideString& wsFaceName, - int32_t iFaceIndex, - int32_t* pFaceCount); - virtual void ClearFontCache(); - virtual void RemoveFont(IFX_Font* pFont); - FX_BOOL EnumFonts(); - FX_BOOL EnumFontsFromFontMapper(); - FX_BOOL EnumFontsFromFiles(); - - protected: - void RegisterFace(FXFT_Face pFace, - CFX_FontDescriptors& Fonts, - const CFX_WideString* pFaceName, - IFX_FileAccess* pFontAccess); - void RegisterFaces(IFX_FileRead* pFontStream, - const CFX_WideString* pFaceName); - void GetNames(const uint8_t* name_table, CFX_WideStringArray& Names); - void GetCharsets(FXFT_Face pFace, CFX_WordArray& Charsets); - void GetUSBCSB(FXFT_Face pFace, FX_DWORD* USB, FX_DWORD* CSB); - FX_DWORD GetFlags(FXFT_Face pFace); - CFX_FontDescriptors m_InstalledFonts; - FX_BOOL VerifyUnicode(CFX_FontDescriptor* pDesc, FX_WCHAR wcUnicode); - FX_BOOL VerifyUnicode(IFX_Font* pFont, FX_WCHAR wcUnicode); - int32_t IsPartName(const CFX_WideString& Name1, const CFX_WideString& Name2); - int32_t MatchFonts(CFX_FontDescriptorInfos& MatchedFonts, - FX_WORD wCodePage, - FX_DWORD dwFontStyles, - const CFX_WideString& FontName, - FX_WCHAR wcUnicode = 0xFFFE); - int32_t CalcPenalty(CFX_FontDescriptor* pInstalled, - FX_WORD wCodePage, - FX_DWORD dwFontStyles, - const CFX_WideString& FontName, - FX_WCHAR wcUnicode = 0xFFFE); - IFX_Font* LoadFont(IFX_FileAccess* pFontAccess, - int32_t iFaceIndex, - int32_t* pFaceCount, - FX_BOOL bWantCache = FALSE); - FXFT_Face LoadFace(IFX_FileRead* pFontStream, int32_t iFaceIndex); - IFX_FileRead* CreateFontStream(CFX_FontMapper* pFontMapper, - IFX_SystemFontInfo* pSystemFontInfo, - FX_DWORD index); - IFX_FileRead* CreateFontStream(const CFX_ByteString& bsFaceName); - CFX_HashFontDescsMap m_Hash2CandidateList; - CFX_HashFontsMap m_Hash2Fonts; - CFX_HashFileMap m_Hash2FileAccess; - CFX_HashFontMap m_FileAccess2IFXFont; - CFX_FonStreamtMap m_IFXFont2FileRead; - CFX_UnicodeFontMap m_FailedUnicodes2NULL; - IFX_FontSourceEnum* m_pFontSource; - IFX_FontMgrDelegate* m_pDelegate; - void* m_pUserData; -}; -#endif - -#endif // XFA_SRC_FGAS_FONT_FGAS_STDFONTMGR_H_ diff --git a/xfa/src/fgas/layout/fgas_linebreak.cpp b/xfa/src/fgas/layout/fgas_linebreak.cpp deleted file mode 100644 index b43b8007b4..0000000000 --- a/xfa/src/fgas/layout/fgas_linebreak.cpp +++ /dev/null @@ -1,320 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fgas/layout/fgas_linebreak.h" - -#include "core/include/fxcrt/fx_ucd.h" - -const FX_LINEBREAKTYPE gs_FX_LineBreak_PairTable[64][32] = { - {FX_LBPB, FX_LBPB, FX_LBPB, FX_LBPB, FX_LBPB, FX_LBPB, FX_LBPB, FX_LBPB, - FX_LBPB, FX_LBPB, FX_LBPB, FX_LBPB, FX_LBPB, FX_LBPB, FX_LBPB, FX_LBPB, - FX_LBPB, FX_LBPB, FX_LBPB, FX_LBCP, FX_LBPB, FX_LBPB, FX_LBPB, FX_LBPB, - FX_LBPB, FX_LBPB, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN}, - {FX_LBDB, FX_LBPB, FX_LBIB, FX_LBIB, FX_LBPB, FX_LBPB, FX_LBPB, FX_LBPB, - FX_LBIB, FX_LBIB, FX_LBDB, FX_LBDB, FX_LBDB, FX_LBDB, FX_LBIB, FX_LBIB, - FX_LBDB, FX_LBDB, FX_LBPB, FX_LBCB, FX_LBPB, FX_LBDB, FX_LBDB, FX_LBDB, - FX_LBDB, FX_LBDB, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN}, - {FX_LBPB, FX_LBPB, FX_LBIB, FX_LBIB, FX_LBIB, FX_LBPB, FX_LBPB, FX_LBPB, - FX_LBIB, FX_LBIB, FX_LBIB, FX_LBIB, FX_LBIB, FX_LBIB, FX_LBIB, FX_LBIB, - FX_LBIB, FX_LBIB, FX_LBPB, FX_LBCB, FX_LBPB, FX_LBIB, FX_LBIB, FX_LBIB, - FX_LBIB, FX_LBIB, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN}, - {FX_LBIB, FX_LBPB, FX_LBIB, FX_LBIB, FX_LBIB, FX_LBPB, FX_LBPB, FX_LBPB, - FX_LBIB, FX_LBIB, FX_LBIB, FX_LBIB, FX_LBIB, FX_LBIB, FX_LBIB, FX_LBIB, - FX_LBIB, FX_LBIB, FX_LBPB, FX_LBCB, FX_LBPB, FX_LBIB, FX_LBIB, FX_LBIB, - FX_LBIB, FX_LBIB, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN}, - {FX_LBDB, FX_LBPB, FX_LBIB, FX_LBIB, FX_LBIB, FX_LBPB, FX_LBPB, FX_LBPB, - FX_LBDB, FX_LBDB, FX_LBDB, FX_LBDB, FX_LBDB, FX_LBDB, FX_LBIB, FX_LBIB, - FX_LBDB, FX_LBDB, FX_LBPB, FX_LBCB, FX_LBPB, FX_LBDB, FX_LBDB, FX_LBDB, - FX_LBDB, FX_LBDB, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN}, - {FX_LBDB, FX_LBPB, FX_LBIB, FX_LBIB, FX_LBIB, FX_LBPB, FX_LBPB, FX_LBPB, - FX_LBDB, FX_LBDB, FX_LBDB, FX_LBDB, FX_LBDB, FX_LBDB, FX_LBIB, FX_LBIB, - FX_LBDB, FX_LBDB, FX_LBPB, FX_LBCB, FX_LBPB, FX_LBDB, FX_LBDB, FX_LBDB, - FX_LBDB, FX_LBDB, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN}, - {FX_LBDB, FX_LBPB, FX_LBIB, FX_LBIB, FX_LBIB, FX_LBPB, FX_LBPB, FX_LBPB, - FX_LBDB, FX_LBDB, FX_LBIB, FX_LBDB, FX_LBDB, FX_LBDB, FX_LBIB, FX_LBIB, - FX_LBDB, FX_LBDB, FX_LBPB, FX_LBCB, FX_LBPB, FX_LBDB, FX_LBDB, FX_LBDB, - FX_LBDB, FX_LBDB, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN}, - {FX_LBDB, FX_LBPB, FX_LBIB, FX_LBIB, FX_LBIB, FX_LBPB, FX_LBPB, FX_LBPB, - FX_LBDB, FX_LBDB, FX_LBIB, FX_LBIB, FX_LBDB, FX_LBDB, FX_LBIB, FX_LBIB, - FX_LBDB, FX_LBDB, FX_LBPB, FX_LBCB, FX_LBPB, FX_LBDB, FX_LBDB, FX_LBDB, - FX_LBDB, FX_LBDB, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN}, - {FX_LBIB, FX_LBPB, FX_LBIB, FX_LBIB, FX_LBIB, FX_LBPB, FX_LBPB, FX_LBPB, - FX_LBDB, FX_LBDB, FX_LBIB, FX_LBIB, FX_LBIB, FX_LBDB, FX_LBIB, FX_LBIB, - FX_LBDB, FX_LBDB, FX_LBPB, FX_LBCB, FX_LBPB, FX_LBIB, FX_LBIB, FX_LBIB, - FX_LBIB, FX_LBIB, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN}, - {FX_LBIB, FX_LBPB, FX_LBIB, FX_LBIB, FX_LBIB, FX_LBPB, FX_LBPB, FX_LBPB, - FX_LBDB, FX_LBDB, FX_LBIB, FX_LBIB, FX_LBDB, FX_LBDB, FX_LBIB, FX_LBIB, - FX_LBDB, FX_LBDB, FX_LBPB, FX_LBCB, FX_LBPB, FX_LBDB, FX_LBDB, FX_LBDB, - FX_LBDB, FX_LBDB, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN}, - {FX_LBIB, FX_LBPB, FX_LBIB, FX_LBIB, FX_LBIB, FX_LBPB, FX_LBPB, FX_LBPB, - FX_LBIB, FX_LBIB, FX_LBIB, FX_LBIB, FX_LBDB, FX_LBIB, FX_LBIB, FX_LBIB, - FX_LBDB, FX_LBDB, FX_LBPB, FX_LBCB, FX_LBPB, FX_LBDB, FX_LBDB, FX_LBDB, - FX_LBDB, FX_LBDB, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN}, - {FX_LBIB, FX_LBPB, FX_LBIB, FX_LBIB, FX_LBIB, FX_LBPB, FX_LBPB, FX_LBPB, - FX_LBDB, FX_LBDB, FX_LBIB, FX_LBIB, FX_LBDB, FX_LBIB, FX_LBIB, FX_LBIB, - FX_LBDB, FX_LBDB, FX_LBPB, FX_LBCB, FX_LBPB, FX_LBDB, FX_LBDB, FX_LBDB, - FX_LBDB, FX_LBDB, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN}, - {FX_LBDB, FX_LBPB, FX_LBIB, FX_LBIB, FX_LBIB, FX_LBPB, FX_LBPB, FX_LBPB, - FX_LBDB, FX_LBIB, FX_LBDB, FX_LBDB, FX_LBDB, FX_LBIB, FX_LBIB, FX_LBIB, - FX_LBDB, FX_LBDB, FX_LBPB, FX_LBCB, FX_LBPB, FX_LBDB, FX_LBDB, FX_LBDB, - FX_LBDB, FX_LBDB, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN}, - {FX_LBDB, FX_LBPB, FX_LBIB, FX_LBIB, FX_LBIB, FX_LBPB, FX_LBPB, FX_LBPB, - FX_LBDB, FX_LBDB, FX_LBDB, FX_LBDB, FX_LBDB, FX_LBIB, FX_LBIB, FX_LBIB, - FX_LBDB, FX_LBDB, FX_LBPB, FX_LBCB, FX_LBPB, FX_LBDB, FX_LBDB, FX_LBDB, - FX_LBDB, FX_LBDB, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN}, - {FX_LBDB, FX_LBPB, FX_LBIB, FX_LBDB, FX_LBIB, FX_LBPB, FX_LBPB, FX_LBPB, - FX_LBDB, FX_LBDB, FX_LBIB, FX_LBDB, FX_LBDB, FX_LBDB, FX_LBIB, FX_LBIB, - FX_LBDB, FX_LBDB, FX_LBPB, FX_LBCB, FX_LBPB, FX_LBDB, FX_LBDB, FX_LBDB, - FX_LBDB, FX_LBDB, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN}, - {FX_LBDB, FX_LBPB, FX_LBIB, FX_LBDB, FX_LBIB, FX_LBPB, FX_LBPB, FX_LBPB, - FX_LBDB, FX_LBDB, FX_LBDB, FX_LBDB, FX_LBDB, FX_LBDB, FX_LBIB, FX_LBIB, - FX_LBDB, FX_LBDB, FX_LBPB, FX_LBCB, FX_LBPB, FX_LBDB, FX_LBDB, FX_LBDB, - FX_LBDB, FX_LBDB, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN}, - {FX_LBIB, FX_LBPB, FX_LBIB, FX_LBIB, FX_LBIB, FX_LBPB, FX_LBPB, FX_LBPB, - FX_LBIB, FX_LBIB, FX_LBIB, FX_LBIB, FX_LBIB, FX_LBIB, FX_LBIB, FX_LBIB, - FX_LBIB, FX_LBIB, FX_LBPB, FX_LBCB, FX_LBPB, FX_LBIB, FX_LBIB, FX_LBIB, - FX_LBIB, FX_LBIB, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN}, - {FX_LBDB, FX_LBPB, FX_LBIB, FX_LBIB, FX_LBIB, FX_LBPB, FX_LBPB, FX_LBPB, - FX_LBDB, FX_LBDB, FX_LBDB, FX_LBDB, FX_LBDB, FX_LBDB, FX_LBIB, FX_LBIB, - FX_LBDB, FX_LBPB, FX_LBPB, FX_LBCB, FX_LBPB, FX_LBDB, FX_LBDB, FX_LBDB, - FX_LBDB, FX_LBDB, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN}, - {FX_LBDB, FX_LBDB, FX_LBDB, FX_LBDB, FX_LBDB, FX_LBDB, FX_LBDB, FX_LBDB, - FX_LBDB, FX_LBDB, FX_LBDB, FX_LBDB, FX_LBDB, FX_LBDB, FX_LBDB, FX_LBDB, - FX_LBDB, FX_LBDB, FX_LBPB, FX_LBDB, FX_LBDB, FX_LBDB, FX_LBDB, FX_LBDB, - FX_LBDB, FX_LBDB, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN}, - {FX_LBDB, FX_LBPB, FX_LBIB, FX_LBIB, FX_LBIB, FX_LBPB, FX_LBPB, FX_LBPB, - FX_LBDB, FX_LBDB, FX_LBIB, FX_LBIB, FX_LBDB, FX_LBIB, FX_LBIB, FX_LBIB, - FX_LBDB, FX_LBDB, FX_LBPB, FX_LBCB, FX_LBPB, FX_LBDB, FX_LBDB, FX_LBDB, - FX_LBDB, FX_LBDB, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN}, - {FX_LBIB, FX_LBPB, FX_LBIB, FX_LBIB, FX_LBIB, FX_LBPB, FX_LBPB, FX_LBPB, - FX_LBIB, FX_LBIB, FX_LBIB, FX_LBIB, FX_LBIB, FX_LBIB, FX_LBIB, FX_LBIB, - FX_LBIB, FX_LBIB, FX_LBPB, FX_LBCB, FX_LBPB, FX_LBIB, FX_LBIB, FX_LBIB, - FX_LBIB, FX_LBIB, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN}, - {FX_LBDB, FX_LBPB, FX_LBIB, FX_LBIB, FX_LBIB, FX_LBPB, FX_LBPB, FX_LBPB, - FX_LBDB, FX_LBIB, FX_LBDB, FX_LBDB, FX_LBDB, FX_LBIB, FX_LBIB, FX_LBIB, - FX_LBDB, FX_LBDB, FX_LBPB, FX_LBCB, FX_LBPB, FX_LBDB, FX_LBDB, FX_LBDB, - FX_LBIB, FX_LBIB, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN}, - {FX_LBDB, FX_LBPB, FX_LBIB, FX_LBIB, FX_LBIB, FX_LBPB, FX_LBPB, FX_LBPB, - FX_LBDB, FX_LBIB, FX_LBDB, FX_LBDB, FX_LBDB, FX_LBIB, FX_LBIB, FX_LBIB, - FX_LBDB, FX_LBDB, FX_LBPB, FX_LBCB, FX_LBPB, FX_LBDB, FX_LBDB, FX_LBDB, - FX_LBDB, FX_LBIB, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN}, - {FX_LBDB, FX_LBPB, FX_LBIB, FX_LBIB, FX_LBIB, FX_LBPB, FX_LBPB, FX_LBPB, - FX_LBDB, FX_LBIB, FX_LBDB, FX_LBDB, FX_LBDB, FX_LBIB, FX_LBIB, FX_LBIB, - FX_LBDB, FX_LBDB, FX_LBPB, FX_LBCB, FX_LBPB, FX_LBIB, FX_LBIB, FX_LBIB, - FX_LBIB, FX_LBDB, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN}, - {FX_LBDB, FX_LBPB, FX_LBIB, FX_LBIB, FX_LBIB, FX_LBPB, FX_LBPB, FX_LBPB, - FX_LBDB, FX_LBIB, FX_LBDB, FX_LBDB, FX_LBDB, FX_LBIB, FX_LBIB, FX_LBIB, - FX_LBDB, FX_LBDB, FX_LBPB, FX_LBCB, FX_LBPB, FX_LBDB, FX_LBDB, FX_LBDB, - FX_LBIB, FX_LBIB, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN}, - {FX_LBDB, FX_LBPB, FX_LBIB, FX_LBIB, FX_LBIB, FX_LBPB, FX_LBPB, FX_LBPB, - FX_LBDB, FX_LBIB, FX_LBDB, FX_LBDB, FX_LBDB, FX_LBIB, FX_LBIB, FX_LBIB, - FX_LBDB, FX_LBDB, FX_LBPB, FX_LBCB, FX_LBPB, FX_LBDB, FX_LBDB, FX_LBDB, - FX_LBDB, FX_LBIB, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN}, - {FX_LBDB, FX_LBPB, FX_LBIB, FX_LBIB, FX_LBIB, FX_LBPB, FX_LBPB, FX_LBPB, - FX_LBDB, FX_LBIB, FX_LBDB, FX_LBDB, FX_LBDB, FX_LBIB, FX_LBIB, FX_LBIB, - FX_LBDB, FX_LBDB, FX_LBPB, FX_LBCB, FX_LBPB, FX_LBDB, FX_LBDB, FX_LBDB, - FX_LBDB, FX_LBDB, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN}, - {FX_LBDB, FX_LBPB, FX_LBIB, FX_LBIB, FX_LBIB, FX_LBPB, FX_LBPB, FX_LBPB, - FX_LBDB, FX_LBIB, FX_LBDB, FX_LBDB, FX_LBDB, FX_LBIB, FX_LBIB, FX_LBIB, - FX_LBDB, FX_LBDB, FX_LBPB, FX_LBCB, FX_LBPB, FX_LBDB, FX_LBDB, FX_LBDB, - FX_LBDB, FX_LBDB, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN}, - {FX_LBDB, FX_LBPB, FX_LBIB, FX_LBIB, FX_LBIB, FX_LBPB, FX_LBPB, FX_LBPB, - FX_LBDB, FX_LBIB, FX_LBDB, FX_LBDB, FX_LBDB, FX_LBIB, FX_LBIB, FX_LBIB, - FX_LBDB, FX_LBDB, FX_LBPB, FX_LBCB, FX_LBPB, FX_LBDB, FX_LBDB, FX_LBDB, - FX_LBDB, FX_LBDB, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN}, - {FX_LBDB, FX_LBPB, FX_LBIB, FX_LBIB, FX_LBIB, FX_LBPB, FX_LBPB, FX_LBPB, - FX_LBDB, FX_LBIB, FX_LBDB, FX_LBDB, FX_LBDB, FX_LBIB, FX_LBIB, FX_LBIB, - FX_LBDB, FX_LBDB, FX_LBPB, FX_LBCB, FX_LBPB, FX_LBDB, FX_LBDB, FX_LBDB, - FX_LBDB, FX_LBDB, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN}, - {FX_LBDB, FX_LBPB, FX_LBIB, FX_LBIB, FX_LBIB, FX_LBPB, FX_LBPB, FX_LBPB, - FX_LBDB, FX_LBIB, FX_LBDB, FX_LBDB, FX_LBDB, FX_LBIB, FX_LBIB, FX_LBIB, - FX_LBDB, FX_LBDB, FX_LBPB, FX_LBCB, FX_LBPB, FX_LBDB, FX_LBDB, FX_LBDB, - FX_LBDB, FX_LBDB, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN}, - {FX_LBDB, FX_LBPB, FX_LBIB, FX_LBIB, FX_LBIB, FX_LBPB, FX_LBPB, FX_LBPB, - FX_LBDB, FX_LBIB, FX_LBDB, FX_LBDB, FX_LBDB, FX_LBIB, FX_LBIB, FX_LBIB, - FX_LBDB, FX_LBDB, FX_LBPB, FX_LBCB, FX_LBPB, FX_LBDB, FX_LBDB, FX_LBDB, - FX_LBDB, FX_LBDB, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN}, - {FX_LBDB, FX_LBPB, FX_LBIB, FX_LBIB, FX_LBIB, FX_LBPB, FX_LBPB, FX_LBPB, - FX_LBDB, FX_LBIB, FX_LBDB, FX_LBDB, FX_LBDB, FX_LBIB, FX_LBIB, FX_LBIB, - FX_LBDB, FX_LBDB, FX_LBPB, FX_LBCB, FX_LBPB, FX_LBDB, FX_LBDB, FX_LBDB, - FX_LBDB, FX_LBDB, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN}, - {FX_LBDB, FX_LBPB, FX_LBIB, FX_LBIB, FX_LBIB, FX_LBPB, FX_LBPB, FX_LBPB, - FX_LBDB, FX_LBIB, FX_LBDB, FX_LBDB, FX_LBDB, FX_LBIB, FX_LBIB, FX_LBIB, - FX_LBDB, FX_LBDB, FX_LBPB, FX_LBCB, FX_LBPB, FX_LBDB, FX_LBDB, FX_LBDB, - FX_LBDB, FX_LBDB, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN}, - {FX_LBDB, FX_LBPB, FX_LBIB, FX_LBIB, FX_LBIB, FX_LBPB, FX_LBPB, FX_LBPB, - FX_LBDB, FX_LBIB, FX_LBDB, FX_LBDB, FX_LBDB, FX_LBIB, FX_LBIB, FX_LBIB, - FX_LBDB, FX_LBDB, FX_LBPB, FX_LBCB, FX_LBPB, FX_LBDB, FX_LBDB, FX_LBDB, - FX_LBDB, FX_LBDB, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN}, - {FX_LBDB, FX_LBPB, FX_LBDB, FX_LBPB, FX_LBPB, FX_LBPB, FX_LBDB, FX_LBPB, - FX_LBDB, FX_LBIB, FX_LBDB, FX_LBDB, FX_LBDB, FX_LBPB, FX_LBPB, FX_LBIB, - FX_LBDB, FX_LBDB, FX_LBPB, FX_LBCB, FX_LBPB, FX_LBDB, FX_LBDB, FX_LBDB, - FX_LBPB, FX_LBDB, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN}, - {FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN}, - {FX_LBDB, FX_LBPB, FX_LBIB, FX_LBDB, FX_LBIB, FX_LBPB, FX_LBPB, FX_LBPB, - FX_LBDB, FX_LBDB, FX_LBDB, FX_LBDB, FX_LBDB, FX_LBDB, FX_LBIB, FX_LBIB, - FX_LBDB, FX_LBDB, FX_LBPB, FX_LBCB, FX_LBPB, FX_LBDB, FX_LBDB, FX_LBDB, - FX_LBDB, FX_LBDB, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN}, - {FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN}, - {FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN}, - {FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN}, - {FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN}, - {FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN}, - {FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN}, - {FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN}, - {FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN}, - {FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN}, - {FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN}, - {FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN}, - {FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN}, - {FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN}, - {FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN}, - {FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN}, - {FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN}, - {FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN}, - {FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN}, - {FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN}, - {FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN}, - {FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN}, - {FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN}, - {FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN}, - {FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN}, - {FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN}, - {FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, - FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN, FX_LBUN}, -}; - -void FX_GetLineBreakPositions(const FX_WCHAR* pwsText, - FX_LINEBREAKTYPE* pBrkType, - int32_t iLength) { - if (iLength < 2) { - return; - } - FX_DWORD dwCur, dwNext; - FX_WCHAR wch; - wch = *pwsText++; - dwCur = kTextLayoutCodeProperties[(FX_WORD)wch] & 0x003F; - iLength--; - for (int32_t i = 0; i < iLength; i++) { - wch = *pwsText++; - dwNext = kTextLayoutCodeProperties[(FX_WORD)wch] & 0x003F; - if (dwNext == FX_CBP_SP) { - pBrkType[i] = FX_LBT_PROHIBITED_BRK; - } else { - pBrkType[i] = *((const FX_LINEBREAKTYPE*)gs_FX_LineBreak_PairTable + - (dwCur << 5) + dwNext); - } - dwCur = dwNext; - } - pBrkType[iLength] = FX_LBT_INDIRECT_BRK; -} -void FX_GetLineBreakPositions(const FX_WCHAR* pwsText, - int32_t iLength, - CFX_Int32MassArray& bp) { - if (iLength < 2) { - return; - } - FX_LINEBREAKTYPE eType; - FX_DWORD dwCur, dwNext; - FX_WCHAR wch; - wch = *pwsText++; - dwCur = kTextLayoutCodeProperties[(FX_WORD)wch] & 0x003F; - iLength--; - for (int32_t i = 0; i < iLength; i++) { - wch = *pwsText++; - dwNext = kTextLayoutCodeProperties[(FX_WORD)wch] & 0x003F; - if (dwNext == FX_CBP_SP) { - eType = FX_LBT_PROHIBITED_BRK; - } else { - eType = *((const FX_LINEBREAKTYPE*)gs_FX_LineBreak_PairTable + - (dwCur << 5) + dwNext); - } - if (eType == FX_LBT_DIRECT_BRK) { - bp.Add(i); - } - dwCur = dwNext; - } -} diff --git a/xfa/src/fgas/layout/fgas_linebreak.h b/xfa/src/fgas/layout/fgas_linebreak.h deleted file mode 100644 index 7b91124bc2..0000000000 --- a/xfa/src/fgas/layout/fgas_linebreak.h +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FGAS_LAYOUT_FGAS_LINEBREAK_H_ -#define XFA_SRC_FGAS_LAYOUT_FGAS_LINEBREAK_H_ - -#include "core/include/fxcrt/fx_system.h" -#include "xfa/src/fgas/crt/fgas_utils.h" - -enum FX_LINEBREAKTYPE { - FX_LBT_UNKNOWN = 0x00, - FX_LBT_DIRECT_BRK = 0x1A, - FX_LBT_INDIRECT_BRK = 0x2B, - FX_LBT_COM_INDIRECT_BRK = 0x3C, - FX_LBT_COM_PROHIBITED_BRK = 0x4D, - FX_LBT_PROHIBITED_BRK = 0x5E, - FX_LBT_HANGUL_SPACE_BRK = 0x6F, -}; - -#define FX_LBUN FX_LBT_UNKNOWN -#define FX_LBDB FX_LBT_DIRECT_BRK -#define FX_LBIB FX_LBT_INDIRECT_BRK -#define FX_LBCB FX_LBT_COM_INDIRECT_BRK -#define FX_LBCP FX_LBT_COM_PROHIBITED_BRK -#define FX_LBPB FX_LBT_PROHIBITED_BRK -#define FX_LBHS FX_LBT_HANGUL_SPACE_BRK - -extern const FX_LINEBREAKTYPE gs_FX_LineBreak_PairTable[64][32]; - -void FX_GetLineBreakPositions(const FX_WCHAR* pwsText, - FX_LINEBREAKTYPE* pBrkType, - int32_t iLength); -void FX_GetLineBreakPositions(const FX_WCHAR* pwsText, - int32_t iLength, - CFX_Int32MassArray& bp); - -#endif // XFA_SRC_FGAS_LAYOUT_FGAS_LINEBREAK_H_ diff --git a/xfa/src/fgas/layout/fgas_rtfbreak.cpp b/xfa/src/fgas/layout/fgas_rtfbreak.cpp deleted file mode 100644 index 7e4ab4c08c..0000000000 --- a/xfa/src/fgas/layout/fgas_rtfbreak.cpp +++ /dev/null @@ -1,1691 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fgas/layout/fgas_rtfbreak.h" - -#include - -#include "core/include/fxcrt/fx_arb.h" -#include "xfa/src/fgas/layout/fgas_linebreak.h" -#include "xfa/src/fgas/layout/fgas_unicode.h" - -namespace { - -class CFX_RTFLine { - public: - CFX_RTFLine() - : m_LinePieces(16), - m_iStart(0), - m_iWidth(0), - m_iArabicChars(0), - m_iMBCSChars(0) {} - ~CFX_RTFLine() { RemoveAll(); } - int32_t CountChars() const { return m_LineChars.GetSize(); } - CFX_RTFChar& GetChar(int32_t index) { - FXSYS_assert(index > -1 && index < m_LineChars.GetSize()); - return *m_LineChars.GetDataPtr(index); - } - CFX_RTFChar* GetCharPtr(int32_t index) { - FXSYS_assert(index > -1 && index < m_LineChars.GetSize()); - return m_LineChars.GetDataPtr(index); - } - int32_t CountPieces() const { return m_LinePieces.GetSize(); } - CFX_RTFPiece& GetPiece(int32_t index) const { - FXSYS_assert(index > -1 && index < m_LinePieces.GetSize()); - return m_LinePieces.GetAt(index); - } - CFX_RTFPiece* GetPiecePtr(int32_t index) const { - FXSYS_assert(index > -1 && index < m_LinePieces.GetSize()); - return m_LinePieces.GetPtrAt(index); - } - int32_t GetLineEnd() const { return m_iStart + m_iWidth; } - void RemoveAll(FX_BOOL bLeaveMemory = FALSE) { - CFX_RTFChar* pChar; - IFX_Unknown* pUnknown; - int32_t iCount = m_LineChars.GetSize(); - for (int32_t i = 0; i < iCount; i++) { - pChar = m_LineChars.GetDataPtr(i); - if ((pUnknown = pChar->m_pUserData) != NULL) { - pUnknown->Release(); - } - } - m_LineChars.RemoveAll(); - m_LinePieces.RemoveAll(bLeaveMemory); - m_iWidth = 0; - m_iArabicChars = 0; - m_iMBCSChars = 0; - } - CFX_RTFCharArray m_LineChars; - CFX_RTFPieceArray m_LinePieces; - int32_t m_iStart; - int32_t m_iWidth; - int32_t m_iArabicChars; - int32_t m_iMBCSChars; -}; - -class CFX_RTFBreak : public IFX_RTFBreak { - public: - CFX_RTFBreak(FX_DWORD dwPolicies); - ~CFX_RTFBreak(); - void Release() override { delete this; } - void SetLineBoundary(FX_FLOAT fLineStart, FX_FLOAT fLineEnd) override; - void SetLineStartPos(FX_FLOAT fLinePos) override; - FX_DWORD GetLayoutStyles() const override { return m_dwLayoutStyles; } - void SetLayoutStyles(FX_DWORD dwLayoutStyles) override; - void SetFont(IFX_Font* pFont) override; - void SetFontSize(FX_FLOAT fFontSize) override; - void SetTabWidth(FX_FLOAT fTabWidth) override; - void AddPositionedTab(FX_FLOAT fTabPos) override; - void SetPositionedTabs(const CFX_FloatArray& tabs) override; - void ClearPositionedTabs() override; - void SetDefaultChar(FX_WCHAR wch) override; - void SetLineBreakChar(FX_WCHAR wch) override; - void SetLineBreakTolerance(FX_FLOAT fTolerance) override; - void SetHorizontalScale(int32_t iScale) override; - void SetVerticalScale(int32_t iScale) override; - void SetCharRotation(int32_t iCharRotation) override; - void SetCharSpace(FX_FLOAT fCharSpace) override; - void SetWordSpace(FX_BOOL bDefault, FX_FLOAT fWordSpace) override; - void SetReadingOrder(FX_BOOL bRTL = FALSE) override; - void SetAlignment(int32_t iAlignment = FX_RTFLINEALIGNMENT_Left) override; - void SetUserData(IFX_Unknown* pUserData) override; - FX_DWORD AppendChar(FX_WCHAR wch) override; - FX_DWORD EndBreak(FX_DWORD dwStatus = FX_RTFBREAK_PieceBreak) override; - int32_t CountBreakPieces() const override; - const CFX_RTFPiece* GetBreakPiece(int32_t index) const override; - void GetLineRect(CFX_RectF& rect) const override; - void ClearBreakPieces() override; - void Reset() override; - int32_t GetDisplayPos( - const FX_RTFTEXTOBJ* pText, - FXTEXT_CHARPOS* pCharPos, - FX_BOOL bCharCode = FALSE, - CFX_WideString* pWSForms = NULL, - FX_AdjustCharDisplayPos pAdjustPos = NULL) const override; - int32_t GetCharRects(const FX_RTFTEXTOBJ* pText, - CFX_RectFArray& rtArray, - FX_BOOL bCharBBox = FALSE) const override; - FX_DWORD AppendChar_CharCode(FX_WCHAR wch); - FX_DWORD AppendChar_Combination(CFX_RTFChar* pCurChar, int32_t iRotation); - FX_DWORD AppendChar_Tab(CFX_RTFChar* pCurChar, int32_t iRotation); - FX_DWORD AppendChar_Control(CFX_RTFChar* pCurChar, int32_t iRotation); - FX_DWORD AppendChar_Arabic(CFX_RTFChar* pCurChar, int32_t iRotation); - FX_DWORD AppendChar_Others(CFX_RTFChar* pCurChar, int32_t iRotation); - - protected: - FX_DWORD m_dwPolicies; - IFX_ArabicChar* m_pArabicChar; - int32_t m_iBoundaryStart; - int32_t m_iBoundaryEnd; - FX_DWORD m_dwLayoutStyles; - FX_BOOL m_bPagination; - FX_BOOL m_bVertical; - FX_BOOL m_bSingleLine; - FX_BOOL m_bCharCode; - IFX_Font* m_pFont; - int32_t m_iFontHeight; - int32_t m_iFontSize; - int32_t m_iTabWidth; - CFX_Int32Array m_PositionedTabs; - FX_BOOL m_bOrphanLine; - FX_WCHAR m_wDefChar; - int32_t m_iDefChar; - FX_WCHAR m_wLineBreakChar; - int32_t m_iHorizontalScale; - int32_t m_iVerticalScale; - int32_t m_iLineRotation; - int32_t m_iCharRotation; - int32_t m_iRotation; - int32_t m_iCharSpace; - FX_BOOL m_bWordSpace; - int32_t m_iWordSpace; - FX_BOOL m_bRTL; - int32_t m_iAlignment; - IFX_Unknown* m_pUserData; - FX_DWORD m_dwCharType; - FX_DWORD m_dwIdentity; - CFX_RTFLine m_RTFLine1; - CFX_RTFLine m_RTFLine2; - CFX_RTFLine* m_pCurLine; - int32_t m_iReady; - int32_t m_iTolerance; - int32_t GetLineRotation(FX_DWORD dwStyles) const; - void SetBreakStatus(); - CFX_RTFChar* GetLastChar(int32_t index) const; - CFX_RTFLine* GetRTFLine(FX_BOOL bReady) const; - CFX_RTFPieceArray* GetRTFPieces(FX_BOOL bReady) const; - FX_DWORD GetUnifiedCharType(FX_DWORD dwType) const; - int32_t GetLastPositionedTab() const; - FX_BOOL GetPositionedTab(int32_t& iTabPos) const; - int32_t GetBreakPos(CFX_RTFCharArray& tca, - int32_t& iEndPos, - FX_BOOL bAllChars = FALSE, - FX_BOOL bOnlyBrk = FALSE); - void SplitTextLine(CFX_RTFLine* pCurLine, - CFX_RTFLine* pNextLine, - FX_BOOL bAllChars = FALSE); - FX_BOOL EndBreak_SplitLine(CFX_RTFLine* pNextLine, - FX_BOOL bAllChars, - FX_DWORD dwStatus); - void EndBreak_BidiLine(CFX_TPOArray& tpos, FX_DWORD dwStatus); - void EndBreak_Alignment(CFX_TPOArray& tpos, - FX_BOOL bAllChars, - FX_DWORD dwStatus); -}; - -} // namespace - -IFX_RTFBreak* IFX_RTFBreak::Create(FX_DWORD dwPolicies) { - return new CFX_RTFBreak(dwPolicies); -} -CFX_RTFBreak::CFX_RTFBreak(FX_DWORD dwPolicies) - : m_dwPolicies(dwPolicies), - m_pArabicChar(NULL), - m_iBoundaryStart(0), - m_iBoundaryEnd(2000000), - m_dwLayoutStyles(0), - m_bPagination(FALSE), - m_bVertical(FALSE), - m_bSingleLine(FALSE), - m_bCharCode(FALSE), - m_pFont(NULL), - m_iFontHeight(240), - m_iFontSize(240), - m_iTabWidth(720000), - m_PositionedTabs(), - m_bOrphanLine(FALSE), - m_wDefChar(0xFEFF), - m_iDefChar(0), - m_wLineBreakChar(L'\n'), - m_iHorizontalScale(100), - m_iVerticalScale(100), - m_iLineRotation(0), - m_iCharRotation(0), - m_iRotation(0), - m_iCharSpace(0), - m_bWordSpace(FALSE), - m_iWordSpace(0), - m_bRTL(FALSE), - m_iAlignment(FX_RTFLINEALIGNMENT_Left), - m_pUserData(NULL), - m_dwCharType(0), - m_dwIdentity(0), - m_RTFLine1(), - m_RTFLine2(), - m_pCurLine(NULL), - m_iReady(0), - m_iTolerance(0) { - m_pArabicChar = IFX_ArabicChar::Create(); - m_pCurLine = &m_RTFLine1; -} -CFX_RTFBreak::~CFX_RTFBreak() { - Reset(); - m_PositionedTabs.RemoveAll(); - m_pArabicChar->Release(); - if (m_pUserData != NULL) { - m_pUserData->Release(); - } -} -void CFX_RTFBreak::SetLineBoundary(FX_FLOAT fLineStart, FX_FLOAT fLineEnd) { - if (fLineStart > fLineEnd) - return; - m_iBoundaryStart = FXSYS_round(fLineStart * 20000.0f); - m_iBoundaryEnd = FXSYS_round(fLineEnd * 20000.0f); - m_pCurLine->m_iStart = std::min(m_pCurLine->m_iStart, m_iBoundaryEnd); - m_pCurLine->m_iStart = std::max(m_pCurLine->m_iStart, m_iBoundaryStart); -} -void CFX_RTFBreak::SetLineStartPos(FX_FLOAT fLinePos) { - int32_t iLinePos = FXSYS_round(fLinePos * 20000.0f); - iLinePos = std::min(iLinePos, m_iBoundaryEnd); - iLinePos = std::max(iLinePos, m_iBoundaryStart); - m_pCurLine->m_iStart = iLinePos; -} -void CFX_RTFBreak::SetLayoutStyles(FX_DWORD dwLayoutStyles) { - if (m_dwLayoutStyles == dwLayoutStyles) { - return; - } - SetBreakStatus(); - m_dwLayoutStyles = dwLayoutStyles; - m_bPagination = (m_dwLayoutStyles & FX_RTFLAYOUTSTYLE_Pagination) != 0; - m_bVertical = (m_dwLayoutStyles & FX_RTFLAYOUTSTYLE_VerticalChars) != 0; - m_bSingleLine = (m_dwLayoutStyles & FX_RTFLAYOUTSTYLE_SingleLine) != 0; - m_bCharCode = (m_dwLayoutStyles & FX_RTFLAYOUTSTYLE_MBCSCode) != 0; - m_iLineRotation = GetLineRotation(m_dwLayoutStyles); - m_iRotation = m_iLineRotation + m_iCharRotation; - m_iRotation %= 4; -} -void CFX_RTFBreak::SetFont(IFX_Font* pFont) { - if (pFont == NULL) { - return; - } - if (m_pFont == pFont) { - return; - } - SetBreakStatus(); - m_pFont = pFont; - m_iDefChar = 0; - if (m_pFont != NULL) { - m_iFontHeight = m_iFontSize; - if (m_wDefChar != 0xFEFF) { - m_pFont->GetCharWidth(m_wDefChar, m_iDefChar, FALSE); - m_iDefChar *= m_iFontSize; - } - } -} -void CFX_RTFBreak::SetFontSize(FX_FLOAT fFontSize) { - int32_t iFontSize = FXSYS_round(fFontSize * 20.0f); - if (m_iFontSize == iFontSize) { - return; - } - SetBreakStatus(); - m_iFontSize = iFontSize; - m_iDefChar = 0; - if (m_pFont != NULL) { - m_iFontHeight = m_iFontSize; - if (m_wDefChar != 0xFEFF) { - m_pFont->GetCharWidth(m_wDefChar, m_iDefChar, FALSE); - m_iDefChar *= m_iFontSize; - } - } -} -void CFX_RTFBreak::SetTabWidth(FX_FLOAT fTabWidth) { - m_iTabWidth = FXSYS_round(fTabWidth * 20000.0f); -} -void CFX_RTFBreak::AddPositionedTab(FX_FLOAT fTabPos) { - int32_t iLineEnd = m_iBoundaryEnd; - int32_t iTabPos = FXSYS_round(fTabPos * 20000.0f) + m_iBoundaryStart; - if (iTabPos > iLineEnd) { - iTabPos = iLineEnd; - } - if (m_PositionedTabs.Find(iTabPos, 0) > -1) { - return; - } - int32_t iCount = m_PositionedTabs.GetSize(); - int32_t iFind = 0; - for (; iFind < iCount; iFind++) { - if (m_PositionedTabs[iFind] > iTabPos) { - break; - } - } - m_PositionedTabs.InsertAt(iFind, iTabPos); - if (m_dwPolicies & FX_RTFBREAKPOLICY_OrphanPositionedTab) { - m_bOrphanLine = GetLastPositionedTab() >= iLineEnd; - } else { - m_bOrphanLine = FALSE; - } -} -void CFX_RTFBreak::SetPositionedTabs(const CFX_FloatArray& tabs) { - m_PositionedTabs.RemoveAll(); - int32_t iCount = tabs.GetSize(); - m_PositionedTabs.SetSize(iCount); - int32_t iLineEnd = m_iBoundaryEnd; - int32_t iTabPos; - for (int32_t i = 0; i < iCount; i++) { - iTabPos = FXSYS_round(tabs[i] * 20000.0f) + m_iBoundaryStart; - if (iTabPos > iLineEnd) { - iTabPos = iLineEnd; - } - m_PositionedTabs[i] = iTabPos; - } - if (m_dwPolicies & FX_RTFBREAKPOLICY_OrphanPositionedTab) { - m_bOrphanLine = GetLastPositionedTab() >= iLineEnd; - } else { - m_bOrphanLine = FALSE; - } -} -void CFX_RTFBreak::ClearPositionedTabs() { - m_PositionedTabs.RemoveAll(); - m_bOrphanLine = FALSE; -} -void CFX_RTFBreak::SetDefaultChar(FX_WCHAR wch) { - m_wDefChar = wch; - m_iDefChar = 0; - if (m_wDefChar != 0xFEFF && m_pFont != NULL) { - m_pFont->GetCharWidth(m_wDefChar, m_iDefChar, FALSE); - if (m_iDefChar < 0) { - m_iDefChar = 0; - } else { - m_iDefChar *= m_iFontSize; - } - } -} -void CFX_RTFBreak::SetLineBreakChar(FX_WCHAR wch) { - if (wch != L'\r' && wch != L'\n') { - return; - } - m_wLineBreakChar = wch; -} -void CFX_RTFBreak::SetLineBreakTolerance(FX_FLOAT fTolerance) { - m_iTolerance = FXSYS_round(fTolerance * 20000.0f); -} -void CFX_RTFBreak::SetHorizontalScale(int32_t iScale) { - if (iScale < 0) { - iScale = 0; - } - if (m_iHorizontalScale == iScale) { - return; - } - SetBreakStatus(); - m_iHorizontalScale = iScale; -} -void CFX_RTFBreak::SetVerticalScale(int32_t iScale) { - if (iScale < 0) { - iScale = 0; - } - if (m_iVerticalScale == iScale) { - return; - } - SetBreakStatus(); - m_iVerticalScale = iScale; -} -void CFX_RTFBreak::SetCharRotation(int32_t iCharRotation) { - if (iCharRotation < 0) { - iCharRotation += (-iCharRotation / 4 + 1) * 4; - } else if (iCharRotation > 3) { - iCharRotation -= (iCharRotation / 4) * 4; - } - if (m_iCharRotation == iCharRotation) { - return; - } - SetBreakStatus(); - m_iCharRotation = iCharRotation; - m_iRotation = m_iLineRotation + m_iCharRotation; - m_iRotation %= 4; -} -void CFX_RTFBreak::SetCharSpace(FX_FLOAT fCharSpace) { - m_iCharSpace = FXSYS_round(fCharSpace * 20000.0f); -} -void CFX_RTFBreak::SetWordSpace(FX_BOOL bDefault, FX_FLOAT fWordSpace) { - m_bWordSpace = !bDefault; - m_iWordSpace = FXSYS_round(fWordSpace * 20000.0f); -} -void CFX_RTFBreak::SetReadingOrder(FX_BOOL bRTL) { - m_bRTL = bRTL; -} -void CFX_RTFBreak::SetAlignment(int32_t iAlignment) { - FXSYS_assert(iAlignment >= FX_RTFLINEALIGNMENT_Left && - iAlignment <= FX_RTFLINEALIGNMENT_Distributed); - m_iAlignment = iAlignment; -} -void CFX_RTFBreak::SetUserData(IFX_Unknown* pUserData) { - if (m_pUserData == pUserData) { - return; - } - SetBreakStatus(); - if (m_pUserData != NULL) { - m_pUserData->Release(); - } - m_pUserData = pUserData; - if (m_pUserData != NULL) { - m_pUserData->AddRef(); - } -} -static const int32_t gs_FX_RTFLineRotations[8] = {0, 3, 1, 0, 2, 1, 3, 2}; -int32_t CFX_RTFBreak::GetLineRotation(FX_DWORD dwStyles) const { - return gs_FX_RTFLineRotations[(dwStyles & 0x0E) >> 1]; -} -void CFX_RTFBreak::SetBreakStatus() { - m_dwIdentity++; - int32_t iCount = m_pCurLine->CountChars(); - if (iCount < 1) { - return; - } - CFX_RTFChar& tc = m_pCurLine->GetChar(iCount - 1); - if (tc.m_dwStatus == 0) { - tc.m_dwStatus = FX_RTFBREAK_PieceBreak; - } -} -CFX_RTFChar* CFX_RTFBreak::GetLastChar(int32_t index) const { - CFX_RTFCharArray& tca = m_pCurLine->m_LineChars; - int32_t iCount = tca.GetSize(); - if (index < 0 || index >= iCount) { - return NULL; - } - CFX_RTFChar* pTC; - int32_t iStart = iCount - 1; - while (iStart > -1) { - pTC = tca.GetDataPtr(iStart--); - if (pTC->m_iCharWidth >= 0 || - pTC->GetCharType() != FX_CHARTYPE_Combination) { - if (--index < 0) { - return pTC; - } - } - } - return NULL; -} -CFX_RTFLine* CFX_RTFBreak::GetRTFLine(FX_BOOL bReady) const { - if (bReady) { - if (m_iReady == 1) { - return (CFX_RTFLine*)&m_RTFLine1; - } else if (m_iReady == 2) { - return (CFX_RTFLine*)&m_RTFLine2; - } else { - return NULL; - } - } - FXSYS_assert(m_pCurLine != NULL); - return m_pCurLine; -} -CFX_RTFPieceArray* CFX_RTFBreak::GetRTFPieces(FX_BOOL bReady) const { - CFX_RTFLine* pRTFLine = GetRTFLine(bReady); - if (pRTFLine == NULL) { - return NULL; - } - return &pRTFLine->m_LinePieces; -} -inline FX_DWORD CFX_RTFBreak::GetUnifiedCharType(FX_DWORD dwType) const { - return dwType >= FX_CHARTYPE_ArabicAlef ? FX_CHARTYPE_Arabic : dwType; -} -int32_t CFX_RTFBreak::GetLastPositionedTab() const { - int32_t iCount = m_PositionedTabs.GetSize(); - if (iCount < 1) { - return m_iBoundaryStart; - } - return m_PositionedTabs[iCount - 1]; -} -FX_BOOL CFX_RTFBreak::GetPositionedTab(int32_t& iTabPos) const { - int32_t iCount = m_PositionedTabs.GetSize(); - for (int32_t i = 0; i < iCount; i++) { - if (m_PositionedTabs[i] > iTabPos) { - iTabPos = m_PositionedTabs[i]; - return TRUE; - } - } - return FALSE; -} -typedef FX_DWORD (CFX_RTFBreak::*FX_RTFBreak_LPFAppendChar)( - CFX_RTFChar* pCurChar, - int32_t iRotation); -static const FX_RTFBreak_LPFAppendChar g_FX_RTFBreak_lpfAppendChar[16] = { - &CFX_RTFBreak::AppendChar_Others, &CFX_RTFBreak::AppendChar_Tab, - &CFX_RTFBreak::AppendChar_Others, &CFX_RTFBreak::AppendChar_Control, - &CFX_RTFBreak::AppendChar_Combination, &CFX_RTFBreak::AppendChar_Others, - &CFX_RTFBreak::AppendChar_Others, &CFX_RTFBreak::AppendChar_Arabic, - &CFX_RTFBreak::AppendChar_Arabic, &CFX_RTFBreak::AppendChar_Arabic, - &CFX_RTFBreak::AppendChar_Arabic, &CFX_RTFBreak::AppendChar_Arabic, - &CFX_RTFBreak::AppendChar_Arabic, &CFX_RTFBreak::AppendChar_Others, - &CFX_RTFBreak::AppendChar_Others, &CFX_RTFBreak::AppendChar_Others, -}; -FX_DWORD CFX_RTFBreak::AppendChar(FX_WCHAR wch) { - FXSYS_assert(m_pFont != NULL && m_pCurLine != NULL && m_pArabicChar != NULL); - if (m_bCharCode) { - return AppendChar_CharCode(wch); - } - FX_DWORD dwProps = kTextLayoutCodeProperties[(FX_WORD)wch]; - FX_DWORD dwType = (dwProps & FX_CHARTYPEBITSMASK); - CFX_RTFCharArray& tca = m_pCurLine->m_LineChars; - CFX_RTFChar* pCurChar = tca.AddSpace(); - pCurChar->m_dwStatus = 0; - pCurChar->m_wCharCode = wch; - pCurChar->m_dwCharProps = dwProps; - pCurChar->m_dwCharStyles = 0; - pCurChar->m_dwLayoutStyles = 0; - pCurChar->m_iFontSize = m_iFontSize; - pCurChar->m_iFontHeight = m_iFontHeight; - pCurChar->m_iHorizontalScale = m_iHorizontalScale; - pCurChar->m_iVertialScale = m_iVerticalScale; - pCurChar->m_nRotation = m_iCharRotation; - pCurChar->m_iCharWidth = 0; - pCurChar->m_dwIdentity = m_dwIdentity; - if (m_pUserData != NULL) { - m_pUserData->AddRef(); - } - pCurChar->m_pUserData = m_pUserData; - FX_DWORD dwRet1 = FX_RTFBREAK_None; - if (dwType != FX_CHARTYPE_Combination && - GetUnifiedCharType(m_dwCharType) != GetUnifiedCharType(dwType)) { - if (!m_bSingleLine && !m_bOrphanLine && m_dwCharType > 0 && - m_pCurLine->GetLineEnd() > m_iBoundaryEnd + m_iTolerance) { - if (m_dwCharType != FX_CHARTYPE_Space || dwType != FX_CHARTYPE_Control) { - dwRet1 = EndBreak(FX_RTFBREAK_LineBreak); - int32_t iCount = m_pCurLine->CountChars(); - if (iCount > 0) { - pCurChar = m_pCurLine->m_LineChars.GetDataPtr(iCount - 1); - } - } - } - } - int32_t iRotation = m_iRotation; - if (m_bVertical && (dwProps & 0x8000) != 0) { - iRotation = (iRotation + 1) % 4; - } - FX_DWORD dwRet2 = - (this->*g_FX_RTFBreak_lpfAppendChar[dwType >> FX_CHARTYPEBITS])( - pCurChar, iRotation); - m_dwCharType = dwType; - return std::max(dwRet1, dwRet2); -} -FX_DWORD CFX_RTFBreak::AppendChar_CharCode(FX_WCHAR wch) { - FXSYS_assert(m_pFont != NULL && m_pCurLine != NULL); - FXSYS_assert(m_bCharCode); - m_pCurLine->m_iMBCSChars++; - CFX_RTFCharArray& tca = m_pCurLine->m_LineChars; - CFX_RTFChar* pCurChar = tca.AddSpace(); - pCurChar->m_dwStatus = 0; - pCurChar->m_wCharCode = wch; - pCurChar->m_dwCharProps = 0; - pCurChar->m_dwCharStyles = 0; - pCurChar->m_dwLayoutStyles = m_dwLayoutStyles; - pCurChar->m_iFontSize = m_iFontSize; - pCurChar->m_iFontHeight = m_iFontHeight; - pCurChar->m_iHorizontalScale = m_iHorizontalScale; - pCurChar->m_iVertialScale = m_iVerticalScale; - pCurChar->m_nRotation = m_iCharRotation; - pCurChar->m_iCharWidth = 0; - pCurChar->m_dwIdentity = m_dwIdentity; - if (m_pUserData != NULL) { - m_pUserData->AddRef(); - } - pCurChar->m_pUserData = m_pUserData; - int32_t iCharWidth = 0; - if (m_bVertical != FX_IsOdd(m_iRotation)) { - iCharWidth = 1000; - } else { - if (!m_pFont->GetCharWidth(wch, iCharWidth, TRUE)) { - iCharWidth = m_iDefChar; - } - } - iCharWidth *= m_iFontSize; - iCharWidth = iCharWidth * m_iHorizontalScale / 100; - iCharWidth += m_iCharSpace; - pCurChar->m_iCharWidth = iCharWidth; - m_pCurLine->m_iWidth += iCharWidth; - m_dwCharType = 0; - if (!m_bSingleLine && - m_pCurLine->GetLineEnd() > m_iBoundaryEnd + m_iTolerance) { - return EndBreak(FX_RTFBREAK_LineBreak); - } - return FX_RTFBREAK_None; -} -FX_DWORD CFX_RTFBreak::AppendChar_Combination(CFX_RTFChar* pCurChar, - int32_t iRotation) { - int32_t iCharWidth = 0; - if (m_bVertical != FX_IsOdd(iRotation)) { - iCharWidth = 1000; - } else { - if (!m_pFont->GetCharWidth(pCurChar->m_wCharCode, iCharWidth, - m_bCharCode)) { - iCharWidth = 0; - } - } - iCharWidth *= m_iFontSize; - iCharWidth = iCharWidth * m_iHorizontalScale / 100; - CFX_RTFChar* pLastChar = GetLastChar(0); - if (pLastChar != NULL && pLastChar->GetCharType() > FX_CHARTYPE_Combination) { - iCharWidth = -iCharWidth; - } else { - m_dwCharType = FX_CHARTYPE_Combination; - } - pCurChar->m_iCharWidth = iCharWidth; - if (iCharWidth > 0) { - m_pCurLine->m_iWidth += iCharWidth; - } - return FX_RTFBREAK_None; -} -FX_DWORD CFX_RTFBreak::AppendChar_Tab(CFX_RTFChar* pCurChar, - int32_t iRotation) { - if (m_dwLayoutStyles & FX_RTFLAYOUTSTYLE_ExpandTab) { - FX_BOOL bBreak = FALSE; - if ((m_dwPolicies & FX_RTFBREAKPOLICY_TabBreak) != 0) { - bBreak = (m_pCurLine->GetLineEnd() > m_iBoundaryEnd + m_iTolerance); - } - int32_t& iLineWidth = m_pCurLine->m_iWidth; - int32_t iCharWidth = iLineWidth; - if (GetPositionedTab(iCharWidth)) { - iCharWidth -= iLineWidth; - } else { - iCharWidth = m_iTabWidth * (iLineWidth / m_iTabWidth + 1) - iLineWidth; - } - pCurChar->m_iCharWidth = iCharWidth; - iLineWidth += iCharWidth; - if (!m_bSingleLine && !m_bOrphanLine && bBreak) { - return EndBreak(FX_RTFBREAK_LineBreak); - } - } - return FX_RTFBREAK_None; -} -FX_DWORD CFX_RTFBreak::AppendChar_Control(CFX_RTFChar* pCurChar, - int32_t iRotation) { - FX_DWORD dwRet2 = FX_RTFBREAK_None; - if (!m_bSingleLine) { - switch (pCurChar->m_wCharCode) { - case L'\v': - case 0x2028: - dwRet2 = FX_RTFBREAK_LineBreak; - break; - case L'\f': - dwRet2 = FX_RTFBREAK_PageBreak; - break; - case 0x2029: - dwRet2 = FX_RTFBREAK_ParagraphBreak; - break; - default: - if (pCurChar->m_wCharCode == m_wLineBreakChar) { - dwRet2 = FX_RTFBREAK_ParagraphBreak; - } - break; - } - if (dwRet2 != FX_RTFBREAK_None) { - dwRet2 = EndBreak(dwRet2); - } - } - return dwRet2; -} -FX_DWORD CFX_RTFBreak::AppendChar_Arabic(CFX_RTFChar* pCurChar, - int32_t iRotation) { - CFX_RTFChar* pLastChar = NULL; - int32_t& iLineWidth = m_pCurLine->m_iWidth; - int32_t iCharWidth = 0; - FX_WCHAR wForm; - FX_BOOL bAlef = FALSE; - if (m_dwCharType >= FX_CHARTYPE_ArabicAlef && - m_dwCharType <= FX_CHARTYPE_ArabicDistortion) { - pLastChar = GetLastChar(1); - if (pLastChar != NULL) { - iLineWidth -= pLastChar->m_iCharWidth; - CFX_RTFChar* pPrevChar = GetLastChar(2); - wForm = m_pArabicChar->GetFormChar(pLastChar, pPrevChar, pCurChar); - bAlef = (wForm == 0xFEFF && - pLastChar->GetCharType() == FX_CHARTYPE_ArabicAlef); - int32_t iLastRotation = pLastChar->m_nRotation + m_iLineRotation; - if (m_bVertical && (pLastChar->m_dwCharProps & 0x8000) != 0) { - iLastRotation++; - } - if (m_bVertical != FX_IsOdd(iLastRotation)) { - iCharWidth = 1000; - } else { - if (!m_pFont->GetCharWidth(wForm, iCharWidth, m_bCharCode)) { - if (!m_pFont->GetCharWidth(pLastChar->m_wCharCode, iCharWidth, - m_bCharCode)) { - iCharWidth = m_iDefChar; - } - } - } - iCharWidth *= m_iFontSize; - iCharWidth = iCharWidth * m_iHorizontalScale / 100; - pLastChar->m_iCharWidth = iCharWidth; - iLineWidth += iCharWidth; - iCharWidth = 0; - } - } - wForm = - m_pArabicChar->GetFormChar(pCurChar, (bAlef ? NULL : pLastChar), NULL); - if (m_bVertical != FX_IsOdd(iRotation)) { - iCharWidth = 1000; - } else if (!m_pFont->GetCharWidth(wForm, iCharWidth, m_bCharCode) && - !m_pFont->GetCharWidth(pCurChar->m_wCharCode, iCharWidth, - m_bCharCode)) { - iCharWidth = m_iDefChar; - } - - iCharWidth *= m_iFontSize; - iCharWidth = iCharWidth * m_iHorizontalScale / 100; - pCurChar->m_iCharWidth = iCharWidth; - iLineWidth += iCharWidth; - m_pCurLine->m_iArabicChars++; - if (!m_bSingleLine && !m_bOrphanLine && - m_pCurLine->GetLineEnd() > m_iBoundaryEnd + m_iTolerance) { - return EndBreak(FX_RTFBREAK_LineBreak); - } - return FX_RTFBREAK_None; -} -FX_DWORD CFX_RTFBreak::AppendChar_Others(CFX_RTFChar* pCurChar, - int32_t iRotation) { - FX_DWORD dwType = (pCurChar->m_dwCharProps & FX_CHARTYPEBITSMASK); - FX_WCHAR wForm; - if (dwType == FX_CHARTYPE_Numeric) { - if (m_dwLayoutStyles & FX_RTFLAYOUTSTYLE_ArabicNumber) { - wForm = pCurChar->m_wCharCode + 0x0630; - } else { - wForm = pCurChar->m_wCharCode; - } - } else if (m_bRTL || m_bVertical) { - wForm = FX_GetMirrorChar(pCurChar->m_wCharCode, pCurChar->m_dwCharProps, - m_bRTL, m_bVertical); - } else { - wForm = pCurChar->m_wCharCode; - } - int32_t iCharWidth = 0; - if (m_bVertical != FX_IsOdd(iRotation)) { - iCharWidth = 1000; - } else { - if (!m_pFont->GetCharWidth(wForm, iCharWidth, m_bCharCode)) { - iCharWidth = m_iDefChar; - } - } - iCharWidth *= m_iFontSize; - iCharWidth = iCharWidth * m_iHorizontalScale / 100; - iCharWidth += m_iCharSpace; - if (dwType == FX_CHARTYPE_Space && m_bWordSpace) { - iCharWidth += m_iWordSpace; - } - pCurChar->m_iCharWidth = iCharWidth; - m_pCurLine->m_iWidth += iCharWidth; - FX_BOOL bBreak = (dwType != FX_CHARTYPE_Space || - (m_dwPolicies & FX_RTFBREAKPOLICY_SpaceBreak) != 0); - if (!m_bSingleLine && !m_bOrphanLine && bBreak && - m_pCurLine->GetLineEnd() > m_iBoundaryEnd + m_iTolerance) { - return EndBreak(FX_RTFBREAK_LineBreak); - } - return FX_RTFBREAK_None; -} -FX_DWORD CFX_RTFBreak::EndBreak(FX_DWORD dwStatus) { - FXSYS_assert(dwStatus >= FX_RTFBREAK_PieceBreak && - dwStatus <= FX_RTFBREAK_PageBreak); - m_dwIdentity++; - CFX_RTFPieceArray* pCurPieces = &m_pCurLine->m_LinePieces; - int32_t iCount = pCurPieces->GetSize(); - if (iCount > 0) { - CFX_RTFPiece* pLastPiece = pCurPieces->GetPtrAt(--iCount); - if (dwStatus > FX_RTFBREAK_PieceBreak) { - pLastPiece->m_dwStatus = dwStatus; - } else { - dwStatus = pLastPiece->m_dwStatus; - } - return dwStatus; - } else { - CFX_RTFLine* pLastLine = GetRTFLine(TRUE); - if (pLastLine != NULL) { - pCurPieces = &pLastLine->m_LinePieces; - iCount = pCurPieces->GetSize(); - if (iCount-- > 0) { - CFX_RTFPiece* pLastPiece = pCurPieces->GetPtrAt(iCount); - if (dwStatus > FX_RTFBREAK_PieceBreak) { - pLastPiece->m_dwStatus = dwStatus; - } else { - dwStatus = pLastPiece->m_dwStatus; - } - return dwStatus; - } - return FX_RTFBREAK_None; - } - iCount = m_pCurLine->CountChars(); - if (iCount < 1) { - return FX_RTFBREAK_None; - } - CFX_RTFChar& tc = m_pCurLine->GetChar(iCount - 1); - tc.m_dwStatus = dwStatus; - if (dwStatus <= FX_RTFBREAK_PieceBreak) { - return dwStatus; - } - } - m_iReady = (m_pCurLine == &m_RTFLine1) ? 1 : 2; - CFX_RTFLine* pNextLine = - (m_pCurLine == &m_RTFLine1) ? &m_RTFLine2 : &m_RTFLine1; - FX_BOOL bAllChars = (m_iAlignment > FX_RTFLINEALIGNMENT_Right); - CFX_TPOArray tpos; - if (EndBreak_SplitLine(pNextLine, bAllChars, dwStatus)) { - goto EndBreak_Ret; - } - if (!m_bCharCode) { - EndBreak_BidiLine(tpos, dwStatus); - } - if (!m_bPagination && m_iAlignment > FX_RTFLINEALIGNMENT_Left) { - EndBreak_Alignment(tpos, bAllChars, dwStatus); - } -EndBreak_Ret: - m_pCurLine = pNextLine; - m_pCurLine->m_iStart = m_iBoundaryStart; - CFX_RTFChar* pTC = GetLastChar(0); - m_dwCharType = pTC == NULL ? 0 : pTC->GetCharType(); - return dwStatus; -} -FX_BOOL CFX_RTFBreak::EndBreak_SplitLine(CFX_RTFLine* pNextLine, - FX_BOOL bAllChars, - FX_DWORD dwStatus) { - FX_BOOL bDone = FALSE; - if (!m_bSingleLine && !m_bOrphanLine && - m_pCurLine->GetLineEnd() > m_iBoundaryEnd + m_iTolerance) { - CFX_RTFChar& tc = m_pCurLine->GetChar(m_pCurLine->CountChars() - 1); - switch (tc.GetCharType()) { - case FX_CHARTYPE_Tab: - if ((m_dwPolicies & FX_RTFBREAKPOLICY_TabBreak) != 0) { - SplitTextLine(m_pCurLine, pNextLine, !m_bPagination && bAllChars); - bDone = TRUE; - } - break; - case FX_CHARTYPE_Control: - break; - case FX_CHARTYPE_Space: - if ((m_dwPolicies & FX_RTFBREAKPOLICY_SpaceBreak) != 0) { - SplitTextLine(m_pCurLine, pNextLine, !m_bPagination && bAllChars); - bDone = TRUE; - } - break; - default: - SplitTextLine(m_pCurLine, pNextLine, !m_bPagination && bAllChars); - bDone = TRUE; - break; - } - } - if (m_bPagination || m_pCurLine->m_iMBCSChars > 0) { - const CFX_RTFChar* pCurChars = m_pCurLine->m_LineChars.GetData(); - const CFX_RTFChar* pTC; - CFX_RTFPieceArray* pCurPieces = &m_pCurLine->m_LinePieces; - CFX_RTFPiece tp; - tp.m_pChars = &m_pCurLine->m_LineChars; - FX_BOOL bNew = TRUE; - FX_DWORD dwIdentity = (FX_DWORD)-1; - int32_t iLast = m_pCurLine->CountChars() - 1, j = 0; - for (int32_t i = 0; i <= iLast;) { - pTC = pCurChars + i; - if (bNew) { - tp.m_iStartChar = i; - tp.m_iStartPos += tp.m_iWidth; - tp.m_iWidth = 0; - tp.m_dwStatus = pTC->m_dwStatus; - tp.m_iFontSize = pTC->m_iFontSize; - tp.m_iFontHeight = pTC->m_iFontHeight; - tp.m_iHorizontalScale = pTC->m_iHorizontalScale; - tp.m_iVerticalScale = pTC->m_iVertialScale; - tp.m_dwLayoutStyles = pTC->m_dwLayoutStyles; - dwIdentity = pTC->m_dwIdentity; - tp.m_dwIdentity = dwIdentity; - tp.m_pUserData = pTC->m_pUserData; - j = i; - bNew = FALSE; - } - if (i == iLast || pTC->m_dwStatus != FX_RTFBREAK_None || - pTC->m_dwIdentity != dwIdentity) { - tp.m_iChars = i - j; - if (pTC->m_dwIdentity == dwIdentity) { - tp.m_dwStatus = pTC->m_dwStatus; - tp.m_iWidth += pTC->m_iCharWidth; - tp.m_iChars += 1; - i++; - } - pCurPieces->Add(tp); - bNew = TRUE; - } else { - tp.m_iWidth += pTC->m_iCharWidth; - i++; - } - } - return TRUE; - } - if (bAllChars && !bDone) { - int32_t iEndPos = m_pCurLine->GetLineEnd(); - GetBreakPos(m_pCurLine->m_LineChars, iEndPos, bAllChars, TRUE); - } - return FALSE; -} -void CFX_RTFBreak::EndBreak_BidiLine(CFX_TPOArray& tpos, FX_DWORD dwStatus) { - FX_TPO tpo; - CFX_RTFPiece tp; - CFX_RTFChar* pTC; - int32_t i, j; - CFX_RTFCharArray& chars = m_pCurLine->m_LineChars; - int32_t iCount = m_pCurLine->CountChars(); - FX_BOOL bDone = (!m_bPagination && !m_bCharCode && - (m_pCurLine->m_iArabicChars > 0 || m_bRTL)); - if (bDone) { - int32_t iBidiNum = 0; - for (i = 0; i < iCount; i++) { - pTC = chars.GetDataPtr(i); - pTC->m_iBidiPos = i; - if (pTC->GetCharType() != FX_CHARTYPE_Control) { - iBidiNum = i; - } - if (i == 0) { - pTC->m_iBidiLevel = 1; - } - } - FX_BidiLine(chars, iBidiNum + 1, m_bRTL ? 1 : 0); - } else { - for (i = 0; i < iCount; i++) { - pTC = chars.GetDataPtr(i); - pTC->m_iBidiLevel = 0; - pTC->m_iBidiPos = 0; - pTC->m_iBidiOrder = 0; - } - } - tp.m_dwStatus = FX_RTFBREAK_PieceBreak; - tp.m_iStartPos = m_pCurLine->m_iStart; - tp.m_pChars = &chars; - CFX_RTFPieceArray* pCurPieces = &m_pCurLine->m_LinePieces; - int32_t iBidiLevel = -1, iCharWidth; - FX_DWORD dwIdentity = (FX_DWORD)-1; - i = j = 0; - while (i < iCount) { - pTC = chars.GetDataPtr(i); - if (iBidiLevel < 0) { - iBidiLevel = pTC->m_iBidiLevel; - iCharWidth = pTC->m_iCharWidth; - if (iCharWidth < 1) { - tp.m_iWidth = 0; - } else { - tp.m_iWidth = iCharWidth; - } - tp.m_iBidiLevel = iBidiLevel; - tp.m_iBidiPos = pTC->m_iBidiOrder; - tp.m_iFontSize = pTC->m_iFontSize; - tp.m_iFontHeight = pTC->m_iFontHeight; - tp.m_iHorizontalScale = pTC->m_iHorizontalScale; - tp.m_iVerticalScale = pTC->m_iVertialScale; - dwIdentity = pTC->m_dwIdentity; - tp.m_dwIdentity = dwIdentity; - tp.m_pUserData = pTC->m_pUserData; - tp.m_dwStatus = FX_RTFBREAK_PieceBreak; - i++; - } else if (iBidiLevel != pTC->m_iBidiLevel || - pTC->m_dwIdentity != dwIdentity) { - tp.m_iChars = i - tp.m_iStartChar; - pCurPieces->Add(tp); - tp.m_iStartPos += tp.m_iWidth; - tp.m_iStartChar = i; - tpo.index = j++; - tpo.pos = tp.m_iBidiPos; - tpos.Add(tpo); - iBidiLevel = -1; - } else { - iCharWidth = pTC->m_iCharWidth; - if (iCharWidth > 0) { - tp.m_iWidth += iCharWidth; - } - i++; - } - } - if (i > tp.m_iStartChar) { - tp.m_dwStatus = dwStatus; - tp.m_iChars = i - tp.m_iStartChar; - pCurPieces->Add(tp); - tpo.index = j; - tpo.pos = tp.m_iBidiPos; - tpos.Add(tpo); - } - if (!m_bCharCode) { - j = tpos.GetSize() - 1; - FX_TEXTLAYOUT_PieceSort(tpos, 0, j); - int32_t iStartPos = m_pCurLine->m_iStart; - for (i = 0; i <= j; i++) { - tpo = tpos.GetAt(i); - CFX_RTFPiece& ttp = pCurPieces->GetAt(tpo.index); - ttp.m_iStartPos = iStartPos; - iStartPos += ttp.m_iWidth; - } - } -} -void CFX_RTFBreak::EndBreak_Alignment(CFX_TPOArray& tpos, - FX_BOOL bAllChars, - FX_DWORD dwStatus) { - CFX_RTFPieceArray* pCurPieces = &m_pCurLine->m_LinePieces; - int32_t iNetWidth = m_pCurLine->m_iWidth, iGapChars = 0, iCharWidth; - int32_t iCount = pCurPieces->GetSize(); - FX_BOOL bFind = FALSE; - FX_DWORD dwCharType; - int32_t i, j; - FX_TPO tpo; - for (i = iCount - 1; i > -1; i--) { - tpo = tpos.GetAt(i); - CFX_RTFPiece& ttp = pCurPieces->GetAt(tpo.index); - if (!bFind) { - iNetWidth = ttp.GetEndPos(); - } - FX_BOOL bArabic = FX_IsOdd(ttp.m_iBidiLevel); - j = bArabic ? 0 : ttp.m_iChars - 1; - while (j > -1 && j < ttp.m_iChars) { - const CFX_RTFChar& tc = ttp.GetChar(j); - if (tc.m_nBreakType == FX_LBT_DIRECT_BRK) { - iGapChars++; - } - if (!bFind || !bAllChars) { - dwCharType = tc.GetCharType(); - if (dwCharType == FX_CHARTYPE_Space || - dwCharType == FX_CHARTYPE_Control) { - if (!bFind) { - iCharWidth = tc.m_iCharWidth; - if (bAllChars && iCharWidth > 0) { - iNetWidth -= iCharWidth; - } - } - } else { - bFind = TRUE; - if (!bAllChars) { - break; - } - } - } - j += bArabic ? 1 : -1; - } - if (!bAllChars && bFind) { - break; - } - } - int32_t iOffset = m_iBoundaryEnd - iNetWidth; - int32_t iLowerAlignment = (m_iAlignment & FX_RTFLINEALIGNMENT_LowerMask); - int32_t iHigherAlignment = (m_iAlignment & FX_RTFLINEALIGNMENT_HigherMask); - if (iGapChars > 0 && (iHigherAlignment == FX_RTFLINEALIGNMENT_Distributed || - (iHigherAlignment == FX_RTFLINEALIGNMENT_Justified && - dwStatus != FX_RTFBREAK_ParagraphBreak))) { - int32_t iStart = -1; - for (i = 0; i < iCount; i++) { - tpo = tpos.GetAt(i); - CFX_RTFPiece& ttp = pCurPieces->GetAt(tpo.index); - if (iStart < 0) { - iStart = ttp.m_iStartPos; - } else { - ttp.m_iStartPos = iStart; - } - int32_t k; - for (j = 0; j < ttp.m_iChars; j++) { - CFX_RTFChar& tc = ttp.GetChar(j); - if (tc.m_nBreakType != FX_LBT_DIRECT_BRK || tc.m_iCharWidth < 0) { - continue; - } - k = iOffset / iGapChars; - tc.m_iCharWidth += k; - ttp.m_iWidth += k; - iOffset -= k; - iGapChars--; - if (iGapChars < 1) { - break; - } - } - iStart += ttp.m_iWidth; - } - } else if (iLowerAlignment > FX_RTFLINEALIGNMENT_Left) { - if (iLowerAlignment == FX_RTFLINEALIGNMENT_Center) { - iOffset /= 2; - } - if (iOffset > 0) { - for (i = 0; i < iCount; i++) { - CFX_RTFPiece& ttp = pCurPieces->GetAt(i); - ttp.m_iStartPos += iOffset; - } - } - } -} -int32_t CFX_RTFBreak::GetBreakPos(CFX_RTFCharArray& tca, - int32_t& iEndPos, - FX_BOOL bAllChars, - FX_BOOL bOnlyBrk) { - int32_t iLength = tca.GetSize() - 1; - if (iLength < 1) { - return iLength; - } - int32_t iBreak = -1, iBreakPos = -1, iIndirect = -1, iIndirectPos = -1, - iLast = -1, iLastPos = -1; - if (m_bSingleLine || m_bOrphanLine || iEndPos <= m_iBoundaryEnd) { - if (!bAllChars || m_bCharCode) { - return iLength; - } - iBreak = iLength; - iBreakPos = iEndPos; - } - CFX_RTFChar* pCharArray = tca.GetData(); - if (m_bCharCode) { - const CFX_RTFChar* pChar; - int32_t iCharWidth; - while (iLength > 0) { - if (iEndPos <= m_iBoundaryEnd) { - break; - } - pChar = pCharArray + iLength--; - iCharWidth = pChar->m_iCharWidth; - if (iCharWidth > 0) { - iEndPos -= iCharWidth; - } - } - return iLength; - } - FX_BOOL bSpaceBreak = (m_dwPolicies & FX_RTFBREAKPOLICY_SpaceBreak) != 0; - FX_BOOL bTabBreak = (m_dwPolicies & FX_RTFBREAKPOLICY_TabBreak) != 0; - FX_BOOL bNumberBreak = (m_dwPolicies & FX_RTFBREAKPOLICY_NumberBreak) != 0; - FX_BOOL bInfixBreak = (m_dwPolicies & FX_RTFBREAKPOLICY_InfixBreak) != 0; - FX_LINEBREAKTYPE eType; - FX_DWORD nCodeProp, nCur, nNext; - CFX_RTFChar* pCur = pCharArray + iLength--; - if (bAllChars) { - pCur->m_nBreakType = FX_LBT_UNKNOWN; - } - nCodeProp = pCur->m_dwCharProps; - nNext = nCodeProp & 0x003F; - int32_t iCharWidth = pCur->m_iCharWidth; - if (iCharWidth > 0) { - iEndPos -= iCharWidth; - } - while (iLength >= 0) { - pCur = pCharArray + iLength; - nCodeProp = pCur->m_dwCharProps; - nCur = nCodeProp & 0x003F; - FX_BOOL bNeedBreak = FALSE; - if (nCur == FX_CBP_SP) { - bNeedBreak = !bSpaceBreak; - if (nNext == FX_CBP_SP) { - eType = bSpaceBreak ? FX_LBT_DIRECT_BRK : FX_LBT_PROHIBITED_BRK; - } else { - eType = *((const FX_LINEBREAKTYPE*)gs_FX_LineBreak_PairTable + - (nCur << 5) + nNext); - } - } else if (nCur == FX_CBP_TB) { - bNeedBreak = !bTabBreak; - if (nNext == FX_CBP_TB) { - eType = bTabBreak ? FX_LBT_DIRECT_BRK : FX_LBT_PROHIBITED_BRK; - } else { - eType = *((const FX_LINEBREAKTYPE*)gs_FX_LineBreak_PairTable + - (nCur << 5) + nNext); - } - } else if (bNumberBreak && nCur == FX_CBP_NU && nNext == FX_CBP_NU) { - eType = FX_LBT_DIRECT_BRK; - } else if (bInfixBreak && nCur == FX_CBP_IS && nNext == FX_CBP_IS) { - eType = FX_LBT_DIRECT_BRK; - } else { - if (nNext == FX_CBP_SP) { - eType = FX_LBT_PROHIBITED_BRK; - } else { - eType = *((const FX_LINEBREAKTYPE*)gs_FX_LineBreak_PairTable + - (nCur << 5) + nNext); - } - } - if (bAllChars) { - pCur->m_nBreakType = eType; - } - if (!bOnlyBrk) { - iCharWidth = pCur->m_iCharWidth; - FX_BOOL bBreak = FALSE; - if (nCur == FX_CBP_TB && bTabBreak) { - bBreak = iCharWidth > 0 && iEndPos - iCharWidth <= m_iBoundaryEnd; - } else { - bBreak = iEndPos <= m_iBoundaryEnd; - } - if (m_bSingleLine || m_bOrphanLine || bBreak || bNeedBreak) { - if (eType == FX_LBT_DIRECT_BRK && iBreak < 0) { - iBreak = iLength; - iBreakPos = iEndPos; - if (!bAllChars) { - return iLength; - } - } else if (eType == FX_LBT_INDIRECT_BRK && iIndirect < 0) { - iIndirect = iLength; - iIndirectPos = iEndPos; - } - if (iLast < 0) { - iLast = iLength; - iLastPos = iEndPos; - } - } - if (iCharWidth > 0) { - iEndPos -= iCharWidth; - } - } - nNext = nCodeProp & 0x003F; - iLength--; - } - if (bOnlyBrk) { - return 0; - } - if (iBreak > -1) { - iEndPos = iBreakPos; - return iBreak; - } - if (iIndirect > -1) { - iEndPos = iIndirectPos; - return iIndirect; - } - if (iLast > -1) { - iEndPos = iLastPos; - return iLast; - } - return 0; -} -void CFX_RTFBreak::SplitTextLine(CFX_RTFLine* pCurLine, - CFX_RTFLine* pNextLine, - FX_BOOL bAllChars) { - FXSYS_assert(pCurLine != NULL && pNextLine != NULL); - int32_t iCount = pCurLine->CountChars(); - if (iCount < 2) { - return; - } - int32_t iEndPos = pCurLine->GetLineEnd(); - CFX_RTFCharArray& curChars = pCurLine->m_LineChars; - int32_t iCharPos = GetBreakPos(curChars, iEndPos, bAllChars, FALSE); - if (iCharPos < 0) { - iCharPos = 0; - } - iCharPos++; - if (iCharPos >= iCount) { - pNextLine->RemoveAll(TRUE); - CFX_Char* pTC = curChars.GetDataPtr(iCharPos - 1); - pTC->m_nBreakType = FX_LBT_UNKNOWN; - return; - } - CFX_RTFCharArray& nextChars = pNextLine->m_LineChars; - int cur_size = curChars.GetSize(); - nextChars.SetSize(cur_size - iCharPos); - FXSYS_memcpy(nextChars.GetData(), curChars.GetDataPtr(iCharPos), - (cur_size - iCharPos) * sizeof(CFX_RTFChar)); - iCount -= iCharPos; - cur_size = curChars.GetSize(); - curChars.RemoveAt(cur_size - iCount, iCount); - pNextLine->m_iStart = pCurLine->m_iStart; - pNextLine->m_iWidth = pCurLine->GetLineEnd() - iEndPos; - pCurLine->m_iWidth = iEndPos; - CFX_RTFChar* tc = curChars.GetDataPtr(iCharPos - 1); - tc->m_nBreakType = FX_LBT_UNKNOWN; - iCount = nextChars.GetSize(); - CFX_RTFChar* pNextChars = nextChars.GetData(); - for (int32_t i = 0; i < iCount; i++) { - CFX_RTFChar* tc = pNextChars + i; - if (tc->GetCharType() >= FX_CHARTYPE_ArabicAlef) { - pCurLine->m_iArabicChars--; - pNextLine->m_iArabicChars++; - } - if (tc->m_dwLayoutStyles & FX_RTFLAYOUTSTYLE_MBCSCode) { - pCurLine->m_iMBCSChars--; - pNextLine->m_iMBCSChars++; - } - tc->m_dwStatus = 0; - } -} -int32_t CFX_RTFBreak::CountBreakPieces() const { - CFX_RTFPieceArray* pRTFPieces = GetRTFPieces(TRUE); - if (pRTFPieces == NULL) { - return 0; - } - return pRTFPieces->GetSize(); -} -const CFX_RTFPiece* CFX_RTFBreak::GetBreakPiece(int32_t index) const { - CFX_RTFPieceArray* pRTFPieces = GetRTFPieces(TRUE); - if (pRTFPieces == NULL) { - return NULL; - } - if (index < 0 || index >= pRTFPieces->GetSize()) { - return NULL; - } - return pRTFPieces->GetPtrAt(index); -} -void CFX_RTFBreak::GetLineRect(CFX_RectF& rect) const { - rect.top = 0; - CFX_RTFLine* pRTFLine = GetRTFLine(TRUE); - if (pRTFLine == NULL) { - rect.left = ((FX_FLOAT)m_iBoundaryStart) / 20000.0f; - rect.width = rect.height = 0; - return; - } - rect.left = ((FX_FLOAT)pRTFLine->m_iStart) / 20000.0f; - rect.width = ((FX_FLOAT)pRTFLine->m_iWidth) / 20000.0f; - CFX_RTFPieceArray& rtfPieces = pRTFLine->m_LinePieces; - int32_t iCount = rtfPieces.GetSize(); - if (iCount < 1) { - rect.width = 0; - return; - } - CFX_RTFPiece* pBreakPiece; - int32_t iLineHeight = 0, iMax; - for (int32_t i = 0; i < iCount; i++) { - pBreakPiece = rtfPieces.GetPtrAt(i); - int32_t iFontHeight = FXSYS_round(pBreakPiece->m_iFontHeight * - pBreakPiece->m_iVerticalScale / 100.0f); - iMax = std::max(pBreakPiece->m_iFontSize, iFontHeight); - if (i == 0) { - iLineHeight = iMax; - } else if (iLineHeight < iMax) { - iLineHeight = iMax; - } - } - rect.height = ((FX_FLOAT)iLineHeight) / 20.0f; -} -void CFX_RTFBreak::ClearBreakPieces() { - CFX_RTFLine* pRTFLine = GetRTFLine(TRUE); - if (pRTFLine != NULL) { - pRTFLine->RemoveAll(TRUE); - } - m_iReady = 0; -} -void CFX_RTFBreak::Reset() { - m_dwCharType = 0; - m_RTFLine1.RemoveAll(TRUE); - m_RTFLine2.RemoveAll(TRUE); -} -int32_t CFX_RTFBreak::GetDisplayPos(const FX_RTFTEXTOBJ* pText, - FXTEXT_CHARPOS* pCharPos, - FX_BOOL bCharCode, - CFX_WideString* pWSForms, - FX_AdjustCharDisplayPos pAdjustPos) const { - if (pText == NULL || pText->iLength < 1) { - return 0; - } - FXSYS_assert(pText->pStr != NULL && pText->pWidths != NULL && - pText->pFont != NULL && pText->pRect != NULL); - const FX_WCHAR* pStr = pText->pStr; - int32_t* pWidths = pText->pWidths; - int32_t iLength = pText->iLength - 1; - IFX_Font* pFont = pText->pFont; - FX_DWORD dwStyles = pText->dwLayoutStyles; - CFX_RectF rtText(*pText->pRect); - FX_BOOL bRTLPiece = FX_IsOdd(pText->iBidiLevel); - FX_FLOAT fFontSize = pText->fFontSize; - int32_t iFontSize = FXSYS_round(fFontSize * 20.0f); - int32_t iAscent = pFont->GetAscent(); - int32_t iDescent = pFont->GetDescent(); - int32_t iMaxHeight = iAscent - iDescent; - FX_FLOAT fFontHeight = fFontSize; - FX_FLOAT fAscent = fFontHeight * (FX_FLOAT)iAscent / (FX_FLOAT)iMaxHeight; - FX_FLOAT fDescent = fFontHeight * (FX_FLOAT)iDescent / (FX_FLOAT)iMaxHeight; - FX_BOOL bVerticalDoc = (dwStyles & FX_RTFLAYOUTSTYLE_VerticalLayout) != 0; - FX_BOOL bVerticalChar = (dwStyles & FX_RTFLAYOUTSTYLE_VerticalChars) != 0; - FX_BOOL bArabicNumber = (dwStyles & FX_RTFLAYOUTSTYLE_ArabicNumber) != 0; - FX_BOOL bMBCSCode = (dwStyles & FX_RTFLAYOUTSTYLE_MBCSCode) != 0; - int32_t iRotation = GetLineRotation(dwStyles) + pText->iCharRotation; - int32_t iCharRotation; - FX_WCHAR wch, wPrev = 0xFEFF, wNext, wForm; - int32_t iWidth, iCharWidth, iCharHeight; - FX_FLOAT fX, fY, fCharWidth, fCharHeight; - int32_t iHorScale = pText->iHorizontalScale; - int32_t iVerScale = pText->iVerticalScale; - FX_BOOL bEmptyChar; - FX_DWORD dwProps, dwCharType; - fX = rtText.left; - fY = rtText.top; - if (bVerticalDoc) { - fX += (rtText.width - fFontSize) / 2.0f; - if (bRTLPiece) { - fY = rtText.bottom(); - } - } else { - if (bRTLPiece) { - fX = rtText.right(); - } - fY += fAscent; - } - int32_t iCount = 0; - for (int32_t i = 0; i <= iLength; i++) { - wch = *pStr++; - iWidth = *pWidths++; - if (!bMBCSCode) { - dwProps = FX_GetUnicodeProperties(wch); - dwCharType = (dwProps & FX_CHARTYPEBITSMASK); - if (dwCharType == FX_CHARTYPE_ArabicAlef && iWidth == 0) { - wPrev = 0xFEFF; - continue; - } - } else { - dwProps = 0; - dwCharType = 0; - } - if (iWidth != 0) { - iCharWidth = iWidth; - if (iCharWidth < 0) { - iCharWidth = -iCharWidth; - } - if (!bMBCSCode) { - bEmptyChar = (dwCharType >= FX_CHARTYPE_Tab && - dwCharType <= FX_CHARTYPE_Control); - } else { - bEmptyChar = FALSE; - } - if (!bEmptyChar) { - iCount++; - } - if (pCharPos != NULL) { - iCharWidth /= iFontSize; - wForm = wch; - if (!bMBCSCode) { - if (dwCharType >= FX_CHARTYPE_ArabicAlef) { - if (i < iLength) { - wNext = *pStr; - if (*pWidths < 0) { - if (i + 1 < iLength) { - wNext = pStr[1]; - } - } - } else { - wNext = 0xFEFF; - } - wForm = m_pArabicChar->GetFormChar(wch, wPrev, wNext); - } else if (bRTLPiece || bVerticalChar) { - wForm = FX_GetMirrorChar(wch, dwProps, bRTLPiece, bVerticalChar); - } else if (dwCharType == FX_CHARTYPE_Numeric && bArabicNumber) { - wForm = wch + 0x0630; - } - dwProps = FX_GetUnicodeProperties(wForm); - } - iCharRotation = iRotation; - if (!bMBCSCode && bVerticalChar && (dwProps & 0x8000) != 0) { - iCharRotation++; - iCharRotation %= 4; - } - if (!bEmptyChar) { - if (bCharCode) { - pCharPos->m_GlyphIndex = wch; - } else { - pCharPos->m_GlyphIndex = pFont->GetGlyphIndex(wForm, bMBCSCode); - if (pCharPos->m_GlyphIndex == 0xFFFF) { - pCharPos->m_GlyphIndex = pFont->GetGlyphIndex(wch, bMBCSCode); - } - } - pCharPos->m_ExtGID = pCharPos->m_GlyphIndex; - pCharPos->m_FontCharWidth = iCharWidth; - if (pWSForms) { - *pWSForms += wForm; - } - } - if (bVerticalDoc) { - iCharHeight = iCharWidth; - iCharWidth = 1000; - } else { - iCharHeight = 1000; - } - fCharWidth = fFontSize * iCharWidth / 1000.0f; - fCharHeight = fFontSize * iCharHeight / 1000.0f; - if (!bMBCSCode && bRTLPiece && dwCharType != FX_CHARTYPE_Combination) { - if (bVerticalDoc) { - fY -= fCharHeight; - } else { - fX -= fCharWidth; - } - } - if (!bEmptyChar) { - CFX_PointF ptOffset; - FX_BOOL bAdjusted = FALSE; - if (pAdjustPos) { - bAdjusted = pAdjustPos(wForm, bMBCSCode, pFont, fFontSize, - bVerticalChar, ptOffset); - } - if (!pAdjustPos && bVerticalChar && (dwProps & 0x00010000) != 0) { - CFX_Rect rtBBox; - rtBBox.Reset(); - if (pFont->GetCharBBox(wForm, rtBBox, bMBCSCode)) { - ptOffset.x = fFontSize * (850 - rtBBox.right()) / 1000.0f; - ptOffset.y = fFontSize * (1000 - rtBBox.height) / 2000.0f; - } - } - pCharPos->m_OriginX = fX + ptOffset.x; - pCharPos->m_OriginY = fY - ptOffset.y; - } - if (!bRTLPiece && dwCharType != FX_CHARTYPE_Combination) { - if (bVerticalDoc) { - fY += fCharHeight; - } else { - fX += fCharWidth; - } - } - if (!bEmptyChar) { - pCharPos->m_bGlyphAdjust = TRUE; - if (bVerticalDoc) { - if (iCharRotation == 0) { - pCharPos->m_AdjustMatrix[0] = -1; - pCharPos->m_AdjustMatrix[1] = 0; - pCharPos->m_AdjustMatrix[2] = 0; - pCharPos->m_AdjustMatrix[3] = 1; - pCharPos->m_OriginY += fAscent * iVerScale / 100.0f; - } else if (iCharRotation == 1) { - pCharPos->m_AdjustMatrix[0] = 0; - pCharPos->m_AdjustMatrix[1] = -1; - pCharPos->m_AdjustMatrix[2] = -1; - pCharPos->m_AdjustMatrix[3] = 0; - pCharPos->m_OriginX -= - fDescent + fAscent * iVerScale / 100.0f - fAscent; - } else if (iCharRotation == 2) { - pCharPos->m_AdjustMatrix[0] = 1; - pCharPos->m_AdjustMatrix[1] = 0; - pCharPos->m_AdjustMatrix[2] = 0; - pCharPos->m_AdjustMatrix[3] = -1; - pCharPos->m_OriginX += fCharWidth; - pCharPos->m_OriginY += fAscent; - } else { - pCharPos->m_AdjustMatrix[0] = 0; - pCharPos->m_AdjustMatrix[1] = 1; - pCharPos->m_AdjustMatrix[2] = 1; - pCharPos->m_AdjustMatrix[3] = 0; - pCharPos->m_OriginX += fAscent; - pCharPos->m_OriginY += fCharWidth; - } - } else { - if (iCharRotation == 0) { - pCharPos->m_AdjustMatrix[0] = -1; - pCharPos->m_AdjustMatrix[1] = 0; - pCharPos->m_AdjustMatrix[2] = 0; - pCharPos->m_AdjustMatrix[3] = 1; - pCharPos->m_OriginY += fAscent * iVerScale / 100.0f - fAscent; - } else if (iCharRotation == 1) { - pCharPos->m_AdjustMatrix[0] = 0; - pCharPos->m_AdjustMatrix[1] = -1; - pCharPos->m_AdjustMatrix[2] = -1; - pCharPos->m_AdjustMatrix[3] = 0; - pCharPos->m_OriginX -= fDescent; - pCharPos->m_OriginY -= fAscent + fDescent; - } else if (iCharRotation == 2) { - pCharPos->m_AdjustMatrix[0] = 1; - pCharPos->m_AdjustMatrix[1] = 0; - pCharPos->m_AdjustMatrix[2] = 0; - pCharPos->m_AdjustMatrix[3] = -1; - pCharPos->m_OriginX += fCharWidth; - pCharPos->m_OriginY -= fAscent; - } else { - pCharPos->m_AdjustMatrix[0] = 0; - pCharPos->m_AdjustMatrix[1] = 1; - pCharPos->m_AdjustMatrix[2] = 1; - pCharPos->m_AdjustMatrix[3] = 0; - pCharPos->m_OriginX += fAscent * iVerScale / 100.0f; - } - } - if (iHorScale != 100 || iVerScale != 100) { - pCharPos->m_AdjustMatrix[0] = - pCharPos->m_AdjustMatrix[0] * iHorScale / 100.0f; - pCharPos->m_AdjustMatrix[1] = - pCharPos->m_AdjustMatrix[1] * iHorScale / 100.0f; - pCharPos->m_AdjustMatrix[2] = - pCharPos->m_AdjustMatrix[2] * iVerScale / 100.0f; - pCharPos->m_AdjustMatrix[3] = - pCharPos->m_AdjustMatrix[3] * iVerScale / 100.0f; - } - pCharPos++; - } - } - } - if (iWidth > 0) { - wPrev = wch; - } - } - return iCount; -} -int32_t CFX_RTFBreak::GetCharRects(const FX_RTFTEXTOBJ* pText, - CFX_RectFArray& rtArray, - FX_BOOL bCharBBox) const { - if (pText == NULL || pText->iLength < 1) { - return 0; - } - FXSYS_assert(pText->pStr != NULL && pText->pWidths != NULL && - pText->pFont != NULL && pText->pRect != NULL); - const FX_WCHAR* pStr = pText->pStr; - int32_t* pWidths = pText->pWidths; - int32_t iLength = pText->iLength; - CFX_RectF rect(*pText->pRect); - FX_BOOL bRTLPiece = FX_IsOdd(pText->iBidiLevel); - FX_FLOAT fFontSize = pText->fFontSize; - int32_t iFontSize = FXSYS_round(fFontSize * 20.0f); - FX_FLOAT fScale = fFontSize / 1000.0f; - IFX_Font* pFont = pText->pFont; - if (pFont == NULL) { - bCharBBox = FALSE; - } - CFX_Rect bbox; - bbox.Set(0, 0, 0, 0); - if (bCharBBox) { - bCharBBox = pFont->GetBBox(bbox); - } - FX_FLOAT fLeft = std::max(0.0f, bbox.left * fScale); - FX_FLOAT fHeight = FXSYS_fabs(bbox.height * fScale); - rtArray.RemoveAll(); - rtArray.SetSize(iLength); - FX_DWORD dwStyles = pText->dwLayoutStyles; - FX_BOOL bVertical = (dwStyles & FX_RTFLAYOUTSTYLE_VerticalLayout) != 0; - FX_BOOL bSingleLine = (dwStyles & FX_RTFLAYOUTSTYLE_SingleLine) != 0; - FX_BOOL bCombText = (dwStyles & FX_TXTLAYOUTSTYLE_CombText) != 0; - FX_WCHAR wch, wLineBreakChar = pText->wLineBreakChar; - int32_t iCharSize; - FX_FLOAT fCharSize, fStart; - if (bVertical) { - fStart = bRTLPiece ? rect.bottom() : rect.top; - } else { - fStart = bRTLPiece ? rect.right() : rect.left; - } - for (int32_t i = 0; i < iLength; i++) { - wch = *pStr++; - iCharSize = *pWidths++; - fCharSize = (FX_FLOAT)iCharSize / 20000.0f; - FX_BOOL bRet = (!bSingleLine && FX_IsCtrlCode(wch)); - if (!(wch == L'\v' || wch == L'\f' || wch == 0x2028 || wch == 0x2029 || - (wLineBreakChar != 0xFEFF && wch == wLineBreakChar))) { - bRet = FALSE; - } - if (bRet) { - iCharSize = iFontSize * 500; - fCharSize = fFontSize / 2.0f; - } - if (bVertical) { - rect.top = fStart; - if (bRTLPiece) { - rect.top -= fCharSize; - fStart -= fCharSize; - } else { - fStart += fCharSize; - } - rect.height = fCharSize; - } else { - rect.left = fStart; - if (bRTLPiece) { - rect.left -= fCharSize; - fStart -= fCharSize; - } else { - fStart += fCharSize; - } - rect.width = fCharSize; - } - if (bCharBBox && !bRet) { - int32_t iCharWidth = 1000; - pFont->GetCharWidth(wch, iCharWidth); - FX_FLOAT fRTLeft = 0, fCharWidth = 0; - if (iCharWidth > 0) { - fCharWidth = iCharWidth * fScale; - fRTLeft = fLeft; - if (bCombText) { - fRTLeft = (rect.width - fCharWidth) / 2.0f; - } - } - CFX_RectF rtBBoxF; - if (bVertical) { - rtBBoxF.top = rect.left + fRTLeft; - rtBBoxF.left = rect.top + (rect.height - fHeight) / 2.0f; - rtBBoxF.height = fCharWidth; - rtBBoxF.width = fHeight; - rtBBoxF.left = std::max(rtBBoxF.left, 0.0f); - } else { - rtBBoxF.left = rect.left + fRTLeft; - rtBBoxF.top = rect.top + (rect.height - fHeight) / 2.0f; - rtBBoxF.width = fCharWidth; - rtBBoxF.height = fHeight; - rtBBoxF.top = std::max(rtBBoxF.top, 0.0f); - } - rtArray.SetAt(i, rtBBoxF); - continue; - } - rtArray.SetAt(i, rect); - } - return iLength; -} diff --git a/xfa/src/fgas/layout/fgas_rtfbreak.h b/xfa/src/fgas/layout/fgas_rtfbreak.h deleted file mode 100644 index 24cf2e32cb..0000000000 --- a/xfa/src/fgas/layout/fgas_rtfbreak.h +++ /dev/null @@ -1,237 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FGAS_LAYOUT_FGAS_RTFBREAK_H_ -#define XFA_SRC_FGAS_LAYOUT_FGAS_RTFBREAK_H_ - -#include "core/include/fxcrt/fx_ucd.h" -#include "core/include/fxge/fx_ge.h" -#include "xfa/src/fgas/crt/fgas_memory.h" -#include "xfa/src/fgas/crt/fgas_utils.h" -#include "xfa/src/fgas/layout/fgas_textbreak.h" -#include "xfa/src/fgas/layout/fgas_unicode.h" - -class IFX_Unknown; -class IFX_Font; - -#define FX_RTFBREAKPOLICY_None 0x00 -#define FX_RTFBREAKPOLICY_SpaceBreak 0x01 -#define FX_RTFBREAKPOLICY_NumberBreak 0x02 -#define FX_RTFBREAKPOLICY_InfixBreak 0x04 -#define FX_RTFBREAKPOLICY_TabBreak 0x08 -#define FX_RTFBREAKPOLICY_OrphanPositionedTab 0x10 -#define FX_RTFBREAK_None 0x00 -#define FX_RTFBREAK_PieceBreak 0x01 -#define FX_RTFBREAK_LineBreak 0x02 -#define FX_RTFBREAK_ParagraphBreak 0x03 -#define FX_RTFBREAK_PageBreak 0x04 -#define FX_RTFLAYOUTSTYLE_Pagination 0x01 -#define FX_RTFLAYOUTSTYLE_VerticalLayout 0x02 -#define FX_RTFLAYOUTSTYLE_VerticalChars 0x04 -#define FX_RTFLAYOUTSTYLE_LineDirection 0x08 -#define FX_RTFLAYOUTSTYLE_ExpandTab 0x10 -#define FX_RTFLAYOUTSTYLE_ArabicNumber 0x20 -#define FX_RTFLAYOUTSTYLE_SingleLine 0x40 -#define FX_RTFLAYOUTSTYLE_MBCSCode 0x80 -#define FX_RTFCHARSTYLE_Alignment 0x000F -#define FX_RTFCHARSTYLE_ArabicNumber 0x0010 -#define FX_RTFCHARSTYLE_ArabicShadda 0x0020 -#define FX_RTFCHARSTYLE_OddBidiLevel 0x0040 -#define FX_RTFCHARSTYLE_RTLReadingOrder 0x0080 -#define FX_RTFCHARSTYLE_ArabicContext 0x0300 -#define FX_RTFCHARSTYLE_ArabicIndic 0x0400 -#define FX_RTFCHARSTYLE_ArabicComma 0x0800 -#define FX_RTFLINEALIGNMENT_Left 0 -#define FX_RTFLINEALIGNMENT_Center 1 -#define FX_RTFLINEALIGNMENT_Right 2 -#define FX_RTFLINEALIGNMENT_Justified (1 << 2) -#define FX_RTFLINEALIGNMENT_Distributed (2 << 2) -#define FX_RTFLINEALIGNMENT_JustifiedLeft \ - (FX_RTFLINEALIGNMENT_Left | FX_RTFLINEALIGNMENT_Justified) -#define FX_RTFLINEALIGNMENT_JustifiedCenter \ - (FX_RTFLINEALIGNMENT_Center | FX_RTFLINEALIGNMENT_Justified) -#define FX_RTFLINEALIGNMENT_JustifiedRight \ - (FX_RTFLINEALIGNMENT_Right | FX_RTFLINEALIGNMENT_Justified) -#define FX_RTFLINEALIGNMENT_DistributedLeft \ - (FX_RTFLINEALIGNMENT_Left | FX_RTFLINEALIGNMENT_Distributed) -#define FX_RTFLINEALIGNMENT_DistributedCenter \ - (FX_RTFLINEALIGNMENT_Center | FX_RTFLINEALIGNMENT_Distributed) -#define FX_RTFLINEALIGNMENT_DistributedRight \ - (FX_RTFLINEALIGNMENT_Right | FX_RTFLINEALIGNMENT_Distributed) -#define FX_RTFLINEALIGNMENT_LowerMask 0x03 -#define FX_RTFLINEALIGNMENT_HigherMask 0x0C - -struct FX_RTFTEXTOBJ { - FX_RTFTEXTOBJ() { - pStr = NULL; - pWidths = NULL; - iLength = 0; - pFont = NULL; - fFontSize = 12.0f; - dwLayoutStyles = 0; - iCharRotation = 0; - iBidiLevel = 0; - pRect = NULL; - wLineBreakChar = L'\n'; - iHorizontalScale = 100; - iVerticalScale = 100; - } - - const FX_WCHAR* pStr; - int32_t* pWidths; - int32_t iLength; - IFX_Font* pFont; - FX_FLOAT fFontSize; - FX_DWORD dwLayoutStyles; - int32_t iCharRotation; - int32_t iBidiLevel; - const CFX_RectF* pRect; - FX_WCHAR wLineBreakChar; - int32_t iHorizontalScale; - int32_t iVerticalScale; -}; - -class CFX_RTFPiece : public CFX_Target { - public: - CFX_RTFPiece() - : m_dwStatus(FX_RTFBREAK_PieceBreak), - m_iStartPos(0), - m_iWidth(-1), - m_iStartChar(0), - m_iChars(0), - m_iBidiLevel(0), - m_iBidiPos(0), - m_iFontSize(0), - m_iFontHeight(0), - m_iHorizontalScale(100), - m_iVerticalScale(100), - m_dwLayoutStyles(0), - m_dwIdentity(0), - m_pChars(NULL), - m_pUserData(NULL) {} - ~CFX_RTFPiece() { Reset(); } - void AppendChar(const CFX_RTFChar& tc) { - FXSYS_assert(m_pChars != NULL); - m_pChars->Add(tc); - if (m_iWidth < 0) { - m_iWidth = tc.m_iCharWidth; - } else { - m_iWidth += tc.m_iCharWidth; - } - m_iChars++; - } - int32_t GetEndPos() const { - return m_iWidth < 0 ? m_iStartPos : m_iStartPos + m_iWidth; - } - int32_t GetLength() const { return m_iChars; } - int32_t GetEndChar() const { return m_iStartChar + m_iChars; } - CFX_RTFChar& GetChar(int32_t index) { - FXSYS_assert(index > -1 && index < m_iChars && m_pChars != NULL); - return *m_pChars->GetDataPtr(m_iStartChar + index); - } - CFX_RTFChar* GetCharPtr(int32_t index) const { - FXSYS_assert(index > -1 && index < m_iChars && m_pChars != NULL); - return m_pChars->GetDataPtr(m_iStartChar + index); - } - void GetString(FX_WCHAR* pText) const { - FXSYS_assert(pText != NULL); - int32_t iEndChar = m_iStartChar + m_iChars; - CFX_RTFChar* pChar; - for (int32_t i = m_iStartChar; i < iEndChar; i++) { - pChar = m_pChars->GetDataPtr(i); - *pText++ = (FX_WCHAR)pChar->m_wCharCode; - } - } - void GetString(CFX_WideString& wsText) const { - FX_WCHAR* pText = wsText.GetBuffer(m_iChars); - GetString(pText); - wsText.ReleaseBuffer(m_iChars); - } - void GetWidths(int32_t* pWidths) const { - FXSYS_assert(pWidths != NULL); - int32_t iEndChar = m_iStartChar + m_iChars; - CFX_RTFChar* pChar; - for (int32_t i = m_iStartChar; i < iEndChar; i++) { - pChar = m_pChars->GetDataPtr(i); - *pWidths++ = pChar->m_iCharWidth; - } - } - void Reset() { - m_dwStatus = FX_RTFBREAK_PieceBreak; - if (m_iWidth > -1) { - m_iStartPos += m_iWidth; - } - m_iWidth = -1; - m_iStartChar += m_iChars; - m_iChars = 0; - m_iBidiLevel = 0; - m_iBidiPos = 0; - m_iHorizontalScale = 100; - m_iVerticalScale = 100; - } - FX_DWORD m_dwStatus; - int32_t m_iStartPos; - int32_t m_iWidth; - int32_t m_iStartChar; - int32_t m_iChars; - int32_t m_iBidiLevel; - int32_t m_iBidiPos; - int32_t m_iFontSize; - int32_t m_iFontHeight; - int32_t m_iHorizontalScale; - int32_t m_iVerticalScale; - FX_DWORD m_dwLayoutStyles; - FX_DWORD m_dwIdentity; - CFX_RTFCharArray* m_pChars; - IFX_Unknown* m_pUserData; -}; -typedef CFX_BaseArrayTemplate CFX_RTFPieceArray; - -class IFX_RTFBreak { - public: - static IFX_RTFBreak* Create(FX_DWORD dwPolicies); - virtual ~IFX_RTFBreak() {} - virtual void Release() = 0; - virtual void SetLineBoundary(FX_FLOAT fLineStart, FX_FLOAT fLineEnd) = 0; - virtual void SetLineStartPos(FX_FLOAT fLinePos) = 0; - virtual FX_DWORD GetLayoutStyles() const = 0; - virtual void SetLayoutStyles(FX_DWORD dwLayoutStyles) = 0; - virtual void SetFont(IFX_Font* pFont) = 0; - virtual void SetFontSize(FX_FLOAT fFontSize) = 0; - virtual void SetTabWidth(FX_FLOAT fTabWidth) = 0; - virtual void AddPositionedTab(FX_FLOAT fTabPos) = 0; - virtual void SetPositionedTabs(const CFX_FloatArray& tabs) = 0; - virtual void ClearPositionedTabs() = 0; - virtual void SetDefaultChar(FX_WCHAR wch) = 0; - virtual void SetLineBreakChar(FX_WCHAR wch) = 0; - virtual void SetLineBreakTolerance(FX_FLOAT fTolerance) = 0; - virtual void SetHorizontalScale(int32_t iScale) = 0; - virtual void SetVerticalScale(int32_t iScale) = 0; - virtual void SetCharRotation(int32_t iCharRotation) = 0; - virtual void SetCharSpace(FX_FLOAT fCharSpace) = 0; - virtual void SetWordSpace(FX_BOOL bDefault, FX_FLOAT fWordSpace) = 0; - virtual void SetReadingOrder(FX_BOOL bRTL = FALSE) = 0; - virtual void SetAlignment(int32_t iAlignment = FX_RTFLINEALIGNMENT_Left) = 0; - virtual void SetUserData(IFX_Unknown* pUserData) = 0; - virtual FX_DWORD AppendChar(FX_WCHAR wch) = 0; - virtual FX_DWORD EndBreak(FX_DWORD dwStatus = FX_RTFBREAK_PieceBreak) = 0; - virtual int32_t CountBreakPieces() const = 0; - virtual const CFX_RTFPiece* GetBreakPiece(int32_t index) const = 0; - virtual void GetLineRect(CFX_RectF& rect) const = 0; - virtual void ClearBreakPieces() = 0; - virtual void Reset() = 0; - virtual int32_t GetDisplayPos( - const FX_RTFTEXTOBJ* pText, - FXTEXT_CHARPOS* pCharPos, - FX_BOOL bCharCode = FALSE, - CFX_WideString* pWSForms = NULL, - FX_AdjustCharDisplayPos pAdjustPos = NULL) const = 0; - virtual int32_t GetCharRects(const FX_RTFTEXTOBJ* pText, - CFX_RectFArray& rtArray, - FX_BOOL bCharBBox = FALSE) const = 0; -}; - -#endif // XFA_SRC_FGAS_LAYOUT_FGAS_RTFBREAK_H_ diff --git a/xfa/src/fgas/layout/fgas_textbreak.cpp b/xfa/src/fgas/layout/fgas_textbreak.cpp deleted file mode 100644 index af7be50a51..0000000000 --- a/xfa/src/fgas/layout/fgas_textbreak.cpp +++ /dev/null @@ -1,1824 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fgas/layout/fgas_textbreak.h" - -#include - -#include "core/include/fxcrt/fx_arb.h" -#include "core/include/fxcrt/fx_memory.h" -#include "xfa/src/fgas/layout/fgas_linebreak.h" -#include "xfa/src/fgas/layout/fgas_unicode.h" - -namespace { - -class CFX_TxtLine { - public: - CFX_TxtLine(int32_t iBlockSize) - : m_iStart(0), m_iWidth(0), m_iArabicChars(0) { - m_pLineChars = new CFX_TxtCharArray; - m_pLinePieces = new CFX_TxtPieceArray(16); - } - ~CFX_TxtLine() { - RemoveAll(); - delete m_pLineChars; - delete m_pLinePieces; - } - int32_t CountChars() const { return m_pLineChars->GetSize(); } - CFX_TxtChar* GetCharPtr(int32_t index) const { - FXSYS_assert(index > -1 && index < m_pLineChars->GetSize()); - return m_pLineChars->GetDataPtr(index); - } - int32_t CountPieces() const { return m_pLinePieces->GetSize(); } - CFX_TxtPiece* GetPiecePtr(int32_t index) const { - FXSYS_assert(index > -1 && index < m_pLinePieces->GetSize()); - return m_pLinePieces->GetPtrAt(index); - } - void GetString(CFX_WideString& wsStr) const { - int32_t iCount = m_pLineChars->GetSize(); - FX_WCHAR* pBuf = wsStr.GetBuffer(iCount); - CFX_Char* pChar; - for (int32_t i = 0; i < iCount; i++) { - pChar = m_pLineChars->GetDataPtr(i); - *pBuf++ = (FX_WCHAR)pChar->m_wCharCode; - } - wsStr.ReleaseBuffer(iCount); - } - void RemoveAll(FX_BOOL bLeaveMemory = FALSE) { - m_pLineChars->RemoveAll(); - m_pLinePieces->RemoveAll(bLeaveMemory); - m_iWidth = 0; - m_iArabicChars = 0; - } - CFX_TxtCharArray* m_pLineChars; - CFX_TxtPieceArray* m_pLinePieces; - int32_t m_iStart; - int32_t m_iWidth; - int32_t m_iArabicChars; -}; - -class CFX_TxtBreak : public IFX_TxtBreak { - public: - CFX_TxtBreak(FX_DWORD dwPolicies); - ~CFX_TxtBreak(); - virtual void Release() { delete this; } - virtual void SetLineWidth(FX_FLOAT fLineWidth); - virtual void SetLinePos(FX_FLOAT fLinePos); - virtual FX_DWORD GetLayoutStyles() const { return m_dwLayoutStyles; } - virtual void SetLayoutStyles(FX_DWORD dwLayoutStyles); - virtual void SetFont(IFX_Font* pFont); - virtual void SetFontSize(FX_FLOAT fFontSize); - virtual void SetTabWidth(FX_FLOAT fTabWidth, FX_BOOL bEquidistant); - virtual void SetDefaultChar(FX_WCHAR wch); - virtual void SetParagraphBreakChar(FX_WCHAR wch); - virtual void SetLineBreakTolerance(FX_FLOAT fTolerance); - virtual void SetHorizontalScale(int32_t iScale); - virtual void SetVerticalScale(int32_t iScale); - virtual void SetCharRotation(int32_t iCharRotation); - virtual void SetCharSpace(FX_FLOAT fCharSpace); - virtual void SetAlignment(int32_t iAlignment); - virtual FX_DWORD GetContextCharStyles() const; - virtual void SetContextCharStyles(FX_DWORD dwCharStyles); - virtual void SetCombWidth(FX_FLOAT fCombWidth); - virtual void SetUserData(void* pUserData); - virtual FX_DWORD AppendChar(FX_WCHAR wch); - virtual FX_DWORD EndBreak(FX_DWORD dwStatus = FX_TXTBREAK_PieceBreak); - virtual int32_t CountBreakChars() const; - virtual int32_t CountBreakPieces() const; - virtual const CFX_TxtPiece* GetBreakPiece(int32_t index) const; - virtual void ClearBreakPieces(); - virtual void Reset(); - virtual int32_t GetDisplayPos( - const FX_TXTRUN* pTxtRun, - FXTEXT_CHARPOS* pCharPos, - FX_BOOL bCharCode = FALSE, - CFX_WideString* pWSForms = NULL, - FX_AdjustCharDisplayPos pAdjustPos = NULL) const; - virtual int32_t GetCharRects(const FX_TXTRUN* pTxtRun, - CFX_RectFArray& rtArray, - FX_BOOL bCharBBox = FALSE) const; - void AppendChar_PageLoad(CFX_Char* pCurChar, FX_DWORD dwProps); - FX_DWORD AppendChar_Combination(CFX_Char* pCurChar, int32_t iRotation); - FX_DWORD AppendChar_Tab(CFX_Char* pCurChar, int32_t iRotation); - FX_DWORD AppendChar_Control(CFX_Char* pCurChar, int32_t iRotation); - FX_DWORD AppendChar_Arabic(CFX_Char* pCurChar, int32_t iRotation); - FX_DWORD AppendChar_Others(CFX_Char* pCurChar, int32_t iRotation); - - protected: - FX_DWORD m_dwPolicies; - FX_BOOL m_bPagination; - IFX_ArabicChar* m_pArabicChar; - int32_t m_iLineWidth; - FX_DWORD m_dwLayoutStyles; - FX_BOOL m_bVertical; - FX_BOOL m_bArabicContext; - FX_BOOL m_bArabicShapes; - FX_BOOL m_bRTL; - FX_BOOL m_bSingleLine; - FX_BOOL m_bCombText; - int32_t m_iArabicContext; - int32_t m_iCurArabicContext; - IFX_Font* m_pFont; - int32_t m_iFontSize; - FX_BOOL m_bEquidistant; - int32_t m_iTabWidth; - FX_WCHAR m_wDefChar; - FX_WCHAR m_wParagBreakChar; - int32_t m_iDefChar; - int32_t m_iLineRotation; - int32_t m_iCharRotation; - int32_t m_iRotation; - int32_t m_iAlignment; - FX_DWORD m_dwContextCharStyles; - int32_t m_iCombWidth; - void* m_pUserData; - FX_DWORD m_dwCharType; - FX_BOOL m_bCurRTL; - int32_t m_iCurAlignment; - FX_BOOL m_bArabicNumber; - FX_BOOL m_bArabicComma; - CFX_TxtLine* m_pTxtLine1; - CFX_TxtLine* m_pTxtLine2; - CFX_TxtLine* m_pCurLine; - int32_t m_iReady; - int32_t m_iTolerance; - int32_t m_iHorScale; - int32_t m_iVerScale; - int32_t m_iCharSpace; - void SetBreakStatus(); - int32_t GetLineRotation(FX_DWORD dwStyles) const; - CFX_TxtChar* GetLastChar(int32_t index, FX_BOOL bOmitChar = TRUE) const; - CFX_TxtLine* GetTxtLine(FX_BOOL bReady) const; - CFX_TxtPieceArray* GetTxtPieces(FX_BOOL bReady) const; - FX_DWORD GetUnifiedCharType(FX_DWORD dwType) const; - void ResetArabicContext(); - void ResetContextCharStyles(); - void EndBreak_UpdateArabicShapes(); - FX_BOOL EndBreak_SplitLine(CFX_TxtLine* pNextLine, - FX_BOOL bAllChars, - FX_DWORD dwStatus); - void EndBreak_BidiLine(CFX_TPOArray& tpos, FX_DWORD dwStatus); - void EndBreak_Alignment(CFX_TPOArray& tpos, - FX_BOOL bAllChars, - FX_DWORD dwStatus); - int32_t GetBreakPos(CFX_TxtCharArray& ca, - int32_t& iEndPos, - FX_BOOL bAllChars = FALSE, - FX_BOOL bOnlyBrk = FALSE); - void SplitTextLine(CFX_TxtLine* pCurLine, - CFX_TxtLine* pNextLine, - FX_BOOL bAllChars = FALSE); -}; - -} // namespace - -extern const FX_LINEBREAKTYPE gs_FX_LineBreak_PairTable[64][32]; -IFX_TxtBreak* IFX_TxtBreak::Create(FX_DWORD dwPolicies) { - return new CFX_TxtBreak(dwPolicies); -} -CFX_TxtBreak::CFX_TxtBreak(FX_DWORD dwPolicies) - : m_dwPolicies(dwPolicies), - m_pArabicChar(NULL), - m_iLineWidth(2000000), - m_dwLayoutStyles(0), - m_bVertical(FALSE), - m_bArabicContext(FALSE), - m_bArabicShapes(FALSE), - m_bRTL(FALSE), - m_bSingleLine(FALSE), - m_bCombText(FALSE), - m_iArabicContext(1), - m_iCurArabicContext(1), - m_pFont(NULL), - m_iFontSize(240), - m_bEquidistant(TRUE), - m_iTabWidth(720000), - m_wDefChar(0xFEFF), - m_wParagBreakChar(L'\n'), - m_iDefChar(0), - m_iLineRotation(0), - m_iCharRotation(0), - m_iRotation(0), - m_iAlignment(FX_TXTLINEALIGNMENT_Left), - m_dwContextCharStyles(0), - m_iCombWidth(360000), - m_pUserData(NULL), - m_dwCharType(0), - m_bArabicNumber(FALSE), - m_bArabicComma(FALSE), - m_pCurLine(NULL), - m_iReady(0), - m_iTolerance(0), - m_iHorScale(100), - m_iVerScale(100), - m_iCharSpace(0) { - m_bPagination = (m_dwPolicies & FX_TXTBREAKPOLICY_Pagination) != 0; - m_pArabicChar = IFX_ArabicChar::Create(); - if (m_bPagination) { - m_pTxtLine1 = new CFX_TxtLine(sizeof(CFX_Char)); - m_pTxtLine2 = new CFX_TxtLine(sizeof(CFX_Char)); - } else { - m_pTxtLine1 = new CFX_TxtLine(sizeof(CFX_TxtChar)); - m_pTxtLine2 = new CFX_TxtLine(sizeof(CFX_TxtChar)); - } - m_pCurLine = m_pTxtLine1; - ResetArabicContext(); -} -CFX_TxtBreak::~CFX_TxtBreak() { - Reset(); - delete m_pTxtLine1; - delete m_pTxtLine2; - m_pArabicChar->Release(); -} -void CFX_TxtBreak::SetLineWidth(FX_FLOAT fLineWidth) { - m_iLineWidth = FXSYS_round(fLineWidth * 20000.0f); - FXSYS_assert(m_iLineWidth >= 20000); -} -void CFX_TxtBreak::SetLinePos(FX_FLOAT fLinePos) { - int32_t iLinePos = FXSYS_round(fLinePos * 20000.0f); - if (iLinePos < 0) { - iLinePos = 0; - } - if (iLinePos > m_iLineWidth) { - iLinePos = m_iLineWidth; - } - m_pCurLine->m_iStart = iLinePos; - m_pCurLine->m_iWidth += iLinePos; -} -void CFX_TxtBreak::SetLayoutStyles(FX_DWORD dwLayoutStyles) { - m_dwLayoutStyles = dwLayoutStyles; - m_bVertical = (m_dwLayoutStyles & FX_TXTLAYOUTSTYLE_VerticalChars) != 0; - m_bArabicContext = (m_dwLayoutStyles & FX_TXTLAYOUTSTYLE_ArabicContext) != 0; - m_bArabicShapes = (m_dwLayoutStyles & FX_TXTLAYOUTSTYLE_ArabicShapes) != 0; - m_bRTL = (m_dwLayoutStyles & FX_TXTLAYOUTSTYLE_RTLReadingOrder) != 0; - m_bSingleLine = (m_dwLayoutStyles & FX_TXTLAYOUTSTYLE_SingleLine) != 0; - m_bCombText = (m_dwLayoutStyles & FX_TXTLAYOUTSTYLE_CombText) != 0; - ResetArabicContext(); - m_iLineRotation = GetLineRotation(m_dwLayoutStyles); - m_iRotation = m_iLineRotation + m_iCharRotation; - m_iRotation %= 4; -} -void CFX_TxtBreak::SetFont(IFX_Font* pFont) { - if (pFont == NULL) { - return; - } - if (m_pFont == pFont) { - return; - } - SetBreakStatus(); - m_pFont = pFont; - m_iDefChar = 0; - if (m_wDefChar != 0xFEFF && m_pFont != NULL) { - m_pFont->GetCharWidth(m_wDefChar, m_iDefChar, FALSE); - m_iDefChar *= m_iFontSize; - } -} -void CFX_TxtBreak::SetFontSize(FX_FLOAT fFontSize) { - int32_t iFontSize = FXSYS_round(fFontSize * 20.0f); - if (m_iFontSize == iFontSize) { - return; - } - SetBreakStatus(); - m_iFontSize = iFontSize; - m_iDefChar = 0; - if (m_wDefChar != 0xFEFF && m_pFont != NULL) { - m_pFont->GetCharWidth(m_wDefChar, m_iDefChar, FALSE); - m_iDefChar *= m_iFontSize; - } -} -void CFX_TxtBreak::SetTabWidth(FX_FLOAT fTabWidth, FX_BOOL bEquidistant) { - m_iTabWidth = FXSYS_round(fTabWidth * 20000.0f); - if (m_iTabWidth < FX_TXTBREAK_MinimumTabWidth) { - m_iTabWidth = FX_TXTBREAK_MinimumTabWidth; - } - m_bEquidistant = bEquidistant; -} -void CFX_TxtBreak::SetDefaultChar(FX_WCHAR wch) { - m_wDefChar = wch; - m_iDefChar = 0; - if (m_wDefChar != 0xFEFF && m_pFont != NULL) { - m_pFont->GetCharWidth(m_wDefChar, m_iDefChar, FALSE); - if (m_iDefChar < 0) { - m_iDefChar = 0; - } else { - m_iDefChar *= m_iFontSize; - } - } -} -void CFX_TxtBreak::SetParagraphBreakChar(FX_WCHAR wch) { - if (wch != L'\r' && wch != L'\n') { - return; - } - m_wParagBreakChar = wch; -} -void CFX_TxtBreak::SetLineBreakTolerance(FX_FLOAT fTolerance) { - m_iTolerance = FXSYS_round(fTolerance * 20000.0f); -} -void CFX_TxtBreak::SetCharRotation(int32_t iCharRotation) { - if (iCharRotation < 0) { - iCharRotation += (-iCharRotation / 4 + 1) * 4; - } else if (iCharRotation > 3) { - iCharRotation -= (iCharRotation / 4) * 4; - } - if (m_iCharRotation == iCharRotation) { - return; - } - SetBreakStatus(); - m_iCharRotation = iCharRotation; - m_iRotation = m_iLineRotation + m_iCharRotation; - m_iRotation %= 4; -} -void CFX_TxtBreak::SetAlignment(int32_t iAlignment) { - FXSYS_assert(iAlignment >= FX_TXTLINEALIGNMENT_Left && - iAlignment <= FX_TXTLINEALIGNMENT_Distributed); - m_iAlignment = iAlignment; - ResetArabicContext(); -} -void CFX_TxtBreak::ResetContextCharStyles() { - m_dwContextCharStyles = m_bArabicContext ? m_iCurAlignment : m_iAlignment; - if (m_bArabicNumber) { - m_dwContextCharStyles |= FX_TXTCHARSTYLE_ArabicNumber; - } - if (m_bArabicComma) { - m_dwContextCharStyles |= FX_TXTCHARSTYLE_ArabicComma; - } - if ((m_bArabicContext && m_bCurRTL) || (!m_bArabicContext && m_bRTL)) { - m_dwContextCharStyles |= FX_TXTCHARSTYLE_RTLReadingOrder; - } - m_dwContextCharStyles |= (m_iArabicContext << 8); -} -FX_DWORD CFX_TxtBreak::GetContextCharStyles() const { - return m_dwContextCharStyles; -} -void CFX_TxtBreak::SetContextCharStyles(FX_DWORD dwCharStyles) { - m_iCurAlignment = dwCharStyles & 0x0F; - m_bArabicNumber = (dwCharStyles & FX_TXTCHARSTYLE_ArabicNumber) != 0; - m_bArabicComma = (dwCharStyles & FX_TXTCHARSTYLE_ArabicComma) != 0; - m_bCurRTL = (dwCharStyles & FX_TXTCHARSTYLE_RTLReadingOrder) != 0; - m_iCurArabicContext = m_iArabicContext = ((dwCharStyles & 0x0300) >> 8); - ResetContextCharStyles(); -} -void CFX_TxtBreak::SetCombWidth(FX_FLOAT fCombWidth) { - m_iCombWidth = FXSYS_round(fCombWidth * 20000.0f); -} -void CFX_TxtBreak::SetUserData(void* pUserData) { - if (m_pUserData == pUserData) { - return; - } - SetBreakStatus(); - m_pUserData = pUserData; -} -void CFX_TxtBreak::SetBreakStatus() { - if (m_bPagination) { - return; - } - int32_t iCount = m_pCurLine->CountChars(); - if (iCount < 1) { - return; - } - CFX_TxtChar* pTC = (CFX_TxtChar*)m_pCurLine->GetCharPtr(iCount - 1); - if (pTC->m_dwStatus == 0) { - pTC->m_dwStatus = FX_TXTBREAK_PieceBreak; - } -} -void CFX_TxtBreak::SetHorizontalScale(int32_t iScale) { - if (iScale < 0) { - iScale = 0; - } - if (iScale == m_iHorScale) { - return; - } - SetBreakStatus(); - m_iHorScale = iScale; -} -void CFX_TxtBreak::SetVerticalScale(int32_t iScale) { - if (iScale < 0) { - iScale = 0; - } - if (iScale == m_iHorScale) { - return; - } - SetBreakStatus(); - m_iVerScale = iScale; -} -void CFX_TxtBreak::SetCharSpace(FX_FLOAT fCharSpace) { - m_iCharSpace = FXSYS_round(fCharSpace * 20000.0f); -} -static const int32_t gs_FX_TxtLineRotations[8] = {0, 3, 1, 0, 2, 1, 3, 2}; -int32_t CFX_TxtBreak::GetLineRotation(FX_DWORD dwStyles) const { - return gs_FX_TxtLineRotations[(dwStyles & 0x0E) >> 1]; -} -CFX_TxtChar* CFX_TxtBreak::GetLastChar(int32_t index, FX_BOOL bOmitChar) const { - CFX_TxtCharArray& ca = *m_pCurLine->m_pLineChars; - int32_t iCount = ca.GetSize(); - if (index < 0 || index >= iCount) { - return NULL; - } - CFX_TxtChar* pTC; - int32_t iStart = iCount - 1; - while (iStart > -1) { - pTC = ca.GetDataPtr(iStart--); - if (bOmitChar && pTC->GetCharType() == FX_CHARTYPE_Combination) { - continue; - } - if (--index < 0) { - return pTC; - } - } - return NULL; -} -CFX_TxtLine* CFX_TxtBreak::GetTxtLine(FX_BOOL bReady) const { - if (!bReady) { - return m_pCurLine; - } - if (m_iReady == 1) { - return m_pTxtLine1; - } else if (m_iReady == 2) { - return m_pTxtLine2; - } else { - return NULL; - } -} -CFX_TxtPieceArray* CFX_TxtBreak::GetTxtPieces(FX_BOOL bReady) const { - CFX_TxtLine* pTxtLine = GetTxtLine(bReady); - if (pTxtLine == NULL) { - return NULL; - } - return pTxtLine->m_pLinePieces; -} -inline FX_DWORD CFX_TxtBreak::GetUnifiedCharType(FX_DWORD dwType) const { - return dwType >= FX_CHARTYPE_ArabicAlef ? FX_CHARTYPE_Arabic : dwType; -} -void CFX_TxtBreak::ResetArabicContext() { - if (m_bArabicContext) { - m_bCurRTL = m_iCurArabicContext > 1; - m_iCurAlignment = m_iCurArabicContext > 1 ? FX_TXTLINEALIGNMENT_Right - : FX_TXTLINEALIGNMENT_Left; - m_iCurAlignment |= (m_iAlignment & FX_TXTLINEALIGNMENT_HigherMask); - m_bArabicNumber = m_iArabicContext >= 1 && m_bArabicShapes; - } else { - if (m_bPagination) { - m_bCurRTL = FALSE; - m_iCurAlignment = 0; - } else { - m_bCurRTL = m_bRTL; - m_iCurAlignment = m_iAlignment; - } - if (m_bRTL) { - m_bArabicNumber = m_iArabicContext >= 1; - } else { - m_bArabicNumber = m_iArabicContext > 1; - } - m_bArabicNumber = m_bArabicNumber && m_bArabicShapes; - } - m_bArabicComma = m_bArabicNumber; - ResetContextCharStyles(); -} -void CFX_TxtBreak::AppendChar_PageLoad(CFX_Char* pCurChar, FX_DWORD dwProps) { - if (!m_bPagination) { - ((CFX_TxtChar*)pCurChar)->m_dwStatus = 0; - ((CFX_TxtChar*)pCurChar)->m_pUserData = m_pUserData; - } - if (m_bArabicContext || m_bArabicShapes) { - int32_t iBidiCls = (dwProps & FX_BIDICLASSBITSMASK) >> FX_BIDICLASSBITS; - int32_t iArabicContext = - (iBidiCls == FX_BIDICLASS_R || iBidiCls == FX_BIDICLASS_AL) - ? 2 - : ((iBidiCls == FX_BIDICLASS_L || iBidiCls == FX_BIDICLASS_S) ? 0 - : 1); - if (iArabicContext != m_iArabicContext && iArabicContext != 1) { - m_iArabicContext = iArabicContext; - if (m_iCurArabicContext == 1) { - m_iCurArabicContext = iArabicContext; - } - ResetArabicContext(); - if (!m_bPagination) { - CFX_TxtChar* pLastChar = (CFX_TxtChar*)GetLastChar(1, FALSE); - if (pLastChar != NULL && pLastChar->m_dwStatus < 1) { - pLastChar->m_dwStatus = FX_TXTBREAK_PieceBreak; - } - } - } - } - pCurChar->m_dwCharStyles = m_dwContextCharStyles; -} -FX_DWORD CFX_TxtBreak::AppendChar_Combination(CFX_Char* pCurChar, - int32_t iRotation) { - FXSYS_assert(pCurChar != NULL); - FX_WCHAR wch = pCurChar->m_wCharCode; - FX_WCHAR wForm; - int32_t iCharWidth = 0; - CFX_Char* pLastChar; - pCurChar->m_iCharWidth = -1; - if (m_bCombText) { - iCharWidth = m_iCombWidth; - } else { - if (m_bVertical != FX_IsOdd(iRotation)) { - iCharWidth = 1000; - } else { - wForm = wch; - if (!m_bPagination) { - pLastChar = GetLastChar(0, FALSE); - if (pLastChar != NULL && - (((CFX_TxtChar*)pLastChar)->m_dwCharStyles & - FX_TXTCHARSTYLE_ArabicShadda) == 0) { - FX_BOOL bShadda = FALSE; - if (wch == 0x0651) { - FX_WCHAR wLast = pLastChar->m_wCharCode; - if (wLast >= 0x064C && wLast <= 0x0650) { - wForm = FX_GetArabicFromShaddaTable(wLast); - bShadda = TRUE; - } - } else if (wch >= 0x064C && wch <= 0x0650) { - if (pLastChar->m_wCharCode == 0x0651) { - wForm = FX_GetArabicFromShaddaTable(wch); - bShadda = TRUE; - } - } - if (bShadda) { - ((CFX_TxtChar*)pLastChar)->m_dwCharStyles |= - FX_TXTCHARSTYLE_ArabicShadda; - ((CFX_TxtChar*)pLastChar)->m_iCharWidth = 0; - ((CFX_TxtChar*)pCurChar)->m_dwCharStyles |= - FX_TXTCHARSTYLE_ArabicShadda; - } - } - } - if (!m_pFont->GetCharWidth(wForm, iCharWidth, FALSE)) { - iCharWidth = 0; - } - } - iCharWidth *= m_iFontSize; - iCharWidth = iCharWidth * m_iHorScale / 100; - } - pCurChar->m_iCharWidth = -iCharWidth; - return FX_TXTBREAK_None; -} -FX_DWORD CFX_TxtBreak::AppendChar_Tab(CFX_Char* pCurChar, int32_t iRotation) { - m_dwCharType = FX_CHARTYPE_Tab; - if ((m_dwLayoutStyles & FX_TXTLAYOUTSTYLE_ExpandTab) == 0) { - return FX_TXTBREAK_None; - } - int32_t& iLineWidth = m_pCurLine->m_iWidth; - int32_t iCharWidth; - if (m_bCombText) { - iCharWidth = m_iCombWidth; - } else { - if (m_bEquidistant) { - iCharWidth = iLineWidth; - iCharWidth = m_iTabWidth * (iCharWidth / m_iTabWidth + 1) - iCharWidth; - if (iCharWidth < FX_TXTBREAK_MinimumTabWidth) { - iCharWidth += m_iTabWidth; - } - } else { - iCharWidth = m_iTabWidth; - } - } - pCurChar->m_iCharWidth = iCharWidth; - iLineWidth += iCharWidth; - if (!m_bSingleLine && iLineWidth >= m_iLineWidth + m_iTolerance) { - return EndBreak(FX_TXTBREAK_LineBreak); - } - return FX_TXTBREAK_None; -} -FX_DWORD CFX_TxtBreak::AppendChar_Control(CFX_Char* pCurChar, - int32_t iRotation) { - m_dwCharType = FX_CHARTYPE_Control; - FX_DWORD dwRet = FX_TXTBREAK_None; - if (!m_bSingleLine) { - FX_WCHAR wch = pCurChar->m_wCharCode; - switch (wch) { - case L'\v': - case 0x2028: - dwRet = FX_TXTBREAK_LineBreak; - break; - case L'\f': - dwRet = FX_TXTBREAK_PageBreak; - break; - case 0x2029: - dwRet = FX_TXTBREAK_ParagraphBreak; - break; - default: - if (wch == m_wParagBreakChar) { - dwRet = FX_TXTBREAK_ParagraphBreak; - } - break; - } - if (dwRet != FX_TXTBREAK_None) { - dwRet = EndBreak(dwRet); - } - } - return dwRet; -} -FX_DWORD CFX_TxtBreak::AppendChar_Arabic(CFX_Char* pCurChar, - int32_t iRotation) { - FX_DWORD dwType = (pCurChar->m_dwCharProps & FX_CHARTYPEBITSMASK); - int32_t& iLineWidth = m_pCurLine->m_iWidth; - FX_WCHAR wForm; - int32_t iCharWidth = 0; - CFX_Char* pLastChar = NULL; - FX_BOOL bAlef = FALSE; - if (!m_bCombText && m_dwCharType >= FX_CHARTYPE_ArabicAlef && - m_dwCharType <= FX_CHARTYPE_ArabicDistortion) { - pLastChar = GetLastChar(1); - if (pLastChar != NULL) { - iCharWidth = pLastChar->m_iCharWidth; - if (iCharWidth > 0) { - iLineWidth -= iCharWidth; - } - CFX_Char* pPrevChar = GetLastChar(2); - wForm = m_pArabicChar->GetFormChar(pLastChar, pPrevChar, pCurChar); - bAlef = (wForm == 0xFEFF && - pLastChar->GetCharType() == FX_CHARTYPE_ArabicAlef); - int32_t iLastRotation = pLastChar->m_nRotation + m_iLineRotation; - if (m_bVertical && (pLastChar->m_dwCharProps & 0x8000) != 0) { - iLastRotation++; - } - if (m_bVertical != FX_IsOdd(iLastRotation)) { - iCharWidth = 1000; - } else { - m_pFont->GetCharWidth(wForm, iCharWidth, FALSE); - } - if (wForm == 0xFEFF) { - iCharWidth = m_iDefChar; - } - iCharWidth *= m_iFontSize; - iCharWidth = iCharWidth * m_iHorScale / 100; - pLastChar->m_iCharWidth = iCharWidth; - iLineWidth += iCharWidth; - iCharWidth = 0; - } - } - m_dwCharType = dwType; - wForm = m_pArabicChar->GetFormChar(pCurChar, bAlef ? NULL : pLastChar, NULL); - if (m_bCombText) { - iCharWidth = m_iCombWidth; - } else { - if (m_bVertical != FX_IsOdd(iRotation)) { - iCharWidth = 1000; - } else { - m_pFont->GetCharWidth(wForm, iCharWidth, FALSE); - } - if (wForm == 0xFEFF) { - iCharWidth = m_iDefChar; - } - iCharWidth *= m_iFontSize; - iCharWidth = iCharWidth * m_iHorScale / 100; - } - pCurChar->m_iCharWidth = iCharWidth; - iLineWidth += iCharWidth; - m_pCurLine->m_iArabicChars++; - if (!m_bSingleLine && iLineWidth > m_iLineWidth + m_iTolerance) { - return EndBreak(FX_TXTBREAK_LineBreak); - } - return FX_TXTBREAK_None; -} -FX_DWORD CFX_TxtBreak::AppendChar_Others(CFX_Char* pCurChar, - int32_t iRotation) { - FX_DWORD dwProps = pCurChar->m_dwCharProps; - FX_DWORD dwType = (dwProps & FX_CHARTYPEBITSMASK); - int32_t& iLineWidth = m_pCurLine->m_iWidth; - int32_t iCharWidth = 0; - m_dwCharType = dwType; - FX_WCHAR wch = pCurChar->m_wCharCode; - FX_WCHAR wForm = wch; - if (dwType == FX_CHARTYPE_Numeric) { - if (m_bArabicNumber) { - wForm = wch + 0x0630; - pCurChar->m_dwCharStyles |= FX_TXTCHARSTYLE_ArabicIndic; - } - } else if (wch == L',') { - if (m_bArabicShapes && m_iCurArabicContext > 0) { - wForm = 0x060C; - pCurChar->m_dwCharStyles |= FX_TXTCHARSTYLE_ArabicComma; - } - } else if (m_bCurRTL || m_bVertical) { - wForm = FX_GetMirrorChar(wch, dwProps, m_bCurRTL, m_bVertical); - } - if (m_bCombText) { - iCharWidth = m_iCombWidth; - } else { - if (m_bVertical != FX_IsOdd(iRotation)) { - iCharWidth = 1000; - } else if (!m_pFont->GetCharWidth(wForm, iCharWidth, FALSE)) { - iCharWidth = m_iDefChar; - } - iCharWidth *= m_iFontSize; - iCharWidth = iCharWidth * m_iHorScale / 100; - } - iCharWidth += m_iCharSpace; - pCurChar->m_iCharWidth = iCharWidth; - iLineWidth += iCharWidth; - FX_BOOL bBreak = (dwType != FX_CHARTYPE_Space || - (m_dwPolicies & FX_TXTBREAKPOLICY_SpaceBreak) != 0); - if (!m_bSingleLine && bBreak && iLineWidth > m_iLineWidth + m_iTolerance) { - return EndBreak(FX_TXTBREAK_LineBreak); - } - return FX_TXTBREAK_None; -} -typedef FX_DWORD (CFX_TxtBreak::*FX_TxtBreak_LPFAppendChar)(CFX_Char* pCurChar, - int32_t iRotation); -static const FX_TxtBreak_LPFAppendChar g_FX_TxtBreak_lpfAppendChar[16] = { - &CFX_TxtBreak::AppendChar_Others, &CFX_TxtBreak::AppendChar_Tab, - &CFX_TxtBreak::AppendChar_Others, &CFX_TxtBreak::AppendChar_Control, - &CFX_TxtBreak::AppendChar_Combination, &CFX_TxtBreak::AppendChar_Others, - &CFX_TxtBreak::AppendChar_Others, &CFX_TxtBreak::AppendChar_Arabic, - &CFX_TxtBreak::AppendChar_Arabic, &CFX_TxtBreak::AppendChar_Arabic, - &CFX_TxtBreak::AppendChar_Arabic, &CFX_TxtBreak::AppendChar_Arabic, - &CFX_TxtBreak::AppendChar_Arabic, &CFX_TxtBreak::AppendChar_Others, - &CFX_TxtBreak::AppendChar_Others, &CFX_TxtBreak::AppendChar_Others, -}; -FX_DWORD CFX_TxtBreak::AppendChar(FX_WCHAR wch) { - FX_DWORD dwProps = kTextLayoutCodeProperties[(FX_WORD)wch]; - FX_DWORD dwType = (dwProps & FX_CHARTYPEBITSMASK); - CFX_TxtChar* pCurChar = m_pCurLine->m_pLineChars->AddSpace(); - pCurChar->m_wCharCode = (FX_WORD)wch; - pCurChar->m_nRotation = m_iCharRotation; - pCurChar->m_dwCharProps = dwProps; - pCurChar->m_dwCharStyles = 0; - pCurChar->m_iCharWidth = 0; - pCurChar->m_iHorizontalScale = m_iHorScale; - pCurChar->m_iVertialScale = m_iVerScale; - pCurChar->m_dwStatus = 0; - pCurChar->m_iBidiClass = 0; - pCurChar->m_iBidiLevel = 0; - pCurChar->m_iBidiPos = 0; - pCurChar->m_iBidiOrder = 0; - pCurChar->m_pUserData = NULL; - AppendChar_PageLoad(pCurChar, dwProps); - FX_DWORD dwRet1 = FX_TXTBREAK_None; - if (dwType != FX_CHARTYPE_Combination && - GetUnifiedCharType(m_dwCharType) != GetUnifiedCharType(dwType)) { - if (m_dwCharType > 0 && - m_pCurLine->m_iWidth > m_iLineWidth + m_iTolerance && !m_bSingleLine) { - if (m_dwCharType != FX_CHARTYPE_Space || dwType != FX_CHARTYPE_Control) { - dwRet1 = EndBreak(FX_TXTBREAK_LineBreak); - int32_t iCount = m_pCurLine->CountChars(); - if (iCount > 0) { - pCurChar = m_pCurLine->m_pLineChars->GetDataPtr(iCount - 1); - } - } - } - } - int32_t iRotation = m_iRotation; - if (m_bVertical && (dwProps & 0x8000) != 0) { - iRotation = (iRotation + 1) % 4; - } - FX_DWORD dwRet2 = - (this->*g_FX_TxtBreak_lpfAppendChar[dwType >> FX_CHARTYPEBITS])( - pCurChar, iRotation); - return std::max(dwRet1, dwRet2); -} -void CFX_TxtBreak::EndBreak_UpdateArabicShapes() { - FXSYS_assert(m_bArabicShapes); - int32_t iCount = m_pCurLine->CountChars(); - if (iCount < 2) { - return; - } - int32_t& iLineWidth = m_pCurLine->m_iWidth; - CFX_Char *pCur, *pNext; - pCur = m_pCurLine->GetCharPtr(0); - FX_BOOL bPrevNum = (pCur->m_dwCharStyles & FX_TXTCHARSTYLE_ArabicIndic) != 0; - pCur = m_pCurLine->GetCharPtr(1); - FX_WCHAR wch, wForm; - FX_BOOL bNextNum; - int32_t i = 1, iCharWidth, iRotation; - do { - i++; - if (i < iCount) { - pNext = m_pCurLine->GetCharPtr(i); - bNextNum = (pNext->m_dwCharStyles & FX_TXTCHARSTYLE_ArabicIndic) != 0; - } else { - pNext = NULL; - bNextNum = FALSE; - } - wch = pCur->m_wCharCode; - if (wch == L'.') { - if (bPrevNum && bNextNum) { - iRotation = m_iRotation; - if (m_bVertical && (pCur->m_dwCharProps & 0x8000) != 0) { - iRotation = ((iRotation + 1) & 0x03); - } - wForm = wch == L'.' ? 0x066B : 0x066C; - iLineWidth -= pCur->m_iCharWidth; - if (m_bCombText) { - iCharWidth = m_iCombWidth; - } else { - if (m_bVertical != FX_IsOdd(iRotation)) { - iCharWidth = 1000; - } else if (!m_pFont->GetCharWidth(wForm, iCharWidth, FALSE)) { - iCharWidth = m_iDefChar; - } - iCharWidth *= m_iFontSize; - iCharWidth = iCharWidth * m_iHorScale / 100; - } - pCur->m_iCharWidth = iCharWidth; - iLineWidth += iCharWidth; - } - } - bPrevNum = (pCur->m_dwCharStyles & FX_TXTCHARSTYLE_ArabicIndic) != 0; - pCur = pNext; - } while (i < iCount); -} -FX_BOOL CFX_TxtBreak::EndBreak_SplitLine(CFX_TxtLine* pNextLine, - FX_BOOL bAllChars, - FX_DWORD dwStatus) { - int32_t iCount = m_pCurLine->CountChars(); - FX_BOOL bDone = FALSE; - CFX_Char* pTC; - if (!m_bSingleLine && m_pCurLine->m_iWidth > m_iLineWidth + m_iTolerance) { - pTC = m_pCurLine->GetCharPtr(iCount - 1); - switch (pTC->GetCharType()) { - case FX_CHARTYPE_Tab: - case FX_CHARTYPE_Control: - break; - case FX_CHARTYPE_Space: - if ((m_dwPolicies & FX_TXTBREAKPOLICY_SpaceBreak) != 0) { - SplitTextLine(m_pCurLine, pNextLine, !m_bPagination && bAllChars); - bDone = TRUE; - } - break; - default: - SplitTextLine(m_pCurLine, pNextLine, !m_bPagination && bAllChars); - bDone = TRUE; - break; - } - } - iCount = m_pCurLine->CountChars(); - CFX_TxtPieceArray* pCurPieces = m_pCurLine->m_pLinePieces; - CFX_TxtPiece tp; - if (m_bPagination) { - tp.m_dwStatus = dwStatus; - tp.m_iStartPos = m_pCurLine->m_iStart; - tp.m_iWidth = m_pCurLine->m_iWidth; - tp.m_iStartChar = 0; - tp.m_iChars = iCount; - tp.m_pChars = m_pCurLine->m_pLineChars; - tp.m_pUserData = m_pUserData; - pTC = m_pCurLine->GetCharPtr(0); - tp.m_dwCharStyles = pTC->m_dwCharStyles; - tp.m_iHorizontalScale = pTC->m_iHorizontalScale; - tp.m_iVerticalScale = pTC->m_iVertialScale; - pCurPieces->Add(tp); - m_pCurLine = pNextLine; - m_dwCharType = 0; - return TRUE; - } - if (bAllChars && !bDone) { - int32_t iEndPos = m_pCurLine->m_iWidth; - GetBreakPos(*m_pCurLine->m_pLineChars, iEndPos, bAllChars, TRUE); - } - return FALSE; -} -void CFX_TxtBreak::EndBreak_BidiLine(CFX_TPOArray& tpos, FX_DWORD dwStatus) { - CFX_TxtPiece tp; - FX_TPO tpo; - CFX_TxtChar* pTC; - int32_t i, j; - CFX_TxtCharArray& chars = *m_pCurLine->m_pLineChars; - int32_t iCount = m_pCurLine->CountChars(); - FX_BOOL bDone = (m_pCurLine->m_iArabicChars > 0 || m_bCurRTL); - if (!m_bPagination && bDone) { - int32_t iBidiNum = 0; - for (i = 0; i < iCount; i++) { - pTC = chars.GetDataPtr(i); - pTC->m_iBidiPos = i; - if (pTC->GetCharType() != FX_CHARTYPE_Control) { - iBidiNum = i; - } - if (i == 0) { - pTC->m_iBidiLevel = 1; - } - } - FX_BidiLine(chars, iBidiNum + 1, m_bCurRTL ? 1 : 0); - } - CFX_TxtPieceArray* pCurPieces = m_pCurLine->m_pLinePieces; - if (!m_bPagination && - (bDone || (m_dwLayoutStyles & FX_TXTLAYOUTSTYLE_MutipleFormat) != 0)) { - tp.m_dwStatus = FX_TXTBREAK_PieceBreak; - tp.m_iStartPos = m_pCurLine->m_iStart; - tp.m_pChars = m_pCurLine->m_pLineChars; - int32_t iBidiLevel = -1, iCharWidth; - i = 0, j = -1; - while (i < iCount) { - pTC = chars.GetDataPtr(i); - if (iBidiLevel < 0) { - iBidiLevel = pTC->m_iBidiLevel; - tp.m_iWidth = 0; - tp.m_iBidiLevel = iBidiLevel; - tp.m_iBidiPos = pTC->m_iBidiOrder; - tp.m_dwCharStyles = pTC->m_dwCharStyles; - tp.m_pUserData = pTC->m_pUserData; - tp.m_iHorizontalScale = pTC->m_iHorizontalScale; - tp.m_iVerticalScale = pTC->m_iVertialScale; - tp.m_dwStatus = FX_TXTBREAK_PieceBreak; - } - if (iBidiLevel != pTC->m_iBidiLevel || pTC->m_dwStatus != 0) { - if (iBidiLevel == pTC->m_iBidiLevel) { - tp.m_dwStatus = pTC->m_dwStatus; - iCharWidth = pTC->m_iCharWidth; - if (iCharWidth > 0) { - tp.m_iWidth += iCharWidth; - } - i++; - } - tp.m_iChars = i - tp.m_iStartChar; - pCurPieces->Add(tp); - tp.m_iStartPos += tp.m_iWidth; - tp.m_iStartChar = i; - tpo.index = ++j; - tpo.pos = tp.m_iBidiPos; - tpos.Add(tpo); - iBidiLevel = -1; - } else { - iCharWidth = pTC->m_iCharWidth; - if (iCharWidth > 0) { - tp.m_iWidth += iCharWidth; - } - i++; - } - } - if (i > tp.m_iStartChar) { - tp.m_dwStatus = dwStatus; - tp.m_iChars = i - tp.m_iStartChar; - pCurPieces->Add(tp); - tpo.index = ++j; - tpo.pos = tp.m_iBidiPos; - tpos.Add(tpo); - } - if (j > -1) { - if (j > 0) { - FX_TEXTLAYOUT_PieceSort(tpos, 0, j); - int32_t iStartPos = 0; - for (i = 0; i <= j; i++) { - tpo = tpos.GetAt(i); - CFX_TxtPiece& ttp = pCurPieces->GetAt(tpo.index); - ttp.m_iStartPos = iStartPos; - iStartPos += ttp.m_iWidth; - } - } - CFX_TxtPiece& ttp = pCurPieces->GetAt(j); - ttp.m_dwStatus = dwStatus; - } - } else { - tp.m_dwStatus = dwStatus; - tp.m_iStartPos = m_pCurLine->m_iStart; - tp.m_iWidth = m_pCurLine->m_iWidth; - tp.m_iStartChar = 0; - tp.m_iChars = iCount; - tp.m_pChars = m_pCurLine->m_pLineChars; - tp.m_pUserData = m_pUserData; - pTC = chars.GetDataPtr(0); - tp.m_dwCharStyles = pTC->m_dwCharStyles; - tp.m_iHorizontalScale = pTC->m_iHorizontalScale; - tp.m_iVerticalScale = pTC->m_iVertialScale; - pCurPieces->Add(tp); - tpo.index = 0; - tpo.pos = 0; - tpos.Add(tpo); - } -} -void CFX_TxtBreak::EndBreak_Alignment(CFX_TPOArray& tpos, - FX_BOOL bAllChars, - FX_DWORD dwStatus) { - int32_t iNetWidth = m_pCurLine->m_iWidth, iGapChars = 0, iCharWidth; - CFX_TxtPieceArray* pCurPieces = m_pCurLine->m_pLinePieces; - int32_t i, j, iCount = pCurPieces->GetSize(); - FX_BOOL bFind = FALSE; - FX_TPO tpo; - CFX_TxtChar* pTC; - FX_DWORD dwCharType; - for (i = iCount - 1; i > -1; i--) { - tpo = tpos.GetAt(i); - CFX_TxtPiece& ttp = pCurPieces->GetAt(tpo.index); - if (!bFind) { - iNetWidth = ttp.GetEndPos(); - } - FX_BOOL bArabic = FX_IsOdd(ttp.m_iBidiLevel); - j = bArabic ? 0 : ttp.m_iChars - 1; - while (j > -1 && j < ttp.m_iChars) { - pTC = ttp.GetCharPtr(j); - if (pTC->m_nBreakType == FX_LBT_DIRECT_BRK) { - iGapChars++; - } - if (!bFind || !bAllChars) { - dwCharType = pTC->GetCharType(); - if (dwCharType == FX_CHARTYPE_Space || - dwCharType == FX_CHARTYPE_Control) { - if (!bFind) { - iCharWidth = pTC->m_iCharWidth; - if (bAllChars && iCharWidth > 0) { - iNetWidth -= iCharWidth; - } - } - } else { - bFind = TRUE; - if (!bAllChars) { - break; - } - } - } - j += bArabic ? 1 : -1; - } - if (!bAllChars && bFind) { - break; - } - } - int32_t iOffset = m_iLineWidth - iNetWidth; - int32_t iLowerAlignment = (m_iCurAlignment & FX_TXTLINEALIGNMENT_LowerMask); - int32_t iHigherAlignment = (m_iCurAlignment & FX_TXTLINEALIGNMENT_HigherMask); - if (iGapChars > 0 && (iHigherAlignment == FX_TXTLINEALIGNMENT_Distributed || - (iHigherAlignment == FX_TXTLINEALIGNMENT_Justified && - dwStatus != FX_TXTBREAK_ParagraphBreak))) { - int32_t iStart = -1; - for (i = 0; i < iCount; i++) { - tpo = tpos.GetAt(i); - CFX_TxtPiece& ttp = pCurPieces->GetAt(tpo.index); - if (iStart < -1) { - iStart = ttp.m_iStartPos; - } else { - ttp.m_iStartPos = iStart; - } - int32_t k; - for (j = 0; j < ttp.m_iChars; j++) { - pTC = ttp.GetCharPtr(j); - if (pTC->m_nBreakType != FX_LBT_DIRECT_BRK || pTC->m_iCharWidth < 0) { - continue; - } - k = iOffset / iGapChars; - pTC->m_iCharWidth += k; - ttp.m_iWidth += k; - iOffset -= k; - iGapChars--; - if (iGapChars < 1) { - break; - } - } - iStart += ttp.m_iWidth; - } - } else if (iLowerAlignment > FX_TXTLINEALIGNMENT_Left) { - if (iLowerAlignment == FX_TXTLINEALIGNMENT_Center) { - iOffset /= 2; - } - if (iOffset > 0) { - for (i = 0; i < iCount; i++) { - CFX_TxtPiece& ttp = pCurPieces->GetAt(i); - ttp.m_iStartPos += iOffset; - } - } - } -} -FX_DWORD CFX_TxtBreak::EndBreak(FX_DWORD dwStatus) { - FXSYS_assert(dwStatus >= FX_TXTBREAK_PieceBreak && - dwStatus <= FX_TXTBREAK_PageBreak); - CFX_TxtPieceArray* pCurPieces = m_pCurLine->m_pLinePieces; - int32_t iCount = pCurPieces->GetSize(); - if (iCount > 0) { - CFX_TxtPiece* pLastPiece = pCurPieces->GetPtrAt(--iCount); - if (dwStatus > FX_TXTBREAK_PieceBreak) { - pLastPiece->m_dwStatus = dwStatus; - } else { - dwStatus = pLastPiece->m_dwStatus; - } - return dwStatus; - } else { - CFX_TxtLine* pLastLine = GetTxtLine(TRUE); - if (pLastLine != NULL) { - pCurPieces = pLastLine->m_pLinePieces; - iCount = pCurPieces->GetSize(); - if (iCount-- > 0) { - CFX_TxtPiece* pLastPiece = pCurPieces->GetPtrAt(iCount); - if (dwStatus > FX_TXTBREAK_PieceBreak) { - pLastPiece->m_dwStatus = dwStatus; - } else { - dwStatus = pLastPiece->m_dwStatus; - } - return dwStatus; - } - return FX_TXTBREAK_None; - } - iCount = m_pCurLine->CountChars(); - if (iCount < 1) { - return FX_TXTBREAK_None; - } - if (!m_bPagination) { - CFX_TxtChar* pTC = m_pCurLine->GetCharPtr(iCount - 1); - pTC->m_dwStatus = dwStatus; - } - if (dwStatus <= FX_TXTBREAK_PieceBreak) { - return dwStatus; - } - } - m_iReady = (m_pCurLine == m_pTxtLine1) ? 1 : 2; - CFX_TxtLine* pNextLine = - (m_pCurLine == m_pTxtLine1) ? m_pTxtLine2 : m_pTxtLine1; - FX_BOOL bAllChars = (m_iCurAlignment > FX_TXTLINEALIGNMENT_Right); - CFX_TPOArray tpos; - CFX_Char* pTC; - if (m_bArabicShapes) { - EndBreak_UpdateArabicShapes(); - } - if (EndBreak_SplitLine(pNextLine, bAllChars, dwStatus)) { - goto EndBreak_Ret; - } - EndBreak_BidiLine(tpos, dwStatus); - if (!m_bPagination && m_iCurAlignment > FX_TXTLINEALIGNMENT_Left) { - EndBreak_Alignment(tpos, bAllChars, dwStatus); - } -EndBreak_Ret: - m_pCurLine = pNextLine; - pTC = GetLastChar(0, FALSE); - m_dwCharType = pTC == NULL ? 0 : pTC->GetCharType(); - if (dwStatus == FX_TXTBREAK_ParagraphBreak) { - m_iArabicContext = m_iCurArabicContext = 1; - ResetArabicContext(); - } - return dwStatus; -} -int32_t CFX_TxtBreak::GetBreakPos(CFX_TxtCharArray& ca, - int32_t& iEndPos, - FX_BOOL bAllChars, - FX_BOOL bOnlyBrk) { - int32_t iLength = ca.GetSize() - 1; - if (iLength < 1) { - return iLength; - } - int32_t iBreak = -1, iBreakPos = -1, iIndirect = -1, iIndirectPos = -1, - iLast = -1, iLastPos = -1; - if (m_bSingleLine || iEndPos <= m_iLineWidth) { - if (!bAllChars) { - return iLength; - } - iBreak = iLength; - iBreakPos = iEndPos; - } - FX_BOOL bSpaceBreak = (m_dwPolicies & FX_TXTBREAKPOLICY_SpaceBreak) != 0; - FX_BOOL bNumberBreak = (m_dwPolicies & FX_TXTBREAKPOLICY_NumberBreak) != 0; - FX_LINEBREAKTYPE eType; - FX_DWORD nCodeProp, nCur, nNext; - CFX_Char* pCur = ca.GetDataPtr(iLength--); - if (bAllChars) { - pCur->m_nBreakType = FX_LBT_UNKNOWN; - } - nCodeProp = pCur->m_dwCharProps; - nNext = nCodeProp & 0x003F; - int32_t iCharWidth = pCur->m_iCharWidth; - if (iCharWidth > 0) { - iEndPos -= iCharWidth; - } - while (iLength >= 0) { - pCur = ca.GetDataPtr(iLength); - nCodeProp = pCur->m_dwCharProps; - nCur = nCodeProp & 0x003F; - if (nCur == FX_CBP_SP) { - if (nNext == FX_CBP_SP) { - eType = bSpaceBreak ? FX_LBT_DIRECT_BRK : FX_LBT_PROHIBITED_BRK; - } else { - eType = *((const FX_LINEBREAKTYPE*)gs_FX_LineBreak_PairTable + - (nCur << 5) + nNext); - } - } else if (bNumberBreak && nCur == FX_CBP_NU && nNext == FX_CBP_NU) { - eType = FX_LBT_DIRECT_BRK; - } else { - if (nNext == FX_CBP_SP) { - eType = FX_LBT_PROHIBITED_BRK; - } else { - eType = *((const FX_LINEBREAKTYPE*)gs_FX_LineBreak_PairTable + - (nCur << 5) + nNext); - } - } - if (bAllChars) { - pCur->m_nBreakType = (uint8_t)eType; - } - if (!bOnlyBrk) { - if (m_bSingleLine || iEndPos <= m_iLineWidth || - (nCur == FX_CBP_SP && !bSpaceBreak)) { - if (eType == FX_LBT_DIRECT_BRK && iBreak < 0) { - iBreak = iLength; - iBreakPos = iEndPos; - if (!bAllChars) { - return iLength; - } - } else if (eType == FX_LBT_INDIRECT_BRK && iIndirect < 0) { - iIndirect = iLength; - iIndirectPos = iEndPos; - } - if (iLast < 0) { - iLast = iLength; - iLastPos = iEndPos; - } - } - iCharWidth = pCur->m_iCharWidth; - if (iCharWidth > 0) { - iEndPos -= iCharWidth; - } - } - nNext = nCodeProp & 0x003F; - iLength--; - } - if (bOnlyBrk) { - return 0; - } - if (iBreak > -1) { - iEndPos = iBreakPos; - return iBreak; - } - if (iIndirect > -1) { - iEndPos = iIndirectPos; - return iIndirect; - } - if (iLast > -1) { - iEndPos = iLastPos; - return iLast; - } - return 0; -} -void CFX_TxtBreak::SplitTextLine(CFX_TxtLine* pCurLine, - CFX_TxtLine* pNextLine, - FX_BOOL bAllChars) { - FXSYS_assert(pCurLine != NULL && pNextLine != NULL); - int32_t iCount = pCurLine->CountChars(); - if (iCount < 2) { - return; - } - int32_t iEndPos = pCurLine->m_iWidth; - CFX_TxtCharArray& curChars = *pCurLine->m_pLineChars; - int32_t iCharPos = GetBreakPos(curChars, iEndPos, bAllChars, FALSE); - if (iCharPos < 0) { - iCharPos = 0; - } - iCharPos++; - if (iCharPos >= iCount) { - pNextLine->RemoveAll(TRUE); - CFX_Char* pTC = curChars.GetDataPtr(iCharPos - 1); - pTC->m_nBreakType = FX_LBT_UNKNOWN; - return; - } - CFX_TxtCharArray& nextChars = *pNextLine->m_pLineChars; - int cur_size = curChars.GetSize(); - nextChars.SetSize(cur_size - iCharPos); - FXSYS_memcpy(nextChars.GetData(), curChars.GetDataPtr(iCharPos), - (cur_size - iCharPos) * sizeof(CFX_TxtChar)); - iCount -= iCharPos; - cur_size = curChars.GetSize(); - curChars.RemoveAt(cur_size - iCount, iCount); - pCurLine->m_iWidth = iEndPos; - CFX_TxtChar* pTC = curChars.GetDataPtr(iCharPos - 1); - pTC->m_nBreakType = FX_LBT_UNKNOWN; - iCount = nextChars.GetSize(); - int32_t iCharWidth, iWidth = 0; - for (int32_t i = 0; i < iCount; i++) { - pTC = nextChars.GetDataPtr(i); - if (pTC->GetCharType() >= FX_CHARTYPE_ArabicAlef) { - pCurLine->m_iArabicChars--; - pNextLine->m_iArabicChars++; - } - iCharWidth = pTC->m_iCharWidth; - if (iCharWidth > 0) { - iWidth += iCharWidth; - } - if (m_bPagination) { - continue; - } - pTC->m_dwStatus = 0; - } - pNextLine->m_iWidth = iWidth; -} -int32_t CFX_TxtBreak::CountBreakChars() const { - CFX_TxtLine* pTxtLine = GetTxtLine(TRUE); - return pTxtLine == NULL ? 0 : pTxtLine->CountChars(); -} -int32_t CFX_TxtBreak::CountBreakPieces() const { - CFX_TxtPieceArray* pTxtPieces = GetTxtPieces(TRUE); - if (pTxtPieces == NULL) { - return 0; - } - return pTxtPieces->GetSize(); -} -const CFX_TxtPiece* CFX_TxtBreak::GetBreakPiece(int32_t index) const { - CFX_TxtPieceArray* pTxtPieces = GetTxtPieces(TRUE); - if (pTxtPieces == NULL) { - return NULL; - } - if (index < 0 || index >= pTxtPieces->GetSize()) { - return NULL; - } - return pTxtPieces->GetPtrAt(index); -} -void CFX_TxtBreak::ClearBreakPieces() { - CFX_TxtLine* pTxtLine = GetTxtLine(TRUE); - if (pTxtLine != NULL) { - pTxtLine->RemoveAll(TRUE); - } - m_iReady = 0; -} -void CFX_TxtBreak::Reset() { - m_dwCharType = 0; - m_iArabicContext = m_iCurArabicContext = 1; - ResetArabicContext(); - m_pTxtLine1->RemoveAll(TRUE); - m_pTxtLine2->RemoveAll(TRUE); -} - -struct FX_FORMCHAR { - FX_WORD wch; - FX_WORD wForm; - int32_t iWidth; -}; - -int32_t CFX_TxtBreak::GetDisplayPos(const FX_TXTRUN* pTxtRun, - FXTEXT_CHARPOS* pCharPos, - FX_BOOL bCharCode, - CFX_WideString* pWSForms, - FX_AdjustCharDisplayPos pAdjustPos) const { - if (pTxtRun == NULL || pTxtRun->iLength < 1) { - return 0; - } - IFX_TxtAccess* pAccess = pTxtRun->pAccess; - void* pIdentity = pTxtRun->pIdentity; - const FX_WCHAR* pStr = pTxtRun->pStr; - int32_t* pWidths = pTxtRun->pWidths; - int32_t iLength = pTxtRun->iLength - 1; - IFX_Font* pFont = pTxtRun->pFont; - FX_DWORD dwStyles = pTxtRun->dwStyles; - CFX_RectF rtText(*pTxtRun->pRect); - FX_BOOL bRTLPiece = - (pTxtRun->dwCharStyles & FX_TXTCHARSTYLE_OddBidiLevel) != 0; - FX_BOOL bArabicNumber = - (pTxtRun->dwCharStyles & FX_TXTCHARSTYLE_ArabicNumber) != 0; - FX_BOOL bArabicComma = - (pTxtRun->dwCharStyles & FX_TXTCHARSTYLE_ArabicComma) != 0; - FX_FLOAT fFontSize = pTxtRun->fFontSize; - int32_t iFontSize = FXSYS_round(fFontSize * 20.0f); - int32_t iAscent = pFont->GetAscent(); - int32_t iDescent = pFont->GetDescent(); - int32_t iMaxHeight = iAscent - iDescent; - FX_FLOAT fFontHeight = fFontSize; - FX_FLOAT fAscent = fFontHeight * (FX_FLOAT)iAscent / (FX_FLOAT)iMaxHeight; - FX_FLOAT fDescent = fFontHeight * (FX_FLOAT)iDescent / (FX_FLOAT)iMaxHeight; - FX_BOOL bVerticalDoc = (dwStyles & FX_TXTLAYOUTSTYLE_VerticalLayout) != 0; - FX_BOOL bVerticalChar = (dwStyles & FX_TXTLAYOUTSTYLE_VerticalChars) != 0; - int32_t iRotation = GetLineRotation(dwStyles) + pTxtRun->iCharRotation; - int32_t iCharRotation; - FX_WCHAR wch, wPrev = 0xFEFF, wNext, wForm, wLast = 0xFEFF; - int32_t iWidth, iCharWidth, iCharHeight; - FX_FLOAT fX, fY, fCharWidth, fCharHeight; - int32_t iHorScale = pTxtRun->iHorizontalScale; - int32_t iVerScale = pTxtRun->iVerticalScale; - FX_BOOL bSkipSpace = pTxtRun->bSkipSpace; - FX_BOOL bEmptyChar, bShadda = FALSE, bLam = FALSE; - FX_DWORD dwProps, dwCharType; - FX_FORMCHAR formChars[3]; - FX_FLOAT fYBase; - fX = rtText.left; - if (bVerticalDoc) { - fX += (rtText.width - fFontSize) / 2.0f; - fYBase = bRTLPiece ? rtText.bottom() : rtText.top; - fY = fYBase; - } else { - if (bRTLPiece) { - fX = rtText.right(); - } - fYBase = rtText.top + (rtText.height - fFontSize) / 2.0f; - fY = fYBase + fAscent; - } - int32_t iCount = 0, iNext, iForms; - for (int32_t i = 0; i <= iLength; i++) { - if (pAccess != NULL) { - wch = pAccess->GetChar(pIdentity, i); - iWidth = pAccess->GetWidth(pIdentity, i); - } else { - wch = *pStr++; - iWidth = *pWidths++; - } - dwProps = FX_GetUnicodeProperties(wch); - dwCharType = (dwProps & FX_CHARTYPEBITSMASK); - if (dwCharType == FX_CHARTYPE_ArabicAlef && iWidth == 0) { - wPrev = 0xFEFF; - wLast = wch; - continue; - } - if (dwCharType >= FX_CHARTYPE_ArabicAlef) { - if (i < iLength) { - if (pAccess != NULL) { - iNext = i + 1; - while (iNext <= iLength) { - wNext = pAccess->GetChar(pIdentity, iNext); - dwProps = FX_GetUnicodeProperties(wNext); - if ((dwProps & FX_CHARTYPEBITSMASK) != FX_CHARTYPE_Combination) { - break; - } - iNext++; - } - if (iNext > iLength) { - wNext = 0xFEFF; - } - } else { - int32_t j = -1; - do { - j++; - if (i + j >= iLength) { - break; - } - wNext = pStr[j]; - dwProps = FX_GetUnicodeProperties(wNext); - } while ((dwProps & FX_CHARTYPEBITSMASK) == FX_CHARTYPE_Combination); - if (i + j >= iLength) { - wNext = 0xFEFF; - } - } - } else { - wNext = 0xFEFF; - } - wForm = m_pArabicChar->GetFormChar(wch, wPrev, wNext); - bLam = (wPrev == 0x0644 && wch == 0x0644 && wNext == 0x0647); - } else if (dwCharType == FX_CHARTYPE_Combination) { - wForm = wch; - if (wch >= 0x064C && wch <= 0x0651) { - if (bShadda) { - wForm = 0xFEFF; - bShadda = FALSE; - } else { - wNext = 0xFEFF; - if (pAccess != NULL) { - iNext = i + 1; - if (iNext <= iLength) { - wNext = pAccess->GetChar(pIdentity, iNext); - } - } else { - if (i < iLength) { - wNext = *pStr; - } - } - if (wch == 0x0651) { - if (wNext >= 0x064C && wNext <= 0x0650) { - wForm = FX_GetArabicFromShaddaTable(wNext); - bShadda = TRUE; - } - } else { - if (wNext == 0x0651) { - wForm = FX_GetArabicFromShaddaTable(wch); - bShadda = TRUE; - } - } - } - } else { - bShadda = FALSE; - } - } else if (dwCharType == FX_CHARTYPE_Numeric) { - wForm = wch; - if (bArabicNumber) { - wForm += 0x0630; - } - } else if (wch == L'.') { - wForm = wch; - if (bArabicNumber) { - wNext = 0xFEFF; - if (pAccess != NULL) { - iNext = i + 1; - if (iNext <= iLength) { - wNext = pAccess->GetChar(pIdentity, iNext); - } - } else { - if (i < iLength) { - wNext = *pStr; - } - } - if (wNext >= L'0' && wNext <= L'9') { - wForm = 0x066B; - } - } - } else if (wch == L',') { - wForm = wch; - if (bArabicComma) { - wForm = 0x060C; - } - } else if (bRTLPiece || bVerticalChar) { - wForm = FX_GetMirrorChar(wch, dwProps, bRTLPiece, bVerticalChar); - } else { - wForm = wch; - } - if (dwCharType != FX_CHARTYPE_Combination) { - bShadda = FALSE; - } - if (dwCharType < FX_CHARTYPE_ArabicAlef) { - bLam = FALSE; - } - dwProps = FX_GetUnicodeProperties(wForm); - iCharRotation = iRotation; - if (bVerticalChar && (dwProps & 0x8000) != 0) { - iCharRotation++; - } - iCharRotation %= 4; - bEmptyChar = - (dwCharType >= FX_CHARTYPE_Tab && dwCharType <= FX_CHARTYPE_Control); - if (wForm == 0xFEFF) { - bEmptyChar = TRUE; - } - iForms = bLam ? 3 : 1; - iCount += (bEmptyChar && bSkipSpace) ? 0 : iForms; - if (pCharPos == NULL) { - if (iWidth > 0) { - wPrev = wch; - } - wLast = wch; - continue; - } - iCharWidth = iWidth; - if (iCharWidth < 0) { - iCharWidth = -iCharWidth; - } - iCharWidth /= iFontSize; - formChars[0].wch = wch; - formChars[0].wForm = wForm; - formChars[0].iWidth = iCharWidth; - if (bLam) { - formChars[1].wForm = 0x0651; - iCharWidth = 0; - pFont->GetCharWidth(0x0651, iCharWidth, FALSE); - formChars[1].iWidth = iCharWidth; - formChars[2].wForm = 0x0670; - iCharWidth = 0; - pFont->GetCharWidth(0x0670, iCharWidth, FALSE); - formChars[2].iWidth = iCharWidth; - } - for (int32_t j = 0; j < iForms; j++) { - wForm = (FX_WCHAR)formChars[j].wForm; - iCharWidth = formChars[j].iWidth; - if (j > 0) { - dwCharType = FX_CHARTYPE_Combination; - wch = wForm; - wLast = (FX_WCHAR)formChars[j - 1].wForm; - } - if (!bEmptyChar || (bEmptyChar && !bSkipSpace)) { - pCharPos->m_GlyphIndex = - bCharCode ? wch : pFont->GetGlyphIndex(wForm, FALSE); - pCharPos->m_ExtGID = pCharPos->m_GlyphIndex; - pCharPos->m_FontCharWidth = iCharWidth; - if (pWSForms) { - *pWSForms += wForm; - } - } - if (bVerticalDoc) { - iCharHeight = iCharWidth; - iCharWidth = 1000; - } else { - iCharHeight = 1000; - } - fCharWidth = fFontSize * iCharWidth / 1000.0f; - fCharHeight = fFontSize * iCharHeight / 1000.0f; - if (bRTLPiece && dwCharType != FX_CHARTYPE_Combination) { - if (bVerticalDoc) { - fY -= fCharHeight; - } else { - fX -= fCharWidth; - } - } - if (!bEmptyChar || (bEmptyChar && !bSkipSpace)) { - pCharPos->m_OriginX = fX; - pCharPos->m_OriginY = fY; - if ((dwStyles & FX_TXTLAYOUTSTYLE_CombText) != 0) { - int32_t iFormWidth = iCharWidth; - pFont->GetCharWidth(wForm, iFormWidth, FALSE); - FX_FLOAT fOffset = fFontSize * (iCharWidth - iFormWidth) / 2000.0f; - if (bVerticalDoc) { - pCharPos->m_OriginY += fOffset; - } else { - pCharPos->m_OriginX += fOffset; - } - } - if (dwCharType == FX_CHARTYPE_Combination) { - CFX_Rect rtBBox; - rtBBox.Reset(); - if (pFont->GetCharBBox(wForm, rtBBox, FALSE)) { - pCharPos->m_OriginY = - fYBase + fFontSize - - fFontSize * (FX_FLOAT)rtBBox.height / (FX_FLOAT)iMaxHeight; - } - if (wForm == wch && wLast != 0xFEFF) { - FX_DWORD dwLastProps = FX_GetUnicodeProperties(wLast); - if ((dwLastProps & FX_CHARTYPEBITSMASK) == - FX_CHARTYPE_Combination) { - CFX_Rect rtBBox; - rtBBox.Reset(); - if (pFont->GetCharBBox(wLast, rtBBox, FALSE)) { - pCharPos->m_OriginY -= fFontSize * rtBBox.height / iMaxHeight; - } - } - } - } - CFX_PointF ptOffset; - FX_BOOL bAdjusted = FALSE; - if (pAdjustPos) { - bAdjusted = pAdjustPos(wForm, bCharCode, pFont, fFontSize, - bVerticalChar, ptOffset); - } - if (!bAdjusted && bVerticalChar && (dwProps & 0x00010000) != 0) { - CFX_Rect rtBBox; - rtBBox.Reset(); - if (pFont->GetCharBBox(wForm, rtBBox, FALSE)) { - ptOffset.x = fFontSize * (850 - rtBBox.right()) / iMaxHeight; - ptOffset.y = fFontSize * (iAscent - rtBBox.top - 150) / iMaxHeight; - } - } - pCharPos->m_OriginX += ptOffset.x; - pCharPos->m_OriginY -= ptOffset.y; - } - if (!bRTLPiece && dwCharType != FX_CHARTYPE_Combination) { - if (bVerticalDoc) { - fY += fCharHeight; - } else { - fX += fCharWidth; - } - } - if (!bEmptyChar || (bEmptyChar && !bSkipSpace)) { - pCharPos->m_bGlyphAdjust = TRUE; - if (bVerticalDoc) { - if (iCharRotation == 0) { - pCharPos->m_AdjustMatrix[0] = -1; - pCharPos->m_AdjustMatrix[1] = 0; - pCharPos->m_AdjustMatrix[2] = 0; - pCharPos->m_AdjustMatrix[3] = 1; - pCharPos->m_OriginY += fAscent; - } else if (iCharRotation == 1) { - pCharPos->m_AdjustMatrix[0] = 0; - pCharPos->m_AdjustMatrix[1] = -1; - pCharPos->m_AdjustMatrix[2] = -1; - pCharPos->m_AdjustMatrix[3] = 0; - pCharPos->m_OriginX -= fDescent; - } else if (iCharRotation == 2) { - pCharPos->m_AdjustMatrix[0] = 1; - pCharPos->m_AdjustMatrix[1] = 0; - pCharPos->m_AdjustMatrix[2] = 0; - pCharPos->m_AdjustMatrix[3] = -1; - pCharPos->m_OriginX += fCharWidth; - pCharPos->m_OriginY += fAscent; - } else { - pCharPos->m_AdjustMatrix[0] = 0; - pCharPos->m_AdjustMatrix[1] = 1; - pCharPos->m_AdjustMatrix[2] = 1; - pCharPos->m_AdjustMatrix[3] = 0; - pCharPos->m_OriginX += fAscent; - } - } else { - if (iCharRotation == 0) { - pCharPos->m_AdjustMatrix[0] = -1; - pCharPos->m_AdjustMatrix[1] = 0; - pCharPos->m_AdjustMatrix[2] = 0; - pCharPos->m_AdjustMatrix[3] = 1; - } else if (iCharRotation == 1) { - pCharPos->m_AdjustMatrix[0] = 0; - pCharPos->m_AdjustMatrix[1] = -1; - pCharPos->m_AdjustMatrix[2] = -1; - pCharPos->m_AdjustMatrix[3] = 0; - pCharPos->m_OriginX -= fDescent; - pCharPos->m_OriginY -= fAscent + fDescent; - } else if (iCharRotation == 2) { - pCharPos->m_AdjustMatrix[0] = 1; - pCharPos->m_AdjustMatrix[1] = 0; - pCharPos->m_AdjustMatrix[2] = 0; - pCharPos->m_AdjustMatrix[3] = -1; - pCharPos->m_OriginX += fCharWidth; - pCharPos->m_OriginY -= fAscent; - } else { - pCharPos->m_AdjustMatrix[0] = 0; - pCharPos->m_AdjustMatrix[1] = 1; - pCharPos->m_AdjustMatrix[2] = 1; - pCharPos->m_AdjustMatrix[3] = 0; - pCharPos->m_OriginX += fAscent; - } - } - if (iHorScale != 100 || iVerScale != 100) { - pCharPos->m_AdjustMatrix[0] = - pCharPos->m_AdjustMatrix[0] * iHorScale / 100.0f; - pCharPos->m_AdjustMatrix[1] = - pCharPos->m_AdjustMatrix[1] * iHorScale / 100.0f; - pCharPos->m_AdjustMatrix[2] = - pCharPos->m_AdjustMatrix[2] * iVerScale / 100.0f; - pCharPos->m_AdjustMatrix[3] = - pCharPos->m_AdjustMatrix[3] * iVerScale / 100.0f; - } - pCharPos++; - } - } - if (iWidth > 0) { - wPrev = (FX_WCHAR)formChars[0].wch; - } - wLast = wch; - } - return iCount; -} -int32_t CFX_TxtBreak::GetCharRects(const FX_TXTRUN* pTxtRun, - CFX_RectFArray& rtArray, - FX_BOOL bCharBBox) const { - if (pTxtRun == NULL || pTxtRun->iLength < 1) { - return 0; - } - IFX_TxtAccess* pAccess = pTxtRun->pAccess; - void* pIdentity = pTxtRun->pIdentity; - const FX_WCHAR* pStr = pTxtRun->pStr; - int32_t* pWidths = pTxtRun->pWidths; - int32_t iLength = pTxtRun->iLength; - CFX_RectF rect(*pTxtRun->pRect); - FX_BOOL bRTLPiece = - (pTxtRun->dwCharStyles & FX_TXTCHARSTYLE_OddBidiLevel) != 0; - FX_FLOAT fFontSize = pTxtRun->fFontSize; - int32_t iFontSize = FXSYS_round(fFontSize * 20.0f); - FX_FLOAT fScale = fFontSize / 1000.0f; - IFX_Font* pFont = pTxtRun->pFont; - if (pFont == NULL) { - bCharBBox = FALSE; - } - CFX_Rect bbox; - bbox.Set(0, 0, 0, 0); - if (bCharBBox) { - bCharBBox = pFont->GetBBox(bbox); - } - FX_FLOAT fLeft = std::max(0.0f, bbox.left * fScale); - FX_FLOAT fHeight = FXSYS_fabs(bbox.height * fScale); - rtArray.RemoveAll(); - rtArray.SetSize(iLength); - FX_BOOL bVertical = - (pTxtRun->dwStyles & FX_TXTLAYOUTSTYLE_VerticalLayout) != 0; - FX_BOOL bSingleLine = (pTxtRun->dwStyles & FX_TXTLAYOUTSTYLE_SingleLine) != 0; - FX_BOOL bCombText = (pTxtRun->dwStyles & FX_TXTLAYOUTSTYLE_CombText) != 0; - FX_WCHAR wch, wLineBreakChar = pTxtRun->wLineBreakChar; - int32_t iCharSize; - FX_FLOAT fCharSize, fStart; - if (bVertical) { - fStart = bRTLPiece ? rect.bottom() : rect.top; - } else { - fStart = bRTLPiece ? rect.right() : rect.left; - } - for (int32_t i = 0; i < iLength; i++) { - if (pAccess != NULL) { - wch = pAccess->GetChar(pIdentity, i); - iCharSize = pAccess->GetWidth(pIdentity, i); - } else { - wch = *pStr++; - iCharSize = *pWidths++; - } - fCharSize = (FX_FLOAT)iCharSize / 20000.0f; - FX_BOOL bRet = (!bSingleLine && FX_IsCtrlCode(wch)); - if (!(wch == L'\v' || wch == L'\f' || wch == 0x2028 || wch == 0x2029 || - (wLineBreakChar != 0xFEFF && wch == wLineBreakChar))) { - bRet = FALSE; - } - if (bRet) { - iCharSize = iFontSize * 500; - fCharSize = fFontSize / 2.0f; - } - if (bVertical) { - rect.top = fStart; - if (bRTLPiece) { - rect.top -= fCharSize; - fStart -= fCharSize; - } else { - fStart += fCharSize; - } - rect.height = fCharSize; - } else { - rect.left = fStart; - if (bRTLPiece) { - rect.left -= fCharSize; - fStart -= fCharSize; - } else { - fStart += fCharSize; - } - rect.width = fCharSize; - } - if (bCharBBox && !bRet) { - int32_t iCharWidth = 1000; - pFont->GetCharWidth(wch, iCharWidth); - FX_FLOAT fRTLeft = 0, fCharWidth = 0; - if (iCharWidth > 0) { - fCharWidth = iCharWidth * fScale; - fRTLeft = fLeft; - if (bCombText) { - fRTLeft = (rect.width - fCharWidth) / 2.0f; - } - } - CFX_RectF rtBBoxF; - if (bVertical) { - rtBBoxF.top = rect.left + fRTLeft; - rtBBoxF.left = rect.top + (rect.height - fHeight) / 2.0f; - rtBBoxF.height = fCharWidth; - rtBBoxF.width = fHeight; - rtBBoxF.left = std::max(rtBBoxF.left, 0.0f); - } else { - rtBBoxF.left = rect.left + fRTLeft; - rtBBoxF.top = rect.top + (rect.height - fHeight) / 2.0f; - rtBBoxF.width = fCharWidth; - rtBBoxF.height = fHeight; - rtBBoxF.top = std::max(rtBBoxF.top, 0.0f); - } - rtArray.SetAt(i, rtBBoxF); - continue; - } - rtArray.SetAt(i, rect); - } - return iLength; -} diff --git a/xfa/src/fgas/layout/fgas_textbreak.h b/xfa/src/fgas/layout/fgas_textbreak.h deleted file mode 100644 index 65fba720d5..0000000000 --- a/xfa/src/fgas/layout/fgas_textbreak.h +++ /dev/null @@ -1,222 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FGAS_LAYOUT_FGAS_TEXTBREAK_H_ -#define XFA_SRC_FGAS_LAYOUT_FGAS_TEXTBREAK_H_ - -#include "core/include/fxcrt/fx_ucd.h" -#include "core/include/fxge/fx_ge.h" -#include "xfa/src/fgas/crt/fgas_utils.h" -#include "xfa/src/fgas/layout/fgas_unicode.h" - -class IFX_Font; -class CFX_Char; -class IFX_TxtAccess; -class CFX_TxtChar; -class CFX_TxtPiece; -class IFX_TxtBreak; - -#define FX_TXTBREAKPOLICY_None 0x00 -#define FX_TXTBREAKPOLICY_Pagination 0x01 -#define FX_TXTBREAKPOLICY_SpaceBreak 0x02 -#define FX_TXTBREAKPOLICY_NumberBreak 0x04 -#define FX_TXTBREAK_None 0x00 -#define FX_TXTBREAK_PieceBreak 0x01 -#define FX_TXTBREAK_LineBreak 0x02 -#define FX_TXTBREAK_ParagraphBreak 0x03 -#define FX_TXTBREAK_PageBreak 0x04 -#define FX_TXTBREAK_ControlChar 0x10 -#define FX_TXTBREAK_BreakChar 0x20 -#define FX_TXTBREAK_UnknownChar 0x40 -#define FX_TXTBREAK_RemoveChar 0x80 -#define FX_TXTLAYOUTSTYLE_MutipleFormat 0x0001 -#define FX_TXTLAYOUTSTYLE_VerticalLayout 0x0002 -#define FX_TXTLAYOUTSTYLE_VerticalChars 0x0004 -#define FX_TXTLAYOUTSTYLE_ReverseLine 0x0008 -#define FX_TXTLAYOUTSTYLE_ArabicContext 0x0010 -#define FX_TXTLAYOUTSTYLE_ArabicShapes 0x0020 -#define FX_TXTLAYOUTSTYLE_RTLReadingOrder 0x0040 -#define FX_TXTLAYOUTSTYLE_ExpandTab 0x0100 -#define FX_TXTLAYOUTSTYLE_SingleLine 0x0200 -#define FX_TXTLAYOUTSTYLE_CombText 0x0400 -#define FX_TXTCHARSTYLE_Alignment 0x000F -#define FX_TXTCHARSTYLE_ArabicNumber 0x0010 -#define FX_TXTCHARSTYLE_ArabicShadda 0x0020 -#define FX_TXTCHARSTYLE_OddBidiLevel 0x0040 -#define FX_TXTCHARSTYLE_RTLReadingOrder 0x0080 -#define FX_TXTCHARSTYLE_ArabicContext 0x0300 -#define FX_TXTCHARSTYLE_ArabicIndic 0x0400 -#define FX_TXTCHARSTYLE_ArabicComma 0x0800 -#define FX_TXTLINEALIGNMENT_Left 0 -#define FX_TXTLINEALIGNMENT_Center 1 -#define FX_TXTLINEALIGNMENT_Right 2 -#define FX_TXTLINEALIGNMENT_Justified (1 << 2) -#define FX_TXTLINEALIGNMENT_Distributed (2 << 2) -#define FX_TXTLINEALIGNMENT_JustifiedLeft \ - (FX_TXTLINEALIGNMENT_Left | FX_TXTLINEALIGNMENT_Justified) -#define FX_TXTLINEALIGNMENT_JustifiedCenter \ - (FX_TXTLINEALIGNMENT_Center | FX_TXTLINEALIGNMENT_Justified) -#define FX_TXTLINEALIGNMENT_JustifiedRight \ - (FX_TXTLINEALIGNMENT_Right | FX_TXTLINEALIGNMENT_Justified) -#define FX_TXTLINEALIGNMENT_DistributedLeft \ - (FX_TXTLINEALIGNMENT_Left | FX_TXTLINEALIGNMENT_Distributed) -#define FX_TXTLINEALIGNMENT_DistributedCenter \ - (FX_TXTLINEALIGNMENT_Center | FX_TXTLINEALIGNMENT_Distributed) -#define FX_TXTLINEALIGNMENT_DistributedRight \ - (FX_TXTLINEALIGNMENT_Right | FX_TXTLINEALIGNMENT_Distributed) -#define FX_TXTLINEALIGNMENT_LowerMask 0x03 -#define FX_TXTLINEALIGNMENT_HigherMask 0x0C -#define FX_TXTBREAK_MinimumTabWidth 160000 - -class IFX_TxtAccess { - public: - virtual ~IFX_TxtAccess() {} - virtual FX_WCHAR GetChar(void* pIdentity, int32_t index) const = 0; - virtual int32_t GetWidth(void* pIdentity, int32_t index) const = 0; -}; - -struct FX_TXTRUN { - FX_TXTRUN() { - pAccess = NULL; - pIdentity = NULL; - pStr = NULL; - pWidths = NULL; - iLength = 0; - pFont = NULL; - fFontSize = 12; - dwStyles = 0; - iHorizontalScale = 100; - iVerticalScale = 100; - iCharRotation = 0; - dwCharStyles = 0; - pRect = NULL; - wLineBreakChar = L'\n'; - bSkipSpace = TRUE; - } - - IFX_TxtAccess* pAccess; - void* pIdentity; - const FX_WCHAR* pStr; - int32_t* pWidths; - int32_t iLength; - IFX_Font* pFont; - FX_FLOAT fFontSize; - FX_DWORD dwStyles; - int32_t iHorizontalScale; - int32_t iVerticalScale; - int32_t iCharRotation; - FX_DWORD dwCharStyles; - const CFX_RectF* pRect; - FX_WCHAR wLineBreakChar; - FX_BOOL bSkipSpace; -}; - -class CFX_TxtPiece : public CFX_Target { - public: - CFX_TxtPiece() - : m_dwStatus(FX_TXTBREAK_PieceBreak), - m_iStartPos(0), - m_iWidth(-1), - m_iStartChar(0), - m_iChars(0), - m_iBidiLevel(0), - m_iBidiPos(0), - m_iHorizontalScale(100), - m_iVerticalScale(100), - m_dwCharStyles(0), - m_pChars(NULL), - m_pUserData(NULL) {} - int32_t GetEndPos() const { - return m_iWidth < 0 ? m_iStartPos : m_iStartPos + m_iWidth; - } - int32_t GetLength() const { return m_iChars; } - int32_t GetEndChar() const { return m_iStartChar + m_iChars; } - CFX_TxtChar* GetCharPtr(int32_t index) const { - FXSYS_assert(index > -1 && index < m_iChars && m_pChars != NULL); - return m_pChars->GetDataPtr(m_iStartChar + index); - } - void GetString(FX_WCHAR* pText) const { - FXSYS_assert(pText != NULL); - int32_t iEndChar = m_iStartChar + m_iChars; - CFX_Char* pChar; - for (int32_t i = m_iStartChar; i < iEndChar; i++) { - pChar = m_pChars->GetDataPtr(i); - *pText++ = (FX_WCHAR)pChar->m_wCharCode; - } - } - - void GetString(CFX_WideString& wsText) const { - FX_WCHAR* pText = wsText.GetBuffer(m_iChars); - GetString(pText); - wsText.ReleaseBuffer(m_iChars); - } - void GetWidths(int32_t* pWidths) const { - FXSYS_assert(pWidths != NULL); - int32_t iEndChar = m_iStartChar + m_iChars; - CFX_Char* pChar; - for (int32_t i = m_iStartChar; i < iEndChar; i++) { - pChar = m_pChars->GetDataPtr(i); - *pWidths++ = pChar->m_iCharWidth; - } - } - FX_DWORD m_dwStatus; - int32_t m_iStartPos; - int32_t m_iWidth; - int32_t m_iStartChar; - int32_t m_iChars; - int32_t m_iBidiLevel; - int32_t m_iBidiPos; - int32_t m_iHorizontalScale; - int32_t m_iVerticalScale; - FX_DWORD m_dwCharStyles; - CFX_TxtCharArray* m_pChars; - void* m_pUserData; -}; -typedef CFX_BaseArrayTemplate CFX_TxtPieceArray; - -class IFX_TxtBreak { - public: - static IFX_TxtBreak* Create(FX_DWORD dwPolicies); - virtual ~IFX_TxtBreak() {} - virtual void Release() = 0; - virtual void SetLineWidth(FX_FLOAT fLineWidth) = 0; - virtual void SetLinePos(FX_FLOAT fLinePos) = 0; - virtual FX_DWORD GetLayoutStyles() const = 0; - virtual void SetLayoutStyles(FX_DWORD dwLayoutStyles) = 0; - virtual void SetFont(IFX_Font* pFont) = 0; - virtual void SetFontSize(FX_FLOAT fFontSize) = 0; - virtual void SetTabWidth(FX_FLOAT fTabWidth, FX_BOOL bEquidistant) = 0; - virtual void SetDefaultChar(FX_WCHAR wch) = 0; - virtual void SetParagraphBreakChar(FX_WCHAR wch) = 0; - virtual void SetLineBreakTolerance(FX_FLOAT fTolerance) = 0; - virtual void SetHorizontalScale(int32_t iScale) = 0; - virtual void SetVerticalScale(int32_t iScale) = 0; - virtual void SetCharRotation(int32_t iCharRotation) = 0; - virtual void SetCharSpace(FX_FLOAT fCharSpace) = 0; - virtual void SetAlignment(int32_t iAlignment) = 0; - virtual FX_DWORD GetContextCharStyles() const = 0; - virtual void SetContextCharStyles(FX_DWORD dwCharStyles) = 0; - virtual void SetCombWidth(FX_FLOAT fCombWidth) = 0; - virtual void SetUserData(void* pUserData) = 0; - virtual FX_DWORD AppendChar(FX_WCHAR wch) = 0; - virtual FX_DWORD EndBreak(FX_DWORD dwStatus = FX_TXTBREAK_PieceBreak) = 0; - virtual int32_t CountBreakChars() const = 0; - virtual int32_t CountBreakPieces() const = 0; - virtual const CFX_TxtPiece* GetBreakPiece(int32_t index) const = 0; - virtual void ClearBreakPieces() = 0; - virtual void Reset() = 0; - virtual int32_t GetDisplayPos( - const FX_TXTRUN* pTxtRun, - FXTEXT_CHARPOS* pCharPos, - FX_BOOL bCharCode = FALSE, - CFX_WideString* pWSForms = NULL, - FX_AdjustCharDisplayPos pAdjustPos = NULL) const = 0; - virtual int32_t GetCharRects(const FX_TXTRUN* pTxtRun, - CFX_RectFArray& rtArray, - FX_BOOL bCharBBox = FALSE) const = 0; -}; - -#endif // XFA_SRC_FGAS_LAYOUT_FGAS_TEXTBREAK_H_ diff --git a/xfa/src/fgas/layout/fgas_unicode.cpp b/xfa/src/fgas/layout/fgas_unicode.cpp deleted file mode 100644 index f463d753b5..0000000000 --- a/xfa/src/fgas/layout/fgas_unicode.cpp +++ /dev/null @@ -1,117 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fgas/layout/fgas_unicode.h" - -void FX_TEXTLAYOUT_PieceSort(CFX_TPOArray& tpos, int32_t iStart, int32_t iEnd) { - FXSYS_assert(iStart > -1 && iStart < tpos.GetSize()); - FXSYS_assert(iEnd > -1 && iEnd < tpos.GetSize()); - if (iStart >= iEnd) { - return; - } - int32_t i = iStart, j = iEnd; - FX_TPO *pCur = tpos.GetPtrAt(iStart), *pSort; - int32_t v = pCur->pos; - while (i < j) { - while (j > i) { - pSort = tpos.GetPtrAt(j); - if (pSort->pos < v) { - FX_TPO t = *pSort; - *pSort = *pCur; - *pCur = t; - pCur = pSort; - break; - } - j--; - } - while (i < j) { - pSort = tpos.GetPtrAt(i); - if (pSort->pos > v) { - FX_TPO t = *pSort; - *pSort = *pCur; - *pCur = t; - pCur = pSort; - break; - } - i++; - } - } - i--, j++; - if (iStart < i) { - FX_TEXTLAYOUT_PieceSort(tpos, iStart, i); - } - if (j < iEnd) { - FX_TEXTLAYOUT_PieceSort(tpos, j, iEnd); - } -} -static const FX_JAPCHARPROPERTYEX gs_FX_JapCharPropertysEx[] = { - {0x3001, 0x13}, {0x3002, 0x13}, {0x3041, 0x23}, {0x3043, 0x23}, - {0x3045, 0x23}, {0x3047, 0x23}, {0x3049, 0x23}, {0x3063, 0x23}, - {0x3083, 0x23}, {0x3085, 0x23}, {0x3087, 0x23}, {0x308E, 0x23}, - {0x3095, 0x23}, {0x3096, 0x23}, {0x30A1, 0x23}, {0x30A3, 0x23}, - {0x30A5, 0x23}, {0x30A7, 0x23}, {0x30A9, 0x23}, {0x30C3, 0x23}, - {0x30E3, 0x23}, {0x30E5, 0x23}, {0x30E7, 0x23}, {0x30EE, 0x23}, - {0x30F5, 0x23}, {0x30F6, 0x23}, {0x30FB, 0x22}, {0x31F0, 0x23}, - {0x31F1, 0x23}, {0x31F2, 0x23}, {0x31F3, 0x23}, {0x31F4, 0x23}, - {0x31F5, 0x23}, {0x31F6, 0x23}, {0x31F7, 0x23}, {0x31F8, 0x23}, - {0x31F9, 0x23}, {0x31FA, 0x23}, {0x31FB, 0x23}, {0x31FC, 0x23}, - {0x31FD, 0x23}, {0x31FE, 0x23}, {0x31FF, 0x23}, -}; -const FX_JAPCHARPROPERTYEX* FX_GetJapCharPropertyEx(FX_WCHAR wch) { - int32_t iStart = 0; - int32_t iEnd = - sizeof(gs_FX_JapCharPropertysEx) / sizeof(FX_JAPCHARPROPERTYEX); - while (iStart <= iEnd) { - int32_t iMid = (iStart + iEnd) / 2; - FX_WCHAR wJapChar = gs_FX_JapCharPropertysEx[iMid].wChar; - if (wch == wJapChar) { - return gs_FX_JapCharPropertysEx + iMid; - } else if (wch < wJapChar) { - iEnd = iMid - 1; - } else { - iStart = iMid + 1; - } - } - return NULL; -} -FX_BOOL FX_AdjustJapCharDisplayPos(FX_WCHAR wch, - FX_BOOL bMBCSCode, - IFX_Font* pFont, - FX_FLOAT fFontSize, - FX_BOOL bVertical, - CFX_PointF& ptOffset) { - if (pFont == NULL || !bVertical) { - return FALSE; - } - if (wch < 0x3001 || wch > 0x31FF) { - return FALSE; - } - const FX_JAPCHARPROPERTYEX* pJapChar = FX_GetJapCharPropertyEx(wch); - if (pJapChar == NULL) { - return FALSE; - } - CFX_Rect rtBBox; - rtBBox.Reset(); - if (pFont->GetCharBBox(wch, rtBBox, bMBCSCode)) { - switch (pJapChar->uAlign & 0xF0) { - case FX_JAPCHARPROPERTYEX_Top: - ptOffset.y = fFontSize * (1000 - rtBBox.height) / 1200.0f; - break; - case FX_JAPCHARPROPERTYEX_Middle: - ptOffset.y = fFontSize * (1000 - rtBBox.height) / 6000.0f; - break; - } - switch (pJapChar->uAlign & 0x0F) { - case FX_JAPCHARPROPERTYEX_Center: - ptOffset.x = fFontSize * (600 - rtBBox.right()) / 1000.0f; - break; - case FX_JAPCHARPROPERTYEX_Right: - ptOffset.x = fFontSize * (950 - rtBBox.right()) / 1000.0f; - break; - } - } - return TRUE; -} diff --git a/xfa/src/fgas/layout/fgas_unicode.h b/xfa/src/fgas/layout/fgas_unicode.h deleted file mode 100644 index f25da87e96..0000000000 --- a/xfa/src/fgas/layout/fgas_unicode.h +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FGAS_LAYOUT_FGAS_UNICODE_H_ -#define XFA_SRC_FGAS_LAYOUT_FGAS_UNICODE_H_ - -#include "xfa/src/fgas/font/fgas_font.h" -#include "xfa/src/fgas/crt/fgas_utils.h" - -#define FX_JAPCHARPROPERTYEX_Left 0x01 -#define FX_JAPCHARPROPERTYEX_Center 0x02 -#define FX_JAPCHARPROPERTYEX_Right 0x03 -#define FX_JAPCHARPROPERTYEX_Top 0x10 -#define FX_JAPCHARPROPERTYEX_Middle 0x20 -#define FX_JAPCHARPROPERTYEX_Bottom 0x30 - -struct FX_TPO { - int32_t index; - int32_t pos; -}; -typedef CFX_MassArrayTemplate CFX_TPOArray; - -void FX_TEXTLAYOUT_PieceSort(CFX_TPOArray& tpos, int32_t iStart, int32_t iEnd); - -struct FX_JAPCHARPROPERTYEX { - FX_WCHAR wChar; - uint8_t uAlign; -}; - -const FX_JAPCHARPROPERTYEX* FX_GetJapCharPropertyEx(FX_WCHAR wch); -typedef FX_BOOL (*FX_AdjustCharDisplayPos)(FX_WCHAR wch, - FX_BOOL bMBCSCode, - IFX_Font* pFont, - FX_FLOAT fFontSize, - FX_BOOL bVertical, - CFX_PointF& ptOffset); -FX_BOOL FX_AdjustJapCharDisplayPos(FX_WCHAR wch, - FX_BOOL bMBCSCode, - IFX_Font* pFont, - FX_FLOAT fFontSize, - FX_BOOL bVertical, - CFX_PointF& ptOffset); - -#endif // XFA_SRC_FGAS_LAYOUT_FGAS_UNICODE_H_ diff --git a/xfa/src/fgas/localization/fgas_datetime.cpp b/xfa/src/fgas/localization/fgas_datetime.cpp deleted file mode 100644 index e803b490d6..0000000000 --- a/xfa/src/fgas/localization/fgas_datetime.cpp +++ /dev/null @@ -1,550 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "core/include/fxcrt/fx_system.h" -#include "xfa/src/fgas/localization/fgas_datetime.h" - -#if _FX_OS_ == _FX_LINUX_DESKTOP_ || _FX_OS_ == _FX_ANDROID_ || \ - _FX_OS_ == _FX_MACOSX_ || _FX_OS_ == _FX_IOS_ -#include -#include -#endif - -const uint8_t g_FXDaysPerMonth[12] = {31, 28, 31, 30, 31, 30, - 31, 31, 30, 31, 30, 31}; -const uint8_t g_FXDaysPerLeapMonth[12] = {31, 29, 31, 30, 31, 30, - 31, 31, 30, 31, 30, 31}; -const int32_t g_FXDaysBeforeMonth[12] = {0, 31, 59, 90, 120, 151, - 181, 212, 243, 273, 304, 334}; -const int32_t g_FXDaysBeforeLeapMonth[12] = {0, 31, 60, 91, 121, 152, - 182, 213, 244, 274, 305, 335}; -const int32_t g_FXDaysPerYear = 365; -const int32_t g_FXDaysPerLeapYear = 366; -const int32_t g_FXDaysPer4Years = 1461; -const int32_t g_FXDaysPer100Years = 36524; -const int32_t g_FXDaysPer400Years = 146097; -const int64_t g_FXMillisecondsPerSecond = 1000; -const int64_t g_FXMillisecondsPerMinute = 60000; -const int64_t g_FXMillisecondsPerHour = 3600000; -const int64_t g_FXMillisecondsPerDay = 86400000; -FX_BOOL FX_IsLeapYear(int32_t iYear) { - FXSYS_assert(iYear != 0); - return ((iYear % 4) == 0 && (iYear % 100) != 0) || (iYear % 400) == 0; -} -int32_t FX_DaysInYear(int32_t iYear) { - FXSYS_assert(iYear != 0); - return FX_IsLeapYear(iYear) ? g_FXDaysPerLeapYear : g_FXDaysPerYear; -} -uint8_t FX_DaysInMonth(int32_t iYear, uint8_t iMonth) { - FXSYS_assert(iYear != 0); - FXSYS_assert(iMonth >= 1 && iMonth <= 12); - const uint8_t* p = - FX_IsLeapYear(iYear) ? g_FXDaysPerLeapMonth : g_FXDaysPerMonth; - return p[iMonth - 1]; -} -static int32_t FX_DaysBeforeMonthInYear(int32_t iYear, uint8_t iMonth) { - FXSYS_assert(iYear != 0); - FXSYS_assert(iMonth >= 1 && iMonth <= 12); - const int32_t* p = - FX_IsLeapYear(iYear) ? g_FXDaysBeforeLeapMonth : g_FXDaysBeforeMonth; - return p[iMonth - 1]; -} -static int64_t FX_DateToDays(int32_t iYear, - uint8_t iMonth, - uint8_t iDay, - FX_BOOL bIncludeThisDay = FALSE) { - FXSYS_assert(iYear != 0); - FXSYS_assert(iMonth >= 1 && iMonth <= 12); - FXSYS_assert(iDay >= 1 && iDay <= FX_DaysInMonth(iYear, iMonth)); - int64_t iDays = FX_DaysBeforeMonthInYear(iYear, iMonth); - iDays += iDay; - if (!bIncludeThisDay) { - iDays--; - } - if (iYear > 0) { - iYear--; - } else { - iDays -= FX_DaysInYear(iYear); - iYear++; - } - return iDays + (int64_t)iYear * 365 + iYear / 4 - iYear / 100 + iYear / 400; -} -static void FX_DaysToDate(int64_t iDays, - int32_t& iYear, - uint8_t& iMonth, - uint8_t& iDay) { - FX_BOOL bBC = iDays < 0; - if (bBC) { - iDays = -iDays; - } - iYear = 1; - iMonth = 1; - iDay = 1; - if (iDays >= g_FXDaysPer400Years) { - iYear += (int32_t)(iDays / g_FXDaysPer400Years * 400); - iDays %= g_FXDaysPer400Years; - } - if (iDays >= g_FXDaysPer100Years) { - if (iDays == g_FXDaysPer100Years * 4) { - iYear += 300; - iDays -= g_FXDaysPer100Years * 3; - } else { - iYear += (int32_t)(iDays / g_FXDaysPer100Years * 100); - iDays %= g_FXDaysPer100Years; - } - } - if (iDays >= g_FXDaysPer4Years) { - iYear += (int32_t)(iDays / g_FXDaysPer4Years * 4); - iDays %= g_FXDaysPer4Years; - } - while (TRUE) { - int32_t iYearDays = FX_DaysInYear(iYear); - if (iDays < iYearDays) { - if (bBC) { - iYear = -iYear; - iDays = iYearDays - iDays; - } - break; - } - iYear++; - iDays -= iYearDays; - } - while (TRUE) { - int32_t iMonthDays = FX_DaysInMonth(iYear, iMonth); - if (iDays < iMonthDays) { - break; - } - iMonth++; - iDays -= iMonthDays; - } - iDay += (uint8_t)iDays; -} - -struct FXUT_SYSTEMTIME { - FX_WORD wYear; - FX_WORD wMonth; - FX_WORD wDayOfWeek; - FX_WORD wDay; - FX_WORD wHour; - FX_WORD wMinute; - FX_WORD wSecond; - FX_WORD wMilliseconds; -}; - -void CFX_Unitime::Now() { - FXUT_SYSTEMTIME utLocal; -#if _FX_OS_ == _FX_WIN32_DESKTOP_ || _FX_OS_ == _FX_WIN32_MOBILE_ || \ - _FX_OS_ == _FX_WIN64_ - ::GetLocalTime((LPSYSTEMTIME)&utLocal); -#elif _FX_OS_ != _FX_EMBEDDED_ -#if 1 - timeval curTime; - gettimeofday(&curTime, NULL); -#else - struct timespec curTime; - clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &curTime); -#endif - struct tm st; - localtime_r(&curTime.tv_sec, &st); - utLocal.wYear = st.tm_year + 1900; - utLocal.wMonth = st.tm_mon + 1; - utLocal.wDayOfWeek = st.tm_wday; - utLocal.wDay = st.tm_mday; - utLocal.wHour = st.tm_hour; - utLocal.wMinute = st.tm_min; - utLocal.wSecond = st.tm_sec; - utLocal.wMilliseconds = curTime.tv_usec / 1000; -#endif - Set(utLocal.wYear, (uint8_t)utLocal.wMonth, (uint8_t)utLocal.wDay, - (uint8_t)utLocal.wHour, (uint8_t)utLocal.wMinute, - (uint8_t)utLocal.wSecond, (FX_WORD)utLocal.wMilliseconds); -} -void CFX_Unitime::SetGMTime() { - FXUT_SYSTEMTIME utLocal; -#if _FX_OS_ == _FX_WIN32_DESKTOP_ || _FX_OS_ == _FX_WIN32_MOBILE_ || \ - _FX_OS_ == _FX_WIN64_ - ::GetSystemTime((LPSYSTEMTIME)&utLocal); -#elif _FX_OS_ != _FX_EMBEDDED_ -#if 1 - timeval curTime; - gettimeofday(&curTime, NULL); -#else - struct timespec curTime; - clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &curTime); -#endif - struct tm st; - gmtime_r(&curTime.tv_sec, &st); - utLocal.wYear = st.tm_year + 1900; - utLocal.wMonth = st.tm_mon + 1; - utLocal.wDayOfWeek = st.tm_wday; - utLocal.wDay = st.tm_mday; - utLocal.wHour = st.tm_hour; - utLocal.wMinute = st.tm_min; - utLocal.wSecond = st.tm_sec; - utLocal.wMilliseconds = curTime.tv_usec / 1000; -#endif - Set(utLocal.wYear, (uint8_t)utLocal.wMonth, (uint8_t)utLocal.wDay, - (uint8_t)utLocal.wHour, (uint8_t)utLocal.wMinute, - (uint8_t)utLocal.wSecond, (FX_WORD)utLocal.wMilliseconds); -} -void CFX_Unitime::Set(int32_t year, - uint8_t month, - uint8_t day, - uint8_t hour, - uint8_t minute, - uint8_t second, - FX_WORD millisecond) { - FXSYS_assert(hour <= 23); - FXSYS_assert(minute <= 59); - FXSYS_assert(second <= 59); - FXSYS_assert(millisecond <= 999); - m_iUnitime = (int64_t)hour * g_FXMillisecondsPerHour + - (int64_t)minute * g_FXMillisecondsPerMinute + - (int64_t)second * g_FXMillisecondsPerSecond + millisecond; - if (year > 0) { - m_iUnitime = - m_iUnitime + - FX_DateToDays(year, month, day, FALSE) * g_FXMillisecondsPerDay; - } -} -void CFX_Unitime::Set(FX_UNITIME t) { - m_iUnitime = t; -} -int32_t CFX_Unitime::GetYear() const { - int32_t iYear; - uint8_t iMonth, iDay; - FX_DaysToDate(GetDayOfAD(), iYear, iMonth, iDay); - return iYear; -} -uint8_t CFX_Unitime::GetMonth() const { - int32_t iYear; - uint8_t iMonth, iDay; - FX_DaysToDate(GetDayOfAD(), iYear, iMonth, iDay); - return iMonth; -} -uint8_t CFX_Unitime::GetDay() const { - int32_t iYear; - uint8_t iMonth, iDay; - FX_DaysToDate(GetDayOfAD(), iYear, iMonth, iDay); - return iDay; -} -FX_WEEKDAY CFX_Unitime::GetDayOfWeek() const { - int32_t v = (int32_t)((m_iUnitime / g_FXMillisecondsPerDay + 1) % 7); - if (v < 0) { - v += 7; - } - return (FX_WEEKDAY)v; -} -FX_WORD CFX_Unitime::GetDayOfYear() const { - int32_t iYear; - uint8_t iMonth, iDay; - FX_DaysToDate(GetDayOfAD(), iYear, iMonth, iDay); - return FX_DaysBeforeMonthInYear(iYear, iMonth) + iDay; -} -int64_t CFX_Unitime::GetDayOfAD() const { - FX_BOOL bBC = m_iUnitime < 0; - int64_t iDays = m_iUnitime / g_FXMillisecondsPerDay; - iDays += bBC ? -1 : 0; - if (bBC && (m_iUnitime % g_FXMillisecondsPerDay) == 0) { - iDays++; - } - return iDays; -} -uint8_t CFX_Unitime::GetHour() const { - int32_t v = (int32_t)(m_iUnitime % g_FXMillisecondsPerDay); - if (v < 0) { - v += g_FXMillisecondsPerDay; - } - return (uint8_t)(v / g_FXMillisecondsPerHour); -} -uint8_t CFX_Unitime::GetMinute() const { - int32_t v = (int32_t)(m_iUnitime % g_FXMillisecondsPerHour); - if (v < 0) { - v += g_FXMillisecondsPerHour; - } - return (uint8_t)(v / g_FXMillisecondsPerMinute); -} -uint8_t CFX_Unitime::GetSecond() const { - int32_t v = (int32_t)(m_iUnitime % g_FXMillisecondsPerMinute); - if (v < 0) { - v += g_FXMillisecondsPerMinute; - } - return (uint8_t)(v / g_FXMillisecondsPerSecond); -} -FX_WORD CFX_Unitime::GetMillisecond() const { - int32_t v = (int32_t)(m_iUnitime % g_FXMillisecondsPerSecond); - if (v < 0) { - v += g_FXMillisecondsPerSecond; - } - return (FX_WORD)v; -} -FX_BOOL CFX_Unitime::AddYears(int32_t iYears) { - FX_UNITIME ut = m_iUnitime; - if (ut < 0) { - ut = -ut; - } - FX_UNITIME r = ut % g_FXMillisecondsPerDay; - int32_t iYear; - uint8_t iMonth, iDay; - FX_DaysToDate(GetDayOfAD(), iYear, iMonth, iDay); - iYear += iYears; - if (iYear == 0) { - iYear = iYears > 0 ? 1 : -1; - } - m_iUnitime = - FX_DateToDays(iYear, iMonth, iDay, FALSE) * g_FXMillisecondsPerDay; - m_iUnitime += (iYear < 0) ? -r : r; - return TRUE; -} -FX_BOOL CFX_Unitime::AddMonths(int32_t iMonths) { - FX_BOOL b = iMonths > 0; - FX_UNITIME ut = m_iUnitime; - if (ut < 0) { - ut = -ut; - } - FX_UNITIME r = ut % g_FXMillisecondsPerDay; - int32_t iYear; - uint8_t iMonth, iDay; - FX_DaysToDate(GetDayOfAD(), iYear, iMonth, iDay); - iMonths += iMonth; - while (iMonths < 1) { - iYear--, iMonths += 12; - } - while (iMonths > 12) { - iYear++, iMonths -= 12; - } - if (iYear == 0) { - iYear = b ? 1 : -1; - } - m_iUnitime = FX_DateToDays(iYear, (uint8_t)iMonths, iDay, FALSE) * - g_FXMillisecondsPerDay; - m_iUnitime += (iYear < 0) ? -r : r; - return TRUE; -} -FX_BOOL CFX_Unitime::AddDays(int32_t iDays) { - m_iUnitime += (int64_t)iDays * g_FXMillisecondsPerDay; - return TRUE; -} -FX_BOOL CFX_Unitime::AddHours(int32_t iHours) { - m_iUnitime += (int64_t)iHours * g_FXMillisecondsPerHour; - return TRUE; -} -FX_BOOL CFX_Unitime::AddMinutes(int32_t iMinutes) { - m_iUnitime += (int64_t)iMinutes * g_FXMillisecondsPerMinute; - return TRUE; -} -FX_BOOL CFX_Unitime::AddSeconds(int32_t iSeconds) { - m_iUnitime += ((int64_t)iSeconds) * g_FXMillisecondsPerSecond; - return TRUE; -} -FX_BOOL CFX_Unitime::AddMilliseconds(int32_t iMilliseconds) { - m_iUnitime += iMilliseconds; - return TRUE; -} -FX_BOOL CFX_DateTime::Set(int32_t year, - uint8_t month, - uint8_t day, - uint8_t hour, - uint8_t minute, - uint8_t second, - FX_WORD millisecond) { - ASSERT(year != 0); - ASSERT(month >= 1 && month <= 12); - ASSERT(day >= 1 && day <= FX_DaysInMonth(year, month)); - ASSERT(hour <= 23); - ASSERT(minute <= 59); - ASSERT(second <= 59); - ASSERT(millisecond <= 999); - m_DateTime.Date.sDate.year = year; - m_DateTime.Date.sDate.month = month; - m_DateTime.Date.sDate.day = day; - m_DateTime.Time.sTime.hour = hour; - m_DateTime.Time.sTime.minute = minute; - m_DateTime.Time.sTime.second = second; - m_DateTime.Time.sTime.millisecond = millisecond; - return TRUE; -} -FX_BOOL CFX_DateTime::FromUnitime(FX_UNITIME t) { - CFX_Unitime ut(t); - FX_DaysToDate(ut.GetDayOfAD(), m_DateTime.Date.sDate.year, - m_DateTime.Date.sDate.month, m_DateTime.Date.sDate.day); - m_DateTime.Date.sDate.day = ut.GetHour(); - m_DateTime.Time.sTime.minute = ut.GetMinute(); - m_DateTime.Time.sTime.second = ut.GetSecond(); - m_DateTime.Time.sTime.millisecond = ut.GetMillisecond(); - return TRUE; -} -FX_UNITIME CFX_DateTime::ToUnitime() const { - FX_UNITIME v = - (int64_t)m_DateTime.Date.sDate.day * g_FXMillisecondsPerHour + - (int64_t)m_DateTime.Time.sTime.minute * g_FXMillisecondsPerMinute + - (int64_t)m_DateTime.Time.sTime.second * g_FXMillisecondsPerSecond + - m_DateTime.Time.sTime.millisecond; - v += FX_DateToDays(m_DateTime.Date.sDate.year, m_DateTime.Date.sDate.month, - m_DateTime.Date.sDate.day, FALSE) * - g_FXMillisecondsPerDay; - return v; -} -int32_t CFX_DateTime::GetYear() const { - return m_DateTime.Date.sDate.year; -} -uint8_t CFX_DateTime::GetMonth() const { - return m_DateTime.Date.sDate.month; -} -uint8_t CFX_DateTime::GetDay() const { - return m_DateTime.Date.sDate.day; -} -FX_WEEKDAY CFX_DateTime::GetDayOfWeek() const { - int32_t v = (int32_t)(FX_DateToDays(m_DateTime.Date.sDate.year, - m_DateTime.Date.sDate.month, - m_DateTime.Date.sDate.day, TRUE) % - 7); - if (v < 0) { - v += 7; - } - return (FX_WEEKDAY)v; -} -FX_WORD CFX_DateTime::GetDayOfYear() const { - return FX_DaysBeforeMonthInYear(m_DateTime.Date.sDate.year, - m_DateTime.Date.sDate.month) + - m_DateTime.Date.sDate.day; -} -int64_t CFX_DateTime::GetDayOfAD() const { - return FX_DateToDays(m_DateTime.Date.sDate.year, m_DateTime.Date.sDate.month, - m_DateTime.Date.sDate.day, TRUE); -} -uint8_t CFX_DateTime::GetHour() const { - return m_DateTime.Date.sDate.day; -} -uint8_t CFX_DateTime::GetMinute() const { - return m_DateTime.Time.sTime.minute; -} -uint8_t CFX_DateTime::GetSecond() const { - return m_DateTime.Time.sTime.second; -} -FX_WORD CFX_DateTime::GetMillisecond() const { - return m_DateTime.Time.sTime.millisecond; -} -FX_BOOL CFX_DateTime::AddYears(int32_t iYears) { - if (iYears == 0) { - return FALSE; - } - int32_t v = m_DateTime.Date.sDate.year + iYears; - if (v >= 0 && m_DateTime.Date.sDate.year < 0) { - v++; - } else if (v <= 0 && m_DateTime.Date.sDate.year > 0) { - v--; - } - m_DateTime.Date.sDate.year = v; - return TRUE; -} -FX_BOOL CFX_DateTime::AddMonths(int32_t iMonths) { - if (iMonths == 0) { - return FALSE; - } - FX_BOOL b = iMonths > 0; - iMonths += m_DateTime.Date.sDate.month; - while (iMonths < 1) { - m_DateTime.Date.sDate.year--; - if (m_DateTime.Date.sDate.year == 0) { - m_DateTime.Date.sDate.year = -1; - } - iMonths += 12; - } - while (iMonths > 12) { - m_DateTime.Date.sDate.year++; - if (m_DateTime.Date.sDate.year == 0) { - m_DateTime.Date.sDate.year = 1; - } - iMonths -= 12; - } - if (m_DateTime.Date.sDate.year == 0) { - m_DateTime.Date.sDate.year = b ? 1 : -1; - } - m_DateTime.Date.sDate.month = (uint8_t)iMonths; - return TRUE; -} -FX_BOOL CFX_DateTime::AddDays(int32_t iDays) { - if (iDays == 0) { - return FALSE; - } - int64_t v1 = - FX_DateToDays(m_DateTime.Date.sDate.year, m_DateTime.Date.sDate.month, - m_DateTime.Date.sDate.day, TRUE); - int64_t v2 = v1 + iDays; - if (v2 <= 0 && v1 > 0) { - v2--; - } else if (v2 >= 0 && v1 < 0) { - v2++; - } - FX_DaysToDate(v2, m_DateTime.Date.sDate.year, m_DateTime.Date.sDate.month, - m_DateTime.Date.sDate.day); - return TRUE; -} -FX_BOOL CFX_DateTime::AddHours(int32_t iHours) { - if (iHours == 0) { - return FALSE; - } - iHours += m_DateTime.Date.sDate.day; - int32_t iDays = iHours / 24; - iHours %= 24; - if (iHours < 0) { - iDays--, iHours += 24; - } - m_DateTime.Date.sDate.day = (uint8_t)iHours; - if (iDays != 0) { - AddDays(iDays); - } - return TRUE; -} -FX_BOOL CFX_DateTime::AddMinutes(int32_t iMinutes) { - if (iMinutes == 0) { - return FALSE; - } - iMinutes += m_DateTime.Time.sTime.minute; - int32_t iHours = iMinutes / 60; - iMinutes %= 60; - if (iMinutes < 0) { - iHours--, iMinutes += 60; - } - m_DateTime.Time.sTime.minute = (uint8_t)iMinutes; - if (iHours != 0) { - AddHours(iHours); - } - return TRUE; -} -FX_BOOL CFX_DateTime::AddSeconds(int32_t iSeconds) { - if (iSeconds == 0) { - return FALSE; - } - iSeconds += m_DateTime.Time.sTime.second; - int32_t iMinutes = iSeconds / 60; - iSeconds %= 60; - if (iSeconds < 0) { - iMinutes--, iSeconds += 60; - } - m_DateTime.Time.sTime.second = (uint8_t)iSeconds; - if (iMinutes != 0) { - AddMinutes(iMinutes); - } - return TRUE; -} -FX_BOOL CFX_DateTime::AddMilliseconds(int32_t iMilliseconds) { - if (iMilliseconds == 0) { - return FALSE; - } - iMilliseconds += m_DateTime.Time.sTime.millisecond; - int32_t iSeconds = (int32_t)(iMilliseconds / g_FXMillisecondsPerSecond); - iMilliseconds %= g_FXMillisecondsPerSecond; - if (iMilliseconds < 0) { - iSeconds--, iMilliseconds += g_FXMillisecondsPerSecond; - } - m_DateTime.Time.sTime.millisecond = (FX_WORD)iMilliseconds; - if (iSeconds != 0) { - AddSeconds(iSeconds); - } - return TRUE; -} diff --git a/xfa/src/fgas/localization/fgas_datetime.h b/xfa/src/fgas/localization/fgas_datetime.h deleted file mode 100644 index 5dd70ccc65..0000000000 --- a/xfa/src/fgas/localization/fgas_datetime.h +++ /dev/null @@ -1,406 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FGAS_LOCALIZATION_FGAS_DATETIME_H_ -#define XFA_SRC_FGAS_LOCALIZATION_FGAS_DATETIME_H_ - -#include "core/include/fxcrt/fx_system.h" - -class CFX_Unitime; -class CFX_DateTime; - -typedef int64_t FX_UNITIME; -enum FX_WEEKDAY { - FX_Sunday = 0, - FX_Monday, - FX_Tuesday, - FX_Wednesday, - FX_Thursday, - FX_Friday, - FX_Saturday, -}; - -FX_BOOL FX_IsLeapYear(int32_t iYear); -int32_t FX_DaysInYear(int32_t iYear); -uint8_t FX_DaysInMonth(int32_t iYear, uint8_t iMonth); - -class CFX_Unitime { - public: - CFX_Unitime() { m_iUnitime = 0; } - CFX_Unitime(FX_UNITIME iUnitime) { m_iUnitime = iUnitime; } - CFX_Unitime(const CFX_Unitime& unitime) { m_iUnitime = unitime.m_iUnitime; } - operator FX_UNITIME*() { return &m_iUnitime; } - operator FX_UNITIME const*() const { return &m_iUnitime; } - operator FX_UNITIME&() { return m_iUnitime; } - operator const FX_UNITIME&() const { return m_iUnitime; } - CFX_Unitime& operator=(const CFX_Unitime& t) { - m_iUnitime = t.m_iUnitime; - return *this; - } - CFX_Unitime& operator=(FX_UNITIME t) { - m_iUnitime = t; - return *this; - } - CFX_Unitime& operator+=(const CFX_Unitime& t) { - m_iUnitime += t.m_iUnitime; - return *this; - } - CFX_Unitime& operator+=(FX_UNITIME t) { - m_iUnitime += t; - return *this; - } - CFX_Unitime& operator-=(const CFX_Unitime& t) { - m_iUnitime -= t.m_iUnitime; - return *this; - } - CFX_Unitime& operator-=(FX_UNITIME t) { - m_iUnitime -= t; - return *this; - } - void Now(); - void SetGMTime(); - void Set(int32_t year, - uint8_t month, - uint8_t day, - uint8_t hour = 0, - uint8_t minute = 0, - uint8_t second = 0, - FX_WORD millisecond = 0); - void Set(FX_UNITIME t); - int32_t GetYear() const; - uint8_t GetMonth() const; - uint8_t GetDay() const; - FX_WEEKDAY GetDayOfWeek() const; - FX_WORD GetDayOfYear() const; - int64_t GetDayOfAD() const; - uint8_t GetHour() const; - uint8_t GetMinute() const; - uint8_t GetSecond() const; - FX_WORD GetMillisecond() const; - FX_BOOL AddYears(int32_t iYears); - FX_BOOL AddMonths(int32_t iMonths); - FX_BOOL AddDays(int32_t iDays); - FX_BOOL AddHours(int32_t iHours); - FX_BOOL AddMinutes(int32_t iMinutes); - FX_BOOL AddSeconds(int32_t iSeconds); - FX_BOOL AddMilliseconds(int32_t iMilliseconds); - friend CFX_Unitime operator+(const CFX_Unitime& t1, const CFX_Unitime& t2) { - return CFX_Unitime(t1.m_iUnitime + t2.m_iUnitime); - } - friend CFX_Unitime operator+(const CFX_Unitime& t1, FX_UNITIME t2) { - return CFX_Unitime(t1.m_iUnitime + t2); - } - friend CFX_Unitime operator+(FX_UNITIME t1, const CFX_Unitime& t2) { - return CFX_Unitime(t1 + t2.m_iUnitime); - } - friend CFX_Unitime operator-(const CFX_Unitime& t1, const CFX_Unitime& t2) { - return CFX_Unitime(t1.m_iUnitime + t2.m_iUnitime); - } - friend CFX_Unitime operator-(const CFX_Unitime& t1, FX_UNITIME t2) { - return CFX_Unitime(t1.m_iUnitime + t2); - } - friend CFX_Unitime operator-(FX_UNITIME t1, const CFX_Unitime& t2) { - return CFX_Unitime(t1 + t2.m_iUnitime); - } - friend bool operator==(const CFX_Unitime& t1, const CFX_Unitime& t2) { - return t1.m_iUnitime == t2.m_iUnitime; - } - friend bool operator==(const CFX_Unitime& t1, FX_UNITIME t2) { - return t1.m_iUnitime == t2; - } - friend bool operator==(FX_UNITIME t1, const CFX_Unitime& t2) { - return t1 == t2.m_iUnitime; - } - friend bool operator!=(const CFX_Unitime& t1, const CFX_Unitime& t2) { - return t1.m_iUnitime != t2.m_iUnitime; - } - friend bool operator!=(const CFX_Unitime& t1, FX_UNITIME t2) { - return t1.m_iUnitime != t2; - } - friend bool operator!=(FX_UNITIME t1, const CFX_Unitime& t2) { - return t1 != t2.m_iUnitime; - } - friend bool operator>(const CFX_Unitime& t1, const CFX_Unitime& t2) { - return t1.m_iUnitime > t2.m_iUnitime; - } - friend bool operator>(const CFX_Unitime& t1, FX_UNITIME t2) { - return t1.m_iUnitime > t2; - } - friend bool operator>(FX_UNITIME t1, const CFX_Unitime& t2) { - return t1 > t2.m_iUnitime; - } - friend bool operator>=(const CFX_Unitime& t1, const CFX_Unitime& t2) { - return t1.m_iUnitime >= t2.m_iUnitime; - } - friend bool operator>=(const CFX_Unitime& t1, FX_UNITIME t2) { - return t1.m_iUnitime >= t2; - } - friend bool operator>=(FX_UNITIME t1, const CFX_Unitime& t2) { - return t1 >= t2.m_iUnitime; - } - friend bool operator<(const CFX_Unitime& t1, const CFX_Unitime& t2) { - return t1.m_iUnitime < t2.m_iUnitime; - } - friend bool operator<(const CFX_Unitime& t1, FX_UNITIME t2) { - return t1.m_iUnitime < t2; - } - friend bool operator<(FX_UNITIME t1, const CFX_Unitime& t2) { - return t1 < t2.m_iUnitime; - } - friend bool operator<=(const CFX_Unitime& t1, const CFX_Unitime& t2) { - return t1.m_iUnitime <= t2.m_iUnitime; - } - friend bool operator<=(const CFX_Unitime& t1, FX_UNITIME t2) { - return t1.m_iUnitime <= t2; - } - friend bool operator<=(FX_UNITIME t1, const CFX_Unitime& t2) { - return t1 <= t2.m_iUnitime; - } - - private: - FX_UNITIME m_iUnitime; -}; - -#if _FX_OS_ != _FX_ANDROID_ -#pragma pack(push, 1) -#endif -struct FX_DATE { - int32_t year; - uint8_t month; - uint8_t day; -}; - -struct FX_TIME { - uint8_t hour; - uint8_t minute; - uint8_t second; - FX_WORD millisecond; -}; - -struct FX_TIMEZONE { - int8_t tzHour; - uint8_t tzMinute; -}; - -struct FX_DATETIME { - union { - struct { - int32_t year; - uint8_t month; - uint8_t day; - } sDate; - FX_DATE aDate; - } Date; - union { - struct { - uint8_t hour; - uint8_t minute; - uint8_t second; - FX_WORD millisecond; - } sTime; - FX_TIME aTime; - } Time; -}; - -struct FX_DATETIMEZONE { - union { - struct { - union { - struct { - int32_t year; - uint8_t month; - uint8_t day; - }; - FX_DATE date; - }; - union { - struct { - uint8_t hour; - uint8_t minute; - uint8_t second; - FX_WORD millisecond; - }; - FX_TIME time; - }; - }; - FX_DATETIME dt; - }; - union { - struct { - int8_t tzHour; - uint8_t tzMinute; - }; - FX_TIMEZONE tz; - }; -}; -#if _FX_OS_ != _FX_ANDROID_ -#pragma pack(pop) -#endif - -class CFX_DateTime { - public: - CFX_DateTime() {} - CFX_DateTime(const FX_DATETIME& dt) { m_DateTime = dt; } - CFX_DateTime(const CFX_DateTime& dt) { m_DateTime = dt.m_DateTime; } - virtual ~CFX_DateTime() {} - operator FX_DATETIME*() { return &m_DateTime; } - operator const FX_DATETIME*() const { return &m_DateTime; } - operator FX_DATETIME&() { return m_DateTime; } - operator const FX_DATETIME&() const { return m_DateTime; } - CFX_DateTime& operator=(const CFX_DateTime& dt) { - m_DateTime = dt.m_DateTime; - return *this; - } - CFX_DateTime& operator=(const FX_DATETIME& dt) { - m_DateTime = dt; - return *this; - } - CFX_DateTime& operator+=(const CFX_DateTime& dt) { - FromUnitime(ToUnitime() + dt.ToUnitime()); - return *this; - } - CFX_DateTime& operator+=(const FX_DATETIME& dt) { - FromUnitime(ToUnitime() + ((const CFX_DateTime&)dt).ToUnitime()); - return *this; - } - CFX_DateTime& operator-=(const CFX_DateTime& dt) { - FromUnitime(ToUnitime() - dt.ToUnitime()); - return *this; - } - CFX_DateTime& operator-=(const FX_DATETIME& dt) { - FromUnitime(ToUnitime() - ((const CFX_DateTime&)dt).ToUnitime()); - return *this; - } - virtual FX_BOOL Set(int32_t year, - uint8_t month, - uint8_t day, - uint8_t hour = 0, - uint8_t minute = 0, - uint8_t second = 0, - FX_WORD millisecond = 0); - virtual FX_BOOL FromUnitime(FX_UNITIME t); - virtual FX_UNITIME ToUnitime() const; - virtual int32_t GetYear() const; - virtual uint8_t GetMonth() const; - virtual uint8_t GetDay() const; - virtual FX_WEEKDAY GetDayOfWeek() const; - virtual FX_WORD GetDayOfYear() const; - virtual int64_t GetDayOfAD() const; - virtual uint8_t GetHour() const; - virtual uint8_t GetMinute() const; - virtual uint8_t GetSecond() const; - virtual FX_WORD GetMillisecond() const; - virtual FX_BOOL AddYears(int32_t iYears); - virtual FX_BOOL AddMonths(int32_t iMonths); - virtual FX_BOOL AddDays(int32_t iDays); - virtual FX_BOOL AddHours(int32_t iHours); - virtual FX_BOOL AddMinutes(int32_t iMinutes); - virtual FX_BOOL AddSeconds(int32_t iSeconds); - virtual FX_BOOL AddMilliseconds(int32_t iMilliseconds); - friend CFX_DateTime operator+(const CFX_DateTime& dt1, - const CFX_DateTime& dt2) { - CFX_DateTime dt; - dt.FromUnitime(dt1.ToUnitime() + dt2.ToUnitime()); - return dt; - } - friend CFX_DateTime operator+(const CFX_DateTime& dt1, - const FX_DATETIME& dt2) { - CFX_DateTime dt; - dt.FromUnitime(dt1.ToUnitime() + ((const CFX_DateTime&)dt2).ToUnitime()); - return dt; - } - friend CFX_DateTime operator+(const FX_DATETIME& dt1, - const CFX_DateTime& dt2) { - CFX_DateTime dt; - dt.FromUnitime(((const CFX_DateTime&)dt1).ToUnitime() + dt2.ToUnitime()); - return dt; - } - friend CFX_DateTime operator-(const CFX_DateTime& dt1, - const CFX_DateTime& dt2) { - CFX_DateTime dt; - dt.FromUnitime(dt1.ToUnitime() - dt2.ToUnitime()); - return dt; - } - friend CFX_DateTime operator-(const CFX_DateTime& dt1, - const FX_DATETIME& dt2) { - CFX_DateTime dt; - dt.FromUnitime(dt1.ToUnitime() - ((const CFX_DateTime&)dt2).ToUnitime()); - return dt; - } - friend CFX_DateTime operator-(const FX_DATETIME& dt1, - const CFX_DateTime& dt2) { - CFX_DateTime dt; - dt.FromUnitime(((const CFX_DateTime&)dt1).ToUnitime() - dt2.ToUnitime()); - return dt; - } - friend FX_BOOL operator==(const CFX_DateTime& dt1, const CFX_DateTime& dt2) { - return FXSYS_memcmp(static_cast(dt1), - static_cast(dt2), - sizeof(FX_DATETIME)) == 0; - } - friend FX_BOOL operator==(const CFX_DateTime& dt1, const FX_DATETIME& dt2) { - return FXSYS_memcmp(static_cast(dt1), &dt2, - sizeof(FX_DATETIME)) == 0; - } - friend FX_BOOL operator==(const FX_DATETIME& dt1, const CFX_DateTime& dt2) { - return FXSYS_memcmp(&dt1, static_cast(dt2), - sizeof(FX_DATETIME)) == 0; - } - friend FX_BOOL operator!=(const CFX_DateTime& dt1, const CFX_DateTime& dt2) { - return FXSYS_memcmp(static_cast(dt1), - static_cast(dt2), - sizeof(FX_DATETIME)) != 0; - } - friend FX_BOOL operator!=(const CFX_DateTime& dt1, const FX_DATETIME& dt2) { - return FXSYS_memcmp(static_cast(dt1), &dt2, - sizeof(FX_DATETIME)) != 0; - } - friend FX_BOOL operator!=(const FX_DATETIME& dt1, const CFX_DateTime& dt2) { - return FXSYS_memcmp(&dt1, static_cast(dt2), - sizeof(FX_DATETIME)) != 0; - } - friend FX_BOOL operator>(const CFX_DateTime& dt1, const CFX_DateTime& dt2) { - return dt1.ToUnitime() > dt2.ToUnitime(); - } - friend FX_BOOL operator>(const CFX_DateTime& dt1, const FX_DATETIME& dt2) { - return dt1.ToUnitime() > ((const CFX_DateTime&)dt2).ToUnitime(); - } - friend FX_BOOL operator>(const FX_DATETIME& dt1, const CFX_DateTime& dt2) { - return ((const CFX_DateTime&)dt1).ToUnitime() > dt2.ToUnitime(); - } - friend FX_BOOL operator>=(const CFX_DateTime& dt1, const CFX_DateTime& dt2) { - return dt1.ToUnitime() >= dt2.ToUnitime(); - } - friend FX_BOOL operator>=(const CFX_DateTime& dt1, const FX_DATETIME& dt2) { - return dt1.ToUnitime() >= ((const CFX_DateTime&)dt2).ToUnitime(); - } - friend FX_BOOL operator>=(const FX_DATETIME& dt1, const CFX_DateTime& dt2) { - return ((const CFX_DateTime&)dt1).ToUnitime() >= dt2.ToUnitime(); - } - friend FX_BOOL operator<(const CFX_DateTime& dt1, const CFX_DateTime& dt2) { - return dt1.ToUnitime() < dt2.ToUnitime(); - } - friend FX_BOOL operator<(const CFX_DateTime& dt1, const FX_DATETIME& dt2) { - return dt1.ToUnitime() < ((const CFX_DateTime&)dt2).ToUnitime(); - } - friend FX_BOOL operator<(const FX_DATETIME& dt1, const CFX_DateTime& dt2) { - return ((const CFX_DateTime&)dt1).ToUnitime() < dt2.ToUnitime(); - } - friend FX_BOOL operator<=(const CFX_DateTime& dt1, const CFX_DateTime& dt2) { - return dt1.ToUnitime() <= dt2.ToUnitime(); - } - friend FX_BOOL operator<=(const CFX_DateTime& dt1, const FX_DATETIME& dt2) { - return dt1.ToUnitime() <= ((const CFX_DateTime&)dt2).ToUnitime(); - } - friend FX_BOOL operator<=(const FX_DATETIME& dt1, const CFX_DateTime& dt2) { - return ((const CFX_DateTime&)dt1).ToUnitime() <= dt2.ToUnitime(); - } - - private: - FX_DATETIME m_DateTime; -}; - -#endif // XFA_SRC_FGAS_LOCALIZATION_FGAS_DATETIME_H_ diff --git a/xfa/src/fgas/localization/fgas_locale.cpp b/xfa/src/fgas/localization/fgas_locale.cpp deleted file mode 100644 index 1eaa0ebd48..0000000000 --- a/xfa/src/fgas/localization/fgas_locale.cpp +++ /dev/null @@ -1,5030 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include - -#include "core/include/fxcrt/fx_ext.h" -#include "core/include/fxcrt/fx_xml.h" -#include "xfa/src/fgas/localization/fgas_localeimp.h" - -#define FX_LOCALECATEGORY_DateHash 0xbde9abde -#define FX_LOCALECATEGORY_TimeHash 0x2d71b00f -#define FX_LOCALECATEGORY_DateTimeHash 0x158c72ed -#define FX_LOCALECATEGORY_NumHash 0x0b4ff870 -#define FX_LOCALECATEGORY_TextHash 0x2d08af85 -#define FX_LOCALECATEGORY_ZeroHash 0x568cb500 -#define FX_LOCALECATEGORY_NullHash 0x052931bb - -struct FX_LOCALESUBCATEGORYINFO { - uint32_t uHash; - const FX_WCHAR* pName; - int32_t eSubCategory; -}; - -static const FX_LOCALESUBCATEGORYINFO g_FXLocaleDateTimeSubCatData[] = { - {0x14da2125, L"default", FX_LOCALEDATETIMESUBCATEGORY_Default}, - {0x9041d4b0, L"short", FX_LOCALEDATETIMESUBCATEGORY_Short}, - {0xa084a381, L"medium", FX_LOCALEDATETIMESUBCATEGORY_Medium}, - {0xcdce56b3, L"full", FX_LOCALEDATETIMESUBCATEGORY_Full}, - {0xf6b4afb0, L"long", FX_LOCALEDATETIMESUBCATEGORY_Long}, -}; -static const int32_t g_iFXLocaleDateTimeSubCatCount = - sizeof(g_FXLocaleDateTimeSubCatData) / sizeof(FX_LOCALESUBCATEGORYINFO); - -static const FX_LOCALESUBCATEGORYINFO g_FXLocaleNumSubCatData[] = { - {0x46f95531, L"percent", FX_LOCALENUMPATTERN_Percent}, - {0x4c4e8acb, L"currency", FX_LOCALENUMPATTERN_Currency}, - {0x54034c2f, L"decimal", FX_LOCALENUMPATTERN_Decimal}, - {0x7568e6ae, L"integer", FX_LOCALENUMPATTERN_Integer}, -}; -static const int32_t g_iFXLocaleNumSubCatCount = - sizeof(g_FXLocaleNumSubCatData) / sizeof(FX_LOCALESUBCATEGORYINFO); - -struct FX_LOCALETIMEZONEINFO { - FX_DWORD uHash; - int16_t iHour; - int16_t iMinute; -}; - -static const FX_LOCALETIMEZONEINFO g_FXLocaleTimeZoneData[] = { - {FXBSTR_ID(0, 'C', 'D', 'T'), -5, 0}, {FXBSTR_ID(0, 'C', 'S', 'T'), -6, 0}, - {FXBSTR_ID(0, 'E', 'D', 'T'), -4, 0}, {FXBSTR_ID(0, 'E', 'S', 'T'), -5, 0}, - {FXBSTR_ID(0, 'M', 'D', 'T'), -6, 0}, {FXBSTR_ID(0, 'M', 'S', 'T'), -7, 0}, - {FXBSTR_ID(0, 'P', 'D', 'T'), -7, 0}, {FXBSTR_ID(0, 'P', 'S', 'T'), -8, 0}, -}; - -static const CFX_WideStringC gs_wsTextSymbols = FX_WSTRC(L"AXO09"); -static const CFX_WideStringC gs_wsTimeSymbols = FX_WSTRC(L"hHkKMSFAzZ"); -static const CFX_WideStringC gs_wsDateSymbols = FX_WSTRC(L"DJMEeGgYwW"); -static const CFX_WideStringC gs_wsConstChars = FX_WSTRC(L",-:/. "); - -static FX_STRSIZE FX_Local_Find(const CFX_WideStringC& wsSymbols, - FX_WCHAR ch, - FX_STRSIZE nStart = 0) { - FX_STRSIZE nLength = wsSymbols.GetLength(); - if (nLength < 1 || nStart > nLength) { - return -1; - } - const FX_WCHAR* lpsz = - (const FX_WCHAR*)FXSYS_wcschr(wsSymbols.GetPtr() + nStart, ch); - return (lpsz == NULL) ? -1 : (FX_STRSIZE)(lpsz - wsSymbols.GetPtr()); -} -static const FX_WCHAR* const gs_LocalNumberSymbols[] = { - L"decimal", L"grouping", L"percent", L"minus", - L"zero", L"currencySymbol", L"currencyName", -}; -IFX_Locale* IFX_Locale::Create(CXML_Element* pLocaleData) { - return new CFX_Locale(pLocaleData); -} -CFX_Locale::CFX_Locale(CXML_Element* pLocaleData) { - m_pElement = pLocaleData; -} -CFX_Locale::~CFX_Locale() {} -CFX_WideString CFX_Locale::GetName() { - return CFX_WideString(); -} -static CFX_WideString FX_GetXMLContent(const CFX_ByteStringC& bsSpace, - CXML_Element* pxmlElement, - const CFX_ByteStringC& bsTag, - const CFX_WideStringC& wsName) { - CXML_Element* pDatePattern = NULL; - int32_t nCount = pxmlElement->CountElements(bsSpace, bsTag); - int32_t i = 0; - for (; i < nCount; i++) { - pDatePattern = pxmlElement->GetElement(bsSpace, bsTag, i); - if (pDatePattern->GetAttrValue("name") == wsName) { - break; - } - } - if (i < nCount && pDatePattern) { - return pDatePattern->GetContent(0); - } - return L""; -} -void CFX_Locale::GetNumbericSymbol(FX_LOCALENUMSYMBOL eType, - CFX_WideString& wsNumSymbol) const { - if (!m_pElement) { - return; - } - CFX_ByteString bsSpace; - CFX_WideString wsName = gs_LocalNumberSymbols[eType]; - CXML_Element* pNumberSymbols = - m_pElement->GetElement(bsSpace, "numberSymbols"); - if (!pNumberSymbols) { - return; - } - wsNumSymbol = - FX_GetXMLContent(bsSpace, pNumberSymbols, "numberSymbol", wsName); -} -void CFX_Locale::GetDateTimeSymbols(CFX_WideString& wsDtSymbol) const { - if (!m_pElement) { - return; - } - CFX_ByteString bsSpace; - CXML_Element* pNumberSymbols = - m_pElement->GetElement(bsSpace, "dateTimeSymbols"); - if (!pNumberSymbols) { - return; - } - wsDtSymbol = pNumberSymbols->GetContent(0); -} -static void FX_GetCalendarSymbol(CXML_Element* pXmlElement, - const CFX_ByteString& symbol_type, - int32_t index, - FX_BOOL bAbbr, - CFX_WideString& wsName) { - CFX_ByteString bsSpace; - CFX_ByteString pstrSymbolNames = symbol_type + "Names"; - CXML_Element* pChild = pXmlElement->GetElement(bsSpace, "calendarSymbols"); - if (!pChild) { - return; - } - CXML_Element* pSymbolNames = pChild->GetElement(bsSpace, pstrSymbolNames); - if (!pSymbolNames) { - return; - } - if (pSymbolNames->GetAttrInteger("abbr") != bAbbr) { - pSymbolNames = pChild->GetElement(bsSpace, pstrSymbolNames, 1); - } - if (pSymbolNames && pSymbolNames->GetAttrInteger("abbr") == bAbbr) { - CXML_Element* pSymbolName = - pSymbolNames->GetElement(bsSpace, symbol_type, index); - if (pSymbolName) { - wsName = pSymbolName->GetContent(0); - } - } -} -void CFX_Locale::GetMonthName(int32_t nMonth, - CFX_WideString& wsMonthName, - FX_BOOL bAbbr) const { - if (!m_pElement) { - return; - } - FX_GetCalendarSymbol(m_pElement, "month", nMonth, bAbbr, wsMonthName); -} -void CFX_Locale::GetDayName(int32_t nWeek, - CFX_WideString& wsDayName, - FX_BOOL bAbbr) const { - if (!m_pElement) { - return; - } - FX_GetCalendarSymbol(m_pElement, "day", nWeek, bAbbr, wsDayName); -} -void CFX_Locale::GetMeridiemName(CFX_WideString& wsMeridiemName, - FX_BOOL bAM) const { - if (!m_pElement) { - return; - } - FX_GetCalendarSymbol(m_pElement, "meridiem", bAM ? 0 : 1, FALSE, - wsMeridiemName); -} -static int32_t FX_ParseTimeZone(const FX_WCHAR* pStr, - int32_t iLen, - FX_TIMEZONE& tz) { - tz.tzHour = 0; - tz.tzMinute = 0; - if (iLen < 0) { - return 0; - } - int32_t iStart = 1; - int32_t iEnd = iStart + 2; - while (iStart < iLen && iStart < iEnd) { - tz.tzHour = tz.tzHour * 10 + pStr[iStart++] - '0'; - } - if (iStart < iLen && pStr[iStart] == ':') { - iStart++; - } - iEnd = iStart + 2; - while (iStart < iLen && iStart < iEnd) { - tz.tzMinute = tz.tzMinute * 10 + pStr[iStart++] - '0'; - } - if (pStr[0] == '-') { - tz.tzHour = -tz.tzHour; - } - return iStart; -} -void CFX_Locale::GetTimeZone(FX_TIMEZONE& tz) const { - tz.tzHour = 0; - tz.tzMinute = 0; - if (!m_pElement) { - return; - } - CXML_Element* pxmlTimeZone = m_pElement->GetElement("", "timeZone"); - if (pxmlTimeZone) { - CFX_WideString wsTimeZone = pxmlTimeZone->GetContent(0); - FX_ParseTimeZone(wsTimeZone, wsTimeZone.GetLength(), tz); - } -} -void CFX_Locale::GetEraName(CFX_WideString& wsEraName, FX_BOOL bAD) const { - if (!m_pElement) { - return; - } - FX_GetCalendarSymbol(m_pElement, "era", bAD ? 0 : 1, FALSE, wsEraName); -} -static void FX_GetPattern(CXML_Element* pXmlElement, - const CFX_ByteString& bsCategory, - const CFX_WideString& wsSubCategory, - CFX_WideString& wsPattern) { - CFX_ByteString bsSpace; - CXML_Element* pDatePatterns = - pXmlElement->GetElement(bsSpace, bsCategory + "s"); - if (!pDatePatterns) { - return; - } - wsPattern = - FX_GetXMLContent(bsSpace, pDatePatterns, bsCategory, wsSubCategory); -} -static void FX_GetDateTimePattern(CXML_Element* pXmlElement, - const CFX_ByteString& bsCategory, - FX_LOCALEDATETIMESUBCATEGORY eType, - CFX_WideString& wsPattern) { - CFX_WideString wsType = g_FXLocaleDateTimeSubCatData[eType].pName; - FX_GetPattern(pXmlElement, bsCategory, wsType, wsPattern); -} -void CFX_Locale::GetDatePattern(FX_LOCALEDATETIMESUBCATEGORY eType, - CFX_WideString& wsPattern) const { - if (!m_pElement) { - return; - } - FX_GetDateTimePattern(m_pElement, "datePattern", eType, wsPattern); -} -void CFX_Locale::GetTimePattern(FX_LOCALEDATETIMESUBCATEGORY eType, - CFX_WideString& wsPattern) const { - if (!m_pElement) { - return; - } - FX_GetDateTimePattern(m_pElement, "timePattern", eType, wsPattern); -} -void CFX_Locale::GetNumPattern(FX_LOCALENUMSUBCATEGORY eType, - CFX_WideString& wsPattern) const { - CFX_WideString wsType = g_FXLocaleNumSubCatData[eType].pName; - FX_GetPattern(m_pElement, "numberPattern", wsType, wsPattern); -} -static FX_BOOL FX_IsDigit(FX_WCHAR c) { - return c >= '0' && c <= '9'; -} -static FX_BOOL FX_IsAlpha(FX_WCHAR c) { - return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'); -} -static FX_BOOL FX_IsSpace(FX_WCHAR c) { - return (c == 0x20) || (c == 0x0d) || (c == 0x0a) || (c == 0x09); -} -static const FX_FLOAT gs_fraction_scales[] = { - 0.1f, 0.01f, 0.001f, 0.0001f, - 0.00001f, 0.000001f, 0.0000001f, 0.00000001f, - 0.000000001f, 0.0000000001f, 0.00000000001f}; -static const int32_t gs_fraction_count = - sizeof(gs_fraction_scales) / sizeof(FX_FLOAT); - -class CFX_LCNumeric { - public: - CFX_LCNumeric(); - CFX_LCNumeric(int64_t integral, - uint32_t fractional = 0, - int32_t exponent = 0); - CFX_LCNumeric(FX_FLOAT dbRetValue); - CFX_LCNumeric(double dbvalue); - CFX_LCNumeric(CFX_WideString& wsNumeric); - - FX_FLOAT GetFloat() const; - double GetDouble() const; - CFX_WideString ToString() const; - CFX_WideString ToString(int32_t nTreading, FX_BOOL bTrimTailZeros) const; - - int64_t m_Integral; - uint32_t m_Fractional; - int32_t m_Exponent; -}; - -static FX_BOOL FX_WStringToNumeric(const CFX_WideString& wsValue, - CFX_LCNumeric& lcnum) { - lcnum.m_Integral = 0; - lcnum.m_Fractional = 0; - lcnum.m_Exponent = 0; - - if (wsValue.IsEmpty()) - return FALSE; - - const int32_t nIntegralMaxLen = 17; - int32_t cc = 0; - bool bNegative = false; - bool bExpSign = false; - const FX_WCHAR* str = (const FX_WCHAR*)wsValue; - int32_t len = wsValue.GetLength(); - while (cc < len && FX_IsSpace(str[cc])) - cc++; - - if (cc >= len) - return FALSE; - - if (str[cc] == '+') { - cc++; - } else if (str[cc] == '-') { - bNegative = true; - cc++; - } - int32_t nIntegralLen = 0; - while (cc < len) { - if (str[cc] == '.') - break; - - if (!FX_IsDigit(str[cc])) { - if ((str[cc] == 'E' || str[cc] == 'e')) - break; - else - return FALSE; - } - if (nIntegralLen < nIntegralMaxLen) { - lcnum.m_Integral = lcnum.m_Integral * 10 + str[cc] - '0'; - nIntegralLen++; - } - cc++; - } - - lcnum.m_Integral = bNegative ? -lcnum.m_Integral : lcnum.m_Integral; - if (cc < len && str[cc] == '.') { - int scale = 0; - double fraction = 0.0; - cc++; - while (cc < len) { - if (scale >= gs_fraction_count) { - while (cc < len) { - if (!FX_IsDigit(str[cc])) - break; - cc++; - } - } - if (!FX_IsDigit(str[cc])) { - if ((str[cc] == 'E' || str[cc] == 'e')) - break; - else - return FALSE; - } - fraction += gs_fraction_scales[scale] * (str[cc] - '0'); - scale++; - cc++; - } - lcnum.m_Fractional = (FX_DWORD)(fraction * 4294967296.0); - } - if (cc < len && (str[cc] == 'E' || str[cc] == 'e')) { - cc++; - if (cc < len) { - if (str[cc] == '+') { - cc++; - } else if (str[cc] == '-') { - bExpSign = true; - cc++; - } - } - while (cc < len) { - if (FX_IsDigit(str[cc])) - return FALSE; - lcnum.m_Exponent = lcnum.m_Exponent * 10 + str[cc] - '0'; - cc++; - } - lcnum.m_Exponent = bExpSign ? -lcnum.m_Exponent : lcnum.m_Exponent; - } - return TRUE; -} - -CFX_LCNumeric::CFX_LCNumeric() { - m_Integral = 0; - m_Fractional = 0; - m_Exponent = 0; -} -CFX_LCNumeric::CFX_LCNumeric(int64_t integral, - FX_DWORD fractional, - int32_t exponent) { - m_Integral = integral; - m_Fractional = fractional; - m_Exponent = exponent; -} -CFX_LCNumeric::CFX_LCNumeric(FX_FLOAT dbRetValue) { - m_Integral = (int64_t)dbRetValue; - m_Fractional = (FX_DWORD)(((dbRetValue > 0) ? (dbRetValue - m_Integral) - : (m_Integral - dbRetValue)) * - 4294967296); - m_Exponent = 0; -} -CFX_LCNumeric::CFX_LCNumeric(double dbvalue) { - m_Integral = (int64_t)dbvalue; - m_Fractional = (FX_DWORD)( - ((dbvalue > 0) ? (dbvalue - m_Integral) : (m_Integral - dbvalue)) * - 4294967296); - m_Exponent = 0; -} -CFX_LCNumeric::CFX_LCNumeric(CFX_WideString& wsNumeric) { - FX_WStringToNumeric(wsNumeric, *this); -} -FX_FLOAT CFX_LCNumeric::GetFloat() const { - FX_FLOAT dbRetValue = m_Fractional / 4294967296.0f; - dbRetValue = m_Integral + (m_Integral >= 0 ? dbRetValue : -dbRetValue); - if (m_Exponent != 0) { - dbRetValue *= FXSYS_pow(10, (FX_FLOAT)m_Exponent); - } - return dbRetValue; -} -double CFX_LCNumeric::GetDouble() const { - double value = m_Fractional / 4294967296.0; - value = m_Integral + (m_Integral >= 0 ? value : -value); - if (m_Exponent != 0) { - value *= FXSYS_pow(10, (FX_FLOAT)m_Exponent); - } - return value; -} - -CFX_WideString CFX_LCNumeric::ToString() const { - return ToString(8, TRUE); -} - -CFX_WideString CFX_LCNumeric::ToString(int32_t nTreading, - FX_BOOL bTrimTailZeros) const { - CFX_WideString wsFormat; - wsFormat.Format(L"%%.%df", nTreading); - CFX_WideString wsResult; - wsResult.Format(wsFormat.c_str(), GetDouble()); - if (bTrimTailZeros && nTreading > 0) { - wsResult.TrimRight(L"0"); - wsResult.TrimRight(L"."); - } - return wsResult; -} - -IFX_FormatString* IFX_FormatString::Create(IFX_LocaleMgr* pLocaleMgr, - FX_BOOL bUseLCID) { - if (!pLocaleMgr) { - return NULL; - } - return new CFX_FormatString(pLocaleMgr, bUseLCID); -} -CFX_FormatString::CFX_FormatString(IFX_LocaleMgr* pLocaleMgr, FX_BOOL bUseLCID) - : m_pLocaleMgr(pLocaleMgr), m_bUseLCID(bUseLCID) {} -CFX_FormatString::~CFX_FormatString() {} -void CFX_FormatString::SplitFormatString(const CFX_WideString& wsFormatString, - CFX_WideStringArray& wsPatterns) { - int32_t iStrLen = wsFormatString.GetLength(); - const FX_WCHAR* pStr = (const FX_WCHAR*)wsFormatString; - const FX_WCHAR* pToken = pStr; - const FX_WCHAR* pEnd = pStr + iStrLen; - FX_BOOL iQuote = FALSE; - while (TRUE) { - if (pStr >= pEnd) { - CFX_WideString sub(pToken, pStr - pToken); - wsPatterns.Add(sub); - return; - } else if (*pStr == '\'') { - iQuote = !iQuote; - } else if (*pStr == L'|' && !iQuote) { - CFX_WideString sub(pToken, pStr - pToken); - wsPatterns.Add(sub); - pToken = pStr + 1; - } - pStr++; - } -} -static CFX_WideString FX_GetLiteralText(const FX_WCHAR* pStrPattern, - int32_t& iPattern, - int32_t iLenPattern) { - CFX_WideString wsOutput; - if (pStrPattern[iPattern] != '\'') { - return wsOutput; - } - iPattern++; - int32_t iQuote = 1; - while (iPattern < iLenPattern) { - if (pStrPattern[iPattern] == '\'') { - iQuote++; - if ((iPattern + 1 >= iLenPattern) || - ((pStrPattern[iPattern + 1] != '\'') && (iQuote % 2 == 0))) { - break; - } else { - iQuote++; - } - iPattern++; - } else if (pStrPattern[iPattern] == '\\' && (iPattern + 1 < iLenPattern) && - pStrPattern[iPattern + 1] == 'u') { - int32_t iKeyValue = 0; - iPattern += 2; - int32_t i = 0; - while (iPattern < iLenPattern && i++ < 4) { - FX_WCHAR ch = pStrPattern[iPattern++]; - if ((ch >= '0' && ch <= '9')) { - iKeyValue = iKeyValue * 16 + ch - '0'; - } else if ((ch >= 'a' && ch <= 'f')) { - iKeyValue = iKeyValue * 16 + ch - 'a' + 10; - } else if ((ch >= 'A' && ch <= 'F')) { - iKeyValue = iKeyValue * 16 + ch - 'A' + 10; - } - } - if (iKeyValue != 0) { - wsOutput += (FX_WCHAR)(iKeyValue & 0x0000FFFF); - } - continue; - } - wsOutput += pStrPattern[iPattern++]; - } - return wsOutput; -} -static CFX_WideString FX_GetLiteralTextReverse(const FX_WCHAR* pStrPattern, - int32_t& iPattern) { - CFX_WideString wsOutput; - if (pStrPattern[iPattern] != '\'') { - return wsOutput; - } - iPattern--; - int32_t iQuote = 1; - while (iPattern >= 0) { - if (pStrPattern[iPattern] == '\'') { - iQuote++; - if (iPattern - 1 >= 0 || - ((pStrPattern[iPattern - 1] != '\'') && (iQuote % 2 == 0))) { - break; - } else { - iQuote++; - } - iPattern--; - } else if (pStrPattern[iPattern] == '\\' && - pStrPattern[iPattern + 1] == 'u') { - iPattern--; - int32_t iKeyValue = 0; - int32_t iLen = wsOutput.GetLength(); - int32_t i = 1; - for (; i < iLen && i < 5; i++) { - FX_WCHAR ch = wsOutput[i]; - if ((ch >= '0' && ch <= '9')) { - iKeyValue = iKeyValue * 16 + ch - '0'; - } else if ((ch >= 'a' && ch <= 'f')) { - iKeyValue = iKeyValue * 16 + ch - 'a' + 10; - } else if ((ch >= 'A' && ch <= 'F')) { - iKeyValue = iKeyValue * 16 + ch - 'A' + 10; - } - } - if (iKeyValue != 0) { - wsOutput.Delete(0, i); - wsOutput = (FX_WCHAR)(iKeyValue & 0x0000FFFF) + wsOutput; - } - continue; - } - wsOutput = pStrPattern[iPattern--] + wsOutput; - } - return wsOutput; -} -FX_LOCALECATEGORY CFX_FormatString::GetCategory( - const CFX_WideString& wsPattern) { - FX_LOCALECATEGORY eCategory = FX_LOCALECATEGORY_Unknown; - int32_t ccf = 0; - int32_t iLenf = wsPattern.GetLength(); - const FX_WCHAR* pStr = (const FX_WCHAR*)wsPattern; - FX_BOOL bBraceOpen = FALSE; - while (ccf < iLenf) { - if (pStr[ccf] == '\'') { - FX_GetLiteralText(pStr, ccf, iLenf); - } else if (!bBraceOpen && FX_Local_Find(gs_wsConstChars, pStr[ccf]) < 0) { - CFX_WideString wsCategory(pStr[ccf]); - ccf++; - while (TRUE) { - if (ccf == iLenf) { - return eCategory; - } - if (pStr[ccf] == '.' || pStr[ccf] == '(') { - break; - } - if (pStr[ccf] == '{') { - bBraceOpen = TRUE; - break; - } - wsCategory += pStr[ccf]; - ccf++; - } - FX_DWORD dwHash = - FX_HashCode_String_GetW(wsCategory, wsCategory.GetLength()); - if (dwHash == FX_LOCALECATEGORY_DateHash) { - if (eCategory == FX_LOCALECATEGORY_Time) { - return FX_LOCALECATEGORY_DateTime; - } - eCategory = FX_LOCALECATEGORY_Date; - } else if (dwHash == FX_LOCALECATEGORY_TimeHash) { - if (eCategory == FX_LOCALECATEGORY_Date) { - return FX_LOCALECATEGORY_DateTime; - } - eCategory = FX_LOCALECATEGORY_Time; - } else if (dwHash == FX_LOCALECATEGORY_DateTimeHash) { - return FX_LOCALECATEGORY_DateTime; - } else if (dwHash == FX_LOCALECATEGORY_TextHash) { - return FX_LOCALECATEGORY_Text; - } else if (dwHash == FX_LOCALECATEGORY_NumHash) { - return FX_LOCALECATEGORY_Num; - } else if (dwHash == FX_LOCALECATEGORY_ZeroHash) { - return FX_LOCALECATEGORY_Zero; - } else if (dwHash == FX_LOCALECATEGORY_NullHash) { - return FX_LOCALECATEGORY_Null; - } - } else if (pStr[ccf] == '}') { - bBraceOpen = FALSE; - } - ccf++; - } - return eCategory; -} -static FX_WORD FX_WStringToLCID(const FX_WCHAR* pstrLCID) { - if (!pstrLCID) { - return 0; - } - wchar_t* pEnd; - return (FX_WORD)wcstol((wchar_t*)pstrLCID, &pEnd, 16); -} -FX_WORD CFX_FormatString::GetLCID(const CFX_WideString& wsPattern) { - return FX_WStringToLCID(GetLocaleName(wsPattern)); -} -CFX_WideString CFX_FormatString::GetLocaleName( - const CFX_WideString& wsPattern) { - int32_t ccf = 0; - int32_t iLenf = wsPattern.GetLength(); - const FX_WCHAR* pStr = (const FX_WCHAR*)wsPattern; - while (ccf < iLenf) { - if (pStr[ccf] == '\'') { - FX_GetLiteralText(pStr, ccf, iLenf); - } else if (pStr[ccf] == '(') { - ccf++; - CFX_WideString wsLCID; - while (ccf < iLenf && pStr[ccf] != ')') { - wsLCID += pStr[ccf++]; - } - return wsLCID; - } - ccf++; - } - return CFX_WideString(); -} -IFX_Locale* CFX_FormatString::GetTextFormat(const CFX_WideString& wsPattern, - const CFX_WideStringC& wsCategory, - CFX_WideString& wsPurgePattern) { - IFX_Locale* pLocale = NULL; - int32_t ccf = 0; - int32_t iLenf = wsPattern.GetLength(); - const FX_WCHAR* pStr = (const FX_WCHAR*)wsPattern; - FX_BOOL bBrackOpen = FALSE; - while (ccf < iLenf) { - if (pStr[ccf] == '\'') { - int32_t iCurChar = ccf; - FX_GetLiteralText(pStr, ccf, iLenf); - wsPurgePattern += CFX_WideStringC(pStr + iCurChar, ccf - iCurChar + 1); - } else if (!bBrackOpen && FX_Local_Find(gs_wsConstChars, pStr[ccf]) < 0) { - CFX_WideString wsSearchCategory(pStr[ccf]); - ccf++; - while (ccf < iLenf && pStr[ccf] != '{' && pStr[ccf] != '.' && - pStr[ccf] != '(') { - wsSearchCategory += pStr[ccf]; - ccf++; - } - if (wsSearchCategory != wsCategory) { - continue; - } - while (ccf < iLenf) { - if (pStr[ccf] == '(') { - ccf++; - CFX_WideString wsLCID; - while (ccf < iLenf && pStr[ccf] != ')') { - wsLCID += pStr[ccf++]; - } - pLocale = GetPatternLocale(wsLCID); - } else if (pStr[ccf] == '{') { - bBrackOpen = TRUE; - break; - } - ccf++; - } - } else if (pStr[ccf] != '}') { - wsPurgePattern += pStr[ccf]; - } - ccf++; - } - if (!bBrackOpen) { - wsPurgePattern = wsPattern; - } - if (!pLocale) { - pLocale = m_pLocaleMgr->GetDefLocale(); - } - return pLocale; -} -#define FX_NUMSTYLE_Percent 0x01 -#define FX_NUMSTYLE_Exponent 0x02 -#define FX_NUMSTYLE_DotVorv 0x04 -IFX_Locale* CFX_FormatString::GetNumericFormat(const CFX_WideString& wsPattern, - int32_t& iDotIndex, - FX_DWORD& dwStyle, - CFX_WideString& wsPurgePattern) { - dwStyle = 0; - IFX_Locale* pLocale = NULL; - int32_t ccf = 0; - int32_t iLenf = wsPattern.GetLength(); - const FX_WCHAR* pStr = (const FX_WCHAR*)wsPattern; - FX_BOOL bFindDot = FALSE; - FX_BOOL bBrackOpen = FALSE; - while (ccf < iLenf) { - if (pStr[ccf] == '\'') { - int32_t iCurChar = ccf; - FX_GetLiteralText(pStr, ccf, iLenf); - wsPurgePattern += CFX_WideStringC(pStr + iCurChar, ccf - iCurChar + 1); - } else if (!bBrackOpen && FX_Local_Find(gs_wsConstChars, pStr[ccf]) < 0) { - CFX_WideString wsCategory(pStr[ccf]); - ccf++; - while (ccf < iLenf && pStr[ccf] != '{' && pStr[ccf] != '.' && - pStr[ccf] != '(') { - wsCategory += pStr[ccf]; - ccf++; - } - if (wsCategory != FX_WSTRC(L"num")) { - bBrackOpen = TRUE; - ccf = 0; - continue; - } - while (ccf < iLenf) { - if (pStr[ccf] == '(') { - ccf++; - CFX_WideString wsLCID; - while (ccf < iLenf && pStr[ccf] != ')') { - wsLCID += pStr[ccf++]; - } - pLocale = GetPatternLocale(wsLCID); - } else if (pStr[ccf] == '{') { - bBrackOpen = TRUE; - break; - } else if (pStr[ccf] == '.') { - CFX_WideString wsSubCategory; - ccf++; - while (ccf < iLenf && pStr[ccf] != '(' && pStr[ccf] != '{') { - wsSubCategory += pStr[ccf++]; - } - FX_DWORD dwSubHash = - FX_HashCode_String_GetW(wsSubCategory, wsSubCategory.GetLength()); - FX_LOCALENUMSUBCATEGORY eSubCategory = FX_LOCALENUMPATTERN_Decimal; - for (int32_t i = 0; i < g_iFXLocaleNumSubCatCount; i++) { - if (g_FXLocaleNumSubCatData[i].uHash == dwSubHash) { - eSubCategory = (FX_LOCALENUMSUBCATEGORY)g_FXLocaleNumSubCatData[i] - .eSubCategory; - break; - } - } - wsSubCategory.Empty(); - if (!pLocale) { - pLocale = m_pLocaleMgr->GetDefLocale(); - } - FXSYS_assert(pLocale != NULL); - pLocale->GetNumPattern(eSubCategory, wsSubCategory); - iDotIndex = wsSubCategory.Find('.'); - if (iDotIndex > 0) { - iDotIndex += wsPurgePattern.GetLength(); - bFindDot = TRUE; - dwStyle |= FX_NUMSTYLE_DotVorv; - } - wsPurgePattern += wsSubCategory; - if (eSubCategory == FX_LOCALENUMPATTERN_Percent) { - dwStyle |= FX_NUMSTYLE_Percent; - } - continue; - } - ccf++; - } - } else if (pStr[ccf] == 'E') { - dwStyle |= FX_NUMSTYLE_Exponent; - wsPurgePattern += pStr[ccf]; - } else if (pStr[ccf] == '%') { - dwStyle |= FX_NUMSTYLE_Percent; - wsPurgePattern += pStr[ccf]; - } else if (pStr[ccf] != '}') { - wsPurgePattern += pStr[ccf]; - } - if (!bFindDot) { - if (pStr[ccf] == '.' || pStr[ccf] == 'V' || pStr[ccf] == 'v') { - bFindDot = TRUE; - iDotIndex = wsPurgePattern.GetLength() - 1; - dwStyle |= FX_NUMSTYLE_DotVorv; - } - } - ccf++; - } - if (!bFindDot) { - iDotIndex = wsPurgePattern.GetLength(); - } - if (!pLocale) { - pLocale = m_pLocaleMgr->GetDefLocale(); - } - return pLocale; -} -static FX_BOOL FX_GetNumericDotIndex(const CFX_WideString& wsNum, - const CFX_WideString& wsDotSymbol, - int32_t& iDotIndex) { - int32_t ccf = 0; - int32_t iLenf = wsNum.GetLength(); - const FX_WCHAR* pStr = (const FX_WCHAR*)wsNum; - int32_t iLenDot = wsDotSymbol.GetLength(); - while (ccf < iLenf) { - if (pStr[ccf] == '\'') { - FX_GetLiteralText(pStr, ccf, iLenf); - } else if (ccf + iLenDot <= iLenf && - !FXSYS_wcsncmp(pStr + ccf, (const FX_WCHAR*)wsDotSymbol, - iLenDot)) { - iDotIndex = ccf; - return TRUE; - } - ccf++; - } - iDotIndex = wsNum.Find('.'); - if (iDotIndex < 0) { - iDotIndex = iLenf; - return FALSE; - } - return TRUE; -} -FX_BOOL CFX_FormatString::ParseText(const CFX_WideString& wsSrcText, - const CFX_WideString& wsPattern, - CFX_WideString& wsValue) { - wsValue.Empty(); - if (wsSrcText.IsEmpty() || wsPattern.IsEmpty()) { - return FALSE; - } - CFX_WideString wsTextFormat; - GetTextFormat(wsPattern, FX_WSTRC(L"text"), wsTextFormat); - if (wsTextFormat.IsEmpty()) { - return FALSE; - } - int32_t iText = 0, iPattern = 0; - const FX_WCHAR* pStrText = (const FX_WCHAR*)wsSrcText; - int32_t iLenText = wsSrcText.GetLength(); - const FX_WCHAR* pStrPattern = (const FX_WCHAR*)wsTextFormat; - int32_t iLenPattern = wsTextFormat.GetLength(); - while (iPattern < iLenPattern && iText < iLenText) { - switch (pStrPattern[iPattern]) { - case '\'': { - CFX_WideString wsLiteral = - FX_GetLiteralText(pStrPattern, iPattern, iLenPattern); - int32_t iLiteralLen = wsLiteral.GetLength(); - if (iText + iLiteralLen > iLenText || - FXSYS_wcsncmp(pStrText + iText, (const FX_WCHAR*)wsLiteral, - iLiteralLen)) { - wsValue = wsSrcText; - return FALSE; - } - iText += iLiteralLen; - iPattern++; - break; - } - case 'A': - if (FX_IsAlpha(pStrText[iText])) { - wsValue += pStrText[iText]; - iText++; - } - iPattern++; - break; - case 'X': - wsValue += pStrText[iText]; - iText++; - iPattern++; - break; - case 'O': - case '0': - if (FX_IsDigit(pStrText[iText]) || FX_IsAlpha(pStrText[iText])) { - wsValue += pStrText[iText]; - iText++; - } - iPattern++; - break; - case '9': - if (FX_IsDigit(pStrText[iText])) { - wsValue += pStrText[iText]; - iText++; - } - iPattern++; - break; - default: - if (pStrPattern[iPattern] != pStrText[iText]) { - wsValue = wsSrcText; - return FALSE; - } - iPattern++; - iText++; - break; - } - } - return iPattern == iLenPattern && iText == iLenText; -} -FX_BOOL CFX_FormatString::ParseNum(const CFX_WideString& wsSrcNum, - const CFX_WideString& wsPattern, - FX_FLOAT& fValue) { - fValue = 0.0f; - if (wsSrcNum.IsEmpty() || wsPattern.IsEmpty()) { - return FALSE; - } - int32_t dot_index_f = -1; - FX_DWORD dwFormatStyle = 0; - CFX_WideString wsNumFormat; - IFX_Locale* pLocale = - GetNumericFormat(wsPattern, dot_index_f, dwFormatStyle, wsNumFormat); - if (!pLocale || wsNumFormat.IsEmpty()) { - return FALSE; - } - int32_t iExponent = 0; - CFX_WideString wsDotSymbol; - pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Decimal, wsDotSymbol); - CFX_WideString wsGroupSymbol; - pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Grouping, wsGroupSymbol); - int32_t iGroupLen = wsGroupSymbol.GetLength(); - CFX_WideString wsMinus; - pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Minus, wsMinus); - int32_t iMinusLen = wsMinus.GetLength(); - int cc = 0, ccf = 0; - const FX_WCHAR* str = (const FX_WCHAR*)wsSrcNum; - int len = wsSrcNum.GetLength(); - const FX_WCHAR* strf = (const FX_WCHAR*)wsNumFormat; - int lenf = wsNumFormat.GetLength(); - double dbRetValue = 0; - double coeff = 1; - FX_BOOL bHavePercentSymbol = FALSE; - FX_BOOL bNeg = FALSE; - FX_BOOL bReverseParse = FALSE; - int32_t dot_index = 0; - if (!FX_GetNumericDotIndex(wsSrcNum, wsDotSymbol, dot_index) && - (dwFormatStyle & FX_NUMSTYLE_DotVorv)) { - bReverseParse = TRUE; - } - bReverseParse = FALSE; - if (bReverseParse) { - ccf = lenf - 1; - cc = len - 1; - while (ccf > dot_index_f && cc >= 0) { - switch (strf[ccf]) { - case '\'': { - CFX_WideString wsLiteral = FX_GetLiteralTextReverse(strf, ccf); - int32_t iLiteralLen = wsLiteral.GetLength(); - cc -= iLiteralLen - 1; - if (cc < 0 || FXSYS_wcsncmp(str + cc, (const FX_WCHAR*)wsLiteral, - iLiteralLen)) { - return FALSE; - } - cc--; - ccf--; - break; - } - case '9': - if (!FX_IsDigit(str[cc])) { - return FALSE; - } - dbRetValue = dbRetValue * coeff + (str[cc] - '0') * 0.1; - coeff *= 0.1; - cc--; - ccf--; - break; - case 'z': - if (cc >= 0) { - dbRetValue = dbRetValue * coeff + (str[cc] - '0') * 0.1; - coeff *= 0.1; - cc--; - } - ccf--; - break; - case 'Z': - if (str[cc] != ' ') { - dbRetValue = dbRetValue * coeff + (str[cc] - '0') * 0.1; - coeff *= 0.1; - } - cc--; - ccf--; - break; - case 'S': - if (str[cc] == '+' || str[cc] == ' ') { - cc--; - } else { - cc -= iMinusLen - 1; - if (cc < 0 || - FXSYS_wcsncmp(str + cc, (const FX_WCHAR*)wsMinus, iMinusLen)) { - return FALSE; - } - cc--; - bNeg = TRUE; - } - ccf--; - break; - case 's': - if (str[cc] == '+') { - cc--; - } else { - cc -= iMinusLen - 1; - if (cc < 0 || - FXSYS_wcsncmp(str + cc, (const FX_WCHAR*)wsMinus, iMinusLen)) { - return FALSE; - } - cc--; - bNeg = TRUE; - } - ccf--; - break; - case 'E': { - if (cc >= dot_index) { - return FALSE; - } - FX_BOOL bExpSign = FALSE; - while (cc >= 0) { - if (str[cc] == 'E' || str[cc] == 'e') { - break; - } - if (FX_IsDigit(str[cc])) { - iExponent = iExponent + (str[cc] - '0') * 10; - cc--; - continue; - } else if (str[cc] == '+') { - cc--; - continue; - } else if (cc - iMinusLen + 1 > 0 && - !FXSYS_wcsncmp(str + (cc - iMinusLen + 1), - (const FX_WCHAR*)wsMinus, iMinusLen)) { - bExpSign = TRUE; - cc -= iMinusLen; - } else { - return FALSE; - } - } - cc--; - iExponent = bExpSign ? -iExponent : iExponent; - ccf--; - } break; - case '$': { - CFX_WideString wsSymbol; - pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_CurrencySymbol, - wsSymbol); - int32_t iSymbolLen = wsSymbol.GetLength(); - cc -= iSymbolLen - 1; - if (cc < 0 || - FXSYS_wcsncmp(str + cc, (const FX_WCHAR*)wsSymbol, iSymbolLen)) { - return FALSE; - } - cc--; - ccf--; - } break; - case 'r': - if (ccf - 1 >= 0 && strf[ccf - 1] == 'c') { - if (str[cc] == 'R' && cc - 1 >= 0 && str[cc - 1] == 'C') { - bNeg = TRUE; - cc -= 2; - } - ccf -= 2; - } else { - ccf--; - } - break; - case 'R': - if (ccf - 1 >= 0 && strf[ccf - 1] == 'C') { - if (str[cc] == ' ') { - cc++; - } else if (str[cc] == 'R' && cc - 1 >= 0 && str[cc - 1] == 'C') { - bNeg = TRUE; - cc -= 2; - } - ccf -= 2; - } else { - ccf--; - } - break; - case 'b': - if (ccf - 1 >= 0 && strf[ccf - 1] == 'd') { - if (str[cc] == 'B' && cc - 1 >= 0 && str[cc - 1] == 'D') { - bNeg = TRUE; - cc -= 2; - } - ccf -= 2; - } else { - ccf--; - } - break; - case 'B': - if (ccf - 1 >= 0 && strf[ccf - 1] == 'D') { - if (str[cc] == ' ') { - cc++; - } else if (str[cc] == 'B' && cc - 1 >= 0 && str[cc - 1] == 'D') { - bNeg = TRUE; - cc -= 2; - } - ccf -= 2; - } else { - ccf--; - } - break; - case '.': - case 'V': - case 'v': - return FALSE; - case '%': { - CFX_WideString wsSymbol; - pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Percent, wsSymbol); - int32_t iSysmbolLen = wsSymbol.GetLength(); - cc -= iSysmbolLen - 1; - if (cc < 0 || - FXSYS_wcsncmp(str + cc, (const FX_WCHAR*)wsSymbol, iSysmbolLen)) { - return FALSE; - } - cc--; - ccf--; - bHavePercentSymbol = TRUE; - } break; - case '8': - while (ccf < lenf && strf[ccf] == '8') { - ccf++; - } - while (cc < len && FX_IsDigit(str[cc])) { - dbRetValue = (str[cc] - '0') * coeff + dbRetValue; - coeff *= 0.1; - cc++; - } - break; - case ',': { - if (cc >= 0) { - cc -= iGroupLen - 1; - if (cc >= 0 && - FXSYS_wcsncmp(str + cc, (const FX_WCHAR*)wsGroupSymbol, - iGroupLen) == 0) { - cc--; - } else { - cc += iGroupLen - 1; - } - } - ccf--; - } break; - case '(': - if (str[cc] == L'(') { - bNeg = TRUE; - } else if (str[cc] != L' ') { - return FALSE; - } - cc--; - ccf--; - break; - case ')': - if (str[cc] == L')') { - bNeg = TRUE; - } else if (str[cc] != L' ') { - return FALSE; - } - cc--; - ccf--; - break; - default: - if (strf[ccf] != str[cc]) { - return FALSE; - } - cc--; - ccf--; - } - } - dot_index = cc + 1; - } - ccf = dot_index_f - 1; - cc = dot_index - 1; - coeff = 1; - while (ccf >= 0 && cc >= 0) { - switch (strf[ccf]) { - case '\'': { - CFX_WideString wsLiteral = FX_GetLiteralTextReverse(strf, ccf); - int32_t iLiteralLen = wsLiteral.GetLength(); - cc -= iLiteralLen - 1; - if (cc < 0 || - FXSYS_wcsncmp(str + cc, (const FX_WCHAR*)wsLiteral, iLiteralLen)) { - return FALSE; - } - cc--; - ccf--; - break; - } - case '9': - if (!FX_IsDigit(str[cc])) { - return FALSE; - } - dbRetValue = dbRetValue + (str[cc] - '0') * coeff; - coeff *= 10; - cc--; - ccf--; - break; - case 'z': - if (FX_IsDigit(str[cc])) { - dbRetValue = dbRetValue + (str[cc] - '0') * coeff; - coeff *= 10; - cc--; - } - ccf--; - break; - case 'Z': - if (str[cc] != ' ') { - if (FX_IsDigit(str[cc])) { - dbRetValue = dbRetValue + (str[cc] - '0') * coeff; - coeff *= 10; - cc--; - } - } else { - cc--; - } - ccf--; - break; - case 'S': - if (str[cc] == '+' || str[cc] == ' ') { - cc--; - } else { - cc -= iMinusLen - 1; - if (cc < 0 || - FXSYS_wcsncmp(str + cc, (const FX_WCHAR*)wsMinus, iMinusLen)) { - return FALSE; - } - cc--; - bNeg = TRUE; - } - ccf--; - break; - case 's': - if (str[cc] == '+') { - cc--; - } else { - cc -= iMinusLen - 1; - if (cc < 0 || - FXSYS_wcsncmp(str + cc, (const FX_WCHAR*)wsMinus, iMinusLen)) { - return FALSE; - } - cc--; - bNeg = TRUE; - } - ccf--; - break; - case 'E': { - if (cc >= dot_index) { - return FALSE; - } - FX_BOOL bExpSign = FALSE; - while (cc >= 0) { - if (str[cc] == 'E' || str[cc] == 'e') { - break; - } - if (FX_IsDigit(str[cc])) { - iExponent = iExponent + (str[cc] - '0') * 10; - cc--; - continue; - } else if (str[cc] == '+') { - cc--; - continue; - } else if (cc - iMinusLen + 1 > 0 && - !FXSYS_wcsncmp(str + (cc - iMinusLen + 1), - (const FX_WCHAR*)wsMinus, iMinusLen)) { - bExpSign = TRUE; - cc -= iMinusLen; - } else { - return FALSE; - } - } - cc--; - iExponent = bExpSign ? -iExponent : iExponent; - ccf--; - } break; - case '$': { - CFX_WideString wsSymbol; - pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_CurrencySymbol, wsSymbol); - int32_t iSymbolLen = wsSymbol.GetLength(); - cc -= iSymbolLen - 1; - if (cc < 0 || - FXSYS_wcsncmp(str + cc, (const FX_WCHAR*)wsSymbol, iSymbolLen)) { - return FALSE; - } - cc--; - ccf--; - } break; - case 'r': - if (ccf - 1 >= 0 && strf[ccf - 1] == 'c') { - if (str[cc] == 'R' && cc - 1 >= 0 && str[cc - 1] == 'C') { - bNeg = TRUE; - cc -= 2; - } - ccf -= 2; - } else { - ccf--; - } - break; - case 'R': - if (ccf - 1 >= 0 && strf[ccf - 1] == 'C') { - if (str[cc] == ' ') { - cc++; - } else if (str[cc] == 'R' && cc - 1 >= 0 && str[cc - 1] == 'C') { - bNeg = TRUE; - cc -= 2; - } - ccf -= 2; - } else { - ccf--; - } - break; - case 'b': - if (ccf - 1 >= 0 && strf[ccf - 1] == 'd') { - if (str[cc] == 'B' && cc - 1 >= 0 && str[cc - 1] == 'D') { - bNeg = TRUE; - cc -= 2; - } - ccf -= 2; - } else { - ccf--; - } - break; - case 'B': - if (ccf - 1 >= 0 && strf[ccf - 1] == 'D') { - if (str[cc] == ' ') { - cc++; - } else if (str[cc] == 'B' && cc - 1 >= 0 && str[cc - 1] == 'D') { - bNeg = TRUE; - cc -= 2; - } - ccf -= 2; - } else { - ccf--; - } - break; - case '.': - case 'V': - case 'v': - return FALSE; - case '%': { - CFX_WideString wsSymbol; - pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Percent, wsSymbol); - int32_t iSysmbolLen = wsSymbol.GetLength(); - cc -= iSysmbolLen - 1; - if (cc < 0 || - FXSYS_wcsncmp(str + cc, (const FX_WCHAR*)wsSymbol, iSysmbolLen)) { - return FALSE; - } - cc--; - ccf--; - bHavePercentSymbol = TRUE; - } break; - case '8': - return FALSE; - case ',': { - if (cc >= 0) { - cc -= iGroupLen - 1; - if (cc >= 0 && - FXSYS_wcsncmp(str + cc, (const FX_WCHAR*)wsGroupSymbol, - iGroupLen) == 0) { - cc--; - } else { - cc += iGroupLen - 1; - } - } - ccf--; - } break; - case '(': - if (str[cc] == L'(') { - bNeg = TRUE; - } else if (str[cc] != L' ') { - return FALSE; - } - cc--; - ccf--; - break; - case ')': - if (str[cc] == L')') { - bNeg = TRUE; - } else if (str[cc] != L' ') { - return FALSE; - } - cc--; - ccf--; - break; - default: - if (strf[ccf] != str[cc]) { - return FALSE; - } - cc--; - ccf--; - } - } - if (cc >= 0) { - return FALSE; - } - if (!bReverseParse) { - ccf = dot_index_f + 1; - cc = (dot_index == len) ? len : dot_index + 1; - coeff = 0.1; - while (cc < len && ccf < lenf) { - switch (strf[ccf]) { - case '\'': { - CFX_WideString wsLiteral = FX_GetLiteralText(strf, ccf, lenf); - int32_t iLiteralLen = wsLiteral.GetLength(); - if (cc + iLiteralLen > len || - FXSYS_wcsncmp(str + cc, (const FX_WCHAR*)wsLiteral, - iLiteralLen)) { - return FALSE; - } - cc += iLiteralLen; - ccf++; - break; - } - case '9': - if (!FX_IsDigit(str[cc])) { - return FALSE; - } - { - dbRetValue = dbRetValue + (str[cc] - '0') * coeff; - coeff *= 0.1; - } - cc++; - ccf++; - break; - case 'z': - if (FX_IsDigit(str[cc])) { - dbRetValue = dbRetValue + (str[cc] - '0') * coeff; - coeff *= 0.1; - cc++; - } - ccf++; - break; - case 'Z': - if (str[cc] != ' ') { - if (FX_IsDigit(str[cc])) { - dbRetValue = dbRetValue + (str[cc] - '0') * coeff; - coeff *= 0.1; - cc++; - } - } else { - cc++; - } - ccf++; - break; - case 'S': - if (str[cc] == '+' || str[cc] == ' ') { - cc++; - } else { - if (cc + iMinusLen > len || - FXSYS_wcsncmp(str + cc, (const FX_WCHAR*)wsMinus, iMinusLen)) { - return FALSE; - } - bNeg = TRUE; - cc += iMinusLen; - } - ccf++; - break; - case 's': - if (str[cc] == '+') { - cc++; - } else { - if (cc + iMinusLen > len || - FXSYS_wcsncmp(str + cc, (const FX_WCHAR*)wsMinus, iMinusLen)) { - return FALSE; - } - bNeg = TRUE; - cc += iMinusLen; - } - ccf++; - break; - case 'E': { - if (cc >= len || (str[cc] != 'E' && str[cc] != 'e')) { - return FALSE; - } - FX_BOOL bExpSign = FALSE; - cc++; - if (cc < len) { - if (str[cc] == '+') { - cc++; - } else if (str[cc] == '-') { - bExpSign = TRUE; - cc++; - } - } - while (cc < len) { - if (!FX_IsDigit(str[cc])) { - break; - } - iExponent = iExponent * 10 + str[cc] - '0'; - cc++; - } - iExponent = bExpSign ? -iExponent : iExponent; - ccf++; - } break; - case '$': { - CFX_WideString wsSymbol; - pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_CurrencySymbol, - wsSymbol); - int32_t iSymbolLen = wsSymbol.GetLength(); - if (cc + iSymbolLen > len || - FXSYS_wcsncmp(str + cc, (const FX_WCHAR*)wsSymbol, iSymbolLen)) { - return FALSE; - } - cc += iSymbolLen; - ccf++; - } break; - case 'c': - if (ccf + 1 < lenf && strf[ccf + 1] == 'r') { - if (str[cc] == 'C' && cc + 1 < len && str[cc + 1] == 'R') { - bNeg = TRUE; - cc += 2; - } - ccf += 2; - } - break; - case 'C': - if (ccf + 1 < lenf && strf[ccf + 1] == 'R') { - if (str[cc] == ' ') { - cc++; - } else if (str[cc] == 'C' && cc + 1 < len && str[cc + 1] == 'R') { - bNeg = TRUE; - cc += 2; - } - ccf += 2; - } - break; - case 'd': - if (ccf + 1 < lenf && strf[ccf + 1] == 'b') { - if (str[cc] == 'D' && cc + 1 < len && str[cc + 1] == 'B') { - bNeg = TRUE; - cc += 2; - } - ccf += 2; - } - break; - case 'D': - if (ccf + 1 < lenf && strf[ccf + 1] == 'B') { - if (str[cc] == ' ') { - cc++; - } else if (str[cc] == 'D' && cc + 1 < len && str[cc + 1] == 'B') { - bNeg = TRUE; - cc += 2; - } - ccf += 2; - } - break; - case '.': - case 'V': - case 'v': - return FALSE; - case '%': { - CFX_WideString wsSymbol; - pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Percent, wsSymbol); - int32_t iSysmbolLen = wsSymbol.GetLength(); - if (cc + iSysmbolLen <= len && - !FXSYS_wcsncmp(str + cc, (const FX_WCHAR*)wsSymbol, - iSysmbolLen)) { - cc += iSysmbolLen; - } - ccf++; - bHavePercentSymbol = TRUE; - } break; - case '8': { - while (ccf < lenf && strf[ccf] == '8') { - ccf++; - } - while (cc < len && FX_IsDigit(str[cc])) { - dbRetValue = (str[cc] - '0') * coeff + dbRetValue; - coeff *= 0.1; - cc++; - } - } break; - case ',': { - if (cc + iGroupLen <= len && - FXSYS_wcsncmp(str + cc, (const FX_WCHAR*)wsGroupSymbol, - iGroupLen) == 0) { - cc += iGroupLen; - } - ccf++; - } break; - case '(': - if (str[cc] == L'(') { - bNeg = TRUE; - } else if (str[cc] != L' ') { - return FALSE; - } - cc++; - ccf++; - break; - case ')': - if (str[cc] == L')') { - bNeg = TRUE; - } else if (str[cc] != L' ') { - return FALSE; - } - cc++; - ccf++; - break; - default: - if (strf[ccf] != str[cc]) { - return FALSE; - } - cc++; - ccf++; - } - } - if (cc != len) { - return FALSE; - } - } - if (iExponent) { - dbRetValue *= FXSYS_pow(10, (FX_FLOAT)iExponent); - } - if (bHavePercentSymbol) { - dbRetValue /= 100.0; - } - if (bNeg) { - dbRetValue = -dbRetValue; - } - fValue = (FX_FLOAT)dbRetValue; - return TRUE; -} -void FX_ParseNumString(const CFX_WideString& wsNum, CFX_WideString& wsResult) { - int32_t iCount = wsNum.GetLength(); - const FX_WCHAR* pStr = (const FX_WCHAR*)wsNum; - FX_WCHAR* pDst = wsResult.GetBuffer(iCount); - int32_t nIndex = 0; - FX_BOOL bMinus = FALSE; - int32_t i = 0; - for (i = 0; i < iCount; i++) { - FX_WCHAR wc = pStr[i]; - if (wc == '.') { - break; - } - if ((wc == L'0' || wc == L' ' || wc == '+') && nIndex == 0) { - continue; - } - if (wc == '-') { - pDst[nIndex++] = wc; - bMinus = TRUE; - continue; - } - if (wc == L'0' && nIndex == 1 && bMinus) { - continue; - } - pDst[nIndex++] = wc; - } - if (bMinus && nIndex == 1) { - pDst[nIndex++] = '0'; - } - if (nIndex == 0) { - wsResult.ReleaseBuffer(0); - pDst = wsResult.GetBuffer(iCount + 1); - pDst[nIndex++] = '0'; - } - int32_t j = 0; - for (j = iCount - 1; j > i; j--) { - FX_WCHAR wc = pStr[j]; - if (wc != L'0' && wc != L' ') { - break; - } - } - if (j > i) { - pDst[nIndex++] = '.'; - FXSYS_wcsncpy(pDst + nIndex, pStr + i + 1, j - i); - nIndex += j - i; - } - wsResult.ReleaseBuffer(nIndex); -} -FX_BOOL CFX_FormatString::ParseNum(const CFX_WideString& wsSrcNum, - const CFX_WideString& wsPattern, - CFX_WideString& wsValue) { - wsValue.Empty(); - if (wsSrcNum.IsEmpty() || wsPattern.IsEmpty()) { - return FALSE; - } - int32_t dot_index_f = -1; - FX_DWORD dwFormatStyle = 0; - CFX_WideString wsNumFormat; - IFX_Locale* pLocale = - GetNumericFormat(wsPattern, dot_index_f, dwFormatStyle, wsNumFormat); - if (!pLocale || wsNumFormat.IsEmpty()) { - return FALSE; - } - int32_t iExponent = 0; - CFX_WideString wsDotSymbol; - pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Decimal, wsDotSymbol); - CFX_WideString wsGroupSymbol; - pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Grouping, wsGroupSymbol); - int32_t iGroupLen = wsGroupSymbol.GetLength(); - CFX_WideString wsMinus; - pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Minus, wsMinus); - int32_t iMinusLen = wsMinus.GetLength(); - int cc = 0, ccf = 0; - const FX_WCHAR* str = (const FX_WCHAR*)wsSrcNum; - int len = wsSrcNum.GetLength(); - const FX_WCHAR* strf = (const FX_WCHAR*)wsNumFormat; - int lenf = wsNumFormat.GetLength(); - FX_BOOL bHavePercentSymbol = FALSE; - FX_BOOL bNeg = FALSE; - FX_BOOL bReverseParse = FALSE; - int32_t dot_index = 0; - if (!FX_GetNumericDotIndex(wsSrcNum, wsDotSymbol, dot_index) && - (dwFormatStyle & FX_NUMSTYLE_DotVorv)) { - bReverseParse = TRUE; - } - bReverseParse = FALSE; - ccf = dot_index_f - 1; - cc = dot_index - 1; - while (ccf >= 0 && cc >= 0) { - switch (strf[ccf]) { - case '\'': { - CFX_WideString wsLiteral = FX_GetLiteralTextReverse(strf, ccf); - int32_t iLiteralLen = wsLiteral.GetLength(); - cc -= iLiteralLen - 1; - if (cc < 0 || - FXSYS_wcsncmp(str + cc, (const FX_WCHAR*)wsLiteral, iLiteralLen)) { - return FALSE; - } - cc--; - ccf--; - break; - } - case '9': - if (!FX_IsDigit(str[cc])) { - return FALSE; - } - wsValue = CFX_WideStringC(str[cc]) + wsValue; - cc--; - ccf--; - break; - case 'z': - if (FX_IsDigit(str[cc])) { - wsValue = CFX_WideStringC(str[cc]) + wsValue; - cc--; - } - ccf--; - break; - case 'Z': - if (str[cc] != ' ') { - if (FX_IsDigit(str[cc])) { - wsValue = CFX_WideStringC(str[cc]) + wsValue; - cc--; - } - } else { - cc--; - } - ccf--; - break; - case 'S': - if (str[cc] == '+' || str[cc] == ' ') { - cc--; - } else { - cc -= iMinusLen - 1; - if (cc < 0 || - FXSYS_wcsncmp(str + cc, (const FX_WCHAR*)wsMinus, iMinusLen)) { - return FALSE; - } - cc--; - bNeg = TRUE; - } - ccf--; - break; - case 's': - if (str[cc] == '+') { - cc--; - } else { - cc -= iMinusLen - 1; - if (cc < 0 || - FXSYS_wcsncmp(str + cc, (const FX_WCHAR*)wsMinus, iMinusLen)) { - return FALSE; - } - cc--; - bNeg = TRUE; - } - ccf--; - break; - case 'E': { - if (cc >= dot_index) { - return FALSE; - } - FX_BOOL bExpSign = FALSE; - while (cc >= 0) { - if (str[cc] == 'E' || str[cc] == 'e') { - break; - } - if (FX_IsDigit(str[cc])) { - iExponent = iExponent + (str[cc] - '0') * 10; - cc--; - continue; - } else if (str[cc] == '+') { - cc--; - continue; - } else if (cc - iMinusLen + 1 > 0 && - !FXSYS_wcsncmp(str + (cc - iMinusLen + 1), - (const FX_WCHAR*)wsMinus, iMinusLen)) { - bExpSign = TRUE; - cc -= iMinusLen; - } else { - return FALSE; - } - } - cc--; - iExponent = bExpSign ? -iExponent : iExponent; - ccf--; - } break; - case '$': { - CFX_WideString wsSymbol; - pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_CurrencySymbol, wsSymbol); - int32_t iSymbolLen = wsSymbol.GetLength(); - cc -= iSymbolLen - 1; - if (cc < 0 || - FXSYS_wcsncmp(str + cc, (const FX_WCHAR*)wsSymbol, iSymbolLen)) { - return FALSE; - } - cc--; - ccf--; - } break; - case 'r': - if (ccf - 1 >= 0 && strf[ccf - 1] == 'c') { - if (str[cc] == 'R' && cc - 1 >= 0 && str[cc - 1] == 'C') { - bNeg = TRUE; - cc -= 2; - } - ccf -= 2; - } else { - ccf--; - } - break; - case 'R': - if (ccf - 1 >= 0 && strf[ccf - 1] == 'C') { - if (str[cc] == ' ') { - cc++; - } else if (str[cc] == 'R' && cc - 1 >= 0 && str[cc - 1] == 'C') { - bNeg = TRUE; - cc -= 2; - } - ccf -= 2; - } else { - ccf--; - } - break; - case 'b': - if (ccf - 1 >= 0 && strf[ccf - 1] == 'd') { - if (str[cc] == 'B' && cc - 1 >= 0 && str[cc - 1] == 'D') { - bNeg = TRUE; - cc -= 2; - } - ccf -= 2; - } else { - ccf--; - } - break; - case 'B': - if (ccf - 1 >= 0 && strf[ccf - 1] == 'D') { - if (str[cc] == ' ') { - cc++; - } else if (str[cc] == 'B' && cc - 1 >= 0 && str[cc - 1] == 'D') { - bNeg = TRUE; - cc -= 2; - } - ccf -= 2; - } else { - ccf--; - } - break; - case '.': - case 'V': - case 'v': - return FALSE; - case '%': { - CFX_WideString wsSymbol; - pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Percent, wsSymbol); - int32_t iSysmbolLen = wsSymbol.GetLength(); - cc -= iSysmbolLen - 1; - if (cc < 0 || - FXSYS_wcsncmp(str + cc, (const FX_WCHAR*)wsSymbol, iSysmbolLen)) { - return FALSE; - } - cc--; - ccf--; - bHavePercentSymbol = TRUE; - } break; - case '8': - return FALSE; - case ',': { - if (cc >= 0) { - cc -= iGroupLen - 1; - if (cc >= 0 && - FXSYS_wcsncmp(str + cc, (const FX_WCHAR*)wsGroupSymbol, - iGroupLen) == 0) { - cc--; - } else { - cc += iGroupLen - 1; - } - } - ccf--; - } break; - case '(': - if (str[cc] == L'(') { - bNeg = TRUE; - } else if (str[cc] != L' ') { - return FALSE; - } - cc--; - ccf--; - break; - case ')': - if (str[cc] == L')') { - bNeg = TRUE; - } else if (str[cc] != L' ') { - return FALSE; - } - cc--; - ccf--; - break; - default: - if (strf[ccf] != str[cc]) { - return FALSE; - } - cc--; - ccf--; - } - } - if (cc >= 0) { - if (str[cc] == '-') { - bNeg = TRUE; - cc--; - } - if (cc >= 0) { - return FALSE; - } - } - if (dot_index < len && (dwFormatStyle & FX_NUMSTYLE_DotVorv)) { - wsValue += '.'; - } - if (!bReverseParse) { - ccf = dot_index_f + 1; - cc = (dot_index == len) ? len : dot_index + 1; - while (cc < len && ccf < lenf) { - switch (strf[ccf]) { - case '\'': { - CFX_WideString wsLiteral = FX_GetLiteralText(strf, ccf, lenf); - int32_t iLiteralLen = wsLiteral.GetLength(); - if (cc + iLiteralLen > len || - FXSYS_wcsncmp(str + cc, (const FX_WCHAR*)wsLiteral, - iLiteralLen)) { - return FALSE; - } - cc += iLiteralLen; - ccf++; - break; - } - case '9': - if (!FX_IsDigit(str[cc])) { - return FALSE; - } - { wsValue += str[cc]; } - cc++; - ccf++; - break; - case 'z': - if (FX_IsDigit(str[cc])) { - wsValue += str[cc]; - cc++; - } - ccf++; - break; - case 'Z': - if (str[cc] != ' ') { - if (FX_IsDigit(str[cc])) { - wsValue += str[cc]; - cc++; - } - } else { - cc++; - } - ccf++; - break; - case 'S': - if (str[cc] == '+' || str[cc] == ' ') { - cc++; - } else { - if (cc + iMinusLen > len || - FXSYS_wcsncmp(str + cc, (const FX_WCHAR*)wsMinus, iMinusLen)) { - return FALSE; - } - bNeg = TRUE; - cc += iMinusLen; - } - ccf++; - break; - case 's': - if (str[cc] == '+') { - cc++; - } else { - if (cc + iMinusLen > len || - FXSYS_wcsncmp(str + cc, (const FX_WCHAR*)wsMinus, iMinusLen)) { - return FALSE; - } - bNeg = TRUE; - cc += iMinusLen; - } - ccf++; - break; - case 'E': { - if (cc >= len || (str[cc] != 'E' && str[cc] != 'e')) { - return FALSE; - } - FX_BOOL bExpSign = FALSE; - cc++; - if (cc < len) { - if (str[cc] == '+') { - cc++; - } else if (str[cc] == '-') { - bExpSign = TRUE; - cc++; - } - } - while (cc < len) { - if (!FX_IsDigit(str[cc])) { - break; - } - iExponent = iExponent * 10 + str[cc] - '0'; - cc++; - } - iExponent = bExpSign ? -iExponent : iExponent; - ccf++; - } break; - case '$': { - CFX_WideString wsSymbol; - pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_CurrencySymbol, - wsSymbol); - int32_t iSymbolLen = wsSymbol.GetLength(); - if (cc + iSymbolLen > len || - FXSYS_wcsncmp(str + cc, (const FX_WCHAR*)wsSymbol, iSymbolLen)) { - return FALSE; - } - cc += iSymbolLen; - ccf++; - } break; - case 'c': - if (ccf + 1 < lenf && strf[ccf + 1] == 'r') { - if (str[cc] == 'C' && cc + 1 < len && str[cc + 1] == 'R') { - bNeg = TRUE; - cc += 2; - } - ccf += 2; - } - break; - case 'C': - if (ccf + 1 < lenf && strf[ccf + 1] == 'R') { - if (str[cc] == ' ') { - cc++; - } else if (str[cc] == 'C' && cc + 1 < len && str[cc + 1] == 'R') { - bNeg = TRUE; - cc += 2; - } - ccf += 2; - } - break; - case 'd': - if (ccf + 1 < lenf && strf[ccf + 1] == 'b') { - if (str[cc] == 'D' && cc + 1 < len && str[cc + 1] == 'B') { - bNeg = TRUE; - cc += 2; - } - ccf += 2; - } - break; - case 'D': - if (ccf + 1 < lenf && strf[ccf + 1] == 'B') { - if (str[cc] == ' ') { - cc++; - } else if (str[cc] == 'D' && cc + 1 < len && str[cc + 1] == 'B') { - bNeg = TRUE; - cc += 2; - } - ccf += 2; - } - break; - case '.': - case 'V': - case 'v': - return FALSE; - case '%': { - CFX_WideString wsSymbol; - pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Percent, wsSymbol); - int32_t iSysmbolLen = wsSymbol.GetLength(); - if (cc + iSysmbolLen <= len && - !FXSYS_wcsncmp(str + cc, (const FX_WCHAR*)wsSymbol, - iSysmbolLen)) { - cc += iSysmbolLen; - } - ccf++; - bHavePercentSymbol = TRUE; - } break; - case '8': { - while (ccf < lenf && strf[ccf] == '8') { - ccf++; - } - while (cc < len && FX_IsDigit(str[cc])) { - wsValue += str[cc]; - cc++; - } - } break; - case ',': { - if (cc + iGroupLen <= len && - FXSYS_wcsncmp(str + cc, (const FX_WCHAR*)wsGroupSymbol, - iGroupLen) == 0) { - cc += iGroupLen; - } - ccf++; - } break; - case '(': - if (str[cc] == L'(') { - bNeg = TRUE; - } else if (str[cc] != L' ') { - return FALSE; - } - cc++; - ccf++; - break; - case ')': - if (str[cc] == L')') { - bNeg = TRUE; - } else if (str[cc] != L' ') { - return FALSE; - } - cc++; - ccf++; - break; - default: - if (strf[ccf] != str[cc]) { - return FALSE; - } - cc++; - ccf++; - } - } - if (cc != len) { - return FALSE; - } - } - if (iExponent || bHavePercentSymbol) { - CFX_Decimal decimal = CFX_Decimal(wsValue); - if (iExponent) { - decimal = decimal * CFX_Decimal(FXSYS_pow(10, (FX_FLOAT)iExponent)); - } - if (bHavePercentSymbol) { - decimal = decimal / CFX_Decimal(100); - } - wsValue = decimal; - } - if (bNeg) { - wsValue = CFX_WideStringC('-') + wsValue; - } - return TRUE; -} -FX_DATETIMETYPE CFX_FormatString::GetDateTimeFormat( - const CFX_WideString& wsPattern, - IFX_Locale*& pLocale, - CFX_WideString& wsDatePattern, - CFX_WideString& wsTimePattern) { - pLocale = NULL; - CFX_WideString wsTempPattern; - FX_LOCALECATEGORY eCategory = FX_LOCALECATEGORY_Unknown; - int32_t ccf = 0; - int32_t iLenf = wsPattern.GetLength(); - const FX_WCHAR* pStr = (const FX_WCHAR*)wsPattern; - int32_t iFindCategory = 0; - FX_BOOL bBraceOpen = FALSE; - while (ccf < iLenf) { - if (pStr[ccf] == '\'') { - int32_t iCurChar = ccf; - FX_GetLiteralText(pStr, ccf, iLenf); - wsTempPattern += CFX_WideStringC(pStr + iCurChar, ccf - iCurChar + 1); - } else if (!bBraceOpen && iFindCategory != 3 && - FX_Local_Find(gs_wsConstChars, pStr[ccf]) < 0) { - CFX_WideString wsCategory(pStr[ccf]); - ccf++; - while (ccf < iLenf && pStr[ccf] != '{' && pStr[ccf] != '.' && - pStr[ccf] != '(') { - if (pStr[ccf] == 'T') { - wsDatePattern = wsPattern.Left(ccf); - wsTimePattern = wsPattern.Right(wsPattern.GetLength() - ccf); - wsTimePattern.SetAt(0, ' '); - if (!pLocale) { - pLocale = m_pLocaleMgr->GetDefLocale(); - } - return FX_DATETIMETYPE_DateTime; - } - wsCategory += pStr[ccf]; - ccf++; - } - if (!(iFindCategory & 1) && wsCategory == FX_WSTRC(L"date")) { - iFindCategory |= 1; - eCategory = FX_LOCALECATEGORY_Date; - if (iFindCategory & 2) { - iFindCategory = 4; - } - } else if (!(iFindCategory & 2) && wsCategory == FX_WSTRC(L"time")) { - iFindCategory |= 2; - eCategory = FX_LOCALECATEGORY_Time; - } else if (wsCategory == FX_WSTRC(L"datetime")) { - iFindCategory = 3; - eCategory = FX_LOCALECATEGORY_DateTime; - } else { - continue; - } - while (ccf < iLenf) { - if (pStr[ccf] == '(') { - ccf++; - CFX_WideString wsLCID; - while (ccf < iLenf && pStr[ccf] != ')') { - wsLCID += pStr[ccf++]; - } - pLocale = GetPatternLocale(wsLCID); - } else if (pStr[ccf] == '{') { - bBraceOpen = TRUE; - break; - } else if (pStr[ccf] == '.') { - CFX_WideString wsSubCategory; - ccf++; - while (ccf < iLenf && pStr[ccf] != '(' && pStr[ccf] != '{') { - wsSubCategory += pStr[ccf++]; - } - FX_DWORD dwSubHash = - FX_HashCode_String_GetW(wsSubCategory, wsSubCategory.GetLength()); - FX_LOCALEDATETIMESUBCATEGORY eSubCategory = - FX_LOCALEDATETIMESUBCATEGORY_Medium; - for (int32_t i = 0; i < g_iFXLocaleDateTimeSubCatCount; i++) { - if (g_FXLocaleDateTimeSubCatData[i].uHash == dwSubHash) { - eSubCategory = - (FX_LOCALEDATETIMESUBCATEGORY)g_FXLocaleDateTimeSubCatData[i] - .eSubCategory; - break; - } - } - if (!pLocale) { - pLocale = m_pLocaleMgr->GetDefLocale(); - } - FXSYS_assert(pLocale != NULL); - switch (eCategory) { - case FX_LOCALECATEGORY_Date: - pLocale->GetDatePattern(eSubCategory, wsDatePattern); - wsDatePattern = wsTempPattern + wsDatePattern; - break; - case FX_LOCALECATEGORY_Time: - pLocale->GetTimePattern(eSubCategory, wsTimePattern); - wsTimePattern = wsTempPattern + wsTimePattern; - break; - case FX_LOCALECATEGORY_DateTime: - pLocale->GetDatePattern(eSubCategory, wsDatePattern); - wsDatePattern = wsTempPattern + wsDatePattern; - pLocale->GetTimePattern(eSubCategory, wsTimePattern); - break; - default: - break; - } - wsTempPattern.Empty(); - continue; - } - ccf++; - } - } else if (pStr[ccf] == '}') { - bBraceOpen = FALSE; - if (!wsTempPattern.IsEmpty()) { - if (eCategory == FX_LOCALECATEGORY_Time) { - wsTimePattern = wsTempPattern; - } else if (eCategory == FX_LOCALECATEGORY_Date) { - wsDatePattern = wsTempPattern; - } - wsTempPattern.Empty(); - } - } else { - wsTempPattern += pStr[ccf]; - } - ccf++; - } - if (!wsTempPattern.IsEmpty()) { - if (eCategory == FX_LOCALECATEGORY_Date) { - wsDatePattern += wsTempPattern; - } else { - wsTimePattern += wsTempPattern; - } - } - if (!pLocale) { - pLocale = m_pLocaleMgr->GetDefLocale(); - } - if (!iFindCategory) { - wsTimePattern.Empty(); - wsDatePattern = wsPattern; - } - return (FX_DATETIMETYPE)iFindCategory; -} -static FX_BOOL FX_ParseLocaleDate(const CFX_WideString& wsDate, - const CFX_WideString& wsDatePattern, - IFX_Locale* pLocale, - CFX_Unitime& datetime, - int32_t& cc) { - int32_t year = 1900; - int32_t month = 1; - int32_t day = 1; - int32_t ccf = 0; - const FX_WCHAR* str = (const FX_WCHAR*)wsDate; - int32_t len = wsDate.GetLength(); - const FX_WCHAR* strf = (const FX_WCHAR*)wsDatePattern; - int32_t lenf = wsDatePattern.GetLength(); - while (cc < len && ccf < lenf) { - if (strf[ccf] == '\'') { - CFX_WideString wsLiteral = FX_GetLiteralText(strf, ccf, lenf); - int32_t iLiteralLen = wsLiteral.GetLength(); - if (cc + iLiteralLen > len || - FXSYS_wcsncmp(str + cc, (const FX_WCHAR*)wsLiteral, iLiteralLen)) { - return FALSE; - } - cc += iLiteralLen; - ccf++; - continue; - } else if (FX_Local_Find(gs_wsDateSymbols, strf[ccf]) < 0) { - if (strf[ccf] != str[cc]) { - return FALSE; - } - cc++; - ccf++; - continue; - } - FX_DWORD dwSymbolNum = 1; - FX_DWORD dwSymbol = strf[ccf++]; - while (ccf < lenf && strf[ccf] == dwSymbol) { - ccf++; - dwSymbolNum++; - } - dwSymbol = (dwSymbol << 8) | (dwSymbolNum + '0'); - if (dwSymbol == FXBSTR_ID(0, 0, 'D', '1')) { - if (!FX_IsDigit(str[cc])) { - return FALSE; - } - day = str[cc++] - '0'; - if (cc < len && FX_IsDigit(str[cc])) { - day = day * 10 + str[cc++] - '0'; - } - } else if (dwSymbol == FXBSTR_ID(0, 0, 'D', '2')) { - if (!FX_IsDigit(str[cc])) { - return FALSE; - } - day = str[cc++] - '0'; - if (cc < len) { - day = day * 10 + str[cc++] - '0'; - } - } else if (dwSymbol == FXBSTR_ID(0, 0, 'J', '1')) { - int i = 0; - while (cc < len && i < 3 && FX_IsDigit(str[cc])) { - cc++; - i++; - } - } else if (dwSymbol == FXBSTR_ID(0, 0, 'J', '3')) { - cc += 3; - } else if (dwSymbol == FXBSTR_ID(0, 0, 'M', '1')) { - if (!FX_IsDigit(str[cc])) { - return FALSE; - } - month = str[cc++] - '0'; - if (cc < len && FX_IsDigit(str[cc])) { - month = month * 10 + str[cc++] - '0'; - } - } else if (dwSymbol == FXBSTR_ID(0, 0, 'M', '2')) { - if (!FX_IsDigit(str[cc])) { - return FALSE; - } - month = str[cc++] - '0'; - if (cc < len) { - month = month * 10 + str[cc++] - '0'; - } - } else if (dwSymbol == FXBSTR_ID(0, 0, 'M', '3')) { - CFX_WideString wsMonthNameAbbr; - FX_WORD i = 0; - for (; i < 12; i++) { - pLocale->GetMonthName(i, wsMonthNameAbbr, TRUE); - if (wsMonthNameAbbr.IsEmpty()) { - continue; - } - if (!FXSYS_wcsncmp((const FX_WCHAR*)wsMonthNameAbbr, str + cc, - wsMonthNameAbbr.GetLength())) { - break; - } - } - if (i < 12) { - cc += wsMonthNameAbbr.GetLength(); - month = i + 1; - } - } else if (dwSymbol == FXBSTR_ID(0, 0, 'M', '4')) { - CFX_WideString wsMonthName; - FX_WORD i = 0; - for (; i < 12; i++) { - pLocale->GetMonthName(i, wsMonthName, FALSE); - if (wsMonthName.IsEmpty()) { - continue; - } - if (!FXSYS_wcsncmp((const FX_WCHAR*)wsMonthName, str + cc, - wsMonthName.GetLength())) { - break; - } - } - if (i < 12) { - cc += wsMonthName.GetLength(); - month = i + 1; - } - } else if (dwSymbol == FXBSTR_ID(0, 0, 'E', '1')) { - cc += 1; - } else if (dwSymbol == FXBSTR_ID(0, 0, 'E', '3')) { - CFX_WideString wsDayNameAbbr; - FX_WORD i = 0; - for (; i < 7; i++) { - pLocale->GetDayName(i, wsDayNameAbbr, TRUE); - if (wsDayNameAbbr.IsEmpty()) { - continue; - } - if (!FXSYS_wcsncmp((const FX_WCHAR*)wsDayNameAbbr, str + cc, - wsDayNameAbbr.GetLength())) { - break; - } - } - if (i < 12) { - cc += wsDayNameAbbr.GetLength(); - } - } else if (dwSymbol == FXBSTR_ID(0, 0, 'E', '4')) { - CFX_WideString wsDayName; - int32_t i = 0; - for (; i < 7; i++) { - pLocale->GetDayName(i, wsDayName, FALSE); - if (wsDayName == L"") { - continue; - } - if (!FXSYS_wcsncmp((const FX_WCHAR*)wsDayName, str + cc, - wsDayName.GetLength())) { - break; - } - } - if (i < 12) { - cc += wsDayName.GetLength(); - } - } else if (dwSymbol == FXBSTR_ID(0, 0, 'e', '1')) { - cc += 1; - } else if (dwSymbol == FXBSTR_ID(0, 0, 'G', '1')) { - cc += 2; - } else if (dwSymbol == FXBSTR_ID(0, 0, 'Y', '2')) { - if (cc + 2 > len) { - return FALSE; - } - if (!FX_IsDigit(str[cc])) { - return FALSE; - } - year = str[cc++] - '0'; - if (cc >= len || !FX_IsDigit(str[cc])) { - return FALSE; - } - year = year * 10 + str[cc++] - '0'; - if (year <= 29) { - year += 2000; - } else { - year += 1900; - } - } else if (dwSymbol == FXBSTR_ID(0, 0, 'Y', '4')) { - int i = 0; - year = 0; - if (cc + 4 > len) { - return FALSE; - } - while (i < 4) { - if (!FX_IsDigit(str[cc])) { - return FALSE; - } - year = year * 10 + str[cc] - '0'; - cc++; - i++; - } - } else if (dwSymbol == FXBSTR_ID(0, 0, 'w', '1')) { - cc += 1; - } else if (dwSymbol == FXBSTR_ID(0, 0, 'W', '2')) { - cc += 2; - } - } - if (cc < len) { - return FALSE; - } - CFX_Unitime ut; - ut.Set(year, month, day); - datetime = datetime + ut; - return cc; -} -static void FX_ResolveZone(uint8_t& wHour, - uint8_t& wMinute, - FX_TIMEZONE tzDiff, - IFX_Locale* pLocale) { - int32_t iMinuteDiff = wHour * 60 + wMinute; - FX_TIMEZONE tzLocale; - pLocale->GetTimeZone(tzLocale); - iMinuteDiff += tzLocale.tzHour * 60 + - (tzLocale.tzHour < 0 ? -tzLocale.tzMinute : tzLocale.tzMinute); - iMinuteDiff -= tzDiff.tzHour * 60 + - (tzDiff.tzHour < 0 ? -tzDiff.tzMinute : tzDiff.tzMinute); - while (iMinuteDiff > 1440) { - iMinuteDiff -= 1440; - } - while (iMinuteDiff < 0) { - iMinuteDiff += 1440; - } - wHour = iMinuteDiff / 60; - wMinute = iMinuteDiff % 60; -} -static FX_BOOL FX_ParseLocaleTime(const CFX_WideString& wsTime, - const CFX_WideString& wsTimePattern, - IFX_Locale* pLocale, - CFX_Unitime& datetime, - int32_t& cc) { - uint8_t hour = 0; - uint8_t minute = 0; - uint8_t second = 0; - FX_WORD millisecond = 0; - int32_t ccf = 0; - const FX_WCHAR* str = (const FX_WCHAR*)wsTime; - int len = wsTime.GetLength(); - const FX_WCHAR* strf = (const FX_WCHAR*)wsTimePattern; - int lenf = wsTimePattern.GetLength(); - FX_BOOL bHasA = FALSE; - FX_BOOL bPM = FALSE; - while (cc < len && ccf < lenf) { - if (strf[ccf] == '\'') { - CFX_WideString wsLiteral = FX_GetLiteralText(strf, ccf, lenf); - int32_t iLiteralLen = wsLiteral.GetLength(); - if (cc + iLiteralLen > len || - FXSYS_wcsncmp(str + cc, (const FX_WCHAR*)wsLiteral, iLiteralLen)) { - return FALSE; - } - cc += iLiteralLen; - ccf++; - continue; - } else if (FX_Local_Find(gs_wsTimeSymbols, strf[ccf]) == -1) { - if (strf[ccf] != str[cc]) { - return FALSE; - } - cc++; - ccf++; - continue; - } - FX_DWORD dwSymbolNum = 1; - FX_DWORD dwSymbol = strf[ccf++]; - while (ccf < lenf && strf[ccf] == dwSymbol) { - ccf++; - dwSymbolNum++; - } - dwSymbol = (dwSymbol << 8) | (dwSymbolNum + '0'); - if (dwSymbol == FXBSTR_ID(0, 0, 'k', '1') || - dwSymbol == FXBSTR_ID(0, 0, 'H', '1') || - dwSymbol == FXBSTR_ID(0, 0, 'h', '1') || - dwSymbol == FXBSTR_ID(0, 0, 'K', '1')) { - if (!FX_IsDigit(str[cc])) { - return FALSE; - } - hour = str[cc++] - '0'; - if (cc < len && FX_IsDigit(str[cc])) { - hour = hour * 10 + str[cc++] - '0'; - } - if (dwSymbol == FXBSTR_ID(0, 0, 'K', '1') && hour == 24) { - hour = 0; - } - } else if (dwSymbol == FXBSTR_ID(0, 0, 'k', '2') || - dwSymbol == FXBSTR_ID(0, 0, 'H', '2') || - dwSymbol == FXBSTR_ID(0, 0, 'h', '2') || - dwSymbol == FXBSTR_ID(0, 0, 'K', '2')) { - if (!FX_IsDigit(str[cc])) { - return FALSE; - } - hour = str[cc++] - '0'; - if (cc >= len) { - return FALSE; - } - if (!FX_IsDigit(str[cc])) { - return FALSE; - } - hour = hour * 10 + str[cc++] - '0'; - if (dwSymbol == FXBSTR_ID(0, 0, 'K', '2') && hour == 24) { - hour = 0; - } - } else if (dwSymbol == FXBSTR_ID(0, 0, 'M', '1')) { - if (!FX_IsDigit(str[cc])) { - return FALSE; - } - minute = str[cc++] - '0'; - if (cc < len && FX_IsDigit(str[cc])) { - minute = minute * 10 + str[cc++] - '0'; - } - } else if (dwSymbol == FXBSTR_ID(0, 0, 'M', '2')) { - if (!FX_IsDigit(str[cc])) { - return FALSE; - } - minute = str[cc++] - '0'; - if (cc >= len) { - return FALSE; - } - if (!FX_IsDigit(str[cc])) { - return FALSE; - } - minute = minute * 10 + str[cc++] - '0'; - } else if (dwSymbol == FXBSTR_ID(0, 0, 'S', '1')) { - if (!FX_IsDigit(str[cc])) { - return FALSE; - } - second = str[cc++] - '0'; - if (cc < len && FX_IsDigit(str[cc])) { - second = second * 10 + str[cc++] - '0'; - } - } else if (dwSymbol == FXBSTR_ID(0, 0, 'S', '2')) { - if (!FX_IsDigit(str[cc])) { - return FALSE; - } - second = str[cc++] - '0'; - if (cc >= len) { - return FALSE; - } - if (!FX_IsDigit(str[cc])) { - return FALSE; - } - second = second * 10 + str[cc++] - '0'; - } else if (dwSymbol == FXBSTR_ID(0, 0, 'F', '3')) { - if (cc + 3 >= len) { - return FALSE; - } - int i = 0; - while (i < 3) { - if (!FX_IsDigit(str[cc])) { - return FALSE; - } - millisecond = millisecond * 10 + str[cc++] - '0'; - i++; - } - } else if (dwSymbol == FXBSTR_ID(0, 0, 'A', '1')) { - CFX_WideString wsAM; - pLocale->GetMeridiemName(wsAM, TRUE); - CFX_WideString wsPM; - pLocale->GetMeridiemName(wsPM, FALSE); - if ((cc + wsAM.GetLength() <= len) && - (CFX_WideStringC(str + cc, wsAM.GetLength()) == wsAM)) { - cc += wsAM.GetLength(); - bHasA = TRUE; - } else if ((cc + wsPM.GetLength() <= len) && - (CFX_WideStringC(str + cc, wsPM.GetLength()) == wsPM)) { - cc += wsPM.GetLength(); - bHasA = TRUE; - bPM = TRUE; - } - } else if (dwSymbol == FXBSTR_ID(0, 0, 'Z', '1')) { - if (cc + 3 > len) { - continue; - } - FX_DWORD dwHash = str[cc++]; - dwHash = (dwHash << 8) | str[cc++]; - dwHash = (dwHash << 8) | str[cc++]; - if (dwHash == FXBSTR_ID(0, 'G', 'M', 'T')) { - FX_TIMEZONE tzDiff; - tzDiff.tzHour = 0; - tzDiff.tzMinute = 0; - if (cc < len && (str[cc] == '-' || str[cc] == '+')) { - cc += FX_ParseTimeZone(str + cc, len - cc, tzDiff); - } - FX_ResolveZone(hour, minute, tzDiff, pLocale); - } else { - const FX_LOCALETIMEZONEINFO* pEnd = - g_FXLocaleTimeZoneData + FX_ArraySize(g_FXLocaleTimeZoneData); - const FX_LOCALETIMEZONEINFO* pTimeZoneInfo = - std::lower_bound(g_FXLocaleTimeZoneData, pEnd, dwHash, - [](const FX_LOCALETIMEZONEINFO& info, - FX_DWORD hash) { return info.uHash < hash; }); - if (pTimeZoneInfo < pEnd && dwHash == pTimeZoneInfo->uHash) { - hour += pTimeZoneInfo->iHour; - minute += pTimeZoneInfo->iHour > 0 ? pTimeZoneInfo->iMinute - : -pTimeZoneInfo->iMinute; - } - } - } else if (dwSymbol == FXBSTR_ID(0, 0, 'z', '1')) { - if (str[cc] != 'Z') { - FX_TIMEZONE tzDiff; - cc += FX_ParseTimeZone(str + cc, len - cc, tzDiff); - FX_ResolveZone(hour, minute, tzDiff, pLocale); - } else { - cc++; - } - } - } - if (bHasA) { - if (bPM) { - hour += 12; - if (hour == 24) { - hour = 12; - } - } else { - if (hour == 12) { - hour = 0; - } - } - } - CFX_Unitime ut; - ut.Set(0, 0, 0, hour, minute, second, millisecond); - datetime = datetime + ut; - return cc; -} -FX_BOOL CFX_FormatString::ParseDateTime(const CFX_WideString& wsSrcDateTime, - const CFX_WideString& wsPattern, - FX_DATETIMETYPE eDateTimeType, - CFX_Unitime& dtValue) { - dtValue.Set(0); - if (wsSrcDateTime.IsEmpty() || wsPattern.IsEmpty()) { - return FALSE; - } - CFX_WideString wsDatePattern, wsTimePattern; - IFX_Locale* pLocale = NULL; - FX_DATETIMETYPE eCategory = - GetDateTimeFormat(wsPattern, pLocale, wsDatePattern, wsTimePattern); - if (!pLocale) { - return FALSE; - } - if (eCategory == FX_DATETIMETYPE_Unknown) { - eCategory = eDateTimeType; - } - if (eCategory == FX_DATETIMETYPE_Unknown) { - return FALSE; - } - if (eCategory == FX_DATETIMETYPE_TimeDate) { - int32_t iStart = 0; - if (!FX_ParseLocaleTime(wsSrcDateTime, wsTimePattern, pLocale, dtValue, - iStart)) { - return FALSE; - } - if (!FX_ParseLocaleDate(wsSrcDateTime, wsDatePattern, pLocale, dtValue, - iStart)) { - return FALSE; - } - } else { - int32_t iStart = 0; - if ((eCategory & FX_DATETIMETYPE_Date) && - !FX_ParseLocaleDate(wsSrcDateTime, wsDatePattern, pLocale, dtValue, - iStart)) { - return FALSE; - } - if ((eCategory & FX_DATETIMETYPE_Time) && - !FX_ParseLocaleTime(wsSrcDateTime, wsTimePattern, pLocale, dtValue, - iStart)) { - return FALSE; - } - } - return TRUE; -} -FX_BOOL CFX_FormatString::ParseZero(const CFX_WideString& wsSrcText, - const CFX_WideString& wsPattern) { - CFX_WideString wsTextFormat; - GetTextFormat(wsPattern, FX_WSTRC(L"zero"), wsTextFormat); - int32_t iText = 0, iPattern = 0; - const FX_WCHAR* pStrText = (const FX_WCHAR*)wsSrcText; - int32_t iLenText = wsSrcText.GetLength(); - const FX_WCHAR* pStrPattern = (const FX_WCHAR*)wsTextFormat; - int32_t iLenPattern = wsTextFormat.GetLength(); - while (iPattern < iLenPattern && iText < iLenText) { - if (pStrPattern[iPattern] == '\'') { - CFX_WideString wsLiteral = - FX_GetLiteralText(pStrPattern, iPattern, iLenPattern); - int32_t iLiteralLen = wsLiteral.GetLength(); - if (iText + iLiteralLen > iLenText || - FXSYS_wcsncmp(pStrText + iText, (const FX_WCHAR*)wsLiteral, - iLiteralLen)) { - return FALSE; - } - iText += iLiteralLen; - iPattern++; - continue; - } else if (pStrPattern[iPattern] != pStrText[iText]) { - return FALSE; - } else { - iText++; - iPattern++; - } - } - return iPattern == iLenPattern && iText == iLenText; -} -FX_BOOL CFX_FormatString::ParseNull(const CFX_WideString& wsSrcText, - const CFX_WideString& wsPattern) { - CFX_WideString wsTextFormat; - GetTextFormat(wsPattern, FX_WSTRC(L"null"), wsTextFormat); - int32_t iText = 0, iPattern = 0; - const FX_WCHAR* pStrText = (const FX_WCHAR*)wsSrcText; - int32_t iLenText = wsSrcText.GetLength(); - const FX_WCHAR* pStrPattern = (const FX_WCHAR*)wsTextFormat; - int32_t iLenPattern = wsTextFormat.GetLength(); - while (iPattern < iLenPattern && iText < iLenText) { - if (pStrPattern[iPattern] == '\'') { - CFX_WideString wsLiteral = - FX_GetLiteralText(pStrPattern, iPattern, iLenPattern); - int32_t iLiteralLen = wsLiteral.GetLength(); - if (iText + iLiteralLen > iLenText || - FXSYS_wcsncmp(pStrText + iText, (const FX_WCHAR*)wsLiteral, - iLiteralLen)) { - return FALSE; - } - iText += iLiteralLen; - iPattern++; - continue; - } else if (pStrPattern[iPattern] != pStrText[iText]) { - return FALSE; - } else { - iText++; - iPattern++; - } - } - return iPattern == iLenPattern && iText == iLenText; -} -FX_BOOL CFX_FormatString::FormatText(const CFX_WideString& wsSrcText, - const CFX_WideString& wsPattern, - CFX_WideString& wsOutput) { - if (wsPattern.IsEmpty()) { - return FALSE; - } - int32_t iLenText = wsSrcText.GetLength(); - if (iLenText == 0) { - return FALSE; - } - CFX_WideString wsTextFormat; - GetTextFormat(wsPattern, FX_WSTRC(L"text"), wsTextFormat); - int32_t iText = 0, iPattern = 0; - const FX_WCHAR* pStrText = (const FX_WCHAR*)wsSrcText; - const FX_WCHAR* pStrPattern = (const FX_WCHAR*)wsTextFormat; - int32_t iLenPattern = wsTextFormat.GetLength(); - while (iPattern < iLenPattern) { - switch (pStrPattern[iPattern]) { - case '\'': { - wsOutput += FX_GetLiteralText(pStrPattern, iPattern, iLenPattern); - iPattern++; - break; - } - case 'A': - if (iText >= iLenText || !FX_IsAlpha(pStrText[iText])) { - return FALSE; - } - wsOutput += pStrText[iText++]; - iPattern++; - break; - case 'X': - if (iText >= iLenText) { - return FALSE; - } - wsOutput += pStrText[iText++]; - iPattern++; - break; - case 'O': - case '0': - if (iText >= iLenText || - (!FX_IsDigit(pStrText[iText]) && !FX_IsAlpha(pStrText[iText]))) { - return FALSE; - } - wsOutput += pStrText[iText++]; - iPattern++; - break; - case '9': - if (iText >= iLenText || !FX_IsDigit(pStrText[iText])) { - return FALSE; - } - wsOutput += pStrText[iText++]; - iPattern++; - break; - default: - wsOutput += pStrPattern[iPattern++]; - break; - } - } - return iText == iLenText; -} -static int32_t FX_GetNumTrailingLimit(const CFX_WideString& wsFormat, - int iDotPos, - FX_BOOL& bTrimTailZeros) { - if (iDotPos < 0) { - return 0; - } - int32_t iCount = wsFormat.GetLength(); - int32_t iTreading = 0; - for (iDotPos++; iDotPos < iCount; iDotPos++) { - FX_WCHAR wc = wsFormat[iDotPos]; - if (wc == L'z' || wc == L'9' || wc == 'Z') { - iTreading++; - bTrimTailZeros = (wc == L'9' ? FALSE : TRUE); - } - } - return iTreading; -} -FX_BOOL CFX_FormatString::FormatStrNum(const CFX_WideStringC& wsInputNum, - const CFX_WideString& wsPattern, - CFX_WideString& wsOutput) { - if (wsInputNum.IsEmpty() || wsPattern.IsEmpty()) { - return FALSE; - } - int32_t dot_index_f = -1; - FX_DWORD dwNumStyle = 0; - CFX_WideString wsNumFormat; - IFX_Locale* pLocale = - GetNumericFormat(wsPattern, dot_index_f, dwNumStyle, wsNumFormat); - if (!pLocale || wsNumFormat.IsEmpty()) { - return FALSE; - } - int32_t cc = 0, ccf = 0; - const FX_WCHAR* strf = (const FX_WCHAR*)wsNumFormat; - int lenf = wsNumFormat.GetLength(); - CFX_WideString wsSrcNum = wsInputNum; - wsSrcNum.TrimLeft('0'); - if (wsSrcNum.IsEmpty() || wsSrcNum[0] == '.') { - wsSrcNum.Insert(0, '0'); - } - CFX_Decimal decimal = CFX_Decimal(wsSrcNum); - if (dwNumStyle & FX_NUMSTYLE_Percent) { - decimal = decimal * CFX_Decimal(100); - wsSrcNum = decimal; - } - int32_t exponent = 0; - if (dwNumStyle & FX_NUMSTYLE_Exponent) { - int fixed_count = 0; - while (ccf < dot_index_f) { - switch (strf[ccf]) { - case '\'': - FX_GetLiteralText(strf, ccf, dot_index_f); - break; - case '9': - case 'z': - case 'Z': - fixed_count++; - break; - } - ccf++; - } - int threshold = 1; - while (fixed_count > 1) { - threshold *= 10; - fixed_count--; - } - if (decimal != CFX_Decimal(0)) { - if (decimal < CFX_Decimal(threshold)) { - decimal = decimal * CFX_Decimal(10); - exponent = -1; - while (decimal < CFX_Decimal(threshold)) { - decimal = decimal * CFX_Decimal(10); - exponent -= 1; - } - } else if (decimal > CFX_Decimal(threshold)) { - threshold *= 10; - while (decimal > CFX_Decimal(threshold)) { - decimal = decimal / CFX_Decimal(10); - exponent += 1; - } - } - } - } - FX_BOOL bTrimTailZeros = FALSE; - int32_t iTreading = - FX_GetNumTrailingLimit(wsNumFormat, dot_index_f, bTrimTailZeros); - int32_t scale = decimal.GetScale(); - if (iTreading < scale) { - decimal.SetScale(iTreading); - wsSrcNum = decimal; - } - if (bTrimTailZeros && scale > 0 && iTreading > 0) { - wsSrcNum.TrimRight(L"0"); - wsSrcNum.TrimRight(L"."); - } - CFX_WideString wsGroupSymbol; - pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Grouping, wsGroupSymbol); - FX_BOOL bNeg = FALSE; - if (wsSrcNum[0] == '-') { - bNeg = TRUE; - wsSrcNum.Delete(0, 1); - } - FX_BOOL bAddNeg = FALSE; - const FX_WCHAR* str = (const FX_WCHAR*)wsSrcNum; - int len = wsSrcNum.GetLength(); - int dot_index = wsSrcNum.Find('.'); - if (dot_index == -1) { - dot_index = len; - } - ccf = dot_index_f - 1; - cc = dot_index - 1; - while (ccf >= 0) { - switch (strf[ccf]) { - case '9': - if (cc >= 0) { - if (!FX_IsDigit(str[cc])) { - return FALSE; - } - wsOutput = CFX_WideStringC(str[cc]) + wsOutput; - cc--; - } else { - wsOutput = CFX_WideStringC(L'0') + wsOutput; - } - ccf--; - break; - case 'z': - if (cc >= 0) { - if (!FX_IsDigit(str[cc])) { - return FALSE; - } - if (str[0] != '0') { - wsOutput = CFX_WideStringC(str[cc]) + wsOutput; - } - cc--; - } - ccf--; - break; - case 'Z': - if (cc >= 0) { - if (!FX_IsDigit(str[cc])) { - return FALSE; - } - if (str[0] == '0') { - wsOutput = CFX_WideStringC(L' ') + wsOutput; - } else { - wsOutput = CFX_WideStringC(str[cc]) + wsOutput; - } - cc--; - } else { - wsOutput = CFX_WideStringC(L' ') + wsOutput; - } - ccf--; - break; - case 'S': - if (bNeg) { - CFX_WideString wsMinusSymbol; - pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Minus, wsMinusSymbol); - wsOutput = wsMinusSymbol + wsOutput; - bAddNeg = TRUE; - } else { - wsOutput = CFX_WideStringC(L' ') + wsOutput; - } - ccf--; - break; - case 's': - if (bNeg) { - CFX_WideString wsMinusSymbol; - pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Minus, wsMinusSymbol); - wsOutput = wsMinusSymbol + wsOutput; - bAddNeg = TRUE; - } - ccf--; - break; - case 'E': { - CFX_WideString wsExp; - wsExp.Format(L"E%+d", exponent); - wsOutput = wsExp + wsOutput; - } - ccf--; - break; - case '$': { - CFX_WideString wsSymbol; - pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_CurrencySymbol, wsSymbol); - wsOutput = wsSymbol + wsOutput; - } - ccf--; - break; - case 'r': - if (ccf - 1 >= 0 && strf[ccf - 1] == 'c') { - if (bNeg) { - wsOutput = L"CR" + wsOutput; - } - ccf -= 2; - bAddNeg = TRUE; - } - break; - case 'R': - if (ccf - 1 >= 0 && strf[ccf - 1] == 'C') { - if (bNeg) { - wsOutput = L"CR" + wsOutput; - } else { - wsOutput = L" " + wsOutput; - } - ccf -= 2; - bAddNeg = TRUE; - } - break; - case 'b': - if (ccf - 1 >= 0 && strf[ccf - 1] == 'd') { - if (bNeg) { - wsOutput = L"db" + wsOutput; - } - ccf -= 2; - bAddNeg = TRUE; - } - break; - case 'B': - if (ccf - 1 >= 0 && strf[ccf - 1] == 'D') { - if (bNeg) { - wsOutput = L"DB" + wsOutput; - } else { - wsOutput = L" " + wsOutput; - } - ccf -= 2; - bAddNeg = TRUE; - } - break; - case '%': { - CFX_WideString wsSymbol; - pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Percent, wsSymbol); - wsOutput = wsSymbol + wsOutput; - } - ccf--; - break; - case ',': - if (cc >= 0) { - wsOutput = wsGroupSymbol + wsOutput; - } - ccf--; - break; - case '(': - if (bNeg) { - wsOutput = L"(" + wsOutput; - } else { - wsOutput = L" " + wsOutput; - } - bAddNeg = TRUE; - ccf--; - break; - case ')': - if (bNeg) { - wsOutput = L")" + wsOutput; - } else { - wsOutput = L" " + wsOutput; - } - ccf--; - break; - case '\'': - wsOutput = FX_GetLiteralTextReverse(strf, ccf) + wsOutput; - ccf--; - break; - default: - wsOutput = CFX_WideStringC(strf[ccf]) + wsOutput; - ccf--; - } - } - if (cc >= 0) { - int nPos = dot_index % 3; - wsOutput.Empty(); - for (int32_t i = 0; i < dot_index; i++) { - if (i % 3 == nPos && i != 0) { - wsOutput += wsGroupSymbol; - } - wsOutput += wsSrcNum[i]; - } - if (dot_index < len) { - CFX_WideString wsSymbol; - pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Decimal, wsSymbol); - wsOutput += wsSymbol; - wsOutput += wsSrcNum.Right(len - dot_index - 1); - } - if (bNeg) { - CFX_WideString wsMinusymbol; - pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Minus, wsMinusymbol); - wsOutput = wsMinusymbol + wsOutput; - } - return FALSE; - } - if (dot_index_f == wsNumFormat.GetLength()) { - if (!bAddNeg && bNeg) { - CFX_WideString wsMinusymbol; - pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Minus, wsMinusymbol); - wsOutput = wsMinusymbol + wsOutput; - } - return TRUE; - } - CFX_WideString wsDotSymbol; - pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Decimal, wsDotSymbol); - if (strf[dot_index_f] == 'V') { - wsOutput += wsDotSymbol; - } else if (strf[dot_index_f] == '.') { - if (dot_index < len) { - wsOutput += wsDotSymbol; - } else { - if (strf[dot_index_f + 1] == '9' || strf[dot_index_f + 1] == 'Z') { - wsOutput += wsDotSymbol; - } - } - } - ccf = dot_index_f + 1; - cc = dot_index + 1; - while (ccf < lenf) { - switch (strf[ccf]) { - case '\'': - wsOutput += FX_GetLiteralText(strf, ccf, lenf); - ccf++; - break; - case '9': - if (cc < len) { - if (!FX_IsDigit(str[cc])) { - return FALSE; - } - wsOutput += str[cc]; - cc++; - } else { - wsOutput += L'0'; - } - ccf++; - break; - case 'z': - if (cc < len) { - if (!FX_IsDigit(str[cc])) { - return FALSE; - } - wsOutput += str[cc]; - cc++; - } - ccf++; - break; - case 'Z': - if (cc < len) { - if (!FX_IsDigit(str[cc])) { - return FALSE; - } - wsOutput += str[cc]; - cc++; - } else { - wsOutput += L'0'; - } - ccf++; - break; - case 'E': { - CFX_WideString wsExp; - wsExp.Format(L"E%+d", exponent); - wsOutput += wsExp; - } - ccf++; - break; - case '$': { - CFX_WideString wsSymbol; - pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_CurrencySymbol, wsSymbol); - wsOutput += wsSymbol; - } - ccf++; - break; - case 'c': - if (ccf + 1 < lenf && strf[ccf + 1] == 'r') { - if (bNeg) { - wsOutput += L"CR"; - } - ccf += 2; - bAddNeg = TRUE; - } - break; - case 'C': - if (ccf + 1 < lenf && strf[ccf + 1] == 'R') { - if (bNeg) { - wsOutput += L"CR"; - } else { - wsOutput += L" "; - } - ccf += 2; - bAddNeg = TRUE; - } - break; - case 'd': - if (ccf + 1 < lenf && strf[ccf + 1] == 'b') { - if (bNeg) { - wsOutput += L"db"; - } - ccf += 2; - bAddNeg = TRUE; - } - break; - case 'D': - if (ccf + 1 < lenf && strf[ccf + 1] == 'B') { - if (bNeg) { - wsOutput += L"DB"; - } else { - wsOutput += L" "; - } - ccf += 2; - bAddNeg = TRUE; - } - break; - case '%': { - CFX_WideString wsSymbol; - pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Percent, wsSymbol); - wsOutput += wsSymbol; - } - ccf++; - break; - case '8': { - while (ccf < lenf && strf[ccf] == '8') { - ccf++; - } - while (cc < len && FX_IsDigit(str[cc])) { - wsOutput += str[cc]; - cc++; - } - } break; - case ',': - wsOutput += wsGroupSymbol; - ccf++; - break; - case '(': - if (bNeg) { - wsOutput += '('; - } else { - wsOutput += ' '; - } - bAddNeg = TRUE; - ccf++; - break; - case ')': - if (bNeg) { - wsOutput += ')'; - } else { - wsOutput += ' '; - } - ccf++; - break; - default: - ccf++; - } - } - if (!bAddNeg && bNeg) { - CFX_WideString wsMinusymbol; - pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Minus, wsMinusymbol); - wsOutput = - wsMinusymbol + wsOutput[0] + wsOutput.Mid(1, wsOutput.GetLength() - 1); - } - return TRUE; -} -FX_BOOL CFX_FormatString::FormatLCNumeric(CFX_LCNumeric& lcNum, - const CFX_WideString& wsPattern, - CFX_WideString& wsOutput) { - int32_t dot_index_f = -1; - FX_DWORD dwNumStyle = 0; - CFX_WideString wsNumFormat; - IFX_Locale* pLocale = - GetNumericFormat(wsPattern, dot_index_f, dwNumStyle, wsNumFormat); - if (!pLocale || wsNumFormat.IsEmpty()) { - return FALSE; - } - int32_t cc = 0, ccf = 0; - const FX_WCHAR* strf = (const FX_WCHAR*)wsNumFormat; - int lenf = wsNumFormat.GetLength(); - double dbOrgRaw = lcNum.GetDouble(); - double dbRetValue = dbOrgRaw; - if (dwNumStyle & FX_NUMSTYLE_Percent) { - dbRetValue *= 100; - } - int32_t exponent = 0; - if (dwNumStyle & FX_NUMSTYLE_Exponent) { - int fixed_count = 0; - while (ccf < dot_index_f) { - switch (strf[ccf]) { - case '\'': - FX_GetLiteralText(strf, ccf, dot_index_f); - break; - case '9': - case 'z': - case 'Z': - fixed_count++; - break; - } - ccf++; - } - int threshold = 1; - while (fixed_count > 1) { - threshold *= 10; - fixed_count--; - } - if (dbRetValue != 0) { - if (dbRetValue < threshold) { - dbRetValue *= 10; - exponent = -1; - while (dbRetValue < threshold) { - dbRetValue *= 10; - exponent -= 1; - } - } else if (dbRetValue > threshold) { - threshold *= 10; - while (dbRetValue > threshold) { - dbRetValue /= 10; - exponent += 1; - } - } - } - } - if (dwNumStyle & (FX_NUMSTYLE_Percent | FX_NUMSTYLE_Exponent)) { - lcNum = CFX_LCNumeric(dbRetValue); - } - FX_BOOL bTrimTailZeros = FALSE; - int32_t iTreading = - FX_GetNumTrailingLimit(wsNumFormat, dot_index_f, bTrimTailZeros); - CFX_WideString wsNumeric = lcNum.ToString(iTreading, bTrimTailZeros); - if (wsNumeric.IsEmpty()) { - return FALSE; - } - CFX_WideString wsGroupSymbol; - pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Grouping, wsGroupSymbol); - FX_BOOL bNeg = FALSE; - if (wsNumeric[0] == '-') { - bNeg = TRUE; - wsNumeric.Delete(0, 1); - } - FX_BOOL bAddNeg = FALSE; - const FX_WCHAR* str = (const FX_WCHAR*)wsNumeric; - int len = wsNumeric.GetLength(); - int dot_index = wsNumeric.Find('.'); - if (dot_index == -1) { - dot_index = len; - } - ccf = dot_index_f - 1; - cc = dot_index - 1; - while (ccf >= 0) { - switch (strf[ccf]) { - case '9': - if (cc >= 0) { - wsOutput = CFX_WideStringC(str[cc]) + wsOutput; - cc--; - } else { - wsOutput = CFX_WideStringC(L'0') + wsOutput; - } - ccf--; - break; - case 'z': - if (cc >= 0) { - if (lcNum.m_Integral != 0) { - wsOutput = CFX_WideStringC(str[cc]) + wsOutput; - } - cc--; - } - ccf--; - break; - case 'Z': - if (cc >= 0) { - if (lcNum.m_Integral == 0) { - wsOutput = CFX_WideStringC(L' ') + wsOutput; - } else { - wsOutput = CFX_WideStringC(str[cc]) + wsOutput; - } - cc--; - } else { - wsOutput = CFX_WideStringC(L' ') + wsOutput; - } - ccf--; - break; - case 'S': - if (bNeg) { - CFX_WideString wsMinusSymbol; - pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Minus, wsMinusSymbol); - wsOutput = wsMinusSymbol + wsOutput; - bAddNeg = TRUE; - } else { - wsOutput = CFX_WideStringC(L' ') + wsOutput; - } - ccf--; - break; - case 's': - if (bNeg) { - CFX_WideString wsMinusSymbol; - pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Minus, wsMinusSymbol); - wsOutput = wsMinusSymbol + wsOutput; - bAddNeg = TRUE; - } - ccf--; - break; - case 'E': { - CFX_WideString wsExp; - wsExp.Format(L"E%+d", exponent); - wsOutput = wsExp + wsOutput; - } - ccf--; - break; - case '$': { - CFX_WideString wsSymbol; - pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_CurrencySymbol, wsSymbol); - wsOutput = wsSymbol + wsOutput; - } - ccf--; - break; - case 'r': - if (ccf - 1 >= 0 && strf[ccf - 1] == 'c') { - if (bNeg) { - wsOutput = L"CR" + wsOutput; - } - ccf -= 2; - bAddNeg = TRUE; - } - break; - case 'R': - if (ccf - 1 >= 0 && strf[ccf - 1] == 'C') { - if (bNeg) { - wsOutput = L"CR" + wsOutput; - } else { - wsOutput = L" " + wsOutput; - } - ccf -= 2; - bAddNeg = TRUE; - } - break; - case 'b': - if (ccf - 1 >= 0 && strf[ccf - 1] == 'd') { - if (bNeg) { - wsOutput = L"db" + wsOutput; - } - ccf -= 2; - bAddNeg = TRUE; - } - break; - case 'B': - if (ccf - 1 >= 0 && strf[ccf - 1] == 'D') { - if (bNeg) { - wsOutput = L"DB" + wsOutput; - } else { - wsOutput = L" " + wsOutput; - } - ccf -= 2; - bAddNeg = TRUE; - } - break; - case '%': { - CFX_WideString wsSymbol; - pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Percent, wsSymbol); - wsOutput = wsSymbol + wsOutput; - } - ccf--; - break; - case ',': - if (cc >= 0) { - wsOutput = wsGroupSymbol + wsOutput; - } - ccf--; - break; - case '(': - if (bNeg) { - wsOutput = L"(" + wsOutput; - } else { - wsOutput = L" " + wsOutput; - } - bAddNeg = TRUE; - ccf--; - break; - case ')': - if (bNeg) { - wsOutput = L")" + wsOutput; - } else { - wsOutput = L" " + wsOutput; - } - ccf--; - break; - case '\'': - wsOutput = FX_GetLiteralTextReverse(strf, ccf) + wsOutput; - ccf--; - break; - default: - wsOutput = CFX_WideStringC(strf[ccf]) + wsOutput; - ccf--; - } - } - if (cc >= 0) { - int nPos = dot_index % 3; - wsOutput.Empty(); - for (int32_t i = 0; i < dot_index; i++) { - if (i % 3 == nPos && i != 0) { - wsOutput += wsGroupSymbol; - } - wsOutput += wsNumeric[i]; - } - if (dot_index < len) { - CFX_WideString wsSymbol; - pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Decimal, wsSymbol); - wsOutput += wsSymbol; - wsOutput += wsNumeric.Right(len - dot_index - 1); - } - if (bNeg) { - CFX_WideString wsMinusymbol; - pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Minus, wsMinusymbol); - wsOutput = wsMinusymbol + wsOutput; - } - return FALSE; - } - if (dot_index_f == wsNumFormat.GetLength()) { - if (!bAddNeg && bNeg) { - CFX_WideString wsMinusymbol; - pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Minus, wsMinusymbol); - wsOutput = wsMinusymbol + wsOutput; - } - return TRUE; - } - CFX_WideString wsDotSymbol; - pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Decimal, wsDotSymbol); - if (strf[dot_index_f] == 'V') { - wsOutput += wsDotSymbol; - } else if (strf[dot_index_f] == '.') { - if (dot_index < len) { - wsOutput += wsDotSymbol; - } else { - if (strf[dot_index_f + 1] == '9' || strf[dot_index_f + 1] == 'Z') { - wsOutput += wsDotSymbol; - } - } - } - ccf = dot_index_f + 1; - cc = dot_index + 1; - while (ccf < lenf) { - switch (strf[ccf]) { - case '\'': - wsOutput += FX_GetLiteralText(strf, ccf, lenf); - ccf++; - break; - case '9': - if (cc < len) { - wsOutput += str[cc]; - cc++; - } else { - wsOutput += L'0'; - } - ccf++; - break; - case 'z': - if (cc < len) { - wsOutput += str[cc]; - cc++; - } - ccf++; - break; - case 'Z': - if (cc < len) { - wsOutput += str[cc]; - cc++; - } else { - wsOutput += L'0'; - } - ccf++; - break; - case 'E': { - CFX_WideString wsExp; - wsExp.Format(L"E%+d", exponent); - wsOutput += wsExp; - } - ccf++; - break; - case '$': { - CFX_WideString wsSymbol; - pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_CurrencySymbol, wsSymbol); - wsOutput += wsSymbol; - } - ccf++; - break; - case 'c': - if (ccf + 1 < lenf && strf[ccf + 1] == 'r') { - if (bNeg) { - wsOutput += L"CR"; - } - ccf += 2; - bAddNeg = TRUE; - } - break; - case 'C': - if (ccf + 1 < lenf && strf[ccf + 1] == 'R') { - if (bNeg) { - wsOutput += L"CR"; - } else { - wsOutput += L" "; - } - ccf += 2; - bAddNeg = TRUE; - } - break; - case 'd': - if (ccf + 1 < lenf && strf[ccf + 1] == 'b') { - if (bNeg) { - wsOutput += L"db"; - } - ccf += 2; - bAddNeg = TRUE; - } - break; - case 'D': - if (ccf + 1 < lenf && strf[ccf + 1] == 'B') { - if (bNeg) { - wsOutput += L"DB"; - } else { - wsOutput += L" "; - } - ccf += 2; - bAddNeg = TRUE; - } - break; - case '%': { - CFX_WideString wsSymbol; - pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Percent, wsSymbol); - wsOutput += wsSymbol; - } - ccf++; - break; - case '8': { - while (ccf < lenf && strf[ccf] == '8') { - ccf++; - } - while (cc < len && FX_IsDigit(str[cc])) { - wsOutput += str[cc]; - cc++; - } - } break; - case ',': - wsOutput += wsGroupSymbol; - ccf++; - break; - case '(': - if (bNeg) { - wsOutput += '('; - } else { - wsOutput += ' '; - } - bAddNeg = TRUE; - ccf++; - break; - case ')': - if (bNeg) { - wsOutput += ')'; - } else { - wsOutput += ' '; - } - ccf++; - break; - default: - ccf++; - } - } - if (!bAddNeg && bNeg) { - CFX_WideString wsMinusymbol; - pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Minus, wsMinusymbol); - wsOutput = - wsOutput[0] + wsMinusymbol + wsOutput.Mid(1, wsOutput.GetLength() - 1); - } - return TRUE; -} -FX_BOOL CFX_FormatString::FormatNum(const CFX_WideString& wsSrcNum, - const CFX_WideString& wsPattern, - CFX_WideString& wsOutput) { - if (wsSrcNum.IsEmpty() || wsPattern.IsEmpty()) { - return FALSE; - } - return FormatStrNum(wsSrcNum, wsPattern, wsOutput); -} -FX_BOOL CFX_FormatString::FormatNum(FX_FLOAT fNum, - const CFX_WideString& wsPattern, - CFX_WideString& wsOutput) { - if (wsPattern.IsEmpty()) { - return FALSE; - } - CFX_LCNumeric lcNum(fNum); - return FormatLCNumeric(lcNum, wsPattern, wsOutput); -} -FX_BOOL FX_DateFromCanonical(const CFX_WideString& wsDate, - CFX_Unitime& datetime) { - int32_t year = 1900; - int32_t month = 1; - int32_t day = 1; - FX_WORD wYear = 0; - int cc_start = 0, cc = 0; - const FX_WCHAR* str = (const FX_WCHAR*)wsDate; - int len = wsDate.GetLength(); - if (len > 10) { - return FALSE; - } - while (cc < len && cc < 4) { - if (!FX_IsDigit(str[cc])) { - return FALSE; - } - wYear = wYear * 10 + str[cc++] - '0'; - } - year = wYear; - if (cc < 4 || wYear < 1900) { - return FALSE; - } - if (cc < len) { - if (str[cc] == '-') { - cc++; - } - cc_start = cc; - uint8_t tmpM = 0; - while (cc < len && cc < cc_start + 2) { - if (!FX_IsDigit(str[cc])) { - return FALSE; - } - tmpM = tmpM * 10 + str[cc++] - '0'; - } - month = tmpM; - if (cc == cc_start + 1 || tmpM > 12 || tmpM < 1) { - return FALSE; - } - if (cc < len) { - if (str[cc] == '-') { - cc++; - } - uint8_t tmpD = 0; - cc_start = cc; - while (cc < len && cc < cc_start + 2) { - if (!FX_IsDigit(str[cc])) { - return FALSE; - } - tmpD = tmpD * 10 + str[cc++] - '0'; - } - day = tmpD; - if (tmpD < 1) { - return FALSE; - } - if ((tmpM == 1 || tmpM == 3 || tmpM == 5 || tmpM == 7 || tmpM == 8 || - tmpM == 10 || tmpM == 12) && - tmpD > 31) { - return FALSE; - } - if ((tmpM == 4 || tmpM == 6 || tmpM == 9 || tmpM == 11) && tmpD > 30) { - return FALSE; - } - FX_BOOL iLeapYear; - if ((wYear % 4 == 0 && wYear % 100 != 0) || wYear % 400 == 0) { - iLeapYear = TRUE; - } else { - iLeapYear = FALSE; - } - if ((iLeapYear && tmpM == 2 && tmpD > 29) || - (!iLeapYear && tmpM == 2 && tmpD > 28)) { - return FALSE; - } - } - } - CFX_Unitime ut; - ut.Set(year, month, day); - datetime = datetime + ut; - return TRUE; -} -FX_BOOL FX_TimeFromCanonical(const CFX_WideStringC& wsTime, - CFX_Unitime& datetime, - IFX_Locale* pLocale) { - if (wsTime.GetLength() == 0) { - return FALSE; - } - uint8_t hour = 0; - uint8_t minute = 0; - uint8_t second = 0; - FX_WORD millisecond = 0; - int cc_start = 0, cc = cc_start; - const FX_WCHAR* str = (const FX_WCHAR*)wsTime.GetPtr(); - int len = wsTime.GetLength(); - while (cc < len && cc < 2) { - if (!FX_IsDigit(str[cc])) { - return FALSE; - } - hour = hour * 10 + str[cc++] - '0'; - } - if (cc < 2 || hour >= 24) { - return FALSE; - } - if (cc < len) { - if (str[cc] == ':') { - cc++; - } - cc_start = cc; - while (cc < len && cc < cc_start + 2) { - if (!FX_IsDigit(str[cc])) { - return FALSE; - } - minute = minute * 10 + str[cc++] - '0'; - } - if (cc == cc_start + 1 || minute >= 60) { - return FALSE; - } - if (cc < len) { - if (str[cc] == ':') { - cc++; - } - cc_start = cc; - while (cc < len && cc < cc_start + 2) { - if (!FX_IsDigit(str[cc])) { - return FALSE; - } - second = second * 10 + str[cc++] - '0'; - } - if (cc == cc_start + 1 || second >= 60) { - return FALSE; - } - if (cc < len) { - if (str[cc] == '.') { - cc++; - cc_start = cc; - while (cc < len && cc < cc_start + 3) { - if (!FX_IsDigit(str[cc])) { - return FALSE; - } - millisecond = millisecond * 10 + str[cc++] - '0'; - } - if (cc < cc_start + 3 || millisecond >= 1000) { - return FALSE; - } - } - if (cc < len) { - FX_TIMEZONE tzDiff; - tzDiff.tzHour = 0; - tzDiff.tzMinute = 0; - if (str[cc] != 'Z') { - cc += FX_ParseTimeZone(str + cc, len - cc, tzDiff); - } - FX_ResolveZone(hour, minute, tzDiff, pLocale); - } - } - } - } - CFX_Unitime ut; - ut.Set(0, 0, 0, hour, minute, second, millisecond); - datetime = datetime + ut; - return TRUE; -} -static FX_WORD FX_GetSolarMonthDays(FX_WORD year, FX_WORD month) { - if (month % 2) { - return 31; - } else if (month == 2) { - return FX_IsLeapYear(year) ? 29 : 28; - } - return 30; -} -static FX_WORD FX_GetWeekDay(FX_WORD year, FX_WORD month, FX_WORD day) { - FX_WORD g_month_day[] = {0, 3, 3, 6, 1, 4, 6, 2, 5, 0, 3, 5}; - FX_WORD nDays = - (year - 1) % 7 + (year - 1) / 4 - (year - 1) / 100 + (year - 1) / 400; - nDays += g_month_day[month - 1] + day; - if (FX_IsLeapYear(year) && month > 2) { - nDays++; - } - return nDays % 7; -} -static FX_WORD FX_GetWeekOfMonth(FX_WORD year, FX_WORD month, FX_WORD day) { - FX_WORD week_day = FX_GetWeekDay(year, month, 1); - FX_WORD week_index = 0; - week_index += day / 7; - day = day % 7; - if (week_day + day > 7) { - week_index++; - } - return week_index; -} -static FX_WORD FX_GetWeekOfYear(FX_WORD year, FX_WORD month, FX_WORD day) { - FX_WORD nDays = 0; - for (FX_WORD i = 1; i < month; i++) { - nDays += FX_GetSolarMonthDays(year, i); - } - nDays += day; - FX_WORD week_day = FX_GetWeekDay(year, 1, 1); - FX_WORD week_index = 1; - week_index += nDays / 7; - nDays = nDays % 7; - if (week_day + nDays > 7) { - week_index++; - } - return week_index; -} -static FX_BOOL FX_DateFormat(const CFX_WideString& wsDatePattern, - IFX_Locale* pLocale, - const CFX_Unitime& datetime, - CFX_WideString& wsResult) { - FX_BOOL bRet = TRUE; - int32_t year = datetime.GetYear(); - uint8_t month = datetime.GetMonth(); - uint8_t day = datetime.GetDay(); - int32_t ccf = 0; - const FX_WCHAR* strf = (const FX_WCHAR*)wsDatePattern; - int32_t lenf = wsDatePattern.GetLength(); - while (ccf < lenf) { - if (strf[ccf] == '\'') { - wsResult += FX_GetLiteralText(strf, ccf, lenf); - ccf++; - continue; - } else if (FX_Local_Find(gs_wsDateSymbols, strf[ccf]) < 0) { - wsResult += strf[ccf++]; - continue; - } - FX_DWORD dwSymbolNum = 1; - FX_DWORD dwSymbol = strf[ccf++]; - while (ccf < lenf && strf[ccf] == dwSymbol) { - ccf++; - dwSymbolNum++; - } - dwSymbol = (dwSymbol << 8) | (dwSymbolNum + '0'); - if (dwSymbol == FXBSTR_ID(0, 0, 'D', '1')) { - CFX_WideString wsDay; - wsDay.Format(L"%d", day); - wsResult += wsDay; - } else if (dwSymbol == FXBSTR_ID(0, 0, 'D', '2')) { - CFX_WideString wsDay; - wsDay.Format(L"%02d", day); - wsResult += wsDay; - } else if (dwSymbol == FXBSTR_ID(0, 0, 'J', '1')) { - FX_WORD nDays = 0; - for (int i = 1; i < month; i++) { - nDays += FX_GetSolarMonthDays(year, i); - } - nDays += day; - CFX_WideString wsDays; - wsDays.Format(L"%d", nDays); - wsResult += wsDays; - } else if (dwSymbol == FXBSTR_ID(0, 0, 'J', '3')) { - FX_WORD nDays = 0; - for (int i = 1; i < month; i++) { - nDays += FX_GetSolarMonthDays(year, i); - } - nDays += day; - CFX_WideString wsDays; - wsDays.Format(L"%03d", nDays); - wsResult += wsDays; - } else if (dwSymbol == FXBSTR_ID(0, 0, 'M', '1')) { - CFX_WideString wsMonth; - wsMonth.Format(L"%d", month); - wsResult += wsMonth; - } else if (dwSymbol == FXBSTR_ID(0, 0, 'M', '2')) { - CFX_WideString wsMonth; - wsMonth.Format(L"%02d", month); - wsResult += wsMonth; - } else if (dwSymbol == FXBSTR_ID(0, 0, 'M', '3')) { - CFX_WideString wsTemp; - pLocale->GetMonthName(month - 1, wsTemp, TRUE); - wsResult += wsTemp; - } else if (dwSymbol == FXBSTR_ID(0, 0, 'M', '4')) { - CFX_WideString wsTemp; - pLocale->GetMonthName(month - 1, wsTemp, FALSE); - wsResult += wsTemp; - } else if (dwSymbol == FXBSTR_ID(0, 0, 'E', '1')) { - FX_WORD wWeekDay = FX_GetWeekDay(year, month, day); - CFX_WideString wsWeekDay; - wsWeekDay.Format(L"%d", wWeekDay + 1); - wsResult += wsWeekDay; - } else if (dwSymbol == FXBSTR_ID(0, 0, 'E', '3')) { - FX_WORD wWeekDay = FX_GetWeekDay(year, month, day); - CFX_WideString wsTemp; - pLocale->GetDayName(wWeekDay, wsTemp, TRUE); - wsResult += wsTemp; - } else if (dwSymbol == FXBSTR_ID(0, 0, 'E', '4')) { - FX_WORD wWeekDay = FX_GetWeekDay(year, month, day); - if (pLocale) { - CFX_WideString wsTemp; - pLocale->GetDayName(wWeekDay, wsTemp, FALSE); - wsResult += wsTemp; - } - } else if (dwSymbol == FXBSTR_ID(0, 0, 'e', '1')) { - FX_WORD wWeekDay = FX_GetWeekDay(year, month, day); - CFX_WideString wsWeekDay; - wsWeekDay.Format(L"%d", wWeekDay ? wWeekDay : 7); - wsResult += wsWeekDay; - } else if (dwSymbol == FXBSTR_ID(0, 0, 'G', '1')) { - CFX_WideString wsTemp; - pLocale->GetEraName(wsTemp, year < 0); - wsResult += wsTemp; - } else if (dwSymbol == FXBSTR_ID(0, 0, 'Y', '2')) { - CFX_WideString wsYear; - wsYear.Format(L"%02d", year % 100); - wsResult += wsYear; - } else if (dwSymbol == FXBSTR_ID(0, 0, 'Y', '4')) { - CFX_WideString wsYear; - wsYear.Format(L"%d", year); - wsResult += wsYear; - } else if (dwSymbol == FXBSTR_ID(0, 0, 'w', '1')) { - FX_WORD week_index = FX_GetWeekOfMonth(year, month, day); - CFX_WideString wsWeekInMonth; - wsWeekInMonth.Format(L"%d", week_index); - wsResult += wsWeekInMonth; - } else if (dwSymbol == FXBSTR_ID(0, 0, 'W', '2')) { - FX_WORD week_index = FX_GetWeekOfYear(year, month, day); - CFX_WideString wsWeekInYear; - wsWeekInYear.Format(L"%02d", week_index); - wsResult += wsWeekInYear; - } - } - return bRet; -} -static FX_BOOL FX_TimeFormat(const CFX_WideString& wsTimePattern, - IFX_Locale* pLocale, - const CFX_Unitime& datetime, - CFX_WideString& wsResult) { - FX_BOOL bGMT = FALSE; - FX_BOOL bRet = TRUE; - uint8_t hour = datetime.GetHour(); - uint8_t minute = datetime.GetMinute(); - uint8_t second = datetime.GetSecond(); - FX_WORD millisecond = datetime.GetMillisecond(); - int32_t ccf = 0; - const FX_WCHAR* strf = (const FX_WCHAR*)wsTimePattern; - int32_t lenf = wsTimePattern.GetLength(); - FX_WORD wHour = hour; - FX_BOOL bPM = FALSE; - if (wsTimePattern.Find('A') != -1) { - if (wHour >= 12) { - bPM = TRUE; - } - } - while (ccf < lenf) { - if (strf[ccf] == '\'') { - wsResult += FX_GetLiteralText(strf, ccf, lenf); - ccf++; - continue; - } else if (FX_Local_Find(gs_wsTimeSymbols, strf[ccf]) < 0) { - wsResult += strf[ccf++]; - continue; - } - FX_DWORD dwSymbolNum = 1; - FX_DWORD dwSymbol = strf[ccf++]; - while (ccf < lenf && strf[ccf] == dwSymbol) { - ccf++; - dwSymbolNum++; - } - dwSymbol = (dwSymbol << 8) | (dwSymbolNum + '0'); - if (dwSymbol == FXBSTR_ID(0, 0, 'h', '1')) { - if (wHour > 12) { - wHour -= 12; - } - CFX_WideString wsHour; - wsHour.Format(L"%d", wHour == 0 ? 12 : wHour); - wsResult += wsHour; - } else if (dwSymbol == FXBSTR_ID(0, 0, 'h', '2')) { - if (wHour > 12) { - wHour -= 12; - } - CFX_WideString wsHour; - wsHour.Format(L"%02d", wHour == 0 ? 12 : wHour); - wsResult += wsHour; - } else if (dwSymbol == FXBSTR_ID(0, 0, 'K', '1')) { - CFX_WideString wsHour; - wsHour.Format(L"%d", wHour == 0 ? 24 : wHour); - wsResult += wsHour; - } else if (dwSymbol == FXBSTR_ID(0, 0, 'K', '2')) { - CFX_WideString wsHour; - wsHour.Format(L"%02d", wHour == 0 ? 24 : wHour); - wsResult += wsHour; - } else if (dwSymbol == FXBSTR_ID(0, 0, 'k', '1')) { - if (wHour > 12) { - wHour -= 12; - } - CFX_WideString wsHour; - wsHour.Format(L"%d", wHour); - wsResult += wsHour; - } else if (dwSymbol == FXBSTR_ID(0, 0, 'H', '1')) { - CFX_WideString wsHour; - wsHour.Format(L"%d", wHour); - wsResult += wsHour; - } else if (dwSymbol == FXBSTR_ID(0, 0, 'k', '2')) { - if (wHour > 12) { - wHour -= 12; - } - CFX_WideString wsHour; - wsHour.Format(L"%02d", wHour); - wsResult += wsHour; - } else if (dwSymbol == FXBSTR_ID(0, 0, 'H', '2')) { - CFX_WideString wsHour; - wsHour.Format(L"%02d", wHour); - wsResult += wsHour; - } else if (dwSymbol == FXBSTR_ID(0, 0, 'M', '1')) { - CFX_WideString wsMinute; - wsMinute.Format(L"%d", minute); - wsResult += wsMinute; - } else if (dwSymbol == FXBSTR_ID(0, 0, 'M', '2')) { - CFX_WideString wsMinute; - wsMinute.Format(L"%02d", minute); - wsResult += wsMinute; - } else if (dwSymbol == FXBSTR_ID(0, 0, 'S', '1')) { - CFX_WideString wsSecond; - wsSecond.Format(L"%d", second); - wsResult += wsSecond; - } else if (dwSymbol == FXBSTR_ID(0, 0, 'S', '2')) { - CFX_WideString wsSecond; - wsSecond.Format(L"%02d", second); - wsResult += wsSecond; - } else if (dwSymbol == FXBSTR_ID(0, 0, 'F', '3')) { - CFX_WideString wsMilliseconds; - wsMilliseconds.Format(L"%03d", millisecond); - wsResult += wsMilliseconds; - } else if (dwSymbol == FXBSTR_ID(0, 0, 'A', '1')) { - CFX_WideString wsMeridiem; - pLocale->GetMeridiemName(wsMeridiem, !bPM); - wsResult += wsMeridiem; - } else if (dwSymbol == FXBSTR_ID(0, 0, 'Z', '1')) { - wsResult += FX_WSTRC(L"GMT"); - FX_TIMEZONE tz; - pLocale->GetTimeZone(tz); - if (!bGMT && (tz.tzHour != 0 || tz.tzMinute != 0)) { - if (tz.tzHour < 0) { - wsResult += FX_WSTRC(L"-"); - } else { - wsResult += FX_WSTRC(L"+"); - } - CFX_WideString wsTimezone; - wsTimezone.Format(L"%02d:%02d", FXSYS_abs(tz.tzHour), tz.tzMinute); - wsResult += wsTimezone; - } - } else if (dwSymbol == FXBSTR_ID(0, 0, 'z', '1')) { - FX_TIMEZONE tz; - pLocale->GetTimeZone(tz); - if (!bGMT && tz.tzHour != 0 && tz.tzMinute != 0) { - if (tz.tzHour < 0) { - wsResult += FX_WSTRC(L"-"); - } else { - wsResult += FX_WSTRC(L"+"); - } - CFX_WideString wsTimezone; - wsTimezone.Format(L"%02d:%02d", FXSYS_abs(tz.tzHour), tz.tzMinute); - wsResult += wsTimezone; - } - } - } - return bRet; -} -static FX_BOOL FX_FormatDateTime(const CFX_Unitime& dt, - const CFX_WideString& wsDatePattern, - const CFX_WideString& wsTimePattern, - FX_BOOL bDateFirst, - IFX_Locale* pLocale, - CFX_WideString& wsOutput) { - FX_BOOL bRet = TRUE; - CFX_WideString wsDateOut, wsTimeOut; - if (!wsDatePattern.IsEmpty()) { - bRet &= FX_DateFormat(wsDatePattern, pLocale, dt, wsDateOut); - } - if (!wsTimePattern.IsEmpty()) { - bRet &= FX_TimeFormat(wsTimePattern, pLocale, dt, wsTimeOut); - } - wsOutput = bDateFirst ? wsDateOut + wsTimeOut : wsTimeOut + wsDateOut; - return bRet; -} -FX_BOOL CFX_FormatString::FormatDateTime(const CFX_WideString& wsSrcDateTime, - const CFX_WideString& wsPattern, - CFX_WideString& wsOutput) { - if (wsSrcDateTime.IsEmpty() || wsPattern.IsEmpty()) { - return FALSE; - } - CFX_WideString wsDatePattern, wsTimePattern; - IFX_Locale* pLocale = NULL; - FX_DATETIMETYPE eCategory = - GetDateTimeFormat(wsPattern, pLocale, wsDatePattern, wsTimePattern); - if (pLocale == NULL || eCategory == FX_DATETIMETYPE_Unknown) { - return FALSE; - } - CFX_Unitime dt(0); - int32_t iT = wsSrcDateTime.Find(L"T"); - if (iT < 0) { - if (eCategory == FX_DATETIMETYPE_Date) { - FX_DateFromCanonical(wsSrcDateTime, dt); - } else if (eCategory == FX_DATETIMETYPE_Time) { - FX_TimeFromCanonical(wsSrcDateTime, dt, pLocale); - } - } else { - FX_DateFromCanonical(wsSrcDateTime.Left(iT), dt); - FX_TimeFromCanonical( - wsSrcDateTime.Right(wsSrcDateTime.GetLength() - iT - 1), dt, pLocale); - } - return FX_FormatDateTime(dt, wsDatePattern, wsTimePattern, - eCategory != FX_DATETIMETYPE_TimeDate, pLocale, - wsOutput); -} -FX_BOOL CFX_FormatString::FormatDateTime(const CFX_WideString& wsSrcDateTime, - const CFX_WideString& wsPattern, - CFX_WideString& wsOutput, - FX_DATETIMETYPE eDateTimeType) { - if (wsSrcDateTime.IsEmpty() || wsPattern.IsEmpty()) { - return FALSE; - } - CFX_WideString wsDatePattern, wsTimePattern; - IFX_Locale* pLocale = NULL; - FX_DATETIMETYPE eCategory = - GetDateTimeFormat(wsPattern, pLocale, wsDatePattern, wsTimePattern); - if (!pLocale) { - return FALSE; - } - if (eCategory == FX_DATETIMETYPE_Unknown) { - if (eDateTimeType == FX_DATETIMETYPE_Time) { - wsTimePattern = wsDatePattern; - wsDatePattern.Empty(); - } - eCategory = eDateTimeType; - } - if (eCategory == FX_DATETIMETYPE_Unknown) { - return FALSE; - } - CFX_Unitime dt(0); - int32_t iT = wsSrcDateTime.Find(L"T"); - if (iT < 0) { - if (eCategory == FX_DATETIMETYPE_Date && - FX_DateFromCanonical(wsSrcDateTime, dt)) { - return FX_FormatDateTime(dt, wsDatePattern, wsTimePattern, TRUE, pLocale, - wsOutput); - } else if (eCategory == FX_DATETIMETYPE_Time && - FX_TimeFromCanonical(wsSrcDateTime, dt, pLocale)) { - return FX_FormatDateTime(dt, wsDatePattern, wsTimePattern, TRUE, pLocale, - wsOutput); - } - } else { - CFX_WideStringC wsSrcDate((const FX_WCHAR*)wsSrcDateTime, iT); - CFX_WideStringC wsSrcTime((const FX_WCHAR*)wsSrcDateTime + iT + 1, - wsSrcDateTime.GetLength() - iT - 1); - if (wsSrcDate.IsEmpty() || wsSrcTime.IsEmpty()) { - return FALSE; - } - if (FX_DateFromCanonical(wsSrcDate, dt) && - FX_TimeFromCanonical(wsSrcTime, dt, pLocale)) { - return FX_FormatDateTime(dt, wsDatePattern, wsTimePattern, - eCategory != FX_DATETIMETYPE_TimeDate, pLocale, - wsOutput); - } - } - return FALSE; -} -FX_BOOL CFX_FormatString::FormatDateTime(const CFX_Unitime& dt, - const CFX_WideString& wsPattern, - CFX_WideString& wsOutput) { - if (wsPattern.IsEmpty()) { - return FALSE; - } - CFX_WideString wsDatePattern, wsTimePattern; - IFX_Locale* pLocale = NULL; - FX_DATETIMETYPE eCategory = - GetDateTimeFormat(wsPattern, pLocale, wsDatePattern, wsTimePattern); - if (!pLocale) { - return FALSE; - } - return FX_FormatDateTime(dt, wsPattern, wsTimePattern, - eCategory != FX_DATETIMETYPE_TimeDate, pLocale, - wsOutput); -} -FX_BOOL CFX_FormatString::FormatZero(const CFX_WideString& wsPattern, - CFX_WideString& wsOutput) { - if (wsPattern.IsEmpty()) { - return FALSE; - } - CFX_WideString wsTextFormat; - GetTextFormat(wsPattern, FX_WSTRC(L"zero"), wsTextFormat); - int32_t iPattern = 0; - const FX_WCHAR* pStrPattern = (const FX_WCHAR*)wsTextFormat; - int32_t iLenPattern = wsTextFormat.GetLength(); - while (iPattern < iLenPattern) { - if (pStrPattern[iPattern] == '\'') { - wsOutput += FX_GetLiteralText(pStrPattern, iPattern, iLenPattern); - iPattern++; - continue; - } else { - wsOutput += pStrPattern[iPattern++]; - continue; - } - } - return TRUE; -} -FX_BOOL CFX_FormatString::FormatNull(const CFX_WideString& wsPattern, - CFX_WideString& wsOutput) { - if (wsPattern.IsEmpty()) { - return FALSE; - } - CFX_WideString wsTextFormat; - GetTextFormat(wsPattern, FX_WSTRC(L"null"), wsTextFormat); - int32_t iPattern = 0; - const FX_WCHAR* pStrPattern = (const FX_WCHAR*)wsTextFormat; - int32_t iLenPattern = wsTextFormat.GetLength(); - while (iPattern < iLenPattern) { - if (pStrPattern[iPattern] == '\'') { - wsOutput += FX_GetLiteralText(pStrPattern, iPattern, iLenPattern); - iPattern++; - continue; - } else { - wsOutput += pStrPattern[iPattern++]; - continue; - } - } - return TRUE; -} -IFX_Locale* CFX_FormatString::GetPatternLocale( - const CFX_WideStringC& wsLocale) { - if (m_bUseLCID) { - } - return m_pLocaleMgr->GetLocaleByName(wsLocale); -} -#define FXMATH_DECIMAL_SCALELIMIT 0x1c -#define FXMATH_DECIMAL_NEGMASK (0x80000000L) -#define FXMATH_DECIMAL_FORCEBOOL(x) (!(!(x))) -#define FXMATH_DECIMAL_MAKEFLAGS(NEG, SCALE) \ - (((SCALE) << 0x10) | ((NEG) ? FXMATH_DECIMAL_NEGMASK : 0)) -#define FXMATH_DECIMAL_FLAGS2NEG(FLAGS) \ - FXMATH_DECIMAL_FORCEBOOL((FLAGS)&FXMATH_DECIMAL_NEGMASK) -#define FXMATH_DECIMAL_FLAGS2SCALE(FLAGS) \ - ((uint8_t)(((FLAGS) & ~FXMATH_DECIMAL_NEGMASK) >> 0x10)) -#define FXMATH_DECIMAL_RSHIFT32BIT(x) ((x) >> 0x10 >> 0x10) -#define FXMATH_DECIMAL_LSHIFT32BIT(x) ((x) << 0x10 << 0x10) -static inline uint8_t fxmath_decimal_helper_div10(uint64_t& phi, - uint64_t& pmid, - uint64_t& plo) { - uint8_t retVal; - pmid += FXMATH_DECIMAL_LSHIFT32BIT(phi % 0xA); - phi /= 0xA; - plo += FXMATH_DECIMAL_LSHIFT32BIT(pmid % 0xA); - pmid /= 0xA; - retVal = plo % 0xA; - plo /= 0xA; - return retVal; -} -static inline uint8_t fxmath_decimal_helper_div10_any(uint64_t nums[], - uint8_t numcount) { - uint8_t retVal = 0; - for (int i = numcount - 1; i > 0; i--) { - nums[i - 1] += FXMATH_DECIMAL_LSHIFT32BIT(nums[i] % 0xA); - nums[i] /= 0xA; - } - if (numcount) { - retVal = nums[0] % 0xA; - nums[0] /= 0xA; - } - return retVal; -} -static inline void fxmath_decimal_helper_mul10(uint64_t& phi, - uint64_t& pmid, - uint64_t& plo) { - plo *= 0xA; - pmid = pmid * 0xA + FXMATH_DECIMAL_RSHIFT32BIT(plo); - plo = (uint32_t)plo; - phi = phi * 0xA + FXMATH_DECIMAL_RSHIFT32BIT(pmid); - pmid = (uint32_t)pmid; -} -static inline void fxmath_decimal_helper_mul10_any(uint64_t nums[], - uint8_t numcount) { - nums[0] *= 0xA; - for (int i = 1; i < numcount; i++) { - nums[i] = nums[i] * 0xA + FXMATH_DECIMAL_RSHIFT32BIT(nums[i - 1]); - nums[i - 1] = (uint32_t)nums[i - 1]; - } -} -static inline void fxmath_decimal_helper_normalize(uint64_t& phi, - uint64_t& pmid, - uint64_t& plo) { - phi += FXMATH_DECIMAL_RSHIFT32BIT(pmid); - pmid = (uint32_t)pmid; - pmid += FXMATH_DECIMAL_RSHIFT32BIT(plo); - plo = (uint32_t)plo; - phi += FXMATH_DECIMAL_RSHIFT32BIT(pmid); - pmid = (uint32_t)pmid; -} -static inline void fxmath_decimal_helper_normalize_any(uint64_t nums[], - uint8_t len) { - { - for (int i = len - 2; i > 0; i--) { - nums[i + 1] += FXMATH_DECIMAL_RSHIFT32BIT(nums[i]); - nums[i] = (uint32_t)nums[i]; - } - } - { - for (int i = 0; i < len - 1; i++) { - nums[i + 1] += FXMATH_DECIMAL_RSHIFT32BIT(nums[i]); - nums[i] = (uint32_t)nums[i]; - } - } -} -static inline int8_t fxmath_decimal_helper_raw_compare(uint32_t hi1, - uint32_t mid1, - uint32_t lo1, - uint32_t hi2, - uint32_t mid2, - uint32_t lo2) { - int8_t retVal = 0; - if (!retVal) { - retVal += (hi1 > hi2 ? 1 : (hi1 < hi2 ? -1 : 0)); - } - if (!retVal) { - retVal += (mid1 > mid2 ? 1 : (mid1 < mid2 ? -1 : 0)); - } - if (!retVal) { - retVal += (lo1 > lo2 ? 1 : (lo1 < lo2 ? -1 : 0)); - } - return retVal; -} -static inline int8_t fxmath_decimal_helper_raw_compare_any(uint64_t a[], - uint8_t al, - uint64_t b[], - uint8_t bl) { - int8_t retVal = 0; - for (int i = std::max(al - 1, bl - 1); i >= 0; i--) { - uint64_t l = (i >= al ? 0 : a[i]), r = (i >= bl ? 0 : b[i]); - retVal += (l > r ? 1 : (l < r ? -1 : 0)); - if (retVal) { - return retVal; - } - } - return retVal; -} -static inline void fxmath_decimal_helper_dec_any(uint64_t a[], uint8_t al) { - for (int i = 0; i < al; i++) { - if (a[i]--) { - return; - } - } -} -static inline void fxmath_decimal_helper_inc_any(uint64_t a[], uint8_t al) { - for (int i = 0; i < al; i++) { - a[i]++; - if ((uint32_t)a[i] == a[i]) { - return; - } - a[i] = 0; - } -} -static inline void fxmath_decimal_helper_raw_mul(uint64_t a[], - uint8_t al, - uint64_t b[], - uint8_t bl, - uint64_t c[], - uint8_t cl) { - assert(al + bl <= cl); - { - for (int i = 0; i < cl; i++) { - c[i] = 0; - } - } - { - for (int i = 0; i < al; i++) { - for (int j = 0; j < bl; j++) { - uint64_t m = (uint64_t)a[i] * b[j]; - c[i + j] += (uint32_t)m; - c[i + j + 1] += FXMATH_DECIMAL_RSHIFT32BIT(m); - } - } - } - { - for (int i = 0; i < cl - 1; i++) { - c[i + 1] += FXMATH_DECIMAL_RSHIFT32BIT(c[i]); - c[i] = (uint32_t)c[i]; - } - } - { - for (int i = 0; i < cl; i++) { - c[i] = (uint32_t)c[i]; - } - } -} -static inline void fxmath_decimal_helper_raw_div(uint64_t a[], - uint8_t al, - uint64_t b[], - uint8_t bl, - uint64_t c[], - uint8_t cl) { - int i; - for (i = 0; i < cl; i++) { - c[i] = 0; - } - uint64_t left[16] = {0}, right[16] = {0}; - left[0] = 0; - for (i = 0; i < al; i++) { - right[i] = a[i]; - } - uint64_t tmp[16]; - while (fxmath_decimal_helper_raw_compare_any(left, al, right, al) <= 0) { - uint64_t cur[16]; - for (i = 0; i < al; i++) { - cur[i] = left[i] + right[i]; - } - for (i = al - 1; i >= 0; i--) { - if (i) { - cur[i - 1] += FXMATH_DECIMAL_LSHIFT32BIT(cur[i] % 2); - } - cur[i] /= 2; - } - fxmath_decimal_helper_raw_mul(cur, al, b, bl, tmp, 16); - switch (fxmath_decimal_helper_raw_compare_any(tmp, 16, a, al)) { - case -1: - for (i = 0; i < 16; i++) { - left[i] = cur[i]; - } - left[0]++; - fxmath_decimal_helper_normalize_any(left, al); - break; - case 1: - for (i = 0; i < 16; i++) { - right[i] = cur[i]; - } - fxmath_decimal_helper_dec_any(right, al); - break; - case 0: - for (i = 0; i < std::min(al, cl); i++) { - c[i] = cur[i]; - } - return; - } - } - for (i = 0; i < std::min(al, cl); i++) { - c[i] = left[i]; - } -} -static inline FX_BOOL fxmath_decimal_helper_outofrange(uint64_t a[], - uint8_t al, - uint8_t goal) { - for (int i = goal; i < al; i++) { - if (a[i]) { - return TRUE; - } - } - return FALSE; -} -static inline void fxmath_decimal_helper_shrinkintorange(uint64_t a[], - uint8_t al, - uint8_t goal, - uint8_t& scale) { - FX_BOOL bRoundUp = FALSE; - while (scale != 0 && (scale > FXMATH_DECIMAL_SCALELIMIT || - fxmath_decimal_helper_outofrange(a, al, goal))) { - bRoundUp = fxmath_decimal_helper_div10_any(a, al) >= 5; - scale--; - } - if (bRoundUp) { - fxmath_decimal_helper_normalize_any(a, goal); - fxmath_decimal_helper_inc_any(a, goal); - } -} -static inline void fxmath_decimal_helper_truncate(uint64_t& phi, - uint64_t& pmid, - uint64_t& plo, - uint8_t& scale, - uint8_t minscale = 0) { - while (scale > minscale) { - uint64_t thi = phi, tmid = pmid, tlo = plo; - if (fxmath_decimal_helper_div10(thi, tmid, tlo) != 0) { - break; - } - phi = thi, pmid = tmid, plo = tlo; - scale--; - } -} -CFX_Decimal::CFX_Decimal() { - m_uLo = m_uMid = m_uHi = m_uFlags = 0; -} -CFX_Decimal::CFX_Decimal(uint64_t val) { - m_uLo = (uint32_t)val; - m_uMid = (uint32_t)FXMATH_DECIMAL_RSHIFT32BIT(val); - m_uHi = 0; - m_uFlags = 0; -} -CFX_Decimal::CFX_Decimal(uint32_t val) { - m_uLo = (uint32_t)val; - m_uMid = m_uHi = 0; - m_uFlags = 0; -} -CFX_Decimal::CFX_Decimal(uint32_t lo, - uint32_t mid, - uint32_t hi, - FX_BOOL neg, - uint8_t scale) { - scale = (scale > FXMATH_DECIMAL_SCALELIMIT ? 0 : scale); - m_uLo = lo; - m_uMid = mid; - m_uHi = hi; - m_uFlags = FXMATH_DECIMAL_MAKEFLAGS(neg && IsNotZero(), scale); -} -CFX_Decimal::CFX_Decimal(int32_t val) { - if (val >= 0) { - *this = CFX_Decimal((uint32_t)val); - } else { - *this = CFX_Decimal((uint32_t)-val); - SetNegate(); - } -} -CFX_Decimal::CFX_Decimal(int64_t val) { - if (val >= 0) { - *this = CFX_Decimal((uint64_t)val); - } else { - *this = CFX_Decimal((uint64_t)-val); - SetNegate(); - } -} -CFX_Decimal::CFX_Decimal(FX_FLOAT val, uint8_t scale) { - FX_FLOAT newval = fabs(val); - uint64_t phi, pmid, plo; - plo = (uint64_t)newval; - pmid = (uint64_t)(newval / 1e32); - phi = (uint64_t)(newval / 1e64); - newval = FXSYS_fmod(newval, 1.0f); - for (uint8_t iter = 0; iter < scale; iter++) { - fxmath_decimal_helper_mul10(phi, pmid, plo); - newval *= 10; - plo += (uint64_t)newval; - newval = FXSYS_fmod(newval, 1.0f); - } - plo += FXSYS_round(newval); - fxmath_decimal_helper_normalize(phi, pmid, plo); - m_uHi = (uint32_t)phi; - m_uMid = (uint32_t)pmid; - m_uLo = (uint32_t)plo; - m_uFlags = FXMATH_DECIMAL_MAKEFLAGS(val < 0 && IsNotZero(), scale); -} -CFX_Decimal::CFX_Decimal(const CFX_WideStringC& strObj) { - const FX_WCHAR* str = strObj.GetPtr(); - const FX_WCHAR* strBound = str + strObj.GetLength(); - FX_BOOL pointmet = 0; - FX_BOOL negmet = 0; - uint8_t scale = 0; - m_uHi = m_uMid = m_uLo = 0; - while (str != strBound && *str == ' ') { - str++; - } - if (str != strBound && *str == '-') { - negmet = 1; - str++; - } else if (str != strBound && *str == '+') { - str++; - } - while (str != strBound && ((*str >= '0' && *str <= '9') || *str == '.') && - scale < FXMATH_DECIMAL_SCALELIMIT) { - if (*str == '.') { - if (pointmet) { - goto cont; - } - pointmet = 1; - } else { - m_uHi = m_uHi * 0xA + FXMATH_DECIMAL_RSHIFT32BIT((uint64_t)m_uMid * 0xA); - m_uMid = m_uMid * 0xA + FXMATH_DECIMAL_RSHIFT32BIT((uint64_t)m_uLo * 0xA); - m_uLo = m_uLo * 0xA + (*str - '0'); - if (pointmet) { - scale++; - } - } - cont: - str++; - } - m_uFlags = FXMATH_DECIMAL_MAKEFLAGS(negmet && IsNotZero(), scale); -} - -CFX_Decimal::CFX_Decimal(const CFX_ByteStringC& strObj) { - *this = CFX_Decimal(CFX_WideString::FromLocal(strObj)); -} - -CFX_Decimal::operator CFX_WideString() const { - CFX_WideString retString; - CFX_WideString tmpbuf; - uint64_t phi = m_uHi, pmid = m_uMid, plo = m_uLo; - while (phi || pmid || plo) { - tmpbuf += fxmath_decimal_helper_div10(phi, pmid, plo) + '0'; - } - uint8_t outputlen = (uint8_t)tmpbuf.GetLength(); - uint8_t scale = (uint8_t)FXMATH_DECIMAL_FLAGS2SCALE(m_uFlags); - while (scale >= outputlen) { - tmpbuf += '0'; - outputlen++; - } - if (FXMATH_DECIMAL_FLAGS2NEG(m_uFlags) && IsNotZero()) { - retString += '-'; - } - for (uint8_t idx = 0; idx < outputlen; idx++) { - if (idx == (outputlen - scale) && scale != 0) { - retString += '.'; - } - retString += tmpbuf[outputlen - 1 - idx]; - } - return retString; -} -CFX_Decimal::operator double() const { - double pow = (double)(1 << 16) * (1 << 16); - double base = - ((double)m_uHi) * pow * pow + ((double)m_uMid) * pow + ((double)m_uLo); - int8_t scale = FXMATH_DECIMAL_FLAGS2SCALE(m_uFlags); - FX_BOOL bNeg = FXMATH_DECIMAL_FLAGS2NEG(m_uFlags); - return (bNeg ? -1 : 1) * base * ::pow(10.0, -scale); -} -void CFX_Decimal::SetScale(uint8_t newscale) { - uint8_t oldscale = FXMATH_DECIMAL_FLAGS2SCALE(m_uFlags); - if (newscale > oldscale) { - uint64_t phi = m_uHi, pmid = m_uMid, plo = m_uLo; - for (uint8_t iter = 0; iter < newscale - oldscale; iter++) { - fxmath_decimal_helper_mul10(phi, pmid, plo); - } - m_uHi = (uint32_t)phi; - m_uMid = (uint32_t)pmid; - m_uLo = (uint32_t)plo; - m_uFlags = FXMATH_DECIMAL_MAKEFLAGS( - FXMATH_DECIMAL_FLAGS2NEG(m_uFlags) && IsNotZero(), newscale); - } else if (newscale < oldscale) { - uint64_t phi, pmid, plo; - phi = 0, pmid = 0, plo = 5; - { - for (uint8_t iter = 0; iter < oldscale - newscale - 1; iter++) { - fxmath_decimal_helper_mul10(phi, pmid, plo); - } - } - phi += m_uHi; - pmid += m_uMid; - plo += m_uLo; - fxmath_decimal_helper_normalize(phi, pmid, plo); - { - for (uint8_t iter = 0; iter < oldscale - newscale; iter++) { - fxmath_decimal_helper_div10(phi, pmid, plo); - } - } - m_uHi = (uint32_t)phi; - m_uMid = (uint32_t)pmid; - m_uLo = (uint32_t)plo; - m_uFlags = FXMATH_DECIMAL_MAKEFLAGS( - FXMATH_DECIMAL_FLAGS2NEG(m_uFlags) && IsNotZero(), newscale); - } -} -uint8_t CFX_Decimal::GetScale() { - uint8_t oldscale = FXMATH_DECIMAL_FLAGS2SCALE(m_uFlags); - return oldscale; -} -void CFX_Decimal::SetAbs() { - m_uFlags &= ~FXMATH_DECIMAL_NEGMASK; -} -void CFX_Decimal::SetNegate() { - if (IsNotZero()) { - m_uFlags ^= FXMATH_DECIMAL_NEGMASK; - } -} -void CFX_Decimal::FloorOrCeil(FX_BOOL bFloor) { - uint64_t nums[3] = {m_uLo, m_uMid, m_uHi}; - FX_BOOL bDataLoss = FALSE; - for (int i = FXMATH_DECIMAL_FLAGS2SCALE(m_uFlags); i > 0; i--) { - bDataLoss = fxmath_decimal_helper_div10_any(nums, 3) || bDataLoss; - } - if (bDataLoss && (bFloor ? FXMATH_DECIMAL_FLAGS2NEG(m_uFlags) - : !FXMATH_DECIMAL_FLAGS2NEG(m_uFlags))) { - fxmath_decimal_helper_inc_any(nums, 3); - } - m_uHi = (uint32_t)nums[2]; - m_uMid = (uint32_t)nums[1]; - m_uLo = (uint32_t)nums[0]; - m_uFlags = FXMATH_DECIMAL_MAKEFLAGS( - FXMATH_DECIMAL_FLAGS2NEG(m_uFlags) && IsNotZero(), 0); -} -void CFX_Decimal::SetFloor() { - FloorOrCeil(TRUE); -} -void CFX_Decimal::SetCeiling() { - FloorOrCeil(FALSE); -} -void CFX_Decimal::SetTruncate() { - FloorOrCeil(!FXMATH_DECIMAL_FLAGS2NEG(m_uFlags)); -} -void CFX_Decimal::Swap(CFX_Decimal& val) { - uint32_t tmp; - tmp = m_uHi; - m_uHi = val.m_uHi; - val.m_uHi = tmp; - tmp = m_uMid; - m_uMid = val.m_uMid; - val.m_uMid = tmp; - tmp = m_uLo; - m_uLo = val.m_uLo; - val.m_uLo = tmp; - tmp = m_uFlags; - m_uFlags = val.m_uFlags; - val.m_uFlags = tmp; -} -int8_t CFX_Decimal::Compare(const CFX_Decimal& val) const { - CFX_Decimal lhs = *this, rhs = val; - int8_t retVal = 0; - if (FXMATH_DECIMAL_FLAGS2SCALE(lhs.m_uFlags) != - FXMATH_DECIMAL_FLAGS2SCALE(rhs.m_uFlags)) { - uint8_t scale = std::min(FXMATH_DECIMAL_FLAGS2SCALE(lhs.m_uFlags), - FXMATH_DECIMAL_FLAGS2SCALE(rhs.m_uFlags)); - lhs.SetScale(scale); - rhs.SetScale(scale); - } - retVal = -(FXMATH_DECIMAL_FLAGS2NEG(lhs.m_uFlags) - - FXMATH_DECIMAL_FLAGS2NEG(rhs.m_uFlags)); - if (retVal) { - return retVal; - } - retVal = fxmath_decimal_helper_raw_compare(lhs.m_uHi, lhs.m_uMid, lhs.m_uLo, - rhs.m_uHi, rhs.m_uMid, rhs.m_uLo); - return (FXMATH_DECIMAL_FLAGS2NEG(lhs.m_uFlags) ? -retVal : retVal); -} -CFX_Decimal CFX_Decimal::AddOrMinus(const CFX_Decimal& val, - FX_BOOL isAdding) const { - CFX_Decimal lhs = *this, rhs = val; - if (FXMATH_DECIMAL_FLAGS2SCALE(lhs.m_uFlags) != - FXMATH_DECIMAL_FLAGS2SCALE(rhs.m_uFlags)) { - uint8_t scale = std::max(FXMATH_DECIMAL_FLAGS2SCALE(lhs.m_uFlags), - FXMATH_DECIMAL_FLAGS2SCALE(rhs.m_uFlags)); - lhs.SetScale(scale); - rhs.SetScale(scale); - } - if (!isAdding) { - rhs.SetNegate(); - } - if (FXMATH_DECIMAL_FLAGS2NEG(lhs.m_uFlags) == - FXMATH_DECIMAL_FLAGS2NEG(rhs.m_uFlags)) { - uint64_t phi = lhs.m_uHi, pmid = lhs.m_uMid, plo = lhs.m_uLo; - phi += rhs.m_uHi; - pmid += rhs.m_uMid; - plo += rhs.m_uLo; - fxmath_decimal_helper_normalize(phi, pmid, plo); - if (FXMATH_DECIMAL_RSHIFT32BIT(phi) && - FXMATH_DECIMAL_FLAGS2SCALE(lhs.m_uFlags) != 0) { - fxmath_decimal_helper_div10(phi, pmid, plo); - lhs.m_uFlags = FXMATH_DECIMAL_MAKEFLAGS( - FXMATH_DECIMAL_FLAGS2NEG(lhs.m_uFlags), - FXMATH_DECIMAL_FLAGS2SCALE(lhs.m_uFlags) - 1); - } - lhs.m_uHi = (uint32_t)phi; - lhs.m_uMid = (uint32_t)pmid; - lhs.m_uLo = (uint32_t)plo; - return lhs; - } else { - if (fxmath_decimal_helper_raw_compare(lhs.m_uHi, lhs.m_uMid, lhs.m_uLo, - rhs.m_uHi, rhs.m_uMid, - rhs.m_uLo) < 0) { - lhs.Swap(rhs); - } - lhs.m_uHi -= rhs.m_uHi; - if (lhs.m_uMid < rhs.m_uMid) { - lhs.m_uHi--; - } - lhs.m_uMid -= rhs.m_uMid; - if (lhs.m_uLo < rhs.m_uLo) { - if (!lhs.m_uMid) { - lhs.m_uHi--; - } - lhs.m_uMid--; - } - lhs.m_uLo -= rhs.m_uLo; - return lhs; - } -} -CFX_Decimal CFX_Decimal::Multiply(const CFX_Decimal& val) const { - uint64_t a[3] = {m_uLo, m_uMid, m_uHi}, - b[3] = {val.m_uLo, val.m_uMid, val.m_uHi}; - uint64_t c[6]; - fxmath_decimal_helper_raw_mul(a, 3, b, 3, c, 6); - FX_BOOL neg = FXMATH_DECIMAL_FLAGS2NEG(m_uFlags) ^ - FXMATH_DECIMAL_FLAGS2NEG(val.m_uFlags); - uint8_t scale = FXMATH_DECIMAL_FLAGS2SCALE(m_uFlags) + - FXMATH_DECIMAL_FLAGS2SCALE(val.m_uFlags); - fxmath_decimal_helper_shrinkintorange(c, 6, 3, scale); - return CFX_Decimal((uint32_t)c[0], (uint32_t)c[1], (uint32_t)c[2], neg, - scale); -} -CFX_Decimal CFX_Decimal::Divide(const CFX_Decimal& val) const { - if (!val.IsNotZero()) { - return CFX_Decimal(); - } - FX_BOOL neg = FXMATH_DECIMAL_FLAGS2NEG(m_uFlags) ^ - FXMATH_DECIMAL_FLAGS2NEG(val.m_uFlags); - uint64_t a[7] = {m_uLo, m_uMid, m_uHi}, - b[3] = {val.m_uLo, val.m_uMid, val.m_uHi}, c[7] = {0}; - uint8_t scale = 0; - if (FXMATH_DECIMAL_FLAGS2SCALE(m_uFlags) < - FXMATH_DECIMAL_FLAGS2SCALE(val.m_uFlags)) { - for (int i = FXMATH_DECIMAL_FLAGS2SCALE(val.m_uFlags) - - FXMATH_DECIMAL_FLAGS2SCALE(m_uFlags); - i > 0; i--) { - fxmath_decimal_helper_mul10_any(a, 7); - } - } else { - scale = FXMATH_DECIMAL_FLAGS2SCALE(m_uFlags) - - FXMATH_DECIMAL_FLAGS2SCALE(val.m_uFlags); - } - uint8_t minscale = scale; - if (!IsNotZero()) { - return CFX_Decimal(0, 0, 0, 0, minscale); - } - while (!a[6]) { - fxmath_decimal_helper_mul10_any(a, 7); - scale++; - } - fxmath_decimal_helper_div10_any(a, 7); - scale--; - fxmath_decimal_helper_raw_div(a, 6, b, 3, c, 7); - fxmath_decimal_helper_shrinkintorange(c, 6, 3, scale); - fxmath_decimal_helper_truncate(c[2], c[1], c[0], scale, minscale); - return CFX_Decimal((uint32_t)c[0], (uint32_t)c[1], (uint32_t)c[2], neg, - scale); -} -CFX_Decimal CFX_Decimal::Modulus(const CFX_Decimal& val) const { - CFX_Decimal lhs = *this, rhs_abs = val; - rhs_abs.SetAbs(); - if (!rhs_abs.IsNotZero()) { - return *this; - } - while (TRUE) { - CFX_Decimal lhs_abs = lhs; - lhs_abs.SetAbs(); - if (lhs_abs < rhs_abs) { - break; - } - CFX_Decimal quot = lhs / rhs_abs; - quot.SetTruncate(); - lhs = lhs - quot * rhs_abs; - } - return lhs; -} -bool CFX_Decimal::operator==(const CFX_Decimal& val) const { - return Compare(val) == 0; -} -bool CFX_Decimal::operator<=(const CFX_Decimal& val) const { - return Compare(val) <= 0; -} -bool CFX_Decimal::operator>=(const CFX_Decimal& val) const { - return Compare(val) >= 0; -} -bool CFX_Decimal::operator!=(const CFX_Decimal& val) const { - return Compare(val) != 0; -} -bool CFX_Decimal::operator<(const CFX_Decimal& val) const { - return Compare(val) < 0; -} -bool CFX_Decimal::operator>(const CFX_Decimal& val) const { - return Compare(val) > 0; -} -CFX_Decimal CFX_Decimal::operator+(const CFX_Decimal& val) const { - return AddOrMinus(val, TRUE); -} -CFX_Decimal CFX_Decimal::operator-(const CFX_Decimal& val) const { - return AddOrMinus(val, FALSE); -} -CFX_Decimal CFX_Decimal::operator*(const CFX_Decimal& val) const { - return Multiply(val); -} -CFX_Decimal CFX_Decimal::operator/(const CFX_Decimal& val) const { - return Divide(val); -} -CFX_Decimal CFX_Decimal::operator%(const CFX_Decimal& val) const { - return Modulus(val); -} diff --git a/xfa/src/fgas/localization/fgas_locale.h b/xfa/src/fgas/localization/fgas_locale.h deleted file mode 100644 index 03dd518715..0000000000 --- a/xfa/src/fgas/localization/fgas_locale.h +++ /dev/null @@ -1,206 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FGAS_LOCALIZATION_FGAS_LOCALE_H_ -#define XFA_SRC_FGAS_LOCALIZATION_FGAS_LOCALE_H_ - -#include "core/include/fxcrt/fx_xml.h" -#include "xfa/src/fgas/localization/fgas_datetime.h" - -class CFX_Unitime; - -enum FX_LOCALENUMSYMBOL { - FX_LOCALENUMSYMBOL_Decimal, - FX_LOCALENUMSYMBOL_Grouping, - FX_LOCALENUMSYMBOL_Percent, - FX_LOCALENUMSYMBOL_Minus, - FX_LOCALENUMSYMBOL_Zero, - FX_LOCALENUMSYMBOL_CurrencySymbol, - FX_LOCALENUMSYMBOL_CurrencyName, -}; -enum FX_LOCALEDATETIMESUBCATEGORY { - FX_LOCALEDATETIMESUBCATEGORY_Default, - FX_LOCALEDATETIMESUBCATEGORY_Short, - FX_LOCALEDATETIMESUBCATEGORY_Medium, - FX_LOCALEDATETIMESUBCATEGORY_Full, - FX_LOCALEDATETIMESUBCATEGORY_Long, -}; -enum FX_LOCALENUMSUBCATEGORY { - FX_LOCALENUMPATTERN_Percent, - FX_LOCALENUMPATTERN_Currency, - FX_LOCALENUMPATTERN_Decimal, - FX_LOCALENUMPATTERN_Integer, -}; -enum FX_LOCALECATEGORY { - FX_LOCALECATEGORY_Unknown, - FX_LOCALECATEGORY_Date, - FX_LOCALECATEGORY_Time, - FX_LOCALECATEGORY_DateTime, - FX_LOCALECATEGORY_Num, - FX_LOCALECATEGORY_Text, - FX_LOCALECATEGORY_Zero, - FX_LOCALECATEGORY_Null, -}; -enum FX_DATETIMETYPE { - FX_DATETIMETYPE_Unknown, - FX_DATETIMETYPE_Date, - FX_DATETIMETYPE_Time, - FX_DATETIMETYPE_DateTime, - FX_DATETIMETYPE_TimeDate, -}; - -class IFX_Locale { - public: - static IFX_Locale* Create(CXML_Element* pLocaleData); - - virtual ~IFX_Locale() {} - virtual void Release() = 0; - - virtual CFX_WideString GetName() = 0; - - virtual void GetNumbericSymbol(FX_LOCALENUMSYMBOL eType, - CFX_WideString& wsNumSymbol) const = 0; - virtual void GetDateTimeSymbols(CFX_WideString& wsDtSymbol) const = 0; - virtual void GetMonthName(int32_t nMonth, - CFX_WideString& wsMonthName, - FX_BOOL bAbbr = TRUE) const = 0; - virtual void GetDayName(int32_t nWeek, - CFX_WideString& wsDayName, - FX_BOOL bAbbr = TRUE) const = 0; - virtual void GetMeridiemName(CFX_WideString& wsMeridiemName, - FX_BOOL bAM = TRUE) const = 0; - virtual void GetTimeZone(FX_TIMEZONE& tz) const = 0; - virtual void GetEraName(CFX_WideString& wsEraName, - FX_BOOL bAD = TRUE) const = 0; - virtual void GetDatePattern(FX_LOCALEDATETIMESUBCATEGORY eType, - CFX_WideString& wsPattern) const = 0; - virtual void GetTimePattern(FX_LOCALEDATETIMESUBCATEGORY eType, - CFX_WideString& wsPattern) const = 0; - virtual void GetNumPattern(FX_LOCALENUMSUBCATEGORY eType, - CFX_WideString& wsPattern) const = 0; -}; - -class IFX_LocaleMgr { - public: - virtual ~IFX_LocaleMgr() {} - virtual void Release() = 0; - virtual FX_WORD GetDefLocaleID() = 0; - virtual IFX_Locale* GetDefLocale() = 0; - virtual IFX_Locale* GetLocale(FX_WORD lcid) = 0; - virtual IFX_Locale* GetLocaleByName(const CFX_WideStringC& wsLocaleName) = 0; -}; -IFX_LocaleMgr* FX_LocaleMgr_Create(const FX_WCHAR* pszLocalPath, - FX_WORD wDefaultLCID); -void FX_ParseNumString(const CFX_WideString& wsNum, CFX_WideString& wsResult); -FX_BOOL FX_DateFromCanonical(const CFX_WideString& wsDate, - CFX_Unitime& datetime); -FX_BOOL FX_TimeFromCanonical(const CFX_WideStringC& wsTime, - CFX_Unitime& datetime, - IFX_Locale* pLocale); -class IFX_FormatString { - public: - static IFX_FormatString* Create(IFX_LocaleMgr* pLocaleMgr, FX_BOOL bUseLCID); - - virtual ~IFX_FormatString() {} - virtual void Release() = 0; - virtual void SplitFormatString(const CFX_WideString& wsFormatString, - CFX_WideStringArray& wsPatterns) = 0; - virtual FX_LOCALECATEGORY GetCategory(const CFX_WideString& wsPattern) = 0; - virtual FX_WORD GetLCID(const CFX_WideString& wsPattern) = 0; - virtual CFX_WideString GetLocaleName(const CFX_WideString& wsPattern) = 0; - virtual FX_BOOL ParseText(const CFX_WideString& wsSrcText, - const CFX_WideString& wsPattern, - CFX_WideString& wsValue) = 0; - virtual FX_BOOL ParseNum(const CFX_WideString& wsSrcNum, - const CFX_WideString& wsPattern, - FX_FLOAT& fValue) = 0; - virtual FX_BOOL ParseNum(const CFX_WideString& wsSrcNum, - const CFX_WideString& wsPattern, - CFX_WideString& wsValue) = 0; - virtual FX_BOOL ParseDateTime(const CFX_WideString& wsSrcDateTime, - const CFX_WideString& wsPattern, - FX_DATETIMETYPE eDateTimeType, - CFX_Unitime& dtValue) = 0; - virtual FX_BOOL ParseZero(const CFX_WideString& wsSrcText, - const CFX_WideString& wsPattern) = 0; - virtual FX_BOOL ParseNull(const CFX_WideString& wsSrcText, - const CFX_WideString& wsPattern) = 0; - virtual FX_BOOL FormatText(const CFX_WideString& wsSrcText, - const CFX_WideString& wsPattern, - CFX_WideString& wsOutput) = 0; - virtual FX_BOOL FormatNum(const CFX_WideString& wsSrcNum, - const CFX_WideString& wsPattern, - CFX_WideString& wsOutput) = 0; - virtual FX_BOOL FormatNum(FX_FLOAT fNum, - const CFX_WideString& wsPattern, - CFX_WideString& wsOutput) = 0; - virtual FX_BOOL FormatDateTime(const CFX_WideString& wsSrcDateTime, - const CFX_WideString& wsPattern, - CFX_WideString& wsOutput) = 0; - virtual FX_BOOL FormatDateTime(const CFX_WideString& wsSrcDateTime, - const CFX_WideString& wsPattern, - CFX_WideString& wsOutput, - FX_DATETIMETYPE eDateTimeType) = 0; - virtual FX_BOOL FormatDateTime(const CFX_Unitime& dt, - const CFX_WideString& wsPattern, - CFX_WideString& wsOutput) = 0; - virtual FX_BOOL FormatZero(const CFX_WideString& wsPattern, - CFX_WideString& wsOutput) = 0; - virtual FX_BOOL FormatNull(const CFX_WideString& wsPattern, - CFX_WideString& wsOutput) = 0; -}; -class CFX_Decimal { - public: - CFX_Decimal(); - CFX_Decimal(uint32_t val); - CFX_Decimal(uint64_t val); - CFX_Decimal(int32_t val); - CFX_Decimal(int64_t val); - CFX_Decimal(FX_FLOAT val, uint8_t scale = 3); - CFX_Decimal(const CFX_WideStringC& str); - CFX_Decimal(const CFX_ByteStringC& str); - operator CFX_WideString() const; - operator double() const; - bool operator==(const CFX_Decimal& val) const; - bool operator<=(const CFX_Decimal& val) const; - bool operator>=(const CFX_Decimal& val) const; - bool operator!=(const CFX_Decimal& val) const; - bool operator<(const CFX_Decimal& val) const; - bool operator>(const CFX_Decimal& val) const; - CFX_Decimal operator+(const CFX_Decimal& val) const; - CFX_Decimal operator-(const CFX_Decimal& val) const; - CFX_Decimal operator*(const CFX_Decimal& val) const; - CFX_Decimal operator/(const CFX_Decimal& val) const; - CFX_Decimal operator%(const CFX_Decimal& val) const; - void SetScale(uint8_t newScale); - uint8_t GetScale(); - void SetAbs(); - void SetNegate(); - void SetFloor(); - void SetCeiling(); - void SetTruncate(); - - protected: - CFX_Decimal(uint32_t hi, - uint32_t mid, - uint32_t lo, - FX_BOOL neg, - uint8_t scale); - inline FX_BOOL IsNotZero() const { return m_uHi || m_uMid || m_uLo; } - inline int8_t Compare(const CFX_Decimal& val) const; - inline void Swap(CFX_Decimal& val); - inline void FloorOrCeil(FX_BOOL bFloor); - CFX_Decimal AddOrMinus(const CFX_Decimal& val, FX_BOOL isAdding) const; - CFX_Decimal Multiply(const CFX_Decimal& val) const; - CFX_Decimal Divide(const CFX_Decimal& val) const; - CFX_Decimal Modulus(const CFX_Decimal& val) const; - uint32_t m_uFlags; - uint32_t m_uHi; - uint32_t m_uLo; - uint32_t m_uMid; -}; - -#endif // XFA_SRC_FGAS_LOCALIZATION_FGAS_LOCALE_H_ diff --git a/xfa/src/fgas/localization/fgas_localeimp.h b/xfa/src/fgas/localization/fgas_localeimp.h deleted file mode 100644 index 5da8b51208..0000000000 --- a/xfa/src/fgas/localization/fgas_localeimp.h +++ /dev/null @@ -1,122 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FGAS_LOCALIZATION_FGAS_LOCALEIMP_H_ -#define XFA_SRC_FGAS_LOCALIZATION_FGAS_LOCALEIMP_H_ - -#include "xfa/src/fgas/localization/fgas_locale.h" - -class CFX_LCNumeric; - -class CFX_Locale : public IFX_Locale { - public: - CFX_Locale(CXML_Element* pLocaleData); - virtual void Release() { delete this; } - - virtual CFX_WideString GetName(); - virtual void GetNumbericSymbol(FX_LOCALENUMSYMBOL eType, - CFX_WideString& wsNumSymbol) const; - - virtual void GetDateTimeSymbols(CFX_WideString& wsDtSymbol) const; - virtual void GetMonthName(int32_t nMonth, - CFX_WideString& wsMonthName, - FX_BOOL bAbbr = TRUE) const; - virtual void GetDayName(int32_t nWeek, - CFX_WideString& wsDayName, - FX_BOOL bAbbr = TRUE) const; - virtual void GetMeridiemName(CFX_WideString& wsMeridiemName, - FX_BOOL bAM = TRUE) const; - virtual void GetTimeZone(FX_TIMEZONE& tz) const; - virtual void GetEraName(CFX_WideString& wsEraName, FX_BOOL bAD = TRUE) const; - - virtual void GetDatePattern(FX_LOCALEDATETIMESUBCATEGORY eType, - CFX_WideString& wsPattern) const; - virtual void GetTimePattern(FX_LOCALEDATETIMESUBCATEGORY eType, - CFX_WideString& wsPattern) const; - virtual void GetNumPattern(FX_LOCALENUMSUBCATEGORY eType, - CFX_WideString& wsPattern) const; - - protected: - virtual ~CFX_Locale(); - CXML_Element* m_pElement; -}; - -class CFX_FormatString : public IFX_FormatString { - public: - CFX_FormatString(IFX_LocaleMgr* pLocaleMgr, FX_BOOL bUseLCID); - virtual void Release() { delete this; } - - virtual void SplitFormatString(const CFX_WideString& wsFormatString, - CFX_WideStringArray& wsPatterns); - virtual FX_LOCALECATEGORY GetCategory(const CFX_WideString& wsPattern); - virtual FX_WORD GetLCID(const CFX_WideString& wsPattern); - virtual CFX_WideString GetLocaleName(const CFX_WideString& wsPattern); - virtual FX_BOOL ParseText(const CFX_WideString& wsSrcText, - const CFX_WideString& wsPattern, - CFX_WideString& wsValue); - virtual FX_BOOL ParseNum(const CFX_WideString& wsSrcNum, - const CFX_WideString& wsPattern, - FX_FLOAT& fValue); - virtual FX_BOOL ParseNum(const CFX_WideString& wsSrcNum, - const CFX_WideString& wsPattern, - CFX_WideString& wsValue); - virtual FX_BOOL ParseDateTime(const CFX_WideString& wsSrcDateTime, - const CFX_WideString& wsPattern, - FX_DATETIMETYPE eDateTimeType, - CFX_Unitime& dtValue); - virtual FX_BOOL ParseZero(const CFX_WideString& wsSrcText, - const CFX_WideString& wsPattern); - virtual FX_BOOL ParseNull(const CFX_WideString& wsSrcText, - const CFX_WideString& wsPattern); - virtual FX_BOOL FormatText(const CFX_WideString& wsSrcText, - const CFX_WideString& wsPattern, - CFX_WideString& wsOutput); - virtual FX_BOOL FormatNum(const CFX_WideString& wsSrcNum, - const CFX_WideString& wsPattern, - CFX_WideString& wsOutput); - virtual FX_BOOL FormatNum(FX_FLOAT fNum, - const CFX_WideString& wsPattern, - CFX_WideString& wsOutput); - virtual FX_BOOL FormatDateTime(const CFX_WideString& wsSrcDateTime, - const CFX_WideString& wsPattern, - CFX_WideString& wsOutput); - virtual FX_BOOL FormatDateTime(const CFX_WideString& wsSrcDateTime, - const CFX_WideString& wsPattern, - CFX_WideString& wsOutput, - FX_DATETIMETYPE eDateTimeType); - virtual FX_BOOL FormatDateTime(const CFX_Unitime& dt, - const CFX_WideString& wsPattern, - CFX_WideString& wsOutput); - virtual FX_BOOL FormatZero(const CFX_WideString& wsPattern, - CFX_WideString& wsOutput); - virtual FX_BOOL FormatNull(const CFX_WideString& wsPattern, - CFX_WideString& wsOutput); - - protected: - virtual ~CFX_FormatString(); - IFX_Locale* GetTextFormat(const CFX_WideString& wsPattern, - const CFX_WideStringC& wsCategory, - CFX_WideString& wsPurgePattern); - IFX_Locale* GetNumericFormat(const CFX_WideString& wsPattern, - int32_t& iDotIndex, - FX_DWORD& dwStyle, - CFX_WideString& wsPurgePattern); - FX_BOOL FormatStrNum(const CFX_WideStringC& wsInputNum, - const CFX_WideString& wsPattern, - CFX_WideString& wsOutput); - FX_BOOL FormatLCNumeric(CFX_LCNumeric& lcNum, - const CFX_WideString& wsPattern, - CFX_WideString& wsOutput); - FX_DATETIMETYPE GetDateTimeFormat(const CFX_WideString& wsPattern, - IFX_Locale*& pLocale, - CFX_WideString& wsDatePattern, - CFX_WideString& wsTimePattern); - IFX_Locale* GetPatternLocale(const CFX_WideStringC& wsLocale); - IFX_LocaleMgr* m_pLocaleMgr; - FX_BOOL m_bUseLCID; -}; - -#endif // XFA_SRC_FGAS_LOCALIZATION_FGAS_LOCALEIMP_H_ diff --git a/xfa/src/fgas/localization/fgas_localemgr.cpp b/xfa/src/fgas/localization/fgas_localemgr.cpp deleted file mode 100644 index 81dbfd3885..0000000000 --- a/xfa/src/fgas/localization/fgas_localemgr.cpp +++ /dev/null @@ -1,97 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fgas/localization/fgas_localemgr.h" - -#include "core/include/fxcrt/fx_xml.h" - -IFX_LocaleMgr* FX_LocaleMgr_Create(const FX_WCHAR* pszLocalPath, - FX_WORD wDefaultLCID) { - void* pPathHandle = FX_OpenFolder(pszLocalPath); - if (!pPathHandle) { - return NULL; - } - CFX_LocaleMgr* pLocaleMgr = new CFX_LocaleMgr(wDefaultLCID); - CFX_WideString wsFileName; - FX_BOOL bFolder = FALSE; - while (FX_GetNextFile(pPathHandle, wsFileName, bFolder)) { - if (!bFolder) { - if (wsFileName.GetLength() < 4) { - continue; - } - CFX_WideString wsExt = wsFileName.Right(4); - wsExt.MakeLower(); - if (wsExt != L".xml") { - continue; - } - CFX_WideString wsFullPath(pszLocalPath); - wsFullPath += L"\\" + wsFileName; - IFX_FileRead* pRead = FX_CreateFileRead(wsFullPath); - if (!pRead) { - continue; - } - CXML_Element* pXmlLocale = CXML_Element::Parse(pRead); - pRead->Release(); - CFX_ByteString bssp = pXmlLocale->GetNamespace(); - if (bssp == "http://www.foxitsoftware.com/localization") { - CFX_WideString wsLCID = pXmlLocale->GetAttrValue("", "lcid"); - wchar_t* pEnd = NULL; - FX_DWORD dwLCID = wcstol(wsLCID, &pEnd, 16); - if (pLocaleMgr->m_lcid2xml.GetValueAt((void*)(uintptr_t)dwLCID)) { - delete pXmlLocale; - } else { - pLocaleMgr->m_lcid2xml.SetAt((void*)(uintptr_t)dwLCID, pXmlLocale); - } - } else { - delete pXmlLocale; - } - } - } - FX_CloseFolder(pPathHandle); - return pLocaleMgr; -} -CFX_LocaleMgr::CFX_LocaleMgr(FX_WORD wDefLCID) : m_wDefLCID(wDefLCID) {} -CFX_LocaleMgr::~CFX_LocaleMgr() { - FX_POSITION ps = m_lcid2locale.GetStartPosition(); - while (ps) { - void* plcid; - IFX_Locale* pLocale = NULL; - m_lcid2locale.GetNextAssoc(ps, plcid, (void*&)pLocale); - pLocale->Release(); - } - m_lcid2locale.RemoveAll(); - ps = m_lcid2xml.GetStartPosition(); - while (ps) { - void* plcid; - CXML_Element* pxml = NULL; - m_lcid2xml.GetNextAssoc(ps, plcid, (void*&)pxml); - delete pxml; - } - m_lcid2xml.RemoveAll(); -} -FX_WORD CFX_LocaleMgr::GetDefLocaleID() { - return m_wDefLCID; -} -IFX_Locale* CFX_LocaleMgr::GetDefLocale() { - return GetLocale(m_wDefLCID); -} -IFX_Locale* CFX_LocaleMgr::GetLocale(FX_WORD lcid) { - IFX_Locale* pLocale = - (IFX_Locale*)m_lcid2locale.GetValueAt((void*)(uintptr_t)lcid); - if (!pLocale) { - CXML_Element* pxml = - (CXML_Element*)m_lcid2xml.GetValueAt((void*)(uintptr_t)lcid); - if (pxml) { - pLocale = IFX_Locale::Create(pxml); - m_lcid2locale.SetAt((void*)(uintptr_t)lcid, pLocale); - } - } - return pLocale; -} -IFX_Locale* CFX_LocaleMgr::GetLocaleByName( - const CFX_WideStringC& wsLocaleName) { - return NULL; -} diff --git a/xfa/src/fgas/localization/fgas_localemgr.h b/xfa/src/fgas/localization/fgas_localemgr.h deleted file mode 100644 index f2693c7f60..0000000000 --- a/xfa/src/fgas/localization/fgas_localemgr.h +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FGAS_LOCALIZATION_FGAS_LOCALEMGR_H_ -#define XFA_SRC_FGAS_LOCALIZATION_FGAS_LOCALEMGR_H_ - -#include "xfa/src/fgas/localization/fgas_locale.h" - -class CFX_LocaleMgr : public IFX_LocaleMgr { - public: - CFX_LocaleMgr(FX_WORD wDefLCID); - virtual void Release() { delete this; } - virtual FX_WORD GetDefLocaleID(); - virtual IFX_Locale* GetDefLocale(); - virtual IFX_Locale* GetLocale(FX_WORD lcid); - virtual IFX_Locale* GetLocaleByName(const CFX_WideStringC& wsLocaleName); - CFX_MapPtrToPtr m_lcid2xml; - - protected: - ~CFX_LocaleMgr(); - CFX_MapPtrToPtr m_lcid2locale; - FX_WORD m_wDefLCID; -}; - -#endif // XFA_SRC_FGAS_LOCALIZATION_FGAS_LOCALEMGR_H_ diff --git a/xfa/src/fgas/xml/fgas_sax.h b/xfa/src/fgas/xml/fgas_sax.h deleted file mode 100644 index 50762d4401..0000000000 --- a/xfa/src/fgas/xml/fgas_sax.h +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FGAS_XML_FGAS_SAX_H_ -#define XFA_SRC_FGAS_XML_FGAS_SAX_H_ - -#include "core/include/fxcrt/fx_basic.h" - -#define FX_SAXPARSEMODE_NotConvert_amp 0x0001 -#define FX_SAXPARSEMODE_NotConvert_lt 0x0002 -#define FX_SAXPARSEMODE_NotConvert_gt 0x0004 -#define FX_SAXPARSEMODE_NotConvert_apos 0x0008 -#define FX_SAXPARSEMODE_NotConvert_quot 0x0010 -#define FX_SAXPARSEMODE_NotConvert_sharp 0x0020 -#define FX_SAXPARSEMODE_NotSkipSpace 0x0100 - -enum FX_SAXNODE { - FX_SAXNODE_Unknown = 0, - FX_SAXNODE_Instruction, - FX_SAXNODE_Declaration, - FX_SAXNODE_Comment, - FX_SAXNODE_Tag, - FX_SAXNODE_Text, - FX_SAXNODE_CharData, -}; - -class IFX_SAXReaderHandler { - public: - virtual ~IFX_SAXReaderHandler() {} - virtual void* OnTagEnter(const CFX_ByteStringC& bsTagName, - FX_SAXNODE eType, - FX_DWORD dwStartPos) = 0; - virtual void OnTagAttribute(void* pTag, - const CFX_ByteStringC& bsAttri, - const CFX_ByteStringC& bsValue) = 0; - virtual void OnTagBreak(void* pTag) = 0; - virtual void OnTagData(void* pTag, - FX_SAXNODE eType, - const CFX_ByteStringC& bsData, - FX_DWORD dwStartPos) = 0; - virtual void OnTagClose(void* pTag, FX_DWORD dwEndPos) = 0; - virtual void OnTagEnd(void* pTag, - const CFX_ByteStringC& bsTagName, - FX_DWORD dwEndPos) = 0; - virtual void OnTargetData(void* pTag, - FX_SAXNODE eType, - const CFX_ByteStringC& bsData, - FX_DWORD dwStartPos) = 0; -}; - -class IFX_SAXReader { - public: - virtual ~IFX_SAXReader() {} - virtual void Release() = 0; - virtual int32_t StartParse(IFX_FileRead* pFile, - FX_DWORD dwStart = 0, - FX_DWORD dwLen = -1, - FX_DWORD dwParseMode = 0) = 0; - virtual int32_t ContinueParse(IFX_Pause* pPause = NULL) = 0; - virtual void SkipCurrentNode() = 0; - virtual void SetHandler(IFX_SAXReaderHandler* pHandler) = 0; -}; -IFX_SAXReader* FX_SAXReader_Create(); - -#endif // XFA_SRC_FGAS_XML_FGAS_SAX_H_ diff --git a/xfa/src/fgas/xml/fgas_sax_imp.cpp b/xfa/src/fgas/xml/fgas_sax_imp.cpp deleted file mode 100644 index f30a357497..0000000000 --- a/xfa/src/fgas/xml/fgas_sax_imp.cpp +++ /dev/null @@ -1,688 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fgas/xml/fgas_sax_imp.h" - -#include - -namespace { - -const FX_DWORD kSaxFileBufSize = 32768; - -} // namespace - -IFX_SAXReader* FX_SAXReader_Create() { - return new CFX_SAXReader; -} -CFX_SAXFile::CFX_SAXFile() - : m_pFile(NULL), - m_dwStart(0), - m_dwEnd(0), - m_dwCur(0), - m_pBuf(NULL), - m_dwBufSize(0), - m_dwBufIndex(0) {} -FX_BOOL CFX_SAXFile::StartFile(IFX_FileRead* pFile, - FX_DWORD dwStart, - FX_DWORD dwLen) { - FXSYS_assert(m_pFile == NULL && pFile != NULL); - FX_DWORD dwSize = pFile->GetSize(); - if (dwStart >= dwSize) { - return FALSE; - } - if (dwLen == -1 || dwStart + dwLen > dwSize) { - dwLen = dwSize - dwStart; - } - if (dwLen == 0) { - return FALSE; - } - m_dwBufSize = std::min(dwLen, kSaxFileBufSize); - m_pBuf = FX_Alloc(uint8_t, m_dwBufSize); - if (!pFile->ReadBlock(m_pBuf, dwStart, m_dwBufSize)) { - return FALSE; - } - m_dwStart = dwStart; - m_dwEnd = dwStart + dwLen; - m_dwCur = dwStart; - m_pFile = pFile; - m_dwBufIndex = 0; - return TRUE; -} -FX_BOOL CFX_SAXFile::ReadNextBlock() { - FXSYS_assert(m_pFile != NULL); - FX_DWORD dwSize = m_dwEnd - m_dwCur; - if (dwSize == 0) { - return FALSE; - } - m_dwBufSize = std::min(dwSize, kSaxFileBufSize); - if (!m_pFile->ReadBlock(m_pBuf, m_dwCur, m_dwBufSize)) { - return FALSE; - } - m_dwBufIndex = 0; - return TRUE; -} -void CFX_SAXFile::Reset() { - if (m_pBuf) { - FX_Free(m_pBuf); - m_pBuf = NULL; - } - m_pFile = NULL; -} -CFX_SAXReader::CFX_SAXReader() - : m_File(), - m_pHandler(nullptr), - m_iState(-1), - m_pRoot(nullptr), - m_pCurItem(nullptr), - m_dwItemID(0), - m_iDataSize(256), - m_iNameSize(256), - m_dwParseMode(0), - m_pCommentContext(nullptr) { - m_pszData = FX_Alloc(uint8_t, m_iDataSize); - m_pszName = FX_Alloc(uint8_t, m_iNameSize); -} -CFX_SAXReader::~CFX_SAXReader() { - Reset(); - if (m_pszData) { - FX_Free(m_pszData); - m_pszData = NULL; - } - if (m_pszName) { - FX_Free(m_pszName); - m_pszName = NULL; - } -} -void CFX_SAXReader::Reset() { - m_File.Reset(); - CFX_SAXItem* pItem = m_pRoot; - while (pItem) { - CFX_SAXItem* pNext = pItem->m_pNext; - delete pItem; - pItem = pNext; - } - m_pRoot = NULL; - m_pCurItem = NULL; - m_dwItemID = 0; - m_SkipStack.RemoveAll(); - m_SkipChar = 0; - m_iDataLength = 0; - m_iEntityStart = -1; - m_iNameLength = 0; - m_iDataPos = 0; - if (m_pCommentContext) { - delete m_pCommentContext; - m_pCommentContext = NULL; - } -} -inline void CFX_SAXReader::Push() { - CFX_SAXItem* pNew = new CFX_SAXItem; - pNew->m_dwID = ++m_dwItemID; - pNew->m_bSkip = m_pCurItem->m_bSkip; - pNew->m_pPrev = m_pCurItem; - m_pCurItem->m_pNext = pNew; - m_pCurItem = pNew; -} -inline void CFX_SAXReader::Pop() { - if (!m_pCurItem) { - return; - } - CFX_SAXItem* pPrev = m_pCurItem->m_pPrev; - pPrev->m_pNext = NULL; - delete m_pCurItem; - m_pCurItem = pPrev; -} -inline void CFX_SAXReader::AppendData(uint8_t ch) { - ReallocDataBuffer(); - m_pszData[m_iDataPos++] = ch; -} -inline void CFX_SAXReader::AppendName(uint8_t ch) { - ReallocNameBuffer(); - m_pszName[m_iDataPos++] = ch; -} -void CFX_SAXReader::ReallocDataBuffer() { - if (m_iDataPos < m_iDataSize) { - return; - } - if (m_iDataSize <= 1024 * 1024) { - m_iDataSize *= 2; - } else { - m_iDataSize += 1024 * 1024; - } - m_pszData = (uint8_t*)FX_Realloc(uint8_t, m_pszData, m_iDataSize); -} -void CFX_SAXReader::ReallocNameBuffer() { - if (m_iDataPos < m_iNameSize) { - return; - } - if (m_iNameSize <= 1024 * 1024) { - m_iNameSize *= 2; - } else { - m_iNameSize += 1024 * 1024; - } - m_pszName = (uint8_t*)FX_Realloc(uint8_t, m_pszName, m_iNameSize); -} -inline FX_BOOL CFX_SAXReader::SkipSpace(uint8_t ch) { - return (m_dwParseMode & FX_SAXPARSEMODE_NotSkipSpace) == 0 && ch < 0x21; -} -int32_t CFX_SAXReader::StartParse(IFX_FileRead* pFile, - FX_DWORD dwStart, - FX_DWORD dwLen, - FX_DWORD dwParseMode) { - m_iState = -1; - Reset(); - if (!m_File.StartFile(pFile, dwStart, dwLen)) { - return -1; - } - m_iState = 0; - m_eMode = FX_SAXMODE_Text; - m_ePrevMode = FX_SAXMODE_Text; - m_bCharData = FALSE; - m_dwDataOffset = 0; - m_pRoot = m_pCurItem = new CFX_SAXItem; - m_pCurItem->m_dwID = ++m_dwItemID; - m_dwParseMode = dwParseMode; - return 0; -} -typedef void (CFX_SAXReader::*FX_SAXReader_LPFParse)(); -static const FX_SAXReader_LPFParse g_FX_SAXReader_LPFParse[FX_SAXMODE_MAX] = { - &CFX_SAXReader::ParseText, - &CFX_SAXReader::ParseNodeStart, - &CFX_SAXReader::ParseDeclOrComment, - &CFX_SAXReader::ParseDeclNode, - &CFX_SAXReader::ParseComment, - &CFX_SAXReader::ParseCommentContent, - &CFX_SAXReader::ParseTagName, - &CFX_SAXReader::ParseTagAttributeName, - &CFX_SAXReader::ParseTagAttributeEqual, - &CFX_SAXReader::ParseTagAttributeValue, - &CFX_SAXReader::ParseMaybeClose, - &CFX_SAXReader::ParseTagClose, - &CFX_SAXReader::ParseTagEnd, - &CFX_SAXReader::ParseTargetData, -}; -int32_t CFX_SAXReader::ContinueParse(IFX_Pause* pPause) { - if (m_iState < 0 || m_iState > 99) { - return m_iState; - } - while (m_File.m_dwCur < m_File.m_dwEnd) { - FX_DWORD& index = m_File.m_dwBufIndex; - FX_DWORD size = m_File.m_dwBufSize; - const uint8_t* pBuf = m_File.m_pBuf; - while (index < size) { - m_CurByte = pBuf[index]; - (this->*g_FX_SAXReader_LPFParse[m_eMode])(); - index++; - } - m_File.m_dwCur += index; - m_iState = (m_File.m_dwCur - m_File.m_dwStart) * 100 / - (m_File.m_dwEnd - m_File.m_dwStart); - if (m_File.m_dwCur >= m_File.m_dwEnd) { - break; - } - if (!m_File.ReadNextBlock()) { - m_iState = -2; - break; - } - m_dwDataOffset = 0; - if (pPause && pPause->NeedToPauseNow()) { - break; - } - } - return m_iState; -} -void CFX_SAXReader::ParseChar(uint8_t ch) { - ReallocDataBuffer(); - m_pszData[m_iDataPos] = ch; - if (m_iEntityStart > -1 && ch == ';') { - int32_t iSaveEntityStart = m_iEntityStart; - CFX_ByteString csEntity(m_pszData + m_iEntityStart + 1, - m_iDataPos - m_iEntityStart - 1); - int32_t iLen = csEntity.GetLength(); - if (iLen > 0) { - if (csEntity[0] == '#') { - if ((m_dwParseMode & FX_SAXPARSEMODE_NotConvert_sharp) == 0) { - ch = 0; - uint8_t w; - if (iLen > 1 && csEntity[1] == 'x') { - for (int32_t i = 2; i < iLen; i++) { - w = csEntity[i]; - if (w >= '0' && w <= '9') { - ch = (ch << 4) + w - '0'; - } else if (w >= 'A' && w <= 'F') { - ch = (ch << 4) + w - 55; - } else if (w >= 'a' && w <= 'f') { - ch = (ch << 4) + w - 87; - } else { - break; - } - } - } else { - for (int32_t i = 1; i < iLen; i++) { - w = csEntity[i]; - if (w < '0' || w > '9') { - break; - } - ch = ch * 10 + w - '0'; - } - } - if (ch != 0) { - m_pszData[m_iEntityStart++] = ch; - } - } - } else { - if (csEntity.Compare("amp") == 0) { - if ((m_dwParseMode & FX_SAXPARSEMODE_NotConvert_amp) == 0) { - m_pszData[m_iEntityStart++] = '&'; - } - } else if (csEntity.Compare("lt") == 0) { - if ((m_dwParseMode & FX_SAXPARSEMODE_NotConvert_lt) == 0) { - m_pszData[m_iEntityStart++] = '<'; - } - } else if (csEntity.Compare("gt") == 0) { - if ((m_dwParseMode & FX_SAXPARSEMODE_NotConvert_gt) == 0) { - m_pszData[m_iEntityStart++] = '>'; - } - } else if (csEntity.Compare("apos") == 0) { - if ((m_dwParseMode & FX_SAXPARSEMODE_NotConvert_apos) == 0) { - m_pszData[m_iEntityStart++] = '\''; - } - } else if (csEntity.Compare("quot") == 0) { - if ((m_dwParseMode & FX_SAXPARSEMODE_NotConvert_quot) == 0) { - m_pszData[m_iEntityStart++] = '\"'; - } - } - } - } - if (iSaveEntityStart != m_iEntityStart) { - m_iDataPos = m_iEntityStart; - m_iEntityStart = -1; - } else { - m_iDataPos++; - m_iEntityStart = -1; - } - } else { - if (m_iEntityStart < 0 && ch == '&') { - m_iEntityStart = m_iDataPos; - } - m_iDataPos++; - } -} -void CFX_SAXReader::ParseText() { - if (m_CurByte == '<') { - if (m_iDataPos > 0) { - m_iDataLength = m_iDataPos; - m_iDataPos = 0; - if (m_pHandler) { - NotifyData(); - } - } - Push(); - m_dwNodePos = m_File.m_dwCur + m_File.m_dwBufIndex; - m_eMode = FX_SAXMODE_NodeStart; - return; - } - if (m_iDataPos < 1 && SkipSpace(m_CurByte)) { - return; - } - ParseChar(m_CurByte); -} -void CFX_SAXReader::ParseNodeStart() { - if (m_CurByte == '?') { - m_pCurItem->m_eNode = FX_SAXNODE_Instruction; - m_eMode = FX_SAXMODE_TagName; - return; - } - if (m_CurByte == '!') { - m_eMode = FX_SAXMODE_DeclOrComment; - return; - } - if (m_CurByte == '/') { - m_eMode = FX_SAXMODE_TagEnd; - return; - } - if (m_CurByte == '>') { - Pop(); - m_eMode = FX_SAXMODE_Text; - return; - } - if (m_CurByte > 0x20) { - m_dwDataOffset = m_File.m_dwBufIndex; - m_pCurItem->m_eNode = FX_SAXNODE_Tag; - m_eMode = FX_SAXMODE_TagName; - AppendData(m_CurByte); - } -} -void CFX_SAXReader::ParseDeclOrComment() { - if (m_CurByte == '-') { - m_eMode = FX_SAXMODE_Comment; - m_pCurItem->m_eNode = FX_SAXNODE_Comment; - if (m_pCommentContext == NULL) { - m_pCommentContext = new CFX_SAXCommentContext; - } - m_pCommentContext->m_iHeaderCount = 1; - m_pCommentContext->m_iTailCount = 0; - } else { - m_eMode = FX_SAXMODE_DeclNode; - m_dwDataOffset = m_File.m_dwBufIndex; - m_SkipChar = '>'; - m_SkipStack.Add('>'); - SkipNode(); - } -} -void CFX_SAXReader::ParseComment() { - m_pCommentContext->m_iHeaderCount = 2; - m_dwNodePos = m_File.m_dwCur + m_File.m_dwBufIndex; - m_eMode = FX_SAXMODE_CommentContent; -} -void CFX_SAXReader::ParseCommentContent() { - if (m_CurByte == '-') { - m_pCommentContext->m_iTailCount++; - } else if (m_CurByte == '>' && m_pCommentContext->m_iTailCount == 2) { - m_iDataLength = m_iDataPos; - m_iDataPos = 0; - if (m_pHandler) { - NotifyTargetData(); - } - Pop(); - m_eMode = FX_SAXMODE_Text; - } else { - while (m_pCommentContext->m_iTailCount > 0) { - AppendData('-'); - m_pCommentContext->m_iTailCount--; - } - AppendData(m_CurByte); - } -} -void CFX_SAXReader::ParseDeclNode() { - SkipNode(); -} -void CFX_SAXReader::ParseTagName() { - if (m_CurByte < 0x21 || m_CurByte == '/' || m_CurByte == '>' || - m_CurByte == '?') { - m_iDataLength = m_iDataPos; - m_iDataPos = 0; - if (m_pHandler) { - NotifyEnter(); - } - if (m_CurByte < 0x21) { - m_eMode = FX_SAXMODE_TagAttributeName; - } else if (m_CurByte == '/' || m_CurByte == '?') { - m_ePrevMode = m_eMode; - m_eMode = FX_SAXMODE_TagMaybeClose; - } else { - if (m_pHandler) { - NotifyBreak(); - } - m_eMode = FX_SAXMODE_Text; - } - } else { - AppendData(m_CurByte); - } -} -void CFX_SAXReader::ParseTagAttributeName() { - if (m_CurByte < 0x21 || m_CurByte == '=') { - if (m_iDataPos < 1 && m_CurByte < 0x21) { - return; - } - m_iNameLength = m_iDataPos; - m_iDataPos = 0; - m_SkipChar = 0; - m_eMode = m_CurByte == '=' ? FX_SAXMODE_TagAttributeValue - : FX_SAXMODE_TagAttributeEqual; - return; - } - if (m_CurByte == '/' || m_CurByte == '>' || m_CurByte == '?') { - if (m_CurByte == '/' || m_CurByte == '?') { - m_ePrevMode = m_eMode; - m_eMode = FX_SAXMODE_TagMaybeClose; - } else { - if (m_pHandler) { - NotifyBreak(); - } - m_eMode = FX_SAXMODE_Text; - } - return; - } - if (m_iDataPos < 1) { - m_dwDataOffset = m_File.m_dwBufIndex; - } - AppendName(m_CurByte); -} -void CFX_SAXReader::ParseTagAttributeEqual() { - if (m_CurByte == '=') { - m_SkipChar = 0; - m_eMode = FX_SAXMODE_TagAttributeValue; - return; - } else if (m_pCurItem->m_eNode == FX_SAXNODE_Instruction) { - m_iDataPos = m_iNameLength; - AppendName(0x20); - m_eMode = FX_SAXMODE_TargetData; - ParseTargetData(); - } -} -void CFX_SAXReader::ParseTagAttributeValue() { - if (m_SkipChar) { - if (m_SkipChar == m_CurByte) { - { - m_iDataLength = m_iDataPos; - m_iDataPos = 0; - if (m_pHandler) { - NotifyAttribute(); - } - } - m_SkipChar = 0; - m_eMode = FX_SAXMODE_TagAttributeName; - return; - } - ParseChar(m_CurByte); - return; - } - if (m_CurByte < 0x21) { - return; - } - if (m_iDataPos < 1) { - if (m_CurByte == '\'' || m_CurByte == '\"') { - m_SkipChar = m_CurByte; - } - } -} -void CFX_SAXReader::ParseMaybeClose() { - if (m_CurByte == '>') { - if (m_pCurItem->m_eNode == FX_SAXNODE_Instruction) { - m_iNameLength = m_iDataPos; - m_iDataPos = 0; - if (m_pHandler) { - NotifyTargetData(); - } - } - ParseTagClose(); - m_eMode = FX_SAXMODE_Text; - } else if (m_ePrevMode == FX_SAXMODE_TagName) { - AppendData('/'); - m_eMode = FX_SAXMODE_TagName; - m_ePrevMode = FX_SAXMODE_Text; - ParseTagName(); - } else if (m_ePrevMode == FX_SAXMODE_TagAttributeName) { - AppendName('/'); - m_eMode = FX_SAXMODE_TagAttributeName; - m_ePrevMode = FX_SAXMODE_Text; - ParseTagAttributeName(); - } else if (m_ePrevMode == FX_SAXMODE_TargetData) { - AppendName('?'); - m_eMode = FX_SAXMODE_TargetData; - m_ePrevMode = FX_SAXMODE_Text; - ParseTargetData(); - } -} -void CFX_SAXReader::ParseTagClose() { - m_dwNodePos = m_File.m_dwCur + m_File.m_dwBufIndex; - if (m_pHandler) { - NotifyClose(); - } - Pop(); -} -void CFX_SAXReader::ParseTagEnd() { - if (m_CurByte < 0x21) { - return; - } - if (m_CurByte == '>') { - Pop(); - m_dwNodePos = m_File.m_dwCur + m_File.m_dwBufIndex; - m_iDataLength = m_iDataPos; - m_iDataPos = 0; - if (m_pHandler) { - NotifyEnd(); - } - Pop(); - m_eMode = FX_SAXMODE_Text; - } else { - ParseChar(m_CurByte); - } -} -void CFX_SAXReader::ParseTargetData() { - if (m_CurByte == '?') { - m_ePrevMode = m_eMode; - m_eMode = FX_SAXMODE_TagMaybeClose; - } else { - AppendName(m_CurByte); - } -} -void CFX_SAXReader::SkipNode() { - int32_t iLen = m_SkipStack.GetSize(); - if (m_SkipChar == '\'' || m_SkipChar == '\"') { - if (m_CurByte != m_SkipChar) { - return; - } - iLen--; - FXSYS_assert(iLen > -1); - m_SkipStack.RemoveAt(iLen, 1); - m_SkipChar = iLen ? m_SkipStack[iLen - 1] : 0; - return; - } - switch (m_CurByte) { - case '<': - m_SkipChar = '>'; - m_SkipStack.Add('>'); - break; - case '[': - m_SkipChar = ']'; - m_SkipStack.Add(']'); - break; - case '(': - m_SkipChar = ')'; - m_SkipStack.Add(')'); - break; - case '\'': - m_SkipChar = '\''; - m_SkipStack.Add('\''); - break; - case '\"': - m_SkipChar = '\"'; - m_SkipStack.Add('\"'); - break; - default: - if (m_CurByte == m_SkipChar) { - iLen--; - m_SkipStack.RemoveAt(iLen, 1); - m_SkipChar = iLen ? m_SkipStack[iLen - 1] : 0; - if (iLen == 0 && m_CurByte == '>') { - m_iDataLength = m_iDataPos; - m_iDataPos = 0; - if (m_iDataLength >= 9 && - FXSYS_memcmp(m_pszData, "[CDATA[", 7 * sizeof(uint8_t)) == 0 && - FXSYS_memcmp(m_pszData + m_iDataLength - 2, "]]", - 2 * sizeof(uint8_t)) == 0) { - Pop(); - m_iDataLength -= 9; - m_dwDataOffset += 7; - FXSYS_memmove(m_pszData, m_pszData + 7, - m_iDataLength * sizeof(uint8_t)); - m_bCharData = TRUE; - if (m_pHandler) { - NotifyData(); - } - m_bCharData = FALSE; - } else { - Pop(); - } - m_eMode = FX_SAXMODE_Text; - } - } - break; - } - if (iLen > 0) { - ParseChar(m_CurByte); - } -} -void CFX_SAXReader::NotifyData() { - FXSYS_assert(m_pHandler != NULL); - if (m_pCurItem->m_eNode == FX_SAXNODE_Tag) - m_pHandler->OnTagData(m_pCurItem->m_pNode, - m_bCharData ? FX_SAXNODE_CharData : FX_SAXNODE_Text, - CFX_ByteStringC(m_pszData, m_iDataLength), - m_File.m_dwCur + m_dwDataOffset); -} -void CFX_SAXReader::NotifyEnter() { - FXSYS_assert(m_pHandler != NULL); - if (m_pCurItem->m_eNode == FX_SAXNODE_Tag || - m_pCurItem->m_eNode == FX_SAXNODE_Instruction) { - m_pCurItem->m_pNode = - m_pHandler->OnTagEnter(CFX_ByteStringC(m_pszData, m_iDataLength), - m_pCurItem->m_eNode, m_dwNodePos); - } -} -void CFX_SAXReader::NotifyAttribute() { - FXSYS_assert(m_pHandler != NULL); - if (m_pCurItem->m_eNode == FX_SAXNODE_Tag || - m_pCurItem->m_eNode == FX_SAXNODE_Instruction) { - m_pHandler->OnTagAttribute(m_pCurItem->m_pNode, - CFX_ByteStringC(m_pszName, m_iNameLength), - CFX_ByteStringC(m_pszData, m_iDataLength)); - } -} -void CFX_SAXReader::NotifyBreak() { - FXSYS_assert(m_pHandler != NULL); - if (m_pCurItem->m_eNode == FX_SAXNODE_Tag) { - m_pHandler->OnTagBreak(m_pCurItem->m_pNode); - } -} -void CFX_SAXReader::NotifyClose() { - FXSYS_assert(m_pHandler != NULL); - if (m_pCurItem->m_eNode == FX_SAXNODE_Tag || - m_pCurItem->m_eNode == FX_SAXNODE_Instruction) { - m_pHandler->OnTagClose(m_pCurItem->m_pNode, m_dwNodePos); - } -} -void CFX_SAXReader::NotifyEnd() { - FXSYS_assert(m_pHandler != NULL); - if (m_pCurItem->m_eNode == FX_SAXNODE_Tag) { - m_pHandler->OnTagEnd(m_pCurItem->m_pNode, - CFX_ByteStringC(m_pszData, m_iDataLength), - m_dwNodePos); - } -} -void CFX_SAXReader::NotifyTargetData() { - FXSYS_assert(m_pHandler != NULL); - if (m_pCurItem->m_eNode == FX_SAXNODE_Instruction) { - m_pHandler->OnTargetData(m_pCurItem->m_pNode, m_pCurItem->m_eNode, - CFX_ByteStringC(m_pszName, m_iNameLength), - m_dwNodePos); - } else if (m_pCurItem->m_eNode == FX_SAXNODE_Comment) { - m_pHandler->OnTargetData(m_pCurItem->m_pNode, m_pCurItem->m_eNode, - CFX_ByteStringC(m_pszData, m_iDataLength), - m_dwNodePos); - } -} -void CFX_SAXReader::SkipCurrentNode() { - if (!m_pCurItem) { - return; - } - m_pCurItem->m_bSkip = TRUE; -} -void CFX_SAXReader::SetHandler(IFX_SAXReaderHandler* pHandler) { - m_pHandler = pHandler; -} diff --git a/xfa/src/fgas/xml/fgas_sax_imp.h b/xfa/src/fgas/xml/fgas_sax_imp.h deleted file mode 100644 index a65f2abaa9..0000000000 --- a/xfa/src/fgas/xml/fgas_sax_imp.h +++ /dev/null @@ -1,141 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FGAS_XML_FGAS_SAX_IMP_H_ -#define XFA_SRC_FGAS_XML_FGAS_SAX_IMP_H_ - -#include "xfa/src/fgas/xml/fgas_sax.h" - -class CFX_SAXFile { - public: - CFX_SAXFile(); - FX_BOOL StartFile(IFX_FileRead* pFile, FX_DWORD dwStart, FX_DWORD dwLen); - FX_BOOL ReadNextBlock(); - void Reset(); - IFX_FileRead* m_pFile; - FX_DWORD m_dwStart; - FX_DWORD m_dwEnd; - FX_DWORD m_dwCur; - uint8_t* m_pBuf; - FX_DWORD m_dwBufSize; - FX_DWORD m_dwBufIndex; -}; - -enum FX_SAXMODE { - FX_SAXMODE_Text = 0, - FX_SAXMODE_NodeStart, - FX_SAXMODE_DeclOrComment, - FX_SAXMODE_DeclNode, - FX_SAXMODE_Comment, - FX_SAXMODE_CommentContent, - FX_SAXMODE_TagName, - FX_SAXMODE_TagAttributeName, - FX_SAXMODE_TagAttributeEqual, - FX_SAXMODE_TagAttributeValue, - FX_SAXMODE_TagMaybeClose, - FX_SAXMODE_TagClose, - FX_SAXMODE_TagEnd, - FX_SAXMODE_TargetData, - FX_SAXMODE_MAX, -}; - -class CFX_SAXItem { - public: - CFX_SAXItem() - : m_pNode(NULL), - m_eNode(FX_SAXNODE_Unknown), - m_dwID(0), - m_bSkip(FALSE), - m_pPrev(NULL), - m_pNext(NULL) {} - void* m_pNode; - FX_SAXNODE m_eNode; - FX_DWORD m_dwID; - FX_BOOL m_bSkip; - CFX_SAXItem* m_pPrev; - CFX_SAXItem* m_pNext; -}; - -class CFX_SAXCommentContext { - public: - CFX_SAXCommentContext() : m_iHeaderCount(0), m_iTailCount(0) {} - int32_t m_iHeaderCount; - int32_t m_iTailCount; -}; - -class CFX_SAXReader : public IFX_SAXReader { - public: - CFX_SAXReader(); - ~CFX_SAXReader(); - virtual void Release() { delete this; } - virtual int32_t StartParse(IFX_FileRead* pFile, - FX_DWORD dwStart = 0, - FX_DWORD dwLen = -1, - FX_DWORD dwParseMode = 0); - virtual int32_t ContinueParse(IFX_Pause* pPause = NULL); - virtual void SkipCurrentNode(); - virtual void SetHandler(IFX_SAXReaderHandler* pHandler); - void AppendData(uint8_t ch); - void AppendName(uint8_t ch); - void ParseText(); - void ParseNodeStart(); - void ParseInstruction(); - void ParseDeclOrComment(); - void ParseDeclNode(); - void ParseComment(); - void ParseCommentContent(); - void ParseTagName(); - void ParseTagAttributeName(); - void ParseTagAttributeEqual(); - void ParseTagAttributeValue(); - void ParseMaybeClose(); - void ParseTagClose(); - void ParseTagEnd(); - void ParseTargetData(); - - protected: - CFX_SAXFile m_File; - IFX_SAXReaderHandler* m_pHandler; - int32_t m_iState; - CFX_SAXItem* m_pRoot; - CFX_SAXItem* m_pCurItem; - FX_DWORD m_dwItemID; - FX_SAXMODE m_eMode; - FX_SAXMODE m_ePrevMode; - FX_BOOL m_bCharData; - uint8_t m_CurByte; - FX_DWORD m_dwDataOffset; - CFX_ByteArray m_SkipStack; - uint8_t m_SkipChar; - FX_DWORD m_dwNodePos; - uint8_t* m_pszData; - int32_t m_iDataSize; - int32_t m_iDataLength; - int32_t m_iEntityStart; - int32_t m_iDataPos; - uint8_t* m_pszName; - int32_t m_iNameSize; - int32_t m_iNameLength; - FX_DWORD m_dwParseMode; - CFX_SAXCommentContext* m_pCommentContext; - void Reset(); - void Push(); - void Pop(); - FX_BOOL SkipSpace(uint8_t ch); - void SkipNode(); - void NotifyData(); - void NotifyEnter(); - void NotifyAttribute(); - void NotifyBreak(); - void NotifyClose(); - void NotifyEnd(); - void NotifyTargetData(); - void ReallocDataBuffer(); - void ReallocNameBuffer(); - void ParseChar(uint8_t ch); -}; - -#endif // XFA_SRC_FGAS_XML_FGAS_SAX_IMP_H_ diff --git a/xfa/src/fwl/basewidget/fwl_barcodeimp.cpp b/xfa/src/fwl/basewidget/fwl_barcodeimp.cpp deleted file mode 100644 index af604f15a6..0000000000 --- a/xfa/src/fwl/basewidget/fwl_barcodeimp.cpp +++ /dev/null @@ -1,221 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fwl/basewidget/fwl_barcodeimp.h" - -#include "xfa/include/fwl/core/fwl_theme.h" -#include "xfa/src/fwl/basewidget/fwl_editimp.h" -#include "xfa/src/fwl/core/fwl_noteimp.h" -#include "xfa/src/fwl/core/fwl_targetimp.h" -#include "xfa/src/fwl/core/fwl_widgetimp.h" - -// static -IFWL_Barcode* IFWL_Barcode::Create(const CFWL_WidgetImpProperties& properties) { - IFWL_Barcode* pBarcode = new IFWL_Barcode; - CFWL_BarcodeImp* pBarcodeImpl = new CFWL_BarcodeImp(properties, nullptr); - pBarcode->SetImpl(pBarcodeImpl); - pBarcodeImpl->SetInterface(pBarcode); - return pBarcode; -} -IFWL_Barcode::IFWL_Barcode() {} -void IFWL_Barcode::SetType(BC_TYPE type) { - static_cast(GetImpl())->SetType(type); -} -FX_BOOL IFWL_Barcode::IsProtectedType() { - return static_cast(GetImpl())->IsProtectedType(); -} - -CFWL_BarcodeImp::CFWL_BarcodeImp(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) - : CFWL_EditImp(properties, pOuter), - m_pBarcodeEngine(NULL), - m_dwStatus(0), - m_type(BC_UNKNOWN) {} -CFWL_BarcodeImp::~CFWL_BarcodeImp() { - ReleaseBarcodeEngine(); -} -FWL_ERR CFWL_BarcodeImp::GetClassName(CFX_WideString& wsClass) const { - wsClass = FWL_CLASS_Barcode; - return FWL_ERR_Succeeded; -} -FX_DWORD CFWL_BarcodeImp::GetClassID() const { - return FWL_CLASSHASH_Barcode; -} -FWL_ERR CFWL_BarcodeImp::Initialize() { - if (!m_pDelegate) { - m_pDelegate = new CFWL_BarcodeImpDelegate(this); - } - if (CFWL_EditImp::Initialize() != FWL_ERR_Succeeded) - return FWL_ERR_Indefinite; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_BarcodeImp::Finalize() { - delete m_pDelegate; - m_pDelegate = nullptr; - ReleaseBarcodeEngine(); - return CFWL_EditImp::Finalize(); -} -FWL_ERR CFWL_BarcodeImp::Update() { - if (IsLocked()) { - return FWL_ERR_Indefinite; - } - FWL_ERR ret = CFWL_EditImp::Update(); - GenerateBarcodeImageCache(); - return ret; -} -FWL_ERR CFWL_BarcodeImp::DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - if (!pGraphics) - return FWL_ERR_Indefinite; - if (!m_pProperties->m_pThemeProvider) - return FWL_ERR_Indefinite; - if ((m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) == 0) { - GenerateBarcodeImageCache(); - if (!m_pBarcodeEngine || (m_dwStatus & XFA_BCS_EncodeSuccess) == 0) { - return FWL_ERR_Succeeded; - } - CFX_Matrix mt; - mt.e = m_rtClient.left; - mt.f = m_rtClient.top; - if (pMatrix) { - mt.Concat(*pMatrix); - } - int32_t errorCode = 0; - if (!m_pBarcodeEngine->RenderDevice(pGraphics->GetRenderDevice(), pMatrix, - errorCode)) { - return FWL_ERR_Indefinite; - } - return FWL_ERR_Succeeded; - } - return CFWL_EditImp::DrawWidget(pGraphics, pMatrix); -} -void CFWL_BarcodeImp::GenerateBarcodeImageCache() { - if ((m_dwStatus & XFA_BCS_NeedUpdate) == 0) - return; - m_dwStatus = 0; - CreateBarcodeEngine(); - IFWL_BarcodeDP* pData = - static_cast(m_pProperties->m_pDataProvider); - if (!pData) - return; - if (!m_pBarcodeEngine) - return; - CFX_WideString wsText; - if (GetText(wsText) != FWL_ERR_Succeeded) - return; - CFWL_ThemePart part; - part.m_pWidget = m_pInterface; - IFWL_ThemeProvider* pTheme = GetAvailableTheme(); - IFX_Font* pFont = - static_cast(pTheme->GetCapacity(&part, FWL_WGTCAPACITY_Font)); - CFX_Font* pCXFont = - pFont ? static_cast(pFont->GetDevFont()) : nullptr; - if (pCXFont) { - m_pBarcodeEngine->SetFont(pCXFont); - } - FX_FLOAT* pFontSize = static_cast( - pTheme->GetCapacity(&part, FWL_WGTCAPACITY_FontSize)); - if (pFontSize) { - m_pBarcodeEngine->SetFontSize(*pFontSize); - } - FX_ARGB* pFontColor = static_cast( - pTheme->GetCapacity(&part, FWL_WGTCAPACITY_TextColor)); - if (pFontColor) { - m_pBarcodeEngine->SetFontColor(*pFontColor); - } - m_pBarcodeEngine->SetHeight(int32_t(m_rtClient.height)); - m_pBarcodeEngine->SetWidth(int32_t(m_rtClient.width)); - FX_DWORD dwAttributeMask = pData->GetBarcodeAttributeMask(); - if (dwAttributeMask & FWL_BCDATTRIBUTE_CHARENCODING) { - m_pBarcodeEngine->SetCharEncoding(pData->GetCharEncoding()); - } - if (dwAttributeMask & FWL_BCDATTRIBUTE_MODULEHEIGHT) { - m_pBarcodeEngine->SetModuleHeight(pData->GetModuleHeight()); - } - if (dwAttributeMask & FWL_BCDATTRIBUTE_MODULEWIDTH) { - m_pBarcodeEngine->SetModuleWidth(pData->GetModuleWidth()); - } - if (dwAttributeMask & FWL_BCDATTRIBUTE_DATALENGTH) { - m_pBarcodeEngine->SetDataLength(pData->GetDataLength()); - } - if (dwAttributeMask & FWL_BCDATTRIBUTE_CALCHECKSUM) { - m_pBarcodeEngine->SetCalChecksum(pData->GetCalChecksum()); - } - if (dwAttributeMask & FWL_BCDATTRIBUTE_PRINTCHECKSUM) { - m_pBarcodeEngine->SetPrintChecksum(pData->GetPrintChecksum()); - } - if (dwAttributeMask & FWL_BCDATTRIBUTE_TEXTLOCATION) { - m_pBarcodeEngine->SetTextLocation(pData->GetTextLocation()); - } - if (dwAttributeMask & FWL_BCDATTRIBUTE_WIDENARROWRATIO) { - m_pBarcodeEngine->SetWideNarrowRatio(pData->GetWideNarrowRatio()); - } - if (dwAttributeMask & FWL_BCDATTRIBUTE_STARTCHAR) { - m_pBarcodeEngine->SetStartChar(pData->GetStartChar()); - } - if (dwAttributeMask & FWL_BCDATTRIBUTE_ENDCHAR) { - m_pBarcodeEngine->SetEndChar(pData->GetEndChar()); - } - if (dwAttributeMask & FWL_BCDATTRIBUTE_VERSION) { - m_pBarcodeEngine->SetVersion(pData->GetVersion()); - } - if (dwAttributeMask & FWL_BCDATTRIBUTE_ECLEVEL) { - m_pBarcodeEngine->SetErrorCorrectionLevel(pData->GetErrorCorrectionLevel()); - } - if (dwAttributeMask & FWL_BCDATTRIBUTE_TRUNCATED) { - m_pBarcodeEngine->SetTruncated(pData->GetTruncated()); - } - int32_t errorCode = 0; - m_dwStatus = m_pBarcodeEngine->Encode(wsText, TRUE, errorCode) - ? XFA_BCS_EncodeSuccess - : 0; -} -void CFWL_BarcodeImp::CreateBarcodeEngine() { - if ((m_pBarcodeEngine == NULL) && (m_type != BC_UNKNOWN)) { - m_pBarcodeEngine = FX_Barcode_Create(m_type); - } -} -void CFWL_BarcodeImp::ReleaseBarcodeEngine() { - if (m_pBarcodeEngine) { - m_pBarcodeEngine->Release(); - m_pBarcodeEngine = NULL; - } -} -void CFWL_BarcodeImp::SetType(BC_TYPE type) { - if (m_type == type) { - return; - } - ReleaseBarcodeEngine(); - m_type = type; - m_dwStatus = XFA_BCS_NeedUpdate; -} -FWL_ERR CFWL_BarcodeImp::SetText(const CFX_WideString& wsText) { - ReleaseBarcodeEngine(); - m_dwStatus = XFA_BCS_NeedUpdate; - return CFWL_EditImp::SetText(wsText); -} -FX_BOOL CFWL_BarcodeImp::IsProtectedType() { - if (!m_pBarcodeEngine) { - return TRUE; - } - BC_TYPE tEngineType = m_pBarcodeEngine->GetType(); - if (tEngineType == BC_QR_CODE || tEngineType == BC_PDF417 || - tEngineType == BC_DATAMATRIX) { - return TRUE; - } - return FALSE; -} -CFWL_BarcodeImpDelegate::CFWL_BarcodeImpDelegate(CFWL_BarcodeImp* pOwner) - : CFWL_EditImpDelegate(pOwner) {} -FWL_ERR CFWL_BarcodeImpDelegate::OnProcessEvent(CFWL_Event* pEvent) { - FX_DWORD dwFlag = pEvent->GetClassID(); - if (dwFlag == FWL_EVTHASH_EDT_TextChanged) { - CFWL_BarcodeImp* pOwner = static_cast(m_pOwner); - pOwner->ReleaseBarcodeEngine(); - pOwner->m_dwStatus = XFA_BCS_NeedUpdate; - } - return CFWL_EditImpDelegate::OnProcessEvent(pEvent); -} diff --git a/xfa/src/fwl/basewidget/fwl_barcodeimp.h b/xfa/src/fwl/basewidget/fwl_barcodeimp.h deleted file mode 100644 index eedcb16024..0000000000 --- a/xfa/src/fwl/basewidget/fwl_barcodeimp.h +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FWL_BASEWIDGET_FWL_BARCODEIMP_H_ -#define XFA_SRC_FWL_BASEWIDGET_FWL_BARCODEIMP_H_ - -#include "xfa/include/fwl/basewidget/fwl_barcode.h" -#include "xfa/include/fwl/basewidget/fwl_scrollbar.h" -#include "xfa/include/fwl/basewidget/fxmath_barcode.h" -#include "xfa/src/fwl/basewidget/fwl_editimp.h" - -class CFWL_WidgetImpProperties; -class CFWL_BarcodeImpDelegate; -class IFWL_Widget; - -#define XFA_BCS_NeedUpdate 0x0001 -#define XFA_BCS_EncodeSuccess 0x0002 - -class CFWL_BarcodeImp : public CFWL_EditImp { - public: - CFWL_BarcodeImp(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter); - virtual ~CFWL_BarcodeImp(); - virtual FWL_ERR GetClassName(CFX_WideString& wsClass) const; - virtual FX_DWORD GetClassID() const; - virtual FWL_ERR Initialize(); - virtual FWL_ERR Finalize(); - virtual FWL_ERR Update(); - virtual FWL_ERR DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL); - virtual FWL_ERR SetText(const CFX_WideString& wsText); - virtual void SetType(BC_TYPE type); - FX_BOOL IsProtectedType(); - - protected: - void GenerateBarcodeImageCache(); - void CreateBarcodeEngine(); - void ReleaseBarcodeEngine(); - IFX_Barcode* m_pBarcodeEngine; - FX_DWORD m_dwStatus; - BC_TYPE m_type; - friend class CFWL_BarcodeImpDelegate; -}; - -class CFWL_BarcodeImpDelegate : public CFWL_EditImpDelegate { - public: - CFWL_BarcodeImpDelegate(CFWL_BarcodeImp* pOwner); - FWL_ERR OnProcessEvent(CFWL_Event* pEvent) override; -}; - -#endif // XFA_SRC_FWL_BASEWIDGET_FWL_BARCODEIMP_H_ diff --git a/xfa/src/fwl/basewidget/fwl_caretimp.cpp b/xfa/src/fwl/basewidget/fwl_caretimp.cpp deleted file mode 100644 index 752f889dcf..0000000000 --- a/xfa/src/fwl/basewidget/fwl_caretimp.cpp +++ /dev/null @@ -1,157 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fwl/basewidget/fwl_caretimp.h" - -#include "xfa/include/fwl/basewidget/fwl_caret.h" -#include "xfa/include/fwl/core/fwl_theme.h" -#include "xfa/src/fwl/core/fwl_noteimp.h" -#include "xfa/src/fwl/core/fwl_targetimp.h" -#include "xfa/src/fwl/core/fwl_widgetimp.h" - -// static -IFWL_Caret* IFWL_Caret::Create(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) { - IFWL_Caret* pCaret = new IFWL_Caret; - CFWL_CaretImp* pCaretImpl = new CFWL_CaretImp(properties, pOuter); - pCaret->SetImpl(pCaretImpl); - pCaretImpl->SetInterface(pCaret); - return pCaret; -} -IFWL_Caret::IFWL_Caret() {} -FWL_ERR IFWL_Caret::ShowCaret(FX_BOOL bFlag) { - return static_cast(GetImpl())->ShowCaret(bFlag); -} -FWL_ERR IFWL_Caret::GetFrequency(FX_DWORD& elapse) { - return static_cast(GetImpl())->GetFrequency(elapse); -} -FWL_ERR IFWL_Caret::SetFrequency(FX_DWORD elapse) { - return static_cast(GetImpl())->SetFrequency(elapse); -} -FWL_ERR IFWL_Caret::SetColor(CFX_Color crFill) { - return static_cast(GetImpl())->SetColor(crFill); -} - -CFWL_CaretImp::CFWL_CaretImp(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) - : CFWL_WidgetImp(properties, pOuter), - m_hTimer(nullptr), - m_dwElapse(400), - m_bSetColor(FALSE) { - m_pTimer = new CFWL_CaretTimer(this); - SetStates(FWL_STATE_CAT_HightLight); -} -CFWL_CaretImp::~CFWL_CaretImp() { - if (m_pTimer) { - delete m_pTimer; - m_pTimer = NULL; - } -} -FWL_ERR CFWL_CaretImp::GetClassName(CFX_WideString& wsClass) const { - wsClass = FWL_CLASS_Caret; - return FWL_ERR_Succeeded; -} -FX_DWORD CFWL_CaretImp::GetClassID() const { - return FWL_CLASSHASH_Caret; -} -FWL_ERR CFWL_CaretImp::Initialize() { - if (CFWL_WidgetImp::Initialize() != FWL_ERR_Succeeded) - return FWL_ERR_Indefinite; - m_pDelegate = new CFWL_CaretImpDelegate(this); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_CaretImp::Finalize() { - if (m_hTimer) { - FWL_StopTimer(m_hTimer); - m_hTimer = NULL; - } - delete m_pDelegate; - m_pDelegate = nullptr; - return CFWL_WidgetImp::Finalize(); -} -FWL_ERR CFWL_CaretImp::DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - if (!pGraphics) - return FWL_ERR_Indefinite; - if (!m_pProperties->m_pThemeProvider) - m_pProperties->m_pThemeProvider = GetAvailableTheme(); - if (!m_pProperties->m_pThemeProvider) - return FWL_ERR_Indefinite; - DrawCaretBK(pGraphics, m_pProperties->m_pThemeProvider, pMatrix); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_CaretImp::ShowCaret(FX_BOOL bFlag) { - if (m_hTimer) { - FWL_StopTimer(m_hTimer); - m_hTimer = NULL; - } - if (bFlag) { - m_hTimer = FWL_StartTimer(m_pTimer, m_dwElapse); - } - return SetStates(FWL_WGTSTATE_Invisible, !bFlag); -} -FWL_ERR CFWL_CaretImp::GetFrequency(FX_DWORD& elapse) { - elapse = m_dwElapse; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_CaretImp::SetFrequency(FX_DWORD elapse) { - m_dwElapse = elapse; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_CaretImp::SetColor(CFX_Color crFill) { - m_bSetColor = TRUE; - m_crFill = crFill; - return FWL_ERR_Succeeded; -} -FX_BOOL CFWL_CaretImp::DrawCaretBK(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix) { - CFX_RectF rect; - GetWidgetRect(rect); - rect.Set(0, 0, rect.width, rect.height); - CFWL_ThemeBackground param; - param.m_pWidget = m_pInterface; - param.m_pGraphics = pGraphics; - param.m_rtPart = rect; - if (m_bSetColor) { - param.m_pData = &m_crFill; - } - if (!(m_pProperties->m_dwStates & FWL_STATE_CAT_HightLight)) { - return FWL_ERR_Succeeded; - } - param.m_iPart = FWL_PART_CAT_Background; - param.m_dwStates = FWL_PARTSTATE_CAT_HightLight; - if (pMatrix) { - param.m_matrix.Concat(*pMatrix); - } - pTheme->DrawBackground(¶m); - return FWL_ERR_Succeeded; -} - -CFWL_CaretImp::CFWL_CaretTimer::CFWL_CaretTimer(CFWL_CaretImp* pCaret) - : m_pCaret(pCaret) {} - -int32_t CFWL_CaretImp::CFWL_CaretTimer::Run(FWL_HTIMER hTimer) { - if (m_pCaret->GetStates() & FWL_STATE_CAT_HightLight) { - m_pCaret->SetStates(FWL_STATE_CAT_HightLight, FALSE); - } else { - m_pCaret->SetStates(FWL_STATE_CAT_HightLight); - } - CFX_RectF rt; - m_pCaret->GetWidgetRect(rt); - rt.Set(0, 0, rt.width + 1, rt.height); - m_pCaret->Repaint(&rt); - return 1; -} -CFWL_CaretImpDelegate::CFWL_CaretImpDelegate(CFWL_CaretImp* pOwner) - : m_pOwner(pOwner) {} -int32_t CFWL_CaretImpDelegate::OnProcessMessage(CFWL_Message* pMessage) { - return 1; -} -FWL_ERR CFWL_CaretImpDelegate::OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - return m_pOwner->DrawWidget(pGraphics, pMatrix); -} diff --git a/xfa/src/fwl/basewidget/fwl_caretimp.h b/xfa/src/fwl/basewidget/fwl_caretimp.h deleted file mode 100644 index e3dde63ab6..0000000000 --- a/xfa/src/fwl/basewidget/fwl_caretimp.h +++ /dev/null @@ -1,67 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FWL_BASEWIDGET_FWL_CARETIMP_H_ -#define XFA_SRC_FWL_BASEWIDGET_FWL_CARETIMP_H_ - -#include "xfa/include/fwl/core/fwl_timer.h" -#include "xfa/src/fwl/core/fwl_widgetimp.h" - -class CFWL_WidgetImpProperties; -class IFWL_Widget; -class CFWL_CaretImpDelegate; - -class CFWL_CaretImp : public CFWL_WidgetImp { - public: - CFWL_CaretImp(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter); - virtual ~CFWL_CaretImp(); - - virtual FWL_ERR GetClassName(CFX_WideString& wsClass) const; - virtual FX_DWORD GetClassID() const; - - virtual FWL_ERR Initialize(); - virtual FWL_ERR Finalize(); - - virtual FWL_ERR DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL); - - virtual FWL_ERR ShowCaret(FX_BOOL bFlag = TRUE); - virtual FWL_ERR GetFrequency(FX_DWORD& elapse); - virtual FWL_ERR SetFrequency(FX_DWORD elapse); - virtual FWL_ERR SetColor(CFX_Color crFill); - - protected: - FX_BOOL DrawCaretBK(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix); - class CFWL_CaretTimer : public IFWL_Timer { - public: - explicit CFWL_CaretTimer(CFWL_CaretImp* pCaret); - ~CFWL_CaretTimer() override {} - int32_t Run(FWL_HTIMER hTimer) override; - CFWL_CaretImp* const m_pCaret; - }; - CFWL_CaretTimer* m_pTimer; - FWL_HTIMER m_hTimer; - FX_DWORD m_dwElapse; - CFX_Color m_crFill; - FX_BOOL m_bSetColor; - friend class CFWL_CaretImpDelegate; - friend class CFWL_CaretTimer; -}; -class CFWL_CaretImpDelegate : public CFWL_WidgetImpDelegate { - public: - CFWL_CaretImpDelegate(CFWL_CaretImp* pOwner); - int32_t OnProcessMessage(CFWL_Message* pMessage) override; - FWL_ERR OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL) override; - - protected: - CFWL_CaretImp* m_pOwner; -}; - -#endif // XFA_SRC_FWL_BASEWIDGET_FWL_CARETIMP_H_ diff --git a/xfa/src/fwl/basewidget/fwl_checkboximp.cpp b/xfa/src/fwl/basewidget/fwl_checkboximp.cpp deleted file mode 100644 index 16cc8f7080..0000000000 --- a/xfa/src/fwl/basewidget/fwl_checkboximp.cpp +++ /dev/null @@ -1,555 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fwl/basewidget/fwl_checkboximp.h" - -#include - -#include "xfa/include/fwl/basewidget/fwl_checkbox.h" -#include "xfa/include/fwl/core/fwl_theme.h" -#include "xfa/src/fde/tto/fde_textout.h" -#include "xfa/src/fwl/core/fwl_noteimp.h" -#include "xfa/src/fwl/core/fwl_targetimp.h" -#include "xfa/src/fwl/core/fwl_widgetimp.h" -#include "xfa/src/fwl/core/fwl_widgetmgrimp.h" - -#define FWL_CKB_CaptionMargin 5 - -// static -IFWL_CheckBox* IFWL_CheckBox::Create(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) { - IFWL_CheckBox* pCheckBox = new IFWL_CheckBox; - CFWL_CheckBoxImp* pCheckBoxImpl = new CFWL_CheckBoxImp(properties, pOuter); - pCheckBox->SetImpl(pCheckBoxImpl); - pCheckBoxImpl->SetInterface(pCheckBox); - return pCheckBox; -} -IFWL_CheckBox::IFWL_CheckBox() {} -int32_t IFWL_CheckBox::GetCheckState() { - return static_cast(GetImpl())->GetCheckState(); -} -FWL_ERR IFWL_CheckBox::SetCheckState(int32_t iCheck) { - return static_cast(GetImpl())->SetCheckState(iCheck); -} - -CFWL_CheckBoxImp::CFWL_CheckBoxImp(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) - : CFWL_WidgetImp(properties, pOuter), - m_dwTTOStyles(FDE_TTOSTYLE_SingleLine), - m_iTTOAlign(FDE_TTOALIGNMENT_Center), - m_bBtnDown(FALSE) { - m_rtClient.Reset(); - m_rtBox.Reset(); - m_rtCaption.Reset(); - m_rtFocus.Reset(); -} -CFWL_CheckBoxImp::~CFWL_CheckBoxImp() {} -FWL_ERR CFWL_CheckBoxImp::GetClassName(CFX_WideString& wsClass) const { - wsClass = FWL_CLASS_CheckBox; - return FWL_ERR_Succeeded; -} -FX_DWORD CFWL_CheckBoxImp::GetClassID() const { - return FWL_CLASSHASH_CheckBox; -} -FWL_ERR CFWL_CheckBoxImp::Initialize() { - if (CFWL_WidgetImp::Initialize() != FWL_ERR_Succeeded) - return FWL_ERR_Indefinite; - m_pDelegate = new CFWL_CheckBoxImpDelegate(this); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_CheckBoxImp::Finalize() { - delete m_pDelegate; - m_pDelegate = nullptr; - return CFWL_WidgetImp::Finalize(); -} -FWL_ERR CFWL_CheckBoxImp::GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize) { - if (bAutoSize) { - rect.Set(0, 0, 0, 0); - if (!m_pProperties->m_pThemeProvider) - m_pProperties->m_pThemeProvider = GetAvailableTheme(); - if (!m_pProperties->m_pThemeProvider) - return FWL_ERR_Indefinite; - if (!m_pProperties->m_pDataProvider) - return FWL_ERR_Indefinite; - CFX_WideString wsCaption; - m_pProperties->m_pDataProvider->GetCaption(m_pInterface, wsCaption); - if (wsCaption.GetLength() > 0) { - CFX_SizeF sz = CalcTextSize( - wsCaption, m_pProperties->m_pThemeProvider, - m_pProperties->m_dwStyleExes & FWL_STYLEEXT_CKB_MultiLine); - rect.Set(0, 0, sz.x, sz.y); - } - rect.Inflate(FWL_CKB_CaptionMargin, FWL_CKB_CaptionMargin); - IFWL_CheckBoxDP* pData = - static_cast(m_pProperties->m_pDataProvider); - FX_FLOAT fCheckBox = pData->GetBoxSize(m_pInterface); - rect.width += fCheckBox; - if (rect.height < fCheckBox) { - rect.height = fCheckBox; - } - CFWL_WidgetImp::GetWidgetRect(rect, TRUE); - } else { - rect = m_pProperties->m_rtWidget; - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_CheckBoxImp::Update() { - if (IsLocked()) { - return FWL_ERR_Indefinite; - } - if (!m_pProperties->m_pThemeProvider) { - m_pProperties->m_pThemeProvider = GetAvailableTheme(); - } - UpdateTextOutStyles(); - Layout(); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_CheckBoxImp::DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - if (!pGraphics) - return FWL_ERR_Indefinite; - if (!m_pProperties->m_pThemeProvider) - return FWL_ERR_Indefinite; - IFWL_ThemeProvider* pTheme = m_pProperties->m_pThemeProvider; - if (HasBorder()) { - DrawBorder(pGraphics, FWL_PART_CKB_Border, m_pProperties->m_pThemeProvider, - pMatrix); - } - if (HasEdge()) { - DrawEdge(pGraphics, FWL_PART_CKB_Edge, pTheme, pMatrix); - } - int32_t dwStates = GetPartStates(); - { - CFWL_ThemeBackground param; - param.m_pWidget = m_pInterface; - param.m_iPart = FWL_PART_CKB_Background; - param.m_dwStates = dwStates; - param.m_pGraphics = pGraphics; - if (pMatrix) { - param.m_matrix.Concat(*pMatrix); - } - param.m_rtPart = m_rtClient; - if (m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) { - param.m_pData = &m_rtFocus; - } - pTheme->DrawBackground(¶m); - param.m_iPart = FWL_PART_CKB_CheckBox; - param.m_rtPart = m_rtBox; - pTheme->DrawBackground(¶m); - } - if (!m_pProperties->m_pDataProvider) - return FWL_ERR_Indefinite; - { - CFX_WideString wsCaption; - m_pProperties->m_pDataProvider->GetCaption(m_pInterface, wsCaption); - int32_t iLen = wsCaption.GetLength(); - if (iLen <= 0) - return FWL_ERR_Indefinite; - CFWL_ThemeText textParam; - textParam.m_pWidget = m_pInterface; - textParam.m_iPart = FWL_PART_CKB_Caption; - textParam.m_dwStates = dwStates; - textParam.m_pGraphics = pGraphics; - if (pMatrix) { - textParam.m_matrix.Concat(*pMatrix); - } - textParam.m_rtPart = m_rtCaption; - textParam.m_wsText = wsCaption; - textParam.m_dwTTOStyles = m_dwTTOStyles; - textParam.m_iTTOAlign = m_iTTOAlign; - pTheme->DrawText(&textParam); - } - return FWL_ERR_Succeeded; -} -int32_t CFWL_CheckBoxImp::GetCheckState() { - if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_CKB_3State) && - ((m_pProperties->m_dwStates & FWL_STATE_CKB_CheckMask) == - FWL_STATE_CKB_Neutral)) { - return 2; - } - if ((m_pProperties->m_dwStates & FWL_STATE_CKB_CheckMask) == - FWL_STATE_CKB_Checked) { - return 1; - } - return 0; -} -FWL_ERR CFWL_CheckBoxImp::SetCheckState(int32_t iCheck) { - m_pProperties->m_dwStates &= ~FWL_STATE_CKB_CheckMask; - switch (iCheck) { - case 0: { - break; - } - case 1: { - m_pProperties->m_dwStates |= FWL_STATE_CKB_Checked; - break; - } - case 2: { - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_CKB_3State) { - m_pProperties->m_dwStates |= FWL_STATE_CKB_Neutral; - } - break; - } - default: {} - } - Repaint(&m_rtClient); - return FWL_ERR_Succeeded; -} -void CFWL_CheckBoxImp::Layout() { - int32_t width = int32_t(m_pProperties->m_rtWidget.width + 0.5f); - int32_t height = int32_t(m_pProperties->m_rtWidget.height + 0.5f); - m_pProperties->m_rtWidget.width = (FX_FLOAT)width; - m_pProperties->m_rtWidget.height = (FX_FLOAT)height; - GetClientRect(m_rtClient); - FX_FLOAT fBoxTop = m_rtClient.top; - FX_FLOAT fBoxLeft = m_rtClient.left; - FX_FLOAT fTextLeft = 0.0, fTextRight = 0.0; - FX_FLOAT fClientRight = m_rtClient.right(); - FX_FLOAT fClientBottom = m_rtClient.bottom(); - if (!m_pProperties->m_pDataProvider) - return; - IFWL_CheckBoxDP* pData = - static_cast(m_pProperties->m_pDataProvider); - FX_FLOAT fCheckBox = pData->GetBoxSize(m_pInterface); - switch (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_CKB_VLayoutMask) { - case FWL_STYLEEXT_CKB_Top: { - fBoxTop = m_rtClient.top; - break; - } - case FWL_STYLEEXT_CKB_Bottom: { - fBoxTop = fClientBottom - fCheckBox; - break; - } - case FWL_STYLEEXT_CKB_VCenter: - default: { - fBoxTop = m_rtClient.top + (m_rtClient.height - fCheckBox) / 2; - fBoxTop = FXSYS_floor(fBoxTop); - } - } - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_CKB_LeftText) { - fBoxLeft = fClientRight - fCheckBox; - fTextLeft = m_rtClient.left; - fTextRight = fBoxLeft; - } else { - fTextLeft = fBoxLeft + fCheckBox; - fTextRight = fClientRight; - } - m_rtBox.Set(fBoxLeft, fBoxTop, fCheckBox, fCheckBox); - m_rtCaption.Set(fTextLeft, m_rtClient.top, fTextRight - fTextLeft, - m_rtClient.height); - m_rtCaption.Inflate(-FWL_CKB_CaptionMargin, -FWL_CKB_CaptionMargin); - CFX_RectF rtFocus; - rtFocus.Set(m_rtCaption.left, m_rtCaption.top, m_rtCaption.width, - m_rtCaption.height); - CFX_WideString wsCaption; - m_pProperties->m_pDataProvider->GetCaption(m_pInterface, wsCaption); - if (wsCaption.IsEmpty()) { - m_rtFocus.Set(0, 0, 0, 0); - } else { - CalcTextRect(wsCaption, m_pProperties->m_pThemeProvider, m_dwTTOStyles, - m_iTTOAlign, rtFocus); - if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_CKB_MultiLine) == 0) { - FX_FLOAT fWidth = std::max(m_rtCaption.width, rtFocus.width); - FX_FLOAT fHeight = std::min(m_rtCaption.height, rtFocus.height); - FX_FLOAT fLeft = m_rtCaption.left; - FX_FLOAT fTop = m_rtCaption.top; - if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_CKB_HLayoutMask) == - FWL_STYLEEXT_CKB_Center) { - fLeft = m_rtCaption.left + (m_rtCaption.width - fWidth) / 2; - } else if ((m_pProperties->m_dwStyleExes & - FWL_STYLEEXT_CKB_HLayoutMask) == FWL_STYLEEXT_CKB_Right) { - fLeft = m_rtCaption.right() - fWidth; - } - if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_CKB_VLayoutMask) == - FWL_STYLEEXT_CKB_VCenter) { - fTop = m_rtCaption.top + (m_rtCaption.height - fHeight) / 2; - } else if ((m_pProperties->m_dwStyleExes & - FWL_STYLEEXT_CKB_VLayoutMask) == FWL_STYLEEXT_CKB_Bottom) { - fTop = m_rtCaption.bottom() - fHeight; - } - m_rtFocus.Set(fLeft, fTop, fWidth, fHeight); - } else { - m_rtFocus.Set(rtFocus.left, rtFocus.top, rtFocus.width, rtFocus.height); - } - m_rtFocus.Inflate(1, 1); - } -} -FX_DWORD CFWL_CheckBoxImp::GetPartStates() { - int32_t dwStates = FWL_PARTSTATE_CKB_UnChecked; - if ((m_pProperties->m_dwStates & FWL_STATE_CKB_CheckMask) == - FWL_STATE_CKB_Neutral) { - dwStates = FWL_PARTSTATE_CKB_Neutral; - } else if ((m_pProperties->m_dwStates & FWL_STATE_CKB_CheckMask) == - FWL_STATE_CKB_Checked) { - dwStates = FWL_PARTSTATE_CKB_Checked; - } - if (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled) { - dwStates |= FWL_PARTSTATE_CKB_Disabled; - } else if (m_pProperties->m_dwStates & FWL_STATE_CKB_Hovered) { - dwStates |= FWL_PARTSTATE_CKB_Hovered; - } else if (m_pProperties->m_dwStates & FWL_STATE_CKB_Pressed) { - dwStates |= FWL_PARTSTATE_CKB_Pressed; - } else { - dwStates |= FWL_PARTSTATE_CKB_Normal; - } - if (m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) { - dwStates |= FWL_PARTSTATE_CKB_Focused; - } - return dwStates; -} -void CFWL_CheckBoxImp::UpdateTextOutStyles() { - m_iTTOAlign = FDE_TTOALIGNMENT_Center; - switch (m_pProperties->m_dwStyleExes & - (FWL_STYLEEXT_CKB_HLayoutMask | FWL_STYLEEXT_CKB_VLayoutMask)) { - case FWL_STYLEEXT_CKB_Left | FWL_STYLEEXT_CKB_Top: { - m_iTTOAlign = FDE_TTOALIGNMENT_TopLeft; - break; - } - case FWL_STYLEEXT_CKB_Center | FWL_STYLEEXT_CKB_Top: { - m_iTTOAlign = FDE_TTOALIGNMENT_TopCenter; - break; - } - case FWL_STYLEEXT_CKB_Right | FWL_STYLEEXT_CKB_Top: { - m_iTTOAlign = FDE_TTOALIGNMENT_TopRight; - break; - } - case FWL_STYLEEXT_CKB_Left | FWL_STYLEEXT_CKB_VCenter: { - m_iTTOAlign = FDE_TTOALIGNMENT_CenterLeft; - break; - } - case FWL_STYLEEXT_CKB_Center | FWL_STYLEEXT_CKB_VCenter: { - m_iTTOAlign = FDE_TTOALIGNMENT_Center; - break; - } - case FWL_STYLEEXT_CKB_Right | FWL_STYLEEXT_CKB_VCenter: { - m_iTTOAlign = FDE_TTOALIGNMENT_CenterRight; - break; - } - case FWL_STYLEEXT_CKB_Left | FWL_STYLEEXT_CKB_Bottom: { - m_iTTOAlign = FDE_TTOALIGNMENT_BottomLeft; - break; - } - case FWL_STYLEEXT_CKB_Center | FWL_STYLEEXT_CKB_Bottom: { - m_iTTOAlign = FDE_TTOALIGNMENT_BottomCenter; - break; - } - case FWL_STYLEEXT_CKB_Right | FWL_STYLEEXT_CKB_Bottom: { - m_iTTOAlign = FDE_TTOALIGNMENT_BottomRight; - break; - } - default: {} - } - m_dwTTOStyles = 0; - if (m_pProperties->m_dwStyleExes & FWL_WGTSTYLE_RTLReading) { - m_dwTTOStyles |= FDE_TTOSTYLE_RTL; - } - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_CKB_MultiLine) { - m_dwTTOStyles |= FDE_TTOSTYLE_LineWrap; - } else { - m_dwTTOStyles |= FDE_TTOSTYLE_SingleLine; - } -} -void CFWL_CheckBoxImp::NextStates() { - FX_DWORD dwFirststate = m_pProperties->m_dwStates; - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_CKB_RadioButton) { - if ((m_pProperties->m_dwStates & FWL_STATE_CKB_CheckMask) == - FWL_STATE_CKB_Unchecked) { - CFWL_WidgetMgr* pWidgetMgr = - static_cast(FWL_GetWidgetMgr()); - if (!pWidgetMgr->IsFormDisabled()) { - CFX_PtrArray radioarr; - pWidgetMgr->GetSameGroupRadioButton(m_pInterface, radioarr); - IFWL_CheckBox* pCheckBox = NULL; - int32_t iCount = radioarr.GetSize(); - for (int32_t i = 0; i < iCount; i++) { - pCheckBox = static_cast(radioarr[i]); - if (pCheckBox != m_pInterface && - pCheckBox->GetStates() & FWL_STATE_CKB_Checked) { - pCheckBox->SetCheckState(0); - CFX_RectF rt; - pCheckBox->GetWidgetRect(rt); - rt.left = rt.top = 0; - m_pWidgetMgr->RepaintWidget(pCheckBox, &rt); - break; - } - } - } - m_pProperties->m_dwStates |= FWL_STATE_CKB_Checked; - } - } else { - if ((m_pProperties->m_dwStates & FWL_STATE_CKB_CheckMask) == - FWL_STATE_CKB_Neutral) { - m_pProperties->m_dwStates &= ~FWL_STATE_CKB_CheckMask; - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_CKB_3State) { - m_pProperties->m_dwStates |= FWL_STATE_CKB_Checked; - } - } else if ((m_pProperties->m_dwStates & FWL_STATE_CKB_CheckMask) == - FWL_STATE_CKB_Checked) { - m_pProperties->m_dwStates &= ~FWL_STATE_CKB_CheckMask; - } else { - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_CKB_3State) { - m_pProperties->m_dwStates |= FWL_STATE_CKB_Neutral; - } else { - m_pProperties->m_dwStates |= FWL_STATE_CKB_Checked; - } - } - } - Repaint(&m_rtClient); - FX_DWORD dwLaststate = m_pProperties->m_dwStates; - if (dwFirststate != dwLaststate) { - CFWL_EvtCkbCheckStateChanged wmCheckBoxState; - wmCheckBoxState.m_pSrcTarget = m_pInterface; - DispatchEvent(&wmCheckBoxState); - } -} -CFWL_CheckBoxImpDelegate::CFWL_CheckBoxImpDelegate(CFWL_CheckBoxImp* pOwner) - : m_pOwner(pOwner) {} -int32_t CFWL_CheckBoxImpDelegate::OnProcessMessage(CFWL_Message* pMessage) { - if (!pMessage) - return 0; - FX_DWORD dwMsgCode = pMessage->GetClassID(); - int32_t iRet = 1; - switch (dwMsgCode) { - case FWL_MSGHASH_Activate: { - OnActivate(pMessage); - break; - } - case FWL_MSGHASH_SetFocus: - case FWL_MSGHASH_KillFocus: { - OnFocusChanged(pMessage, dwMsgCode == FWL_MSGHASH_SetFocus); - break; - } - case FWL_MSGHASH_Mouse: { - CFWL_MsgMouse* pMsg = static_cast(pMessage); - FX_DWORD dwCmd = pMsg->m_dwCmd; - switch (dwCmd) { - case FWL_MSGMOUSECMD_LButtonDown: { - OnLButtonDown(pMsg); - break; - } - case FWL_MSGMOUSECMD_LButtonUp: { - OnLButtonUp(pMsg); - break; - } - case FWL_MSGMOUSECMD_MouseMove: { - OnMouseMove(pMsg); - break; - } - case FWL_MSGMOUSECMD_MouseLeave: { - OnMouseLeave(pMsg); - break; - } - default: {} - } - break; - } - case FWL_MSGHASH_Key: { - CFWL_MsgKey* pKey = static_cast(pMessage); - if (pKey->m_dwCmd == FWL_MSGKEYCMD_KeyDown) { - OnKeyDown(pKey); - } - break; - } - default: { iRet = 0; } - } - CFWL_WidgetImpDelegate::OnProcessMessage(pMessage); - return iRet; -} -FWL_ERR CFWL_CheckBoxImpDelegate::OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - return m_pOwner->DrawWidget(pGraphics, pMatrix); -} -void CFWL_CheckBoxImpDelegate::OnActivate(CFWL_Message* pMsg) { - m_pOwner->m_pProperties->m_dwStates &= ~FWL_WGTSTATE_Deactivated; - m_pOwner->Repaint(&(m_pOwner->m_rtClient)); -} -void CFWL_CheckBoxImpDelegate::OnFocusChanged(CFWL_Message* pMsg, - FX_BOOL bSet) { - if (bSet) { - m_pOwner->m_pProperties->m_dwStates |= FWL_WGTSTATE_Focused; - } else { - m_pOwner->m_pProperties->m_dwStates &= ~FWL_WGTSTATE_Focused; - } - m_pOwner->Repaint(&(m_pOwner->m_rtClient)); -} -void CFWL_CheckBoxImpDelegate::OnLButtonDown(CFWL_MsgMouse* pMsg) { - if (m_pOwner->m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled) { - return; - } - if ((m_pOwner->m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) == 0) { - m_pOwner->SetFocus(TRUE); - } - m_pOwner->m_bBtnDown = TRUE; - m_pOwner->m_pProperties->m_dwStates &= ~FWL_STATE_CKB_Hovered; - m_pOwner->m_pProperties->m_dwStates |= FWL_STATE_CKB_Pressed; - m_pOwner->Repaint(&(m_pOwner->m_rtClient)); -} -void CFWL_CheckBoxImpDelegate::OnLButtonUp(CFWL_MsgMouse* pMsg) { - if (!m_pOwner->m_bBtnDown) { - return; - } - m_pOwner->m_bBtnDown = FALSE; - if (!m_pOwner->m_rtClient.Contains(pMsg->m_fx, pMsg->m_fy)) { - return; - } - m_pOwner->m_pProperties->m_dwStates |= FWL_STATE_CKB_Hovered; - m_pOwner->m_pProperties->m_dwStates &= ~FWL_STATE_CKB_Pressed; - m_pOwner->NextStates(); -} -void CFWL_CheckBoxImpDelegate::OnMouseMove(CFWL_MsgMouse* pMsg) { - if (m_pOwner->m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled) { - return; - } - FX_BOOL bRepaint = FALSE; - if (m_pOwner->m_bBtnDown) { - if (m_pOwner->m_rtClient.Contains(pMsg->m_fx, pMsg->m_fy)) { - if ((m_pOwner->m_pProperties->m_dwStates & FWL_STATE_CKB_Pressed) == 0) { - bRepaint = TRUE; - m_pOwner->m_pProperties->m_dwStates |= FWL_STATE_CKB_Pressed; - } - if ((m_pOwner->m_pProperties->m_dwStates & FWL_STATE_CKB_Hovered)) { - bRepaint = TRUE; - m_pOwner->m_pProperties->m_dwStates &= ~FWL_STATE_CKB_Hovered; - } - } else { - if (m_pOwner->m_pProperties->m_dwStates & FWL_STATE_CKB_Pressed) { - bRepaint = TRUE; - m_pOwner->m_pProperties->m_dwStates &= ~FWL_STATE_CKB_Pressed; - } - if ((m_pOwner->m_pProperties->m_dwStates & FWL_STATE_CKB_Hovered) == 0) { - bRepaint = TRUE; - m_pOwner->m_pProperties->m_dwStates |= FWL_STATE_CKB_Hovered; - } - } - } else { - if (m_pOwner->m_rtClient.Contains(pMsg->m_fx, pMsg->m_fy)) { - if ((m_pOwner->m_pProperties->m_dwStates & FWL_STATE_CKB_Hovered) == 0) { - bRepaint = TRUE; - m_pOwner->m_pProperties->m_dwStates |= FWL_STATE_CKB_Hovered; - } - } - } - if (bRepaint) { - m_pOwner->Repaint(&(m_pOwner->m_rtBox)); - } -} -void CFWL_CheckBoxImpDelegate::OnMouseLeave(CFWL_MsgMouse* pMsg) { - if (m_pOwner->m_bBtnDown) { - m_pOwner->m_pProperties->m_dwStates |= FWL_STATE_CKB_Hovered; - } else { - m_pOwner->m_pProperties->m_dwStates &= ~FWL_STATE_CKB_Hovered; - } - m_pOwner->Repaint(&(m_pOwner->m_rtBox)); -} -void CFWL_CheckBoxImpDelegate::OnKeyDown(CFWL_MsgKey* pMsg) { - if (pMsg->m_dwKeyCode == FWL_VKEY_Tab) { - m_pOwner->DispatchKeyEvent(pMsg); - return; - } - if (pMsg->m_dwKeyCode == FWL_VKEY_Return || - pMsg->m_dwKeyCode == FWL_VKEY_Space) { - m_pOwner->NextStates(); - } -} diff --git a/xfa/src/fwl/basewidget/fwl_checkboximp.h b/xfa/src/fwl/basewidget/fwl_checkboximp.h deleted file mode 100644 index 98702aaa59..0000000000 --- a/xfa/src/fwl/basewidget/fwl_checkboximp.h +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FWL_BASEWIDGET_FWL_CHECKBOXIMP_H_ -#define XFA_SRC_FWL_BASEWIDGET_FWL_CHECKBOXIMP_H_ - -#include "xfa/src/fwl/core/fwl_widgetimp.h" - -class CFWL_WidgetImpProperties; -class IFWL_Widget; -class CFWL_CheckBoxImpDelegate; - -class CFWL_CheckBoxImp : public CFWL_WidgetImp { - public: - CFWL_CheckBoxImp(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter); - ~CFWL_CheckBoxImp(); - virtual FWL_ERR GetClassName(CFX_WideString& wsClass) const; - virtual FX_DWORD GetClassID() const; - virtual FWL_ERR Initialize(); - virtual FWL_ERR Finalize(); - virtual FWL_ERR GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize = FALSE); - virtual FWL_ERR Update(); - virtual FWL_ERR DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL); - virtual int32_t GetCheckState(); - virtual FWL_ERR SetCheckState(int32_t iCheck); - - protected: - void Layout(); - FX_DWORD GetPartStates(); - void UpdateTextOutStyles(); - void NextStates(); - CFX_RectF m_rtClient; - CFX_RectF m_rtBox; - CFX_RectF m_rtCaption; - CFX_RectF m_rtFocus; - FX_DWORD m_dwTTOStyles; - int32_t m_iTTOAlign; - FX_BOOL m_bBtnDown; - friend class CFWL_CheckBoxImpDelegate; -}; -class CFWL_CheckBoxImpDelegate : public CFWL_WidgetImpDelegate { - public: - CFWL_CheckBoxImpDelegate(CFWL_CheckBoxImp* pOwner); - int32_t OnProcessMessage(CFWL_Message* pMessage) override; - FWL_ERR OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL) override; - - protected: - void OnActivate(CFWL_Message* pMsg); - void OnFocusChanged(CFWL_Message* pMsg, FX_BOOL bSet = TRUE); - void OnLButtonDown(CFWL_MsgMouse* pMsg); - void OnLButtonUp(CFWL_MsgMouse* pMsg); - void OnMouseMove(CFWL_MsgMouse* pMsg); - void OnMouseLeave(CFWL_MsgMouse* pMsg); - void OnKeyDown(CFWL_MsgKey* pMsg); - CFWL_CheckBoxImp* m_pOwner; -}; - -#endif // XFA_SRC_FWL_BASEWIDGET_FWL_CHECKBOXIMP_H_ diff --git a/xfa/src/fwl/basewidget/fwl_comboboximp.cpp b/xfa/src/fwl/basewidget/fwl_comboboximp.cpp deleted file mode 100644 index 5eef96eebf..0000000000 --- a/xfa/src/fwl/basewidget/fwl_comboboximp.cpp +++ /dev/null @@ -1,1819 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fwl/basewidget/fwl_comboboximp.h" - -#include "xfa/include/fwl/core/fwl_theme.h" -#include "xfa/src/fde/tto/fde_textout.h" -#include "xfa/src/fwl/basewidget/fwl_editimp.h" -#include "xfa/src/fwl/basewidget/fwl_formproxyimp.h" -#include "xfa/src/fwl/basewidget/fwl_listboximp.h" -#include "xfa/src/fwl/basewidget/fwl_scrollbarimp.h" -#include "xfa/src/fwl/core/fwl_appimp.h" -#include "xfa/src/fwl/core/fwl_formimp.h" -#include "xfa/src/fwl/core/fwl_noteimp.h" -#include "xfa/src/fwl/core/fwl_panelimp.h" -#include "xfa/src/fwl/core/fwl_targetimp.h" -#include "xfa/src/fwl/core/fwl_threadimp.h" -#include "xfa/src/fwl/core/fwl_widgetimp.h" -#include "xfa/src/fwl/core/fwl_widgetmgrimp.h" - -// static -IFWL_ComboBox* IFWL_ComboBox::Create( - const CFWL_WidgetImpProperties& properties) { - IFWL_ComboBox* pComboBox = new IFWL_ComboBox; - CFWL_ComboBoxImp* pComboBoxImpl = new CFWL_ComboBoxImp(properties, nullptr); - pComboBox->SetImpl(pComboBoxImpl); - pComboBoxImpl->SetInterface(pComboBox); - return pComboBox; -} -IFWL_ComboBox::IFWL_ComboBox() {} -int32_t IFWL_ComboBox::GetCurSel() { - return static_cast(GetImpl())->GetCurSel(); -} -FWL_ERR IFWL_ComboBox::SetCurSel(int32_t iSel) { - return static_cast(GetImpl())->SetCurSel(iSel); -} -FWL_ERR IFWL_ComboBox::SetEditText(const CFX_WideString& wsText) { - return static_cast(GetImpl())->SetEditText(wsText); -} -int32_t IFWL_ComboBox::GetEditTextLength() const { - return static_cast(GetImpl())->GetEditTextLength(); -} -FWL_ERR IFWL_ComboBox::GetEditText(CFX_WideString& wsText, - int32_t nStart, - int32_t nCount) const { - return static_cast(GetImpl()) - ->GetEditText(wsText, nStart, nCount); -} -FWL_ERR IFWL_ComboBox::SetEditSelRange(int32_t nStart, int32_t nCount) { - return static_cast(GetImpl()) - ->SetEditSelRange(nStart, nCount); -} -int32_t IFWL_ComboBox::GetEditSelRange(int32_t nIndex, int32_t& nStart) { - return static_cast(GetImpl()) - ->GetEditSelRange(nIndex, nStart); -} -int32_t IFWL_ComboBox::GetEditLimit() { - return static_cast(GetImpl())->GetEditLimit(); -} -FWL_ERR IFWL_ComboBox::SetEditLimit(int32_t nLimit) { - return static_cast(GetImpl())->SetEditLimit(nLimit); -} -FWL_ERR IFWL_ComboBox::EditDoClipboard(int32_t iCmd) { - return static_cast(GetImpl())->EditDoClipboard(iCmd); -} -FX_BOOL IFWL_ComboBox::EditRedo(const CFX_ByteStringC& bsRecord) { - return static_cast(GetImpl())->EditRedo(bsRecord); -} -FX_BOOL IFWL_ComboBox::EditUndo(const CFX_ByteStringC& bsRecord) { - return static_cast(GetImpl())->EditUndo(bsRecord); -} -IFWL_ListBox* IFWL_ComboBox::GetListBoxt() { - return static_cast(GetImpl())->GetListBoxt(); -} -FX_BOOL IFWL_ComboBox::AfterFocusShowDropList() { - return static_cast(GetImpl())->AfterFocusShowDropList(); -} -FX_ERR IFWL_ComboBox::OpenDropDownList(FX_BOOL bActivate) { - return static_cast(GetImpl())->OpenDropDownList(bActivate); -} -FX_BOOL IFWL_ComboBox::EditCanUndo() { - return static_cast(GetImpl())->EditCanUndo(); -} -FX_BOOL IFWL_ComboBox::EditCanRedo() { - return static_cast(GetImpl())->EditCanRedo(); -} -FX_BOOL IFWL_ComboBox::EditUndo() { - return static_cast(GetImpl())->EditUndo(); -} -FX_BOOL IFWL_ComboBox::EditRedo() { - return static_cast(GetImpl())->EditRedo(); -} -FX_BOOL IFWL_ComboBox::EditCanCopy() { - return static_cast(GetImpl())->EditCanCopy(); -} -FX_BOOL IFWL_ComboBox::EditCanCut() { - return static_cast(GetImpl())->EditCanCut(); -} -FX_BOOL IFWL_ComboBox::EditCanSelectAll() { - return static_cast(GetImpl())->EditCanSelectAll(); -} -FX_BOOL IFWL_ComboBox::EditCopy(CFX_WideString& wsCopy) { - return static_cast(GetImpl())->EditCopy(wsCopy); -} -FX_BOOL IFWL_ComboBox::EditCut(CFX_WideString& wsCut) { - return static_cast(GetImpl())->EditCut(wsCut); -} -FX_BOOL IFWL_ComboBox::EditPaste(const CFX_WideString& wsPaste) { - return static_cast(GetImpl())->EditPaste(wsPaste); -} -FX_BOOL IFWL_ComboBox::EditSelectAll() { - return static_cast(GetImpl())->EditSelectAll(); -} -FX_BOOL IFWL_ComboBox::EditDelete() { - return static_cast(GetImpl())->EditDelete(); -} -FX_BOOL IFWL_ComboBox::EditDeSelect() { - return static_cast(GetImpl())->EditDeSelect(); -} -FWL_ERR IFWL_ComboBox::GetBBox(CFX_RectF& rect) { - return static_cast(GetImpl())->GetBBox(rect); -} -FWL_ERR IFWL_ComboBox::EditModifyStylesEx(FX_DWORD dwStylesExAdded, - FX_DWORD dwStylesExRemoved) { - return static_cast(GetImpl()) - ->EditModifyStylesEx(dwStylesExAdded, dwStylesExRemoved); -} - -CFWL_ComboEditImp::CFWL_ComboEditImp(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) - : CFWL_EditImp(properties, pOuter) { - m_pOuter = static_cast(pOuter->GetImpl()); -} - -CFWL_ComboEditImpDelegate::CFWL_ComboEditImpDelegate(CFWL_ComboEditImp* pOwner) - : CFWL_EditImpDelegate(pOwner), m_pOwner(pOwner) {} -int32_t CFWL_ComboEditImpDelegate::OnProcessMessage(CFWL_Message* pMessage) { - if (!pMessage) - return 0; - FX_DWORD dwMsgCode = pMessage->GetClassID(); - FX_BOOL backDefault = TRUE; - switch (dwMsgCode) { - case FWL_MSGHASH_SetFocus: - case FWL_MSGHASH_KillFocus: { - if (dwMsgCode == FWL_MSGHASH_SetFocus) { - m_pOwner->m_pProperties->m_dwStates |= FWL_WGTSTATE_Focused; - } else { - m_pOwner->m_pProperties->m_dwStates &= ~FWL_WGTSTATE_Focused; - } - backDefault = FALSE; - break; - } - case FWL_MSGHASH_Mouse: { - CFWL_MsgMouse* pMsg = static_cast(pMessage); - if ((pMsg->m_dwCmd == FWL_MSGMOUSECMD_LButtonDown) && - ((m_pOwner->m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) == 0)) { - m_pOwner->SetSelected(); - m_pOwner->SetComboBoxFocus(TRUE); - } - break; - } - default: {} - } - if (!backDefault) { - return 1; - } - return CFWL_EditImpDelegate::OnProcessMessage(pMessage); -} -void CFWL_ComboEditImp::ClearSelected() { - ClearSelections(); - Repaint(&m_rtClient); -} -void CFWL_ComboEditImp::SetSelected() { - FlagFocus(TRUE); - EndCaret(); - AddSelRange(0); -} -void CFWL_ComboEditImp::EndCaret() { - m_pEdtEngine->MoveCaretPos(MC_End); -} -void CFWL_ComboEditImp::FlagFocus(FX_BOOL bSet) { - if (bSet) { - m_pProperties->m_dwStates |= FWL_WGTSTATE_Focused; - } else { - m_pProperties->m_dwStates &= ~FWL_WGTSTATE_Focused; - ShowCaret(FALSE); - } -} -void CFWL_ComboEditImp::SetComboBoxFocus(FX_BOOL bSet) { - m_pOuter->SetFocus(bSet); -} -CFWL_ComboListImp::CFWL_ComboListImp(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) - : CFWL_ListBoxImp(properties, pOuter), m_bNotifyOwner(TRUE) { - FXSYS_assert(pOuter != NULL); -} -FWL_ERR CFWL_ComboListImp::Initialize() { - if (CFWL_ListBoxImp::Initialize() != FWL_ERR_Succeeded) - return FWL_ERR_Indefinite; - delete m_pDelegate; - m_pDelegate = new CFWL_ComboListImpDelegate(this); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ComboListImp::Finalize() { - delete m_pDelegate; - m_pDelegate = nullptr; - return CFWL_ListBoxImp::Finalize(); -} -int32_t CFWL_ComboListImp::MatchItem(const CFX_WideString& wsMatch) { - if (wsMatch.IsEmpty()) { - return -1; - } - if (!m_pProperties->m_pDataProvider) - return -1; - IFWL_ListBoxDP* pData = - static_cast(m_pProperties->m_pDataProvider); - int32_t iCount = pData->CountItems(m_pInterface); - for (int32_t i = 0; i < iCount; i++) { - FWL_HLISTITEM hItem = pData->GetItem(m_pInterface, i); - CFX_WideString wsText; - pData->GetItemText(m_pInterface, hItem, wsText); - FX_STRSIZE pos = wsText.Find(wsMatch.c_str()); - if (!pos) { - return i; - } - } - return -1; -} -void CFWL_ComboListImp::ChangeSelected(int32_t iSel) { - if (!m_pProperties->m_pDataProvider) - return; - IFWL_ListBoxDP* pData = - static_cast(m_pProperties->m_pDataProvider); - FWL_HLISTITEM hItem = pData->GetItem(m_pInterface, iSel); - CFX_RectF rtInvalidate; - rtInvalidate.Reset(); - FWL_HLISTITEM hOld = GetSelItem(0); - int32_t iOld = pData->GetItemIndex(m_pInterface, hOld); - if (iOld == iSel) { - return; - } else if (iOld > -1) { - GetItemRect(iOld, rtInvalidate); - SetSelItem(hOld, FALSE); - } - if (hItem) { - CFX_RectF rect; - GetItemRect(iSel, rect); - rtInvalidate.Union(rect); - FWL_HLISTITEM hSel = pData->GetItem(m_pInterface, iSel); - SetSelItem(hSel, TRUE); - } - if (!rtInvalidate.IsEmpty()) { - Repaint(&rtInvalidate); - } -} -int32_t CFWL_ComboListImp::CountItems() { - IFWL_ListBoxDP* pData = - static_cast(m_pProperties->m_pDataProvider); - return pData ? pData->CountItems(m_pInterface) : 0; -} -void CFWL_ComboListImp::GetItemRect(int32_t nIndex, CFX_RectF& rtItem) { - IFWL_ListBoxDP* pData = - static_cast(m_pProperties->m_pDataProvider); - FWL_HLISTITEM hItem = pData->GetItem(m_pInterface, nIndex); - pData->GetItemRect(m_pInterface, hItem, rtItem); -} -void CFWL_ComboListImp::ClientToOuter(FX_FLOAT& fx, FX_FLOAT& fy) { - fx += m_pProperties->m_rtWidget.left, fy += m_pProperties->m_rtWidget.top; - IFWL_Widget* pOwner = GetOwner(); - if (!pOwner) - return; - pOwner->TransformTo(m_pOuter, fx, fy); -} -void CFWL_ComboListImp::SetFocus(FX_BOOL bSet) { - CFWL_WidgetImp::SetFocus(bSet); -} -CFWL_ComboListImpDelegate::CFWL_ComboListImpDelegate(CFWL_ComboListImp* pOwner) - : CFWL_ListBoxImpDelegate(pOwner), m_pOwner(pOwner) {} -int32_t CFWL_ComboListImpDelegate::OnProcessMessage(CFWL_Message* pMessage) { - if (!pMessage) - return 0; - FX_DWORD dwHashCode = pMessage->GetClassID(); - FX_BOOL backDefault = TRUE; - if (dwHashCode == FWL_MSGHASH_SetFocus || - dwHashCode == FWL_MSGHASH_KillFocus) { - OnDropListFocusChanged(pMessage, dwHashCode == FWL_MSGHASH_SetFocus); - } else if (dwHashCode == FWL_MSGHASH_Mouse) { - CFWL_MsgMouse* pMsg = static_cast(pMessage); - if (m_pOwner->IsShowScrollBar(TRUE) && m_pOwner->m_pVertScrollBar) { - CFX_RectF rect; - m_pOwner->m_pVertScrollBar->GetWidgetRect(rect); - if (rect.Contains(pMsg->m_fx, pMsg->m_fy)) { - pMsg->m_fx -= rect.left; - pMsg->m_fy -= rect.top; - IFWL_WidgetDelegate* pDelegate = - m_pOwner->m_pVertScrollBar->SetDelegate(NULL); - return pDelegate->OnProcessMessage(pMsg); - } - } - FX_DWORD dwCmd = pMsg->m_dwCmd; - switch (dwCmd) { - case FWL_MSGMOUSECMD_MouseMove: { - backDefault = FALSE; - OnDropListMouseMove(pMsg); - break; - } - case FWL_MSGMOUSECMD_LButtonDown: { - backDefault = FALSE; - OnDropListLButtonDown(pMsg); - break; - } - case FWL_MSGMOUSECMD_LButtonUp: { - backDefault = FALSE; - OnDropListLButtonUp(pMsg); - break; - } - default: {} - } - } else if (dwHashCode == FWL_MSGHASH_Key) { - backDefault = !OnDropListKey(static_cast(pMessage)); - } - if (!backDefault) { - return 1; - } - return CFWL_ListBoxImpDelegate::OnProcessMessage(pMessage); -} -void CFWL_ComboListImpDelegate::OnDropListFocusChanged(CFWL_Message* pMsg, - FX_BOOL bSet) { - if (!bSet) { - CFWL_MsgKillFocus* pKill = static_cast(pMsg); - CFWL_ComboBoxImp* pOuter = - static_cast(m_pOwner->m_pOuter->GetImpl()); - if (pKill->m_pSetFocus == m_pOwner->m_pOuter || - pKill->m_pSetFocus == pOuter->m_pEdit.get()) { - pOuter->ShowDropList(FALSE); - } - } -} -int32_t CFWL_ComboListImpDelegate::OnDropListMouseMove(CFWL_MsgMouse* pMsg) { - if (m_pOwner->m_rtClient.Contains(pMsg->m_fx, pMsg->m_fy)) { - if (m_pOwner->m_bNotifyOwner) { - m_pOwner->m_bNotifyOwner = FALSE; - } - if (m_pOwner->IsShowScrollBar(TRUE) && m_pOwner->m_pVertScrollBar) { - CFX_RectF rect; - m_pOwner->m_pVertScrollBar->GetWidgetRect(rect); - if (rect.Contains(pMsg->m_fx, pMsg->m_fy)) { - return 1; - } - } - FWL_HLISTITEM hItem = m_pOwner->GetItemAtPoint(pMsg->m_fx, pMsg->m_fy); - if (hItem) { - if (!m_pOwner->m_pProperties->m_pDataProvider) - return 0; - IFWL_ListBoxDP* pData = static_cast( - m_pOwner->m_pProperties->m_pDataProvider); - int32_t iSel = pData->GetItemIndex(m_pOwner->m_pInterface, hItem); - CFWL_EvtCmbHoverChanged event; - event.m_pSrcTarget = m_pOwner->m_pOuter; - event.m_iCurHover = iSel; - m_pOwner->DispatchEvent(&event); - m_pOwner->ChangeSelected(iSel); - } - } else if (m_pOwner->m_bNotifyOwner) { - m_pOwner->ClientToOuter(pMsg->m_fx, pMsg->m_fy); - CFWL_ComboBoxImp* pOuter = - static_cast(m_pOwner->m_pOuter->GetImpl()); - pOuter->m_pDelegate->OnProcessMessage(pMsg); - } - return 1; -} -int32_t CFWL_ComboListImpDelegate::OnDropListLButtonDown(CFWL_MsgMouse* pMsg) { - if (m_pOwner->m_rtClient.Contains(pMsg->m_fx, pMsg->m_fy)) { - return 0; - } - CFWL_ComboBoxImp* pOuter = - static_cast(m_pOwner->m_pOuter->GetImpl()); - pOuter->ShowDropList(FALSE); - return 1; -} -int32_t CFWL_ComboListImpDelegate::OnDropListLButtonUp(CFWL_MsgMouse* pMsg) { - CFWL_ComboBoxImp* pOuter = - static_cast(m_pOwner->m_pOuter->GetImpl()); - if (m_pOwner->m_bNotifyOwner) { - m_pOwner->ClientToOuter(pMsg->m_fx, pMsg->m_fy); - pOuter->m_pDelegate->OnProcessMessage(pMsg); - } else { - if (m_pOwner->IsShowScrollBar(TRUE) && m_pOwner->m_pVertScrollBar) { - CFX_RectF rect; - m_pOwner->m_pVertScrollBar->GetWidgetRect(rect); - if (rect.Contains(pMsg->m_fx, pMsg->m_fy)) { - return 1; - } - } - pOuter->ShowDropList(FALSE); - FWL_HLISTITEM hItem = m_pOwner->GetItemAtPoint(pMsg->m_fx, pMsg->m_fy); - if (hItem) { - pOuter->ProcessSelChanged(TRUE); - } - } - return 1; -} -int32_t CFWL_ComboListImpDelegate::OnDropListKey(CFWL_MsgKey* pKey) { - CFWL_ComboBoxImp* pOuter = - static_cast(m_pOwner->m_pOuter->GetImpl()); - FX_BOOL bPropagate = FALSE; - if (pKey->m_dwCmd == FWL_MSGKEYCMD_KeyDown) { - FX_DWORD dwKeyCode = pKey->m_dwKeyCode; - switch (dwKeyCode) { - case FWL_VKEY_Return: - case FWL_VKEY_Escape: { - pOuter->ShowDropList(FALSE); - return 1; - } - case FWL_VKEY_Up: - case FWL_VKEY_Down: { - OnDropListKeyDown(pKey); - pOuter->SetDelegate(nullptr); - pOuter->ProcessSelChanged(FALSE); - return 1; - } - default: { bPropagate = TRUE; } - } - } else if (pKey->m_dwCmd == FWL_MSGKEYCMD_Char) { - bPropagate = TRUE; - } - if (bPropagate) { - pKey->m_pDstTarget = m_pOwner->m_pOuter; - pOuter->m_pDelegate->OnProcessMessage(pKey); - return 1; - } - return 0; -} -void CFWL_ComboListImpDelegate::OnDropListKeyDown(CFWL_MsgKey* pKey) { - FX_DWORD dwKeyCode = pKey->m_dwKeyCode; - switch (dwKeyCode) { - case FWL_VKEY_Up: - case FWL_VKEY_Down: - case FWL_VKEY_Home: - case FWL_VKEY_End: { - CFWL_ComboBoxImp* pOuter = - static_cast(m_pOwner->m_pOuter->GetImpl()); - IFWL_ListBoxDP* pData = static_cast( - m_pOwner->m_pProperties->m_pDataProvider); - FWL_HLISTITEM hItem = - pData->GetItem(m_pOwner->m_pInterface, pOuter->m_iCurSel); - hItem = m_pOwner->GetItem(hItem, dwKeyCode); - if (!hItem) { - break; - } - m_pOwner->SetSelection(hItem, hItem, TRUE); - m_pOwner->ScrollToVisible(hItem); - CFX_RectF rtInvalidate; - rtInvalidate.Set(0, 0, m_pOwner->m_pProperties->m_rtWidget.width, - m_pOwner->m_pProperties->m_rtWidget.height); - m_pOwner->Repaint(&rtInvalidate); - break; - } - default: {} - } -} -CFWL_ComboBoxImp::CFWL_ComboBoxImp(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) - : CFWL_WidgetImp(properties, pOuter), - m_pForm(NULL), - m_bLButtonDown(FALSE), - m_iCurSel(-1), - m_iBtnState(FWL_PARTSTATE_CMB_Normal), - m_fComboFormHandler(0), - m_bNeedShowList(FALSE) { - m_rtClient.Reset(); - m_rtBtn.Reset(); - m_rtHandler.Reset(); -} -CFWL_ComboBoxImp::~CFWL_ComboBoxImp() {} -FWL_ERR CFWL_ComboBoxImp::GetClassName(CFX_WideString& wsClass) const { - wsClass = FWL_CLASS_ComboBox; - return FWL_ERR_Succeeded; -} -FX_DWORD CFWL_ComboBoxImp::GetClassID() const { - return FWL_CLASSHASH_ComboBox; -} -FWL_ERR CFWL_ComboBoxImp::Initialize() { - if (m_pWidgetMgr->IsFormDisabled()) { - return DisForm_Initialize(); - } - if (CFWL_WidgetImp::Initialize() != FWL_ERR_Succeeded) - return FWL_WGTSTATE_Invisible; // Probably a bug; not a FWL_ERR_ value. - m_pDelegate = new CFWL_ComboBoxImpDelegate(this); - CFWL_WidgetImpProperties prop; - prop.m_pThemeProvider = m_pProperties->m_pThemeProvider; - prop.m_dwStyles |= FWL_WGTSTYLE_Border | FWL_WGTSTYLE_VScroll; - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_CMB_ListItemIconText) { - prop.m_dwStyleExes |= FWL_STYLEEXT_LTB_Icon; - } - prop.m_pDataProvider = m_pProperties->m_pDataProvider; - m_pListBox.reset(IFWL_ListBox::CreateComboList(prop, m_pInterface)); - m_pListBox->Initialize(); - if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_CMB_DropDown) && !m_pEdit) { - CFWL_WidgetImpProperties prop2; - m_pEdit.reset(IFWL_Edit::CreateComboEdit(prop2, m_pInterface)); - m_pEdit->Initialize(); - static_cast(m_pEdit->GetImpl())->SetOuter(m_pInterface); - } - if (m_pEdit) { - m_pEdit->SetParent(m_pInterface); - } - SetStates(m_pProperties->m_dwStates); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ComboBoxImp::Finalize() { - if (m_pEdit) { - m_pEdit->Finalize(); - } - m_pListBox->Finalize(); - delete m_pDelegate; - m_pDelegate = nullptr; - return CFWL_WidgetImp::Finalize(); -} -FWL_ERR CFWL_ComboBoxImp::GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize) { - if (bAutoSize) { - rect.Reset(); - FX_BOOL bIsDropDown = IsDropDownStyle(); - if (bIsDropDown && m_pEdit) { - m_pEdit->GetWidgetRect(rect, TRUE); - } else { - rect.width = 100; - rect.height = 16; - } - if (!m_pProperties->m_pThemeProvider) { - ReSetTheme(); - } - FX_FLOAT* pFWidth = static_cast( - GetThemeCapacity(FWL_WGTCAPACITY_ScrollBarWidth)); - if (!pFWidth) - return FWL_ERR_Indefinite; - rect.Inflate(0, 0, *pFWidth, 0); - CFWL_WidgetImp::GetWidgetRect(rect, TRUE); - } else { - rect = m_pProperties->m_rtWidget; - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ComboBoxImp::ModifyStylesEx(FX_DWORD dwStylesExAdded, - FX_DWORD dwStylesExRemoved) { - if (m_pWidgetMgr->IsFormDisabled()) { - return DisForm_ModifyStylesEx(dwStylesExAdded, dwStylesExRemoved); - } - FX_BOOL bAddDropDown = dwStylesExAdded & FWL_STYLEEXT_CMB_DropDown; - FX_BOOL bRemoveDropDown = dwStylesExRemoved & FWL_STYLEEXT_CMB_DropDown; - if (bAddDropDown && !m_pEdit) { - CFWL_WidgetImpProperties prop; - m_pEdit.reset(IFWL_Edit::CreateComboEdit(prop, nullptr)); - m_pEdit->Initialize(); - static_cast(m_pEdit->GetImpl())->SetOuter(m_pInterface); - m_pEdit->SetParent(m_pInterface); - } else if (bRemoveDropDown && m_pEdit) { - m_pEdit->SetStates(FWL_WGTSTATE_Invisible, TRUE); - } - return CFWL_WidgetImp::ModifyStylesEx(dwStylesExAdded, dwStylesExRemoved); -} -FWL_ERR CFWL_ComboBoxImp::Update() { - if (m_pWidgetMgr->IsFormDisabled()) { - return DisForm_Update(); - } - if (IsLocked()) { - return FWL_ERR_Indefinite; - } - ReSetTheme(); - FX_BOOL bDropDown = IsDropDownStyle(); - if (bDropDown && m_pEdit) { - ReSetEditAlignment(); - } - if (m_pProperties->m_pThemeProvider == NULL) { - m_pProperties->m_pThemeProvider = GetAvailableTheme(); - } - Layout(); - CFWL_ThemePart part; - part.m_pWidget = m_pInterface; - m_fComboFormHandler = - *static_cast(m_pProperties->m_pThemeProvider->GetCapacity( - &part, FWL_WGTCAPACITY_CMB_ComboFormHandler)); - return FWL_ERR_Succeeded; -} -FX_DWORD CFWL_ComboBoxImp::HitTest(FX_FLOAT fx, FX_FLOAT fy) { - if (m_pWidgetMgr->IsFormDisabled()) { - return DisForm_HitTest(fx, fy); - } - return CFWL_WidgetImp::HitTest(fx, fy); -} -FWL_ERR CFWL_ComboBoxImp::DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - if (m_pWidgetMgr->IsFormDisabled()) { - return DisForm_DrawWidget(pGraphics, pMatrix); - } - if (!pGraphics) - return FWL_ERR_Indefinite; - if (!m_pProperties->m_pThemeProvider) - return FWL_ERR_Indefinite; - IFWL_ThemeProvider* pTheme = m_pProperties->m_pThemeProvider; - FX_BOOL bIsDropDown = IsDropDownStyle(); - if (HasBorder()) { - DrawBorder(pGraphics, FWL_PART_CMB_Border, pTheme, pMatrix); - } - if (HasEdge()) { - DrawEdge(pGraphics, FWL_PART_CMB_Edge, pTheme, pMatrix); - } - if (!bIsDropDown) { - CFX_RectF rtTextBk(m_rtClient); - rtTextBk.width -= m_rtBtn.width; - CFWL_ThemeBackground param; - param.m_pWidget = m_pInterface; - param.m_iPart = FWL_PART_CMB_Background; - param.m_pGraphics = pGraphics; - if (pMatrix) { - param.m_matrix.Concat(*pMatrix); - } - param.m_rtPart = rtTextBk; - if (m_iCurSel >= 0) { - IFWL_ListBoxDP* pData = static_cast( - static_cast(m_pListBox->GetImpl()) - ->m_pProperties->m_pDataProvider); - void* p = pData->GetItemData(m_pListBox.get(), - pData->GetItem(m_pListBox.get(), m_iCurSel)); - if (p != NULL) { - param.m_pData = p; - } - } - if (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled) { - param.m_dwStates = FWL_PARTSTATE_CMB_Disabled; - } else if ((m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) && - (m_iCurSel >= 0)) { - param.m_dwStates = FWL_PARTSTATE_CMB_Selected; - } else { - param.m_dwStates = FWL_PARTSTATE_CMB_Normal; - } - pTheme->DrawBackground(¶m); - if (m_iCurSel >= 0) { - if (!m_pListBox) - return FWL_ERR_Indefinite; - CFX_WideString wsText; - IFWL_ComboBoxDP* pData = - static_cast(m_pProperties->m_pDataProvider); - FWL_HLISTITEM hItem = pData->GetItem(m_pInterface, m_iCurSel); - static_cast(m_pListBox->GetImpl()) - ->GetItemText(hItem, wsText); - CFWL_ThemeText param; - param.m_pWidget = m_pInterface; - param.m_iPart = FWL_PART_CMB_Caption; - param.m_dwStates = m_iBtnState; - param.m_pGraphics = pGraphics; - param.m_matrix.Concat(*pMatrix); - param.m_rtPart = rtTextBk; - param.m_dwStates = (m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) - ? FWL_PARTSTATE_CMB_Selected - : FWL_PARTSTATE_CMB_Normal; - param.m_wsText = wsText; - param.m_dwTTOStyles = FDE_TTOSTYLE_SingleLine; - param.m_iTTOAlign = FDE_TTOALIGNMENT_CenterLeft; - pTheme->DrawText(¶m); - } - } - { - CFWL_ThemeBackground param; - param.m_pWidget = m_pInterface; - param.m_iPart = FWL_PART_CMB_DropDownButton; - param.m_dwStates = (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled) - ? FWL_PARTSTATE_CMB_Disabled - : m_iBtnState; - param.m_pGraphics = pGraphics; - param.m_matrix.Concat(*pMatrix); - param.m_rtPart = m_rtBtn; - pTheme->DrawBackground(¶m); - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ComboBoxImp::SetThemeProvider(IFWL_ThemeProvider* pThemeProvider) { - if (!pThemeProvider) - return FWL_ERR_Indefinite; - m_pProperties->m_pThemeProvider = pThemeProvider; - if (m_pListBox && pThemeProvider->IsValidWidget(m_pListBox.get())) { - m_pListBox->SetThemeProvider(pThemeProvider); - } - if (m_pEdit && pThemeProvider->IsValidWidget(m_pEdit.get())) { - m_pEdit->SetThemeProvider(pThemeProvider); - } - return FWL_ERR_Succeeded; -} -int32_t CFWL_ComboBoxImp::GetCurSel() { - return m_iCurSel; -} -FWL_ERR CFWL_ComboBoxImp::SetCurSel(int32_t iSel) { - int32_t iCount = - static_cast(m_pListBox->GetImpl())->CountItems(); - FX_BOOL bClearSel = iSel < 0 || iSel >= iCount; - FX_BOOL bDropDown = IsDropDownStyle(); - if (bDropDown && m_pEdit) { - if (bClearSel) { - m_pEdit->SetText(CFX_WideString()); - } else { - CFX_WideString wsText; - IFWL_ComboBoxDP* pData = - static_cast(m_pProperties->m_pDataProvider); - FWL_HLISTITEM hItem = pData->GetItem(m_pInterface, iSel); - static_cast(m_pListBox->GetImpl()) - ->GetItemText(hItem, wsText); - m_pEdit->SetText(wsText); - } - m_pEdit->Update(); - } - m_iCurSel = bClearSel ? -1 : iSel; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ComboBoxImp::SetStates(FX_DWORD dwStates, FX_BOOL bSet) { - FX_BOOL bIsDropDown = IsDropDownStyle(); - if (bIsDropDown && m_pEdit) { - m_pEdit->SetStates(dwStates, bSet); - } - if (m_pListBox) { - m_pListBox->SetStates(dwStates, bSet); - } - return CFWL_WidgetImp::SetStates(dwStates, bSet); -} -FWL_ERR CFWL_ComboBoxImp::SetEditText(const CFX_WideString& wsText) { - if (!m_pEdit) - return FWL_ERR_Indefinite; - m_pEdit->SetText(wsText); - return m_pEdit->Update(); -} -int32_t CFWL_ComboBoxImp::GetEditTextLength() const { - if (!m_pEdit) - return -1; - return m_pEdit->GetTextLength(); -} -FWL_ERR CFWL_ComboBoxImp::GetEditText(CFX_WideString& wsText, - int32_t nStart, - int32_t nCount) const { - if (m_pEdit) { - return m_pEdit->GetText(wsText, nStart, nCount); - } else if (m_pListBox) { - IFWL_ComboBoxDP* pData = - static_cast(m_pProperties->m_pDataProvider); - FWL_HLISTITEM hItem = pData->GetItem(m_pInterface, m_iCurSel); - return m_pListBox->GetItemText(hItem, wsText); - } - return FWL_ERR_Indefinite; -} -FWL_ERR CFWL_ComboBoxImp::SetEditSelRange(int32_t nStart, int32_t nCount) { - if (!m_pEdit) - return FWL_ERR_Indefinite; - static_cast(m_pEdit->GetImpl())->ClearSelected(); - m_pEdit->AddSelRange(nStart, nCount); - return FWL_ERR_Succeeded; -} -int32_t CFWL_ComboBoxImp::GetEditSelRange(int32_t nIndex, int32_t& nStart) { - if (!m_pEdit) - return -1; - return m_pEdit->GetSelRange(nIndex, nStart); -} -int32_t CFWL_ComboBoxImp::GetEditLimit() { - if (!m_pEdit) - return -1; - return m_pEdit->GetLimit(); -} -FWL_ERR CFWL_ComboBoxImp::SetEditLimit(int32_t nLimit) { - if (!m_pEdit) - return FWL_ERR_Indefinite; - return m_pEdit->SetLimit(nLimit); -} -FWL_ERR CFWL_ComboBoxImp::EditDoClipboard(int32_t iCmd) { - if (!m_pEdit) - return FWL_ERR_Indefinite; - return m_pEdit->DoClipboard(iCmd); -} -FX_BOOL CFWL_ComboBoxImp::EditRedo(const CFX_ByteStringC& bsRecord) { - if (!m_pEdit) - return FALSE; - return m_pEdit->Redo(bsRecord); -} -FX_BOOL CFWL_ComboBoxImp::EditUndo(const CFX_ByteStringC& bsRecord) { - if (!m_pEdit) - return FALSE; - return m_pEdit->Undo(bsRecord); -} -IFWL_ListBox* CFWL_ComboBoxImp::GetListBoxt() { - return m_pListBox.get(); -} -FX_BOOL CFWL_ComboBoxImp::AfterFocusShowDropList() { - if (!m_bNeedShowList) { - return FALSE; - } - if (m_pEdit) { - MatchEditText(); - } - ShowDropList(TRUE); - m_bNeedShowList = FALSE; - return TRUE; -} -FX_ERR CFWL_ComboBoxImp::OpenDropDownList(FX_BOOL bActivate) { - ShowDropList(bActivate); - return FWL_ERR_Succeeded; -} -FX_BOOL CFWL_ComboBoxImp::EditCanUndo() { - return m_pEdit->CanUndo(); -} -FX_BOOL CFWL_ComboBoxImp::EditCanRedo() { - return m_pEdit->CanRedo(); -} -FX_BOOL CFWL_ComboBoxImp::EditUndo() { - return m_pEdit->Undo(); -} -FX_BOOL CFWL_ComboBoxImp::EditRedo() { - return m_pEdit->Redo(); -} -FX_BOOL CFWL_ComboBoxImp::EditCanCopy() { - return m_pEdit->CountSelRanges() > 0; -} -FX_BOOL CFWL_ComboBoxImp::EditCanCut() { - if (m_pEdit->GetStylesEx() & FWL_STYLEEXT_EDT_ReadOnly) { - return FALSE; - } - return m_pEdit->CountSelRanges() > 0; -} -FX_BOOL CFWL_ComboBoxImp::EditCanSelectAll() { - return m_pEdit->GetTextLength() > 0; -} -FX_BOOL CFWL_ComboBoxImp::EditCopy(CFX_WideString& wsCopy) { - return m_pEdit->Copy(wsCopy); -} -FX_BOOL CFWL_ComboBoxImp::EditCut(CFX_WideString& wsCut) { - return m_pEdit->Cut(wsCut); -} -FX_BOOL CFWL_ComboBoxImp::EditPaste(const CFX_WideString& wsPaste) { - return m_pEdit->Paste(wsPaste); -} -FX_BOOL CFWL_ComboBoxImp::EditSelectAll() { - return m_pEdit->AddSelRange(0) == FWL_ERR_Succeeded; -} -FX_BOOL CFWL_ComboBoxImp::EditDelete() { - return m_pEdit->ClearText() == FWL_ERR_Succeeded; -} -FX_BOOL CFWL_ComboBoxImp::EditDeSelect() { - return m_pEdit->ClearSelections() == FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ComboBoxImp::GetBBox(CFX_RectF& rect) { - if (m_pWidgetMgr->IsFormDisabled()) { - return DisForm_GetBBox(rect); - } - rect = m_pProperties->m_rtWidget; - if (m_pListBox && IsDropListShowed()) { - CFX_RectF rtList; - m_pListBox->GetWidgetRect(rtList); - rtList.Offset(rect.left, rect.top); - rect.Union(rtList); - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ComboBoxImp::EditModifyStylesEx(FX_DWORD dwStylesExAdded, - FX_DWORD dwStylesExRemoved) { - if (m_pEdit != NULL) { - return m_pEdit->ModifyStylesEx(dwStylesExAdded, dwStylesExRemoved); - } else { - return FWL_ERR_Parameter_Invalid; - } -} -FX_FLOAT CFWL_ComboBoxImp::GetListHeight() { - return static_cast(m_pProperties->m_pDataProvider) - ->GetListHeight(m_pInterface); -} -void CFWL_ComboBoxImp::DrawStretchHandler(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - CFWL_ThemeBackground param; - param.m_pGraphics = pGraphics; - param.m_iPart = FWL_PART_CMB_StretcgHandler; - param.m_dwStates = FWL_PARTSTATE_CMB_Normal; - param.m_pWidget = m_pInterface; - if (pMatrix) { - param.m_matrix.Concat(*pMatrix); - } - param.m_rtPart = m_rtHandler; - m_pProperties->m_pThemeProvider->DrawBackground(¶m); -} -void CFWL_ComboBoxImp::ShowDropList(FX_BOOL bActivate) { - if (m_pWidgetMgr->IsFormDisabled()) { - return DisForm_ShowDropList(bActivate); - } - FX_BOOL bDropList = IsDropListShowed(); - if (bDropList == bActivate) { - return; - } - if (!m_pForm) { - InitProxyForm(); - } - m_pListProxyDelegate->Reset(); - if (bActivate) { - static_cast(m_pListBox->GetImpl()) - ->ChangeSelected(m_iCurSel); - ReSetListItemAlignment(); - FX_DWORD dwStyleAdd = m_pProperties->m_dwStyleExes & - (FWL_STYLEEXT_CMB_Sort | FWL_STYLEEXT_CMB_OwnerDraw); - m_pListBox->ModifyStylesEx(dwStyleAdd, 0); - m_pListBox->GetWidgetRect(m_rtList, TRUE); - FX_FLOAT fHeight = GetListHeight(); - if (fHeight > 0) { - if (m_rtList.height > GetListHeight()) { - m_rtList.height = GetListHeight(); - m_pListBox->ModifyStyles(FWL_WGTSTYLE_VScroll, 0); - } - } - CFX_RectF rtAnchor; - rtAnchor.Set(0, 0, m_pProperties->m_rtWidget.width, - m_pProperties->m_rtWidget.height); - FX_FLOAT fMinHeight = 0; - if (m_rtList.width < m_rtClient.width) { - m_rtList.width = m_rtClient.width; - } - m_rtProxy = m_rtList; - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_CMB_ListDrag) { - m_rtProxy.height += m_fComboFormHandler; - } - GetPopupPos(fMinHeight, m_rtProxy.height, rtAnchor, m_rtProxy); - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_CMB_ListDrag) { - FX_FLOAT fx = 0; - FX_FLOAT fy = m_rtClient.top + m_rtClient.height / 2; - TransformTo(NULL, fx, fy); - m_bUpFormHandler = fy > m_rtProxy.top; - if (m_bUpFormHandler) { - m_rtHandler.Set(0, 0, m_rtList.width, m_fComboFormHandler); - m_rtList.top = m_fComboFormHandler; - } else { - m_rtHandler.Set(0, m_rtList.height, m_rtList.width, - m_fComboFormHandler); - } - } - m_pForm->SetWidgetRect(m_rtProxy); - m_pForm->Update(); - m_pListBox->SetWidgetRect(m_rtList); - m_pListBox->Update(); - CFWL_EvtCmbPreDropDown ev; - ev.m_pSrcTarget = m_pInterface; - DispatchEvent(&ev); - m_fItemHeight = - static_cast(m_pListBox->GetImpl())->m_fItemHeight; - static_cast(m_pListBox->GetImpl())->SetFocus(TRUE); - m_pForm->DoModal(); - static_cast(m_pListBox->GetImpl())->SetFocus(FALSE); - } else { - m_pForm->EndDoModal(); - CFWL_EvtCmbCloseUp ev; - ev.m_pSrcTarget = m_pInterface; - DispatchEvent(&ev); - m_bLButtonDown = FALSE; - static_cast(m_pListBox->GetImpl())->m_bNotifyOwner = - TRUE; - SetFocus(TRUE); - } -} -FX_BOOL CFWL_ComboBoxImp::IsDropListShowed() { - return m_pForm && !(m_pForm->GetStates() & FWL_WGTSTATE_Invisible); -} -FX_BOOL CFWL_ComboBoxImp::IsDropDownStyle() const { - return m_pProperties->m_dwStyleExes & FWL_STYLEEXT_CMB_DropDown; -} -void CFWL_ComboBoxImp::MatchEditText() { - CFX_WideString wsText; - m_pEdit->GetText(wsText); - int32_t iMatch = - static_cast(m_pListBox->GetImpl())->MatchItem(wsText); - if (iMatch != m_iCurSel) { - static_cast(m_pListBox->GetImpl()) - ->ChangeSelected(iMatch); - if (iMatch >= 0) { - SynchrEditText(iMatch); - } - } else if (iMatch >= 0) { - static_cast(m_pEdit->GetImpl())->SetSelected(); - } - m_iCurSel = iMatch; -} -void CFWL_ComboBoxImp::SynchrEditText(int32_t iListItem) { - CFX_WideString wsText; - IFWL_ComboBoxDP* pData = - static_cast(m_pProperties->m_pDataProvider); - FWL_HLISTITEM hItem = pData->GetItem(m_pInterface, iListItem); - static_cast(m_pListBox->GetImpl()) - ->GetItemText(hItem, wsText); - m_pEdit->SetText(wsText); - m_pEdit->Update(); - static_cast(m_pEdit->GetImpl())->SetSelected(); -} -void CFWL_ComboBoxImp::Layout() { - if (m_pWidgetMgr->IsFormDisabled()) { - return DisForm_Layout(); - } - GetClientRect(m_rtClient); - FX_FLOAT* pFWidth = - static_cast(GetThemeCapacity(FWL_WGTCAPACITY_ScrollBarWidth)); - if (!pFWidth) - return; - FX_FLOAT fBtn = *pFWidth; - m_rtBtn.Set(m_rtClient.right() - fBtn, m_rtClient.top, fBtn, - m_rtClient.height); - FX_BOOL bIsDropDown = IsDropDownStyle(); - if (bIsDropDown && m_pEdit) { - CFX_RectF rtEdit; - rtEdit.Set(m_rtClient.left, m_rtClient.top, m_rtClient.width - fBtn, - m_rtClient.height); - m_pEdit->SetWidgetRect(rtEdit); - if (m_iCurSel >= 0) { - CFX_WideString wsText; - IFWL_ComboBoxDP* pData = - static_cast(m_pProperties->m_pDataProvider); - FWL_HLISTITEM hItem = pData->GetItem(m_pInterface, m_iCurSel); - static_cast(m_pListBox->GetImpl()) - ->GetItemText(hItem, wsText); - m_pEdit->LockUpdate(); - m_pEdit->SetText(wsText); - m_pEdit->UnlockUpdate(); - } - m_pEdit->Update(); - } -} -void CFWL_ComboBoxImp::ReSetTheme() { - IFWL_ThemeProvider* pTheme = m_pProperties->m_pThemeProvider; - if (!pTheme) { - pTheme = GetAvailableTheme(); - m_pProperties->m_pThemeProvider = pTheme; - } - if (m_pListBox) { - if (!m_pListBox->GetThemeProvider() && - pTheme->IsValidWidget(m_pListBox.get())) { - m_pListBox->SetThemeProvider(pTheme); - } - } - if (m_pEdit) { - if (!m_pEdit->GetThemeProvider() && pTheme->IsValidWidget(m_pEdit.get())) { - m_pEdit->SetThemeProvider(pTheme); - } - } -} -void CFWL_ComboBoxImp::ReSetEditAlignment() { - if (!m_pEdit) - return; - FX_DWORD dwStylExes = m_pProperties->m_dwStyleExes; - FX_DWORD dwAdd = 0; - switch (dwStylExes & FWL_STYLEEXT_CMB_EditHAlignMask) { - case FWL_STYLEEXT_CMB_EditHCenter: { - dwAdd |= FWL_STYLEEXT_EDT_HCenter; - break; - } - case FWL_STYLEEXT_CMB_EditHFar: { - dwAdd |= FWL_STYLEEXT_EDT_HFar; - break; - } - default: { dwAdd |= FWL_STYLEEXT_EDT_HNear; } - } - switch (dwStylExes & FWL_STYLEEXT_CMB_EditVAlignMask) { - case FWL_STYLEEXT_CMB_EditVCenter: { - dwAdd |= FWL_STYLEEXT_EDT_VCenter; - break; - } - case FWL_STYLEEXT_CMB_EditVFar: { - dwAdd |= FWL_STYLEEXT_EDT_VFar; - break; - } - default: { dwAdd |= FWL_STYLEEXT_EDT_VNear; } - } - if (dwStylExes & FWL_STYLEEXT_CMB_EditJustified) { - dwAdd |= FWL_STYLEEXT_EDT_Justified; - } - if (dwStylExes & FWL_STYLEEXT_CMB_EditDistributed) { - dwAdd |= FWL_STYLEEXT_EDT_Distributed; - } - m_pEdit->ModifyStylesEx(dwAdd, FWL_STYLEEXT_EDT_HAlignMask | - FWL_STYLEEXT_EDT_HAlignModeMask | - FWL_STYLEEXT_EDT_VAlignMask); -} -void CFWL_ComboBoxImp::ReSetListItemAlignment() { - if (!m_pListBox) - return; - FX_DWORD dwStylExes = m_pProperties->m_dwStyleExes; - FX_DWORD dwAdd = 0; - switch (dwStylExes & FWL_STYLEEXT_CMB_ListItemAlignMask) { - case FWL_STYLEEXT_CMB_ListItemCenterAlign: { - dwAdd |= FWL_STYLEEXT_LTB_CenterAlign; - } - case FWL_STYLEEXT_CMB_ListItemRightAlign: { - dwAdd |= FWL_STYLEEXT_LTB_RightAlign; - } - default: { dwAdd |= FWL_STYLEEXT_LTB_LeftAlign; } - } - m_pListBox->ModifyStylesEx(dwAdd, FWL_STYLEEXT_CMB_ListItemAlignMask); -} -void CFWL_ComboBoxImp::ProcessSelChanged(FX_BOOL bLButtonUp) { - IFWL_ComboBoxDP* pDatas = - static_cast(m_pProperties->m_pDataProvider); - m_iCurSel = pDatas->GetItemIndex(m_pInterface, m_pListBox->GetSelItem(0)); - FX_BOOL bDropDown = IsDropDownStyle(); - if (bDropDown) { - IFWL_ComboBoxDP* pData = - static_cast(m_pProperties->m_pDataProvider); - FWL_HLISTITEM hItem = pData->GetItem(m_pInterface, m_iCurSel); - if (hItem) { - CFX_WideString wsText; - pData->GetItemText(m_pInterface, hItem, wsText); - if (m_pEdit) { - m_pEdit->SetText(wsText); - m_pEdit->Update(); - static_cast(m_pEdit->GetImpl())->SetSelected(); - } - CFWL_EvtCmbSelChanged ev; - ev.bLButtonUp = bLButtonUp; - ev.m_pSrcTarget = m_pInterface; - ev.iArraySels.Add(m_iCurSel); - DispatchEvent(&ev); - } - } else { - Repaint(&m_rtClient); - } -} -void CFWL_ComboBoxImp::InitProxyForm() { - if (m_pForm) - return; - if (!m_pListBox) - return; - CFWL_WidgetImpProperties propForm; - propForm.m_pOwner = m_pInterface; - propForm.m_dwStyles = FWL_WGTSTYLE_Popup; - propForm.m_dwStates = FWL_WGTSTATE_Invisible; - CFX_WideString className; - m_pForm = IFWL_Form::CreateFormProxy(propForm, &className, m_pListBox.get()); - m_pForm->Initialize(); - m_pProxy = static_cast(m_pForm->GetImpl()); - m_pListBox->SetParent(m_pForm); - m_pListProxyDelegate = new CFWL_ComboProxyImpDelegate(m_pForm, this); - m_pProxy->SetDelegate(m_pListProxyDelegate); -} -FWL_ERR CFWL_ComboBoxImp::DisForm_Initialize() { - if (CFWL_WidgetImp::Initialize() != FWL_ERR_Succeeded) - return FWL_WGTSTATE_Invisible; // Ditto. - m_pDelegate = new CFWL_ComboBoxImpDelegate(this); - DisForm_InitComboList(); - DisForm_InitComboEdit(); - return FWL_ERR_Succeeded; -} -void CFWL_ComboBoxImp::DisForm_InitComboList() { - if (m_pListBox) { - return; - } - CFWL_WidgetImpProperties prop; - prop.m_pParent = m_pInterface; - prop.m_dwStyles = FWL_WGTSTYLE_Border | FWL_WGTSTYLE_VScroll; - prop.m_dwStates = FWL_WGTSTATE_Invisible; - prop.m_pDataProvider = m_pProperties->m_pDataProvider; - prop.m_pThemeProvider = m_pProperties->m_pThemeProvider; - m_pListBox.reset(IFWL_ListBox::CreateComboList(prop, m_pInterface)); - m_pListBox->Initialize(); -} -void CFWL_ComboBoxImp::DisForm_InitComboEdit() { - if (m_pEdit) { - return; - } - CFWL_WidgetImpProperties prop; - prop.m_pParent = m_pInterface; - prop.m_pThemeProvider = m_pProperties->m_pThemeProvider; - m_pEdit.reset(IFWL_Edit::CreateComboEdit(prop, m_pInterface)); - m_pEdit->Initialize(); - static_cast(m_pEdit->GetImpl())->SetOuter(m_pInterface); -} -void CFWL_ComboBoxImp::DisForm_ShowDropList(FX_BOOL bActivate) { - FX_BOOL bDropList = DisForm_IsDropListShowed(); - if (bDropList == bActivate) { - return; - } - if (bActivate) { - CFWL_EvtCmbPreDropDown preEvent; - preEvent.m_pSrcTarget = m_pInterface; - DispatchEvent(&preEvent); - CFWL_ComboListImp* pComboList = - static_cast(m_pListBox->GetImpl()); - int32_t iItems = pComboList->CountItems(); - if (iItems < 1) { - return; - } - ReSetListItemAlignment(); - pComboList->ChangeSelected(m_iCurSel); - FX_FLOAT fItemHeight = pComboList->GetItemHeigt(); - FX_FLOAT fBorder = GetBorderSize(); - FX_FLOAT fPopupMin = 0.0f; - if (iItems > 3) { - fPopupMin = fItemHeight * 3 + fBorder * 2; - } - FX_FLOAT fPopupMax = fItemHeight * iItems + fBorder * 2; - CFX_RectF rtList; - rtList.left = m_rtClient.left; - rtList.width = m_pProperties->m_rtWidget.width; - rtList.top = 0; - rtList.height = 0; - GetPopupPos(fPopupMin, fPopupMax, m_pProperties->m_rtWidget, rtList); - m_pListBox->SetWidgetRect(rtList); - m_pListBox->Update(); - } else { - SetFocus(TRUE); - } - m_pListBox->SetStates(FWL_WGTSTATE_Invisible, !bActivate); - if (bActivate) { - CFWL_EvtCmbPostDropDown postEvent; - postEvent.m_pSrcTarget = m_pInterface; - DispatchEvent(&postEvent); - } - CFX_RectF rect; - m_pListBox->GetWidgetRect(rect); - rect.Inflate(2, 2); - Repaint(&rect); -} -FX_BOOL CFWL_ComboBoxImp::DisForm_IsDropListShowed() { - return !(m_pListBox->GetStates() & FWL_WGTSTATE_Invisible); -} -FWL_ERR CFWL_ComboBoxImp::DisForm_ModifyStylesEx(FX_DWORD dwStylesExAdded, - FX_DWORD dwStylesExRemoved) { - if (!m_pEdit) { - DisForm_InitComboEdit(); - } - FX_BOOL bAddDropDown = dwStylesExAdded & FWL_STYLEEXT_CMB_DropDown; - FX_BOOL bDelDropDown = dwStylesExRemoved & FWL_STYLEEXT_CMB_DropDown; - dwStylesExRemoved &= ~FWL_STYLEEXT_CMB_DropDown; - m_pProperties->m_dwStyleExes |= FWL_STYLEEXT_CMB_DropDown; - if (bAddDropDown) { - m_pEdit->ModifyStylesEx(0, FWL_STYLEEXT_EDT_ReadOnly); - } else if (bDelDropDown) { - m_pEdit->ModifyStylesEx(FWL_STYLEEXT_EDT_ReadOnly, 0); - } - return CFWL_WidgetImp::ModifyStylesEx(dwStylesExAdded, dwStylesExRemoved); -} -FWL_ERR CFWL_ComboBoxImp::DisForm_Update() { - if (m_iLock) { - return FWL_ERR_Indefinite; - } - if (m_pEdit) { - ReSetEditAlignment(); - } - ReSetTheme(); - Layout(); - return FWL_ERR_Succeeded; -} -FX_DWORD CFWL_ComboBoxImp::DisForm_HitTest(FX_FLOAT fx, FX_FLOAT fy) { - CFX_RectF rect; - rect.Set(0, 0, m_pProperties->m_rtWidget.width - m_rtBtn.width, - m_pProperties->m_rtWidget.height); - if (rect.Contains(fx, fy)) { - return FWL_WGTHITTEST_Edit; - } - if (m_rtBtn.Contains(fx, fy)) { - return FWL_WGTHITTEST_Client; - } - if (DisForm_IsDropListShowed()) { - m_pListBox->GetWidgetRect(rect); - if (rect.Contains(fx, fy)) { - return FWL_WGTHITTEST_Client; - } - } - return FWL_WGTHITTEST_Unknown; -} -FWL_ERR CFWL_ComboBoxImp::DisForm_DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - IFWL_ThemeProvider* pTheme = m_pProperties->m_pThemeProvider; - CFX_Matrix mtOrg; - mtOrg.Set(1, 0, 0, 1, 0, 0); - if (pMatrix) { - mtOrg = *pMatrix; - } - FX_BOOL bListShowed = m_pListBox && DisForm_IsDropListShowed(); - pGraphics->SaveGraphState(); - pGraphics->ConcatMatrix(&mtOrg); - if (!m_rtBtn.IsEmpty(0.1f)) { - CFWL_ThemeBackground param; - param.m_pWidget = m_pInterface; - param.m_iPart = FWL_PART_CMB_DropDownButton; - param.m_dwStates = m_iBtnState; - param.m_pGraphics = pGraphics; - param.m_rtPart = m_rtBtn; - pTheme->DrawBackground(¶m); - } - pGraphics->RestoreGraphState(); - if (m_pEdit) { - CFX_RectF rtEdit; - m_pEdit->GetWidgetRect(rtEdit); - CFX_Matrix mt; - mt.Set(1, 0, 0, 1, rtEdit.left, rtEdit.top); - mt.Concat(mtOrg); - m_pEdit->DrawWidget(pGraphics, &mt); - } - if (bListShowed) { - CFX_RectF rtList; - m_pListBox->GetWidgetRect(rtList); - CFX_Matrix mt; - mt.Set(1, 0, 0, 1, rtList.left, rtList.top); - mt.Concat(mtOrg); - m_pListBox->DrawWidget(pGraphics, &mt); - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ComboBoxImp::DisForm_GetBBox(CFX_RectF& rect) { - rect = m_pProperties->m_rtWidget; - if (m_pListBox && DisForm_IsDropListShowed()) { - CFX_RectF rtList; - m_pListBox->GetWidgetRect(rtList); - rtList.Offset(rect.left, rect.top); - rect.Union(rtList); - } - return FWL_ERR_Succeeded; -} -void CFWL_ComboBoxImp::DisForm_Layout() { - GetClientRect(m_rtClient); - m_rtContent = m_rtClient; - FX_FLOAT* pFWidth = - static_cast(GetThemeCapacity(FWL_WGTCAPACITY_ScrollBarWidth)); - if (!pFWidth) - return; - FX_FLOAT borderWidth = 0; - { borderWidth = FWL_PART_CMB_Border; } - FX_FLOAT fBtn = *pFWidth; - if (!(GetStylesEx() & FWL_STYLEEXT_CMB_ReadOnly)) { - m_rtBtn.Set(m_rtClient.right() - fBtn, m_rtClient.top + borderWidth, - fBtn - borderWidth, m_rtClient.height - 2 * borderWidth); - } - CFX_RectF* pUIMargin = - static_cast(GetThemeCapacity(FWL_WGTCAPACITY_UIMargin)); - if (pUIMargin) { - m_rtContent.Deflate(pUIMargin->left, pUIMargin->top, pUIMargin->width, - pUIMargin->height); - } - FX_BOOL bIsDropDown = IsDropDownStyle(); - if (bIsDropDown && m_pEdit) { - CFX_RectF rtEdit; - rtEdit.Set(m_rtContent.left, m_rtContent.top, m_rtContent.width - fBtn, - m_rtContent.height); - m_pEdit->SetWidgetRect(rtEdit); - if (m_iCurSel >= 0) { - CFX_WideString wsText; - IFWL_ComboBoxDP* pData = - static_cast(m_pProperties->m_pDataProvider); - FWL_HLISTITEM hItem = pData->GetItem(m_pInterface, m_iCurSel); - static_cast(m_pListBox->GetImpl()) - ->GetItemText(hItem, wsText); - m_pEdit->LockUpdate(); - m_pEdit->SetText(wsText); - m_pEdit->UnlockUpdate(); - } - m_pEdit->Update(); - } -} -CFWL_ComboBoxImpDelegate::CFWL_ComboBoxImpDelegate(CFWL_ComboBoxImp* pOwner) - : m_pOwner(pOwner) {} -int32_t CFWL_ComboBoxImpDelegate::OnProcessMessage(CFWL_Message* pMessage) { - if (m_pOwner->m_pWidgetMgr->IsFormDisabled()) { - return DisForm_OnProcessMessage(pMessage); - } - if (!pMessage) - return 0; - FX_DWORD dwMsgCode = pMessage->GetClassID(); - FX_BOOL iRet = 1; - switch (dwMsgCode) { - case FWL_MSGHASH_SetFocus: - case FWL_MSGHASH_KillFocus: { - OnFocusChanged(pMessage, dwMsgCode == FWL_MSGHASH_SetFocus); - break; - } - case FWL_MSGHASH_Mouse: { - CFWL_MsgMouse* pMsg = static_cast(pMessage); - FX_DWORD dwCmd = pMsg->m_dwCmd; - switch (dwCmd) { - case FWL_MSGMOUSECMD_LButtonDown: { - OnLButtonDown(pMsg); - break; - } - case FWL_MSGMOUSECMD_LButtonUp: { - OnLButtonUp(pMsg); - break; - } - case FWL_MSGMOUSECMD_MouseMove: { - OnMouseMove(pMsg); - break; - } - case FWL_MSGMOUSECMD_MouseLeave: { - OnMouseLeave(pMsg); - break; - } - default: {} - } - break; - } - case FWL_MSGHASH_Key: { - OnKey(static_cast(pMessage)); - break; - } - default: { iRet = 0; } - } - CFWL_WidgetImpDelegate::OnProcessMessage(pMessage); - return iRet; -} -FWL_ERR CFWL_ComboBoxImpDelegate::OnProcessEvent(CFWL_Event* pEvent) { - FX_DWORD dwFlag = pEvent->GetClassID(); - if (dwFlag == FWL_EVTHASH_LTB_DrawItem) { - CFWL_EvtLtbDrawItem* pDrawItemEvent = - static_cast(pEvent); - CFWL_EvtCmbDrawItem pTemp; - pTemp.m_pSrcTarget = m_pOwner->m_pInterface; - pTemp.m_pGraphics = pDrawItemEvent->m_pGraphics; - pTemp.m_index = pDrawItemEvent->m_index; - pTemp.m_rtItem = pDrawItemEvent->m_rect; - m_pOwner->DispatchEvent(&pTemp); - } else if (dwFlag == FWL_EVTHASH_Scroll) { - CFWL_EvtScroll* pScrollEvent = static_cast(pEvent); - CFWL_EvtScroll pScrollEv; - pScrollEv.m_pSrcTarget = m_pOwner->m_pInterface; - pScrollEv.m_iScrollCode = pScrollEvent->m_iScrollCode; - pScrollEv.m_fPos = pScrollEvent->m_fPos; - m_pOwner->DispatchEvent(&pScrollEv); - } else if (dwFlag == FWL_EVTHASH_EDT_TextChanged) { - CFWL_EvtEdtTextChanged* pTextChangedEvent = - static_cast(pEvent); - CFWL_EvtCmbEditChanged pTemp; - pTemp.m_pSrcTarget = m_pOwner->m_pInterface; - pTemp.wsInsert = pTextChangedEvent->wsInsert; - pTemp.wsDelete = pTextChangedEvent->wsDelete; - pTemp.nChangeType = pTextChangedEvent->nChangeType; - m_pOwner->DispatchEvent(&pTemp); - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ComboBoxImpDelegate::OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - return m_pOwner->DrawWidget(pGraphics, pMatrix); -} -void CFWL_ComboBoxImpDelegate::OnFocusChanged(CFWL_Message* pMsg, - FX_BOOL bSet) { - IFWL_Target* pDstTarget = pMsg->m_pDstTarget; - IFWL_Target* pSrcTarget = pMsg->m_pSrcTarget; - FX_BOOL bDropDown = m_pOwner->IsDropDownStyle(); - if (bSet) { - m_pOwner->m_pProperties->m_dwStates |= FWL_WGTSTATE_Focused; - if (bDropDown && pSrcTarget != m_pOwner->m_pListBox.get()) { - if (!m_pOwner->m_pEdit) - return; - static_cast(m_pOwner->m_pEdit->GetImpl()) - ->SetSelected(); - } else { - m_pOwner->Repaint(&m_pOwner->m_rtClient); - } - } else { - m_pOwner->m_pProperties->m_dwStates &= ~FWL_WGTSTATE_Focused; - if (bDropDown && pDstTarget != m_pOwner->m_pListBox.get()) { - if (!m_pOwner->m_pEdit) - return; - static_cast(m_pOwner->m_pEdit->GetImpl()) - ->FlagFocus(FALSE); - static_cast(m_pOwner->m_pEdit->GetImpl()) - ->ClearSelected(); - } else { - m_pOwner->Repaint(&m_pOwner->m_rtClient); - } - } -} -void CFWL_ComboBoxImpDelegate::OnLButtonDown(CFWL_MsgMouse* pMsg) { - if (m_pOwner->m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled) { - return; - } - FX_BOOL bDropDown = m_pOwner->IsDropDownStyle(); - CFX_RectF& rtBtn = bDropDown ? m_pOwner->m_rtBtn : m_pOwner->m_rtClient; - FX_BOOL bClickBtn = rtBtn.Contains(pMsg->m_fx, pMsg->m_fy); - if (bClickBtn) { - if (bDropDown && m_pOwner->m_pEdit) { - m_pOwner->MatchEditText(); - } - m_pOwner->m_bLButtonDown = TRUE; - m_pOwner->m_iBtnState = FWL_PARTSTATE_CMB_Pressed; - m_pOwner->Repaint(&m_pOwner->m_rtClient); - m_pOwner->ShowDropList(TRUE); - m_pOwner->m_iBtnState = FWL_PARTSTATE_CMB_Normal; - m_pOwner->Repaint(&m_pOwner->m_rtClient); - } -} -void CFWL_ComboBoxImpDelegate::OnLButtonUp(CFWL_MsgMouse* pMsg) { - m_pOwner->m_bLButtonDown = FALSE; - if (m_pOwner->m_rtBtn.Contains(pMsg->m_fx, pMsg->m_fy)) { - m_pOwner->m_iBtnState = FWL_PARTSTATE_CMB_Hovered; - } else { - m_pOwner->m_iBtnState = FWL_PARTSTATE_CMB_Normal; - } - m_pOwner->Repaint(&m_pOwner->m_rtBtn); -} -void CFWL_ComboBoxImpDelegate::OnMouseMove(CFWL_MsgMouse* pMsg) { - int32_t iOldState = m_pOwner->m_iBtnState; - if (m_pOwner->m_rtBtn.Contains(pMsg->m_fx, pMsg->m_fy)) { - m_pOwner->m_iBtnState = m_pOwner->m_bLButtonDown - ? FWL_PARTSTATE_CMB_Pressed - : FWL_PARTSTATE_CMB_Hovered; - } else { - m_pOwner->m_iBtnState = FWL_PARTSTATE_CMB_Normal; - } - if ((iOldState != m_pOwner->m_iBtnState) && - !((m_pOwner->m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled) == - FWL_WGTSTATE_Disabled)) { - m_pOwner->Repaint(&m_pOwner->m_rtBtn); - } -} -void CFWL_ComboBoxImpDelegate::OnMouseLeave(CFWL_MsgMouse* pMsg) { - if (!m_pOwner->IsDropListShowed() && - !((m_pOwner->m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled) == - FWL_WGTSTATE_Disabled)) { - m_pOwner->m_iBtnState = FWL_PARTSTATE_CMB_Normal; - m_pOwner->Repaint(&m_pOwner->m_rtBtn); - } -} -void CFWL_ComboBoxImpDelegate::OnKey(CFWL_MsgKey* pMsg) { - FX_DWORD dwKeyCode = pMsg->m_dwKeyCode; - if (dwKeyCode == FWL_VKEY_Tab) { - m_pOwner->DispatchKeyEvent(pMsg); - return; - } - if (pMsg->m_pDstTarget == m_pOwner->m_pInterface) - DoSubCtrlKey(pMsg); -} -void CFWL_ComboBoxImpDelegate::DoSubCtrlKey(CFWL_MsgKey* pMsg) { - FX_DWORD dwKeyCode = pMsg->m_dwKeyCode; - const bool bUp = dwKeyCode == FWL_VKEY_Up; - const bool bDown = dwKeyCode == FWL_VKEY_Down; - if (bUp || bDown) { - int32_t iCount = - static_cast(m_pOwner->m_pListBox->GetImpl()) - ->CountItems(); - if (iCount < 1) { - return; - } - FX_BOOL bMatchEqual = FALSE; - int32_t iCurSel = m_pOwner->m_iCurSel; - FX_BOOL bDropDown = m_pOwner->IsDropDownStyle(); - if (bDropDown && m_pOwner->m_pEdit) { - CFX_WideString wsText; - m_pOwner->m_pEdit->GetText(wsText); - iCurSel = static_cast(m_pOwner->m_pListBox->GetImpl()) - ->MatchItem(wsText); - if (iCurSel >= 0) { - CFX_WideString wsTemp; - IFWL_ComboBoxDP* pData = static_cast( - m_pOwner->m_pProperties->m_pDataProvider); - FWL_HLISTITEM hItem = pData->GetItem(m_pOwner->m_pInterface, iCurSel); - static_cast(m_pOwner->m_pListBox->GetImpl()) - ->GetItemText(hItem, wsTemp); - bMatchEqual = wsText.Equal(wsTemp); - } - } - if (iCurSel < 0) { - iCurSel = 0; - } else if (!bDropDown || bMatchEqual) { - if ((bUp && iCurSel == 0) || (bDown && iCurSel == iCount - 1)) { - return; - } - if (bUp) { - iCurSel--; - } else { - iCurSel++; - } - } - m_pOwner->m_iCurSel = iCurSel; - if (bDropDown && m_pOwner->m_pEdit) { - m_pOwner->SynchrEditText(m_pOwner->m_iCurSel); - } else { - m_pOwner->Repaint(&m_pOwner->m_rtClient); - } - return; - } - FX_BOOL bDropDown = m_pOwner->IsDropDownStyle(); - if (bDropDown) { - IFWL_WidgetDelegate* pDelegate = m_pOwner->m_pEdit->SetDelegate(NULL); - pDelegate->OnProcessMessage(pMsg); - } -} -int32_t CFWL_ComboBoxImpDelegate::DisForm_OnProcessMessage( - CFWL_Message* pMessage) { - if (!pMessage) - return 0; - FX_DWORD dwMsgCode = pMessage->GetClassID(); - FX_BOOL backDefault = TRUE; - switch (dwMsgCode) { - case FWL_MSGHASH_SetFocus: - case FWL_MSGHASH_KillFocus: { - backDefault = FALSE; - DisForm_OnFocusChanged(pMessage, dwMsgCode == FWL_MSGHASH_SetFocus); - break; - } - case FWL_MSGHASH_Mouse: { - backDefault = FALSE; - CFWL_MsgMouse* pMsg = static_cast(pMessage); - FX_DWORD dwCmd = pMsg->m_dwCmd; - switch (dwCmd) { - case FWL_MSGMOUSECMD_LButtonDown: { - DisForm_OnLButtonDown(pMsg); - break; - } - case FWL_MSGMOUSECMD_LButtonUp: { - OnLButtonUp(pMsg); - break; - } - default: {} - } - break; - } - case FWL_MSGHASH_Key: { - backDefault = FALSE; - CFWL_MsgKey* pKey = static_cast(pMessage); - if (pKey->m_dwCmd == FWL_MSGKEYCMD_KeyUp) { - break; - } - if (m_pOwner->DisForm_IsDropListShowed() && - pKey->m_dwCmd == FWL_MSGKEYCMD_KeyDown) { - FX_DWORD dwKeyCode = pKey->m_dwKeyCode; - FX_BOOL bListKey = - dwKeyCode == FWL_VKEY_Up || dwKeyCode == FWL_VKEY_Down || - dwKeyCode == FWL_VKEY_Return || dwKeyCode == FWL_VKEY_Escape; - if (bListKey) { - IFWL_WidgetDelegate* pDelegate = - m_pOwner->m_pListBox->SetDelegate(NULL); - pDelegate->OnProcessMessage(pMessage); - break; - } - } - DisForm_OnKey(pKey); - break; - } - default: {} - } - if (!backDefault) { - return 1; - } - return CFWL_WidgetImpDelegate::OnProcessMessage(pMessage); -} -void CFWL_ComboBoxImpDelegate::DisForm_OnLButtonDown(CFWL_MsgMouse* pMsg) { - FX_BOOL bDropDown = m_pOwner->DisForm_IsDropListShowed(); - CFX_RectF& rtBtn = bDropDown ? m_pOwner->m_rtBtn : m_pOwner->m_rtClient; - FX_BOOL bClickBtn = rtBtn.Contains(pMsg->m_fx, pMsg->m_fy); - if (bClickBtn) { - if (m_pOwner->DisForm_IsDropListShowed()) { - m_pOwner->DisForm_ShowDropList(FALSE); - return; - } - { - if (m_pOwner->m_pEdit) { - m_pOwner->MatchEditText(); - } - m_pOwner->DisForm_ShowDropList(TRUE); - } - } -} -void CFWL_ComboBoxImpDelegate::DisForm_OnFocusChanged(CFWL_Message* pMsg, - FX_BOOL bSet) { - if (bSet) { - m_pOwner->m_pProperties->m_dwStates |= FWL_WGTSTATE_Focused; - if ((m_pOwner->m_pEdit->GetStates() & FWL_WGTSTATE_Focused) == 0) { - CFWL_MsgSetFocus msg; - msg.m_pDstTarget = m_pOwner->m_pEdit.get(); - msg.m_pSrcTarget = NULL; - IFWL_WidgetDelegate* pDelegate = m_pOwner->m_pEdit->SetDelegate(NULL); - pDelegate->OnProcessMessage(&msg); - } - } else { - m_pOwner->m_pProperties->m_dwStates &= ~FWL_WGTSTATE_Focused; - m_pOwner->DisForm_ShowDropList(FALSE); - CFWL_MsgKillFocus msg; - msg.m_pDstTarget = NULL; - msg.m_pSrcTarget = m_pOwner->m_pEdit.get(); - IFWL_WidgetDelegate* pDelegate = m_pOwner->m_pEdit->SetDelegate(NULL); - pDelegate->OnProcessMessage(&msg); - } -} -void CFWL_ComboBoxImpDelegate::DisForm_OnKey(CFWL_MsgKey* pMsg) { - FX_DWORD dwKeyCode = pMsg->m_dwKeyCode; - const bool bUp = dwKeyCode == FWL_VKEY_Up; - const bool bDown = dwKeyCode == FWL_VKEY_Down; - if (bUp || bDown) { - CFWL_ComboListImp* pComboList = - static_cast(m_pOwner->m_pListBox->GetImpl()); - int32_t iCount = pComboList->CountItems(); - if (iCount < 1) { - return; - } - FX_BOOL bMatchEqual = FALSE; - int32_t iCurSel = m_pOwner->m_iCurSel; - if (m_pOwner->m_pEdit) { - CFX_WideString wsText; - m_pOwner->m_pEdit->GetText(wsText); - iCurSel = pComboList->MatchItem(wsText); - if (iCurSel >= 0) { - CFX_WideString wsTemp; - FWL_HLISTITEM item = m_pOwner->m_pListBox->GetSelItem(iCurSel); - m_pOwner->m_pListBox->GetItemText(item, wsTemp); - bMatchEqual = wsText.Equal(wsTemp); - } - } - if (iCurSel < 0) { - iCurSel = 0; - } else if (bMatchEqual) { - if ((bUp && iCurSel == 0) || (bDown && iCurSel == iCount - 1)) { - return; - } - if (bUp) { - iCurSel--; - } else { - iCurSel++; - } - } - m_pOwner->m_iCurSel = iCurSel; - m_pOwner->SynchrEditText(m_pOwner->m_iCurSel); - return; - } - if (m_pOwner->m_pEdit) { - IFWL_WidgetDelegate* pDelegate = m_pOwner->m_pEdit->SetDelegate(NULL); - pDelegate->OnProcessMessage(pMsg); - } -} -CFWL_ComboProxyImpDelegate::CFWL_ComboProxyImpDelegate( - IFWL_Form* pForm, - CFWL_ComboBoxImp* pComboBox) - : m_bLButtonDown(FALSE), - m_bLButtonUpSelf(FALSE), - m_fStartPos(0), - m_pForm(pForm), - m_pComboBox(pComboBox) {} -int32_t CFWL_ComboProxyImpDelegate::OnProcessMessage(CFWL_Message* pMessage) { - if (!pMessage) - return 0; - FX_DWORD dwMsgCode = pMessage->GetClassID(); - if (dwMsgCode == FWL_MSGHASH_Mouse) { - CFWL_MsgMouse* pMsg = static_cast(pMessage); - FX_DWORD dwCmd = pMsg->m_dwCmd; - switch (dwCmd) { - case FWL_MSGMOUSECMD_LButtonDown: { - OnLButtonDown(pMsg); - break; - } - case FWL_MSGMOUSECMD_LButtonUp: { - OnLButtonUp(pMsg); - break; - } - case FWL_MSGMOUSECMD_MouseMove: { - OnMouseMove(pMsg); - break; - } - default: {} - } - } - if (dwMsgCode == FWL_MSGHASH_Deactivate) { - OnDeactive(static_cast(pMessage)); - } - if (dwMsgCode == FWL_MSGHASH_KillFocus || dwMsgCode == FWL_MSGHASH_SetFocus) { - OnFocusChanged(static_cast(pMessage), - dwMsgCode == FWL_MSGHASH_SetFocus); - } - return CFWL_WidgetImpDelegate::OnProcessMessage(pMessage); -} -FWL_ERR CFWL_ComboProxyImpDelegate::OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - m_pComboBox->DrawStretchHandler(pGraphics, pMatrix); - return FWL_ERR_Succeeded; -} -void CFWL_ComboProxyImpDelegate::OnLButtonDown(CFWL_MsgMouse* pMsg) { - IFWL_NoteThread* pThread = m_pForm->GetOwnerThread(); - if (!pThread) - return; - CFWL_NoteDriver* pDriver = - static_cast(pThread->GetNoteDriver()); - CFX_RectF rtWidget; - m_pForm->GetWidgetRect(rtWidget); - rtWidget.left = rtWidget.top = 0; - if (rtWidget.Contains(pMsg->m_fx, pMsg->m_fy)) { - m_bLButtonDown = TRUE; - pDriver->SetGrab(m_pForm, TRUE); - } else { - m_bLButtonDown = FALSE; - pDriver->SetGrab(m_pForm, FALSE); - m_pComboBox->ShowDropList(FALSE); - } -} -void CFWL_ComboProxyImpDelegate::OnLButtonUp(CFWL_MsgMouse* pMsg) { - m_bLButtonDown = FALSE; - IFWL_NoteThread* pThread = m_pForm->GetOwnerThread(); - if (!pThread) - return; - CFWL_NoteDriver* pDriver = - static_cast(pThread->GetNoteDriver()); - pDriver->SetGrab(m_pForm, FALSE); - if (m_bLButtonUpSelf) { - CFX_RectF rect; - m_pForm->GetWidgetRect(rect); - rect.left = rect.top = 0; - if (!rect.Contains(pMsg->m_fx, pMsg->m_fy) && - m_pComboBox->IsDropListShowed()) { - m_pComboBox->ShowDropList(FALSE); - } - } else { - m_bLButtonUpSelf = TRUE; - } -} -void CFWL_ComboProxyImpDelegate::OnMouseMove(CFWL_MsgMouse* pMsg) {} -void CFWL_ComboProxyImpDelegate::OnDeactive(CFWL_MsgDeactivate* pMsg) { - m_pComboBox->ShowDropList(FALSE); -} -void CFWL_ComboProxyImpDelegate::OnFocusChanged(CFWL_MsgKillFocus* pMsg, - FX_BOOL bSet) { - if (!bSet) { - if (pMsg->m_pSetFocus == NULL) { - m_pComboBox->ShowDropList(FALSE); - } - } -} diff --git a/xfa/src/fwl/basewidget/fwl_comboboximp.h b/xfa/src/fwl/basewidget/fwl_comboboximp.h deleted file mode 100644 index 000e0afe9c..0000000000 --- a/xfa/src/fwl/basewidget/fwl_comboboximp.h +++ /dev/null @@ -1,237 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FWL_BASEWIDGET_FWL_COMBOBOXIMP_H_ -#define XFA_SRC_FWL_BASEWIDGET_FWL_COMBOBOXIMP_H_ - -#include - -#include "xfa/src/fwl/basewidget/fwl_editimp.h" -#include "xfa/src/fwl/basewidget/fwl_listboximp.h" - -class CFWL_WidgetImp; -class CFWL_WidgetImpProperties; -class CFWL_WidgetImpDelegate; -class CFWL_ListBoxImp; -class CFWL_ListBoxImpDelegate; -class CFWL_FormProxyImp; -class IFWL_Widget; -class CFWL_ComboEditImp; -class CFWL_ComboEditImpDelegate; -class CFWL_ComboListImp; -class CFWL_ComboListImpDelegate; -class CFWL_ComboBoxImp; -class CFWL_ComboBoxImpDelegate; -class CFWL_ComboProxyImpDelegate; -class CFWL_ComboEditImp : public CFWL_EditImp { - public: - CFWL_ComboEditImp(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter); - - void ClearSelected(); - void SetSelected(); - void EndCaret(); - void FlagFocus(FX_BOOL bSet); - - protected: - void SetComboBoxFocus(FX_BOOL bSet); - CFWL_ComboBoxImp* m_pOuter; - friend class CFWL_ComboEditImpDelegate; -}; -class CFWL_ComboEditImpDelegate : public CFWL_EditImpDelegate { - public: - CFWL_ComboEditImpDelegate(CFWL_ComboEditImp* pOwner); - int32_t OnProcessMessage(CFWL_Message* pMessage) override; - - protected: - CFWL_ComboEditImp* m_pOwner; -}; -class CFWL_ComboListImp : public CFWL_ListBoxImp { - public: - CFWL_ComboListImp(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter); - virtual FWL_ERR Initialize(); - virtual FWL_ERR Finalize(); - int32_t MatchItem(const CFX_WideString& wsMatch); - void ChangeSelected(int32_t iSel); - int32_t CountItems(); - void GetItemRect(int32_t nIndex, CFX_RectF& rtItem); - void ClientToOuter(FX_FLOAT& fx, FX_FLOAT& fy); - void SetFocus(FX_BOOL bSet); - FX_BOOL m_bNotifyOwner; - friend class CFWL_ComboListImpDelegate; - friend class CFWL_ComboBoxImp; -}; -class CFWL_ComboListImpDelegate : public CFWL_ListBoxImpDelegate { - public: - CFWL_ComboListImpDelegate(CFWL_ComboListImp* pOwner); - int32_t OnProcessMessage(CFWL_Message* pMessage) override; - - protected: - void OnDropListFocusChanged(CFWL_Message* pMsg, FX_BOOL bSet = TRUE); - int32_t OnDropListMouseMove(CFWL_MsgMouse* pMsg); - int32_t OnDropListLButtonDown(CFWL_MsgMouse* pMsg); - int32_t OnDropListLButtonUp(CFWL_MsgMouse* pMsg); - int32_t OnDropListKey(CFWL_MsgKey* pKey); - void OnDropListKeyDown(CFWL_MsgKey* pKey); - CFWL_ComboListImp* m_pOwner; -}; -class CFWL_ComboBoxImp : public CFWL_WidgetImp { - public: - CFWL_ComboBoxImp(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter); - virtual ~CFWL_ComboBoxImp(); - virtual FWL_ERR GetClassName(CFX_WideString& wsClass) const; - virtual FX_DWORD GetClassID() const; - virtual FWL_ERR Initialize(); - virtual FWL_ERR Finalize(); - virtual FWL_ERR GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize = FALSE); - virtual FWL_ERR ModifyStylesEx(FX_DWORD dwStylesExAdded, - FX_DWORD dwStylesExRemoved); - virtual FWL_ERR SetStates(FX_DWORD dwStates, FX_BOOL bSet = TRUE); - virtual FWL_ERR Update(); - virtual FX_DWORD HitTest(FX_FLOAT fx, FX_FLOAT fy); - virtual FWL_ERR DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL); - virtual FWL_ERR SetThemeProvider(IFWL_ThemeProvider* pThemeProvider); - virtual int32_t GetCurSel(); - virtual FWL_ERR SetCurSel(int32_t iSel); - virtual FWL_ERR SetEditText(const CFX_WideString& wsText); - virtual int32_t GetEditTextLength() const; - virtual FWL_ERR GetEditText(CFX_WideString& wsText, - int32_t nStart = 0, - int32_t nCount = -1) const; - virtual FWL_ERR SetEditSelRange(int32_t nStart, int32_t nCount = -1); - virtual int32_t GetEditSelRange(int32_t nIndex, int32_t& nStart); - virtual int32_t GetEditLimit(); - virtual FWL_ERR SetEditLimit(int32_t nLimit); - virtual FWL_ERR EditDoClipboard(int32_t iCmd); - virtual FX_BOOL EditRedo(const CFX_ByteStringC& bsRecord); - virtual FX_BOOL EditUndo(const CFX_ByteStringC& bsRecord); - virtual IFWL_ListBox* GetListBoxt(); - virtual FX_BOOL AfterFocusShowDropList(); - virtual FX_ERR OpenDropDownList(FX_BOOL bActivate); - virtual FX_BOOL EditCanUndo(); - virtual FX_BOOL EditCanRedo(); - virtual FX_BOOL EditUndo(); - virtual FX_BOOL EditRedo(); - virtual FX_BOOL EditCanCopy(); - virtual FX_BOOL EditCanCut(); - virtual FX_BOOL EditCanSelectAll(); - virtual FX_BOOL EditCopy(CFX_WideString& wsCopy); - virtual FX_BOOL EditCut(CFX_WideString& wsCut); - virtual FX_BOOL EditPaste(const CFX_WideString& wsPaste); - virtual FX_BOOL EditSelectAll(); - virtual FX_BOOL EditDelete(); - virtual FX_BOOL EditDeSelect(); - virtual FWL_ERR GetBBox(CFX_RectF& rect); - virtual FWL_ERR EditModifyStylesEx(FX_DWORD dwStylesExAdded, - FX_DWORD dwStylesExRemoved); - - protected: - void DrawStretchHandler(CFX_Graphics* pGraphics, const CFX_Matrix* pMatrix); - FX_FLOAT GetListHeight(); - void ShowDropList(FX_BOOL bActivate); - FX_BOOL IsDropListShowed(); - FX_BOOL IsDropDownStyle() const; - void MatchEditText(); - void SynchrEditText(int32_t iListItem); - void Layout(); - void ReSetTheme(); - void ReSetEditAlignment(); - void ReSetListItemAlignment(); - void ProcessSelChanged(FX_BOOL bLButtonUp); - void InitProxyForm(); - FWL_ERR DisForm_Initialize(); - void DisForm_InitComboList(); - void DisForm_InitComboEdit(); - void DisForm_ShowDropList(FX_BOOL bActivate); - FX_BOOL DisForm_IsDropListShowed(); - FWL_ERR DisForm_ModifyStylesEx(FX_DWORD dwStylesExAdded, - FX_DWORD dwStylesExRemoved); - FWL_ERR DisForm_Update(); - FX_DWORD DisForm_HitTest(FX_FLOAT fx, FX_FLOAT fy); - FWL_ERR DisForm_DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL); - FWL_ERR DisForm_GetBBox(CFX_RectF& rect); - void DisForm_Layout(); - - CFX_RectF m_rtClient; - CFX_RectF m_rtContent; - CFX_RectF m_rtBtn; - CFX_RectF m_rtList; - CFX_RectF m_rtProxy; - CFX_RectF m_rtHandler; - std::unique_ptr m_pEdit; - std::unique_ptr m_pListBox; - IFWL_Form* m_pForm; - FX_BOOL m_bLButtonDown; - FX_BOOL m_bUpFormHandler; - int32_t m_iCurSel; - int32_t m_iBtnState; - FX_FLOAT m_fComboFormHandler; - FX_FLOAT m_fItemHeight; - FX_BOOL m_bNeedShowList; - CFWL_FormProxyImp* m_pProxy; - CFWL_ComboProxyImpDelegate* m_pListProxyDelegate; - - friend class CFWL_ComboListImp; - friend class CFWL_ComboEditImp; - friend class CFWL_ComboEditImpDelegate; - friend class CFWL_ComboListImpDelegate; - friend class CFWL_ComboBoxImpDelegate; - friend class CFWL_ComboProxyImpDelegate; -}; -class CFWL_ComboBoxImpDelegate : public CFWL_WidgetImpDelegate { - public: - CFWL_ComboBoxImpDelegate(CFWL_ComboBoxImp* pOwner); - int32_t OnProcessMessage(CFWL_Message* pMessage) override; - FWL_ERR OnProcessEvent(CFWL_Event* pEvent) override; - FWL_ERR OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL) override; - - protected: - void OnFocusChanged(CFWL_Message* pMsg, FX_BOOL bSet = TRUE); - void OnLButtonDown(CFWL_MsgMouse* pMsg); - void OnLButtonUp(CFWL_MsgMouse* pMsg); - void OnMouseMove(CFWL_MsgMouse* pMsg); - void OnMouseLeave(CFWL_MsgMouse* pMsg); - void OnKey(CFWL_MsgKey* pMsg); - void DoSubCtrlKey(CFWL_MsgKey* pMsg); - - protected: - int32_t DisForm_OnProcessMessage(CFWL_Message* pMessage); - void DisForm_OnLButtonDown(CFWL_MsgMouse* pMsg); - void DisForm_OnFocusChanged(CFWL_Message* pMsg, FX_BOOL bSet = TRUE); - void DisForm_OnKey(CFWL_MsgKey* pMsg); - - protected: - CFWL_ComboBoxImp* m_pOwner; - friend class CFWL_ComboEditImpDelegate; - friend class CFWL_ComboListImpDelegate; -}; -class CFWL_ComboProxyImpDelegate : public CFWL_WidgetImpDelegate { - public: - CFWL_ComboProxyImpDelegate(IFWL_Form* pForm, CFWL_ComboBoxImp* pComboBox); - int32_t OnProcessMessage(CFWL_Message* pMessage) override; - FWL_ERR OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL) override; - void Reset() { m_bLButtonUpSelf = FALSE; } - - protected: - void OnLButtonDown(CFWL_MsgMouse* pMsg); - void OnLButtonUp(CFWL_MsgMouse* pMsg); - void OnMouseMove(CFWL_MsgMouse* pMsg); - void OnDeactive(CFWL_MsgDeactivate* pMsg); - void OnFocusChanged(CFWL_MsgKillFocus* pMsg, FX_BOOL bSet); - FX_BOOL m_bLButtonDown; - FX_BOOL m_bLButtonUpSelf; - FX_FLOAT m_fStartPos; - IFWL_Form* m_pForm; - CFWL_ComboBoxImp* m_pComboBox; -}; - -#endif // XFA_SRC_FWL_BASEWIDGET_FWL_COMBOBOXIMP_H_ diff --git a/xfa/src/fwl/basewidget/fwl_datetimepickerimp.cpp b/xfa/src/fwl/basewidget/fwl_datetimepickerimp.cpp deleted file mode 100644 index c969418c3a..0000000000 --- a/xfa/src/fwl/basewidget/fwl_datetimepickerimp.cpp +++ /dev/null @@ -1,1161 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fwl/basewidget/fwl_datetimepickerimp.h" - -#include "xfa/include/fwl/basewidget/fwl_spinbutton.h" -#include "xfa/src/fwl/basewidget/fwl_editimp.h" -#include "xfa/src/fwl/basewidget/fwl_formproxyimp.h" -#include "xfa/src/fwl/basewidget/fwl_monthcalendarimp.h" -#include "xfa/src/fwl/core/fwl_formimp.h" -#include "xfa/src/fwl/core/fwl_noteimp.h" -#include "xfa/src/fwl/core/fwl_panelimp.h" -#include "xfa/src/fwl/core/fwl_targetimp.h" -#include "xfa/src/fwl/core/fwl_widgetimp.h" -#include "xfa/src/fwl/core/fwl_widgetmgrimp.h" - -#define FWL_DTP_WIDTH 100 -#define FWL_DTP_HEIGHT 20 - -// static -IFWL_DateTimePicker* IFWL_DateTimePicker::Create( - const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) { - IFWL_DateTimePicker* pDateTimePicker = new IFWL_DateTimePicker; - CFWL_DateTimePickerImp* pDateTimePickerImpl = - new CFWL_DateTimePickerImp(properties, pOuter); - pDateTimePicker->SetImpl(pDateTimePickerImpl); - pDateTimePickerImpl->SetInterface(pDateTimePicker); - return pDateTimePicker; -} - -// Static -IFWL_DateTimeForm* IFWL_DateTimeForm::Create( - const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) { - IFWL_DateTimeForm* pDateTimeForm = new IFWL_DateTimeForm; - CFWL_FormProxyImp* pFormProxyImpl = new CFWL_FormProxyImp(properties, pOuter); - pDateTimeForm->SetImpl(pFormProxyImpl); - pFormProxyImpl->SetInterface(pDateTimeForm); - return pDateTimeForm; -} - -// static -IFWL_DateTimeCalender* IFWL_DateTimeCalender::Create( - const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) { - IFWL_DateTimeCalender* pDateTimeCalendar = new IFWL_DateTimeCalender; - CFWL_DateTimeCalendar* pDateTimeCalendarImpl = - new CFWL_DateTimeCalendar(properties, pOuter); - pDateTimeCalendar->SetImpl(pDateTimeCalendarImpl); - pDateTimeCalendarImpl->SetInterface(pDateTimeCalendar); - return pDateTimeCalendar; -} - -// static -IFWL_DateTimeEdit* IFWL_DateTimeEdit::Create( - const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) { - IFWL_DateTimeEdit* pDateTimeEdit = new IFWL_DateTimeEdit; - CFWL_DateTimeEdit* pDateTimeEditImpl = - new CFWL_DateTimeEdit(properties, pOuter); - pDateTimeEdit->SetImpl(pDateTimeEditImpl); - pDateTimeEditImpl->SetInterface(pDateTimeEdit); - return pDateTimeEdit; -} - -IFWL_DateTimePicker::IFWL_DateTimePicker() {} -int32_t IFWL_DateTimePicker::CountSelRanges() { - return static_cast(GetImpl()) - ->GetDataTimeEdit() - ->CountSelRanges(); -} -int32_t IFWL_DateTimePicker::GetSelRange(int32_t nIndex, int32_t& nStart) { - return static_cast(GetImpl()) - ->GetDataTimeEdit() - ->GetSelRange(nIndex, nStart); -} -FWL_ERR IFWL_DateTimePicker::GetCurSel(int32_t& iYear, - int32_t& iMonth, - int32_t& iDay) { - return static_cast(GetImpl()) - ->GetCurSel(iYear, iMonth, iDay); -} -FWL_ERR IFWL_DateTimePicker::SetCurSel(int32_t iYear, - int32_t iMonth, - int32_t iDay) { - return static_cast(GetImpl()) - ->SetCurSel(iYear, iMonth, iDay); -} -FWL_ERR IFWL_DateTimePicker::SetEditText(const CFX_WideString& wsText) { - return static_cast(GetImpl())->SetEditText(wsText); -} -FWL_ERR IFWL_DateTimePicker::GetEditText(CFX_WideString& wsText, - int32_t nStart, - int32_t nCount) const { - return static_cast(GetImpl()) - ->GetEditText(wsText, nStart, nCount); -} -FX_BOOL IFWL_DateTimePicker::CanUndo() { - return static_cast(GetImpl())->CanUndo(); -} -FX_BOOL IFWL_DateTimePicker::CanRedo() { - return static_cast(GetImpl())->CanRedo(); -} -FX_BOOL IFWL_DateTimePicker::Undo() { - return static_cast(GetImpl())->Undo(); -} -FX_BOOL IFWL_DateTimePicker::Redo() { - return static_cast(GetImpl())->Redo(); -} -FX_BOOL IFWL_DateTimePicker::CanCopy() { - return static_cast(GetImpl())->CanCopy(); -} -FX_BOOL IFWL_DateTimePicker::CanCut() { - return static_cast(GetImpl())->CanCut(); -} -FX_BOOL IFWL_DateTimePicker::CanSelectAll() { - return static_cast(GetImpl())->CanSelectAll(); -} -FX_BOOL IFWL_DateTimePicker::Copy(CFX_WideString& wsCopy) { - return static_cast(GetImpl())->Copy(wsCopy); -} -FX_BOOL IFWL_DateTimePicker::Cut(CFX_WideString& wsCut) { - return static_cast(GetImpl())->Cut(wsCut); -} -FX_BOOL IFWL_DateTimePicker::Paste(const CFX_WideString& wsPaste) { - return static_cast(GetImpl())->Paste(wsPaste); -} -FX_BOOL IFWL_DateTimePicker::SelectAll() { - return static_cast(GetImpl())->SelectAll(); -} -FX_BOOL IFWL_DateTimePicker::Delete() { - return static_cast(GetImpl())->Delete(); -} -FX_BOOL IFWL_DateTimePicker::DeSelect() { - return static_cast(GetImpl())->DeSelect(); -} -FWL_ERR IFWL_DateTimePicker::GetBBox(CFX_RectF& rect) { - return static_cast(GetImpl())->GetBBox(rect); -} -FWL_ERR IFWL_DateTimePicker::SetEditLimit(int32_t nLimit) { - return static_cast(GetImpl())->SetEditLimit(nLimit); -} -FWL_ERR IFWL_DateTimePicker::ModifyEditStylesEx(FX_DWORD dwStylesExAdded, - FX_DWORD dwStylesExRemoved) { - return static_cast(GetImpl()) - ->ModifyEditStylesEx(dwStylesExAdded, dwStylesExRemoved); -} -CFWL_DateTimeEdit::CFWL_DateTimeEdit(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) - : CFWL_EditImp(properties, pOuter) {} -FWL_ERR CFWL_DateTimeEdit::Initialize() { - m_pDelegate = new CFWL_DateTimeEditImpDelegate(this); - if (CFWL_EditImp::Initialize() != FWL_ERR_Succeeded) - return FWL_ERR_Indefinite; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_DateTimeEdit::Finalize() { - delete m_pDelegate; - m_pDelegate = nullptr; - return CFWL_EditImp::Finalize(); -} -CFWL_DateTimeEditImpDelegate::CFWL_DateTimeEditImpDelegate( - CFWL_DateTimeEdit* pOwner) - : CFWL_EditImpDelegate(pOwner), m_pOwner(pOwner) {} -int32_t CFWL_DateTimeEditImpDelegate::OnProcessMessage(CFWL_Message* pMessage) { - if (m_pOwner->m_pWidgetMgr->IsFormDisabled()) { - return DisForm_OnProcessMessage(pMessage); - } - FX_DWORD dwHashCode = pMessage->GetClassID(); - if (dwHashCode == FWL_MSGHASH_SetFocus || - dwHashCode == FWL_MSGHASH_KillFocus) { - IFWL_Widget* pOuter = m_pOwner->GetOuter(); - IFWL_WidgetDelegate* pDelegate = pOuter->SetDelegate(NULL); - pDelegate->OnProcessMessage(pMessage); - } - return 1; -} -int32_t CFWL_DateTimeEditImpDelegate::DisForm_OnProcessMessage( - CFWL_Message* pMessage) { - FX_DWORD dwHashCode = pMessage->GetClassID(); - if (m_pOwner->m_pWidgetMgr->IsFormDisabled()) { - if (dwHashCode == FWL_MSGHASH_Mouse) { - CFWL_MsgMouse* pMouse = static_cast(pMessage); - if (pMouse->m_dwCmd == FWL_MSGMOUSECMD_LButtonDown || - pMouse->m_dwCmd == FWL_MSGMOUSECMD_RButtonDown) { - if ((m_pOwner->m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) == 0) { - m_pOwner->m_pProperties->m_dwStates |= FWL_WGTSTATE_Focused; - } - CFWL_DateTimePickerImp* pDateTime = - static_cast(m_pOwner->m_pOuter->GetImpl()); - if (pDateTime->IsMonthCalendarShowed()) { - CFX_RectF rtInvalidate; - pDateTime->GetWidgetRect(rtInvalidate); - pDateTime->ShowMonthCalendar(FALSE); - rtInvalidate.Offset(-rtInvalidate.left, -rtInvalidate.top); - pDateTime->Repaint(&rtInvalidate); - } - } - } else if (dwHashCode == FWL_MSGHASH_Key) { - return CFWL_EditImpDelegate::OnProcessMessage(pMessage); - } - } - return CFWL_EditImpDelegate::OnProcessMessage(pMessage); -} -CFWL_DateTimeCalendar::CFWL_DateTimeCalendar( - const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) - : CFWL_MonthCalendarImp(properties, pOuter) {} -FWL_ERR CFWL_DateTimeCalendar::Initialize() { - if (CFWL_MonthCalendarImp::Initialize() != FWL_ERR_Succeeded) - return FWL_ERR_Indefinite; - delete m_pDelegate; - m_pDelegate = new CFWL_DateTimeCalendarImpDelegate(this); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_DateTimeCalendar::Finalize() { - delete m_pDelegate; - m_pDelegate = nullptr; - return CFWL_MonthCalendarImp::Finalize(); -} -CFWL_DateTimeCalendarImpDelegate::CFWL_DateTimeCalendarImpDelegate( - CFWL_DateTimeCalendar* pOwner) - : CFWL_MonthCalendarImpDelegate(pOwner), m_pOwner(pOwner) { - m_bFlag = FALSE; -} -int32_t CFWL_DateTimeCalendarImpDelegate::OnProcessMessage( - CFWL_Message* pMessage) { - FX_DWORD dwCode = pMessage->GetClassID(); - if (dwCode == FWL_MSGHASH_SetFocus || dwCode == FWL_MSGHASH_KillFocus) { - IFWL_Widget* pOuter = m_pOwner->GetOuter(); - IFWL_WidgetDelegate* pDelegate = pOuter->SetDelegate(NULL); - return pDelegate->OnProcessMessage(pMessage); - } else if (dwCode == FWL_MSGHASH_Mouse) { - CFWL_MsgMouse* pMsg = static_cast(pMessage); - if (pMsg->m_dwCmd == FWL_MSGMOUSECMD_LButtonDown) { - OnLButtonDownEx(pMsg); - return 1; - } else if (pMsg->m_dwCmd == FWL_MSGMOUSECMD_LButtonUp) { - OnLButtonUpEx(pMsg); - return 1; - } - } - return CFWL_MonthCalendarImpDelegate::OnProcessMessage(pMessage); -} -void CFWL_DateTimeCalendarImpDelegate::OnLButtonDownEx(CFWL_MsgMouse* pMsg) { - if (m_pOwner->m_rtLBtn.Contains(pMsg->m_fx, pMsg->m_fy)) { - m_pOwner->m_iLBtnPartStates = FWL_PARTSTATE_MCD_Pressed; - m_pOwner->PrevMonth(); - m_pOwner->Repaint(&m_pOwner->m_rtClient); - } else if (m_pOwner->m_rtRBtn.Contains(pMsg->m_fx, pMsg->m_fy)) { - m_pOwner->m_iRBtnPartStates |= FWL_PARTSTATE_MCD_Pressed; - m_pOwner->NextMonth(); - m_pOwner->Repaint(&m_pOwner->m_rtClient); - } else if (m_pOwner->m_rtToday.Contains(pMsg->m_fx, pMsg->m_fy)) { - if ((m_pOwner->m_pProperties->m_dwStyleExes & FWL_STYLEEXT_MCD_NoToday) == - 0) { - m_pOwner->JumpToToday(); - m_pOwner->Repaint(&m_pOwner->m_rtClient); - } - } else { - IFWL_DateTimePicker* pIPicker = - static_cast(m_pOwner->m_pOuter); - CFWL_DateTimePickerImp* pPicker = - static_cast(pIPicker->GetImpl()); - if (pPicker->IsMonthCalendarShowed()) { - m_bFlag = 1; - } - } -} -void CFWL_DateTimeCalendarImpDelegate::OnLButtonUpEx(CFWL_MsgMouse* pMsg) { - if (m_pOwner->m_pWidgetMgr->IsFormDisabled()) { - return DisForm_OnLButtonUpEx(pMsg); - } - if (m_pOwner->m_rtLBtn.Contains(pMsg->m_fx, pMsg->m_fy)) { - m_pOwner->m_iLBtnPartStates = 0; - m_pOwner->Repaint(&m_pOwner->m_rtLBtn); - return; - } - if (m_pOwner->m_rtRBtn.Contains(pMsg->m_fx, pMsg->m_fy)) { - m_pOwner->m_iRBtnPartStates = 0; - m_pOwner->Repaint(&m_pOwner->m_rtRBtn); - return; - } - if (m_pOwner->m_rtToday.Contains(pMsg->m_fx, pMsg->m_fy)) { - return; - } - int32_t iOldSel = 0; - if (m_pOwner->m_arrSelDays.GetSize() > 0) { - iOldSel = m_pOwner->m_arrSelDays[0]; - } - int32_t iCurSel = m_pOwner->GetDayAtPoint(pMsg->m_fx, pMsg->m_fy); - CFX_RectF rt; - IFWL_DateTimePicker* pIPicker = - static_cast(m_pOwner->m_pOuter); - CFWL_DateTimePickerImp* pPicker = - static_cast(pIPicker->GetImpl()); - pPicker->m_pForm->GetWidgetRect(rt); - rt.Set(0, 0, rt.width, rt.height); - if (iCurSel > 0) { - FWL_DATEINFO* lpDatesInfo = - (FWL_DATEINFO*)m_pOwner->m_arrDates.GetAt(iCurSel - 1); - CFX_RectF rtInvalidate(lpDatesInfo->rect); - if (iOldSel > 0 && iOldSel <= m_pOwner->m_arrDates.GetSize()) { - lpDatesInfo = (FWL_DATEINFO*)m_pOwner->m_arrDates.GetAt(iOldSel - 1); - rtInvalidate.Union(lpDatesInfo->rect); - } - m_pOwner->AddSelDay(iCurSel); - if (!m_pOwner->m_pOuter) - return; - pPicker->ProcessSelChanged(m_pOwner->m_iCurYear, m_pOwner->m_iCurMonth, - iCurSel); - pPicker->ShowMonthCalendar(FALSE); - } else if (m_bFlag && (!rt.Contains(pMsg->m_fx, pMsg->m_fy))) { - IFWL_DateTimePicker* pIPicker = - static_cast(m_pOwner->m_pOuter); - CFWL_DateTimePickerImp* pPicker = - static_cast(pIPicker->GetImpl()); - pPicker->ShowMonthCalendar(FALSE); - } - m_bFlag = 0; -} -void CFWL_DateTimeCalendarImpDelegate::OnMouseMoveEx(CFWL_MsgMouse* pMsg) { - if (m_pOwner->m_pProperties->m_dwStyleExes & FWL_STYLEEXT_MCD_MultiSelect) { - return; - } - FX_BOOL bRepaint = FALSE; - CFX_RectF rtInvalidate; - rtInvalidate.Set(0, 0, 0, 0); - if (m_pOwner->m_rtDates.Contains(pMsg->m_fx, pMsg->m_fy)) { - int32_t iHover = m_pOwner->GetDayAtPoint(pMsg->m_fx, pMsg->m_fy); - bRepaint = m_pOwner->m_iHovered != iHover; - if (bRepaint) { - if (m_pOwner->m_iHovered > 0) { - m_pOwner->GetDayRect(m_pOwner->m_iHovered, rtInvalidate); - } - if (iHover > 0) { - CFX_RectF rtDay; - m_pOwner->GetDayRect(iHover, rtDay); - if (rtInvalidate.IsEmpty()) { - rtInvalidate = rtDay; - } else { - rtInvalidate.Union(rtDay); - } - } - } - m_pOwner->m_iHovered = iHover; - CFWL_Event_DtpHoverChanged ev; - ev.hoverday = iHover; - m_pOwner->DispatchEvent(&ev); - } else { - bRepaint = m_pOwner->m_iHovered > 0; - if (bRepaint) { - m_pOwner->GetDayRect(m_pOwner->m_iHovered, rtInvalidate); - } - m_pOwner->m_iHovered = -1; - } - if (bRepaint && !rtInvalidate.IsEmpty()) { - m_pOwner->Repaint(&rtInvalidate); - } -} -int32_t CFWL_DateTimeCalendarImpDelegate::DisForm_OnProcessMessage( - CFWL_Message* pMessage) { - if (pMessage->GetClassID() == FWL_MSGHASH_Mouse) { - CFWL_MsgMouse* pMsg = static_cast(pMessage); - if (pMsg->m_dwCmd == FWL_MSGMOUSECMD_LButtonUp) { - DisForm_OnLButtonUpEx(pMsg); - return 1; - } - } - return CFWL_MonthCalendarImpDelegate::OnProcessMessage(pMessage); -} -void CFWL_DateTimeCalendarImpDelegate::DisForm_OnLButtonUpEx( - CFWL_MsgMouse* pMsg) { - if (m_pOwner->m_rtLBtn.Contains(pMsg->m_fx, pMsg->m_fy)) { - m_pOwner->m_iLBtnPartStates = 0; - m_pOwner->Repaint(&(m_pOwner->m_rtLBtn)); - return; - } - if (m_pOwner->m_rtRBtn.Contains(pMsg->m_fx, pMsg->m_fy)) { - m_pOwner->m_iRBtnPartStates = 0; - m_pOwner->Repaint(&(m_pOwner->m_rtRBtn)); - return; - } - if (m_pOwner->m_rtToday.Contains(pMsg->m_fx, pMsg->m_fy)) { - return; - } - int32_t iOldSel = 0; - if (m_pOwner->m_arrSelDays.GetSize() > 0) { - iOldSel = m_pOwner->m_arrSelDays[0]; - } - int32_t iCurSel = m_pOwner->GetDayAtPoint(pMsg->m_fx, pMsg->m_fy); - if (iCurSel > 0) { - FWL_DATEINFO* lpDatesInfo = - (FWL_DATEINFO*)m_pOwner->m_arrDates.GetAt(iCurSel - 1); - CFX_RectF rtInvalidate(lpDatesInfo->rect); - if (iOldSel > 0 && iOldSel <= m_pOwner->m_arrDates.GetSize()) { - lpDatesInfo = (FWL_DATEINFO*)m_pOwner->m_arrDates.GetAt(iOldSel - 1); - rtInvalidate.Union(lpDatesInfo->rect); - } - m_pOwner->AddSelDay(iCurSel); - CFWL_DateTimePickerImp* pDateTime = - static_cast(m_pOwner->m_pOuter->GetImpl()); - pDateTime->ProcessSelChanged(m_pOwner->m_iCurYear, m_pOwner->m_iCurMonth, - iCurSel); - pDateTime->ShowMonthCalendar(FALSE); - } -} -CFWL_DateTimePickerImp::CFWL_DateTimePickerImp( - const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) - : CFWL_WidgetImp(properties, pOuter), - m_iBtnState(1), - m_iYear(-1), - m_iMonth(-1), - m_iDay(-1), - m_bLBtnDown(FALSE), - m_pEdit(nullptr), - m_pMonthCal(nullptr), - m_pForm(nullptr) { - m_rtBtn.Set(0, 0, 0, 0); -} -CFWL_DateTimePickerImp::~CFWL_DateTimePickerImp() {} -FWL_ERR CFWL_DateTimePickerImp::GetClassName(CFX_WideString& wsClass) const { - wsClass = FWL_CLASS_DateTimePicker; - return FWL_ERR_Succeeded; -} -FX_DWORD CFWL_DateTimePickerImp::GetClassID() const { - return FWL_CLASSHASH_DateTimePicker; -} -FWL_ERR CFWL_DateTimePickerImp::Initialize() { - if (CFWL_WidgetImp::Initialize() != FWL_ERR_Succeeded) - return FWL_ERR_Indefinite; - m_pDelegate = new CFWL_DateTimePickerImpDelegate(this); - m_pProperties->m_dwStyleExes = FWL_STYLEEXT_DTP_ShortDateFormat; - CFWL_WidgetImpProperties propMonth; - propMonth.m_dwStyles = FWL_WGTSTYLE_Popup | FWL_WGTSTYLE_Border; - propMonth.m_dwStates = FWL_WGTSTATE_Invisible; - propMonth.m_pDataProvider = &m_MonthCalendarDP; - propMonth.m_pParent = m_pInterface; - propMonth.m_pThemeProvider = m_pProperties->m_pThemeProvider; - m_pMonthCal.reset(IFWL_DateTimeCalender::Create(propMonth, m_pInterface)); - m_pMonthCal->Initialize(); - CFX_RectF rtMonthCal; - m_pMonthCal->GetWidgetRect(rtMonthCal, TRUE); - rtMonthCal.Set(0, 0, rtMonthCal.width, rtMonthCal.height); - m_pMonthCal->SetWidgetRect(rtMonthCal); - CFWL_WidgetImpProperties propEdit; - propEdit.m_pParent = m_pInterface; - propEdit.m_pThemeProvider = m_pProperties->m_pThemeProvider; - m_pEdit.reset(IFWL_DateTimeEdit::Create(propEdit, m_pInterface)); - m_pEdit->Initialize(); - RegisterEventTarget(m_pMonthCal.get()); - RegisterEventTarget(m_pEdit.get()); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_DateTimePickerImp::Finalize() { - if (m_pEdit) { - m_pEdit->Finalize(); - } - if (m_pMonthCal) { - m_pMonthCal->Finalize(); - } - if (m_pForm) { - m_pForm->Finalize(); - } - UnregisterEventTarget(); - delete m_pDelegate; - m_pDelegate = nullptr; - return CFWL_WidgetImp::Finalize(); -} -FWL_ERR CFWL_DateTimePickerImp::GetWidgetRect(CFX_RectF& rect, - FX_BOOL bAutoSize) { - if (m_pWidgetMgr->IsFormDisabled()) { - return DisForm_GetWidgetRect(rect, bAutoSize); - } - if (bAutoSize) { - rect.Set(0, 0, FWL_DTP_WIDTH, FWL_DTP_HEIGHT); - CFWL_WidgetImp::GetWidgetRect(rect, TRUE); - } else { - rect = m_pProperties->m_rtWidget; - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_DateTimePickerImp::Update() { - if (m_pWidgetMgr->IsFormDisabled()) { - return DisForm_Update(); - } - if (m_iLock) { - return FWL_ERR_Indefinite; - } - if (!m_pProperties->m_pThemeProvider) { - m_pProperties->m_pThemeProvider = GetAvailableTheme(); - } - m_pEdit->SetThemeProvider(m_pProperties->m_pThemeProvider); - GetClientRect(m_rtClient); - FX_FLOAT* pFWidth = - static_cast(GetThemeCapacity(FWL_WGTCAPACITY_ScrollBarWidth)); - if (!pFWidth) - return FWL_ERR_Indefinite; - FX_FLOAT fBtn = *pFWidth; - m_rtBtn.Set(m_rtClient.right() - fBtn, m_rtClient.top, fBtn - 1, - m_rtClient.height - 1); - CFX_RectF rtEdit; - rtEdit.Set(m_rtClient.left, m_rtClient.top, m_rtClient.width - fBtn, - m_rtClient.height); - m_pEdit->SetWidgetRect(rtEdit); - ReSetEditAlignment(); - m_pEdit->Update(); - if (!(m_pMonthCal->GetThemeProvider())) { - m_pMonthCal->SetThemeProvider(m_pProperties->m_pThemeProvider); - } - if (m_pProperties->m_pDataProvider) { - IFWL_DateTimePickerDP* pData = - static_cast(m_pProperties->m_pDataProvider); - pData->GetToday(m_pInterface, m_MonthCalendarDP.m_iCurYear, - m_MonthCalendarDP.m_iCurMonth, m_MonthCalendarDP.m_iCurDay); - } - CFX_RectF rtMonthCal; - m_pMonthCal->GetWidgetRect(rtMonthCal, TRUE); - CFX_RectF rtPopUp; - rtPopUp.Set(rtMonthCal.left, rtMonthCal.top + FWL_DTP_HEIGHT, - rtMonthCal.width, rtMonthCal.height); - m_pMonthCal->SetWidgetRect(rtPopUp); - m_pMonthCal->Update(); - return FWL_ERR_Succeeded; -} -FX_DWORD CFWL_DateTimePickerImp::HitTest(FX_FLOAT fx, FX_FLOAT fy) { - if (m_pWidgetMgr->IsFormDisabled()) { - return DisForm_HitTest(fx, fy); - } - if (m_rtClient.Contains(fx, fy)) { - return FWL_WGTHITTEST_Client; - } - if (IsMonthCalendarShowed()) { - CFX_RectF rect; - m_pMonthCal->GetWidgetRect(rect); - if (rect.Contains(fx, fy)) { - return FWL_WGTHITTEST_Client; - } - } - return FWL_WGTHITTEST_Unknown; -} -FWL_ERR CFWL_DateTimePickerImp::DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - if (!pGraphics) - return FWL_ERR_Indefinite; - if (!m_pProperties->m_pThemeProvider) - return FWL_ERR_Indefinite; - IFWL_ThemeProvider* pTheme = m_pProperties->m_pThemeProvider; - if (HasBorder()) { - DrawBorder(pGraphics, FWL_PART_DTP_Border, pTheme, pMatrix); - } - if (HasEdge()) { - DrawEdge(pGraphics, FWL_PART_DTP_Edge, pTheme, pMatrix); - } - if (!m_rtBtn.IsEmpty()) { - DrawDropDownButton(pGraphics, pTheme, pMatrix); - } - if (m_pWidgetMgr->IsFormDisabled()) { - return DisForm_DrawWidget(pGraphics, pMatrix); - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_DateTimePickerImp::SetThemeProvider(IFWL_ThemeProvider* pTP) { - m_pProperties->m_pThemeProvider = pTP; - m_pMonthCal->SetThemeProvider(pTP); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_DateTimePickerImp::GetCurSel(int32_t& iYear, - int32_t& iMonth, - int32_t& iDay) { - iYear = m_iYear; - iMonth = m_iMonth; - iDay = m_iDay; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_DateTimePickerImp::SetCurSel(int32_t iYear, - int32_t iMonth, - int32_t iDay) { - if (iYear <= 0 || iYear >= 3000) - return FWL_ERR_Indefinite; - if (iMonth <= 0 || iMonth >= 13) - return FWL_ERR_Indefinite; - if (iDay <= 0 || iDay >= 32) - return FWL_ERR_Indefinite; - m_iYear = iYear; - m_iMonth = iMonth; - m_iDay = iDay; - m_pMonthCal->SetSelect(iYear, iMonth, iDay); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_DateTimePickerImp::SetEditText(const CFX_WideString& wsText) { - if (!m_pEdit) - return FWL_ERR_Indefinite; - int32_t iRet = m_pEdit->SetText(wsText); - Repaint(&m_rtClient); - CFWL_Event_DtpEditChanged ev; - ev.m_wsText = wsText; - DispatchEvent(&ev); - return iRet; -} -FWL_ERR CFWL_DateTimePickerImp::GetEditText(CFX_WideString& wsText, - int32_t nStart, - int32_t nCount) const { - if (m_pEdit) { - return m_pEdit->GetText(wsText, nStart, nCount); - } - return FWL_ERR_Indefinite; -} -FX_BOOL CFWL_DateTimePickerImp::CanUndo() { - return m_pEdit->CanUndo(); -} -FX_BOOL CFWL_DateTimePickerImp::CanRedo() { - return m_pEdit->CanRedo(); -} -FX_BOOL CFWL_DateTimePickerImp::Undo() { - return m_pEdit->Undo(); -} -FX_BOOL CFWL_DateTimePickerImp::Redo() { - return m_pEdit->Redo(); -} -FX_BOOL CFWL_DateTimePickerImp::CanCopy() { - int32_t nCount = m_pEdit->CountSelRanges(); - return nCount > 0; -} -FX_BOOL CFWL_DateTimePickerImp::CanCut() { - if (m_pEdit->GetStylesEx() & FWL_STYLEEXT_EDT_ReadOnly) { - return FALSE; - } - int32_t nCount = m_pEdit->CountSelRanges(); - return nCount > 0; -} -FX_BOOL CFWL_DateTimePickerImp::CanSelectAll() { - return m_pEdit->GetTextLength() > 0; -} -FX_BOOL CFWL_DateTimePickerImp::Copy(CFX_WideString& wsCopy) { - return m_pEdit->Copy(wsCopy); -} -FX_BOOL CFWL_DateTimePickerImp::Cut(CFX_WideString& wsCut) { - return m_pEdit->Cut(wsCut); -} -FX_BOOL CFWL_DateTimePickerImp::Paste(const CFX_WideString& wsPaste) { - return m_pEdit->Paste(wsPaste); -} -FX_BOOL CFWL_DateTimePickerImp::SelectAll() { - return m_pEdit->AddSelRange(0) == FWL_ERR_Succeeded; -} -FX_BOOL CFWL_DateTimePickerImp::Delete() { - return m_pEdit->ClearText() == FWL_ERR_Succeeded; -} -FX_BOOL CFWL_DateTimePickerImp::DeSelect() { - return m_pEdit->ClearSelections() == FWL_ERR_Succeeded; -} -FWL_ERR CFWL_DateTimePickerImp::GetBBox(CFX_RectF& rect) { - if (m_pWidgetMgr->IsFormDisabled()) { - return DisForm_GetBBox(rect); - } - rect = m_pProperties->m_rtWidget; - if (IsMonthCalendarShowed()) { - CFX_RectF rtMonth; - m_pMonthCal->GetWidgetRect(rtMonth); - rtMonth.Offset(m_pProperties->m_rtWidget.left, - m_pProperties->m_rtWidget.top); - rect.Union(rtMonth); - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_DateTimePickerImp::SetEditLimit(int32_t nLimit) { - return m_pEdit->SetLimit(nLimit); -} -FWL_ERR CFWL_DateTimePickerImp::ModifyEditStylesEx(FX_DWORD dwStylesExAdded, - FX_DWORD dwStylesExRemoved) { - return m_pEdit->ModifyStylesEx(dwStylesExAdded, dwStylesExRemoved); -} -void CFWL_DateTimePickerImp::DrawDropDownButton(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix) { - if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_DTP_Spin) == - FWL_STYLEEXT_DTP_Spin) { - CFWL_WidgetImpProperties prop; - prop.m_dwStyleExes |= FWL_STYLEEXE_SPB_Vert; - prop.m_pParent = m_pInterface; - prop.m_rtWidget = m_rtBtn; - IFWL_SpinButton* pSpin = IFWL_SpinButton::Create(prop, m_pInterface); - pSpin->Initialize(); - } else { - CFWL_ThemeBackground param; - param.m_pWidget = m_pInterface; - param.m_iPart = FWL_PART_DTP_DropDownButton; - param.m_dwStates = m_iBtnState; - param.m_pGraphics = pGraphics; - param.m_rtPart = m_rtBtn; - if (pMatrix) { - param.m_matrix.Concat(*pMatrix); - } - pTheme->DrawBackground(¶m); - } -} -void CFWL_DateTimePickerImp::FormatDateString(int32_t iYear, - int32_t iMonth, - int32_t iDay, - CFX_WideString& wsText) { - if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_DTP_ShortDateFormat) == - FWL_STYLEEXT_DTP_ShortDateFormat) { - wsText.Format(L"%d-%d-%d", iYear, iMonth, iDay); - } else if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_DTP_LongDateFormat) == - FWL_STYLEEXT_DTP_LongDateFormat) { - wsText.Format(L"%d Year %d Month %d Day", iYear, iMonth, iDay); - } else if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_DTP_TimeFormat) == - FWL_STYLEEXT_DTP_TimeFormat) { - } -} -void CFWL_DateTimePickerImp::ShowMonthCalendar(FX_BOOL bActivate) { - if (m_pWidgetMgr->IsFormDisabled()) { - return DisForm_ShowMonthCalendar(bActivate); - } - if (IsMonthCalendarShowed() == bActivate) { - return; - } - if (!m_pForm) { - InitProxyForm(); - } - if (bActivate) { - CFX_RectF rtMonth; - m_pMonthCal->GetWidgetRect(rtMonth); - CFX_RectF rtAnchor; - rtAnchor.Set(0, 0, m_pProperties->m_rtWidget.width, - m_pProperties->m_rtWidget.height); - GetPopupPos(0, rtMonth.height, rtAnchor, rtMonth); - m_pForm->SetWidgetRect(rtMonth); - rtMonth.left = rtMonth.top = 0; - m_pMonthCal->SetStates(FWL_WGTSTATE_Invisible, !bActivate); - m_pMonthCal->SetWidgetRect(rtMonth); - m_pMonthCal->Update(); - m_pForm->DoModal(); - } else { - m_pForm->EndDoModal(); - } -} -FX_BOOL CFWL_DateTimePickerImp::IsMonthCalendarShowed() { - if (m_pWidgetMgr->IsFormDisabled()) { - return DisForm_IsMonthCalendarShowed(); - } - if (!m_pForm) - return FALSE; - return !(m_pForm->GetStates() & FWL_WGTSTATE_Invisible); -} -void CFWL_DateTimePickerImp::ReSetEditAlignment() { - if (!m_pEdit) - return; - FX_DWORD dwStylExes = m_pProperties->m_dwStyleExes; - FX_DWORD dwAdd = 0; - switch (dwStylExes & FWL_STYLEEXT_DTP_EditHAlignMask) { - case FWL_STYLEEXT_DTP_EditHCenter: { - dwAdd |= FWL_STYLEEXT_EDT_HCenter; - break; - } - case FWL_STYLEEXT_DTP_EditHFar: { - dwAdd |= FWL_STYLEEXT_EDT_HFar; - break; - } - default: { dwAdd |= FWL_STYLEEXT_EDT_HNear; } - } - switch (dwStylExes & FWL_STYLEEXT_DTP_EditVAlignMask) { - case FWL_STYLEEXT_DTP_EditVCenter: { - dwAdd |= FWL_STYLEEXT_EDT_VCenter; - break; - } - case FWL_STYLEEXT_DTP_EditVFar: { - dwAdd |= FWL_STYLEEXT_EDT_VFar; - break; - } - default: { dwAdd |= FWL_STYLEEXT_EDT_VNear; } - } - if (dwStylExes & FWL_STYLEEXT_DTP_EditJustified) { - dwAdd |= FWL_STYLEEXT_EDT_Justified; - } - if (dwStylExes & FWL_STYLEEXT_DTP_EditDistributed) { - dwAdd |= FWL_STYLEEXT_EDT_Distributed; - } - m_pEdit->ModifyStylesEx(dwAdd, FWL_STYLEEXT_EDT_HAlignMask | - FWL_STYLEEXT_EDT_HAlignModeMask | - FWL_STYLEEXT_EDT_VAlignMask); -} -void CFWL_DateTimePickerImp::ProcessSelChanged(int32_t iYear, - int32_t iMonth, - int32_t iDay) { - m_iYear = iYear; - m_iMonth = iMonth; - m_iDay = iDay; - CFX_WideString wsText; - FormatDateString(m_iYear, m_iMonth, m_iDay, wsText); - m_pEdit->SetText(wsText); - m_pEdit->Update(); - Repaint(&m_rtClient); - CFWL_Event_DtpSelectChanged ev; - ev.m_pSrcTarget = m_pInterface; - ev.iYear = m_iYear; - ev.iMonth = m_iMonth; - ev.iDay = m_iDay; - DispatchEvent(&ev); -} -void CFWL_DateTimePickerImp::InitProxyForm() { - if (m_pForm) - return; - if (!m_pMonthCal) - return; - CFWL_WidgetImpProperties propForm; - propForm.m_dwStyles = FWL_WGTSTYLE_Popup; - propForm.m_dwStates = FWL_WGTSTATE_Invisible; - propForm.m_pOwner = m_pInterface; - m_pForm.reset(IFWL_DateTimeForm::Create(propForm, m_pMonthCal.get())); - m_pForm->Initialize(); - m_pMonthCal->SetParent(m_pForm.get()); -} -IFWL_DateTimeEdit* CFWL_DateTimePickerImp::GetDataTimeEdit() { - return m_pEdit.get(); -} -FWL_ERR CFWL_DateTimePickerImp::DisForm_Initialize() { - m_pProperties->m_dwStyleExes = FWL_STYLEEXT_DTP_ShortDateFormat; - DisForm_InitDateTimeCalendar(); - DisForm_InitDateTimeEdit(); - RegisterEventTarget(m_pMonthCal.get()); - RegisterEventTarget(m_pEdit.get()); - return FWL_ERR_Succeeded; -} -void CFWL_DateTimePickerImp::DisForm_InitDateTimeCalendar() { - if (m_pMonthCal) { - return; - } - CFWL_WidgetImpProperties propMonth; - propMonth.m_dwStyles = - FWL_WGTSTYLE_Popup | FWL_WGTSTYLE_Border | FWL_WGTSTYLE_EdgeSunken; - propMonth.m_dwStates = FWL_WGTSTATE_Invisible; - propMonth.m_pParent = m_pInterface; - propMonth.m_pDataProvider = &m_MonthCalendarDP; - propMonth.m_pThemeProvider = m_pProperties->m_pThemeProvider; - m_pMonthCal.reset(IFWL_DateTimeCalender::Create(propMonth, m_pInterface)); - m_pMonthCal->Initialize(); - CFX_RectF rtMonthCal; - m_pMonthCal->GetWidgetRect(rtMonthCal, TRUE); - rtMonthCal.Set(0, 0, rtMonthCal.width, rtMonthCal.height); - m_pMonthCal->SetWidgetRect(rtMonthCal); -} -void CFWL_DateTimePickerImp::DisForm_InitDateTimeEdit() { - if (m_pEdit) { - return; - } - CFWL_WidgetImpProperties propEdit; - propEdit.m_pParent = m_pInterface; - propEdit.m_pThemeProvider = m_pProperties->m_pThemeProvider; - m_pEdit.reset(IFWL_DateTimeEdit::Create(propEdit, m_pInterface)); - m_pEdit->Initialize(); -} -FX_BOOL CFWL_DateTimePickerImp::DisForm_IsMonthCalendarShowed() { - if (!m_pMonthCal) - return FALSE; - return !(m_pMonthCal->GetStates() & FWL_WGTSTATE_Invisible); -} -void CFWL_DateTimePickerImp::DisForm_ShowMonthCalendar(FX_BOOL bActivate) { - FX_BOOL bShowed = IsMonthCalendarShowed(); - if (bShowed == bActivate) { - return; - } - if (bActivate) { - CFX_RectF rtMonthCal; - m_pMonthCal->GetWidgetRect(rtMonthCal, TRUE); - FX_FLOAT fPopupMin = rtMonthCal.height; - FX_FLOAT fPopupMax = rtMonthCal.height; - CFX_RectF rtAnchor(m_pProperties->m_rtWidget); - rtAnchor.width = rtMonthCal.width; - rtMonthCal.left = m_rtClient.left; - rtMonthCal.top = rtAnchor.Height(); - GetPopupPos(fPopupMin, fPopupMax, rtAnchor, rtMonthCal); - m_pMonthCal->SetWidgetRect(rtMonthCal); - if (m_iYear > 0 && m_iMonth > 0 && m_iDay > 0) { - m_pMonthCal->SetSelect(m_iYear, m_iMonth, m_iDay); - } - m_pMonthCal->Update(); - } - m_pMonthCal->SetStates(FWL_WGTSTATE_Invisible, !bActivate); - if (bActivate) { - CFWL_MsgSetFocus msg; - msg.m_pDstTarget = m_pMonthCal.get(); - msg.m_pSrcTarget = m_pEdit.get(); - IFWL_WidgetDelegate* pDelegate = m_pEdit->SetDelegate(NULL); - pDelegate->OnProcessMessage(&msg); - } - CFX_RectF rtInvalidate, rtCal; - rtInvalidate.Set(0, 0, m_pProperties->m_rtWidget.width, - m_pProperties->m_rtWidget.height); - m_pMonthCal->GetWidgetRect(rtCal); - rtInvalidate.Union(rtCal); - rtInvalidate.Inflate(2, 2); - Repaint(&rtInvalidate); -} -FX_DWORD CFWL_DateTimePickerImp::DisForm_HitTest(FX_FLOAT fx, FX_FLOAT fy) { - CFX_RectF rect; - rect.Set(0, 0, m_pProperties->m_rtWidget.width, - m_pProperties->m_rtWidget.height); - if (rect.Contains(fx, fy)) { - return FWL_WGTHITTEST_Edit; - } - if (DisForm_IsNeedShowButton()) { - rect.width += m_fBtn; - } - if (rect.Contains(fx, fy)) { - return FWL_WGTHITTEST_Client; - } - if (IsMonthCalendarShowed()) { - m_pMonthCal->GetWidgetRect(rect); - if (rect.Contains(fx, fy)) { - return FWL_WGTHITTEST_Client; - } - } - return FWL_WGTHITTEST_Unknown; -} -FX_BOOL CFWL_DateTimePickerImp::DisForm_IsNeedShowButton() { - FX_BOOL bFocus = m_pProperties->m_dwStates & FWL_WGTSTATE_Focused || - m_pMonthCal->GetStates() & FWL_WGTSTATE_Focused || - m_pEdit->GetStates() & FWL_WGTSTATE_Focused; - return bFocus; -} -FWL_ERR CFWL_DateTimePickerImp::DisForm_Update() { - if (m_iLock) { - return FWL_ERR_Indefinite; - } - if (!m_pProperties->m_pThemeProvider) { - m_pProperties->m_pThemeProvider = GetAvailableTheme(); - } - m_pEdit->SetThemeProvider(m_pProperties->m_pThemeProvider); - GetClientRect(m_rtClient); - m_pEdit->SetWidgetRect(m_rtClient); - ReSetEditAlignment(); - m_pEdit->Update(); - if (m_pMonthCal->GetThemeProvider() == NULL) { - m_pMonthCal->SetThemeProvider(m_pProperties->m_pThemeProvider); - } - if (m_pProperties->m_pDataProvider) { - IFWL_DateTimePickerDP* pData = - static_cast(m_pProperties->m_pDataProvider); - pData->GetToday(m_pInterface, m_MonthCalendarDP.m_iCurYear, - m_MonthCalendarDP.m_iCurMonth, m_MonthCalendarDP.m_iCurDay); - } - FX_FLOAT* pWidth = - static_cast(GetThemeCapacity(FWL_WGTCAPACITY_ScrollBarWidth)); - if (!pWidth) - return 0; - m_fBtn = *pWidth; - CFX_RectF rtMonthCal; - m_pMonthCal->GetWidgetRect(rtMonthCal, TRUE); - CFX_RectF rtPopUp; - rtPopUp.Set(rtMonthCal.left, rtMonthCal.top + FWL_DTP_HEIGHT, - rtMonthCal.width, rtMonthCal.height); - m_pMonthCal->SetWidgetRect(rtPopUp); - m_pMonthCal->Update(); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_DateTimePickerImp::DisForm_GetWidgetRect(CFX_RectF& rect, - FX_BOOL bAutoSize) { - rect = m_pProperties->m_rtWidget; - if (DisForm_IsNeedShowButton()) { - rect.width += m_fBtn; - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_DateTimePickerImp::DisForm_GetBBox(CFX_RectF& rect) { - rect = m_pProperties->m_rtWidget; - if (DisForm_IsNeedShowButton()) { - rect.width += m_fBtn; - } - if (IsMonthCalendarShowed()) { - CFX_RectF rtMonth; - m_pMonthCal->GetWidgetRect(rtMonth); - rtMonth.Offset(m_pProperties->m_rtWidget.left, - m_pProperties->m_rtWidget.top); - rect.Union(rtMonth); - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_DateTimePickerImp::DisForm_DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - if (!pGraphics) - return FWL_ERR_Indefinite; - if (m_pEdit) { - CFX_RectF rtEdit; - m_pEdit->GetWidgetRect(rtEdit); - CFX_Matrix mt; - mt.Set(1, 0, 0, 1, rtEdit.left, rtEdit.top); - if (pMatrix) { - mt.Concat(*pMatrix); - } - m_pEdit->DrawWidget(pGraphics, &mt); - } - if (IsMonthCalendarShowed()) { - CFX_RectF rtMonth; - m_pMonthCal->GetWidgetRect(rtMonth); - CFX_Matrix mt; - mt.Set(1, 0, 0, 1, rtMonth.left, rtMonth.top); - if (pMatrix) { - mt.Concat(*pMatrix); - } - m_pMonthCal->DrawWidget(pGraphics, &mt); - } - return FWL_ERR_Succeeded; -} -CFWL_DateTimePickerImpDelegate::CFWL_DateTimePickerImpDelegate( - CFWL_DateTimePickerImp* pOwner) - : m_pOwner(pOwner) {} -int32_t CFWL_DateTimePickerImpDelegate::OnProcessMessage( - CFWL_Message* pMessage) { - if (!pMessage) - return 0; - FX_DWORD dwMsgCode = pMessage->GetClassID(); - switch (dwMsgCode) { - case FWL_MSGHASH_SetFocus: - case FWL_MSGHASH_KillFocus: { - OnFocusChanged(pMessage, dwMsgCode == FWL_MSGHASH_SetFocus); - break; - } - case FWL_MSGHASH_Mouse: { - CFWL_MsgMouse* pMouse = static_cast(pMessage); - FX_DWORD dwCmd = pMouse->m_dwCmd; - switch (dwCmd) { - case FWL_MSGMOUSECMD_LButtonDown: { - OnLButtonDown(pMouse); - break; - } - case FWL_MSGMOUSECMD_LButtonUp: { - OnLButtonUp(pMouse); - break; - } - case FWL_MSGMOUSECMD_MouseMove: { - OnMouseMove(pMouse); - break; - } - case FWL_MSGMOUSECMD_MouseLeave: { - OnMouseLeave(pMouse); - break; - } - default: {} - } - break; - } - default: - break; - } - if (dwMsgCode == FWL_MSGHASH_Key && - m_pOwner->m_pEdit->GetStates() & FWL_WGTSTATE_Focused) { - IFWL_WidgetDelegate* pDelegate = m_pOwner->m_pEdit->SetDelegate(NULL); - return pDelegate->OnProcessMessage(pMessage); - } - return CFWL_WidgetImpDelegate::OnProcessMessage(pMessage); -} -FWL_ERR CFWL_DateTimePickerImpDelegate::OnDrawWidget( - CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - return m_pOwner->DrawWidget(pGraphics, pMatrix); -} -void CFWL_DateTimePickerImpDelegate::OnFocusChanged(CFWL_Message* pMsg, - FX_BOOL bSet) { - if (!pMsg) - return; - if (m_pOwner->m_pWidgetMgr->IsFormDisabled()) { - return DisForm_OnFocusChanged(pMsg, bSet); - } - if (bSet) { - m_pOwner->m_pProperties->m_dwStates |= (FWL_WGTSTATE_Focused); - m_pOwner->Repaint(&m_pOwner->m_rtClient); - } else { - m_pOwner->m_pProperties->m_dwStates &= ~(FWL_WGTSTATE_Focused); - m_pOwner->Repaint(&m_pOwner->m_rtClient); - } - if (pMsg->m_pSrcTarget == m_pOwner->m_pMonthCal.get() && - m_pOwner->IsMonthCalendarShowed()) { - m_pOwner->ShowMonthCalendar(FALSE); - } - m_pOwner->Repaint(&m_pOwner->m_rtClient); -} -void CFWL_DateTimePickerImpDelegate::OnLButtonDown(CFWL_MsgMouse* pMsg) { - if (!pMsg) - return; - if ((m_pOwner->m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) == 0) { - m_pOwner->SetFocus(TRUE); - } - if (m_pOwner->m_rtBtn.Contains(pMsg->m_fx, pMsg->m_fy)) { - if (m_pOwner->IsMonthCalendarShowed()) { - m_pOwner->ShowMonthCalendar(FALSE); - CFWL_Event_DtpCloseUp ev; - m_pOwner->DispatchEvent(&ev); - } else { - if (!(m_pOwner->m_pProperties->m_dwStyleExes & - FWL_STYLEEXT_DTP_TimeFormat)) { - m_pOwner->ShowMonthCalendar(TRUE); - CFWL_Event_DtpDropDown ev; - m_pOwner->DispatchEvent(&ev); - } else { - } - m_pOwner->m_bLBtnDown = TRUE; - m_pOwner->Repaint(&m_pOwner->m_rtClient); - } - } -} -void CFWL_DateTimePickerImpDelegate::OnLButtonUp(CFWL_MsgMouse* pMsg) { - if (!pMsg) - return; - m_pOwner->m_bLBtnDown = FALSE; - if (m_pOwner->m_rtBtn.Contains(pMsg->m_fx, pMsg->m_fy)) { - m_pOwner->m_iBtnState = FWL_PARTSTATE_DTP_Hovered; - } else { - m_pOwner->m_iBtnState = FWL_PARTSTATE_DTP_Normal; - } - m_pOwner->Repaint(&m_pOwner->m_rtBtn); -} -void CFWL_DateTimePickerImpDelegate::OnMouseMove(CFWL_MsgMouse* pMsg) { - if (m_pOwner->m_rtBtn.Contains(pMsg->m_fx, pMsg->m_fy)) { - } else { - m_pOwner->m_iBtnState = FWL_PARTSTATE_DTP_Normal; - } - m_pOwner->Repaint(&m_pOwner->m_rtBtn); -} -void CFWL_DateTimePickerImpDelegate::OnMouseLeave(CFWL_MsgMouse* pMsg) { - if (!pMsg) - return; - m_pOwner->m_iBtnState = FWL_PARTSTATE_DTP_Normal; - m_pOwner->Repaint(&m_pOwner->m_rtBtn); -} -void CFWL_DateTimePickerImpDelegate::DisForm_OnFocusChanged(CFWL_Message* pMsg, - FX_BOOL bSet) { - CFX_RectF rtInvalidate(m_pOwner->m_rtBtn); - if (bSet) { - m_pOwner->m_pProperties->m_dwStates |= FWL_WGTSTATE_Focused; - if (m_pOwner->m_pEdit && - !(m_pOwner->m_pEdit->GetStylesEx() & FWL_STYLEEXT_EDT_ReadOnly)) { - m_pOwner->m_rtBtn.Set(m_pOwner->m_pProperties->m_rtWidget.width, 0, - m_pOwner->m_fBtn, - m_pOwner->m_pProperties->m_rtWidget.height - 1); - } - rtInvalidate = m_pOwner->m_rtBtn; - pMsg->m_pDstTarget = m_pOwner->m_pEdit.get(); - IFWL_WidgetDelegate* pDelegate = m_pOwner->m_pEdit->SetDelegate(NULL); - pDelegate->OnProcessMessage(pMsg); - } else { - m_pOwner->m_pProperties->m_dwStates &= ~FWL_WGTSTATE_Focused; - m_pOwner->m_rtBtn.Set(0, 0, 0, 0); - if (m_pOwner->DisForm_IsMonthCalendarShowed()) { - m_pOwner->ShowMonthCalendar(FALSE); - } - if (m_pOwner->m_pEdit->GetStates() & FWL_WGTSTATE_Focused) { - pMsg->m_pSrcTarget = m_pOwner->m_pEdit.get(); - IFWL_WidgetDelegate* pDelegate = m_pOwner->m_pEdit->SetDelegate(NULL); - pDelegate->OnProcessMessage(pMsg); - } - } - rtInvalidate.Inflate(2, 2); - m_pOwner->Repaint(&rtInvalidate); -} diff --git a/xfa/src/fwl/basewidget/fwl_datetimepickerimp.h b/xfa/src/fwl/basewidget/fwl_datetimepickerimp.h deleted file mode 100644 index 4bc1063db5..0000000000 --- a/xfa/src/fwl/basewidget/fwl_datetimepickerimp.h +++ /dev/null @@ -1,235 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FWL_BASEWIDGET_FWL_DATETIMEPICKERIMP_H_ -#define XFA_SRC_FWL_BASEWIDGET_FWL_DATETIMEPICKERIMP_H_ - -#include - -#include "xfa/include/fwl/core/fwl_form.h" -#include "xfa/include/fwl/core/fwl_theme.h" -#include "xfa/include/fwl/basewidget/fwl_datetimepicker.h" -#include "xfa/include/fwl/basewidget/fwl_edit.h" -#include "xfa/include/fwl/basewidget/fwl_monthcalendar.h" -#include "xfa/src/fwl/basewidget/fwl_editimp.h" -#include "xfa/src/fwl/basewidget/fwl_monthcalendarimp.h" - -class CFWL_WidgetImp; -class CFWL_WidgetImpProperties; -class CFWL_WidgetImpDelegate; -class CFWL_DateTimeEdit; -class CFWL_DateTimeEditImpDelegate; -class CFWL_DateTimeCalendar; -class CFWL_DateTimeCalendarImpDelegate; -class CFWL_DateTimePickerImp; -class CFWL_DateTimePickerImpDelegate; - -class IFWL_DateTimeForm : public IFWL_Form { - public: - static IFWL_DateTimeForm* Create(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter); - - protected: - IFWL_DateTimeForm() {} -}; - -class IFWL_DateTimeCalender : public IFWL_MonthCalendar { - public: - static IFWL_DateTimeCalender* Create( - const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter); - - protected: - IFWL_DateTimeCalender() {} -}; - -class IFWL_DateTimeEdit : public IFWL_Edit { - public: - static IFWL_DateTimeEdit* Create(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter); - - protected: - IFWL_DateTimeEdit() {} -}; - -class CFWL_DateTimeEdit : public CFWL_EditImp { - public: - CFWL_DateTimeEdit(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter); - virtual FWL_ERR Initialize(); - virtual FWL_ERR Finalize(); - - protected: - friend class CFWL_DateTimeEditImpDelegate; -}; -class CFWL_DateTimeEditImpDelegate : public CFWL_EditImpDelegate { - public: - CFWL_DateTimeEditImpDelegate(CFWL_DateTimeEdit* pOwner); - int32_t OnProcessMessage(CFWL_Message* pMessage) override; - - private: - int32_t DisForm_OnProcessMessage(CFWL_Message* pMessage); - - protected: - CFWL_DateTimeEdit* m_pOwner; -}; -class CFWL_DateTimeCalendar : public CFWL_MonthCalendarImp { - public: - CFWL_DateTimeCalendar(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter); - virtual FWL_ERR Initialize(); - virtual FWL_ERR Finalize(); - - protected: - friend class CFWL_DateTimeCalendarImpDelegate; -}; -class CFWL_DateTimeCalendarImpDelegate : public CFWL_MonthCalendarImpDelegate { - public: - CFWL_DateTimeCalendarImpDelegate(CFWL_DateTimeCalendar* pOwner); - int32_t OnProcessMessage(CFWL_Message* pMessage) override; - - void OnLButtonDownEx(CFWL_MsgMouse* pMsg); - void OnLButtonUpEx(CFWL_MsgMouse* pMsg); - void OnMouseMoveEx(CFWL_MsgMouse* pMsg); - - private: - int32_t DisForm_OnProcessMessage(CFWL_Message* pMessage); - void DisForm_OnLButtonUpEx(CFWL_MsgMouse* pMsg); - - protected: - CFWL_DateTimeCalendar* m_pOwner; - FX_BOOL m_bFlag; -}; -class CFWL_DateTimePickerImp : public CFWL_WidgetImp { - public: - CFWL_DateTimePickerImp(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter); - virtual ~CFWL_DateTimePickerImp(); - virtual FWL_ERR GetClassName(CFX_WideString& wsClass) const; - virtual FX_DWORD GetClassID() const; - virtual FWL_ERR Initialize(); - virtual FWL_ERR Finalize(); - virtual FWL_ERR GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize = FALSE); - virtual FWL_ERR Update(); - virtual FX_DWORD HitTest(FX_FLOAT fx, FX_FLOAT fy); - virtual FWL_ERR DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL); - virtual FWL_ERR SetThemeProvider(IFWL_ThemeProvider* pTP); - virtual FWL_ERR GetCurSel(int32_t& iYear, int32_t& iMonth, int32_t& iDay); - virtual FWL_ERR SetCurSel(int32_t iYear, int32_t iMonth, int32_t iDay); - virtual FWL_ERR SetEditText(const CFX_WideString& wsText); - virtual FWL_ERR GetEditText(CFX_WideString& wsText, - int32_t nStart = 0, - int32_t nCount = -1) const; - - public: - virtual FX_BOOL CanUndo(); - virtual FX_BOOL CanRedo(); - virtual FX_BOOL Undo(); - virtual FX_BOOL Redo(); - virtual FX_BOOL CanCopy(); - virtual FX_BOOL CanCut(); - virtual FX_BOOL CanSelectAll(); - virtual FX_BOOL Copy(CFX_WideString& wsCopy); - virtual FX_BOOL Cut(CFX_WideString& wsCut); - virtual FX_BOOL Paste(const CFX_WideString& wsPaste); - virtual FX_BOOL SelectAll(); - virtual FX_BOOL Delete(); - virtual FX_BOOL DeSelect(); - virtual FWL_ERR GetBBox(CFX_RectF& rect); - virtual FWL_ERR SetEditLimit(int32_t nLimit); - virtual FWL_ERR ModifyEditStylesEx(FX_DWORD dwStylesExAdded, - FX_DWORD dwStylesExRemoved); - - public: - IFWL_DateTimeEdit* GetDataTimeEdit(); - - protected: - void DrawDropDownButton(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix); - void FormatDateString(int32_t iYear, - int32_t iMonth, - int32_t iDay, - CFX_WideString& wsText); - void ShowMonthCalendar(FX_BOOL bActivate); - FX_BOOL IsMonthCalendarShowed(); - void ReSetEditAlignment(); - void InitProxyForm(); - void ProcessSelChanged(int32_t iYear, int32_t iMonth, int32_t iDay); - - private: - FWL_ERR DisForm_Initialize(); - void DisForm_InitDateTimeCalendar(); - void DisForm_InitDateTimeEdit(); - FX_BOOL DisForm_IsMonthCalendarShowed(); - void DisForm_ShowMonthCalendar(FX_BOOL bActivate); - FX_DWORD DisForm_HitTest(FX_FLOAT fx, FX_FLOAT fy); - FX_BOOL DisForm_IsNeedShowButton(); - FWL_ERR DisForm_Update(); - FWL_ERR DisForm_GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize = FALSE); - FWL_ERR DisForm_GetBBox(CFX_RectF& rect); - FWL_ERR DisForm_DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL); - - protected: - CFX_RectF m_rtBtn; - CFX_RectF m_rtClient; - int32_t m_iBtnState; - int32_t m_iYear; - int32_t m_iMonth; - int32_t m_iDay; - FX_BOOL m_bLBtnDown; - std::unique_ptr m_pEdit; - std::unique_ptr m_pMonthCal; - std::unique_ptr m_pForm; - FX_FLOAT m_fBtn; - class CFWL_MonthCalendarImpDP : public IFWL_MonthCalendarDP { - public: - CFWL_MonthCalendarImpDP() { - m_iCurYear = 2010; - m_iCurMonth = 3; - m_iCurDay = 29; - } - virtual FWL_ERR GetCaption(IFWL_Widget* pWidget, - CFX_WideString& wsCaption) { - return FWL_ERR_Succeeded; - } - virtual int32_t GetCurDay(IFWL_Widget* pWidget) { return m_iCurDay; } - virtual int32_t GetCurMonth(IFWL_Widget* pWidget) { return m_iCurMonth; } - virtual int32_t GetCurYear(IFWL_Widget* pWidget) { return m_iCurYear; } - int32_t m_iCurDay; - int32_t m_iCurYear; - int32_t m_iCurMonth; - }; - - CFWL_MonthCalendarImpDP m_MonthCalendarDP; - friend class CFWL_DateTimeEditImpDelegate; - friend class CFWL_DateTimeCalendar; - friend class CFWL_DateTimeCalendarImpDelegate; - friend class CFWL_DateTimePickerImpDelegate; -}; -class CFWL_DateTimePickerImpDelegate : public CFWL_WidgetImpDelegate { - public: - CFWL_DateTimePickerImpDelegate(CFWL_DateTimePickerImp* pOwner); - int32_t OnProcessMessage(CFWL_Message* pMessage) override; - FWL_ERR OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL) override; - - protected: - void OnFocusChanged(CFWL_Message* pMsg, FX_BOOL bSet = TRUE); - void OnLButtonDown(CFWL_MsgMouse* pMsg); - void OnLButtonUp(CFWL_MsgMouse* pMsg); - void OnMouseMove(CFWL_MsgMouse* pMsg); - void OnMouseLeave(CFWL_MsgMouse* pMsg); - - CFWL_DateTimePickerImp* m_pOwner; - - private: - void DisForm_OnFocusChanged(CFWL_Message* pMsg, FX_BOOL bSet = TRUE); -}; - -#endif // XFA_SRC_FWL_BASEWIDGET_FWL_DATETIMEPICKERIMP_H_ diff --git a/xfa/src/fwl/basewidget/fwl_editimp.cpp b/xfa/src/fwl/basewidget/fwl_editimp.cpp deleted file mode 100644 index 662fa91ec1..0000000000 --- a/xfa/src/fwl/basewidget/fwl_editimp.cpp +++ /dev/null @@ -1,2152 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fwl/basewidget/fwl_editimp.h" - -#include -#include - -#include "xfa/include/fwl/basewidget/fwl_caret.h" -#include "xfa/include/fwl/basewidget/fwl_datetimepicker.h" -#include "xfa/include/fwl/core/fwl_theme.h" -#include "xfa/src/fde/fde_render.h" -#include "xfa/src/fde/fde_renderdevice.h" -#include "xfa/src/fee/ifde_txtedtpage.h" -#include "xfa/src/fwl/basewidget/fwl_caretimp.h" -#include "xfa/src/fwl/basewidget/fwl_comboboximp.h" -#include "xfa/src/fwl/basewidget/fwl_scrollbarimp.h" -#include "xfa/src/fwl/core/fwl_appimp.h" -#include "xfa/src/fwl/core/fwl_noteimp.h" -#include "xfa/src/fwl/core/fwl_targetimp.h" -#include "xfa/src/fwl/core/fwl_threadimp.h" -#include "xfa/src/fwl/core/fwl_widgetimp.h" -#include "xfa/src/fwl/core/fwl_widgetmgrimp.h" - -// static -IFWL_Edit* IFWL_Edit::Create(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) { - IFWL_Edit* pEdit = new IFWL_Edit; - CFWL_EditImp* pEditImpl = new CFWL_EditImp(properties, pOuter); - pEdit->SetImpl(pEditImpl); - pEditImpl->SetInterface(pEdit); - return pEdit; -} -// static -IFWL_Edit* IFWL_Edit::CreateComboEdit( - const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) { - IFWL_Edit* pEdit = new IFWL_Edit; - CFWL_EditImp* pComboEditImpl = new CFWL_ComboEditImp(properties, pOuter); - pEdit->SetImpl(pComboEditImpl); - pComboEditImpl->SetInterface(pEdit); - return pEdit; -} -IFWL_Edit::IFWL_Edit() {} -FWL_ERR IFWL_Edit::SetText(const CFX_WideString& wsText) { - return static_cast(GetImpl())->SetText(wsText); -} -int32_t IFWL_Edit::GetTextLength() const { - return static_cast(GetImpl())->GetTextLength(); -} -FWL_ERR IFWL_Edit::GetText(CFX_WideString& wsText, - int32_t nStart, - int32_t nCount) const { - return static_cast(GetImpl())->GetText(wsText, nStart, nCount); -} -FWL_ERR IFWL_Edit::ClearText() { - return static_cast(GetImpl())->ClearText(); -} -int32_t IFWL_Edit::GetCaretPos() const { - return static_cast(GetImpl())->GetCaretPos(); -} -int32_t IFWL_Edit::SetCaretPos(int32_t nIndex, FX_BOOL bBefore) { - return static_cast(GetImpl())->SetCaretPos(nIndex, bBefore); -} -FWL_ERR IFWL_Edit::AddSelRange(int32_t nStart, int32_t nCount) { - return static_cast(GetImpl())->AddSelRange(nStart, nCount); -} -int32_t IFWL_Edit::CountSelRanges() { - return static_cast(GetImpl())->CountSelRanges(); -} -int32_t IFWL_Edit::GetSelRange(int32_t nIndex, int32_t& nStart) { - return static_cast(GetImpl())->GetSelRange(nIndex, nStart); -} -FWL_ERR IFWL_Edit::ClearSelections() { - return static_cast(GetImpl())->ClearSelections(); -} -int32_t IFWL_Edit::GetLimit() { - return static_cast(GetImpl())->GetLimit(); -} -FWL_ERR IFWL_Edit::SetLimit(int32_t nLimit) { - return static_cast(GetImpl())->SetLimit(nLimit); -} -FWL_ERR IFWL_Edit::SetAliasChar(FX_WCHAR wAlias) { - return static_cast(GetImpl())->SetAliasChar(wAlias); -} -FWL_ERR IFWL_Edit::Insert(int32_t nStart, - const FX_WCHAR* lpText, - int32_t nLen) { - return static_cast(GetImpl())->Insert(nStart, lpText, nLen); -} -FWL_ERR IFWL_Edit::DeleteSelections() { - return static_cast(GetImpl())->DeleteSelections(); -} -FWL_ERR IFWL_Edit::DeleteRange(int32_t nStart, int32_t nCount) { - return static_cast(GetImpl())->DeleteRange(nStart, nCount); -} -FWL_ERR IFWL_Edit::ReplaceSelections(const CFX_WideStringC& wsReplace) { - return static_cast(GetImpl())->ReplaceSelections(wsReplace); -} -FWL_ERR IFWL_Edit::Replace(int32_t nStart, - int32_t nLen, - const CFX_WideStringC& wsReplace) { - return static_cast(GetImpl()) - ->Replace(nStart, nLen, wsReplace); -} -FWL_ERR IFWL_Edit::DoClipboard(int32_t iCmd) { - return static_cast(GetImpl())->DoClipboard(iCmd); -} -FX_BOOL IFWL_Edit::Copy(CFX_WideString& wsCopy) { - return static_cast(GetImpl())->Copy(wsCopy); -} -FX_BOOL IFWL_Edit::Cut(CFX_WideString& wsCut) { - return static_cast(GetImpl())->Cut(wsCut); -} -FX_BOOL IFWL_Edit::Paste(const CFX_WideString& wsPaste) { - return static_cast(GetImpl())->Paste(wsPaste); -} -FX_BOOL IFWL_Edit::Delete() { - return static_cast(GetImpl())->Delete(); -} -FX_BOOL IFWL_Edit::Redo(const CFX_ByteStringC& bsRecord) { - return static_cast(GetImpl())->Redo(bsRecord); -} -FX_BOOL IFWL_Edit::Undo(const CFX_ByteStringC& bsRecord) { - return static_cast(GetImpl())->Undo(bsRecord); -} -FX_BOOL IFWL_Edit::Undo() { - return static_cast(GetImpl())->Undo(); -} -FX_BOOL IFWL_Edit::Redo() { - return static_cast(GetImpl())->Redo(); -} -FX_BOOL IFWL_Edit::CanUndo() { - return static_cast(GetImpl())->CanUndo(); -} -FX_BOOL IFWL_Edit::CanRedo() { - return static_cast(GetImpl())->CanRedo(); -} -FWL_ERR IFWL_Edit::SetTabWidth(FX_FLOAT fTabWidth, FX_BOOL bEquidistant) { - return static_cast(GetImpl()) - ->SetTabWidth(fTabWidth, bEquidistant); -} -FWL_ERR IFWL_Edit::SetOuter(IFWL_Widget* pOuter) { - return static_cast(GetImpl())->SetOuter(pOuter); -} -FWL_ERR IFWL_Edit::SetNumberRange(int32_t iMin, int32_t iMax) { - return static_cast(GetImpl())->SetNumberRange(iMin, iMax); -} -FWL_ERR IFWL_Edit::SetBackColor(FX_DWORD dwColor) { - return static_cast(GetImpl())->SetBackgroundColor(dwColor); -} -FWL_ERR IFWL_Edit::SetFont(const CFX_WideString& wsFont, FX_FLOAT fSize) { - return static_cast(GetImpl())->SetFont(wsFont, fSize); -} -void IFWL_Edit::SetScrollOffset(FX_FLOAT fScrollOffset) { - return static_cast(GetImpl())->SetScrollOffset(fScrollOffset); -} -FX_BOOL IFWL_Edit::GetSuggestWords(CFX_PointF pointf, - std::vector& sSuggest) { - return static_cast(GetImpl()) - ->GetSuggestWords(pointf, sSuggest); -} -FX_BOOL IFWL_Edit::ReplaceSpellCheckWord(CFX_PointF pointf, - const CFX_ByteStringC& bsReplace) { - return static_cast(GetImpl()) - ->ReplaceSpellCheckWord(pointf, bsReplace); -} -#define FWL_EDIT_Margin 3 -CFWL_EditImp::CFWL_EditImp(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) - : CFWL_WidgetImp(properties, pOuter), - m_fVAlignOffset(0.0f), - m_fScrollOffsetX(0.0f), - m_fScrollOffsetY(0.0f), - m_pEdtEngine(NULL), - m_bLButtonDown(FALSE), - m_nSelStart(0), - m_nLimit(-1), - m_fSpaceAbove(0), - m_fSpaceBelow(0), - m_fFontSize(0), - m_bSetRange(FALSE), - m_iMin(-1), - m_iMax(0xFFFFFFF), - m_backColor(0), - m_updateBackColor(FALSE), - m_iCurRecord(-1), - m_iMaxRecord(128) { - m_rtClient.Reset(); - m_rtEngine.Reset(); - m_rtStatic.Reset(); -} -CFWL_EditImp::~CFWL_EditImp() { - if (m_pEdtEngine) { - m_pEdtEngine->Release(); - m_pEdtEngine = NULL; - } - ClearRecord(); -} -FWL_ERR CFWL_EditImp::GetClassName(CFX_WideString& wsClass) const { - wsClass = FWL_CLASS_Edit; - return FWL_ERR_Succeeded; -} -FX_DWORD CFWL_EditImp::GetClassID() const { - return FWL_CLASSHASH_Edit; -} -FWL_ERR CFWL_EditImp::Initialize() { - if (CFWL_WidgetImp::Initialize() != FWL_ERR_Succeeded) - return FWL_ERR_Indefinite; - if (!m_pDelegate) { - m_pDelegate = new CFWL_EditImpDelegate(this); - } - InitCaret(); - if (!m_pEdtEngine) { - InitEngine(); - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_EditImp::Finalize() { - if (m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) { - ShowCaret(FALSE); - } - if (m_pHorzScrollBar) { - m_pHorzScrollBar->Finalize(); - } - if (m_pVertScrollBar) { - m_pVertScrollBar->Finalize(); - } - delete m_pDelegate; - m_pDelegate = nullptr; - return CFWL_WidgetImp::Finalize(); -} -FWL_ERR CFWL_EditImp::GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize) { - if (bAutoSize) { - rect.Set(0, 0, 0, 0); - if (m_pEdtEngine) { - int32_t iTextLen = m_pEdtEngine->GetTextLength(); - if (iTextLen > 0) { - CFX_WideString wsText; - m_pEdtEngine->GetText(wsText, 0); - CFX_SizeF sz = CalcTextSize( - wsText, m_pProperties->m_pThemeProvider, - m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_MultiLine); - rect.Set(0, 0, sz.x, sz.y); - } - } - CFWL_WidgetImp::GetWidgetRect(rect, TRUE); - } else { - rect = m_pProperties->m_rtWidget; - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_OuterScrollbar) { - if (IsShowScrollBar(TRUE)) { - FX_FLOAT* pfWidth = static_cast( - GetThemeCapacity(FWL_WGTCAPACITY_ScrollBarWidth)); - rect.width += *pfWidth; - rect.width += FWL_EDIT_Margin; - } - if (IsShowScrollBar(FALSE)) { - FX_FLOAT* pfWidth = static_cast( - GetThemeCapacity(FWL_WGTCAPACITY_ScrollBarWidth)); - rect.height += *pfWidth; - rect.height += FWL_EDIT_Margin; - } - } - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_EditImp::SetStates(FX_DWORD dwStates, FX_BOOL bSet) { - if ((m_pProperties->m_dwStates & FWL_WGTSTATE_Invisible) || - (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled)) { - ShowCaret(FALSE); - } - return CFWL_WidgetImp::SetStates(dwStates, bSet); -} -FWL_ERR CFWL_EditImp::SetWidgetRect(const CFX_RectF& rect) { - return CFWL_WidgetImp::SetWidgetRect(rect); -} -FWL_ERR CFWL_EditImp::Update() { - if (IsLocked()) { - return FWL_ERR_Indefinite; - } - if (!m_pProperties->m_pThemeProvider) { - m_pProperties->m_pThemeProvider = GetAvailableTheme(); - } - Layout(); - if (m_rtClient.IsEmpty()) { - return FWL_ERR_Indefinite; - } - UpdateEditEngine(); - UpdateVAlignment(); - UpdateScroll(); - InitCaret(); - return FWL_ERR_Succeeded; -} -FX_DWORD CFWL_EditImp::HitTest(FX_FLOAT fx, FX_FLOAT fy) { - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_OuterScrollbar) { - if (IsShowScrollBar(TRUE)) { - CFX_RectF rect; - m_pVertScrollBar->GetWidgetRect(rect); - if (rect.Contains(fx, fy)) { - return FWL_WGTHITTEST_VScrollBar; - } - } - if (IsShowScrollBar(FALSE)) { - CFX_RectF rect; - m_pHorzScrollBar->GetWidgetRect(rect); - if (rect.Contains(fx, fy)) { - return FWL_WGTHITTEST_HScrollBar; - } - } - } - if (m_rtClient.Contains(fx, fy)) { - return FWL_WGTHITTEST_Edit; - } - return FWL_WGTHITTEST_Unknown; -} -#define FX_EDIT_ISLATINWORD(u) \ - (u == 0x2D || (u <= 0x005A && u >= 0x0041) || \ - (u <= 0x007A && u >= 0x0061) || (u <= 0x02AF && u >= 0x00C0) || \ - u == 0x0027) -static void AddSquigglyPath(CFX_Path& PathData, - FX_FLOAT fStartX, - FX_FLOAT fEndX, - FX_FLOAT fY, - FX_FLOAT fStep) { - PathData.MoveTo(fStartX, fY); - FX_FLOAT fx; - int32_t i; - for (i = 1, fx = fStartX + fStep; fx < fEndX; fx += fStep, i++) { - PathData.LineTo(fx, fY + (i & 1) * fStep); - } -} -void CFWL_EditImp::AddSpellCheckObj(CFX_Path& PathData, - int32_t nStart, - int32_t nCount, - FX_FLOAT fOffSetX, - FX_FLOAT fOffSetY) { - FX_FLOAT fStartX = 0.0f; - FX_FLOAT fEndX = 0.0f; - FX_FLOAT fY = 0.0f; - FX_FLOAT fStep = 0.0f; - IFDE_TxtEdtPage* pPage = m_pEdtEngine->GetPage(0); - CFX_RectFArray rectArray; - CFX_RectF rectText; - const FDE_TXTEDTPARAMS* txtEdtParams = m_pEdtEngine->GetEditParams(); - FX_FLOAT fAsent = (FX_FLOAT)txtEdtParams->pFont->GetAscent() * - txtEdtParams->fFontSize / 1000; - pPage->CalcRangeRectArray(nStart, nCount, rectArray); - for (int i = 0; i < rectArray.GetSize(); i++) { - rectText = rectArray.GetAt(i); - fY = rectText.top + fAsent + fOffSetY; - fStep = txtEdtParams->fFontSize / 16.0f; - fStartX = rectText.left + fOffSetX; - fEndX = fStartX + rectText.Width(); - AddSquigglyPath(PathData, fStartX, fEndX, fY, fStep); - } -} -int32_t CFWL_EditImp::GetWordAtPoint(CFX_PointF pointf, int32_t& nCount) { - return 0; -} -FX_BOOL CFWL_EditImp::GetSuggestWords(CFX_PointF pointf, - std::vector& sSuggest) { - int32_t nWordCount = 0; - int32_t nWordStart = GetWordAtPoint(pointf, nWordCount); - if (nWordCount < 1) { - return FALSE; - } - CFX_WideString wsSpell; - GetText(wsSpell, nWordStart, nWordCount); - CFX_ByteString sLatinWord; - for (int i = 0; i < nWordCount; i++) { - if (!FX_EDIT_ISLATINWORD(wsSpell[i])) { - break; - } - sLatinWord += (FX_CHAR)wsSpell[i]; - } - if (sLatinWord.IsEmpty()) { - return FALSE; - } - CFWL_EvtEdtCheckWord checkWordEvent; - checkWordEvent.m_pSrcTarget = m_pInterface; - checkWordEvent.bsWord = sLatinWord; - checkWordEvent.bCheckWord = TRUE; - DispatchEvent(&checkWordEvent); - if (checkWordEvent.bCheckWord) { - return FALSE; - } - CFWL_EvtEdtGetSuggestWords suggestWordsEvent; - suggestWordsEvent.m_pSrcTarget = m_pInterface; - suggestWordsEvent.bsWord = sLatinWord; - suggestWordsEvent.bsArraySuggestWords = sSuggest; - suggestWordsEvent.bSuggestWords = FALSE; - DispatchEvent(&checkWordEvent); - return suggestWordsEvent.bSuggestWords; -} -FX_BOOL CFWL_EditImp::ReplaceSpellCheckWord(CFX_PointF pointf, - const CFX_ByteStringC& bsReplace) { - int32_t nWordCount = 0; - int32_t nWordStart = GetWordAtPoint(pointf, nWordCount); - if (nWordCount < 1) { - return FALSE; - } - CFX_WideString wsSpell; - GetText(wsSpell, nWordStart, nWordCount); - for (int i = 0; i < nWordCount; i++) { - if (!FX_EDIT_ISLATINWORD(wsSpell[i])) { - nWordCount = i; - break; - } - } - int32_t nDestLen = bsReplace.GetLength(); - CFX_WideString wsDest; - FX_WCHAR* pBuffer = wsDest.GetBuffer(nDestLen); - for (int32_t i = 0; i < nDestLen; i++) { - pBuffer[i] = bsReplace[i]; - } - wsDest.ReleaseBuffer(nDestLen); - Replace(nWordStart, nWordCount, wsDest); - return TRUE; -} -void CFWL_EditImp::DrawSpellCheck(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - pGraphics->SaveGraphState(); - if (pMatrix) { - pGraphics->ConcatMatrix(const_cast(pMatrix)); - } - FX_ARGB cr = 0xFFFF0000; - CFX_Color crLine(cr); - CFWL_EvtEdtCheckWord checkWordEvent; - checkWordEvent.m_pSrcTarget = m_pInterface; - CFX_ByteString sLatinWord; - CFX_Path pathSpell; - pathSpell.Create(); - int32_t nStart = 0; - FX_FLOAT fOffSetX = m_rtEngine.left - m_fScrollOffsetX; - FX_FLOAT fOffSetY = m_rtEngine.top - m_fScrollOffsetY + m_fVAlignOffset; - CFX_WideString wsSpell; - GetText(wsSpell); - int32_t nContentLen = wsSpell.GetLength(); - for (int i = 0; i < nContentLen; i++) { - if (FX_EDIT_ISLATINWORD(wsSpell[i])) { - if (sLatinWord.IsEmpty()) { - nStart = i; - } - sLatinWord += (FX_CHAR)wsSpell[i]; - } else { - checkWordEvent.bsWord = sLatinWord; - checkWordEvent.bCheckWord = TRUE; - DispatchEvent(&checkWordEvent); - if (!sLatinWord.IsEmpty() && !checkWordEvent.bCheckWord) { - AddSpellCheckObj(pathSpell, nStart, sLatinWord.GetLength(), fOffSetX, - fOffSetY); - } - sLatinWord.Empty(); - } - } - checkWordEvent.bsWord = sLatinWord; - checkWordEvent.bCheckWord = TRUE; - DispatchEvent(&checkWordEvent); - if (!sLatinWord.IsEmpty() && !checkWordEvent.bCheckWord) { - AddSpellCheckObj(pathSpell, nStart, sLatinWord.GetLength(), fOffSetX, - fOffSetY); - } - if (!pathSpell.IsEmpty()) { - CFX_RectF rtClip = m_rtEngine; - CFX_Matrix mt; - mt.Set(1, 0, 0, 1, fOffSetX, fOffSetY); - if (pMatrix) { - pMatrix->TransformRect(rtClip); - mt.Concat(*pMatrix); - } - pGraphics->SetClipRect(rtClip); - pGraphics->SetStrokeColor(&crLine); - pGraphics->SetLineWidth(0); - pGraphics->StrokePath(&pathSpell, NULL); - } - pGraphics->RestoreGraphState(); -} -FWL_ERR CFWL_EditImp::DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - if (!pGraphics) - return FWL_ERR_Indefinite; - if (!m_pProperties->m_pThemeProvider) - return FWL_ERR_Indefinite; - if (m_rtClient.IsEmpty()) { - return FWL_ERR_Indefinite; - } - IFWL_ThemeProvider* pTheme = m_pProperties->m_pThemeProvider; - if (!m_pWidgetMgr->IsFormDisabled()) { - DrawTextBk(pGraphics, pTheme, pMatrix); - } - if (m_pEdtEngine) { - DrawContent(pGraphics, pTheme, pMatrix); - } - if ((m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) && - !(m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_ReadOnly)) { - DrawSpellCheck(pGraphics, pMatrix); - } - if (HasBorder()) { - DrawBorder(pGraphics, FWL_PART_EDT_Border, pTheme, pMatrix); - } - if (HasEdge()) { - DrawEdge(pGraphics, FWL_PART_EDT_Edge, pTheme, pMatrix); - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_EditImp::SetThemeProvider(IFWL_ThemeProvider* pThemeProvider) { - if (!pThemeProvider) - return FWL_ERR_Indefinite; - if (m_pHorzScrollBar) { - m_pHorzScrollBar->SetThemeProvider(pThemeProvider); - } - if (m_pVertScrollBar) { - m_pVertScrollBar->SetThemeProvider(pThemeProvider); - } - if (m_pCaret) { - m_pCaret->SetThemeProvider(pThemeProvider); - } - m_pProperties->m_pThemeProvider = pThemeProvider; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_EditImp::SetText(const CFX_WideString& wsText) { - m_pEdtEngine->SetText(wsText); - return FWL_ERR_Succeeded; -} -int32_t CFWL_EditImp::GetTextLength() const { - if (!m_pEdtEngine) - return -1; - return m_pEdtEngine->GetTextLength(); -} -FWL_ERR CFWL_EditImp::GetText(CFX_WideString& wsText, - int32_t nStart, - int32_t nCount) const { - if (!m_pEdtEngine) - return FWL_ERR_Succeeded; - m_pEdtEngine->GetText(wsText, nStart, nCount); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_EditImp::ClearText() { - if (!m_pEdtEngine) - return FWL_ERR_Succeeded; - m_pEdtEngine->ClearText(); - return FWL_ERR_Succeeded; -} -int32_t CFWL_EditImp::GetCaretPos() const { - if (!m_pEdtEngine) - return -1; - return m_pEdtEngine->GetCaretPos(); -} -int32_t CFWL_EditImp::SetCaretPos(int32_t nIndex, FX_BOOL bBefore) { - if (!m_pEdtEngine) - return -1; - return m_pEdtEngine->SetCaretPos(nIndex, bBefore); -} -FWL_ERR CFWL_EditImp::AddSelRange(int32_t nStart, int32_t nCount) { - if (!m_pEdtEngine) - return FWL_ERR_Succeeded; - m_pEdtEngine->AddSelRange(nStart, nCount); - return FWL_ERR_Succeeded; -} -int32_t CFWL_EditImp::CountSelRanges() { - if (!m_pEdtEngine) - return 0; - return m_pEdtEngine->CountSelRanges(); - return FWL_ERR_Succeeded; -} -int32_t CFWL_EditImp::GetSelRange(int32_t nIndex, int32_t& nStart) { - if (!m_pEdtEngine) - return -1; - return m_pEdtEngine->GetSelRange(nIndex, nStart); -} -FWL_ERR CFWL_EditImp::ClearSelections() { - if (!m_pEdtEngine) - return FWL_ERR_Succeeded; - m_pEdtEngine->ClearSelection(); - return FWL_ERR_Succeeded; -} -int32_t CFWL_EditImp::GetLimit() { - return m_nLimit; -} -FWL_ERR CFWL_EditImp::SetLimit(int32_t nLimit) { - m_nLimit = nLimit; - if (!m_pEdtEngine) - return FWL_ERR_Succeeded; - m_pEdtEngine->SetLimit(nLimit); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_EditImp::SetAliasChar(FX_WCHAR wAlias) { - if (!m_pEdtEngine) - return FWL_ERR_Indefinite; - m_pEdtEngine->SetAliasChar(wAlias); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_EditImp::Insert(int32_t nStart, - const FX_WCHAR* lpText, - int32_t nLen) { - if (!m_pEdtEngine) - return FWL_ERR_Succeeded; - if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_ReadOnly) || - (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled)) { - return FWL_ERR_Indefinite; - } - m_pEdtEngine->Insert(nStart, lpText, nLen); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_EditImp::DeleteSelections() { - if (!m_pEdtEngine) - return FWL_ERR_Succeeded; - int32_t iCount = m_pEdtEngine->CountSelRanges(); - if (iCount > 0) { - m_pEdtEngine->Delete(-1); - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_EditImp::DeleteRange(int32_t nStart, int32_t nCount) { - if (!m_pEdtEngine) - return FWL_ERR_Succeeded; - m_pEdtEngine->DeleteRange(nStart, nCount); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_EditImp::ReplaceSelections(const CFX_WideStringC& wsReplace) { - if (!m_pEdtEngine) - return FWL_ERR_Succeeded; - int32_t iCount = m_pEdtEngine->CountSelRanges(); - for (int i = 0; i < iCount; i++) { - int32_t nStart; - int32_t nCount = m_pEdtEngine->GetSelRange(i, nStart); - m_pEdtEngine->Replace(nStart, nCount, wsReplace); - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_EditImp::Replace(int32_t nStart, - int32_t nLen, - const CFX_WideStringC& wsReplace) { - if (!m_pEdtEngine) - return FWL_ERR_Succeeded; - m_pEdtEngine->Replace(nStart, nLen, wsReplace); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_EditImp::DoClipboard(int32_t iCmd) { - if (!m_pEdtEngine) - return FWL_ERR_Succeeded; - if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_ReadOnly) || - (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled)) { - return FWL_ERR_Succeeded; - } - return FWL_ERR_Indefinite; -} -FX_BOOL CFWL_EditImp::Copy(CFX_WideString& wsCopy) { - if (!m_pEdtEngine) - return FALSE; - int32_t nCount = m_pEdtEngine->CountSelRanges(); - if (nCount == 0) { - return FALSE; - } - wsCopy.Empty(); - CFX_WideString wsTemp; - int32_t nStart, nLength; - for (int32_t i = 0; i < nCount; i++) { - nLength = m_pEdtEngine->GetSelRange(i, nStart); - m_pEdtEngine->GetText(wsTemp, nStart, nLength); - wsCopy += wsTemp; - wsTemp.Empty(); - } - return TRUE; -} -FX_BOOL CFWL_EditImp::Cut(CFX_WideString& wsCut) { - if (!m_pEdtEngine) - return FALSE; - int32_t nCount = m_pEdtEngine->CountSelRanges(); - if (nCount == 0) { - return FALSE; - } - wsCut.Empty(); - CFX_WideString wsTemp; - int32_t nStart, nLength; - for (int32_t i = 0; i < nCount; i++) { - nLength = m_pEdtEngine->GetSelRange(i, nStart); - m_pEdtEngine->GetText(wsTemp, nStart, nLength); - wsCut += wsTemp; - wsTemp.Empty(); - } - m_pEdtEngine->Delete(0); - return TRUE; -} -FX_BOOL CFWL_EditImp::Paste(const CFX_WideString& wsPaste) { - if (!m_pEdtEngine) - return FALSE; - int32_t nCaret = m_pEdtEngine->GetCaretPos(); - int32_t iError = - m_pEdtEngine->Insert(nCaret, wsPaste.c_str(), wsPaste.GetLength()); - if (iError < 0) { - ProcessInsertError(iError); - return FALSE; - } - return TRUE; -} -FX_BOOL CFWL_EditImp::Delete() { - if (!m_pEdtEngine) - return FALSE; - int32_t nCount = m_pEdtEngine->CountSelRanges(); - if (nCount < 1) { - return FALSE; - } - m_pEdtEngine->Delete(0); - return TRUE; -} -FX_BOOL CFWL_EditImp::Redo(const CFX_ByteStringC& bsRecord) { - if (!m_pEdtEngine) - return FALSE; - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_NoRedoUndo) { - return TRUE; - } - return m_pEdtEngine->Redo(bsRecord); -} -FX_BOOL CFWL_EditImp::Undo(const CFX_ByteStringC& bsRecord) { - if (!m_pEdtEngine) - return FALSE; - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_NoRedoUndo) { - return TRUE; - } - return m_pEdtEngine->Undo(bsRecord); -} -FX_BOOL CFWL_EditImp::Undo() { - if (!CanUndo()) { - return FALSE; - } - CFX_ByteString bsRecord = m_RecordArr[m_iCurRecord--]; - return Undo(bsRecord); -} -FX_BOOL CFWL_EditImp::Redo() { - if (!CanRedo()) { - return FALSE; - } - CFX_ByteString bsRecord = m_RecordArr[++m_iCurRecord]; - return Redo(bsRecord); -} -FX_BOOL CFWL_EditImp::CanUndo() { - return m_iCurRecord >= 0; -} -FX_BOOL CFWL_EditImp::CanRedo() { - return m_iCurRecord < m_RecordArr.GetSize() - 1; -} -FWL_ERR CFWL_EditImp::SetTabWidth(FX_FLOAT fTabWidth, FX_BOOL bEquidistant) { - if (!m_pEdtEngine) - return FWL_ERR_Succeeded; - FDE_LPTXTEDTPARAMS pParams = - (FDE_LPTXTEDTPARAMS)m_pEdtEngine->GetEditParams(); - pParams->fTabWidth = fTabWidth; - pParams->bTabEquidistant = bEquidistant; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_EditImp::SetOuter(IFWL_Widget* pOuter) { - m_pOuter = pOuter; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_EditImp::SetNumberRange(int32_t iMin, int32_t iMax) { - m_iMin = iMin; - m_iMax = iMax; - m_bSetRange = TRUE; - return FWL_ERR_Succeeded; -} -void CFWL_EditImp::On_CaretChanged(IFDE_TxtEdtEngine* pEdit, - int32_t nPage, - FX_BOOL bVisible) { - if (m_rtEngine.IsEmpty()) { - return; - } - if ((m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) == 0) { - return; - } - FX_BOOL bRepaintContent = UpdateOffset(); - UpdateCaret(); - CFX_RectF rtInvalid; - rtInvalid.Set(0, 0, 0, 0); - FX_BOOL bRepaintScroll = FALSE; - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_MultiLine) { - IFWL_ScrollBar* pScroll = UpdateScroll(); - if (pScroll) { - pScroll->GetWidgetRect(rtInvalid); - bRepaintScroll = TRUE; - } - } - if (bRepaintContent || bRepaintScroll) { - if (bRepaintContent) { - rtInvalid.Union(m_rtEngine); - } - Repaint(&rtInvalid); - } -} -void CFWL_EditImp::On_TextChanged(IFDE_TxtEdtEngine* pEdit, - FDE_TXTEDT_TEXTCHANGE_INFO& ChangeInfo) { - FX_DWORD dwStyleEx = m_pProperties->m_dwStyleExes; - if (dwStyleEx & FWL_STYLEEXT_EDT_VAlignMask) { - UpdateVAlignment(); - } - IFDE_TxtEdtPage* page = m_pEdtEngine->GetPage(0); - FX_FLOAT fContentWidth = page->GetContentsBox().width; - FX_FLOAT fContentHeight = page->GetContentsBox().height; - CFX_RectF rtTemp; - GetClientRect(rtTemp); - FX_BOOL bHSelfAdaption = - m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_HSelfAdaption; - FX_BOOL bVSelfAdaption = - m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_VSelfAdaption; - FX_BOOL bNeedUpdate = FALSE; - if (bHSelfAdaption || bVSelfAdaption) { - CFWL_EvtEdtPreSelfAdaption evt; - evt.m_pSrcTarget = m_pInterface; - evt.bHSelfAdaption = TRUE; - evt.bVSelfAdaption = TRUE; - FX_FLOAT fWidth; - FX_FLOAT fHight; - fWidth = bHSelfAdaption ? fContentWidth : m_pProperties->m_rtWidget.width; - fHight = bVSelfAdaption ? fContentHeight : m_pProperties->m_rtWidget.height; - evt.rtAfterChange.Set(0, 0, fWidth, fHight); - DispatchEvent(&evt); - if (!evt.bHSelfAdaption) { - ModifyStylesEx( - 0, FWL_STYLEEXT_EDT_HSelfAdaption | FWL_STYLEEXT_EDT_AutoHScroll); - } - if (!evt.bVSelfAdaption) { - ModifyStylesEx( - 0, FWL_STYLEEXT_EDT_VSelfAdaption | FWL_STYLEEXT_EDT_AutoVScroll); - } - bNeedUpdate = (bHSelfAdaption && !evt.bHSelfAdaption) || - (bVSelfAdaption && !evt.bVSelfAdaption); - } - FX_FLOAT fContentWidth1 = fContentWidth; - FX_FLOAT fContentHeight1 = fContentHeight; - if (bNeedUpdate) { - UpdateEditParams(); - UpdateEditLayout(); - IFDE_TxtEdtPage* page1 = m_pEdtEngine->GetPage(0); - fContentWidth1 = page1->GetContentsBox().width; - fContentHeight1 = page1->GetContentsBox().height; - } - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_HSelfAdaption) { - rtTemp.width = std::max(m_pProperties->m_rtWidget.width, fContentWidth1); - m_pProperties->m_rtWidget.width = fContentWidth1; - } - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_VSelfAdaption) { - rtTemp.height = std::max(m_pProperties->m_rtWidget.height, fContentHeight1); - m_pProperties->m_rtWidget.height = fContentHeight1; - } - CFWL_EvtEdtTextChanged event; - event.m_pSrcTarget = m_pInterface; - event.nChangeType = ChangeInfo.nChangeType; - event.wsInsert = ChangeInfo.wsInsert; - event.wsDelete = ChangeInfo.wsDelete; - event.wsPrevText = ChangeInfo.wsPrevText; - DispatchEvent(&event); - LayoutScrollBar(); - Repaint(&rtTemp); -} -void CFWL_EditImp::On_SelChanged(IFDE_TxtEdtEngine* pEdit) { - CFX_RectF rtTemp; - GetClientRect(rtTemp); - Repaint(&rtTemp); -} -FX_BOOL CFWL_EditImp::On_PageLoad(IFDE_TxtEdtEngine* pEdit, - int32_t nPageIndex, - int32_t nPurpose) { - IFDE_TxtEdtEngine* pEdtEngine = m_pEdtEngine; - IFDE_TxtEdtPage* pPage = pEdtEngine->GetPage(nPageIndex); - if (!pPage) - return FALSE; - pPage->LoadPage(nullptr, nullptr); - return TRUE; -} -FX_BOOL CFWL_EditImp::On_PageUnload(IFDE_TxtEdtEngine* pEdit, - int32_t nPageIndex, - int32_t nPurpose) { - IFDE_TxtEdtEngine* pEdtEngine = m_pEdtEngine; - IFDE_TxtEdtPage* pPage = pEdtEngine->GetPage(nPageIndex); - if (!pPage) - return FALSE; - pPage->UnloadPage(nullptr); - return TRUE; -} - -void CFWL_EditImp::On_AddDoRecord(IFDE_TxtEdtEngine* pEdit, - const CFX_ByteStringC& bsDoRecord) { - AddDoRecord(bsDoRecord); -} - -FX_BOOL CFWL_EditImp::On_ValidateField(IFDE_TxtEdtEngine* pEdit, - int32_t nBlockIndex, - int32_t nFieldIndex, - const CFX_WideString& wsFieldText, - int32_t nCharIndex) { - return TRUE; -} -FX_BOOL CFWL_EditImp::On_ValidateBlock(IFDE_TxtEdtEngine* pEdit, - int32_t nBlockIndex) { - return TRUE; -} -FX_BOOL CFWL_EditImp::On_GetBlockFormatText(IFDE_TxtEdtEngine* pEdit, - int32_t nBlockIndex, - CFX_WideString& wsBlockText) { - return FALSE; -} -FX_BOOL CFWL_EditImp::On_Validate(IFDE_TxtEdtEngine* pEdit, - CFX_WideString& wsText) { - IFWL_Widget* pDst = GetOuter(); - if (!pDst) { - pDst = m_pInterface; - } - CFWL_EvtEdtValidate event; - event.pDstWidget = pDst; - event.m_pSrcTarget = m_pInterface; - event.wsInsert = wsText; - event.bValidate = TRUE; - DispatchEvent(&event); - return event.bValidate; -} -FWL_ERR CFWL_EditImp::SetBackgroundColor(FX_DWORD color) { - m_backColor = color; - m_updateBackColor = TRUE; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_EditImp::SetFont(const CFX_WideString& wsFont, FX_FLOAT fSize) { - m_wsFont = wsFont; - m_fFontSize = fSize; - return FWL_ERR_Succeeded; -} -void CFWL_EditImp::SetScrollOffset(FX_FLOAT fScrollOffset) { - m_fScrollOffsetY = fScrollOffset; -} -void CFWL_EditImp::DrawTextBk(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix) { - CFWL_ThemeBackground param; - param.m_pWidget = m_pInterface; - param.m_iPart = FWL_PART_EDT_Background; - param.m_dwData = FWL_PARTDATA_EDT_Background; - param.m_dwStates = m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_ReadOnly - ? FWL_PARTSTATE_EDT_ReadOnly - : FWL_PARTSTATE_EDT_Normal; - FX_DWORD dwStates = (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled); - if (dwStates) { - param.m_dwStates = FWL_PARTSTATE_EDT_Disable; - } - param.m_pGraphics = pGraphics; - param.m_matrix = *pMatrix; - param.m_rtPart = m_rtClient; - pTheme->DrawBackground(¶m); - if (!IsShowScrollBar(TRUE) || !IsShowScrollBar(FALSE)) { - return; - } - CFX_RectF rtScorll; - m_pHorzScrollBar->GetWidgetRect(rtScorll); - CFX_RectF rtStatic; - rtStatic.Set(m_rtClient.right() - rtScorll.height, - m_rtClient.bottom() - rtScorll.height, rtScorll.height, - rtScorll.height); - param.m_dwData = FWL_PARTDATA_EDT_StaticBackground; - param.m_rtPart = rtStatic; - pTheme->DrawBackground(¶m); -} -void CFWL_EditImp::DrawContent(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix) { - if (!m_pEdtEngine) - return; - IFDE_TxtEdtPage* pPage = m_pEdtEngine->GetPage(0); - if (!pPage) - return; - pGraphics->SaveGraphState(); - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_CombText) { - pGraphics->SaveGraphState(); - } - CFX_RectF rtClip = m_rtEngine; - FX_FLOAT fOffSetX = m_rtEngine.left - m_fScrollOffsetX; - FX_FLOAT fOffSetY = m_rtEngine.top - m_fScrollOffsetY + m_fVAlignOffset; - CFX_Matrix mt; - mt.Set(1, 0, 0, 1, fOffSetX, fOffSetY); - if (pMatrix) { - pMatrix->TransformRect(rtClip); - mt.Concat(*pMatrix); - } - FX_BOOL bShowSel = - (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_NoHideSel) || - (m_pProperties->m_dwStates & FWL_WGTSTATE_Focused); - if (bShowSel) { - IFWL_Widget* pForm = - m_pWidgetMgr->GetWidget(m_pInterface, FWL_WGTRELATION_SystemForm); - if (pForm) { - bShowSel = (pForm->GetStates() & FWL_WGTSTATE_Deactivated) != - FWL_WGTSTATE_Deactivated; - } - } - int32_t nSelCount = m_pEdtEngine->CountSelRanges(); - if (bShowSel && nSelCount > 0) { - int32_t nPageCharStart = pPage->GetCharStart(); - int32_t nPageCharCount = pPage->GetCharCount(); - int32_t nPageCharEnd = nPageCharStart + nPageCharCount - 1; - int32_t nCharCount; - int32_t nCharStart; - CFX_RectFArray rectArr; - int32_t i = 0; - for (i = 0; i < nSelCount; i++) { - nCharCount = m_pEdtEngine->GetSelRange(i, nCharStart); - int32_t nCharEnd = nCharStart + nCharCount - 1; - if (nCharEnd < nPageCharStart || nCharStart > nPageCharEnd) { - continue; - } - int32_t nBgn = std::max(nCharStart, nPageCharStart); - int32_t nEnd = std::min(nCharEnd, nPageCharEnd); - pPage->CalcRangeRectArray(nBgn - nPageCharStart, nEnd - nBgn + 1, - rectArr); - } - int32_t nCount = rectArr.GetSize(); - CFX_Path path; - path.Create(); - for (i = 0; i < nCount; i++) { - rectArr[i].left += fOffSetX; - rectArr[i].top += fOffSetY; - path.AddRectangle(rectArr[i].left, rectArr[i].top, rectArr[i].width, - rectArr[i].height); - } - pGraphics->SetClipRect(rtClip); - CFWL_ThemeBackground param; - param.m_pGraphics = pGraphics; - param.m_matrix = *pMatrix; - param.m_pWidget = m_pInterface; - param.m_iPart = FWL_PART_EDT_Background; - param.m_pPath = &path; - pTheme->DrawBackground(¶m); - } - CFX_RenderDevice* pRenderDev = pGraphics->GetRenderDevice(); - if (!pRenderDev) - return; - IFDE_RenderDevice* pRenderDevice = IFDE_RenderDevice::Create(pRenderDev); - if (!pRenderDevice) - return; - IFDE_RenderContext* pRenderContext = IFDE_RenderContext::Create(); - if (!pRenderContext) - return; - pRenderDevice->SetClipRect(rtClip); - pRenderContext->StartRender(pRenderDevice, pPage, mt); - pRenderContext->DoRender(NULL); - pRenderContext->Release(); - pRenderDevice->Release(); - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_CombText) { - pGraphics->RestoreGraphState(); - CFX_Path path; - path.Create(); - int32_t iLimit = m_nLimit > 0 ? m_nLimit : 1; - FX_FLOAT fStep = m_rtEngine.width / iLimit; - FX_FLOAT fLeft = m_rtEngine.left + 1; - for (int32_t i = 1; i < iLimit; i++) { - fLeft += fStep; - path.AddLine(fLeft, m_rtClient.top, fLeft, m_rtClient.bottom()); - } - CFWL_ThemeBackground param; - param.m_pGraphics = pGraphics; - param.m_matrix = *pMatrix; - param.m_pWidget = m_pInterface; - param.m_iPart = FWL_PART_EDT_CombTextLine; - param.m_pPath = &path; - pTheme->DrawBackground(¶m); - } - pGraphics->RestoreGraphState(); -} -void CFWL_EditImp::UpdateEditEngine() { - UpdateEditParams(); - UpdateEditLayout(); - if (m_nLimit > -1) { - m_pEdtEngine->SetLimit(m_nLimit); - } -} -void CFWL_EditImp::UpdateEditParams() { - FDE_TXTEDTPARAMS params; - params.nHorzScale = 100; - params.fPlateWidth = m_rtEngine.width; - params.fPlateHeight = m_rtEngine.height; - if (m_pProperties->m_dwStyles & FWL_WGTSTYLE_RTLLayout) { - params.dwLayoutStyles |= FDE_TEXTEDITLAYOUT_RTL; - } - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_VerticalLayout) { - params.dwLayoutStyles |= FDE_TEXTEDITLAYOUT_DocVertical; - } - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_VerticalChars) { - params.dwLayoutStyles |= FDE_TEXTEDITLAYOUT_CharVertial; - } - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_ReverseLine) { - params.dwLayoutStyles |= FDE_TEXTEDITLAYOUT_LineReserve; - } - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_ArabicShapes) { - params.dwLayoutStyles |= FDE_TEXTEDITLAYOUT_ArabicShapes; - } - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_ExpandTab) { - params.dwLayoutStyles |= FDE_TEXTEDITLAYOUT_ExpandTab; - } - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_CombText) { - params.dwLayoutStyles |= FDE_TEXTEDITLAYOUT_CombText; - } - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_LastLineHeight) { - params.dwLayoutStyles |= FDE_TEXTEDITLAYOUT_LastLineHeight; - } - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_Validate) { - params.dwMode |= FDE_TEXTEDITMODE_Validate; - } - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_Password) { - params.dwMode |= FDE_TEXTEDITMODE_Password; - } - switch (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_HAlignMask) { - case FWL_STYLEEXT_EDT_HNear: { - params.dwAlignment |= FDE_TEXTEDITALIGN_Left; - break; - } - case FWL_STYLEEXT_EDT_HCenter: { - params.dwAlignment |= FDE_TEXTEDITALIGN_Center; - break; - } - case FWL_STYLEEXT_EDT_HFar: { - params.dwAlignment |= FDE_TEXTEDITALIGN_Right; - break; - } - default: {} - } - switch (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_HAlignModeMask) { - case FWL_STYLEEXT_EDT_Justified: { - params.dwAlignment |= FDE_TEXTEDITALIGN_Justified; - break; - } - case FWL_STYLEEXT_EDT_Distributed: { - params.dwAlignment |= FDE_TEXTEDITALIGN_Distributed; - break; - } - default: { params.dwAlignment |= FDE_TEXTEDITALIGN_Normal; } - } - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_MultiLine) { - params.dwMode |= FDE_TEXTEDITMODE_MultiLines; - if ((m_pProperties->m_dwStyles & FWL_WGTSTYLE_HScroll) == 0 && - (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_AutoHScroll) == 0) { - params.dwMode |= - FDE_TEXTEDITMODE_AutoLineWrap | FDE_TEXTEDITMODE_LimitArea_Horz; - } - if ((m_pProperties->m_dwStyles & FWL_WGTSTYLE_VScroll) == 0 && - (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_AutoVScroll) == 0) { - params.dwMode |= FDE_TEXTEDITMODE_LimitArea_Vert; - } else { - params.fPlateHeight = 0x00FFFFFF; - } - } else { - if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_AutoHScroll) == 0) { - params.dwMode |= FDE_TEXTEDITMODE_LimitArea_Horz; - } - } - if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_ReadOnly) || - (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled)) { - params.dwMode |= FDE_TEXTEDITMODE_ReadOnly; - } - FX_FLOAT* pFontSize = - static_cast(GetThemeCapacity(FWL_WGTCAPACITY_FontSize)); - if (!pFontSize) - return; - m_fFontSize = *pFontSize; - FX_DWORD* pFontColor = - static_cast(GetThemeCapacity(FWL_WGTCAPACITY_TextColor)); - if (!pFontColor) - return; - params.dwFontColor = *pFontColor; - FX_FLOAT* pLineHeight = - static_cast(GetThemeCapacity(FWL_WGTCAPACITY_LineHeight)); - if (!pLineHeight) - return; - params.fLineSpace = *pLineHeight; - IFX_Font* pFont = - static_cast(GetThemeCapacity(FWL_WGTCAPACITY_Font)); - if (!pFont) - return; - params.pFont = pFont; - params.fFontSize = m_fFontSize; - params.nLineCount = (int32_t)(params.fPlateHeight / params.fLineSpace); - if (params.nLineCount <= 0) { - params.nLineCount = 1; - } - params.fTabWidth = params.fFontSize * 1; - params.bTabEquidistant = TRUE; - params.wLineBreakChar = L'\n'; - params.nCharRotation = 0; - params.pEventSink = this; - m_pEdtEngine->SetEditParams(params); -} - -void CFWL_EditImp::UpdateEditLayout() { - if (m_pEdtEngine->GetTextLength() <= 0) - m_pEdtEngine->SetTextByStream(nullptr); - - IFDE_TxtEdtPage* pPage = m_pEdtEngine->GetPage(0); - if (pPage) - pPage->UnloadPage(nullptr); - - m_pEdtEngine->StartLayout(); - m_pEdtEngine->DoLayout(nullptr); - m_pEdtEngine->EndLayout(); - pPage = m_pEdtEngine->GetPage(0); - if (pPage) - pPage->LoadPage(nullptr, nullptr); -} - -FX_BOOL CFWL_EditImp::UpdateOffset() { - CFX_RectF rtCaret; - m_pEdtEngine->GetCaretRect(rtCaret); - FX_FLOAT fOffSetX = m_rtEngine.left - m_fScrollOffsetX; - FX_FLOAT fOffSetY = m_rtEngine.top - m_fScrollOffsetY + m_fVAlignOffset; - rtCaret.Offset(fOffSetX, fOffSetY); - const CFX_RectF& rtEidt = m_rtEngine; - if (rtEidt.Contains(rtCaret)) { - IFDE_TxtEdtPage* pPage = m_pEdtEngine->GetPage(0); - if (!pPage) - return FALSE; - CFX_RectF rtFDE = pPage->GetContentsBox(); - rtFDE.Offset(fOffSetX, fOffSetY); - if (rtFDE.right() < rtEidt.right() && m_fScrollOffsetX > 0) { - m_fScrollOffsetX += rtFDE.right() - rtEidt.right(); - if (m_fScrollOffsetX < 0) { - m_fScrollOffsetX = 0; - } - } - if (rtFDE.bottom() < rtEidt.bottom() && m_fScrollOffsetY > 0) { - m_fScrollOffsetY += rtFDE.bottom() - rtEidt.bottom(); - if (m_fScrollOffsetY < 0) { - m_fScrollOffsetY = 0; - } - } - return FALSE; - } else { - FX_FLOAT offsetX = 0.0; - FX_FLOAT offsetY = 0.0; - if (rtCaret.left < rtEidt.left) { - offsetX = rtCaret.left - rtEidt.left; - } - if (rtCaret.right() > rtEidt.right()) { - offsetX = rtCaret.right() - rtEidt.right(); - } - if (rtCaret.top < rtEidt.top) { - offsetY = rtCaret.top - rtEidt.top; - } - if (rtCaret.bottom() > rtEidt.bottom()) { - offsetY = rtCaret.bottom() - rtEidt.bottom(); - } - if (!(m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_HSelfAdaption)) { - m_fScrollOffsetX += offsetX; - } - if (!(m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_VSelfAdaption)) { - m_fScrollOffsetY += offsetY; - } - if (m_fFontSize > m_rtEngine.height) { - m_fScrollOffsetY = 0; - } - return TRUE; - } -} -FX_BOOL CFWL_EditImp::UpdateOffset(IFWL_ScrollBar* pScrollBar, - FX_FLOAT fPosChanged) { - if (pScrollBar == m_pHorzScrollBar.get()) { - m_fScrollOffsetX += fPosChanged; - } else { - m_fScrollOffsetY += fPosChanged; - } - return TRUE; -} -void CFWL_EditImp::UpdateVAlignment() { - IFDE_TxtEdtPage* pPage = m_pEdtEngine->GetPage(0); - if (!pPage) - return; - const CFX_RectF& rtFDE = pPage->GetContentsBox(); - FX_FLOAT fOffsetY = 0.0f; - FX_FLOAT fSpaceAbove = 0.0f; - FX_FLOAT fSpaceBelow = 0.0f; - CFX_SizeF* pSpace = static_cast( - GetThemeCapacity(FWL_WGTCAPACITY_SpaceAboveBelow)); - if (pSpace) { - fSpaceAbove = pSpace->x; - fSpaceBelow = pSpace->y; - } - if (fSpaceAbove < 0.1f) { - fSpaceAbove = 0; - } - if (fSpaceBelow < 0.1f) { - fSpaceBelow = 0; - } - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_VCenter) { - fOffsetY = (m_rtEngine.height - rtFDE.height) / 2; - if (fOffsetY < (fSpaceAbove + fSpaceBelow) / 2 && - fSpaceAbove < fSpaceBelow) { - return; - } - fOffsetY += (fSpaceAbove - fSpaceBelow) / 2; - } else if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_VFar) { - fOffsetY = (m_rtEngine.height - rtFDE.height); - fOffsetY -= fSpaceBelow; - } else { - fOffsetY += fSpaceAbove; - } - m_fVAlignOffset = fOffsetY; - if (m_fVAlignOffset < 0) { - m_fVAlignOffset = 0; - } -} -void CFWL_EditImp::UpdateCaret() { - CFX_RectF rtFDE; - m_pEdtEngine->GetCaretRect(rtFDE); - rtFDE.Offset(m_rtEngine.left - m_fScrollOffsetX, - m_rtEngine.top - m_fScrollOffsetY + m_fVAlignOffset); - CFX_RectF rtCaret; - rtCaret.Set(rtFDE.left, rtFDE.top, rtFDE.width, rtFDE.height); - CFX_RectF temp = rtCaret; - CFX_RectF rtClient; - GetClientRect(rtClient); - rtCaret.Intersect(rtClient); - if (rtCaret.left > rtClient.right()) { - FX_FLOAT right = rtCaret.right(); - rtCaret.left = rtClient.right() - 1; - rtCaret.width = right - rtCaret.left; - } - FX_BOOL bIntersect = !rtCaret.IsEmpty(); - FX_BOOL bShow = TRUE; - FX_BOOL bShowWhole = FALSE; - if (!(m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) || !bIntersect) { - bShow = FALSE; - } - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_HSelfAdaption && - temp.right() > m_rtEngine.right()) { - bShowWhole = TRUE; - } - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_VSelfAdaption && - temp.bottom() > m_rtEngine.bottom()) { - bShowWhole = TRUE; - } else { - bShow = (m_pProperties->m_dwStates & FWL_WGTSTATE_Focused && bIntersect); - } - if (bShowWhole) { - rtCaret = temp; - } - ShowCaret(bShow, &rtCaret); -} -IFWL_ScrollBar* CFWL_EditImp::UpdateScroll() { - FX_BOOL bShowHorz = - m_pHorzScrollBar && - ((m_pHorzScrollBar->GetStates() & FWL_WGTSTATE_Invisible) == 0); - FX_BOOL bShowVert = - m_pVertScrollBar && - ((m_pVertScrollBar->GetStates() & FWL_WGTSTATE_Invisible) == 0); - if (!bShowHorz && !bShowVert) { - return NULL; - } - IFDE_TxtEdtPage* pPage = m_pEdtEngine->GetPage(0); - if (!pPage) - return NULL; - const CFX_RectF& rtFDE = pPage->GetContentsBox(); - IFWL_ScrollBar* pRepaint = NULL; - if (bShowHorz) { - CFX_RectF rtScroll; - m_pHorzScrollBar->GetWidgetRect(rtScroll); - if (rtScroll.width < rtFDE.width) { - m_pHorzScrollBar->LockUpdate(); - FX_FLOAT fRange = rtFDE.width - rtScroll.width; - m_pHorzScrollBar->SetRange(0.0f, fRange); - FX_FLOAT fPos = m_fScrollOffsetX; - if (fPos < 0.0f) { - fPos = 0.0f; - } - if (fPos > fRange) { - fPos = fRange; - } - m_pHorzScrollBar->SetPos(fPos); - m_pHorzScrollBar->SetTrackPos(fPos); - m_pHorzScrollBar->SetPageSize(rtScroll.width); - m_pHorzScrollBar->SetStepSize(rtScroll.width / 10); - m_pHorzScrollBar->SetStates(FWL_WGTSTATE_Disabled, FALSE); - m_pHorzScrollBar->UnlockUpdate(); - m_pHorzScrollBar->Update(); - pRepaint = m_pHorzScrollBar.get(); - } else if ((m_pHorzScrollBar->GetStates() & FWL_WGTSTATE_Disabled) == 0) { - m_pHorzScrollBar->LockUpdate(); - m_pHorzScrollBar->SetRange(0, -1); - m_pHorzScrollBar->SetStates(FWL_WGTSTATE_Disabled, TRUE); - m_pHorzScrollBar->UnlockUpdate(); - m_pHorzScrollBar->Update(); - pRepaint = m_pHorzScrollBar.get(); - } - } - if (bShowVert) { - CFX_RectF rtScroll; - m_pVertScrollBar->GetWidgetRect(rtScroll); - if (rtScroll.height < rtFDE.height) { - m_pVertScrollBar->LockUpdate(); - FX_FLOAT fStep = m_pEdtEngine->GetEditParams()->fLineSpace; - FX_FLOAT fRange = rtFDE.height - m_rtEngine.height; - if (fRange < fStep) { - fRange = fStep; - } - m_pVertScrollBar->SetRange(0.0f, fRange); - FX_FLOAT fPos = m_fScrollOffsetY; - if (fPos < 0.0f) { - fPos = 0.0f; - } - if (fPos > fRange) { - fPos = fRange; - } - m_pVertScrollBar->SetPos(fPos); - m_pVertScrollBar->SetTrackPos(fPos); - m_pVertScrollBar->SetPageSize(rtScroll.height); - m_pVertScrollBar->SetStepSize(fStep); - m_pVertScrollBar->SetStates(FWL_WGTSTATE_Disabled, FALSE); - m_pVertScrollBar->UnlockUpdate(); - m_pVertScrollBar->Update(); - pRepaint = m_pVertScrollBar.get(); - } else if ((m_pVertScrollBar->GetStates() & FWL_WGTSTATE_Disabled) == 0) { - m_pVertScrollBar->LockUpdate(); - m_pVertScrollBar->SetRange(0, -1); - m_pVertScrollBar->SetStates(FWL_WGTSTATE_Disabled, TRUE); - m_pVertScrollBar->UnlockUpdate(); - m_pVertScrollBar->Update(); - pRepaint = m_pVertScrollBar.get(); - } - } - return pRepaint; -} -FX_BOOL CFWL_EditImp::IsShowScrollBar(FX_BOOL bVert) { - FX_BOOL bShow = - (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_ShowScrollbarFocus) - ? (m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) == - FWL_WGTSTATE_Focused - : TRUE; - if (bVert) { - return bShow && (m_pProperties->m_dwStyles & FWL_WGTSTYLE_VScroll) && - (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_MultiLine) && - IsContentHeightOverflow(); - } - return bShow && (m_pProperties->m_dwStyles & FWL_WGTSTYLE_HScroll) && - (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_MultiLine); -} -FX_BOOL CFWL_EditImp::IsContentHeightOverflow() { - if (!m_pEdtEngine) - return FALSE; - IFDE_TxtEdtPage* pPage = m_pEdtEngine->GetPage(0); - if (!pPage) - return FALSE; - return pPage->GetContentsBox().height > m_rtEngine.height + 1.0f; -} -int32_t CFWL_EditImp::AddDoRecord(const CFX_ByteStringC& bsDoRecord) { - int32_t nCount = m_RecordArr.GetSize(); - if (m_iCurRecord == nCount - 1) { - if (nCount == m_iMaxRecord) { - m_RecordArr.RemoveAt(0); - m_iCurRecord--; - } - } else { - for (int32_t i = nCount - 1; i > m_iCurRecord; i--) { - m_RecordArr.RemoveAt(i); - } - } - m_RecordArr.Add(bsDoRecord); - return m_iCurRecord = m_RecordArr.GetSize() - 1; -} -void CFWL_EditImp::Layout() { - GetClientRect(m_rtClient); - m_rtEngine = m_rtClient; - FX_FLOAT* pfWidth = - static_cast(GetThemeCapacity(FWL_WGTCAPACITY_ScrollBarWidth)); - if (!pfWidth) - return; - FX_FLOAT fWidth = *pfWidth; - if (!m_pOuter) { - CFX_RectF* pUIMargin = - static_cast(GetThemeCapacity(FWL_WGTCAPACITY_UIMargin)); - if (pUIMargin) { - m_rtEngine.Deflate(pUIMargin->left, pUIMargin->top, pUIMargin->width, - pUIMargin->height); - } - } else if (m_pOuter->GetClassID() == FWL_CLASSHASH_DateTimePicker) { - CFWL_ThemePart part; - part.m_pWidget = m_pOuter; - CFX_RectF* pUIMargin = - static_cast(m_pOuter->GetThemeProvider()->GetCapacity( - &part, FWL_WGTCAPACITY_UIMargin)); - if (pUIMargin) { - m_rtEngine.Deflate(pUIMargin->left, pUIMargin->top, pUIMargin->width, - pUIMargin->height); - } - } - FX_BOOL bShowVertScrollbar = IsShowScrollBar(TRUE); - FX_BOOL bShowHorzScrollbar = IsShowScrollBar(FALSE); - if (bShowVertScrollbar) { - InitScrollBar(); - CFX_RectF rtVertScr; - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_OuterScrollbar) { - rtVertScr.Set(m_rtClient.right() + FWL_EDIT_Margin, m_rtClient.top, - fWidth, m_rtClient.height); - } else { - rtVertScr.Set(m_rtClient.right() - fWidth, m_rtClient.top, fWidth, - m_rtClient.height); - if (bShowHorzScrollbar) { - rtVertScr.height -= fWidth; - } - m_rtEngine.width -= fWidth; - } - m_pVertScrollBar->SetWidgetRect(rtVertScr); - m_pVertScrollBar->SetStates(FWL_WGTSTATE_Invisible, FALSE); - m_pVertScrollBar->Update(); - } else if (m_pVertScrollBar) { - m_pVertScrollBar->SetStates(FWL_WGTSTATE_Invisible, TRUE); - } - if (bShowHorzScrollbar) { - InitScrollBar(FALSE); - CFX_RectF rtHoriScr; - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_OuterScrollbar) { - rtHoriScr.Set(m_rtClient.left, m_rtClient.bottom() + FWL_EDIT_Margin, - m_rtClient.width, fWidth); - } else { - rtHoriScr.Set(m_rtClient.left, m_rtClient.bottom() - fWidth, - m_rtClient.width, fWidth); - if (bShowVertScrollbar) { - rtHoriScr.width -= fWidth; - } - m_rtEngine.height -= fWidth; - } - m_pHorzScrollBar->SetWidgetRect(rtHoriScr); - m_pHorzScrollBar->SetStates(FWL_WGTSTATE_Invisible, FALSE); - m_pHorzScrollBar->Update(); - } else if (m_pHorzScrollBar) { - m_pHorzScrollBar->SetStates(FWL_WGTSTATE_Invisible, TRUE); - } -} -void CFWL_EditImp::LayoutScrollBar() { - if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_ShowScrollbarFocus) == - 0) { - return; - } - FX_FLOAT* pfWidth = NULL; - FX_BOOL bShowVertScrollbar = IsShowScrollBar(TRUE); - FX_BOOL bShowHorzScrollbar = IsShowScrollBar(FALSE); - if (bShowVertScrollbar) { - if (!m_pVertScrollBar) { - pfWidth = static_cast( - GetThemeCapacity(FWL_WGTCAPACITY_ScrollBarWidth)); - FX_FLOAT fWidth = pfWidth ? *pfWidth : 0; - InitScrollBar(); - CFX_RectF rtVertScr; - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_OuterScrollbar) { - rtVertScr.Set(m_rtClient.right() + FWL_EDIT_Margin, m_rtClient.top, - fWidth, m_rtClient.height); - } else { - rtVertScr.Set(m_rtClient.right() - fWidth, m_rtClient.top, fWidth, - m_rtClient.height); - if (bShowHorzScrollbar) { - rtVertScr.height -= fWidth; - } - } - m_pVertScrollBar->SetWidgetRect(rtVertScr); - m_pVertScrollBar->Update(); - } - m_pVertScrollBar->SetStates(FWL_WGTSTATE_Invisible, FALSE); - } else if (m_pVertScrollBar) { - m_pVertScrollBar->SetStates(FWL_WGTSTATE_Invisible, TRUE); - } - if (bShowHorzScrollbar) { - if (!m_pHorzScrollBar) { - if (!pfWidth) { - pfWidth = static_cast( - GetThemeCapacity(FWL_WGTCAPACITY_ScrollBarWidth)); - } - FX_FLOAT fWidth = pfWidth ? *pfWidth : 0; - InitScrollBar(FALSE); - CFX_RectF rtHoriScr; - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_OuterScrollbar) { - rtHoriScr.Set(m_rtClient.left, m_rtClient.bottom() + FWL_EDIT_Margin, - m_rtClient.width, fWidth); - } else { - rtHoriScr.Set(m_rtClient.left, m_rtClient.bottom() - fWidth, - m_rtClient.width, fWidth); - if (bShowVertScrollbar) { - rtHoriScr.width -= (fWidth); - } - } - m_pHorzScrollBar->SetWidgetRect(rtHoriScr); - m_pHorzScrollBar->Update(); - } - m_pHorzScrollBar->SetStates(FWL_WGTSTATE_Invisible, FALSE); - } else if (m_pHorzScrollBar) { - m_pHorzScrollBar->SetStates(FWL_WGTSTATE_Invisible, TRUE); - } - if (bShowVertScrollbar || bShowHorzScrollbar) { - UpdateScroll(); - } -} -void CFWL_EditImp::DeviceToEngine(CFX_PointF& pt) { - pt.x += -m_rtEngine.left + m_fScrollOffsetX; - pt.y += -m_rtEngine.top - m_fVAlignOffset + m_fScrollOffsetY; -} -void CFWL_EditImp::InitScrollBar(FX_BOOL bVert) { - if ((bVert && m_pVertScrollBar) || (!bVert && m_pHorzScrollBar)) { - return; - } - CFWL_WidgetImpProperties prop; - prop.m_dwStyleExes = bVert ? FWL_STYLEEXT_SCB_Vert : FWL_STYLEEXT_SCB_Horz; - prop.m_dwStates = FWL_WGTSTATE_Disabled | FWL_WGTSTATE_Invisible; - prop.m_pParent = m_pInterface; - prop.m_pThemeProvider = m_pProperties->m_pThemeProvider; - IFWL_ScrollBar* pScrollBar = IFWL_ScrollBar::Create(prop, m_pInterface); - pScrollBar->Initialize(); - (bVert ? &m_pVertScrollBar : &m_pHorzScrollBar)->reset(pScrollBar); -} -void CFWL_EditImp::InitEngine() { - if (m_pEdtEngine) { - return; - } - m_pEdtEngine = IFDE_TxtEdtEngine::Create(); -} -extern FX_BOOL FWL_ShowCaret(IFWL_Widget* pWidget, - FX_BOOL bVisible, - const CFX_RectF* pRtAnchor); -void CFWL_EditImp::ShowCaret(FX_BOOL bVisible, CFX_RectF* pRect) { - if (m_pCaret) { - m_pCaret->ShowCaret(bVisible); - if (bVisible && !pRect->IsEmpty()) { - m_pCaret->SetWidgetRect(*pRect); - } - Repaint(&m_rtEngine); - } else { - IFWL_Widget* pOuter = m_pInterface; - if (bVisible) { - pRect->Offset(m_pProperties->m_rtWidget.left, - m_pProperties->m_rtWidget.top); - } - while (pOuter->GetOuter()) { - pOuter = pOuter->GetOuter(); - if (bVisible) { - CFX_RectF rtOuter; - pOuter->GetWidgetRect(rtOuter); - pRect->Offset(rtOuter.left, rtOuter.top); - } - } - FWL_ShowCaret(pOuter, bVisible, pRect); - } -} -FX_BOOL CFWL_EditImp::ValidateNumberChar(FX_WCHAR cNum) { - if (!m_pEdtEngine) { - return FALSE; - } - if (!m_bSetRange) { - return TRUE; - } - CFX_WideString wsOld, wsText; - m_pEdtEngine->GetText(wsText, 0); - if (wsText.IsEmpty()) { - if (cNum == L'0') { - return FALSE; - } - return TRUE; - } - int32_t caretPos = m_pEdtEngine->GetCaretPos(); - int32_t iSel = CountSelRanges(); - if (iSel == 0) { - if (cNum == L'0' && caretPos == 0) { - return FALSE; - } - int32_t nLen = wsText.GetLength(); - CFX_WideString l = wsText.Mid(0, caretPos); - CFX_WideString r = wsText.Mid(caretPos, nLen - caretPos); - CFX_WideString wsNew = l + cNum + r; - if (wsNew.GetInteger() <= m_iMax) { - return TRUE; - } - } else { - if (wsText.GetInteger() <= m_iMax) { - return TRUE; - } - } - return FALSE; -} -void CFWL_EditImp::InitCaret() { - if (!m_pCaret) { - if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_InnerCaret)) { - CFWL_WidgetImpProperties prop; - m_pCaret.reset(IFWL_Caret::Create(prop, m_pInterface)); - m_pCaret->Initialize(); - m_pCaret->SetParent(m_pInterface); - m_pCaret->SetStates(m_pProperties->m_dwStates); - } - } else if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_InnerCaret) == - 0) { - m_pCaret.reset(); - } -} -void CFWL_EditImp::ClearRecord() { - m_iCurRecord = -1; - m_RecordArr.RemoveAll(); -} -void CFWL_EditImp::ProcessInsertError(int32_t iError) { - switch (iError) { - case -2: { - CFWL_EvtEdtTextFull textFullEvent; - textFullEvent.m_pSrcTarget = m_pInterface; - DispatchEvent(&textFullEvent); - break; - } - default: {} - } -} -CFWL_EditImpDelegate::CFWL_EditImpDelegate(CFWL_EditImp* pOwner) - : m_pOwner(pOwner) {} -int32_t CFWL_EditImpDelegate::OnProcessMessage(CFWL_Message* pMessage) { - if (!pMessage) - return 0; - FX_DWORD dwMsgCode = pMessage->GetClassID(); - int32_t iRet = 1; - switch (dwMsgCode) { - case FWL_MSGHASH_Activate: { - DoActivate(static_cast(pMessage)); - break; - } - case FWL_MSGHASH_Deactivate: { - DoDeactivate(static_cast(pMessage)); - break; - } - case FWL_MSGHASH_SetFocus: - case FWL_MSGHASH_KillFocus: { - OnFocusChanged(pMessage, dwMsgCode == FWL_MSGHASH_SetFocus); - break; - } - case FWL_MSGHASH_Mouse: { - CFWL_MsgMouse* pMsg = static_cast(pMessage); - FX_DWORD dwCmd = pMsg->m_dwCmd; - switch (dwCmd) { - case FWL_MSGMOUSECMD_LButtonDown: { - OnLButtonDown(pMsg); - break; - } - case FWL_MSGMOUSECMD_LButtonUp: { - OnLButtonUp(pMsg); - break; - } - case FWL_MSGMOUSECMD_LButtonDblClk: { - OnButtonDblClk(pMsg); - break; - } - case FWL_MSGMOUSECMD_MouseMove: { - OnMouseMove(pMsg); - break; - } - case FWL_MSGMOUSECMD_RButtonDown: { - DoButtonDown(pMsg); - break; - } - default: {} - } - break; - } - case FWL_MSGHASH_Key: { - CFWL_MsgKey* pKey = static_cast(pMessage); - FX_DWORD dwCmd = pKey->m_dwCmd; - if (dwCmd == FWL_MSGKEYCMD_KeyDown) { - OnKeyDown(pKey); - } else if (dwCmd == FWL_MSGKEYCMD_Char) { - OnChar(pKey); - } - break; - } - default: { iRet = 0; } - } - CFWL_WidgetImpDelegate::OnProcessMessage(pMessage); - return iRet; -} -FWL_ERR CFWL_EditImpDelegate::OnProcessEvent(CFWL_Event* pEvent) { - if (!pEvent) - return FWL_ERR_Indefinite; - FX_DWORD dwHashCode = pEvent->GetClassID(); - if (dwHashCode != FWL_EVTHASH_Scroll) { - return FWL_ERR_Succeeded; - } - IFWL_Widget* pSrcTarget = pEvent->m_pSrcTarget; - if ((pSrcTarget == m_pOwner->m_pVertScrollBar.get() && - m_pOwner->m_pVertScrollBar) || - (pSrcTarget == m_pOwner->m_pHorzScrollBar.get() && - m_pOwner->m_pHorzScrollBar)) { - CFWL_EvtScroll* pScrollEvent = static_cast(pEvent); - OnScroll(static_cast(pSrcTarget), - pScrollEvent->m_iScrollCode, pScrollEvent->m_fPos); - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_EditImpDelegate::OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - return m_pOwner->DrawWidget(pGraphics, pMatrix); -} -void CFWL_EditImpDelegate::DoActivate(CFWL_MsgActivate* pMsg) { - m_pOwner->m_pProperties->m_dwStates |= ~FWL_WGTSTATE_Deactivated; - m_pOwner->Repaint(&m_pOwner->m_rtClient); -} -void CFWL_EditImpDelegate::DoDeactivate(CFWL_MsgDeactivate* pMsg) { - m_pOwner->m_pProperties->m_dwStates &= FWL_WGTSTATE_Deactivated; - m_pOwner->Repaint(&m_pOwner->m_rtClient); -} -void CFWL_EditImpDelegate::DoButtonDown(CFWL_MsgMouse* pMsg) { - if ((m_pOwner->m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) == 0) { - m_pOwner->SetFocus(TRUE); - } - if (!m_pOwner->m_pEdtEngine) { - m_pOwner->UpdateEditEngine(); - } - IFDE_TxtEdtPage* pPage = m_pOwner->m_pEdtEngine->GetPage(0); - if (!pPage) - return; - CFX_PointF pt(pMsg->m_fx, pMsg->m_fy); - m_pOwner->DeviceToEngine(pt); - FX_BOOL bBefore = TRUE; - int32_t nIndex = pPage->GetCharIndex(pt, bBefore); - if (nIndex < 0) { - nIndex = 0; - } - m_pOwner->m_pEdtEngine->SetCaretPos(nIndex, bBefore); -} -void CFWL_EditImpDelegate::OnFocusChanged(CFWL_Message* pMsg, FX_BOOL bSet) { - FX_DWORD dwStyleEx = m_pOwner->GetStylesEx(); - FX_BOOL bRepaint = dwStyleEx & FWL_STYLEEXT_EDT_InnerCaret; - if (bSet) { - m_pOwner->m_pProperties->m_dwStates |= FWL_WGTSTATE_Focused; - if (!m_pOwner->m_pEdtEngine) { - m_pOwner->UpdateEditEngine(); - } - m_pOwner->UpdateVAlignment(); - m_pOwner->UpdateOffset(); - m_pOwner->UpdateCaret(); - } else if (m_pOwner->m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) { - m_pOwner->m_pProperties->m_dwStates &= ~FWL_WGTSTATE_Focused; - m_pOwner->ShowCaret(FALSE); - if (m_pOwner->m_pEdtEngine && - (dwStyleEx & FWL_STYLEEXT_EDT_NoHideSel) == 0) { - int32_t nSel = m_pOwner->CountSelRanges(); - if (nSel > 0) { - m_pOwner->ClearSelections(); - bRepaint = TRUE; - } - m_pOwner->SetCaretPos(0); - m_pOwner->UpdateOffset(); - } - m_pOwner->ClearRecord(); - } - m_pOwner->LayoutScrollBar(); - if (bRepaint) { - CFX_RectF rtInvalidate; - rtInvalidate.Set(0, 0, m_pOwner->m_pProperties->m_rtWidget.width, - m_pOwner->m_pProperties->m_rtWidget.height); - m_pOwner->Repaint(&rtInvalidate); - } -} -void CFWL_EditImpDelegate::OnLButtonDown(CFWL_MsgMouse* pMsg) { - DoCursor(pMsg); - if (m_pOwner->m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled) { - return; - } - m_pOwner->m_bLButtonDown = TRUE; - m_pOwner->SetGrab(TRUE); - DoButtonDown(pMsg); - int32_t nIndex = m_pOwner->m_pEdtEngine->GetCaretPos(); - FX_BOOL bRepaint = FALSE; - int32_t iCount = m_pOwner->m_pEdtEngine->CountSelRanges(); - if (iCount > 0) { - m_pOwner->m_pEdtEngine->ClearSelection(); - bRepaint = TRUE; - } - FX_BOOL bShift = pMsg->m_dwFlags & FWL_KEYFLAG_Shift; - if (bShift && m_pOwner->m_nSelStart != nIndex) { - int32_t iStart = std::min(m_pOwner->m_nSelStart, nIndex); - int32_t iEnd = std::max(m_pOwner->m_nSelStart, nIndex); - m_pOwner->m_pEdtEngine->AddSelRange(iStart, iEnd - iStart); - bRepaint = TRUE; - } else { - m_pOwner->m_nSelStart = nIndex; - } - if (bRepaint) { - m_pOwner->Repaint(&m_pOwner->m_rtEngine); - } -} -void CFWL_EditImpDelegate::OnLButtonUp(CFWL_MsgMouse* pMsg) { - DoCursor(pMsg); - m_pOwner->m_bLButtonDown = FALSE; - m_pOwner->SetGrab(FALSE); -} -void CFWL_EditImpDelegate::OnButtonDblClk(CFWL_MsgMouse* pMsg) { - if (!m_pOwner->m_pEdtEngine) - return; - DoCursor(pMsg); - IFDE_TxtEdtPage* pPage = m_pOwner->m_pEdtEngine->GetPage(0); - if (!pPage) - return; - CFX_PointF pt(pMsg->m_fx, pMsg->m_fy); - m_pOwner->DeviceToEngine(pt); - int32_t nCount = 0; - int32_t nIndex = pPage->SelectWord(pt, nCount); - if (nIndex < 0) { - return; - } - m_pOwner->m_pEdtEngine->AddSelRange(nIndex, nCount); - m_pOwner->m_pEdtEngine->SetCaretPos(nIndex + nCount - 1, FALSE); - m_pOwner->Repaint(&m_pOwner->m_rtEngine); -} -void CFWL_EditImpDelegate::OnMouseMove(CFWL_MsgMouse* pMsg) { - if (!m_pOwner->m_pEdtEngine) - return; - DoCursor(pMsg); - if (m_pOwner->m_nSelStart == -1 || !m_pOwner->m_bLButtonDown) { - return; - } - IFDE_TxtEdtPage* pPage = m_pOwner->m_pEdtEngine->GetPage(0); - if (!pPage) - return; - CFX_PointF pt(pMsg->m_fx, pMsg->m_fy); - m_pOwner->DeviceToEngine(pt); - FX_BOOL bBefore = TRUE; - int32_t nIndex = pPage->GetCharIndex(pt, bBefore); - m_pOwner->m_pEdtEngine->SetCaretPos(nIndex, bBefore); - nIndex = m_pOwner->m_pEdtEngine->GetCaretPos(); - m_pOwner->m_pEdtEngine->ClearSelection(); - if (nIndex != m_pOwner->m_nSelStart) { - int32_t nLen = m_pOwner->m_pEdtEngine->GetTextLength(); - if (m_pOwner->m_nSelStart >= nLen) { - m_pOwner->m_nSelStart = nLen; - } - m_pOwner->m_pEdtEngine->AddSelRange( - std::min(m_pOwner->m_nSelStart, nIndex), - FXSYS_abs(nIndex - m_pOwner->m_nSelStart)); - } -} -void CFWL_EditImpDelegate::OnKeyDown(CFWL_MsgKey* pMsg) { - if (!m_pOwner->m_pEdtEngine) - return; - FDE_TXTEDTMOVECARET MoveCaret = MC_MoveNone; - FX_BOOL bShift = pMsg->m_dwFlags & FWL_KEYFLAG_Shift; - FX_BOOL bCtrl = pMsg->m_dwFlags & FWL_KEYFLAG_Ctrl; - FX_DWORD dwKeyCode = pMsg->m_dwKeyCode; - switch (dwKeyCode) { - case FWL_VKEY_Left: { - MoveCaret = MC_Left; - break; - } - case FWL_VKEY_Right: { - MoveCaret = MC_Right; - break; - } - case FWL_VKEY_Up: { - MoveCaret = MC_Up; - break; - } - case FWL_VKEY_Down: { - MoveCaret = MC_Down; - break; - } - case FWL_VKEY_Home: { - if (bCtrl) { - MoveCaret = MC_Home; - } else { - MoveCaret = MC_LineStart; - } - break; - } - case FWL_VKEY_End: { - if (bCtrl) { - MoveCaret = MC_End; - } else { - MoveCaret = MC_LineEnd; - } - break; - } - case FWL_VKEY_Insert: { - break; - } - case FWL_VKEY_Delete: { - if ((m_pOwner->m_pProperties->m_dwStyleExes & - FWL_STYLEEXT_EDT_ReadOnly) || - (m_pOwner->m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled)) { - break; - } - int32_t nCaret = m_pOwner->m_pEdtEngine->GetCaretPos(); -#if (_FX_OS_ == _FX_MACOSX_) - m_pOwner->m_pEdtEngine->Delete(nCaret, TRUE); -#else - m_pOwner->m_pEdtEngine->Delete(nCaret); -#endif - break; - } - case FWL_VKEY_F2: { - break; - } - case FWL_VKEY_Tab: { - m_pOwner->DispatchKeyEvent(pMsg); - break; - } - default: { -#if (_FX_OS_ == _FX_MACOSX_) - if (pMsg->m_dwFlags & FWL_KEYFLAG_Command) { -#else - if (pMsg->m_dwFlags & FWL_KEYFLAG_Ctrl) { -#endif - if (dwKeyCode == 0x43 || dwKeyCode == 0x63) { - m_pOwner->DoClipboard(1); - return; - } - if (dwKeyCode == 0x58 || dwKeyCode == 0x78) { - m_pOwner->DoClipboard(2); - return; - } - if (dwKeyCode == 0x56 || dwKeyCode == 0x76) { - m_pOwner->DoClipboard(3); - return; - } - } - } - } - if (MoveCaret != MC_MoveNone) { - m_pOwner->m_pEdtEngine->MoveCaretPos(MoveCaret, bShift, bCtrl); - } -} -void CFWL_EditImpDelegate::OnChar(CFWL_MsgKey* pMsg) { - if ((m_pOwner->m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_ReadOnly) || - (m_pOwner->m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled)) { - return; - } - if (!m_pOwner->m_pEdtEngine) - return; - int32_t iError = 0; - FX_WCHAR c = (FX_WCHAR)pMsg->m_dwKeyCode; - int32_t nCaret = m_pOwner->m_pEdtEngine->GetCaretPos(); - switch (c) { - case FWL_VKEY_Back: { - m_pOwner->m_pEdtEngine->Delete(nCaret, TRUE); - break; - } - case 0x0A: { - break; - } - case FWL_VKEY_Escape: { - break; - } - case FWL_VKEY_Tab: { - iError = m_pOwner->m_pEdtEngine->Insert(nCaret, L"\t", 1); - break; - } - case FWL_VKEY_Return: { - if (m_pOwner->m_pProperties->m_dwStyleExes & - FWL_STYLEEXT_EDT_WantReturn) { - iError = m_pOwner->m_pEdtEngine->Insert(nCaret, L"\n", 1); - } - break; - } - default: { - if (!m_pOwner->m_pWidgetMgr->IsFormDisabled()) { - if (m_pOwner->m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_Number) { - if (((pMsg->m_dwKeyCode < FWL_VKEY_0) && - (pMsg->m_dwKeyCode != 0x2E && pMsg->m_dwKeyCode != 0x2D)) || - pMsg->m_dwKeyCode > FWL_VKEY_9) { - break; - } - if (!m_pOwner->ValidateNumberChar(c)) { - break; - } - } - } -#if (_FX_OS_ == _FX_MACOSX_) - if (pMsg->m_dwFlags & FWL_KEYFLAG_Command) -#else - if (pMsg->m_dwFlags & FWL_KEYFLAG_Ctrl) -#endif - { - break; - } - iError = m_pOwner->m_pEdtEngine->Insert(nCaret, &c, 1); - break; - } - } - if (iError < 0) { - m_pOwner->ProcessInsertError(iError); - } -} -FX_BOOL CFWL_EditImpDelegate::OnScroll(IFWL_ScrollBar* pScrollBar, - FX_DWORD dwCode, - FX_FLOAT fPos) { - CFX_SizeF fs; - pScrollBar->GetRange(fs.x, fs.y); - FX_FLOAT iCurPos = pScrollBar->GetPos(); - FX_FLOAT fStep = pScrollBar->GetStepSize(); - switch (dwCode) { - case FWL_SCBCODE_Min: { - fPos = fs.x; - break; - } - case FWL_SCBCODE_Max: { - fPos = fs.y; - break; - } - case FWL_SCBCODE_StepBackward: { - fPos -= fStep; - if (fPos < fs.x + fStep / 2) { - fPos = fs.x; - } - break; - } - case FWL_SCBCODE_StepForward: { - fPos += fStep; - if (fPos > fs.y - fStep / 2) { - fPos = fs.y; - } - break; - } - case FWL_SCBCODE_PageBackward: { - fPos -= pScrollBar->GetPageSize(); - if (fPos < fs.x) { - fPos = fs.x; - } - break; - } - case FWL_SCBCODE_PageForward: { - fPos += pScrollBar->GetPageSize(); - if (fPos > fs.y) { - fPos = fs.y; - } - break; - } - case FWL_SCBCODE_Pos: - case FWL_SCBCODE_TrackPos: { - break; - } - case FWL_SCBCODE_EndScroll: { - return FALSE; - } - default: {} - } - if (iCurPos != fPos) { - pScrollBar->SetPos(fPos); - pScrollBar->SetTrackPos(fPos); - m_pOwner->UpdateOffset(pScrollBar, fPos - iCurPos); - if (m_pOwner->m_pEdtEngine) { - m_pOwner->UpdateCaret(); - } - CFX_RectF rect; - m_pOwner->GetWidgetRect(rect); - CFX_RectF rtInvalidate; - rtInvalidate.Set(0, 0, rect.width + 2, rect.height + 2); - m_pOwner->Repaint(&rtInvalidate); - } - return TRUE; -} -void CFWL_EditImpDelegate::DoCursor(CFWL_MsgMouse* pMsg) {} diff --git a/xfa/src/fwl/basewidget/fwl_editimp.h b/xfa/src/fwl/basewidget/fwl_editimp.h deleted file mode 100644 index 6e6b35c947..0000000000 --- a/xfa/src/fwl/basewidget/fwl_editimp.h +++ /dev/null @@ -1,208 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FWL_BASEWIDGET_FWL_EDITIMP_H_ -#define XFA_SRC_FWL_BASEWIDGET_FWL_EDITIMP_H_ - -#include -#include - -#include "xfa/include/fwl/basewidget/fwl_scrollbar.h" -#include "xfa/src/fee/ifde_txtedtengine.h" -#include "xfa/src/fwl/core/fwl_widgetimp.h" - -class CFWL_WidgetImpProperties; -class CFWL_WidgetImpDelegate; -class IFWL_Caret; -class CFWL_EditImp; -class CFWL_EditImpDelegate; - -class CFWL_EditImp : public CFWL_WidgetImp, public IFDE_TxtEdtEventSink { - public: - CFWL_EditImp(const CFWL_WidgetImpProperties& properties, IFWL_Widget* pOuter); - ~CFWL_EditImp() override; - - // CFWL_WidgetImp: - FWL_ERR GetClassName(CFX_WideString& wsClass) const override; - FX_DWORD GetClassID() const override; - FWL_ERR Initialize() override; - FWL_ERR Finalize() override; - FWL_ERR GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize = FALSE) override; - FWL_ERR SetWidgetRect(const CFX_RectF& rect) override; - FWL_ERR Update() override; - FX_DWORD HitTest(FX_FLOAT fx, FX_FLOAT fy) override; - FWL_ERR SetStates(FX_DWORD dwStates, FX_BOOL bSet = TRUE) override; - FWL_ERR DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL) override; - FWL_ERR SetThemeProvider(IFWL_ThemeProvider* pThemeProvider) override; - - virtual FWL_ERR SetText(const CFX_WideString& wsText); - virtual int32_t GetTextLength() const; - virtual FWL_ERR GetText(CFX_WideString& wsText, - int32_t nStart = 0, - int32_t nCount = -1) const; - virtual FWL_ERR ClearText(); - virtual int32_t GetCaretPos() const; - virtual int32_t SetCaretPos(int32_t nIndex, FX_BOOL bBefore = TRUE); - virtual FWL_ERR AddSelRange(int32_t nStart, int32_t nCount = -1); - virtual int32_t CountSelRanges(); - virtual int32_t GetSelRange(int32_t nIndex, int32_t& nStart); - virtual FWL_ERR ClearSelections(); - virtual int32_t GetLimit(); - virtual FWL_ERR SetLimit(int32_t nLimit); - virtual FWL_ERR SetAliasChar(FX_WCHAR wAlias); - virtual FWL_ERR Insert(int32_t nStart, const FX_WCHAR* lpText, int32_t nLen); - virtual FWL_ERR DeleteSelections(); - virtual FWL_ERR DeleteRange(int32_t nStart, int32_t nCount = -1); - virtual FWL_ERR ReplaceSelections(const CFX_WideStringC& wsReplace); - virtual FWL_ERR Replace(int32_t nStart, - int32_t nLen, - const CFX_WideStringC& wsReplace); - virtual FWL_ERR DoClipboard(int32_t iCmd); - virtual FX_BOOL Copy(CFX_WideString& wsCopy); - virtual FX_BOOL Cut(CFX_WideString& wsCut); - virtual FX_BOOL Paste(const CFX_WideString& wsPaste); - virtual FX_BOOL Delete(); - virtual FX_BOOL Redo(const CFX_ByteStringC& bsRecord); - virtual FX_BOOL Undo(const CFX_ByteStringC& bsRecord); - virtual FX_BOOL Undo(); - virtual FX_BOOL Redo(); - virtual FX_BOOL CanUndo(); - virtual FX_BOOL CanRedo(); - virtual FWL_ERR SetTabWidth(FX_FLOAT fTabWidth, FX_BOOL bEquidistant); - virtual FWL_ERR SetOuter(IFWL_Widget* pOuter); - virtual FWL_ERR SetNumberRange(int32_t iMin, int32_t iMax); - void On_CaretChanged(IFDE_TxtEdtEngine* pEdit, - int32_t nPage, - FX_BOOL bVisible = true) override; - void On_TextChanged(IFDE_TxtEdtEngine* pEdit, - FDE_TXTEDT_TEXTCHANGE_INFO& ChangeInfo) override; - void On_PageCountChanged(IFDE_TxtEdtEngine* pEdit) override {} - void On_SelChanged(IFDE_TxtEdtEngine* pEdit) override; - FX_BOOL On_PageLoad(IFDE_TxtEdtEngine* pEdit, - int32_t nPageIndex, - int32_t nPurpose) override; - FX_BOOL On_PageUnload(IFDE_TxtEdtEngine* pEdit, - int32_t nPageIndex, - int32_t nPurpose) override; - FX_BOOL On_PageChange(IFDE_TxtEdtEngine* pEdit, int32_t nPageIndex) override { - return TRUE; - } - void On_AddDoRecord(IFDE_TxtEdtEngine* pEdit, - const CFX_ByteStringC& bsDoRecord) override; - FX_BOOL On_ValidateField(IFDE_TxtEdtEngine* pEdit, - int32_t nBlockIndex, - int32_t nFieldIndex, - const CFX_WideString& wsFieldText, - int32_t nCharIndex) override; - FX_BOOL On_ValidateBlock(IFDE_TxtEdtEngine* pEdit, - int32_t nBlockIndex) override; - FX_BOOL On_GetBlockFormatText(IFDE_TxtEdtEngine* pEdit, - int32_t nBlockIndex, - CFX_WideString& wsBlockText) override; - FX_BOOL On_Validate(IFDE_TxtEdtEngine* pEdit, - CFX_WideString& wsText) override; - virtual FWL_ERR SetBackgroundColor(FX_DWORD color); - virtual FWL_ERR SetFont(const CFX_WideString& wsFont, FX_FLOAT fSize); - void SetScrollOffset(FX_FLOAT fScrollOffset); - FX_BOOL GetSuggestWords(CFX_PointF pointf, - std::vector& sSuggest); - FX_BOOL ReplaceSpellCheckWord(CFX_PointF pointf, - const CFX_ByteStringC& bsReplace); - - protected: - void DrawTextBk(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix = NULL); - void DrawContent(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix = NULL); - void UpdateEditEngine(); - void UpdateEditParams(); - void UpdateEditLayout(); - FX_BOOL UpdateOffset(); - FX_BOOL UpdateOffset(IFWL_ScrollBar* pScrollBar, FX_FLOAT fPosChanged); - void UpdateVAlignment(); - void UpdateCaret(); - IFWL_ScrollBar* UpdateScroll(); - void Layout(); - void LayoutScrollBar(); - void DeviceToEngine(CFX_PointF& pt); - void InitScrollBar(FX_BOOL bVert = TRUE); - void InitEngine(); - virtual void ShowCaret(FX_BOOL bVisible, CFX_RectF* pRect = NULL); - FX_BOOL ValidateNumberChar(FX_WCHAR cNum); - void InitCaret(); - void ClearRecord(); - FX_BOOL IsShowScrollBar(FX_BOOL bVert); - FX_BOOL IsContentHeightOverflow(); - int32_t AddDoRecord(const CFX_ByteStringC& bsDoRecord); - void ProcessInsertError(int32_t iError); - - void DrawSpellCheck(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL); - void AddSpellCheckObj(CFX_Path& PathData, - int32_t nStart, - int32_t nCount, - FX_FLOAT fOffSetX, - FX_FLOAT fOffSetY); - int32_t GetWordAtPoint(CFX_PointF pointf, int32_t& nCount); - CFX_RectF m_rtClient; - CFX_RectF m_rtEngine; - CFX_RectF m_rtStatic; - FX_FLOAT m_fVAlignOffset; - FX_FLOAT m_fScrollOffsetX; - FX_FLOAT m_fScrollOffsetY; - IFDE_TxtEdtEngine* m_pEdtEngine; - FX_BOOL m_bLButtonDown; - int32_t m_nSelStart; - int32_t m_nLimit; - FX_FLOAT m_fSpaceAbove; - FX_FLOAT m_fSpaceBelow; - FX_FLOAT m_fFontSize; - FX_ARGB m_argbSel; - FX_BOOL m_bSetRange; - int32_t m_iMin; - int32_t m_iMax; - std::unique_ptr m_pVertScrollBar; - std::unique_ptr m_pHorzScrollBar; - std::unique_ptr m_pCaret; - CFX_WideString m_wsCache; - friend class CFWL_TxtEdtEventSink; - friend class CFWL_EditImpDelegate; - FX_DWORD m_backColor; - FX_BOOL m_updateBackColor; - CFX_WideString m_wsFont; - CFX_ByteStringArray m_RecordArr; - int32_t m_iCurRecord; - int32_t m_iMaxRecord; -}; - -class CFWL_EditImpDelegate : public CFWL_WidgetImpDelegate { - public: - CFWL_EditImpDelegate(CFWL_EditImp* pOwner); - int32_t OnProcessMessage(CFWL_Message* pMessage) override; - FWL_ERR OnProcessEvent(CFWL_Event* pEvent) override; - FWL_ERR OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL) override; - - protected: - void DoActivate(CFWL_MsgActivate* pMsg); - void DoDeactivate(CFWL_MsgDeactivate* pMsg); - void DoButtonDown(CFWL_MsgMouse* pMsg); - void OnFocusChanged(CFWL_Message* pMsg, FX_BOOL bSet = TRUE); - void OnLButtonDown(CFWL_MsgMouse* pMsg); - void OnLButtonUp(CFWL_MsgMouse* pMsg); - void OnButtonDblClk(CFWL_MsgMouse* pMsg); - void OnMouseMove(CFWL_MsgMouse* pMsg); - void OnKeyDown(CFWL_MsgKey* pMsg); - void OnChar(CFWL_MsgKey* pMsg); - FX_BOOL OnScroll(IFWL_ScrollBar* pScrollBar, FX_DWORD dwCode, FX_FLOAT fPos); - void DoCursor(CFWL_MsgMouse* pMsg); - CFWL_EditImp* m_pOwner; -}; - -#endif // XFA_SRC_FWL_BASEWIDGET_FWL_EDITIMP_H_ diff --git a/xfa/src/fwl/basewidget/fwl_formproxyimp.cpp b/xfa/src/fwl/basewidget/fwl_formproxyimp.cpp deleted file mode 100644 index 3985f00b77..0000000000 --- a/xfa/src/fwl/basewidget/fwl_formproxyimp.cpp +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fwl/basewidget/fwl_formproxyimp.h" - -#include "xfa/src/fwl/core/fwl_formimp.h" -#include "xfa/src/fwl/core/fwl_noteimp.h" -#include "xfa/src/fwl/core/fwl_panelimp.h" -#include "xfa/src/fwl/core/fwl_targetimp.h" -#include "xfa/src/fwl/core/fwl_widgetimp.h" - -CFWL_FormProxyImp::CFWL_FormProxyImp(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) - : CFWL_FormImp(properties, pOuter) {} -CFWL_FormProxyImp::~CFWL_FormProxyImp() {} -FWL_ERR CFWL_FormProxyImp::GetClassName(CFX_WideString& wsClass) const { - wsClass = FWL_CLASS_FormProxy; - return FWL_ERR_Succeeded; -} -FX_DWORD CFWL_FormProxyImp::GetClassID() const { - return FWL_CLASSHASH_FormProxy; -} -FX_BOOL CFWL_FormProxyImp::IsInstance(const CFX_WideStringC& wsClass) const { - if (wsClass == CFX_WideStringC(FWL_CLASS_FormProxy)) { - return TRUE; - } - return CFWL_FormImp::IsInstance(wsClass); -} -FWL_ERR CFWL_FormProxyImp::Initialize() { - if (CFWL_WidgetImp::Initialize() != FWL_ERR_Succeeded) - return FWL_ERR_Indefinite; - m_pDelegate = new CFWL_FormProxyImpDelegate(this); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_FormProxyImp::Finalize() { - delete m_pDelegate; - m_pDelegate = nullptr; - return CFWL_WidgetImp::Finalize(); -} -FWL_ERR CFWL_FormProxyImp::Update() { - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_FormProxyImp::DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - return FWL_ERR_Succeeded; -} -CFWL_FormProxyImpDelegate::CFWL_FormProxyImpDelegate(CFWL_FormProxyImp* pOwner) - : m_pOwner(pOwner) {} -int32_t CFWL_FormProxyImpDelegate::OnProcessMessage(CFWL_Message* pMessage) { - IFWL_WidgetDelegate* pDelegate = m_pOwner->m_pOuter->SetDelegate(NULL); - return pDelegate->OnProcessMessage(pMessage); -} diff --git a/xfa/src/fwl/basewidget/fwl_formproxyimp.h b/xfa/src/fwl/basewidget/fwl_formproxyimp.h deleted file mode 100644 index 56ef05360c..0000000000 --- a/xfa/src/fwl/basewidget/fwl_formproxyimp.h +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FWL_BASEWIDGET_FWL_FORMPROXYIMP_H_ -#define XFA_SRC_FWL_BASEWIDGET_FWL_FORMPROXYIMP_H_ - -#include "xfa/src/fwl/core/fwl_formimp.h" -#include "xfa/src/fwl/core/fwl_widgetimp.h" - -class CFWL_WidgetImpProperties; -class CFWL_FormProxyImpDelegate; - -class CFWL_FormProxyImp : public CFWL_FormImp { - public: - CFWL_FormProxyImp(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter); - ~CFWL_FormProxyImp(); - virtual FWL_ERR GetClassName(CFX_WideString& wsClass) const; - virtual FX_DWORD GetClassID() const; - virtual FX_BOOL IsInstance(const CFX_WideStringC& wsClass) const; - virtual FWL_ERR Initialize(); - virtual FWL_ERR Finalize(); - virtual FWL_ERR Update(); - virtual FWL_ERR DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL); - - protected: - friend class CFWL_FormProxyImpDelegate; -}; -class CFWL_FormProxyImpDelegate : public CFWL_WidgetImpDelegate { - public: - CFWL_FormProxyImpDelegate(CFWL_FormProxyImp* pOwner); - int32_t OnProcessMessage(CFWL_Message* pMessage) override; - - protected: - CFWL_FormProxyImp* m_pOwner; -}; - -#endif // XFA_SRC_FWL_BASEWIDGET_FWL_FORMPROXYIMP_H_ diff --git a/xfa/src/fwl/basewidget/fwl_listboximp.cpp b/xfa/src/fwl/basewidget/fwl_listboximp.cpp deleted file mode 100644 index aac2d27bdf..0000000000 --- a/xfa/src/fwl/basewidget/fwl_listboximp.cpp +++ /dev/null @@ -1,1241 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fwl/basewidget/fwl_listboximp.h" - -#include "xfa/include/fwl/core/fwl_theme.h" -#include "xfa/src/fde/tto/fde_textout.h" -#include "xfa/src/fwl/basewidget/fwl_comboboximp.h" -#include "xfa/src/fwl/basewidget/fwl_scrollbarimp.h" -#include "xfa/src/fwl/core/fwl_noteimp.h" -#include "xfa/src/fwl/core/fwl_targetimp.h" -#include "xfa/src/fwl/core/fwl_widgetimp.h" - -#define FWL_LISTBOX_ItemTextMargin 2 - -// static -IFWL_ListBox* IFWL_ListBox::Create(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) { - IFWL_ListBox* pListBox = new IFWL_ListBox; - CFWL_ListBoxImp* pListBoxImpl = new CFWL_ListBoxImp(properties, pOuter); - pListBox->SetImpl(pListBoxImpl); - pListBoxImpl->SetInterface(pListBox); - return pListBox; -} -// static -IFWL_ListBox* IFWL_ListBox::CreateComboList( - const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) { - IFWL_ListBox* pListBox = new IFWL_ListBox; - CFWL_ListBoxImp* pComboListImpl = new CFWL_ComboListImp(properties, pOuter); - pListBox->SetImpl(pComboListImpl); - pComboListImpl->SetInterface(pListBox); - return pListBox; -} -IFWL_ListBox::IFWL_ListBox() {} -int32_t IFWL_ListBox::CountSelItems() { - return static_cast(GetImpl())->CountSelItems(); -} -FWL_HLISTITEM IFWL_ListBox::GetSelItem(int32_t nIndexSel) { - return static_cast(GetImpl())->GetSelItem(nIndexSel); -} -int32_t IFWL_ListBox::GetSelIndex(int32_t nIndex) { - return static_cast(GetImpl())->GetSelIndex(nIndex); -} -FWL_ERR IFWL_ListBox::SetSelItem(FWL_HLISTITEM hItem, FX_BOOL bSelect) { - return static_cast(GetImpl())->SetSelItem(hItem, bSelect); -} -FWL_ERR IFWL_ListBox::GetItemText(FWL_HLISTITEM hItem, CFX_WideString& wsText) { - return static_cast(GetImpl())->GetItemText(hItem, wsText); -} -FWL_ERR IFWL_ListBox::GetScrollPos(FX_FLOAT& fPos, FX_BOOL bVert) { - return static_cast(GetImpl())->GetScrollPos(fPos, bVert); -} -FWL_ERR* IFWL_ListBox::Sort(IFWL_ListBoxCompare* pCom) { - return static_cast(GetImpl())->Sort(pCom); -} - -CFWL_ListBoxImp::CFWL_ListBoxImp(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) - : CFWL_WidgetImp(properties, pOuter), - m_dwTTOStyles(0), - m_iTTOAligns(0), - m_hAnchor(NULL), - m_fScorllBarWidth(0), - m_bLButtonDown(FALSE), - m_pScrollBarTP(NULL) { - m_rtClient.Reset(); - m_rtConent.Reset(); - m_rtStatic.Reset(); -} -CFWL_ListBoxImp::~CFWL_ListBoxImp() {} -FWL_ERR CFWL_ListBoxImp::GetClassName(CFX_WideString& wsClass) const { - wsClass = FWL_CLASS_ListBox; - return FWL_ERR_Succeeded; -} -FX_DWORD CFWL_ListBoxImp::GetClassID() const { - return FWL_CLASSHASH_ListBox; -} -FWL_ERR CFWL_ListBoxImp::Initialize() { - if (CFWL_WidgetImp::Initialize() != FWL_ERR_Succeeded) - return FWL_ERR_Indefinite; - m_pDelegate = new CFWL_ListBoxImpDelegate(this); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ListBoxImp::Finalize() { - if (m_pVertScrollBar) { - m_pVertScrollBar->Finalize(); - } - if (m_pHorzScrollBar) { - m_pHorzScrollBar->Finalize(); - } - delete m_pDelegate; - m_pDelegate = nullptr; - return CFWL_WidgetImp::Finalize(); -} -FWL_ERR CFWL_ListBoxImp::GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize) { - if (bAutoSize) { - rect.Set(0, 0, 0, 0); - if (!m_pProperties->m_pThemeProvider) { - m_pProperties->m_pThemeProvider = GetAvailableTheme(); - } - CFX_SizeF fs = CalcSize(TRUE); - rect.Set(0, 0, fs.x, fs.y); - CFWL_WidgetImp::GetWidgetRect(rect, TRUE); - } else { - rect = m_pProperties->m_rtWidget; - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ListBoxImp::Update() { - if (IsLocked()) { - return FWL_ERR_Indefinite; - } - if (!m_pProperties->m_pThemeProvider) { - m_pProperties->m_pThemeProvider = GetAvailableTheme(); - } - m_iTTOAligns = FDE_TTOALIGNMENT_Center; - switch (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_LTB_AlignMask) { - case FWL_STYLEEXT_LTB_LeftAlign: { - m_iTTOAligns = FDE_TTOALIGNMENT_CenterLeft; - break; - } - case FWL_STYLEEXT_LTB_RightAlign: { - m_iTTOAligns = FDE_TTOALIGNMENT_CenterRight; - break; - } - case FWL_STYLEEXT_LTB_CenterAlign: - default: { m_iTTOAligns = FDE_TTOALIGNMENT_Center; } - } - if (m_pProperties->m_dwStyleExes & FWL_WGTSTYLE_RTLReading) { - m_dwTTOStyles |= FDE_TTOSTYLE_RTL; - } - m_dwTTOStyles |= FDE_TTOSTYLE_SingleLine; - m_fScorllBarWidth = GetScrollWidth(); - SortItem(); - CalcSize(); - return FWL_ERR_Succeeded; -} -FX_DWORD CFWL_ListBoxImp::HitTest(FX_FLOAT fx, FX_FLOAT fy) { - if (IsShowScrollBar(FALSE)) { - CFX_RectF rect; - m_pHorzScrollBar->GetWidgetRect(rect); - if (rect.Contains(fx, fy)) { - return FWL_WGTHITTEST_HScrollBar; - } - } - if (IsShowScrollBar(TRUE)) { - CFX_RectF rect; - m_pVertScrollBar->GetWidgetRect(rect); - if (rect.Contains(fx, fy)) { - return FWL_WGTHITTEST_VScrollBar; - } - } - if (m_rtClient.Contains(fx, fy)) { - return FWL_WGTHITTEST_Client; - } - return FWL_WGTHITTEST_Unknown; -} -FWL_ERR CFWL_ListBoxImp::DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - if (!pGraphics) - return FWL_ERR_Indefinite; - if (!m_pProperties->m_pThemeProvider) - return FWL_ERR_Indefinite; - IFWL_ThemeProvider* pTheme = m_pProperties->m_pThemeProvider; - pGraphics->SaveGraphState(); - if (HasBorder()) { - DrawBorder(pGraphics, FWL_PART_LTB_Border, pTheme, pMatrix); - } - if (HasEdge()) { - DrawEdge(pGraphics, FWL_PART_LTB_Edge, pTheme, pMatrix); - } - CFX_RectF rtClip(m_rtConent); - if (IsShowScrollBar(FALSE)) { - rtClip.height -= m_fScorllBarWidth; - } - if (IsShowScrollBar(TRUE)) { - rtClip.width -= m_fScorllBarWidth; - } - if (pMatrix) { - pMatrix->TransformRect(rtClip); - } - pGraphics->SetClipRect(rtClip); - if ((m_pProperties->m_dwStyles & FWL_WGTSTYLE_NoBackground) == 0) { - DrawBkground(pGraphics, pTheme, pMatrix); - } - DrawItems(pGraphics, pTheme, pMatrix); - pGraphics->RestoreGraphState(); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ListBoxImp::SetThemeProvider(IFWL_ThemeProvider* pThemeProvider) { - if (!pThemeProvider) - return FWL_ERR_Indefinite; - if (!pThemeProvider->IsValidWidget(m_pInterface)) { - m_pScrollBarTP = pThemeProvider; - return FWL_ERR_Succeeded; - } - m_pProperties->m_pThemeProvider = pThemeProvider; - return FWL_ERR_Succeeded; -} -int32_t CFWL_ListBoxImp::CountSelItems() { - if (!m_pProperties->m_pDataProvider) - return 0; - int32_t iRet = 0; - IFWL_ListBoxDP* pData = - static_cast(m_pProperties->m_pDataProvider); - int32_t iCount = pData->CountItems(m_pInterface); - for (int32_t i = 0; i < iCount; i++) { - FWL_HLISTITEM hItem = pData->GetItem(m_pInterface, i); - if (!hItem) { - continue; - } - FX_DWORD dwStyle = pData->GetItemStyles(m_pInterface, hItem); - if (dwStyle & FWL_ITEMSTATE_LTB_Selected) { - iRet++; - } - } - return iRet; -} -FWL_HLISTITEM CFWL_ListBoxImp::GetSelItem(int32_t nIndexSel) { - if (!m_pProperties->m_pDataProvider) - return NULL; - int32_t index = 0; - IFWL_ListBoxDP* pData = - static_cast(m_pProperties->m_pDataProvider); - int32_t iCount = pData->CountItems(m_pInterface); - for (int32_t i = 0; i < iCount; i++) { - FWL_HLISTITEM hItem = pData->GetItem(m_pInterface, i); - if (!hItem) { - return NULL; - } - FX_DWORD dwStyle = pData->GetItemStyles(m_pInterface, hItem); - if (dwStyle & FWL_ITEMSTATE_LTB_Selected) { - if (index == nIndexSel) { - return hItem; - } else { - index++; - } - } - } - return NULL; -} -int32_t CFWL_ListBoxImp::GetSelIndex(int32_t nIndex) { - if (!m_pProperties->m_pDataProvider) - return -1; - int32_t index = 0; - IFWL_ListBoxDP* pData = - static_cast(m_pProperties->m_pDataProvider); - int32_t iCount = pData->CountItems(m_pInterface); - for (int32_t i = 0; i < iCount; i++) { - FWL_HLISTITEM hItem = pData->GetItem(m_pInterface, i); - if (!hItem) { - return -1; - } - FX_DWORD dwStyle = pData->GetItemStyles(m_pInterface, hItem); - if (dwStyle & FWL_ITEMSTATE_LTB_Selected) { - if (index == nIndex) { - return i; - } else { - index++; - } - } - } - return -1; -} -FWL_ERR CFWL_ListBoxImp::SetSelItem(FWL_HLISTITEM hItem, FX_BOOL bSelect) { - if (!m_pProperties->m_pDataProvider) - return FWL_ERR_Indefinite; - if (!hItem) { - if (bSelect) { - SelectAll(); - } else { - ClearSelection(); - SetFocusItem(NULL); - } - return FWL_ERR_Indefinite; - } - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_LTB_MultiSelection) { - SetSelectionDirect(hItem, bSelect); - } else { - SetSelection(hItem, hItem, bSelect); - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ListBoxImp::GetItemText(FWL_HLISTITEM hItem, - CFX_WideString& wsText) { - if (!m_pProperties->m_pDataProvider) - return FWL_ERR_Indefinite; - IFWL_ListBoxDP* pData = - static_cast(m_pProperties->m_pDataProvider); - if (!hItem) - return FWL_ERR_Indefinite; - pData->GetItemText(m_pInterface, hItem, wsText); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ListBoxImp::GetScrollPos(FX_FLOAT& fPos, FX_BOOL bVert) { - if ((bVert && IsShowScrollBar(TRUE)) || (!bVert && IsShowScrollBar(FALSE))) { - IFWL_ScrollBar* pScrollBar = - bVert ? m_pVertScrollBar.get() : m_pHorzScrollBar.get(); - fPos = pScrollBar->GetPos(); - return FWL_ERR_Succeeded; - } - return FWL_ERR_Indefinite; -} -FWL_ERR* CFWL_ListBoxImp::Sort(IFWL_ListBoxCompare* pCom) { - FWL_HLISTITEM hTemp; - IFWL_ListBoxDP* pData = - static_cast(m_pProperties->m_pDataProvider); - int32_t sz = pData->CountItems(m_pInterface); - for (int32_t i = 0; i < sz - 1; i++) { - for (int32_t j = i + 1; j < sz; j++) { - if (pCom->Compare(pData->GetItem(m_pInterface, i), - pData->GetItem(m_pInterface, j)) > 0) { - hTemp = pData->GetItem(m_pInterface, i); - pData->SetItemIndex(m_pInterface, pData->GetItem(m_pInterface, j), i); - pData->SetItemIndex(m_pInterface, hTemp, j); - } - } - } - return FWL_ERR_Succeeded; -} -FWL_HLISTITEM CFWL_ListBoxImp::GetItem(FWL_HLISTITEM hItem, - FX_DWORD dwKeyCode) { - FWL_HLISTITEM hRet = NULL; - switch (dwKeyCode) { - case FWL_VKEY_Up: - case FWL_VKEY_Down: - case FWL_VKEY_Home: - case FWL_VKEY_End: { - const bool bUp = dwKeyCode == FWL_VKEY_Up; - const bool bDown = dwKeyCode == FWL_VKEY_Down; - const bool bHome = dwKeyCode == FWL_VKEY_Home; - IFWL_ListBoxDP* pData = - static_cast(m_pProperties->m_pDataProvider); - int32_t iDstItem = -1; - if (bUp || bDown) { - int32_t index = pData->GetItemIndex(m_pInterface, hItem); - iDstItem = dwKeyCode == FWL_VKEY_Up ? index - 1 : index + 1; - } else if (bHome) { - iDstItem = 0; - } else { - int32_t iCount = pData->CountItems(m_pInterface); - iDstItem = iCount - 1; - } - hRet = pData->GetItem(m_pInterface, iDstItem); - break; - } - default: {} - } - return hRet; -} -void CFWL_ListBoxImp::SetSelection(FWL_HLISTITEM hStart, - FWL_HLISTITEM hEnd, - FX_BOOL bSelected) { - IFWL_ListBoxDP* pData = - static_cast(m_pProperties->m_pDataProvider); - int32_t iStart = pData->GetItemIndex(m_pInterface, hStart); - int32_t iEnd = pData->GetItemIndex(m_pInterface, hEnd); - if (iStart > iEnd) { - int32_t iTemp = iStart; - iStart = iEnd; - iEnd = iTemp; - } - if (bSelected) { - int32_t iCount = pData->CountItems(m_pInterface); - for (int32_t i = 0; i < iCount; i++) { - FWL_HLISTITEM hItem = pData->GetItem(m_pInterface, i); - SetSelectionDirect(hItem, FALSE); - } - } - for (; iStart <= iEnd; iStart++) { - FWL_HLISTITEM hItem = pData->GetItem(m_pInterface, iStart); - SetSelectionDirect(hItem, bSelected); - } -} -void CFWL_ListBoxImp::SetSelectionDirect(FWL_HLISTITEM hItem, FX_BOOL bSelect) { - IFWL_ListBoxDP* pData = - static_cast(m_pProperties->m_pDataProvider); - FX_DWORD dwOldStyle = pData->GetItemStyles(m_pInterface, hItem); - bSelect ? dwOldStyle |= FWL_ITEMSTATE_LTB_Selected - : dwOldStyle &= ~FWL_ITEMSTATE_LTB_Selected; - pData->SetItemStyles(m_pInterface, hItem, dwOldStyle); -} -FX_BOOL CFWL_ListBoxImp::IsItemSelected(FWL_HLISTITEM hItem) { - IFWL_ListBoxDP* pData = - static_cast(m_pProperties->m_pDataProvider); - FX_DWORD dwState = pData->GetItemStyles(m_pInterface, hItem); - return (dwState & FWL_ITEMSTATE_LTB_Selected) != 0; -} -void CFWL_ListBoxImp::ClearSelection() { - FX_BOOL bMulti = - m_pProperties->m_dwStyleExes & FWL_STYLEEXT_LTB_MultiSelection; - IFWL_ListBoxDP* pData = - static_cast(m_pProperties->m_pDataProvider); - int32_t iCount = pData->CountItems(m_pInterface); - for (int32_t i = 0; i < iCount; i++) { - FWL_HLISTITEM hItem = pData->GetItem(m_pInterface, i); - FX_DWORD dwState = pData->GetItemStyles(m_pInterface, hItem); - FX_BOOL bFindSel = dwState & FWL_ITEMSTATE_LTB_Selected; - if (!bFindSel) { - continue; - } - SetSelectionDirect(hItem, FALSE); - if (!bMulti) { - return; - } - } -} -void CFWL_ListBoxImp::SelectAll() { - FX_BOOL bMulti = - m_pProperties->m_dwStyleExes & FWL_STYLEEXT_LTB_MultiSelection; - if (!bMulti) { - return; - } - IFWL_ListBoxDP* pData = - static_cast(m_pProperties->m_pDataProvider); - int32_t iCount = pData->CountItems(m_pInterface); - if (iCount > 0) { - FWL_HLISTITEM hItemStart = pData->GetItem(m_pInterface, 0); - FWL_HLISTITEM hItemEnd = pData->GetItem(m_pInterface, iCount - 1); - SetSelection(hItemStart, hItemEnd, FALSE); - } -} -FWL_HLISTITEM CFWL_ListBoxImp::GetFocusedItem() { - IFWL_ListBoxDP* pData = - static_cast(m_pProperties->m_pDataProvider); - int32_t iCount = pData->CountItems(m_pInterface); - for (int32_t i = 0; i < iCount; i++) { - FWL_HLISTITEM hItem = pData->GetItem(m_pInterface, i); - if (!hItem) - return NULL; - if (pData->GetItemStyles(m_pInterface, hItem) & FWL_ITEMSTATE_LTB_Focused) { - return hItem; - } - } - return NULL; -} -void CFWL_ListBoxImp::SetFocusItem(FWL_HLISTITEM hItem) { - IFWL_ListBoxDP* pData = - static_cast(m_pProperties->m_pDataProvider); - FWL_HLISTITEM hFocus = GetFocusedItem(); - if (hItem != hFocus) { - if (hFocus) { - FX_DWORD dwStyle = pData->GetItemStyles(m_pInterface, hFocus); - dwStyle &= ~FWL_ITEMSTATE_LTB_Focused; - pData->SetItemStyles(m_pInterface, hFocus, dwStyle); - } - if (hItem) { - FX_DWORD dwStyle = pData->GetItemStyles(m_pInterface, hItem); - dwStyle |= FWL_ITEMSTATE_LTB_Focused; - pData->SetItemStyles(m_pInterface, hItem, dwStyle); - } - } -} -FWL_HLISTITEM CFWL_ListBoxImp::GetItemAtPoint(FX_FLOAT fx, FX_FLOAT fy) { - fx -= m_rtConent.left, fy -= m_rtConent.top; - FX_FLOAT fPosX = 0.0f; - if (m_pHorzScrollBar) { - fPosX = m_pHorzScrollBar->GetPos(); - } - FX_FLOAT fPosY = 0.0; - if (m_pVertScrollBar) { - fPosY = m_pVertScrollBar->GetPos(); - } - IFWL_ListBoxDP* pData = - static_cast(m_pProperties->m_pDataProvider); - int32_t nCount = pData->CountItems(m_pInterface); - for (int32_t i = 0; i < nCount; i++) { - FWL_HLISTITEM hItem = pData->GetItem(m_pInterface, i); - if (!hItem) { - continue; - } - CFX_RectF rtItem; - pData->GetItemRect(m_pInterface, hItem, rtItem); - rtItem.Offset(-fPosX, -fPosY); - if (rtItem.Contains(fx, fy)) { - return hItem; - } - } - return NULL; -} -FX_BOOL CFWL_ListBoxImp::GetItemCheckRect(FWL_HLISTITEM hItem, - CFX_RectF& rtCheck) { - if (!m_pProperties->m_pDataProvider) - return FALSE; - if (!(m_pProperties->m_dwStyleExes & FWL_STYLEEXT_LTB_Check)) { - return FALSE; - } - IFWL_ListBoxDP* pData = - static_cast(m_pProperties->m_pDataProvider); - pData->GetItemCheckRect(m_pInterface, hItem, rtCheck); - return TRUE; -} -FX_BOOL CFWL_ListBoxImp::GetItemChecked(FWL_HLISTITEM hItem) { - if (!m_pProperties->m_pDataProvider) - return FALSE; - if (!(m_pProperties->m_dwStyleExes & FWL_STYLEEXT_LTB_Check)) { - return FALSE; - } - IFWL_ListBoxDP* pData = - static_cast(m_pProperties->m_pDataProvider); - return (pData->GetItemCheckState(m_pInterface, hItem) & - FWL_ITEMSTATE_LTB_Checked); -} -FX_BOOL CFWL_ListBoxImp::SetItemChecked(FWL_HLISTITEM hItem, FX_BOOL bChecked) { - if (!m_pProperties->m_pDataProvider) - return FALSE; - if (!(m_pProperties->m_dwStyleExes & FWL_STYLEEXT_LTB_Check)) { - return FALSE; - } - IFWL_ListBoxDP* pData = - static_cast(m_pProperties->m_pDataProvider); - pData->SetItemCheckState(m_pInterface, hItem, - bChecked ? FWL_ITEMSTATE_LTB_Checked : 0); - return TRUE; -} -FX_BOOL CFWL_ListBoxImp::ScrollToVisible(FWL_HLISTITEM hItem) { - if (!m_pVertScrollBar) - return FALSE; - CFX_RectF rtItem; - IFWL_ListBoxDP* pData = - static_cast(m_pProperties->m_pDataProvider); - pData->GetItemRect(m_pInterface, hItem, rtItem); - FX_BOOL bScroll = FALSE; - FX_FLOAT fPosY = m_pVertScrollBar->GetPos(); - rtItem.Offset(0, -fPosY + m_rtConent.top); - if (rtItem.top < m_rtConent.top) { - fPosY += rtItem.top - m_rtConent.top; - bScroll = TRUE; - } else if (rtItem.bottom() > m_rtConent.bottom()) { - fPosY += rtItem.bottom() - m_rtConent.bottom(); - bScroll = TRUE; - } - if (!bScroll) { - return FALSE; - } - m_pVertScrollBar->SetPos(fPosY); - m_pVertScrollBar->SetTrackPos(fPosY); - Repaint(&m_rtClient); - return TRUE; -} -void CFWL_ListBoxImp::DrawBkground(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix) { - if (!pGraphics) - return; - if (!pTheme) - return; - CFWL_ThemeBackground param; - param.m_pWidget = m_pInterface; - param.m_iPart = FWL_PART_LTB_Background; - param.m_dwStates = 0; - param.m_pGraphics = pGraphics; - param.m_matrix.Concat(*pMatrix); - param.m_rtPart = m_rtClient; - if (IsShowScrollBar(FALSE) && IsShowScrollBar(TRUE)) { - param.m_pData = &m_rtStatic; - } - if (!IsEnabled()) { - param.m_dwStates = FWL_PARTSTATE_LTB_Disabled; - } - pTheme->DrawBackground(¶m); -} -void CFWL_ListBoxImp::DrawItems(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix) { - FX_FLOAT fPosX = 0.0f; - if (m_pHorzScrollBar) { - fPosX = m_pHorzScrollBar->GetPos(); - } - FX_FLOAT fPosY = 0.0f; - if (m_pVertScrollBar) { - fPosY = m_pVertScrollBar->GetPos(); - } - CFX_RectF rtView(m_rtConent); - if (m_pHorzScrollBar) { - rtView.height -= m_fScorllBarWidth; - } - if (m_pVertScrollBar) { - rtView.width -= m_fScorllBarWidth; - } - FX_BOOL bMultiCol = - m_pProperties->m_dwStyleExes & FWL_STYLEEXT_LTB_MultiColumn; - IFWL_ListBoxDP* pData = - static_cast(m_pProperties->m_pDataProvider); - int32_t iCount = pData->CountItems(m_pInterface); - for (int32_t i = 0; i < iCount; i++) { - FWL_HLISTITEM hItem = pData->GetItem(m_pInterface, i); - if (!hItem) { - continue; - } - CFX_RectF rtItem; - pData->GetItemRect(m_pInterface, hItem, rtItem); - rtItem.Offset(m_rtConent.left - fPosX, m_rtConent.top - fPosY); - if (rtItem.bottom() < m_rtConent.top) { - continue; - } - if (rtItem.top >= m_rtConent.bottom()) { - break; - } - if (bMultiCol && rtItem.left > m_rtConent.right()) { - break; - } - if (GetStylesEx() & FWL_STYLEEXT_LTB_OwnerDraw) { - CFWL_EvtLtbDrawItem ev; - ev.m_pSrcTarget = m_pInterface; - ev.m_pGraphics = pGraphics; - ev.m_matrix = *pMatrix; - ev.m_index = i; - ev.m_rect = rtItem; - DispatchEvent(&ev); - } else { - DrawItem(pGraphics, pTheme, hItem, i, rtItem, pMatrix); - } - } -} -void CFWL_ListBoxImp::DrawItem(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - FWL_HLISTITEM hItem, - int32_t Index, - const CFX_RectF& rtItem, - const CFX_Matrix* pMatrix) { - IFWL_ListBoxDP* pData = - static_cast(m_pProperties->m_pDataProvider); - FX_DWORD dwItemStyles = pData->GetItemStyles(m_pInterface, hItem); - FX_DWORD dwPartStates = FWL_PARTSTATE_LTB_Normal; - if (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled) { - dwPartStates = FWL_PARTSTATE_LTB_Disabled; - } else if (dwItemStyles & FWL_ITEMSTATE_LTB_Selected) { - dwPartStates = FWL_PARTSTATE_LTB_Selected; - } - if (m_pProperties->m_dwStates & FWL_WGTSTATE_Focused && - dwItemStyles & FWL_ITEMSTATE_LTB_Focused) { - dwPartStates |= FWL_PARTSTATE_LTB_Focused; - } - FWL_ListBoxItemData itemData; - itemData.pDataProvider = pData; - itemData.iIndex = Index; - { - CFWL_ThemeBackground param; - param.m_pWidget = m_pInterface; - param.m_iPart = FWL_PART_LTB_ListItem; - param.m_dwStates = dwPartStates; - param.m_pGraphics = pGraphics; - param.m_matrix.Concat(*pMatrix); - param.m_rtPart = rtItem; - param.m_dwData = (FX_DWORD)(uintptr_t)(&itemData); - CFX_RectF rtFocus(rtItem); - param.m_pData = &rtFocus; - if (m_pVertScrollBar && !m_pHorzScrollBar && - (dwPartStates & FWL_PARTSTATE_LTB_Focused)) { - param.m_rtPart.left += 1; - param.m_rtPart.width -= (m_fScorllBarWidth + 1); - rtFocus.Deflate(0.5, 0.5, 1 + m_fScorllBarWidth, 1); - } - pTheme->DrawBackground(¶m); - } - { - FX_BOOL bHasIcon = GetStylesEx() & FWL_STYLEEXT_LTB_Icon; - if (bHasIcon) { - CFX_RectF rtDIB; - CFX_DIBitmap* pDib = pData->GetItemIcon(m_pInterface, hItem); - rtDIB.Set(rtItem.left, rtItem.top, rtItem.height, rtItem.height); - if (pDib) { - CFWL_ThemeBackground param; - param.m_pWidget = m_pInterface; - param.m_iPart = FWL_PART_LTB_Icon; - param.m_pGraphics = pGraphics; - param.m_matrix.Concat(*pMatrix); - param.m_rtPart = rtDIB; - param.m_dwData = (FX_DWORD)(uintptr_t)(&itemData); - param.m_pImage = pDib; - pTheme->DrawBackground(¶m); - } - } - FX_BOOL bHasCheck = GetStylesEx() & FWL_STYLEEXT_LTB_Check; - if (bHasCheck) { - CFX_RectF rtCheck; - rtCheck.Set(rtItem.left, rtItem.top, rtItem.height, rtItem.height); - rtCheck.Deflate(2, 2, 2, 2); - pData->SetItemCheckRect(m_pInterface, hItem, rtCheck); - CFWL_ThemeBackground param; - param.m_pWidget = m_pInterface; - param.m_iPart = FWL_PART_LTB_Check; - param.m_pGraphics = pGraphics; - if (GetItemChecked(hItem)) { - param.m_dwStates = FWL_PARTSTATE_LTB_Checked; - } else { - param.m_dwStates = FWL_PARTSTATE_LTB_UnChecked; - } - param.m_matrix.Concat(*pMatrix); - param.m_rtPart = rtCheck; - param.m_dwData = (FX_DWORD)(uintptr_t)(&itemData); - pTheme->DrawBackground(¶m); - } - CFX_WideString wsText; - pData->GetItemText(m_pInterface, hItem, wsText); - if (wsText.GetLength() <= 0) { - return; - } - CFX_RectF rtText(rtItem); - rtText.Deflate(FWL_LISTBOX_ItemTextMargin, FWL_LISTBOX_ItemTextMargin); - if (bHasIcon || bHasCheck) { - rtText.Deflate(rtItem.height, 0, 0, 0); - } - CFWL_ThemeText textParam; - textParam.m_pWidget = m_pInterface; - textParam.m_iPart = FWL_PART_LTB_ListItem; - textParam.m_dwStates = dwPartStates; - textParam.m_pGraphics = pGraphics; - textParam.m_matrix.Concat(*pMatrix); - textParam.m_rtPart = rtText; - textParam.m_wsText = wsText; - textParam.m_dwTTOStyles = m_dwTTOStyles; - textParam.m_iTTOAlign = m_iTTOAligns; - textParam.m_dwData = (FX_DWORD)(uintptr_t)(&itemData); - pTheme->DrawText(&textParam); - } -} -CFX_SizeF CFWL_ListBoxImp::CalcSize(FX_BOOL bAutoSize) { - CFX_SizeF fs; - if (!m_pProperties->m_pThemeProvider) - return fs; - - GetClientRect(m_rtClient); - m_rtConent = m_rtClient; - CFX_RectF rtUIMargin; - rtUIMargin.Set(0, 0, 0, 0); - if (!m_pOuter) { - CFX_RectF* pUIMargin = - static_cast(GetThemeCapacity(FWL_WGTCAPACITY_UIMargin)); - if (pUIMargin) { - m_rtConent.Deflate(pUIMargin->left, pUIMargin->top, pUIMargin->width, - pUIMargin->height); - } - } - FX_FLOAT fWidth = 0; - if (m_pProperties->m_pThemeProvider->IsCustomizedLayout(m_pInterface)) { - IFWL_ListBoxDP* pData = - static_cast(m_pProperties->m_pDataProvider); - if (!bAutoSize) { - } - int32_t iCount = pData->CountItems(m_pInterface); - for (int32_t i = 0; i < iCount; i++) { - FWL_HLISTITEM hItem = pData->GetItem(m_pInterface, i); - CFWL_ThemePart itemPart; - itemPart.m_pWidget = m_pInterface; - itemPart.m_iPart = FWL_PART_LTB_ListItem; - itemPart.m_pData = m_pProperties->m_pDataProvider; - itemPart.m_dwData = i; - CFX_RectF r; - m_pProperties->m_pThemeProvider->GetPartRect(&itemPart, r); - if (!bAutoSize) { - CFX_RectF rtItem; - rtItem.Set(m_rtClient.left, m_rtClient.top + fs.y, r.width, r.height); - IFWL_ListBoxDP* pData = - static_cast(m_pProperties->m_pDataProvider); - pData->SetItemRect(m_pInterface, hItem, rtItem); - } - fs.y += r.height; - if (fs.x < r.width) { - fs.x = r.width; - fWidth = r.width; - } - } - } else { - fWidth = GetMaxTextWidth(); - fWidth += 2 * FWL_LISTBOX_ItemTextMargin; - if (!bAutoSize) { - FX_FLOAT fActualWidth = - m_rtClient.width - rtUIMargin.left - rtUIMargin.width; - if (fWidth < fActualWidth) { - fWidth = fActualWidth; - } - } - IFWL_ListBoxDP* pData = - static_cast(m_pProperties->m_pDataProvider); - m_fItemHeight = GetItemHeigt(); - FX_BOOL bHasIcon; - bHasIcon = GetStylesEx() & FWL_STYLEEXT_LTB_Icon; - if (bHasIcon) { - fWidth += m_fItemHeight; - } - int32_t iCount = pData->CountItems(m_pInterface); - for (int32_t i = 0; i < iCount; i++) { - FWL_HLISTITEM htem = pData->GetItem(m_pInterface, i); - GetItemSize(fs, htem, fWidth, m_fItemHeight, bAutoSize); - } - } - if (bAutoSize) { - return fs; - } - FX_FLOAT iWidth = m_rtClient.width - rtUIMargin.left - rtUIMargin.width; - FX_FLOAT iHeight = m_rtClient.height; - FX_BOOL bShowVertScr = - (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_LTB_ShowScrollBarAlaways) && - (m_pProperties->m_dwStyles & FWL_WGTSTYLE_VScroll); - FX_BOOL bShowHorzScr = - (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_LTB_ShowScrollBarAlaways) && - (m_pProperties->m_dwStyles & FWL_WGTSTYLE_HScroll); - if (!bShowVertScr && m_pProperties->m_dwStyles & FWL_WGTSTYLE_VScroll && - (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_LTB_MultiColumn) == 0) { - bShowVertScr = (fs.y > iHeight); - } - if (!bShowHorzScr && m_pProperties->m_dwStyles & FWL_WGTSTYLE_HScroll) { - bShowHorzScr = (fs.x > iWidth); - } - CFX_SizeF szRange; - if (bShowVertScr) { - if (!m_pVertScrollBar) { - InitScrollBar(); - } - CFX_RectF rtScrollBar; - rtScrollBar.Set(m_rtClient.right() - m_fScorllBarWidth, m_rtClient.top, - m_fScorllBarWidth, m_rtClient.height - 1); - if (bShowHorzScr) { - rtScrollBar.height -= m_fScorllBarWidth; - } - m_pVertScrollBar->SetWidgetRect(rtScrollBar); - szRange.x = 0, szRange.y = fs.y - m_rtConent.height; - if (szRange.y < m_fItemHeight) { - szRange.y = m_fItemHeight; - } - m_pVertScrollBar->SetRange(szRange.x, szRange.y); - m_pVertScrollBar->SetPageSize(rtScrollBar.height * 9 / 10); - m_pVertScrollBar->SetStepSize(m_fItemHeight); - FX_FLOAT fPos = m_pVertScrollBar->GetPos(); - if (fPos < 0) { - fPos = 0; - } - if (fPos > szRange.y) { - fPos = szRange.y; - } - m_pVertScrollBar->SetPos(fPos); - m_pVertScrollBar->SetTrackPos(fPos); - if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_LTB_ShowScrollBarFocus) == - 0 || - (m_pProperties->m_dwStates & FWL_WGTSTATE_Focused)) { - m_pVertScrollBar->SetStates(FWL_WGTSTATE_Invisible, FALSE); - } - m_pVertScrollBar->Update(); - } else if (m_pVertScrollBar) { - m_pVertScrollBar->SetPos(0); - m_pVertScrollBar->SetTrackPos(0); - m_pVertScrollBar->SetStates(FWL_WGTSTATE_Invisible, TRUE); - } - if (bShowHorzScr) { - if (!m_pHorzScrollBar) { - InitScrollBar(FALSE); - } - CFX_RectF rtScrollBar; - rtScrollBar.Set(m_rtClient.left, m_rtClient.bottom() - m_fScorllBarWidth, - m_rtClient.width, m_fScorllBarWidth); - if (bShowVertScr) { - rtScrollBar.width -= m_fScorllBarWidth; - } - m_pHorzScrollBar->SetWidgetRect(rtScrollBar); - szRange.x = 0, szRange.y = fs.x - rtScrollBar.width; - m_pHorzScrollBar->SetRange(szRange.x, szRange.y); - m_pHorzScrollBar->SetPageSize(fWidth * 9 / 10); - m_pHorzScrollBar->SetStepSize(fWidth / 10); - FX_FLOAT fPos = m_pHorzScrollBar->GetPos(); - if (fPos < 0) { - fPos = 0; - } - if (fPos > szRange.y) { - fPos = szRange.y; - } - m_pHorzScrollBar->SetPos(fPos); - m_pHorzScrollBar->SetTrackPos(fPos); - if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_LTB_ShowScrollBarFocus) == - 0 || - (m_pProperties->m_dwStates & FWL_WGTSTATE_Focused)) { - m_pHorzScrollBar->SetStates(FWL_WGTSTATE_Invisible, FALSE); - } - m_pHorzScrollBar->Update(); - } else if (m_pHorzScrollBar) { - m_pHorzScrollBar->SetPos(0); - m_pHorzScrollBar->SetTrackPos(0); - m_pHorzScrollBar->SetStates(FWL_WGTSTATE_Invisible, TRUE); - } - if (bShowVertScr && bShowHorzScr) { - m_rtStatic.Set(m_rtClient.right() - m_fScorllBarWidth, - m_rtClient.bottom() - m_fScorllBarWidth, m_fScorllBarWidth, - m_fScorllBarWidth); - } - return fs; -} -void CFWL_ListBoxImp::GetItemSize(CFX_SizeF& size, - FWL_HLISTITEM hItem, - FX_FLOAT fWidth, - FX_FLOAT m_fItemHeight, - FX_BOOL bAutoSize) { - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_LTB_MultiColumn) { - } else { - if (!bAutoSize) { - CFX_RectF rtItem; - rtItem.Set(0, size.y, fWidth, m_fItemHeight); - IFWL_ListBoxDP* pData = - static_cast(m_pProperties->m_pDataProvider); - pData->SetItemRect(m_pInterface, hItem, rtItem); - } - size.x = fWidth; - size.y += m_fItemHeight; - } -} -FX_FLOAT CFWL_ListBoxImp::GetMaxTextWidth() { - FX_FLOAT fRet = 0.0f; - IFWL_ListBoxDP* pData = - static_cast(m_pProperties->m_pDataProvider); - int32_t iCount = pData->CountItems(m_pInterface); - for (int32_t i = 0; i < iCount; i++) { - FWL_HLISTITEM hItem = pData->GetItem(m_pInterface, i); - if (!hItem) { - continue; - } - CFX_WideString wsText; - pData->GetItemText(m_pInterface, hItem, wsText); - CFX_SizeF sz = CalcTextSize(wsText, m_pProperties->m_pThemeProvider); - if (sz.x > fRet) { - fRet = sz.x; - } - } - return fRet; -} -FX_FLOAT CFWL_ListBoxImp::GetScrollWidth() { - FX_FLOAT* pfWidth = - static_cast(GetThemeCapacity(FWL_WGTCAPACITY_ScrollBarWidth)); - if (!pfWidth) - return 0; - return *pfWidth; -} -FX_FLOAT CFWL_ListBoxImp::GetItemHeigt() { - FX_FLOAT* pfFont = - static_cast(GetThemeCapacity(FWL_WGTCAPACITY_FontSize)); - if (!pfFont) - return 20; - return *pfFont + 2 * FWL_LISTBOX_ItemTextMargin; -} -void CFWL_ListBoxImp::InitScrollBar(FX_BOOL bVert) { - if ((bVert && m_pVertScrollBar) || (!bVert && m_pHorzScrollBar)) { - return; - } - CFWL_WidgetImpProperties prop; - prop.m_dwStyleExes = bVert ? FWL_STYLEEXT_SCB_Vert : FWL_STYLEEXT_SCB_Horz; - prop.m_dwStates = FWL_WGTSTATE_Invisible; - prop.m_pParent = m_pInterface; - prop.m_pThemeProvider = m_pScrollBarTP; - IFWL_ScrollBar* pScrollBar = IFWL_ScrollBar::Create(prop, m_pInterface); - pScrollBar->Initialize(); - (bVert ? &m_pVertScrollBar : &m_pHorzScrollBar)->reset(pScrollBar); -} -void CFWL_ListBoxImp::SortItem() {} -FX_BOOL CFWL_ListBoxImp::IsShowScrollBar(FX_BOOL bVert) { - IFWL_ScrollBar* pScrollbar = - bVert ? m_pVertScrollBar.get() : m_pHorzScrollBar.get(); - if (!pScrollbar || (pScrollbar->GetStates() & FWL_WGTSTATE_Invisible)) { - return FALSE; - } - return !(m_pProperties->m_dwStyleExes & - FWL_STYLEEXT_LTB_ShowScrollBarFocus) || - (m_pProperties->m_dwStates & FWL_WGTSTATE_Focused); -} -void CFWL_ListBoxImp::ProcessSelChanged() { - CFWL_EvtLtbSelChanged selEvent; - selEvent.m_pSrcTarget = m_pInterface; - CFX_Int32Array arrSels; - int32_t iCount = CountSelItems(); - for (int32_t i = 0; i < iCount; i++) { - FWL_HLISTITEM item = GetSelItem(i); - if (item == NULL) { - continue; - } - selEvent.iarraySels.Add(i); - } - DispatchEvent(&selEvent); -} -CFWL_ListBoxImpDelegate::CFWL_ListBoxImpDelegate(CFWL_ListBoxImp* pOwner) - : m_pOwner(pOwner) {} -int32_t CFWL_ListBoxImpDelegate::OnProcessMessage(CFWL_Message* pMessage) { - if (!pMessage) - return 0; - if (!m_pOwner->IsEnabled()) { - return 1; - } - FX_DWORD dwMsgCode = pMessage->GetClassID(); - int32_t iRet = 1; - switch (dwMsgCode) { - case FWL_MSGHASH_SetFocus: - case FWL_MSGHASH_KillFocus: { - OnFocusChanged(pMessage, dwMsgCode == FWL_MSGHASH_SetFocus); - break; - } - case FWL_MSGHASH_Mouse: { - CFWL_MsgMouse* pMsg = static_cast(pMessage); - FX_DWORD dwCmd = pMsg->m_dwCmd; - switch (dwCmd) { - case FWL_MSGMOUSECMD_LButtonDown: { - OnLButtonDown(pMsg); - break; - } - case FWL_MSGMOUSECMD_LButtonUp: { - OnLButtonUp(pMsg); - break; - } - default: {} - } - break; - } - case FWL_MSGHASH_MouseWheel: { - OnMouseWheel(static_cast(pMessage)); - break; - } - case FWL_MSGHASH_Key: { - CFWL_MsgKey* pMsg = static_cast(pMessage); - if (pMsg->m_dwCmd == FWL_MSGKEYCMD_KeyDown) - OnKeyDown(pMsg); - break; - } - default: { iRet = 0; } - } - CFWL_WidgetImpDelegate::OnProcessMessage(pMessage); - return iRet; -} -FWL_ERR CFWL_ListBoxImpDelegate::OnProcessEvent(CFWL_Event* pEvent) { - if (!pEvent) - return FWL_ERR_Indefinite; - if (pEvent->GetClassID() != FWL_EVTHASH_Scroll) { - return FWL_ERR_Succeeded; - } - IFWL_Widget* pSrcTarget = pEvent->m_pSrcTarget; - if ((pSrcTarget == m_pOwner->m_pVertScrollBar.get() && - m_pOwner->m_pVertScrollBar) || - (pSrcTarget == m_pOwner->m_pHorzScrollBar.get() && - m_pOwner->m_pHorzScrollBar)) { - CFWL_EvtScroll* pScrollEvent = static_cast(pEvent); - OnScroll(static_cast(pSrcTarget), - pScrollEvent->m_iScrollCode, pScrollEvent->m_fPos); - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ListBoxImpDelegate::OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - return m_pOwner->DrawWidget(pGraphics, pMatrix); -} -void CFWL_ListBoxImpDelegate::OnFocusChanged(CFWL_Message* pMsg, FX_BOOL bSet) { - if (m_pOwner->GetStylesEx() & FWL_STYLEEXT_LTB_ShowScrollBarFocus) { - if (m_pOwner->m_pVertScrollBar) { - m_pOwner->m_pVertScrollBar->SetStates(FWL_WGTSTATE_Invisible, !bSet); - } - if (m_pOwner->m_pHorzScrollBar) { - m_pOwner->m_pHorzScrollBar->SetStates(FWL_WGTSTATE_Invisible, !bSet); - } - } - if (bSet) { - m_pOwner->m_pProperties->m_dwStates |= (FWL_WGTSTATE_Focused); - } else { - m_pOwner->m_pProperties->m_dwStates &= ~(FWL_WGTSTATE_Focused); - } - m_pOwner->Repaint(&m_pOwner->m_rtClient); -} -void CFWL_ListBoxImpDelegate::OnLButtonDown(CFWL_MsgMouse* pMsg) { - m_pOwner->m_bLButtonDown = TRUE; - if ((m_pOwner->m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) == 0) { - m_pOwner->SetFocus(TRUE); - } - FWL_HLISTITEM hItem = m_pOwner->GetItemAtPoint(pMsg->m_fx, pMsg->m_fy); - if (!hItem) { - return; - } - if (m_pOwner->m_pProperties->m_dwStyleExes & - FWL_STYLEEXT_LTB_MultiSelection) { - if (pMsg->m_dwFlags & FWL_KEYFLAG_Ctrl) { - FX_BOOL bSelected = m_pOwner->IsItemSelected(hItem); - m_pOwner->SetSelectionDirect(hItem, !bSelected); - m_pOwner->m_hAnchor = hItem; - } else if (pMsg->m_dwFlags & FWL_KEYFLAG_Shift) { - if (m_pOwner->m_hAnchor) { - m_pOwner->SetSelection(m_pOwner->m_hAnchor, hItem, TRUE); - } else { - m_pOwner->SetSelectionDirect(hItem, TRUE); - } - } else { - m_pOwner->SetSelection(hItem, hItem, TRUE); - m_pOwner->m_hAnchor = hItem; - } - } else { - m_pOwner->SetSelection(hItem, hItem, TRUE); - } - if (m_pOwner->m_pProperties->m_dwStyleExes & FWL_STYLEEXT_LTB_Check) { - FWL_HLISTITEM hSelectedItem = - m_pOwner->GetItemAtPoint(pMsg->m_fx, pMsg->m_fy); - CFX_RectF rtCheck; - m_pOwner->GetItemCheckRect(hSelectedItem, rtCheck); - FX_BOOL bChecked = m_pOwner->GetItemChecked(hItem); - if (rtCheck.Contains(pMsg->m_fx, pMsg->m_fy)) { - if (bChecked) { - m_pOwner->SetItemChecked(hItem, FALSE); - } else { - m_pOwner->SetItemChecked(hItem, TRUE); - } - m_pOwner->Update(); - } - } - m_pOwner->SetFocusItem(hItem); - m_pOwner->ScrollToVisible(hItem); - m_pOwner->SetGrab(TRUE); - m_pOwner->ProcessSelChanged(); - m_pOwner->Repaint(&m_pOwner->m_rtClient); -} -void CFWL_ListBoxImpDelegate::OnLButtonUp(CFWL_MsgMouse* pMsg) { - if (m_pOwner->m_bLButtonDown) { - m_pOwner->m_bLButtonDown = FALSE; - m_pOwner->SetGrab(FALSE); - DispatchSelChangedEv(); - } -} -void CFWL_ListBoxImpDelegate::OnMouseWheel(CFWL_MsgMouseWheel* pMsg) { - if (!m_pOwner->IsShowScrollBar(TRUE)) { - return; - } - IFWL_WidgetDelegate* pDelegate = - m_pOwner->m_pVertScrollBar->SetDelegate(NULL); - pDelegate->OnProcessMessage(pMsg); -} -void CFWL_ListBoxImpDelegate::OnKeyDown(CFWL_MsgKey* pMsg) { - FX_DWORD dwKeyCode = pMsg->m_dwKeyCode; - switch (dwKeyCode) { - case FWL_VKEY_Tab: - case FWL_VKEY_Up: - case FWL_VKEY_Down: - case FWL_VKEY_Home: - case FWL_VKEY_End: { - FWL_HLISTITEM hItem = m_pOwner->GetFocusedItem(); - hItem = m_pOwner->GetItem(hItem, dwKeyCode); - FX_BOOL bShift = pMsg->m_dwFlags & FWL_KEYFLAG_Shift; - FX_BOOL bCtrl = pMsg->m_dwFlags & FWL_KEYFLAG_Ctrl; - OnVK(hItem, bShift, bCtrl); - DispatchSelChangedEv(); - m_pOwner->ProcessSelChanged(); - break; - } - default: {} - } -} -void CFWL_ListBoxImpDelegate::OnVK(FWL_HLISTITEM hItem, - FX_BOOL bShift, - FX_BOOL bCtrl) { - if (!hItem) { - return; - } - if (m_pOwner->m_pProperties->m_dwStyleExes & - FWL_STYLEEXT_LTB_MultiSelection) { - if (bCtrl) { - } else if (bShift) { - if (m_pOwner->m_hAnchor) { - m_pOwner->SetSelection(m_pOwner->m_hAnchor, hItem, TRUE); - } else { - m_pOwner->SetSelectionDirect(hItem, TRUE); - } - } else { - m_pOwner->SetSelection(hItem, hItem, TRUE); - m_pOwner->m_hAnchor = hItem; - } - } else { - m_pOwner->SetSelection(hItem, hItem, TRUE); - } - m_pOwner->SetFocusItem(hItem); - m_pOwner->ScrollToVisible(hItem); - { - CFX_RectF rtInvalidate; - rtInvalidate.Set(0, 0, m_pOwner->m_pProperties->m_rtWidget.width, - m_pOwner->m_pProperties->m_rtWidget.height); - m_pOwner->Repaint(&rtInvalidate); - } -} -FX_BOOL CFWL_ListBoxImpDelegate::OnScroll(IFWL_ScrollBar* pScrollBar, - FX_DWORD dwCode, - FX_FLOAT fPos) { - CFX_SizeF fs; - pScrollBar->GetRange(fs.x, fs.y); - FX_FLOAT iCurPos = pScrollBar->GetPos(); - FX_FLOAT fStep = pScrollBar->GetStepSize(); - switch (dwCode) { - case FWL_SCBCODE_Min: { - fPos = fs.x; - break; - } - case FWL_SCBCODE_Max: { - fPos = fs.y; - break; - } - case FWL_SCBCODE_StepBackward: { - fPos -= fStep; - if (fPos < fs.x + fStep / 2) { - fPos = fs.x; - } - break; - } - case FWL_SCBCODE_StepForward: { - fPos += fStep; - if (fPos > fs.y - fStep / 2) { - fPos = fs.y; - } - break; - } - case FWL_SCBCODE_PageBackward: { - fPos -= pScrollBar->GetPageSize(); - if (fPos < fs.x) { - fPos = fs.x; - } - break; - } - case FWL_SCBCODE_PageForward: { - fPos += pScrollBar->GetPageSize(); - if (fPos > fs.y) { - fPos = fs.y; - } - break; - } - case FWL_SCBCODE_Pos: - case FWL_SCBCODE_TrackPos: - break; - case FWL_SCBCODE_EndScroll: - return FALSE; - } - if (iCurPos != fPos) { - pScrollBar->SetPos(fPos); - pScrollBar->SetTrackPos(fPos); - m_pOwner->Repaint(&m_pOwner->m_rtClient); - } - return TRUE; -} -void CFWL_ListBoxImpDelegate::DispatchSelChangedEv() { - CFWL_EvtLtbSelChanged ev; - ev.m_pSrcTarget = m_pOwner->m_pInterface; - m_pOwner->DispatchEvent(&ev); -} diff --git a/xfa/src/fwl/basewidget/fwl_listboximp.h b/xfa/src/fwl/basewidget/fwl_listboximp.h deleted file mode 100644 index 614b76c495..0000000000 --- a/xfa/src/fwl/basewidget/fwl_listboximp.h +++ /dev/null @@ -1,121 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FWL_BASEWIDGET_FWL_LISTBOXIMP_H_ -#define XFA_SRC_FWL_BASEWIDGET_FWL_LISTBOXIMP_H_ - -#include - -#include "xfa/include/fwl/basewidget/fwl_combobox.h" -#include "xfa/include/fwl/basewidget/fwl_edit.h" -#include "xfa/include/fwl/basewidget/fwl_listbox.h" -#include "xfa/include/fwl/basewidget/fwl_scrollbar.h" -#include "xfa/src/fwl/core/fwl_widgetimp.h" - -class CFWL_ListBoxImpDelegate; - -class CFWL_ListBoxImp : public CFWL_WidgetImp { - public: - CFWL_ListBoxImp(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter); - ~CFWL_ListBoxImp(); - virtual FWL_ERR GetClassName(CFX_WideString& wsClass) const; - virtual FX_DWORD GetClassID() const; - virtual FWL_ERR Initialize(); - virtual FWL_ERR Finalize(); - virtual FWL_ERR GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize = FALSE); - virtual FWL_ERR Update(); - virtual FX_DWORD HitTest(FX_FLOAT fx, FX_FLOAT fy); - virtual FWL_ERR DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL); - virtual FWL_ERR SetThemeProvider(IFWL_ThemeProvider* pThemeProvider); - virtual int32_t CountSelItems(); - virtual FWL_HLISTITEM GetSelItem(int32_t nIndexSel); - virtual int32_t GetSelIndex(int32_t nIndex); - virtual FWL_ERR SetSelItem(FWL_HLISTITEM hItem, FX_BOOL bSelect = TRUE); - virtual FWL_ERR GetItemText(FWL_HLISTITEM hItem, CFX_WideString& wsText); - virtual FWL_ERR GetScrollPos(FX_FLOAT& fPos, FX_BOOL bVert = TRUE); - virtual FWL_ERR* Sort(IFWL_ListBoxCompare* pCom); - - protected: - FWL_HLISTITEM GetItem(FWL_HLISTITEM hItem, FX_DWORD dwKeyCode); - void SetSelection(FWL_HLISTITEM hStart, - FWL_HLISTITEM hEnd, - FX_BOOL bSelected); - void SetSelectionDirect(FWL_HLISTITEM hItem, FX_BOOL bSelect); - FX_BOOL IsItemSelected(FWL_HLISTITEM hItem); - void ClearSelection(); - void SelectAll(); - FWL_HLISTITEM GetFocusedItem(); - void SetFocusItem(FWL_HLISTITEM hItem); - FWL_HLISTITEM GetItemAtPoint(FX_FLOAT fx, FX_FLOAT fy); - FX_BOOL GetItemCheckRect(FWL_HLISTITEM hItem, CFX_RectF& rtCheck); - FX_BOOL SetItemChecked(FWL_HLISTITEM hItem, FX_BOOL bChecked); - FX_BOOL GetItemChecked(FWL_HLISTITEM hItem); - FX_BOOL ScrollToVisible(FWL_HLISTITEM hItem); - void DrawBkground(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix = NULL); - void DrawItems(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix = NULL); - void DrawItem(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - FWL_HLISTITEM hItem, - int32_t Index, - const CFX_RectF& rtItem, - const CFX_Matrix* pMatrix = NULL); - void DrawStatic(CFX_Graphics* pGraphics, IFWL_ThemeProvider* pTheme); - CFX_SizeF CalcSize(FX_BOOL bAutoSize = FALSE); - void GetItemSize(CFX_SizeF& size, - FWL_HLISTITEM hItem, - FX_FLOAT fWidth, - FX_FLOAT fHeight, - FX_BOOL bAutoSize = FALSE); - FX_FLOAT GetMaxTextWidth(); - FX_FLOAT GetScrollWidth(); - FX_FLOAT GetItemHeigt(); - void InitScrollBar(FX_BOOL bVert = TRUE); - void SortItem(); - FX_BOOL IsShowScrollBar(FX_BOOL bVert); - void ProcessSelChanged(); - - protected: - CFX_RectF m_rtClient; - CFX_RectF m_rtStatic; - CFX_RectF m_rtConent; - std::unique_ptr m_pHorzScrollBar; - std::unique_ptr m_pVertScrollBar; - FX_DWORD m_dwTTOStyles; - int32_t m_iTTOAligns; - FWL_HLISTITEM m_hAnchor; - FX_FLOAT m_fItemHeight; - FX_FLOAT m_fScorllBarWidth; - FX_BOOL m_bLButtonDown; - IFWL_ThemeProvider* m_pScrollBarTP; - friend class CFWL_ListBoxImpDelegate; -}; -class CFWL_ListBoxImpDelegate : public CFWL_WidgetImpDelegate { - public: - CFWL_ListBoxImpDelegate(CFWL_ListBoxImp* pOwner); - int32_t OnProcessMessage(CFWL_Message* pMessage) override; - FWL_ERR OnProcessEvent(CFWL_Event* pEvent) override; - FWL_ERR OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL) override; - - protected: - void OnFocusChanged(CFWL_Message* pMsg, FX_BOOL bSet = TRUE); - void OnLButtonDown(CFWL_MsgMouse* pMsg); - void OnLButtonUp(CFWL_MsgMouse* pMsg); - void OnMouseWheel(CFWL_MsgMouseWheel* pMsg); - void OnKeyDown(CFWL_MsgKey* pMsg); - void OnVK(FWL_HLISTITEM hItem, FX_BOOL bShift, FX_BOOL bCtrl); - FX_BOOL OnScroll(IFWL_ScrollBar* pScrollBar, FX_DWORD dwCode, FX_FLOAT fPos); - void DispatchSelChangedEv(); - CFWL_ListBoxImp* m_pOwner; -}; - -#endif // XFA_SRC_FWL_BASEWIDGET_FWL_LISTBOXIMP_H_ diff --git a/xfa/src/fwl/basewidget/fwl_monthcalendarimp.cpp b/xfa/src/fwl/basewidget/fwl_monthcalendarimp.cpp deleted file mode 100644 index 8bea9f1a11..0000000000 --- a/xfa/src/fwl/basewidget/fwl_monthcalendarimp.cpp +++ /dev/null @@ -1,1098 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fwl/basewidget/fwl_monthcalendarimp.h" - -#include - -#include "xfa/include/fwl/basewidget/fwl_monthcalendar.h" -#include "xfa/include/fwl/core/fwl_theme.h" -#include "xfa/src/fde/tto/fde_textout.h" -#include "xfa/src/fwl/core/fwl_noteimp.h" -#include "xfa/src/fwl/core/fwl_targetimp.h" -#include "xfa/src/fwl/core/fwl_widgetimp.h" - -#define MONTHCAL_HSEP_HEIGHT 1 -#define MONTHCAL_VSEP_WIDTH 1 -#define MONTHCAL_HMARGIN 3 -#define MONTHCAL_VMARGIN 2 -#define MONTHCAL_ROWS 9 -#define MONTHCAL_COLUMNS 7 -#define MONTHCAL_HEADER_BTN_VMARGIN 7 -#define MONTHCAL_HEADER_BTN_HMARGIN 5 - -// static -IFWL_MonthCalendar* IFWL_MonthCalendar::Create( - const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) { - IFWL_MonthCalendar* pMonthCalendar = new IFWL_MonthCalendar; - CFWL_MonthCalendarImp* pMonthCalendarImpl = - new CFWL_MonthCalendarImp(properties, pOuter); - pMonthCalendar->SetImpl(pMonthCalendarImpl); - pMonthCalendarImpl->SetInterface(pMonthCalendar); - return pMonthCalendar; -} -IFWL_MonthCalendar::IFWL_MonthCalendar() {} -int32_t IFWL_MonthCalendar::CountSelect() { - return static_cast(GetImpl())->CountSelect(); -} -FX_BOOL IFWL_MonthCalendar::GetSelect(int32_t& iYear, - int32_t& iMonth, - int32_t& iDay, - int32_t nIndex) { - return static_cast(GetImpl()) - ->GetSelect(iYear, iMonth, iDay, nIndex); -} -FX_BOOL IFWL_MonthCalendar::SetSelect(int32_t iYear, - int32_t iMonth, - int32_t iDay) { - return static_cast(GetImpl()) - ->SetSelect(iYear, iMonth, iDay); -} - -CFWL_MonthCalendarImp::CFWL_MonthCalendarImp( - const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) - : CFWL_WidgetImp(properties, pOuter), - m_iCurYear(2011), - m_iCurMonth(1), - m_iYear(2011), - m_iMonth(1), - m_iDay(1), - m_iHovered(-1), - m_iLBtnPartStates(FWL_PARTSTATE_MCD_Normal), - m_iRBtnPartStates(FWL_PARTSTATE_MCD_Normal) { - m_rtHead.Reset(); - m_rtWeek.Reset(); - m_rtLBtn.Reset(); - m_rtRBtn.Reset(); - m_rtDates.Reset(); - m_rtHSep.Reset(); - m_rtHeadText.Reset(); - m_rtToday.Reset(); - m_rtTodayFlag.Reset(); - m_rtClient.Reset(); - m_rtWeekNum.Reset(); - m_rtWeekNumSep.Reset(); - m_pDateTime = new CFX_DateTime; - m_bInit = FALSE; - m_iMaxSel = 1; -} -CFWL_MonthCalendarImp::~CFWL_MonthCalendarImp() { - ClearDateItem(); - delete m_pDateTime; - m_arrSelDays.RemoveAll(); -} -FWL_ERR CFWL_MonthCalendarImp::GetClassName(CFX_WideString& wsClass) const { - wsClass = FWL_CLASS_MonthCalendar; - return FWL_ERR_Succeeded; -} -FX_DWORD CFWL_MonthCalendarImp::GetClassID() const { - return FWL_CLASSHASH_MonthCalendar; -} -FWL_ERR CFWL_MonthCalendarImp::Initialize() { - if (CFWL_WidgetImp::Initialize() != FWL_ERR_Succeeded) - return FWL_ERR_Indefinite; - m_pDelegate = new CFWL_MonthCalendarImpDelegate(this); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_MonthCalendarImp::Finalize() { - delete m_pDelegate; - m_pDelegate = nullptr; - return CFWL_WidgetImp::Finalize(); -} -FWL_ERR CFWL_MonthCalendarImp::GetWidgetRect(CFX_RectF& rect, - FX_BOOL bAutoSize) { - if (bAutoSize) { - CFX_SizeF fs = CalcSize(TRUE); - rect.Set(0, 0, fs.x, fs.y); - CFWL_WidgetImp::GetWidgetRect(rect, TRUE); - } else { - rect = m_pProperties->m_rtWidget; - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_MonthCalendarImp::Update() { - if (IsLocked()) { - return FWL_ERR_Indefinite; - } - if (!m_pProperties->m_pThemeProvider) { - m_pProperties->m_pThemeProvider = GetAvailableTheme(); - } - GetCapValue(); - if (!m_bInit) { - m_bInit = InitDate(); - } - ClearDateItem(); - ReSetDateItem(); - LayOut(); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_MonthCalendarImp::DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - if (!pGraphics) - return FWL_ERR_Indefinite; - if (m_pProperties->m_pThemeProvider == NULL) { - m_pProperties->m_pThemeProvider = GetAvailableTheme(); - } - IFWL_ThemeProvider* pTheme = m_pProperties->m_pThemeProvider; - if (HasBorder()) { - DrawBorder(pGraphics, FWL_PART_MCD_Border, pTheme, pMatrix); - } - if (HasEdge()) { - DrawEdge(pGraphics, FWL_PART_MCD_Edge, pTheme, pMatrix); - } - DrawBkground(pGraphics, pTheme, pMatrix); - DrawHeadBK(pGraphics, pTheme, pMatrix); - DrawLButton(pGraphics, pTheme, pMatrix); - DrawRButton(pGraphics, pTheme, pMatrix); - DrawSeperator(pGraphics, pTheme, pMatrix); - DrawDatesInBK(pGraphics, pTheme, pMatrix); - DrawDatesInCircle(pGraphics, pTheme, pMatrix); - DrawCaption(pGraphics, pTheme, pMatrix); - DrawWeek(pGraphics, pTheme, pMatrix); - DrawDatesIn(pGraphics, pTheme, pMatrix); - DrawDatesOut(pGraphics, pTheme, pMatrix); - DrawToday(pGraphics, pTheme, pMatrix); - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_MCD_WeekNumbers) { - DrawWeekNumberSep(pGraphics, pTheme, pMatrix); - DrawWeekNumber(pGraphics, pTheme, pMatrix); - } - return FWL_ERR_Succeeded; -} -int32_t CFWL_MonthCalendarImp::CountSelect() { - return m_arrSelDays.GetSize(); -} -FX_BOOL CFWL_MonthCalendarImp::GetSelect(int32_t& iYear, - int32_t& iMonth, - int32_t& iDay, - int32_t nIndex) { - if (nIndex >= m_arrSelDays.GetSize()) { - return FALSE; - } - iYear = m_iCurYear; - iMonth = m_iCurMonth; - iDay = m_arrSelDays[nIndex]; - return TRUE; -} -FX_BOOL CFWL_MonthCalendarImp::SetSelect(int32_t iYear, - int32_t iMonth, - int32_t iDay) { - ChangeToMonth(iYear, iMonth); - return AddSelDay(iDay); -} -void CFWL_MonthCalendarImp::DrawBkground(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix) { - CFWL_ThemeBackground params; - params.m_pWidget = m_pInterface; - params.m_iPart = FWL_PART_MCD_Background; - params.m_pGraphics = pGraphics; - params.m_dwStates = FWL_PARTSTATE_MCD_Normal; - params.m_rtPart = m_rtClient; - if (pMatrix) { - params.m_matrix.Concat(*pMatrix); - } - pTheme->DrawBackground(¶ms); -} -void CFWL_MonthCalendarImp::DrawHeadBK(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix) { - CFWL_ThemeBackground params; - params.m_pWidget = m_pInterface; - params.m_iPart = FWL_PART_MCD_Header; - params.m_pGraphics = pGraphics; - params.m_dwStates = FWL_PARTSTATE_MCD_Normal; - params.m_rtPart = m_rtHead; - if (pMatrix) { - params.m_matrix.Concat(*pMatrix); - } - pTheme->DrawBackground(¶ms); -} -void CFWL_MonthCalendarImp::DrawLButton(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix) { - CFWL_ThemeBackground params; - params.m_pWidget = m_pInterface; - params.m_iPart = FWL_PART_MCD_LBtn; - params.m_pGraphics = pGraphics; - params.m_dwStates = m_iLBtnPartStates; - params.m_rtPart = m_rtLBtn; - if (pMatrix) { - params.m_matrix.Concat(*pMatrix); - } - pTheme->DrawBackground(¶ms); -} -void CFWL_MonthCalendarImp::DrawRButton(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix) { - CFWL_ThemeBackground params; - params.m_pWidget = m_pInterface; - params.m_iPart = FWL_PART_MCD_RBtn; - params.m_pGraphics = pGraphics; - params.m_dwStates = m_iRBtnPartStates; - params.m_rtPart = m_rtRBtn; - if (pMatrix) { - params.m_matrix.Concat(*pMatrix); - } - pTheme->DrawBackground(¶ms); -} -void CFWL_MonthCalendarImp::DrawCaption(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix) { - CFWL_ThemeText textParam; - textParam.m_pWidget = m_pInterface; - textParam.m_iPart = FWL_PART_MCD_Caption; - textParam.m_dwStates = FWL_PARTSTATE_MCD_Normal; - textParam.m_pGraphics = pGraphics; - int32_t iYear; - int32_t iMonth; - iYear = m_iCurYear; - iMonth = m_iCurMonth; - CFX_WideString wsCation; - GetHeadText(iYear, iMonth, wsCation); - textParam.m_wsText = wsCation; - m_szHead = CalcTextSize(textParam.m_wsText, m_pProperties->m_pThemeProvider); - CalcHeadSize(); - textParam.m_rtPart = m_rtHeadText; - textParam.m_dwTTOStyles = FDE_TTOSTYLE_SingleLine; - textParam.m_iTTOAlign = FDE_TTOALIGNMENT_Center; - if (pMatrix) { - textParam.m_matrix.Concat(*pMatrix); - } - pTheme->DrawText(&textParam); -} -void CFWL_MonthCalendarImp::DrawSeperator(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix) { - CFWL_ThemeBackground params; - params.m_pWidget = m_pInterface; - params.m_iPart = FWL_PART_MCD_HSeparator; - params.m_pGraphics = pGraphics; - params.m_dwStates = FWL_PARTSTATE_MCD_Normal; - params.m_rtPart = m_rtHSep; - if (pMatrix) { - params.m_matrix.Concat(*pMatrix); - } - pTheme->DrawBackground(¶ms); -} -void CFWL_MonthCalendarImp::DrawDatesInBK(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix) { - CFWL_ThemeBackground params; - params.m_pWidget = m_pInterface; - params.m_iPart = FWL_PART_MCD_DateInBK; - params.m_pGraphics = pGraphics; - if (pMatrix) { - params.m_matrix.Concat(*pMatrix); - } - int32_t iCount = m_arrDates.GetSize(); - for (int32_t j = 0; j < iCount; j++) { - FWL_DATEINFO* pDataInfo = (FWL_DATEINFO*)m_arrDates.GetAt(j); - if (pDataInfo->dwStates & FWL_ITEMSTATE_MCD_Selected) { - params.m_dwStates |= FWL_PARTSTATE_MCD_Selected; - if (((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_MCD_NoTodayCircle) == - 0) && - pDataInfo->dwStates & FWL_ITEMSTATE_MCD_Flag) { - params.m_dwStates |= FWL_PARTSTATE_MCD_Flagged; - } - if (pDataInfo->dwStates & FWL_ITEMSTATE_MCD_Focused) { - params.m_dwStates |= FWL_PARTSTATE_MCD_Focused; - } - } else if (j == m_iHovered - 1) { - params.m_dwStates |= FWL_PARTSTATE_MCD_Hovered; - } else if (pDataInfo->dwStates & FWL_ITEMSTATE_MCD_Flag) { - params.m_dwStates = FWL_PARTSTATE_MCD_Flagged; - pTheme->DrawBackground(¶ms); - } - params.m_rtPart = pDataInfo->rect; - pTheme->DrawBackground(¶ms); - params.m_dwStates = 0; - } -} -void CFWL_MonthCalendarImp::DrawWeek(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix) { - CFWL_ThemeText params; - params.m_pWidget = m_pInterface; - params.m_iPart = FWL_PART_MCD_Week; - params.m_pGraphics = pGraphics; - params.m_dwStates = FWL_PARTSTATE_MCD_Normal; - params.m_iTTOAlign = FDE_TTOALIGNMENT_Center; - CFX_RectF rtDayOfWeek; - if (pMatrix) { - params.m_matrix.Concat(*pMatrix); - } - for (int32_t i = 0; i < 7; i++) { - rtDayOfWeek.Set(m_rtWeek.left + i * (m_szCell.x + MONTHCAL_HMARGIN * 2), - m_rtWeek.top, m_szCell.x, m_szCell.y); - CFX_WideString* wsWeekDay = static_cast( - pTheme->GetCapacity(¶ms, i + FWL_MCCAPACITY_Sun)); - params.m_rtPart = rtDayOfWeek; - params.m_wsText = *wsWeekDay; - params.m_dwTTOStyles = FDE_TTOSTYLE_SingleLine; - pTheme->DrawText(¶ms); - } -} -void CFWL_MonthCalendarImp::DrawWeekNumber(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix) { - CFWL_ThemeText params; - params.m_pWidget = m_pInterface; - params.m_iPart = FWL_PART_MCD_WeekNum; - params.m_pGraphics = pGraphics; - params.m_dwStates = FWL_PARTSTATE_MCD_Normal; - params.m_iTTOAlign = FDE_TTOALIGNMENT_CenterLeft; - CFX_WideString wsWeekNum; - params.m_dwTTOStyles = FDE_TTOSTYLE_SingleLine; - params.m_iTTOAlign = FDE_TTOALIGNMENT_Center; - if (pMatrix) { - params.m_matrix.Concat(*pMatrix); - } - int32_t iWeekNum = 0; - int32_t iMonthNum = m_pDateTime->GetMonth(); - int32_t iDayNum = FX_DaysInMonth(m_iCurYear, iMonthNum); - int32_t iTemp = 0; - FX_FLOAT fVStartPos = m_rtClient.top + m_fHeadHei + m_fHSepHei; - FX_FLOAT fHStartPos = m_rtClient.left; - for (int32_t i = 1; i <= iDayNum; i += 7) { - iTemp++; - iWeekNum = CalWeekNumber(m_iCurYear, iMonthNum, i); - m_rtWeekNum.Set(fHStartPos, fVStartPos + m_fDateCellHei * iTemp, - m_fWeekNumWid, m_fDateCellHei); - wsWeekNum.Format(L"%d", iWeekNum); - params.m_wsText = wsWeekNum; - params.m_rtPart = m_rtWeekNum; - pTheme->DrawText(¶ms); - } -} -void CFWL_MonthCalendarImp::DrawWeekNumberSep(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix) { - CFWL_ThemeBackground params; - params.m_pWidget = m_pInterface; - params.m_iPart = FWL_PART_MCD_WeekNumSep; - params.m_pGraphics = pGraphics; - params.m_dwStates = FWL_PARTSTATE_MCD_Normal; - params.m_rtPart = m_rtWeekNumSep; - if (pMatrix) { - params.m_matrix.Concat(*pMatrix); - } - pTheme->DrawBackground(¶ms); -} -void CFWL_MonthCalendarImp::DrawToday(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix) { - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_MCD_NoToday) { - return; - } - CFWL_ThemeText params; - params.m_pWidget = m_pInterface; - params.m_iPart = FWL_PART_MCD_Today; - params.m_pGraphics = pGraphics; - params.m_dwStates = FWL_PARTSTATE_MCD_Normal; - params.m_iTTOAlign = FDE_TTOALIGNMENT_CenterLeft; - CFX_WideString* wsDay = static_cast( - pTheme->GetCapacity(¶ms, FWL_MCCAPACITY_Today)); - CFX_WideString wsText; - GetTodayText(m_iYear, m_iMonth, m_iDay, wsText); - params.m_wsText = *wsDay + wsText; - m_szToday = CalcTextSize(params.m_wsText, m_pProperties->m_pThemeProvider); - CalcTodaySize(); - params.m_rtPart = m_rtToday; - params.m_dwTTOStyles = FDE_TTOSTYLE_SingleLine; - if (pMatrix) { - params.m_matrix.Concat(*pMatrix); - } - pTheme->DrawText(¶ms); -} -void CFWL_MonthCalendarImp::DrawDatesIn(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix) { - CFWL_ThemeText params; - params.m_pWidget = m_pInterface; - params.m_iPart = FWL_PART_MCD_DatesIn; - params.m_pGraphics = pGraphics; - params.m_dwStates = FWL_PARTSTATE_MCD_Normal; - params.m_iTTOAlign = FDE_TTOALIGNMENT_Center; - if (pMatrix) { - params.m_matrix.Concat(*pMatrix); - } - int32_t iCount = m_arrDates.GetSize(); - for (int32_t j = 0; j < iCount; j++) { - FWL_DATEINFO* pDataInfo = (FWL_DATEINFO*)m_arrDates.GetAt(j); - params.m_wsText = pDataInfo->wsDay; - params.m_rtPart = pDataInfo->rect; - params.m_dwStates = pDataInfo->dwStates; - if (j + 1 == m_iHovered) { - params.m_dwStates |= FWL_PARTSTATE_MCD_Hovered; - } - params.m_dwTTOStyles = FDE_TTOSTYLE_SingleLine; - pTheme->DrawText(¶ms); - } -} -void CFWL_MonthCalendarImp::DrawDatesOut(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix) { - CFWL_ThemeText params; - params.m_pWidget = m_pInterface; - params.m_iPart = FWL_PART_MCD_DatesOut; - params.m_pGraphics = pGraphics; - params.m_dwStates = FWL_PARTSTATE_MCD_Normal; - params.m_iTTOAlign = FDE_TTOALIGNMENT_Center; - if (pMatrix) { - params.m_matrix.Concat(*pMatrix); - } - pTheme->DrawText(¶ms); -} -void CFWL_MonthCalendarImp::DrawDatesInCircle(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix) { - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_MCD_NoTodayCircle) { - return; - } - if (m_iMonth != m_iCurMonth || m_iYear != m_iCurYear) { - return; - } - if (m_iDay < 1 || m_iDay > m_arrDates.GetSize()) { - return; - } - FWL_DATEINFO* pDate = (FWL_DATEINFO*)m_arrDates[m_iDay - 1]; - if (!pDate) - return; - CFWL_ThemeBackground params; - params.m_pWidget = m_pInterface; - params.m_iPart = FWL_PART_MCD_DateInCircle; - params.m_pGraphics = pGraphics; - params.m_rtPart = pDate->rect; - params.m_dwStates = FWL_PARTSTATE_MCD_Normal; - if (pMatrix) { - params.m_matrix.Concat(*pMatrix); - } - pTheme->DrawBackground(¶ms); -} -void CFWL_MonthCalendarImp::DrawTodayCircle(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix) { - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_MCD_NoToday) { - return; - } - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_MCD_NoTodayCircle) { - return; - } - CFWL_ThemeBackground params; - params.m_pWidget = m_pInterface; - params.m_iPart = FWL_PART_MCD_TodayCircle; - params.m_pGraphics = pGraphics; - params.m_dwStates = FWL_PARTSTATE_MCD_Normal; - params.m_rtPart = m_rtTodayFlag; - if (pMatrix) { - params.m_matrix.Concat(*pMatrix); - } - pTheme->DrawBackground(¶ms); -} -CFX_SizeF CFWL_MonthCalendarImp::CalcSize(FX_BOOL bAutoSize) { - if (!m_pProperties->m_pThemeProvider) - return CFX_SizeF(); - - if (!bAutoSize) { - GetClientRect(m_rtClient); - return CFX_SizeF(m_rtClient.width, m_rtClient.height); - } - - CFX_SizeF fs; - CFWL_ThemePart params; - params.m_pWidget = m_pInterface; - IFWL_ThemeProvider* pTheme = m_pProperties->m_pThemeProvider; - CFX_WideString* wsText = NULL; - FX_FLOAT fMaxWeekW = 0.0f; - FX_FLOAT fMaxWeekH = 0.0f; - for (FX_DWORD week = FWL_MCCAPACITY_Sun; week <= FWL_MCCAPACITY_Sat; week++) { - wsText = static_cast(pTheme->GetCapacity(¶ms, week)); - CFX_SizeF sz = CalcTextSize(*wsText, m_pProperties->m_pThemeProvider); - fMaxWeekW = (fMaxWeekW >= sz.x) ? fMaxWeekW : sz.x; - fMaxWeekH = (fMaxWeekH >= sz.y) ? fMaxWeekH : sz.y; - } - FX_FLOAT fDayMaxW = 0.0f; - FX_FLOAT fDayMaxH = 0.0f; - for (int day = 10; day <= 31; day++) { - CFX_WideString wsDay; - wsDay.Format(L"%d", day); - CFX_SizeF sz = CalcTextSize(wsDay, m_pProperties->m_pThemeProvider); - fDayMaxW = (fDayMaxW >= sz.x) ? fDayMaxW : sz.x; - fDayMaxH = (fDayMaxH >= sz.y) ? fDayMaxH : sz.y; - } - m_szCell.x = FX_FLOAT((fMaxWeekW >= fDayMaxW) ? (int)(fMaxWeekW + 0.5) - : (int)(fDayMaxW + 0.5)); - m_szCell.y = (fMaxWeekH >= fDayMaxH) ? fMaxWeekH : fDayMaxH; - fs.x = m_szCell.x * MONTHCAL_COLUMNS + - MONTHCAL_HMARGIN * MONTHCAL_COLUMNS * 2 + - MONTHCAL_HEADER_BTN_HMARGIN * 2; - FX_FLOAT fMonthMaxW = 0.0f; - FX_FLOAT fMonthMaxH = 0.0f; - for (FX_DWORD month = FWL_MCCAPACITY_January; - month <= FWL_MCCAPACITY_December; month++) { - wsText = static_cast(pTheme->GetCapacity(¶ms, month)); - CFX_SizeF sz = CalcTextSize(*wsText, m_pProperties->m_pThemeProvider); - fMonthMaxW = (fMonthMaxW >= sz.x) ? fMonthMaxW : sz.x; - fMonthMaxH = (fMonthMaxH >= sz.y) ? fMonthMaxH : sz.y; - } - CFX_WideString wsYear; - GetHeadText(m_iYear, m_iMonth, wsYear); - CFX_SizeF szYear = CalcTextSize(wsYear, m_pProperties->m_pThemeProvider); - fMonthMaxH = std::max(fMonthMaxH, szYear.y); - m_szHead = CFX_SizeF(fMonthMaxW + szYear.x, fMonthMaxH); - fMonthMaxW = m_szHead.x + MONTHCAL_HEADER_BTN_HMARGIN * 2 + m_szCell.x * 2; - fs.x = std::max(fs.x, fMonthMaxW); - CFX_WideString wsToday; - GetTodayText(m_iYear, m_iMonth, m_iDay, wsToday); - wsText = static_cast( - pTheme->GetCapacity(¶ms, FWL_MCCAPACITY_Today)); - m_wsToday = *wsText + wsToday; - m_szToday = CalcTextSize(wsToday, m_pProperties->m_pThemeProvider); - m_szToday.y = (m_szToday.y >= m_szCell.y) ? m_szToday.y : m_szCell.y; - fs.y = m_szCell.x + m_szCell.y * (MONTHCAL_ROWS - 2) + m_szToday.y + - MONTHCAL_VMARGIN * MONTHCAL_ROWS * 2 + MONTHCAL_HEADER_BTN_VMARGIN * 4; - return fs; -} - -void CFWL_MonthCalendarImp::CalcHeadSize() { - FX_FLOAT fHeadHMargin = (m_rtClient.width - m_szHead.x) / 2; - FX_FLOAT fHeadVMargin = (m_szCell.x - m_szHead.y) / 2; - m_rtHeadText.Set(m_rtClient.left + fHeadHMargin, - m_rtClient.top + MONTHCAL_HEADER_BTN_VMARGIN + - MONTHCAL_VMARGIN + fHeadVMargin, - m_szHead.x, m_szHead.y); -} -void CFWL_MonthCalendarImp::CalcTodaySize() { - m_rtTodayFlag.Set( - m_rtClient.left + MONTHCAL_HEADER_BTN_HMARGIN + MONTHCAL_HMARGIN, - m_rtDates.bottom() + MONTHCAL_HEADER_BTN_VMARGIN + MONTHCAL_VMARGIN, - m_szCell.x, m_szToday.y); - m_rtToday.Set( - m_rtClient.left + MONTHCAL_HEADER_BTN_HMARGIN + m_szCell.x + - MONTHCAL_HMARGIN * 2, - m_rtDates.bottom() + MONTHCAL_HEADER_BTN_VMARGIN + MONTHCAL_VMARGIN, - m_szToday.x, m_szToday.y); -} -void CFWL_MonthCalendarImp::LayOut() { - GetClientRect(m_rtClient); - { - m_rtHead.Set( - m_rtClient.left + MONTHCAL_HEADER_BTN_HMARGIN, m_rtClient.top, - m_rtClient.width - MONTHCAL_HEADER_BTN_HMARGIN * 2, - m_szCell.x + (MONTHCAL_HEADER_BTN_VMARGIN + MONTHCAL_VMARGIN) * 2); - m_rtWeek.Set(m_rtClient.left + MONTHCAL_HEADER_BTN_HMARGIN, - m_rtHead.bottom(), - m_rtClient.width - MONTHCAL_HEADER_BTN_HMARGIN * 2, - m_szCell.y + MONTHCAL_VMARGIN * 2); - m_rtLBtn.Set(m_rtClient.left + MONTHCAL_HEADER_BTN_HMARGIN, - m_rtClient.top + MONTHCAL_HEADER_BTN_VMARGIN, m_szCell.x, - m_szCell.x); - m_rtRBtn.Set(m_rtClient.left + m_rtClient.width - - MONTHCAL_HEADER_BTN_HMARGIN - m_szCell.x, - m_rtClient.top + MONTHCAL_HEADER_BTN_VMARGIN, m_szCell.x, - m_szCell.x); - m_rtHSep.Set( - m_rtClient.left + MONTHCAL_HEADER_BTN_HMARGIN + MONTHCAL_HMARGIN, - m_rtWeek.bottom() - MONTHCAL_VMARGIN, - m_rtClient.width - (MONTHCAL_HEADER_BTN_HMARGIN + MONTHCAL_HMARGIN) * 2, - MONTHCAL_HSEP_HEIGHT); - m_rtDates.Set(m_rtClient.left + MONTHCAL_HEADER_BTN_HMARGIN, - m_rtWeek.bottom(), - m_rtClient.width - MONTHCAL_HEADER_BTN_HMARGIN * 2, - m_szCell.y * (MONTHCAL_ROWS - 3) + - MONTHCAL_VMARGIN * (MONTHCAL_ROWS - 3) * 2); - } - CalDateItem(); -} -void CFWL_MonthCalendarImp::CalDateItem() { - FX_BOOL bNewWeek = FALSE; - int32_t iWeekOfMonth = 0; - FX_FLOAT fLeft = m_rtDates.left; - FX_FLOAT fTop = m_rtDates.top; - int32_t iCount = m_arrDates.GetSize(); - for (int32_t i = 0; i < iCount; i++) { - FWL_DATEINFO* pDateInfo = (FWL_DATEINFO*)m_arrDates.GetAt(i); - if (bNewWeek) { - iWeekOfMonth++; - bNewWeek = FALSE; - } - pDateInfo->rect.Set( - fLeft + pDateInfo->iDayOfWeek * (m_szCell.x + (MONTHCAL_HMARGIN * 2)), - fTop + iWeekOfMonth * (m_szCell.y + (MONTHCAL_VMARGIN * 2)), - m_szCell.x + (MONTHCAL_HMARGIN * 2), - m_szCell.y + (MONTHCAL_VMARGIN * 2)); - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_MCD_WeekNumbers) { - pDateInfo->rect.Offset(m_fWeekNumWid, 0); - } - if (pDateInfo->iDayOfWeek >= 6) { - bNewWeek = TRUE; - } - } -} -void CFWL_MonthCalendarImp::GetCapValue() { - if (!m_pProperties->m_pThemeProvider) { - m_pProperties->m_pThemeProvider = GetAvailableTheme(); - } - IFWL_ThemeProvider* pTheme = m_pProperties->m_pThemeProvider; - CFWL_ThemePart part; - part.m_pWidget = m_pInterface; - m_fHeadWid = *static_cast( - pTheme->GetCapacity(&part, FWL_WGTCAPACITY_MC_HEADER_WIDTH)); - m_fHeadHei = *static_cast( - pTheme->GetCapacity(&part, FWL_WGTCAPACITY_MC_HEADER_Height)); - m_fHeadBtnWid = *static_cast( - pTheme->GetCapacity(&part, FWL_WGTCAPACITY_MC_HEADER_BTN_WIDTH)); - m_fHeadBtnHei = *static_cast( - pTheme->GetCapacity(&part, FWL_WGTCAPACITY_MC_HEADER_BTN_HEIGHT)); - m_fHeadBtnHMargin = *static_cast( - pTheme->GetCapacity(&part, FWL_WGTCAPACITY_MC_HEADER_BTN_HMARGIN)); - m_fHeadBtnVMargin = *static_cast( - pTheme->GetCapacity(&part, FWL_WGTCAPACITY_MC_HEADER_BTN_VMARGIN)); - m_fHeadTextWid = *static_cast( - pTheme->GetCapacity(&part, FWL_WGTCAPACITY_MC_HEADER_TEXTWIDHT)); - m_fHeadTextHei = *static_cast( - pTheme->GetCapacity(&part, FWL_WGTCAPACITY_MC_HEADER_TEXTHEIGHT)); - m_fHeadTextHMargin = *static_cast( - pTheme->GetCapacity(&part, FWL_WGTCAPACITY_MC_HEADER_TEXT_HMARGIN)); - m_fHeadTextVMargin = *static_cast( - pTheme->GetCapacity(&part, FWL_WGTCAPACITY_MC_HEADER_TEXT_VMARGIN)); - m_fHSepWid = *static_cast( - pTheme->GetCapacity(&part, FWL_WGTCAPACITY_MC_HSEP_WIDTH)); - m_fHSepHei = *static_cast( - pTheme->GetCapacity(&part, FWL_WGTCAPACITY_MC_HSEP_HEIGHT)); - m_fWeekNumWid = *static_cast( - pTheme->GetCapacity(&part, FWL_WGTCAPACITY_MC_WEEKNUM_WIDTH)); - m_fSepDOffset = *static_cast( - pTheme->GetCapacity(&part, FWL_WGTCAPACITY_MC_SEP_DOFFSET)); - m_fSepX = *static_cast( - pTheme->GetCapacity(&part, FWL_WGTCAPACITY_MC_SEP_X)); - m_fSepY = *static_cast( - pTheme->GetCapacity(&part, FWL_WGTCAPACITY_MC_SEP_Y)); - m_fWeekNumHeigh = *static_cast( - pTheme->GetCapacity(&part, FWL_WGTCAPACITY_MC_WEEKNUM_HEIGHT)); - m_fWeekWid = *static_cast( - pTheme->GetCapacity(&part, FWL_WGTCAPACITY_MC_WEEK_WIDTH)); - m_fWeekHei = *static_cast( - pTheme->GetCapacity(&part, FWL_WGTCAPACITY_MC_WEEK_HEIGHT)); - m_fDateCellWid = *static_cast( - pTheme->GetCapacity(&part, FWL_WGTCAPACITY_MC_DATES_CELL_WIDTH)); - m_fDateCellHei = *static_cast( - pTheme->GetCapacity(&part, FWL_WGTCAPACITY_MC_DATES_CELL_HEIGHT)); - m_fTodayWid = *static_cast( - pTheme->GetCapacity(&part, FWL_WGTCAPACITY_MC_TODAY_WIDHT)); - m_fTodayHei = *static_cast( - pTheme->GetCapacity(&part, FWL_WGTCAPACITY_MC_TODAY_HEIGHT)); - m_fTodayFlagWid = *static_cast( - pTheme->GetCapacity(&part, FWL_WGTCAPACITY_MC_TODAY_FLAG_WIDHT)); - m_fMCWid = *static_cast( - pTheme->GetCapacity(&part, FWL_WGTCAPACITY_MC_WIDTH)); - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_MCD_WeekNumbers) { - m_fMCWid += m_fWeekNumWid; - } - m_fMCHei = *static_cast( - pTheme->GetCapacity(&part, FWL_WGTCAPACITY_MC_HEIGHT)); -} -int32_t CFWL_MonthCalendarImp::CalWeekNumber(int32_t iYear, - int32_t iMonth, - int32_t iDay) { - return 0; -} -FX_BOOL CFWL_MonthCalendarImp::GetMinDate(int32_t& iYear, - int32_t& iMonth, - int32_t& iDay) { - iYear = m_dtMin.iYear; - iMonth = m_dtMin.iMonth; - iDay = m_dtMin.iDay; - return TRUE; -} -FX_BOOL CFWL_MonthCalendarImp::SetMinDate(int32_t iYear, - int32_t iMonth, - int32_t iDay) { - m_dtMin = DATE(iYear, iMonth, iDay); - return TRUE; -} -FX_BOOL CFWL_MonthCalendarImp::GetMaxDate(int32_t& iYear, - int32_t& iMonth, - int32_t& iDay) { - iYear = m_dtMax.iYear; - iMonth = m_dtMax.iMonth; - iDay = m_dtMax.iDay; - return TRUE; -} -FX_BOOL CFWL_MonthCalendarImp::SetMaxDate(int32_t iYear, - int32_t iMonth, - int32_t iDay) { - m_dtMax = DATE(iYear, iMonth, iDay); - return TRUE; -} -FX_BOOL CFWL_MonthCalendarImp::InitDate() { - if (m_pProperties->m_pDataProvider) { - IFWL_MonthCalendarDP* pDateProv = - static_cast(m_pProperties->m_pDataProvider); - m_iYear = pDateProv->GetCurYear(m_pInterface); - m_iMonth = pDateProv->GetCurMonth(m_pInterface); - m_iDay = pDateProv->GetCurDay(m_pInterface); - m_iCurYear = m_iYear; - m_iCurMonth = m_iMonth; - } else { - m_iDay = 1; - m_iMonth = 1; - m_iYear = 1; - m_iCurYear = m_iYear; - m_iCurMonth = m_iMonth; - } - GetTodayText(m_iYear, m_iMonth, m_iDay, m_wsToday); - GetHeadText(m_iCurYear, m_iCurMonth, m_wsHead); - m_dtMin = DATE(1500, 12, 1); - m_dtMax = DATE(2200, 1, 1); - return TRUE; -} -void CFWL_MonthCalendarImp::ClearDateItem() { - int32_t iCount = m_arrDates.GetSize(); - for (int32_t i = 0; i < iCount; i++) { - FWL_DATEINFO* pData = (FWL_DATEINFO*)m_arrDates.GetAt(i); - delete pData; - } - m_arrDates.RemoveAll(); -} -void CFWL_MonthCalendarImp::ReSetDateItem() { - m_pDateTime->Set(m_iCurYear, m_iCurMonth, 1); - int32_t iDays = FX_DaysInMonth(m_iCurYear, m_iCurMonth); - int32_t iDayOfWeek = m_pDateTime->GetDayOfWeek(); - for (int32_t i = 0; i < iDays; i++) { - if (iDayOfWeek >= 7) { - iDayOfWeek = 0; - } - CFX_WideString wsDay; - wsDay.Format(L"%d", i + 1); - FX_DWORD dwStates = 0; - if (m_iYear == m_iCurYear && m_iMonth == m_iCurMonth && m_iDay == (i + 1)) { - dwStates |= FWL_ITEMSTATE_MCD_Flag; - } - if (m_arrSelDays.Find(i + 1) != -1) { - dwStates |= FWL_ITEMSTATE_MCD_Selected; - } - CFX_RectF rtDate; - rtDate.Set(0, 0, 0, 0); - m_arrDates.Add( - new FWL_DATEINFO(i + 1, iDayOfWeek, dwStates, rtDate, wsDay)); - iDayOfWeek++; - } -} -FX_BOOL CFWL_MonthCalendarImp::NextMonth() { - int32_t iYear = m_iCurYear, iMonth = m_iCurMonth; - if (iMonth >= 12) { - iMonth = 1; - iYear++; - } else { - iMonth++; - } - DATE dt(m_iCurYear, m_iCurMonth, 1); - if (!(dt < m_dtMax)) { - return FALSE; - } - m_iCurYear = iYear, m_iCurMonth = iMonth; - ChangeToMonth(m_iCurYear, m_iCurMonth); - return TRUE; -} -FX_BOOL CFWL_MonthCalendarImp::PrevMonth() { - int32_t iYear = m_iCurYear, iMonth = m_iCurMonth; - if (iMonth <= 1) { - iMonth = 12; - iYear--; - } else { - iMonth--; - } - DATE dt(m_iCurYear, m_iCurMonth, 1); - if (!(dt > m_dtMin)) { - return FALSE; - } - m_iCurYear = iYear, m_iCurMonth = iMonth; - ChangeToMonth(m_iCurYear, m_iCurMonth); - return TRUE; -} -void CFWL_MonthCalendarImp::ChangeToMonth(int32_t iYear, int32_t iMonth) { - m_iCurYear = iYear; - m_iCurMonth = iMonth; - m_iHovered = -1; - ClearDateItem(); - ReSetDateItem(); - CalDateItem(); - GetHeadText(m_iCurYear, m_iCurMonth, m_wsHead); -} -FX_BOOL CFWL_MonthCalendarImp::RemoveSelDay(int32_t iDay, FX_BOOL bAll) { - if (iDay == -1 && !bAll) { - return FALSE; - } - if (bAll) { - int32_t iCount = m_arrSelDays.GetSize(); - int32_t iDatesCount = m_arrDates.GetSize(); - for (int32_t i = 0; i < iCount; i++) { - int32_t iSelDay = m_arrSelDays.GetAt(i); - if (iSelDay <= iDatesCount) { - FWL_DATEINFO* pDateInfo = (FWL_DATEINFO*)m_arrDates.GetAt(iSelDay - 1); - pDateInfo->dwStates &= ~FWL_ITEMSTATE_MCD_Selected; - } - } - m_arrSelDays.RemoveAll(); - } else { - int32_t index = m_arrSelDays.Find(iDay); - if (index == -1) { - return FALSE; - } - int32_t iSelDay = m_arrSelDays.GetAt(iDay); - int32_t iDatesCount = m_arrDates.GetSize(); - if (iSelDay <= iDatesCount) { - FWL_DATEINFO* pDateInfo = (FWL_DATEINFO*)m_arrDates.GetAt(iSelDay - 1); - pDateInfo->dwStates &= ~FWL_ITEMSTATE_MCD_Selected; - } - m_arrSelDays.RemoveAt(index); - } - return TRUE; -} -FX_BOOL CFWL_MonthCalendarImp::AddSelDay(int32_t iDay) { - FXSYS_assert(iDay > 0); - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_MCD_MultiSelect) { - } else { - if (m_arrSelDays.Find(iDay) == -1) { - RemoveSelDay(-1, TRUE); - if (iDay <= m_arrDates.GetSize()) { - FWL_DATEINFO* pDateInfo = (FWL_DATEINFO*)m_arrDates.GetAt(iDay - 1); - pDateInfo->dwStates |= FWL_ITEMSTATE_MCD_Selected; - } - m_arrSelDays.Add(iDay); - } - } - return TRUE; -} -FX_BOOL CFWL_MonthCalendarImp::JumpToToday() { - if (m_iYear != m_iCurYear || m_iMonth != m_iCurMonth) { - m_iCurYear = m_iYear; - m_iCurMonth = m_iMonth; - ChangeToMonth(m_iYear, m_iMonth); - AddSelDay(m_iDay); - } else { - if (m_arrSelDays.Find(m_iDay) == -1) { - AddSelDay(m_iDay); - } - } - return TRUE; -} -void CFWL_MonthCalendarImp::GetHeadText(int32_t iYear, - int32_t iMonth, - CFX_WideString& wsHead) { - FXSYS_assert(iMonth > 0 && iMonth < 13); - static const FX_WCHAR* const pMonth[] = { - L"January", L"February", L"March", L"April", - L"May", L"June", L"July", L"August", - L"September", L"October", L"November", L"December"}; - wsHead.Format(L"%s, %d", pMonth[iMonth - 1], iYear); -} -void CFWL_MonthCalendarImp::GetTodayText(int32_t iYear, - int32_t iMonth, - int32_t iDay, - CFX_WideString& wsToday) { - wsToday.Format(L", %d/%d/%d", iDay, iMonth, iYear); -} -int32_t CFWL_MonthCalendarImp::GetDayAtPoint(FX_FLOAT x, FX_FLOAT y) { - int32_t iCount = m_arrDates.GetSize(); - for (int32_t i = 0; i < iCount; i++) { - FWL_DATEINFO* pDateInfo = (FWL_DATEINFO*)m_arrDates.GetAt(i); - if (pDateInfo->rect.Contains(x, y)) { - return ++i; - } - } - return -1; -} -FX_BOOL CFWL_MonthCalendarImp::GetDayRect(int32_t iDay, CFX_RectF& rtDay) { - if (iDay <= 0 || iDay > m_arrDates.GetSize()) { - return FALSE; - } - FWL_DATEINFO* pDateInfo = (FWL_DATEINFO*)m_arrDates[iDay - 1]; - if (!pDateInfo) - return FALSE; - rtDay = pDateInfo->rect; - return TRUE; -} -CFWL_MonthCalendarImpDelegate::CFWL_MonthCalendarImpDelegate( - CFWL_MonthCalendarImp* pOwner) - : m_pOwner(pOwner) {} -int32_t CFWL_MonthCalendarImpDelegate::OnProcessMessage( - CFWL_Message* pMessage) { - if (!pMessage) - return 0; - FX_DWORD dwMsgCode = pMessage->GetClassID(); - int32_t iRet = 1; - switch (dwMsgCode) { - case FWL_MSGHASH_SetFocus: - case FWL_MSGHASH_KillFocus: { - OnFocusChanged(pMessage, dwMsgCode == FWL_MSGHASH_SetFocus); - break; - } - case FWL_MSGHASH_Key: { - break; - } - case FWL_MSGHASH_Mouse: { - CFWL_MsgMouse* pMouse = static_cast(pMessage); - FX_DWORD dwCmd = pMouse->m_dwCmd; - switch (dwCmd) { - case FWL_MSGMOUSECMD_LButtonDown: { - OnLButtonDown(pMouse); - break; - } - case FWL_MSGMOUSECMD_LButtonUp: { - OnLButtonUp(pMouse); - break; - } - case FWL_MSGMOUSECMD_MouseMove: { - OnMouseMove(pMouse); - break; - } - case FWL_MSGMOUSECMD_MouseLeave: { - OnMouseLeave(pMouse); - break; - } - default: { break; } - } - break; - } - default: { - iRet = 0; - break; - } - } - CFWL_WidgetImpDelegate::OnProcessMessage(pMessage); - return iRet; -} -FWL_ERR CFWL_MonthCalendarImpDelegate::OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - return m_pOwner->DrawWidget(pGraphics, pMatrix); -} - -void CFWL_MonthCalendarImpDelegate::OnActivate(CFWL_Message* pMsg) {} - -void CFWL_MonthCalendarImpDelegate::OnFocusChanged(CFWL_Message* pMsg, - FX_BOOL bSet) { - if (bSet) { - m_pOwner->m_pProperties->m_dwStates |= FWL_WGTSTATE_Focused; - } else { - m_pOwner->m_pProperties->m_dwStates &= ~FWL_WGTSTATE_Focused; - } - m_pOwner->Repaint(&m_pOwner->m_rtClient); -} -void CFWL_MonthCalendarImpDelegate::OnLButtonDown(CFWL_MsgMouse* pMsg) { - if (m_pOwner->m_rtLBtn.Contains(pMsg->m_fx, pMsg->m_fy)) { - m_pOwner->m_iLBtnPartStates = FWL_PARTSTATE_MCD_Pressed; - m_pOwner->PrevMonth(); - m_pOwner->Repaint(&m_pOwner->m_rtClient); - } else if (m_pOwner->m_rtRBtn.Contains(pMsg->m_fx, pMsg->m_fy)) { - m_pOwner->m_iRBtnPartStates |= FWL_PARTSTATE_MCD_Pressed; - m_pOwner->NextMonth(); - m_pOwner->Repaint(&m_pOwner->m_rtClient); - } else if (m_pOwner->m_rtToday.Contains(pMsg->m_fx, pMsg->m_fy)) { - if ((m_pOwner->m_pProperties->m_dwStyleExes & FWL_STYLEEXT_MCD_NoToday) == - 0) { - m_pOwner->JumpToToday(); - m_pOwner->Repaint(&m_pOwner->m_rtClient); - } - } else { - if (m_pOwner->m_pProperties->m_dwStyleExes & FWL_STYLEEXT_MCD_MultiSelect) { - } else { - int32_t iOldSel = 0; - if (m_pOwner->m_arrSelDays.GetSize() > 0) { - iOldSel = m_pOwner->m_arrSelDays[0]; - } else { - return; - } - int32_t iCurSel = m_pOwner->GetDayAtPoint(pMsg->m_fx, pMsg->m_fy); - FX_BOOL bSelChanged = iCurSel > 0 && iCurSel != iOldSel; - if (bSelChanged) { - FWL_DATEINFO* lpDatesInfo = - (FWL_DATEINFO*)m_pOwner->m_arrDates.GetAt(iCurSel - 1); - CFX_RectF rtInvalidate(lpDatesInfo->rect); - if (iOldSel > 0) { - lpDatesInfo = (FWL_DATEINFO*)m_pOwner->m_arrDates.GetAt(iOldSel - 1); - rtInvalidate.Union(lpDatesInfo->rect); - } - m_pOwner->AddSelDay(iCurSel); - CFWL_EvtClick wmClick; - wmClick.m_pSrcTarget = m_pOwner->m_pInterface; - m_pOwner->DispatchEvent(&wmClick); - CFWL_EventMcdDateChanged wmDateSelected; - wmDateSelected.m_iStartDay = iCurSel; - wmDateSelected.m_iEndDay = iCurSel; - wmDateSelected.m_iOldMonth = m_pOwner->m_iCurMonth; - wmDateSelected.m_iOldYear = m_pOwner->m_iCurYear; - wmDateSelected.m_pSrcTarget = m_pOwner->m_pInterface; - m_pOwner->DispatchEvent(&wmDateSelected); - m_pOwner->Repaint(&rtInvalidate); - } - } - } -} -void CFWL_MonthCalendarImpDelegate::OnLButtonUp(CFWL_MsgMouse* pMsg) { - if (m_pOwner->m_rtLBtn.Contains(pMsg->m_fx, pMsg->m_fy)) { - m_pOwner->m_iLBtnPartStates = 0; - m_pOwner->Repaint(&m_pOwner->m_rtLBtn); - } else if (m_pOwner->m_rtRBtn.Contains(pMsg->m_fx, pMsg->m_fy)) { - m_pOwner->m_iRBtnPartStates = 0; - m_pOwner->Repaint(&m_pOwner->m_rtRBtn); - } else if (m_pOwner->m_rtDates.Contains(pMsg->m_fx, pMsg->m_fy)) { - int32_t iDay = m_pOwner->GetDayAtPoint(pMsg->m_fx, pMsg->m_fy); - if (iDay != -1) { - m_pOwner->AddSelDay(iDay); - } - } -} -void CFWL_MonthCalendarImpDelegate::OnMouseMove(CFWL_MsgMouse* pMsg) { - if (m_pOwner->m_pProperties->m_dwStyleExes & FWL_STYLEEXT_MCD_MultiSelect) { - return; - } - FX_BOOL bRepaint = FALSE; - CFX_RectF rtInvalidate; - rtInvalidate.Set(0, 0, 0, 0); - if (m_pOwner->m_rtDates.Contains(pMsg->m_fx, pMsg->m_fy)) { - int32_t iHover = m_pOwner->GetDayAtPoint(pMsg->m_fx, pMsg->m_fy); - bRepaint = m_pOwner->m_iHovered != iHover; - if (bRepaint) { - if (m_pOwner->m_iHovered > 0) { - m_pOwner->GetDayRect(m_pOwner->m_iHovered, rtInvalidate); - } - if (iHover > 0) { - CFX_RectF rtDay; - m_pOwner->GetDayRect(iHover, rtDay); - if (rtInvalidate.IsEmpty()) { - rtInvalidate = rtDay; - } else { - rtInvalidate.Union(rtDay); - } - } - } - m_pOwner->m_iHovered = iHover; - } else { - bRepaint = m_pOwner->m_iHovered > 0; - if (bRepaint) { - m_pOwner->GetDayRect(m_pOwner->m_iHovered, rtInvalidate); - } - m_pOwner->m_iHovered = -1; - } - if (bRepaint && !rtInvalidate.IsEmpty()) { - m_pOwner->Repaint(&rtInvalidate); - } -} -void CFWL_MonthCalendarImpDelegate::OnMouseLeave(CFWL_MsgMouse* pMsg) { - if (m_pOwner->m_iHovered > 0) { - CFX_RectF rtInvalidate; - rtInvalidate.Set(0, 0, 0, 0); - m_pOwner->GetDayRect(m_pOwner->m_iHovered, rtInvalidate); - m_pOwner->m_iHovered = -1; - if (!rtInvalidate.IsEmpty()) { - m_pOwner->Repaint(&rtInvalidate); - } - } -} diff --git a/xfa/src/fwl/basewidget/fwl_monthcalendarimp.h b/xfa/src/fwl/basewidget/fwl_monthcalendarimp.h deleted file mode 100644 index b2a21dc72a..0000000000 --- a/xfa/src/fwl/basewidget/fwl_monthcalendarimp.h +++ /dev/null @@ -1,243 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FWL_BASEWIDGET_FWL_MONTHCALENDARIMP_H_ -#define XFA_SRC_FWL_BASEWIDGET_FWL_MONTHCALENDARIMP_H_ - -#include "xfa/src/fgas/localization/fgas_datetime.h" -#include "xfa/src/fwl/core/fwl_widgetimp.h" - -class CFWL_WidgetImpProperties; -class IFWL_Widget; -class CFWL_MonthCalendarImpDelegate; - -extern uint8_t FX_DaysInMonth(int32_t iYear, uint8_t iMonth); - -class CFWL_MonthCalendarImp : public CFWL_WidgetImp { - public: - CFWL_MonthCalendarImp(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter); - ~CFWL_MonthCalendarImp(); - virtual FWL_ERR GetClassName(CFX_WideString& wsClass) const; - virtual FX_DWORD GetClassID() const; - virtual FWL_ERR Initialize(); - virtual FWL_ERR Finalize(); - virtual FWL_ERR GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize = FALSE); - virtual FWL_ERR Update(); - virtual FWL_ERR DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL); - virtual int32_t CountSelect(); - virtual FX_BOOL GetSelect(int32_t& iYear, - int32_t& iMonth, - int32_t& iDay, - int32_t nIndex = 0); - virtual FX_BOOL SetSelect(int32_t iYear, int32_t iMonth, int32_t iDay); - - protected: - struct DATE { - DATE() : iYear(0), iMonth(0), iDay(0) {} - DATE(int32_t year, int32_t month, int32_t day) - : iYear(year), iMonth(month), iDay(day) {} - FX_BOOL operator<(const DATE& right) { - if (iYear < right.iYear) { - return TRUE; - } else if (iYear == right.iYear) { - if (iMonth < right.iMonth) { - return TRUE; - } else if (iMonth == right.iMonth) { - return iDay < right.iDay; - } - } - return FALSE; - } - FX_BOOL operator>(const DATE& right) { - if (iYear > right.iYear) { - return TRUE; - } else if (iYear == right.iYear) { - if (iMonth > right.iMonth) { - return TRUE; - } else if (iMonth == right.iMonth) { - return iDay > right.iDay; - } - } - return FALSE; - } - int32_t iYear; - int32_t iMonth; - int32_t iDay; - }; - - void DrawBkground(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix); - void DrawHeadBK(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix); - void DrawLButton(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix); - void DrawRButton(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix); - void DrawCaption(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix); - void DrawSeperator(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix); - void DrawDatesInBK(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix); - void DrawWeek(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix); - void DrawWeekNumber(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix); - void DrawWeekNumberSep(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix); - void DrawToday(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix); - void DrawDatesIn(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix); - void DrawDatesOut(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix); - void DrawDatesInCircle(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix); - void DrawTodayCircle(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix); - CFX_SizeF CalcSize(FX_BOOL bAutoSize = FALSE); - void LayOut(); - void CalcHeadSize(); - void CalcTodaySize(); - void CalDateItem(); - void GetCapValue(); - int32_t CalWeekNumber(int32_t iYear, int32_t iMonth, int32_t iDay); - FX_BOOL GetMinDate(int32_t& iYear, int32_t& iMonth, int32_t& iDay); - FX_BOOL SetMinDate(int32_t iYear, int32_t iMonth, int32_t iDay); - FX_BOOL GetMaxDate(int32_t& iYear, int32_t& iMonth, int32_t& iDay); - FX_BOOL SetMaxDate(int32_t iYear, int32_t iMonth, int32_t iDay); - FX_BOOL InitDate(); - void ClearDateItem(); - void ReSetDateItem(); - FX_BOOL NextMonth(); - FX_BOOL PrevMonth(); - void ChangeToMonth(int32_t iYear, int32_t iMonth); - FX_BOOL RemoveSelDay(int32_t iDay, FX_BOOL bAll = FALSE); - FX_BOOL AddSelDay(int32_t iDay); - FX_BOOL JumpToToday(); - void GetHeadText(int32_t iYear, int32_t iMonth, CFX_WideString& wsHead); - void GetTodayText(int32_t iYear, - int32_t iMonth, - int32_t iDay, - CFX_WideString& wsToday); - int32_t GetDayAtPoint(FX_FLOAT x, FX_FLOAT y); - FX_BOOL GetDayRect(int32_t iDay, CFX_RectF& rtDay); - - FX_BOOL m_bInit; - CFX_RectF m_rtHead; - CFX_RectF m_rtWeek; - CFX_RectF m_rtLBtn; - CFX_RectF m_rtRBtn; - CFX_RectF m_rtDates; - CFX_RectF m_rtHSep; - CFX_RectF m_rtHeadText; - CFX_RectF m_rtToday; - CFX_RectF m_rtTodayFlag; - CFX_RectF m_rtWeekNum; - CFX_RectF m_rtWeekNumSep; - CFX_RectF m_rtTemp; - CFX_WideString m_wsHead; - CFX_WideString m_wsToday; - CFX_DateTime* m_pDateTime; - CFX_PtrArray m_arrDates; - int32_t m_iCurYear; - int32_t m_iCurMonth; - int32_t m_iYear; - int32_t m_iMonth; - int32_t m_iDay; - int32_t m_iHovered; - int32_t m_iLBtnPartStates; - int32_t m_iRBtnPartStates; - DATE m_dtMin; - DATE m_dtMax; - CFX_SizeF m_szHead; - CFX_SizeF m_szCell; - CFX_SizeF m_szToday; - CFX_ArrayTemplate m_arrSelDays; - int32_t m_iMaxSel; - CFX_RectF m_rtClient; - FX_FLOAT m_fHeadWid; - FX_FLOAT m_fHeadHei; - FX_FLOAT m_fHeadBtnWid; - FX_FLOAT m_fHeadBtnHei; - FX_FLOAT m_fHeadBtnHMargin; - FX_FLOAT m_fHeadBtnVMargin; - FX_FLOAT m_fHeadTextWid; - FX_FLOAT m_fHeadTextHei; - FX_FLOAT m_fHeadTextHMargin; - FX_FLOAT m_fHeadTextVMargin; - FX_FLOAT m_fHSepWid; - FX_FLOAT m_fHSepHei; - FX_FLOAT m_fWeekNumWid; - FX_FLOAT m_fSepDOffset; - FX_FLOAT m_fSepX; - FX_FLOAT m_fSepY; - FX_FLOAT m_fWeekNumHeigh; - FX_FLOAT m_fWeekWid; - FX_FLOAT m_fWeekHei; - FX_FLOAT m_fDateCellWid; - FX_FLOAT m_fDateCellHei; - FX_FLOAT m_fTodayWid; - FX_FLOAT m_fTodayHei; - FX_FLOAT m_fTodayFlagWid; - FX_FLOAT m_fMCWid; - FX_FLOAT m_fMCHei; - friend class CFWL_MonthCalendarImpDelegate; -}; - -struct FWL_DATEINFO { - FWL_DATEINFO(int32_t day, - int32_t dayofweek, - FX_DWORD dwSt, - CFX_RectF rc, - CFX_WideString& wsday) - : iDay(day), - iDayOfWeek(dayofweek), - dwStates(dwSt), - rect(rc), - wsDay(wsday) {} - int32_t iDay; - int32_t iDayOfWeek; - FX_DWORD dwStates; - CFX_RectF rect; - CFX_WideString wsDay; -}; - -class CFWL_MonthCalendarImpDelegate : public CFWL_WidgetImpDelegate { - public: - CFWL_MonthCalendarImpDelegate(CFWL_MonthCalendarImp* pOwner); - int32_t OnProcessMessage(CFWL_Message* pMessage) override; - FWL_ERR OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL) override; - - protected: - void OnActivate(CFWL_Message* pMsg); - void OnFocusChanged(CFWL_Message* pMsg, FX_BOOL bSet = TRUE); - void OnLButtonDown(CFWL_MsgMouse* pMsg); - void OnLButtonUp(CFWL_MsgMouse* pMsg); - void OnMouseMove(CFWL_MsgMouse* pMsg); - void OnMouseLeave(CFWL_MsgMouse* pMsg); - CFWL_MonthCalendarImp* m_pOwner; -}; - -#endif // XFA_SRC_FWL_BASEWIDGET_FWL_MONTHCALENDARIMP_H_ diff --git a/xfa/src/fwl/basewidget/fwl_pictureboximp.cpp b/xfa/src/fwl/basewidget/fwl_pictureboximp.cpp deleted file mode 100644 index d0efaf3d2a..0000000000 --- a/xfa/src/fwl/basewidget/fwl_pictureboximp.cpp +++ /dev/null @@ -1,151 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fwl/basewidget/fwl_pictureboximp.h" - -#include "xfa/include/fwl/lightwidget/picturebox.h" -#include "xfa/src/fwl/core/fwl_noteimp.h" -#include "xfa/src/fwl/core/fwl_targetimp.h" -#include "xfa/src/fwl/core/fwl_widgetimp.h" - -// static -IFWL_PictureBox* IFWL_PictureBox::Create( - const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) { - IFWL_PictureBox* pPictureBox = new IFWL_PictureBox; - CFWL_PictureBoxImp* pPictureBoxImpl = - new CFWL_PictureBoxImp(properties, pOuter); - pPictureBox->SetImpl(pPictureBoxImpl); - pPictureBoxImpl->SetInterface(pPictureBox); - return pPictureBox; -} -IFWL_PictureBox::IFWL_PictureBox() {} - -CFWL_PictureBoxImp::CFWL_PictureBoxImp( - const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) - : CFWL_WidgetImp(properties, pOuter), - m_bTop(FALSE), - m_bVCenter(FALSE), - m_bButton(FALSE) { - m_rtClient.Reset(); - m_rtImage.Reset(); - m_matrix.SetIdentity(); -} -CFWL_PictureBoxImp::~CFWL_PictureBoxImp() {} -FWL_ERR CFWL_PictureBoxImp::GetClassName(CFX_WideString& wsClass) const { - wsClass = FWL_CLASS_PictureBox; - return FWL_ERR_Succeeded; -} -FX_DWORD CFWL_PictureBoxImp::GetClassID() const { - return FWL_CLASSHASH_PictureBox; -} -FWL_ERR CFWL_PictureBoxImp::Initialize() { - if (CFWL_WidgetImp::Initialize() != FWL_ERR_Succeeded) - return FWL_ERR_Indefinite; - m_pDelegate = new CFWL_PictureBoxImpDelegate(this); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_PictureBoxImp::Finalize() { - delete m_pDelegate; - m_pDelegate = nullptr; - return CFWL_WidgetImp::Finalize(); -} -FWL_ERR CFWL_PictureBoxImp::GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize) { - if (bAutoSize) { - rect.Set(0, 0, 0, 0); - if (!m_pProperties->m_pDataProvider) - return FWL_ERR_Indefinite; - CFX_DIBitmap* pBitmap = - static_cast(m_pProperties->m_pDataProvider) - ->GetPicture(m_pInterface); - if (pBitmap) { - rect.Set(0, 0, (FX_FLOAT)pBitmap->GetWidth(), - (FX_FLOAT)pBitmap->GetHeight()); - } - CFWL_WidgetImp::GetWidgetRect(rect, TRUE); - } else { - rect = m_pProperties->m_rtWidget; - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_PictureBoxImp::Update() { - if (IsLocked()) { - return FWL_ERR_Succeeded; - } - if (!m_pProperties->m_pThemeProvider) { - m_pProperties->m_pThemeProvider = GetAvailableTheme(); - } - GetClientRect(m_rtClient); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_PictureBoxImp::DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - if (!pGraphics) - return FWL_ERR_Indefinite; - if (!m_pProperties->m_pThemeProvider) - return FWL_ERR_Indefinite; - IFWL_ThemeProvider* pTheme = GetAvailableTheme(); - if (HasBorder()) { - DrawBorder(pGraphics, FWL_PART_PTB_Border, pTheme, pMatrix); - } - if (HasEdge()) { - DrawEdge(pGraphics, FWL_PART_PTB_Edge, pTheme, pMatrix); - } - DrawBkground(pGraphics, pTheme, pMatrix); - return FWL_ERR_Succeeded; -} -void CFWL_PictureBoxImp::DrawBkground(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix) { - IFWL_PictureBoxDP* pPictureDP = - static_cast(m_pProperties->m_pDataProvider); - if (!pPictureDP) - return; - - CFX_DIBitmap* pPicture = pPictureDP->GetPicture(m_pInterface); - CFX_Matrix matrix; - pPictureDP->GetMatrix(m_pInterface, matrix); - if (!pPicture) - return; - - matrix.Concat(*pMatrix); - FX_FLOAT fx = (FX_FLOAT)pPicture->GetWidth(); - FX_FLOAT fy = (FX_FLOAT)pPicture->GetHeight(); - if (fx > m_rtClient.width) { - fx = m_rtClient.width; - } - if (fy > m_rtClient.height) { - fy = m_rtClient.height; - } - pGraphics->DrawImage(pPicture, CFX_PointF((m_rtClient.width - fx) / 2, - (m_rtClient.height - fy) / 2), - &matrix); -} -FX_BOOL CFWL_PictureBoxImp::VStyle(FX_BOOL dwStyle) { - switch (dwStyle & FWL_STYLEEXT_PTB_VAlignMask) { - case FWL_STYLEEXT_PTB_Top: { - return m_bTop = TRUE; - break; - } - case FWL_STYLEEXT_PTB_Vcenter: { - return m_bVCenter = TRUE; - break; - } - case FWL_STYLEEXT_PTB_Bottom: { - return m_bButton = TRUE; - break; - } - } - return FALSE; -} -CFWL_PictureBoxImpDelegate::CFWL_PictureBoxImpDelegate( - CFWL_PictureBoxImp* pOwner) - : m_pOwner(pOwner) {} -FWL_ERR CFWL_PictureBoxImpDelegate::OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - return m_pOwner->DrawWidget(pGraphics, pMatrix); -} diff --git a/xfa/src/fwl/basewidget/fwl_pictureboximp.h b/xfa/src/fwl/basewidget/fwl_pictureboximp.h deleted file mode 100644 index cfa50afb70..0000000000 --- a/xfa/src/fwl/basewidget/fwl_pictureboximp.h +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FWL_BASEWIDGET_FWL_PICTUREBOXIMP_H_ -#define XFA_SRC_FWL_BASEWIDGET_FWL_PICTUREBOXIMP_H_ - -#include "xfa/src/fwl/core/fwl_widgetimp.h" - -class CFWL_WidgetImpProperties; -class IFWL_Widget; -class CFWL_PictureBoxImpDelegate; - -class CFWL_PictureBoxImp : public CFWL_WidgetImp { - public: - CFWL_PictureBoxImp(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter); - ~CFWL_PictureBoxImp(); - virtual FWL_ERR GetClassName(CFX_WideString& wsClass) const; - virtual FX_DWORD GetClassID() const; - virtual FWL_ERR Initialize(); - virtual FWL_ERR Finalize(); - virtual FWL_ERR GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize = FALSE); - virtual FWL_ERR Update(); - virtual FWL_ERR DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL); - - protected: - void DrawBkground(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix = NULL); - FX_BOOL VStyle(FX_BOOL dwStyle); - CFX_RectF m_rtClient; - CFX_RectF m_rtImage; - CFX_Matrix m_matrix; - FX_BOOL m_bTop; - FX_BOOL m_bVCenter; - FX_BOOL m_bButton; - friend class CFWL_PictureBoxImpDelegate; -}; -class CFWL_PictureBoxImpDelegate : public CFWL_WidgetImpDelegate { - public: - CFWL_PictureBoxImpDelegate(CFWL_PictureBoxImp* pOwner); - FWL_ERR OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL) override; - - protected: - CFWL_PictureBoxImp* m_pOwner; -}; - -#endif // XFA_SRC_FWL_BASEWIDGET_FWL_PICTUREBOXIMP_H_ diff --git a/xfa/src/fwl/basewidget/fwl_pushbuttonimp.cpp b/xfa/src/fwl/basewidget/fwl_pushbuttonimp.cpp deleted file mode 100644 index 4ed0e3bfec..0000000000 --- a/xfa/src/fwl/basewidget/fwl_pushbuttonimp.cpp +++ /dev/null @@ -1,550 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fwl/basewidget/fwl_pushbuttonimp.h" - -#include "xfa/include/fwl/basewidget/fwl_pushbutton.h" -#include "xfa/src/fde/tto/fde_textout.h" -#include "xfa/src/fwl/core/fwl_noteimp.h" -#include "xfa/src/fwl/core/fwl_targetimp.h" -#include "xfa/src/fwl/core/fwl_widgetimp.h" - -// static -IFWL_PushButton* IFWL_PushButton::Create( - const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) { - IFWL_PushButton* pPushButton = new IFWL_PushButton; - CFWL_PushButtonImp* pPushButtonImpl = - new CFWL_PushButtonImp(properties, pOuter); - pPushButton->SetImpl(pPushButtonImpl); - pPushButtonImpl->SetInterface(pPushButton); - return pPushButton; -} -IFWL_PushButton::IFWL_PushButton() {} - -CFWL_PushButtonImp::CFWL_PushButtonImp( - const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) - : CFWL_WidgetImp(properties, pOuter), - m_bBtnDown(FALSE), - m_dwTTOStyles(FDE_TTOSTYLE_SingleLine), - m_iTTOAlign(FDE_TTOALIGNMENT_Center) { - m_rtClient.Set(0, 0, 0, 0); - m_rtCaption.Set(0, 0, 0, 0); -} -CFWL_PushButtonImp::~CFWL_PushButtonImp() {} -FWL_ERR CFWL_PushButtonImp::GetClassName(CFX_WideString& wsClass) const { - wsClass = FWL_CLASS_PushButton; - return FWL_ERR_Succeeded; -} -FX_DWORD CFWL_PushButtonImp::GetClassID() const { - return FWL_CLASSHASH_PushButton; -} -FWL_ERR CFWL_PushButtonImp::Initialize() { - if (CFWL_WidgetImp::Initialize() != FWL_ERR_Succeeded) - return FWL_ERR_Indefinite; - m_pDelegate = new CFWL_PushButtonImpDelegate(this); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_PushButtonImp::Finalize() { - delete m_pDelegate; - m_pDelegate = nullptr; - return CFWL_WidgetImp::Finalize(); -} -FWL_ERR CFWL_PushButtonImp::GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize) { - if (bAutoSize) { - rect.Set(0, 0, 0, 0); - if (m_pProperties->m_pThemeProvider == NULL) { - m_pProperties->m_pThemeProvider = GetAvailableTheme(); - } - CFX_WideString wsCaption; - IFWL_PushButtonDP* pData = - static_cast(m_pProperties->m_pDataProvider); - if (pData) { - pData->GetCaption(m_pInterface, wsCaption); - } - int32_t iLen = wsCaption.GetLength(); - if (iLen > 0) { - CFX_SizeF sz = CalcTextSize(wsCaption, m_pProperties->m_pThemeProvider); - rect.Set(0, 0, sz.x, sz.y); - } - FX_FLOAT* fcaption = - static_cast(GetThemeCapacity(FWL_WGTCAPACITY_PSB_Margin)); - rect.Inflate(*fcaption, *fcaption); - CFWL_WidgetImp::GetWidgetRect(rect, TRUE); - } else { - rect = m_pProperties->m_rtWidget; - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_PushButtonImp::SetStates(FX_DWORD dwStates, FX_BOOL bSet) { - if ((dwStates & FWL_WGTSTATE_Disabled) && bSet) { - m_pProperties->m_dwStates = FWL_WGTSTATE_Disabled; - return FWL_ERR_Succeeded; - } - return CFWL_WidgetImp::SetStates(dwStates, bSet); -} -FWL_ERR CFWL_PushButtonImp::Update() { - if (IsLocked()) { - return FWL_ERR_Indefinite; - } - if (!m_pProperties->m_pThemeProvider) { - m_pProperties->m_pThemeProvider = GetAvailableTheme(); - } - UpdateTextOutStyles(); - GetClientRect(m_rtClient); - m_rtCaption = m_rtClient; - FX_FLOAT* fcaption = - static_cast(GetThemeCapacity(FWL_WGTCAPACITY_PSB_Margin)); - m_rtCaption.Inflate(-*fcaption, -*fcaption); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_PushButtonImp::DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - if (!pGraphics) - return FWL_ERR_Indefinite; - if (!m_pProperties->m_pThemeProvider) - return FWL_ERR_Indefinite; - IFWL_PushButtonDP* pData = - static_cast(m_pProperties->m_pDataProvider); - CFX_DIBitmap* pPicture = NULL; - IFWL_ThemeProvider* pTheme = m_pProperties->m_pThemeProvider; - if (HasBorder()) { - DrawBorder(pGraphics, FWL_PART_PSB_Border, m_pProperties->m_pThemeProvider, - pMatrix); - } - if (HasEdge()) { - DrawEdge(pGraphics, FWL_PART_PSB_Edge, m_pProperties->m_pThemeProvider, - pMatrix); - } - DrawBkground(pGraphics, m_pProperties->m_pThemeProvider, pMatrix); - CFX_Matrix matrix; - matrix.Concat(*pMatrix); - FX_FLOAT iPicwidth = 0; - FX_FLOAT ipicheight = 0; - CFX_WideString wsCaption; - if (pData) { - pData->GetCaption(m_pInterface, wsCaption); - } - CFX_RectF rtText; - rtText.Set(0, 0, 0, 0); - if (!wsCaption.IsEmpty()) { - CalcTextRect(wsCaption, pTheme, 0, m_iTTOAlign, rtText); - } - switch (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_PSB_ModeMask) { - case FWL_STYLEEXT_PSB_TextOnly: - DrawText(pGraphics, m_pProperties->m_pThemeProvider, &matrix); - break; - case FWL_STYLEEXT_PSB_IconOnly: - if (pData) { - pPicture = pData->GetPicture(m_pInterface); - } - if (pPicture) { - CFX_PointF point; - switch (m_iTTOAlign) { - case 0: { - point.x = m_rtClient.left; - point.y = m_rtClient.top; - break; - } - case 1: { - point.x = m_rtClient.left + - (m_rtClient.width / 2 - pPicture->GetWidth() / 2); - point.y = m_rtClient.top; - break; - } - case 2: - point.x = m_rtClient.left + m_rtClient.width - pPicture->GetWidth(); - point.y = m_rtClient.top; - break; - case 4: - point.x = m_rtClient.left; - point.y = m_rtClient.top + m_rtClient.height / 2 - - pPicture->GetHeight() / 2; - break; - case 5: - point.x = m_rtClient.left + - (m_rtClient.width / 2 - pPicture->GetWidth() / 2); - point.y = m_rtClient.top + m_rtClient.height / 2 - - pPicture->GetHeight() / 2; - break; - case 6: - point.x = m_rtClient.left + m_rtClient.width - pPicture->GetWidth(); - point.y = m_rtClient.top + m_rtClient.height / 2 - - pPicture->GetHeight() / 2; - break; - case 8: - point.x = m_rtClient.left; - point.y = - m_rtClient.top + m_rtClient.height - pPicture->GetHeight(); - break; - case 9: - point.x = m_rtClient.left + - (m_rtClient.width / 2 - pPicture->GetWidth() / 2); - point.y = - m_rtClient.top + m_rtClient.height - pPicture->GetHeight(); - break; - case 10: - point.x = m_rtClient.left + m_rtClient.width - pPicture->GetWidth(); - point.y = - m_rtClient.top + m_rtClient.height - pPicture->GetHeight(); - break; - } - pGraphics->DrawImage(pPicture, point, &matrix); - } - break; - case FWL_STYLEEXT_PSB_TextIcon: - if (pPicture) { - CFX_PointF point; - switch (m_iTTOAlign) { - case 0: { - point.x = m_rtClient.left; - point.y = m_rtClient.top; - iPicwidth = (FX_FLOAT)(pPicture->GetWidth() - 7); - ipicheight = - pPicture->GetHeight() / 2 - m_rtCaption.top - rtText.height / 2; - break; - } - case 1: { - point.x = - m_rtClient.left + (m_rtClient.width / 2 - - (pPicture->GetWidth() + rtText.width) / 2); - point.y = m_rtClient.top; - iPicwidth = pPicture->GetWidth() - - ((m_rtClient.width) / 2 - rtText.width / 2 - point.x) + - rtText.width / 2 - 7; - ipicheight = - pPicture->GetHeight() / 2 - m_rtCaption.top - rtText.height / 2; - break; - } - case 2: - point.x = m_rtClient.left + m_rtClient.width - - pPicture->GetWidth() - rtText.width; - point.y = m_rtClient.top; - iPicwidth = m_rtClient.left + m_rtClient.width - point.x - - pPicture->GetWidth() - rtText.width + 7; - ipicheight = - pPicture->GetHeight() / 2 - m_rtCaption.top - rtText.height / 2; - break; - case 4: - point.x = m_rtClient.left; - point.y = m_rtClient.top + m_rtClient.height / 2 - - pPicture->GetHeight() / 2; - iPicwidth = m_rtClient.left + pPicture->GetWidth() - 7; - break; - case 5: - point.x = - m_rtClient.left + (m_rtClient.width / 2 - - (pPicture->GetWidth() + rtText.width) / 2); - point.y = m_rtClient.top + m_rtClient.height / 2 - - pPicture->GetHeight() / 2; - iPicwidth = pPicture->GetWidth() - - ((m_rtClient.width) / 2 - rtText.width / 2 - point.x) + - rtText.width / 2 - 7; - break; - case 6: - point.x = m_rtClient.left + m_rtClient.width - - pPicture->GetWidth() - rtText.width; - point.y = m_rtClient.top + m_rtClient.height / 2 - - pPicture->GetHeight() / 2; - iPicwidth = m_rtClient.left + m_rtClient.width - point.x - - pPicture->GetWidth() - rtText.width + 7; - break; - case 8: - point.x = m_rtClient.left; - point.y = - m_rtClient.top + m_rtClient.height - pPicture->GetHeight(); - iPicwidth = (FX_FLOAT)(pPicture->GetWidth() - 7); - ipicheight -= rtText.height / 2; - break; - case 9: - point.x = - m_rtClient.left + (m_rtClient.width / 2 - - (pPicture->GetWidth() + rtText.width) / 2); - point.y = - m_rtClient.top + m_rtClient.height - pPicture->GetHeight(); - iPicwidth = pPicture->GetWidth() - - ((m_rtClient.width) / 2 - rtText.width / 2 - point.x) + - rtText.width / 2 - 7; - ipicheight -= rtText.height / 2; - break; - case 10: - point.x = m_rtClient.left + m_rtClient.width - - pPicture->GetWidth() - rtText.width; - point.y = - m_rtClient.top + m_rtClient.height - pPicture->GetHeight(); - iPicwidth = m_rtClient.left + m_rtClient.width - point.x - - pPicture->GetWidth() - rtText.width + 7; - ipicheight -= rtText.height / 2; - break; - } - pGraphics->DrawImage(pPicture, point, &matrix); - } - matrix.e += m_rtClient.left + iPicwidth; - matrix.f += m_rtClient.top + ipicheight; - DrawText(pGraphics, m_pProperties->m_pThemeProvider, &matrix); - break; - } - return FWL_ERR_Succeeded; -} -void CFWL_PushButtonImp::DrawBkground(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix) { - CFWL_ThemeBackground param; - param.m_pWidget = m_pInterface; - param.m_iPart = FWL_PART_PSB_Background; - param.m_dwStates = GetPartStates(); - param.m_pGraphics = pGraphics; - if (pMatrix) { - param.m_matrix.Concat(*pMatrix); - } - param.m_rtPart = m_rtClient; - if (m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) { - param.m_pData = &m_rtCaption; - } - pTheme->DrawBackground(¶m); -} -void CFWL_PushButtonImp::DrawText(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix) { - if (!m_pProperties->m_pDataProvider) - return; - CFX_WideString wsCaption; - m_pProperties->m_pDataProvider->GetCaption(m_pInterface, wsCaption); - if (wsCaption.IsEmpty()) { - return; - } - CFWL_ThemeText param; - param.m_pWidget = m_pInterface; - param.m_iPart = FWL_PART_PSB_Caption; - param.m_dwStates = GetPartStates(); - param.m_pGraphics = pGraphics; - if (pMatrix) { - param.m_matrix.Concat(*pMatrix); - } - param.m_rtPart = m_rtCaption; - param.m_wsText = wsCaption; - param.m_dwTTOStyles = m_dwTTOStyles; - param.m_iTTOAlign = m_iTTOAlign; - pTheme->DrawText(¶m); -} -FX_DWORD CFWL_PushButtonImp::GetPartStates() { - FX_DWORD dwStates = FWL_PARTSTATE_PSB_Normal; - if (m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) { - dwStates |= FWL_PARTSTATE_PSB_Focused; - } - if (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled) { - dwStates = FWL_PARTSTATE_PSB_Disabled; - } else if (m_pProperties->m_dwStates & FWL_STATE_PSB_Pressed) { - dwStates |= FWL_PARTSTATE_PSB_Pressed; - } else if (m_pProperties->m_dwStates & FWL_STATE_PSB_Hovered) { - dwStates |= FWL_PARTSTATE_PSB_Hovered; - } else if (m_pProperties->m_dwStates & FWL_STATE_PSB_Default) { - dwStates |= FWL_PARTSTATE_PSB_Default; - } - return dwStates; -} -void CFWL_PushButtonImp::UpdateTextOutStyles() { - m_iTTOAlign = FDE_TTOALIGNMENT_Center; - switch (m_pProperties->m_dwStyleExes & - (FWL_STYLEEXT_PSB_HLayoutMask | FWL_STYLEEXT_PSB_VLayoutMask)) { - case FWL_STYLEEXT_PSB_Left | FWL_STYLEEXT_PSB_Top: { - m_iTTOAlign = FDE_TTOALIGNMENT_TopLeft; - break; - } - case FWL_STYLEEXT_PSB_Center | FWL_STYLEEXT_PSB_Top: { - m_iTTOAlign = FDE_TTOALIGNMENT_TopCenter; - break; - } - case FWL_STYLEEXT_PSB_Right | FWL_STYLEEXT_PSB_Top: { - m_iTTOAlign = FDE_TTOALIGNMENT_TopRight; - break; - } - case FWL_STYLEEXT_PSB_Left | FWL_STYLEEXT_PSB_VCenter: { - m_iTTOAlign = FDE_TTOALIGNMENT_CenterLeft; - break; - } - case FWL_STYLEEXT_PSB_Center | FWL_STYLEEXT_PSB_VCenter: { - m_iTTOAlign = FDE_TTOALIGNMENT_Center; - break; - } - case FWL_STYLEEXT_PSB_Right | FWL_STYLEEXT_PSB_VCenter: { - m_iTTOAlign = FDE_TTOALIGNMENT_CenterRight; - break; - } - case FWL_STYLEEXT_PSB_Left | FWL_STYLEEXT_PSB_Bottom: { - m_iTTOAlign = FDE_TTOALIGNMENT_BottomLeft; - break; - } - case FWL_STYLEEXT_PSB_Center | FWL_STYLEEXT_PSB_Bottom: { - m_iTTOAlign = FDE_TTOALIGNMENT_BottomCenter; - break; - } - case FWL_STYLEEXT_PSB_Right | FWL_STYLEEXT_PSB_Bottom: { - m_iTTOAlign = FDE_TTOALIGNMENT_BottomRight; - break; - } - default: {} - } - m_dwTTOStyles = FDE_TTOSTYLE_SingleLine; - if (m_pProperties->m_dwStyleExes & FWL_WGTSTYLE_RTLReading) { - m_dwTTOStyles |= FDE_TTOSTYLE_RTL; - } -} -CFWL_PushButtonImpDelegate::CFWL_PushButtonImpDelegate( - CFWL_PushButtonImp* pOwner) - : m_pOwner(pOwner) {} -int32_t CFWL_PushButtonImpDelegate::OnProcessMessage(CFWL_Message* pMessage) { - if (!pMessage) - return 0; - if (!m_pOwner->IsEnabled()) { - return 1; - } - int32_t iRet = 1; - FX_DWORD dwMsgCode = pMessage->GetClassID(); - switch (dwMsgCode) { - case FWL_MSGHASH_SetFocus: - case FWL_MSGHASH_KillFocus: { - OnFocusChanged(pMessage, dwMsgCode == FWL_MSGHASH_SetFocus); - break; - } - case FWL_MSGHASH_Mouse: { - CFWL_MsgMouse* pMsg = static_cast(pMessage); - FX_DWORD dwCmd = pMsg->m_dwCmd; - switch (dwCmd) { - case FWL_MSGMOUSECMD_LButtonDown: { - OnLButtonDown(pMsg); - break; - } - case FWL_MSGMOUSECMD_LButtonUp: { - OnLButtonUp(pMsg); - break; - } - case FWL_MSGMOUSECMD_MouseMove: { - OnMouseMove(pMsg); - break; - } - case FWL_MSGMOUSECMD_MouseLeave: { - OnMouseLeave(pMsg); - break; - } - default: {} - } - break; - } - case FWL_MSGHASH_Key: { - CFWL_MsgKey* pKey = static_cast(pMessage); - if (pKey->m_dwCmd == FWL_MSGKEYCMD_KeyDown) { - OnKeyDown(pKey); - } - break; - } - default: { - iRet = 0; - break; - } - } - CFWL_WidgetImpDelegate::OnProcessMessage(pMessage); - return iRet; -} -FWL_ERR CFWL_PushButtonImpDelegate::OnProcessEvent(CFWL_Event* pEvent) { - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_PushButtonImpDelegate::OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - return m_pOwner->DrawWidget(pGraphics, pMatrix); -} -void CFWL_PushButtonImpDelegate::OnFocusChanged(CFWL_Message* pMsg, - FX_BOOL bSet) { - if (bSet) { - m_pOwner->m_pProperties->m_dwStates |= FWL_WGTSTATE_Focused; - } else { - m_pOwner->m_pProperties->m_dwStates &= ~FWL_WGTSTATE_Focused; - } - m_pOwner->Repaint(&m_pOwner->m_rtClient); -} -void CFWL_PushButtonImpDelegate::OnLButtonDown(CFWL_MsgMouse* pMsg) { - if ((m_pOwner->m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) == 0) { - m_pOwner->SetFocus(TRUE); - } - m_pOwner->m_bBtnDown = TRUE; - m_pOwner->m_pProperties->m_dwStates |= FWL_STATE_PSB_Hovered; - m_pOwner->m_pProperties->m_dwStates |= FWL_STATE_PSB_Pressed; - m_pOwner->Repaint(&m_pOwner->m_rtClient); -} -void CFWL_PushButtonImpDelegate::OnLButtonUp(CFWL_MsgMouse* pMsg) { - m_pOwner->m_bBtnDown = FALSE; - if (m_pOwner->m_rtClient.Contains(pMsg->m_fx, pMsg->m_fy)) { - m_pOwner->m_pProperties->m_dwStates &= ~FWL_STATE_PSB_Pressed; - m_pOwner->m_pProperties->m_dwStates |= FWL_STATE_PSB_Hovered; - } else { - m_pOwner->m_pProperties->m_dwStates &= ~FWL_STATE_PSB_Hovered; - m_pOwner->m_pProperties->m_dwStates &= ~FWL_STATE_PSB_Pressed; - } - if (m_pOwner->m_rtClient.Contains(pMsg->m_fx, pMsg->m_fy)) { - CFWL_EvtClick wmClick; - wmClick.m_pSrcTarget = m_pOwner->m_pInterface; - m_pOwner->DispatchEvent(&wmClick); - } - m_pOwner->Repaint(&m_pOwner->m_rtClient); -} -void CFWL_PushButtonImpDelegate::OnMouseMove(CFWL_MsgMouse* pMsg) { - FX_BOOL bRepaint = FALSE; - if (m_pOwner->m_bBtnDown) { - if (m_pOwner->m_rtClient.Contains(pMsg->m_fx, pMsg->m_fy)) { - if ((m_pOwner->m_pProperties->m_dwStates & FWL_STATE_PSB_Pressed) == 0) { - m_pOwner->m_pProperties->m_dwStates |= FWL_STATE_PSB_Pressed; - bRepaint = TRUE; - } - if (m_pOwner->m_pProperties->m_dwStates & FWL_STATE_PSB_Hovered) { - m_pOwner->m_pProperties->m_dwStates &= ~FWL_STATE_PSB_Hovered; - bRepaint = TRUE; - } - } else { - if (m_pOwner->m_pProperties->m_dwStates & FWL_STATE_PSB_Pressed) { - m_pOwner->m_pProperties->m_dwStates &= ~FWL_STATE_PSB_Pressed; - bRepaint = TRUE; - } - if ((m_pOwner->m_pProperties->m_dwStates & FWL_STATE_PSB_Hovered) == 0) { - m_pOwner->m_pProperties->m_dwStates |= FWL_STATE_PSB_Hovered; - bRepaint = TRUE; - } - } - } else { - if (!m_pOwner->m_rtClient.Contains(pMsg->m_fx, pMsg->m_fy)) { - return; - } - if ((m_pOwner->m_pProperties->m_dwStates & FWL_STATE_PSB_Hovered) == 0) { - m_pOwner->m_pProperties->m_dwStates |= FWL_STATE_PSB_Hovered; - bRepaint = TRUE; - } - } - if (bRepaint) { - m_pOwner->Repaint(&m_pOwner->m_rtClient); - } -} -void CFWL_PushButtonImpDelegate::OnMouseLeave(CFWL_MsgMouse* pMsg) { - m_pOwner->m_bBtnDown = FALSE; - m_pOwner->m_pProperties->m_dwStates &= ~FWL_STATE_PSB_Hovered; - m_pOwner->m_pProperties->m_dwStates &= ~FWL_STATE_PSB_Pressed; - m_pOwner->Repaint(&m_pOwner->m_rtClient); -} -void CFWL_PushButtonImpDelegate::OnKeyDown(CFWL_MsgKey* pMsg) { - if (pMsg->m_dwKeyCode == FWL_VKEY_Return) { - CFWL_EvtMouse wmMouse; - wmMouse.m_pSrcTarget = m_pOwner->m_pInterface; - wmMouse.m_dwCmd = FWL_MSGMOUSECMD_LButtonUp; - m_pOwner->DispatchEvent(&wmMouse); - CFWL_EvtClick wmClick; - wmClick.m_pSrcTarget = m_pOwner->m_pInterface; - m_pOwner->DispatchEvent(&wmClick); - return; - } - if (pMsg->m_dwKeyCode != FWL_VKEY_Tab) { - return; - } - m_pOwner->DispatchKeyEvent(pMsg); -} diff --git a/xfa/src/fwl/basewidget/fwl_pushbuttonimp.h b/xfa/src/fwl/basewidget/fwl_pushbuttonimp.h deleted file mode 100644 index 5869074ba7..0000000000 --- a/xfa/src/fwl/basewidget/fwl_pushbuttonimp.h +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FWL_BASEWIDGET_FWL_PUSHBUTTONIMP_H_ -#define XFA_SRC_FWL_BASEWIDGET_FWL_PUSHBUTTONIMP_H_ - -#include "xfa/src/fwl/core/fwl_widgetimp.h" - -class CFWL_WidgetImpProperties; -class IFWL_Widget; -class CFWL_PushButtonImpDelegate; - -class CFWL_PushButtonImp : public CFWL_WidgetImp { - public: - CFWL_PushButtonImp(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter); - virtual ~CFWL_PushButtonImp(); - virtual FWL_ERR GetClassName(CFX_WideString& wsClass) const; - virtual FX_DWORD GetClassID() const; - virtual FWL_ERR Initialize(); - virtual FWL_ERR Finalize(); - virtual FWL_ERR GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize = FALSE); - virtual FWL_ERR SetStates(FX_DWORD dwStates, FX_BOOL bSet = TRUE); - virtual FWL_ERR Update(); - virtual FWL_ERR DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL); - - protected: - void DrawBkground(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix); - void DrawText(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix); - FX_DWORD GetPartStates(); - void UpdateTextOutStyles(); - CFX_RectF m_rtClient; - CFX_RectF m_rtCaption; - FX_BOOL m_bBtnDown; - FX_DWORD m_dwTTOStyles; - int32_t m_iTTOAlign; - friend class CFWL_PushButtonImpDelegate; -}; -class CFWL_PushButtonImpDelegate : public CFWL_WidgetImpDelegate { - public: - CFWL_PushButtonImpDelegate(CFWL_PushButtonImp* pOwner); - int32_t OnProcessMessage(CFWL_Message* pMessage) override; - FWL_ERR OnProcessEvent(CFWL_Event* pEvent) override; - FWL_ERR OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL) override; - - protected: - void OnFocusChanged(CFWL_Message* pMsg, FX_BOOL bSet = TRUE); - void OnLButtonDown(CFWL_MsgMouse* pMsg); - void OnLButtonUp(CFWL_MsgMouse* pMsg); - void OnMouseMove(CFWL_MsgMouse* pMsg); - void OnMouseLeave(CFWL_MsgMouse* pMsg); - void OnKeyDown(CFWL_MsgKey* pMsg); - CFWL_PushButtonImp* m_pOwner; -}; - -#endif // XFA_SRC_FWL_BASEWIDGET_FWL_PUSHBUTTONIMP_H_ diff --git a/xfa/src/fwl/basewidget/fwl_scrollbarimp.cpp b/xfa/src/fwl/basewidget/fwl_scrollbarimp.cpp deleted file mode 100644 index c43ebbbc85..0000000000 --- a/xfa/src/fwl/basewidget/fwl_scrollbarimp.cpp +++ /dev/null @@ -1,805 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fwl/basewidget/fwl_scrollbarimp.h" - -#include "xfa/include/fwl/basewidget/fwl_scrollbar.h" -#include "xfa/include/fwl/core/fwl_theme.h" -#include "xfa/src/fwl/core/fwl_noteimp.h" -#include "xfa/src/fwl/core/fwl_targetimp.h" -#include "xfa/src/fwl/core/fwl_widgetimp.h" - -#define FWL_SCROLLBAR_Elapse 500 -#define FWL_SCROLLBAR_MinThumb 5 - -// static -IFWL_ScrollBar* IFWL_ScrollBar::Create( - const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) { - IFWL_ScrollBar* pScrollBar = new IFWL_ScrollBar; - CFWL_ScrollBarImp* pScrollBarImpl = new CFWL_ScrollBarImp(properties, pOuter); - pScrollBar->SetImpl(pScrollBarImpl); - pScrollBarImpl->SetInterface(pScrollBar); - return pScrollBar; -} -IFWL_ScrollBar::IFWL_ScrollBar() {} -FX_BOOL IFWL_ScrollBar::IsVertical() { - return static_cast(GetImpl())->IsVertical(); -} -FWL_ERR IFWL_ScrollBar::GetRange(FX_FLOAT& fMin, FX_FLOAT& fMax) { - return static_cast(GetImpl())->GetRange(fMin, fMax); -} -FWL_ERR IFWL_ScrollBar::SetRange(FX_FLOAT fMin, FX_FLOAT fMax) { - return static_cast(GetImpl())->SetRange(fMin, fMax); -} -FX_FLOAT IFWL_ScrollBar::GetPageSize() { - return static_cast(GetImpl())->GetPageSize(); -} -FWL_ERR IFWL_ScrollBar::SetPageSize(FX_FLOAT fPageSize) { - return static_cast(GetImpl())->SetPageSize(fPageSize); -} -FX_FLOAT IFWL_ScrollBar::GetStepSize() { - return static_cast(GetImpl())->GetStepSize(); -} -FWL_ERR IFWL_ScrollBar::SetStepSize(FX_FLOAT fStepSize) { - return static_cast(GetImpl())->SetStepSize(fStepSize); -} -FX_FLOAT IFWL_ScrollBar::GetPos() { - return static_cast(GetImpl())->GetPos(); -} -FWL_ERR IFWL_ScrollBar::SetPos(FX_FLOAT fPos) { - return static_cast(GetImpl())->SetPos(fPos); -} -FX_FLOAT IFWL_ScrollBar::GetTrackPos() { - return static_cast(GetImpl())->GetTrackPos(); -} -FWL_ERR IFWL_ScrollBar::SetTrackPos(FX_FLOAT fTrackPos) { - return static_cast(GetImpl())->SetTrackPos(fTrackPos); -} -FX_BOOL IFWL_ScrollBar::DoScroll(FX_DWORD dwCode, FX_FLOAT fPos) { - return static_cast(GetImpl())->DoScroll(dwCode, fPos); -} -CFWL_ScrollBarImp::CFWL_ScrollBarImp(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) - : CFWL_WidgetImp(properties, pOuter), - m_hTimer(nullptr), - m_fRangeMin(0), - m_fRangeMax(-1), - m_fPageSize(0), - m_fStepSize(0), - m_fPos(0), - m_fTrackPos(0), - m_iMinButtonState(FWL_PARTSTATE_SCB_Normal), - m_iMaxButtonState(FWL_PARTSTATE_SCB_Normal), - m_iThumbButtonState(FWL_PARTSTATE_SCB_Normal), - m_iMinTrackState(FWL_PARTSTATE_SCB_Normal), - m_iMaxTrackState(FWL_PARTSTATE_SCB_Normal), - m_fLastTrackPos(0), - m_cpTrackPointX(0), - m_cpTrackPointY(0), - m_iMouseWheel(0), - m_bTrackMouseLeave(FALSE), - m_bMouseHover(FALSE), - m_bMouseDown(FALSE), - m_bRepaintThumb(FALSE), - m_fButtonLen(0), - m_bMinSize(FALSE), - m_bCustomLayout(FALSE), - m_fMinThumb(FWL_SCROLLBAR_MinThumb) { - m_rtClient.Reset(); - m_rtThumb.Reset(); - m_rtMinBtn.Reset(); - m_rtMaxBtn.Reset(); - m_rtMinTrack.Reset(); - m_rtMaxTrack.Reset(); -} -CFWL_ScrollBarImp::~CFWL_ScrollBarImp() {} -FWL_ERR CFWL_ScrollBarImp::GetClassName(CFX_WideString& wsClass) const { - wsClass = FWL_CLASS_ScrollBar; - return FWL_ERR_Succeeded; -} -FX_DWORD CFWL_ScrollBarImp::GetClassID() const { - return FWL_CLASSHASH_ScrollBar; -} -FWL_ERR CFWL_ScrollBarImp::Initialize() { - if (CFWL_WidgetImp::Initialize() != FWL_ERR_Succeeded) - return FWL_ERR_Indefinite; - m_pDelegate = new CFWL_ScrollBarImpDelegate(this); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ScrollBarImp::Finalize() { - delete m_pDelegate; - m_pDelegate = nullptr; - return CFWL_WidgetImp::Finalize(); -} -FWL_ERR CFWL_ScrollBarImp::GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize) { - if (bAutoSize) { - rect.Set(0, 0, 0, 0); - FX_FLOAT* pfMinWidth = static_cast( - GetThemeCapacity(FWL_WGTCAPACITY_ScrollBarWidth)); - if (!pfMinWidth) - return FWL_ERR_Indefinite; - if (IsVertical()) { - rect.Set(0, 0, (*pfMinWidth), (*pfMinWidth) * 3); - } else { - rect.Set(0, 0, (*pfMinWidth) * 3, (*pfMinWidth)); - } - CFWL_WidgetImp::GetWidgetRect(rect, TRUE); - } else { - rect = m_pProperties->m_rtWidget; - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ScrollBarImp::Update() { - if (IsLocked()) { - return FWL_ERR_Indefinite; - } - if (!m_pProperties->m_pThemeProvider) { - m_pProperties->m_pThemeProvider = GetAvailableTheme(); - } - Layout(); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ScrollBarImp::DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - if (!pGraphics) - return FWL_ERR_Indefinite; - if (!m_pProperties->m_pThemeProvider) - return FWL_ERR_Indefinite; - IFWL_ThemeProvider* pTheme = m_pProperties->m_pThemeProvider; - if (HasBorder()) { - DrawBorder(pGraphics, FWL_PART_SCB_Border, pTheme, pMatrix); - } - if (HasEdge()) { - DrawEdge(pGraphics, FWL_PART_SCB_Edge, pTheme, pMatrix); - } - DrawTrack(pGraphics, pTheme, TRUE, pMatrix); - DrawTrack(pGraphics, pTheme, FALSE, pMatrix); - DrawArrowBtn(pGraphics, pTheme, TRUE, pMatrix); - DrawArrowBtn(pGraphics, pTheme, FALSE, pMatrix); - DrawThumb(pGraphics, pTheme, pMatrix); - return FWL_ERR_Succeeded; -} -inline FX_BOOL CFWL_ScrollBarImp::IsVertical() { - return m_pProperties->m_dwStyleExes & FWL_STYLEEXT_SCB_Vert; -} -FWL_ERR CFWL_ScrollBarImp::GetRange(FX_FLOAT& fMin, FX_FLOAT& fMax) { - fMin = m_fRangeMin; - fMax = m_fRangeMax; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ScrollBarImp::SetRange(FX_FLOAT fMin, FX_FLOAT fMax) { - m_fRangeMin = fMin; - m_fRangeMax = fMax; - return FWL_ERR_Succeeded; -} -FX_FLOAT CFWL_ScrollBarImp::GetPageSize() { - return m_fPageSize; -} -FWL_ERR CFWL_ScrollBarImp::SetPageSize(FX_FLOAT fPageSize) { - m_fPageSize = fPageSize; - return FWL_ERR_Succeeded; -} -FX_FLOAT CFWL_ScrollBarImp::GetStepSize() { - return m_fStepSize; -} -FWL_ERR CFWL_ScrollBarImp::SetStepSize(FX_FLOAT fStepSize) { - m_fStepSize = fStepSize; - return FWL_ERR_Succeeded; -} -FX_FLOAT CFWL_ScrollBarImp::GetPos() { - return m_fPos; -} -FWL_ERR CFWL_ScrollBarImp::SetPos(FX_FLOAT fPos) { - m_fPos = fPos; - return FWL_ERR_Succeeded; -} -FX_FLOAT CFWL_ScrollBarImp::GetTrackPos() { - return m_fTrackPos; -} -FWL_ERR CFWL_ScrollBarImp::SetTrackPos(FX_FLOAT fTrackPos) { - m_fTrackPos = fTrackPos; - CalcThumbButtonRect(m_rtThumb); - CalcMinTrackRect(m_rtMinTrack); - CalcMaxTrackRect(m_rtMaxTrack); - return FWL_ERR_Succeeded; -} -FX_BOOL CFWL_ScrollBarImp::DoScroll(FX_DWORD dwCode, FX_FLOAT fPos) { - switch (dwCode) { - case FWL_SCBCODE_Min: - case FWL_SCBCODE_Max: - case FWL_SCBCODE_PageBackward: - case FWL_SCBCODE_PageForward: - case FWL_SCBCODE_StepBackward: - break; - case FWL_SCBCODE_StepForward: - break; - case FWL_SCBCODE_Pos: - case FWL_SCBCODE_TrackPos: - case FWL_SCBCODE_EndScroll: - break; - default: { return FALSE; } - } - return OnScroll(dwCode, fPos); -} -int32_t CFWL_ScrollBarImp::Run(FWL_HTIMER hTimer) { - if (m_hTimer) { - FWL_StopTimer(m_hTimer); - } - if (!SendEvent()) { - m_hTimer = FWL_StartTimer(this, 0); - } - return 1; -} -FWL_ERR CFWL_ScrollBarImp::SetOuter(IFWL_Widget* pOuter) { - m_pOuter = pOuter; - return FWL_ERR_Succeeded; -} -void CFWL_ScrollBarImp::DrawTrack(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - FX_BOOL bLower, - const CFX_Matrix* pMatrix) { - CFWL_ThemeBackground param; - param.m_pWidget = m_pInterface; - param.m_iPart = bLower ? FWL_PART_SCB_LowerTrack : FWL_PART_SCB_UpperTrack; - param.m_dwStates = (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled) - ? FWL_PARTSTATE_SCB_Disabled - : (bLower ? m_iMinTrackState : m_iMaxTrackState); - param.m_pGraphics = pGraphics; - param.m_matrix.Concat(*pMatrix); - param.m_rtPart = bLower ? m_rtMinTrack : m_rtMaxTrack; - pTheme->DrawBackground(¶m); -} -void CFWL_ScrollBarImp::DrawArrowBtn(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - FX_BOOL bMinBtn, - const CFX_Matrix* pMatrix) { - CFWL_ThemeBackground param; - param.m_pWidget = m_pInterface; - param.m_iPart = bMinBtn ? FWL_PART_SCB_ForeArrow : FWL_PART_SCB_BackArrow; - param.m_dwStates = (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled) - ? FWL_PARTSTATE_SCB_Disabled - : (bMinBtn ? m_iMinButtonState : m_iMaxButtonState); - param.m_pGraphics = pGraphics; - param.m_matrix.Concat(*pMatrix); - param.m_rtPart = bMinBtn ? m_rtMinBtn : m_rtMaxBtn; - if (param.m_rtPart.height > 0 && param.m_rtPart.width > 0) { - pTheme->DrawBackground(¶m); - } -} -void CFWL_ScrollBarImp::DrawThumb(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix) { - if (!IsEnabled()) { - } - CFWL_ThemeBackground param; - param.m_pWidget = m_pInterface; - param.m_iPart = FWL_PART_SCB_Thumb; - param.m_dwStates = (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled) - ? FWL_PARTSTATE_SCB_Disabled - : m_iThumbButtonState; - param.m_pGraphics = pGraphics; - param.m_matrix.Concat(*pMatrix); - param.m_rtPart = m_rtThumb; - pTheme->DrawBackground(¶m); -} -void CFWL_ScrollBarImp::Layout() { - IFWL_ThemeProvider* pTheme = m_pProperties->m_pThemeProvider; - CFWL_ThemePart part; - part.m_pWidget = m_pInterface; - m_fMinThumb = *static_cast( - pTheme->GetCapacity(&part, FWL_CAPACITY_SCB_Size)); - m_bCustomLayout = pTheme->IsCustomizedLayout(m_pInterface); - GetClientRect(m_rtClient); - CalcButtonLen(); - CalcMinButtonRect(m_rtMinBtn); - CalcMaxButtonRect(m_rtMaxBtn); - CalcThumbButtonRect(m_rtThumb); - CalcMinTrackRect(m_rtMinTrack); - CalcMaxTrackRect(m_rtMaxTrack); -} -void CFWL_ScrollBarImp::CalcButtonLen() { - m_fButtonLen = IsVertical() ? m_rtClient.width : m_rtClient.height; - FX_FLOAT fLength = IsVertical() ? m_rtClient.height : m_rtClient.width; - if (fLength < m_fButtonLen * 2) { - m_fButtonLen = fLength / 2; - m_bMinSize = TRUE; - } else { - m_bMinSize = FALSE; - } -} -void CFWL_ScrollBarImp::CalcMinButtonRect(CFX_RectF& rect) { - if (m_bCustomLayout) { - IFWL_ThemeProvider* pTheme = m_pProperties->m_pThemeProvider; - CFWL_ThemePart pPart; - pPart.m_rtPart = m_rtMinBtn; - pPart.m_pWidget = m_pInterface; - pPart.m_iPart = FWL_PART_SCB_ForeArrow; - pPart.m_dwStates = (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled) - ? FWL_PARTSTATE_SCB_Disabled - : m_iMinButtonState; - pTheme->GetPartRect(&pPart, rect); - } else { - rect.left = m_rtClient.left; - rect.top = m_rtClient.top; - rect.width = IsVertical() ? m_rtClient.width : m_fButtonLen; - rect.height = IsVertical() ? m_fButtonLen : m_rtClient.height; - } -} -void CFWL_ScrollBarImp::CalcMaxButtonRect(CFX_RectF& rect) { - if (m_bCustomLayout) { - IFWL_ThemeProvider* pTheme = m_pProperties->m_pThemeProvider; - CFWL_ThemePart pPart; - pPart.m_rtPart = m_rtMaxBtn; - pPart.m_pWidget = m_pInterface; - pPart.m_iPart = FWL_PART_SCB_BackArrow; - pPart.m_dwStates = (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled) - ? FWL_PARTSTATE_SCB_Disabled - : m_iMaxButtonState; - pTheme->GetPartRect(&pPart, rect); - } else { - rect.left = - IsVertical() ? m_rtClient.left : m_rtClient.right() - m_fButtonLen; - rect.top = - IsVertical() ? m_rtClient.bottom() - m_fButtonLen : m_rtClient.top; - rect.width = IsVertical() ? m_rtClient.width : m_fButtonLen; - rect.height = IsVertical() ? m_fButtonLen : m_rtClient.height; - } -} -void CFWL_ScrollBarImp::CalcThumbButtonRect(CFX_RectF& rect) { - if (!IsEnabled()) { - m_rtThumb.Reset(); - return; - } - if (m_bMinSize) { - m_rtThumb.Empty(); - return; - } - FX_FLOAT fRange = m_fRangeMax - m_fRangeMin; - memset(&rect, 0, sizeof(CFX_Rect)); - if (fRange < 0) { - if (IsVertical()) { - rect.Set(m_rtClient.left, m_rtMaxBtn.bottom(), m_rtClient.width, 0); - } else { - rect.Set(m_rtMaxBtn.right(), m_rtClient.top, 0, m_rtClient.height); - } - return; - } - CFX_RectF rtClient = m_rtClient; - FX_FLOAT fLength = IsVertical() ? rtClient.height : rtClient.width; - FX_FLOAT fSize = m_fButtonLen; - if (m_bCustomLayout) { - if (IsVertical()) { - fLength = fLength - m_rtMinBtn.height - m_rtMaxBtn.height; - if (fLength < m_rtMinBtn.height || fLength < m_rtMaxBtn.height) { - fLength = 0.0f; - } - } else { - fLength = fLength - m_rtMinBtn.width - m_rtMaxBtn.width; - if (fLength < m_rtMinBtn.width || fLength < m_rtMaxBtn.width) { - fLength = 0.0f; - } - } - } else { - fLength -= fSize * 2.0f; - if (fLength < fSize) { - fLength = 0.0f; - } - } - FX_FLOAT fThumbSize = fLength * fLength / (fRange + fLength); - if (fThumbSize < m_fMinThumb) { - fThumbSize = m_fMinThumb; - } - FX_FLOAT fDiff = fLength - fThumbSize; - if (fDiff < 0.0f) { - fDiff = 0.0f; - } - FX_FLOAT fTrackPos = m_fTrackPos; - if (fTrackPos > m_fRangeMax) { - fTrackPos = m_fRangeMax; - } - if (fTrackPos < m_fRangeMin) { - fTrackPos = m_fRangeMin; - } - if (!fRange) - return; - if (m_bCustomLayout) { - FX_FLOAT iPos = fDiff * (fTrackPos - m_fRangeMin) / fRange; - rect.left = rtClient.left; - if (!IsVertical()) { - if ((m_rtMinBtn.right() == m_rtMaxBtn.left && m_rtMinBtn.width > 0 && - m_rtMaxBtn.width > 0) || - (0 == m_rtMinBtn.width && 0 == m_rtMaxBtn.width)) { - rect.left += iPos; - } else { - rect.left += m_rtMinBtn.right() + iPos; - } - } - rect.top = rtClient.top; - if (IsVertical()) { - if ((m_rtMinBtn.bottom() == m_rtMaxBtn.top && m_rtMinBtn.height > 0 && - m_rtMaxBtn.height > 0) || - (0 == m_rtMinBtn.height && 0 == m_rtMaxBtn.height)) { - rect.top += iPos; - } else { - rect.top += m_rtMinBtn.bottom() + iPos; - } - } - rect.width = IsVertical() ? rtClient.width : fThumbSize; - rect.height = IsVertical() ? fThumbSize : rtClient.height; - } else { - FX_FLOAT iPos = fSize + fDiff * (fTrackPos - m_fRangeMin) / fRange; - rect.left = rtClient.left; - if (!IsVertical()) { - rect.left += iPos; - } - rect.top = rtClient.top; - if (IsVertical()) { - rect.top += iPos; - } - rect.width = IsVertical() ? rtClient.width : fThumbSize; - rect.height = IsVertical() ? fThumbSize : rtClient.height; - } -} -void CFWL_ScrollBarImp::CalcMinTrackRect(CFX_RectF& rect) { - if (m_bMinSize) { - rect.Empty(); - return; - } - FX_FLOAT fBottom = m_rtThumb.bottom(); - FX_FLOAT fRight = m_rtThumb.right(); - FX_FLOAT ix = (m_rtThumb.left + fRight) / 2; - FX_FLOAT iy = (m_rtThumb.top + fBottom) / 2; - rect.left = m_rtClient.left; - rect.top = m_rtClient.top; - FX_BOOL bVertical = IsVertical(); - rect.width = bVertical ? m_rtClient.width : ix; - rect.height = bVertical ? iy : m_rtClient.height; - if (m_bCustomLayout) { - if (bVertical) { - if (0 == m_rtMinBtn.height && 0 == m_rtMaxBtn.height) { - rect.top = m_rtClient.top; - } else if (m_rtMinBtn.top < m_rtThumb.top) { - rect.top = m_rtMinBtn.bottom(); - rect.height -= (m_rtMinBtn.bottom() - m_rtClient.top); - } - } else { - if (0 == m_rtMinBtn.width && 0 == m_rtMaxBtn.width) { - rect.left = m_rtClient.left; - } else if (m_rtMinBtn.left < m_rtThumb.left) { - rect.left = m_rtMinBtn.right(); - rect.width -= (m_rtMinBtn.right() - m_rtClient.left); - } - } - } -} -void CFWL_ScrollBarImp::CalcMaxTrackRect(CFX_RectF& rect) { - if (m_bMinSize) { - rect.Empty(); - return; - } - FX_FLOAT ix = (m_rtThumb.left + m_rtThumb.right()) / 2; - FX_FLOAT iy = (m_rtThumb.top + m_rtThumb.bottom()) / 2; - FX_BOOL bVertical = IsVertical(); - rect.left = bVertical ? m_rtClient.left : ix; - rect.top = bVertical ? iy : m_rtClient.top; - rect.width = bVertical ? m_rtClient.width : m_rtClient.right() - ix; - rect.height = bVertical ? m_rtClient.bottom() - iy : m_rtClient.height; - if (m_bCustomLayout) { - if (bVertical) { - if (m_rtMinBtn.top > m_rtThumb.top && m_rtMinBtn.height > 0 && - m_rtMaxBtn.height > 0) { - rect.height -= (m_rtClient.bottom() - m_rtMinBtn.top); - } else if (m_rtMinBtn.height > 0 && m_rtMaxBtn.height > 0) { - rect.height -= (m_rtClient.bottom() - m_rtMaxBtn.top); - } - } else { - if (m_rtMinBtn.left > m_rtThumb.left && m_rtMinBtn.width > 0 && - m_rtMaxBtn.width > 0) { - rect.width -= (m_rtClient.right() - m_rtMinBtn.left); - } else if (m_rtMinBtn.width > 0 && m_rtMaxBtn.width > 0) { - rect.width -= (m_rtClient.right() - m_rtMaxBtn.left); - } - } - } -} -FX_FLOAT CFWL_ScrollBarImp::GetTrackPointPos(FX_FLOAT fx, FX_FLOAT fy) { - FX_FLOAT fDiffX = fx - m_cpTrackPointX; - FX_FLOAT fDiffY = fy - m_cpTrackPointY; - FX_FLOAT fRange = m_fRangeMax - m_fRangeMin; - FX_FLOAT fPos; - if (m_bCustomLayout) { - if (IsVertical()) { - if (0 == m_rtMinBtn.height && 0 == m_rtMaxBtn.height) { - fPos = fRange * fDiffY / (m_rtClient.height - m_rtThumb.height); - } else if (m_rtMinBtn.bottom() == m_rtMaxBtn.top) { - fPos = fRange * fDiffY / - (m_rtMinBtn.top - m_rtClient.top - m_rtThumb.height); - } else { - fPos = fRange * fDiffY / - (m_rtMaxBtn.top - m_rtMinBtn.bottom() - m_rtThumb.height); - } - } else { - if (0 == m_rtMinBtn.width && 0 == m_rtMaxBtn.width) { - fPos = fRange * fDiffX / (m_rtClient.width - m_rtThumb.width); - } else if (m_rtMinBtn.right() == m_rtMaxBtn.left) { - fPos = fRange * fDiffX / - (m_rtMinBtn.left - m_rtClient.left - m_rtThumb.width); - } else { - fPos = fRange * fDiffX / - (m_rtMaxBtn.left - m_rtMinBtn.right() - m_rtThumb.width); - } - } - } else { - if (IsVertical()) { - fPos = fRange * fDiffY / - (m_rtMaxBtn.top - m_rtMinBtn.bottom() - m_rtThumb.height); - } else { - fPos = fRange * fDiffX / - (m_rtMaxBtn.left - m_rtMinBtn.right() - m_rtThumb.width); - } - } - fPos += m_fLastTrackPos; - if (fPos < m_fRangeMin) { - fPos = m_fRangeMin; - } - if (fPos > m_fRangeMax) { - fPos = m_fRangeMax; - } - return fPos; -} -void CFWL_ScrollBarImp::GetTrackRect(CFX_RectF& rect, FX_BOOL bLower) { - FX_BOOL bDisabled = m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled; - if (bDisabled || m_bCustomLayout) { - rect = bLower ? m_rtMinTrack : m_rtMaxTrack; - } else { - FX_FLOAT fW = m_rtThumb.width / 2; - FX_FLOAT fH = m_rtThumb.height / 2; - FX_BOOL bVert = IsVertical(); - if (bLower) { - if (bVert) { - FX_FLOAT fMinTrackHeight = m_rtMinTrack.height - fH - m_rtMinBtn.height; - fMinTrackHeight = (fMinTrackHeight >= 0.0f) ? fMinTrackHeight : 0.0f; - rect.Set(m_rtMinTrack.left, m_rtMinTrack.top + m_rtMinBtn.height, - m_rtMinTrack.width, fMinTrackHeight); - } else { - FX_FLOAT fMinTrackWidth = - m_rtMinTrack.width - fW - m_rtMinBtn.width + 2; - fMinTrackWidth = (fMinTrackWidth >= 0.0f) ? fMinTrackWidth : 0.0f; - rect.Set(m_rtMinTrack.left + m_rtMinBtn.width - 1, m_rtMinTrack.top, - fMinTrackWidth, m_rtMinTrack.height); - } - } else { - if (bVert) { - FX_FLOAT fMaxTrackHeight = m_rtMaxTrack.height - fH - m_rtMaxBtn.height; - fMaxTrackHeight = (fMaxTrackHeight >= 0.0f) ? fMaxTrackHeight : 0.0f; - rect.Set(m_rtMaxTrack.left, m_rtMaxTrack.top + fH, m_rtMaxTrack.width, - fMaxTrackHeight); - } else { - FX_FLOAT fMaxTrackWidth = - m_rtMaxTrack.width - fW - m_rtMaxBtn.width + 2; - fMaxTrackWidth = (fMaxTrackWidth >= 0.0f) ? fMaxTrackWidth : 0.0f; - rect.Set(m_rtMaxTrack.left + fW, m_rtMaxTrack.top, fMaxTrackWidth, - m_rtMaxTrack.height); - } - } - } -} -FX_BOOL CFWL_ScrollBarImp::SendEvent() { - if (m_iMinButtonState == FWL_PARTSTATE_SCB_Pressed) { - DoScroll(FWL_SCBCODE_StepBackward, m_fTrackPos); - return FALSE; - } - if (m_iMaxButtonState == FWL_PARTSTATE_SCB_Pressed) { - DoScroll(FWL_SCBCODE_StepForward, m_fTrackPos); - return FALSE; - } - if (m_iMinTrackState == FWL_PARTSTATE_SCB_Pressed) { - DoScroll(FWL_SCBCODE_PageBackward, m_fTrackPos); - return m_rtThumb.Contains(m_cpTrackPointX, m_cpTrackPointY); - } - if (m_iMaxTrackState == FWL_PARTSTATE_SCB_Pressed) { - DoScroll(FWL_SCBCODE_PageForward, m_fTrackPos); - return m_rtThumb.Contains(m_cpTrackPointX, m_cpTrackPointY); - } - if (m_iMouseWheel) { - FX_WORD dwCode = - m_iMouseWheel < 0 ? FWL_SCBCODE_StepForward : FWL_SCBCODE_StepBackward; - DoScroll(dwCode, m_fTrackPos); - } - return TRUE; -} -FX_BOOL CFWL_ScrollBarImp::OnScroll(FX_DWORD dwCode, FX_FLOAT fPos) { - FX_BOOL bRet = TRUE; - CFWL_EvtScroll ev; - ev.m_iScrollCode = dwCode; - ev.m_pSrcTarget = m_pInterface; - ev.m_fPos = fPos; - ev.m_pRet = &bRet; - DispatchEvent(&ev); - return bRet; -} -CFWL_ScrollBarImpDelegate::CFWL_ScrollBarImpDelegate(CFWL_ScrollBarImp* pOwner) - : m_pOwner(pOwner) {} -int32_t CFWL_ScrollBarImpDelegate::OnProcessMessage(CFWL_Message* pMessage) { - if (!pMessage) - return 0; - int32_t iRet = 1; - FX_DWORD dwMsgCode = pMessage->GetClassID(); - if (dwMsgCode == FWL_MSGHASH_Mouse) { - CFWL_MsgMouse* pMsg = static_cast(pMessage); - FX_DWORD dwCmd = pMsg->m_dwCmd; - switch (dwCmd) { - case FWL_MSGMOUSECMD_LButtonDown: { - OnLButtonDown(pMsg->m_dwFlags, pMsg->m_fx, pMsg->m_fy); - break; - } - case FWL_MSGMOUSECMD_LButtonUp: { - OnLButtonUp(pMsg->m_dwFlags, pMsg->m_fx, pMsg->m_fy); - break; - } - case FWL_MSGMOUSECMD_MouseMove: { - OnMouseMove(pMsg->m_dwFlags, pMsg->m_fx, pMsg->m_fy); - break; - } - case FWL_MSGMOUSECMD_MouseLeave: { - OnMouseLeave(); - break; - } - default: { iRet = 0; } - } - } else if (dwMsgCode == FWL_MSGHASH_MouseWheel) { - CFWL_MsgMouseWheel* pMsg = static_cast(pMessage); - OnMouseWheel(pMsg->m_fx, pMsg->m_fy, pMsg->m_dwFlags, pMsg->m_fDeltaX, - pMsg->m_fDeltaY); - } else { - iRet = 0; - } - return iRet; -} -FWL_ERR CFWL_ScrollBarImpDelegate::OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - return m_pOwner->DrawWidget(pGraphics, pMatrix); -} -void CFWL_ScrollBarImpDelegate::OnLButtonDown(FX_DWORD dwFlags, - FX_FLOAT fx, - FX_FLOAT fy) { - if (!m_pOwner->IsEnabled()) { - return; - } - m_pOwner->m_bMouseDown = TRUE; - m_pOwner->SetGrab(TRUE); - m_pOwner->m_cpTrackPointX = fx; - m_pOwner->m_cpTrackPointY = fy; - m_pOwner->m_fLastTrackPos = m_pOwner->m_fTrackPos; - if (m_pOwner->m_rtMinBtn.Contains(fx, fy)) { - DoMouseDown(0, m_pOwner->m_rtMinBtn, m_pOwner->m_iMinButtonState, fx, fy); - } else { - if (m_pOwner->m_rtThumb.Contains(fx, fy)) { - DoMouseDown(1, m_pOwner->m_rtThumb, m_pOwner->m_iThumbButtonState, fx, - fy); - } else { - if (m_pOwner->m_rtMaxBtn.Contains(fx, fy)) { - DoMouseDown(2, m_pOwner->m_rtMaxBtn, m_pOwner->m_iMaxButtonState, fx, - fy); - } else { - if (m_pOwner->m_rtMinTrack.Contains(fx, fy)) { - DoMouseDown(3, m_pOwner->m_rtMinTrack, m_pOwner->m_iMinTrackState, fx, - fy); - } else { - DoMouseDown(4, m_pOwner->m_rtMaxTrack, m_pOwner->m_iMaxTrackState, fx, - fy); - } - } - } - } - if (!m_pOwner->SendEvent()) { - m_pOwner->m_hTimer = FWL_StartTimer(m_pOwner, FWL_SCROLLBAR_Elapse); - } -} -void CFWL_ScrollBarImpDelegate::OnLButtonUp(FX_DWORD dwFlags, - FX_FLOAT fx, - FX_FLOAT fy) { - FWL_StopTimer(m_pOwner->m_hTimer); - m_pOwner->m_bMouseDown = FALSE; - DoMouseUp(0, m_pOwner->m_rtMinBtn, m_pOwner->m_iMinButtonState, fx, fy); - DoMouseUp(1, m_pOwner->m_rtThumb, m_pOwner->m_iThumbButtonState, fx, fy); - DoMouseUp(2, m_pOwner->m_rtMaxBtn, m_pOwner->m_iMaxButtonState, fx, fy); - DoMouseUp(3, m_pOwner->m_rtMinTrack, m_pOwner->m_iMinTrackState, fx, fy); - DoMouseUp(4, m_pOwner->m_rtMaxTrack, m_pOwner->m_iMaxTrackState, fx, fy); - m_pOwner->SetGrab(FALSE); -} -void CFWL_ScrollBarImpDelegate::OnMouseMove(FX_DWORD dwFlags, - FX_FLOAT fx, - FX_FLOAT fy) { - DoMouseMove(0, m_pOwner->m_rtMinBtn, m_pOwner->m_iMinButtonState, fx, fy); - DoMouseMove(1, m_pOwner->m_rtThumb, m_pOwner->m_iThumbButtonState, fx, fy); - DoMouseMove(2, m_pOwner->m_rtMaxBtn, m_pOwner->m_iMaxButtonState, fx, fy); - DoMouseMove(3, m_pOwner->m_rtMinTrack, m_pOwner->m_iMinTrackState, fx, fy); - DoMouseMove(4, m_pOwner->m_rtMaxTrack, m_pOwner->m_iMaxTrackState, fx, fy); -} -void CFWL_ScrollBarImpDelegate::OnMouseLeave() { - DoMouseLeave(0, m_pOwner->m_rtMinBtn, m_pOwner->m_iMinButtonState); - DoMouseLeave(1, m_pOwner->m_rtThumb, m_pOwner->m_iThumbButtonState); - DoMouseLeave(2, m_pOwner->m_rtMaxBtn, m_pOwner->m_iMaxButtonState); - DoMouseLeave(3, m_pOwner->m_rtMinTrack, m_pOwner->m_iMinTrackState); - DoMouseLeave(4, m_pOwner->m_rtMaxTrack, m_pOwner->m_iMaxTrackState); -} -void CFWL_ScrollBarImpDelegate::OnMouseWheel(FX_FLOAT fx, - FX_FLOAT fy, - FX_DWORD dwFlags, - FX_FLOAT fDeltaX, - FX_FLOAT fDeltaY) { - m_pOwner->m_iMouseWheel = (int32_t)fDeltaX; - m_pOwner->SendEvent(); - m_pOwner->m_iMouseWheel = 0; -} -void CFWL_ScrollBarImpDelegate::DoMouseDown(int32_t iItem, - const CFX_RectF& rtItem, - int32_t& iState, - FX_FLOAT fx, - FX_FLOAT fy) { - if (!rtItem.Contains(fx, fy)) { - return; - } - if (iState == FWL_PARTSTATE_SCB_Pressed) { - return; - } - iState = FWL_PARTSTATE_SCB_Pressed; - m_pOwner->Repaint(&rtItem); -} -void CFWL_ScrollBarImpDelegate::DoMouseUp(int32_t iItem, - const CFX_RectF& rtItem, - int32_t& iState, - FX_FLOAT fx, - FX_FLOAT fy) { - int32_t iNewState = rtItem.Contains(fx, fy) ? FWL_PARTSTATE_SCB_Hovered - : FWL_PARTSTATE_SCB_Normal; - if (iState == iNewState) { - return; - } - iState = iNewState; - m_pOwner->Repaint(&rtItem); - m_pOwner->OnScroll(FWL_SCBCODE_EndScroll, m_pOwner->m_fTrackPos); -} -void CFWL_ScrollBarImpDelegate::DoMouseMove(int32_t iItem, - const CFX_RectF& rtItem, - int32_t& iState, - FX_FLOAT fx, - FX_FLOAT fy) { - if (!m_pOwner->m_bMouseDown) { - int32_t iNewState = rtItem.Contains(fx, fy) ? FWL_PARTSTATE_SCB_Hovered - : FWL_PARTSTATE_SCB_Normal; - if (iState == iNewState) { - return; - } - iState = iNewState; - m_pOwner->Repaint(&rtItem); - } else if ((2 == iItem) && - (m_pOwner->m_iThumbButtonState == FWL_PARTSTATE_SCB_Pressed)) { - FX_FLOAT fPos = m_pOwner->GetTrackPointPos(fx, fy); - m_pOwner->m_fTrackPos = fPos; - m_pOwner->OnScroll(FWL_SCBCODE_TrackPos, fPos); - } -} -void CFWL_ScrollBarImpDelegate::DoMouseLeave(int32_t iItem, - const CFX_RectF& rtItem, - int32_t& iState) { - if (iState == FWL_PARTSTATE_SCB_Normal) { - return; - } - iState = FWL_PARTSTATE_SCB_Normal; - m_pOwner->Repaint(&rtItem); -} -void CFWL_ScrollBarImpDelegate::DoMouseHover(int32_t iItem, - const CFX_RectF& rtItem, - int32_t& iState) { - if (iState == FWL_PARTSTATE_SCB_Hovered) { - return; - } - iState = FWL_PARTSTATE_SCB_Hovered; - m_pOwner->Repaint(&rtItem); -} diff --git a/xfa/src/fwl/basewidget/fwl_scrollbarimp.h b/xfa/src/fwl/basewidget/fwl_scrollbarimp.h deleted file mode 100644 index be1f25470e..0000000000 --- a/xfa/src/fwl/basewidget/fwl_scrollbarimp.h +++ /dev/null @@ -1,139 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FWL_BASEWIDGET_FWL_SCROLLBARIMP_H_ -#define XFA_SRC_FWL_BASEWIDGET_FWL_SCROLLBARIMP_H_ - -#include "xfa/include/fwl/core/fwl_timer.h" -#include "xfa/src/fwl/core/fwl_widgetimp.h" - -class CFWL_WidgetImpProperties; -class IFWL_Widget; -class CFWL_ScrollBarImpDelegate; - -class CFWL_ScrollBarImp : public CFWL_WidgetImp, public IFWL_Timer { - public: - CFWL_ScrollBarImp(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter); - ~CFWL_ScrollBarImp(); - virtual FWL_ERR GetClassName(CFX_WideString& wsClass) const; - virtual FX_DWORD GetClassID() const; - virtual FWL_ERR Initialize(); - virtual FWL_ERR Finalize(); - virtual FWL_ERR GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize = FALSE); - virtual FWL_ERR Update(); - virtual FWL_ERR DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL); - virtual FX_BOOL IsVertical(); - virtual FWL_ERR GetRange(FX_FLOAT& fMin, FX_FLOAT& fMax); - virtual FWL_ERR SetRange(FX_FLOAT fMin, FX_FLOAT fMax); - virtual FX_FLOAT GetPageSize(); - virtual FWL_ERR SetPageSize(FX_FLOAT fPageSize); - virtual FX_FLOAT GetStepSize(); - virtual FWL_ERR SetStepSize(FX_FLOAT fStepSize); - virtual FX_FLOAT GetPos(); - virtual FWL_ERR SetPos(FX_FLOAT fPos); - virtual FX_FLOAT GetTrackPos(); - virtual FWL_ERR SetTrackPos(FX_FLOAT fTrackPos); - virtual FX_BOOL DoScroll(FX_DWORD dwCode, FX_FLOAT fPos = 0.0f); - virtual FWL_ERR SetOuter(IFWL_Widget* pOuter); - virtual int32_t Run(FWL_HTIMER hTimer); - - protected: - void DrawTrack(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - FX_BOOL bLower = TRUE, - const CFX_Matrix* pMatrix = NULL); - void DrawArrowBtn(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - FX_BOOL bMinBtn = TRUE, - const CFX_Matrix* pMatrix = NULL); - void DrawThumb(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix = NULL); - void Layout(); - void CalcButtonLen(); - void CalcMinButtonRect(CFX_RectF& rect); - void CalcMaxButtonRect(CFX_RectF& rect); - void CalcThumbButtonRect(CFX_RectF& rect); - void CalcMinTrackRect(CFX_RectF& rect); - void CalcMaxTrackRect(CFX_RectF& rect); - FX_FLOAT GetTrackPointPos(FX_FLOAT fx, FX_FLOAT fy); - void GetTrackRect(CFX_RectF& rect, FX_BOOL bLower = TRUE); - FX_BOOL SendEvent(); - FX_BOOL OnScroll(FX_DWORD dwCode, FX_FLOAT fPos); - - FWL_HTIMER m_hTimer; - FX_FLOAT m_fRangeMin; - FX_FLOAT m_fRangeMax; - FX_FLOAT m_fPageSize; - FX_FLOAT m_fStepSize; - FX_FLOAT m_fPos; - FX_FLOAT m_fTrackPos; - int32_t m_iMinButtonState; - int32_t m_iMaxButtonState; - int32_t m_iThumbButtonState; - int32_t m_iMinTrackState; - int32_t m_iMaxTrackState; - FX_FLOAT m_fLastTrackPos; - FX_FLOAT m_cpTrackPointX; - FX_FLOAT m_cpTrackPointY; - int32_t m_iMouseWheel; - FX_BOOL m_bTrackMouseLeave; - FX_BOOL m_bMouseHover; - FX_BOOL m_bMouseDown; - FX_BOOL m_bRepaintThumb; - FX_FLOAT m_fButtonLen; - FX_BOOL m_bMinSize; - CFX_RectF m_rtClient; - CFX_RectF m_rtThumb; - CFX_RectF m_rtMinBtn; - CFX_RectF m_rtMaxBtn; - CFX_RectF m_rtMinTrack; - CFX_RectF m_rtMaxTrack; - FX_BOOL m_bCustomLayout; - FX_FLOAT m_fMinThumb; - friend class CFWL_ScrollBarImpDelegate; -}; -class CFWL_ScrollBarImpDelegate : public CFWL_WidgetImpDelegate { - public: - CFWL_ScrollBarImpDelegate(CFWL_ScrollBarImp* pOwner); - int32_t OnProcessMessage(CFWL_Message* pMessage) override; - FWL_ERR OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL) override; - - protected: - void OnLButtonDown(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy); - void OnLButtonUp(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy); - void OnMouseMove(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy); - void OnMouseLeave(); - void OnMouseWheel(FX_FLOAT fx, - FX_FLOAT fy, - FX_DWORD dwFlags, - FX_FLOAT fDeltaX, - FX_FLOAT fDeltaY); - void DoMouseDown(int32_t iItem, - const CFX_RectF& rtItem, - int32_t& iState, - FX_FLOAT fx, - FX_FLOAT fy); - void DoMouseUp(int32_t iItem, - const CFX_RectF& rtItem, - int32_t& iState, - FX_FLOAT fx, - FX_FLOAT fy); - void DoMouseMove(int32_t iItem, - const CFX_RectF& rtItem, - int32_t& iState, - FX_FLOAT fx, - FX_FLOAT fy); - void DoMouseLeave(int32_t iItem, const CFX_RectF& rtItem, int32_t& iState); - void DoMouseHover(int32_t iItem, const CFX_RectF& rtItem, int32_t& iState); - - CFWL_ScrollBarImp* m_pOwner; -}; - -#endif // XFA_SRC_FWL_BASEWIDGET_FWL_SCROLLBARIMP_H_ diff --git a/xfa/src/fwl/basewidget/fwl_spinbuttonimp.cpp b/xfa/src/fwl/basewidget/fwl_spinbuttonimp.cpp deleted file mode 100644 index fd7c226102..0000000000 --- a/xfa/src/fwl/basewidget/fwl_spinbuttonimp.cpp +++ /dev/null @@ -1,429 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fwl/basewidget/fwl_spinbuttonimp.h" - -#include "xfa/include/fwl/basewidget/fwl_spinbutton.h" -#include "xfa/include/fwl/core/fwl_theme.h" -#include "xfa/include/fwl/core/fwl_timer.h" -#include "xfa/src/fwl/core/fwl_noteimp.h" -#include "xfa/src/fwl/core/fwl_targetimp.h" -#include "xfa/src/fwl/core/fwl_widgetimp.h" - -#define FWL_SPN_MinWidth 18 -#define FWL_SPN_MinHeight 32 -#define FWL_SPIN_Elapse 200 - -// static -IFWL_SpinButton* IFWL_SpinButton::Create( - const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) { - IFWL_SpinButton* pSpinButton = new IFWL_SpinButton; - CFWL_SpinButtonImp* pSpinButtonImpl = - new CFWL_SpinButtonImp(properties, nullptr); - pSpinButton->SetImpl(pSpinButtonImpl); - pSpinButtonImpl->SetInterface(pSpinButton); - return pSpinButton; -} -IFWL_SpinButton::IFWL_SpinButton() {} -FWL_ERR IFWL_SpinButton::EnableButton(FX_BOOL bEnable, FX_BOOL bUp) { - return static_cast(GetImpl()) - ->EnableButton(bEnable, bUp); -} -FX_BOOL IFWL_SpinButton::IsButtonEnable(FX_BOOL bUp) { - return static_cast(GetImpl())->IsButtonEnable(bUp); -} - -CFWL_SpinButtonImp::CFWL_SpinButtonImp( - const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) - : CFWL_WidgetImp(properties, pOuter), - m_dwUpState(FWL_PARTSTATE_SPB_Normal), - m_dwDnState(FWL_PARTSTATE_SPB_Normal), - m_iButtonIndex(0), - m_bLButtonDwn(FALSE), - m_hTimer(NULL) { - m_rtClient.Reset(); - m_rtUpButton.Reset(); - m_rtDnButton.Reset(); - m_pProperties->m_dwStyleExes |= FWL_STYLEEXE_SPB_Vert; -} -CFWL_SpinButtonImp::~CFWL_SpinButtonImp() {} -FWL_ERR CFWL_SpinButtonImp::GetClassName(CFX_WideString& wsClass) const { - wsClass = FWL_CLASS_SpinButton; - return FWL_ERR_Succeeded; -} -FX_DWORD CFWL_SpinButtonImp::GetClassID() const { - return FWL_CLASSHASH_SpinButton; -} -FWL_ERR CFWL_SpinButtonImp::Initialize() { - if (CFWL_WidgetImp::Initialize() != FWL_ERR_Succeeded) - return FWL_ERR_Indefinite; - m_pDelegate = new CFWL_SpinButtonImpDelegate(this); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_SpinButtonImp::Finalize() { - delete m_pDelegate; - m_pDelegate = nullptr; - return CFWL_WidgetImp::Finalize(); -} -FWL_ERR CFWL_SpinButtonImp::GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize) { - if (bAutoSize) { - rect.Set(0, 0, FWL_SPN_MinWidth, FWL_SPN_MinHeight); - CFWL_WidgetImp::GetWidgetRect(rect, TRUE); - } else { - rect = m_pProperties->m_rtWidget; - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_SpinButtonImp::Update() { - if (IsLocked()) { - return FWL_ERR_Indefinite; - } - GetClientRect(m_rtClient); - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXE_SPB_Vert) { - m_rtUpButton.Set(m_rtClient.top, m_rtClient.left, m_rtClient.width, - m_rtClient.height / 2); - m_rtDnButton.Set(m_rtClient.left, m_rtClient.top + m_rtClient.height / 2, - m_rtClient.width, m_rtClient.height / 2); - } else { - m_rtUpButton.Set(m_rtClient.left, m_rtClient.top, m_rtClient.width / 2, - m_rtClient.height); - m_rtDnButton.Set(m_rtClient.left + m_rtClient.width / 2, m_rtClient.top, - m_rtClient.width / 2, m_rtClient.height); - } - return FWL_ERR_Succeeded; -} -FX_DWORD CFWL_SpinButtonImp::HitTest(FX_FLOAT fx, FX_FLOAT fy) { - if (m_rtClient.Contains(fx, fy)) { - return FWL_WGTHITTEST_Client; - } - if (HasBorder() && (m_rtClient.Contains(fx, fy))) { - return FWL_WGTHITTEST_Border; - } - if (HasEdge()) { - CFX_RectF rtEdge; - GetEdgeRect(rtEdge); - if (rtEdge.Contains(fx, fy)) { - return FWL_PART_SPB_Edge; - } - } - if (m_rtUpButton.Contains(fx, fy)) { - return FWL_WGTHITTEST_SPB_UpButton; - } - if (m_rtDnButton.Contains(fx, fy)) { - return FWL_WGTHITTEST_SPB_DownButton; - } - return FWL_WGTHITTEST_Unknown; -} -FWL_ERR CFWL_SpinButtonImp::DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - if (!pGraphics) - return FWL_ERR_Indefinite; - CFX_RectF rtClip(m_rtClient); - if (pMatrix != NULL) { - pMatrix->TransformRect(rtClip); - } - IFWL_ThemeProvider* pTheme = GetAvailableTheme(); - if (HasBorder()) { - DrawBorder(pGraphics, FWL_PART_SPB_Border, pTheme, pMatrix); - } - if (HasEdge()) { - DrawEdge(pGraphics, FWL_PART_SPB_Edge, pTheme, pMatrix); - } - DrawUpButton(pGraphics, pTheme, pMatrix); - DrawDownButton(pGraphics, pTheme, pMatrix); - return FWL_ERR_Succeeded; -} -int32_t CFWL_SpinButtonImp::Run(FWL_HTIMER hTimer) { - if (m_hTimer) { - CFWL_EvtSpbClick wmPosChanged; - wmPosChanged.m_pSrcTarget = m_pInterface; - wmPosChanged.m_bUp = m_iButtonIndex == 0; - DispatchEvent(&wmPosChanged); - } - return 1; -} -FWL_ERR CFWL_SpinButtonImp::EnableButton(FX_BOOL bEnable, FX_BOOL bUp) { - if (bUp) { - if (bEnable) { - m_dwUpState = FWL_PARTSTATE_SPB_Normal; - } else { - m_dwUpState = FWL_PARTSTATE_SPB_Disabled; - } - } else { - if (bEnable) { - m_dwDnState = FWL_PARTSTATE_SPB_Normal; - } else { - m_dwDnState = FWL_PARTSTATE_SPB_Disabled; - } - } - return FWL_ERR_Succeeded; -} -FX_BOOL CFWL_SpinButtonImp::IsButtonEnable(FX_BOOL bUp) { - if (bUp) { - return (m_dwUpState != FWL_PARTSTATE_SPB_Disabled); - } - return (m_dwDnState != FWL_PARTSTATE_SPB_Disabled); -} -void CFWL_SpinButtonImp::DrawUpButton(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix) { - CFWL_ThemeBackground params; - params.m_pWidget = m_pInterface; - params.m_iPart = FWL_PART_SPB_UpButton; - params.m_pGraphics = pGraphics; - params.m_dwStates = m_dwUpState + 1; - if (pMatrix) { - params.m_matrix.Concat(*pMatrix); - } - params.m_rtPart = m_rtUpButton; - pTheme->DrawBackground(¶ms); -} -void CFWL_SpinButtonImp::DrawDownButton(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix) { - CFWL_ThemeBackground params; - params.m_pWidget = m_pInterface; - params.m_iPart = FWL_PART_SPB_DownButton; - params.m_pGraphics = pGraphics; - params.m_dwStates = m_dwDnState + 1; - if (pMatrix) { - params.m_matrix.Concat(*pMatrix); - } - params.m_rtPart = m_rtDnButton; - pTheme->DrawBackground(¶ms); -} -CFWL_SpinButtonImpDelegate::CFWL_SpinButtonImpDelegate( - CFWL_SpinButtonImp* pOwner) - : m_pOwner(pOwner) {} -int32_t CFWL_SpinButtonImpDelegate::OnProcessMessage(CFWL_Message* pMessage) { - if (!pMessage) - return 0; - int32_t iRet = 1; - FX_DWORD dwMsgCode = pMessage->GetClassID(); - switch (dwMsgCode) { - case FWL_MSGHASH_SetFocus: - case FWL_MSGHASH_KillFocus: { - OnFocusChanged(pMessage, dwMsgCode == FWL_MSGHASH_SetFocus); - break; - } - case FWL_MSGHASH_Mouse: { - CFWL_MsgMouse* pMsg = static_cast(pMessage); - FX_DWORD dwCmd = pMsg->m_dwCmd; - switch (dwCmd) { - case FWL_MSGMOUSECMD_LButtonDown: { - OnLButtonDown(pMsg); - break; - } - case FWL_MSGMOUSECMD_LButtonUp: { - OnLButtonUp(pMsg); - break; - } - case FWL_MSGMOUSECMD_MouseMove: { - OnMouseMove(pMsg); - break; - } - case FWL_MSGMOUSECMD_MouseLeave: { - OnMouseLeave(pMsg); - break; - } - default: {} - } - break; - } - case FWL_MSGHASH_Key: { - CFWL_MsgKey* pKey = static_cast(pMessage); - if (pKey->m_dwCmd == FWL_MSGKEYCMD_KeyDown) { - OnKeyDown(pKey); - } - break; - } - default: { - iRet = 0; - break; - } - } - CFWL_WidgetImpDelegate::OnProcessMessage(pMessage); - return iRet; -} -FWL_ERR CFWL_SpinButtonImpDelegate::OnProcessEvent(CFWL_Event* pEvent) { - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_SpinButtonImpDelegate::OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - return m_pOwner->DrawWidget(pGraphics, pMatrix); -} -void CFWL_SpinButtonImpDelegate::OnFocusChanged(CFWL_Message* pMsg, - FX_BOOL bSet) { - if (bSet) { - m_pOwner->m_pProperties->m_dwStates |= (FWL_WGTSTATE_Focused); - } else { - m_pOwner->m_pProperties->m_dwStates &= ~(FWL_WGTSTATE_Focused); - } - m_pOwner->Repaint(&m_pOwner->m_rtClient); -} -void CFWL_SpinButtonImpDelegate::OnLButtonDown(CFWL_MsgMouse* pMsg) { - m_pOwner->m_bLButtonDwn = TRUE; - m_pOwner->SetGrab(TRUE); - m_pOwner->SetFocus(TRUE); - if (!m_pOwner->m_pProperties->m_pDataProvider) - return; - FX_BOOL bUpPress = (m_pOwner->m_rtUpButton.Contains(pMsg->m_fx, pMsg->m_fy) && - m_pOwner->IsButtonEnable(TRUE)); - FX_BOOL bDnPress = (m_pOwner->m_rtDnButton.Contains(pMsg->m_fx, pMsg->m_fy) && - m_pOwner->IsButtonEnable(FALSE)); - if (!bUpPress && !bDnPress) { - return; - } - if (bUpPress) { - m_pOwner->m_iButtonIndex = 0; - m_pOwner->m_dwUpState = FWL_PARTSTATE_SPB_Pressed; - } - if (bDnPress) { - m_pOwner->m_iButtonIndex = 1; - m_pOwner->m_dwDnState = FWL_PARTSTATE_SPB_Pressed; - } - CFWL_EvtSpbClick wmPosChanged; - wmPosChanged.m_pSrcTarget = m_pOwner->m_pInterface; - wmPosChanged.m_bUp = bUpPress; - m_pOwner->DispatchEvent(&wmPosChanged); - m_pOwner->Repaint(bUpPress ? &m_pOwner->m_rtUpButton - : &m_pOwner->m_rtDnButton); - m_pOwner->m_hTimer = FWL_StartTimer(m_pOwner, FWL_SPIN_Elapse); -} -void CFWL_SpinButtonImpDelegate::OnLButtonUp(CFWL_MsgMouse* pMsg) { - if (m_pOwner->m_pProperties->m_dwStates & FWL_PARTSTATE_SPB_Disabled) { - return; - } - m_pOwner->m_bLButtonDwn = FALSE; - m_pOwner->SetGrab(FALSE); - m_pOwner->SetFocus(FALSE); - if (m_pOwner->m_hTimer) { - FWL_StopTimer(m_pOwner->m_hTimer); - m_pOwner->m_hTimer = NULL; - } - FX_BOOL bRepaint = FALSE; - CFX_RectF rtInvalidate; - if (m_pOwner->m_dwUpState == FWL_PARTSTATE_SPB_Pressed && - m_pOwner->IsButtonEnable(TRUE)) { - m_pOwner->m_dwUpState = FWL_PARTSTATE_SPB_Normal; - bRepaint = TRUE; - rtInvalidate = m_pOwner->m_rtUpButton; - } else if (m_pOwner->m_dwDnState == FWL_PARTSTATE_SPB_Pressed && - m_pOwner->IsButtonEnable(FALSE)) { - m_pOwner->m_dwDnState = FWL_PARTSTATE_SPB_Normal; - bRepaint = TRUE; - rtInvalidate = m_pOwner->m_rtDnButton; - } - if (bRepaint) { - m_pOwner->Repaint(&rtInvalidate); - } -} -void CFWL_SpinButtonImpDelegate::OnMouseMove(CFWL_MsgMouse* pMsg) { - if (!m_pOwner->m_pProperties->m_pDataProvider) - return; - if (m_pOwner->m_bLButtonDwn) { - return; - } - FX_BOOL bRepaint = FALSE; - CFX_RectF rtInvlidate; - rtInvlidate.Reset(); - if (m_pOwner->m_rtUpButton.Contains(pMsg->m_fx, pMsg->m_fy)) { - if (m_pOwner->IsButtonEnable(TRUE)) { - if (m_pOwner->m_dwUpState == FWL_PARTSTATE_SPB_Hovered) { - m_pOwner->m_dwUpState = FWL_PARTSTATE_SPB_Hovered; - bRepaint = TRUE; - rtInvlidate = m_pOwner->m_rtUpButton; - } - if (m_pOwner->m_dwDnState != FWL_PARTSTATE_SPB_Normal && - m_pOwner->IsButtonEnable(FALSE)) { - m_pOwner->m_dwDnState = FWL_PARTSTATE_SPB_Normal; - if (bRepaint) { - rtInvlidate.Union(m_pOwner->m_rtDnButton); - } else { - rtInvlidate = m_pOwner->m_rtDnButton; - } - bRepaint = TRUE; - } - } - if (!m_pOwner->IsButtonEnable(FALSE)) { - m_pOwner->EnableButton(FALSE, FALSE); - } - } else if (m_pOwner->m_rtDnButton.Contains(pMsg->m_fx, pMsg->m_fy)) { - if (m_pOwner->IsButtonEnable(FALSE)) { - if (m_pOwner->m_dwDnState != FWL_PARTSTATE_SPB_Hovered) { - m_pOwner->m_dwDnState = FWL_PARTSTATE_SPB_Hovered; - bRepaint = TRUE; - rtInvlidate = m_pOwner->m_rtDnButton; - } - if (m_pOwner->m_dwUpState != FWL_PARTSTATE_SPB_Normal && - m_pOwner->IsButtonEnable(TRUE)) { - m_pOwner->m_dwUpState = FWL_PARTSTATE_SPB_Normal; - if (bRepaint) { - rtInvlidate.Union(m_pOwner->m_rtUpButton); - } else { - rtInvlidate = m_pOwner->m_rtUpButton; - } - bRepaint = TRUE; - } - } - } else if (m_pOwner->m_dwUpState != FWL_PARTSTATE_SPB_Normal || - m_pOwner->m_dwDnState != FWL_PARTSTATE_SPB_Normal) { - if (m_pOwner->m_dwUpState != FWL_PARTSTATE_SPB_Normal) { - m_pOwner->m_dwUpState = FWL_PARTSTATE_SPB_Normal; - bRepaint = TRUE; - rtInvlidate = m_pOwner->m_rtUpButton; - } - if (m_pOwner->m_dwDnState != FWL_PARTSTATE_SPB_Normal) { - m_pOwner->m_dwDnState = FWL_PARTSTATE_SPB_Normal; - if (bRepaint) { - rtInvlidate.Union(m_pOwner->m_rtDnButton); - } else { - rtInvlidate = m_pOwner->m_rtDnButton; - } - bRepaint = TRUE; - } - } - if (bRepaint) { - m_pOwner->Repaint(&rtInvlidate); - } -} -void CFWL_SpinButtonImpDelegate::OnMouseLeave(CFWL_MsgMouse* pMsg) { - if (!pMsg) - return; - if (m_pOwner->m_dwUpState != FWL_PARTSTATE_SPB_Normal && - m_pOwner->IsButtonEnable(TRUE)) { - m_pOwner->m_dwUpState = FWL_PARTSTATE_SPB_Normal; - } - if (m_pOwner->m_dwDnState != FWL_PARTSTATE_SPB_Normal && - m_pOwner->IsButtonEnable(FALSE)) { - m_pOwner->m_dwDnState = FWL_PARTSTATE_SPB_Normal; - } - m_pOwner->Repaint(&m_pOwner->m_rtClient); -} -void CFWL_SpinButtonImpDelegate::OnKeyDown(CFWL_MsgKey* pMsg) { - if (!m_pOwner->m_pProperties->m_pDataProvider) - return; - FX_BOOL bUp = - pMsg->m_dwKeyCode == FWL_VKEY_Up || pMsg->m_dwKeyCode == FWL_VKEY_Left; - FX_BOOL bDown = - pMsg->m_dwKeyCode == FWL_VKEY_Down || pMsg->m_dwKeyCode == FWL_VKEY_Right; - if (!bUp && !bDown) { - return; - } - FX_BOOL bUpEnable = m_pOwner->IsButtonEnable(TRUE); - FX_BOOL bDownEnable = m_pOwner->IsButtonEnable(FALSE); - if (!bUpEnable && !bDownEnable) { - return; - } - CFWL_EvtSpbClick wmPosChanged; - wmPosChanged.m_pSrcTarget = m_pOwner->m_pInterface; - wmPosChanged.m_bUp = bUpEnable; - m_pOwner->DispatchEvent(&wmPosChanged); - m_pOwner->Repaint(bUpEnable ? &m_pOwner->m_rtUpButton - : &m_pOwner->m_rtDnButton); -} diff --git a/xfa/src/fwl/basewidget/fwl_spinbuttonimp.h b/xfa/src/fwl/basewidget/fwl_spinbuttonimp.h deleted file mode 100644 index 769db28c30..0000000000 --- a/xfa/src/fwl/basewidget/fwl_spinbuttonimp.h +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FWL_BASEWIDGET_FWL_SPINBUTTONIMP_H_ -#define XFA_SRC_FWL_BASEWIDGET_FWL_SPINBUTTONIMP_H_ - -#include "xfa/include/fwl/core/fwl_timer.h" -#include "xfa/src/fwl/core/fwl_widgetimp.h" - -class CFWL_WidgetImpProperties; -class CFWL_SpinButtonImpDelegate; - -class CFWL_SpinButtonImp : public CFWL_WidgetImp, public IFWL_Timer { - public: - CFWL_SpinButtonImp(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter); - ~CFWL_SpinButtonImp(); - virtual FWL_ERR GetClassName(CFX_WideString& wsClass) const; - virtual FX_DWORD GetClassID() const; - virtual FWL_ERR Initialize(); - virtual FWL_ERR Finalize(); - virtual FWL_ERR GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize = FALSE); - virtual FWL_ERR Update(); - virtual FX_DWORD HitTest(FX_FLOAT fx, FX_FLOAT fy); - virtual FWL_ERR DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL); - virtual int32_t Run(FWL_HTIMER hTimer); - FWL_ERR EnableButton(FX_BOOL bEnable, FX_BOOL bUp = TRUE); - FX_BOOL IsButtonEnable(FX_BOOL bUp = TRUE); - - protected: - void DrawUpButton(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix); - void DrawDownButton(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix); - CFX_RectF m_rtClient; - CFX_RectF m_rtUpButton; - CFX_RectF m_rtDnButton; - FX_DWORD m_dwUpState; - FX_DWORD m_dwDnState; - int32_t m_iButtonIndex; - FX_BOOL m_bLButtonDwn; - FWL_HTIMER m_hTimer; - friend class CFWL_SpinButtonImpDelegate; -}; -class CFWL_SpinButtonImpDelegate : public CFWL_WidgetImpDelegate { - public: - CFWL_SpinButtonImpDelegate(CFWL_SpinButtonImp* pOwner); - int32_t OnProcessMessage(CFWL_Message* pMessage) override; - FWL_ERR OnProcessEvent(CFWL_Event* pEvent) override; - FWL_ERR OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL) override; - - protected: - void OnFocusChanged(CFWL_Message* pMsg, FX_BOOL bSet = TRUE); - void OnLButtonDown(CFWL_MsgMouse* pMsg); - void OnLButtonUp(CFWL_MsgMouse* pMsg); - void OnMouseMove(CFWL_MsgMouse* pMsg); - void OnMouseLeave(CFWL_MsgMouse* pMsg); - void OnKeyDown(CFWL_MsgKey* pMsg); - CFWL_SpinButtonImp* m_pOwner; -}; - -#endif // XFA_SRC_FWL_BASEWIDGET_FWL_SPINBUTTONIMP_H_ diff --git a/xfa/src/fwl/basewidget/fwl_tooltipctrlimp.cpp b/xfa/src/fwl/basewidget/fwl_tooltipctrlimp.cpp deleted file mode 100644 index 696a2e2b39..0000000000 --- a/xfa/src/fwl/basewidget/fwl_tooltipctrlimp.cpp +++ /dev/null @@ -1,293 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fwl/basewidget/fwl_tooltipctrlimp.h" - -#include "xfa/include/fwl/basewidget/fwl_tooltipctrl.h" -#include "xfa/include/fwl/core/fwl_theme.h" -#include "xfa/src/fde/tto/fde_textout.h" -#include "xfa/src/fwl/core/fwl_formimp.h" -#include "xfa/src/fwl/core/fwl_noteimp.h" -#include "xfa/src/fwl/core/fwl_panelimp.h" -#include "xfa/src/fwl/core/fwl_targetimp.h" -#include "xfa/src/fwl/core/fwl_widgetimp.h" - -// static -IFWL_ToolTip* IFWL_ToolTip::Create(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) { - IFWL_ToolTip* pToolTip = new IFWL_ToolTip; - CFWL_ToolTipImp* pToolTipImpl = new CFWL_ToolTipImp(properties, pOuter); - pToolTip->SetImpl(pToolTipImpl); - pToolTipImpl->SetInterface(pToolTip); - return pToolTip; -} -FWL_ERR IFWL_ToolTip::SetAnchor(const CFX_RectF& rtAnchor) { - return static_cast(GetImpl())->SetAnchor(rtAnchor); -} -FWL_ERR IFWL_ToolTip::Show() { - return static_cast(GetImpl())->Show(); -} -FWL_ERR IFWL_ToolTip::Hide() { - return static_cast(GetImpl())->Hide(); -} -IFWL_ToolTip::IFWL_ToolTip() {} -CFWL_ToolTipImp::CFWL_ToolTipImp(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) - : CFWL_FormImp(properties, pOuter), - m_bBtnDown(FALSE), - m_dwTTOStyles(FDE_TTOSTYLE_SingleLine), - m_iTTOAlign(FDE_TTOALIGNMENT_Center), - m_hTimerShow(NULL), - m_hTimerHide(NULL), - m_pTimer(NULL) { - m_rtClient.Set(0, 0, 0, 0); - m_rtCaption.Set(0, 0, 0, 0); - m_rtAnchor.Set(0, 0, 0, 0); - m_TimerShow.m_pToolTip = this; - m_TimerHide.m_pToolTip = this; -} -CFWL_ToolTipImp::~CFWL_ToolTipImp() { - if (m_pTimer) { - delete m_pTimer; - m_pTimer = NULL; - } -} -FWL_ERR CFWL_ToolTipImp::GetClassName(CFX_WideString& wsClass) const { - wsClass = FWL_CLASS_ToolTip; - return FWL_ERR_Succeeded; -} -FX_DWORD CFWL_ToolTipImp::GetClassID() const { - return FWL_CLASSHASH_ToolTip; -} -FWL_ERR CFWL_ToolTipImp::Initialize() { - m_pProperties->m_dwStyles |= FWL_WGTSTYLE_Popup; - m_pProperties->m_dwStyles &= ~FWL_WGTSTYLE_Child; - if (CFWL_WidgetImp::Initialize() != FWL_ERR_Succeeded) - return FWL_ERR_Indefinite; - m_pDelegate = new CFWL_ToolTipImpDelegate(this); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ToolTipImp::Finalize() { - delete m_pDelegate; - m_pDelegate = nullptr; - return CFWL_WidgetImp::Finalize(); -} -FWL_ERR CFWL_ToolTipImp::GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize) { - if (bAutoSize) { - rect.Set(0, 0, 0, 0); - if (m_pProperties->m_pThemeProvider == NULL) { - m_pProperties->m_pThemeProvider = GetAvailableTheme(); - } - CFX_WideString wsCaption; - IFWL_ToolTipDP* pData = - static_cast(m_pProperties->m_pDataProvider); - if (pData) { - pData->GetCaption(m_pInterface, wsCaption); - } - int32_t iLen = wsCaption.GetLength(); - if (iLen > 0) { - CFX_SizeF sz = CalcTextSize(wsCaption, m_pProperties->m_pThemeProvider); - rect.Set(0, 0, sz.x, sz.y); - rect.width += FWL_WGTCAPACITY_CXBorder * 25; - rect.height += FWL_WGTCAPACITY_CYBorder * 8; - } - CFWL_WidgetImp::GetWidgetRect(rect, TRUE); - } else { - rect = m_pProperties->m_rtWidget; - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ToolTipImp::Update() { - if (IsLocked()) { - return FWL_ERR_Indefinite; - } - if (!m_pProperties->m_pThemeProvider) { - m_pProperties->m_pThemeProvider = GetAvailableTheme(); - } - UpdateTextOutStyles(); - GetClientRect(m_rtClient); - m_rtCaption = m_rtClient; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ToolTipImp::GetClientRect(CFX_RectF& rect) { - FX_FLOAT x = 0; - FX_FLOAT y = 0; - FX_FLOAT t = 0; - IFWL_ThemeProvider* pTheme = m_pProperties->m_pThemeProvider; - if (pTheme) { - CFWL_ThemePart part; - part.m_pWidget = m_pInterface; - x = *static_cast( - pTheme->GetCapacity(&part, FWL_WGTCAPACITY_CXBorder)); - y = *static_cast( - pTheme->GetCapacity(&part, FWL_WGTCAPACITY_CYBorder)); - } - rect = m_pProperties->m_rtWidget; - rect.Offset(-rect.left, -rect.top); - rect.Deflate(x, t, x, y); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ToolTipImp::DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - IFWL_ToolTipTarget* toolTipTarget = - CFWL_ToolTipContainer::getInstance()->GetCurrentToolTipTarget(); - if (toolTipTarget && !toolTipTarget->UseDefaultTheme()) { - return toolTipTarget->DrawToolTip(pGraphics, pMatrix, m_pInterface); - } - if (!pGraphics) - return FWL_ERR_Indefinite; - if (!m_pProperties->m_pThemeProvider) - return FWL_ERR_Indefinite; - IFWL_ThemeProvider* pTheme = m_pProperties->m_pThemeProvider; - DrawBkground(pGraphics, pTheme, pMatrix); - DrawText(pGraphics, pTheme, pMatrix); - return FWL_ERR_Succeeded; -} -void CFWL_ToolTipImp::DrawBkground(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix) { - CFWL_ThemeBackground param; - param.m_pWidget = m_pInterface; - param.m_iPart = FWL_PART_TTP_Background; - param.m_dwStates = m_pProperties->m_dwStates; - param.m_pGraphics = pGraphics; - if (pMatrix) { - param.m_matrix.Concat(*pMatrix); - } - param.m_rtPart = m_rtClient; - if (m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) { - param.m_pData = &m_rtCaption; - } - pTheme->DrawBackground(¶m); -} -void CFWL_ToolTipImp::DrawText(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix) { - if (!m_pProperties->m_pDataProvider) - return; - CFX_WideString wsCaption; - m_pProperties->m_pDataProvider->GetCaption(m_pInterface, wsCaption); - if (wsCaption.IsEmpty()) { - return; - } - CFWL_ThemeText param; - param.m_pWidget = m_pInterface; - param.m_iPart = FWL_PART_TTP_Caption; - param.m_dwStates = m_pProperties->m_dwStates; - param.m_pGraphics = pGraphics; - if (pMatrix) { - param.m_matrix.Concat(*pMatrix); - } - param.m_rtPart = m_rtCaption; - param.m_wsText = wsCaption; - param.m_dwTTOStyles = m_dwTTOStyles; - param.m_iTTOAlign = m_iTTOAlign; - pTheme->DrawText(¶m); -} -void CFWL_ToolTipImp::UpdateTextOutStyles() { - m_iTTOAlign = FDE_TTOALIGNMENT_Center; - m_dwTTOStyles = FDE_TTOSTYLE_SingleLine; - if (m_pProperties->m_dwStyleExes & FWL_WGTSTYLE_RTLReading) { - m_dwTTOStyles |= FDE_TTOSTYLE_RTL; - } - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_TTP_Multiline) { - m_dwTTOStyles &= ~FDE_TTOSTYLE_SingleLine; - } -} -FWL_ERR CFWL_ToolTipImp::SetAnchor(const CFX_RectF& rtAnchor) { - m_rtAnchor = rtAnchor; - return TRUE; -} -FWL_ERR CFWL_ToolTipImp::Show() { - IFWL_ToolTipDP* pData = - static_cast(m_pProperties->m_pDataProvider); - int32_t nInitDelay = pData->GetInitialDelay(m_pInterface); - if ((m_pProperties->m_dwStates & FWL_WGTSTATE_Invisible)) { - m_hTimerShow = FWL_StartTimer(&m_TimerShow, nInitDelay, FALSE); - } - return TRUE; -} -FWL_ERR CFWL_ToolTipImp::Hide() { - SetStates(FWL_WGTSTATE_Invisible, TRUE); - if (m_hTimerHide) { - FWL_StopTimer(m_hTimerHide); - m_hTimerHide = NULL; - } - if (m_hTimerShow) { - FWL_StopTimer(m_hTimerShow); - m_hTimerShow = NULL; - } - return TRUE; -} -FWL_ERR CFWL_ToolTipImp::SetStates(FX_DWORD dwStates, FX_BOOL bSet) { - if ((dwStates & FWL_WGTSTATE_Invisible) && !bSet) { - IFWL_ToolTipDP* pData = - static_cast(m_pProperties->m_pDataProvider); - int32_t nAutoPopDelay = pData->GetAutoPopDelay(m_pInterface); - m_hTimerHide = FWL_StartTimer(&m_TimerHide, nAutoPopDelay, FALSE); - } - return CFWL_WidgetImp::SetStates(dwStates, bSet); -} -void CFWL_ToolTipImp::RefreshToolTipPos() { - if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_TTP_NoAnchor) == 0) { - CFX_RectF rtPopup; - CFX_RectF rtWidget(m_pProperties->m_rtWidget); - CFX_RectF rtAnchor(m_rtAnchor); - rtPopup.Set(0, 0, 0, 0); - FX_FLOAT fx = rtAnchor.Center().x + 20; - FX_FLOAT fy = rtAnchor.Center().y + 20; - rtPopup.Set(fx, fy, rtWidget.Width(), rtWidget.Height()); - FX_FLOAT fScreenWidth = 0; - FX_FLOAT fScreenHeight = 0; - GetScreenSize(fScreenWidth, fScreenHeight); - if (rtPopup.bottom() > fScreenHeight) { - rtPopup.Offset(0, fScreenHeight - rtPopup.bottom()); - } - if (rtPopup.right() > fScreenWidth) { - rtPopup.Offset(fScreenWidth - rtPopup.right(), 0); - } - if (rtPopup.left < 0) { - rtPopup.Offset(0 - rtPopup.left, 0); - } - if (rtPopup.top < 0) { - rtPopup.Offset(0, 0 - rtPopup.top); - } - SetWidgetRect(rtPopup); - Update(); - } -} -CFWL_ToolTipImp::CFWL_ToolTipTimer::CFWL_ToolTipTimer(CFWL_ToolTipImp* pToolTip) - : m_pToolTip(pToolTip) {} -int32_t CFWL_ToolTipImp::CFWL_ToolTipTimer::Run(FWL_HTIMER hTimer) { - if (m_pToolTip->m_hTimerShow == hTimer && m_pToolTip->m_hTimerShow) { - if (m_pToolTip->GetStates() & FWL_WGTSTATE_Invisible) { - m_pToolTip->SetStates(FWL_WGTSTATE_Invisible, FALSE); - m_pToolTip->RefreshToolTipPos(); - FWL_StopTimer(m_pToolTip->m_hTimerShow); - m_pToolTip->m_hTimerShow = NULL; - return TRUE; - } - } - if (m_pToolTip->m_hTimerHide == hTimer && m_pToolTip->m_hTimerHide) { - m_pToolTip->SetStates(FWL_WGTSTATE_Invisible, TRUE); - FWL_StopTimer(m_pToolTip->m_hTimerHide); - m_pToolTip->m_hTimerHide = NULL; - return TRUE; - } - return TRUE; -} -CFWL_ToolTipImpDelegate::CFWL_ToolTipImpDelegate(CFWL_ToolTipImp* pOwner) - : m_pOwner(pOwner) {} -int32_t CFWL_ToolTipImpDelegate::OnProcessMessage(CFWL_Message* pMessage) { - return CFWL_WidgetImpDelegate::OnProcessMessage(pMessage); -} -FWL_ERR CFWL_ToolTipImpDelegate::OnProcessEvent(CFWL_Event* pEvent) { - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ToolTipImpDelegate::OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - return m_pOwner->DrawWidget(pGraphics, pMatrix); -} diff --git a/xfa/src/fwl/basewidget/fwl_tooltipctrlimp.h b/xfa/src/fwl/basewidget/fwl_tooltipctrlimp.h deleted file mode 100644 index 08fb7b0639..0000000000 --- a/xfa/src/fwl/basewidget/fwl_tooltipctrlimp.h +++ /dev/null @@ -1,86 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FWL_BASEWIDGET_FWL_TOOLTIPCTRLIMP_H_ -#define XFA_SRC_FWL_BASEWIDGET_FWL_TOOLTIPCTRLIMP_H_ - -#include "xfa/include/fwl/core/fwl_timer.h" -#include "xfa/src/fwl/core/fwl_formimp.h" -#include "xfa/src/fwl/core/fwl_widgetimp.h" - -class CFWL_WidgetImpProperties; -class IFWL_Widget; -class CFWL_ToolTipImpDelegate; - -class CFWL_ToolTipImp : public CFWL_FormImp { - public: - CFWL_ToolTipImp(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter); - virtual ~CFWL_ToolTipImp(); - virtual FWL_ERR GetClassName(CFX_WideString& wsClass) const; - virtual FX_DWORD GetClassID() const; - virtual FWL_ERR Initialize(); - virtual FWL_ERR Finalize(); - virtual FWL_ERR GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize = FALSE); - virtual FWL_ERR Update(); - virtual FWL_ERR DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL); - virtual FWL_ERR SetStates(FX_DWORD dwStates, FX_BOOL bSet); - virtual FWL_ERR GetClientRect(CFX_RectF& rect); - FWL_ERR SetAnchor(const CFX_RectF& rtAnchor); - FWL_ERR Show(); - FWL_ERR Hide(); - - protected: - void DrawBkground(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix); - void DrawText(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix); - void UpdateTextOutStyles(); - void RefreshToolTipPos(); - class CFWL_ToolTipTimer : public IFWL_Timer { - public: - CFWL_ToolTipTimer() {} - ~CFWL_ToolTipTimer() {} - CFWL_ToolTipTimer(CFWL_ToolTipImp* pToolTip); - virtual int32_t Run(FWL_HTIMER hTimer); - CFWL_ToolTipImp* m_pToolTip; - }; - CFX_RectF m_rtClient; - CFX_RectF m_rtCaption; - FX_BOOL m_bBtnDown; - FX_DWORD m_dwTTOStyles; - int32_t m_iTTOAlign; - CFX_RectF m_rtAnchor; - FWL_HTIMER m_hTimerShow; - FWL_HTIMER m_hTimerHide; - CFWL_ToolTipTimer* m_pTimer; - CFWL_ToolTipTimer m_TimerShow; - CFWL_ToolTipTimer m_TimerHide; - friend class CFWL_ToolTipImpDelegate; - friend class CFWL_ToolTipTimer; -}; -class CFWL_ToolTipImpDelegate : public CFWL_WidgetImpDelegate { - public: - CFWL_ToolTipImpDelegate(CFWL_ToolTipImp* pOwner); - int32_t OnProcessMessage(CFWL_Message* pMessage) override; - FWL_ERR OnProcessEvent(CFWL_Event* pEvent) override; - FWL_ERR OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL) override; - - protected: - void OnFocusChanged(CFWL_Message* pMsg, FX_BOOL bSet = TRUE); - void OnLButtonDown(CFWL_MsgMouse* pMsg); - void OnLButtonUp(CFWL_MsgMouse* pMsg); - void OnMouseMove(CFWL_MsgMouse* pMsg); - void OnMouseLeave(CFWL_MsgMouse* pMsg); - void OnKeyDown(CFWL_MsgKey* pMsg); - CFWL_ToolTipImp* m_pOwner; -}; - -#endif // XFA_SRC_FWL_BASEWIDGET_FWL_TOOLTIPCTRLIMP_H_ diff --git a/xfa/src/fwl/basewidget/fxmath_barcodeimp.cpp b/xfa/src/fwl/basewidget/fxmath_barcodeimp.cpp deleted file mode 100644 index 8c9bfe432c..0000000000 --- a/xfa/src/fwl/basewidget/fxmath_barcodeimp.cpp +++ /dev/null @@ -1,385 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fwl/basewidget/fxmath_barcodeimp.h" - -static CBC_CodeBase* FX_Barcode_CreateBarCodeEngineObject(BC_TYPE type) { - switch (type) { - case BC_CODE39: - return new CBC_Code39(); - case BC_CODABAR: - return new CBC_Codabar(); - case BC_CODE128: - return new CBC_Code128(BC_CODE128_B); - case BC_CODE128_B: - return new CBC_Code128(BC_CODE128_B); - case BC_CODE128_C: - return new CBC_Code128(BC_CODE128_C); - case BC_EAN8: - return new CBC_EAN8(); - case BC_UPCA: - return new CBC_UPCA(); - case BC_EAN13: - return new CBC_EAN13(); - case BC_QR_CODE: - return new CBC_QRCode(); - case BC_PDF417: - return new CBC_PDF417I(); - case BC_DATAMATRIX: - return new CBC_DataMatrix(); - case BC_UNKNOWN: - default: - return NULL; - } -} -CFX_Barcode::CFX_Barcode() {} -CFX_Barcode::~CFX_Barcode() { - if (m_pBCEngine) { - delete m_pBCEngine; - m_pBCEngine = NULL; - } -} -FX_BOOL CFX_Barcode::Crreate(BC_TYPE type) { - m_pBCEngine = FX_Barcode_CreateBarCodeEngineObject(type); - return m_pBCEngine != NULL; -} -void CFX_Barcode::Release() { - delete this; -} -BC_TYPE CFX_Barcode::GetType() { - return m_pBCEngine ? m_pBCEngine->GetType() : BC_UNKNOWN; -} -FX_BOOL CFX_Barcode::SetCharEncoding(BC_CHAR_ENCODING encoding) { - return m_pBCEngine ? m_pBCEngine->SetCharEncoding(encoding) : FALSE; -} -FX_BOOL CFX_Barcode::SetModuleHeight(int32_t moduleHeight) { - return m_pBCEngine ? m_pBCEngine->SetModuleHeight(moduleHeight) : FALSE; -} -FX_BOOL CFX_Barcode::SetModuleWidth(int32_t moduleWidth) { - return m_pBCEngine ? m_pBCEngine->SetModuleWidth(moduleWidth) : FALSE; -} -FX_BOOL CFX_Barcode::SetHeight(int32_t height) { - return m_pBCEngine ? m_pBCEngine->SetHeight(height) : FALSE; -} -FX_BOOL CFX_Barcode::SetWidth(int32_t width) { - return m_pBCEngine ? m_pBCEngine->SetWidth(width) : FALSE; -} -FX_BOOL CFX_Barcode::CheckContentValidity(const CFX_WideStringC& contents) { - switch (GetType()) { - case BC_CODE39: - case BC_CODABAR: - case BC_CODE128: - case BC_CODE128_B: - case BC_CODE128_C: - case BC_EAN8: - case BC_EAN13: - case BC_UPCA: - return m_pBCEngine - ? static_cast(m_pBCEngine) - ->CheckContentValidity(contents) - : TRUE; - default: - return TRUE; - } -} -FX_BOOL CFX_Barcode::SetPrintChecksum(FX_BOOL checksum) { - switch (GetType()) { - case BC_CODE39: - case BC_CODABAR: - case BC_CODE128: - case BC_CODE128_B: - case BC_CODE128_C: - case BC_EAN8: - case BC_EAN13: - case BC_UPCA: - return m_pBCEngine ? (static_cast(m_pBCEngine) - ->SetPrintChecksum(checksum), - TRUE) - : FALSE; - default: - return FALSE; - } -} -FX_BOOL CFX_Barcode::SetDataLength(int32_t length) { - switch (GetType()) { - case BC_CODE39: - case BC_CODABAR: - case BC_CODE128: - case BC_CODE128_B: - case BC_CODE128_C: - case BC_EAN8: - case BC_EAN13: - case BC_UPCA: - return m_pBCEngine ? (static_cast(m_pBCEngine) - ->SetDataLength(length), - TRUE) - : FALSE; - default: - return FALSE; - } -} -FX_BOOL CFX_Barcode::SetCalChecksum(int32_t state) { - switch (GetType()) { - case BC_CODE39: - case BC_CODABAR: - case BC_CODE128: - case BC_CODE128_B: - case BC_CODE128_C: - case BC_EAN8: - case BC_EAN13: - case BC_UPCA: - return m_pBCEngine ? (static_cast(m_pBCEngine) - ->SetCalChecksum(state), - TRUE) - : FALSE; - default: - return FALSE; - } -} -FX_BOOL CFX_Barcode::SetFont(CFX_Font* pFont) { - switch (GetType()) { - case BC_CODE39: - case BC_CODABAR: - case BC_CODE128: - case BC_CODE128_B: - case BC_CODE128_C: - case BC_EAN8: - case BC_EAN13: - case BC_UPCA: - return m_pBCEngine - ? static_cast(m_pBCEngine)->SetFont(pFont) - : FALSE; - default: - return FALSE; - } -} -FX_BOOL CFX_Barcode::SetFontSize(FX_FLOAT size) { - switch (GetType()) { - case BC_CODE39: - case BC_CODABAR: - case BC_CODE128: - case BC_CODE128_B: - case BC_CODE128_C: - case BC_EAN8: - case BC_EAN13: - case BC_UPCA: - return m_pBCEngine - ? (static_cast(m_pBCEngine)->SetFontSize(size), - TRUE) - : FALSE; - default: - return FALSE; - } -} -FX_BOOL CFX_Barcode::SetFontStyle(int32_t style) { - switch (GetType()) { - case BC_CODE39: - case BC_CODABAR: - case BC_CODE128: - case BC_CODE128_B: - case BC_CODE128_C: - case BC_EAN8: - case BC_EAN13: - case BC_UPCA: - return m_pBCEngine - ? (static_cast(m_pBCEngine)->SetFontStyle(style), - TRUE) - : FALSE; - default: - return FALSE; - } -} -FX_BOOL CFX_Barcode::SetFontColor(FX_ARGB color) { - switch (GetType()) { - case BC_CODE39: - case BC_CODABAR: - case BC_CODE128: - case BC_CODE128_B: - case BC_CODE128_C: - case BC_EAN8: - case BC_EAN13: - case BC_UPCA: - return m_pBCEngine - ? (static_cast(m_pBCEngine)->SetFontColor(color), - TRUE) - : FALSE; - default: - return FALSE; - } -} -FX_BOOL CFX_Barcode::SetTextLocation(BC_TEXT_LOC location) { - typedef FX_BOOL (CBC_CodeBase::*memptrtype)(BC_TEXT_LOC); - memptrtype memptr = NULL; - switch (GetType()) { - case BC_CODE39: - memptr = (memptrtype)&CBC_Code39::SetTextLocation; - break; - case BC_CODABAR: - memptr = (memptrtype)&CBC_Codabar::SetTextLocation; - break; - case BC_CODE128: - case BC_CODE128_B: - case BC_CODE128_C: - memptr = (memptrtype)&CBC_Code128::SetTextLocation; - break; - default: - break; - } - return m_pBCEngine && memptr ? (m_pBCEngine->*memptr)(location) : FALSE; -} -FX_BOOL CFX_Barcode::SetWideNarrowRatio(int32_t ratio) { - typedef FX_BOOL (CBC_CodeBase::*memptrtype)(int32_t); - memptrtype memptr = NULL; - switch (GetType()) { - case BC_CODE39: - memptr = (memptrtype)&CBC_Code39::SetWideNarrowRatio; - break; - case BC_CODABAR: - memptr = (memptrtype)&CBC_Codabar::SetWideNarrowRatio; - break; - default: - break; - } - return m_pBCEngine && memptr ? (m_pBCEngine->*memptr)(ratio) : FALSE; -} -FX_BOOL CFX_Barcode::SetStartChar(FX_CHAR start) { - typedef FX_BOOL (CBC_CodeBase::*memptrtype)(FX_CHAR); - memptrtype memptr = NULL; - switch (GetType()) { - case BC_CODABAR: - memptr = (memptrtype)&CBC_Codabar::SetStartChar; - break; - default: - break; - } - return m_pBCEngine && memptr ? (m_pBCEngine->*memptr)(start) : FALSE; -} -FX_BOOL CFX_Barcode::SetEndChar(FX_CHAR end) { - typedef FX_BOOL (CBC_CodeBase::*memptrtype)(FX_CHAR); - memptrtype memptr = NULL; - switch (GetType()) { - case BC_CODABAR: - memptr = (memptrtype)&CBC_Codabar::SetEndChar; - break; - default: - break; - } - return m_pBCEngine && memptr ? (m_pBCEngine->*memptr)(end) : FALSE; -} -FX_BOOL CFX_Barcode::SetVersion(int32_t version) { - typedef FX_BOOL (CBC_CodeBase::*memptrtype)(int32_t); - memptrtype memptr = NULL; - switch (GetType()) { - case BC_QR_CODE: - memptr = (memptrtype)&CBC_QRCode::SetVersion; - break; - default: - break; - } - return m_pBCEngine && memptr ? (m_pBCEngine->*memptr)(version) : FALSE; -} -FX_BOOL CFX_Barcode::SetErrorCorrectionLevel(int32_t level) { - typedef FX_BOOL (CBC_CodeBase::*memptrtype)(int32_t); - memptrtype memptr = NULL; - switch (GetType()) { - case BC_QR_CODE: - memptr = (memptrtype)&CBC_QRCode::SetErrorCorrectionLevel; - break; - case BC_PDF417: - memptr = (memptrtype)&CBC_PDF417I::SetErrorCorrectionLevel; - break; - default: - return FALSE; - } - return m_pBCEngine && memptr ? (m_pBCEngine->*memptr)(level) : FALSE; -} -FX_BOOL CFX_Barcode::SetTruncated(FX_BOOL truncated) { - typedef void (CBC_CodeBase::*memptrtype)(FX_BOOL); - memptrtype memptr = NULL; - switch (GetType()) { - case BC_PDF417: - memptr = (memptrtype)&CBC_PDF417I::SetTruncated; - break; - default: - break; - } - return m_pBCEngine && memptr ? ((m_pBCEngine->*memptr)(truncated), TRUE) - : FALSE; -} -#ifndef BCExceptionNO -#define BCExceptionNO 0 -#endif -#ifndef BCExceptionFormatException -#define BCExceptionFormatException 8 -#endif -#ifndef BCExceptionUnSupportedBarcode -#define BCExceptionUnSupportedBarcode 18 -#endif -FX_BOOL CFX_Barcode::Encode(const CFX_WideStringC& contents, - FX_BOOL isDevice, - int32_t& e) { - if (!m_pBCEngine) { - return FALSE; - } - return m_pBCEngine->Encode(contents, isDevice, e); -} -FX_BOOL CFX_Barcode::RenderDevice(CFX_RenderDevice* device, - const CFX_Matrix* matirx, - int32_t& e) { - if (!m_pBCEngine) { - return FALSE; - } - return m_pBCEngine->RenderDevice(device, matirx, e); -} -FX_BOOL CFX_Barcode::RenderBitmap(CFX_DIBitmap*& pOutBitmap, int32_t& e) { - if (!m_pBCEngine) { - return FALSE; - } - return m_pBCEngine->RenderBitmap(pOutBitmap, e); -} -#define BC_TYPE_MIN BC_CODE39 -#define BC_TYPE_MAX BC_DATAMATRIX -CFX_WideString CFX_Barcode::Decode(uint8_t* buf, - int32_t width, - int32_t height, - int32_t& errorCode) { - for (BC_TYPE t = BC_TYPE_MIN; t <= BC_TYPE_MAX; - t = (BC_TYPE)((int32_t)t + 1)) { - CBC_CodeBase* pTmpEngine = FX_Barcode_CreateBarCodeEngineObject(t); - if (!pTmpEngine) { - continue; - } - CFX_WideString ret = pTmpEngine->Decode(buf, width, height, errorCode); - if (errorCode == BCExceptionNO) { - return ret; - } - } - errorCode = BCExceptionUnSupportedBarcode; - return CFX_WideString(); -} -CFX_WideString CFX_Barcode::Decode(CFX_DIBitmap* pBitmap, int32_t& errorCode) { - for (BC_TYPE t = BC_TYPE_MIN; t <= BC_TYPE_MAX; - t = (BC_TYPE)((int32_t)t + 1)) { - CBC_CodeBase* pTmpEngine = FX_Barcode_CreateBarCodeEngineObject(t); - if (!pTmpEngine) { - continue; - } - CFX_WideString ret = pTmpEngine->Decode(pBitmap, errorCode); - if (errorCode == BCExceptionNO) { - return ret; - } - } - errorCode = BCExceptionUnSupportedBarcode; - return CFX_WideString(); -} -IFX_Barcode* FX_Barcode_Create(BC_TYPE type) { - CFX_Barcode* pBarcode = new CFX_Barcode; - if (pBarcode->Crreate(type)) { - return pBarcode; - } - pBarcode->Release(); - return NULL; -} diff --git a/xfa/src/fwl/basewidget/fxmath_barcodeimp.h b/xfa/src/fwl/basewidget/fxmath_barcodeimp.h deleted file mode 100644 index 22cb97bcc4..0000000000 --- a/xfa/src/fwl/basewidget/fxmath_barcodeimp.h +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FWL_BASEWIDGET_FXMATH_BARCODEIMP_H_ -#define XFA_SRC_FWL_BASEWIDGET_FXMATH_BARCODEIMP_H_ - -#include "xfa/include/fwl/basewidget/fxmath_barcode.h" - -class CFX_Barcode : public IFX_Barcode { - public: - CFX_Barcode(); - ~CFX_Barcode(); - FX_BOOL Crreate(BC_TYPE type); - virtual void Release(); - virtual BC_TYPE GetType(); - virtual FX_BOOL Encode(const CFX_WideStringC& contents, - FX_BOOL isDevice, - int32_t& e); - virtual FX_BOOL RenderDevice(CFX_RenderDevice* device, - const CFX_Matrix* matirx, - int32_t& e); - virtual FX_BOOL RenderBitmap(CFX_DIBitmap*& pOutBitmap, int32_t& e); - virtual CFX_WideString Decode(uint8_t* buf, - int32_t width, - int32_t height, - int32_t& errorCode); - virtual CFX_WideString Decode(CFX_DIBitmap* pBitmap, int32_t& errorCode); - virtual FX_BOOL SetCharEncoding(BC_CHAR_ENCODING encoding); - virtual FX_BOOL SetModuleHeight(int32_t moduleHeight); - virtual FX_BOOL SetModuleWidth(int32_t moduleWidth); - virtual FX_BOOL SetHeight(int32_t height); - virtual FX_BOOL SetWidth(int32_t width); - virtual FX_BOOL CheckContentValidity(const CFX_WideStringC& contents); - virtual FX_BOOL SetPrintChecksum(FX_BOOL checksum); - virtual FX_BOOL SetDataLength(int32_t length); - virtual FX_BOOL SetCalChecksum(int32_t state); - virtual FX_BOOL SetFont(CFX_Font* pFont); - virtual FX_BOOL SetFontSize(FX_FLOAT size); - virtual FX_BOOL SetFontStyle(int32_t style); - virtual FX_BOOL SetFontColor(FX_ARGB color); - virtual FX_BOOL SetTextLocation(BC_TEXT_LOC location); - virtual FX_BOOL SetWideNarrowRatio(int32_t ratio); - virtual FX_BOOL SetStartChar(FX_CHAR start); - virtual FX_BOOL SetEndChar(FX_CHAR end); - virtual FX_BOOL SetVersion(int32_t version); - virtual FX_BOOL SetErrorCorrectionLevel(int32_t level); - virtual FX_BOOL SetTruncated(FX_BOOL truncated); - - protected: - CBC_CodeBase* m_pBCEngine; -}; - -#endif // XFA_SRC_FWL_BASEWIDGET_FXMATH_BARCODEIMP_H_ diff --git a/xfa/src/fwl/core/fwl_appimp.cpp b/xfa/src/fwl/core/fwl_appimp.cpp deleted file mode 100644 index 43a3d0badf..0000000000 --- a/xfa/src/fwl/core/fwl_appimp.cpp +++ /dev/null @@ -1,114 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fwl/core/fwl_appimp.h" - -#include "xfa/include/fwl/adapter/fwl_adapterwidgetmgr.h" -#include "xfa/include/fwl/core/fwl_app.h" -#include "xfa/include/fwl/core/fwl_widget.h" -#include "xfa/src/fwl/core/fwl_noteimp.h" -#include "xfa/src/fwl/core/fwl_targetimp.h" -#include "xfa/src/fwl/core/fwl_threadimp.h" -#include "xfa/src/fwl/core/fwl_widgetmgrimp.h" - -IFWL_App* IFWL_App::Create(IFWL_AdapterNative* pAdapter) { - IFWL_App* pApp = new IFWL_App; - pApp->SetImpl(new CFWL_AppImp(pApp, pAdapter)); - return pApp; -} -FWL_ERR IFWL_App::Initialize() { - return static_cast(GetImpl())->Initialize(); -} -FWL_ERR IFWL_App::Finalize() { - return static_cast(GetImpl())->Finalize(); -} -IFWL_AdapterNative* IFWL_App::GetAdapterNative() { - return static_cast(GetImpl())->GetAdapterNative(); -} -IFWL_WidgetMgr* IFWL_App::GetWidgetMgr() { - return static_cast(GetImpl())->GetWidgetMgr(); -} -IFWL_ThemeProvider* IFWL_App::GetThemeProvider() { - return static_cast(GetImpl())->GetThemeProvider(); -} -FWL_ERR IFWL_App::SetThemeProvider(IFWL_ThemeProvider* pThemeProvider) { - return static_cast(GetImpl())->SetThemeProvider(pThemeProvider); -} -FWL_ERR IFWL_App::Exit(int32_t iExitCode) { - return static_cast(GetImpl())->Exit(iExitCode); -} - -CFWL_AppImp::CFWL_AppImp(IFWL_App* pIface, IFWL_AdapterNative* pAdapter) - : CFWL_NoteThreadImp(pIface), - m_pAdapterNative(pAdapter), - m_pThemeProvider(nullptr) {} - -CFWL_AppImp::~CFWL_AppImp() { - CFWL_ToolTipContainer::DeleteInstance(); -} - -FWL_ERR CFWL_AppImp::Initialize() { - if (!m_pWidgetMgr) { - m_pWidgetMgr.reset(new CFWL_WidgetMgr(m_pAdapterNative)); - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_AppImp::Finalize() { - m_pWidgetMgr.reset(); - return FWL_ERR_Succeeded; -} -IFWL_AdapterNative* CFWL_AppImp::GetAdapterNative() const { - return m_pAdapterNative; -} -IFWL_AdapterWidgetMgr* FWL_GetAdapterWidgetMgr() { - return static_cast(FWL_GetWidgetMgr()) - ->GetAdapterWidgetMgr(); -} -IFWL_WidgetMgr* CFWL_AppImp::GetWidgetMgr() const { - return m_pWidgetMgr.get(); -} -FWL_ERR CFWL_AppImp::SetThemeProvider(IFWL_ThemeProvider* pThemeProvider) { - m_pThemeProvider = pThemeProvider; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_AppImp::Exit(int32_t iExitCode) { - while (m_pNoteDriver->PopNoteLoop()) { - continue; - } - return m_pWidgetMgr->GetAdapterWidgetMgr()->Exit(0); -} -IFWL_ThemeProvider* CFWL_AppImp::GetThemeProvider() const { - return m_pThemeProvider; -} -IFWL_AdapterNative* FWL_GetAdapterNative() { - IFWL_App* pApp = FWL_GetApp(); - if (!pApp) - return NULL; - return pApp->GetAdapterNative(); -} -IFWL_ThemeProvider* FWL_GetThemeProvider() { - return NULL; -} -static IFWL_App* _theApp = NULL; -IFWL_App* FWL_GetApp() { - return _theApp; -} -void FWL_SetApp(IFWL_App* pApp) { - _theApp = pApp; -} -FWL_ERR FWL_SetFullScreen(IFWL_Widget* pWidget, FX_BOOL bFullScreen) { - if (!pWidget) - return FWL_ERR_Succeeded; - IFWL_NoteThread* pNoteTread = pWidget->GetOwnerThread(); - if (!pNoteTread) - return FWL_ERR_Succeeded; - CFWL_NoteDriver* pNoteDriver = - static_cast(pNoteTread->GetNoteDriver()); - if (!pNoteTread) - return FWL_ERR_Succeeded; - pNoteDriver->NotifyFullScreenMode(pWidget, bFullScreen); - return FWL_GetAdapterWidgetMgr()->SetFullScreen(pWidget, bFullScreen); -} diff --git a/xfa/src/fwl/core/fwl_appimp.h b/xfa/src/fwl/core/fwl_appimp.h deleted file mode 100644 index fa4ffecc65..0000000000 --- a/xfa/src/fwl/core/fwl_appimp.h +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FWL_CORE_FWL_APPIMP_H_ -#define XFA_SRC_FWL_CORE_FWL_APPIMP_H_ - -#include - -#include "xfa/src/fwl/core/fwl_threadimp.h" - -class CFWL_WidgetMgr; -class IFWL_AdapterNative; -class IFWL_WidgetMgr; -class IFWL_ThemeProvider; -class IFWL_App; - -class CFWL_AppImp : public CFWL_NoteThreadImp { - public: - CFWL_AppImp(IFWL_App* pIface, IFWL_AdapterNative* pAdapter); - virtual ~CFWL_AppImp(); - virtual FWL_ERR Initialize(); - virtual FWL_ERR Finalize(); - virtual IFWL_AdapterNative* GetAdapterNative() const; - virtual IFWL_WidgetMgr* GetWidgetMgr() const; - virtual IFWL_ThemeProvider* GetThemeProvider() const; - virtual FWL_ERR SetThemeProvider(IFWL_ThemeProvider* pThemeProvider); - virtual FWL_ERR Exit(int32_t iExitCode = 0); - - protected: - IFWL_AdapterNative* const m_pAdapterNative; - std::unique_ptr m_pWidgetMgr; - IFWL_ThemeProvider* m_pThemeProvider; -}; - -#endif // XFA_SRC_FWL_CORE_FWL_APPIMP_H_ diff --git a/xfa/src/fwl/core/fwl_contentimp.cpp b/xfa/src/fwl/core/fwl_contentimp.cpp deleted file mode 100644 index d415e33a26..0000000000 --- a/xfa/src/fwl/core/fwl_contentimp.cpp +++ /dev/null @@ -1,94 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fwl/core/fwl_contentimp.h" - -#include "xfa/include/fwl/core/fwl_content.h" -#include "xfa/src/fwl/core/fwl_noteimp.h" -#include "xfa/src/fwl/core/fwl_targetimp.h" -#include "xfa/src/fwl/core/fwl_threadimp.h" -#include "xfa/src/fwl/core/fwl_widgetimp.h" -#include "xfa/src/fwl/core/fwl_widgetmgrimp.h" - -FWL_ERR IFWL_Content::InsertWidget(IFWL_Widget* pChild, int32_t nIndex) { - return static_cast(GetImpl())->InsertWidget(pChild, nIndex); -} -FWL_ERR IFWL_Content::RemoveWidget(IFWL_Widget* pWidget) { - return static_cast(GetImpl())->RemoveWidget(pWidget); -} -FWL_ERR IFWL_Content::RemoveAllWidgets() { - return static_cast(GetImpl())->RemoveAllWidgets(); -} -FWL_ERR IFWL_Content::GetMinSize(FX_FLOAT& fWidth, FX_FLOAT& fHeight) { - return static_cast(GetImpl())->GetMinSize(fWidth, fHeight); -} -FWL_ERR IFWL_Content::SetMinSize(FX_FLOAT fWidth, FX_FLOAT fHeight) { - return static_cast(GetImpl())->SetMinSize(fWidth, fHeight); -} -FWL_ERR IFWL_Content::GetMaxSize(FX_FLOAT& fWidth, FX_FLOAT& fHeight) { - return static_cast(GetImpl())->GetMaxSize(fWidth, fHeight); -} -FWL_ERR IFWL_Content::SetMaxSize(FX_FLOAT fWidth, FX_FLOAT fHeight) { - return static_cast(GetImpl())->SetMaxSize(fWidth, fHeight); -} -IFWL_Content::IFWL_Content() {} -CFWL_ContentImp::CFWL_ContentImp(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) - : CFWL_WidgetImp(properties, pOuter), - m_fWidthMin(0), - m_fWidthMax(10000), - m_fHeightMin(0), - m_fHeightMax(10000) {} -CFWL_ContentImp::~CFWL_ContentImp() {} -FWL_ERR CFWL_ContentImp::InsertWidget(IFWL_Widget* pChild, int32_t nIndex) { - if (!pChild) - return FWL_ERR_Indefinite; - pChild->SetParent(m_pInterface); - if (nIndex == -1) { - return FWL_ERR_Succeeded; - } - CFWL_WidgetMgr* pMgr = static_cast(FWL_GetWidgetMgr()); - if (!pMgr) - return FWL_ERR_Indefinite; - pMgr->SetWidgetIndex(pChild, nIndex); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ContentImp::RemoveWidget(IFWL_Widget* pWidget) { - if (!pWidget) - return FWL_ERR_Indefinite; - pWidget->SetParent(NULL); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ContentImp::RemoveAllWidgets() { - CFWL_WidgetMgr* pMgr = static_cast(FWL_GetWidgetMgr()); - if (!pMgr) - return FWL_ERR_Indefinite; - while (IFWL_Widget* widget = - pMgr->GetWidget(m_pInterface, FWL_WGTRELATION_FirstChild)) { - pMgr->SetParent(NULL, widget); - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ContentImp::GetMinSize(FX_FLOAT& fWidth, FX_FLOAT& fHeight) { - fWidth = m_fWidthMin; - fHeight = m_fHeightMin; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ContentImp::SetMinSize(FX_FLOAT fWidth, FX_FLOAT fHeight) { - m_fWidthMin = fWidth; - m_fHeightMin = fHeight; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ContentImp::GetMaxSize(FX_FLOAT& fWidth, FX_FLOAT& fHeight) { - fWidth = m_fWidthMax; - fHeight = m_fHeightMax; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ContentImp::SetMaxSize(FX_FLOAT fWidth, FX_FLOAT fHeight) { - m_fWidthMax = fWidth; - m_fHeightMax = fHeight; - return FWL_ERR_Succeeded; -} diff --git a/xfa/src/fwl/core/fwl_contentimp.h b/xfa/src/fwl/core/fwl_contentimp.h deleted file mode 100644 index d2b0277a86..0000000000 --- a/xfa/src/fwl/core/fwl_contentimp.h +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FWL_CORE_FWL_CONTENTIMP_H_ -#define XFA_SRC_FWL_CORE_FWL_CONTENTIMP_H_ - -#include "xfa/src/fwl/core/fwl_widgetimp.h" - -class IFWL_Widget; - -class CFWL_ContentImp : public CFWL_WidgetImp { - public: - CFWL_ContentImp(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter); - - virtual ~CFWL_ContentImp(); - virtual FWL_ERR InsertWidget(IFWL_Widget* pChild, int32_t nIndex = -1); - virtual FWL_ERR RemoveWidget(IFWL_Widget* pWidget); - virtual FWL_ERR RemoveAllWidgets(); - FWL_ERR GetMinSize(FX_FLOAT& fWidth, FX_FLOAT& fHeight); - FWL_ERR SetMinSize(FX_FLOAT fWidth, FX_FLOAT fHeight); - FWL_ERR GetMaxSize(FX_FLOAT& fWidth, FX_FLOAT& fHeight); - FWL_ERR SetMaxSize(FX_FLOAT fWidth, FX_FLOAT fHeight); - - protected: - FX_FLOAT m_fWidthMin; - FX_FLOAT m_fWidthMax; - FX_FLOAT m_fHeightMin; - FX_FLOAT m_fHeightMax; -}; - -#endif // XFA_SRC_FWL_CORE_FWL_CONTENTIMP_H_ diff --git a/xfa/src/fwl/core/fwl_formimp.cpp b/xfa/src/fwl/core/fwl_formimp.cpp deleted file mode 100644 index 558ee00f9c..0000000000 --- a/xfa/src/fwl/core/fwl_formimp.cpp +++ /dev/null @@ -1,1175 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fwl/core/fwl_formimp.h" - -#include "xfa/include/fwl/adapter/fwl_adapterwidgetmgr.h" -#include "xfa/include/fwl/core/fwl_app.h" -#include "xfa/include/fwl/core/fwl_content.h" -#include "xfa/include/fwl/core/fwl_theme.h" -#include "xfa/src/fde/tto/fde_textout.h" -#include "xfa/src/fwl/basewidget/fwl_formproxyimp.h" -#include "xfa/src/fwl/core/fwl_appimp.h" -#include "xfa/src/fwl/core/fwl_noteimp.h" -#include "xfa/src/fwl/core/fwl_panelimp.h" -#include "xfa/src/fwl/core/fwl_targetimp.h" -#include "xfa/src/fwl/core/fwl_threadimp.h" -#include "xfa/src/fwl/core/fwl_widgetimp.h" -#include "xfa/src/fwl/core/fwl_widgetmgrimp.h" - -#define FWL_SYSBTNSIZE 21 -#define FWL_SYSBTNMARGIN 5 -#define FWL_SYSBTNSPAN 2 -#define FWL_CornerEnlarge 10 - -// static -IFWL_Form* IFWL_Form::CreateFormProxy(CFWL_WidgetImpProperties& properties, - CFX_WideString* classname, - IFWL_Widget* pOuter) { - IFWL_Form* pForm = new IFWL_Form; - CFWL_FormProxyImp* pFormProxyImpl = new CFWL_FormProxyImp(properties, pOuter); - pForm->SetImpl(pFormProxyImpl); - pFormProxyImpl->SetInterface(pForm); - return pForm; -} -IFWL_Form::IFWL_Form() {} -FWL_FORMSIZE IFWL_Form::GetFormSize() { - return static_cast(GetImpl())->GetFormSize(); -} -FWL_ERR IFWL_Form::SetFormSize(FWL_FORMSIZE eFormSize) { - return static_cast(GetImpl())->SetFormSize(eFormSize); -} -IFWL_Widget* IFWL_Form::DoModal() { - return static_cast(GetImpl())->DoModal(); -} -IFWL_Widget* IFWL_Form::DoModal(FX_DWORD& dwCommandID) { - return static_cast(GetImpl())->DoModal(dwCommandID); -} -FWL_ERR IFWL_Form::EndDoModal() { - return static_cast(GetImpl())->EndDoModal(); -} -FWL_ERR IFWL_Form::SetBorderRegion(CFX_Path* pPath) { - return static_cast(GetImpl())->SetBorderRegion(pPath); -} - -CFWL_FormImp::CFWL_FormImp(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) - : CFWL_PanelImp(properties, pOuter), - m_pCloseBox(NULL), - m_pMinBox(NULL), - m_pMaxBox(NULL), - m_pCaptionBox(NULL), - m_pNoteLoop(NULL), - m_pSubFocus(NULL), - m_fCXBorder(0), - m_fCYBorder(0), - m_iCaptureBtn(-1), - m_iSysBox(0), - m_eResizeType(FORM_RESIZETYPE_None), - m_bLButtonDown(FALSE), - m_bMaximized(FALSE), - m_bSetMaximize(FALSE), - m_bCustomizeLayout(FALSE), - m_eFormSize(FWL_FORMSIZE_Manual), - m_bDoModalFlag(FALSE), - m_pBigIcon(NULL), - m_pSmallIcon(NULL), - m_bMouseIn(FALSE) { - m_rtRelative.Reset(); - m_rtCaption.Reset(); - m_rtRestore.Reset(); - m_rtCaptionText.Reset(); - m_rtIcon.Reset(); -} -CFWL_FormImp::~CFWL_FormImp() { - RemoveSysButtons(); - delete m_pNoteLoop; -} -FWL_ERR CFWL_FormImp::GetClassName(CFX_WideString& wsClass) const { - wsClass = FWL_CLASS_Form; - return FWL_ERR_Succeeded; -} -FX_DWORD CFWL_FormImp::GetClassID() const { - return FWL_CLASSHASH_Form; -} -FX_BOOL CFWL_FormImp::IsInstance(const CFX_WideStringC& wsClass) const { - if (wsClass == CFX_WideStringC(FWL_CLASS_Form)) { - return TRUE; - } - return CFWL_PanelImp::IsInstance(wsClass); -} -FWL_ERR CFWL_FormImp::Initialize() { - if (CFWL_WidgetImp::Initialize() != FWL_ERR_Succeeded) - return FWL_ERR_Indefinite; - RegisterForm(); - RegisterEventTarget(); - m_pDelegate = new CFWL_FormImpDelegate(this); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_FormImp::Finalize() { - delete m_pDelegate; - m_pDelegate = nullptr; - UnregisterEventTarget(); - UnRegisterForm(); - return CFWL_WidgetImp::Finalize(); -} -FWL_ERR CFWL_FormImp::GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize) { - if (bAutoSize) { - rect.Reset(); - FX_FLOAT fCapHeight = GetCaptionHeight(); - FX_FLOAT fCXBorder = GetBorderSize(TRUE); - FX_FLOAT fCYBorder = GetBorderSize(FALSE); - FX_FLOAT fEdge = GetEdgeWidth(); - if (m_pContent) { - m_pContent->GetWidgetRect(rect, TRUE); - } - rect.height += fCapHeight + fCYBorder + fEdge + fEdge; - rect.width += fCXBorder + fCXBorder + fEdge + fEdge; - } else { - rect = m_pProperties->m_rtWidget; - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_FormImp::GetClientRect(CFX_RectF& rect) { - if ((m_pProperties->m_dwStyles & FWL_WGTSTYLE_Caption) == 0) { - rect = m_pProperties->m_rtWidget; - rect.Offset(-rect.left, -rect.top); - return FWL_ERR_Succeeded; - } -#ifdef FWL_UseMacSystemBorder - rect = m_rtRelative; - CFWL_WidgetMgr* pWidgetMgr = static_cast(FWL_GetWidgetMgr()); - if (!pWidgetMgr) - return FWL_ERR_Indefinite; - IFWL_AdapterWidgetMgr* adapterWidgetMgr = pWidgetMgr->GetAdapterWidgetMgr(); - FX_FLOAT l, t, r, b; - l = t = r = b = 0; - adapterWidgetMgr->GetSystemBorder(l, t, r, b); - rect.Deflate(l, t, r, b); - rect.left = rect.top = 0; - return FWL_ERR_Succeeded; -#else - FX_FLOAT x = 0; - FX_FLOAT y = 0; - FX_FLOAT t = 0; - IFWL_ThemeProvider* pTheme = m_pProperties->m_pThemeProvider; - if (pTheme) { - CFWL_ThemePart part; - part.m_pWidget = m_pInterface; - x = *static_cast( - pTheme->GetCapacity(&part, FWL_WGTCAPACITY_CXBorder)); - y = *static_cast( - pTheme->GetCapacity(&part, FWL_WGTCAPACITY_CYBorder)); - t = *static_cast( - pTheme->GetCapacity(&part, FWL_WGTCAPACITY_FRM_CYCaption)); - } - rect = m_pProperties->m_rtWidget; - rect.Offset(-rect.left, -rect.top); - rect.Deflate(x, t, x, y); - return FWL_ERR_Succeeded; -#endif -} -FWL_ERR CFWL_FormImp::Update() { - if (m_iLock > 0) { - return FWL_ERR_Succeeded; - } - if (!m_pProperties->m_pThemeProvider) { - m_pProperties->m_pThemeProvider = GetAvailableTheme(); - } -#ifdef FWL_UseMacSystemBorder -#else - SetThemeData(); - if (m_pProperties->m_dwStyles & FWL_WGTSTYLE_Icon) { - UpdateIcon(); - } -#endif - UpdateCaption(); - Layout(); - return FWL_ERR_Succeeded; -} -FX_DWORD CFWL_FormImp::HitTest(FX_FLOAT fx, FX_FLOAT fy) { - (void)GetAvailableTheme(); - if (m_pCloseBox && m_pCloseBox->m_rtBtn.Contains(fx, fy)) { - return FWL_WGTHITTEST_CloseBox; - } - if (m_pMaxBox && m_pMaxBox->m_rtBtn.Contains(fx, fy)) { - return FWL_WGTHITTEST_MaxBox; - } - if (m_pMinBox && m_pMinBox->m_rtBtn.Contains(fx, fy)) { - return FWL_WGTHITTEST_MinBox; - } - CFX_RectF rtCap; - rtCap.Set(m_rtCaption.left + m_fCYBorder, m_rtCaption.top + m_fCXBorder, - m_rtCaption.width - FWL_SYSBTNSIZE * m_iSysBox - 2 * m_fCYBorder, - m_rtCaption.height - m_fCXBorder); - if (rtCap.Contains(fx, fy)) { - return FWL_WGTHITTEST_Titlebar; - } - if ((m_pProperties->m_dwStyles & FWL_WGTSTYLE_Border) && - (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_FRM_Resize)) { - FX_FLOAT fWidth = - m_rtRelative.width - 2 * (m_fCYBorder + FWL_CornerEnlarge); - FX_FLOAT fHeight = - m_rtRelative.height - 2 * (m_fCXBorder + FWL_CornerEnlarge); - CFX_RectF rt; - rt.Set(0, m_fCXBorder + FWL_CornerEnlarge, m_fCYBorder, fHeight); - if (rt.Contains(fx, fy)) { - return FWL_WGTHITTEST_Left; - } - rt.Set(m_rtRelative.width - m_fCYBorder, m_fCXBorder + FWL_CornerEnlarge, - m_fCYBorder, fHeight); - if (rt.Contains(fx, fy)) { - return FWL_WGTHITTEST_Right; - } - rt.Set(m_fCYBorder + FWL_CornerEnlarge, 0, fWidth, m_fCXBorder); - if (rt.Contains(fx, fy)) { - return FWL_WGTHITTEST_Top; - } - rt.Set(m_fCYBorder + FWL_CornerEnlarge, m_rtRelative.height - m_fCXBorder, - fWidth, m_fCXBorder); - if (rt.Contains(fx, fy)) { - return FWL_WGTHITTEST_Bottom; - } - rt.Set(0, 0, m_fCYBorder + FWL_CornerEnlarge, - m_fCXBorder + FWL_CornerEnlarge); - if (rt.Contains(fx, fy)) { - return FWL_WGTHITTEST_LeftTop; - } - rt.Set(0, m_rtRelative.height - m_fCXBorder - FWL_CornerEnlarge, - m_fCYBorder + FWL_CornerEnlarge, m_fCXBorder + FWL_CornerEnlarge); - if (rt.Contains(fx, fy)) { - return FWL_WGTHITTEST_LeftBottom; - } - rt.Set(m_rtRelative.width - m_fCYBorder - FWL_CornerEnlarge, 0, - m_fCYBorder + FWL_CornerEnlarge, m_fCXBorder + FWL_CornerEnlarge); - if (rt.Contains(fx, fy)) { - return FWL_WGTHITTEST_RightTop; - } - rt.Set(m_rtRelative.width - m_fCYBorder - FWL_CornerEnlarge, - m_rtRelative.height - m_fCXBorder - FWL_CornerEnlarge, - m_fCYBorder + FWL_CornerEnlarge, m_fCXBorder + FWL_CornerEnlarge); - if (rt.Contains(fx, fy)) { - return FWL_WGTHITTEST_RightBottom; - } - } - return FWL_WGTHITTEST_Client; -} -FWL_ERR CFWL_FormImp::DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - if (!pGraphics) - return FWL_ERR_Indefinite; - if (!m_pProperties->m_pThemeProvider) - return FWL_ERR_Indefinite; - IFWL_ThemeProvider* pTheme = m_pProperties->m_pThemeProvider; - FX_BOOL bInactive = !IsActive(); - int32_t iState = - bInactive ? FWL_PARTSTATE_FRM_Inactive : FWL_PARTSTATE_FRM_Normal; - if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_FRM_NoDrawClient) == 0) { - DrawBackground(pGraphics, pTheme); - } -#ifdef FWL_UseMacSystemBorder - return FWL_ERR_Succeeded; -#endif - CFWL_ThemeBackground param; - param.m_pWidget = m_pInterface; - param.m_dwStates = iState; - param.m_pGraphics = pGraphics; - param.m_rtPart = m_rtRelative; - if (pMatrix) { - param.m_matrix.Concat(*pMatrix); - } - if (m_pProperties->m_dwStyles & FWL_WGTSTYLE_Border) { - param.m_iPart = FWL_PART_FRM_Border; - pTheme->DrawBackground(¶m); - } - if ((m_pProperties->m_dwStyleExes & FWL_WGTSTYLE_EdgeMask) != - FWL_WGTSTYLE_EdgeNone) { - CFX_RectF rtEdge; - GetEdgeRect(rtEdge); - param.m_iPart = FWL_PART_FRM_Edge; - param.m_rtPart = rtEdge; - param.m_dwStates = iState; - pTheme->DrawBackground(¶m); - } - if (m_pProperties->m_dwStyles & FWL_WGTSTYLE_Caption) { - param.m_iPart = FWL_PART_FRM_Caption; - param.m_dwStates = iState; - param.m_rtPart = m_rtCaption; - pTheme->DrawBackground(¶m); - DrawCaptionText(pGraphics, pTheme, pMatrix); - } else if (m_pProperties->m_dwStyles & FWL_WGTSTYLE_NarrowCaption) { - param.m_iPart = FWL_PART_FRM_NarrowCaption; - param.m_dwStates = iState; - param.m_rtPart = m_rtCaption; - pTheme->DrawBackground(¶m); - DrawCaptionText(pGraphics, pTheme, pMatrix); - } - if (m_pProperties->m_dwStyles & FWL_WGTSTYLE_Icon) { - param.m_iPart = FWL_PART_FRM_Icon; - if (HasIcon()) { - DrawIconImage(pGraphics, pTheme, pMatrix); - } - } -#if (_FX_OS_ == _FX_MACOSX_) - { - if (m_pCloseBox) { - param.m_iPart = FWL_PART_FRM_CloseBox; - param.m_dwStates = m_pCloseBox->GetPartState(); - if (m_pProperties->m_dwStates & FWL_WGTSTATE_Deactivated) { - param.m_dwStates = FWL_PARTSTATE_FRM_Disabled; - } else if (FWL_PARTSTATE_FRM_Normal == param.m_dwStates && m_bMouseIn) { - param.m_dwStates = FWL_PARTSTATE_FRM_Hover; - } - param.m_rtPart = m_pCloseBox->m_rtBtn; - pTheme->DrawBackground(¶m); - } - if (m_pMaxBox) { - param.m_iPart = FWL_PART_FRM_MaximizeBox; - param.m_dwStates = m_pMaxBox->GetPartState(); - if (m_pProperties->m_dwStates & FWL_WGTSTATE_Deactivated) { - param.m_dwStates = FWL_PARTSTATE_FRM_Disabled; - } else if (FWL_PARTSTATE_FRM_Normal == param.m_dwStates && m_bMouseIn) { - param.m_dwStates = FWL_PARTSTATE_FRM_Hover; - } - param.m_rtPart = m_pMaxBox->m_rtBtn; - param.m_dwData = m_bMaximized; - pTheme->DrawBackground(¶m); - } - if (m_pMinBox) { - param.m_iPart = FWL_PART_FRM_MinimizeBox; - param.m_dwStates = m_pMinBox->GetPartState(); - if (m_pProperties->m_dwStates & FWL_WGTSTATE_Deactivated) { - param.m_dwStates = FWL_PARTSTATE_FRM_Disabled; - } else if (FWL_PARTSTATE_FRM_Normal == param.m_dwStates && m_bMouseIn) { - param.m_dwStates = FWL_PARTSTATE_FRM_Hover; - } - param.m_rtPart = m_pMinBox->m_rtBtn; - pTheme->DrawBackground(¶m); - } - m_bMouseIn = FALSE; - } -#else - { - if (m_pCloseBox) { - param.m_iPart = FWL_PART_FRM_CloseBox; - param.m_dwStates = m_pCloseBox->GetPartState(); - param.m_rtPart = m_pCloseBox->m_rtBtn; - pTheme->DrawBackground(¶m); - } - if (m_pMaxBox) { - param.m_iPart = FWL_PART_FRM_MaximizeBox; - param.m_dwStates = m_pMaxBox->GetPartState(); - param.m_rtPart = m_pMaxBox->m_rtBtn; - param.m_dwData = m_bMaximized; - pTheme->DrawBackground(¶m); - } - if (m_pMinBox) { - param.m_iPart = FWL_PART_FRM_MinimizeBox; - param.m_dwStates = m_pMinBox->GetPartState(); - param.m_rtPart = m_pMinBox->m_rtBtn; - pTheme->DrawBackground(¶m); - } - } -#endif - return FWL_ERR_Succeeded; -} -FWL_FORMSIZE CFWL_FormImp::GetFormSize() { - return m_eFormSize; -} -FWL_ERR CFWL_FormImp::SetFormSize(FWL_FORMSIZE eFormSize) { - m_eFormSize = eFormSize; - return FWL_ERR_Succeeded; -} -IFWL_Widget* CFWL_FormImp::DoModal() { - IFWL_NoteThread* pThread = GetOwnerThread(); - if (!pThread) - return NULL; - IFWL_NoteDriver* pDriver = pThread->GetNoteDriver(); - if (!pDriver) - return NULL; - m_pNoteLoop = new CFWL_NoteLoop(this); - pDriver->PushNoteLoop(m_pNoteLoop); - m_bDoModalFlag = TRUE; - SetStates(FWL_WGTSTATE_Invisible, FALSE); - pDriver->Run(); -#if (_FX_OS_ == _FX_MACOSX_) -#else - pDriver->PopNoteLoop(); -#endif - delete m_pNoteLoop; - m_pNoteLoop = NULL; - return NULL; -} -IFWL_Widget* CFWL_FormImp::DoModal(FX_DWORD& dwCommandID) { - return DoModal(); -} -FWL_ERR CFWL_FormImp::EndDoModal() { - if (!m_pNoteLoop) - return FWL_ERR_Indefinite; - m_bDoModalFlag = FALSE; -#if (_FX_OS_ == _FX_MACOSX_) - m_pNoteLoop->EndModalLoop(); - IFWL_NoteThread* pThread = GetOwnerThread(); - if (!pThread) - return FWL_ERR_Indefinite; - CFWL_NoteDriver* pDriver = - static_cast(pThread->GetNoteDriver()); - if (!pDriver) - return FWL_ERR_Indefinite; - pDriver->PopNoteLoop(); - SetStates(FWL_WGTSTATE_Invisible, TRUE); - return FWL_ERR_Succeeded; -#else - SetStates(FWL_WGTSTATE_Invisible, TRUE); - return m_pNoteLoop->EndModalLoop(); -#endif -} -FWL_ERR CFWL_FormImp::SetBorderRegion(CFX_Path* pPath) { - return FWL_ERR_Succeeded; -} -void CFWL_FormImp::DrawBackground(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme) { - CFWL_ThemeBackground param; - param.m_pWidget = m_pInterface; - param.m_iPart = FWL_PART_FRM_Background; - param.m_pGraphics = pGraphics; - param.m_rtPart = m_rtRelative; - param.m_rtPart.Deflate(m_fCYBorder, m_rtCaption.height, m_fCYBorder, - m_fCXBorder); - pTheme->DrawBackground(¶m); -} -CFWL_WidgetImp* CFWL_FormImp::GetSubFocus() { - return m_pSubFocus; -} -void CFWL_FormImp::SetSubFocus(CFWL_WidgetImp* pWidget) { - m_pSubFocus = pWidget; -} -CFX_MapAccelerators& CFWL_FormImp::GetAccelerator() { - return m_mapAccelerators; -} -void CFWL_FormImp::SetAccelerator(CFX_MapAccelerators* pAccelerators) { - if (!pAccelerators) - return; - m_mapAccelerators.RemoveAll(); - FX_DWORD vrKey, rValue; - FX_POSITION pos = pAccelerators->GetStartPosition(); - while (pos) { - pAccelerators->GetNextAssoc(pos, vrKey, rValue); - m_mapAccelerators.SetAt(vrKey, rValue); - } -} -void CFWL_FormImp::ShowChildWidget(IFWL_Widget* pParent) { - IFWL_App* pApp = FWL_GetApp(); - if (!pApp) - return; - CFWL_WidgetMgr* pWidgetMgr = - static_cast(pApp->GetWidgetMgr()); - if (!pWidgetMgr) - return; - IFWL_Widget* pChild = - pWidgetMgr->GetWidget(pParent, FWL_WGTRELATION_FirstChild); - while (pChild) { - pWidgetMgr->ShowWidget_Native(pChild); - ShowChildWidget(pChild); - pChild = pWidgetMgr->GetWidget(pChild, FWL_WGTRELATION_NextSibling); - } -} -void CFWL_FormImp::RemoveSysButtons() { - m_rtCaption.Reset(); - if (m_pCloseBox) { - delete m_pCloseBox; - m_pCloseBox = NULL; - } - if (m_pMinBox) { - delete m_pMinBox; - m_pMinBox = NULL; - } - if (m_pMaxBox) { - delete m_pMaxBox; - m_pMaxBox = NULL; - } - if (m_pCaptionBox) { - delete m_pCaptionBox; - m_pCaptionBox = NULL; - } -} -void CFWL_FormImp::CalcContentRect(CFX_RectF& rtContent) { -#ifdef FWL_UseMacSystemBorder - rtContent = m_rtRelative; -#else - GetEdgeRect(rtContent); - if (HasEdge()) { - FX_FLOAT fEdge = GetEdgeWidth(); - rtContent.Deflate(fEdge, fEdge); - } -#endif -} -CFWL_SysBtn* CFWL_FormImp::GetSysBtnAtPoint(FX_FLOAT fx, FX_FLOAT fy) { - if (m_pCloseBox && m_pCloseBox->m_rtBtn.Contains(fx, fy)) { - return m_pCloseBox; - } - if (m_pMaxBox && m_pMaxBox->m_rtBtn.Contains(fx, fy)) { - return m_pMaxBox; - } - if (m_pMinBox && m_pMinBox->m_rtBtn.Contains(fx, fy)) { - return m_pMinBox; - } - if (m_pCaptionBox && m_pCaptionBox->m_rtBtn.Contains(fx, fy)) { - return m_pCaptionBox; - } - return NULL; -} -CFWL_SysBtn* CFWL_FormImp::GetSysBtnByState(FX_DWORD dwState) { - if (m_pCloseBox && (m_pCloseBox->m_dwState & dwState)) { - return m_pCloseBox; - } - if (m_pMaxBox && (m_pMaxBox->m_dwState & dwState)) { - return m_pMaxBox; - } - if (m_pMinBox && (m_pMinBox->m_dwState & dwState)) { - return m_pMinBox; - } - if (m_pCaptionBox && (m_pCaptionBox->m_dwState & dwState)) { - return m_pCaptionBox; - } - return NULL; -} -CFWL_SysBtn* CFWL_FormImp::GetSysBtnByIndex(int32_t nIndex) { - if (nIndex < 0) { - return NULL; - } - CFX_PtrArray arrBtn; - if (m_pMinBox) { - arrBtn.Add(m_pMinBox); - } - if (m_pMaxBox) { - arrBtn.Add(m_pMaxBox); - } - if (m_pCloseBox) { - arrBtn.Add(m_pCloseBox); - } - return static_cast(arrBtn[nIndex]); -} -int32_t CFWL_FormImp::GetSysBtnIndex(CFWL_SysBtn* pBtn) { - CFX_PtrArray arrBtn; - if (m_pMinBox) { - arrBtn.Add(m_pMinBox); - } - if (m_pMaxBox) { - arrBtn.Add(m_pMaxBox); - } - if (m_pCloseBox) { - arrBtn.Add(m_pCloseBox); - } - return arrBtn.Find(pBtn); -} -FX_FLOAT CFWL_FormImp::GetCaptionHeight() { - FX_DWORD dwCapacity = 0; - if (m_pProperties->m_dwStyles & FWL_WGTSTYLE_Caption) { - dwCapacity = FWL_WGTCAPACITY_FRM_CYCaption; - } else if (m_pProperties->m_dwStyles & FWL_WGTSTYLE_NarrowCaption) { - dwCapacity = FWL_WGTCAPACITY_FRM_CYNarrowCaption; - } - if (dwCapacity > 0) { - FX_FLOAT* pfCapHeight = - static_cast(GetThemeCapacity(dwCapacity)); - return pfCapHeight ? *pfCapHeight : 0; - } - return 0; -} -void CFWL_FormImp::DrawCaptionText(CFX_Graphics* pGs, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix) { - CFX_WideString wsText; - IFWL_DataProvider* pData = m_pProperties->m_pDataProvider; - pData->GetCaption(m_pInterface, wsText); - if (wsText.IsEmpty()) { - return; - } - CFWL_ThemeText textParam; - textParam.m_pWidget = m_pInterface; - textParam.m_iPart = FWL_PART_FRM_Caption; - textParam.m_dwStates = FWL_PARTSTATE_FRM_Normal; - textParam.m_pGraphics = pGs; - if (pMatrix) { - textParam.m_matrix.Concat(*pMatrix); - } - CFX_RectF rtText; - if (m_bCustomizeLayout) { - rtText = m_rtCaptionText; - rtText.top -= 5; - } else { - rtText = m_rtCaption; - FX_FLOAT fpos; - fpos = HasIcon() ? 29.0f : 13.0f; - rtText.left += fpos; - } - textParam.m_rtPart = rtText; - textParam.m_wsText = wsText; - textParam.m_dwTTOStyles = FDE_TTOSTYLE_SingleLine | FDE_TTOSTYLE_Ellipsis; - textParam.m_iTTOAlign = m_bCustomizeLayout ? FDE_TTOALIGNMENT_Center - : FDE_TTOALIGNMENT_CenterLeft; - pTheme->DrawText(&textParam); -} -void CFWL_FormImp::DrawIconImage(CFX_Graphics* pGs, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix) { - IFWL_FormDP* pData = - static_cast(m_pProperties->m_pDataProvider); - CFWL_ThemeBackground param; - param.m_pWidget = m_pInterface; - param.m_iPart = FWL_PART_FRM_Icon; - param.m_pGraphics = pGs; - param.m_pImage = pData->GetIcon(m_pInterface, FALSE); - param.m_rtPart = m_rtIcon; - if (pMatrix) { - param.m_matrix.Concat(*pMatrix); - } - pTheme->DrawBackground(¶m); -} -void CFWL_FormImp::GetEdgeRect(CFX_RectF& rtEdge) { - rtEdge = m_rtRelative; - if (m_pProperties->m_dwStyles & FWL_WGTSTYLE_Border) { - FX_FLOAT fCX = GetBorderSize(); - FX_FLOAT fCY = GetBorderSize(FALSE); - rtEdge.Deflate(fCX, m_rtCaption.Height(), fCX, fCY); - } -} -void CFWL_FormImp::SetWorkAreaRect() { - m_rtRestore = m_pProperties->m_rtWidget; - CFWL_WidgetMgr* pWidgetMgr = static_cast(FWL_GetWidgetMgr()); - if (!pWidgetMgr) - return; - m_bSetMaximize = TRUE; - pWidgetMgr->SetMaximize_Native(m_pInterface); - Repaint(&m_rtRelative); -} -void CFWL_FormImp::SetCursor(FX_FLOAT fx, FX_FLOAT fy) {} -void CFWL_FormImp::Layout() { - GetRelativeRect(m_rtRelative); -#ifndef FWL_UseMacSystemBorder - ReSetSysBtn(); -#endif - if (m_pContent) { - CFX_RectF rtClient; - GetClientRect(rtClient); - m_pContent->SetWidgetRect(rtClient); - m_pContent->Update(); - } -} -void CFWL_FormImp::ReSetSysBtn() { - m_fCXBorder = - *static_cast(GetThemeCapacity(FWL_WGTCAPACITY_CXBorder)); - m_fCYBorder = - *static_cast(GetThemeCapacity(FWL_WGTCAPACITY_CYBorder)); - RemoveSysButtons(); - IFWL_ThemeProvider* pTheme = m_pProperties->m_pThemeProvider; - m_bCustomizeLayout = pTheme->IsCustomizedLayout(m_pInterface); - FX_FLOAT fCapHeight = GetCaptionHeight(); - if (fCapHeight > 0) { - m_rtCaption = m_rtRelative; - m_rtCaption.height = fCapHeight; - } - m_iSysBox = 0; - if (m_pProperties->m_dwStyles & FWL_WGTSTYLE_CloseBox) { - m_pCloseBox = new CFWL_SysBtn; - if (m_bCustomizeLayout) { - CFWL_ThemeBackground param; - param.m_pWidget = m_pInterface; - param.m_iPart = FWL_PART_FRM_CloseBox; - pTheme->GetPartRect(¶m, m_pCloseBox->m_rtBtn); - } else { - m_pCloseBox->m_rtBtn.Set( - m_rtRelative.right() - FWL_SYSBTNMARGIN - FWL_SYSBTNSIZE, - FWL_SYSBTNMARGIN, FWL_SYSBTNSIZE, FWL_SYSBTNSIZE); - } - m_iSysBox++; - } - if (m_pProperties->m_dwStyles & FWL_WGTSTYLE_MaximizeBox) { - m_pMaxBox = new CFWL_SysBtn; - if (m_bCustomizeLayout) { - CFWL_ThemeBackground param; - param.m_pWidget = m_pInterface; - param.m_iPart = FWL_PART_FRM_MaximizeBox; - pTheme->GetPartRect(¶m, m_pMaxBox->m_rtBtn); - } else { - if (m_pCloseBox) { - m_pMaxBox->m_rtBtn.Set( - m_pCloseBox->m_rtBtn.left - FWL_SYSBTNSPAN - FWL_SYSBTNSIZE, - m_pCloseBox->m_rtBtn.top, FWL_SYSBTNSIZE, FWL_SYSBTNSIZE); - } else { - m_pMaxBox->m_rtBtn.Set( - m_rtRelative.right() - FWL_SYSBTNMARGIN - FWL_SYSBTNSIZE, - FWL_SYSBTNMARGIN, FWL_SYSBTNSIZE, FWL_SYSBTNSIZE); - } - } - m_iSysBox++; - } - if (m_pProperties->m_dwStyles & FWL_WGTSTYLE_MinimizeBox) { - m_pMinBox = new CFWL_SysBtn; - if (m_bCustomizeLayout) { - CFWL_ThemeBackground param; - param.m_pWidget = m_pInterface; - param.m_iPart = FWL_PART_FRM_MinimizeBox; - pTheme->GetPartRect(¶m, m_pMinBox->m_rtBtn); - } else { - if (m_pMaxBox) { - m_pMinBox->m_rtBtn.Set( - m_pMaxBox->m_rtBtn.left - FWL_SYSBTNSPAN - FWL_SYSBTNSIZE, - m_pMaxBox->m_rtBtn.top, FWL_SYSBTNSIZE, FWL_SYSBTNSIZE); - } else if (m_pCloseBox) { - m_pMinBox->m_rtBtn.Set( - m_pCloseBox->m_rtBtn.left - FWL_SYSBTNSPAN - FWL_SYSBTNSIZE, - m_pCloseBox->m_rtBtn.top, FWL_SYSBTNSIZE, FWL_SYSBTNSIZE); - } else { - m_pMinBox->m_rtBtn.Set( - m_rtRelative.right() - FWL_SYSBTNMARGIN - FWL_SYSBTNSIZE, - FWL_SYSBTNMARGIN, FWL_SYSBTNSIZE, FWL_SYSBTNSIZE); - } - } - m_iSysBox++; - } - IFWL_FormDP* pData = - static_cast(m_pProperties->m_pDataProvider); - if (m_pProperties->m_dwStyles & FWL_WGTSTYLE_Icon && - pData->GetIcon(m_pInterface, FALSE)) { - if (m_bCustomizeLayout) { - CFWL_ThemeBackground param; - param.m_pWidget = m_pInterface; - param.m_iPart = FWL_PART_FRM_Icon; - CFX_WideString wsText; - m_pProperties->m_pDataProvider->GetCaption(m_pInterface, wsText); - param.m_pData = &wsText; - pTheme->GetPartRect(¶m, m_rtIcon); - } else { - m_rtIcon.Set(5, (m_rtCaption.height - m_fSmallIconSz) / 2, m_fSmallIconSz, - m_fSmallIconSz); - } - } - if (m_bCustomizeLayout) { - CFWL_ThemeText parma; - parma.m_pWidget = m_pInterface; - parma.m_iPart = FWL_PART_FRM_HeadText; - m_pProperties->m_pDataProvider->GetCaption(m_pInterface, parma.m_wsText); - pTheme->GetPartRect(&parma, m_rtCaptionText); - } -} -void CFWL_FormImp::RegisterForm() { - IFWL_NoteThread* pThread = GetOwnerThread(); - if (!pThread) - return; - CFWL_NoteDriver* pDriver = - static_cast(pThread->GetNoteDriver()); - if (!pDriver) - return; - pDriver->RegisterForm(this); -} -void CFWL_FormImp::UnRegisterForm() { - IFWL_NoteThread* pThread = GetOwnerThread(); - if (!pThread) - return; - CFWL_NoteDriver* pDriver = - static_cast(pThread->GetNoteDriver()); - if (!pDriver) - return; - pDriver->UnRegisterForm(this); -} -FX_BOOL CFWL_FormImp::IsDoModal() { - return m_bDoModalFlag; -} -void CFWL_FormImp::SetThemeData() { - m_fSmallIconSz = - *static_cast(GetThemeCapacity(FWL_WGTCAPACITY_FRM_SmallIcon)); - m_fBigIconSz = - *static_cast(GetThemeCapacity(FWL_WGTCAPACITY_FRM_BigIcon)); -} -FX_BOOL CFWL_FormImp::HasIcon() { - IFWL_FormDP* pData = - static_cast(m_pProperties->m_pDataProvider); - return !!pData->GetIcon(m_pInterface, FALSE); -} -void CFWL_FormImp::UpdateIcon() { - CFWL_WidgetMgr* pWidgetMgr = static_cast(FWL_GetWidgetMgr()); - if (!pWidgetMgr) - return; - IFWL_FormDP* pData = - static_cast(m_pProperties->m_pDataProvider); - CFX_DIBitmap* pBigIcon = pData->GetIcon(m_pInterface, TRUE); - CFX_DIBitmap* pSmallIcon = pData->GetIcon(m_pInterface, FALSE); - if (pBigIcon && pBigIcon != m_pBigIcon) { - m_pBigIcon = pBigIcon; - pWidgetMgr->SetWidgetIcon_Native(m_pInterface, m_pBigIcon, TRUE); - } - if (pSmallIcon && pSmallIcon != m_pSmallIcon) { - m_pSmallIcon = pSmallIcon; - pWidgetMgr->SetWidgetIcon_Native(m_pInterface, m_pBigIcon, FALSE); - } -} -void CFWL_FormImp::UpdateCaption() { - CFWL_WidgetMgr* pWidgetMgr = static_cast(FWL_GetWidgetMgr()); - if (!pWidgetMgr) - return; - IFWL_FormDP* pData = - static_cast(m_pProperties->m_pDataProvider); - if (!pData) - return; - CFX_WideString text; - pData->GetCaption(m_pInterface, text); - pWidgetMgr->SetWidgetCaption_Native(m_pInterface, text); -} -void CFWL_FormImp::DoWidthLimit(FX_FLOAT& fLeft, - FX_FLOAT& fWidth, - FX_FLOAT fCurX, - FX_FLOAT fSpace, - FX_FLOAT fLimitMin, - FX_FLOAT fLimitMax, - FX_BOOL bLeft) { - FX_FLOAT fx = fCurX; - FX_FLOAT fy = 0; - TransformTo(NULL, fx, fy); - FX_FLOAT fTemp = - bLeft ? (fWidth - fx + fLeft + fSpace) : (fx - fLeft + fSpace); - if (fTemp >= fLimitMin && fTemp <= fLimitMax) { - fWidth = fTemp; - fLeft += bLeft ? (fx - fLeft - fSpace) : 0; - } else { - if (fTemp < fLimitMin && fWidth > fLimitMin) { - fLeft += bLeft ? (fWidth - fLimitMin) : 0; - fWidth = fLimitMin; - } else if (fTemp > fLimitMax && fWidth < fLimitMax) { - fLeft -= bLeft ? (fLimitMax - fWidth) : 0; - fWidth = fLimitMax; - } - } -} -void CFWL_FormImp::DoHeightLimit(FX_FLOAT& fTop, - FX_FLOAT& fHeight, - FX_FLOAT fCurY, - FX_FLOAT fSpace, - FX_FLOAT fLimitMin, - FX_FLOAT fLimitMax, - FX_BOOL bTop) { - FX_FLOAT fx = 0; - FX_FLOAT fy = fCurY; - TransformTo(NULL, fx, fy); - FX_FLOAT fTemp = bTop ? (fHeight - fy + fTop + fSpace) : (fy - fTop + fSpace); - if (fTemp >= fLimitMin && fTemp <= fLimitMax) { - fHeight = fTemp; - fTop += bTop ? (fy - fTop - fSpace) : 0; - } else { - if (fTemp < fLimitMin && fHeight > fLimitMin) { - fTop += bTop ? (fHeight - fLimitMin) : 0; - fHeight = fLimitMin; - } else if (fTemp > fLimitMax && fHeight < fLimitMax) { - fTop -= bTop ? (fLimitMax - fHeight) : 0; - fHeight = fLimitMax; - } - } -} -CFWL_FormImpDelegate::CFWL_FormImpDelegate(CFWL_FormImp* pOwner) - : m_pOwner(pOwner) {} -int32_t CFWL_FormImpDelegate::OnProcessMessage(CFWL_Message* pMessage) { -#ifdef FWL_UseMacSystemBorder - if (!pMessage) - return 0; - FX_DWORD dwMsgCode = pMessage->GetClassID(); - switch (dwMsgCode) { - case FWL_MSGHASH_Activate: { - m_pOwner->m_pProperties->m_dwStates &= ~FWL_WGTSTATE_Deactivated; - m_pOwner->Repaint(&m_pOwner->m_rtRelative); - break; - } - case FWL_MSGHASH_Deactivate: { - m_pOwner->m_pProperties->m_dwStates |= FWL_WGTSTATE_Deactivated; - m_pOwner->Repaint(&m_pOwner->m_rtRelative); - break; - } - } - return FWL_ERR_Succeeded; -#else - if (!pMessage) - return 0; - FX_DWORD dwMsgCode = pMessage->GetClassID(); - int32_t iRet = 1; - switch (dwMsgCode) { - case FWL_MSGHASH_Activate: { - m_pOwner->m_pProperties->m_dwStates &= ~FWL_WGTSTATE_Deactivated; - IFWL_NoteThread* pThread = m_pOwner->GetOwnerThread(); - CFWL_NoteDriver* pDriver = - static_cast(pThread->GetNoteDriver()); - CFWL_WidgetImp* pSubFocusImp = m_pOwner->GetSubFocus(); - IFWL_Widget* pSubFocus = - pSubFocusImp ? pSubFocusImp->GetInterface() : NULL; - if (pSubFocus && pSubFocus != pDriver->GetFocus()) { - pDriver->SetFocus(pSubFocus); - } - m_pOwner->Repaint(&m_pOwner->m_rtRelative); - break; - } - case FWL_MSGHASH_Deactivate: { - m_pOwner->m_pProperties->m_dwStates |= FWL_WGTSTATE_Deactivated; - IFWL_NoteThread* pThread = m_pOwner->GetOwnerThread(); - CFWL_NoteDriver* pDriver = - static_cast(pThread->GetNoteDriver()); - CFWL_WidgetImp* pSubFocusImp = m_pOwner->GetSubFocus(); - IFWL_Widget* pSubFocus = - pSubFocusImp ? pSubFocusImp->GetInterface() : NULL; - if (pSubFocus) { - if (pSubFocus == pDriver->GetFocus()) { - pDriver->SetFocus(NULL); - } else if (pSubFocus->GetStates() & FWL_WGTSTATE_Focused) { - CFWL_MsgKillFocus ms; - IFWL_WidgetDelegate* pDelegate = pSubFocus->SetDelegate(NULL); - if (pDelegate) { - pDelegate->OnProcessMessage(&ms); - } - } - } - m_pOwner->Repaint(&m_pOwner->m_rtRelative); - break; - } - case FWL_MSGHASH_Mouse: { - CFWL_MsgMouse* pMsg = static_cast(pMessage); - switch (pMsg->m_dwCmd) { - case FWL_MSGMOUSECMD_LButtonDown: { - OnLButtonDown(pMsg); - break; - } - case FWL_MSGMOUSECMD_LButtonUp: { - OnLButtonUp(pMsg); - break; - } - case FWL_MSGMOUSECMD_MouseMove: { - OnMouseMove(pMsg); - break; - } - case FWL_MSGMOUSECMD_MouseHover: { - OnMouseHover(pMsg); - break; - } - case FWL_MSGMOUSECMD_MouseLeave: { - OnMouseLeave(pMsg); - break; - } - case FWL_MSGMOUSECMD_LButtonDblClk: { - OnLButtonDblClk(pMsg); - break; - } - } - break; - } - case FWL_MSGHASH_Size: { - CFWL_WidgetMgr* pWidgetMgr = - static_cast(FWL_GetWidgetMgr()); - if (!pWidgetMgr) - return 0; - pWidgetMgr->AddRedrawCounts(m_pOwner->m_pInterface); - if (!m_pOwner->m_bSetMaximize) { - break; - } - m_pOwner->m_bSetMaximize = FALSE; - CFWL_MsgSize* pMsg = static_cast(pMessage); - CFX_RectF rt; - pWidgetMgr->GetWidgetRect_Native(m_pOwner->m_pInterface, rt); - m_pOwner->m_pProperties->m_rtWidget.left = rt.left; - m_pOwner->m_pProperties->m_rtWidget.top = rt.top; - m_pOwner->m_pProperties->m_rtWidget.width = (FX_FLOAT)pMsg->m_iWidth; - m_pOwner->m_pProperties->m_rtWidget.height = (FX_FLOAT)pMsg->m_iHeight; - m_pOwner->Update(); - break; - } - case FWL_MSGHASH_WindowMove: { - OnWindowMove(static_cast(pMessage)); - break; - } - case FWL_MSGHASH_Close: { - OnClose(static_cast(pMessage)); - break; - } - default: { iRet = 0; } - } - return iRet; -#endif -} -FWL_ERR CFWL_FormImpDelegate::OnProcessEvent(CFWL_Event* pEvent) { - if (!pEvent) - return FWL_ERR_Indefinite; - if (pEvent->GetClassID() == FWL_EVTHASH_Close && - pEvent->m_pSrcTarget == m_pOwner->m_pInterface) { - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_FormImpDelegate::OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - return m_pOwner->DrawWidget(pGraphics, pMatrix); -} -void CFWL_FormImpDelegate::OnLButtonDown(CFWL_MsgMouse* pMsg) { - m_pOwner->SetGrab(TRUE); - m_pOwner->m_bLButtonDown = TRUE; - m_pOwner->m_eResizeType = FORM_RESIZETYPE_None; - CFWL_SysBtn* pPressBtn = m_pOwner->GetSysBtnAtPoint(pMsg->m_fx, pMsg->m_fy); - m_pOwner->m_iCaptureBtn = m_pOwner->GetSysBtnIndex(pPressBtn); - CFX_RectF rtCap; - rtCap.Set(m_pOwner->m_rtCaption.left + m_pOwner->m_fCYBorder, - m_pOwner->m_rtCaption.top + m_pOwner->m_fCXBorder, - m_pOwner->m_rtCaption.width - FWL_SYSBTNSIZE * m_pOwner->m_iSysBox - - 2 * m_pOwner->m_fCYBorder, - m_pOwner->m_rtCaption.height - m_pOwner->m_fCXBorder); - if (pPressBtn) { - pPressBtn->SetPressed(); - m_pOwner->Repaint(&pPressBtn->m_rtBtn); - } else if (rtCap.Contains(pMsg->m_fx, pMsg->m_fy)) { - m_pOwner->m_eResizeType = FORM_RESIZETYPE_Cap; - } else if ((m_pOwner->m_pProperties->m_dwStyles & FWL_WGTSTYLE_Border) && - (m_pOwner->m_pProperties->m_dwStyleExes & - FWL_STYLEEXT_FRM_Resize) && - !m_pOwner->m_bMaximized) { - m_pOwner->SetCursor(pMsg->m_fx, pMsg->m_fy); - } - m_pOwner->m_InfoStart.m_ptStart = CFX_PointF(pMsg->m_fx, pMsg->m_fy); - m_pOwner->m_InfoStart.m_szStart = - CFX_SizeF(m_pOwner->m_pProperties->m_rtWidget.width, - m_pOwner->m_pProperties->m_rtWidget.height); -} -void CFWL_FormImpDelegate::OnLButtonUp(CFWL_MsgMouse* pMsg) { - m_pOwner->SetGrab(FALSE); - m_pOwner->m_bLButtonDown = FALSE; - CFWL_SysBtn* pPointBtn = m_pOwner->GetSysBtnAtPoint(pMsg->m_fx, pMsg->m_fy); - CFWL_SysBtn* pPressedBtn = - m_pOwner->GetSysBtnByIndex(m_pOwner->m_iCaptureBtn); - if (!pPressedBtn || pPointBtn != pPressedBtn) { - return; - } - if (pPressedBtn == m_pOwner->GetSysBtnByState(FWL_SYSBUTTONSTATE_Pressed)) { - pPressedBtn->SetNormal(); - } - if (pPressedBtn == m_pOwner->m_pMaxBox) { - if (m_pOwner->m_bMaximized) { - m_pOwner->SetWidgetRect(m_pOwner->m_rtRestore); - m_pOwner->Update(); - m_pOwner->Repaint(); - } else { - m_pOwner->SetWorkAreaRect(); - m_pOwner->Update(); - } - m_pOwner->m_bMaximized = !m_pOwner->m_bMaximized; - } else if (pPressedBtn == m_pOwner->m_pMinBox) { - CFWL_WidgetMgr* pWidgetMgr = - static_cast(FWL_GetWidgetMgr()); - if (!pWidgetMgr) - return; - pWidgetMgr->SetMinimize_Native(m_pOwner->m_pInterface); - } else { - CFWL_EvtClose eClose; - eClose.m_pSrcTarget = m_pOwner->m_pInterface; - m_pOwner->DispatchEvent(&eClose); - } -} -void CFWL_FormImpDelegate::OnMouseMove(CFWL_MsgMouse* pMsg) { - if (m_pOwner->m_bLButtonDown) { - return; - } - if ((m_pOwner->m_pProperties->m_dwStyles & FWL_WGTSTYLE_Border) && - (m_pOwner->m_pProperties->m_dwStyleExes & FWL_STYLEEXT_FRM_Resize) && - !m_pOwner->m_bMaximized) { - m_pOwner->SetCursor(pMsg->m_fx, pMsg->m_fy); - } - CFX_RectF rtInvalidate; - rtInvalidate.Reset(); - CFWL_SysBtn* pPointBtn = m_pOwner->GetSysBtnAtPoint(pMsg->m_fx, pMsg->m_fy); - CFWL_SysBtn* pOldHover = m_pOwner->GetSysBtnByState(FWL_SYSBUTTONSTATE_Hover); -#if (_FX_OS_ == _FX_MACOSX_) - { - if (pOldHover && pPointBtn != pOldHover) { - pOldHover->SetNormal(); - } - if (pPointBtn && pPointBtn != pOldHover) { - pPointBtn->SetHover(); - } - if (m_pOwner->m_pCloseBox) { - rtInvalidate = m_pOwner->m_pCloseBox->m_rtBtn; - } - if (m_pOwner->m_pMaxBox) { - if (rtInvalidate.IsEmpty()) { - rtInvalidate = m_pOwner->m_pMaxBox->m_rtBtn; - } else { - rtInvalidate.Union(m_pOwner->m_pMaxBox->m_rtBtn); - } - } - if (m_pOwner->m_pMinBox) { - if (rtInvalidate.IsEmpty()) { - rtInvalidate = m_pOwner->m_pMinBox->m_rtBtn; - } else { - rtInvalidate.Union(m_pOwner->m_pMinBox->m_rtBtn); - } - } - if (!rtInvalidate.IsEmpty() && - rtInvalidate.Contains(pMsg->m_fx, pMsg->m_fy)) { - m_pOwner->m_bMouseIn = TRUE; - } - } -#else - { - if (pOldHover && pPointBtn != pOldHover) { - pOldHover->SetNormal(); - rtInvalidate = pOldHover->m_rtBtn; - } - if (pPointBtn && pPointBtn != pOldHover) { - pPointBtn->SetHover(); - if (rtInvalidate.IsEmpty()) { - rtInvalidate = pPointBtn->m_rtBtn; - } else { - rtInvalidate.Union(pPointBtn->m_rtBtn); - } - } - } -#endif - if (!rtInvalidate.IsEmpty()) { - m_pOwner->Repaint(&rtInvalidate); - } -} -void CFWL_FormImpDelegate::OnMouseHover(CFWL_MsgMouse* pMsg) { - m_pOwner->SetCursor(pMsg->m_fx, pMsg->m_fy); -} -void CFWL_FormImpDelegate::OnMouseLeave(CFWL_MsgMouse* pMsg) { - CFWL_SysBtn* pHover = m_pOwner->GetSysBtnByState(FWL_SYSBUTTONSTATE_Hover); - if (pHover) { - pHover->SetNormal(); - m_pOwner->Repaint(&pHover->m_rtBtn); - } - if (pMsg->m_dwCmd == FWL_MSGMOUSECMD_MouseLeave && - !m_pOwner->m_bLButtonDown) { - m_pOwner->SetCursor(pMsg->m_fx, pMsg->m_fy); - } -} -void CFWL_FormImpDelegate::OnLButtonDblClk(CFWL_MsgMouse* pMsg) { - if ((m_pOwner->m_pProperties->m_dwStyleExes & FWL_STYLEEXT_FRM_Resize) && - m_pOwner->HitTest(pMsg->m_fx, pMsg->m_fy) == FWL_WGTHITTEST_Titlebar) { - if (m_pOwner->m_bMaximized) { - m_pOwner->SetWidgetRect(m_pOwner->m_rtRestore); - } else { - m_pOwner->SetWorkAreaRect(); - } - m_pOwner->Update(); - m_pOwner->m_bMaximized = !m_pOwner->m_bMaximized; - } -} -void CFWL_FormImpDelegate::OnWindowMove(CFWL_MsgWindowMove* pMsg) { - m_pOwner->m_pProperties->m_rtWidget.left = pMsg->m_fx; - m_pOwner->m_pProperties->m_rtWidget.top = pMsg->m_fy; -} -void CFWL_FormImpDelegate::OnClose(CFWL_MsgClose* pMsg) { - CFWL_EvtClose eClose; - eClose.m_pSrcTarget = m_pOwner->m_pInterface; - m_pOwner->DispatchEvent(&eClose); -} -FWL_ERR FWL_Accelerator_SetForm(IFWL_Form* pFrom, - CFX_MapAccelerators* pMapAccel) { - CFWL_FormImp* pImp = static_cast(pFrom->GetImpl()); - if (!pImp) - return FWL_ERR_Indefinite; - return FWL_ERR_Succeeded; -} diff --git a/xfa/src/fwl/core/fwl_formimp.h b/xfa/src/fwl/core/fwl_formimp.h deleted file mode 100644 index ad31da807c..0000000000 --- a/xfa/src/fwl/core/fwl_formimp.h +++ /dev/null @@ -1,193 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FWL_CORE_FWL_FORMIMP_H_ -#define XFA_SRC_FWL_CORE_FWL_FORMIMP_H_ - -#include "xfa/include/fwl/core/fwl_form.h" -#include "xfa/src/fwl/core/fwl_panelimp.h" -#include "xfa/src/fwl/core/fwl_widgetimp.h" - -class CFWL_NoteLoop; -class CFWL_WidgetImpProperties; -class CFWL_MsgMouse; -class IFWL_Widget; -class IFWL_ThemeProvider; -class CFWL_SysBtn; -class CFWL_FormImp; -class CFWL_FormImpDelegate; - -#define FWL_SYSBUTTONSTATE_Hover 0x0001 -#define FWL_SYSBUTTONSTATE_Pressed 0x0002 -#define FWL_SYSBUTTONSTATE_Disabled 0x0010 -class CFWL_SysBtn { - public: - CFWL_SysBtn() { - m_rtBtn.Set(0, 0, 0, 0); - m_dwState = 0; - } - - FX_BOOL IsHover() { return m_dwState & FWL_SYSBUTTONSTATE_Hover; } - FX_BOOL IsPressed() { return m_dwState & FWL_SYSBUTTONSTATE_Pressed; } - FX_BOOL IsDisabled() { return m_dwState & FWL_SYSBUTTONSTATE_Disabled; } - void SetNormal() { m_dwState &= 0xFFF0; } - void SetPressed() { - SetNormal(); - m_dwState |= FWL_SYSBUTTONSTATE_Pressed; - } - void SetHover() { - SetNormal(); - m_dwState |= FWL_SYSBUTTONSTATE_Hover; - } - void SetDisabled(FX_BOOL bDisabled) { - bDisabled ? m_dwState |= FWL_SYSBUTTONSTATE_Disabled - : m_dwState &= ~FWL_SYSBUTTONSTATE_Disabled; - } - int32_t GetPartState() { - return (IsDisabled() ? FWL_PARTSTATE_FRM_Disabled : (m_dwState + 1)); - } - - CFX_RectF m_rtBtn; - FX_DWORD m_dwState; -}; -enum FORM_RESIZETYPE { - FORM_RESIZETYPE_None = 0, - FORM_RESIZETYPE_Cap, - FORM_RESIZETYPE_Left, - FORM_RESIZETYPE_Top, - FORM_RESIZETYPE_Right, - FORM_RESIZETYPE_Bottom, - FORM_RESIZETYPE_LeftTop, - FORM_RESIZETYPE_LeftBottom, - FORM_RESIZETYPE_RightTop, - FORM_RESIZETYPE_RightBottom -}; -typedef struct RestoreResizeInfo { - CFX_PointF m_ptStart; - CFX_SizeF m_szStart; -} RestoreInfo; -class CFWL_FormImp : public CFWL_PanelImp { - public: - CFWL_FormImp(const CFWL_WidgetImpProperties& properties, IFWL_Widget* pOuter); - virtual ~CFWL_FormImp(); - virtual FWL_ERR GetClassName(CFX_WideString& wsClass) const; - virtual FX_DWORD GetClassID() const; - virtual FX_BOOL IsInstance(const CFX_WideStringC& wsClass) const; - virtual FWL_ERR Initialize(); - virtual FWL_ERR Finalize(); - - virtual FWL_ERR GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize = FALSE); - virtual FWL_ERR GetClientRect(CFX_RectF& rect); - virtual FWL_ERR Update(); - virtual FX_DWORD HitTest(FX_FLOAT fx, FX_FLOAT fy); - virtual FWL_ERR DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL); - virtual FWL_FORMSIZE GetFormSize(); - virtual FWL_ERR SetFormSize(FWL_FORMSIZE eFormSize); - virtual IFWL_Widget* DoModal(); - virtual IFWL_Widget* DoModal(FX_DWORD& dwCommandID); - virtual FWL_ERR EndDoModal(); - virtual FWL_ERR SetBorderRegion(CFX_Path* pPath); - virtual void DrawBackground(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme); - CFWL_WidgetImp* GetSubFocus(); - void SetSubFocus(CFWL_WidgetImp* pWidget); - CFX_MapAccelerators& GetAccelerator(); - void SetAccelerator(CFX_MapAccelerators* pAccelerators); - - protected: - void ShowChildWidget(IFWL_Widget* pParent); - void RemoveSysButtons(); - void CalcContentRect(CFX_RectF& rtContent); - CFWL_SysBtn* GetSysBtnAtPoint(FX_FLOAT fx, FX_FLOAT fy); - CFWL_SysBtn* GetSysBtnByState(FX_DWORD dwState); - CFWL_SysBtn* GetSysBtnByIndex(int32_t nIndex); - int32_t GetSysBtnIndex(CFWL_SysBtn* pBtn); - FX_FLOAT GetCaptionHeight(); - void DrawCaptionText(CFX_Graphics* pGs, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix = NULL); - void DrawIconImage(CFX_Graphics* pGs, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix = NULL); - void GetEdgeRect(CFX_RectF& rtEdge); - void SetWorkAreaRect(); - void SetCursor(FX_FLOAT fx, FX_FLOAT fy); - void Layout(); - void ReSetSysBtn(); - void RegisterForm(); - void UnRegisterForm(); - FX_BOOL IsDoModal(); - void SetThemeData(); - FX_BOOL HasIcon(); - void UpdateIcon(); - void UpdateCaption(); - void DoWidthLimit(FX_FLOAT& fLeft, - FX_FLOAT& fWidth, - FX_FLOAT fCurX, - FX_FLOAT fSpace, - FX_FLOAT fLimitMin, - FX_FLOAT fLimitMax, - FX_BOOL bLeft); - void DoHeightLimit(FX_FLOAT& fTop, - FX_FLOAT& fHeight, - FX_FLOAT fCurY, - FX_FLOAT fSpace, - FX_FLOAT fLimitMin, - FX_FLOAT fLimitMax, - FX_BOOL bTop); - CFX_MapAccelerators m_mapAccelerators; - CFX_RectF m_rtRestore; - CFX_RectF m_rtCaptionText; - CFX_RectF m_rtRelative; - CFX_RectF m_rtCaption; - CFX_RectF m_rtIcon; - CFWL_SysBtn* m_pCloseBox; - CFWL_SysBtn* m_pMinBox; - CFWL_SysBtn* m_pMaxBox; - CFWL_SysBtn* m_pCaptionBox; - CFWL_NoteLoop* m_pNoteLoop; - CFWL_WidgetImp* m_pSubFocus; - RestoreInfo m_InfoStart; - FX_FLOAT m_fCXBorder; - FX_FLOAT m_fCYBorder; - int32_t m_iCaptureBtn; - int32_t m_iSysBox; - int32_t m_eResizeType; - FX_BOOL m_bLButtonDown; - FX_BOOL m_bMaximized; - FX_BOOL m_bSetMaximize; - FX_BOOL m_bCustomizeLayout; - FWL_FORMSIZE m_eFormSize; - FX_BOOL m_bDoModalFlag; - FX_FLOAT m_fSmallIconSz; - FX_FLOAT m_fBigIconSz; - CFX_DIBitmap* m_pBigIcon; - CFX_DIBitmap* m_pSmallIcon; - FX_BOOL m_bMouseIn; - friend class CFWL_FormImpDelegate; -}; -class CFWL_FormImpDelegate : public CFWL_WidgetImpDelegate { - public: - CFWL_FormImpDelegate(CFWL_FormImp* pOwner); - int32_t OnProcessMessage(CFWL_Message* pMessage) override; - FWL_ERR OnProcessEvent(CFWL_Event* pEvent) override; - FWL_ERR OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL) override; - - protected: - void OnLButtonDown(CFWL_MsgMouse* pMsg); - void OnLButtonUp(CFWL_MsgMouse* pMsg); - void OnMouseMove(CFWL_MsgMouse* pMsg); - void OnMouseHover(CFWL_MsgMouse* pMsg); - void OnMouseLeave(CFWL_MsgMouse* pMsg); - void OnLButtonDblClk(CFWL_MsgMouse* pMsg); - void OnWindowMove(CFWL_MsgWindowMove* pMsg); - void OnClose(CFWL_MsgClose* pMsg); - CFWL_FormImp* m_pOwner; -}; - -#endif // XFA_SRC_FWL_CORE_FWL_FORMIMP_H_ diff --git a/xfa/src/fwl/core/fwl_gridimp.cpp b/xfa/src/fwl/core/fwl_gridimp.cpp deleted file mode 100644 index 1230fa2655..0000000000 --- a/xfa/src/fwl/core/fwl_gridimp.cpp +++ /dev/null @@ -1,1378 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fwl/core/fwl_gridimp.h" - -#include "xfa/src/fwl/core/fwl_contentimp.h" -#include "xfa/src/fwl/core/fwl_noteimp.h" -#include "xfa/src/fwl/core/fwl_targetimp.h" -#include "xfa/src/fwl/core/fwl_threadimp.h" -#include "xfa/src/fwl/core/fwl_widgetimp.h" - -// static -IFWL_Grid* IFWL_Grid::Create(const CFWL_WidgetImpProperties& properties) { - IFWL_Grid* pGrid = new IFWL_Grid; - CFWL_GridImp* pGridImpl = new CFWL_GridImp(properties, nullptr); - pGrid->SetImpl(pGridImpl); - pGridImpl->SetInterface(pGrid); - return pGrid; -} -IFWL_Grid::IFWL_Grid() {} -FWL_HGRIDCOLROW IFWL_Grid::InsertColRow(FX_BOOL bColumn, int32_t nIndex) { - return static_cast(GetImpl())->InsertColRow(bColumn, nIndex); -} -int32_t IFWL_Grid::CountColRows(FX_BOOL bColumn) { - return static_cast(GetImpl())->CountColRows(bColumn); -} -FWL_HGRIDCOLROW IFWL_Grid::GetColRow(FX_BOOL bColumn, int32_t nIndex) { - return static_cast(GetImpl())->GetColRow(bColumn, nIndex); -} -int32_t IFWL_Grid::GetIndex(FWL_HGRIDCOLROW hColRow) { - return static_cast(GetImpl())->GetIndex(hColRow); -} -FX_FLOAT IFWL_Grid::GetSize(FWL_HGRIDCOLROW hColRow, FWL_GRIDUNIT& eUnit) { - return static_cast(GetImpl())->GetSize(hColRow, eUnit); -} -FWL_ERR IFWL_Grid::SetSize(FWL_HGRIDCOLROW hColRow, - FX_FLOAT fSize, - FWL_GRIDUNIT eUnit) { - return static_cast(GetImpl())->SetSize(hColRow, fSize, eUnit); -} -FX_FLOAT IFWL_Grid::GetMinSize(FWL_HGRIDCOLROW hColRow, FWL_GRIDUNIT& eUnit) { - return static_cast(GetImpl())->GetMinSize(hColRow, eUnit); -} -FWL_ERR IFWL_Grid::SetMinSize(FWL_HGRIDCOLROW hColRow, - FX_FLOAT fSize, - FWL_GRIDUNIT eUnit) { - return static_cast(GetImpl()) - ->SetMinSize(hColRow, fSize, eUnit); -} -FX_FLOAT IFWL_Grid::GetMaxSize(FWL_HGRIDCOLROW hColRow, FWL_GRIDUNIT& eUnit) { - return static_cast(GetImpl())->GetMaxSize(hColRow, eUnit); -} -FWL_ERR IFWL_Grid::SetMaxSize(FWL_HGRIDCOLROW hColRow, - FX_FLOAT fSize, - FWL_GRIDUNIT eUnit) { - return static_cast(GetImpl()) - ->SetMaxSize(hColRow, fSize, eUnit); -} -FX_BOOL IFWL_Grid::DeleteColRow(FWL_HGRIDCOLROW hColRow) { - return static_cast(GetImpl())->DeleteColRow(hColRow); -} -FX_BOOL IFWL_Grid::IsColumn(FWL_HGRIDCOLROW hColRow) { - return static_cast(GetImpl())->IsColumn(hColRow); -} -int32_t IFWL_Grid::GetWidgetPos(IFWL_Widget* pWidget, FX_BOOL bColumn) { - return static_cast(GetImpl())->GetWidgetPos(pWidget, bColumn); -} -FWL_ERR IFWL_Grid::SetWidgetPos(IFWL_Widget* pWidget, - int32_t iPos, - FX_BOOL bColumn) { - return static_cast(GetImpl()) - ->SetWidgetPos(pWidget, iPos, bColumn); -} -int32_t IFWL_Grid::GetWidgetSpan(IFWL_Widget* pWidget, FX_BOOL bColumn) { - return static_cast(GetImpl())->GetWidgetSpan(pWidget, bColumn); -} -FWL_ERR IFWL_Grid::SetWidgetSpan(IFWL_Widget* pWidget, - int32_t iSpan, - FX_BOOL bColumn) { - return static_cast(GetImpl()) - ->SetWidgetSpan(pWidget, iSpan, bColumn); -} -FX_FLOAT IFWL_Grid::GetWidgetSize(IFWL_Widget* pWidget, - FWL_GRIDSIZE eSize, - FWL_GRIDUNIT& eUnit) { - return static_cast(GetImpl()) - ->GetWidgetSize(pWidget, eSize, eUnit); -} -FWL_ERR IFWL_Grid::SetWidgetSize(IFWL_Widget* pWidget, - FWL_GRIDSIZE eSize, - FX_FLOAT fSize, - FWL_GRIDUNIT eUit) { - return static_cast(GetImpl()) - ->SetWidgetSize(pWidget, eSize, fSize, eUit); -} -FX_BOOL IFWL_Grid::GetWidgetMargin(IFWL_Widget* pWidget, - FWL_GRIDMARGIN eMargin, - FX_FLOAT& fMargin) { - return static_cast(GetImpl()) - ->GetWidgetMargin(pWidget, eMargin, fMargin); -} -FWL_ERR IFWL_Grid::SetWidgetMargin(IFWL_Widget* pWidget, - FWL_GRIDMARGIN eMargin, - FX_FLOAT fMargin) { - return static_cast(GetImpl()) - ->SetWidgetMargin(pWidget, eMargin, fMargin); -} -FWL_ERR IFWL_Grid::RemoveWidgetMargin(IFWL_Widget* pWidget, - FWL_GRIDMARGIN eMargin) { - return static_cast(GetImpl()) - ->RemoveWidgetMargin(pWidget, eMargin); -} -FX_FLOAT IFWL_Grid::GetGridSize(FWL_GRIDSIZE eSize, FWL_GRIDUNIT& eUnit) { - return static_cast(GetImpl())->GetGridSize(eSize, eUnit); -} -FWL_ERR IFWL_Grid::SetGridSize(FWL_GRIDSIZE eSize, - FX_FLOAT fSize, - FWL_GRIDUNIT eUit) { - return static_cast(GetImpl())->SetGridSize(eSize, fSize, eUit); -} - -CFWL_GridImp::CFWL_GridImp(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) - : CFWL_ContentImp(properties, pOuter) { - m_Size[FWL_GRIDSIZE_Width].eUnit = FWL_GRIDUNIT_Auto; - m_Size[FWL_GRIDSIZE_Width].fLength = 0; - m_Size[FWL_GRIDSIZE_Height].eUnit = FWL_GRIDUNIT_Auto; - m_Size[FWL_GRIDSIZE_Height].fLength = 0; - m_Size[FWL_GRIDSIZE_MinWidth].eUnit = FWL_GRIDUNIT_Fixed; - m_Size[FWL_GRIDSIZE_MinWidth].fLength = 0; - m_Size[FWL_GRIDSIZE_MaxWidth].eUnit = FWL_GRIDUNIT_Infinity; - m_Size[FWL_GRIDSIZE_MaxWidth].fLength = 0; - m_Size[FWL_GRIDSIZE_MinHeight].eUnit = FWL_GRIDUNIT_Fixed; - m_Size[FWL_GRIDSIZE_MinHeight].fLength = 0; - m_Size[FWL_GRIDSIZE_MaxHeight].eUnit = FWL_GRIDUNIT_Infinity; - m_Size[FWL_GRIDSIZE_MaxHeight].fLength = 0; -} -CFWL_GridImp::~CFWL_GridImp() { - int32_t iCount = m_Columns.GetSize(); - for (int32_t i = 0; i < iCount; i++) { - delete static_cast(m_Columns[i]); - } - m_Columns.RemoveAll(); - iCount = m_Rows.GetSize(); - for (int32_t j = 0; j < iCount; j++) { - delete static_cast(m_Rows[j]); - } - m_Rows.RemoveAll(); - FX_POSITION ps = m_mapWidgetInfo.GetStartPosition(); - while (ps) { - IFWL_Widget* pWidget; - CFWL_GridWidgetInfo* pInfo; - m_mapWidgetInfo.GetNextAssoc(ps, (void*&)pWidget, (void*&)pInfo); - delete pInfo; - } - m_mapWidgetInfo.RemoveAll(); - delete m_pDelegate; - m_pDelegate = nullptr; -} -FWL_ERR CFWL_GridImp::GetClassName(CFX_WideString& wsClass) const { - wsClass = FWL_CLASS_Grid; - return FWL_ERR_Succeeded; -} -FX_DWORD CFWL_GridImp::GetClassID() const { - return FWL_CLASSHASH_Grid; -} -FWL_ERR CFWL_GridImp::Initialize() { - if (CFWL_ContentImp::Initialize() != FWL_ERR_Succeeded) - return FWL_ERR_Indefinite; - m_pDelegate = new CFWL_GridImpDelegate(this); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_GridImp::Finalize() { - if (CFWL_ContentImp::Finalize() != FWL_ERR_Succeeded) - return FWL_ERR_Indefinite; - delete m_pDelegate; - m_pDelegate = nullptr; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_GridImp::GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize) { - if (bAutoSize) { - rect.left = 0; - rect.top = 0; - rect.width = ProcessUnCertainColumns(); - rect.height = ProcessUnCertainRows(); - } else { - rect = m_pProperties->m_rtWidget; - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_GridImp::SetWidgetRect(const CFX_RectF& rect) { - CFWL_WidgetImp::SetWidgetRect(rect); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_GridImp::Update() { - if (IsLocked()) { - return FWL_ERR_Indefinite; - } - ProcessColumns(m_pProperties->m_rtWidget.width); - ProcessRows(m_pProperties->m_rtWidget.height); - SetAllWidgetsRect(); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_GridImp::DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - if (!pGraphics) - return FWL_ERR_Indefinite; - if ((m_pProperties->m_dwStyleExes & FWL_GRIDSTYLEEXT_ShowGridLines) == 0) { - return FWL_ERR_Succeeded; - } - pGraphics->SaveGraphState(); - if (pMatrix) { - pGraphics->ConcatMatrix(pMatrix); - } - { - FX_BOOL bDrawLine = FALSE; - CFX_Path path; - path.Create(); - int32_t iColumns = m_Columns.GetSize(); - for (int32_t i = 1; i < iColumns; i++) { - CFWL_GridColRow* pColRow = static_cast(m_Columns[i]); - if (!pColRow) { - continue; - } - bDrawLine = TRUE; - path.AddLine(pColRow->m_fActualPos, 0, pColRow->m_fActualPos, - m_pProperties->m_rtWidget.height); - } - int32_t iRows = m_Rows.GetSize(); - for (int32_t j = 1; j < iRows; j++) { - CFWL_GridColRow* pColRow = static_cast(m_Rows[j]); - if (!pColRow) { - continue; - } - bDrawLine = TRUE; - path.AddLine(0, pColRow->m_fActualPos, m_pProperties->m_rtWidget.width, - pColRow->m_fActualPos); - } - if (bDrawLine) { - CFX_Color cr(0xFFFF0000); - pGraphics->SetStrokeColor(&cr); - pGraphics->StrokePath(&path); - } - } - pGraphics->RestoreGraphState(); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_GridImp::InsertWidget(IFWL_Widget* pChild, int32_t nIndex) { - if (!pChild) - return FWL_ERR_Indefinite; - CFWL_ContentImp::InsertWidget(pChild, nIndex); - if (!m_mapWidgetInfo.GetValueAt(pChild)) { - CFWL_GridWidgetInfo* pInfo = new CFWL_GridWidgetInfo; - m_mapWidgetInfo.SetAt(pChild, pInfo); - m_Widgets.Add(pChild); - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_GridImp::RemoveWidget(IFWL_Widget* pWidget) { - if (!pWidget) - return FWL_ERR_Indefinite; - CFWL_ContentImp::RemoveWidget(pWidget); - if (CFWL_GridWidgetInfo* pInfo = static_cast( - m_mapWidgetInfo.GetValueAt(pWidget))) { - m_mapWidgetInfo.RemoveKey(pWidget); - delete pInfo; - int32_t nIndex = m_Widgets.Find(pWidget); - m_Widgets.RemoveAt(nIndex, 1); - } - return FWL_ERR_Succeeded; -} -FWL_HGRIDCOLROW CFWL_GridImp::InsertColRow(FX_BOOL bColumn, int32_t nIndex) { - if (bColumn) { - if (nIndex < 0 || nIndex > m_Columns.GetSize()) { - nIndex = m_Columns.GetSize(); - } - CFWL_GridColRow* pColumn = new CFWL_GridColRow; - m_Columns.InsertAt(nIndex, pColumn, 1); - return (FWL_HGRIDCOLROW)pColumn; - } - if (nIndex < 0 || nIndex > m_Rows.GetSize()) { - nIndex = m_Rows.GetSize(); - } - CFWL_GridColRow* pRow = new CFWL_GridColRow; - m_Rows.InsertAt(nIndex, pRow, 1); - return (FWL_HGRIDCOLROW)pRow; -} -int32_t CFWL_GridImp::CountColRows(FX_BOOL bColumn) { - if (bColumn) { - return m_Columns.GetSize(); - } - return m_Rows.GetSize(); -} -FWL_HGRIDCOLROW CFWL_GridImp::GetColRow(FX_BOOL bColumn, int32_t nIndex) { - if (bColumn) { - if (nIndex < 0 || nIndex >= m_Columns.GetSize()) { - return NULL; - } - return (FWL_HGRIDCOLROW)m_Columns[nIndex]; - } - if (nIndex < 0 || nIndex >= m_Rows.GetSize()) { - return NULL; - } - return (FWL_HGRIDCOLROW)m_Rows[nIndex]; -} -int32_t CFWL_GridImp::GetIndex(FWL_HGRIDCOLROW hColRow) { - if (IsColumn(hColRow)) { - return m_Columns.Find(hColRow); - } - return m_Rows.Find(hColRow); -} -FX_FLOAT CFWL_GridImp::GetSize(FWL_HGRIDCOLROW hColRow, FWL_GRIDUNIT& eUnit) { - if (!hColRow) - return -1; - CFWL_GridColRow* pColRow = reinterpret_cast(hColRow); - eUnit = pColRow->m_Size.eUnit; - return pColRow->m_Size.fLength; -} -FWL_ERR CFWL_GridImp::SetSize(FWL_HGRIDCOLROW hColRow, - FX_FLOAT fSize, - FWL_GRIDUNIT eUnit) { - if (!hColRow) - return FWL_ERR_Indefinite; - CFWL_GridColRow* pColRow = reinterpret_cast(hColRow); - pColRow->m_Size.eUnit = eUnit; - pColRow->m_Size.fLength = fSize; - return FWL_ERR_Succeeded; -} -FX_FLOAT CFWL_GridImp::GetMinSize(FWL_HGRIDCOLROW hColRow, - FWL_GRIDUNIT& eUnit) { - if (!hColRow) - return -1; - CFWL_GridColRow* pColRow = reinterpret_cast(hColRow); - eUnit = pColRow->m_MinSize.eUnit; - return pColRow->m_MinSize.fLength; -} -FWL_ERR CFWL_GridImp::SetMinSize(FWL_HGRIDCOLROW hColRow, - FX_FLOAT fSize, - FWL_GRIDUNIT eUnit) { - if (!hColRow) - return FWL_ERR_Indefinite; - CFWL_GridColRow* pColRow = reinterpret_cast(hColRow); - pColRow->m_MinSize.eUnit = eUnit; - pColRow->m_MinSize.fLength = fSize; - return FWL_ERR_Succeeded; -} -FX_FLOAT CFWL_GridImp::GetMaxSize(FWL_HGRIDCOLROW hColRow, - FWL_GRIDUNIT& eUnit) { - if (!hColRow) - return -1; - CFWL_GridColRow* pColRow = reinterpret_cast(hColRow); - eUnit = pColRow->m_MaxSize.eUnit; - return pColRow->m_MaxSize.fLength; -} -FWL_ERR CFWL_GridImp::SetMaxSize(FWL_HGRIDCOLROW hColRow, - FX_FLOAT fSize, - FWL_GRIDUNIT eUnit) { - if (!hColRow) - return FWL_ERR_Indefinite; - CFWL_GridColRow* pColRow = reinterpret_cast(hColRow); - pColRow->m_MaxSize.eUnit = eUnit; - pColRow->m_MaxSize.fLength = fSize; - return FWL_ERR_Succeeded; -} -FX_BOOL CFWL_GridImp::DeleteColRow(FWL_HGRIDCOLROW hColRow) { - int32_t nIndex = m_Columns.Find(hColRow); - if (nIndex >= 0) { - m_Columns.RemoveAt(nIndex); - delete reinterpret_cast(hColRow); - return TRUE; - } - nIndex = m_Rows.Find(hColRow); - if (nIndex >= 0) { - delete reinterpret_cast(hColRow); - m_Rows.RemoveAt(nIndex); - return TRUE; - } - return FALSE; -} -FX_BOOL CFWL_GridImp::IsColumn(FWL_HGRIDCOLROW hColRow) { - return m_Columns.Find(hColRow) != -1; -} -int32_t CFWL_GridImp::GetWidgetPos(IFWL_Widget* pWidget, FX_BOOL bColumn) { - CFWL_GridWidgetInfo* pInfo = - static_cast(GetWidgetInfo(pWidget)); - if (pInfo) { - return bColumn ? pInfo->m_iColumn : pInfo->m_iRow; - } - return -1; -} -FWL_ERR CFWL_GridImp::SetWidgetPos(IFWL_Widget* pWidget, - int32_t iPos, - FX_BOOL bColumn) { - CFWL_GridWidgetInfo* pInfo = - static_cast(GetWidgetInfo(pWidget)); - if (pInfo) { - bColumn ? pInfo->m_iColumn = iPos : pInfo->m_iRow = iPos; - } - return FWL_ERR_Succeeded; -} -int32_t CFWL_GridImp::GetWidgetSpan(IFWL_Widget* pWidget, FX_BOOL bColumn) { - CFWL_GridWidgetInfo* pInfo = - static_cast(GetWidgetInfo(pWidget)); - if (pInfo) { - return bColumn ? pInfo->m_iColumnSpan : pInfo->m_iRowSpan; - } - return 0; -} -FWL_ERR CFWL_GridImp::SetWidgetSpan(IFWL_Widget* pWidget, - int32_t iSpan, - FX_BOOL bColumn) { - CFWL_GridWidgetInfo* pInfo = - static_cast(GetWidgetInfo(pWidget)); - if (pInfo) { - bColumn ? pInfo->m_iColumnSpan = iSpan : pInfo->m_iRowSpan = iSpan; - } - return FWL_ERR_Succeeded; -} -FX_FLOAT CFWL_GridImp::GetWidgetSize(IFWL_Widget* pWidget, - FWL_GRIDSIZE eSize, - FWL_GRIDUNIT& eUnit) { - CFWL_GridWidgetInfo* pInfo = - static_cast(GetWidgetInfo(pWidget)); - if (pInfo) { - eUnit = pInfo->m_Size[eSize].eUnit; - return pInfo->m_Size[eSize].fLength; - } - return 0; -} -FWL_ERR CFWL_GridImp::SetWidgetSize(IFWL_Widget* pWidget, - FWL_GRIDSIZE eSize, - FX_FLOAT fSize, - FWL_GRIDUNIT eUit) { - CFWL_GridWidgetInfo* pInfo = - static_cast(GetWidgetInfo(pWidget)); - if (pInfo) { - pInfo->m_Size[eSize].fLength = fSize; - pInfo->m_Size[eSize].eUnit = eUit; - } - return FWL_ERR_Succeeded; -} -FX_BOOL CFWL_GridImp::GetWidgetMargin(IFWL_Widget* pWidget, - FWL_GRIDMARGIN eMargin, - FX_FLOAT& fMargin) { - CFWL_GridWidgetInfo* pInfo = - static_cast(GetWidgetInfo(pWidget)); - if (pInfo) { - fMargin = pInfo->m_Margin[eMargin]; - return (pInfo->m_dwMarginFlag & (1 << eMargin)) != 0; - } - return FALSE; -} -FWL_ERR CFWL_GridImp::SetWidgetMargin(IFWL_Widget* pWidget, - FWL_GRIDMARGIN eMargin, - FX_FLOAT fMargin) { - CFWL_GridWidgetInfo* pInfo = - static_cast(GetWidgetInfo(pWidget)); - if (pInfo) { - pInfo->m_Margin[eMargin] = fMargin; - pInfo->m_dwMarginFlag |= (1 << eMargin); - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_GridImp::RemoveWidgetMargin(IFWL_Widget* pWidget, - FWL_GRIDMARGIN eMargin) { - CFWL_GridWidgetInfo* pInfo = - static_cast(GetWidgetInfo(pWidget)); - if (pInfo) { - pInfo->m_dwMarginFlag &= ~(1 << eMargin); - } - return FWL_ERR_Succeeded; -} -FX_FLOAT CFWL_GridImp::GetGridSize(FWL_GRIDSIZE eSize, FWL_GRIDUNIT& eUnit) { - eUnit = m_Size[eSize].eUnit; - return m_Size[eSize].fLength; -} -FWL_ERR CFWL_GridImp::SetGridSize(FWL_GRIDSIZE eSize, - FX_FLOAT fSize, - FWL_GRIDUNIT eUit) { - m_Size[eSize].fLength = fSize; - m_Size[eSize].eUnit = eUit; - return FWL_ERR_Succeeded; -} -CFWL_GridWidgetInfo* CFWL_GridImp::GetWidgetInfo(IFWL_Widget* pWidget) { - return static_cast(m_mapWidgetInfo.GetValueAt(pWidget)); -} -void CFWL_GridImp::ProcFixedColRow(CFWL_GridColRow* pColRow, - int32_t nIndex, - FX_FLOAT fColRowSize, - FX_BOOL bColumn) { - pColRow->m_fActualSize = fColRowSize; - FX_POSITION ps = m_mapWidgetInfo.GetStartPosition(); - while (ps) { - void* key = nullptr; - void* value = nullptr; - m_mapWidgetInfo.GetNextAssoc(ps, key, value); - IFWL_Widget* pWidget = static_cast(key); - CFWL_GridWidgetInfo* pInfo = static_cast(value); - if (bColumn) { - if (pInfo->m_iColumn == nIndex && pInfo->m_iColumnSpan == 1) { - CalcWidgetWidth(pWidget, pInfo, pColRow->m_fActualSize); - } - } else { - if (pInfo->m_iRow == nIndex && pInfo->m_iRowSpan == 1) { - CalcWidgetHeigt(pWidget, pInfo, pColRow->m_fActualSize); - } - } - } -} -void CFWL_GridImp::ProcAutoColRow(CFWL_GridColRow* pColRow, - int32_t nIndex, - FX_BOOL bColumn) { - if (!pColRow) - return; - FX_FLOAT fMaxSize = 0, fWidgetSize = 0; - FX_POSITION ps = m_mapWidgetInfo.GetStartPosition(); - while (ps) { - IFWL_Widget* pWidget = NULL; - CFWL_GridWidgetInfo* pInfo = NULL; - m_mapWidgetInfo.GetNextAssoc(ps, (void*&)pWidget, (void*&)pInfo); - if (!pWidget || !pInfo) { - continue; - } - if (bColumn) { - if (pInfo->m_iColumn != nIndex || pInfo->m_iColumnSpan != 1) { - continue; - } - fWidgetSize = CalcAutoColumnWidgetWidth(pWidget, pInfo); - if (fMaxSize < fWidgetSize) { - fMaxSize = fWidgetSize; - } - } else { - if (pInfo->m_iRow != nIndex || pInfo->m_iRowSpan != 1) { - continue; - } - fWidgetSize = CalcAutoColumnWidgetHeight(pWidget, pInfo); - if (fMaxSize < fWidgetSize) { - fMaxSize = fWidgetSize; - } - } - } - SetColRowActualSize(pColRow, fMaxSize); -} -void CFWL_GridImp::ProcScaledColRow(CFWL_GridColRow* pColRow, - int32_t nIndex, - FX_FLOAT fColRowSize, - FX_BOOL bColumn) { - if (fColRowSize > 0) { - ProcFixedColRow(pColRow, nIndex, fColRowSize, bColumn); - } -} -void CFWL_GridImp::CalcWidgetWidth(IFWL_Widget* pWidget, - CFWL_GridWidgetInfo* pInfo, - FX_FLOAT fColunmWidth) { - if (pInfo->m_Size[FWL_GRIDSIZE_Width].eUnit == FWL_GRIDUNIT_Fixed) { - SetWidgetActualWidth(pInfo, pInfo->m_Size[FWL_GRIDSIZE_Width].fLength); - } else { - FX_FLOAT fWidth = 0; - FX_FLOAT fLeftMargin = 0, fRightMargin = 0; - FX_BOOL bLeftMargin = - GetWidgetMargin(pWidget, FWL_GRIDMARGIN_Left, fLeftMargin); - FX_BOOL bRightMargin = - GetWidgetMargin(pWidget, FWL_GRIDMARGIN_Right, fRightMargin); - if (bLeftMargin && bRightMargin) { - fWidth = fColunmWidth - fLeftMargin - fRightMargin; - } else { - CFX_RectF rtAuto; - pWidget->GetWidgetRect(rtAuto, TRUE); - fWidth = rtAuto.Width(); - } - SetWidgetActualWidth(pInfo, fWidth); - } -} -void CFWL_GridImp::CalcWidgetHeigt(IFWL_Widget* pWidget, - CFWL_GridWidgetInfo* pInfo, - FX_FLOAT fRowHeigt) { - if (pInfo->m_Size[FWL_GRIDSIZE_Height].eUnit == FWL_GRIDUNIT_Fixed) { - SetWidgetActualHeight(pInfo, pInfo->m_Size[FWL_GRIDSIZE_Height].fLength); - } else { - FX_FLOAT fHeight = 0; - FX_FLOAT fTopMargin = 0, fBottomMargin = 0; - FX_BOOL bTopMargin = - GetWidgetMargin(pWidget, FWL_GRIDMARGIN_Top, fTopMargin); - FX_BOOL bBottomMargin = - GetWidgetMargin(pWidget, FWL_GRIDMARGIN_Bottom, fBottomMargin); - if (bTopMargin && bBottomMargin) { - fHeight = fRowHeigt - fTopMargin - fBottomMargin; - } else { - CFX_RectF rtAuto; - pWidget->GetWidgetRect(rtAuto, TRUE); - fHeight = rtAuto.Height(); - } - SetWidgetActualHeight(pInfo, fHeight); - } -} -FX_FLOAT CFWL_GridImp::CalcAutoColumnWidgetWidth(IFWL_Widget* pWidget, - CFWL_GridWidgetInfo* pInfo) { - FX_FLOAT fLeftMargin = 0, fRightMargin = 0; - FX_BOOL bLeftMargin = - GetWidgetMargin(pWidget, FWL_GRIDMARGIN_Left, fLeftMargin); - FX_BOOL bRightMargin = - GetWidgetMargin(pWidget, FWL_GRIDMARGIN_Right, fRightMargin); - if (pInfo->m_Size[FWL_GRIDSIZE_Width].eUnit == FWL_GRIDUNIT_Fixed) { - SetWidgetActualWidth(pInfo, pInfo->m_Size[FWL_GRIDSIZE_Width].fLength); - } else { - CFX_RectF rtAuto; - pWidget->GetWidgetRect(rtAuto, TRUE); - FX_FLOAT fWidth = rtAuto.width; - SetWidgetActualWidth(pInfo, fWidth); - } - FX_FLOAT fTotal = pInfo->m_fActualWidth; - if (bLeftMargin) { - fTotal += fLeftMargin; - } - if (bRightMargin) { - fTotal += fRightMargin; - } - return fTotal; -} -FX_FLOAT CFWL_GridImp::CalcAutoColumnWidgetHeight(IFWL_Widget* pWidget, - CFWL_GridWidgetInfo* pInfo) { - FX_FLOAT fTopMargin = 0, fBottomMargin = 0; - FX_BOOL bTopMargin = GetWidgetMargin(pWidget, FWL_GRIDMARGIN_Top, fTopMargin); - FX_BOOL bBottomMargin = - GetWidgetMargin(pWidget, FWL_GRIDMARGIN_Bottom, fBottomMargin); - if (pInfo->m_Size[FWL_GRIDSIZE_Height].eUnit == FWL_GRIDUNIT_Fixed) { - SetWidgetActualHeight(pInfo, pInfo->m_Size[FWL_GRIDSIZE_Height].fLength); - } else { - CFX_RectF rtAuto; - pWidget->GetWidgetRect(rtAuto, TRUE); - FX_FLOAT fHeight = rtAuto.height; - SetWidgetActualHeight(pInfo, fHeight); - } - FX_FLOAT fTotal = pInfo->m_fActualHeight; - if (bTopMargin) { - fTotal += fTopMargin; - } - if (bBottomMargin) { - fTotal += fBottomMargin; - } - return fTotal; -} -FX_FLOAT CFWL_GridImp::ProcessColumns(FX_FLOAT fWidth) { - if (fWidth <= 0) { - return ProcessUnCertainColumns(); - } - int32_t iColumns = m_Columns.GetSize(); - if (iColumns < 1) { - return fWidth; - } - FX_FLOAT fFixedWidth = 0; - FX_FLOAT fAutoWidth = 0; - CFX_PtrArray autoColumns; - CFX_PtrArray scaledColumns; - FX_FLOAT fScaledColumnNum = 0; - for (int32_t i = 0; i < iColumns; i++) { - CFWL_GridColRow* pColRow = static_cast(m_Columns[i]); - if (!pColRow) { - continue; - } - switch (pColRow->m_Size.eUnit) { - case FWL_GRIDUNIT_Fixed: { - SetColRowActualSize(pColRow, pColRow->m_Size.fLength); - fFixedWidth += pColRow->m_fActualSize; - break; - } - case FWL_GRIDUNIT_Auto: { - ProcAutoColRow(pColRow, i, TRUE); - autoColumns.Add(pColRow); - break; - } - case FWL_GRIDUNIT_Scaled: - default: { - fScaledColumnNum += pColRow->m_Size.fLength; - scaledColumns.Add(pColRow); - SetColRowActualSize(pColRow, 0); - } - } - } - FX_POSITION ps = m_mapWidgetInfo.GetStartPosition(); - while (ps) { - IFWL_Widget* pWidget = NULL; - CFWL_GridWidgetInfo* pInfo = NULL; - m_mapWidgetInfo.GetNextAssoc(ps, (void*&)pWidget, (void*&)pInfo); - if (!pInfo || pInfo->m_iColumnSpan < 2) { - continue; - } - CFX_PtrArray spanAutoColumns; - FX_FLOAT fSpanSize = 0; - int32_t iAutoColRows = 0; - int32_t iScaledColRows = 0; - for (int32_t i = 0; i < pInfo->m_iColumnSpan; i++) { - CFWL_GridColRow* pColumn = reinterpret_cast( - GetColRow(TRUE, pInfo->m_iColumn + i)); - if (!pColumn) { - break; - } - fSpanSize += pColumn->m_fActualSize; - if (pColumn->m_Size.eUnit == FWL_GRIDUNIT_Auto) { - iAutoColRows++; - spanAutoColumns.Add(pColumn); - } else if (pColumn->m_Size.eUnit == FWL_GRIDUNIT_Scaled) { - iScaledColRows++; - } - } - if (iAutoColRows < 1) { - continue; - } - FX_FLOAT fWidgetWidth = CalcAutoColumnWidgetWidth(pWidget, pInfo); - if (fWidgetWidth > fSpanSize) { - if (iScaledColRows > 0) { - } else { - SetSpanAutoColRowSize(spanAutoColumns, fWidgetWidth - fSpanSize); - } - } - } - int32_t iAutoCols = autoColumns.GetSize(); - for (int32_t k = 0; k < iAutoCols; k++) { - fAutoWidth += static_cast(autoColumns[k])->m_fActualSize; - } - FX_FLOAT fScaledWidth = fWidth - fFixedWidth - fAutoWidth; - if (fScaledWidth > 0 && fScaledColumnNum > 0) { - SetScaledColRowsSize(scaledColumns, fScaledWidth, fScaledColumnNum); - } - return fWidth; -} -FX_FLOAT CFWL_GridImp::ProcessRows(FX_FLOAT fHeight) { - if (fHeight <= 0) { - return ProcessUnCertainRows(); - } - int32_t iRows = m_Rows.GetSize(); - if (iRows < 1) { - return fHeight; - } - FX_FLOAT fFixedHeight = 0; - FX_FLOAT fAutoHeigt = 0; - CFX_PtrArray autoRows; - CFX_PtrArray scaledRows; - FX_FLOAT fScaledRowNum = 0; - for (int32_t i = 0; i < iRows; i++) { - CFWL_GridColRow* pColRow = static_cast(m_Rows[i]); - if (!pColRow) { - continue; - } - switch (pColRow->m_Size.eUnit) { - case FWL_GRIDUNIT_Fixed: { - SetColRowActualSize(pColRow, pColRow->m_Size.fLength); - fFixedHeight += pColRow->m_fActualSize; - break; - } - case FWL_GRIDUNIT_Auto: { - ProcAutoColRow(pColRow, i, FALSE); - autoRows.Add(pColRow); - break; - } - case FWL_GRIDUNIT_Scaled: - default: { - fScaledRowNum += pColRow->m_Size.fLength; - scaledRows.Add(pColRow); - SetColRowActualSize(pColRow, 0); - break; - } - } - } - FX_POSITION ps = m_mapWidgetInfo.GetStartPosition(); - while (ps) { - IFWL_Widget* pWidget = NULL; - CFWL_GridWidgetInfo* pInfo = NULL; - m_mapWidgetInfo.GetNextAssoc(ps, (void*&)pWidget, (void*&)pInfo); - if (!pInfo || pInfo->m_iRowSpan < 2) { - continue; - } - CFX_PtrArray spanAutoRows; - FX_FLOAT fSpanSize = 0; - int32_t iAutoColRows = 0; - int32_t iScaledColRows = 0; - for (int32_t i = 0; i < pInfo->m_iRowSpan; i++) { - CFWL_GridColRow* pRow = reinterpret_cast( - GetColRow(FALSE, pInfo->m_iRow + i)); - if (!pRow) { - break; - } - fSpanSize += pRow->m_fActualSize; - if (pRow->m_Size.eUnit == FWL_GRIDUNIT_Auto) { - iAutoColRows++; - spanAutoRows.Add(pRow); - } else if (pRow->m_Size.eUnit == FWL_GRIDUNIT_Scaled) { - iScaledColRows++; - } - } - if (iAutoColRows < 1) { - continue; - } - FX_FLOAT fWidgetHeight = CalcAutoColumnWidgetHeight(pWidget, pInfo); - if (fWidgetHeight > fSpanSize) { - if (iScaledColRows > 0) { - } else { - SetSpanAutoColRowSize(spanAutoRows, fWidgetHeight - fSpanSize); - } - } - } - int32_t iAutoRows = autoRows.GetSize(); - for (int32_t k = 0; k < iAutoRows; k++) { - fAutoHeigt += - reinterpret_cast(autoRows[k])->m_fActualSize; - } - FX_FLOAT fScaledHeight = fHeight - fFixedHeight - fAutoHeigt; - if (fScaledHeight > 0 && fScaledRowNum > 0) { - SetScaledColRowsSize(scaledRows, fScaledHeight, fScaledRowNum); - } - return fHeight; -} -FX_FLOAT CFWL_GridImp::ProcessUnCertainColumns() { - int32_t iColumns = m_Columns.GetSize(); - if (iColumns < 1) { - CFWL_GridColRow* pColRow = new CFWL_GridColRow; - pColRow->m_Size.eUnit = FWL_GRIDUNIT_Auto; - ProcAutoColRow(pColRow, 0, TRUE); - FX_FLOAT fWidth = pColRow->m_fActualSize; - delete pColRow; - return fWidth; - } - FX_FLOAT fFixedWidth = 0; - CFX_PtrArray autoColumns; - CFX_PtrArray scaledColumns; - FX_FLOAT fScaledColumnNum = 0; - FX_FLOAT fScaledMaxPerWidth = 0; - for (int32_t i = 0; i < iColumns; i++) { - CFWL_GridColRow* pColRow = reinterpret_cast(m_Columns[i]); - if (!pColRow) { - continue; - } - switch (pColRow->m_Size.eUnit) { - case FWL_GRIDUNIT_Fixed: { - SetColRowActualSize(pColRow, pColRow->m_Size.fLength); - fFixedWidth += pColRow->m_fActualSize; - break; - } - case FWL_GRIDUNIT_Auto: { - ProcAutoColRow(pColRow, i, TRUE); - autoColumns.Add(pColRow); - break; - } - case FWL_GRIDUNIT_Scaled: - default: { - ProcAutoColRow(pColRow, i, TRUE); - fScaledColumnNum += pColRow->m_Size.fLength; - scaledColumns.Add(pColRow); - if (pColRow->m_Size.fLength <= 0) { - break; - } - FX_FLOAT fPerWidth = pColRow->m_fActualSize / pColRow->m_Size.fLength; - if (fPerWidth > fScaledMaxPerWidth) { - fScaledMaxPerWidth = fPerWidth; - } - } - } - } - iColumns = scaledColumns.GetSize(); - for (int32_t j = 0; j < iColumns; j++) { - CFWL_GridColRow* pColRow = static_cast(scaledColumns[j]); - if (!pColRow) { - continue; - } - SetColRowActualSize(pColRow, fScaledMaxPerWidth * pColRow->m_Size.fLength); - } - FX_POSITION ps = m_mapWidgetInfo.GetStartPosition(); - while (ps) { - IFWL_Widget* pWidget = NULL; - CFWL_GridWidgetInfo* pInfo = NULL; - m_mapWidgetInfo.GetNextAssoc(ps, (void*&)pWidget, (void*&)pInfo); - if (!pInfo || pInfo->m_iColumnSpan < 2) { - continue; - } - CFX_PtrArray spanAutoColumns; - CFX_PtrArray spanScaledColumns; - FX_FLOAT fSpanSize = 0; - FX_FLOAT fScaledSum = 0; - int32_t iAutoColRows = 0; - int32_t iScaledColRows = 0; - for (int32_t i = 0; i < pInfo->m_iColumnSpan; i++) { - CFWL_GridColRow* pColumn = reinterpret_cast( - GetColRow(TRUE, pInfo->m_iColumn + i)); - if (!pColumn) { - break; - } - fSpanSize += pColumn->m_fActualSize; - if (pColumn->m_Size.eUnit == FWL_GRIDUNIT_Auto) { - iAutoColRows++; - spanAutoColumns.Add(pColumn); - } else if (pColumn->m_Size.eUnit == FWL_GRIDUNIT_Scaled) { - iScaledColRows++; - fScaledSum += pColumn->m_Size.fLength; - spanScaledColumns.Add(pColumn); - } - } - if (iAutoColRows < 1 && iScaledColRows < 1) { - continue; - } - FX_FLOAT fWidgetWidth = CalcAutoColumnWidgetWidth(pWidget, pInfo); - if (fWidgetWidth > fSpanSize) { - if (iScaledColRows > 0) { - if (fScaledSum <= 0) { - continue; - } - SetSpanScaledColRowSize(spanScaledColumns, fWidgetWidth - fSpanSize, - fScaledSum); - } else { - SetSpanAutoColRowSize(spanAutoColumns, fWidgetWidth - fSpanSize); - } - } - } - FX_FLOAT fAutoWidth = 0; - int32_t iAutoCols = autoColumns.GetSize(); - for (int32_t m = 0; m < iAutoCols; m++) { - fAutoWidth += static_cast(autoColumns[m])->m_fActualSize; - } - FX_FLOAT fScaledWidth = 0; - iColumns = scaledColumns.GetSize(); - for (int32_t n = 0; n < iColumns; n++) { - fScaledWidth += - static_cast(scaledColumns[n])->m_fActualSize; - } - return fFixedWidth + fAutoWidth + fScaledWidth; -} -FX_FLOAT CFWL_GridImp::ProcessUnCertainRows() { - int32_t iRows = m_Rows.GetSize(); - if (iRows < 1) { - CFWL_GridColRow* pColRow = new CFWL_GridColRow; - pColRow->m_Size.eUnit = FWL_GRIDUNIT_Auto; - ProcAutoColRow(pColRow, 0, FALSE); - FX_FLOAT fWidth = pColRow->m_fActualSize; - delete pColRow; - return fWidth; - } - FX_FLOAT fFixedHeight = 0; - CFX_PtrArray autoRows; - CFX_PtrArray scaledRows; - FX_FLOAT fScaledRowNum = 0; - FX_FLOAT fScaledMaxPerHeight = 0; - for (int32_t i = 0; i < iRows; i++) { - CFWL_GridColRow* pColRow = static_cast(m_Rows[i]); - if (!pColRow) { - continue; - } - switch (pColRow->m_Size.eUnit) { - case FWL_GRIDUNIT_Fixed: { - SetColRowActualSize(pColRow, pColRow->m_Size.fLength); - fFixedHeight += pColRow->m_fActualSize; - break; - } - case FWL_GRIDUNIT_Auto: { - ProcAutoColRow(pColRow, i, FALSE); - autoRows.Add(pColRow); - break; - } - case FWL_GRIDUNIT_Scaled: - default: { - ProcAutoColRow(pColRow, i, FALSE); - fScaledRowNum += pColRow->m_Size.fLength; - scaledRows.Add(pColRow); - if (pColRow->m_Size.fLength > 0) { - FX_FLOAT fPerHeight = - pColRow->m_fActualSize / pColRow->m_Size.fLength; - if (fPerHeight > fScaledMaxPerHeight) { - fScaledMaxPerHeight = fPerHeight; - } - } - break; - } - } - } - iRows = scaledRows.GetSize(); - for (int32_t j = 0; j < iRows; j++) { - CFWL_GridColRow* pColRow = static_cast(scaledRows[j]); - if (!pColRow) { - continue; - } - SetColRowActualSize(pColRow, fScaledMaxPerHeight * pColRow->m_Size.fLength); - } - FX_POSITION ps = m_mapWidgetInfo.GetStartPosition(); - while (ps) { - void* key = nullptr; - void* value = nullptr; - m_mapWidgetInfo.GetNextAssoc(ps, key, value); - IFWL_Widget* pWidget = static_cast(key); - CFWL_GridWidgetInfo* pInfo = static_cast(value); - if (pInfo->m_iRowSpan < 2) { - continue; - } - CFX_PtrArray spanAutoRows; - CFX_PtrArray spanScaledRows; - FX_FLOAT fSpanSize = 0; - FX_FLOAT fScaledSum = 0; - int32_t iAutoColRows = 0; - int32_t iScaledColRows = 0; - for (int32_t i = 0; i < pInfo->m_iRowSpan; i++) { - CFWL_GridColRow* pRow = reinterpret_cast( - GetColRow(FALSE, pInfo->m_iRow + i)); - if (!pRow) { - break; - } - fSpanSize += pRow->m_fActualSize; - if (pRow->m_Size.eUnit == FWL_GRIDUNIT_Auto) { - iAutoColRows++; - spanAutoRows.Add(pRow); - } else if (pRow->m_Size.eUnit == FWL_GRIDUNIT_Scaled) { - iScaledColRows++; - fScaledSum += pRow->m_Size.fLength; - spanScaledRows.Add(pRow); - } - } - if (iAutoColRows < 1 && iScaledColRows < 1) { - continue; - } - FX_FLOAT fWidgetHeight = CalcAutoColumnWidgetHeight(pWidget, pInfo); - if (fWidgetHeight > fSpanSize) { - if (iScaledColRows > 0) { - if (fScaledSum <= 0) { - continue; - } - SetSpanScaledColRowSize(spanScaledRows, fWidgetHeight - fSpanSize, - fScaledSum); - } else { - SetSpanAutoColRowSize(spanAutoRows, fWidgetHeight - fSpanSize); - } - } - } - FX_FLOAT fAutoHeigt = 0; - int32_t iAutoRows = autoRows.GetSize(); - for (int32_t m = 0; m < iAutoRows; m++) { - fAutoHeigt += static_cast(autoRows[m])->m_fActualSize; - } - FX_FLOAT fScaledHeight = 0; - iRows = scaledRows.GetSize(); - for (int32_t n = 0; n < iRows; n++) { - fScaledHeight += - static_cast(scaledRows[n])->m_fActualSize; - } - return fFixedHeight + fAutoHeigt + fScaledHeight; -} -FX_BOOL CFWL_GridImp::SetColRowActualSize(CFWL_GridColRow* pColRow, - FX_FLOAT fSize, - FX_BOOL bSetBeyond) { - if (pColRow->m_MinSize.eUnit == FWL_GRIDUNIT_Fixed && - fSize < pColRow->m_MinSize.fLength) { - pColRow->m_fActualSize = pColRow->m_MinSize.fLength; - return FALSE; - } - if (pColRow->m_MaxSize.eUnit == FWL_GRIDUNIT_Fixed && - fSize > pColRow->m_MaxSize.fLength) { - pColRow->m_fActualSize = pColRow->m_MaxSize.fLength; - return FALSE; - } - if (bSetBeyond) { - return TRUE; - } - pColRow->m_fActualSize = fSize; - return TRUE; -} -FX_FLOAT CFWL_GridImp::SetWidgetActualWidth(CFWL_GridWidgetInfo* pInfo, - FX_FLOAT fWidth) { - if (pInfo->m_Size[FWL_GRIDSIZE_MinWidth].eUnit == FWL_GRIDUNIT_Fixed && - fWidth < pInfo->m_Size[FWL_GRIDSIZE_MinWidth].fLength) { - fWidth = pInfo->m_Size[FWL_GRIDSIZE_MinWidth].fLength; - } - if (pInfo->m_Size[FWL_GRIDSIZE_MaxWidth].eUnit == FWL_GRIDUNIT_Fixed && - fWidth > pInfo->m_Size[FWL_GRIDSIZE_MaxWidth].fLength) { - fWidth = pInfo->m_Size[FWL_GRIDSIZE_MaxWidth].fLength; - } - pInfo->m_fActualWidth = fWidth; - return fWidth; -} -FX_FLOAT CFWL_GridImp::SetWidgetActualHeight(CFWL_GridWidgetInfo* pInfo, - FX_FLOAT fHeight) { - if (pInfo->m_Size[FWL_GRIDSIZE_MinHeight].eUnit == FWL_GRIDUNIT_Fixed && - fHeight < pInfo->m_Size[FWL_GRIDSIZE_MinHeight].fLength) { - fHeight = pInfo->m_Size[FWL_GRIDSIZE_MinHeight].fLength; - } - if (pInfo->m_Size[FWL_GRIDSIZE_MaxHeight].eUnit == FWL_GRIDUNIT_Fixed && - fHeight > pInfo->m_Size[FWL_GRIDSIZE_MaxHeight].fLength) { - fHeight = pInfo->m_Size[FWL_GRIDSIZE_MaxHeight].fLength; - } - pInfo->m_fActualHeight = fHeight; - return fHeight; -} -void CFWL_GridImp::SetAllWidgetsRect() { - FX_FLOAT fStartLeft = 0; - int32_t iColumns = m_Columns.GetSize(); - for (int32_t i = 0; i < iColumns; i++) { - CFWL_GridColRow* pColRow = static_cast(m_Columns[i]); - if (!pColRow) { - continue; - } - pColRow->m_fActualPos = fStartLeft; - fStartLeft += pColRow->m_fActualSize; - } - FX_FLOAT fStartTop = 0; - int32_t iRows = m_Rows.GetSize(); - for (int32_t j = 0; j < iRows; j++) { - CFWL_GridColRow* pColRow = static_cast(m_Rows[j]); - if (!pColRow) { - continue; - } - pColRow->m_fActualPos = fStartTop; - fStartTop += pColRow->m_fActualSize; - } - FX_POSITION ps = m_mapWidgetInfo.GetStartPosition(); - while (ps) { - IFWL_Widget* pWidget = NULL; - CFWL_GridWidgetInfo* pInfo = NULL; - m_mapWidgetInfo.GetNextAssoc(ps, (void*&)pWidget, (void*&)pInfo); - if (!pWidget || !pInfo) { - continue; - } - FX_FLOAT fColumnStart = 0; - CFWL_GridColRow* pColumn = - reinterpret_cast(GetColRow(TRUE, pInfo->m_iColumn)); - if (pColumn) { - fColumnStart = pColumn->m_fActualPos; - } - FX_FLOAT fRowStart = 0; - CFWL_GridColRow* pRow = - reinterpret_cast(GetColRow(FALSE, pInfo->m_iRow)); - if (pRow) { - fRowStart = pRow->m_fActualPos; - } - FX_FLOAT fColumnWidth = 0; - if (iColumns > 0) { - for (int32_t j = 0; j < pInfo->m_iColumnSpan; j++) { - CFWL_GridColRow* pCol = reinterpret_cast( - GetColRow(TRUE, pInfo->m_iColumn + j)); - if (!pCol) { - break; - } - fColumnWidth += pCol->m_fActualSize; - } - } else { - fColumnWidth = m_pProperties->m_rtWidget.width; - } - FX_FLOAT fRowHeight = 0; - if (iRows > 0) { - for (int32_t k = 0; k < pInfo->m_iRowSpan; k++) { - CFWL_GridColRow* pR = reinterpret_cast( - GetColRow(FALSE, pInfo->m_iRow + k)); - if (!pR) { - break; - } - fRowHeight += pR->m_fActualSize; - } - } else { - fRowHeight = m_pProperties->m_rtWidget.height; - } - FX_FLOAT fLeftMargin = 0, fRightMargin = 0; - FX_BOOL bLeftMargin = - GetWidgetMargin(pWidget, FWL_GRIDMARGIN_Left, fLeftMargin); - FX_BOOL bRightMargin = - GetWidgetMargin(pWidget, FWL_GRIDMARGIN_Right, fRightMargin); - FX_FLOAT fTopMargin = 0, fBottomMargin = 0; - FX_BOOL bTopMargin = - GetWidgetMargin(pWidget, FWL_GRIDMARGIN_Top, fTopMargin); - FX_BOOL bBottomMargin = - GetWidgetMargin(pWidget, FWL_GRIDMARGIN_Bottom, fBottomMargin); - if (pInfo->m_Size[FWL_GRIDSIZE_Width].eUnit == FWL_GRIDUNIT_Fixed) { - SetWidgetActualWidth(pInfo, pInfo->m_Size[FWL_GRIDSIZE_Width].fLength); - } else { - if (bLeftMargin && bRightMargin) { - SetWidgetActualWidth(pInfo, fColumnWidth - fLeftMargin - fRightMargin); - } else { - CFX_RectF rtAuto; - pWidget->GetWidgetRect(rtAuto, TRUE); - SetWidgetActualWidth(pInfo, rtAuto.width); - } - } - if (pInfo->m_Size[FWL_GRIDSIZE_Height].eUnit == FWL_GRIDUNIT_Fixed) { - SetWidgetActualHeight(pInfo, pInfo->m_Size[FWL_GRIDSIZE_Height].fLength); - } else { - if (bTopMargin && bBottomMargin) { - SetWidgetActualHeight(pInfo, fRowHeight - fTopMargin - fBottomMargin); - } else { - CFX_RectF rtAuto; - pWidget->GetWidgetRect(rtAuto, TRUE); - SetWidgetActualHeight(pInfo, rtAuto.height); - } - } - if (bLeftMargin && bRightMargin && - pInfo->m_Size[FWL_GRIDSIZE_Width].eUnit == FWL_GRIDUNIT_Fixed) { - fLeftMargin = - fColumnStart + fLeftMargin + - (fColumnWidth - fLeftMargin - fRightMargin - pInfo->m_fActualWidth) / - 2; - } else if (bLeftMargin) { - fLeftMargin = fColumnStart + fLeftMargin; - } else if (bRightMargin) { - fLeftMargin = - fColumnStart + fColumnWidth - fRightMargin - pInfo->m_fActualWidth; - } else { - fLeftMargin = fColumnStart; - } - if (bTopMargin && bBottomMargin && - pInfo->m_Size[FWL_GRIDSIZE_Height].eUnit == FWL_GRIDUNIT_Fixed) { - fTopMargin = - fRowStart + fTopMargin + - (fRowHeight - fTopMargin - fBottomMargin - pInfo->m_fActualHeight) / - 2; - } else if (bTopMargin) { - fTopMargin = fRowStart + fTopMargin; - } else if (bBottomMargin) { - fTopMargin = - fRowStart + fRowHeight - fBottomMargin - pInfo->m_fActualHeight; - } else { - fTopMargin = fRowStart; - } - CFX_RectF rtWidget, rtOld; - rtWidget.Set(fLeftMargin, fTopMargin, pInfo->m_fActualWidth, - pInfo->m_fActualHeight); - pWidget->GetWidgetRect(rtOld); - if (rtWidget == rtOld) { - continue; - } - pWidget->SetWidgetRect(rtWidget); - if (rtWidget.width == rtOld.width && rtWidget.height == rtOld.height) { - continue; - } - pWidget->Update(); - } -} -FX_BOOL CFWL_GridImp::IsGrid(IFWL_Widget* pWidget) { - if (!pWidget) - return FALSE; - return pWidget->GetClassID() == FWL_CLASSHASH_Grid; -} -void CFWL_GridImp::SetSpanAutoColRowSize(const CFX_PtrArray& spanAutos, - FX_FLOAT fTotalSize) { - int32_t iAutoColRows = spanAutos.GetSize(); - if (iAutoColRows < 1) { - return; - } - CFX_PtrArray autoNoMinMaxs; - FX_FLOAT fAutoPer = fTotalSize / iAutoColRows; - for (int32_t j = 0; j < iAutoColRows; j++) { - CFWL_GridColRow* pColumn = static_cast(spanAutos[j]); - FX_FLOAT fOrgSize = pColumn->m_fActualSize; - if (SetColRowActualSize(pColumn, pColumn->m_fActualSize + fAutoPer, TRUE)) { - autoNoMinMaxs.Add(pColumn); - } else { - fTotalSize -= pColumn->m_fActualSize - fOrgSize; - int32_t iNoMinMax = iAutoColRows - (j + 1 - autoNoMinMaxs.GetSize()); - if (iNoMinMax > 0 && fTotalSize > 0) { - fAutoPer = fTotalSize / iNoMinMax; - } else { - break; - } - } - } - int32_t iNormals = autoNoMinMaxs.GetSize(); - if (fTotalSize > 0) { - if (iNormals == iAutoColRows) { - fAutoPer = fTotalSize / iNormals; - for (int32_t k = 0; k < iNormals; k++) { - CFWL_GridColRow* pColumn = - static_cast(autoNoMinMaxs[k]); - pColumn->m_fActualSize += fAutoPer; - } - } else { - SetSpanAutoColRowSize(autoNoMinMaxs, fTotalSize); - } - } else { - } -} -void CFWL_GridImp::SetSpanScaledColRowSize(const CFX_PtrArray& spanScaleds, - FX_FLOAT fTotalSize, - FX_FLOAT fTotalScaledNum) { - int32_t iScaledColRows = spanScaleds.GetSize(); - if (iScaledColRows < 1) { - return; - } - CFX_PtrArray autoNoMinMaxs; - FX_FLOAT fPerSize = fTotalSize / fTotalScaledNum; - for (int32_t i = 0; i < iScaledColRows; i++) { - CFWL_GridColRow* pColRow = static_cast(spanScaleds[i]); - if (SetColRowActualSize(pColRow, pColRow->m_fActualSize + - fPerSize * pColRow->m_Size.fLength, - TRUE)) { - autoNoMinMaxs.Add(pColRow); - } else { - fTotalSize -= pColRow->m_fActualSize; - fTotalScaledNum -= pColRow->m_Size.fLength; - int32_t iNoMinMax = iScaledColRows - (i + 1 - autoNoMinMaxs.GetSize()); - if (iNoMinMax > 0 && fTotalSize > 0) { - fPerSize = fTotalSize / fTotalScaledNum; - } else { - break; - } - } - } - int32_t iNormals = autoNoMinMaxs.GetSize(); - if (fTotalSize > 0) { - if (iNormals == iScaledColRows) { - fPerSize = fTotalSize / fTotalScaledNum; - for (int32_t j = 0; j < iNormals; j++) { - CFWL_GridColRow* pColumn = - static_cast(autoNoMinMaxs[j]); - pColumn->m_fActualSize += fPerSize * pColumn->m_Size.fLength; - } - } else { - SetSpanScaledColRowSize(autoNoMinMaxs, fTotalSize, fTotalScaledNum); - } - } else { - } -} -void CFWL_GridImp::SetScaledColRowsSize(const CFX_PtrArray& spanScaleds, - FX_FLOAT fTotalSize, - FX_FLOAT fTotalScaledNum) { - int32_t iScaledColRows = spanScaleds.GetSize(); - if (iScaledColRows < 1) { - return; - } - CFX_PtrArray autoNoMinMaxs; - FX_FLOAT fPerSize = fTotalSize / fTotalScaledNum; - for (int32_t i = 0; i < iScaledColRows; i++) { - CFWL_GridColRow* pColRow = static_cast(spanScaleds[i]); - if (!pColRow) { - continue; - } - FX_FLOAT fSize = fPerSize * pColRow->m_Size.fLength; - FX_FLOAT fOrgSize = pColRow->m_fActualSize; - if (SetColRowActualSize(pColRow, fSize, TRUE)) { - autoNoMinMaxs.Add(pColRow); - } else { - fTotalSize -= pColRow->m_fActualSize - fOrgSize; - fTotalScaledNum -= pColRow->m_Size.fLength; - int32_t iNoMinMax = iScaledColRows - (i + 1 - autoNoMinMaxs.GetSize()); - if (iNoMinMax > 0 && fTotalSize > 0) { - fPerSize = fTotalSize / fTotalScaledNum; - } else { - break; - } - } - } - int32_t iNormals = autoNoMinMaxs.GetSize(); - if (fTotalSize > 0) { - if (iNormals == iScaledColRows) { - fPerSize = fTotalSize / fTotalScaledNum; - for (int32_t i = 0; i < iNormals; i++) { - CFWL_GridColRow* pColRow = - static_cast(autoNoMinMaxs[i]); - if (!pColRow) { - continue; - } - FX_FLOAT fSize = fPerSize * pColRow->m_Size.fLength; - pColRow->m_fActualSize = fSize; - } - } else { - SetScaledColRowsSize(autoNoMinMaxs, fTotalSize, fTotalScaledNum); - } - } else { - } -} -CFWL_GridImpDelegate::CFWL_GridImpDelegate(CFWL_GridImp* pOwner) - : m_pOwner(pOwner) {} -int32_t CFWL_GridImpDelegate::OnProcessMessage(CFWL_Message* pMessage) { - if (pMessage->GetClassID() != FWL_MSGHASH_Mouse) { - return 0; - } - CFWL_MsgMouse* pMsg = static_cast(pMessage); - if (pMsg->m_dwCmd != FWL_MSGMOUSECMD_LButtonDown) { - return 0; - } - return 1; -} -FWL_ERR CFWL_GridImpDelegate::OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - return m_pOwner->DrawWidget(pGraphics, pMatrix); -} diff --git a/xfa/src/fwl/core/fwl_gridimp.h b/xfa/src/fwl/core/fwl_gridimp.h deleted file mode 100644 index 326b236295..0000000000 --- a/xfa/src/fwl/core/fwl_gridimp.h +++ /dev/null @@ -1,197 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FWL_CORE_FWL_GRIDIMP_H_ -#define XFA_SRC_FWL_CORE_FWL_GRIDIMP_H_ - -#include "xfa/include/fwl/core/fwl_app.h" -#include "xfa/include/fwl/core/fwl_content.h" -#include "xfa/include/fwl/core/fwl_grid.h" -#include "xfa/src/fwl/core/fwl_contentimp.h" - -class CFWL_GridLength { - public: - CFWL_GridLength() : fLength(0), eUnit(FWL_GRIDUNIT_Fixed) {} - CFWL_GridLength(FX_FLOAT fValue, FWL_GRIDUNIT e) - : fLength(fValue), eUnit(e) {} - FX_FLOAT fLength; - FWL_GRIDUNIT eUnit; -}; - -class CFWL_GridColRow { - public: - CFWL_GridColRow() - : m_Size(1, FWL_GRIDUNIT_Scaled), - m_MinSize(0, FWL_GRIDUNIT_Fixed), - m_MaxSize(0, FWL_GRIDUNIT_Infinity), - m_fActualSize(0), - m_fActualPos(0) {} - CFWL_GridLength m_Size; - CFWL_GridLength m_MinSize; - CFWL_GridLength m_MaxSize; - FX_FLOAT m_fActualSize; - FX_FLOAT m_fActualPos; -}; - -class CFWL_GridWidgetInfo { - public: - CFWL_GridWidgetInfo() - : m_iColumn(0), - m_iColumnSpan(1), - m_iRow(0), - m_iRowSpan(1), - m_dwMarginFlag(0), - m_fActualWidth(0), - m_fActualHeight(0) { - m_Size[FWL_GRIDSIZE_Width].eUnit = FWL_GRIDUNIT_Auto; - m_Size[FWL_GRIDSIZE_Width].fLength = 0; - m_Size[FWL_GRIDSIZE_Height].eUnit = FWL_GRIDUNIT_Auto; - m_Size[FWL_GRIDSIZE_Height].fLength = 0; - m_Size[FWL_GRIDSIZE_MinWidth].eUnit = FWL_GRIDUNIT_Fixed; - m_Size[FWL_GRIDSIZE_MinWidth].fLength = 0; - m_Size[FWL_GRIDSIZE_MaxWidth].eUnit = FWL_GRIDUNIT_Infinity; - m_Size[FWL_GRIDSIZE_MaxWidth].fLength = 0; - m_Size[FWL_GRIDSIZE_MinHeight].eUnit = FWL_GRIDUNIT_Fixed; - m_Size[FWL_GRIDSIZE_MinHeight].fLength = 0; - m_Size[FWL_GRIDSIZE_MaxHeight].eUnit = FWL_GRIDUNIT_Infinity; - m_Size[FWL_GRIDSIZE_MaxHeight].fLength = 0; - m_Margin[0] = m_Margin[1] = m_Margin[2] = m_Margin[3] = 0; - } - int32_t m_iColumn; - int32_t m_iColumnSpan; - int32_t m_iRow; - int32_t m_iRowSpan; - CFWL_GridLength m_Size[6]; - FX_DWORD m_dwMarginFlag; - FX_FLOAT m_Margin[4]; - FX_FLOAT m_fActualWidth; - FX_FLOAT m_fActualHeight; -}; - -class CFWL_GridImp : public CFWL_ContentImp { - public: - CFWL_GridImp(const CFWL_WidgetImpProperties& properties, IFWL_Widget* pOuter); - virtual ~CFWL_GridImp(); - virtual FWL_ERR GetClassName(CFX_WideString& wsClass) const; - virtual FX_DWORD GetClassID() const; - virtual FWL_ERR Initialize(); - virtual FWL_ERR Finalize(); - virtual FWL_ERR GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize = FALSE); - virtual FWL_ERR SetWidgetRect(const CFX_RectF& rect); - virtual FWL_ERR Update(); - virtual FWL_ERR DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL); - - virtual FWL_ERR InsertWidget(IFWL_Widget* pChild, int32_t nIndex = -1); - virtual FWL_ERR RemoveWidget(IFWL_Widget* pWidget); - virtual FWL_HGRIDCOLROW InsertColRow(FX_BOOL bColumn, int32_t nIndex = -1); - virtual int32_t CountColRows(FX_BOOL bColumn); - virtual FWL_HGRIDCOLROW GetColRow(FX_BOOL bColumn, int32_t nIndex); - virtual int32_t GetIndex(FWL_HGRIDCOLROW hColRow); - virtual FX_FLOAT GetSize(FWL_HGRIDCOLROW hColRow, FWL_GRIDUNIT& eUnit); - virtual FWL_ERR SetSize(FWL_HGRIDCOLROW hColRow, - FX_FLOAT fSize, - FWL_GRIDUNIT eUnit); - FX_FLOAT GetMinSize(FWL_HGRIDCOLROW hColRow, FWL_GRIDUNIT& eUnit); - FWL_ERR SetMinSize(FWL_HGRIDCOLROW hColRow, - FX_FLOAT fSize, - FWL_GRIDUNIT eUnit); - FX_FLOAT GetMaxSize(FWL_HGRIDCOLROW hColRow, FWL_GRIDUNIT& eUnit); - FWL_ERR SetMaxSize(FWL_HGRIDCOLROW hColRow, - FX_FLOAT fSize, - FWL_GRIDUNIT eUnit); - virtual FX_BOOL DeleteColRow(FWL_HGRIDCOLROW hColRow); - virtual FX_BOOL IsColumn(FWL_HGRIDCOLROW hColRow); - virtual int32_t GetWidgetPos(IFWL_Widget* pWidget, FX_BOOL bColumn); - virtual FWL_ERR SetWidgetPos(IFWL_Widget* pWidget, - int32_t iPos, - FX_BOOL bColumn); - virtual int32_t GetWidgetSpan(IFWL_Widget* pWidget, FX_BOOL bColumn); - virtual FWL_ERR SetWidgetSpan(IFWL_Widget* pWidget, - int32_t iSpan, - FX_BOOL bColumn); - virtual FX_FLOAT GetWidgetSize(IFWL_Widget* pWidget, - FWL_GRIDSIZE eSize, - FWL_GRIDUNIT& eUnit); - virtual FWL_ERR SetWidgetSize(IFWL_Widget* pWidget, - FWL_GRIDSIZE eSize, - FX_FLOAT fSize, - FWL_GRIDUNIT eUit); - virtual FX_BOOL GetWidgetMargin(IFWL_Widget* pWidget, - FWL_GRIDMARGIN eMargin, - FX_FLOAT& fMargin); - virtual FWL_ERR SetWidgetMargin(IFWL_Widget* pWidget, - FWL_GRIDMARGIN eMargin, - FX_FLOAT fMargin); - virtual FWL_ERR RemoveWidgetMargin(IFWL_Widget* pWidget, - FWL_GRIDMARGIN eMargin); - virtual FX_FLOAT GetGridSize(FWL_GRIDSIZE eSize, FWL_GRIDUNIT& eUnit); - virtual FWL_ERR SetGridSize(FWL_GRIDSIZE eSize, - FX_FLOAT fSize, - FWL_GRIDUNIT eUit); - - protected: - CFWL_GridWidgetInfo* GetWidgetInfo(IFWL_Widget* pWidget); - void ProcFixedColRow(CFWL_GridColRow* pColRow, - int32_t nIndex, - FX_FLOAT fColRowSize, - FX_BOOL bColumn); - void ProcAutoColRow(CFWL_GridColRow* pColRow, - int32_t nIndex, - FX_BOOL bColumn); - void ProcScaledColRow(CFWL_GridColRow* pColRow, - int32_t nIndex, - FX_FLOAT fColRowSize, - FX_BOOL bColumn); - void CalcWidgetWidth(IFWL_Widget* pWidget, - CFWL_GridWidgetInfo* pInfo, - FX_FLOAT fColunmWidth); - void CalcWidgetHeigt(IFWL_Widget* pWidget, - CFWL_GridWidgetInfo* pInfo, - FX_FLOAT fRowHeigt); - FX_FLOAT CalcAutoColumnWidgetWidth(IFWL_Widget* pWidget, - CFWL_GridWidgetInfo* pInfo); - FX_FLOAT CalcAutoColumnWidgetHeight(IFWL_Widget* pWidget, - CFWL_GridWidgetInfo* pInfo); - FX_FLOAT ProcessColumns(FX_FLOAT fWidth); - FX_FLOAT ProcessRows(FX_FLOAT fHeight); - FX_FLOAT ProcessUnCertainColumns(); - FX_FLOAT ProcessUnCertainRows(); - FX_BOOL SetColRowActualSize(CFWL_GridColRow* pColRow, - FX_FLOAT fSize, - FX_BOOL bSetBeyond = FALSE); - FX_FLOAT SetWidgetActualWidth(CFWL_GridWidgetInfo* pInfo, FX_FLOAT fWidth); - FX_FLOAT SetWidgetActualHeight(CFWL_GridWidgetInfo* pInfo, FX_FLOAT fHeight); - void SetAllWidgetsRect(); - FX_BOOL IsGrid(IFWL_Widget* pWidget); - void SetSpanAutoColRowSize(const CFX_PtrArray& spanAutos, - FX_FLOAT fTotalSize); - void SetSpanScaledColRowSize(const CFX_PtrArray& spanScaleds, - FX_FLOAT fTotalSize, - FX_FLOAT fTotalScaledNum); - void SetScaledColRowsSize(const CFX_PtrArray& spanScaleds, - FX_FLOAT fTotalSize, - FX_FLOAT fTotalScaledNum); - CFX_PtrArray m_Rows; - CFX_PtrArray m_Columns; - CFX_PtrArray m_Widgets; - CFX_MapPtrToPtr m_mapWidgetInfo; - CFWL_GridLength m_Size[6]; - friend class CFWL_GridImpDelegate; -}; - -class CFWL_GridImpDelegate : public CFWL_WidgetImpDelegate { - public: - CFWL_GridImpDelegate(CFWL_GridImp* pOwner); - int32_t OnProcessMessage(CFWL_Message* pMessage) override; - FWL_ERR OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL) override; - - protected: - CFWL_GridImp* m_pOwner; -}; - -#endif // XFA_SRC_FWL_CORE_FWL_GRIDIMP_H_ diff --git a/xfa/src/fwl/core/fwl_noteimp.cpp b/xfa/src/fwl/core/fwl_noteimp.cpp deleted file mode 100644 index 3a46446362..0000000000 --- a/xfa/src/fwl/core/fwl_noteimp.cpp +++ /dev/null @@ -1,1097 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fwl/core/fwl_noteimp.h" - -#include "core/include/fxcrt/fx_ext.h" -#include "xfa/include/fwl/adapter/fwl_adapterwidgetmgr.h" -#include "xfa/include/fwl/basewidget/fwl_tooltipctrl.h" -#include "xfa/include/fwl/core/fwl_app.h" -#include "xfa/include/fwl/core/fwl_grid.h" -#include "xfa/src/fwl/basewidget/fwl_tooltipctrlimp.h" -#include "xfa/src/fwl/core/fwl_appimp.h" -#include "xfa/src/fwl/core/fwl_formimp.h" -#include "xfa/src/fwl/core/fwl_panelimp.h" -#include "xfa/src/fwl/core/fwl_targetimp.h" -#include "xfa/src/fwl/core/fwl_threadimp.h" -#include "xfa/src/fwl/core/fwl_widgetimp.h" -#include "xfa/src/fwl/core/fwl_widgetmgrimp.h" - -CFWL_NoteLoop::CFWL_NoteLoop(CFWL_WidgetImp* pForm) - : m_pForm(pForm), m_bContinueModal(TRUE) {} -FX_BOOL CFWL_NoteLoop::PreProcessMessage(CFWL_Message* pMessage) { - if (!m_pForm) { - return FALSE; - } - return TranslateAccelerator(pMessage); -} -FWL_ERR CFWL_NoteLoop::Idle(int32_t count) { -#if (_FX_OS_ == _FX_WIN32_DESKTOP_) - if (count <= 0) { -#endif - CFWL_EvtIdle ev; - IFWL_App* pApp = FWL_GetApp(); - if (!pApp) - return FWL_ERR_Indefinite; - IFWL_NoteDriver* pDriver = pApp->GetNoteDriver(); - if (!pDriver) - return FWL_ERR_Indefinite; - pDriver->SendNote(&ev); -#if (_FX_OS_ == _FX_WIN32_DESKTOP_) - } -#endif - return FWL_ERR_Indefinite; -} -CFWL_WidgetImp* CFWL_NoteLoop::GetForm() { - return m_pForm; -} -FX_BOOL CFWL_NoteLoop::ContinueModal() { - return m_bContinueModal; -} -FWL_ERR CFWL_NoteLoop::EndModalLoop() { - m_bContinueModal = FALSE; -#if (_FX_OS_ == _FX_MACOSX_) - CFWL_WidgetMgr* pWidgetMgr = static_cast(FWL_GetWidgetMgr()); - IFWL_AdapterWidgetMgr* adapterWidgetMgr = pWidgetMgr->GetAdapterWidgetMgr(); - adapterWidgetMgr->EndLoop(); -#endif - return FWL_ERR_Succeeded; -} -FX_BOOL CFWL_NoteLoop::TranslateAccelerator(CFWL_Message* pMessage) { - if (pMessage->GetClassID() != FWL_MSGHASH_Key) { - return FALSE; - } - CFWL_MsgKey* pMsgKey = static_cast(pMessage); - if (pMsgKey->m_dwCmd != FWL_MSGKEYCMD_KeyDown) { - return FALSE; - } - CFX_MapAccelerators& accel = - static_cast(m_pForm)->GetAccelerator(); - FX_POSITION pos = accel.GetStartPosition(); - if (!pos) { - return FALSE; - } - FX_DWORD vrKey, rValue; - while (pos) { - accel.GetNextAssoc(pos, vrKey, rValue); - FX_DWORD dwFlags = (vrKey & 0xFF00) >> 8; - FX_DWORD m_dwKeyCode = vrKey & 0x00FF; - if (pMsgKey->m_dwFlags == dwFlags && pMsgKey->m_dwKeyCode == m_dwKeyCode) { - GenerateCommondEvent(rValue); - return TRUE; - } - } - return FALSE; -} -FWL_ERR CFWL_NoteLoop::SetMainForm(CFWL_WidgetImp* pForm) { - m_pForm = pForm; - return FWL_ERR_Succeeded; -} -void CFWL_NoteLoop::GenerateCommondEvent(FX_DWORD dwCommand) { - CFWL_EvtMenuCommand ev; - ev.m_iCommand = dwCommand; - IFWL_NoteThread* pThread = m_pForm->GetOwnerThread(); - if (!pThread) - return; - IFWL_NoteDriver* pDriver = pThread->GetNoteDriver(); - if (!pDriver) - return; - pDriver->SendNote(&ev); -} -CFWL_NoteDriver::CFWL_NoteDriver() - : m_sendEventCalled(0), - m_maxSize(500), - m_bFullScreen(FALSE), - m_pHover(nullptr), - m_pFocus(nullptr), - m_pGrab(nullptr), - m_hook(nullptr) { - m_pNoteLoop = new CFWL_NoteLoop; - PushNoteLoop(m_pNoteLoop); -} -CFWL_NoteDriver::~CFWL_NoteDriver() { - delete m_pNoteLoop; - ClearInvalidEventTargets(TRUE); -} -FX_BOOL CFWL_NoteDriver::SendNote(CFWL_Note* pNote) { - if (pNote->IsEvent()) { - int32_t iCount = m_eventTargets.GetCount(); - if (iCount < 1) { - return TRUE; - } - if (FWL_EVTHASH_Mouse == static_cast(pNote)->GetClassID()) { - CFWL_EvtMouse* pMouse = static_cast(pNote); - if (FWL_MSGMOUSECMD_MouseHover == pMouse->m_dwCmd) { - if (m_pNoteLoop->GetForm() && - CFWL_ToolTipContainer::getInstance()->ProcessEnter( - pMouse, m_pNoteLoop->GetForm()->GetInterface())) { - } - } else if (FWL_MSGMOUSECMD_MouseLeave == pMouse->m_dwCmd) { - if (CFWL_ToolTipContainer::getInstance()->ProcessLeave(pMouse)) { - } - } else if ((FWL_MSGMOUSECMD_LButtonDown <= pMouse->m_dwCmd) && - (FWL_MSGMOUSECMD_MButtonDblClk >= pMouse->m_dwCmd)) { - if (CFWL_ToolTipContainer::getInstance()->ProcessLeave(pMouse)) { - } - } - } - m_sendEventCalled++; - FX_POSITION pos = m_eventTargets.GetStartPosition(); - while (pos) { - void* key = NULL; - CFWL_EventTarget* pEventTarget; - m_eventTargets.GetNextAssoc(pos, key, (void*&)pEventTarget); - if (pEventTarget && !pEventTarget->IsInvalid()) { - pEventTarget->ProcessEvent(static_cast(pNote)); - } - } - m_sendEventCalled--; - } else { - if (!pNote->m_pDstTarget) - return FALSE; - IFWL_WidgetDelegate* pDelegate = pNote->m_pDstTarget->SetDelegate(NULL); - if (pDelegate) { - pDelegate->OnProcessMessage(static_cast(pNote)); - } - } - return TRUE; -} -extern void FWL_PostMessageToMainRoop(CFWL_Message* pMessage); -FX_BOOL CFWL_NoteDriver::PostMessage(CFWL_Message* pMessage) { - FWL_PostMessageToMainRoop(pMessage); - return TRUE; -} -#define FWL_NoteDriver_EventKey 1100 -FWL_ERR CFWL_NoteDriver::RegisterEventTarget(IFWL_Widget* pListener, - IFWL_Widget* pEventSource, - FX_DWORD dwFilter) { - FX_DWORD dwkey = (FX_DWORD)(uintptr_t)pListener->GetPrivateData( - (void*)(uintptr_t)FWL_NoteDriver_EventKey); - if (dwkey == 0) { - void* random = FX_Random_MT_Start(0); - dwkey = rand(); - FX_Random_MT_Close(random); - pListener->SetPrivateData((void*)(uintptr_t)FWL_NoteDriver_EventKey, - (void*)(uintptr_t)dwkey, NULL); - } - CFWL_EventTarget* value = NULL; - if (!m_eventTargets.Lookup((void*)(uintptr_t)dwkey, (void*&)value)) { - value = new CFWL_EventTarget(this, pListener); - m_eventTargets.SetAt((void*)(uintptr_t)dwkey, value); - } - value->SetEventSource(pEventSource, dwFilter); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_NoteDriver::UnregisterEventTarget(IFWL_Widget* pListener) { - FX_DWORD dwkey = (FX_DWORD)(uintptr_t)pListener->GetPrivateData( - (void*)(uintptr_t)FWL_NoteDriver_EventKey); - if (dwkey == 0) { - return FWL_ERR_Indefinite; - } - CFWL_EventTarget* value = NULL; - if (m_eventTargets.Lookup((void*)(uintptr_t)dwkey, (void*&)value)) { - value->FlagInvalid(); - } - return FWL_ERR_Succeeded; -} -void CFWL_NoteDriver::ClearEventTargets(FX_BOOL bRemoveAll) { - ClearInvalidEventTargets(bRemoveAll); -} -int32_t CFWL_NoteDriver::GetQueueMaxSize() const { - return m_maxSize; -} -FWL_ERR CFWL_NoteDriver::SetQueueMaxSize(const int32_t size) { - m_maxSize = size; - return FWL_ERR_Succeeded; -} -IFWL_NoteThread* CFWL_NoteDriver::GetOwnerThread() const { - return FWL_GetApp(); -} -FWL_ERR CFWL_NoteDriver::PushNoteLoop(IFWL_NoteLoop* pNoteLoop) { - m_noteLoopQueue.Add(pNoteLoop); - return FWL_ERR_Succeeded; -} -IFWL_NoteLoop* CFWL_NoteDriver::PopNoteLoop() { - int32_t pos = m_noteLoopQueue.GetSize(); - if (pos <= 0) - return NULL; - IFWL_NoteLoop* p = - static_cast(m_noteLoopQueue.GetAt(pos - 1)); - m_noteLoopQueue.RemoveAt(pos - 1); - return p; -} -FX_BOOL CFWL_NoteDriver::SetFocus(IFWL_Widget* pFocus, FX_BOOL bNotify) { - if (m_pFocus == pFocus) { - return TRUE; - } - IFWL_Widget* pPrev = m_pFocus; - m_pFocus = pFocus; - if (pPrev) { - CFWL_MsgKillFocus ms; - ms.m_pDstTarget = pPrev; - ms.m_pSrcTarget = pPrev; - if (bNotify) { - ms.m_dwExtend = 1; - } - IFWL_WidgetDelegate* pDelegate = pPrev->SetDelegate(NULL); - if (pDelegate) { - pDelegate->OnProcessMessage(&ms); - } - } - if (pFocus) { - IFWL_Widget* pWidget = - FWL_GetWidgetMgr()->GetWidget(pFocus, FWL_WGTRELATION_SystemForm); - CFWL_FormImp* pForm = - pWidget ? static_cast(pWidget->GetImpl()) : nullptr; - if (pForm) { - CFWL_WidgetImp* pNewFocus = - static_cast(pFocus->GetImpl()); - pForm->SetSubFocus(pNewFocus); - } - CFWL_MsgSetFocus ms; - ms.m_pDstTarget = pFocus; - if (bNotify) { - ms.m_dwExtend = 1; - } - IFWL_WidgetDelegate* pDelegate = pFocus->SetDelegate(NULL); - if (pDelegate) { - pDelegate->OnProcessMessage(&ms); - } - } - return TRUE; -} -FWL_ERR CFWL_NoteDriver::Run() { - CFWL_WidgetMgr* pWidgetMgr = static_cast(FWL_GetWidgetMgr()); - if (!pWidgetMgr) - return FWL_ERR_Indefinite; -#if (_FX_OS_ == _FX_MACOSX_) - IFWL_AdapterWidgetMgr* adapterWidgetMgr = pWidgetMgr->GetAdapterWidgetMgr(); - CFWL_NoteLoop* pTopLoop = GetTopLoop(); - if (pTopLoop) { - CFWL_WidgetImp* formImp = pTopLoop->GetForm(); - if (formImp) { - IFWL_Widget* pForm = formImp->GetInterface(); - adapterWidgetMgr->RunLoop(pForm); - } - } -#elif(_FX_OS_ == _FX_WIN32_DESKTOP_ || _FX_OS_ == _FX_WIN64_) - FX_BOOL bIdle = TRUE; - int32_t iIdleCount = 0; - CFWL_NoteLoop* pTopLoop = NULL; - for (;;) { - pTopLoop = GetTopLoop(); - if (!pTopLoop || !pTopLoop->ContinueModal()) { - break; - } - if (UnqueueMessage(pTopLoop)) { - continue; - } - while (bIdle && !(pWidgetMgr->CheckMessage_Native())) { - if (FWL_ERR_Indefinite == pTopLoop->Idle(iIdleCount++)) { - bIdle = FALSE; - } - } - do { - if (FWL_ERR_Indefinite == pWidgetMgr->DispatchMessage_Native()) { - break; - } - if (pWidgetMgr->IsIdleMessage_Native()) { - bIdle = TRUE; - iIdleCount = 0; - } - } while (pWidgetMgr->CheckMessage_Native()); - } -#elif(_FX_OS_ == _FX_LINUX_DESKTOP_) - CFWL_NoteLoop* pTopLoop = NULL; - for (;;) { - pTopLoop = GetTopLoop(); - if (!pTopLoop || !pTopLoop->ContinueModal()) { - break; - } - if (UnqueueMessage(pTopLoop)) { - continue; - } - if (pWidgetMgr->CheckMessage_Native()) { - pWidgetMgr->DispatchMessage_Native(); - } - } -#endif - return FWL_ERR_Succeeded; -} -IFWL_Widget* CFWL_NoteDriver::GetFocus() { - return m_pFocus; -} -IFWL_Widget* CFWL_NoteDriver::GetHover() { - return m_pHover; -} -void CFWL_NoteDriver::SetHover(IFWL_Widget* pHover) { - m_pHover = pHover; -} -void CFWL_NoteDriver::SetGrab(IFWL_Widget* pGrab, FX_BOOL bSet) { - m_pGrab = bSet ? pGrab : NULL; -} -void CFWL_NoteDriver::NotifyTargetHide(IFWL_Widget* pNoteTarget) { - if (m_pFocus == pNoteTarget) { - m_pFocus = NULL; - } - if (m_pHover == pNoteTarget) { - m_pHover = NULL; - } - if (m_pGrab == pNoteTarget) { - m_pGrab = NULL; - } -} -void CFWL_NoteDriver::NotifyTargetDestroy(IFWL_Widget* pNoteTarget) { - if (m_pFocus == pNoteTarget) { - m_pFocus = NULL; - } - if (m_pHover == pNoteTarget) { - m_pHover = NULL; - } - if (m_pGrab == pNoteTarget) { - m_pGrab = NULL; - } - UnregisterEventTarget(pNoteTarget); - int32_t count = m_forms.GetSize(); - for (int32_t nIndex = 0; nIndex < count; nIndex++) { - CFWL_FormImp* pForm = static_cast(m_forms[nIndex]); - if (!pForm) { - continue; - } - CFWL_WidgetImp* pSubFocus = pForm->GetSubFocus(); - if (!pSubFocus) - return; - if (pSubFocus && pSubFocus->GetInterface() == pNoteTarget) { - pForm->SetSubFocus(NULL); - } - } -} -void CFWL_NoteDriver::NotifyFullScreenMode(IFWL_Widget* pNoteTarget, - FX_BOOL bFullScreen) { - m_bFullScreen = bFullScreen; -} -FWL_ERR CFWL_NoteDriver::RegisterForm(CFWL_WidgetImp* pForm) { - if (!pForm) - return FWL_ERR_Indefinite; - if (m_forms.Find(pForm) >= 0) { - return FWL_ERR_Indefinite; - } - m_forms.Add(pForm); - if (m_forms.GetSize() == 1) { - CFWL_NoteLoop* pLoop = - static_cast(m_noteLoopQueue.GetAt(0)); - if (!pLoop) - return FWL_ERR_Indefinite; - pLoop->SetMainForm(pForm); - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_NoteDriver::UnRegisterForm(CFWL_WidgetImp* pForm) { - if (!pForm) - return FWL_ERR_Indefinite; - int32_t nIndex = m_forms.Find(pForm); - if (nIndex < 0) { - return FWL_ERR_Indefinite; - } - m_forms.RemoveAt(nIndex); - return FWL_ERR_Succeeded; -} -FX_BOOL CFWL_NoteDriver::QueueMessage(CFWL_Message* pMessage) { - pMessage->Retain(); - m_noteQueue.Add(pMessage); - return TRUE; -} -FX_BOOL CFWL_NoteDriver::UnqueueMessage(CFWL_NoteLoop* pNoteLoop) { - if (m_noteQueue.GetSize() < 1) { - return FALSE; - } - CFWL_Message* pMessage = static_cast(m_noteQueue[0]); - m_noteQueue.RemoveAt(0); - if (!IsValidMessage(pMessage)) { - pMessage->Release(); - return TRUE; - } - FX_BOOL bHookMessage = FALSE; - if (m_hook) { - bHookMessage = (*m_hook)(pMessage, m_hookInfo); - } - if (!bHookMessage && !pNoteLoop->PreProcessMessage(pMessage)) { - ProcessMessage(pMessage); - } - pMessage->Release(); - return TRUE; -} -CFWL_NoteLoop* CFWL_NoteDriver::GetTopLoop() { - int32_t size = m_noteLoopQueue.GetSize(); - if (size <= 0) - return NULL; - return static_cast(m_noteLoopQueue[size - 1]); -} -int32_t CFWL_NoteDriver::CountLoop() { - return m_noteLoopQueue.GetSize(); -} -void CFWL_NoteDriver::SetHook(FWLMessageHookCallback callback, void* info) { - m_hook = callback; - m_hookInfo = info; -} -FX_BOOL CFWL_NoteDriver::ProcessMessage(CFWL_Message* pMessage) { - CFWL_WidgetMgr* pWidgetMgr = static_cast(FWL_GetWidgetMgr()); - IFWL_Widget* pMessageForm = pWidgetMgr->IsFormDisabled() - ? pMessage->m_pDstTarget - : GetMessageForm(pMessage->m_pDstTarget); - if (!pMessageForm) - return FALSE; - if (DispatchMessage(pMessage, pMessageForm)) { - if (pMessage->GetClassID() == FWL_MSGHASH_Mouse) { - MouseSecondary(static_cast(pMessage)); - } - return TRUE; - } - return FALSE; -} -FX_BOOL CFWL_NoteDriver::DispatchMessage(CFWL_Message* pMessage, - IFWL_Widget* pMessageForm) { - FX_BOOL bRet = FALSE; - switch (pMessage->GetClassID()) { - case FWL_MSGHASH_Activate: { - bRet = DoActivate(static_cast(pMessage), pMessageForm); - break; - } - case FWL_MSGHASH_Deactivate: { - bRet = DoDeactivate(static_cast(pMessage), - pMessageForm); - break; - } - case FWL_MSGHASH_SetFocus: { - bRet = DoSetFocus(static_cast(pMessage), pMessageForm); - break; - } - case FWL_MSGHASH_KillFocus: { - bRet = - DoKillFocus(static_cast(pMessage), pMessageForm); - break; - } - case FWL_MSGHASH_Key: { - bRet = DoKey(static_cast(pMessage), pMessageForm); - break; - } - case FWL_MSGHASH_Mouse: { - bRet = DoMouse(static_cast(pMessage), pMessageForm); - break; - } - case FWL_MSGHASH_MouseWheel: { - bRet = DoWheel(static_cast(pMessage), pMessageForm); - break; - } - case FWL_MSGHASH_Size: { - bRet = DoSize(static_cast(pMessage)); - break; - } - case FWL_MSGHASH_Cursor: { - bRet = TRUE; - break; - } - case FWL_MSGHASH_WindowMove: { - bRet = DoWindowMove(static_cast(pMessage), - pMessageForm); - break; - } - case FWL_MSGHASH_DropFiles: { - bRet = - DoDragFiles(static_cast(pMessage), pMessageForm); - break; - } - default: { - bRet = TRUE; - break; - } - } - if (bRet) { - IFWL_WidgetDelegate* pDelegate = pMessage->m_pDstTarget->SetDelegate(NULL); - if (pDelegate) { - pDelegate->OnProcessMessage(pMessage); - } - } - return bRet; -} -FX_BOOL CFWL_NoteDriver::DoActivate(CFWL_MsgActivate* pMsg, - IFWL_Widget* pMessageForm) { - if (m_bFullScreen) { - return FALSE; - } - pMsg->m_pDstTarget = pMessageForm; - return (pMsg->m_pDstTarget)->GetStates() & FWL_WGTSTATE_Deactivated; -} -FX_BOOL CFWL_NoteDriver::DoDeactivate(CFWL_MsgDeactivate* pMsg, - IFWL_Widget* pMessageForm) { - if (m_bFullScreen) { - return FALSE; - } - int32_t iTrackLoop = m_noteLoopQueue.GetSize(); - if (iTrackLoop <= 0) - return FALSE; - if (iTrackLoop == 1) { - if (pMessageForm->IsInstance(FX_WSTRC(L"FWL_FORMPROXY"))) { - return FALSE; - } - if (pMsg->m_pSrcTarget && - pMsg->m_pSrcTarget->IsInstance(FX_WSTRC(L"FWL_FORMPROXY"))) { - return FALSE; - } - if (pMsg->m_pSrcTarget && pMsg->m_pSrcTarget->GetClassID() == 1111984755) { - return FALSE; - } - return TRUE; - } - IFWL_Widget* pDst = pMsg->m_pDstTarget; - if (!pDst) - return FALSE; -#if (_FX_OS_ == _FX_MACOSX_) - if (pDst == pMessageForm && pDst->IsInstance(L"FWL_FORMPROXY")) { - return TRUE; - } -#endif - return pDst != pMessageForm && - !pDst->IsInstance(FX_WSTRC(L"FWL_FORMPROXY")) && - !pMessageForm->IsInstance(FX_WSTRC(L"FWL_FORMPROXY")); -} -FX_BOOL CFWL_NoteDriver::DoSetFocus(CFWL_MsgSetFocus* pMsg, - IFWL_Widget* pMessageForm) { - CFWL_WidgetMgr* pWidgetMgr = static_cast(FWL_GetWidgetMgr()); - if (pWidgetMgr->IsFormDisabled()) { - m_pFocus = pMsg->m_pDstTarget; - return TRUE; - } else { - IFWL_Widget* pWidget = pMsg->m_pDstTarget; - CFWL_FormImp* pForm = - pWidget ? static_cast(pWidget->GetImpl()) : nullptr; - if (pForm) { - CFWL_WidgetImp* pSubFocus = pForm->GetSubFocus(); - if (pSubFocus && ((pSubFocus->GetStates() & FWL_WGTSTATE_Focused) == 0)) { - pMsg->m_pDstTarget = pSubFocus->GetInterface(); - if (m_pFocus != pMsg->m_pDstTarget) { - m_pFocus = pMsg->m_pDstTarget; - return TRUE; - } - } - } - } - return FALSE; -} -FX_BOOL CFWL_NoteDriver::DoKillFocus(CFWL_MsgKillFocus* pMsg, - IFWL_Widget* pMessageForm) { - CFWL_WidgetMgr* pWidgetMgr = static_cast(FWL_GetWidgetMgr()); - if (pWidgetMgr->IsFormDisabled()) { - if (m_pFocus == pMsg->m_pDstTarget) { - m_pFocus = NULL; - } - return TRUE; - } - IFWL_Widget* pWidget = pMsg->m_pDstTarget; - CFWL_FormImp* pForm = - pWidget ? static_cast(pWidget->GetImpl()) : nullptr; - if (pForm) { - CFWL_WidgetImp* pSubFocus = pForm->GetSubFocus(); - if (pSubFocus && (pSubFocus->GetStates() & FWL_WGTSTATE_Focused)) { - pMsg->m_pDstTarget = pSubFocus->GetInterface(); - if (m_pFocus == pMsg->m_pDstTarget) { - m_pFocus = NULL; - return TRUE; - } - } - } - return FALSE; -} -FX_BOOL CFWL_NoteDriver::DoKey(CFWL_MsgKey* pMsg, IFWL_Widget* pMessageForm) { -#if (_FX_OS_ != _FX_MACOSX_) - if (pMsg->m_dwCmd == FWL_MSGKEYCMD_KeyDown && - pMsg->m_dwKeyCode == FWL_VKEY_Tab) { - CFWL_WidgetMgr* pWidgetMgr = - static_cast(FWL_GetWidgetMgr()); - IFWL_Widget* pForm = GetMessageForm(pMsg->m_pDstTarget); - IFWL_Widget* pFocus = m_pFocus; - if (m_pFocus) { - if (pWidgetMgr->GetWidget(m_pFocus, FWL_WGTRELATION_SystemForm) != - pForm) { - pFocus = NULL; - } - } - FX_BOOL bFind = FALSE; - IFWL_Widget* pNextTabStop = pWidgetMgr->nextTab(pForm, pFocus, bFind); - if (!pNextTabStop) { - bFind = FALSE; - pNextTabStop = pWidgetMgr->nextTab(pForm, NULL, bFind); - } - if (pNextTabStop == pFocus) { - return TRUE; - } - if (pNextTabStop) { - SetFocus(pNextTabStop); - } - return TRUE; - } -#endif - if (!m_pFocus) { - if (pMsg->m_dwCmd == FWL_MSGKEYCMD_KeyDown && - pMsg->m_dwKeyCode == FWL_VKEY_Return) { - CFWL_WidgetMgr* pWidgetMgr = - static_cast(FWL_GetWidgetMgr()); - IFWL_Widget* defButton = pWidgetMgr->GetDefaultButton(pMessageForm); - if (defButton) { - pMsg->m_pDstTarget = defButton; - return TRUE; - } - } - return FALSE; - } - pMsg->m_pDstTarget = m_pFocus; - return TRUE; -} -FX_BOOL CFWL_NoteDriver::DoMouse(CFWL_MsgMouse* pMsg, - IFWL_Widget* pMessageForm) { - if (pMsg->m_dwCmd == FWL_MSGMOUSECMD_MouseLeave || - pMsg->m_dwCmd == FWL_MSGMOUSECMD_MouseHover || - pMsg->m_dwCmd == FWL_MSGMOUSECMD_MouseEnter) { - return pMsg->m_pDstTarget != NULL; - } - if (pMsg->m_pDstTarget != pMessageForm) { - pMsg->m_pDstTarget->TransformTo(pMessageForm, pMsg->m_fx, pMsg->m_fy); - } - if (!DoMouseEx(pMsg, pMessageForm)) { - pMsg->m_pDstTarget = pMessageForm; - } - return TRUE; -} -FX_BOOL CFWL_NoteDriver::DoWheel(CFWL_MsgMouseWheel* pMsg, - IFWL_Widget* pMessageForm) { - CFWL_WidgetMgr* pWidgetMgr = static_cast(FWL_GetWidgetMgr()); - if (!pWidgetMgr) - return FALSE; - IFWL_Widget* pDst = - pWidgetMgr->GetWidgetAtPoint(pMessageForm, pMsg->m_fx, pMsg->m_fy); - if (!pDst) - return FALSE; - while (pDst && pDst->GetClassID() == FWL_CLASSHASH_Grid) { - pDst = pDst->GetParent(); - } - pMessageForm->TransformTo(pDst, pMsg->m_fx, pMsg->m_fy); - pMsg->m_pDstTarget = pDst; - return TRUE; -} -FX_BOOL CFWL_NoteDriver::DoSize(CFWL_MsgSize* pMsg) { - CFWL_WidgetMgr* pWidgetMgr = static_cast(FWL_GetWidgetMgr()); - if (!pWidgetMgr) - return FALSE; - pWidgetMgr->NotifySizeChanged(pMsg->m_pDstTarget, (FX_FLOAT)pMsg->m_iWidth, - (FX_FLOAT)pMsg->m_iHeight); - return TRUE; -} -FX_BOOL CFWL_NoteDriver::DoWindowMove(CFWL_MsgWindowMove* pMsg, - IFWL_Widget* pMessageForm) { - return pMsg->m_pDstTarget == pMessageForm; -} -FX_BOOL CFWL_NoteDriver::DoDragFiles(CFWL_MsgDropFiles* pMsg, - IFWL_Widget* pMessageForm) { - return pMsg->m_pDstTarget == pMessageForm; -} -FX_BOOL CFWL_NoteDriver::DoMouseEx(CFWL_MsgMouse* pMsg, - IFWL_Widget* pMessageForm) { - CFWL_WidgetMgr* pWidgetMgr = static_cast(FWL_GetWidgetMgr()); - if (!pWidgetMgr) - return FALSE; - IFWL_Widget* pTarget = NULL; - if (m_pGrab) - pTarget = m_pGrab; - if (!pTarget) { - pTarget = - pWidgetMgr->GetWidgetAtPoint(pMessageForm, pMsg->m_fx, pMsg->m_fy); - while (pTarget && pTarget->GetClassID() == FWL_CLASSHASH_Grid) { - pTarget = pTarget->GetParent(); - } - } - if (pTarget) { - if (pMessageForm != pTarget) { - pMessageForm->TransformTo(pTarget, pMsg->m_fx, pMsg->m_fy); - } - } - if (!pTarget) - return FALSE; - pMsg->m_pDstTarget = pTarget; - return TRUE; -} -void CFWL_NoteDriver::MouseSecondary(CFWL_MsgMouse* pMsg) { - IFWL_Widget* pTarget = pMsg->m_pDstTarget; - if (pTarget == m_pHover) { - return; - } - if (m_pHover) { - CFWL_MsgMouse msLeave; - msLeave.m_pDstTarget = m_pHover; - msLeave.m_fx = pMsg->m_fx; - msLeave.m_fy = pMsg->m_fy; - pTarget->TransformTo(m_pHover, msLeave.m_fx, msLeave.m_fy); - msLeave.m_dwFlags = 0; - msLeave.m_dwCmd = FWL_MSGMOUSECMD_MouseLeave; - DispatchMessage(&msLeave, NULL); - } - if (pTarget->GetClassID() == FWL_CLASSHASH_Form) { - m_pHover = NULL; - return; - } - m_pHover = pTarget; - CFWL_MsgMouse msHover; - msHover.m_pDstTarget = pTarget; - msHover.m_fx = pMsg->m_fx; - msHover.m_fy = pMsg->m_fy; - msHover.m_dwFlags = 0; - msHover.m_dwCmd = FWL_MSGMOUSECMD_MouseHover; - DispatchMessage(&msHover, NULL); -} -FX_BOOL CFWL_NoteDriver::IsValidMessage(CFWL_Message* pMessage) { - if (pMessage->GetClassID() == FWL_MSGHASH_Post) { - return TRUE; - } - int32_t iCount = m_noteLoopQueue.GetSize(); - for (int32_t i = 0; i < iCount; i++) { - CFWL_NoteLoop* pNoteLoop = static_cast(m_noteLoopQueue[i]); - CFWL_WidgetImp* pForm = pNoteLoop->GetForm(); - if (pForm && (pForm->GetInterface() == pMessage->m_pDstTarget)) { - return TRUE; - } - } - iCount = m_forms.GetSize(); - for (int32_t j = 0; j < iCount; j++) { - CFWL_FormImp* pForm = static_cast(m_forms[j]); - if (pForm->GetInterface() == pMessage->m_pDstTarget) { - return TRUE; - } - } - return FALSE; -} -IFWL_Widget* CFWL_NoteDriver::GetMessageForm(IFWL_Widget* pDstTarget) { - int32_t iTrackLoop = m_noteLoopQueue.GetSize(); - if (iTrackLoop <= 0) - return NULL; - IFWL_Widget* pMessageForm = NULL; - if (iTrackLoop > 1) { - CFWL_NoteLoop* pNootLoop = - static_cast(m_noteLoopQueue[iTrackLoop - 1]); - pMessageForm = pNootLoop->GetForm()->GetInterface(); - } else { - pMessageForm = (m_forms.Find(pDstTarget) < 0) ? NULL : pDstTarget; - } - if (!pMessageForm && pDstTarget) { - CFWL_WidgetMgr* pWidgetMgr = - static_cast(FWL_GetWidgetMgr()); - if (!pWidgetMgr) - return NULL; - pMessageForm = - pWidgetMgr->GetWidget(pDstTarget, FWL_WGTRELATION_SystemForm); - } - return pMessageForm; -} -void CFWL_NoteDriver::ClearInvalidEventTargets(FX_BOOL bRemoveAll) { - FX_POSITION pos = m_eventTargets.GetStartPosition(); - while (pos) { - void* key = NULL; - CFWL_EventTarget* pEventTarget = NULL; - m_eventTargets.GetNextAssoc(pos, key, (void*&)pEventTarget); - if (pEventTarget && (bRemoveAll || pEventTarget->IsInvalid())) { - m_eventTargets.RemoveKey(key); - delete pEventTarget; - } - } -} -class CFWL_CoreToopTipDP : public IFWL_ToolTipDP { - public: - FWL_ERR GetCaption(IFWL_Widget* pWidget, CFX_WideString& wsCaption); - int32_t GetInitialDelay(IFWL_Widget* pWidget); - int32_t GetAutoPopDelay(IFWL_Widget* pWidget); - CFX_DIBitmap* GetToolTipIcon(IFWL_Widget* pWidget); - CFX_SizeF GetToolTipIconSize(IFWL_Widget* pWidget); - CFX_RectF GetAnchor(); - CFWL_CoreToopTipDP(); - - CFX_WideString m_wsCaption; - int32_t m_nInitDelayTime; - int32_t m_nAutoPopDelayTime; - CFX_RectF m_fAnchor; -}; -CFWL_CoreToopTipDP::CFWL_CoreToopTipDP() { - m_nInitDelayTime = 500; - m_nAutoPopDelayTime = 50000; - m_fAnchor.Set(0.0, 0.0, 0.0, 0.0); -} -FWL_ERR CFWL_CoreToopTipDP::GetCaption(IFWL_Widget* pWidget, - CFX_WideString& wsCaption) { - wsCaption = m_wsCaption; - return FWL_ERR_Succeeded; -} -int32_t CFWL_CoreToopTipDP::GetInitialDelay(IFWL_Widget* pWidget) { - return m_nInitDelayTime; -} -int32_t CFWL_CoreToopTipDP::GetAutoPopDelay(IFWL_Widget* pWidget) { - return m_nAutoPopDelayTime; -} -CFX_DIBitmap* CFWL_CoreToopTipDP::GetToolTipIcon(IFWL_Widget* pWidget) { - return NULL; -} -CFX_SizeF CFWL_CoreToopTipDP::GetToolTipIconSize(IFWL_Widget* pWidget) { - return CFX_SizeF(); -} -CFX_RectF CFWL_CoreToopTipDP::GetAnchor() { - return m_fAnchor; -} -CFWL_EventTarget::~CFWL_EventTarget() { - m_eventSources.RemoveAll(); -} -int32_t CFWL_EventTarget::SetEventSource(IFWL_Widget* pSource, - FX_DWORD dwFilter) { - if (pSource) { - m_eventSources.SetAt(pSource, dwFilter); - return m_eventSources.GetCount(); - } - return 1; -} -FX_BOOL CFWL_EventTarget::ProcessEvent(CFWL_Event* pEvent) { - IFWL_WidgetDelegate* pDelegate = m_pListener->SetDelegate(NULL); - if (!pDelegate) - return FALSE; - if (m_eventSources.GetCount() == 0) { - pDelegate->OnProcessEvent(pEvent); - return TRUE; - } - FX_POSITION pos = m_eventSources.GetStartPosition(); - while (pos) { - IFWL_Widget* pSource = NULL; - FX_DWORD dwFilter = 0; - m_eventSources.GetNextAssoc(pos, (void*&)pSource, dwFilter); - if (pSource == pEvent->m_pSrcTarget || - pEvent->GetClassID() == FWL_EVTHASH_Idle) { - if (IsFilterEvent(pEvent, dwFilter)) { - pDelegate->OnProcessEvent(pEvent); - return TRUE; - } - } - } - return FALSE; -} -FX_BOOL CFWL_EventTarget::IsFilterEvent(CFWL_Event* pEvent, FX_DWORD dwFilter) { - if (dwFilter == FWL_EVENT_ALL_MASK) { - return TRUE; - } - FX_BOOL bRet = FALSE; - switch (pEvent->GetClassID()) { - case FWL_EVTHASH_Mouse: { - bRet = dwFilter & FWL_EVENT_MOUSE_MASK; - break; - } - case FWL_EVTHASH_MouseWheel: { - bRet = dwFilter & FWL_EVENT_MOUSEWHEEL_MASK; - break; - } - case FWL_EVTHASH_Key: { - bRet = dwFilter & FWL_EVENT_KEY_MASK; - break; - } - case FWL_EVTHASH_SetFocus: - case FWL_EVTHASH_KillFocus: { - bRet = dwFilter & FWL_EVENT_FOCUSCHANGED_MASK; - break; - } - case FWL_EVTHASH_Draw: { - bRet = dwFilter & FWL_EVENT_DRAW_MASK; - break; - } - case FWL_EVTHASH_Close: { - bRet = dwFilter & FWL_EVENT_CLOSE_MASK; - break; - } - case FWL_EVTHASH_SizeChanged: { - bRet = dwFilter & FWL_EVENT_SIZECHANGED_MASK; - break; - } - case FWL_EVTHASH_Idle: { - bRet = dwFilter & FWL_EVENT_IDLE_MASK; - break; - } - default: { - bRet = dwFilter & FWL_EVENT_CONTROL_MASK; - break; - } - } - return bRet; -} - -CFWL_ToolTipContainer* CFWL_ToolTipContainer::s_pInstance = NULL; - -CFWL_ToolTipContainer::CFWL_ToolTipContainer() - : pCurTarget(NULL), m_pToolTipImp(NULL) { - m_ToolTipDp = new CFWL_CoreToopTipDP; - m_ToolTipDp->m_nInitDelayTime = 0; - m_ToolTipDp->m_nAutoPopDelayTime = 2000; -} -CFWL_ToolTipContainer::~CFWL_ToolTipContainer() { - if (m_pToolTipImp) { - IFWL_ToolTip* pToolTip = - static_cast(m_pToolTipImp->GetInterface()); - pToolTip->Finalize(); - delete pToolTip; - } - delete m_ToolTipDp; -} -// static -CFWL_ToolTipContainer* CFWL_ToolTipContainer::getInstance() { - if (!s_pInstance) { - s_pInstance = new CFWL_ToolTipContainer; - } - return s_pInstance; -} -// static -void CFWL_ToolTipContainer::DeleteInstance() { - if (s_pInstance) { - delete s_pInstance; - s_pInstance = NULL; - } -} -FX_ERR CFWL_ToolTipContainer::AddToolTipTarget(IFWL_ToolTipTarget* pTarget) { - if (m_arrWidget.Find((void*)pTarget) < 0) { - m_arrWidget.Add((void*)pTarget); - return FWL_ERR_Succeeded; - } - return FWL_ERR_Indefinite; -} -FX_ERR CFWL_ToolTipContainer::RemoveToolTipTarget(IFWL_ToolTipTarget* pTarget) { - int index = m_arrWidget.Find((void*)pTarget); - if (index >= 0) { - m_arrWidget.RemoveAt(index); - return FWL_ERR_Succeeded; - } - return FWL_ERR_Indefinite; -} -FX_BOOL CFWL_ToolTipContainer::HasToolTip(IFWL_Widget* pWedget) { - int32_t iCount = m_arrWidget.GetSize(); - for (int32_t i = 0; i < iCount; i++) { - IFWL_ToolTipTarget* p = static_cast(m_arrWidget[i]); - if (p->GetWidget() == pWedget) { - pCurTarget = p; - return TRUE; - } - } - return FALSE; -} -FX_BOOL CFWL_ToolTipContainer::ProcessEnter(CFWL_EvtMouse* pEvt, - IFWL_Widget* pOwner) { - if (HasToolTip(pEvt->m_pDstTarget)) { - if (NULL == m_pToolTipImp) { - CFWL_WidgetImpProperties prop; - prop.m_pDataProvider = m_ToolTipDp; - prop.m_pOwner = pOwner; - CFX_RectF rtTooltip; - rtTooltip.Set(150, 150, 100, 50); - prop.m_rtWidget = rtTooltip; - IFWL_ToolTip* pToolTip = IFWL_ToolTip::Create(prop, nullptr); - pToolTip->Initialize(); - m_pToolTipImp = static_cast(pToolTip->GetImpl()); - m_pToolTipImp->ModifyStylesEx(FWL_STYLEEXT_TTP_Multiline, 0); - m_pToolTipImp->SetStates(FWL_WGTSTATE_Invisible, TRUE); - } - if (pCurTarget->IsShowed()) { - CFX_WideString wsCaption; - pCurTarget->GetCaption(wsCaption); - if (!wsCaption.IsEmpty()) { - m_ToolTipDp->m_wsCaption = wsCaption; - } - CFX_RectF rt; - CFX_SizeF sz; - pCurTarget->GetToolTipSize(sz); - if (sz.x > 0 && sz.y > 0) { - rt.width = sz.x; - rt.height = sz.y; - } else { - CFX_RectF r; - m_pToolTipImp->GetWidgetRect(r, TRUE); - rt.width = r.width; - rt.height = r.height; - } - CFX_PointF pt(pEvt->m_fx, pEvt->m_fy); - if (pCurTarget->GetToolTipPos(pt) == FWL_ERR_Succeeded) { - rt.left = pt.x; - rt.top = pt.y; - m_pToolTipImp->ModifyStylesEx(FWL_STYLEEXT_TTP_NoAnchor, 0); - } else { - CFX_RectF rtAnchor; - pCurTarget->GetWidget()->GetClientRect(rtAnchor); - pCurTarget->GetWidget()->TransformTo(NULL, rtAnchor.left, rtAnchor.top); - m_pToolTipImp->SetAnchor(rtAnchor); - m_pToolTipImp->ModifyStylesEx(0, FWL_STYLEEXT_TTP_NoAnchor); - } - m_pToolTipImp->SetWidgetRect(rt); - m_pToolTipImp->Update(); - m_pToolTipImp->Show(); - } - return TRUE; - } - return FALSE; -} -FX_BOOL CFWL_ToolTipContainer::ProcessLeave(CFWL_EvtMouse* pEvt) { - if (HasToolTip(pEvt->m_pDstTarget) && NULL != m_pToolTipImp) { - m_pToolTipImp->Hide(); - pCurTarget = NULL; - return TRUE; - } - return FALSE; -} -IFWL_ToolTipTarget* CFWL_ToolTipContainer::GetCurrentToolTipTarget() { - return pCurTarget; -} -FX_ERR CFWL_ToolTipContainer::SetToolTipInitialDelay(int32_t nDelayTime) { - m_ToolTipDp->m_nInitDelayTime = nDelayTime; - return FWL_ERR_Succeeded; -} -FX_ERR CFWL_ToolTipContainer::SetToolTipAutoPopDelay(int32_t nDelayTime) { - m_ToolTipDp->m_nAutoPopDelayTime = nDelayTime; - return FWL_ERR_Succeeded; -} -FWL_ERR FWL_AddToolTipTarget(IFWL_ToolTipTarget* pTarget) { - return CFWL_ToolTipContainer::getInstance()->AddToolTipTarget(pTarget); -} -FWL_ERR FWL_RemoveToolTipTarget(IFWL_ToolTipTarget* pTarget) { - return CFWL_ToolTipContainer::getInstance()->RemoveToolTipTarget(pTarget); -} -FWL_ERR FWL_SetToolTipInitialDelay(int32_t nDelayTime) { - return CFWL_ToolTipContainer::getInstance()->SetToolTipInitialDelay( - nDelayTime); -} -FWL_ERR FWL_SetToolTipAutoPopDelay(int32_t nDelayTime) { - return CFWL_ToolTipContainer::getInstance()->SetToolTipAutoPopDelay( - nDelayTime); -} -IFWL_Widget* FWL_GetCurrentThreadModalWidget(IFWL_NoteThread* pNoteThread) { - if (!pNoteThread) - return NULL; - CFWL_NoteDriver* noteDriver = - static_cast(pNoteThread->GetNoteDriver()); - if (!noteDriver) - return NULL; - if (noteDriver->CountLoop() == 1) { - return NULL; - } - CFWL_NoteLoop* topLoop = noteDriver->GetTopLoop(); - if (!topLoop) - return NULL; - CFWL_WidgetImp* widget = topLoop->GetForm(); - if (!widget) - return NULL; - return widget->GetInterface(); -} -FWL_ERR FWL_SetHook(IFWL_NoteDriver* driver, - FWLMessageHookCallback callback, - void* info) { - CFWL_NoteDriver* noteDriver = static_cast(driver); - noteDriver->SetHook(callback, info); - return FWL_ERR_Succeeded; -} diff --git a/xfa/src/fwl/core/fwl_noteimp.h b/xfa/src/fwl/core/fwl_noteimp.h deleted file mode 100644 index 72e1a8ef96..0000000000 --- a/xfa/src/fwl/core/fwl_noteimp.h +++ /dev/null @@ -1,157 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FWL_CORE_FWL_NOTEIMP_H_ -#define XFA_SRC_FWL_CORE_FWL_NOTEIMP_H_ - -#include "xfa/include/fwl/core/fwl_note.h" - -class CFWL_WidgetImp; -class CFWL_ToolTipImp; -class CFWL_CoreToopTipDP; -class CFWL_NoteDriver; -class CFWL_EventTarget; -class CFWL_ToolTipContainer; - -class CFWL_NoteLoop : public IFWL_NoteLoop { - public: - CFWL_NoteLoop(CFWL_WidgetImp* pForm = NULL); - - // IFWL_NoteLoop: - ~CFWL_NoteLoop() override {} - FX_BOOL PreProcessMessage(CFWL_Message* pMessage) override; - FWL_ERR Idle(int32_t count) override; - - CFWL_WidgetImp* GetForm(); - FX_BOOL ContinueModal(); - FWL_ERR EndModalLoop(); - FX_BOOL TranslateAccelerator(CFWL_Message* pMessage); - FWL_ERR SetMainForm(CFWL_WidgetImp* pForm); - - protected: - void GenerateCommondEvent(FX_DWORD dwCommand); - - CFWL_WidgetImp* m_pForm; - FX_BOOL m_bContinueModal; -}; -class CFWL_NoteDriver : public IFWL_NoteDriver { - public: - CFWL_NoteDriver(); - ~CFWL_NoteDriver() override; - - // IFWL_NoteDriver: - FX_BOOL SendNote(CFWL_Note* pNote) override; - FX_BOOL PostMessage(CFWL_Message* pMessage) override; - FWL_ERR RegisterEventTarget(IFWL_Widget* pListener, - IFWL_Widget* pEventSource = NULL, - FX_DWORD dwFilter = FWL_EVENT_ALL_MASK) override; - FWL_ERR UnregisterEventTarget(IFWL_Widget* pListener) override; - void ClearEventTargets(FX_BOOL bRemoveAll) override; - int32_t GetQueueMaxSize() const override; - FWL_ERR SetQueueMaxSize(const int32_t size) override; - IFWL_NoteThread* GetOwnerThread() const override; - FWL_ERR PushNoteLoop(IFWL_NoteLoop* pNoteLoop) override; - IFWL_NoteLoop* PopNoteLoop() override; - IFWL_Widget* GetFocus() override; - FX_BOOL SetFocus(IFWL_Widget* pFocus, FX_BOOL bNotify = FALSE) override; - void SetGrab(IFWL_Widget* pGrab, FX_BOOL bSet) override; - FWL_ERR Run() override; - - IFWL_Widget* GetHover(); - void SetHover(IFWL_Widget* pHover); - void NotifyTargetHide(IFWL_Widget* pNoteTarget); - void NotifyTargetDestroy(IFWL_Widget* pNoteTarget); - void NotifyFullScreenMode(IFWL_Widget* pNoteTarget, FX_BOOL bFullScreen); - FWL_ERR RegisterForm(CFWL_WidgetImp* pForm); - FWL_ERR UnRegisterForm(CFWL_WidgetImp* pForm); - FX_BOOL QueueMessage(CFWL_Message* pMessage); - FX_BOOL UnqueueMessage(CFWL_NoteLoop* pNoteLoop); - CFWL_NoteLoop* GetTopLoop(); - int32_t CountLoop(); - void SetHook(FWLMessageHookCallback callback, void* info); - FX_BOOL ProcessMessage(CFWL_Message* pMessage); - - protected: - FX_BOOL DispatchMessage(CFWL_Message* pMessage, IFWL_Widget* pMessageForm); - FX_BOOL DoActivate(CFWL_MsgActivate* pMsg, IFWL_Widget* pMessageForm); - FX_BOOL DoDeactivate(CFWL_MsgDeactivate* pMsg, IFWL_Widget* pMessageForm); - FX_BOOL DoSetFocus(CFWL_MsgSetFocus* pMsg, IFWL_Widget* pMessageForm); - FX_BOOL DoKillFocus(CFWL_MsgKillFocus* pMsg, IFWL_Widget* pMessageForm); - FX_BOOL DoKey(CFWL_MsgKey* pMsg, IFWL_Widget* pMessageForm); - FX_BOOL DoMouse(CFWL_MsgMouse* pMsg, IFWL_Widget* pMessageForm); - FX_BOOL DoWheel(CFWL_MsgMouseWheel* pMsg, IFWL_Widget* pMessageForm); - FX_BOOL DoSize(CFWL_MsgSize* pMsg); - FX_BOOL DoWindowMove(CFWL_MsgWindowMove* pMsg, IFWL_Widget* pMessageForm); - FX_BOOL DoDragFiles(CFWL_MsgDropFiles* pMsg, IFWL_Widget* pMessageForm); - FX_BOOL DoMouseEx(CFWL_MsgMouse* pMsg, IFWL_Widget* pMessageForm); - void MouseSecondary(CFWL_MsgMouse* pMsg); - FX_BOOL IsValidMessage(CFWL_Message* pMessage); - IFWL_Widget* GetMessageForm(IFWL_Widget* pDstTarget); - void ClearInvalidEventTargets(FX_BOOL bRemoveAll); - CFX_PtrArray m_forms; - CFX_PtrArray m_noteQueue; - CFX_PtrArray m_noteLoopQueue; - CFX_MapPtrToPtr m_eventTargets; - int32_t m_sendEventCalled; - int32_t m_maxSize; - FX_BOOL m_bFullScreen; - IFWL_Widget* m_pHover; - IFWL_Widget* m_pFocus; - IFWL_Widget* m_pGrab; - CFWL_NoteLoop* m_pNoteLoop; - FWLMessageHookCallback m_hook; - void* m_hookInfo; -}; -typedef CFX_MapPtrTemplate CFWL_EventSource; -class CFWL_EventTarget { - public: - CFWL_EventTarget(CFWL_NoteDriver* pNoteDriver, IFWL_Widget* pListener) - : m_pListener(pListener), m_pNoteDriver(pNoteDriver), m_bInvalid(FALSE) {} - ~CFWL_EventTarget(); - int32_t SetEventSource(IFWL_Widget* pSource, - FX_DWORD dwFilter = FWL_EVENT_ALL_MASK); - FX_BOOL ProcessEvent(CFWL_Event* pEvent); - FX_BOOL IsFilterEvent(CFWL_Event* pEvent, FX_DWORD dwFilter); - FX_BOOL IsInvalid() { return m_bInvalid; } - void FlagInvalid() { m_bInvalid = TRUE; } - - protected: - CFWL_EventSource m_eventSources; - IFWL_Widget* m_pListener; - CFWL_NoteDriver* m_pNoteDriver; - FX_BOOL m_bInvalid; -}; -class CFWL_ToolTipContainer { - public: - static CFWL_ToolTipContainer* getInstance(); - static void DeleteInstance(); - - FX_ERR AddToolTipTarget(IFWL_ToolTipTarget* pTarget); - FX_ERR RemoveToolTipTarget(IFWL_ToolTipTarget* pTarget); - IFWL_ToolTipTarget* GetCurrentToolTipTarget(); - - FX_BOOL HasToolTip(IFWL_Widget* pWidget); - - FX_BOOL ProcessEnter(CFWL_EvtMouse* pEvt, IFWL_Widget* pOwner); - FX_BOOL ProcessLeave(CFWL_EvtMouse* pEvt); - - FX_ERR SetToolTipInitialDelay(int32_t iDelayTime); - FX_ERR SetToolTipAutoPopDelay(int32_t iDelayTime); - - protected: - CFWL_ToolTipContainer(); - virtual ~CFWL_ToolTipContainer(); - - IFWL_ToolTipTarget* pCurTarget; - CFWL_ToolTipImp* m_pToolTipImp; - CFWL_CoreToopTipDP* m_ToolTipDp; - CFX_PtrArray m_arrWidget; - - private: - static CFWL_ToolTipContainer* s_pInstance; -}; - -#endif // XFA_SRC_FWL_CORE_FWL_NOTEIMP_H_ diff --git a/xfa/src/fwl/core/fwl_panelimp.cpp b/xfa/src/fwl/core/fwl_panelimp.cpp deleted file mode 100644 index 7d6c8ee874..0000000000 --- a/xfa/src/fwl/core/fwl_panelimp.cpp +++ /dev/null @@ -1,152 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fwl/core/fwl_panelimp.h" - -#include "xfa/include/fwl/core/fwl_content.h" -#include "xfa/include/fwl/core/fwl_grid.h" -#include "xfa/include/fwl/core/fwl_panel.h" -#include "xfa/src/fwl/core/fwl_noteimp.h" -#include "xfa/src/fwl/core/fwl_targetimp.h" -#include "xfa/src/fwl/core/fwl_widgetimp.h" -#include "xfa/src/fwl/core/fwl_widgetmgrimp.h" - -// static -IFWL_Panel* IFWL_Panel::Create(CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) { - IFWL_Panel* pPanel = new IFWL_Panel; - CFWL_PanelImp* pPanelImpl = new CFWL_PanelImp(properties, pOuter); - pPanel->SetImpl(pPanelImpl); - pPanelImpl->SetInterface(pPanel); - return pPanel; -} -IFWL_Panel::IFWL_Panel() {} -IFWL_Content* IFWL_Panel::GetContent() { - return static_cast(GetImpl())->GetContent(); -} -FWL_ERR IFWL_Panel::SetContent(IFWL_Content* pContent) { - return static_cast(GetImpl())->SetContent(pContent); -} - -CFWL_PanelImp::CFWL_PanelImp(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) - : CFWL_WidgetImp(properties, pOuter), m_pContent(nullptr) {} -CFWL_PanelImp::~CFWL_PanelImp() {} -FWL_ERR CFWL_PanelImp::GetClassName(CFX_WideString& wsClass) const { - wsClass = FWL_CLASS_Panel; - return FWL_ERR_Succeeded; -} -FX_DWORD CFWL_PanelImp::GetClassID() const { - return FWL_CLASSHASH_Panel; -} -FWL_ERR CFWL_PanelImp::GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize) { - if (bAutoSize) { - if (m_pContent) { - m_pContent->GetWidgetRect(rect, TRUE); - } - } else { - rect = m_pProperties->m_rtWidget; - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_PanelImp::Update() { - if (m_pContent) { - CFX_RectF rtClient; - GetClientRect(rtClient); - FWL_GRIDUNIT eWidth = FWL_GRIDUNIT_Fixed, eHeight = FWL_GRIDUNIT_Fixed; - IFWL_WidgetMgr* pWidgetMgr = FWL_GetWidgetMgr(); - if (!pWidgetMgr) - return FWL_ERR_Indefinite; - IFWL_Widget* pParent = - pWidgetMgr->GetWidget(GetInterface(), FWL_WGTRELATION_Parent); - if (pParent && pParent->GetClassID() == FWL_CLASSHASH_Grid) { - IFWL_Grid* pGrid = static_cast(pParent); - pGrid->GetWidgetSize(GetInterface(), FWL_GRIDSIZE_Width, eWidth); - pGrid->GetWidgetSize(GetInterface(), FWL_GRIDSIZE_Height, eHeight); - } - m_pContent->SetWidgetRect(rtClient); - m_pContent->Update(); - } - return FWL_ERR_Succeeded; -} -IFWL_Content* CFWL_PanelImp::GetContent() { - return m_pContent; -} -FWL_ERR CFWL_PanelImp::SetContent(IFWL_Content* pContent) { - if (!pContent) - return FWL_ERR_Indefinite; - m_pContent = pContent; - return pContent->SetParent(m_pInterface); -} -class CFWL_CustomPanelImp : public CFWL_WidgetImp { - public: - CFWL_CustomPanelImp(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter); - virtual ~CFWL_CustomPanelImp(); - virtual FWL_ERR GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize = FALSE); - virtual FWL_ERR Update(); - virtual IFWL_Content* GetContent(); - virtual FWL_ERR SetContent(IFWL_Content* pContent); - FWL_ERR SetProxy(IFWL_Proxy* pProxy); - - protected: - IFWL_Content* m_pContent; - IFWL_Proxy* m_pProxy; -}; -CFWL_CustomPanelImp::CFWL_CustomPanelImp( - const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) - : CFWL_WidgetImp(properties, pOuter), - m_pContent(nullptr), - m_pProxy(nullptr) {} -CFWL_CustomPanelImp::~CFWL_CustomPanelImp() {} -FWL_ERR CFWL_CustomPanelImp::GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize) { - if (bAutoSize && m_pProxy && - (m_pProxy->GetWidgetRect(rect, bAutoSize) == FWL_ERR_Succeeded)) { - return FWL_ERR_Succeeded; - } - return CFWL_WidgetImp::GetWidgetRect(rect, bAutoSize); -} -FWL_ERR CFWL_CustomPanelImp::Update() { - if (m_pProxy) { - return m_pProxy->Update(); - } - return CFWL_WidgetImp::Update(); -} -IFWL_Content* CFWL_CustomPanelImp::GetContent() { - return m_pContent; -} -FWL_ERR CFWL_CustomPanelImp::SetContent(IFWL_Content* pContent) { - if (!pContent) - return FWL_ERR_Indefinite; - m_pContent = pContent; - return pContent->SetParent(m_pInterface); -} -FWL_ERR CFWL_CustomPanelImp::SetProxy(IFWL_Proxy* pProxy) { - m_pProxy = pProxy; - return FWL_ERR_Succeeded; -} - -// statuc -IFWL_CustomPanel* IFWL_CustomPanel::Create(CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) { - IFWL_CustomPanel* pCustomPanel = new IFWL_CustomPanel; - CFWL_CustomPanelImp* pCustomPanelImpl = - new CFWL_CustomPanelImp(properties, pOuter); - pCustomPanel->SetImpl(pCustomPanelImpl); - pCustomPanelImpl->SetInterface(pCustomPanel); - return pCustomPanel; -} -IFWL_CustomPanel::IFWL_CustomPanel() {} -IFWL_Content* IFWL_CustomPanel::GetContent() { - return static_cast(GetImpl())->GetContent(); -} -FWL_ERR IFWL_CustomPanel::SetContent(IFWL_Content* pContent) { - return static_cast(GetImpl())->SetContent(pContent); -} -FWL_ERR IFWL_CustomPanel::SetProxy(IFWL_Proxy* pProxy) { - return static_cast(GetImpl())->SetProxy(pProxy); -} diff --git a/xfa/src/fwl/core/fwl_panelimp.h b/xfa/src/fwl/core/fwl_panelimp.h deleted file mode 100644 index 1bd7159054..0000000000 --- a/xfa/src/fwl/core/fwl_panelimp.h +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FWL_CORE_FWL_PANELIMP_H_ -#define XFA_SRC_FWL_CORE_FWL_PANELIMP_H_ - -#include "xfa/src/fwl/core/fwl_widgetimp.h" - -class CFWL_WidgetImpProperties; -class IFWL_Widget; -class IFWL_Content; - -class CFWL_PanelImp : public CFWL_WidgetImp { - public: - CFWL_PanelImp(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter); - virtual ~CFWL_PanelImp(); - virtual FWL_ERR GetClassName(CFX_WideString& wsClass) const; - virtual FX_DWORD GetClassID() const; - virtual FWL_ERR GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize = FALSE); - virtual FWL_ERR Update(); - virtual IFWL_Content* GetContent(); - virtual FWL_ERR SetContent(IFWL_Content* pContent); - - protected: - IFWL_Content* m_pContent; -}; - -#endif // XFA_SRC_FWL_CORE_FWL_PANELIMP_H_ diff --git a/xfa/src/fwl/core/fwl_sdadapterimp.cpp b/xfa/src/fwl/core/fwl_sdadapterimp.cpp deleted file mode 100644 index fedd6b285d..0000000000 --- a/xfa/src/fwl/core/fwl_sdadapterimp.cpp +++ /dev/null @@ -1,175 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/include/fwl/adapter/fwl_sdadapterimp.h" - -#include "core/include/fxcrt/fx_system.h" -#include "xfa/include/fwl/adapter/fwl_adapterthreadmgr.h" -#include "xfa/include/fwl/adapter/fwl_adapterwidgetmgr.h" -#include "xfa/include/fwl/core/fwl_app.h" -#include "xfa/src/fwl/core/fwl_noteimp.h" -#include "xfa/src/fwl/core/fwl_targetimp.h" -#include "xfa/src/fwl/core/fwl_threadimp.h" -#include "xfa/src/fwl/core/fwl_widgetmgrimp.h" - -CFWL_SDAdapterWidgetMgr::CFWL_SDAdapterWidgetMgr() {} -CFWL_SDAdapterWidgetMgr::~CFWL_SDAdapterWidgetMgr() {} - -FWL_ERR CFWL_SDAdapterWidgetMgr::CreateWidget(IFWL_Widget* pWidget, - IFWL_Widget* pParent) { - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_SDAdapterWidgetMgr::DestroyWidget(IFWL_Widget* pWidget) { - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_SDAdapterWidgetMgr::SetWidgetRect(IFWL_Widget* pWidget, - const CFX_RectF& rect) { - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_SDAdapterWidgetMgr::SetWidgetPosition(IFWL_Widget* pWidget, - FX_FLOAT fx, - FX_FLOAT fy) { - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_SDAdapterWidgetMgr::SetParentWidget(IFWL_Widget* pWidget, - IFWL_Widget* pParent) { - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_SDAdapterWidgetMgr::ShowWidget(IFWL_Widget* pWidget) { - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_SDAdapterWidgetMgr::HideWidget(IFWL_Widget* pWidget) { - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_SDAdapterWidgetMgr::SetNormal(IFWL_Widget* pWidget) { - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_SDAdapterWidgetMgr::SetMaximize(IFWL_Widget* pWidget) { - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_SDAdapterWidgetMgr::SetMinimize(IFWL_Widget* pWidget) { - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_SDAdapterWidgetMgr::RunWidget(IFWL_Widget* pWidget) { - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_SDAdapterWidgetMgr::RepaintWidget(IFWL_Widget* pWidget, - const CFX_RectF* pRect) { - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_SDAdapterWidgetMgr::Exit(int32_t iExitCode) { - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_SDAdapterWidgetMgr::CreateWidgetWithNativeId(IFWL_Widget* pWidget, - void* vp) { - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_SDAdapterWidgetMgr::GetWidgetRect(IFWL_Widget* pWidget, - CFX_RectF& rect) { - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_SDAdapterWidgetMgr::SetWidgetIcon(IFWL_Widget* pWidget, - const CFX_DIBitmap* pIcon, - FX_BOOL bBig) { - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_SDAdapterWidgetMgr::SetWidgetCaption( - IFWL_Widget* pWidget, - const CFX_WideStringC& wsCaption) { - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_SDAdapterWidgetMgr::SetBorderRegion(IFWL_Widget* pWidget, - CFX_Path* pPath) { - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_SDAdapterWidgetMgr::SetTransparent(IFWL_Widget* pWidget, - FX_DWORD dwAlpha) { - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_SDAdapterWidgetMgr::SetFullScreen(IFWL_Widget* pWidget, - FX_BOOL bFullScreen) { - return FWL_ERR_Succeeded; -} -FX_BOOL CFWL_SDAdapterWidgetMgr::CheckMessage() { - return TRUE; -} -FX_BOOL CFWL_SDAdapterWidgetMgr::IsIdleMessage() { - return TRUE; -} -FWL_ERR CFWL_SDAdapterWidgetMgr::DispatchMessage() { - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_SDAdapterWidgetMgr::GetWidgetDC(IFWL_Widget* pWidget, void*& pDC) { - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_SDAdapterWidgetMgr::ReleaseWidgetDC(IFWL_Widget* pWidget, - void* pDC, - CFX_RectF* pClip) { - return FWL_ERR_Succeeded; -} -void* CFWL_SDAdapterWidgetMgr::GetWindow(IFWL_Widget* pWidget) { - return NULL; -} -FX_DWORD CFWL_SDAdapterWidgetMgr::GetKeyState(FX_DWORD dwVirtKey) { - return 0; -} -FWL_ERR CFWL_SDAdapterWidgetMgr::RunLoop(IFWL_Widget* widget) { - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_SDAdapterWidgetMgr::EndLoop() { - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_SDAdapterWidgetMgr::InitMenu(IFWL_Menu* pMenu, - IFWL_MenuDP* pMenuData) { - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_SDAdapterWidgetMgr::UpdateMenu(IFWL_Menu* pMenu, - const void* hItem, - int32_t iType) { - return FWL_ERR_Succeeded; -} -int32_t CFWL_SDAdapterWidgetMgr::TrackPopupMenu(IFWL_Menu* pMenu, - IFWL_MenuDP* pMenuData) { - return 0; -} -FWL_ERR CFWL_SDAdapterWidgetMgr::SetMessageHook(IFWL_AdapterMessageHook* hook) { - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_SDAdapterWidgetMgr::GetSystemBorder(FX_FLOAT& l, - FX_FLOAT& t, - FX_FLOAT& r, - FX_FLOAT& b) { - return FWL_ERR_Succeeded; -} -FX_BOOL CFWL_SDAdapterWidgetMgr::GetPopupPos(IFWL_Widget* pWidget, - FX_FLOAT fMinHeight, - FX_FLOAT fMaxHeight, - const CFX_RectF& rtAnchor, - CFX_RectF& rtPopup) { - return FWL_ERR_Succeeded; -} -CFWL_SDAdapterThreadMgr::CFWL_SDAdapterThreadMgr() {} -CFWL_SDAdapterThreadMgr::~CFWL_SDAdapterThreadMgr() {} -FWL_ERR CFWL_SDAdapterThreadMgr::Start(IFWL_Thread* pThread, - FWL_HTHREAD& hThread, - FX_BOOL bSuspended) { - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_SDAdapterThreadMgr::Resume(FWL_HTHREAD hThread) { - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_SDAdapterThreadMgr::Suspend(FWL_HTHREAD hThread) { - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_SDAdapterThreadMgr::Kill(FWL_HTHREAD hThread, int32_t iExitCode) { - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_SDAdapterThreadMgr::Stop(FWL_HTHREAD hThread, int32_t iExitCode) { - return FWL_ERR_Succeeded; -} -IFWL_Thread* CFWL_SDAdapterThreadMgr::GetCurrentThread() { - return FWL_GetApp(); -} diff --git a/xfa/src/fwl/core/fwl_targetimp.cpp b/xfa/src/fwl/core/fwl_targetimp.cpp deleted file mode 100644 index 0c8d5fbce0..0000000000 --- a/xfa/src/fwl/core/fwl_targetimp.cpp +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fwl/core/fwl_targetimp.h" - -FWL_ERR IFWL_Target::GetClassName(CFX_WideString& wsClass) const { - return m_pImpl->GetClassName(wsClass); -} -FX_DWORD IFWL_Target::GetClassID() const { - return m_pImpl->GetClassID(); -} -FX_BOOL IFWL_Target::IsInstance(const CFX_WideStringC& wsClass) const { - return m_pImpl->IsInstance(wsClass); -} -FWL_ERR IFWL_Target::Initialize() { - return m_pImpl->Initialize(); -} -FWL_ERR IFWL_Target::Finalize() { - return m_pImpl->Finalize(); -} -IFWL_Target::~IFWL_Target() { - delete m_pImpl; -} -CFWL_TargetImp::CFWL_TargetImp() {} -CFWL_TargetImp::~CFWL_TargetImp() {} -FWL_ERR CFWL_TargetImp::GetClassName(CFX_WideString& wsClass) const { - wsClass.Empty(); - return FWL_ERR_Succeeded; -} -FX_DWORD CFWL_TargetImp::GetClassID() const { - return 0; -} -FX_BOOL CFWL_TargetImp::IsInstance(const CFX_WideStringC& wsClass) const { - return FALSE; -} -FWL_ERR CFWL_TargetImp::Initialize() { - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_TargetImp::Finalize() { - return FWL_ERR_Succeeded; -} diff --git a/xfa/src/fwl/core/fwl_targetimp.h b/xfa/src/fwl/core/fwl_targetimp.h deleted file mode 100644 index e243d39e9b..0000000000 --- a/xfa/src/fwl/core/fwl_targetimp.h +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FWL_CORE_FWL_TARGETIMP_H_ -#define XFA_SRC_FWL_CORE_FWL_TARGETIMP_H_ - -#include "core/include/fxcrt/fx_basic.h" -#include "xfa/include/fwl/core/fwl_target.h" - -class CFWL_TargetImp { - public: - virtual ~CFWL_TargetImp(); - - virtual FWL_ERR GetClassName(CFX_WideString& wsClass) const; - virtual FX_DWORD GetClassID() const; - virtual FX_BOOL IsInstance(const CFX_WideStringC& wsClass) const; - virtual FWL_ERR Initialize(); - virtual FWL_ERR Finalize(); - - protected: - CFWL_TargetImp(); -}; - -#endif // XFA_SRC_FWL_CORE_FWL_TARGETIMP_H_ diff --git a/xfa/src/fwl/core/fwl_threadimp.cpp b/xfa/src/fwl/core/fwl_threadimp.cpp deleted file mode 100644 index 28df34eade..0000000000 --- a/xfa/src/fwl/core/fwl_threadimp.cpp +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fwl/core/fwl_threadimp.h" - -#include "xfa/src/fwl/core/fwl_appimp.h" -#include "xfa/src/fwl/core/fwl_noteimp.h" -#include "xfa/src/fwl/core/fwl_targetimp.h" - -void IFWL_Thread::Release() { - delete m_pImpl; -} -FWL_ERR IFWL_Thread::Run(FWL_HTHREAD hThread) { - return m_pImpl->Run(hThread); -} -IFWL_NoteDriver* IFWL_NoteThread::GetNoteDriver() { - return static_cast(GetImpl())->GetNoteDriver(); -} - -FWL_ERR CFWL_ThreadImp::Run(FWL_HTHREAD hThread) { - return FWL_ERR_Succeeded; -} -CFWL_NoteThreadImp::CFWL_NoteThreadImp(IFWL_NoteThread* pIface) - : CFWL_ThreadImp(pIface), m_pNoteDriver(new CFWL_NoteDriver) {} -CFWL_NoteThreadImp::~CFWL_NoteThreadImp() { - delete m_pNoteDriver; -} -FWL_ERR CFWL_NoteThreadImp::Run(FWL_HTHREAD hThread) { - if (!m_pNoteDriver) - return FWL_ERR_Indefinite; - return m_pNoteDriver->Run(); -} -IFWL_NoteDriver* CFWL_NoteThreadImp::GetNoteDriver() { - return m_pNoteDriver; -} diff --git a/xfa/src/fwl/core/fwl_threadimp.h b/xfa/src/fwl/core/fwl_threadimp.h deleted file mode 100644 index eaf30e6350..0000000000 --- a/xfa/src/fwl/core/fwl_threadimp.h +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FWL_CORE_FWL_THREADIMP_H_ -#define XFA_SRC_FWL_CORE_FWL_THREADIMP_H_ - -#include "xfa/include/fwl/core/fwl_thread.h" // For FWL_HTHREAD. - -class CFWL_NoteDriver; -class IFWL_NoteDriver; - -class CFWL_ThreadImp { - public: - virtual ~CFWL_ThreadImp() {} - IFWL_Thread* GetInterface() const { return m_pIface; } - virtual FWL_ERR Run(FWL_HTHREAD hThread); - - protected: - CFWL_ThreadImp(IFWL_Thread* pIface) : m_pIface(pIface) {} - - private: - IFWL_Thread* const m_pIface; -}; - -class CFWL_NoteThreadImp : public CFWL_ThreadImp { - public: - CFWL_NoteThreadImp(IFWL_NoteThread* pIface); - virtual ~CFWL_NoteThreadImp(); - - FWL_ERR Run(FWL_HTHREAD hThread) override; - virtual IFWL_NoteDriver* GetNoteDriver(); - - protected: - CFWL_NoteDriver* const m_pNoteDriver; -}; - -#endif // XFA_SRC_FWL_CORE_FWL_THREADIMP_H_ diff --git a/xfa/src/fwl/core/fwl_timerimp.cpp b/xfa/src/fwl/core/fwl_timerimp.cpp deleted file mode 100644 index 503c0f759e..0000000000 --- a/xfa/src/fwl/core/fwl_timerimp.cpp +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/include/fwl/adapter/fwl_adapternative.h" -#include "xfa/include/fwl/adapter/fwl_adaptertimermgr.h" -#include "xfa/include/fwl/core/fwl_app.h" -#include "xfa/include/fwl/core/fwl_timer.h" -#include "xfa/src/fwl/core/fwl_appimp.h" -#include "xfa/src/fwl/core/fwl_targetimp.h" -#include "xfa/src/fwl/core/fwl_threadimp.h" - -FWL_HTIMER FWL_StartTimer(IFWL_Timer* pTimer, - FX_DWORD dwElapse, - FX_BOOL bImmediately) { - IFWL_AdapterNative* pAdapterNative = FWL_GetAdapterNative(); - if (!pAdapterNative) - return NULL; - IFWL_AdapterTimerMgr* pAdapterTimerMgr = pAdapterNative->GetTimerMgr(); - if (!pAdapterTimerMgr) - return NULL; - FWL_HTIMER hTimer = NULL; - pAdapterTimerMgr->Start(pTimer, dwElapse, hTimer, bImmediately); - return hTimer; -} -int32_t FWL_StopTimer(FWL_HTIMER hTimer) { - IFWL_AdapterNative* pAdapterNative = FWL_GetAdapterNative(); - if (!pAdapterNative) - return FWL_ERR_Indefinite; - IFWL_AdapterTimerMgr* pAdapterTimerMgr = pAdapterNative->GetTimerMgr(); - if (!pAdapterTimerMgr) - return FWL_ERR_Indefinite; - return pAdapterTimerMgr->Stop(hTimer); -} diff --git a/xfa/src/fwl/core/fwl_widgetimp.cpp b/xfa/src/fwl/core/fwl_widgetimp.cpp deleted file mode 100644 index 32d80d1fb3..0000000000 --- a/xfa/src/fwl/core/fwl_widgetimp.cpp +++ /dev/null @@ -1,1101 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fwl/core/fwl_widgetimp.h" - -#include - -#include "xfa/include/fwl/adapter/fwl_adapternative.h" -#include "xfa/include/fwl/adapter/fwl_adapterthreadmgr.h" -#include "xfa/include/fwl/adapter/fwl_adapterwidgetmgr.h" -#include "xfa/include/fwl/basewidget/fwl_combobox.h" -#include "xfa/include/fwl/basewidget/fwl_datetimepicker.h" -#include "xfa/include/fwl/basewidget/fwl_menu.h" -#include "xfa/include/fwl/core/fwl_app.h" -#include "xfa/include/fwl/core/fwl_content.h" -#include "xfa/include/fwl/core/fwl_form.h" -#include "xfa/include/fwl/core/fwl_theme.h" -#include "xfa/src/fde/tto/fde_textout.h" -#include "xfa/src/fwl/core/fwl_appimp.h" -#include "xfa/src/fwl/core/fwl_noteimp.h" -#include "xfa/src/fwl/core/fwl_targetimp.h" -#include "xfa/src/fwl/core/fwl_threadimp.h" -#include "xfa/src/fwl/core/fwl_widgetmgrimp.h" - -FWL_ERR IFWL_Widget::GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize) { - return static_cast(GetImpl()) - ->GetWidgetRect(rect, bAutoSize); -} -FWL_ERR IFWL_Widget::GetGlobalRect(CFX_RectF& rect) { - return static_cast(GetImpl())->GetGlobalRect(rect); -} -FWL_ERR IFWL_Widget::SetWidgetRect(const CFX_RectF& rect) { - return static_cast(GetImpl())->SetWidgetRect(rect); -} -FWL_ERR IFWL_Widget::GetClientRect(CFX_RectF& rect) { - return static_cast(GetImpl())->GetClientRect(rect); -} -IFWL_Widget* IFWL_Widget::GetParent() { - return static_cast(GetImpl())->GetParent(); -} -FWL_ERR IFWL_Widget::SetParent(IFWL_Widget* pParent) { - return static_cast(GetImpl())->SetParent(pParent); -} -IFWL_Widget* IFWL_Widget::GetOwner() { - return static_cast(GetImpl())->GetOwner(); -} -FWL_ERR IFWL_Widget::SetOwner(IFWL_Widget* pOwner) { - return static_cast(GetImpl())->SetOwner(pOwner); -} -IFWL_Widget* IFWL_Widget::GetOuter() { - return static_cast(GetImpl())->GetOuter(); -} -FX_DWORD IFWL_Widget::GetStyles() { - return static_cast(GetImpl())->GetStyles(); -} -FWL_ERR IFWL_Widget::ModifyStyles(FX_DWORD dwStylesAdded, - FX_DWORD dwStylesRemoved) { - return static_cast(GetImpl()) - ->ModifyStyles(dwStylesAdded, dwStylesRemoved); -} -FX_DWORD IFWL_Widget::GetStylesEx() { - return static_cast(GetImpl())->GetStylesEx(); -} -FWL_ERR IFWL_Widget::ModifyStylesEx(FX_DWORD dwStylesExAdded, - FX_DWORD dwStylesExRemoved) { - return static_cast(GetImpl()) - ->ModifyStylesEx(dwStylesExAdded, dwStylesExRemoved); -} -FX_DWORD IFWL_Widget::GetStates() { - return static_cast(GetImpl())->GetStates(); -} -FWL_ERR IFWL_Widget::SetStates(FX_DWORD dwStates, FX_BOOL bSet) { - return static_cast(GetImpl())->SetStates(dwStates, bSet); -} -FWL_ERR IFWL_Widget::SetPrivateData(void* module_id, - void* pData, - PD_CALLBACK_FREEDATA callback) { - return static_cast(GetImpl()) - ->SetPrivateData(module_id, pData, callback); -} -void* IFWL_Widget::GetPrivateData(void* module_id) { - return static_cast(GetImpl())->GetPrivateData(module_id); -} -FWL_ERR IFWL_Widget::Update() { - return static_cast(GetImpl())->Update(); -} -FWL_ERR IFWL_Widget::LockUpdate() { - return static_cast(GetImpl())->LockUpdate(); -} -FWL_ERR IFWL_Widget::UnlockUpdate() { - return static_cast(GetImpl())->UnlockUpdate(); -} -FX_DWORD IFWL_Widget::HitTest(FX_FLOAT fx, FX_FLOAT fy) { - return static_cast(GetImpl())->HitTest(fx, fy); -} -FWL_ERR IFWL_Widget::TransformTo(IFWL_Widget* pWidget, - FX_FLOAT& fx, - FX_FLOAT& fy) { - return static_cast(GetImpl())->TransformTo(pWidget, fx, fy); -} -FWL_ERR IFWL_Widget::TransformTo(IFWL_Widget* pWidget, CFX_RectF& rt) { - return static_cast(GetImpl())->TransformTo(pWidget, rt); -} -FWL_ERR IFWL_Widget::GetMatrix(CFX_Matrix& matrix, FX_BOOL bGlobal) { - return static_cast(GetImpl())->GetMatrix(matrix, bGlobal); -} -FWL_ERR IFWL_Widget::SetMatrix(const CFX_Matrix& matrix) { - return static_cast(GetImpl())->SetMatrix(matrix); -} -FWL_ERR IFWL_Widget::DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - return static_cast(GetImpl()) - ->DrawWidget(pGraphics, pMatrix); -} -IFWL_ThemeProvider* IFWL_Widget::GetThemeProvider() { - return static_cast(GetImpl())->GetThemeProvider(); -} -FWL_ERR IFWL_Widget::SetThemeProvider(IFWL_ThemeProvider* pThemeProvider) { - return static_cast(GetImpl()) - ->SetThemeProvider(pThemeProvider); -} -FWL_ERR IFWL_Widget::SetDataProvider(IFWL_DataProvider* pDataProvider) { - return static_cast(GetImpl()) - ->SetDataProvider(pDataProvider); -} -IFWL_WidgetDelegate* IFWL_Widget::SetDelegate(IFWL_WidgetDelegate* pDelegate) { - return static_cast(GetImpl())->SetDelegate(pDelegate); -} -IFWL_NoteThread* IFWL_Widget::GetOwnerThread() const { - return static_cast(GetImpl())->GetOwnerThread(); -} -CFX_SizeF IFWL_Widget::GetOffsetFromParent(IFWL_Widget* pParent) { - return static_cast(GetImpl())->GetOffsetFromParent(pParent); -} -FWL_ERR CFWL_WidgetImp::Initialize() { - IFWL_App* pApp = FWL_GetApp(); - if (!pApp) - return FWL_ERR_Indefinite; - IFWL_AdapterNative* pAdapter = pApp->GetAdapterNative(); - if (!pAdapter) - return FWL_ERR_Indefinite; - IFWL_AdapterThreadMgr* pAdapterThread = pAdapter->GetThreadMgr(); - if (!pAdapterThread) - return FWL_ERR_Indefinite; - SetOwnerThread(static_cast( - pAdapterThread->GetCurrentThread()->GetImpl())); - IFWL_Widget* pParent = m_pProperties->m_pParent; - m_pWidgetMgr->InsertWidget(pParent, m_pInterface); - if (!IsChild()) { - { - IFWL_Widget* pOwner = m_pProperties->m_pOwner; - if (pOwner) { - m_pWidgetMgr->SetOwner(pOwner, m_pInterface); - } - } - m_pWidgetMgr->CreateWidget_Native(m_pInterface); - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_WidgetImp::Finalize() { - NotifyDriver(); - IFWL_Form* pForm = static_cast( - FWL_GetWidgetMgr()->GetWidget(m_pInterface, FWL_WGTRELATION_SystemForm)); - if (pForm && pForm != m_pInterface) { - IFWL_Content* pContent = pForm->GetContent(); - if (pContent) { - pContent->RemoveWidget(m_pInterface); - } - } - if (!IsChild()) { - m_pWidgetMgr->DestroyWidget_Native(m_pInterface); - } - m_pWidgetMgr->RemoveWidget(m_pInterface); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_WidgetImp::GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize) { - if (bAutoSize) { - if (HasEdge()) { - FX_FLOAT fEdge = GetEdgeWidth(); - rect.Inflate(fEdge, fEdge); - } - if (HasBorder()) { - FX_FLOAT fBorder = GetBorderSize(); - rect.Inflate(fBorder, fBorder); - } - } else { - rect = m_pProperties->m_rtWidget; - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_WidgetImp::GetGlobalRect(CFX_RectF& rect) { - IFWL_Widget* pForm = - m_pWidgetMgr->GetWidget(m_pInterface, FWL_WGTRELATION_SystemForm); - if (!pForm) - return FWL_ERR_Indefinite; - rect.Set(0, 0, m_pProperties->m_rtWidget.width, - m_pProperties->m_rtWidget.height); - if (pForm == m_pInterface) { - return FWL_ERR_Succeeded; - } - return TransformTo(pForm, rect); -} -FWL_ERR CFWL_WidgetImp::SetWidgetRect(const CFX_RectF& rect) { - CFX_RectF rtOld = m_pProperties->m_rtWidget; - m_pProperties->m_rtWidget = rect; - if (IsChild()) { - if (FXSYS_fabs(rtOld.width - rect.width) > 0.5f || - FXSYS_fabs(rtOld.height - rect.height) > 0.5f) { - CFWL_EvtSizeChanged ev; - ev.m_pSrcTarget = m_pInterface; - ev.m_rtOld = rtOld; - ev.m_rtNew = rect; - IFWL_WidgetDelegate* pDelegate = SetDelegate(NULL); - if (pDelegate) { - pDelegate->OnProcessEvent(&ev); - } - } - return FWL_ERR_Succeeded; - } - m_pWidgetMgr->SetWidgetRect_Native(m_pInterface, rect); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_WidgetImp::GetClientRect(CFX_RectF& rect) { - GetEdgeRect(rect); - if (HasEdge()) { - FX_FLOAT fEdge = GetEdgeWidth(); - rect.Deflate(fEdge, fEdge); - } - return FWL_ERR_Succeeded; -} -IFWL_Widget* CFWL_WidgetImp::GetParent() { - return m_pWidgetMgr->GetWidget(m_pInterface, FWL_WGTRELATION_Parent); -} -FWL_ERR CFWL_WidgetImp::SetParent(IFWL_Widget* pParent) { - m_pProperties->m_pParent = pParent; - m_pWidgetMgr->SetParent(pParent, m_pInterface); - return FWL_ERR_Succeeded; -} -IFWL_Widget* CFWL_WidgetImp::GetOwner() { - return m_pWidgetMgr->GetWidget(m_pInterface, FWL_WGTRELATION_Owner); -} -FWL_ERR CFWL_WidgetImp::SetOwner(IFWL_Widget* pOwner) { - m_pProperties->m_pOwner = pOwner; - m_pWidgetMgr->SetOwner(pOwner, m_pInterface); - return FWL_ERR_Succeeded; -} -IFWL_Widget* CFWL_WidgetImp::GetOuter() { - return m_pOuter; -} -FX_DWORD CFWL_WidgetImp::GetStyles() { - return m_pProperties->m_dwStyles; -} -FWL_ERR CFWL_WidgetImp::ModifyStyles(FX_DWORD dwStylesAdded, - FX_DWORD dwStylesRemoved) { - m_pProperties->m_dwStyles = - (m_pProperties->m_dwStyles & ~dwStylesRemoved) | dwStylesAdded; - return FWL_ERR_Succeeded; -} -FX_DWORD CFWL_WidgetImp::GetStylesEx() { - return m_pProperties->m_dwStyleExes; -} -FWL_ERR CFWL_WidgetImp::ModifyStylesEx(FX_DWORD dwStylesExAdded, - FX_DWORD dwStylesExRemoved) { - m_pProperties->m_dwStyleExes = - (m_pProperties->m_dwStyleExes & ~dwStylesExRemoved) | dwStylesExAdded; - return FWL_ERR_Succeeded; -} -FX_DWORD CFWL_WidgetImp::GetStates() { - return m_pProperties->m_dwStates; -} -static void NotifyHideChildWidget(IFWL_WidgetMgr* widgetMgr, - IFWL_Widget* widget, - CFWL_NoteDriver* noteDriver) { - IFWL_Widget* child = widgetMgr->GetWidget(widget, FWL_WGTRELATION_FirstChild); - while (child) { - noteDriver->NotifyTargetHide(child); - NotifyHideChildWidget(widgetMgr, child, noteDriver); - child = widgetMgr->GetWidget(child, FWL_WGTRELATION_NextSibling); - } -} -FWL_ERR CFWL_WidgetImp::SetStates(FX_DWORD dwStates, FX_BOOL bSet) { - bSet ? (m_pProperties->m_dwStates |= dwStates) - : (m_pProperties->m_dwStates &= ~dwStates); - FWL_ERR ret = FWL_ERR_Succeeded; - if (dwStates & FWL_WGTSTATE_Invisible) { - if (bSet) { - ret = m_pWidgetMgr->HideWidget_Native(m_pInterface); - CFWL_NoteDriver* noteDriver = - static_cast(GetOwnerThread()->GetNoteDriver()); - IFWL_WidgetMgr* widgetMgr = FWL_GetWidgetMgr(); - noteDriver->NotifyTargetHide(m_pInterface); - IFWL_Widget* child = - widgetMgr->GetWidget(m_pInterface, FWL_WGTRELATION_FirstChild); - while (child) { - noteDriver->NotifyTargetHide(child); - NotifyHideChildWidget(widgetMgr, child, noteDriver); - child = widgetMgr->GetWidget(child, FWL_WGTRELATION_NextSibling); - } - } else { - ret = m_pWidgetMgr->ShowWidget_Native(m_pInterface); - } - } - return ret; -} -FWL_ERR CFWL_WidgetImp::SetPrivateData(void* module_id, - void* pData, - PD_CALLBACK_FREEDATA callback) { - if (!m_pPrivateData) { - m_pPrivateData = new CFX_PrivateData; - } - m_pPrivateData->SetPrivateData(module_id, pData, callback); - return FWL_ERR_Succeeded; -} -void* CFWL_WidgetImp::GetPrivateData(void* module_id) { - if (!m_pPrivateData) - return NULL; - return m_pPrivateData->GetPrivateData(module_id); -} -FWL_ERR CFWL_WidgetImp::Update() { - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_WidgetImp::LockUpdate() { - m_iLock++; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_WidgetImp::UnlockUpdate() { - if (IsLocked()) { - m_iLock--; - } - return FWL_ERR_Succeeded; -} -FX_DWORD CFWL_WidgetImp::HitTest(FX_FLOAT fx, FX_FLOAT fy) { - CFX_RectF rtClient; - GetClientRect(rtClient); - if (rtClient.Contains(fx, fy)) { - return FWL_WGTHITTEST_Client; - } - if (HasEdge()) { - CFX_RectF rtEdge; - GetEdgeRect(rtEdge); - if (rtEdge.Contains(fx, fy)) { - return FWL_WGTHITTEST_Edge; - } - } - if (HasBorder()) { - CFX_RectF rtRelative; - GetRelativeRect(rtRelative); - if (rtRelative.Contains(fx, fy)) { - return FWL_WGTHITTEST_Border; - } - } - return FWL_WGTHITTEST_Unknown; -} -FWL_ERR CFWL_WidgetImp::TransformTo(IFWL_Widget* pWidget, - FX_FLOAT& fx, - FX_FLOAT& fy) { - if (m_pWidgetMgr->IsFormDisabled()) { - CFX_SizeF szOffset; - if (IsParent(pWidget)) { - szOffset = GetOffsetFromParent(pWidget); - } else { - szOffset = pWidget->GetOffsetFromParent(m_pInterface); - szOffset.x = -szOffset.x; - szOffset.y = -szOffset.y; - } - fx += szOffset.x; - fy += szOffset.y; - return FWL_ERR_Succeeded; - } - CFX_RectF r; - CFX_Matrix m; - IFWL_Widget* parent = GetParent(); - if (parent) { - GetWidgetRect(r); - fx += r.left; - fy += r.top; - GetMatrix(m, TRUE); - m.TransformPoint(fx, fy); - } - IFWL_Widget* form1 = - m_pWidgetMgr->GetWidget(m_pInterface, FWL_WGTRELATION_SystemForm); - if (!form1) - return FWL_ERR_Indefinite; - if (!pWidget) { - form1->GetWidgetRect(r); - fx += r.left; - fy += r.top; -#ifdef FWL_UseMacSystemBorder - if (form1->GetStyles() & FWL_WGTSTYLE_Caption) { - FX_FLOAT l, t, r, b; - l = t = r = b = 0; - FWL_GetAdapterWidgetMgr()->GetSystemBorder(l, t, r, b); - fy += t; - } -#endif - return FWL_ERR_Succeeded; - } - IFWL_Widget* form2 = - m_pWidgetMgr->GetWidget(pWidget, FWL_WGTRELATION_SystemForm); - if (!form2) - return FWL_ERR_Indefinite; - if (form1 != form2) { - form1->GetWidgetRect(r); - fx += r.left; - fy += r.top; - form2->GetWidgetRect(r); - fx -= r.left; - fy -= r.top; -#ifdef FWL_UseMacSystemBorder - if ((form1->GetStyles() & FWL_WGTSTYLE_Caption) != - (form2->GetStyles() & FWL_WGTSTYLE_Caption)) { - FX_FLOAT l, t, r, b; - l = t = r = b = 0; - FWL_GetAdapterWidgetMgr()->GetSystemBorder(l, t, r, b); - (form1->GetStyles() & FWL_WGTSTYLE_Caption) ? (fy += t) : (fy -= t); - } -#endif - } - parent = pWidget->GetParent(); - if (parent) { - pWidget->GetMatrix(m, TRUE); - CFX_Matrix m1; - m1.SetIdentity(); - m1.SetReverse(m); - m1.TransformPoint(fx, fy); - pWidget->GetWidgetRect(r); - fx -= r.left; - fy -= r.top; - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_WidgetImp::TransformTo(IFWL_Widget* pWidget, CFX_RectF& rt) { - return TransformTo(pWidget, rt.left, rt.top); -} -FWL_ERR CFWL_WidgetImp::GetMatrix(CFX_Matrix& matrix, FX_BOOL bGlobal) { - if (!m_pProperties) - return FWL_ERR_Indefinite; - if (bGlobal) { - IFWL_Widget* parent = GetParent(); - CFX_PtrArray parents; - while (parent) { - parents.Add(parent); - parent = parent->GetParent(); - } - matrix.SetIdentity(); - CFX_Matrix ctmOnParent; - CFX_RectF rect; - int32_t count = parents.GetSize(); - for (int32_t i = count - 2; i >= 0; i--) { - parent = static_cast(parents.GetAt(i)); - parent->GetMatrix(ctmOnParent, FALSE); - parent->GetWidgetRect(rect); - matrix.Concat(ctmOnParent, TRUE); - matrix.Translate(rect.left, rect.top, TRUE); - } - matrix.Concat(m_pProperties->m_ctmOnParent, TRUE); - parents.RemoveAll(); - } else { - matrix = m_pProperties->m_ctmOnParent; - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_WidgetImp::SetMatrix(const CFX_Matrix& matrix) { - if (!m_pProperties) - return FWL_ERR_Indefinite; - IFWL_Widget* parent = GetParent(); - if (!parent) { - return FWL_ERR_Indefinite; - } - m_pProperties->m_ctmOnParent = matrix; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_WidgetImp::DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - return FWL_ERR_Indefinite; -} -IFWL_ThemeProvider* CFWL_WidgetImp::GetThemeProvider() { - return m_pProperties->m_pThemeProvider; -} -FWL_ERR CFWL_WidgetImp::SetThemeProvider(IFWL_ThemeProvider* pThemeProvider) { - m_pProperties->m_pThemeProvider = pThemeProvider; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_WidgetImp::SetDataProvider(IFWL_DataProvider* pDataProvider) { - m_pProperties->m_pDataProvider = pDataProvider; - return FWL_ERR_Succeeded; -} -IFWL_WidgetDelegate* CFWL_WidgetImp::SetDelegate( - IFWL_WidgetDelegate* pDelegate) { - if (!m_pCurDelegate) { - m_pCurDelegate = m_pDelegate; - } - if (!pDelegate) { - return m_pCurDelegate; - } - IFWL_WidgetDelegate* pOldDelegate = m_pCurDelegate; - m_pCurDelegate = pDelegate; - return pOldDelegate; -} -IFWL_NoteThread* CFWL_WidgetImp::GetOwnerThread() const { - return static_cast(m_pOwnerThread->GetInterface()); -} -FWL_ERR CFWL_WidgetImp::SetOwnerThread(CFWL_NoteThreadImp* pOwnerThread) { - m_pOwnerThread = pOwnerThread; - return FWL_ERR_Succeeded; -} -IFWL_Widget* CFWL_WidgetImp::GetInterface() const { - return m_pInterface; -} -void CFWL_WidgetImp::SetInterface(IFWL_Widget* pInterface) { - m_pInterface = pInterface; -} -CFWL_WidgetImp::CFWL_WidgetImp(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) - : m_pProperties(new CFWL_WidgetImpProperties), - m_pPrivateData(NULL), - m_pDelegate(NULL), - m_pCurDelegate(NULL), - m_pOuter(pOuter), - m_pInterface(NULL), - m_iLock(0) { - *m_pProperties = properties; - m_pWidgetMgr = static_cast(FWL_GetWidgetMgr()); - FXSYS_assert(m_pWidgetMgr != NULL); -} -CFWL_WidgetImp::~CFWL_WidgetImp() { - if (m_pPrivateData) { - delete m_pPrivateData; - m_pPrivateData = NULL; - } - if (m_pProperties) { - delete m_pProperties; - m_pProperties = NULL; - } -} -FX_BOOL CFWL_WidgetImp::IsEnabled() const { - return (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled) == 0; -} -FX_BOOL CFWL_WidgetImp::IsVisible() const { - return (m_pProperties->m_dwStates & FWL_WGTSTATE_Invisible) == 0; -} -FX_BOOL CFWL_WidgetImp::IsActive() const { - return (m_pProperties->m_dwStates & FWL_WGTSTATE_Deactivated) == 0; -} -FX_BOOL CFWL_WidgetImp::IsOverLapper() const { - return (m_pProperties->m_dwStyles & FWL_WGTSTYLE_WindowTypeMask) == - FWL_WGTSTYLE_OverLapper; -} -FX_BOOL CFWL_WidgetImp::IsPopup() const { - return !!(m_pProperties->m_dwStyles & FWL_WGTSTYLE_Popup); -} -FX_BOOL CFWL_WidgetImp::IsChild() const { - return !!(m_pProperties->m_dwStyles & FWL_WGTSTYLE_Child); -} -FX_BOOL CFWL_WidgetImp::IsLocked() const { - return m_iLock > 0; -} -FX_BOOL CFWL_WidgetImp::IsOffscreen() const { - return !!(m_pProperties->m_dwStyles & FWL_WGTSTYLE_Offscreen); -} -FX_BOOL CFWL_WidgetImp::HasBorder() const { - return !!(m_pProperties->m_dwStyles & FWL_WGTSTYLE_Border); -} -FX_BOOL CFWL_WidgetImp::HasEdge() const { - return !!(m_pProperties->m_dwStyles & FWL_WGTSTYLE_EdgeMask); -} -void CFWL_WidgetImp::GetEdgeRect(CFX_RectF& rtEdge) { - rtEdge = m_pProperties->m_rtWidget; - rtEdge.left = rtEdge.top = 0; - if (HasBorder()) { - FX_FLOAT fCX = GetBorderSize(); - FX_FLOAT fCY = GetBorderSize(FALSE); - rtEdge.Deflate(fCX, fCY); - } -} -FX_FLOAT CFWL_WidgetImp::GetBorderSize(FX_BOOL bCX) { - FX_FLOAT* pfBorder = static_cast(GetThemeCapacity( - bCX ? FWL_WGTCAPACITY_CXBorder : FWL_WGTCAPACITY_CYBorder)); - if (!pfBorder) - return 0; - return *pfBorder; -} -FX_FLOAT CFWL_WidgetImp::GetEdgeWidth() { - FX_DWORD dwCapacity = 0; - switch (m_pProperties->m_dwStyles & FWL_WGTSTYLE_EdgeMask) { - case FWL_WGTSTYLE_EdgeFlat: { - dwCapacity = FWL_WGTCAPACITY_EdgeFlat; - break; - } - case FWL_WGTSTYLE_EdgeRaised: { - dwCapacity = FWL_WGTCAPACITY_EdgeRaised; - break; - } - case FWL_WGTSTYLE_EdgeSunken: { - dwCapacity = FWL_WGTCAPACITY_EdgeSunken; - break; - } - } - if (dwCapacity > 0) { - FX_FLOAT* fRet = static_cast(GetThemeCapacity(dwCapacity)); - return fRet ? *fRet : 0; - } - return 0; -} -void CFWL_WidgetImp::GetRelativeRect(CFX_RectF& rect) { - rect = m_pProperties->m_rtWidget; - rect.left = rect.top = 0; -} -void* CFWL_WidgetImp::GetThemeCapacity(FX_DWORD dwCapacity) { - IFWL_ThemeProvider* pTheme = GetAvailableTheme(); - if (!pTheme) - return NULL; - CFWL_ThemePart part; - part.m_pWidget = m_pInterface; - return pTheme->GetCapacity(&part, dwCapacity); -} -IFWL_ThemeProvider* CFWL_WidgetImp::GetAvailableTheme() { - if (m_pProperties->m_pThemeProvider) { - return m_pProperties->m_pThemeProvider; - } - IFWL_Widget* pUp = m_pInterface; - do { - FWL_WGTRELATION relation = (pUp->GetStyles() & FWL_WGTSTYLE_Popup) - ? FWL_WGTRELATION_Owner - : FWL_WGTRELATION_Parent; - pUp = m_pWidgetMgr->GetWidget(pUp, relation); - if (pUp) { - IFWL_ThemeProvider* pRet = pUp->GetThemeProvider(); - if (pRet && pRet->IsValidWidget(m_pInterface)) { - return pRet; - } - } - } while (pUp); - return FWL_GetApp()->GetThemeProvider(); -} -CFWL_WidgetImp* CFWL_WidgetImp::GetRootOuter() { - IFWL_Widget* pRet = m_pOuter; - if (!pRet) - return nullptr; - while (IFWL_Widget* pOuter = pRet->GetOuter()) { - pRet = pOuter; - } - return static_cast(pRet->GetImpl()); -} -#define FWL_WGT_CalcHeight 2048 -#define FWL_WGT_CalcWidth 2048 -#define FWL_WGT_CalcMultiLineDefWidth 120.0f -CFX_SizeF CFWL_WidgetImp::CalcTextSize(const CFX_WideString& wsText, - IFWL_ThemeProvider* pTheme, - FX_BOOL bMultiLine, - int32_t iLineWidth) { - if (!pTheme) - return CFX_SizeF(); - - CFWL_ThemeText calPart; - calPart.m_pWidget = m_pInterface; - calPart.m_wsText = wsText; - calPart.m_dwTTOStyles = - bMultiLine ? FDE_TTOSTYLE_LineWrap : FDE_TTOSTYLE_SingleLine; - calPart.m_iTTOAlign = FDE_TTOALIGNMENT_TopLeft; - CFX_RectF rect; - FX_FLOAT fWidth = bMultiLine - ? (iLineWidth > 0 ? (FX_FLOAT)iLineWidth - : FWL_WGT_CalcMultiLineDefWidth) - : FWL_WGT_CalcWidth; - rect.Set(0, 0, fWidth, FWL_WGT_CalcHeight); - pTheme->CalcTextRect(&calPart, rect); - return CFX_SizeF(rect.width, rect.height); -} -void CFWL_WidgetImp::CalcTextRect(const CFX_WideString& wsText, - IFWL_ThemeProvider* pTheme, - FX_DWORD dwTTOStyles, - int32_t iTTOAlign, - CFX_RectF& rect) { - CFWL_ThemeText calPart; - calPart.m_pWidget = m_pInterface; - calPart.m_wsText = wsText; - calPart.m_dwTTOStyles = dwTTOStyles; - calPart.m_iTTOAlign = iTTOAlign; - pTheme->CalcTextRect(&calPart, rect); -} -void CFWL_WidgetImp::SetFocus(FX_BOOL bFocus) { - if (m_pWidgetMgr->IsFormDisabled()) - return; - IFWL_NoteThread* pThread = GetOwnerThread(); - if (!pThread) - return; - CFWL_NoteDriver* pDriver = - static_cast(pThread->GetNoteDriver()); - if (!pDriver) - return; - IFWL_Widget* curFocus = pDriver->GetFocus(); - if (bFocus && curFocus != m_pInterface) { - pDriver->SetFocus(m_pInterface); - } else if (!bFocus && curFocus == m_pInterface) { - pDriver->SetFocus(NULL); - } -} -void CFWL_WidgetImp::SetGrab(FX_BOOL bSet) { - IFWL_NoteThread* pThread = GetOwnerThread(); - if (!pThread) - return; - CFWL_NoteDriver* pDriver = - static_cast(pThread->GetNoteDriver()); - pDriver->SetGrab(m_pInterface, bSet); -} -FX_BOOL CFWL_WidgetImp::GetPopupPos(FX_FLOAT fMinHeight, - FX_FLOAT fMaxHeight, - const CFX_RectF& rtAnchor, - CFX_RectF& rtPopup) { - if (GetClassID() == FWL_CLASSHASH_Menu) { - return GetPopupPosMenu(fMinHeight, fMaxHeight, rtAnchor, rtPopup); - } else { - if (GetClassID() == FWL_CLASSHASH_ComboBox) { - if (m_pWidgetMgr->IsFormDisabled()) { - return m_pWidgetMgr->GetAdapterPopupPos(m_pInterface, fMinHeight, - fMaxHeight, rtAnchor, rtPopup); - } else { - return GetPopupPosComboBox(fMinHeight, fMaxHeight, rtAnchor, rtPopup); - } - } else if (GetClassID() == FWL_CLASSHASH_DateTimePicker && - m_pWidgetMgr->IsFormDisabled()) { - return m_pWidgetMgr->GetAdapterPopupPos(m_pInterface, fMinHeight, - fMaxHeight, rtAnchor, rtPopup); - } else { - return GetPopupPosGeneral(fMinHeight, fMaxHeight, rtAnchor, rtPopup); - } - } - return FALSE; -} -FX_BOOL CFWL_WidgetImp::GetPopupPosMenu(FX_FLOAT fMinHeight, - FX_FLOAT fMaxHeight, - const CFX_RectF& rtAnchor, - CFX_RectF& rtPopup) { - FX_FLOAT fx = 0; - FX_FLOAT fy = 0; - FX_FLOAT fScreenWidth = 0; - FX_FLOAT fScreenHeight = 0; - GetScreenSize(fScreenWidth, fScreenHeight); - if (GetStylesEx() & FWL_STYLEEXT_MNU_Vert) { - FX_BOOL bLeft = m_pProperties->m_rtWidget.left < 0; - FX_FLOAT fRight = rtAnchor.right() + rtPopup.width; - TransformTo(NULL, fx, fy); - if (fRight + fx > fScreenWidth || bLeft) { - rtPopup.Set(rtAnchor.left - rtPopup.width, rtAnchor.top, rtPopup.width, - rtPopup.height); - } else { - rtPopup.Set(rtAnchor.right(), rtAnchor.top, rtPopup.width, - rtPopup.height); - } - } else { - FX_FLOAT fBottom = rtAnchor.bottom() + rtPopup.height; - TransformTo(NULL, fx, fy); - if (fBottom + fy > fScreenHeight) { - rtPopup.Set(rtAnchor.left, rtAnchor.top - rtPopup.height, rtPopup.width, - rtPopup.height); - } else { - rtPopup.Set(rtAnchor.left, rtAnchor.bottom(), rtPopup.width, - rtPopup.height); - } - } - rtPopup.Offset(fx, fy); - return TRUE; -} -FX_BOOL CFWL_WidgetImp::GetPopupPosComboBox(FX_FLOAT fMinHeight, - FX_FLOAT fMaxHeight, - const CFX_RectF& rtAnchor, - CFX_RectF& rtPopup) { - FX_FLOAT fx = 0; - FX_FLOAT fy = 0; - FX_FLOAT fScreenWidth = 0; - FX_FLOAT fScreenHeight = 0; - GetScreenSize(fScreenWidth, fScreenHeight); - FX_FLOAT fPopHeight = rtPopup.height; - if (rtPopup.height > fMaxHeight) { - fPopHeight = fMaxHeight; - } else if (rtPopup.height < fMinHeight) { - fPopHeight = fMinHeight; - } - FX_FLOAT fWidth = std::max(rtAnchor.width, rtPopup.width); - FX_FLOAT fBottom = rtAnchor.bottom() + fPopHeight; - TransformTo(NULL, fx, fy); - if (fBottom + fy > fScreenHeight) { - rtPopup.Set(rtAnchor.left, rtAnchor.top - fPopHeight, fWidth, fPopHeight); - } else { - rtPopup.Set(rtAnchor.left, rtAnchor.bottom(), fWidth, fPopHeight); - } - rtPopup.Offset(fx, fy); - return TRUE; -} -FX_BOOL CFWL_WidgetImp::GetPopupPosGeneral(FX_FLOAT fMinHeight, - FX_FLOAT fMaxHeight, - const CFX_RectF& rtAnchor, - CFX_RectF& rtPopup) { - FX_FLOAT fx = 0; - FX_FLOAT fy = 0; - FX_FLOAT fScreenWidth = 0; - FX_FLOAT fScreenHeight = 0; - GetScreenSize(fScreenWidth, fScreenHeight); - TransformTo(NULL, fx, fy); - if (rtAnchor.bottom() + fy > fScreenHeight) { - rtPopup.Set(rtAnchor.left, rtAnchor.top - rtPopup.height, rtPopup.width, - rtPopup.height); - } else { - rtPopup.Set(rtAnchor.left, rtAnchor.bottom(), rtPopup.width, - rtPopup.height); - } - rtPopup.Offset(fx, fy); - return TRUE; -} -FX_BOOL CFWL_WidgetImp::GetScreenSize(FX_FLOAT& fx, FX_FLOAT& fy) { - return FALSE; -} -void CFWL_WidgetImp::RegisterEventTarget(IFWL_Widget* pEventSource, - FX_DWORD dwFilter) { - IFWL_NoteThread* pThread = GetOwnerThread(); - if (!pThread) - return; - IFWL_NoteDriver* pNoteDriver = pThread->GetNoteDriver(); - if (!pNoteDriver) - return; - pNoteDriver->RegisterEventTarget(m_pInterface, pEventSource, dwFilter); -} -void CFWL_WidgetImp::UnregisterEventTarget() { - IFWL_NoteThread* pThread = GetOwnerThread(); - if (!pThread) - return; - IFWL_NoteDriver* pNoteDriver = pThread->GetNoteDriver(); - if (!pNoteDriver) - return; - pNoteDriver->UnregisterEventTarget(m_pInterface); -} -void CFWL_WidgetImp::DispatchKeyEvent(CFWL_MsgKey* pNote) { - if (!pNote) - return; - CFWL_EvtKey* pEvent = new CFWL_EvtKey; - pEvent->m_pSrcTarget = m_pInterface; - pEvent->m_dwCmd = pNote->m_dwCmd; - pEvent->m_dwKeyCode = pNote->m_dwKeyCode; - pEvent->m_dwFlags = pNote->m_dwFlags; - DispatchEvent(pEvent); - pEvent->Release(); -} -void CFWL_WidgetImp::DispatchEvent(CFWL_Event* pEvent) { - if (m_pOuter) { - IFWL_WidgetDelegate* pDelegate = m_pOuter->SetDelegate(NULL); - pDelegate->OnProcessEvent(pEvent); - return; - } - IFWL_NoteThread* pThread = GetOwnerThread(); - if (!pThread) - return; - IFWL_NoteDriver* pNoteDriver = pThread->GetNoteDriver(); - if (!pNoteDriver) - return; - pNoteDriver->SendNote(pEvent); -} -void CFWL_WidgetImp::Repaint(const CFX_RectF* pRect) { - if (pRect) { - m_pWidgetMgr->RepaintWidget(m_pInterface, pRect); - return; - } - CFX_RectF rect; - rect = m_pProperties->m_rtWidget; - rect.left = rect.top = 0; - m_pWidgetMgr->RepaintWidget(m_pInterface, &rect); -} -void CFWL_WidgetImp::DrawBackground(CFX_Graphics* pGraphics, - int32_t iPartBk, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix) { - CFX_RectF rtRelative; - GetRelativeRect(rtRelative); - CFWL_ThemeBackground param; - param.m_pWidget = m_pInterface; - param.m_iPart = iPartBk; - param.m_pGraphics = pGraphics; - if (pMatrix) { - param.m_matrix.Concat(*pMatrix, TRUE); - } - param.m_rtPart = rtRelative; - pTheme->DrawBackground(¶m); -} -void CFWL_WidgetImp::DrawBorder(CFX_Graphics* pGraphics, - int32_t iPartBorder, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix) { - CFX_RectF rtRelative; - GetRelativeRect(rtRelative); - CFWL_ThemeBackground param; - param.m_pWidget = m_pInterface; - param.m_iPart = iPartBorder; - param.m_pGraphics = pGraphics; - if (pMatrix) { - param.m_matrix.Concat(*pMatrix, TRUE); - } - param.m_rtPart = rtRelative; - pTheme->DrawBackground(¶m); -} -void CFWL_WidgetImp::DrawEdge(CFX_Graphics* pGraphics, - int32_t iPartEdge, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix) { - CFX_RectF rtEdge; - GetEdgeRect(rtEdge); - CFWL_ThemeBackground param; - param.m_pWidget = m_pInterface; - param.m_iPart = iPartEdge; - param.m_pGraphics = pGraphics; - if (pMatrix) { - param.m_matrix.Concat(*pMatrix, TRUE); - } - param.m_rtPart = rtEdge; - pTheme->DrawBackground(¶m); -} -void CFWL_WidgetImp::NotifyDriver() { - IFWL_NoteThread* pThread = GetOwnerThread(); - if (!pThread) - return; - CFWL_NoteDriver* pDriver = - static_cast(pThread->GetNoteDriver()); - if (!pDriver) - return; - pDriver->NotifyTargetDestroy(m_pInterface); -} -CFX_SizeF CFWL_WidgetImp::GetOffsetFromParent(IFWL_Widget* pParent) { - if (pParent == GetInterface()) - return CFX_SizeF(); - - IFWL_WidgetMgr* pWidgetMgr = FWL_GetWidgetMgr(); - if (!pWidgetMgr) - return CFX_SizeF(); - - CFX_SizeF szRet(m_pProperties->m_rtWidget.left, - m_pProperties->m_rtWidget.top); - - IFWL_Widget* pDstWidget = GetParent(); - while (pDstWidget && pDstWidget != pParent) { - CFX_RectF rtDst; - pDstWidget->GetWidgetRect(rtDst); - szRet += CFX_SizeF(rtDst.left, rtDst.top); - pDstWidget = pWidgetMgr->GetWidget(pDstWidget, FWL_WGTRELATION_Parent); - } - return szRet; -} -FX_BOOL CFWL_WidgetImp::IsParent(IFWL_Widget* pParent) { - IFWL_Widget* pUpWidget = GetParent(); - while (pUpWidget) { - if (pUpWidget == pParent) - return TRUE; - pUpWidget = pUpWidget->GetParent(); - } - return FALSE; -} -CFWL_WidgetImpDelegate::CFWL_WidgetImpDelegate() {} -int32_t CFWL_WidgetImpDelegate::OnProcessMessage(CFWL_Message* pMessage) { - if (!pMessage->m_pDstTarget) - return 0; - CFWL_WidgetImp* pWidget = - static_cast(pMessage->m_pDstTarget->GetImpl()); - FX_DWORD dwMsgCode = pMessage->GetClassID(); - switch (dwMsgCode) { - case FWL_MSGHASH_Mouse: { - CFWL_MsgMouse* pMsgMouse = static_cast(pMessage); - CFWL_EvtMouse evt; - evt.m_pSrcTarget = pWidget->m_pInterface; - evt.m_pDstTarget = pWidget->m_pInterface; - evt.m_dwCmd = pMsgMouse->m_dwCmd; - evt.m_dwFlags = pMsgMouse->m_dwFlags; - evt.m_fx = pMsgMouse->m_fx; - evt.m_fy = pMsgMouse->m_fy; - pWidget->DispatchEvent(&evt); - break; - } - case FWL_MSGHASH_MouseWheel: { - CFWL_MsgMouseWheel* pMsgMouseWheel = - static_cast(pMessage); - CFWL_EvtMouseWheel evt; - evt.m_pSrcTarget = pWidget->m_pInterface; - evt.m_pDstTarget = pWidget->m_pInterface; - evt.m_dwFlags = pMsgMouseWheel->m_dwFlags; - evt.m_fDeltaX = pMsgMouseWheel->m_fDeltaX; - evt.m_fDeltaY = pMsgMouseWheel->m_fDeltaY; - evt.m_fx = pMsgMouseWheel->m_fx; - evt.m_fy = pMsgMouseWheel->m_fy; - pWidget->DispatchEvent(&evt); - break; - } - case FWL_MSGHASH_Key: { - CFWL_MsgKey* pMsgKey = static_cast(pMessage); - CFWL_EvtKey evt; - evt.m_pSrcTarget = pWidget->m_pInterface; - evt.m_pDstTarget = pWidget->m_pInterface; - evt.m_dwKeyCode = pMsgKey->m_dwKeyCode; - evt.m_dwFlags = pMsgKey->m_dwFlags; - evt.m_dwCmd = pMsgKey->m_dwCmd; - pWidget->DispatchEvent(&evt); - break; - } - case FWL_MSGHASH_SetFocus: { - CFWL_MsgSetFocus* pMsgSetFocus = static_cast(pMessage); - CFWL_EvtSetFocus evt; - evt.m_pSrcTarget = pMsgSetFocus->m_pDstTarget; - evt.m_pDstTarget = pMsgSetFocus->m_pDstTarget; - evt.m_pSetFocus = pWidget->m_pInterface; - pWidget->DispatchEvent(&evt); - break; - } - case FWL_MSGHASH_KillFocus: { - CFWL_MsgKillFocus* pMsgKillFocus = - static_cast(pMessage); - CFWL_EvtKillFocus evt; - evt.m_pSrcTarget = pMsgKillFocus->m_pDstTarget; - evt.m_pDstTarget = pMsgKillFocus->m_pDstTarget; - evt.m_pKillFocus = pWidget->m_pInterface; - pWidget->DispatchEvent(&evt); - break; - } - default: {} - } - return 1; -} -FWL_ERR CFWL_WidgetImpDelegate::OnProcessEvent(CFWL_Event* pEvent) { - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_WidgetImpDelegate::OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - CFWL_EvtDraw evt; - evt.m_pGraphics = pGraphics; - return FWL_ERR_Succeeded; -} -class CFWL_CustomImp : public CFWL_WidgetImp { - public: - CFWL_CustomImp(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter); - virtual FWL_ERR GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize = FALSE); - virtual FWL_ERR Update(); - virtual FWL_ERR SetProxy(IFWL_Proxy* pProxy); - - protected: - IFWL_Proxy* m_pProxy; -}; -CFWL_CustomImp::CFWL_CustomImp(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) - : CFWL_WidgetImp(properties, pOuter), m_pProxy(NULL) {} -FWL_ERR CFWL_CustomImp::GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize) { - if (m_pProxy && - (m_pProxy->GetWidgetRect(rect, bAutoSize) == FWL_ERR_Succeeded)) { - return FWL_ERR_Succeeded; - } - return CFWL_WidgetImp::GetWidgetRect(rect, bAutoSize); -} -FWL_ERR CFWL_CustomImp::Update() { - if (m_pProxy) { - return m_pProxy->Update(); - } - return CFWL_WidgetImp::Update(); -} -FWL_ERR CFWL_CustomImp::SetProxy(IFWL_Proxy* pProxy) { - m_pProxy = pProxy; - return FWL_ERR_Succeeded; -} - -// static -IFWL_Custom* IFWL_Custom::Create(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) { - IFWL_Custom* pCustom = new IFWL_Custom; - CFWL_CustomImp* pCustomImpl = new CFWL_CustomImp(properties, pOuter); - pCustom->SetImpl(pCustomImpl); - pCustomImpl->SetInterface(pCustom); - return pCustom; -} -IFWL_Custom::IFWL_Custom() {} -FWL_ERR IFWL_Custom::SetProxy(IFWL_Proxy* pProxy) { - return static_cast(GetImpl())->SetProxy(pProxy); -} -void FWL_SetWidgetRect(IFWL_Widget* widget, const CFX_RectF& rect) { - static_cast(widget->GetImpl())->m_pProperties->m_rtWidget = - rect; -} -void FWL_SetWidgetStates(IFWL_Widget* widget, FX_DWORD dwStates) { - static_cast(widget->GetImpl())->m_pProperties->m_dwStates = - dwStates; -} -void FWL_SetWidgetStyles(IFWL_Widget* widget, FX_DWORD dwStyles) { - static_cast(widget->GetImpl())->m_pProperties->m_dwStyles = - dwStyles; -} -FWL_ERR FWL_EnabelWidget(IFWL_Widget* widget, FX_BOOL bEnable) { - widget->SetStates(FWL_WGTSTATE_Disabled, !bEnable); - IFWL_WidgetMgr* widgetMgr = FWL_GetWidgetMgr(); - IFWL_Widget* child = widgetMgr->GetWidget(widget, FWL_WGTRELATION_FirstChild); - while (child) { - FWL_EnabelWidget(child, bEnable); - child = widgetMgr->GetWidget(child, FWL_WGTRELATION_NextSibling); - } - return FWL_ERR_Succeeded; -} diff --git a/xfa/src/fwl/core/fwl_widgetimp.h b/xfa/src/fwl/core/fwl_widgetimp.h deleted file mode 100644 index d0dcf3cfc1..0000000000 --- a/xfa/src/fwl/core/fwl_widgetimp.h +++ /dev/null @@ -1,162 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FWL_CORE_FWL_WIDGETIMP_H_ -#define XFA_SRC_FWL_CORE_FWL_WIDGETIMP_H_ - -#include "xfa/include/fwl/core/fwl_widget.h" -#include "xfa/src/fwl/core/fwl_targetimp.h" - -class CFWL_NoteThreadImp; -class CFWL_WidgetImpProperties; -class CFWL_WidgetMgr; -class IFWL_DataProvider; -class IFWL_ThemeProvider; -class IFWL_Widget; -class IFWL_WidgetDelegate; - -class CFWL_WidgetImp : public CFWL_TargetImp { - public: - virtual FWL_ERR Initialize(); - virtual FWL_ERR Finalize(); - - virtual FWL_ERR GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize = FALSE); - virtual FWL_ERR GetGlobalRect(CFX_RectF& rect); - virtual FWL_ERR SetWidgetRect(const CFX_RectF& rect); - virtual FWL_ERR GetClientRect(CFX_RectF& rect); - virtual IFWL_Widget* GetParent(); - virtual FWL_ERR SetParent(IFWL_Widget* pParent); - virtual IFWL_Widget* GetOwner(); - virtual FWL_ERR SetOwner(IFWL_Widget* pOwner); - virtual IFWL_Widget* GetOuter(); - virtual FX_DWORD GetStyles(); - virtual FWL_ERR ModifyStyles(FX_DWORD dwStylesAdded, - FX_DWORD dwStylesRemoved); - virtual FX_DWORD GetStylesEx(); - virtual FWL_ERR ModifyStylesEx(FX_DWORD dwStylesExAdded, - FX_DWORD dwStylesExRemoved); - virtual FX_DWORD GetStates(); - virtual FWL_ERR SetStates(FX_DWORD dwStates, FX_BOOL bSet = TRUE); - virtual FWL_ERR SetPrivateData(void* module_id, - void* pData, - PD_CALLBACK_FREEDATA callback); - virtual void* GetPrivateData(void* module_id); - virtual FWL_ERR Update(); - virtual FWL_ERR LockUpdate(); - virtual FWL_ERR UnlockUpdate(); - virtual FX_DWORD HitTest(FX_FLOAT fx, FX_FLOAT fy); - virtual FWL_ERR TransformTo(IFWL_Widget* pWidget, FX_FLOAT& fx, FX_FLOAT& fy); - virtual FWL_ERR TransformTo(IFWL_Widget* pWidget, CFX_RectF& rt); - virtual FWL_ERR GetMatrix(CFX_Matrix& matrix, FX_BOOL bGlobal = FALSE); - virtual FWL_ERR SetMatrix(const CFX_Matrix& matrix); - virtual FWL_ERR DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL); - virtual IFWL_ThemeProvider* GetThemeProvider(); - virtual FWL_ERR SetThemeProvider(IFWL_ThemeProvider* pThemeProvider); - virtual FWL_ERR SetDataProvider(IFWL_DataProvider* pDataProvider); - virtual IFWL_WidgetDelegate* SetDelegate(IFWL_WidgetDelegate* pDelegate); - virtual IFWL_NoteThread* GetOwnerThread() const; - FWL_ERR SetOwnerThread(CFWL_NoteThreadImp* pOwnerThread); - IFWL_Widget* GetInterface() const; - void SetInterface(IFWL_Widget* pInterface); - CFX_SizeF GetOffsetFromParent(IFWL_Widget* pParent); - - protected: - CFWL_WidgetImp(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter); - virtual ~CFWL_WidgetImp(); - FX_BOOL IsEnabled() const; - FX_BOOL IsVisible() const; - FX_BOOL IsActive() const; - FX_BOOL IsOverLapper() const; - FX_BOOL IsPopup() const; - FX_BOOL IsChild() const; - FX_BOOL IsLocked() const; - FX_BOOL IsOffscreen() const; - FX_BOOL HasBorder() const; - FX_BOOL HasEdge() const; - void GetEdgeRect(CFX_RectF& rtEdge); - FX_FLOAT GetBorderSize(FX_BOOL bCX = TRUE); - FX_FLOAT GetEdgeWidth(); - void GetRelativeRect(CFX_RectF& rect); - void* GetThemeCapacity(FX_DWORD dwCapacity); - IFWL_ThemeProvider* GetAvailableTheme(); - CFWL_WidgetImp* GetRootOuter(); - CFX_SizeF CalcTextSize(const CFX_WideString& wsText, - IFWL_ThemeProvider* pTheme, - FX_BOOL bMultiLine = FALSE, - int32_t iLineWidth = -1); - void CalcTextRect(const CFX_WideString& wsText, - IFWL_ThemeProvider* pTheme, - FX_DWORD dwTTOStyles, - int32_t iTTOAlign, - CFX_RectF& rect); - void SetFocus(FX_BOOL bFocus); - void SetGrab(FX_BOOL bSet); - FX_BOOL GetPopupPos(FX_FLOAT fMinHeight, - FX_FLOAT fMaxHeight, - const CFX_RectF& rtAnchor, - CFX_RectF& rtPopup); - FX_BOOL GetPopupPosMenu(FX_FLOAT fMinHeight, - FX_FLOAT fMaxHeight, - const CFX_RectF& rtAnchor, - CFX_RectF& rtPopup); - FX_BOOL GetPopupPosComboBox(FX_FLOAT fMinHeight, - FX_FLOAT fMaxHeight, - const CFX_RectF& rtAnchor, - CFX_RectF& rtPopup); - FX_BOOL GetPopupPosGeneral(FX_FLOAT fMinHeight, - FX_FLOAT fMaxHeight, - const CFX_RectF& rtAnchor, - CFX_RectF& rtPopup); - FX_BOOL GetScreenSize(FX_FLOAT& fx, FX_FLOAT& fy); - void RegisterEventTarget(IFWL_Widget* pEventSource = NULL, - FX_DWORD dwFilter = FWL_EVENT_ALL_MASK); - void UnregisterEventTarget(); - void DispatchKeyEvent(CFWL_MsgKey* pNote); - void DispatchEvent(CFWL_Event* pEvent); - void Repaint(const CFX_RectF* pRect = NULL); - void DrawBackground(CFX_Graphics* pGraphics, - int32_t iPartBk, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix = NULL); - void DrawBorder(CFX_Graphics* pGraphics, - int32_t iPartBorder, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix = NULL); - void DrawEdge(CFX_Graphics* pGraphics, - int32_t iPartEdge, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix = NULL); - void NotifyDriver(); - - FX_BOOL IsParent(IFWL_Widget* pParent); - CFWL_WidgetMgr* m_pWidgetMgr; - CFWL_NoteThreadImp* m_pOwnerThread; - CFWL_WidgetImpProperties* m_pProperties; - CFX_PrivateData* m_pPrivateData; - IFWL_WidgetDelegate* m_pDelegate; - IFWL_WidgetDelegate* m_pCurDelegate; - IFWL_Widget* m_pOuter; - IFWL_Widget* m_pInterface; - int32_t m_iLock; - friend class CFWL_WidgetImpDelegate; - friend void FWL_SetWidgetRect(IFWL_Widget* widget, const CFX_RectF& rect); - friend void FWL_SetWidgetStates(IFWL_Widget* widget, FX_DWORD dwStates); - friend void FWL_SetWidgetStyles(IFWL_Widget* widget, FX_DWORD dwStyles); -}; - -class CFWL_WidgetImpDelegate : public IFWL_WidgetDelegate { - public: - CFWL_WidgetImpDelegate(); - ~CFWL_WidgetImpDelegate() override {} - int32_t OnProcessMessage(CFWL_Message* pMessage) override; - FWL_ERR OnProcessEvent(CFWL_Event* pEvent) override; - FWL_ERR OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL) override; -}; - -#endif // XFA_SRC_FWL_CORE_FWL_WIDGETIMP_H_ diff --git a/xfa/src/fwl/core/fwl_widgetmgrimp.cpp b/xfa/src/fwl/core/fwl_widgetmgrimp.cpp deleted file mode 100644 index aeb655b9ad..0000000000 --- a/xfa/src/fwl/core/fwl_widgetmgrimp.cpp +++ /dev/null @@ -1,1075 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fwl/core/fwl_widgetmgrimp.h" - -#include "xfa/include/fwl/adapter/fwl_adapternative.h" -#include "xfa/include/fwl/adapter/fwl_adapterwidgetmgr.h" -#include "xfa/include/fwl/core/fwl_app.h" -#include "xfa/include/fwl/core/fwl_form.h" -#include "xfa/src/fwl/core/fwl_appimp.h" -#include "xfa/src/fwl/core/fwl_noteimp.h" -#include "xfa/src/fwl/core/fwl_targetimp.h" -#include "xfa/src/fwl/core/fwl_threadimp.h" -#include "xfa/src/fwl/core/fwl_widgetimp.h" - -FX_BOOL FWL_UseOffscreen(IFWL_Widget* pWidget) { -#if (_FX_OS_ == _FX_MACOSX_) - return FALSE; -#else - return pWidget->GetStyles() & FWL_WGTSTYLE_Offscreen; -#endif -} -IFWL_WidgetMgr* FWL_GetWidgetMgr() { - IFWL_App* pApp = FWL_GetApp(); - if (!pApp) - return NULL; - return pApp->GetWidgetMgr(); -} -CFWL_WidgetMgr::CFWL_WidgetMgr(IFWL_AdapterNative* pAdapterNative) - : m_dwCapability(0) { - m_pDelegate = new CFWL_WidgetMgrDelegate(this); - m_pAdapter = pAdapterNative->GetWidgetMgr(m_pDelegate); - FXSYS_assert(m_pAdapter); - CFWL_WidgetMgrItem* pRoot = new CFWL_WidgetMgrItem; - m_mapWidgetItem.SetAt(NULL, pRoot); -#if (_FX_OS_ == _FX_WIN32_DESKTOP_) || (_FX_OS_ == _FX_WIN64_) - m_rtScreen.Reset(); -#endif -} -CFWL_WidgetMgr::~CFWL_WidgetMgr() { - FX_POSITION ps = m_mapWidgetItem.GetStartPosition(); - while (ps) { - void* pWidget; - CFWL_WidgetMgrItem* pItem; - m_mapWidgetItem.GetNextAssoc(ps, pWidget, (void*&)pItem); - delete pItem; - } - m_mapWidgetItem.RemoveAll(); - if (m_pDelegate) { - delete m_pDelegate; - m_pDelegate = NULL; - } -} -int32_t CFWL_WidgetMgr::CountWidgets(IFWL_Widget* pParent) { - CFWL_WidgetMgrItem* pParentItem = GetWidgetMgrItem(pParent); - return TravelWidgetMgr(pParentItem, NULL, NULL); -} -IFWL_Widget* CFWL_WidgetMgr::GetWidget(int32_t nIndex, IFWL_Widget* pParent) { - CFWL_WidgetMgrItem* pParentItem = GetWidgetMgrItem(pParent); - IFWL_Widget* pWidget = NULL; - TravelWidgetMgr(pParentItem, &nIndex, NULL, &pWidget); - return pWidget; -} -IFWL_Widget* CFWL_WidgetMgr::GetWidget(IFWL_Widget* pWidget, - FWL_WGTRELATION eRelation) { - CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget); - if (!pItem) { - return NULL; - } - IFWL_Widget* pRet = NULL; - switch (eRelation) { - case FWL_WGTRELATION_Parent: { - pRet = pItem->pParent ? pItem->pParent->pWidget : NULL; - break; - } - case FWL_WGTRELATION_Owner: { - pRet = pItem->pOwner ? pItem->pOwner->pWidget : NULL; - break; - } - case FWL_WGTRELATION_FirstSibling: { - pItem = pItem->pPrevious; - while (pItem && pItem->pPrevious) { - pItem = pItem->pPrevious; - } - pRet = pItem ? pItem->pWidget : NULL; - break; - } - case FWL_WGTRELATION_PriorSibling: { - pRet = pItem->pPrevious ? pItem->pPrevious->pWidget : NULL; - break; - } - case FWL_WGTRELATION_NextSibling: { - pRet = pItem->pNext ? pItem->pNext->pWidget : NULL; - break; - } - case FWL_WGTRELATION_LastSibling: { - pItem = pItem->pNext; - while (pItem && pItem->pNext) { - pItem = pItem->pNext; - } - pRet = pItem ? pItem->pWidget : NULL; - break; - } - case FWL_WGTRELATION_FirstChild: { - pRet = pItem->pChild ? pItem->pChild->pWidget : NULL; - break; - } - case FWL_WGTRELATION_LastChild: { - pItem = pItem->pChild; - while (pItem && pItem->pNext) { - pItem = pItem->pNext; - } - pRet = pItem ? pItem->pWidget : NULL; - break; - } - case FWL_WGTRELATION_SystemForm: { - while (pItem) { - if (IsAbleNative(pItem->pWidget)) { - pRet = pItem->pWidget; - break; - } - pItem = pItem->pParent; - } - break; - } - default: {} - } - return pRet; -} -int32_t CFWL_WidgetMgr::GetWidgetIndex(IFWL_Widget* pWidget) { - CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget); - if (!pItem) - return -1; - return TravelWidgetMgr(pItem->pParent, NULL, pItem); -} -FX_BOOL CFWL_WidgetMgr::SetWidgetIndex(IFWL_Widget* pWidget, int32_t nIndex) { - CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget); - if (!pItem) - return FALSE; - if (!pItem->pParent) - return FALSE; - CFWL_WidgetMgrItem* pChild = pItem->pParent->pChild; - int32_t i = 0; - while (pChild) { - if (pChild == pItem) { - if (i == nIndex) { - return TRUE; - } - if (pChild->pPrevious) { - pChild->pPrevious->pNext = pChild->pNext; - } - if (pChild->pNext) { - pChild->pNext->pPrevious = pChild->pPrevious; - } - if (pItem->pParent->pChild == pItem) { - pItem->pParent->pChild = pItem->pNext; - } - pItem->pNext = NULL; - pItem->pPrevious = NULL; - break; - } - if (!pChild->pNext) { - break; - } - pChild = pChild->pNext; - ++i; - } - pChild = pItem->pParent->pChild; - if (pChild) { - if (nIndex < 0) { - while (pChild->pNext) { - pChild = pChild->pNext; - } - pChild->pNext = pItem; - pItem->pPrevious = pChild; - pItem->pNext = NULL; - return TRUE; - } - i = 0; - while (i < nIndex && pChild->pNext) { - pChild = pChild->pNext; - ++i; - } - if (!pChild->pNext) { - pChild->pNext = pItem; - pItem->pPrevious = pChild; - pItem->pNext = NULL; - return TRUE; - } - if (pChild->pPrevious) { - pItem->pPrevious = pChild->pPrevious; - pChild->pPrevious->pNext = pItem; - } - pChild->pPrevious = pItem; - pItem->pNext = pChild; - if (pItem->pParent->pChild == pChild) { - pItem->pParent->pChild = pItem; - } - } else { - pItem->pParent->pChild = pItem; - pItem->pPrevious = NULL; - pItem->pNext = NULL; - } - return TRUE; -} -FWL_ERR CFWL_WidgetMgr::RepaintWidget(IFWL_Widget* pWidget, - const CFX_RectF* pRect) { - if (!m_pAdapter) - return FWL_ERR_Indefinite; - IFWL_Widget* pNative = pWidget; - CFX_RectF rect(*pRect); - if (IsFormDisabled()) { - IFWL_Widget* pOuter = pWidget->GetOuter(); - while (pOuter) { - CFX_RectF rtTemp; - pNative->GetWidgetRect(rtTemp); - rect.left += rtTemp.left; - rect.top += rtTemp.top; - pNative = pOuter; - pOuter = pOuter->GetOuter(); - } - } else if (!IsAbleNative(pWidget)) { - pNative = GetWidget(pWidget, FWL_WGTRELATION_SystemForm); - if (!pNative) - return FWL_ERR_Indefinite; - pWidget->TransformTo(pNative, rect.left, rect.top); - } - AddRedrawCounts(pNative); - return m_pAdapter->RepaintWidget(pNative, &rect); -} -void CFWL_WidgetMgr::AddWidget(IFWL_Widget* pWidget) { - CFWL_WidgetMgrItem* pParentItem = GetWidgetMgrItem(NULL); - CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget); - if (!pItem) { - pItem = new CFWL_WidgetMgrItem; - pItem->pWidget = pWidget; - m_mapWidgetItem.SetAt(pWidget, pItem); - } - if (pItem->pParent && pItem->pParent != pParentItem) { - if (pItem->pPrevious) { - pItem->pPrevious->pNext = pItem->pNext; - } - if (pItem->pNext) { - pItem->pNext->pPrevious = pItem->pPrevious; - } - if (pItem->pParent->pChild == pItem) { - pItem->pParent->pChild = pItem->pNext; - } - } - pItem->pParent = pParentItem; - SetWidgetIndex(pWidget, -1); -} -void CFWL_WidgetMgr::InsertWidget(IFWL_Widget* pParent, - IFWL_Widget* pChild, - int32_t nIndex) { - CFWL_WidgetMgrItem* pParentItem = GetWidgetMgrItem(pParent); - if (!pParentItem) { - pParentItem = new CFWL_WidgetMgrItem; - pParentItem->pWidget = pParent; - m_mapWidgetItem.SetAt(pParent, pParentItem); - CFWL_WidgetMgrItem* pRoot = GetWidgetMgrItem(NULL); - pParentItem->pParent = pRoot; - SetWidgetIndex(pParent, -1); - } - CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pChild); - if (!pItem) { - pItem = new CFWL_WidgetMgrItem; - pItem->pWidget = pChild; - m_mapWidgetItem.SetAt(pChild, pItem); - } - if (pItem->pParent && pItem->pParent != pParentItem) { - if (pItem->pPrevious) { - pItem->pPrevious->pNext = pItem->pNext; - } - if (pItem->pNext) { - pItem->pNext->pPrevious = pItem->pPrevious; - } - if (pItem->pParent->pChild == pItem) { - pItem->pParent->pChild = pItem->pNext; - } - } - pItem->pParent = pParentItem; - SetWidgetIndex(pChild, nIndex); -} -void CFWL_WidgetMgr::RemoveWidget(IFWL_Widget* pWidget) { - CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget); - if (!pItem) { - return; - } - if (pItem->pPrevious) { - pItem->pPrevious->pNext = pItem->pNext; - } - if (pItem->pNext) { - pItem->pNext->pPrevious = pItem->pPrevious; - } - if (pItem->pParent && pItem->pParent->pChild == pItem) { - pItem->pParent->pChild = pItem->pNext; - } - CFWL_WidgetMgrItem* pChild = pItem->pChild; - while (pChild) { - CFWL_WidgetMgrItem* pNext = pChild->pNext; - RemoveWidget(pChild->pWidget); - pChild = pNext; - } - m_mapWidgetItem.RemoveKey(pWidget); - delete pItem; -} -void CFWL_WidgetMgr::SetOwner(IFWL_Widget* pOwner, IFWL_Widget* pOwned) { - CFWL_WidgetMgrItem* pParentItem = GetWidgetMgrItem(pOwner); - if (!pParentItem) { - pParentItem = new CFWL_WidgetMgrItem; - pParentItem->pWidget = pOwner; - m_mapWidgetItem.SetAt(pOwner, pParentItem); - CFWL_WidgetMgrItem* pRoot = GetWidgetMgrItem(NULL); - pParentItem->pParent = pRoot; - SetWidgetIndex(pOwner, -1); - } - CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pOwned); - if (!pItem) { - pItem = new CFWL_WidgetMgrItem; - pItem->pWidget = pOwned; - m_mapWidgetItem.SetAt(pOwned, pItem); - } - pItem->pOwner = pParentItem; -} -void CFWL_WidgetMgr::SetParent(IFWL_Widget* pParent, IFWL_Widget* pChild) { - CFWL_WidgetMgrItem* pParentItem = GetWidgetMgrItem(pParent); - CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pChild); - if (!pItem) - return; - if (pItem->pParent && pItem->pParent != pParentItem) { - if (pItem->pPrevious) { - pItem->pPrevious->pNext = pItem->pNext; - } - if (pItem->pNext) { - pItem->pNext->pPrevious = pItem->pPrevious; - } - if (pItem->pParent->pChild == pItem) { - pItem->pParent->pChild = pItem->pNext; - } - pItem->pNext = NULL; - pItem->pPrevious = NULL; - } - pItem->pParent = pParentItem; - SetWidgetIndex(pChild, -1); - if (!m_pAdapter) - return; - m_pAdapter->SetParentWidget(pChild, pParent); -} -FX_BOOL CFWL_WidgetMgr::IsChild(IFWL_Widget* pChild, IFWL_Widget* pParent) { - IFWL_Widget* pTemp = pChild; - do { - if (pTemp == pParent) { - return TRUE; - } - pTemp = GetWidget(pTemp, FWL_WGTRELATION_Parent); - } while (pTemp); - return FALSE; -} -FWL_ERR CFWL_WidgetMgr::CreateWidget_Native(IFWL_Widget* pWidget) { - if (!IsAbleNative(pWidget)) { - return FWL_ERR_Succeeded; - } - return m_pAdapter->CreateWidget(pWidget, pWidget->GetOwner()); -} -FWL_ERR CFWL_WidgetMgr::DestroyWidget_Native(IFWL_Widget* pWidget) { - if (!IsAbleNative(pWidget)) { - return FWL_ERR_Succeeded; - } - return m_pAdapter->DestroyWidget(pWidget); -} -FWL_ERR CFWL_WidgetMgr::GetWidgetRect_Native(IFWL_Widget* pWidget, - CFX_RectF& rect) { - if (!IsAbleNative(pWidget)) { - return FWL_ERR_Succeeded; - } - return m_pAdapter->GetWidgetRect(pWidget, rect); -} -FWL_ERR CFWL_WidgetMgr::SetWidgetRect_Native(IFWL_Widget* pWidget, - const CFX_RectF& rect) { - if (FWL_UseOffscreen(pWidget)) { - CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget); - pItem->iRedrawCounter++; - if (pItem->pOffscreen) { - CFX_RenderDevice* pDevice = pItem->pOffscreen->GetRenderDevice(); - if (pDevice && pDevice->GetBitmap()) { - CFX_DIBitmap* pBitmap = pDevice->GetBitmap(); - if (pBitmap->GetWidth() - rect.width > 1 || - pBitmap->GetHeight() - rect.height > 1) { - delete pItem->pOffscreen; - pItem->pOffscreen = NULL; - } - } - } -#if (_FX_OS_ == _FX_WIN32_DESKTOP_) || (_FX_OS_ == _FX_WIN64_) - pItem->bOutsideChanged = !m_rtScreen.Contains(rect); -#endif - } - return m_pAdapter->SetWidgetRect(pWidget, rect); -} -FWL_ERR CFWL_WidgetMgr::SetWidgetPosition_Native(IFWL_Widget* pWidget, - FX_FLOAT fx, - FX_FLOAT fy) { - return m_pAdapter->SetWidgetPosition(pWidget, fx, fy); -} -FWL_ERR CFWL_WidgetMgr::SetWidgetIcon_Native(IFWL_Widget* pWidget, - const CFX_DIBitmap* pIcon, - FX_BOOL bBig) { - return m_pAdapter->SetWidgetIcon(pWidget, pIcon, bBig); -} -FWL_ERR CFWL_WidgetMgr::SetWidgetCaption_Native( - IFWL_Widget* pWidget, - const CFX_WideStringC& wsCaption) { - return m_pAdapter->SetWidgetCaption(pWidget, wsCaption); -} -FWL_ERR CFWL_WidgetMgr::SetBorderRegion_Native(IFWL_Widget* pWidget, - CFX_Path* pPath) { - return m_pAdapter->SetBorderRegion(pWidget, pPath); -} -FWL_ERR CFWL_WidgetMgr::ShowWidget_Native(IFWL_Widget* pWidget) { - return m_pAdapter->ShowWidget(pWidget); -} -FWL_ERR CFWL_WidgetMgr::HideWidget_Native(IFWL_Widget* pWidget) { - return m_pAdapter->HideWidget(pWidget); -} -FWL_ERR CFWL_WidgetMgr::SetNormal_Native(IFWL_Widget* pWidget) { - return m_pAdapter->SetNormal(pWidget); -} -FWL_ERR CFWL_WidgetMgr::SetMaximize_Native(IFWL_Widget* pWidget) { - return m_pAdapter->SetMaximize(pWidget); -} -FWL_ERR CFWL_WidgetMgr::SetMinimize_Native(IFWL_Widget* pWidget) { - return m_pAdapter->SetMinimize(pWidget); -} -FX_BOOL CFWL_WidgetMgr::CheckMessage_Native() { - return m_pAdapter->CheckMessage(); -} -FWL_ERR CFWL_WidgetMgr::DispatchMessage_Native() { - return m_pAdapter->DispatchMessage(); -} -FX_BOOL CFWL_WidgetMgr::IsIdleMessage_Native() { - return m_pAdapter->IsIdleMessage(); -} -FWL_ERR CFWL_WidgetMgr::Exit_Native(int32_t iExitCode) { - return m_pAdapter->Exit(iExitCode); -} -FWL_ERR CFWL_WidgetMgr::CreateWidgetWithNativeId_Native(IFWL_Widget* pWidget, - void* vp) { - return m_pAdapter->CreateWidgetWithNativeId(pWidget, vp); -} -IFWL_Widget* CFWL_WidgetMgr::GetWidgetAtPoint(IFWL_Widget* parent, - FX_FLOAT x, - FX_FLOAT y) { - if (!parent) - return NULL; - FX_FLOAT x1; - FX_FLOAT y1; - IFWL_Widget* child = GetWidget(parent, FWL_WGTRELATION_LastChild); - while (child) { - if ((child->GetStates() & FWL_WGTSTATE_Invisible) == 0) { - x1 = x; - y1 = y; - CFX_Matrix matrixOnParent; - child->GetMatrix(matrixOnParent); - CFX_Matrix m; - m.SetIdentity(); - m.SetReverse(matrixOnParent); - m.TransformPoint(x1, y1); - CFX_RectF bounds; - child->GetWidgetRect(bounds); - if (bounds.Contains(x1, y1)) { - x1 -= bounds.left; - y1 -= bounds.top; - return GetWidgetAtPoint(child, x1, y1); - } - } - child = GetWidget(child, FWL_WGTRELATION_PriorSibling); - } - return parent; -} -void CFWL_WidgetMgr::NotifySizeChanged(IFWL_Widget* pForm, - FX_FLOAT fx, - FX_FLOAT fy) { - if (!FWL_UseOffscreen(pForm)) { - return; - } - CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pForm); - if (pItem->pOffscreen) { - delete pItem->pOffscreen; - pItem->pOffscreen = NULL; - } -} -IFWL_Widget* CFWL_WidgetMgr::nextTab(IFWL_Widget* parent, - IFWL_Widget* focus, - FX_BOOL& bFind) { - IFWL_Widget* child = - FWL_GetWidgetMgr()->GetWidget(parent, FWL_WGTRELATION_FirstChild); - while (child) { - if (focus == child) { - bFind = TRUE; - } - if ((child->GetStyles() & FWL_WGTSTYLE_TabStop) && - (!focus || (focus != child && bFind))) { - return child; - } - IFWL_Widget* bRet = nextTab(child, focus, bFind); - if (bRet) { - return bRet; - } - child = FWL_GetWidgetMgr()->GetWidget(child, FWL_WGTRELATION_NextSibling); - } - return NULL; -} -int32_t CFWL_WidgetMgr::CountRadioButtonGroup(IFWL_Widget* pFirst) { - int32_t iRet = 0; - IFWL_Widget* pChild = pFirst; - while (pChild) { - if ((pChild->GetStyles() & FWL_WGTSTYLE_Group) && - pChild->GetClassID() == 3811304691) { - iRet++; - } - pChild = GetWidget(pChild, FWL_WGTRELATION_NextSibling); - } - return iRet; -} -IFWL_Widget* CFWL_WidgetMgr::GetSiblingRadioButton(IFWL_Widget* pWidget, - FX_BOOL bNext) { - while ((pWidget = GetWidget(pWidget, bNext ? FWL_WGTRELATION_NextSibling - : FWL_WGTRELATION_PriorSibling)) != - NULL) { - if (pWidget->GetClassID() == 3811304691) { - return pWidget; - } - } - return NULL; -} -IFWL_Widget* CFWL_WidgetMgr::GetRadioButtonGroupHeader( - IFWL_Widget* pRadioButton) { - if (pRadioButton->GetStyles() & FWL_WGTSTYLE_Group) { - return pRadioButton; - } - IFWL_Widget* pNext = pRadioButton; - while ((pNext = GetSiblingRadioButton(pNext, FALSE)) != NULL) { - if (pNext->GetStyles() & FWL_WGTSTYLE_Group) { - return pNext; - } - } - pNext = GetWidget(pRadioButton, FWL_WGTRELATION_LastSibling); - if ((pNext->GetStyles() & FWL_WGTSTYLE_Group) && - pNext->GetClassID() == 3811304691) { - return pNext; - } - while ((pNext = GetSiblingRadioButton(pNext, FALSE)) && pNext && - pNext != pRadioButton) { - if (pNext->GetStyles() & FWL_WGTSTYLE_Group) { - return pNext; - } - } - pNext = GetWidget(pRadioButton, FWL_WGTRELATION_FirstSibling); - if (pNext && (pNext->GetStyles() == FWL_WGTSTYLE_Group) && - pNext->GetClassID() == 3811304691) { - return pNext; - } - return GetSiblingRadioButton(pNext, TRUE); -} -void CFWL_WidgetMgr::GetSameGroupRadioButton(IFWL_Widget* pRadioButton, - CFX_PtrArray& group) { - IFWL_Widget* pFirst = GetWidget(pRadioButton, FWL_WGTRELATION_FirstSibling); - if (!pFirst) { - pFirst = pRadioButton; - } - int32_t iGroup = CountRadioButtonGroup(pFirst); - if (iGroup < 2) { - if (pFirst->GetClassID() == 3811304691) { - group.Add(pFirst); - } - IFWL_Widget* pNext = pFirst; - while ((pNext = GetSiblingRadioButton(pNext, TRUE)) != NULL) { - group.Add(pNext); - } - return; - } - IFWL_Widget* pNext = GetRadioButtonGroupHeader(pRadioButton); - do { - group.Add(pNext); - pNext = GetSiblingRadioButton(pNext, TRUE); - if (!pNext) { - if (pFirst->GetClassID() == 3811304691) { - pNext = pFirst; - } else { - pNext = GetSiblingRadioButton(pFirst, TRUE); - } - } - } while (pNext && ((pNext->GetStyles() & FWL_WGTSTYLE_Group) == 0)); -} -IFWL_Widget* CFWL_WidgetMgr::GetDefaultButton(IFWL_Widget* pParent) { - if ((pParent->GetClassID() == 3521614244) && - (pParent->GetStates() & (1 << (FWL_WGTSTATE_MAX + 2)))) { - return pParent; - } - IFWL_Widget* child = - FWL_GetWidgetMgr()->GetWidget(pParent, FWL_WGTRELATION_FirstChild); - while (child) { - if ((child->GetClassID() == 3521614244) && - (child->GetStates() & (1 << (FWL_WGTSTATE_MAX + 2)))) { - return child; - } - IFWL_Widget* find = GetDefaultButton(child); - if (find) { - return find; - } - child = FWL_GetWidgetMgr()->GetWidget(child, FWL_WGTRELATION_NextSibling); - } - return NULL; -} -void CFWL_WidgetMgr::AddRedrawCounts(IFWL_Widget* pWidget) { - CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget); - (pItem->iRedrawCounter)++; -} -void CFWL_WidgetMgr::ResetRedrawCounts(IFWL_Widget* pWidget) { - CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget); - pItem->iRedrawCounter = 0; -} -CFWL_WidgetMgrItem* CFWL_WidgetMgr::GetWidgetMgrItem(IFWL_Widget* pWidget) { - return static_cast(m_mapWidgetItem.GetValueAt(pWidget)); -} -int32_t CFWL_WidgetMgr::TravelWidgetMgr(CFWL_WidgetMgrItem* pParent, - int32_t* pIndex, - CFWL_WidgetMgrItem* pItem, - IFWL_Widget** pWidget) { - if (!pParent) { - return 0; - } - int32_t iCount = 0; - CFWL_WidgetMgrItem* pChild = pParent->pChild; - while (pChild) { - iCount++; - if (pIndex) { - if (*pIndex == 0) { - *pWidget = pChild->pWidget; - return iCount; - } - pIndex--; - } - if (pItem && pItem == pChild) { - return iCount - 1; - } - pChild = pChild->pNext; - } - if (pIndex) { - return 0; - } else if (pItem) { - return -1; - } - return iCount - 1; -} -FX_BOOL CFWL_WidgetMgr::IsAbleNative(IFWL_Widget* pWidget) { - if (!pWidget) - return FALSE; - if (!pWidget->IsInstance(FX_WSTRC(FWL_CLASS_Form))) { - return FALSE; - } - FX_DWORD dwStyles = pWidget->GetStyles(); - return ((dwStyles & FWL_WGTSTYLE_WindowTypeMask) == - FWL_WGTSTYLE_OverLapper) || - (dwStyles & FWL_WGTSTYLE_Popup); -} -FX_BOOL CFWL_WidgetMgr::IsThreadEnabled() { - return !(m_dwCapability & FWL_WGTMGR_DisableThread); -} -FX_BOOL CFWL_WidgetMgr::IsFormDisabled() { - return m_dwCapability & FWL_WGTMGR_DisableForm; -} -FX_BOOL CFWL_WidgetMgr::GetAdapterPopupPos(IFWL_Widget* pWidget, - FX_FLOAT fMinHeight, - FX_FLOAT fMaxHeight, - const CFX_RectF& rtAnchor, - CFX_RectF& rtPopup) { - IFWL_AdapterWidgetMgr* pSDApapter = GetAdapterWidgetMgr(); - return pSDApapter->GetPopupPos(pWidget, fMinHeight, fMaxHeight, rtAnchor, - rtPopup); -} -CFWL_WidgetMgrDelegate::CFWL_WidgetMgrDelegate(CFWL_WidgetMgr* pWidgetMgr) - : m_pWidgetMgr(pWidgetMgr) {} -FWL_ERR CFWL_WidgetMgrDelegate::OnSetCapability(FX_DWORD dwCapability) { - m_pWidgetMgr->m_dwCapability = dwCapability; - return FWL_ERR_Succeeded; -} -int32_t CFWL_WidgetMgrDelegate::OnProcessMessageToForm(CFWL_Message* pMessage) { - if (!pMessage) - return 0; - if (!pMessage->m_pDstTarget) - return 0; - IFWL_Widget* pDstWidget = pMessage->m_pDstTarget; - IFWL_NoteThread* pNoteThread = pDstWidget->GetOwnerThread(); - if (!pNoteThread) - return 0; - CFWL_NoteDriver* pNoteDriver = - static_cast(pNoteThread->GetNoteDriver()); - if (!pNoteDriver) - return 0; - if (m_pWidgetMgr->IsThreadEnabled()) { - pMessage = static_cast(pMessage->Clone()); - } - if (m_pWidgetMgr->IsFormDisabled()) { - pNoteDriver->ProcessMessage(pMessage); - } else { - pNoteDriver->QueueMessage(pMessage); - } -#if (_FX_OS_ == _FX_MACOSX_) - CFWL_NoteLoop* pTopLoop = pNoteDriver->GetTopLoop(); - if (pTopLoop) { - pNoteDriver->UnqueueMessage(pTopLoop); - } -#endif - if (m_pWidgetMgr->IsThreadEnabled()) { - pMessage->Release(); - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_WidgetMgrDelegate::OnDrawWidget(IFWL_Widget* pWidget, - CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - if (!pWidget) - return FWL_ERR_Indefinite; - if (!pGraphics) - return FWL_ERR_Indefinite; - CFX_Graphics* pTemp = DrawWidgetBefore(pWidget, pGraphics, pMatrix); - CFX_RectF clipCopy; - pWidget->GetWidgetRect(clipCopy); - clipCopy.left = clipCopy.top = 0; - if (bUseOffscreenDirect(pWidget)) { - DrawWidgetAfter(pWidget, pGraphics, clipCopy, pMatrix); - return FWL_ERR_Succeeded; - } - CFX_RectF clipBounds; -#if (_FX_OS_ == _FX_WIN32_DESKTOP_) || (_FX_OS_ == _FX_WIN64_) || \ - (_FX_OS_ == _FX_LINUX_DESKTOP_) || (_FX_OS_ == _FX_ANDROID_) - IFWL_WidgetDelegate* pDelegate = pWidget->SetDelegate(NULL); - pDelegate->OnDrawWidget(pTemp, pMatrix); - pGraphics->GetClipRect(clipBounds); - clipCopy = clipBounds; -#elif(_FX_OS_ == _FX_MACOSX_) - if (m_pWidgetMgr->IsFormDisabled()) { - IFWL_WidgetDelegate* pDelegate = pWidget->SetDelegate(NULL); - pDelegate->OnDrawWidget(pTemp, pMatrix); - pGraphics->GetClipRect(clipBounds); - clipCopy = clipBounds; - } else { - clipBounds.Set(pMatrix->a, pMatrix->b, pMatrix->c, pMatrix->d); - const_cast(pMatrix)->SetIdentity(); // FIXME: const cast. -#ifdef FWL_UseMacSystemBorder -#else -#endif - { - IFWL_WidgetDelegate* pDelegate = pWidget->SetDelegate(NULL); - pDelegate->OnDrawWidget(pTemp, pMatrix); - } - } -#endif - if (!m_pWidgetMgr->IsFormDisabled()) { - CFX_RectF rtClient; - pWidget->GetClientRect(rtClient); - clipBounds.Intersect(rtClient); - } - if (!clipBounds.IsEmpty()) { - DrawChild(pWidget, clipBounds, pTemp, pMatrix); - } - DrawWidgetAfter(pWidget, pGraphics, clipCopy, pMatrix); - m_pWidgetMgr->ResetRedrawCounts(pWidget); - return FWL_ERR_Succeeded; -} -void CFWL_WidgetMgrDelegate::DrawChild(IFWL_Widget* parent, - const CFX_RectF& rtClip, - CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - if (!parent) - return; - FX_BOOL bFormDisable = m_pWidgetMgr->IsFormDisabled(); - IFWL_Widget* pNextChild = - m_pWidgetMgr->GetWidget(parent, FWL_WGTRELATION_FirstChild); - while (pNextChild) { - IFWL_Widget* child = pNextChild; - pNextChild = m_pWidgetMgr->GetWidget(child, FWL_WGTRELATION_NextSibling); - if (child->GetStates() & FWL_WGTSTATE_Invisible) { - continue; - } - CFX_RectF rtWidget; - child->GetWidgetRect(rtWidget); - if (rtWidget.IsEmpty()) { - continue; - } - CFX_Matrix widgetMatrix; - CFX_RectF clipBounds(rtWidget); - if (!bFormDisable) { - child->GetMatrix(widgetMatrix, TRUE); - } - if (pMatrix) { - widgetMatrix.Concat(*pMatrix); - } - if (!bFormDisable) { - widgetMatrix.TransformPoint(clipBounds.left, clipBounds.top); - clipBounds.Intersect(rtClip); - if (clipBounds.IsEmpty()) { - continue; - } - pGraphics->SaveGraphState(); - pGraphics->SetClipRect(clipBounds); - } - widgetMatrix.Translate(rtWidget.left, rtWidget.top, TRUE); - IFWL_WidgetDelegate* pDelegate = child->SetDelegate(NULL); - if (pDelegate) { - if (m_pWidgetMgr->IsFormDisabled() || - IsNeedRepaint(child, &widgetMatrix, rtClip)) { - pDelegate->OnDrawWidget(pGraphics, &widgetMatrix); - } - } - if (!bFormDisable) { - pGraphics->RestoreGraphState(); - } - DrawChild(child, clipBounds, pGraphics, - bFormDisable ? &widgetMatrix : pMatrix); - child = m_pWidgetMgr->GetWidget(child, FWL_WGTRELATION_NextSibling); - } -} -CFX_Graphics* CFWL_WidgetMgrDelegate::DrawWidgetBefore( - IFWL_Widget* pWidget, - CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - if (!FWL_UseOffscreen(pWidget)) { - return pGraphics; - } - CFWL_WidgetMgrItem* pItem = m_pWidgetMgr->GetWidgetMgrItem(pWidget); - if (!pItem->pOffscreen) { - pItem->pOffscreen = new CFX_Graphics; - CFX_RectF rect; - pWidget->GetWidgetRect(rect); - pItem->pOffscreen->Create((int32_t)rect.width, (int32_t)rect.height, - FXDIB_Argb); - } - CFX_RectF rect; - pGraphics->GetClipRect(rect); - pItem->pOffscreen->SetClipRect(rect); - return pItem->pOffscreen; -} -void CFWL_WidgetMgrDelegate::DrawWidgetAfter(IFWL_Widget* pWidget, - CFX_Graphics* pGraphics, - CFX_RectF& rtClip, - const CFX_Matrix* pMatrix) { - if (FWL_UseOffscreen(pWidget)) { - CFWL_WidgetMgrItem* pItem = m_pWidgetMgr->GetWidgetMgrItem(pWidget); - pGraphics->Transfer(pItem->pOffscreen, rtClip.left, rtClip.top, rtClip, - pMatrix); -#ifdef _WIN32 - pItem->pOffscreen->ClearClip(); -#endif - } - CFWL_WidgetMgrItem* pItem = m_pWidgetMgr->GetWidgetMgrItem(pWidget); - pItem->iRedrawCounter = 0; -} - -#define FWL_NEEDREPAINTHIT_Point 12 -#define FWL_NEEDREPAINTHIT_Piece 3 -struct FWL_NEEDREPAINTHITDATA { - CFX_PointF hitPoint; - FX_BOOL bNotNeedRepaint; - FX_BOOL bNotContainByDirty; -}; - -FX_BOOL CFWL_WidgetMgrDelegate::IsNeedRepaint(IFWL_Widget* pWidget, - CFX_Matrix* pMatrix, - const CFX_RectF& rtDirty) { - CFWL_WidgetMgrItem* pItem = m_pWidgetMgr->GetWidgetMgrItem(pWidget); - if (pItem && pItem->iRedrawCounter > 0) { - pItem->iRedrawCounter = 0; - return TRUE; - } - CFX_RectF rtWidget; - pWidget->GetWidgetRect(rtWidget); - rtWidget.left = rtWidget.top = 0; - pMatrix->TransformRect(rtWidget); - if (!rtWidget.IntersectWith(rtDirty)) { - return FALSE; - } - IFWL_Widget* pChild = - FWL_GetWidgetMgr()->GetWidget(pWidget, FWL_WGTRELATION_FirstChild); - if (!pChild) { - return TRUE; - } - if (pChild->GetClassID() == 3150298670) { - CFX_RectF rtTemp; - pChild->GetWidgetRect(rtTemp); - if (rtTemp.width >= rtWidget.width && rtTemp.height >= rtWidget.height) { - pChild = - FWL_GetWidgetMgr()->GetWidget(pChild, FWL_WGTRELATION_FirstChild); - if (!pChild) { - return TRUE; - } - } - } - CFX_RectF rtChilds; - rtChilds.Empty(); - FX_BOOL bChildIntersectWithDirty = FALSE; - FX_BOOL bOrginPtIntersectWidthChild = FALSE; - FX_BOOL bOrginPtIntersectWidthDirty = - rtDirty.Contains(rtWidget.left, rtWidget.top); - static FWL_NEEDREPAINTHITDATA hitPoint[FWL_NEEDREPAINTHIT_Point]; - int32_t iSize = sizeof(FWL_NEEDREPAINTHITDATA); - FXSYS_memset(hitPoint, 0, iSize); - FX_FLOAT fxPiece = rtWidget.width / FWL_NEEDREPAINTHIT_Piece; - FX_FLOAT fyPiece = rtWidget.height / FWL_NEEDREPAINTHIT_Piece; - hitPoint[2].hitPoint.x = hitPoint[6].hitPoint.x = rtWidget.left; - hitPoint[0].hitPoint.x = hitPoint[3].hitPoint.x = hitPoint[7].hitPoint.x = - hitPoint[10].hitPoint.x = fxPiece + rtWidget.left; - hitPoint[1].hitPoint.x = hitPoint[4].hitPoint.x = hitPoint[8].hitPoint.x = - hitPoint[11].hitPoint.x = fxPiece * 2 + rtWidget.left; - hitPoint[5].hitPoint.x = hitPoint[9].hitPoint.x = - rtWidget.width + rtWidget.left; - hitPoint[0].hitPoint.y = hitPoint[1].hitPoint.y = rtWidget.top; - hitPoint[2].hitPoint.y = hitPoint[3].hitPoint.y = hitPoint[4].hitPoint.y = - hitPoint[5].hitPoint.y = fyPiece + rtWidget.top; - hitPoint[6].hitPoint.y = hitPoint[7].hitPoint.y = hitPoint[8].hitPoint.y = - hitPoint[9].hitPoint.y = fyPiece * 2 + rtWidget.top; - hitPoint[10].hitPoint.y = hitPoint[11].hitPoint.y = - rtWidget.height + rtWidget.top; - do { - CFX_RectF rect; - pChild->GetWidgetRect(rect); - CFX_RectF r = rect; - r.left += rtWidget.left; - r.top += rtWidget.top; - if (r.IsEmpty()) { - continue; - } - if (r.Contains(rtDirty)) { - return FALSE; - } - if (!bChildIntersectWithDirty && r.IntersectWith(rtDirty)) { - bChildIntersectWithDirty = TRUE; - } - if (bOrginPtIntersectWidthDirty && !bOrginPtIntersectWidthChild) { - bOrginPtIntersectWidthChild = rect.Contains(0, 0); - } - if (rtChilds.IsEmpty()) { - rtChilds = rect; - } else if (!(pChild->GetStates() & FWL_WGTSTATE_Invisible)) { - rtChilds.Union(rect); - } - for (int32_t i = 0; i < FWL_NEEDREPAINTHIT_Point; i++) { - if (hitPoint[i].bNotContainByDirty || hitPoint[i].bNotNeedRepaint) { - continue; - } - if (!rtDirty.Contains(hitPoint[i].hitPoint)) { - hitPoint[i].bNotContainByDirty = TRUE; - continue; - } - if (r.Contains(hitPoint[i].hitPoint)) { - hitPoint[i].bNotNeedRepaint = TRUE; - } - } - } while ((pChild = FWL_GetWidgetMgr()->GetWidget( - pChild, FWL_WGTRELATION_NextSibling)) != NULL); - if (!bChildIntersectWithDirty) { - return TRUE; - } - if (bOrginPtIntersectWidthDirty && !bOrginPtIntersectWidthChild) { - return TRUE; - } - if (rtChilds.IsEmpty()) { - return TRUE; - } - int32_t repaintPoint = FWL_NEEDREPAINTHIT_Point; - for (int32_t i = 0; i < FWL_NEEDREPAINTHIT_Point; i++) { - if (hitPoint[i].bNotNeedRepaint) { - repaintPoint--; - } - } - if (repaintPoint > 0) { - return TRUE; - } - pMatrix->TransformRect(rtChilds); - if (rtChilds.Contains(rtDirty) || rtChilds.Contains(rtWidget)) { - return FALSE; - } - return TRUE; -} -FX_BOOL CFWL_WidgetMgrDelegate::bUseOffscreenDirect(IFWL_Widget* pWidget) { - CFWL_WidgetMgrItem* pItem = m_pWidgetMgr->GetWidgetMgrItem(pWidget); - if (!FWL_UseOffscreen(pWidget) || !(pItem->pOffscreen)) { - return FALSE; - } -#if (_FX_OS_ == _FX_WIN32_DESKTOP_) || (_FX_OS_ == _FX_WIN64_) - if (pItem->bOutsideChanged) { - CFX_RectF r; - pWidget->GetWidgetRect(r); - CFX_RectF temp(m_pWidgetMgr->m_rtScreen); - temp.Deflate(50, 50); - if (!temp.Contains(r)) { - return FALSE; - } - pItem->bOutsideChanged = FALSE; - } -#endif - return pItem->iRedrawCounter == 0; -} -static void FWL_WriteBMP(CFX_DIBitmap* pBitmap, const FX_CHAR* filename) { - FILE* file = fopen(filename, "wb"); - if (file == NULL) { - return; - } - int size = 14 + 40 + pBitmap->GetPitch() * pBitmap->GetHeight(); - unsigned char buffer[40]; - buffer[0] = 'B'; - buffer[1] = 'M'; - buffer[2] = (unsigned char)size; - buffer[3] = (unsigned char)(size >> 8); - buffer[4] = (unsigned char)(size >> 16); - buffer[5] = (unsigned char)(size >> 24); - buffer[6] = buffer[7] = buffer[8] = buffer[9] = 0; - buffer[10] = 54; - buffer[11] = buffer[12] = buffer[13] = 0; - fwrite(buffer, 14, 1, file); - memset(buffer, 0, 40); - buffer[0] = 40; - buffer[4] = (unsigned char)pBitmap->GetWidth(); - buffer[5] = (unsigned char)(pBitmap->GetWidth() >> 8); - buffer[6] = (unsigned char)(pBitmap->GetWidth() >> 16); - buffer[7] = (unsigned char)(pBitmap->GetWidth() >> 24); - buffer[8] = (unsigned char)(-pBitmap->GetHeight()); - buffer[9] = (unsigned char)((-pBitmap->GetHeight()) >> 8); - buffer[10] = (unsigned char)((-pBitmap->GetHeight()) >> 16); - buffer[11] = (unsigned char)((-pBitmap->GetHeight()) >> 24); - buffer[12] = 1; - buffer[14] = pBitmap->GetBPP(); - fwrite(buffer, 40, 1, file); - for (int row = 0; row < pBitmap->GetHeight(); row++) { - uint8_t* scan_line = pBitmap->GetBuffer() + row * pBitmap->GetPitch(); - fwrite(scan_line, pBitmap->GetPitch(), 1, file); - } - fclose(file); -} -FWL_ERR FWL_WidgetMgrSnapshot(IFWL_Widget* pWidget, - const CFX_WideString* saveFile, - const CFX_Matrix* pMatrix) { - CFX_RectF r; - pWidget->GetWidgetRect(r); - CFX_Graphics gs; - gs.Create((int32_t)r.width, (int32_t)r.height, FXDIB_Argb); - CFWL_WidgetMgr* widgetMgr = static_cast(FWL_GetWidgetMgr()); - CFWL_WidgetMgrDelegate* delegate = widgetMgr->GetDelegate(); - delegate->OnDrawWidget(pWidget, &gs, pMatrix); - CFX_DIBitmap* dib = gs.GetRenderDevice()->GetBitmap(); - FWL_WriteBMP(dib, saveFile->UTF8Encode()); - return FWL_ERR_Succeeded; -} -FX_BOOL FWL_WidgetIsChild(IFWL_Widget* parent, IFWL_Widget* find) { - if (!find) { - return FALSE; - } - IFWL_Widget* child = - FWL_GetWidgetMgr()->GetWidget(parent, FWL_WGTRELATION_FirstChild); - while (child) { - if (child == find) { - return TRUE; - } - if (FWL_WidgetIsChild(child, find)) { - return TRUE; - } - child = FWL_GetWidgetMgr()->GetWidget(child, FWL_WGTRELATION_NextSibling); - } - return FALSE; -} diff --git a/xfa/src/fwl/core/fwl_widgetmgrimp.h b/xfa/src/fwl/core/fwl_widgetmgrimp.h deleted file mode 100644 index f3dfb36017..0000000000 --- a/xfa/src/fwl/core/fwl_widgetmgrimp.h +++ /dev/null @@ -1,170 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FWL_CORE_FWL_WIDGETMGRIMP_H_ -#define XFA_SRC_FWL_CORE_FWL_WIDGETMGRIMP_H_ - -#include "xfa/include/fwl/core/fwl_widgetmgr.h" - -class IFWL_Widget; -class IFWL_AdapterWidgetMgr; -class CFWL_WidgetMgrDelegate; -class IFWL_AdapterNative; - -class CFWL_WidgetMgrItem { - public: - CFWL_WidgetMgrItem() - : pParent(NULL), - pOwner(NULL), - pChild(NULL), - pPrevious(NULL), - pNext(NULL), - pWidget(NULL), - pOffscreen(NULL), - iRedrawCounter(0) -#if (_FX_OS_ == _FX_WIN32_DESKTOP_) || (_FX_OS_ == _FX_WIN64_) - , - bOutsideChanged(FALSE) -#endif - { - } - ~CFWL_WidgetMgrItem() { - if (pOffscreen) { - delete pOffscreen; - pOffscreen = NULL; - } - } - CFWL_WidgetMgrItem* pParent; - CFWL_WidgetMgrItem* pOwner; - CFWL_WidgetMgrItem* pChild; - CFWL_WidgetMgrItem* pPrevious; - CFWL_WidgetMgrItem* pNext; - IFWL_Widget* pWidget; - CFX_Graphics* pOffscreen; - int32_t iRedrawCounter; -#if (_FX_OS_ == _FX_WIN32_DESKTOP_) || (_FX_OS_ == _FX_WIN64_) - FX_BOOL bOutsideChanged; -#endif -}; - -class CFWL_WidgetMgr : public IFWL_WidgetMgr { - public: - CFWL_WidgetMgr(IFWL_AdapterNative* pAdapterNative); - ~CFWL_WidgetMgr() override; - - // IFWL_WidgetMgr: - int32_t CountWidgets(IFWL_Widget* pParent = NULL) override; - IFWL_Widget* GetWidget(int32_t nIndex, IFWL_Widget* pParent = NULL) override; - IFWL_Widget* GetWidget(IFWL_Widget* pWidget, - FWL_WGTRELATION eRelation) override; - int32_t GetWidgetIndex(IFWL_Widget* pWidget) override; - FX_BOOL SetWidgetIndex(IFWL_Widget* pWidget, int32_t nIndex) override; - FWL_ERR RepaintWidget(IFWL_Widget* pWidget, - const CFX_RectF* pRect = NULL) override; - FX_DWORD GetCapability() override { return m_dwCapability; } - - void AddWidget(IFWL_Widget* pWidget); - void InsertWidget(IFWL_Widget* pParent, - IFWL_Widget* pChild, - int32_t nIndex = -1); - void RemoveWidget(IFWL_Widget* pWidget); - void SetOwner(IFWL_Widget* pOwner, IFWL_Widget* pOwned); - void SetParent(IFWL_Widget* pParent, IFWL_Widget* pChild); - FX_BOOL IsChild(IFWL_Widget* pChild, IFWL_Widget* pParent); - FWL_ERR CreateWidget_Native(IFWL_Widget* pWidget); - FWL_ERR DestroyWidget_Native(IFWL_Widget* pWidget); - FWL_ERR GetWidgetRect_Native(IFWL_Widget* pWidget, CFX_RectF& rect); - FWL_ERR SetWidgetRect_Native(IFWL_Widget* pWidget, const CFX_RectF& rect); - FWL_ERR SetWidgetPosition_Native(IFWL_Widget* pWidget, - FX_FLOAT fx, - FX_FLOAT fy); - FWL_ERR SetWidgetIcon_Native(IFWL_Widget* pWidget, - const CFX_DIBitmap* pIcon, - FX_BOOL bBig); - FWL_ERR SetWidgetCaption_Native(IFWL_Widget* pWidget, - const CFX_WideStringC& wsCaption); - FWL_ERR SetBorderRegion_Native(IFWL_Widget* pWidget, CFX_Path* pPath); - FWL_ERR ShowWidget_Native(IFWL_Widget* pWidget); - FWL_ERR HideWidget_Native(IFWL_Widget* pWidget); - FWL_ERR SetNormal_Native(IFWL_Widget* pWidget); - FWL_ERR SetMaximize_Native(IFWL_Widget* pWidget); - FWL_ERR SetMinimize_Native(IFWL_Widget* pWidget); - FX_BOOL CheckMessage_Native(); - FWL_ERR DispatchMessage_Native(); - FX_BOOL IsIdleMessage_Native(); - FWL_ERR Exit_Native(int32_t iExitCode); - FWL_ERR CreateWidgetWithNativeId_Native(IFWL_Widget* pWidget, void* vp); - IFWL_Widget* GetWidgetAtPoint(IFWL_Widget* pParent, FX_FLOAT fx, FX_FLOAT fy); - void NotifySizeChanged(IFWL_Widget* pForm, FX_FLOAT fx, FX_FLOAT fy); - IFWL_Widget* nextTab(IFWL_Widget* parent, IFWL_Widget* focus, FX_BOOL& bFind); - int32_t CountRadioButtonGroup(IFWL_Widget* pFirst); - IFWL_Widget* GetSiblingRadioButton(IFWL_Widget* pWidget, FX_BOOL bNext); - IFWL_Widget* GetRadioButtonGroupHeader(IFWL_Widget* pRadioButton); - void GetSameGroupRadioButton(IFWL_Widget* pRadioButton, CFX_PtrArray& group); - IFWL_Widget* GetDefaultButton(IFWL_Widget* pParent); - void AddRedrawCounts(IFWL_Widget* pWidget); - void ResetRedrawCounts(IFWL_Widget* pWidget); - IFWL_AdapterWidgetMgr* GetAdapterWidgetMgr() { return m_pAdapter; } - CFWL_WidgetMgrDelegate* GetDelegate() { return m_pDelegate; } - CFWL_WidgetMgrItem* GetWidgetMgrItem(IFWL_Widget* pWidget); - FX_BOOL IsThreadEnabled(); - FX_BOOL IsFormDisabled(); - FX_BOOL GetAdapterPopupPos(IFWL_Widget* pWidget, - FX_FLOAT fMinHeight, - FX_FLOAT fMaxHeight, - const CFX_RectF& rtAnchor, - CFX_RectF& rtPopup); - - protected: - int32_t TravelWidgetMgr(CFWL_WidgetMgrItem* pParent, - int32_t* pIndex, - CFWL_WidgetMgrItem* pItem, - IFWL_Widget** pWidget = NULL); - FX_BOOL IsAbleNative(IFWL_Widget* pWidget); - CFX_MapPtrToPtr m_mapWidgetItem; - IFWL_AdapterWidgetMgr* m_pAdapter; - CFWL_WidgetMgrDelegate* m_pDelegate; - friend class CFWL_WidgetMgrDelegate; - FX_DWORD m_dwCapability; -#if (_FX_OS_ == _FX_WIN32_DESKTOP_) || (_FX_OS_ == _FX_WIN64_) - CFX_RectF m_rtScreen; -#endif -}; - -class CFWL_WidgetMgrDelegate : public IFWL_WidgetMgrDelegate { - public: - CFWL_WidgetMgrDelegate(CFWL_WidgetMgr* pWidgetMgr); - ~CFWL_WidgetMgrDelegate() override {} - - // IFWL_WidgetMgrDelegate: - FWL_ERR OnSetCapability( - FX_DWORD dwCapability = FWL_WGTMGR_DisableThread) override; - int32_t OnProcessMessageToForm(CFWL_Message* pMessage) override; - FWL_ERR OnDrawWidget(IFWL_Widget* pWidget, - CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) override; - - protected: - void DrawChild(IFWL_Widget* pParent, - const CFX_RectF& rtClip, - CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix); - CFX_Graphics* DrawWidgetBefore(IFWL_Widget* pWidget, - CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix); - void DrawWidgetAfter(IFWL_Widget* pWidget, - CFX_Graphics* pGraphics, - CFX_RectF& rtClip, - const CFX_Matrix* pMatrix); - FX_BOOL IsNeedRepaint(IFWL_Widget* pWidget, - CFX_Matrix* pMatrix, - const CFX_RectF& rtDirty); - FX_BOOL bUseOffscreenDirect(IFWL_Widget* pWidget); - - CFWL_WidgetMgr* m_pWidgetMgr; -}; - -#endif // XFA_SRC_FWL_CORE_FWL_WIDGETMGRIMP_H_ diff --git a/xfa/src/fwl/lightwidget/app.cpp b/xfa/src/fwl/lightwidget/app.cpp deleted file mode 100644 index 31a39c17f0..0000000000 --- a/xfa/src/fwl/lightwidget/app.cpp +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/include/fwl/lightwidget/app.h" - -#include "core/include/fxcrt/fx_coordinates.h" -#include "xfa/include/fwl/core/fwl_app.h" -#include "xfa/include/fwl/core/fwl_error.h" -#include "xfa/include/fwl/lightwidget/theme.h" - -CFWL_App::CFWL_App() : m_pIface(IFWL_App::Create(nullptr)), m_pTheme(nullptr) {} -CFWL_App::~CFWL_App() { - if (m_pTheme) { - m_pTheme->Finalize(); - delete m_pTheme; - m_pTheme = NULL; - } - m_pIface->Release(); -} -FWL_ERR CFWL_App::Initialize() { - m_pTheme = new CFWL_Theme; - m_pTheme->Initialize(); - m_pIface->SetThemeProvider(m_pTheme); - return m_pIface->Initialize(); -} -FWL_ERR CFWL_App::Exit(int32_t iExitCode) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return m_pIface->Exit(iExitCode); -} diff --git a/xfa/src/fwl/lightwidget/barcode.cpp b/xfa/src/fwl/lightwidget/barcode.cpp deleted file mode 100644 index 4f05837352..0000000000 --- a/xfa/src/fwl/lightwidget/barcode.cpp +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/include/fwl/lightwidget/barcode.h" - -#include - -CFWL_Barcode* CFWL_Barcode::Create() { - return new CFWL_Barcode; -} -FWL_ERR CFWL_Barcode::Initialize(const CFWL_WidgetProperties* pProperties) { - if (m_pIface) - return FWL_ERR_Indefinite; - if (pProperties) { - *m_pProperties = *pProperties; - } - std::unique_ptr pBarcode(IFWL_Barcode::Create( - m_pProperties->MakeWidgetImpProperties(&m_barcodeData))); - FWL_ERR ret = pBarcode->Initialize(); - if (ret != FWL_ERR_Succeeded) { - return ret; - } - m_pIface = pBarcode.release(); - CFWL_Widget::Initialize(); - return FWL_ERR_Succeeded; -} -CFWL_Barcode::CFWL_Barcode() {} -CFWL_Barcode::~CFWL_Barcode() {} -void CFWL_Barcode::SetType(BC_TYPE type) { - if (!m_pIface) - return; - static_cast(m_pIface)->SetType(type); -} -FX_BOOL CFWL_Barcode::IsProtectedType() { - if (!m_pIface) - return 0; - return static_cast(m_pIface)->IsProtectedType(); -} -FWL_ERR CFWL_Barcode::CFWL_BarcodeDP::GetCaption(IFWL_Widget* pWidget, - CFX_WideString& wsCaption) { - return FWL_ERR_Succeeded; -} diff --git a/xfa/src/fwl/lightwidget/caret.cpp b/xfa/src/fwl/lightwidget/caret.cpp deleted file mode 100644 index bb5fd4cf9e..0000000000 --- a/xfa/src/fwl/lightwidget/caret.cpp +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/include/fwl/lightwidget/caret.h" - -#include - -#include "xfa/include/fwl/basewidget/fwl_caret.h" -#include "xfa/include/fwl/lightwidget/edit.h" -#include "xfa/src/fwl/core/fwl_targetimp.h" - -CFWL_Caret* CFWL_Caret::Create() { - return new CFWL_Caret; -} -FWL_ERR CFWL_Caret::Initialize(const CFWL_WidgetProperties* pProperties) { - if (m_pIface) - return FWL_ERR_Indefinite; - if (pProperties) { - *m_pProperties = *pProperties; - } - std::unique_ptr pCaret(IFWL_Caret::Create( - m_pProperties->MakeWidgetImpProperties(nullptr), nullptr)); - FWL_ERR ret = pCaret->Initialize(); - if (ret != FWL_ERR_Succeeded) { - return ret; - } - m_pIface = pCaret.release(); - CFWL_Widget::Initialize(); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_Caret::ShowCaret(FX_BOOL bFlag) { - return static_cast(m_pIface)->ShowCaret(bFlag); -} -FWL_ERR CFWL_Caret::GetFrequency(FX_DWORD& elapse) { - return static_cast(m_pIface)->GetFrequency(elapse); -} -FWL_ERR CFWL_Caret::SetFrequency(FX_DWORD elapse) { - return static_cast(m_pIface)->SetFrequency(elapse); -} -FWL_ERR CFWL_Caret::SetColor(CFX_Color crFill) { - return static_cast(m_pIface)->SetColor(crFill); -} -CFWL_Caret::CFWL_Caret() {} -CFWL_Caret::~CFWL_Caret() {} diff --git a/xfa/src/fwl/lightwidget/checkbox.cpp b/xfa/src/fwl/lightwidget/checkbox.cpp deleted file mode 100644 index 6b7a370973..0000000000 --- a/xfa/src/fwl/lightwidget/checkbox.cpp +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/include/fwl/lightwidget/checkbox.h" - -#include - -#include "xfa/include/fwl/core/fwl_error.h" - -CFWL_CheckBox* CFWL_CheckBox::Create() { - return new CFWL_CheckBox; -} -FWL_ERR CFWL_CheckBox::Initialize(const CFWL_WidgetProperties* pProperties) { - if (m_pIface) - return FWL_ERR_Indefinite; - if (pProperties) { - *m_pProperties = *pProperties; - } - std::unique_ptr pCheckBox(IFWL_CheckBox::Create( - m_pProperties->MakeWidgetImpProperties(&m_checkboxData), nullptr)); - FWL_ERR ret = pCheckBox->Initialize(); - if (ret != FWL_ERR_Succeeded) { - return ret; - } - m_pIface = pCheckBox.release(); - CFWL_Widget::Initialize(); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_CheckBox::SetCaption(const CFX_WideStringC& wsCaption) { - m_checkboxData.m_wsCaption = wsCaption; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_CheckBox::SetBoxSize(FX_FLOAT fHeight) { - m_checkboxData.m_fBoxHeight = fHeight; - return FWL_ERR_Succeeded; -} -int32_t CFWL_CheckBox::GetCheckState() { - return static_cast(m_pIface)->GetCheckState(); -} -FWL_ERR CFWL_CheckBox::SetCheckState(int32_t iCheck) { - return static_cast(m_pIface)->SetCheckState(iCheck); -} -CFWL_CheckBox::CFWL_CheckBox() {} -CFWL_CheckBox::~CFWL_CheckBox() {} -CFWL_CheckBox::CFWL_CheckBoxDP::CFWL_CheckBoxDP() - : m_fBoxHeight(16.0f), m_wsCaption(L"Check box") {} -FWL_ERR CFWL_CheckBox::CFWL_CheckBoxDP::GetCaption(IFWL_Widget* pWidget, - CFX_WideString& wsCaption) { - wsCaption = m_wsCaption; - return FWL_ERR_Succeeded; -} -FX_FLOAT CFWL_CheckBox::CFWL_CheckBoxDP::GetBoxSize(IFWL_Widget* pWidget) { - return m_fBoxHeight; -} diff --git a/xfa/src/fwl/lightwidget/combobox.cpp b/xfa/src/fwl/lightwidget/combobox.cpp deleted file mode 100644 index aadb0d5ab6..0000000000 --- a/xfa/src/fwl/lightwidget/combobox.cpp +++ /dev/null @@ -1,370 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/include/fwl/lightwidget/combobox.h" - -#include - -#include "xfa/include/fwl/core/fwl_error.h" -#include "xfa/include/fwl/core/fwl_widget.h" - -CFWL_ComboBox* CFWL_ComboBox::Create() { - return new CFWL_ComboBox; -} -FWL_ERR CFWL_ComboBox::Initialize(const CFWL_WidgetProperties* pProperties) { - if (m_pIface) - return FWL_ERR_Indefinite; - if (pProperties) { - *m_pProperties = *pProperties; - } - std::unique_ptr pComboBox(IFWL_ComboBox::Create( - m_pProperties->MakeWidgetImpProperties(&m_comboBoxData))); - FWL_ERR ret = pComboBox->Initialize(); - if (ret != FWL_ERR_Succeeded) { - return ret; - } - m_pIface = pComboBox.release(); - CFWL_Widget::Initialize(); - return FWL_ERR_Succeeded; -} -int32_t CFWL_ComboBox::AddString(const CFX_WideStringC& wsText) { - std::unique_ptr pItem(new CFWL_ComboBoxItem); - pItem->m_wsText = wsText; - pItem->m_dwStyles = 0; - m_comboBoxData.m_ItemArray.push_back(std::move(pItem)); - return m_comboBoxData.m_ItemArray.size() - 1; -} -int32_t CFWL_ComboBox::AddString(const CFX_WideStringC& wsText, - CFX_DIBitmap* pIcon) { - std::unique_ptr pItem(new CFWL_ComboBoxItem); - pItem->m_wsText = wsText; - pItem->m_dwStyles = 0; - pItem->m_pDIB = pIcon; - m_comboBoxData.m_ItemArray.push_back(std::move(pItem)); - return m_comboBoxData.m_ItemArray.size() - 1; -} -bool CFWL_ComboBox::RemoveAt(int32_t iIndex) { - if (iIndex < 0 || - static_cast(iIndex) >= m_comboBoxData.m_ItemArray.size()) { - return false; - } - m_comboBoxData.m_ItemArray.erase(m_comboBoxData.m_ItemArray.begin() + iIndex); - return true; -} -void CFWL_ComboBox::RemoveAll() { - m_comboBoxData.m_ItemArray.clear(); -} -int32_t CFWL_ComboBox::CountItems() { - return m_comboBoxData.CountItems(GetWidget()); -} -FWL_ERR CFWL_ComboBox::GetTextByIndex(int32_t iIndex, CFX_WideString& wsText) { - CFWL_ComboBoxItem* pItem = reinterpret_cast( - m_comboBoxData.GetItem(m_pIface, iIndex)); - if (!pItem) - return FWL_ERR_Indefinite; - wsText = pItem->m_wsText; - return FWL_ERR_Succeeded; -} -int32_t CFWL_ComboBox::GetCurSel() { - if (!m_pIface) - return -1; - return static_cast(m_pIface)->GetCurSel(); -} -FWL_ERR CFWL_ComboBox::SetCurSel(int32_t iSel) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return static_cast(m_pIface)->SetCurSel(iSel); -} -FWL_ERR CFWL_ComboBox::SetEditText(const CFX_WideStringC& wsText) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return static_cast(m_pIface)->SetEditText(wsText); -} -int32_t CFWL_ComboBox::GetEditTextLength() const { - if (!m_pIface) - return 0; - return static_cast(m_pIface)->GetEditTextLength(); -} -FWL_ERR CFWL_ComboBox::GetEditText(CFX_WideString& wsText, - int32_t nStart, - int32_t nCount) const { - if (!m_pIface) - return FWL_ERR_Indefinite; - return static_cast(m_pIface) - ->GetEditText(wsText, nStart, nCount); -} -FWL_ERR CFWL_ComboBox::SetEditSelRange(int32_t nStart, int32_t nCount) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return static_cast(m_pIface)->SetEditSelRange(nStart, nCount); -} -int32_t CFWL_ComboBox::GetEditSelRange(int32_t nIndex, int32_t& nStart) { - if (!m_pIface) - return 0; - return static_cast(m_pIface)->GetEditSelRange(nIndex, nStart); -} -int32_t CFWL_ComboBox::GetEditLimit() { - if (!m_pIface) - return 0; - return static_cast(m_pIface)->GetEditLimit(); -} -FWL_ERR CFWL_ComboBox::SetEditLimit(int32_t nLimit) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return static_cast(m_pIface)->SetEditLimit(nLimit); -} -FWL_ERR CFWL_ComboBox::EditDoClipboard(int32_t iCmd) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return static_cast(m_pIface)->EditDoClipboard(iCmd); -} -FX_BOOL CFWL_ComboBox::EditRedo(const CFX_ByteStringC& bsRecord) { - if (!m_pIface) - return FALSE; - return static_cast(m_pIface)->EditRedo(bsRecord); -} -FX_BOOL CFWL_ComboBox::EditUndo(const CFX_ByteStringC& bsRecord) { - if (!m_pIface) - return FALSE; - return static_cast(m_pIface)->EditUndo(bsRecord); -} -FWL_ERR CFWL_ComboBox::SetMaxListHeight(FX_FLOAT fMaxHeight) { - m_comboBoxData.m_fMaxListHeight = fMaxHeight; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ComboBox::SetItemData(int32_t iIndex, void* pData) { - CFWL_ComboBoxItem* pItem = reinterpret_cast( - m_comboBoxData.GetItem(m_pIface, iIndex)); - if (!pItem) - return FWL_ERR_Indefinite; - pItem->m_pData = pData; - return FWL_ERR_Succeeded; -} -void* CFWL_ComboBox::GetItemData(int32_t iIndex) { - CFWL_ComboBoxItem* pItem = reinterpret_cast( - m_comboBoxData.GetItem(m_pIface, iIndex)); - if (!pItem) - return NULL; - return pItem->m_pData; -} -FWL_ERR CFWL_ComboBox::SetListTheme(IFWL_ThemeProvider* pTheme) { - return static_cast(m_pIface)->GetListBoxt()->SetThemeProvider( - pTheme); -} -FX_BOOL CFWL_ComboBox::AfterFocusShowDropList() { - return static_cast(m_pIface)->AfterFocusShowDropList(); -} -FWL_ERR CFWL_ComboBox::OpenDropDownList(FX_BOOL bActivate) { - return static_cast(m_pIface)->OpenDropDownList(bActivate); -} -FX_BOOL CFWL_ComboBox::EditCanUndo() { - if (!m_pIface) - return FALSE; - return static_cast(m_pIface)->EditCanUndo(); -} -FX_BOOL CFWL_ComboBox::EditCanRedo() { - if (!m_pIface) - return FALSE; - return static_cast(m_pIface)->EditCanRedo(); -} -FX_BOOL CFWL_ComboBox::EditUndo() { - if (!m_pIface) - return FALSE; - return static_cast(m_pIface)->EditUndo(); -} -FX_BOOL CFWL_ComboBox::EditRedo() { - if (!m_pIface) - return FALSE; - return static_cast(m_pIface)->EditRedo(); -} -FX_BOOL CFWL_ComboBox::EditCanCopy() { - if (!m_pIface) - return FALSE; - return static_cast(m_pIface)->EditCanCopy(); -} -FX_BOOL CFWL_ComboBox::EditCanCut() { - if (!m_pIface) - return FALSE; - return static_cast(m_pIface)->EditCanCut(); -} -FX_BOOL CFWL_ComboBox::EditCanSelectAll() { - if (!m_pIface) - return FALSE; - return static_cast(m_pIface)->EditCanSelectAll(); -} -FX_BOOL CFWL_ComboBox::EditCopy(CFX_WideString& wsCopy) { - if (!m_pIface) - return FALSE; - return static_cast(m_pIface)->EditCopy(wsCopy); -} -FX_BOOL CFWL_ComboBox::EditCut(CFX_WideString& wsCut) { - if (!m_pIface) - return FALSE; - return static_cast(m_pIface)->EditCut(wsCut); -} -FX_BOOL CFWL_ComboBox::EditPaste(const CFX_WideString& wsPaste) { - if (!m_pIface) - return FALSE; - return static_cast(m_pIface)->EditPaste(wsPaste); -} -FX_BOOL CFWL_ComboBox::EditSelectAll() { - if (!m_pIface) - return FALSE; - return static_cast(m_pIface)->EditSelectAll(); -} -FX_BOOL CFWL_ComboBox::EditDelete() { - if (!m_pIface) - return FALSE; - return static_cast(m_pIface)->EditDelete(); -} -FX_BOOL CFWL_ComboBox::EditDeSelect() { - if (!m_pIface) - return FALSE; - return static_cast(m_pIface)->EditDeSelect(); -} -FWL_ERR CFWL_ComboBox::GetBBox(CFX_RectF& rect) { - if (!m_pIface) - return FALSE; - return static_cast(m_pIface)->GetBBox(rect); -} -FWL_ERR CFWL_ComboBox::EditModifyStylesEx(FX_DWORD dwStylesExAdded, - FX_DWORD dwStylesExRemoved) { - if (!m_pIface) - return FALSE; - return static_cast(m_pIface) - ->EditModifyStylesEx(dwStylesExAdded, dwStylesExRemoved); -} -CFWL_ComboBox::CFWL_ComboBox() {} -CFWL_ComboBox::~CFWL_ComboBox() {} -CFWL_ComboBox::CFWL_ComboBoxDP::CFWL_ComboBoxDP() { - m_fItemHeight = 0; - m_fMaxListHeight = 0; -} -CFWL_ComboBox::CFWL_ComboBoxDP::~CFWL_ComboBoxDP() {} -int32_t CFWL_ComboBox::CFWL_ComboBoxDP::CountItems(IFWL_Widget* pWidget) { - return m_ItemArray.size(); -} -FWL_HLISTITEM CFWL_ComboBox::CFWL_ComboBoxDP::GetItem(IFWL_Widget* pWidget, - int32_t nIndex) { - if (nIndex < 0 || static_cast(nIndex) >= m_ItemArray.size()) - return nullptr; - - return reinterpret_cast(m_ItemArray[nIndex].get()); -} -int32_t CFWL_ComboBox::CFWL_ComboBoxDP::GetItemIndex(IFWL_Widget* pWidget, - FWL_HLISTITEM hItem) { - auto it = std::find_if( - m_ItemArray.begin(), m_ItemArray.end(), - [hItem](const std::unique_ptr& candidate) { - return candidate.get() == reinterpret_cast(hItem); - }); - return it != m_ItemArray.end() ? it - m_ItemArray.begin() : -1; -} -FX_BOOL CFWL_ComboBox::CFWL_ComboBoxDP::SetItemIndex(IFWL_Widget* pWidget, - FWL_HLISTITEM hItem, - int32_t nIndex) { - if (nIndex < 0 || static_cast(nIndex) >= m_ItemArray.size()) - return FALSE; - - m_ItemArray[nIndex].reset(reinterpret_cast(hItem)); - return TRUE; -} -FX_DWORD CFWL_ComboBox::CFWL_ComboBoxDP::GetItemStyles(IFWL_Widget* pWidget, - FWL_HLISTITEM hItem) { - if (!hItem) - return 0; - return reinterpret_cast(hItem)->m_dwStyles; -} -FWL_ERR CFWL_ComboBox::CFWL_ComboBoxDP::GetItemText(IFWL_Widget* pWidget, - FWL_HLISTITEM hItem, - CFX_WideString& wsText) { - if (!hItem) - return FWL_ERR_Indefinite; - wsText = reinterpret_cast(hItem)->m_wsText; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ComboBox::CFWL_ComboBoxDP::GetItemRect(IFWL_Widget* pWidget, - FWL_HLISTITEM hItem, - CFX_RectF& rtItem) { - if (!hItem) - return FWL_ERR_Indefinite; - CFWL_ComboBoxItem* pItem = reinterpret_cast(hItem); - rtItem.Set(pItem->m_rtItem.left, pItem->m_rtItem.top, pItem->m_rtItem.width, - pItem->m_rtItem.height); - return FWL_ERR_Succeeded; -} -void* CFWL_ComboBox::CFWL_ComboBoxDP::GetItemData(IFWL_Widget* pWidget, - FWL_HLISTITEM hItem) { - if (!hItem) - return NULL; - CFWL_ComboBoxItem* pItem = reinterpret_cast(hItem); - return pItem->m_pData; -} -FWL_ERR CFWL_ComboBox::CFWL_ComboBoxDP::SetItemStyles(IFWL_Widget* pWidget, - FWL_HLISTITEM hItem, - FX_DWORD dwStyle) { - if (!hItem) - return FWL_ERR_Indefinite; - reinterpret_cast(hItem)->m_dwStyles = dwStyle; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ComboBox::CFWL_ComboBoxDP::SetItemText(IFWL_Widget* pWidget, - FWL_HLISTITEM hItem, - const FX_WCHAR* pszText) { - if (!hItem) - return FWL_ERR_Indefinite; - reinterpret_cast(hItem)->m_wsText = pszText; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ComboBox::CFWL_ComboBoxDP::SetItemRect(IFWL_Widget* pWidget, - FWL_HLISTITEM hItem, - const CFX_RectF& rtItem) { - if (!hItem) - return FWL_ERR_Indefinite; - reinterpret_cast(hItem)->m_rtItem = rtItem; - return FWL_ERR_Succeeded; -} -FX_FLOAT CFWL_ComboBox::CFWL_ComboBoxDP::GetItemHeight(IFWL_Widget* pWidget) { - return m_fItemHeight; -} -CFX_DIBitmap* CFWL_ComboBox::CFWL_ComboBoxDP::GetItemIcon(IFWL_Widget* pWidget, - FWL_HLISTITEM hItem) { - if (!hItem) - return NULL; - return reinterpret_cast(hItem)->m_pDIB; -} -FWL_ERR CFWL_ComboBox::CFWL_ComboBoxDP::GetItemCheckRect(IFWL_Widget* pWidget, - FWL_HLISTITEM hItem, - CFX_RectF& rtCheck) { - CFWL_ComboBoxItem* pItem = reinterpret_cast(hItem); - rtCheck = pItem->m_rtCheckBox; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ComboBox::CFWL_ComboBoxDP::SetItemCheckRect( - IFWL_Widget* pWidget, - FWL_HLISTITEM hItem, - const CFX_RectF& rtCheck) { - CFWL_ComboBoxItem* pItem = reinterpret_cast(hItem); - pItem->m_rtCheckBox = rtCheck; - return FWL_ERR_Succeeded; -} -FX_DWORD CFWL_ComboBox::CFWL_ComboBoxDP::GetItemCheckState( - IFWL_Widget* pWidget, - FWL_HLISTITEM hItem) { - CFWL_ComboBoxItem* pItem = reinterpret_cast(hItem); - return pItem->m_dwCheckState; -} -FWL_ERR CFWL_ComboBox::CFWL_ComboBoxDP::SetItemCheckState( - IFWL_Widget* pWidget, - FWL_HLISTITEM hItem, - FX_DWORD dwCheckState) { - CFWL_ComboBoxItem* pItem = reinterpret_cast(hItem); - pItem->m_dwCheckState = dwCheckState; - return FWL_ERR_Succeeded; -} -FX_FLOAT CFWL_ComboBox::CFWL_ComboBoxDP::GetListHeight(IFWL_Widget* pWidget) { - return m_fMaxListHeight; -} diff --git a/xfa/src/fwl/lightwidget/datetimepicker.cpp b/xfa/src/fwl/lightwidget/datetimepicker.cpp deleted file mode 100644 index 957ed87fed..0000000000 --- a/xfa/src/fwl/lightwidget/datetimepicker.cpp +++ /dev/null @@ -1,144 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/include/fwl/lightwidget/datetimepicker.h" - -#include - -#include "xfa/include/fwl/core/fwl_error.h" -#include "xfa/include/fwl/core/fwl_note.h" -#include "xfa/include/fwl/core/fwl_widget.h" -#include "xfa/include/fwl/basewidget/fwl_datetimepicker.h" - -CFWL_DateTimePicker* CFWL_DateTimePicker::Create() { - return new CFWL_DateTimePicker; -} -FWL_ERR CFWL_DateTimePicker::Initialize( - const CFWL_WidgetProperties* pProperties) { - if (m_pIface) - return FWL_ERR_Indefinite; - if (pProperties) { - *m_pProperties = *pProperties; - } - std::unique_ptr pDateTimePicker( - IFWL_DateTimePicker::Create( - m_pProperties->MakeWidgetImpProperties(&m_DateTimePickerDP), - nullptr)); - FWL_ERR ret = pDateTimePicker->Initialize(); - if (ret != FWL_ERR_Succeeded) { - return ret; - } - m_pIface = pDateTimePicker.release(); - CFWL_Widget::Initialize(); - return FWL_ERR_Succeeded; -} - -FWL_ERR CFWL_DateTimePicker::SetToday(int32_t iYear, - int32_t iMonth, - int32_t iDay) { - m_DateTimePickerDP.m_iYear = iYear; - m_DateTimePickerDP.m_iMonth = iMonth; - m_DateTimePickerDP.m_iDay = iDay; - return FWL_ERR_Succeeded; -} -int32_t CFWL_DateTimePicker::CountSelRanges() { - return static_cast(m_pIface)->CountSelRanges(); -} -int32_t CFWL_DateTimePicker::GetSelRange(int32_t nIndex, int32_t& nStart) { - return static_cast(m_pIface) - ->GetSelRange(nIndex, nStart); -} -FWL_ERR CFWL_DateTimePicker::GetEditText(CFX_WideString& wsText) { - return static_cast(m_pIface)->GetEditText(wsText); -} -FWL_ERR CFWL_DateTimePicker::SetEditText(const CFX_WideStringC& wsText) { - return static_cast(m_pIface)->SetEditText(wsText); -} -FWL_ERR CFWL_DateTimePicker::GetCurSel(int32_t& iYear, - int32_t& iMonth, - int32_t& iDay) { - return static_cast(m_pIface) - ->GetCurSel(iYear, iMonth, iDay); -} -FWL_ERR CFWL_DateTimePicker::SetCurSel(int32_t iYear, - int32_t iMonth, - int32_t iDay) { - return static_cast(m_pIface) - ->SetCurSel(iYear, iMonth, iDay); -} -CFWL_DateTimePicker::CFWL_DateTimePicker() {} -CFWL_DateTimePicker::~CFWL_DateTimePicker() {} -CFWL_DateTimePicker::CFWL_DateTimePickerDP::CFWL_DateTimePickerDP() { - m_iYear = 2011; - m_iMonth = 1; - m_iDay = 1; -} -FWL_ERR CFWL_DateTimePicker::CFWL_DateTimePickerDP::GetCaption( - IFWL_Widget* pWidget, - CFX_WideString& wsCaption) { - wsCaption = m_wsData; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_DateTimePicker::CFWL_DateTimePickerDP::GetToday( - IFWL_Widget* pWidget, - int32_t& iYear, - int32_t& iMonth, - int32_t& iDay) { - iYear = m_iYear; - iMonth = m_iMonth; - iDay = m_iDay; - return FWL_ERR_Succeeded; -} -FX_BOOL CFWL_DateTimePicker::CanUndo() { - return static_cast(m_pIface)->CanUndo(); -} -FX_BOOL CFWL_DateTimePicker::CanRedo() { - return static_cast(m_pIface)->CanRedo(); -} -FX_BOOL CFWL_DateTimePicker::Undo() { - return static_cast(m_pIface)->Undo(); -} -FX_BOOL CFWL_DateTimePicker::Redo() { - return static_cast(m_pIface)->Redo(); -} -FX_BOOL CFWL_DateTimePicker::CanCopy() { - return static_cast(m_pIface)->CanCopy(); -} -FX_BOOL CFWL_DateTimePicker::CanCut() { - return static_cast(m_pIface)->CanCut(); -} -FX_BOOL CFWL_DateTimePicker::CanSelectAll() { - return static_cast(m_pIface)->CanSelectAll(); -} -FX_BOOL CFWL_DateTimePicker::Copy(CFX_WideString& wsCopy) { - return static_cast(m_pIface)->Copy(wsCopy); -} -FX_BOOL CFWL_DateTimePicker::Cut(CFX_WideString& wsCut) { - return static_cast(m_pIface)->Copy(wsCut); -} -FX_BOOL CFWL_DateTimePicker::Paste(const CFX_WideString& wsPaste) { - return static_cast(m_pIface)->Paste(wsPaste); -} -FX_BOOL CFWL_DateTimePicker::SelectAll() { - return static_cast(m_pIface)->SelectAll(); -} -FX_BOOL CFWL_DateTimePicker::Delete() { - return static_cast(m_pIface)->Delete(); -} -FX_BOOL CFWL_DateTimePicker::DeSelect() { - return static_cast(m_pIface)->DeSelect(); -} -FWL_ERR CFWL_DateTimePicker::GetBBox(CFX_RectF& rect) { - return static_cast(m_pIface)->GetBBox(rect); -} -FWL_ERR CFWL_DateTimePicker::SetEditLimit(int32_t nLimit) { - return static_cast(m_pIface)->SetEditLimit(nLimit); -} -FWL_ERR CFWL_DateTimePicker::ModifyEditStylesEx(FX_DWORD dwStylesExAdded, - FX_DWORD dwStylesExRemoved) { - return static_cast(m_pIface) - ->ModifyEditStylesEx(dwStylesExAdded, dwStylesExRemoved); -} diff --git a/xfa/src/fwl/lightwidget/edit.cpp b/xfa/src/fwl/lightwidget/edit.cpp deleted file mode 100644 index 303943a8f6..0000000000 --- a/xfa/src/fwl/lightwidget/edit.cpp +++ /dev/null @@ -1,211 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/include/fwl/lightwidget/edit.h" - -#include -#include - -#include "xfa/include/fwl/basewidget/fwl_edit.h" - -CFWL_Edit* CFWL_Edit::Create() { - return new CFWL_Edit; -} -FWL_ERR CFWL_Edit::Initialize(const CFWL_WidgetProperties* pProperties) { - if (m_pIface) - return FWL_ERR_Indefinite; - if (pProperties) { - *m_pProperties = *pProperties; - } - std::unique_ptr pEdit(IFWL_Edit::Create( - m_pProperties->MakeWidgetImpProperties(nullptr), nullptr)); - FWL_ERR ret = pEdit->Initialize(); - if (ret != FWL_ERR_Succeeded) { - return ret; - } - m_pIface = pEdit.release(); - CFWL_Widget::Initialize(); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_Edit::SetText(const CFX_WideString& wsText) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return static_cast(m_pIface)->SetText(wsText); -} -int32_t CFWL_Edit::GetTextLength() const { - if (!m_pIface) - return 0; - return static_cast(m_pIface)->GetTextLength(); -} -FWL_ERR CFWL_Edit::GetText(CFX_WideString& wsText, - int32_t nStart, - int32_t nCount) const { - if (!m_pIface) - return FWL_ERR_Indefinite; - return static_cast(m_pIface)->GetText(wsText, nStart, nCount); -} -FWL_ERR CFWL_Edit::ClearText() { - if (!m_pIface) - return FWL_ERR_Indefinite; - return static_cast(m_pIface)->ClearText(); -} -int32_t CFWL_Edit::GetCaretPos() const { - if (!m_pIface) - return -1; - return static_cast(m_pIface)->GetCaretPos(); -} -int32_t CFWL_Edit::SetCaretPos(int32_t nIndex, FX_BOOL bBefore) { - if (!m_pIface) - return -1; - return static_cast(m_pIface)->SetCaretPos(nIndex, bBefore); -} -FWL_ERR CFWL_Edit::AddSelRange(int32_t nStart, int32_t nCount) { - if (!m_pIface) - return FWL_ERR_Indefinite; - static_cast(m_pIface)->AddSelRange(nStart, nCount); - int32_t pos = 0; - int32_t sum = static_cast(m_pIface)->GetTextLength(); - if (nCount == -1) { - pos = sum; - } else { - pos = nStart + nCount; - } - return static_cast(m_pIface)->SetCaretPos(pos); -} -int32_t CFWL_Edit::CountSelRanges() { - if (!m_pIface) - return 0; - return static_cast(m_pIface)->CountSelRanges(); -} -int32_t CFWL_Edit::GetSelRange(int32_t nIndex, int32_t& nStart) { - if (!m_pIface) - return 0; - return static_cast(m_pIface)->GetSelRange(nIndex, nStart); -} -FWL_ERR CFWL_Edit::ClearSelections() { - if (!m_pIface) - return FWL_ERR_Indefinite; - return static_cast(m_pIface)->ClearSelections(); -} -int32_t CFWL_Edit::GetLimit() { - if (!m_pIface) - return -1; - return static_cast(m_pIface)->GetLimit(); -} -FWL_ERR CFWL_Edit::SetLimit(int32_t nLimit) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return static_cast(m_pIface)->SetLimit(nLimit); -} -FWL_ERR CFWL_Edit::SetAliasChar(FX_WCHAR wAlias) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return static_cast(m_pIface)->SetAliasChar(wAlias); -} -FWL_ERR CFWL_Edit::Insert(int32_t nStart, - const FX_WCHAR* lpText, - int32_t nLen) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return static_cast(m_pIface)->Insert(nStart, lpText, nLen); -} -FWL_ERR CFWL_Edit::DeleteSelections() { - if (!m_pIface) - return FWL_ERR_Indefinite; - return static_cast(m_pIface)->DeleteSelections(); -} -FWL_ERR CFWL_Edit::DeleteRange(int32_t nStart, int32_t nCount) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return static_cast(m_pIface)->DeleteRange(nStart, nCount); -} -FWL_ERR CFWL_Edit::ReplaceSelections(const CFX_WideStringC& wsReplace) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return static_cast(m_pIface)->ReplaceSelections(wsReplace); -} -FWL_ERR CFWL_Edit::Replace(int32_t nStart, - int32_t nLen, - const CFX_WideStringC& wsReplace) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return static_cast(m_pIface)->Replace(nStart, nLen, wsReplace); -} -FWL_ERR CFWL_Edit::DoClipboard(int32_t iCmd) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return static_cast(m_pIface)->DoClipboard(iCmd); -} -FX_BOOL CFWL_Edit::Redo(const CFX_ByteStringC& bsRecord) { - if (!m_pIface) - return FALSE; - return static_cast(m_pIface)->Redo(bsRecord); -} -FX_BOOL CFWL_Edit::Undo(const CFX_ByteStringC& bsRecord) { - if (!m_pIface) - return FALSE; - return static_cast(m_pIface)->Undo(bsRecord); -} -FWL_ERR CFWL_Edit::SetTabWidth(FX_FLOAT fTabWidth, FX_BOOL bEquidistant) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return static_cast(m_pIface) - ->SetTabWidth(fTabWidth, bEquidistant); -} -FWL_ERR CFWL_Edit::SetNumberRange(int32_t iMin, int32_t iMax) { - if (iMin > iMax) { - return FWL_ERR_Parameter_Invalid; - } - return static_cast(m_pIface)->SetNumberRange(iMin, iMax); -} -FWL_ERR CFWL_Edit::SetBackColor(FX_DWORD dwColor) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return static_cast(m_pIface)->SetBackColor(dwColor); -} -FWL_ERR CFWL_Edit::SetFont(const CFX_WideString& wsFont, FX_FLOAT fSize) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return static_cast(m_pIface)->SetFont(wsFont, fSize); -} -FX_BOOL CFWL_Edit::CanUndo() { - return static_cast(m_pIface)->CanUndo(); -} -FX_BOOL CFWL_Edit::CanRedo() { - return static_cast(m_pIface)->CanRedo(); -} -FX_BOOL CFWL_Edit::Undo() { - return static_cast(m_pIface)->Undo(); -} -FX_BOOL CFWL_Edit::Redo() { - return static_cast(m_pIface)->Undo(); -} -FX_BOOL CFWL_Edit::Copy(CFX_WideString& wsCopy) { - return static_cast(m_pIface)->Copy(wsCopy); -} -FX_BOOL CFWL_Edit::Cut(CFX_WideString& wsCut) { - return static_cast(m_pIface)->Cut(wsCut); -} -FX_BOOL CFWL_Edit::Paste(const CFX_WideString& wsPaste) { - return static_cast(m_pIface)->Paste(wsPaste); -} -FX_BOOL CFWL_Edit::Delete() { - return static_cast(m_pIface)->Delete(); -} -void CFWL_Edit::SetScrollOffset(FX_FLOAT fScrollOffset) { - return static_cast(m_pIface)->SetScrollOffset(fScrollOffset); -} -FX_BOOL CFWL_Edit::GetSuggestWords(CFX_PointF pointf, - std::vector& sSuggest) { - return static_cast(m_pIface)->GetSuggestWords(pointf, sSuggest); -} -FX_BOOL CFWL_Edit::ReplaceSpellCheckWord(CFX_PointF pointf, - const CFX_ByteStringC& bsReplace) { - return static_cast(m_pIface) - ->ReplaceSpellCheckWord(pointf, bsReplace); -} -CFWL_Edit::CFWL_Edit() {} -CFWL_Edit::~CFWL_Edit() {} diff --git a/xfa/src/fwl/lightwidget/listbox.cpp b/xfa/src/fwl/lightwidget/listbox.cpp deleted file mode 100644 index 6a7a26cd1b..0000000000 --- a/xfa/src/fwl/lightwidget/listbox.cpp +++ /dev/null @@ -1,302 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/include/fwl/lightwidget/listbox.h" - -#include - -#include "third_party/base/stl_util.h" - -CFWL_ListBox* CFWL_ListBox::Create() { - return new CFWL_ListBox; -} -FWL_ERR CFWL_ListBox::Initialize(const CFWL_WidgetProperties* pProperties) { - if (m_pIface) - return FWL_ERR_Indefinite; - if (pProperties) { - *m_pProperties = *pProperties; - } - std::unique_ptr pListBox(IFWL_ListBox::Create( - m_pProperties->MakeWidgetImpProperties(&m_ListBoxDP), nullptr)); - FWL_ERR ret = pListBox->Initialize(); - if (ret != FWL_ERR_Succeeded) { - return ret; - } - m_pIface = pListBox.release(); - CFWL_Widget::Initialize(); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ListBox::AddDIBitmap(CFX_DIBitmap* pDIB, FWL_HLISTITEM hItem) { - reinterpret_cast(hItem)->m_pDIB = pDIB; - return FWL_ERR_Succeeded; -} -FWL_HLISTITEM CFWL_ListBox::AddString(const CFX_WideStringC& wsAdd, - FX_BOOL bSelect) { - std::unique_ptr pItem(new CFWL_ListItem); - pItem->m_dwStates = 0; - pItem->m_wsText = wsAdd; - pItem->m_dwStates = bSelect ? FWL_ITEMSTATE_LTB_Selected : 0; - m_ListBoxDP.m_ItemArray.push_back(std::move(pItem)); - return (FWL_HLISTITEM)m_ListBoxDP.m_ItemArray.back().get(); -} -FX_BOOL CFWL_ListBox::DeleteString(FWL_HLISTITEM hItem) { - int32_t nIndex = m_ListBoxDP.GetItemIndex(GetWidget(), hItem); - if (nIndex < 0 || - static_cast(nIndex) >= m_ListBoxDP.m_ItemArray.size()) { - return FALSE; - } - int32_t iCount = m_ListBoxDP.CountItems(m_pIface); - int32_t iSel = nIndex + 1; - if (iSel >= iCount) { - iSel = nIndex - 1; - if (iSel < 0) { - iSel = -1; - } - } - if (iSel >= 0) { - CFWL_ListItem* pSel = - reinterpret_cast(m_ListBoxDP.GetItem(m_pIface, iSel)); - pSel->m_dwStates |= FWL_ITEMSTATE_LTB_Selected; - } - m_ListBoxDP.m_ItemArray.erase(m_ListBoxDP.m_ItemArray.begin() + nIndex); - return TRUE; -} -void CFWL_ListBox::DeleteAll() { - m_ListBoxDP.m_ItemArray.clear(); -} -int32_t CFWL_ListBox::CountSelItems() { - if (!m_pIface) - return 0; - return static_cast(m_pIface)->CountSelItems(); -} -FWL_HLISTITEM CFWL_ListBox::GetSelItem(int32_t nIndexSel) { - if (!m_pIface) - return NULL; - return static_cast(m_pIface)->GetSelItem(nIndexSel); -} -int32_t CFWL_ListBox::GetSelIndex(int32_t nIndex) { - if (!m_pIface) - return 0; - return static_cast(m_pIface)->GetSelIndex(nIndex); -} -FWL_ERR CFWL_ListBox::SetSelItem(FWL_HLISTITEM hItem, FX_BOOL bSelect) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return static_cast(m_pIface)->SetSelItem(hItem, bSelect); -} -FWL_ERR CFWL_ListBox::GetItemText(FWL_HLISTITEM hItem, CFX_WideString& wsText) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return static_cast(m_pIface)->GetItemText(hItem, wsText); -} -FWL_ERR CFWL_ListBox::GetScrollPos(FX_FLOAT& fPos, FX_BOOL bVert) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return static_cast(m_pIface)->GetScrollPos(fPos, bVert); -} -FWL_ERR CFWL_ListBox::SetItemHeight(FX_FLOAT fItemHeight) { - m_ListBoxDP.m_fItemHeight = fItemHeight; - return FWL_ERR_Succeeded; -} -FWL_HLISTITEM CFWL_ListBox::GetFocusItem() { - for (const auto& hItem : m_ListBoxDP.m_ItemArray) { - if (hItem->m_dwStates & FWL_ITEMSTATE_LTB_Focused) - return (FWL_HLISTITEM)hItem.get(); - } - return nullptr; -} -FWL_ERR CFWL_ListBox::SetFocusItem(FWL_HLISTITEM hItem) { - int32_t nIndex = m_ListBoxDP.GetItemIndex(GetWidget(), hItem); - m_ListBoxDP.m_ItemArray[nIndex]->m_dwStates |= FWL_ITEMSTATE_LTB_Focused; - return FWL_ERR_Succeeded; -} -FWL_ERR* CFWL_ListBox::Sort(IFWL_ListBoxCompare* pCom) { - return static_cast(m_pIface)->Sort(pCom); -} -int32_t CFWL_ListBox::CountItems() { - return pdfium::CollectionSize(m_ListBoxDP.m_ItemArray); -} -FWL_HLISTITEM CFWL_ListBox::GetItem(int32_t nIndex) { - if (nIndex < 0 || nIndex >= CountItems()) - return nullptr; - - return (FWL_HLISTITEM)m_ListBoxDP.m_ItemArray[nIndex].get(); -} -FWL_ERR CFWL_ListBox::SetItemString(FWL_HLISTITEM hItem, - const CFX_WideStringC& wsText) { - if (!hItem) - return FWL_ERR_Indefinite; - reinterpret_cast(hItem)->m_wsText = wsText; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ListBox::GetItemString(FWL_HLISTITEM hItem, - CFX_WideString& wsText) { - if (!hItem) - return FWL_ERR_Indefinite; - wsText = reinterpret_cast(hItem)->m_wsText; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ListBox::SetItemData(FWL_HLISTITEM hItem, void* pData) { - if (!hItem) - return FWL_ERR_Indefinite; - reinterpret_cast(hItem)->m_pData = pData; - return FWL_ERR_Succeeded; -} -void* CFWL_ListBox::GetItemData(FWL_HLISTITEM hItem) { - if (!hItem) - return NULL; - return reinterpret_cast(hItem)->m_pData; -} -FWL_HLISTITEM CFWL_ListBox::GetItemAtPoint(FX_FLOAT fx, FX_FLOAT fy) { - CFX_RectF rtClient; - m_pIface->GetClientRect(rtClient); - fx -= rtClient.left; - fy -= rtClient.top; - FX_FLOAT fPosX = 0; - FX_FLOAT fPosY = 0; - static_cast(m_pIface)->GetScrollPos(fx); - static_cast(m_pIface)->GetScrollPos(fy, FALSE); - int32_t nCount = m_ListBoxDP.CountItems(NULL); - for (int32_t i = 0; i < nCount; i++) { - FWL_HLISTITEM hItem = m_ListBoxDP.GetItem(NULL, i); - if (!hItem) { - continue; - } - CFX_RectF rtItem; - m_ListBoxDP.GetItemRect(NULL, hItem, rtItem); - rtItem.Offset(-fPosX, -fPosY); - if (rtItem.Contains(fx, fy)) { - return hItem; - } - } - return NULL; -} -FX_DWORD CFWL_ListBox::GetItemStates(FWL_HLISTITEM hItem) { - if (!hItem) - return 0; - CFWL_ListItem* pItem = reinterpret_cast(hItem); - return pItem->m_dwStates | pItem->m_dwCheckState; -} -CFWL_ListBox::CFWL_ListBox() {} -CFWL_ListBox::~CFWL_ListBox() {} -CFWL_ListBox::CFWL_ListBoxDP::CFWL_ListBoxDP() {} -CFWL_ListBox::CFWL_ListBoxDP::~CFWL_ListBoxDP() {} -FWL_ERR CFWL_ListBox::CFWL_ListBoxDP::GetCaption(IFWL_Widget* pWidget, - CFX_WideString& wsCaption) { - wsCaption = m_wsData; - return FWL_ERR_Succeeded; -} -int32_t CFWL_ListBox::CFWL_ListBoxDP::CountItems(IFWL_Widget* pWidget) { - return pdfium::CollectionSize(m_ItemArray); -} -FWL_HLISTITEM CFWL_ListBox::CFWL_ListBoxDP::GetItem(IFWL_Widget* pWidget, - int32_t nIndex) { - if (nIndex < 0 || nIndex >= CountItems(pWidget)) - return nullptr; - - return (FWL_HLISTITEM)m_ItemArray[nIndex].get(); -} -int32_t CFWL_ListBox::CFWL_ListBoxDP::GetItemIndex(IFWL_Widget* pWidget, - FWL_HLISTITEM hItem) { - auto it = std::find_if( - m_ItemArray.begin(), m_ItemArray.end(), - [hItem](const std::unique_ptr& candidate) { - return candidate.get() == reinterpret_cast(hItem); - }); - return it != m_ItemArray.end() ? it - m_ItemArray.begin() : -1; -} -FX_BOOL CFWL_ListBox::CFWL_ListBoxDP::SetItemIndex(IFWL_Widget* pWidget, - FWL_HLISTITEM hItem, - int32_t nIndex) { - if (nIndex < 0 || nIndex >= CountItems(pWidget)) - return FALSE; - m_ItemArray[nIndex].reset(reinterpret_cast(hItem)); - return TRUE; -} -FX_DWORD CFWL_ListBox::CFWL_ListBoxDP::GetItemStyles(IFWL_Widget* pWidget, - FWL_HLISTITEM hItem) { - if (!hItem) - return -1; - return reinterpret_cast(hItem)->m_dwStates; -} -FWL_ERR CFWL_ListBox::CFWL_ListBoxDP::GetItemText(IFWL_Widget* pWidget, - FWL_HLISTITEM hItem, - CFX_WideString& wsText) { - if (!hItem) - return FWL_ERR_Indefinite; - wsText = reinterpret_cast(hItem)->m_wsText; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ListBox::CFWL_ListBoxDP::GetItemRect(IFWL_Widget* pWidget, - FWL_HLISTITEM hItem, - CFX_RectF& rtItem) { - if (!hItem) - return FWL_ERR_Indefinite; - CFWL_ListItem* pItem = reinterpret_cast(hItem); - rtItem = pItem->m_rtItem; - return FWL_ERR_Succeeded; -} -void* CFWL_ListBox::CFWL_ListBoxDP::GetItemData(IFWL_Widget* pWidget, - FWL_HLISTITEM hItem) { - if (!hItem) - return NULL; - CFWL_ListItem* pItem = reinterpret_cast(hItem); - return pItem->m_pData; -} -FWL_ERR CFWL_ListBox::CFWL_ListBoxDP::SetItemStyles(IFWL_Widget* pWidget, - FWL_HLISTITEM hItem, - FX_DWORD dwStyle) { - if (!hItem) - return FWL_ERR_Indefinite; - reinterpret_cast(hItem)->m_dwStates = dwStyle; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ListBox::CFWL_ListBoxDP::SetItemText(IFWL_Widget* pWidget, - FWL_HLISTITEM hItem, - const FX_WCHAR* pszText) { - if (!hItem) - return FWL_ERR_Indefinite; - reinterpret_cast(hItem)->m_wsText = pszText; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ListBox::CFWL_ListBoxDP::SetItemRect(IFWL_Widget* pWidget, - FWL_HLISTITEM hItem, - const CFX_RectF& rtItem) { - if (!hItem) - return FWL_ERR_Indefinite; - reinterpret_cast(hItem)->m_rtItem = rtItem; - return FWL_ERR_Succeeded; -} -FX_FLOAT CFWL_ListBox::CFWL_ListBoxDP::GetItemHeight(IFWL_Widget* pWidget) { - return m_fItemHeight; -} -CFX_DIBitmap* CFWL_ListBox::CFWL_ListBoxDP::GetItemIcon(IFWL_Widget* pWidget, - FWL_HLISTITEM hItem) { - return reinterpret_cast(hItem)->m_pDIB; -} -FWL_ERR CFWL_ListBox::CFWL_ListBoxDP::GetItemCheckRect(IFWL_Widget* pWidget, - FWL_HLISTITEM hItem, - CFX_RectF& rtCheck) { - rtCheck = reinterpret_cast(hItem)->m_rtCheckBox; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ListBox::CFWL_ListBoxDP::SetItemCheckRect( - IFWL_Widget* pWidget, - FWL_HLISTITEM hItem, - const CFX_RectF& rtCheck) { - reinterpret_cast(hItem)->m_rtCheckBox = rtCheck; - return FWL_ERR_Succeeded; -} -FX_DWORD CFWL_ListBox::CFWL_ListBoxDP::GetItemCheckState(IFWL_Widget* pWidget, - FWL_HLISTITEM hItem) { - return reinterpret_cast(hItem)->m_dwCheckState; -} -FWL_ERR CFWL_ListBox::CFWL_ListBoxDP::SetItemCheckState(IFWL_Widget* pWidget, - FWL_HLISTITEM hItem, - FX_DWORD dwCheckState) { - reinterpret_cast(hItem)->m_dwCheckState = dwCheckState; - return FWL_ERR_Succeeded; -} diff --git a/xfa/src/fwl/lightwidget/picturebox.cpp b/xfa/src/fwl/lightwidget/picturebox.cpp deleted file mode 100644 index e35741c3ac..0000000000 --- a/xfa/src/fwl/lightwidget/picturebox.cpp +++ /dev/null @@ -1,119 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/include/fwl/lightwidget/picturebox.h" - -#include - -CFWL_PictureBox* CFWL_PictureBox::Create() { - return new CFWL_PictureBox; -} -FWL_ERR CFWL_PictureBox::Initialize(const CFWL_WidgetProperties* pProperties) { - if (m_pIface) - return FWL_ERR_Indefinite; - if (pProperties) { - *m_pProperties = *pProperties; - } - std::unique_ptr pPictureBox(IFWL_PictureBox::Create( - m_pProperties->MakeWidgetImpProperties(&m_PictureBoxDP), nullptr)); - FWL_ERR ret = pPictureBox->Initialize(); - if (ret != FWL_ERR_Succeeded) { - return ret; - } - m_pIface = pPictureBox.release(); - CFWL_Widget::Initialize(); - return FWL_ERR_Succeeded; -} -CFX_DIBitmap* CFWL_PictureBox::GetPicture() { - return m_PictureBoxDP.m_pBitmap; -} -FWL_ERR CFWL_PictureBox::SetPicture(CFX_DIBitmap* pBitmap) { - m_PictureBoxDP.m_pBitmap = pBitmap; - return FWL_ERR_Succeeded; -} -FX_FLOAT CFWL_PictureBox::GetRotation() { - return m_PictureBoxDP.m_fRotation; -} -FWL_ERR CFWL_PictureBox::SetRotation(FX_FLOAT fRotation) { - m_PictureBoxDP.m_fRotation = fRotation; - return FWL_ERR_Succeeded; -} -int32_t CFWL_PictureBox::GetFlipMode() { - return m_PictureBoxDP.GetFlipMode(m_pIface); -} -FWL_ERR CFWL_PictureBox::SetFlipMode(int32_t iFlipMode) { - m_PictureBoxDP.m_iFlipMode = iFlipMode; - return FWL_ERR_Succeeded; -} -int32_t CFWL_PictureBox::GetOpacity() { - return m_PictureBoxDP.GetOpacity(m_pIface); -} -FWL_ERR CFWL_PictureBox::SetOpacity(int32_t iOpacity) { - m_PictureBoxDP.m_iOpacity = iOpacity; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_PictureBox::GetScale(FX_FLOAT& fScaleX, FX_FLOAT& fScaleY) { - CFX_Matrix matrix; - m_PictureBoxDP.GetMatrix(m_pIface, matrix); - matrix.Scale(fScaleX, fScaleY); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_PictureBox::SetScale(FX_FLOAT fScaleX, FX_FLOAT fScaleY) { - m_PictureBoxDP.m_fScaleX = fScaleX; - m_PictureBoxDP.m_fScaleY = fScaleY; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_PictureBox::GetOffset(FX_FLOAT& fx, FX_FLOAT& fy) { - CFX_Matrix matrix; - m_PictureBoxDP.GetMatrix(m_pIface, matrix); - fx = matrix.e; - fy = matrix.f; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_PictureBox::SetOffset(FX_FLOAT fx, FX_FLOAT fy) { - m_PictureBoxDP.m_fOffSetX = fx; - m_PictureBoxDP.m_fOffSetY = fy; - return FWL_ERR_Succeeded; -} -CFWL_PictureBox::CFWL_PictureBox() {} -CFWL_PictureBox::~CFWL_PictureBox() {} -FWL_ERR CFWL_PictureBox::CFWL_PictureBoxDP::GetCaption( - IFWL_Widget* pWidget, - CFX_WideString& wsCaption) { - return FWL_ERR_Succeeded; -} -CFX_DIBitmap* CFWL_PictureBox::CFWL_PictureBoxDP::GetPicture( - IFWL_Widget* pWidget) { - return m_pBitmap; -} -CFX_DIBitmap* CFWL_PictureBox::CFWL_PictureBoxDP::GetErrorPicture( - IFWL_Widget* pWidget) { - return m_pBitmap; -} -CFX_DIBitmap* CFWL_PictureBox::CFWL_PictureBoxDP::GetInitialPicture( - IFWL_Widget* pWidget) { - return m_pBitmap; -} -int32_t CFWL_PictureBox::CFWL_PictureBoxDP::GetOpacity(IFWL_Widget* pWidget) { - return m_iOpacity; -} -FWL_ERR CFWL_PictureBox::CFWL_PictureBoxDP::GetMatrix(IFWL_Widget* pWidget, - CFX_Matrix& matrix) { - CFX_RectF rect; - pWidget->GetClientRect(rect); - FX_FLOAT fLen = rect.width / 2; - FX_FLOAT fWid = rect.height / 2; - matrix.SetIdentity(); - matrix.Translate(-fLen, -fWid); - matrix.Rotate(m_fRotation); - matrix.Translate(fLen, fWid); - matrix.Scale(m_fScaleX, m_fScaleY); - matrix.Translate(m_fOffSetX, m_fOffSetY); - return FWL_ERR_Succeeded; -} -int32_t CFWL_PictureBox::CFWL_PictureBoxDP::GetFlipMode(IFWL_Widget* pWidget) { - return m_iFlipMode; -} diff --git a/xfa/src/fwl/lightwidget/pushbutton.cpp b/xfa/src/fwl/lightwidget/pushbutton.cpp deleted file mode 100644 index c9fb74e5f5..0000000000 --- a/xfa/src/fwl/lightwidget/pushbutton.cpp +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/include/fwl/lightwidget/pushbutton.h" - -#include - -CFWL_PushButton* CFWL_PushButton::Create() { - return new CFWL_PushButton; -} -FWL_ERR CFWL_PushButton::Initialize(const CFWL_WidgetProperties* pProperties) { - if (m_pIface) - return FWL_ERR_Indefinite; - if (pProperties) { - *m_pProperties = *pProperties; - } - std::unique_ptr pPushButton(IFWL_PushButton::Create( - m_pProperties->MakeWidgetImpProperties(&m_buttonData), nullptr)); - FWL_ERR ret = pPushButton->Initialize(); - if (ret != FWL_ERR_Succeeded) { - return ret; - } - m_pIface = pPushButton.release(); - CFWL_Widget::Initialize(); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_PushButton::GetCaption(CFX_WideString& wsCaption) { - wsCaption = m_buttonData.m_wsCaption; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_PushButton::SetCaption(const CFX_WideStringC& wsCaption) { - m_buttonData.m_wsCaption = wsCaption; - return FWL_ERR_Succeeded; -} -CFX_DIBitmap* CFWL_PushButton::GetPicture() { - return m_buttonData.m_pBitmap; -} -FWL_ERR CFWL_PushButton::SetPicture(CFX_DIBitmap* pBitmap) { - m_buttonData.m_pBitmap = pBitmap; - return FWL_ERR_Succeeded; -} -CFWL_PushButton::CFWL_PushButton() {} -CFWL_PushButton::~CFWL_PushButton() {} -FWL_ERR CFWL_PushButton::CFWL_PushButtonDP::GetCaption( - IFWL_Widget* pWidget, - CFX_WideString& wsCaption) { - wsCaption = m_wsCaption; - return FWL_ERR_Succeeded; -} -CFX_DIBitmap* CFWL_PushButton::CFWL_PushButtonDP::GetPicture( - IFWL_Widget* pWidget) { - return m_pBitmap; -} diff --git a/xfa/src/fwl/lightwidget/scrollbar.cpp b/xfa/src/fwl/lightwidget/scrollbar.cpp deleted file mode 100644 index cc927e724e..0000000000 --- a/xfa/src/fwl/lightwidget/scrollbar.cpp +++ /dev/null @@ -1,93 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/include/fwl/lightwidget/scrollbar.h" - -#include - -#include "xfa/include/fwl/basewidget/fwl_scrollbar.h" - -CFWL_ScrollBar* CFWL_ScrollBar::Create() { - return new CFWL_ScrollBar; -} -FWL_ERR CFWL_ScrollBar::Initialize(const CFWL_WidgetProperties* pProperties) { - if (m_pIface) - return FWL_ERR_Indefinite; - if (pProperties) { - *m_pProperties = *pProperties; - } - std::unique_ptr pScrollBar(IFWL_ScrollBar::Create( - m_pProperties->MakeWidgetImpProperties(nullptr), nullptr)); - FWL_ERR ret = pScrollBar->Initialize(); - if (ret != FWL_ERR_Succeeded) { - return ret; - } - m_pIface = pScrollBar.release(); - CFWL_Widget::Initialize(); - return FWL_ERR_Succeeded; -} -FX_BOOL CFWL_ScrollBar::IsVertical() { - if (!m_pIface) - return FALSE; - return static_cast(m_pIface)->IsVertical(); -} -FWL_ERR CFWL_ScrollBar::GetRange(FX_FLOAT& fMin, FX_FLOAT& fMax) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return static_cast(m_pIface)->GetRange(fMin, fMax); -} -FWL_ERR CFWL_ScrollBar::SetRange(FX_FLOAT fMin, FX_FLOAT fMax) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return static_cast(m_pIface)->SetRange(fMin, fMax); -} -FX_FLOAT CFWL_ScrollBar::GetPageSize() { - if (!m_pIface) - return 0; - return static_cast(m_pIface)->GetPageSize(); -} -FWL_ERR CFWL_ScrollBar::SetPageSize(FX_FLOAT fPageSize) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return static_cast(m_pIface)->SetPageSize(fPageSize); -} -FX_FLOAT CFWL_ScrollBar::GetStepSize() { - if (!m_pIface) - return 0; - return static_cast(m_pIface)->GetStepSize(); -} -FWL_ERR CFWL_ScrollBar::SetStepSize(FX_FLOAT fStepSize) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return static_cast(m_pIface)->SetStepSize(fStepSize); -} -FX_FLOAT CFWL_ScrollBar::GetPos() { - if (!m_pIface) - return -1; - return static_cast(m_pIface)->GetPos(); -} -FWL_ERR CFWL_ScrollBar::SetPos(FX_FLOAT fPos) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return static_cast(m_pIface)->SetPos(fPos); -} -FX_FLOAT CFWL_ScrollBar::GetTrackPos() { - if (!m_pIface) - return -1; - return static_cast(m_pIface)->GetTrackPos(); -} -FWL_ERR CFWL_ScrollBar::SetTrackPos(FX_FLOAT fTrackPos) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return static_cast(m_pIface)->SetTrackPos(fTrackPos); -} -FX_BOOL CFWL_ScrollBar::DoScroll(FX_DWORD dwCode, FX_FLOAT fPos) { - if (!m_pIface) - return FALSE; - return static_cast(m_pIface)->DoScroll(dwCode, fPos); -} -CFWL_ScrollBar::CFWL_ScrollBar() {} -CFWL_ScrollBar::~CFWL_ScrollBar() {} diff --git a/xfa/src/fwl/lightwidget/theme.cpp b/xfa/src/fwl/lightwidget/theme.cpp deleted file mode 100644 index fe9f55928b..0000000000 --- a/xfa/src/fwl/lightwidget/theme.cpp +++ /dev/null @@ -1,135 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/include/fwl/lightwidget/theme.h" - -#include - -#include "xfa/include/fwl/theme/barcodetp.h" -#include "xfa/include/fwl/theme/carettp.h" -#include "xfa/include/fwl/theme/checkboxtp.h" -#include "xfa/include/fwl/theme/comboboxtp.h" -#include "xfa/include/fwl/theme/datetimepickertp.h" -#include "xfa/include/fwl/theme/edittp.h" -#include "xfa/include/fwl/theme/formtp.h" -#include "xfa/include/fwl/theme/listboxtp.h" -#include "xfa/include/fwl/theme/monthcalendartp.h" -#include "xfa/include/fwl/theme/pictureboxtp.h" -#include "xfa/include/fwl/theme/pushbuttontp.h" -#include "xfa/include/fwl/theme/scrollbartp.h" - -CFWL_Theme::CFWL_Theme() { - m_ThemesArray.push_back(std::unique_ptr(new CFWL_FormTP)); - m_ThemesArray.push_back( - std::unique_ptr(new CFWL_PushButtonTP)); - m_ThemesArray.push_back(std::unique_ptr(new CFWL_CheckBoxTP)); - m_ThemesArray.push_back(std::unique_ptr(new CFWL_ListBoxTP)); - m_ThemesArray.push_back( - std::unique_ptr(new CFWL_PictureBoxTP)); - m_ThemesArray.push_back(std::unique_ptr(new CFWL_ScrollBarTP)); - m_ThemesArray.push_back(std::unique_ptr(new CFWL_EditTP)); - m_ThemesArray.push_back(std::unique_ptr(new CFWL_ComboBoxTP)); - m_ThemesArray.push_back(std::unique_ptr(new CFWL_BarcodeTP)); - m_ThemesArray.push_back( - std::unique_ptr(new CFWL_DateTimePickerTP)); - m_ThemesArray.push_back( - std::unique_ptr(new CFWL_MonthCalendarTP)); - m_ThemesArray.push_back(std::unique_ptr(new CFWL_CaretTP)); -} - -CFWL_Theme::~CFWL_Theme() {} - -FX_BOOL CFWL_Theme::IsValidWidget(IFWL_Widget* pWidget) { - return !!GetTheme(pWidget); -} - -FX_DWORD CFWL_Theme::GetThemeID(IFWL_Widget* pWidget) { - return GetTheme(pWidget)->GetThemeID(pWidget); -} - -FX_DWORD CFWL_Theme::SetThemeID(IFWL_Widget* pWidget, - FX_DWORD dwThemeID, - FX_BOOL bChildren) { - FX_DWORD dwID; - for (const auto& pTheme : m_ThemesArray) { - dwID = pTheme->GetThemeID(pWidget); - pTheme->SetThemeID(pWidget, dwThemeID, FALSE); - } - return dwID; -} - -FWL_ERR CFWL_Theme::GetThemeMatrix(IFWL_Widget* pWidget, CFX_Matrix& matrix) { - return FWL_ERR_Succeeded; -} - -FWL_ERR CFWL_Theme::SetThemeMatrix(IFWL_Widget* pWidget, - const CFX_Matrix& matrix) { - return FWL_ERR_Succeeded; -} - -FX_BOOL CFWL_Theme::DrawBackground(CFWL_ThemeBackground* pParams) { - return GetTheme(pParams->m_pWidget)->DrawBackground(pParams); -} - -FX_BOOL CFWL_Theme::DrawText(CFWL_ThemeText* pParams) { - return GetTheme(pParams->m_pWidget)->DrawText(pParams); -} - -void* CFWL_Theme::GetCapacity(CFWL_ThemePart* pThemePart, FX_DWORD dwCapacity) { - return GetTheme(pThemePart->m_pWidget)->GetCapacity(pThemePart, dwCapacity); -} - -FX_BOOL CFWL_Theme::IsCustomizedLayout(IFWL_Widget* pWidget) { - return GetTheme(pWidget)->IsCustomizedLayout(pWidget); -} - -FWL_ERR CFWL_Theme::GetPartRect(CFWL_ThemePart* pThemePart, CFX_RectF& rtPart) { - return GetTheme(pThemePart->m_pWidget)->GetPartRect(pThemePart, rtPart); -} - -FX_BOOL CFWL_Theme::IsInPart(CFWL_ThemePart* pThemePart, - FX_FLOAT fx, - FX_FLOAT fy) { - return GetTheme(pThemePart->m_pWidget)->IsInPart(pThemePart, fx, fy); -} - -FX_BOOL CFWL_Theme::CalcTextRect(CFWL_ThemeText* pParams, CFX_RectF& rect) { - return GetTheme(pParams->m_pWidget)->CalcTextRect(pParams, rect); -} - -FWL_ERR CFWL_Theme::Initialize() { - for (const auto& pTheme : m_ThemesArray) - pTheme->Initialize(); - - FWLTHEME_Init(); - return FWL_ERR_Succeeded; -} - -FWL_ERR CFWL_Theme::Finalize() { - for (const auto& pTheme : m_ThemesArray) - pTheme->Finalize(); - - FWLTHEME_Release(); - return FWL_ERR_Succeeded; -} - -FWL_ERR CFWL_Theme::SetFont(IFWL_Widget* pWidget, - const FX_WCHAR* strFont, - FX_FLOAT fFontSize, - FX_ARGB rgbFont) { - for (const auto& pTheme : m_ThemesArray) - pTheme->SetFont(pWidget, strFont, fFontSize, rgbFont); - - return FWL_ERR_Succeeded; -} - -CFWL_WidgetTP* CFWL_Theme::GetTheme(IFWL_Widget* pWidget) { - for (const auto& pTheme : m_ThemesArray) { - if (pTheme->IsValidWidget(pWidget)) - return pTheme.get(); - } - return nullptr; -} diff --git a/xfa/src/fwl/lightwidget/tooltipctrl.cpp b/xfa/src/fwl/lightwidget/tooltipctrl.cpp deleted file mode 100644 index 5a308c4c84..0000000000 --- a/xfa/src/fwl/lightwidget/tooltipctrl.cpp +++ /dev/null @@ -1,111 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/include/fwl/lightwidget/tooltipctrl.h" - -#include - -#include "xfa/src/fwl/core/fwl_formimp.h" -#include "xfa/src/fwl/core/fwl_noteimp.h" -#include "xfa/src/fwl/core/fwl_panelimp.h" -#include "xfa/src/fwl/core/fwl_targetimp.h" -#include "xfa/src/fwl/core/fwl_threadimp.h" -#include "xfa/src/fwl/core/fwl_widgetimp.h" - -CFWL_ToolTip* CFWL_ToolTip::Create() { - return new CFWL_ToolTip; -} -FWL_ERR CFWL_ToolTip::Initialize(const CFWL_WidgetProperties* pProperties) { - if (m_pIface) - return FWL_ERR_Indefinite; - if (pProperties) { - *m_pProperties = *pProperties; - } - std::unique_ptr pToolTip(IFWL_ToolTip::Create( - m_pProperties->MakeWidgetImpProperties(&m_tooltipData), nullptr)); - FWL_ERR ret = pToolTip->Initialize(); - if (ret != FWL_ERR_Succeeded) { - return ret; - } - m_pIface = pToolTip.release(); - CFWL_Widget::Initialize(); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ToolTip::GetCaption(CFX_WideString& wsCaption) { - wsCaption = m_tooltipData.m_wsCaption; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ToolTip::SetCaption(const CFX_WideStringC& wsCaption) { - m_tooltipData.m_wsCaption = wsCaption; - return FWL_ERR_Succeeded; -} -int32_t CFWL_ToolTip::GetInitialDelay() { - return m_tooltipData.m_nInitDelayTime; -} -int32_t CFWL_ToolTip::SetInitialDelay(int32_t nDelayTime) { - m_tooltipData.m_nInitDelayTime = nDelayTime; - return FWL_ERR_Succeeded; -} -int32_t CFWL_ToolTip::GetAutoPopDelay() { - return m_tooltipData.m_nAutoPopDelayTime; -} -int32_t CFWL_ToolTip::SetAutoPopDelay(int32_t nDelayTime) { - m_tooltipData.m_nAutoPopDelayTime = nDelayTime; - return FWL_ERR_Succeeded; -} -CFX_DIBitmap* CFWL_ToolTip::GetToolTipIcon() { - return m_tooltipData.m_pBitmap; -} -FWL_ERR CFWL_ToolTip::SetToolTipIcon(CFX_DIBitmap* pBitmap) { - m_tooltipData.m_pBitmap = pBitmap; - return FWL_ERR_Succeeded; -} -CFX_SizeF CFWL_ToolTip::GetToolTipIconSize() { - return m_tooltipData.m_fIconSize; -} -FWL_ERR CFWL_ToolTip::SetToolTipIconSize(CFX_SizeF fSize) { - m_tooltipData.m_fIconSize = fSize; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ToolTip::SetAnchor(const CFX_RectF& rtAnchor) { - return static_cast(m_pIface)->SetAnchor(rtAnchor); -} -FWL_ERR CFWL_ToolTip::Show() { - return static_cast(m_pIface)->Show(); -} -FWL_ERR CFWL_ToolTip::Hide() { - return static_cast(m_pIface)->Hide(); -} -CFWL_ToolTip::CFWL_ToolTip() {} -CFWL_ToolTip::~CFWL_ToolTip() {} -CFWL_ToolTip::CFWL_ToolTipDP::CFWL_ToolTipDP() : m_pBitmap(NULL) { - m_wsCaption = L""; - m_nInitDelayTime = 500; - m_nAutoPopDelayTime = 50000; - m_fAnchor.Set(0.0, 0.0, 0.0, 0.0); -} -FWL_ERR CFWL_ToolTip::CFWL_ToolTipDP::GetCaption(IFWL_Widget* pWidget, - CFX_WideString& wsCaption) { - wsCaption = m_wsCaption; - return FWL_ERR_Succeeded; -} -int32_t CFWL_ToolTip::CFWL_ToolTipDP::GetInitialDelay(IFWL_Widget* pWidget) { - return m_nInitDelayTime; -} -int32_t CFWL_ToolTip::CFWL_ToolTipDP::GetAutoPopDelay(IFWL_Widget* pWidget) { - return m_nAutoPopDelayTime; -} -CFX_DIBitmap* CFWL_ToolTip::CFWL_ToolTipDP::GetToolTipIcon( - IFWL_Widget* pWidget) { - return m_pBitmap; -} -CFX_SizeF CFWL_ToolTip::CFWL_ToolTipDP::GetToolTipIconSize( - IFWL_Widget* pWidget) { - return m_fIconSize; -} -CFX_RectF CFWL_ToolTip::CFWL_ToolTipDP::GetAnchor() { - return m_fAnchor; -} diff --git a/xfa/src/fwl/lightwidget/widget.cpp b/xfa/src/fwl/lightwidget/widget.cpp deleted file mode 100644 index 58fb2a71d1..0000000000 --- a/xfa/src/fwl/lightwidget/widget.cpp +++ /dev/null @@ -1,318 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/include/fwl/lightwidget/widget.h" - -#include "xfa/include/fwl/core/fwl_theme.h" -#include "xfa/include/fwl/core/fwl_thread.h" -#include "xfa/src/fde/tto/fde_textout.h" -#include "xfa/src/fwl/core/fwl_noteimp.h" -#include "xfa/src/fwl/core/fwl_noteimp.h" -#include "xfa/src/fwl/core/fwl_targetimp.h" -#include "xfa/src/fwl/core/fwl_widgetimp.h" -#include "xfa/src/fwl/core/fwl_widgetmgrimp.h" - -CFWL_WidgetImpProperties CFWL_WidgetProperties::MakeWidgetImpProperties( - IFWL_DataProvider* pDataProvider) const { - CFWL_WidgetImpProperties result; - result.m_ctmOnParent = m_ctmOnParent; - result.m_rtWidget = m_rtWidget; - result.m_dwStyles = m_dwStyles; - result.m_dwStyleExes = m_dwStyleExes; - result.m_dwStates = m_dwStates; - if (m_pParent) - result.m_pParent = m_pParent->GetWidget(); - if (m_pOwner) - result.m_pOwner = m_pOwner->GetWidget(); - result.m_pDataProvider = pDataProvider; - return result; -} -IFWL_Widget* CFWL_Widget::GetWidget() { - return m_pIface; -} -FWL_ERR CFWL_Widget::GetClassName(CFX_WideString& wsClass) const { - if (!m_pIface) - return FWL_ERR_Indefinite; - return m_pIface->GetClassName(wsClass); -} -FX_DWORD CFWL_Widget::GetClassID() const { - if (!m_pIface) - return 0; - return m_pIface->GetClassID(); -} -FX_BOOL CFWL_Widget::IsInstance(const CFX_WideStringC& wsClass) const { - if (!m_pIface) - return FALSE; - return m_pIface->IsInstance(wsClass); -} -static void* gs_pFWLWidget = (void*)FXBSTR_ID('l', 'i', 'g', 't'); -FWL_ERR CFWL_Widget::Initialize(const CFWL_WidgetProperties* pProperties) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return m_pIface->SetPrivateData(gs_pFWLWidget, this, NULL); -} -FWL_ERR CFWL_Widget::GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return m_pIface->GetWidgetRect(rect, bAutoSize); -} -FWL_ERR CFWL_Widget::GetGlobalRect(CFX_RectF& rect) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return m_pIface->GetGlobalRect(rect); -} -FWL_ERR CFWL_Widget::SetWidgetRect(const CFX_RectF& rect) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return m_pIface->SetWidgetRect(rect); -} -FWL_ERR CFWL_Widget::GetClientRect(CFX_RectF& rect) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return m_pIface->GetClientRect(rect); -} -CFWL_Widget* CFWL_Widget::GetParent() { - if (!m_pIface) - return NULL; - IFWL_Widget* parent = m_pIface->GetParent(); - if (parent) { - return static_cast(parent->GetPrivateData(gs_pFWLWidget)); - } - return NULL; -} -FWL_ERR CFWL_Widget::SetParent(CFWL_Widget* pParent) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return m_pIface->SetParent(pParent ? pParent->GetWidget() : NULL); -} -CFWL_Widget* CFWL_Widget::GetOwner() { - if (!m_pIface) - return NULL; - return NULL; -} -FWL_ERR CFWL_Widget::SetOwner(CFWL_Widget* pOwner) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return FWL_ERR_Succeeded; -} -FX_DWORD CFWL_Widget::GetStyles() { - if (!m_pIface) - return 0; - return m_pIface->GetStyles(); -} -FWL_ERR CFWL_Widget::ModifyStyles(FX_DWORD dwStylesAdded, - FX_DWORD dwStylesRemoved) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return m_pIface->ModifyStyles(dwStylesAdded, dwStylesRemoved); -} -FX_DWORD CFWL_Widget::GetStylesEx() { - if (!m_pIface) - return 0; - return m_pIface->GetStylesEx(); -} -FWL_ERR CFWL_Widget::ModifyStylesEx(FX_DWORD dwStylesExAdded, - FX_DWORD dwStylesExRemoved) { - return m_pIface->ModifyStylesEx(dwStylesExAdded, dwStylesExRemoved); -} -FX_DWORD CFWL_Widget::GetStates() { - if (!m_pIface) - return FWL_ERR_Indefinite; - return m_pIface->GetStates(); -} -FWL_ERR CFWL_Widget::SetStates(FX_DWORD dwStates, FX_BOOL bSet) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return m_pIface->SetStates(dwStates, bSet); -} -FWL_ERR CFWL_Widget::SetPrivateData(void* module_id, - void* pData, - PD_CALLBACK_FREEDATA callback) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return m_pIface->SetPrivateData(module_id, pData, callback); -} -void* CFWL_Widget::GetPrivateData(void* module_id) { - if (!m_pIface) - return NULL; - return m_pIface->GetPrivateData(module_id); -} -FWL_ERR CFWL_Widget::Update() { - if (!m_pIface) - return FWL_ERR_Indefinite; - return m_pIface->Update(); -} -FWL_ERR CFWL_Widget::LockUpdate() { - if (!m_pIface) - return FWL_ERR_Indefinite; - return m_pIface->LockUpdate(); -} -FWL_ERR CFWL_Widget::UnlockUpdate() { - if (!m_pIface) - return FWL_ERR_Indefinite; - return m_pIface->UnlockUpdate(); -} -FX_DWORD CFWL_Widget::HitTest(FX_FLOAT fx, FX_FLOAT fy) { - if (!m_pIface) - return 0; - return m_pIface->HitTest(fx, fy); -} -FWL_ERR CFWL_Widget::TransformTo(CFWL_Widget* pWidget, - FX_FLOAT& fx, - FX_FLOAT& fy) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return m_pIface->TransformTo(pWidget ? pWidget->GetWidget() : NULL, fx, fy); -} -FWL_ERR CFWL_Widget::TransformTo(CFWL_Widget* pWidget, CFX_RectF& rt) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return m_pIface->TransformTo(pWidget ? pWidget->GetWidget() : NULL, rt); -} -FWL_ERR CFWL_Widget::GetMatrix(CFX_Matrix& matrix, FX_BOOL bGlobal) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return m_pIface->GetMatrix(matrix, bGlobal); -} -FWL_ERR CFWL_Widget::SetMatrix(const CFX_Matrix& matrix) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return m_pIface->SetMatrix(matrix); -} -FWL_ERR CFWL_Widget::DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return m_pIface->DrawWidget(pGraphics, pMatrix); -} -IFWL_WidgetDelegate* CFWL_Widget::SetDelegate(IFWL_WidgetDelegate* pDelegate) { - if (!m_pIface) - return NULL; - m_pDelegate = m_pIface->SetDelegate(pDelegate); - return m_pDelegate; -} -CFWL_Widget::CFWL_Widget() - : m_pIface(NULL), m_pDelegate(NULL), m_pProperties(NULL) { - m_pProperties = new CFWL_WidgetProperties; - m_pWidgetMgr = static_cast(FWL_GetWidgetMgr()); - FXSYS_assert(m_pWidgetMgr != NULL); -} -CFWL_Widget::~CFWL_Widget() { - delete m_pProperties; - if (m_pIface) { - m_pIface->Finalize(); - delete m_pIface; - } -} -FWL_ERR CFWL_Widget::Repaint(const CFX_RectF* pRect) { - if (!m_pIface) - return FWL_ERR_Indefinite; - CFX_RectF rect; - if (pRect) { - rect = *pRect; - } else { - m_pIface->GetWidgetRect(rect); - rect.left = rect.top = 0; - } - return m_pWidgetMgr->RepaintWidget(m_pIface, &rect); -} -FWL_ERR CFWL_Widget::SetFocus(FX_BOOL bFocus) { - if (!m_pIface) - return FWL_ERR_Indefinite; - IFWL_NoteThread* pThread = m_pIface->GetOwnerThread(); - if (!pThread) - return FWL_ERR_Indefinite; - IFWL_NoteDriver* pDriver = pThread->GetNoteDriver(); - if (!pDriver) - return FWL_ERR_Indefinite; - if (bFocus) { - pDriver->SetFocus(m_pIface); - } else { - if (pDriver->GetFocus() == m_pIface) { - pDriver->SetFocus(NULL); - } - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_Widget::SetGrab(FX_BOOL bSet) { - if (!m_pIface) - return FWL_ERR_Indefinite; - IFWL_NoteThread* pThread = m_pIface->GetOwnerThread(); - if (!pThread) - return FWL_ERR_Indefinite; - IFWL_NoteDriver* pDriver = pThread->GetNoteDriver(); - if (!pDriver) - return FWL_ERR_Indefinite; - pDriver->SetGrab(m_pIface, bSet); - return FWL_ERR_Succeeded; -} -void CFWL_Widget::RegisterEventTarget(CFWL_Widget* pEventSource, - FX_DWORD dwFilter) { - if (!m_pIface) - return; - IFWL_NoteThread* pThread = m_pIface->GetOwnerThread(); - if (!pThread) - return; - IFWL_NoteDriver* pNoteDriver = pThread->GetNoteDriver(); - if (!pNoteDriver) - return; - IFWL_Widget* pEventSourceImp = - !pEventSource ? NULL : pEventSource->GetWidget(); - pNoteDriver->RegisterEventTarget(GetWidget(), pEventSourceImp, dwFilter); -} -void CFWL_Widget::DispatchEvent(CFWL_Event* pEvent) { - if (!m_pIface) - return; - if (m_pIface->GetOuter()) { - return; - } - IFWL_NoteThread* pThread = m_pIface->GetOwnerThread(); - if (!pThread) - return; - IFWL_NoteDriver* pNoteDriver = pThread->GetNoteDriver(); - if (!pNoteDriver) - return; - pNoteDriver->SendNote(pEvent); -} -#define FWL_WGT_CalcHeight 2048 -#define FWL_WGT_CalcWidth 2048 -#define FWL_WGT_CalcMultiLineDefWidth 120.0f -CFX_SizeF CFWL_Widget::CalcTextSize(const CFX_WideString& wsText, - FX_BOOL bMultiLine, - int32_t iLineWidth) { - if (!m_pIface) - return CFX_SizeF(); - IFWL_ThemeProvider* pTheme = m_pIface->GetThemeProvider(); - if (!pTheme) - return CFX_SizeF(); - - CFWL_ThemeText calPart; - calPart.m_pWidget = m_pIface; - calPart.m_wsText = wsText; - calPart.m_dwTTOStyles = - bMultiLine ? FDE_TTOSTYLE_LineWrap : FDE_TTOSTYLE_SingleLine; - calPart.m_iTTOAlign = FDE_TTOALIGNMENT_TopLeft; - CFX_RectF rect; - FX_FLOAT fWidth = bMultiLine - ? (iLineWidth > 0 ? (FX_FLOAT)iLineWidth - : FWL_WGT_CalcMultiLineDefWidth) - : FWL_WGT_CalcWidth; - rect.Set(0, 0, fWidth, FWL_WGT_CalcHeight); - pTheme->CalcTextRect(&calPart, rect); - return CFX_SizeF(rect.width, rect.height); -} -CFWL_WidgetDelegate::CFWL_WidgetDelegate() {} -CFWL_WidgetDelegate::~CFWL_WidgetDelegate() {} -int32_t CFWL_WidgetDelegate::OnProcessMessage(CFWL_Message* pMessage) { - return 1; -} -FWL_ERR CFWL_WidgetDelegate::OnProcessEvent(CFWL_Event* pEvent) { - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_WidgetDelegate::OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - return FWL_ERR_Succeeded; -} diff --git a/xfa/src/fwl/theme/barcodetp.cpp b/xfa/src/fwl/theme/barcodetp.cpp deleted file mode 100644 index 477ce99d9b..0000000000 --- a/xfa/src/fwl/theme/barcodetp.cpp +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/include/fwl/theme/barcodetp.h" - -#include "xfa/include/fwl/basewidget/fwl_barcode.h" -#include "xfa/include/fwl/core/fwl_theme.h" -#include "xfa/include/fwl/core/fwl_widget.h" - -CFWL_BarcodeTP::CFWL_BarcodeTP() {} -CFWL_BarcodeTP::~CFWL_BarcodeTP() {} - -FX_BOOL CFWL_BarcodeTP::IsValidWidget(IFWL_Widget* pWidget) { - if (!pWidget) - return FALSE; - return pWidget->GetClassID() == FWL_CLASSHASH_Barcode; -} -FX_BOOL CFWL_BarcodeTP::DrawBackground(CFWL_ThemeBackground* pParams) { - if (!pParams) - return FALSE; - switch (pParams->m_iPart) { - case FWL_PART_BCD_Border: { - DrawBorder(pParams->m_pGraphics, &pParams->m_rtPart, &pParams->m_matrix); - break; - } - case FWL_PART_BCD_Edge: { - DrawEdge(pParams->m_pGraphics, pParams->m_pWidget->GetStyles(), - &pParams->m_rtPart, &pParams->m_matrix); - break; - } - case FWL_PART_BCD_Background: { - FillBackground(pParams->m_pGraphics, &pParams->m_rtPart, - &pParams->m_matrix); - break; - } - default: {} - } - return TRUE; -} diff --git a/xfa/src/fwl/theme/carettp.cpp b/xfa/src/fwl/theme/carettp.cpp deleted file mode 100644 index 88b01d9f3d..0000000000 --- a/xfa/src/fwl/theme/carettp.cpp +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/include/fwl/theme/carettp.h" - -#include "xfa/include/fwl/basewidget/fwl_caret.h" -#include "xfa/include/fwl/core/fwl_widget.h" - -CFWL_CaretTP::CFWL_CaretTP() {} -CFWL_CaretTP::~CFWL_CaretTP() {} - -FX_BOOL CFWL_CaretTP::IsValidWidget(IFWL_Widget* pWidget) { - if (!pWidget) - return FALSE; - return pWidget->GetClassID() == FWL_CLASSHASH_Caret; -} -FX_BOOL CFWL_CaretTP::DrawBackground(CFWL_ThemeBackground* pParams) { - if (!pParams) - return FALSE; - switch (pParams->m_iPart) { - case FWL_PART_CAT_Background: { - if (!(pParams->m_dwStates & FWL_PARTSTATE_CAT_HightLight)) { - return TRUE; - } - DrawCaretBK(pParams->m_pGraphics, pParams->m_dwStates, - &(pParams->m_rtPart), (CFX_Color*)pParams->m_pData, - &(pParams->m_matrix)); - break; - } - } - return TRUE; -} -void CFWL_CaretTP::DrawCaretBK(CFX_Graphics* pGraphics, - FX_DWORD dwStates, - const CFX_RectF* pRect, - CFX_Color* crFill, - CFX_Matrix* pMatrix) { - CFX_Path path; - path.Create(); - CFX_Color crFilltemp; - crFill ? crFilltemp = *crFill : crFilltemp = ArgbEncode(255, 0, 0, 0); - CFX_RectF rect = *pRect; - path.AddRectangle(rect.left, rect.top, rect.width, rect.height); - pGraphics->SetFillColor(&crFilltemp); - pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix); -} diff --git a/xfa/src/fwl/theme/checkboxtp.cpp b/xfa/src/fwl/theme/checkboxtp.cpp deleted file mode 100644 index ccad2bc733..0000000000 --- a/xfa/src/fwl/theme/checkboxtp.cpp +++ /dev/null @@ -1,532 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/include/fwl/theme/checkboxtp.h" - -#include "xfa/include/fwl/basewidget/fwl_checkbox.h" -#include "xfa/include/fwl/core/fwl_widget.h" -#include "xfa/src/fde/tto/fde_textout.h" - -#define CHECKBOX_SIZE_SIGNMARGIN 3 -#define CHECKBOX_SIZE_SIGNBORDER 2 -#define CHECKBOX_SIZE_SIGNPATH 100 -#define CHECKBOX_COLOR_BOXLT1 (ArgbEncode(255, 172, 168, 153)) -#define CHECKBOX_COLOR_BOXLT2 (ArgbEncode(255, 113, 111, 100)) -#define CHECKBOX_COLOR_BOXRB1 (ArgbEncode(255, 241, 239, 226)) -#define CHECKBOX_COLOR_BOXRB2 (ArgbEncode(255, 255, 255, 255)) -#define CHECKBOX_FXGE_CoordinatesAdjust - -CFWL_CheckBoxTP::CFWL_CheckBoxTP() : m_pCheckPath(NULL) { - m_pThemeData = new CKBThemeData; - SetThemeData(0); -} -CFWL_CheckBoxTP::~CFWL_CheckBoxTP() { - if (m_pThemeData) { - delete m_pThemeData; - m_pThemeData = NULL; - } - if (m_pCheckPath) { - m_pCheckPath->Clear(); - delete m_pCheckPath; - m_pCheckPath = NULL; - } -} -FX_BOOL CFWL_CheckBoxTP::IsValidWidget(IFWL_Widget* pWidget) { - return pWidget && pWidget->GetClassID() == FWL_CLASSHASH_CheckBox; -} -FX_DWORD CFWL_CheckBoxTP::SetThemeID(IFWL_Widget* pWidget, - FX_DWORD dwThemeID, - FX_BOOL bChildren) { - if (m_pThemeData) { - SetThemeData(FWL_GetThemeColor(dwThemeID)); - } - return CFWL_WidgetTP::SetThemeID(pWidget, dwThemeID, bChildren); -} -FX_BOOL CFWL_CheckBoxTP::DrawText(CFWL_ThemeText* pParams) { - if (!m_pTextOut) - return FALSE; - m_pTextOut->SetTextColor((pParams->m_dwStates & FWL_PARTSTATE_CKB_Mask1) == - FWL_PARTSTATE_CKB_Disabled - ? FWLTHEME_CAPACITY_TextDisColor - : FWLTHEME_CAPACITY_TextColor); - return CFWL_WidgetTP::DrawText(pParams); -} -FX_BOOL CFWL_CheckBoxTP::DrawBackground(CFWL_ThemeBackground* pParams) { - if (!pParams) - return FALSE; - switch (pParams->m_iPart) { - case FWL_PART_CKB_Border: { - DrawBorder(pParams->m_pGraphics, &pParams->m_rtPart, &pParams->m_matrix); - break; - } - case FWL_PART_CKB_Edge: { - DrawEdge(pParams->m_pGraphics, pParams->m_pWidget->GetStyles(), - &pParams->m_rtPart, &pParams->m_matrix); - break; - } - case FWL_PART_CKB_Background: { - FillBackground(pParams->m_pGraphics, &pParams->m_rtPart, - &pParams->m_matrix); - if (pParams->m_dwStates & FWL_PARTSTATE_CKB_Focused) { - pParams->m_rtPart = *(CFX_RectF*)pParams->m_pData; - DrawFocus(pParams->m_pGraphics, &pParams->m_rtPart, &pParams->m_matrix); - } - break; - } - case FWL_PART_CKB_CheckBox: { - DrawBoxBk(pParams->m_pWidget, pParams->m_pGraphics, &pParams->m_rtPart, - pParams->m_dwStates, &pParams->m_matrix); - if (((pParams->m_dwStates & FWL_PARTSTATE_CKB_Mask2) == - FWL_PARTSTATE_CKB_Checked) | - ((pParams->m_dwStates & FWL_PARTSTATE_CKB_Mask2) == - FWL_PARTSTATE_CKB_Neutral)) { - DrawSign(pParams->m_pWidget, pParams->m_pGraphics, &pParams->m_rtPart, - pParams->m_dwStates, &pParams->m_matrix); - } - FX_BOOL bDisable = (pParams->m_dwStates & FWL_PARTSTATE_CKB_Mask1) == - FWL_PARTSTATE_CKB_Disabled; - DrawSignBorder(pParams->m_pWidget, pParams->m_pGraphics, - &pParams->m_rtPart, bDisable, &pParams->m_matrix); - break; - } - default: { return FALSE; } - } - return TRUE; -} -FWL_ERR CFWL_CheckBoxTP::Initialize() { - InitTTO(); - return CFWL_WidgetTP::Initialize(); -} -FWL_ERR CFWL_CheckBoxTP::Finalize() { - FinalizeTTO(); - return CFWL_WidgetTP::Finalize(); -} -void CFWL_CheckBoxTP::DrawBoxBk(IFWL_Widget* pWidget, - CFX_Graphics* pGraphics, - const CFX_RectF* pRect, - FX_DWORD dwStates, - CFX_Matrix* pMatrix) { - dwStates &= 0x03; - int32_t fillMode = FXFILL_WINDING; - FX_DWORD dwStyleEx = pWidget->GetStylesEx(); - dwStyleEx &= FWL_STYLEEXT_CKB_ShapeMask; - CFX_Path path; - path.Create(); - FX_FLOAT fRight = pRect->right(); - FX_FLOAT fBottom = pRect->bottom(); - FX_BOOL bClipSign = - (dwStates & FWL_PARTSTATE_CKB_Mask1) == FWL_PARTSTATE_CKB_Hovered; - if ((dwStyleEx == FWL_STYLEEXT_CKB_ShapeSolidSquare) || - (dwStyleEx == FWL_STYLEEXT_CKB_ShapeSunkenSquare)) { - path.AddRectangle(pRect->left, pRect->top, pRect->width, pRect->height); - if (bClipSign) { - fillMode = FXFILL_ALTERNATE; - path.AddRectangle(pRect->left + CHECKBOX_SIZE_SIGNMARGIN, - pRect->top + CHECKBOX_SIZE_SIGNMARGIN, - pRect->width - CHECKBOX_SIZE_SIGNMARGIN * 2, - pRect->height - CHECKBOX_SIZE_SIGNMARGIN * 2); - } - } else { -#ifdef CHECKBOX_FXGE_CoordinatesAdjust - CFX_RectF rect(*pRect); - rect.Deflate(0, 0, 1, 1); - path.AddEllipse(rect); -#else - path.AddEllipse(*pRect); -#endif - if (bClipSign) { - fillMode = FXFILL_ALTERNATE; -#ifdef CHECKBOX_FXGE_CoordinatesAdjust - CFX_RectF rtClip(rect); -#else - CFX_RectF rtClip(*pRect); -#endif - rtClip.Deflate(CHECKBOX_SIZE_SIGNMARGIN - 1, - CHECKBOX_SIZE_SIGNMARGIN - 1); - path.AddEllipse(rtClip); - } - } - int32_t iTheme = 1; - if ((dwStates & FWL_PARTSTATE_CKB_Mask1) == FWL_PARTSTATE_CKB_Hovered) { - iTheme = 2; - } else if ((dwStates & FWL_PARTSTATE_CKB_Mask1) == - FWL_PARTSTATE_CKB_Pressed) { - iTheme = 3; - } else if ((dwStates & FWL_PARTSTATE_CKB_Mask1) == - FWL_PARTSTATE_CKB_Disabled) { - iTheme = 4; - } - if ((dwStates & FWL_PARTSTATE_CKB_Mask2) == FWL_PARTSTATE_CKB_Checked) { - iTheme += 4; - } else if ((dwStates & FWL_PARTSTATE_CKB_Mask2) == - FWL_PARTSTATE_CKB_Neutral) { - iTheme += 8; - } - DrawAxialShading(pGraphics, pRect->left - 1, pRect->top - 1, fRight, fBottom, - m_pThemeData->clrBoxBk[iTheme][0], - m_pThemeData->clrBoxBk[iTheme][1], &path, fillMode, pMatrix); -} -void CFWL_CheckBoxTP::DrawSign(IFWL_Widget* pWidget, - CFX_Graphics* pGraphics, - const CFX_RectF* pRtBox, - FX_DWORD dwStates, - CFX_Matrix* pMatrix) { - CFX_RectF rtSign(*pRtBox); - rtSign.Deflate(CHECKBOX_SIZE_SIGNMARGIN, CHECKBOX_SIZE_SIGNMARGIN); - FX_DWORD dwColor = m_pThemeData->clrSignCheck; - FX_BOOL bCheck = TRUE; - if (((dwStates & FWL_PARTSTATE_CKB_Mask1) == FWL_PARTSTATE_CKB_Disabled) && - ((dwStates & FWL_PARTSTATE_CKB_Mask2) == FWL_PARTSTATE_CKB_Checked)) { - dwColor = m_pThemeData->clrSignBorderDisable; - } else if ((dwStates & FWL_PARTSTATE_CKB_Mask2) == - FWL_PARTSTATE_CKB_Neutral) { - switch (dwStates & FWL_PARTSTATE_CKB_Mask1) { - case FWL_PARTSTATE_CKB_Normal: { - bCheck = FALSE; - dwColor = m_pThemeData->clrSignNeutralNormal; - break; - } - case FWL_PARTSTATE_CKB_Hovered: { - bCheck = FALSE; - dwColor = m_pThemeData->clrSignNeutralHover; - break; - } - case FWL_PARTSTATE_CKB_Pressed: { - bCheck = FALSE, dwColor = m_pThemeData->clrSignNeutralPressed; - break; - } - case FWL_PARTSTATE_CKB_Disabled: { - bCheck = FALSE, dwColor = m_pThemeData->clrSignBorderDisable; - break; - } - } - } - if (bCheck) { - FX_DWORD dwStyle = pWidget->GetStylesEx(); - switch (dwStyle & FWL_STYLEEXT_CKB_SignShapeMask) { - case FWL_STYLEEXT_CKB_SignShapeCheck: { - DrawSignCheck(pGraphics, &rtSign, dwColor, pMatrix); - break; - } - case FWL_STYLEEXT_CKB_SignShapeCircle: { - rtSign.Deflate(1, 1); - DrawSignCircle(pGraphics, &rtSign, dwColor, pMatrix); - break; - } - case FWL_STYLEEXT_CKB_SignShapeCross: { - DrawSignCross(pGraphics, &rtSign, dwColor, pMatrix); - break; - } - case FWL_STYLEEXT_CKB_SignShapeDiamond: { - DrawSignDiamond(pGraphics, &rtSign, dwColor, pMatrix); - break; - } - case FWL_STYLEEXT_CKB_SignShapeSquare: { - DrawSignSquare(pGraphics, &rtSign, dwColor, pMatrix); - break; - } - case FWL_STYLEEXT_CKB_SignShapeStar: { - DrawSignStar(pGraphics, &rtSign, dwColor, pMatrix); - break; - } - } - } else { - FillSoildRect(pGraphics, ArgbEncode(255, 33, 161, 33), &rtSign, pMatrix); - } -} -void CFWL_CheckBoxTP::DrawSignNeutral(CFX_Graphics* pGraphics, - const CFX_RectF* pRtSign, - CFX_Matrix* pMatrix) { - ((CFX_RectF*)pRtSign)->Inflate(-3, -3); - FillSoildRect(pGraphics, m_pThemeData->clrSignNeutral, pRtSign, pMatrix); -} -void CFWL_CheckBoxTP::DrawSignCheck(CFX_Graphics* pGraphics, - const CFX_RectF* pRtSign, - FX_ARGB argbFill, - CFX_Matrix* pMatrix) { - if (!m_pCheckPath) { - initCheckPath(pRtSign->width); - } - CFX_Matrix mt; - mt.SetIdentity(); - mt.Translate(pRtSign->left, pRtSign->top); - mt.Concat(*pMatrix); - CFX_Color crFill(argbFill); - pGraphics->SaveGraphState(); - pGraphics->SetFillColor(&crFill); - pGraphics->FillPath(m_pCheckPath, FXFILL_WINDING, &mt); - pGraphics->RestoreGraphState(); -} -void CFWL_CheckBoxTP::DrawSignCircle(CFX_Graphics* pGraphics, - const CFX_RectF* pRtSign, - FX_ARGB argbFill, - CFX_Matrix* pMatrix) { - CFX_Path path; - path.Create(); - path.AddEllipse(*pRtSign); - CFX_Color crFill(argbFill); - pGraphics->SaveGraphState(); - pGraphics->SetFillColor(&crFill); - pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix); - pGraphics->RestoreGraphState(); -} -void CFWL_CheckBoxTP::DrawSignCross(CFX_Graphics* pGraphics, - const CFX_RectF* pRtSign, - FX_ARGB argbFill, - CFX_Matrix* pMatrix) { - CFX_Path path; - path.Create(); - FX_FLOAT fRight = pRtSign->right(); - FX_FLOAT fBottom = pRtSign->bottom(); - path.AddLine(pRtSign->left, pRtSign->top, fRight, fBottom); - path.AddLine(pRtSign->left, fBottom, fRight, pRtSign->top); - CFX_Color crFill(argbFill); - pGraphics->SaveGraphState(); - pGraphics->SetStrokeColor(&crFill); - pGraphics->SetLineWidth(1.0f); - pGraphics->StrokePath(&path, pMatrix); - pGraphics->RestoreGraphState(); -} -void CFWL_CheckBoxTP::DrawSignDiamond(CFX_Graphics* pGraphics, - const CFX_RectF* pRtSign, - FX_ARGB argbFill, - CFX_Matrix* pMatrix) { - CFX_Path path; - path.Create(); - FX_FLOAT fWidth = pRtSign->width; - FX_FLOAT fHeight = pRtSign->height; - FX_FLOAT fBottom = pRtSign->bottom(); - path.MoveTo(pRtSign->left + fWidth / 2, pRtSign->top); - path.LineTo(pRtSign->left, pRtSign->top + fHeight / 2); - path.LineTo(pRtSign->left + fWidth / 2, fBottom); - path.LineTo(pRtSign->right(), pRtSign->top + fHeight / 2); - path.LineTo(pRtSign->left + fWidth / 2, pRtSign->top); - CFX_Color crFill(argbFill); - pGraphics->SaveGraphState(); - pGraphics->SetFillColor(&crFill); - pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix); - pGraphics->RestoreGraphState(); -} -void CFWL_CheckBoxTP::DrawSignSquare(CFX_Graphics* pGraphics, - const CFX_RectF* pRtSign, - FX_ARGB argbFill, - CFX_Matrix* pMatrix) { - CFX_Path path; - path.Create(); - path.AddRectangle(pRtSign->left, pRtSign->top, pRtSign->width, - pRtSign->height); - CFX_Color crFill(argbFill); - pGraphics->SaveGraphState(); - pGraphics->SetFillColor(&crFill); - pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix); - pGraphics->RestoreGraphState(); -} -void CFWL_CheckBoxTP::DrawSignStar(CFX_Graphics* pGraphics, - const CFX_RectF* pRtSign, - FX_ARGB argbFill, - CFX_Matrix* pMatrix) { - CFX_Path path; - path.Create(); - FX_FLOAT fBottom = pRtSign->bottom(); - FX_FLOAT fRadius = - (pRtSign->top - fBottom) / (1 + (FX_FLOAT)cos(FX_PI / 5.0f)); - CFX_PointF ptCenter((pRtSign->left + pRtSign->right()) / 2.0f, - (pRtSign->top + fBottom) / 2.0f); - FX_FLOAT px[5], py[5]; - FX_FLOAT fAngel = FX_PI / 10.0f; - for (int32_t i = 0; i < 5; i++) { - px[i] = ptCenter.x + fRadius * (FX_FLOAT)cos(fAngel); - py[i] = ptCenter.y + fRadius * (FX_FLOAT)sin(fAngel); - fAngel += FX_PI * 2 / 5.0f; - } - path.MoveTo(px[0], py[0]); - int32_t nNext = 0; - for (int32_t j = 0; j < 5; j++) { - nNext += 2; - if (nNext >= 5) { - nNext -= 5; - } - path.LineTo(px[nNext], py[nNext]); - } - CFX_Color crFill(argbFill); - pGraphics->SaveGraphState(); - pGraphics->SetFillColor(&crFill); - pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix); - pGraphics->RestoreGraphState(); -} -void CFWL_CheckBoxTP::DrawSignBorder(IFWL_Widget* pWidget, - CFX_Graphics* pGraphics, - const CFX_RectF* pRtBox, - FX_BOOL bDisable, - CFX_Matrix* pMatrix) { - switch (pWidget->GetStylesEx() & FWL_STYLEEXT_CKB_ShapeMask) { - case FWL_STYLEEXT_CKB_ShapeSolidSquare: { - DrawAnnulusRect(pGraphics, bDisable ? m_pThemeData->clrSignBorderDisable - : m_pThemeData->clrSignBorderNormal, - pRtBox, 1, pMatrix); - break; - } - case FWL_STYLEEXT_CKB_ShapeSunkenSquare: { - Draw3DRect(pGraphics, FWLTHEME_EDGE_Sunken, CHECKBOX_SIZE_SIGNBORDER, - pRtBox, CHECKBOX_COLOR_BOXLT1, CHECKBOX_COLOR_BOXLT2, - CHECKBOX_COLOR_BOXRB1, CHECKBOX_COLOR_BOXRB2, pMatrix); - break; - } - case FWL_STYLEEXT_CKB_ShapeSolidCircle: { - DrawAnnulusCircle(pGraphics, bDisable ? m_pThemeData->clrSignBorderDisable - : m_pThemeData->clrSignBorderNormal, - pRtBox, 1, pMatrix); - break; - } - case FWL_STYLEEXT_CKB_ShapeSunkenCircle: { - Draw3DCircle(pGraphics, FWLTHEME_EDGE_Sunken, CHECKBOX_SIZE_SIGNBORDER, - pRtBox, CHECKBOX_COLOR_BOXLT1, CHECKBOX_COLOR_BOXLT2, - CHECKBOX_COLOR_BOXRB1, CHECKBOX_COLOR_BOXRB2, pMatrix); - break; - } - } -} -void CFWL_CheckBoxTP::SetThemeData(FX_DWORD dwID) { - FX_DWORD* pData = (FX_DWORD*)&m_pThemeData->clrBoxBk; - if (dwID) { - *pData++ = 0, *pData++ = 0, *pData++ = ArgbEncode(255, 220, 220, 215), - *pData++ = ArgbEncode(255, 255, 255, 255), - *pData++ = ArgbEncode(255, 255, 240, 207), - *pData++ = ArgbEncode(255, 248, 179, 48), - *pData++ = ArgbEncode(255, 176, 176, 167), - *pData++ = ArgbEncode(255, 241, 239, 239), - *pData++ = ArgbEncode(255, 255, 255, 255), - *pData++ = ArgbEncode(255, 255, 255, 255), - *pData++ = ArgbEncode(255, 220, 220, 215), - *pData++ = ArgbEncode(255, 255, 255, 255), - *pData++ = ArgbEncode(255, 255, 240, 207), - *pData++ = ArgbEncode(255, 248, 179, 48), - *pData++ = ArgbEncode(255, 176, 176, 167), - *pData++ = ArgbEncode(255, 241, 239, 239), - *pData++ = ArgbEncode(255, 255, 255, 255), - *pData++ = ArgbEncode(255, 255, 255, 255), - *pData++ = ArgbEncode(255, 220, 220, 215), - *pData++ = ArgbEncode(255, 255, 255, 255), - *pData++ = ArgbEncode(255, 255, 240, 207), - *pData++ = ArgbEncode(255, 248, 179, 48), - *pData++ = ArgbEncode(255, 176, 176, 167), - *pData++ = ArgbEncode(255, 241, 239, 239), - *pData++ = ArgbEncode(255, 255, 255, 255), - *pData++ = ArgbEncode(255, 255, 255, 255); - m_pThemeData->clrSignBorderNormal = ArgbEncode(255, 154, 167, 114); - m_pThemeData->clrSignBorderDisable = ArgbEncode(255, 202, 200, 187); - m_pThemeData->clrSignCheck = ArgbEncode(255, 164, 180, 138); - m_pThemeData->clrSignNeutral = ArgbEncode(2255, 28, 134, 26); - m_pThemeData->clrSignNeutralNormal = ArgbEncode(255, 114, 192, 113); - m_pThemeData->clrSignNeutralHover = ArgbEncode(255, 33, 161, 33); - m_pThemeData->clrSignNeutralPressed = ArgbEncode(255, 28, 134, 26); - } else { - *pData++ = 0, *pData++ = 0, *pData++ = ArgbEncode(255, 220, 220, 215), - *pData++ = ArgbEncode(255, 255, 255, 255), - *pData++ = ArgbEncode(255, 255, 240, 207), - *pData++ = ArgbEncode(255, 248, 179, 48), - *pData++ = ArgbEncode(255, 176, 176, 167), - *pData++ = ArgbEncode(255, 241, 239, 239), - *pData++ = ArgbEncode(255, 255, 255, 255), - *pData++ = ArgbEncode(255, 255, 255, 255), - *pData++ = ArgbEncode(255, 220, 220, 215), - *pData++ = ArgbEncode(255, 255, 255, 255), - *pData++ = ArgbEncode(255, 255, 240, 207), - *pData++ = ArgbEncode(255, 248, 179, 48), - *pData++ = ArgbEncode(255, 176, 176, 167), - *pData++ = ArgbEncode(255, 241, 239, 239), - *pData++ = ArgbEncode(255, 255, 255, 255), - *pData++ = ArgbEncode(255, 255, 255, 255), - *pData++ = ArgbEncode(255, 220, 220, 215), - *pData++ = ArgbEncode(255, 255, 255, 255), - *pData++ = ArgbEncode(255, 255, 240, 207), - *pData++ = ArgbEncode(255, 248, 179, 48), - *pData++ = ArgbEncode(255, 176, 176, 167), - *pData++ = ArgbEncode(255, 241, 239, 239), - *pData++ = ArgbEncode(255, 255, 255, 255), - *pData++ = ArgbEncode(255, 255, 255, 255); - m_pThemeData->clrSignBorderNormal = ArgbEncode(255, 28, 81, 128); - m_pThemeData->clrSignBorderDisable = ArgbEncode(255, 202, 200, 187); - m_pThemeData->clrSignCheck = ArgbEncode(255, 28, 81, 128); - m_pThemeData->clrSignNeutral = ArgbEncode(255, 28, 134, 26); - m_pThemeData->clrSignNeutralNormal = ArgbEncode(255, 114, 192, 113); - m_pThemeData->clrSignNeutralHover = ArgbEncode(255, 33, 161, 33); - m_pThemeData->clrSignNeutralPressed = ArgbEncode(255, 28, 134, 26); - } -} -void CFWL_CheckBoxTP::initCheckPath(FX_FLOAT fCheckLen) { - if (!m_pCheckPath) { - m_pCheckPath = new CFX_Path; - m_pCheckPath->Create(); - FX_FLOAT fWidth = CHECKBOX_SIZE_SIGNPATH; - FX_FLOAT fHeight = -CHECKBOX_SIZE_SIGNPATH; - FX_FLOAT fBottom = CHECKBOX_SIZE_SIGNPATH; - CFX_PointF pt1(fWidth / 15.0f, fBottom + fHeight * 2 / 5.0f); - CFX_PointF pt2(fWidth / 4.5f, fBottom + fHeight / 16.0f); - CFX_PointF pt3(fWidth / 3.0f, fBottom); - CFX_PointF pt4(fWidth * 14 / 15.0f, fBottom + fHeight * 15 / 16.0f); - CFX_PointF pt5(fWidth / 3.6f, fBottom + fHeight / 3.5f); - CFX_PointF pt12(fWidth / 7.0f, fBottom + fHeight * 2 / 7.0f); - CFX_PointF pt21(fWidth / 5.0f, fBottom + fHeight / 5.0f); - CFX_PointF pt23(fWidth / 4.4f, fBottom + fHeight * 0 / 16.0f); - CFX_PointF pt32(fWidth / 4.0f, fBottom); - CFX_PointF pt34(fWidth * (1 / 7.0f + 7 / 15.0f), - fBottom + fHeight * 4 / 5.0f); - CFX_PointF pt43(fWidth * (1 / 7.0f + 7 / 15.0f), - fBottom + fHeight * 4 / 5.0f); - CFX_PointF pt45(fWidth * 7 / 15.0f, fBottom + fHeight * 8 / 7.0f); - CFX_PointF pt54(fWidth / 3.4f, fBottom + fHeight / 3.5f); - CFX_PointF pt51(fWidth / 3.6f, fBottom + fHeight / 4.0f); - CFX_PointF pt15(fWidth / 3.5f, fBottom + fHeight * 3.5f / 5.0f); - m_pCheckPath->MoveTo(pt1.x, pt1.y); - FX_FLOAT px1 = pt12.x - pt1.x; - FX_FLOAT py1 = pt12.y - pt1.y; - FX_FLOAT px2 = pt21.x - pt2.x; - FX_FLOAT py2 = pt21.y - pt2.y; - m_pCheckPath->BezierTo(pt1.x + px1 * FWLTHEME_BEZIER, - pt1.y + py1 * FWLTHEME_BEZIER, - pt2.x + px2 * FWLTHEME_BEZIER, - pt2.y + py2 * FWLTHEME_BEZIER, pt2.x, pt2.y); - px1 = pt23.x - pt2.x; - py1 = pt23.y - pt2.y; - px2 = pt32.x - pt3.x; - py2 = pt32.y - pt3.y; - m_pCheckPath->BezierTo(pt2.x + px1 * FWLTHEME_BEZIER, - pt2.y + py1 * FWLTHEME_BEZIER, - pt3.x + px2 * FWLTHEME_BEZIER, - pt3.y + py2 * FWLTHEME_BEZIER, pt3.x, pt3.y); - px1 = pt34.x - pt3.x; - py1 = pt34.y - pt3.y; - px2 = pt43.x - pt4.x; - py2 = pt43.y - pt4.y; - m_pCheckPath->BezierTo(pt3.x + px1 * FWLTHEME_BEZIER, - pt3.y + py1 * FWLTHEME_BEZIER, - pt4.x + px2 * FWLTHEME_BEZIER, - pt4.y + py2 * FWLTHEME_BEZIER, pt4.x, pt4.y); - px1 = pt45.x - pt4.x; - py1 = pt45.y - pt4.y; - px2 = pt54.x - pt5.x; - py2 = pt54.y - pt5.y; - m_pCheckPath->BezierTo(pt4.x + px1 * FWLTHEME_BEZIER, - pt4.y + py1 * FWLTHEME_BEZIER, - pt5.x + px2 * FWLTHEME_BEZIER, - pt5.y + py2 * FWLTHEME_BEZIER, pt5.x, pt5.y); - px1 = pt51.x - pt5.x; - py1 = pt51.y - pt5.y; - px2 = pt15.x - pt1.x; - py2 = pt15.y - pt1.y; - m_pCheckPath->BezierTo(pt5.x + px1 * FWLTHEME_BEZIER, - pt5.y + py1 * FWLTHEME_BEZIER, - pt1.x + px2 * FWLTHEME_BEZIER, - pt1.y + py2 * FWLTHEME_BEZIER, pt1.x, pt1.y); - FX_FLOAT fScale = fCheckLen / CHECKBOX_SIZE_SIGNPATH; - CFX_Matrix mt; - mt.Set(1, 0, 0, 1, 0, 0); - mt.Scale(fScale, fScale); - CFX_PathData* pData = m_pCheckPath->GetPathData(); - pData->Transform(&mt); - } -} diff --git a/xfa/src/fwl/theme/comboboxtp.cpp b/xfa/src/fwl/theme/comboboxtp.cpp deleted file mode 100644 index 33be07d44c..0000000000 --- a/xfa/src/fwl/theme/comboboxtp.cpp +++ /dev/null @@ -1,156 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/include/fwl/theme/comboboxtp.h" - -#include "xfa/include/fwl/basewidget/fwl_combobox.h" -#include "xfa/include/fwl/core/fwl_widget.h" - -#define FWLTHEME_CAPACITY_ComboFormHandler 8.0f - -CFWL_ComboBoxTP::CFWL_ComboBoxTP() { - m_dwThemeID = 0; -} -CFWL_ComboBoxTP::~CFWL_ComboBoxTP() {} -FX_BOOL CFWL_ComboBoxTP::IsValidWidget(IFWL_Widget* pWidget) { - if (!pWidget) - return FALSE; - return pWidget->GetClassID() == FWL_CLASSHASH_ComboBox; -} -FX_BOOL CFWL_ComboBoxTP::DrawBackground(CFWL_ThemeBackground* pParams) { - if (!pParams) - return FALSE; - switch (pParams->m_iPart) { - case FWL_PART_CMB_Border: { - DrawBorder(pParams->m_pGraphics, &pParams->m_rtPart, &pParams->m_matrix); - break; - } - case FWL_PART_CMB_Edge: { - DrawEdge(pParams->m_pGraphics, pParams->m_pWidget->GetStyles(), - &pParams->m_rtPart, &pParams->m_matrix); - break; - } - case FWL_PART_CMB_Background: { - CFX_Path path; - path.Create(); - CFX_RectF& rect = pParams->m_rtPart; - path.AddRectangle(rect.left, rect.top, rect.width, rect.height); - CFX_Color cr; - switch (pParams->m_dwStates) { - case FWL_PARTSTATE_CMB_Selected: - cr = FWLTHEME_COLOR_BKSelected; - break; - case FWL_PARTSTATE_CMB_Disabled: - cr = FWLTHEME_COLOR_EDGERB1; - break; - default: - cr = 0xFFFFFFFF; - } - pParams->m_pGraphics->SaveGraphState(); - pParams->m_pGraphics->SetFillColor(&cr); - pParams->m_pGraphics->FillPath(&path, FXFILL_WINDING, &pParams->m_matrix); - pParams->m_pGraphics->RestoreGraphState(); - break; - } - case FWL_PART_CMB_DropDownButton: { - DrawDropDownButton(pParams, pParams->m_dwStates, &pParams->m_matrix); - break; - } - case FWL_PART_CMB_StretcgHandler: { - DrawStrethHandler(pParams, 0, &pParams->m_matrix); - break; - } - default: { return FALSE; } - } - return TRUE; -} -void CFWL_ComboBoxTP::DrawStrethHandler(CFWL_ThemeBackground* pParams, - FX_DWORD dwStates, - CFX_Matrix* pMatrix) { - CFX_Path path; - path.Create(); - path.AddRectangle(pParams->m_rtPart.left, pParams->m_rtPart.top, - pParams->m_rtPart.width - 1, pParams->m_rtPart.height); - CFX_Color cr(ArgbEncode(0xff, 0xff, 0, 0)); - pParams->m_pGraphics->SetFillColor(&cr); - pParams->m_pGraphics->FillPath(&path, FXFILL_WINDING, &pParams->m_matrix); -} -void* CFWL_ComboBoxTP::GetCapacity(CFWL_ThemePart* pThemePart, - FX_DWORD dwCapacity) { - if (dwCapacity == FWL_WGTCAPACITY_CMB_ComboFormHandler) { - m_fValue = FWLTHEME_CAPACITY_ComboFormHandler; - return &m_fValue; - } - return CFWL_WidgetTP::GetCapacity(pThemePart, dwCapacity); -} -#ifdef THEME_XPSimilar -void CFWL_ComboBoxTP::DrawDropDownButton(CFWL_ThemeBackground* pParams, - FX_DWORD dwStates, - CFX_Matrix* pMatrix) { - FWLTHEME_STATE eState = FWLTHEME_STATE_Normal; - switch (dwStates) { - case FWL_PARTSTATE_CMB_Normal: { - eState = FWLTHEME_STATE_Normal; - break; - } - case FWL_PARTSTATE_CMB_Hovered: { - eState = FWLTHEME_STATE_Hover; - break; - } - case FWL_PARTSTATE_CMB_Pressed: { - eState = FWLTHEME_STATE_Pressed; - break; - } - case FWL_PARTSTATE_CMB_Disabled: { - eState = FWLTHEME_STATE_Disabale; - break; - } - default: {} - } - DrawArrowBtn(pParams->m_pGraphics, &pParams->m_rtPart, - FWLTHEME_DIRECTION_Down, eState, &pParams->m_matrix); -} -#else -void CFWL_ComboBoxTP::DrawDropDownButton(CFWL_ThemeBackground* pParams, - FX_DWORD dwStates, - CFX_Matrix* pMatrix) { - FX_BOOL bPressed = ((pParams->m_dwStates & FWL_CMBPARTSTATE_Pressed) == - FWL_CMBPARTSTATE_Pressed); - FX_FLOAT fWidth = bPressed ? 1.0f : 2.0f; - FWLTHEME_EDGE eType = bPressed ? FWLTHEME_EDGE_Flat : FWLTHEME_EDGE_Raised; - Draw3DRect(pParams->m_pGraphics, eType, fWidth, &pParams->m_rtPart, - FWLTHEME_COLOR_EDGELT1, FWLTHEME_COLOR_EDGELT2, - FWLTHEME_COLOR_EDGERB1, FWLTHEME_COLOR_EDGERB2, pMatrix); - CFX_Path path; - path.Create(); - path.AddRectangle(pParams->m_rtPart.left + fWidth, - pParams->m_rtPart.top + fWidth, - pParams->m_rtPart.width - 2 * fWidth, - pParams->m_rtPart.height - 2 * fWidth); - pParams->m_pGraphics->SaveGraphState(); - CFX_Color crFill(FWLTHEME_COLOR_Background); - pParams->m_pGraphics->SetFillColor(&crFill); - pParams->m_pGraphics->FillPath(&path, FXFILL_WINDING, &pParams->m_matrix); - pParams->m_pGraphics->RestoreGraphState(); - FX_ARGB argbFill = ArgbEncode(255, 77, 97, 133); - switch (pParams->m_dwStates & 0x03) { - case FWL_CMBPARTSTATE_Normal: { - } - case FWL_CMBPARTSTATE_Hovered: { - } - case FWL_CMBPARTSTATE_Pressed: { - argbFill = 0xFF000000; - break; - } - case FWL_CMBPARTSTATE_Disabled: { - argbFill = 0xFFF0F0F0; - break; - } - } - DrawArrow(pParams->m_pGraphics, &pParams->m_rtPart, FWLTHEME_DIRECTION_Down, - argbFill, bPressed, &pParams->m_matrix); -} -#endif diff --git a/xfa/src/fwl/theme/datetimepickertp.cpp b/xfa/src/fwl/theme/datetimepickertp.cpp deleted file mode 100644 index 5efe0b850e..0000000000 --- a/xfa/src/fwl/theme/datetimepickertp.cpp +++ /dev/null @@ -1,138 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/include/fwl/theme/datetimepickertp.h" - -#include "xfa/include/fwl/basewidget/fwl_datetimepicker.h" - -CFWL_DateTimePickerTP::CFWL_DateTimePickerTP() { - m_pThemeData = new DTPThemeData; - initThemeData(); -} -CFWL_DateTimePickerTP::~CFWL_DateTimePickerTP() { - delete m_pThemeData; -} -FX_BOOL CFWL_DateTimePickerTP::IsValidWidget(IFWL_Widget* pWidget) { - if (!pWidget) - return FALSE; - return pWidget->GetClassID() == FWL_CLASSHASH_DateTimePicker; -} -FX_BOOL CFWL_DateTimePickerTP::DrawBackground(CFWL_ThemeBackground* pParams) { - if (!pParams) - return FALSE; - switch (pParams->m_iPart) { - case FWL_PART_DTP_Border: { - DrawBorder(pParams->m_pGraphics, &pParams->m_rtPart, &pParams->m_matrix); - break; - } - case FWL_PART_DTP_Edge: { - DrawEdge(pParams->m_pGraphics, pParams->m_pWidget->GetStyles(), - &pParams->m_rtPart, &pParams->m_matrix); - break; - } - case FWL_PART_DTP_DropDownButton: { - DrawDropDownButton(pParams, &pParams->m_matrix); - break; - } - default: {} - } - return TRUE; -} -#ifdef THEME_XPSimilar -void CFWL_DateTimePickerTP::DrawDropDownButton(CFWL_ThemeBackground* pParams, - CFX_Matrix* pMatrix) { - FX_DWORD dwStates = pParams->m_dwStates; - dwStates &= 0x03; - FWLTHEME_STATE eState = FWLTHEME_STATE_Normal; - switch (eState & dwStates) { - case FWL_PARTSTATE_DTP_Normal: { - eState = FWLTHEME_STATE_Normal; - break; - } - case FWL_PARTSTATE_DTP_Hovered: { - eState = FWLTHEME_STATE_Hover; - break; - } - case FWL_PARTSTATE_DTP_Pressed: { - eState = FWLTHEME_STATE_Pressed; - break; - } - case FWL_PARTSTATE_DTP_Disabled: { - eState = FWLTHEME_STATE_Disabale; - break; - } - default: {} - } - DrawArrowBtn(pParams->m_pGraphics, &pParams->m_rtPart, - FWLTHEME_DIRECTION_Down, eState, pMatrix); -} -#else -void CFWL_DateTimePickerTP::DrawDropDownButton(CFWL_ThemeBackground* pParams, - CFX_Matrix* pMatrix) { - FX_BOOL bPressed = ((pParams->m_dwStates & FWL_PARTSTATE_DTP_Pressed) == - FWL_PARTSTATE_DTP_Pressed); - FX_FLOAT fWidth = bPressed ? 1.0f : 2.0f; - FWLTHEME_EDGE eType = bPressed ? FWLTHEME_EDGE_Flat : FWLTHEME_EDGE_Raised; - Draw3DRect(pParams->m_pGraphics, eType, fWidth, &pParams->m_rtPart, - FWLTHEME_COLOR_EDGELT1, FWLTHEME_COLOR_EDGELT2, - FWLTHEME_COLOR_EDGERB1, FWLTHEME_COLOR_EDGERB2, pMatrix); - CFX_Path path; - path.Create(); - path.AddRectangle(pParams->m_rtPart.left + fWidth, - pParams->m_rtPart.top + fWidth, - pParams->m_rtPart.width - 2 * fWidth, - pParams->m_rtPart.height - 2 * fWidth); - pParams->m_pGraphics->SaveGraphState(); - CFX_Color crFill(FWLTHEME_COLOR_Background); - pParams->m_pGraphics->SetFillColor(&crFill); - pParams->m_pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix); - pParams->m_pGraphics->RestoreGraphState(); - FX_ARGB argbFill = ArgbEncode(255, 77, 97, 133); - switch (pParams->m_dwStates & 0x03) { - case FWL_PARTSTATE_DTP_Normal: { - } - case FWL_PARTSTATE_DTP_Hovered: { - } - case FWL_PARTSTATE_DTP_Pressed: { - argbFill = 0xFF000000; - break; - } - case FWL_PARTSTATE_DTP_Disabled: { - argbFill = 0xFFF0F0F0; - break; - } - } - DrawArrow(pParams->m_pGraphics, &pParams->m_rtPart, FWLTHEME_DIRECTION_Down, - argbFill, bPressed, pMatrix); -} -#endif -void CFWL_DateTimePickerTP::initThemeData() { - FX_DWORD* pData = (FX_DWORD*)&m_pThemeData->BoxBkColor; - *pData++ = 0, *pData++ = 0, *pData++ = ArgbEncode(255, 220, 220, 215), - *pData++ = ArgbEncode(255, 255, 255, 255), - *pData++ = ArgbEncode(255, 255, 240, 207), - *pData++ = ArgbEncode(255, 248, 179, 48), - *pData++ = ArgbEncode(255, 176, 176, 167), - *pData++ = ArgbEncode(255, 241, 239, 239), - *pData++ = ArgbEncode(255, 255, 255, 255), - *pData++ = ArgbEncode(255, 255, 255, 255), - *pData++ = ArgbEncode(255, 220, 220, 215), - *pData++ = ArgbEncode(255, 255, 255, 255), - *pData++ = ArgbEncode(255, 255, 240, 207), - *pData++ = ArgbEncode(255, 248, 179, 48), - *pData++ = ArgbEncode(255, 176, 176, 167), - *pData++ = ArgbEncode(255, 241, 239, 239), - *pData++ = ArgbEncode(255, 255, 255, 255), - *pData++ = ArgbEncode(255, 255, 255, 255), - *pData++ = ArgbEncode(255, 220, 220, 215), - *pData++ = ArgbEncode(255, 255, 255, 255), - *pData++ = ArgbEncode(255, 255, 240, 207), - *pData++ = ArgbEncode(255, 248, 179, 48), - *pData++ = ArgbEncode(255, 176, 176, 167), - *pData++ = ArgbEncode(255, 241, 239, 239), - *pData++ = ArgbEncode(255, 255, 255, 255), - *pData++ = ArgbEncode(255, 255, 255, 255); -} diff --git a/xfa/src/fwl/theme/edittp.cpp b/xfa/src/fwl/theme/edittp.cpp deleted file mode 100644 index a206faffe8..0000000000 --- a/xfa/src/fwl/theme/edittp.cpp +++ /dev/null @@ -1,89 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/include/fwl/theme/edittp.h" - -#include "xfa/include/fwl/basewidget/fwl_edit.h" -#include "xfa/include/fwl/core/fwl_widget.h" - -CFWL_EditTP::CFWL_EditTP() {} -CFWL_EditTP::~CFWL_EditTP() {} - -FX_BOOL CFWL_EditTP::IsValidWidget(IFWL_Widget* pWidget) { - if (!pWidget) - return FALSE; - return pWidget->GetClassID() == FWL_CLASSHASH_Edit; -} -FX_BOOL CFWL_EditTP::DrawBackground(CFWL_ThemeBackground* pParams) { - switch (pParams->m_iPart) { - case FWL_PART_EDT_Border: { - DrawBorder(pParams->m_pGraphics, &pParams->m_rtPart, &pParams->m_matrix); - break; - } - case FWL_PART_EDT_Edge: { - DrawEdge(pParams->m_pGraphics, pParams->m_pWidget->GetStyles(), - &pParams->m_rtPart, &pParams->m_matrix); - break; - } - case FWL_PART_EDT_Background: { - if (pParams->m_pPath) { - CFX_Graphics* pGraphics = pParams->m_pGraphics; - pGraphics->SaveGraphState(); - CFX_Color crSelected(FWL_GetThemeColor(m_dwThemeID) == 0 - ? FWLTHEME_COLOR_BKSelected - : FWLTHEME_COLOR_Green_BKSelected); - pGraphics->SetFillColor(&crSelected); - pGraphics->FillPath(pParams->m_pPath, FXFILL_WINDING, - &pParams->m_matrix); - pGraphics->RestoreGraphState(); - } else { - FX_BOOL bStatic = - pParams->m_dwData == FWL_PARTDATA_EDT_StaticBackground; - CFX_Path path; - path.Create(); - path.AddRectangle(pParams->m_rtPart.left, pParams->m_rtPart.top, - pParams->m_rtPart.width, pParams->m_rtPart.height); - CFX_Color cr(FWLTHEME_COLOR_Background); - if (!bStatic) { - if ((pParams->m_dwStates & FWL_PARTSTATE_EDT_Disable) == - FWL_PARTSTATE_EDT_Disable) { - cr.Set(FWLTHEME_COLOR_EDGERB1); - } else if ((pParams->m_dwStates & FWL_PARTSTATE_EDT_ReadOnly) == - FWL_PARTSTATE_EDT_ReadOnly) { - cr.Set(ArgbEncode(255, 236, 233, 216)); - } else { - cr.Set(0xFFFFFFFF); - } - } - pParams->m_pGraphics->SaveGraphState(); - pParams->m_pGraphics->SetFillColor(&cr); - pParams->m_pGraphics->FillPath(&path, FXFILL_WINDING, - &pParams->m_matrix); - pParams->m_pGraphics->RestoreGraphState(); - } - break; - } - case FWL_PART_EDT_CombTextLine: { - FX_ARGB cr = 0xFF000000; - FX_FLOAT fWidth = 1.0f; - CFX_Color crLine(cr); - pParams->m_pGraphics->SetStrokeColor(&crLine); - pParams->m_pGraphics->SetLineWidth(fWidth); - pParams->m_pGraphics->StrokePath(pParams->m_pPath, &pParams->m_matrix); - break; - } - default: { break; } - } - return TRUE; -} -FWL_ERR CFWL_EditTP::Initialize() { - InitTTO(); - return CFWL_WidgetTP::Initialize(); -} -FWL_ERR CFWL_EditTP::Finalize() { - FinalizeTTO(); - return CFWL_WidgetTP::Finalize(); -} diff --git a/xfa/src/fwl/theme/formtp.cpp b/xfa/src/fwl/theme/formtp.cpp deleted file mode 100644 index e8f3b6addc..0000000000 --- a/xfa/src/fwl/theme/formtp.cpp +++ /dev/null @@ -1,893 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/include/fwl/theme/formtp.h" - -#include "xfa/include/fwl/core/fwl_form.h" -#include "xfa/include/fwl/core/fwl_widget.h" -#include "xfa/src/fde/tto/fde_textout.h" - -#define FWLTHEME_CAPACITY_CXFormBorder 3 -#define FWLTHEME_CAPACITY_CYFormBorder 3 -#define FWLTHEME_CAPACITY_CYNarrowCaption 18 -#define FWLTHEME_CAPACITY_CYCaption 29 -#define FWLTHEME_CAPACITY_BigIconSize 32 -#define FWLTHEME_CAPACITY_SmallIconSize 16 -#define FWLTHEME_CAPACITY_FormTextColor 0xFFFFFFFF -#define FWLTHEME_FORMBTN_Margin 5 -#define FWLTHEME_FORMBTN_Span 2 -#define FWLTHEME_FORMBTN_Size 21 - -CFWL_FormTP::CFWL_FormTP() : m_pActiveBitmap(NULL), m_pDeactivebitmap(NULL) { - m_pThemeData = new SBThemeData; - SetThemeData(0); - m_rtDisLBorder.Reset(); - m_rtDisRBorder.Reset(); - m_rtDisBBorder.Reset(); - m_rtDisCaption.Reset(); -} -CFWL_FormTP::~CFWL_FormTP() { - if (m_pThemeData) { - delete m_pThemeData; - m_pThemeData = NULL; - } -} -FWL_ERR CFWL_FormTP::Initialize() { - InitTTO(); - InitCaption(TRUE); - InitCaption(FALSE); - return CFWL_WidgetTP::Initialize(); -} -FWL_ERR CFWL_FormTP::Finalize() { - FinalizeTTO(); - if (m_pActiveBitmap) { - delete m_pActiveBitmap; - m_pActiveBitmap = NULL; - } - if (m_pDeactivebitmap) { - delete m_pDeactivebitmap; - m_pDeactivebitmap = NULL; - } - return CFWL_WidgetTP::Finalize(); -} -FX_BOOL CFWL_FormTP::IsValidWidget(IFWL_Widget* pWidget) { - if (!pWidget) - return FALSE; - FX_DWORD dwHash = pWidget->GetClassID(); - return dwHash == FWL_CLASSHASH_Form; -} -FX_DWORD CFWL_FormTP::SetThemeID(IFWL_Widget* pWidget, - FX_DWORD dwThemeID, - FX_BOOL bChildren) { - if (m_pThemeData) { - SetThemeData(FWL_GetThemeColor(dwThemeID)); - } - InitCaption(TRUE); - InitCaption(FALSE); - return CFWL_WidgetTP::SetThemeID(pWidget, dwThemeID, bChildren); -} -FX_BOOL CFWL_FormTP::DrawBackground(CFWL_ThemeBackground* pParams) { - if (!pParams) - return FALSE; - int32_t iActive = 0; - if (pParams->m_dwStates & FWL_PARTSTATE_FRM_Inactive) { - iActive = 1; - } - FWLTHEME_STATE eState = FWLTHEME_STATE_Normal; - switch (pParams->m_dwStates & 0x03) { - case FWL_PARTSTATE_FRM_Hover: { - eState = FWLTHEME_STATE_Hover; - break; - } - case FWL_PARTSTATE_FRM_Pressed: { - eState = FWLTHEME_STATE_Pressed; - break; - } - case FWL_PARTSTATE_FRM_Disabled: { - eState = FWLTHEME_STATE_Disabale; - break; - } - default: {} - } - switch (pParams->m_iPart) { - case FWL_PART_FRM_Border: { - DrawFormBorder(pParams->m_pGraphics, &pParams->m_rtPart, eState, - &pParams->m_matrix, iActive); - break; - } - case FWL_PART_FRM_Edge: { - DrawEdge(pParams->m_pGraphics, pParams->m_pWidget->GetStyles(), - &pParams->m_rtPart, &pParams->m_matrix); - break; - } - case FWL_PART_FRM_Background: { - FillBackground(pParams->m_pGraphics, &pParams->m_rtPart, - &pParams->m_matrix); - break; - } - case FWL_PART_FRM_Caption: { - DrawCaption(pParams->m_pGraphics, &pParams->m_rtPart, eState, - &pParams->m_matrix, iActive); - break; - } - case FWL_PART_FRM_NarrowCaption: { - DrawNarrowCaption(pParams->m_pGraphics, &pParams->m_rtPart, eState, - &pParams->m_matrix, iActive); - break; - } - case FWL_PART_FRM_CloseBox: { - DrawCloseBox(pParams->m_pGraphics, &pParams->m_rtPart, eState, - &pParams->m_matrix, iActive); - break; - } - case FWL_PART_FRM_MinimizeBox: { - DrawMinimizeBox(pParams->m_pGraphics, &pParams->m_rtPart, eState, - &pParams->m_matrix, iActive); - break; - } - case FWL_PART_FRM_MaximizeBox: { - DrawMaximizeBox(pParams->m_pGraphics, &pParams->m_rtPart, eState, - pParams->m_dwData, &pParams->m_matrix, iActive); - break; - } - case FWL_PART_FRM_Icon: { - DrawIconImage(pParams->m_pGraphics, pParams->m_pImage, &pParams->m_rtPart, - eState, &pParams->m_matrix, iActive); - break; - } - default: {} - } - return TRUE; -} -FX_BOOL CFWL_FormTP::DrawText(CFWL_ThemeText* pParams) { - if (!m_pTextOut) - return FALSE; - if (pParams->m_iPart == FWL_PART_FRM_Caption) { - m_pTextOut->SetTextColor(0xFFFFFFFF); - } else { - m_pTextOut->SetTextColor(0xFF000000); - } - return CFWL_WidgetTP::DrawText(pParams); -} -void* CFWL_FormTP::GetCapacity(CFWL_ThemePart* pThemePart, - FX_DWORD dwCapacity) { - FX_BOOL bDefPro = FALSE; - FX_BOOL bDwordVal = FALSE; - switch (dwCapacity) { - case FWL_WGTCAPACITY_CXBorder: { - m_fValue = FWLTHEME_CAPACITY_CXFormBorder; - break; - } - case FWL_WGTCAPACITY_CYBorder: { - m_fValue = FWLTHEME_CAPACITY_CYFormBorder; - break; - } - case FWL_WGTCAPACITY_FRM_CYCaption: { - m_fValue = FWLTHEME_CAPACITY_CYCaption; - break; - } - case FWL_WGTCAPACITY_FRM_CYNarrowCaption: { - m_fValue = FWLTHEME_CAPACITY_CYCaption; - break; - } - case FWL_WGTCAPACITY_TextColor: { - bDwordVal = TRUE; - m_dwValue = FWLTHEME_CAPACITY_FormTextColor; - break; - } - case FWL_WGTCAPACITY_FRM_BigIcon: { - m_fValue = FWLTHEME_CAPACITY_BigIconSize; - break; - } - case FWL_WGTCAPACITY_FRM_SmallIcon: { - m_fValue = FWLTHEME_CAPACITY_SmallIconSize; - break; - } - default: { bDefPro = TRUE; } - } - if (!bDefPro) { - if (bDwordVal) { - return &m_dwValue; - } - return &m_fValue; - } - return CFWL_WidgetTP::GetCapacity(pThemePart, dwCapacity); -} -FWL_ERR CFWL_FormTP::GetPartRect(CFWL_ThemePart* pThemePart, - CFX_RectF& rtPart) { - switch (pThemePart->m_iPart) { - case FWL_PART_FRM_CloseBox: { - CalCloseBox(pThemePart->m_pWidget, rtPart); - break; - } - case FWL_PART_FRM_MaximizeBox: { - CalMaxBox(pThemePart->m_pWidget, rtPart); - break; - } - case FWL_PART_FRM_MinimizeBox: { - CalMinBox(pThemePart->m_pWidget, rtPart); - break; - } - case FWL_PART_FRM_HeadText: { - CalCaption(pThemePart->m_pWidget, rtPart); - break; - } - case FWL_PART_FRM_Icon: { - CalIcon(pThemePart->m_pWidget, rtPart); - break; - } - default: {} - } - return FWL_ERR_Succeeded; -} -void CFWL_FormTP::CalCloseBox(IFWL_Widget* pWidget, CFX_RectF& rect) { - FX_DWORD dwStyles = pWidget->GetStyles(); - CFX_RectF rtWidget; - pWidget->GetWidgetRect(rtWidget); - rtWidget.Offset(-rtWidget.left, -rtWidget.top); - if (dwStyles & FWL_WGTSTYLE_CloseBox) { - rect.Set(rtWidget.left + FWLTHEME_FORMBTN_Margin + FWLTHEME_FORMBTN_Span, - rtWidget.top + FWLTHEME_FORMBTN_Margin, FWLTHEME_FORMBTN_Size, - FWLTHEME_FORMBTN_Size); - } else { - rect.Set(rtWidget.left + FWLTHEME_FORMBTN_Margin + FWLTHEME_FORMBTN_Span, - rtWidget.top + FWLTHEME_FORMBTN_Margin, 0, 0); - } -} -void CFWL_FormTP::CalMaxBox(IFWL_Widget* pWidget, CFX_RectF& rect) { - FX_DWORD dwStyles = pWidget->GetStyles(); - CFX_RectF rtWidget; - pWidget->GetWidgetRect(rtWidget); - rtWidget.Offset(-rtWidget.left, -rtWidget.top); - if (dwStyles & FWL_WGTSTYLE_MaximizeBox) { - rect.Set(rtWidget.left + FWLTHEME_FORMBTN_Margin + FWLTHEME_FORMBTN_Size + - FWLTHEME_FORMBTN_Span * 2, - rtWidget.top + FWLTHEME_FORMBTN_Margin, FWLTHEME_FORMBTN_Size, - FWLTHEME_FORMBTN_Size); - } else { - rect.Set(rtWidget.left + FWLTHEME_FORMBTN_Margin + FWLTHEME_FORMBTN_Size + - FWLTHEME_FORMBTN_Span * 2, - rtWidget.top + FWLTHEME_FORMBTN_Margin, 0, 0); - } -} -void CFWL_FormTP::CalMinBox(IFWL_Widget* pWidget, CFX_RectF& rect) { - FX_DWORD dwStyles = pWidget->GetStyles(); - CFX_RectF rtWidget; - pWidget->GetWidgetRect(rtWidget); - rtWidget.Offset(-rtWidget.left, -rtWidget.top); - if (dwStyles & FWL_WGTSTYLE_MinimizeBox) { - rect.Set(rtWidget.left + FWLTHEME_FORMBTN_Margin + - FWLTHEME_FORMBTN_Size * 2 + FWLTHEME_FORMBTN_Span * 3, - rtWidget.top + FWLTHEME_FORMBTN_Margin, FWLTHEME_FORMBTN_Size, - FWLTHEME_FORMBTN_Size); - } else { - rect.Set(rtWidget.left + FWLTHEME_FORMBTN_Margin + - FWLTHEME_FORMBTN_Size * 2 + FWLTHEME_FORMBTN_Span * 3, - rtWidget.top + FWLTHEME_FORMBTN_Margin, 0, 0); - } -} -void CFWL_FormTP::CalCaption(IFWL_Widget* pWidget, CFX_RectF& rect) { - CFX_RectF rtWidget; - pWidget->GetWidgetRect(rtWidget); - rtWidget.Offset(-rtWidget.left, -rtWidget.top); - rect.Set(rtWidget.left + FWLTHEME_FORMBTN_Margin, - rtWidget.top + FWLTHEME_FORMBTN_Margin - 2, - rtWidget.width - FWLTHEME_FORMBTN_Margin * 2, - FWLTHEME_FORMBTN_Size + 2 * FWLTHEME_FORMBTN_Margin + 4); -} -void CFWL_FormTP::CalIcon(IFWL_Widget* pWidget, CFX_RectF& rect) {} -void CFWL_FormTP::DrawFormBorder(CFX_Graphics* pGraphics, - const CFX_RectF* pRect, - FWLTHEME_STATE eState, - CFX_Matrix* pMatrix, - int32_t iActive) { - CFX_RectF rt; - rt.Set(pRect->left, pRect->top, 1, pRect->height); - FX_FLOAT fBottom, fRight; - fBottom = pRect->bottom(); - fRight = pRect->right(); - CFX_Path path; - path.Create(); - CFX_Color clrLine; - path.Clear(); - path.MoveTo(pRect->left, pRect->top); - path.LineTo(pRect->left, fBottom - 1); - path.LineTo(fRight - 1, fBottom - 1); - path.LineTo(fRight - 1, pRect->top); - clrLine = m_pThemeData->clrFormBorder[iActive][2]; - pGraphics->SetStrokeColor(&clrLine); - pGraphics->StrokePath(&path, pMatrix); - path.Clear(); - path.MoveTo(pRect->left + 1, pRect->top); - path.LineTo(pRect->left + 1, fBottom - 2); - path.LineTo(fRight - 2, fBottom - 2); - path.LineTo(fRight - 2, pRect->top); - clrLine = m_pThemeData->clrFormBorder[iActive][1]; - pGraphics->SetStrokeColor(&clrLine); - pGraphics->StrokePath(&path, pMatrix); - path.Clear(); - path.MoveTo(pRect->left + 2, pRect->top); - path.LineTo(pRect->left + 2, fBottom - 3); - path.LineTo(fRight - 3, fBottom - 3); - path.LineTo(fRight - 3, pRect->top); - clrLine = m_pThemeData->clrFormBorder[iActive][0]; - pGraphics->SetStrokeColor(&clrLine); - pGraphics->StrokePath(&path, pMatrix); - path.Clear(); - path.MoveTo(pRect->left + 3, pRect->top); - path.LineTo(pRect->left + 3, fBottom - 4); - path.LineTo(fRight - 4, fBottom - 4); - path.LineTo(fRight - 4, pRect->top); - clrLine = m_pThemeData->clrFormBorder[iActive][4]; - pGraphics->SetStrokeColor(&clrLine); - pGraphics->StrokePath(&path, pMatrix); - m_rtDisLBorder.Set(pRect->left, pRect->top + 29, 4, pRect->height - 29); - m_rtDisRBorder.Set(pRect->right() - 4, pRect->top + 29, 4, - pRect->height - 29); - m_rtDisBBorder.Set(pRect->left, pRect->bottom() - 4, pRect->width, 4); - m_rtDisCaption.Set(pRect->left, pRect->top, pRect->width, 29); -} -void CFWL_FormTP::DrawCaption(CFX_Graphics* pGraphics, - const CFX_RectF* pRect, - FWLTHEME_STATE eState, - CFX_Matrix* pMatrix, - int32_t iActive) { - CFX_RectF rt; - FX_FLOAT fBottom, fRight; - fBottom = pRect->bottom(); - fRight = pRect->right(); - rt.Set(pRect->left, pRect->top, pRect->width, 1); - FillSoildRect(pGraphics, m_pThemeData->clrHeadEdgeTop[iActive][0], &rt, - pMatrix); - rt.Offset(0, 1); - FillSoildRect(pGraphics, m_pThemeData->clrHeadEdgeTop[iActive][1], &rt, - pMatrix); - rt.Offset(0, 1); - FillSoildRect(pGraphics, m_pThemeData->clrHeadEdgeTop[iActive][2], &rt, - pMatrix); - rt.Set(pRect->left, pRect->bottom() - 1, pRect->width, 1); - FillSoildRect(pGraphics, m_pThemeData->clrHeadEdgeBottom[iActive][2], &rt, - pMatrix); - rt.Offset(0, -1); - FillSoildRect(pGraphics, m_pThemeData->clrHeadEdgeBottom[iActive][1], &rt, - pMatrix); - rt.Set(pRect->left, pRect->top, 1, pRect->height); - FillSoildRect(pGraphics, m_pThemeData->clrHeadEdgeLeft[iActive][2], &rt, - pMatrix); - rt.Set(pRect->left + 1, pRect->top + 1, 1, fBottom - 1); - FillSoildRect(pGraphics, m_pThemeData->clrHeadEdgeLeft[iActive][1], &rt, - pMatrix); - rt.Set(pRect->left + 2, pRect->top + 2, 1, fBottom - 2); - FillSoildRect(pGraphics, m_pThemeData->clrHeadEdgeLeft[iActive][0], &rt, - pMatrix); - rt.Set(fRight - 1, pRect->top, pRect->width, pRect->height); - FillSoildRect(pGraphics, m_pThemeData->clrHeadEdgeRight[iActive][2], &rt, - pMatrix); - rt.Set(fRight - 2, pRect->top + 1, 1, fBottom - 1); - FillSoildRect(pGraphics, m_pThemeData->clrHeadEdgeRight[iActive][1], &rt, - pMatrix); - rt.Set(fRight - 3, pRect->top + 2, 1, fBottom - 2); - FillSoildRect(pGraphics, m_pThemeData->clrHeadEdgeRight[iActive][0], &rt, - pMatrix); - CFX_RectF rect(*pRect); - rect.Set(rect.left + 3, rect.top + 3, rect.width - 6, rect.height - 5); - if (iActive == 0) { - pGraphics->StretchImage(m_pActiveBitmap, rect, pMatrix); - } else { - pGraphics->StretchImage(m_pDeactivebitmap, rect, pMatrix); - } -} -void CFWL_FormTP::DrawNarrowCaption(CFX_Graphics* pGraphics, - const CFX_RectF* pRect, - FWLTHEME_STATE eState, - CFX_Matrix* pMatrix, - int32_t iActive) {} -void CFWL_FormTP::DrawCloseBox(CFX_Graphics* pGraphics, - const CFX_RectF* pRect, - FWLTHEME_STATE eState, - CFX_Matrix* pMatrix, - int32_t iActive) { - FX_FLOAT fRight = pRect->right(); - FX_FLOAT fBottom = pRect->bottom(); - FX_FLOAT fWidth = pRect->width; - FX_FLOAT fHeight = pRect->height; - pGraphics->SaveGraphState(); - CFX_RectF rt(*pRect); - pGraphics->SetLineWidth(1.0f); - CFX_Path path; - path.Create(); - path.AddRectangle(rt.left + 1, rt.top, fWidth - 2, 1); - path.AddRectangle(rt.left, rt.top + 1, 1, fHeight - 2); - path.AddRectangle(fRight - 1, rt.top + 1, 1, fHeight - 2); - path.AddRectangle(rt.left + 1, fBottom - 1, fWidth - 2, 1); - CFX_Color crFill; - crFill = m_pThemeData->clrBtnEdgeOut[iActive]; - pGraphics->SetFillColor(&crFill); - pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix); - path.Clear(); - path.AddRectangle(rt.left + 1, rt.top + 1, 1, 1); - path.AddRectangle(fRight - 2, rt.top + 1, 1, 1); - path.AddRectangle(rt.left + 1, fBottom - 2, 1, 1); - path.AddRectangle(fRight - 2, fBottom - 2, 1, 1); - crFill = m_pThemeData->clrBtnCornerLight[iActive][eState - 1]; - pGraphics->SetFillColor(&crFill); - pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix); - path.Clear(); - path.AddRectangle(rt.left + 2, rt.top + 1, fWidth - 4, 1); - path.AddRectangle(rt.left + 1, rt.top + 2, 1, fHeight - 4); - crFill = m_pThemeData->clrCloseBtEdgeLight[iActive][eState - 1]; - pGraphics->SetFillColor(&crFill); - pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix); - path.Clear(); - path.AddRectangle(fRight - 2, rt.top + 2, 1, fHeight - 4); - path.AddRectangle(rt.left + 2, fBottom - 2, fWidth - 4, 1); - crFill = m_pThemeData->clrCloseBtEdgeDark[iActive][eState - 1]; - pGraphics->SetFillColor(&crFill); - pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix); - path.Clear(); - path.AddRectangle(pRect->left + 2, pRect->top + 2, fWidth - 4, fHeight - 4); - DrawAxialShading(pGraphics, pRect->left + 2, pRect->top + 2, fRight - 2, - fBottom - 2, - m_pThemeData->clrCloseBtBKStart[iActive][eState - 1], - m_pThemeData->clrCloseBtBKEnd[iActive][eState - 1], &path, - FXFILL_WINDING, pMatrix); - CFX_RectF rtX(*pRect); - rtX.Inflate(-5, -5); - path.Clear(); - FX_FLOAT frtXRight = rtX.right(); - FX_FLOAT frtXBottom = rtX.bottom(); - path.AddLine(rtX.left, rtX.top + 1, frtXRight - 1, frtXBottom); - path.AddLine(rtX.left, rtX.top, frtXRight, frtXBottom); - path.AddLine(rtX.left + 1, rtX.top, frtXRight, frtXBottom - 1); - path.AddLine(rtX.left, frtXBottom - 1, frtXRight - 1, rtX.top); - path.AddLine(rtX.left, frtXBottom, frtXRight, rtX.top); - path.AddLine(rtX.left + 1, frtXBottom, frtXRight, rtX.top + 1); - CFX_Color clrLine(0xffffffff); - pGraphics->SetLineWidth(1.0f); - pGraphics->SetStrokeColor(&clrLine); - pGraphics->StrokePath(&path, pMatrix); - pGraphics->RestoreGraphState(); -} -void CFWL_FormTP::DrawMinMaxBoxCommon(CFX_Graphics* pGraphics, - const CFX_RectF* pRect, - FWLTHEME_STATE eState, - CFX_Matrix* pMatrix, - int32_t iActive) { - pGraphics->SaveGraphState(); - FX_FLOAT fRight = pRect->right(); - FX_FLOAT fBottom = pRect->bottom(); - FX_FLOAT fWidth = pRect->width; - FX_FLOAT fHeight = pRect->height; - CFX_RectF rt(*pRect); - pGraphics->SetLineWidth(1.0f); - CFX_Path path; - path.Create(); - path.AddRectangle(rt.left + 1, rt.top, fWidth - 2, 1); - path.AddRectangle(rt.left, rt.top + 1, 1, fHeight - 2); - path.AddRectangle(fRight - 1, rt.top + 1, 1, fHeight - 2); - path.AddRectangle(rt.left + 1, fBottom - 1, fWidth - 2, 1); - CFX_Color crFill; - crFill = m_pThemeData->clrBtnEdgeOut[iActive]; - pGraphics->SetFillColor(&crFill); - pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix); - path.Clear(); - path.AddRectangle(rt.left + 1, rt.top + 1, 1, 1); - path.AddRectangle(fRight - 2, rt.top + 1, 1, 1); - path.AddRectangle(rt.left + 1, fBottom - 2, 1, 1); - path.AddRectangle(fRight - 2, fBottom - 2, 1, 1); - crFill = m_pThemeData->clrBtnCornerLight[iActive][eState - 1]; - pGraphics->SetFillColor(&crFill); - pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix); - path.Clear(); - path.AddRectangle(rt.left + 2, rt.top + 1, fWidth - 4, 1); - path.AddRectangle(rt.left + 1, rt.top + 2, 1, fHeight - 4); - crFill = m_pThemeData->clrNormalBtEdgeLight[iActive][eState - 1]; - pGraphics->SetFillColor(&crFill); - pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix); - path.Clear(); - path.AddRectangle(fRight - 2, rt.top + 2, 1, fHeight - 4); - path.AddRectangle(rt.left + 2, fBottom - 2, fWidth - 4, 1); - crFill = m_pThemeData->clrNormalBtEdgeDark[iActive][eState - 1]; - pGraphics->SetFillColor(&crFill); - pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix); - pGraphics->RestoreGraphState(); - path.Clear(); - path.AddRectangle(pRect->left + 2, pRect->top + 2, fWidth - 4, fHeight - 4); - DrawAxialShading(pGraphics, pRect->left + 2, pRect->top + 2, fRight - 2, - fBottom - 2, - m_pThemeData->clrNormalBtBKStart[iActive][eState - 1], - m_pThemeData->clrNormalBtBKEnd[iActive][eState - 1], &path, - FXFILL_WINDING, pMatrix); -} -void CFWL_FormTP::DrawMinimizeBox(CFX_Graphics* pGraphics, - const CFX_RectF* pRect, - FWLTHEME_STATE eState, - CFX_Matrix* pMatrix, - int32_t iActive) { - DrawMinMaxBoxCommon(pGraphics, pRect, eState, pMatrix); - CFX_RectF rtMin; - rtMin.Set(pRect->left + 5, pRect->top + 13, pRect->width - 14, - pRect->height - 18); - FillSoildRect(pGraphics, 0xFFFFFFFF, &rtMin, pMatrix); -} -void CFWL_FormTP::DrawMaximizeBox(CFX_Graphics* pGraphics, - const CFX_RectF* pRect, - FWLTHEME_STATE eState, - FX_BOOL bMax, - CFX_Matrix* pMatrix, - int32_t iActive) { - DrawMinMaxBoxCommon(pGraphics, pRect, eState, pMatrix); - FX_FLOAT fWidth = pRect->width; - FX_FLOAT fHeight = pRect->height; - if (bMax) { - CFX_Path path; - path.Create(); - path.AddLine(pRect->left + 7, pRect->top + 6, pRect->left + 14, - pRect->top + 6); - path.AddLine(pRect->left + 4, pRect->top + 9, pRect->left + 11, - pRect->top + 9); - pGraphics->SaveGraphState(); - pGraphics->SetLineWidth(2); - CFX_Color crStroke(0xFFFFFFFF); - pGraphics->SetStrokeColor(&crStroke); - pGraphics->StrokePath(&path, pMatrix); - pGraphics->SetLineWidth(1); - path.Clear(); - path.AddLine(pRect->left + 4, pRect->top + 10, pRect->left + 4, - pRect->top + 14); - path.AddLine(pRect->left + 10, pRect->top + 10, pRect->left + 10, - pRect->top + 14); - path.AddLine(pRect->left + 13, pRect->top + 7, pRect->left + 13, - pRect->top + 11); - path.AddLine(pRect->left + 4, pRect->top + 14, pRect->left + 10, - pRect->top + 14); - path.AddLine(pRect->left + 12, pRect->top + 11, pRect->left + 12, - pRect->top + 11); - pGraphics->StrokePath(&path, pMatrix); - pGraphics->RestoreGraphState(); - } else { - CFX_RectF rtMax(*pRect); - rtMax.Inflate(-5, -5); - CFX_Path path; - path.Create(); - path.AddRectangle(pRect->left + 5, pRect->top + 5, fWidth - 10, - fHeight - 10); - path.AddRectangle(pRect->left + 6, pRect->top + 8, fWidth - 12, - fHeight - 14); - pGraphics->SaveGraphState(); - CFX_Color crFill(0xFFFFFFFF); - pGraphics->SetFillColor(&crFill); - pGraphics->FillPath(&path, FXFILL_ALTERNATE, pMatrix); - pGraphics->RestoreGraphState(); - } -} -void CFWL_FormTP::DrawIconImage(CFX_Graphics* pGraphics, - CFX_DIBitmap* pDIBitmap, - const CFX_RectF* pRect, - FWLTHEME_STATE eState, - CFX_Matrix* pMatrix, - int32_t iActive) { - pGraphics->StretchImage(pDIBitmap, *pRect, pMatrix); -} -void CFWL_FormTP::SetThemeData(FX_DWORD dwID) { - m_pThemeData->clrTransWhite = ArgbEncode(0x65, 255, 255, 255); - m_pThemeData->clrCloseBtBKStart[0][0] = ArgbEncode(0xff, 240, 166, 148); - m_pThemeData->clrCloseBtBKEnd[0][0] = ArgbEncode(0xff, 228, 61, 5); - m_pThemeData->clrCloseBtBKStart[0][1] = ArgbEncode(0xff, 255, 184, 176); - m_pThemeData->clrCloseBtBKEnd[0][1] = ArgbEncode(0xff, 252, 107, 71); - m_pThemeData->clrCloseBtBKStart[0][2] = ArgbEncode(0xff, 141, 44, 20); - m_pThemeData->clrCloseBtBKEnd[0][2] = ArgbEncode(0xff, 202, 72, 33); - m_pThemeData->clrCloseBtEdgeLight[0][0] = ArgbEncode(0xff, 255, 122, 107); - m_pThemeData->clrCloseBtEdgeDark[0][0] = ArgbEncode(0xff, 218, 77, 54); - m_pThemeData->clrCloseBtEdgeLight[0][1] = ArgbEncode(0xff, 255, 93, 74); - m_pThemeData->clrCloseBtEdgeDark[0][1] = ArgbEncode(0xff, 218, 74, 51); - m_pThemeData->clrCloseBtEdgeLight[0][2] = ArgbEncode(0xff, 191, 61, 28); - m_pThemeData->clrCloseBtEdgeDark[0][2] = ArgbEncode(0xff, 93, 30, 13); - if (dwID) { - m_pThemeData->clrHeadBK[0][0] = ArgbEncode(0xff, 194, 205, 149); - m_pThemeData->clrHeadBK[0][1] = ArgbEncode(0xff, 170, 184, 131); - m_pThemeData->clrHeadBK[0][2] = ArgbEncode(0xff, 168, 182, 128); - m_pThemeData->clrHeadBK[0][3] = ArgbEncode(0xff, 194, 205, 149); - m_pThemeData->clrHeadEdgeLeft[0][0] = ArgbEncode(0xff, 117, 141, 94); - m_pThemeData->clrHeadEdgeLeft[0][1] = ArgbEncode(0xff, 139, 161, 105); - m_pThemeData->clrHeadEdgeLeft[0][2] = ArgbEncode(0xff, 171, 189, 133); - m_pThemeData->clrHeadEdgeRight[0][0] = ArgbEncode(0xff, 155, 175, 125); - m_pThemeData->clrHeadEdgeRight[0][1] = ArgbEncode(0xff, 128, 146, 103); - m_pThemeData->clrHeadEdgeRight[0][2] = ArgbEncode(0xff, 94, 118, 79); - m_pThemeData->clrHeadEdgeTop[0][0] = ArgbEncode(0xff, 139, 161, 105); - m_pThemeData->clrHeadEdgeTop[0][1] = ArgbEncode(0xff, 234, 245, 201); - m_pThemeData->clrHeadEdgeTop[0][2] = ArgbEncode(0xff, 194, 205, 149); - m_pThemeData->clrHeadEdgeBottom[0][0] = ArgbEncode(0xff, 175, 189, 133); - m_pThemeData->clrHeadEdgeBottom[0][1] = ArgbEncode(0xff, 153, 168, 121); - m_pThemeData->clrHeadEdgeBottom[0][2] = ArgbEncode(0xff, 150, 168, 103); - m_pThemeData->clrNormalBtBKStart[0][0] = ArgbEncode(0xff, 182, 195, 162); - m_pThemeData->clrNormalBtBKEnd[0][0] = ArgbEncode(0xff, 128, 144, 84); - m_pThemeData->clrNormalBtBKStart[0][1] = ArgbEncode(0xff, 234, 241, 208); - m_pThemeData->clrNormalBtBKEnd[0][1] = ArgbEncode(0xff, 169, 186, 112); - m_pThemeData->clrNormalBtBKStart[0][2] = ArgbEncode(0xff, 199, 199, 190); - m_pThemeData->clrNormalBtBKEnd[0][2] = ArgbEncode(0xff, 133, 148, 88); - m_pThemeData->clrNormalBtEdgeLight[0][0] = ArgbEncode(0xff, 163, 176, 137); - m_pThemeData->clrNormalBtEdgeDark[0][0] = ArgbEncode(0xff, 118, 135, 83); - m_pThemeData->clrNormalBtEdgeLight[0][1] = ArgbEncode(0xff, 154, 174, 105); - m_pThemeData->clrNormalBtEdgeDark[0][1] = ArgbEncode(0xff, 154, 174, 105); - m_pThemeData->clrNormalBtEdgeLight[0][2] = ArgbEncode(0xff, 172, 193, 123); - m_pThemeData->clrNormalBtEdgeDark[0][2] = ArgbEncode(0xff, 154, 174, 105); - m_pThemeData->clrBtnCornerLight[0][0] = ArgbEncode(0xff, 220, 220, 220); - m_pThemeData->clrBtnCornerLight[0][1] = ArgbEncode(0xff, 255, 255, 255); - m_pThemeData->clrBtnCornerLight[0][2] = ArgbEncode(0xff, 225, 225, 225); - m_pThemeData->clrBtnEdgeOut[0] = ArgbEncode(0xff, 255, 255, 255); - m_pThemeData->clrFormBorder[0][0] = ArgbEncode(0xff, 117, 141, 94); - m_pThemeData->clrFormBorder[0][1] = ArgbEncode(0xff, 139, 161, 105); - m_pThemeData->clrFormBorder[0][2] = ArgbEncode(0xff, 171, 189, 133); - m_pThemeData->clrFormBorder[0][3] = ArgbEncode(0xff, 164, 178, 127); - m_pThemeData->clrFormBorder[0][4] = ArgbEncode(0xff, 255, 255, 255); - m_pThemeData->clrFormBorderLight[0] = ArgbEncode(0xff, 171, 189, 133); - } else { - m_pThemeData->clrHeadBK[0][0] = ArgbEncode(0xff, 3, 114, 255); - m_pThemeData->clrHeadBK[0][1] = ArgbEncode(0xff, 0, 85, 226); - m_pThemeData->clrHeadBK[0][2] = ArgbEncode(0xff, 0, 85, 226); - m_pThemeData->clrHeadBK[0][3] = ArgbEncode(0xff, 3, 114, 255); - m_pThemeData->clrHeadEdgeLeft[0][2] = ArgbEncode(0xff, 0, 32, 200); - m_pThemeData->clrHeadEdgeLeft[0][1] = ArgbEncode(0xff, 0, 61, 220); - m_pThemeData->clrHeadEdgeLeft[0][0] = ArgbEncode(0xff, 0, 54, 210); - m_pThemeData->clrHeadEdgeRight[0][0] = ArgbEncode(0xff, 0, 56, 234); - m_pThemeData->clrHeadEdgeRight[0][1] = ArgbEncode(0xff, 0, 50, 193); - m_pThemeData->clrHeadEdgeRight[0][2] = ArgbEncode(0xff, 0, 19, 139); - m_pThemeData->clrHeadEdgeTop[0][0] = ArgbEncode(0xff, 0, 88, 238); - m_pThemeData->clrHeadEdgeTop[0][1] = ArgbEncode(0xff, 63, 151, 255); - m_pThemeData->clrHeadEdgeTop[0][2] = ArgbEncode(0xff, 3, 114, 255); - m_pThemeData->clrHeadEdgeBottom[0][0] = ArgbEncode(0xff, 0, 96, 252); - m_pThemeData->clrHeadEdgeBottom[0][1] = ArgbEncode(0xff, 63, 151, 255); - m_pThemeData->clrHeadEdgeBottom[0][2] = ArgbEncode(0xff, 0, 67, 207); - m_pThemeData->clrNormalBtBKStart[0][2] = ArgbEncode(0xff, 0, 49, 112); - m_pThemeData->clrNormalBtBKEnd[0][2] = ArgbEncode(0xff, 0, 87, 188); - m_pThemeData->clrNormalBtBKStart[0][0] = ArgbEncode(0xff, 154, 183, 250); - m_pThemeData->clrNormalBtBKEnd[0][0] = ArgbEncode(0xff, 17, 110, 248); - m_pThemeData->clrNormalBtBKStart[0][1] = ArgbEncode(0xff, 164, 194, 255); - m_pThemeData->clrNormalBtBKEnd[0][1] = ArgbEncode(0xff, 29, 158, 255); - m_pThemeData->clrNormalBtEdgeLight[0][0] = ArgbEncode(0xff, 68, 120, 245); - m_pThemeData->clrNormalBtEdgeDark[0][0] = ArgbEncode(0xff, 24, 72, 187); - m_pThemeData->clrNormalBtEdgeLight[0][1] = ArgbEncode(0xff, 72, 122, 245); - m_pThemeData->clrNormalBtEdgeDark[0][1] = ArgbEncode(0xff, 35, 87, 195); - m_pThemeData->clrNormalBtEdgeLight[0][2] = ArgbEncode(0xff, 60, 114, 244); - m_pThemeData->clrNormalBtEdgeDark[0][2] = ArgbEncode(0xff, 21, 70, 185); - m_pThemeData->clrBtnCornerLight[0][0] = ArgbEncode(0xff, 220, 220, 220); - m_pThemeData->clrBtnCornerLight[0][1] = ArgbEncode(0xff, 255, 255, 255); - m_pThemeData->clrBtnCornerLight[0][2] = ArgbEncode(0xff, 225, 225, 225); - m_pThemeData->clrBtnEdgeOut[0] = ArgbEncode(0xff, 255, 255, 255); - m_pThemeData->clrFormBorder[0][0] = ArgbEncode(0xff, 0, 72, 241); - m_pThemeData->clrFormBorder[0][1] = ArgbEncode(0xff, 0, 61, 220); - m_pThemeData->clrFormBorder[0][2] = ArgbEncode(0xff, 0, 30, 160); - m_pThemeData->clrFormBorder[0][3] = ArgbEncode(0xff, 0, 19, 140); - m_pThemeData->clrFormBorder[0][4] = ArgbEncode(0xff, 255, 255, 255); - m_pThemeData->clrFormBorderLight[0] = ArgbEncode(0xff, 22, 106, 239); - } - m_pThemeData->clrCloseBtBKStart[1][0] = m_pThemeData->clrCloseBtBKStart[0][0]; - m_pThemeData->clrCloseBtBKEnd[1][0] = m_pThemeData->clrCloseBtBKEnd[0][0]; - m_pThemeData->clrCloseBtBKStart[1][1] = m_pThemeData->clrCloseBtBKStart[0][1]; - m_pThemeData->clrCloseBtBKEnd[1][1] = m_pThemeData->clrCloseBtBKEnd[0][1]; - m_pThemeData->clrCloseBtBKStart[1][2] = m_pThemeData->clrCloseBtBKStart[0][2]; - m_pThemeData->clrCloseBtBKEnd[1][2] = m_pThemeData->clrCloseBtBKEnd[0][2]; - m_pThemeData->clrCloseBtEdgeLight[1][0] = - m_pThemeData->clrCloseBtEdgeLight[0][0]; - m_pThemeData->clrCloseBtEdgeDark[1][0] = - m_pThemeData->clrCloseBtEdgeDark[0][0]; - m_pThemeData->clrCloseBtEdgeLight[1][1] = - m_pThemeData->clrCloseBtEdgeLight[0][1]; - m_pThemeData->clrCloseBtEdgeDark[1][1] = - m_pThemeData->clrCloseBtEdgeDark[0][1]; - m_pThemeData->clrCloseBtEdgeLight[1][2] = - m_pThemeData->clrCloseBtEdgeLight[0][2]; - m_pThemeData->clrCloseBtEdgeDark[1][2] = - m_pThemeData->clrCloseBtEdgeDark[0][2]; - m_pThemeData->clrHeadBK[1][0] = m_pThemeData->clrHeadBK[0][0]; - m_pThemeData->clrHeadBK[1][1] = m_pThemeData->clrHeadBK[0][1]; - m_pThemeData->clrHeadBK[1][2] = m_pThemeData->clrHeadBK[0][2]; - m_pThemeData->clrHeadBK[1][3] = m_pThemeData->clrHeadBK[0][3]; - m_pThemeData->clrHeadEdgeLeft[1][2] = m_pThemeData->clrHeadEdgeLeft[0][2]; - m_pThemeData->clrHeadEdgeLeft[1][1] = m_pThemeData->clrHeadEdgeLeft[0][1]; - m_pThemeData->clrHeadEdgeLeft[1][0] = m_pThemeData->clrHeadEdgeLeft[0][0]; - m_pThemeData->clrHeadEdgeRight[1][0] = m_pThemeData->clrHeadEdgeRight[0][0]; - m_pThemeData->clrHeadEdgeRight[1][1] = m_pThemeData->clrHeadEdgeRight[0][1]; - m_pThemeData->clrHeadEdgeRight[1][2] = m_pThemeData->clrHeadEdgeRight[0][2]; - m_pThemeData->clrHeadEdgeTop[1][0] = m_pThemeData->clrHeadEdgeTop[0][0]; - m_pThemeData->clrHeadEdgeTop[1][1] = m_pThemeData->clrHeadEdgeTop[0][1]; - m_pThemeData->clrHeadEdgeTop[1][2] = m_pThemeData->clrHeadEdgeTop[0][2]; - m_pThemeData->clrHeadEdgeBottom[1][0] = m_pThemeData->clrHeadEdgeBottom[0][0]; - m_pThemeData->clrHeadEdgeBottom[1][1] = m_pThemeData->clrHeadEdgeBottom[0][1]; - m_pThemeData->clrHeadEdgeBottom[1][2] = m_pThemeData->clrHeadEdgeBottom[0][2]; - m_pThemeData->clrNormalBtBKStart[1][2] = - m_pThemeData->clrNormalBtBKStart[0][2]; - m_pThemeData->clrNormalBtBKEnd[1][2] = m_pThemeData->clrNormalBtBKEnd[0][2]; - m_pThemeData->clrNormalBtBKStart[1][0] = - m_pThemeData->clrNormalBtBKStart[0][0]; - m_pThemeData->clrNormalBtBKEnd[1][0] = m_pThemeData->clrNormalBtBKEnd[1][0]; - m_pThemeData->clrNormalBtBKStart[1][1] = - m_pThemeData->clrNormalBtBKStart[0][1]; - m_pThemeData->clrNormalBtBKEnd[1][1] = m_pThemeData->clrNormalBtBKEnd[0][1]; - m_pThemeData->clrNormalBtEdgeLight[1][0] = - m_pThemeData->clrNormalBtEdgeLight[0][0]; - m_pThemeData->clrNormalBtEdgeDark[1][0] = - m_pThemeData->clrNormalBtEdgeDark[0][0]; - m_pThemeData->clrNormalBtEdgeLight[1][1] = - m_pThemeData->clrNormalBtEdgeLight[0][1]; - m_pThemeData->clrNormalBtEdgeDark[1][1] = - m_pThemeData->clrNormalBtEdgeDark[0][1]; - m_pThemeData->clrNormalBtEdgeLight[1][2] = - m_pThemeData->clrNormalBtEdgeLight[0][2]; - m_pThemeData->clrNormalBtEdgeDark[1][2] = - m_pThemeData->clrNormalBtEdgeDark[0][2]; - m_pThemeData->clrBtnCornerLight[1][0] = m_pThemeData->clrBtnCornerLight[0][0]; - m_pThemeData->clrBtnCornerLight[1][1] = m_pThemeData->clrBtnCornerLight[0][1]; - m_pThemeData->clrBtnCornerLight[1][2] = m_pThemeData->clrBtnCornerLight[0][2]; - m_pThemeData->clrBtnEdgeOut[1] = m_pThemeData->clrBtnEdgeOut[0]; - m_pThemeData->clrFormBorder[1][0] = m_pThemeData->clrFormBorder[0][0]; - m_pThemeData->clrFormBorder[1][1] = m_pThemeData->clrFormBorder[0][1]; - m_pThemeData->clrFormBorder[1][2] = m_pThemeData->clrFormBorder[0][2]; - m_pThemeData->clrFormBorder[1][3] = m_pThemeData->clrFormBorder[0][3]; - m_pThemeData->clrFormBorder[1][4] = m_pThemeData->clrFormBorder[0][4]; - m_pThemeData->clrFormBorderLight[1] = m_pThemeData->clrFormBorderLight[0]; - DeactiveForm(); -} -void CFWL_FormTP::DeactiveForm() { - TransModeColor(m_pThemeData->clrTransWhite, m_pThemeData->clrHeadBK[1][0]); - TransModeColor(m_pThemeData->clrTransWhite, m_pThemeData->clrHeadBK[1][1]); - TransModeColor(m_pThemeData->clrTransWhite, m_pThemeData->clrHeadBK[1][2]); - TransModeColor(m_pThemeData->clrTransWhite, m_pThemeData->clrHeadBK[1][3]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrHeadEdgeLeft[1][0]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrHeadEdgeLeft[1][1]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrHeadEdgeLeft[1][2]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrHeadEdgeRight[1][0]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrHeadEdgeRight[1][1]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrHeadEdgeRight[1][2]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrHeadEdgeTop[1][0]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrHeadEdgeTop[1][1]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrHeadEdgeTop[1][2]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrHeadEdgeBottom[1][0]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrHeadEdgeBottom[1][1]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrHeadEdgeBottom[1][2]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrNormalBtBKStart[1][0]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrNormalBtBKStart[1][1]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrNormalBtBKStart[1][2]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrNormalBtBKEnd[1][0]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrNormalBtBKEnd[1][1]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrNormalBtBKEnd[1][2]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrNormalBtEdgeLight[1][0]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrNormalBtEdgeLight[1][1]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrNormalBtEdgeLight[1][2]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrNormalBtEdgeDark[1][0]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrNormalBtEdgeDark[1][1]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrNormalBtEdgeDark[1][2]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrBtnCornerLight[1][0]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrBtnCornerLight[1][1]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrBtnCornerLight[1][2]); - TransModeColor(m_pThemeData->clrTransWhite, m_pThemeData->clrBtnEdgeOut[1]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrFormBorder[1][0]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrFormBorder[1][1]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrFormBorder[1][2]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrFormBorder[1][3]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrFormBorder[1][4]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrFormBorderLight[1]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrCloseBtBKStart[1][0]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrCloseBtBKStart[1][1]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrCloseBtBKStart[1][2]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrCloseBtBKEnd[1][0]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrCloseBtBKEnd[1][1]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrCloseBtBKEnd[1][2]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrCloseBtEdgeLight[1][0]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrCloseBtEdgeLight[1][1]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrCloseBtEdgeLight[1][2]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrCloseBtEdgeDark[1][0]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrCloseBtEdgeDark[1][1]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrCloseBtEdgeDark[1][2]); -} -void CFWL_FormTP::TransModeColor(FX_ARGB clrFore, FX_ARGB& clrBack) { - int32_t iAlfaF, iRF, iGF, iBF; - int32_t iAlfaB, iRB, iGB, iBB; - ArgbDecode(clrFore, iAlfaF, iRF, iGF, iBF); - ArgbDecode(clrBack, iAlfaB, iRB, iGB, iBB); - clrBack = ArgbEncode(0xff, iRB + (iRF - iRB) * iAlfaF / 255, - iGB + (iGF - iGB) * iAlfaF / 255, - iBB + (iBF - iBB) * iAlfaF / 255); -} -void CFWL_FormTP::InitCaption(FX_BOOL bActive) { - if (bActive) { - CFX_FxgeDevice dev; - CFX_Graphics gs; - CFX_Path path; - path.Create(); - if (m_pActiveBitmap) { - delete m_pActiveBitmap; - m_pActiveBitmap = NULL; - } - m_pActiveBitmap = new CFX_DIBitmap; - m_pActiveBitmap->Create(1, FWLTHEME_CAPACITY_CYCaption, FXDIB_Argb); - dev.Attach(m_pActiveBitmap); - gs.Create(&dev); - path.AddRectangle(0, 0, 1, 5); - DrawAxialShading(&gs, 0, 0, 0, 5, m_pThemeData->clrHeadBK[0][0], - m_pThemeData->clrHeadBK[0][1], &path); - path.Clear(); - path.AddRectangle(0, 5, 1, 15); - DrawAxialShading(&gs, 0, 5, 0, 20, m_pThemeData->clrHeadBK[0][1], - m_pThemeData->clrHeadBK[0][2], &path); - path.Clear(); - path.AddRectangle(0, 20, 1, FWLTHEME_CAPACITY_CYCaption - 19); - DrawAxialShading(&gs, 0, 20, 0, FWLTHEME_CAPACITY_CYCaption, - m_pThemeData->clrHeadBK[0][2], - m_pThemeData->clrHeadBK[0][3], &path); - } else { - CFX_FxgeDevice dev; - CFX_Graphics gs; - CFX_Path path; - path.Create(); - if (m_pDeactivebitmap) { - delete m_pDeactivebitmap; - m_pDeactivebitmap = NULL; - } - m_pDeactivebitmap = new CFX_DIBitmap; - m_pDeactivebitmap->Create(1, FWLTHEME_CAPACITY_CYCaption, FXDIB_Argb); - dev.Attach(m_pDeactivebitmap); - gs.Create(&dev); - path.AddRectangle(0, 0, 1, 5); - DrawAxialShading(&gs, 0, 0, 0, 5, m_pThemeData->clrHeadBK[1][0], - m_pThemeData->clrHeadBK[1][1], &path); - path.Clear(); - path.AddRectangle(0, 5, 1, 15); - DrawAxialShading(&gs, 0, 5, 0, 20, m_pThemeData->clrHeadBK[1][1], - m_pThemeData->clrHeadBK[1][2], &path); - path.Clear(); - path.AddRectangle(0, 20, 1, FWLTHEME_CAPACITY_CYCaption - 19); - DrawAxialShading(&gs, 0, 20, 0, FWLTHEME_CAPACITY_CYCaption, - m_pThemeData->clrHeadBK[1][2], - m_pThemeData->clrHeadBK[1][3], &path); - } -} diff --git a/xfa/src/fwl/theme/listboxtp.cpp b/xfa/src/fwl/theme/listboxtp.cpp deleted file mode 100644 index 8ffe669835..0000000000 --- a/xfa/src/fwl/theme/listboxtp.cpp +++ /dev/null @@ -1,101 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/include/fwl/theme/listboxtp.h" - -#include "xfa/include/fwl/basewidget/fwl_listbox.h" -#include "xfa/include/fwl/core/fwl_widget.h" - -CFWL_ListBoxTP::CFWL_ListBoxTP() {} -CFWL_ListBoxTP::~CFWL_ListBoxTP() {} - -FX_BOOL CFWL_ListBoxTP::IsValidWidget(IFWL_Widget* pWidget) { - if (!pWidget) - return FALSE; - return pWidget->GetClassID() == FWL_CLASSHASH_ListBox; -} -FX_BOOL CFWL_ListBoxTP::DrawBackground(CFWL_ThemeBackground* pParams) { - if (!pParams) - return FALSE; - switch (pParams->m_iPart) { - case FWL_PART_LTB_Border: { - DrawBorder(pParams->m_pGraphics, &pParams->m_rtPart, &pParams->m_matrix); - break; - } - case FWL_PART_LTB_Edge: { - DrawEdge(pParams->m_pGraphics, pParams->m_pWidget->GetStyles(), - &pParams->m_rtPart, &pParams->m_matrix); - break; - } - case FWL_PART_LTB_Background: { - FillSoildRect(pParams->m_pGraphics, ArgbEncode(255, 255, 255, 255), - &pParams->m_rtPart, &pParams->m_matrix); - if (pParams->m_pData) { - FillSoildRect(pParams->m_pGraphics, FWLTHEME_COLOR_Background, - (CFX_RectF*)pParams->m_pData, &pParams->m_matrix); - } - break; - } - case FWL_PART_LTB_ListItem: { - DrawListBoxItem(pParams->m_pGraphics, pParams->m_dwStates, - &pParams->m_rtPart, pParams->m_pData, &pParams->m_matrix); - break; - } - case FWL_PART_LTB_Icon: { - pParams->m_pGraphics->StretchImage(pParams->m_pImage, pParams->m_rtPart, - &pParams->m_matrix); - break; - } - case FWL_PART_LTB_Check: { - FX_DWORD color = 0xFF000000; - if (pParams->m_dwStates == FWL_PARTSTATE_LTB_Checked) { - color = 0xFFFF0000; - } else if (pParams->m_dwStates == FWL_PARTSTATE_LTB_UnChecked) { - color = 0xFF0000FF; - } - FillSoildRect(pParams->m_pGraphics, color, &pParams->m_rtPart, - &pParams->m_matrix); - } - default: {} - } - return TRUE; -} -FWL_ERR CFWL_ListBoxTP::Initialize() { - InitTTO(); - return CFWL_WidgetTP::Initialize(); -} -FWL_ERR CFWL_ListBoxTP::Finalize() { - FinalizeTTO(); - return CFWL_WidgetTP::Finalize(); -} -void CFWL_ListBoxTP::DrawListBoxItem(CFX_Graphics* pGraphics, - FX_DWORD dwStates, - const CFX_RectF* prtItem, - void* pData, - CFX_Matrix* pMatrix) { - if (dwStates & FWL_PARTSTATE_LTB_Selected) { - pGraphics->SaveGraphState(); - CFX_Color crFill(FWL_GetThemeColor(m_dwThemeID) == 0 - ? FWLTHEME_COLOR_BKSelected - : FWLTHEME_COLOR_Green_BKSelected); - pGraphics->SetFillColor(&crFill); - CFX_RectF rt(*prtItem); - CFX_Path path; - path.Create(); -#if (_FX_OS_ == _FX_MACOSX_) - path.AddRectangle(rt.left, rt.top, rt.width - 1, rt.height - 1); -#else - path.AddRectangle(rt.left, rt.top, rt.width, rt.height); -#endif - pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix); - pGraphics->RestoreGraphState(); - } - if (dwStates & FWL_PARTSTATE_LTB_Focused) { - if (pData) { - DrawFocus(pGraphics, (CFX_RectF*)pData, pMatrix); - } - } -} diff --git a/xfa/src/fwl/theme/monthcalendartp.cpp b/xfa/src/fwl/theme/monthcalendartp.cpp deleted file mode 100644 index 0dea73f675..0000000000 --- a/xfa/src/fwl/theme/monthcalendartp.cpp +++ /dev/null @@ -1,582 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/include/fwl/theme/monthcalendartp.h" - -#include "xfa/include/fwl/basewidget/fwl_monthcalendar.h" -#include "xfa/include/fwl/core/fwl_widget.h" -#include "xfa/src/fde/tto/fde_textout.h" - -#define FWL_THEMECAPACITY_MC_HEADER_WIDTH 200 -#define FWL_THEMECAPACITY_MC_HEADER_HEIGHT 30 -#define FWL_THEMECAPACITY_MC_HEADER_BTN_WIDTH 18 -#define FWL_THEMECAPACITY_MC_HEADER_BTN_HEIGHT 16 -#define FWL_THEMECAPACITY_MC_HEADER_BTN_HMARGIN 5 -#define FWL_THEMECAPACITY_MC_HEADER_BTN_VMARGIN \ - (FWL_THEMECAPACITY_MC_HEADER_HEIGHT - \ - FWL_THEMECAPACITY_MC_HEADER_BTN_HEIGHT) / \ - 2 -#define FWL_THEMECAPACITY_MC_HEADER_TEXTWIDHT 100 -#define FWL_THEMECAPACITY_MC_HEADER_TEXTHEIGHT 20 -#define FWL_THEMECAPACITY_MC_HEADER_TEXT_HMARGIN \ - (FWL_THEMECAPACITY_MC_HEADER_WIDTH - \ - FWL_THEMECAPACITY_MC_HEADER_TEXTWIDHT) / \ - 2 -#define FWL_THEMECAPACITY_MC_HEADER_TEXT_VMARGIN \ - (FWL_THEMECAPACITY_MC_HEADER_HEIGHT - \ - FWL_THEMECAPACITY_MC_HEADER_TEXTHEIGHT) / \ - 2 -#define FWL_THEMECAPACITY_MC_HSEP_WIDTH (FWL_THEMECAPACITY_MC_WEEK_WIDTH - 10) -#define FWL_THEMECAPACITY_MC_HSEP_HEIGHT 1 -#define FWL_THEMECAPACITY_MC_VSEP_WIDTH 1 -#define FWL_THEMECAPACITY_MC_VSEP_HEIGHT FWL_THEMECAPACITY_MC_WEEKNUM_HEIGHT -#define FWL_THEMECAPACITY_MC_WEEKNUM_WIDTH 26 -#define FWL_THEMECAPACITY_MC_SEP_DOFFSET -4 -#define FWL_THEMECAPACITY_MC_SEP_X 3 -#define FWL_THEMECAPACITY_MC_SEP_Y \ - (FWL_THEMECAPACITY_MC_HEADER_HEIGHT + FWL_THEMECAPACITY_MC_WEEK_HEIGHT + \ - FWL_THEMECAPACITY_MC_SEP_DOFFSET) -#define FWL_THEMECAPACITY_MC_WEEKNUM_HEIGHT \ - (6 * FWL_THEMECAPACITY_MC_DATES_CELL_HEIGHT) -#define FWL_THEMECAPACITY_MC_WEEK_WIDTH \ - (FWL_THEMECAPACITY_MC_DATES_CELL_WIDTH * 7) -#define FWL_THEMECAPACITY_MC_WEEK_HEIGHT FWL_THEMECAPACITY_MC_DATES_CELL_HEIGHT -#define FWL_THEMECAPACITY_MC_DATES_CELL_WIDTH \ - (FWL_THEMECAPACITY_MC_HEADER_WIDTH / 7) -#define FWL_THEMECAPACITY_MC_DATES_CELL_HEIGHT 16 -#define FWL_THEMECAPACITY_MC_TODAY_WIDHT FWL_THEMECAPACITY_MC_HEADER_WIDTH -#define FWL_THEMECAPACITY_MC_TODAY_HEIGHT FWL_THEMECAPACITY_MC_DATES_CELL_HEIGHT -#define FWL_THEMECAPACITY_MC_TODAY_FLAG_WIDHT \ - FWL_THEMECAPACITY_MC_DATES_CELL_WIDTH -#define FWL_MC_WIDTH 200 -#define FWL_MC_HEIGHT 160 - -CFWL_MonthCalendarTP::CFWL_MonthCalendarTP() { - m_pThemeData = new MCThemeData; - SetThemeData(0); -} -CFWL_MonthCalendarTP::~CFWL_MonthCalendarTP() { - delete m_pThemeData; -} -FX_BOOL CFWL_MonthCalendarTP::IsValidWidget(IFWL_Widget* pWidget) { - if (!pWidget) - return FALSE; - return pWidget->GetClassID() == FWL_CLASSHASH_MonthCalendar; -} -FX_DWORD CFWL_MonthCalendarTP::SetThemeID(IFWL_Widget* pWidget, - FX_DWORD dwThemeID, - FX_BOOL bChildren) { - if (m_pThemeData) { - SetThemeData(FWL_GetThemeColor(dwThemeID)); - } - return CFWL_WidgetTP::SetThemeID(pWidget, dwThemeID, bChildren); -} -FX_BOOL CFWL_MonthCalendarTP::DrawBackground(CFWL_ThemeBackground* pParams) { - if (!pParams) - return FALSE; - switch (pParams->m_iPart) { - case FWL_PART_MCD_Border: { - DrawBorder(pParams->m_pGraphics, &pParams->m_rtPart, &pParams->m_matrix); - break; - } - case FWL_PART_MCD_Edge: { - DrawEdge(pParams->m_pGraphics, pParams->m_pWidget->GetStyles(), - &pParams->m_rtPart, &pParams->m_matrix); - break; - } - case FWL_PART_MCD_Background: { - DrawTotalBK(pParams, &pParams->m_matrix); - break; - } - case FWL_PART_MCD_Header: { - DrawHeadBk(pParams, &pParams->m_matrix); - break; - } - case FWL_PART_MCD_LBtn: { -#ifdef THEME_XPSimilar - FWLTHEME_STATE eState = GetState(pParams->m_dwStates); - DrawArrowBtn(pParams->m_pGraphics, &pParams->m_rtPart, - FWLTHEME_DIRECTION_Left, eState, &pParams->m_matrix); -#else - DrawLButton(pParams, &pParams->m_matrix); -#endif - break; - } - case FWL_PART_MCD_RBtn: { -#ifdef THEME_XPSimilar - FWLTHEME_STATE eState = GetState(pParams->m_dwStates); - DrawArrowBtn(pParams->m_pGraphics, &pParams->m_rtPart, - FWLTHEME_DIRECTION_Right, eState, &pParams->m_matrix); -#else - DrawRButton(pParams, &pParams->m_matrix); -#endif - break; - } - case FWL_PART_MCD_HSeparator: { - DrawHSeperator(pParams, &pParams->m_matrix); - break; - } - case FWL_PART_MCD_DatesIn: { - DrawDatesInBK(pParams, &pParams->m_matrix); - break; - } - case FWL_PART_MCD_TodayCircle: { - DrawTodayCircle(pParams, &pParams->m_matrix); - break; - } - case FWL_PART_MCD_DateInCircle: { - DrawDatesInCircle(pParams, &pParams->m_matrix); - break; - } - case FWL_PART_MCD_WeekNumSep: { - DrawWeekNumSep(pParams, &pParams->m_matrix); - break; - } - default: {} - } - return TRUE; -} -FX_BOOL CFWL_MonthCalendarTP::DrawText(CFWL_ThemeText* pParams) { - if (!m_pTextOut) - return FALSE; - if ((pParams->m_iPart == FWL_PART_MCD_DatesIn) && - !(pParams->m_dwStates & FWL_ITEMSTATE_MCD_Flag) && - (pParams->m_dwStates & - (FWL_PARTSTATE_MCD_Hovered | FWL_PARTSTATE_MCD_Selected))) { - m_pTextOut->SetTextColor(0xFFFFFFFF); - } else if (pParams->m_iPart == FWL_PART_MCD_Caption) { - m_pTextOut->SetTextColor(m_pThemeData->clrCaption); - } else { - m_pTextOut->SetTextColor(0xFF000000); - } - return CFWL_WidgetTP::DrawText(pParams); -} -void* CFWL_MonthCalendarTP::GetCapacity(CFWL_ThemePart* pThemePart, - FX_DWORD dwCapacity) { - FX_BOOL bDefPro = FALSE; - FX_BOOL bDwordVal = FALSE; - switch (dwCapacity) { - case FWL_WGTCAPACITY_MC_HEADER_WIDTH: { - m_fValue = FWL_THEMECAPACITY_MC_HEADER_WIDTH; - break; - } - case FWL_WGTCAPACITY_MC_HEADER_Height: { - m_fValue = FWL_THEMECAPACITY_MC_HEADER_HEIGHT; - break; - } - case FWL_WGTCAPACITY_MC_HEADER_BTN_WIDTH: { - m_fValue = FWL_THEMECAPACITY_MC_HEADER_BTN_WIDTH; - break; - } - case FWL_WGTCAPACITY_MC_HEADER_BTN_HEIGHT: { - m_fValue = FWL_THEMECAPACITY_MC_HEADER_BTN_HEIGHT; - break; - } - case FWL_WGTCAPACITY_MC_HEADER_BTN_HMARGIN: { - bDwordVal = TRUE; - m_dwValue = FWL_THEMECAPACITY_MC_HEADER_BTN_HMARGIN; - break; - } - case FWL_WGTCAPACITY_MC_HEADER_BTN_VMARGIN: { - m_fValue = FWL_THEMECAPACITY_MC_HEADER_BTN_VMARGIN; - break; - } - case FWL_WGTCAPACITY_MC_HEADER_TEXTWIDHT: { - m_fValue = FWL_THEMECAPACITY_MC_HEADER_TEXTWIDHT; - break; - } - case FWL_WGTCAPACITY_MC_HEADER_TEXTHEIGHT: { - m_fValue = FWL_THEMECAPACITY_MC_HEADER_TEXTHEIGHT; - break; - } - case FWL_WGTCAPACITY_MC_HEADER_TEXT_HMARGIN: { - m_fValue = FWL_THEMECAPACITY_MC_HEADER_TEXT_HMARGIN; - break; - } - case FWL_WGTCAPACITY_MC_HEADER_TEXT_VMARGIN: { - m_fValue = FWL_THEMECAPACITY_MC_HEADER_TEXT_VMARGIN; - break; - } - case FWL_WGTCAPACITY_MC_HSEP_WIDTH: { - m_fValue = FWL_THEMECAPACITY_MC_HSEP_WIDTH; - break; - } - case FWL_WGTCAPACITY_MC_HSEP_HEIGHT: { - m_fValue = FWL_THEMECAPACITY_MC_HSEP_HEIGHT; - break; - } - case FWL_WGTCAPACITY_MC_VSEP_WIDTH: { - m_fValue = FWL_THEMECAPACITY_MC_VSEP_WIDTH; - break; - } - case FWL_WGTCAPACITY_MC_VSEP_HEIGHT: { - m_fValue = FWL_THEMECAPACITY_MC_VSEP_HEIGHT; - break; - } - case FWL_WGTCAPACITY_MC_WEEKNUM_WIDTH: { - m_fValue = FWL_THEMECAPACITY_MC_WEEKNUM_WIDTH; - break; - } - case FWL_WGTCAPACITY_MC_WEEKNUM_HEIGHT: { - m_fValue = FWL_THEMECAPACITY_MC_WEEKNUM_HEIGHT; - break; - } - case FWL_WGTCAPACITY_MC_WEEK_WIDTH: { - m_fValue = FWL_THEMECAPACITY_MC_WEEK_WIDTH; - break; - } - case FWL_WGTCAPACITY_MC_WEEK_HEIGHT: { - m_fValue = FWL_THEMECAPACITY_MC_WEEK_HEIGHT; - break; - } - case FWL_WGTCAPACITY_MC_SEP_DOFFSET: { - m_fValue = FWL_THEMECAPACITY_MC_SEP_DOFFSET; - break; - } - case FWL_WGTCAPACITY_MC_SEP_X: { - m_fValue = FWL_THEMECAPACITY_MC_SEP_X; - break; - } - case FWL_WGTCAPACITY_MC_SEP_Y: { - m_fValue = FWL_THEMECAPACITY_MC_SEP_Y; - break; - } - case FWL_WGTCAPACITY_MC_DATES_CELL_WIDTH: { - m_fValue = FWL_THEMECAPACITY_MC_DATES_CELL_WIDTH; - break; - } - case FWL_WGTCAPACITY_MC_DATES_CELL_HEIGHT: { - m_fValue = FWL_THEMECAPACITY_MC_DATES_CELL_HEIGHT; - break; - } - case FWL_WGTCAPACITY_MC_TODAY_WIDHT: { - m_fValue = FWL_THEMECAPACITY_MC_TODAY_WIDHT; - break; - } - case FWL_WGTCAPACITY_MC_TODAY_HEIGHT: { - m_fValue = FWL_THEMECAPACITY_MC_TODAY_HEIGHT; - break; - } - case FWL_WGTCAPACITY_MC_TODAY_FLAG_WIDHT: { - m_fValue = FWL_THEMECAPACITY_MC_TODAY_FLAG_WIDHT; - break; - } - case FWL_WGTCAPACITY_MC_WIDTH: { - m_fValue = FWL_MC_WIDTH; - break; - } - case FWL_WGTCAPACITY_MC_HEIGHT: { - m_fValue = FWL_MC_HEIGHT; - break; - } - case FWL_MCCAPACITY_Sun: { - wsResource = L"Sun"; - return &wsResource; - } - case FWL_MCCAPACITY_Mon: { - wsResource = L"Mon"; - return &wsResource; - } - case FWL_MCCAPACITY_Tue: { - wsResource = L"Tue"; - return &wsResource; - } - case FWL_MCCAPACITY_Wed: { - wsResource = L"Wed"; - return &wsResource; - } - case FWL_MCCAPACITY_Thu: { - wsResource = L"Thu"; - return &wsResource; - } - case FWL_MCCAPACITY_Fri: { - wsResource = L"Fri"; - return &wsResource; - } - case FWL_MCCAPACITY_Sat: { - wsResource = L"Sat"; - return &wsResource; - } - case FWL_MCCAPACITY_January: { - wsResource = L"January"; - return &wsResource; - } - case FWL_MCCAPACITY_February: { - wsResource = L"February"; - return &wsResource; - } - case FWL_MCCAPACITY_March: { - wsResource = L"March"; - return &wsResource; - } - case FWL_MCCAPACITY_April: { - wsResource = L"April"; - return &wsResource; - } - case FWL_MCCAPACITY_May: { - wsResource = L"May"; - return &wsResource; - } - case FWL_MCCAPACITY_June: { - wsResource = L"June"; - return &wsResource; - } - case FWL_MCCAPACITY_July: { - wsResource = L"July"; - return &wsResource; - } - case FWL_MCCAPACITY_August: { - wsResource = L"August"; - return &wsResource; - } - case FWL_MCCAPACITY_September: { - wsResource = L"September"; - return &wsResource; - } - case FWL_MCCAPACITY_October: { - wsResource = L"October"; - return &wsResource; - } - case FWL_MCCAPACITY_November: { - wsResource = L"November"; - return &wsResource; - } - case FWL_MCCAPACITY_December: { - wsResource = L"December"; - return &wsResource; - } - case FWL_MCCAPACITY_Today: { - wsResource = L"Today"; - return &wsResource; - } - default: { bDefPro = TRUE; } - } - if (!bDefPro) { - if (bDwordVal) { - return &m_dwValue; - } - return &m_fValue; - } - return CFWL_WidgetTP::GetCapacity(pThemePart, dwCapacity); -} -FWL_ERR CFWL_MonthCalendarTP::Initialize() { - InitTTO(); - return CFWL_WidgetTP::Initialize(); -} -FWL_ERR CFWL_MonthCalendarTP::Finalize() { - FinalizeTTO(); - return CFWL_WidgetTP::Finalize(); -} -FX_BOOL CFWL_MonthCalendarTP::DrawTotalBK(CFWL_ThemeBackground* pParams, - CFX_Matrix* pMatrix) { - CFX_Path path; - path.Create(); - CFX_RectF rtTotal(pParams->m_rtPart); - path.AddRectangle(rtTotal.left, rtTotal.top, rtTotal.width, rtTotal.height); - pParams->m_pGraphics->SaveGraphState(); - CFX_Color clrBK(m_pThemeData->clrBK); - pParams->m_pGraphics->SetFillColor(&clrBK); - pParams->m_pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix); - pParams->m_pGraphics->RestoreGraphState(); - return TRUE; -} -FX_BOOL CFWL_MonthCalendarTP::DrawHeadBk(CFWL_ThemeBackground* pParams, - CFX_Matrix* pMatrix) { - CFX_Path path; - path.Create(); - CFX_RectF rtHead = pParams->m_rtPart; - path.AddRectangle(rtHead.left, rtHead.top, rtHead.width, rtHead.height); - pParams->m_pGraphics->SaveGraphState(); - CFX_Color clrHeadBK(m_pThemeData->clrBK); - pParams->m_pGraphics->SetFillColor(&clrHeadBK); - pParams->m_pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix); - pParams->m_pGraphics->RestoreGraphState(); - return TRUE; -} -FX_BOOL CFWL_MonthCalendarTP::DrawLButton(CFWL_ThemeBackground* pParams, - CFX_Matrix* pMatrix) { - CFX_Path path; - path.Create(); - CFX_RectF rtLBtn; - rtLBtn = pParams->m_rtPart; - path.AddRectangle(rtLBtn.left, rtLBtn.top, rtLBtn.width, rtLBtn.height); - pParams->m_pGraphics->SaveGraphState(); - CFX_Color clrLBtnEdge(ArgbEncode(0xff, 205, 219, 243)); - pParams->m_pGraphics->SetStrokeColor(&clrLBtnEdge); - pParams->m_pGraphics->StrokePath(&path, pMatrix); - if ((pParams->m_dwStates & FWL_PARTSTATE_MCD_Pressed) == - FWL_PARTSTATE_MCD_Pressed) { - CFX_Color clrLBtnFill(ArgbEncode(0xff, 174, 198, 242)); - pParams->m_pGraphics->SetFillColor(&clrLBtnFill); - pParams->m_pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix); - } else { - CFX_Color clrLBtnFill(ArgbEncode(0xff, 227, 235, 249)); - pParams->m_pGraphics->SetFillColor(&clrLBtnFill); - pParams->m_pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix); - } - path.Clear(); - path.MoveTo(rtLBtn.left + rtLBtn.Width() / 3 * 2, - rtLBtn.top + rtLBtn.height / 4); - path.LineTo(rtLBtn.left + rtLBtn.Width() / 3, rtLBtn.top + rtLBtn.height / 2); - path.LineTo(rtLBtn.left + rtLBtn.Width() / 3 * 2, - rtLBtn.bottom() - rtLBtn.height / 4); - CFX_Color clrFlag(ArgbEncode(0xff, 50, 104, 205)); - pParams->m_pGraphics->SetStrokeColor(&clrFlag); - pParams->m_pGraphics->StrokePath(&path, pMatrix); - pParams->m_pGraphics->RestoreGraphState(); - return TRUE; -} -FX_BOOL CFWL_MonthCalendarTP::DrawRButton(CFWL_ThemeBackground* pParams, - CFX_Matrix* pMatrix) { - CFX_Path path; - path.Create(); - CFX_RectF rtRBtn; - rtRBtn = pParams->m_rtPart; - path.AddRectangle(rtRBtn.left, rtRBtn.top, rtRBtn.width, rtRBtn.height); - pParams->m_pGraphics->SaveGraphState(); - CFX_Color clrRBtnEdge(ArgbEncode(0xff, 205, 219, 243)); - pParams->m_pGraphics->SetStrokeColor(&clrRBtnEdge); - pParams->m_pGraphics->StrokePath(&path, pMatrix); - if ((pParams->m_dwStates & FWL_PARTSTATE_MCD_Pressed) == - FWL_PARTSTATE_MCD_Pressed) { - CFX_Color clrRBtnFill(ArgbEncode(0xff, 174, 198, 242)); - pParams->m_pGraphics->SetFillColor(&clrRBtnFill); - pParams->m_pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix); - } else { - CFX_Color clrRBtnFill(ArgbEncode(0xff, 227, 235, 249)); - pParams->m_pGraphics->SetFillColor(&clrRBtnFill); - pParams->m_pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix); - } - path.Clear(); - path.MoveTo(rtRBtn.left + rtRBtn.Width() / 3, rtRBtn.top + rtRBtn.height / 4); - path.LineTo(rtRBtn.left + rtRBtn.Width() / 3 * 2, - rtRBtn.top + rtRBtn.height / 2); - path.LineTo(rtRBtn.left + rtRBtn.Width() / 3, - rtRBtn.bottom() - rtRBtn.height / 4); - CFX_Color clrFlag(ArgbEncode(0xff, 50, 104, 205)); - pParams->m_pGraphics->SetStrokeColor(&clrFlag); - pParams->m_pGraphics->StrokePath(&path, pMatrix); - pParams->m_pGraphics->RestoreGraphState(); - return TRUE; -} -FX_BOOL CFWL_MonthCalendarTP::DrawHSeperator(CFWL_ThemeBackground* pParams, - CFX_Matrix* pMatrix) { - CFX_Path path; - path.Create(); - CFX_RectF rtHSep; - rtHSep = pParams->m_rtPart; - path.MoveTo(rtHSep.left, rtHSep.top + rtHSep.height / 2); - path.LineTo(rtHSep.right(), rtHSep.top + rtHSep.height / 2); - pParams->m_pGraphics->SaveGraphState(); - CFX_Color clrHSep(m_pThemeData->clrSeperator); - pParams->m_pGraphics->SetStrokeColor(&clrHSep); - pParams->m_pGraphics->StrokePath(&path, pMatrix); - pParams->m_pGraphics->RestoreGraphState(); - return TRUE; -} -FX_BOOL CFWL_MonthCalendarTP::DrawWeekNumSep(CFWL_ThemeBackground* pParams, - CFX_Matrix* pMatrix) { - CFX_Path path; - path.Create(); - CFX_RectF rtWeekSep; - rtWeekSep = pParams->m_rtPart; - path.MoveTo(rtWeekSep.left, rtWeekSep.top); - path.LineTo(rtWeekSep.left, rtWeekSep.bottom()); - pParams->m_pGraphics->SaveGraphState(); - CFX_Color clrHSep(m_pThemeData->clrSeperator); - pParams->m_pGraphics->SetStrokeColor(&clrHSep); - pParams->m_pGraphics->StrokePath(&path, pMatrix); - pParams->m_pGraphics->RestoreGraphState(); - return TRUE; -} -FX_BOOL CFWL_MonthCalendarTP::DrawDatesInBK(CFWL_ThemeBackground* pParams, - CFX_Matrix* pMatrix) { - pParams->m_pGraphics->SaveGraphState(); - if (pParams->m_dwStates & FWL_PARTSTATE_MCD_Selected) { - CFX_Path path; - path.Create(); - CFX_RectF rtSelDay; - rtSelDay = pParams->m_rtPart; - path.AddRectangle(rtSelDay.left, rtSelDay.top, rtSelDay.width, - rtSelDay.height); - CFX_Color clrSelDayBK; - clrSelDayBK = m_pThemeData->clrDatesSelectedBK; - pParams->m_pGraphics->SetFillColor(&clrSelDayBK); - pParams->m_pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix); - } else if (pParams->m_dwStates & FWL_PARTSTATE_MCD_Hovered) { - CFX_Path path; - path.Create(); - CFX_RectF rtSelDay; - rtSelDay = pParams->m_rtPart; - path.AddRectangle(rtSelDay.left, rtSelDay.top, rtSelDay.width, - rtSelDay.height); - CFX_Color clrSelDayBK; - clrSelDayBK = m_pThemeData->clrDatesHoverBK; - pParams->m_pGraphics->SetFillColor(&clrSelDayBK); - pParams->m_pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix); - } - pParams->m_pGraphics->RestoreGraphState(); - return FALSE; -} -FX_BOOL CFWL_MonthCalendarTP::DrawDatesInCircle(CFWL_ThemeBackground* pParams, - CFX_Matrix* pMatrix) { - CFX_Path path; - path.Create(); - CFX_RectF rtSelDay; - rtSelDay = pParams->m_rtPart; - path.AddRectangle(rtSelDay.left, rtSelDay.top, rtSelDay.width, - rtSelDay.height); - pParams->m_pGraphics->SaveGraphState(); - CFX_Color clrSelDayBK; - clrSelDayBK = m_pThemeData->clrDatesCircle; - pParams->m_pGraphics->SetStrokeColor(&clrSelDayBK); - pParams->m_pGraphics->StrokePath(&path, pMatrix); - pParams->m_pGraphics->RestoreGraphState(); - return TRUE; -} -FX_BOOL CFWL_MonthCalendarTP::DrawTodayCircle(CFWL_ThemeBackground* pParams, - CFX_Matrix* pMatrix) { - CFX_Path path; - path.Create(); - CFX_RectF rtTodayCircle; - rtTodayCircle = pParams->m_rtPart; - path.AddRectangle(rtTodayCircle.left, rtTodayCircle.top, rtTodayCircle.width, - rtTodayCircle.height); - pParams->m_pGraphics->SaveGraphState(); - CFX_Color clrTodayCircle; - clrTodayCircle = m_pThemeData->clrDatesCircle; - pParams->m_pGraphics->SetStrokeColor(&clrTodayCircle); - pParams->m_pGraphics->StrokePath(&path, pMatrix); - pParams->m_pGraphics->RestoreGraphState(); - return TRUE; -} -FWLTHEME_STATE CFWL_MonthCalendarTP::GetState(FX_DWORD dwFWLStates) { - if (dwFWLStates & FWL_PARTSTATE_MCD_Hovered) { - return FWLTHEME_STATE_Hover; - } else if (dwFWLStates & FWL_PARTSTATE_MCD_Pressed) { - return FWLTHEME_STATE_Pressed; - } - return FWLTHEME_STATE_Normal; -} -void CFWL_MonthCalendarTP::SetThemeData(FX_DWORD dwThemeID) { - if (dwThemeID == 0) { - m_pThemeData->clrCaption = ArgbEncode(0xff, 0, 153, 255); - m_pThemeData->clrSeperator = ArgbEncode(0xff, 141, 161, 239); - m_pThemeData->clrDatesHoverBK = ArgbEncode(0xff, 193, 211, 251); - m_pThemeData->clrDatesSelectedBK = ArgbEncode(0xff, 173, 188, 239); - m_pThemeData->clrDatesCircle = ArgbEncode(0xff, 103, 144, 209); - m_pThemeData->clrToday = ArgbEncode(0xff, 0, 0, 0); - m_pThemeData->clrBK = ArgbEncode(0xff, 255, 255, 255); - } else { - m_pThemeData->clrCaption = ArgbEncode(0xff, 128, 128, 0); - m_pThemeData->clrSeperator = ArgbEncode(0xff, 128, 128, 64); - m_pThemeData->clrDatesHoverBK = ArgbEncode(0xff, 217, 220, 191); - m_pThemeData->clrDatesSelectedBK = ArgbEncode(0xff, 204, 208, 183); - m_pThemeData->clrDatesCircle = ArgbEncode(0xff, 128, 128, 0); - m_pThemeData->clrToday = ArgbEncode(0xff, 0, 0, 0); - m_pThemeData->clrBK = ArgbEncode(0xff, 255, 255, 255); - } -} diff --git a/xfa/src/fwl/theme/pictureboxtp.cpp b/xfa/src/fwl/theme/pictureboxtp.cpp deleted file mode 100644 index 5d7c079e86..0000000000 --- a/xfa/src/fwl/theme/pictureboxtp.cpp +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/include/fwl/theme/pictureboxtp.h" - -#include "xfa/include/fwl/basewidget/fwl_picturebox.h" -#include "xfa/include/fwl/core/fwl_widget.h" - -CFWL_PictureBoxTP::CFWL_PictureBoxTP() {} -CFWL_PictureBoxTP::~CFWL_PictureBoxTP() {} - -FX_BOOL CFWL_PictureBoxTP::IsValidWidget(IFWL_Widget* pWidget) { - if (!pWidget) - return FALSE; - return pWidget->GetClassID() == FWL_CLASSHASH_PictureBox; -} -FX_BOOL CFWL_PictureBoxTP::DrawBackground(CFWL_ThemeBackground* pParams) { - if (!pParams) - return FALSE; - switch (pParams->m_iPart) { - case FWL_PART_PTB_Border: { - DrawBorder(pParams->m_pGraphics, &pParams->m_rtPart, &pParams->m_matrix); - break; - } - case FWL_PART_PTB_Edge: { - DrawEdge(pParams->m_pGraphics, pParams->m_pWidget->GetStyles(), - &pParams->m_rtPart, &pParams->m_matrix); - break; - } - default: {} - } - return TRUE; -} diff --git a/xfa/src/fwl/theme/pushbuttontp.cpp b/xfa/src/fwl/theme/pushbuttontp.cpp deleted file mode 100644 index 76e0eab7dc..0000000000 --- a/xfa/src/fwl/theme/pushbuttontp.cpp +++ /dev/null @@ -1,157 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/include/fwl/theme/pushbuttontp.h" - -#include "xfa/include/fwl/basewidget/fwl_pushbutton.h" -#include "xfa/include/fwl/core/fwl_widget.h" - -#define PUSHBUTTON_SIZE_Corner 2 - -CFWL_PushButtonTP::CFWL_PushButtonTP() { - m_pThemeData = new PBThemeData; - SetThemeData(0); -} -CFWL_PushButtonTP::~CFWL_PushButtonTP() { - if (m_pThemeData) { - delete m_pThemeData; - } -} -FX_BOOL CFWL_PushButtonTP::IsValidWidget(IFWL_Widget* pWidget) { - return pWidget->GetClassID() == FWL_CLASSHASH_PushButton; -} -FX_DWORD CFWL_PushButtonTP::SetThemeID(IFWL_Widget* pWidget, - FX_DWORD dwThemeID, - FX_BOOL bChildren) { - SetThemeData(FWL_GetThemeColor(dwThemeID)); - return CFWL_WidgetTP::SetThemeID(pWidget, dwThemeID, bChildren); -} -FX_BOOL CFWL_PushButtonTP::DrawBackground(CFWL_ThemeBackground* pParams) { - switch (pParams->m_iPart) { - case FWL_PART_PSB_Border: { - DrawBorder(pParams->m_pGraphics, &pParams->m_rtPart, &pParams->m_matrix); - break; - } - case FWL_PART_PSB_Edge: { - DrawEdge(pParams->m_pGraphics, pParams->m_pWidget->GetStyles(), - &pParams->m_rtPart, &pParams->m_matrix); - break; - } - case FWL_PART_PSB_Background: { - CFX_RectF& rect = pParams->m_rtPart; - FX_FLOAT fRight = rect.right(); - FX_FLOAT fBottom = rect.bottom(); - CFX_Path strokePath; - strokePath.Create(); - strokePath.MoveTo(rect.left + PUSHBUTTON_SIZE_Corner, rect.top); - strokePath.LineTo(fRight - PUSHBUTTON_SIZE_Corner, rect.top); - strokePath.LineTo(fRight, rect.top + PUSHBUTTON_SIZE_Corner); - strokePath.LineTo(fRight, fBottom - PUSHBUTTON_SIZE_Corner); - strokePath.LineTo(fRight - PUSHBUTTON_SIZE_Corner, fBottom); - strokePath.LineTo(rect.left + PUSHBUTTON_SIZE_Corner, fBottom); - strokePath.LineTo(rect.left, fBottom - PUSHBUTTON_SIZE_Corner); - strokePath.LineTo(rect.left, rect.top + PUSHBUTTON_SIZE_Corner); - strokePath.LineTo(rect.left + PUSHBUTTON_SIZE_Corner, rect.top); - CFX_Path fillPath; - fillPath.Create(); - fillPath.AddSubpath(&strokePath); - CFX_Graphics* pGraphics = pParams->m_pGraphics; - pGraphics->SaveGraphState(); - CFX_RectF rtInner(rect); - rtInner.Deflate(PUSHBUTTON_SIZE_Corner + 1, PUSHBUTTON_SIZE_Corner + 1, - PUSHBUTTON_SIZE_Corner, PUSHBUTTON_SIZE_Corner); - fillPath.AddRectangle(rtInner.left, rtInner.top, rtInner.width, - rtInner.height); - int32_t iColor = GetColorID(pParams->m_dwStates); - DrawAxialShading(pGraphics, rect.left + PUSHBUTTON_SIZE_Corner, rect.top, - rect.left + PUSHBUTTON_SIZE_Corner, rect.bottom(), - m_pThemeData->clrStart[iColor], - m_pThemeData->clrEnd[iColor], &fillPath, - FXFILL_ALTERNATE, &pParams->m_matrix); - CFX_Color crStroke(m_pThemeData->clrBorder[iColor]); - pGraphics->SetStrokeColor(&crStroke); - pGraphics->StrokePath(&strokePath, &pParams->m_matrix); - fillPath.Clear(); - fillPath.AddRectangle(rtInner.left, rtInner.top, rtInner.width, - rtInner.height); - CFX_Color crFill(m_pThemeData->clrFill[iColor]); - pGraphics->SetFillColor(&crFill); - pGraphics->FillPath(&fillPath, FXFILL_WINDING, &pParams->m_matrix); - if (pParams->m_dwStates & FWL_PARTSTATE_PSB_Focused) { - rtInner.Inflate(1, 1, 0, 0); - DrawFocus(pGraphics, &rtInner, &pParams->m_matrix); - } - pGraphics->RestoreGraphState(); - break; - } - default: {} - } - return TRUE; -} -void* CFWL_PushButtonTP::GetCapacity(CFWL_ThemePart* pThemePart, - FX_DWORD dwCapacity) { - if (dwCapacity == FWL_WGTCAPACITY_PSB_Margin) { - m_fValue = 0; - return &m_fValue; - } - return CFWL_WidgetTP::GetCapacity(pThemePart, dwCapacity); -} -FWL_ERR CFWL_PushButtonTP::Initialize() { - InitTTO(); - return CFWL_WidgetTP::Initialize(); -} -FWL_ERR CFWL_PushButtonTP::Finalize() { - FinalizeTTO(); - return CFWL_WidgetTP::Finalize(); -} -void CFWL_PushButtonTP::SetThemeData(FX_DWORD dwID) { - if (dwID) { - m_pThemeData->clrBorder[0] = ArgbEncode(255, 55, 98, 6); - m_pThemeData->clrBorder[1] = ArgbEncode(255, 55, 98, 6); - m_pThemeData->clrBorder[2] = ArgbEncode(255, 55, 98, 6); - m_pThemeData->clrBorder[3] = ArgbEncode(255, 55, 98, 6); - m_pThemeData->clrBorder[4] = ArgbEncode(255, 172, 168, 153); - m_pThemeData->clrStart[0] = ArgbEncode(255, 255, 255, 246); - m_pThemeData->clrStart[1] = ArgbEncode(255, 223, 205, 180); - m_pThemeData->clrStart[2] = ArgbEncode(255, 252, 197, 149); - m_pThemeData->clrStart[3] = ArgbEncode(255, 194, 209, 143); - m_pThemeData->clrStart[4] = ArgbEncode(255, 216, 216, 216); - m_pThemeData->clrEnd[0] = ArgbEncode(255, 227, 209, 184); - m_pThemeData->clrEnd[1] = ArgbEncode(255, 248, 244, 228); - m_pThemeData->clrEnd[2] = ArgbEncode(255, 207, 114, 37); - m_pThemeData->clrEnd[3] = ArgbEncode(255, 144, 193, 84); - m_pThemeData->clrEnd[4] = ArgbEncode(255, 172, 168, 153); - m_pThemeData->clrFill[0] = ArgbEncode(255, 255, 255, 255); - m_pThemeData->clrFill[1] = ArgbEncode(255, 226, 225, 218); - m_pThemeData->clrFill[2] = ArgbEncode(255, 255, 255, 255); - m_pThemeData->clrFill[3] = ArgbEncode(255, 255, 255, 255); - m_pThemeData->clrFill[4] = ArgbEncode(255, 245, 244, 234); - } else { - m_pThemeData->clrBorder[0] = ArgbEncode(255, 0, 60, 116); - m_pThemeData->clrBorder[1] = ArgbEncode(255, 0, 60, 116); - m_pThemeData->clrBorder[2] = ArgbEncode(255, 0, 60, 116); - m_pThemeData->clrBorder[3] = ArgbEncode(255, 0, 60, 116); - m_pThemeData->clrBorder[4] = ArgbEncode(255, 201, 199, 186); - m_pThemeData->clrStart[0] = ArgbEncode(255, 255, 255, 255); - m_pThemeData->clrStart[1] = ArgbEncode(255, 209, 204, 193); - m_pThemeData->clrStart[2] = ArgbEncode(255, 255, 240, 207); - m_pThemeData->clrStart[3] = ArgbEncode(255, 206, 231, 255); - m_pThemeData->clrStart[4] = ArgbEncode(255, 245, 244, 234); - m_pThemeData->clrEnd[0] = ArgbEncode(255, 214, 208, 197); - m_pThemeData->clrEnd[1] = ArgbEncode(255, 242, 241, 238); - m_pThemeData->clrEnd[2] = ArgbEncode(255, 229, 151, 0); - m_pThemeData->clrEnd[3] = ArgbEncode(255, 105, 130, 238); - m_pThemeData->clrEnd[4] = ArgbEncode(255, 245, 244, 234); - m_pThemeData->clrFill[0] = ArgbEncode(255, 255, 255, 255); - m_pThemeData->clrFill[1] = ArgbEncode(255, 226, 225, 218); - m_pThemeData->clrFill[2] = ArgbEncode(255, 255, 255, 255); - m_pThemeData->clrFill[3] = ArgbEncode(255, 255, 255, 255); - m_pThemeData->clrFill[4] = ArgbEncode(255, 245, 244, 234); - } -} -int32_t CFWL_PushButtonTP::GetColorID(FX_DWORD dwStates) { - return dwStates &= FWL_PARTSTATE_PSB_Mask; -} diff --git a/xfa/src/fwl/theme/scrollbartp.cpp b/xfa/src/fwl/theme/scrollbartp.cpp deleted file mode 100644 index 424ff549e5..0000000000 --- a/xfa/src/fwl/theme/scrollbartp.cpp +++ /dev/null @@ -1,377 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/include/fwl/theme/scrollbartp.h" - -#include "xfa/include/fwl/basewidget/fwl_scrollbar.h" -#include "xfa/include/fwl/core/fwl_widget.h" - -#define FWL_SCROLL_PawLen 12.5f - -CFWL_ScrollBarTP::CFWL_ScrollBarTP() { - m_pThemeData = new SBThemeData; - SetThemeData(0); -} -CFWL_ScrollBarTP::~CFWL_ScrollBarTP() { - if (m_pThemeData) { - delete m_pThemeData; - m_pThemeData = NULL; - } -} -FX_BOOL CFWL_ScrollBarTP::IsValidWidget(IFWL_Widget* pWidget) { - if (!pWidget) - return FALSE; - return pWidget->GetClassID() == FWL_CLASSHASH_ScrollBar; -} -void* CFWL_ScrollBarTP::GetCapacity(CFWL_ThemePart* pThemePart, - FX_DWORD dwCapacity) { - if (dwCapacity == FWL_CAPACITY_SCB_Size) { - m_fValue = 5; - return &m_fValue; - } - return CFWL_WidgetTP::GetCapacity(pThemePart, dwCapacity); -} -FX_DWORD CFWL_ScrollBarTP::SetThemeID(IFWL_Widget* pWidget, - FX_DWORD dwThemeID, - FX_BOOL bChildren) { - if (m_pThemeData) { - SetThemeData(FWL_GetThemeColor(dwThemeID)); - } - return CFWL_WidgetTP::SetThemeID(pWidget, dwThemeID, bChildren); -} -FX_BOOL CFWL_ScrollBarTP::DrawBackground(CFWL_ThemeBackground* pParams) { - if (!pParams) - return FALSE; - IFWL_Widget* pWidget = pParams->m_pWidget; - FWLTHEME_STATE eState = FWLTHEME_STATE_Normal; - switch (pParams->m_dwStates & 0x03) { - case FWL_PARTSTATE_SCB_Hovered: { - eState = FWLTHEME_STATE_Hover; - break; - } - case FWL_PARTSTATE_SCB_Pressed: { - eState = FWLTHEME_STATE_Pressed; - break; - } - case FWL_PARTSTATE_SCB_Disabled: { - eState = FWLTHEME_STATE_Disabale; - break; - } - } - CFX_Graphics* pGraphics = pParams->m_pGraphics; - CFX_RectF* pRect = &pParams->m_rtPart; - FX_BOOL bVert = pWidget->GetStylesEx(); - switch (pParams->m_iPart) { - case FWL_PART_SCB_ForeArrow: { - DrawMaxMinBtn(pGraphics, pRect, - bVert ? FWLTHEME_DIRECTION_Up : FWLTHEME_DIRECTION_Left, - eState, &pParams->m_matrix); - break; - } - case FWL_PART_SCB_BackArrow: { - DrawMaxMinBtn(pGraphics, pRect, - bVert ? FWLTHEME_DIRECTION_Down : FWLTHEME_DIRECTION_Right, - eState, &pParams->m_matrix); - break; - } - case FWL_PART_SCB_Thumb: { - DrawThumbBtn(pGraphics, pRect, bVert, eState, TRUE, &pParams->m_matrix); - break; - } - case FWL_PART_SCB_LowerTrack: { - DrawTrack(pGraphics, pRect, bVert, eState, TRUE, &pParams->m_matrix); - break; - } - case FWL_PART_SCB_UpperTrack: { - DrawTrack(pGraphics, pRect, bVert, eState, FALSE, &pParams->m_matrix); - break; - } - default: {} - } - return TRUE; -} -#ifdef THEME_XPSimilar -void CFWL_ScrollBarTP::DrawThumbBtn(CFX_Graphics* pGraphics, - const CFX_RectF* pRect, - FX_BOOL bVert, - FWLTHEME_STATE eState, - FX_BOOL bPawButton, - CFX_Matrix* pMatrix) { - if (eState < FWLTHEME_STATE_Normal || eState > FWLTHEME_STATE_Disabale) { - return; - } - CFX_Path path; - path.Create(); - CFX_RectF rect(*pRect); - if (bVert) { - rect.Deflate(1, 0); - if (rect.IsEmpty(0.1f)) { - return; - } - path.AddRectangle(rect.left, rect.top, rect.width, rect.height); - DrawAxialShading(pGraphics, rect.left, rect.top, rect.right(), rect.top, - m_pThemeData->clrBtnBK[eState - 1][0], - m_pThemeData->clrBtnBK[eState - 1][1], &path, - FXFILL_WINDING, pMatrix); - CFX_Color rcStroke; - rcStroke.Set(m_pThemeData->clrBtnBorder[eState - 1]); - pGraphics->SaveGraphState(); - pGraphics->SetStrokeColor(&rcStroke); - pGraphics->StrokePath(&path, pMatrix); - pGraphics->RestoreGraphState(); - } else { - rect.Deflate(0, 1); - if (rect.IsEmpty(0.1f)) { - return; - } - path.AddRectangle(rect.left, rect.top, rect.width, rect.height); - DrawAxialShading(pGraphics, rect.left, rect.top, rect.left, rect.bottom(), - m_pThemeData->clrBtnBK[eState - 1][0], - m_pThemeData->clrBtnBK[eState - 1][1], &path, - FXFILL_WINDING, pMatrix); - CFX_Color rcStroke; - rcStroke.Set(m_pThemeData->clrBtnBorder[eState - 1]); - pGraphics->SaveGraphState(); - pGraphics->SetStrokeColor(&rcStroke); - pGraphics->StrokePath(&path, pMatrix); - pGraphics->RestoreGraphState(); - } -} -void CFWL_ScrollBarTP::DrawPaw(CFX_Graphics* pGraphics, - const CFX_RectF* pRect, - FX_BOOL bVert, - FWLTHEME_STATE eState, - CFX_Matrix* pMatrix) { - CFX_Path path; - path.Create(); - if (bVert) { - FX_FLOAT fPawLen = FWL_SCROLL_PawLen; - if (pRect->width / 2 <= fPawLen) { - fPawLen = (pRect->width - 6) / 2; - } - FX_FLOAT fX = pRect->left + pRect->width / 4; - FX_FLOAT fY = pRect->top + pRect->height / 2; - path.MoveTo(fX, fY - 4); - path.LineTo(fX + fPawLen, fY - 4); - path.MoveTo(fX, fY - 2); - path.LineTo(fX + fPawLen, fY - 2); - path.MoveTo(fX, fY); - path.LineTo(fX + fPawLen, fY); - path.MoveTo(fX, fY + 2); - path.LineTo(fX + fPawLen, fY + 2); - CFX_Color clrLight(m_pThemeData->clrPawColorLight[eState - 1]); - pGraphics->SetLineWidth(1); - pGraphics->SetStrokeColor(&clrLight); - pGraphics->StrokePath(&path); - fX++; - path.Clear(); - path.MoveTo(fX, fY - 3); - path.LineTo(fX + fPawLen, fY - 3); - path.MoveTo(fX, fY - 1); - path.LineTo(fX + fPawLen, fY - 1); - path.MoveTo(fX, fY + 1); - path.LineTo(fX + fPawLen, fY + 1); - path.MoveTo(fX, fY + 3); - path.LineTo(fX + fPawLen, fY + 3); - CFX_Color clrDark(m_pThemeData->clrPawColorDark[eState - 1]); - pGraphics->SetLineWidth(1); - pGraphics->SetStrokeColor(&clrDark); - pGraphics->StrokePath(&path, pMatrix); - } else { - FX_FLOAT fPawLen = FWL_SCROLL_PawLen; - if (pRect->height / 2 <= fPawLen) { - fPawLen = (pRect->height - 6) / 2; - } - FX_FLOAT fX = pRect->left + pRect->width / 2; - FX_FLOAT fY = pRect->top + pRect->height / 4; - path.MoveTo(fX - 4, fY); - path.LineTo(fX - 4, fY + fPawLen); - path.MoveTo(fX - 2, fY); - path.LineTo(fX - 2, fY + fPawLen); - path.MoveTo(fX, fY); - path.LineTo(fX, fY + fPawLen); - path.MoveTo(fX + 2, fY); - path.LineTo(fX + 2, fY + fPawLen); - CFX_Color clrLight(m_pThemeData->clrPawColorLight[eState - 1]); - pGraphics->SetLineWidth(1); - pGraphics->SetStrokeColor(&clrLight); - pGraphics->StrokePath(&path, pMatrix); - fY++; - path.Clear(); - path.MoveTo(fX - 3, fY); - path.LineTo(fX - 3, fY + fPawLen); - path.MoveTo(fX - 1, fY); - path.LineTo(fX - 1, fY + fPawLen); - path.MoveTo(fX + 1, fY); - path.LineTo(fX + 1, fY + fPawLen); - path.MoveTo(fX + 3, fY); - path.LineTo(fX + 3, fY + fPawLen); - CFX_Color clrDark(m_pThemeData->clrPawColorDark[eState - 1]); - pGraphics->SetLineWidth(1); - pGraphics->SetStrokeColor(&clrDark); - pGraphics->StrokePath(&path, pMatrix); - } -} -void CFWL_ScrollBarTP::DrawTrack(CFX_Graphics* pGraphics, - const CFX_RectF* pRect, - FX_BOOL bVert, - FWLTHEME_STATE eState, - FX_BOOL bLowerTrack, - CFX_Matrix* pMatrix) { - if (eState < FWLTHEME_STATE_Normal || eState > FWLTHEME_STATE_Disabale) { - return; - } - pGraphics->SaveGraphState(); - CFX_Color colorLine(ArgbEncode(255, 238, 237, 229)); - CFX_Path path; - path.Create(); - FX_FLOAT fRight = pRect->right(); - FX_FLOAT fBottom = pRect->bottom(); - if (bVert) { - path.AddRectangle(pRect->left, pRect->top, 1, pRect->height); - path.AddRectangle(fRight - 1, pRect->top, 1, pRect->height); - } else { - path.AddRectangle(pRect->left, pRect->top, pRect->width, 1); - path.AddRectangle(pRect->left, fBottom - 1, pRect->width, 1); - } - pGraphics->SetFillColor(&colorLine); - pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix); - path.Clear(); - path.AddRectangle(pRect->left + 1, pRect->top, pRect->width - 2, - pRect->height); - FX_FLOAT x1 = bVert ? pRect->left + 1 : pRect->left; - FX_FLOAT y1 = bVert ? pRect->top : pRect->top + 1; - FX_FLOAT x2 = bVert ? fRight - 1 : pRect->left; - FX_FLOAT y2 = bVert ? pRect->top : fBottom - 1; - pGraphics->RestoreGraphState(); - DrawAxialShading(pGraphics, x1, y1, x2, y2, m_pThemeData->clrTrackBKStart, - m_pThemeData->clrTrackBKEnd, &path, FXFILL_WINDING, pMatrix); -} -void CFWL_ScrollBarTP::DrawMaxMinBtn(CFX_Graphics* pGraphics, - const CFX_RectF* pRect, - FWLTHEME_DIRECTION eDict, - FWLTHEME_STATE eState, - CFX_Matrix* pMatrix) { - DrawTrack(pGraphics, pRect, - eDict == FWLTHEME_DIRECTION_Up || eDict == FWLTHEME_DIRECTION_Down, - eState, TRUE, pMatrix); - CFX_RectF rtArrowBtn(*pRect); - rtArrowBtn.Deflate(1, 1, 1, 1); - DrawArrowBtn(pGraphics, &rtArrowBtn, eDict, eState, pMatrix); -} -#else -void CFWL_ScrollBarTP::DrawThumbBtn(CFX_Graphics* pGraphics, - const CFX_RectF* pRect, - FX_BOOL bVert, - FWLTHEME_STATE eState, - FX_BOOL bPawButton, - CFX_Matrix* pMatrix) { - if (pRect->IsEmpty()) { - return; - } - CFX_RectF rtThumb(*pRect); - FX_FLOAT fWidth = 2; - Draw3DRect(pGraphics, FWLTHEME_EDGE_Raised, fWidth, pRect, - FWLTHEME_COLOR_EDGELT1, FWLTHEME_COLOR_EDGELT2, - FWLTHEME_COLOR_EDGERB1, FWLTHEME_COLOR_EDGERB2, pMatrix); - CFX_Path path; - path.Create(); - path.AddRectangle(pRect->left + fWidth, pRect->top + fWidth, - pRect->width - 2 * fWidth, pRect->height - 2 * fWidth); - pGraphics->SaveGraphState(); - CFX_Color crFill(FWLTHEME_COLOR_Background); - pGraphics->SetFillColor(&crFill); - pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix); - pGraphics->RestoreGraphState(); -} -void CFWL_ScrollBarTP::DrawTrack(CFX_Graphics* pGraphics, - const CFX_RectF* pRect, - FX_BOOL bVert, - FWLTHEME_STATE eState, - FX_BOOL bLowerTrack, - CFX_Matrix* pMatrix) { - if (pRect->IsEmpty()) { - return; - } - CFX_Path path; - path.Create(); - path.AddRectangle(pRect->left, pRect->top, pRect->width, pRect->height); - pGraphics->SaveGraphState(); - CFX_Color clrFill(0xFFF0F0F0); - pGraphics->SetFillColor(&clrFill); - pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix); - pGraphics->RestoreGraphState(); -} -void CFWL_ScrollBarTP::DrawMaxMinBtn(CFX_Graphics* pGraphics, - const CFX_RectF* pRect, - FWLTHEME_DIRECTION eDict, - FWLTHEME_STATE eState, - CFX_Matrix* pMatrix) { - CFX_RectF rtThumb(*pRect); - FX_FLOAT fWidth = eState == FWLTHEME_STATE_Pressed ? 1.0f : 2.0f; - FWLTHEME_EDGE eType = eState == FWLTHEME_STATE_Pressed ? FWLTHEME_EDGE_Flat - : FWLTHEME_EDGE_Raised; - Draw3DRect(pGraphics, eType, fWidth, pRect, FWLTHEME_COLOR_EDGELT1, - FWLTHEME_COLOR_EDGELT2, FWLTHEME_COLOR_EDGERB1, - FWLTHEME_COLOR_EDGERB2, pMatrix); - CFX_Path path; - path.Create(); - path.AddRectangle(pRect->left + fWidth, pRect->top + fWidth, - pRect->width - 2 * fWidth, pRect->height - 2 * fWidth); - pGraphics->SaveGraphState(); - CFX_Color crFill(FWLTHEME_COLOR_Background); - pGraphics->SetFillColor(&crFill); - pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix); - pGraphics->RestoreGraphState(); - DrawArrow(pGraphics, pRect, eDict, - eState == FWLTHEME_STATE_Disabale ? 0xFFA0A0A0 : 0xFF000000, - eState == FWLTHEME_STATE_Pressed, pMatrix); -} -#endif -void CFWL_ScrollBarTP::SetThemeData(FX_DWORD dwID) { - m_pThemeData->clrPawColorLight[3] = ArgbEncode(0xff, 208, 223, 172); - m_pThemeData->clrPawColorDark[3] = ArgbEncode(0xff, 140, 157, 115); - m_pThemeData->clrBtnBK[3][0] = ArgbEncode(0xff, 164, 180, 139); - m_pThemeData->clrBtnBK[3][1] = ArgbEncode(0xff, 141, 157, 115); - m_pThemeData->clrBtnBorder[3] = ArgbEncode(0xff, 236, 233, 216); - if (dwID) { - m_pThemeData->clrPawColorLight[0] = ArgbEncode(0xff, 208, 223, 172); - m_pThemeData->clrPawColorDark[0] = ArgbEncode(0xff, 140, 157, 115); - m_pThemeData->clrBtnBK[0][0] = ArgbEncode(0xff, 162, 179, 141); - m_pThemeData->clrBtnBK[0][1] = ArgbEncode(0xff, 149, 167, 117); - m_pThemeData->clrBtnBorder[0] = ArgbEncode(0xff, 142, 153, 125); - m_pThemeData->clrPawColorLight[1] = ArgbEncode(0xff, 235, 245, 212); - m_pThemeData->clrPawColorDark[1] = ArgbEncode(0xff, 182, 198, 142); - m_pThemeData->clrBtnBK[1][0] = ArgbEncode(0xff, 200, 213, 170); - m_pThemeData->clrBtnBK[1][1] = ArgbEncode(0xff, 195, 208, 150); - m_pThemeData->clrBtnBorder[1] = ArgbEncode(0xff, 189, 203, 150); - m_pThemeData->clrPawColorLight[2] = ArgbEncode(0xff, 208, 223, 172); - m_pThemeData->clrPawColorDark[2] = ArgbEncode(0xff, 140, 157, 115); - m_pThemeData->clrBtnBK[2][0] = ArgbEncode(0xff, 164, 180, 139); - m_pThemeData->clrBtnBK[2][1] = ArgbEncode(0xff, 141, 157, 115); - m_pThemeData->clrBtnBorder[2] = ArgbEncode(0xff, 128, 146, 102); - m_pThemeData->clrTrackBKStart = ArgbEncode(0xff, 243, 241, 236); - m_pThemeData->clrTrackBKEnd = ArgbEncode(0xff, 254, 254, 251); - } else { - m_pThemeData->clrPawColorLight[0] = ArgbEncode(0xff, 238, 244, 254); - m_pThemeData->clrPawColorDark[0] = ArgbEncode(0xff, 140, 176, 248); - m_pThemeData->clrBtnBK[0][0] = ArgbEncode(0xff, 197, 213, 252); - m_pThemeData->clrBtnBK[0][1] = ArgbEncode(0xff, 182, 205, 251); - m_pThemeData->clrBtnBorder[0] = ArgbEncode(0xff, 148, 176, 221); - m_pThemeData->clrPawColorLight[1] = ArgbEncode(0xff, 252, 253, 255); - m_pThemeData->clrPawColorDark[1] = ArgbEncode(0xff, 156, 197, 255); - m_pThemeData->clrBtnBK[1][0] = ArgbEncode(0xff, 216, 232, 255); - m_pThemeData->clrBtnBK[1][1] = ArgbEncode(0xff, 204, 225, 255); - m_pThemeData->clrBtnBorder[1] = ArgbEncode(0xff, 218, 230, 254); - m_pThemeData->clrPawColorLight[2] = ArgbEncode(0xff, 207, 221, 253); - m_pThemeData->clrPawColorDark[2] = ArgbEncode(0xff, 131, 158, 216); - m_pThemeData->clrBtnBK[2][0] = ArgbEncode(0xff, 167, 190, 245); - m_pThemeData->clrBtnBK[2][1] = ArgbEncode(0xff, 146, 179, 249); - m_pThemeData->clrBtnBorder[2] = ArgbEncode(0xff, 124, 159, 211); - m_pThemeData->clrTrackBKStart = ArgbEncode(0xff, 243, 241, 236); - m_pThemeData->clrTrackBKEnd = ArgbEncode(0xff, 254, 254, 251); - } -} diff --git a/xfa/src/fwl/theme/widgettp.cpp b/xfa/src/fwl/theme/widgettp.cpp deleted file mode 100644 index c26a62c561..0000000000 --- a/xfa/src/fwl/theme/widgettp.cpp +++ /dev/null @@ -1,840 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/include/fwl/theme/widgettp.h" - -#include - -#include "xfa/include/fwl/core/fwl_widgetmgr.h" -#include "xfa/src/fde/tto/fde_textout.h" - -static void FWL_SetChildThemeID(IFWL_Widget* pParent, FX_DWORD dwThemeID) { - IFWL_WidgetMgr* pWidgetMgr = FWL_GetWidgetMgr(); - IFWL_Widget* pChild = - pWidgetMgr->GetWidget(pParent, FWL_WGTRELATION_FirstChild); - while (pChild) { - IFWL_ThemeProvider* pTheme = pChild->GetThemeProvider(); - if (pTheme) { - pTheme->SetThemeID(pChild, dwThemeID, FALSE); - } - FWL_SetChildThemeID(pChild, dwThemeID); - pChild = pWidgetMgr->GetWidget(pChild, FWL_WGTRELATION_NextSibling); - } -} -FX_BOOL CFWL_WidgetTP::IsValidWidget(IFWL_Widget* pWidget) { - return FALSE; -} -FX_DWORD CFWL_WidgetTP::GetThemeID(IFWL_Widget* pWidget) { - return m_dwThemeID; -} -FX_DWORD CFWL_WidgetTP::SetThemeID(IFWL_Widget* pWidget, - FX_DWORD dwThemeID, - FX_BOOL bChildren) { - FX_DWORD dwOld = m_dwThemeID; - m_dwThemeID = dwThemeID; - if (CFWL_ArrowData::IsInstance()) { - CFWL_ArrowData::GetInstance()->SetColorData(FWL_GetThemeColor(dwThemeID)); - } - if (bChildren) { - FWL_SetChildThemeID(pWidget, dwThemeID); - } - return dwOld; -} -FWL_ERR CFWL_WidgetTP::GetThemeMatrix(IFWL_Widget* pWidget, - CFX_Matrix& matrix) { - matrix.Set(_ctm.a, _ctm.b, _ctm.c, _ctm.d, _ctm.e, _ctm.f); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_WidgetTP::SetThemeMatrix(IFWL_Widget* pWidget, - const CFX_Matrix& matrix) { - _ctm.Set(matrix.a, matrix.b, matrix.c, matrix.d, matrix.e, matrix.f); - return FWL_ERR_Succeeded; -} -FX_BOOL CFWL_WidgetTP::DrawBackground(CFWL_ThemeBackground* pParams) { - return TRUE; -} -FX_BOOL CFWL_WidgetTP::DrawText(CFWL_ThemeText* pParams) { - if (!m_pTextOut) { - InitTTO(); - } - int32_t iLen = pParams->m_wsText.GetLength(); - if (iLen <= 0) - return FALSE; - CFX_Graphics* pGraphics = pParams->m_pGraphics; - m_pTextOut->SetRenderDevice(pGraphics->GetRenderDevice()); - m_pTextOut->SetStyles(pParams->m_dwTTOStyles); - m_pTextOut->SetAlignment(pParams->m_iTTOAlign); - CFX_Matrix* pMatrix = &pParams->m_matrix; - pMatrix->Concat(*pGraphics->GetMatrix()); - m_pTextOut->SetMatrix(*pMatrix); - m_pTextOut->DrawLogicText(pParams->m_wsText, iLen, pParams->m_rtPart); - return TRUE; -} -void* CFWL_WidgetTP::GetCapacity(CFWL_ThemePart* pThemePart, - FX_DWORD dwCapacity) { - switch (dwCapacity) { - case FWL_WGTCAPACITY_CXBorder: { - m_fValue = FWLTHEME_CAPACITY_CXBorder; - break; - } - case FWL_WGTCAPACITY_CYBorder: { - m_fValue = FWLTHEME_CAPACITY_CYBorder; - break; - } - case FWL_WGTCAPACITY_EdgeFlat: { - m_fValue = FWLTHEME_CAPACITY_EdgeFlat; - break; - } - case FWL_WGTCAPACITY_EdgeRaised: { - m_fValue = FWLTHEME_CAPACITY_EdgeRaised; - break; - } - case FWL_WGTCAPACITY_EdgeSunken: { - m_fValue = FWLTHEME_CAPACITY_EdgeSunken; - break; - } - case FWL_WGTCAPACITY_FontSize: { - m_fValue = FWLTHEME_CAPACITY_FontSize; - break; - } - case FWL_WGTCAPACITY_TextColor: { - m_dwValue = FWLTHEME_CAPACITY_TextColor; - return &m_dwValue; - } - case FWL_WGTCAPACITY_ScrollBarWidth: { - m_fValue = FWLTHEME_CAPACITY_ScrollBarWidth; - break; - } - case FWL_WGTCAPACITY_Font: { - return m_pFDEFont; - } - case FWL_WGTCAPACITY_TextSelColor: { - m_dwValue = (m_dwThemeID == 0) ? FWLTHEME_CAPACITY_TextSelColor - : FWLTHEME_COLOR_Green_BKSelected; - return &m_dwValue; - } - case FWL_WGTCAPACITY_LineHeight: { - m_fValue = FWLTHEME_CAPACITY_LineHeight; - break; - } - case FWL_WGTCAPACITY_UIMargin: { - m_rtMargin.Set(0, 0, 0, 0); - return &m_rtMargin; - } - default: { return NULL; } - } - return &m_fValue; -} -FX_BOOL CFWL_WidgetTP::IsCustomizedLayout(IFWL_Widget* pWidget) { - return FWL_GetThemeLayout(m_dwThemeID); -} -FWL_ERR CFWL_WidgetTP::GetPartRect(CFWL_ThemePart* pThemePart, - CFX_RectF& rect) { - return FWL_ERR_Succeeded; -} -FX_BOOL CFWL_WidgetTP::IsInPart(CFWL_ThemePart* pThemePart, - FX_FLOAT fx, - FX_FLOAT fy) { - return TRUE; -} -FX_BOOL CFWL_WidgetTP::CalcTextRect(CFWL_ThemeText* pParams, CFX_RectF& rect) { - if (!pParams) - return FALSE; - if (!m_pTextOut) - return FALSE; - m_pTextOut->SetAlignment(pParams->m_iTTOAlign); - m_pTextOut->SetStyles(pParams->m_dwTTOStyles | FDE_TTOSTYLE_ArabicContext); - m_pTextOut->CalcLogicSize(pParams->m_wsText, pParams->m_wsText.GetLength(), - rect); - return TRUE; -} -FWL_ERR CFWL_WidgetTP::Initialize() { - m_dwThemeID = 0; - _ctm.SetIdentity(); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_WidgetTP::Finalize() { - if (!m_pTextOut) { - FinalizeTTO(); - } - return FWL_ERR_Succeeded; -} -CFWL_WidgetTP::~CFWL_WidgetTP() {} -FWL_ERR CFWL_WidgetTP::SetFont(IFWL_Widget* pWidget, - const FX_WCHAR* strFont, - FX_FLOAT fFontSize, - FX_ARGB rgbFont) { - if (!m_pTextOut) { - return FWL_ERR_Succeeded; - } - m_pFDEFont = CFWL_FontManager::GetInstance()->FindFont(strFont, 0, 0); - m_pTextOut->SetFont(m_pFDEFont); - m_pTextOut->SetFontSize(fFontSize); - m_pTextOut->SetTextColor(rgbFont); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_WidgetTP::SetFont(IFWL_Widget* pWidget, - IFX_Font* pFont, - FX_FLOAT fFontSize, - FX_ARGB rgbFont) { - if (!m_pTextOut) { - return FWL_ERR_Succeeded; - } - m_pTextOut->SetFont(pFont); - m_pTextOut->SetFontSize(fFontSize); - m_pTextOut->SetTextColor(rgbFont); - return FWL_ERR_Succeeded; -} -IFX_Font* CFWL_WidgetTP::GetFont(IFWL_Widget* pWidget) { - return m_pFDEFont; -} -CFWL_WidgetTP::CFWL_WidgetTP() - : m_dwRefCount(1), m_pTextOut(NULL), m_pFDEFont(NULL), m_dwThemeID(0) {} -FX_ERR CFWL_WidgetTP::InitTTO() { - if (m_pTextOut) { - return FWL_ERR_Succeeded; - } - m_pFDEFont = - CFWL_FontManager::GetInstance()->FindFont(FX_WSTRC(L"Helvetica"), 0, 0); - m_pTextOut = IFDE_TextOut::Create(); - m_pTextOut->SetFont(m_pFDEFont); - m_pTextOut->SetFontSize(FWLTHEME_CAPACITY_FontSize); - m_pTextOut->SetTextColor(FWLTHEME_CAPACITY_TextColor); - m_pTextOut->SetEllipsisString(L"..."); - return FWL_ERR_Succeeded; -} -FX_ERR CFWL_WidgetTP::FinalizeTTO() { - if (m_pTextOut) { - m_pTextOut->Release(); - m_pTextOut = NULL; - } - return FWL_ERR_Succeeded; -} -#ifdef THEME_XPSimilar -void CFWL_WidgetTP::DrawEdge(CFX_Graphics* pGraphics, - FX_DWORD dwStyles, - const CFX_RectF* pRect, - CFX_Matrix* pMatrix) { - if (!pGraphics) - return; - if (!pRect) - return; - pGraphics->SaveGraphState(); - CFX_Color crStroke(FWL_GetThemeColor(m_dwThemeID) == 0 - ? ArgbEncode(255, 127, 157, 185) - : FWLTHEME_COLOR_Green_BKSelected); - pGraphics->SetStrokeColor(&crStroke); - CFX_Path path; - path.Create(); - path.AddRectangle(pRect->left, pRect->top, pRect->width - 1, - pRect->height - 1); - pGraphics->StrokePath(&path, pMatrix); - path.Clear(); - crStroke = ArgbEncode(255, 255, 255, 255); - pGraphics->SetStrokeColor(&crStroke); - path.AddRectangle(pRect->left + 1, pRect->top + 1, pRect->width - 3, - pRect->height - 3); - pGraphics->StrokePath(&path, pMatrix); - pGraphics->RestoreGraphState(); -} -#else -void CFWL_WidgetTP::DrawEdge(CFX_Graphics* pGraphics, - FX_DWORD dwStyles, - const CFX_RectF* pRect, - CFX_Matrix* pMatrix) { - if (!pGraphics) - return; - if (!pRect) - return; - FWLTHEME_EDGE eType; - FX_FLOAT fWidth; - switch (dwStyles & FWL_WGTSTYLE_EdgeMask) { - case FWL_WGTSTYLE_EdgeRaised: { - eType = FWLTHEME_EDGE_Raised, fWidth = FWLTHEME_CAPACITY_EdgeRaised; - break; - } - case FWL_WGTSTYLE_EdgeSunken: { - eType = FWLTHEME_EDGE_Sunken, fWidth = FWLTHEME_CAPACITY_EdgeSunken; - break; - } - case FWL_WGTSTYLE_EdgeFlat: - default: { return; } - } - Draw3DRect(pGraphics, eType, fWidth, pRect, FWLTHEME_COLOR_EDGELT1, - FWLTHEME_COLOR_EDGELT2, FWLTHEME_COLOR_EDGERB1, - FWLTHEME_COLOR_EDGERB2, pMatrix); -} -#endif -void CFWL_WidgetTP::Draw3DRect(CFX_Graphics* pGraphics, - FWLTHEME_EDGE eType, - FX_FLOAT fWidth, - const CFX_RectF* pRect, - FX_ARGB cr1, - FX_ARGB cr2, - FX_ARGB cr3, - FX_ARGB cr4, - CFX_Matrix* pMatrix) { - if (!pGraphics) - return; - if (!pRect) - return; - pGraphics->SaveGraphState(); - if (eType == FWLTHEME_EDGE_Flat) { - CFX_Path path; - path.Create(); - path.AddRectangle(pRect->left, pRect->top, pRect->width, pRect->height); - path.AddRectangle(pRect->left + 1, pRect->top + 1, pRect->width - 2, - pRect->height - 2); - CFX_Color cr(ArgbEncode(255, 100, 100, 100)); - pGraphics->SetFillColor(&cr); - pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix); - path.Clear(); - path.AddRectangle(pRect->left + 1, pRect->top + 1, pRect->width - 2, - pRect->height - 2); - path.AddRectangle(pRect->left + 2, pRect->top + 2, pRect->width - 4, - pRect->height - 4); - cr.Set(0xFFFFFFFF); - pGraphics->SetFillColor(&cr); - pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix); - } else { - FX_FLOAT fLeft = pRect->left; - FX_FLOAT fRight = pRect->right(); - FX_FLOAT fTop = pRect->top; - FX_FLOAT fBottom = pRect->bottom(); - FX_FLOAT fHalfWidth = fWidth / 2.0f; - CFX_Color crLT(eType == FWLTHEME_EDGE_Raised ? cr4 : cr1); - pGraphics->SetFillColor(&crLT); - CFX_Path pathLT; - pathLT.Create(); - pathLT.MoveTo(fLeft, fBottom - fHalfWidth); - pathLT.LineTo(fLeft, fTop); - pathLT.LineTo(fRight - fHalfWidth, fTop); - pathLT.LineTo(fRight - fHalfWidth, fTop + fHalfWidth); - pathLT.LineTo(fLeft + fHalfWidth, fTop + fHalfWidth); - pathLT.LineTo(fLeft + fHalfWidth, fBottom - fHalfWidth); - pathLT.LineTo(fLeft, fBottom - fHalfWidth); - pGraphics->FillPath(&pathLT, FXFILL_WINDING, pMatrix); - crLT = CFX_Color(eType == FWLTHEME_EDGE_Raised ? cr3 : cr2); - pGraphics->SetFillColor(&crLT); - pathLT.Clear(); - pathLT.MoveTo(fLeft + fHalfWidth, fBottom - fWidth); - pathLT.LineTo(fLeft + fHalfWidth, fTop + fHalfWidth); - pathLT.LineTo(fRight - fWidth, fTop + fHalfWidth); - pathLT.LineTo(fRight - fWidth, fTop + fWidth); - pathLT.LineTo(fLeft + fWidth, fTop + fWidth); - pathLT.LineTo(fLeft + fWidth, fBottom - fWidth); - pathLT.LineTo(fLeft + fHalfWidth, fBottom - fWidth); - pGraphics->FillPath(&pathLT, FXFILL_WINDING, pMatrix); - CFX_Color crRB(eType == FWLTHEME_EDGE_Raised ? cr1 : cr3); - pGraphics->SetFillColor(&crRB); - CFX_Path pathRB; - pathRB.Create(); - pathRB.MoveTo(fRight - fHalfWidth, fTop + fHalfWidth); - pathRB.LineTo(fRight - fHalfWidth, fBottom - fHalfWidth); - pathRB.LineTo(fLeft + fHalfWidth, fBottom - fHalfWidth); - pathRB.LineTo(fLeft + fHalfWidth, fBottom - fWidth); - pathRB.LineTo(fRight - fWidth, fBottom - fWidth); - pathRB.LineTo(fRight - fWidth, fTop + fHalfWidth); - pathRB.LineTo(fRight - fHalfWidth, fTop + fHalfWidth); - pGraphics->FillPath(&pathRB, FXFILL_WINDING, pMatrix); - crRB = CFX_Color(eType == FWLTHEME_EDGE_Raised ? cr2 : cr4); - pGraphics->SetFillColor(&crRB); - pathRB.Clear(); - pathRB.MoveTo(fRight, fTop); - pathRB.LineTo(fRight, fBottom); - pathRB.LineTo(fLeft, fBottom); - pathRB.LineTo(fLeft, fBottom - fHalfWidth); - pathRB.LineTo(fRight - fHalfWidth, fBottom - fHalfWidth); - pathRB.LineTo(fRight - fHalfWidth, fTop); - pathRB.LineTo(fRight, fTop); - pGraphics->FillPath(&pathRB, FXFILL_WINDING, pMatrix); - } - pGraphics->RestoreGraphState(); -} -void CFWL_WidgetTP::Draw3DCircle(CFX_Graphics* pGraphics, - FWLTHEME_EDGE eType, - FX_FLOAT fWidth, - const CFX_RectF* pRect, - FX_ARGB cr1, - FX_ARGB cr2, - FX_ARGB cr3, - FX_ARGB cr4, - CFX_Matrix* pMatrix) { - if (!pGraphics) - return; - if (!pRect) - return; - pGraphics->SaveGraphState(); - CFX_Path path; - path.Create(); - path.AddArc(pRect->left, pRect->top, pRect->width, pRect->height, - FWLTHEME_PI * 3 / 4, FWLTHEME_PI); - CFX_Color crFill1(eType == FWLTHEME_EDGE_Raised ? cr4 : cr1); - pGraphics->SetStrokeColor(&crFill1); - pGraphics->StrokePath(&path, pMatrix); - CFX_RectF rtInner(*pRect); - rtInner.Deflate(pRect->width / 4, pRect->height / 4); - path.Clear(); - path.AddArc(rtInner.left, rtInner.top, rtInner.width, rtInner.height, - FWLTHEME_PI * 3 / 4, FWLTHEME_PI); - CFX_Color crFill2(eType == FWLTHEME_EDGE_Raised ? cr3 : cr2); - pGraphics->SetStrokeColor(&crFill2); - pGraphics->StrokePath(&path, pMatrix); - path.Clear(); - path.AddArc(pRect->left, pRect->top, pRect->width, pRect->height, - FWLTHEME_PI * 7 / 4, FWLTHEME_PI); - CFX_Color crFill3(eType == FWLTHEME_EDGE_Raised ? cr1 : cr3); - pGraphics->SetStrokeColor(&crFill3); - pGraphics->StrokePath(&path, pMatrix); - path.AddArc(rtInner.left, rtInner.top, rtInner.width, rtInner.height, - FWLTHEME_PI * 7 / 4, FWLTHEME_PI); - CFX_Color crFill4(eType == FWLTHEME_EDGE_Raised ? cr2 : cr4); - pGraphics->SetStrokeColor(&crFill4); - pGraphics->StrokePath(&path, pMatrix); - pGraphics->RestoreGraphState(); -} -void CFWL_WidgetTP::DrawBorder(CFX_Graphics* pGraphics, - const CFX_RectF* pRect, - CFX_Matrix* pMatrix) { - if (!pGraphics) - return; - if (!pRect) - return; - CFX_Path path; - path.Create(); - path.AddRectangle(pRect->left, pRect->top, pRect->width, pRect->height); - path.AddRectangle(pRect->left + 1, pRect->top + 1, pRect->width - 2, - pRect->height - 2); - pGraphics->SaveGraphState(); - CFX_Color crFill(ArgbEncode(255, 0, 0, 0)); - pGraphics->SetFillColor(&crFill); - pGraphics->FillPath(&path, FXFILL_ALTERNATE, pMatrix); - pGraphics->RestoreGraphState(); -} -void CFWL_WidgetTP::FillBackground(CFX_Graphics* pGraphics, - const CFX_RectF* pRect, - CFX_Matrix* pMatrix) { - FillSoildRect(pGraphics, FWLTHEME_COLOR_Background, pRect, pMatrix); -} -void CFWL_WidgetTP::FillSoildRect(CFX_Graphics* pGraphics, - FX_ARGB fillColor, - const CFX_RectF* pRect, - CFX_Matrix* pMatrix) { - if (!pGraphics) - return; - if (!pRect) - return; - pGraphics->SaveGraphState(); - CFX_Color crFill(fillColor); - pGraphics->SetFillColor(&crFill); - CFX_Path path; - path.Create(); - path.AddRectangle(pRect->left, pRect->top, pRect->width, pRect->height); - pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix); - pGraphics->RestoreGraphState(); -} -void CFWL_WidgetTP::DrawAxialShading(CFX_Graphics* pGraphics, - FX_FLOAT fx1, - FX_FLOAT fy1, - FX_FLOAT fx2, - FX_FLOAT fy2, - FX_ARGB beginColor, - FX_ARGB endColor, - CFX_Path* path, - int32_t fillMode, - CFX_Matrix* pMatrix) { - if (!pGraphics || !path) - return; - - CFX_PointF begPoint(fx1, fy1); - CFX_PointF endPoint(fx2, fy2); - CFX_Shading shading; - shading.CreateAxial(begPoint, endPoint, FALSE, FALSE, beginColor, endColor); - pGraphics->SaveGraphState(); - CFX_Color color1(&shading); - pGraphics->SetFillColor(&color1); - pGraphics->FillPath(path, fillMode, pMatrix); - pGraphics->RestoreGraphState(); -} -void CFWL_WidgetTP::DrawAnnulusRect(CFX_Graphics* pGraphics, - FX_ARGB fillColor, - const CFX_RectF* pRect, - FX_FLOAT fRingWidth, - CFX_Matrix* pMatrix) { - if (!pGraphics) - return; - if (!pRect) - return; - pGraphics->SaveGraphState(); - CFX_Color cr(fillColor); - pGraphics->SetFillColor(&cr); - CFX_Path path; - path.Create(); - CFX_RectF rtInner(*pRect); - rtInner.Deflate(fRingWidth, fRingWidth); - path.AddRectangle(rtInner.left, rtInner.top, rtInner.width, rtInner.height); - path.AddRectangle(pRect->left, pRect->top, pRect->width, pRect->height); - pGraphics->FillPath(&path, FXFILL_ALTERNATE, pMatrix); - pGraphics->RestoreGraphState(); -} -void CFWL_WidgetTP::DrawAnnulusCircle(CFX_Graphics* pGraphics, - FX_ARGB fillColor, - const CFX_RectF* pRect, - FX_FLOAT fWidth, - CFX_Matrix* pMatrix) { - if (!pGraphics) - return; - if (!pRect) - return; - if (fWidth > pRect->width / 2) { - return; - } - pGraphics->SaveGraphState(); - CFX_Color cr(fillColor); - pGraphics->SetFillColor(&cr); - CFX_Path path; - path.Create(); - path.AddEllipse(*pRect); - CFX_RectF rtIn(*pRect); - rtIn.Inflate(-fWidth, -fWidth); - path.AddEllipse(rtIn); - pGraphics->FillPath(&path, FXFILL_ALTERNATE, pMatrix); - pGraphics->RestoreGraphState(); -} -void CFWL_WidgetTP::DrawFocus(CFX_Graphics* pGraphics, - const CFX_RectF* pRect, - CFX_Matrix* pMatrix) { - if (!pGraphics) - return; - if (!pRect) - return; - pGraphics->SaveGraphState(); - CFX_Color cr(0xFF000000); - pGraphics->SetStrokeColor(&cr); - FX_FLOAT DashPattern[2] = {1, 1}; - pGraphics->SetLineDash(0.0f, DashPattern, 2); - CFX_Path path; - path.Create(); - path.AddRectangle(pRect->left, pRect->top, pRect->width, pRect->height); - pGraphics->StrokePath(&path, pMatrix); - pGraphics->RestoreGraphState(); -} -#define FWLTHEME_ARROW_Denominator 3 -void CFWL_WidgetTP::DrawArrow(CFX_Graphics* pGraphics, - const CFX_RectF* pRect, - FWLTHEME_DIRECTION eDict, - FX_ARGB argbFill, - FX_BOOL bPressed, - CFX_Matrix* pMatrix) { - CFX_RectF rtArrow(*pRect); - CFX_Path path; - path.Create(); - FX_FLOAT fBtn = - std::min(pRect->width, pRect->height) / FWLTHEME_ARROW_Denominator; - rtArrow.left = pRect->left + (pRect->width - fBtn) / 2; - rtArrow.top = pRect->top + (pRect->height - fBtn) / 2; - rtArrow.width = fBtn; - rtArrow.height = fBtn; - if (bPressed) { - rtArrow.Offset(1, 1); - } - switch (eDict) { - case FWLTHEME_DIRECTION_Up: { - path.MoveTo(rtArrow.left, rtArrow.bottom()); - path.LineTo(rtArrow.right(), rtArrow.bottom()); - path.LineTo(rtArrow.left + fBtn / 2, rtArrow.top); - path.LineTo(rtArrow.left, rtArrow.bottom()); - break; - } - case FWLTHEME_DIRECTION_Left: { - path.MoveTo(rtArrow.right(), rtArrow.top); - path.LineTo(rtArrow.right(), rtArrow.bottom()); - path.LineTo(rtArrow.left, rtArrow.top + fBtn / 2); - path.LineTo(rtArrow.right(), rtArrow.top); - break; - } - case FWLTHEME_DIRECTION_Right: { - path.MoveTo(rtArrow.left, rtArrow.top); - path.LineTo(rtArrow.left, rtArrow.bottom()); - path.LineTo(rtArrow.right(), rtArrow.top + fBtn / 2); - path.LineTo(rtArrow.left, rtArrow.top); - break; - } - case FWLTHEME_DIRECTION_Down: - default: { - path.MoveTo(rtArrow.left, rtArrow.top); - path.LineTo(rtArrow.right(), rtArrow.top); - path.LineTo(rtArrow.left + fBtn / 2, rtArrow.bottom()); - path.LineTo(rtArrow.left, rtArrow.top); - } - } - pGraphics->SaveGraphState(); - CFX_Color cr(argbFill); - pGraphics->SetFillColor(&cr); - pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix); - pGraphics->RestoreGraphState(); -} -void CFWL_WidgetTP::DrawArrow(CFX_Graphics* pGraphics, - const CFX_RectF* pRect, - FWLTHEME_DIRECTION eDict, - FX_ARGB argSign, - CFX_Matrix* pMatrix) { - FX_BOOL bVert = - (eDict == FWLTHEME_DIRECTION_Up || eDict == FWLTHEME_DIRECTION_Down); - FX_FLOAT fLeft = - (FX_FLOAT)(((pRect->width - (bVert ? 9 : 6)) / 2 + pRect->left) + 0.5); - FX_FLOAT fTop = - (FX_FLOAT)(((pRect->height - (bVert ? 6 : 9)) / 2 + pRect->top) + 0.5); - CFX_Path path; - path.Create(); - switch (eDict) { - case FWLTHEME_DIRECTION_Down: { - path.MoveTo(fLeft, fTop + 1); - path.LineTo(fLeft + 4, fTop + 5); - path.LineTo(fLeft + 8, fTop + 1); - path.LineTo(fLeft + 7, fTop); - path.LineTo(fLeft + 4, fTop + 3); - path.LineTo(fLeft + 1, fTop); - break; - } - case FWLTHEME_DIRECTION_Up: { - path.MoveTo(fLeft, fTop + 4); - path.LineTo(fLeft + 4, fTop); - path.LineTo(fLeft + 8, fTop + 4); - path.LineTo(fLeft + 7, fTop + 5); - path.LineTo(fLeft + 4, fTop + 2); - path.LineTo(fLeft + 1, fTop + 5); - break; - } - case FWLTHEME_DIRECTION_Right: { - path.MoveTo(fLeft + 1, fTop); - path.LineTo(fLeft + 5, fTop + 4); - path.LineTo(fLeft + 1, fTop + 8); - path.LineTo(fLeft, fTop + 7); - path.LineTo(fLeft + 3, fTop + 4); - path.LineTo(fLeft, fTop + 1); - break; - } - case FWLTHEME_DIRECTION_Left: { - path.MoveTo(fLeft, fTop + 4); - path.LineTo(fLeft + 4, fTop); - path.LineTo(fLeft + 5, fTop + 1); - path.LineTo(fLeft + 2, fTop + 4); - path.LineTo(fLeft + 5, fTop + 7); - path.LineTo(fLeft + 4, fTop + 8); - break; - } - } - CFX_Color cr(argSign); - pGraphics->SetFillColor(&cr); - pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix); -} -void CFWL_WidgetTP::DrawBtn(CFX_Graphics* pGraphics, - const CFX_RectF* pRect, - FWLTHEME_STATE eState, - CFX_Matrix* pMatrix) { - CFX_Path path; - path.Create(); - if (!CFWL_ArrowData::IsInstance()) { - CFWL_ArrowData::GetInstance()->SetColorData(FWL_GetThemeColor(m_dwThemeID)); - } - CFWL_ArrowData::CColorData* pColorData = - CFWL_ArrowData::GetInstance()->m_pColorData; - FX_FLOAT fRight = pRect->right(); - FX_FLOAT fBottom = pRect->bottom(); - path.AddRectangle(pRect->left, pRect->top, pRect->width, pRect->height); - DrawAxialShading(pGraphics, pRect->left, pRect->top, fRight, fBottom, - pColorData->clrStart[eState - 1], - pColorData->clrEnd[eState - 1], &path, FXFILL_WINDING, - pMatrix); - CFX_Color rcStroke; - rcStroke.Set(pColorData->clrBorder[eState - 1]); - pGraphics->SetStrokeColor(&rcStroke); - pGraphics->StrokePath(&path, pMatrix); -} -void CFWL_WidgetTP::DrawArrowBtn(CFX_Graphics* pGraphics, - const CFX_RectF* pRect, - FWLTHEME_DIRECTION eDict, - FWLTHEME_STATE eState, - CFX_Matrix* pMatrix) { - DrawBtn(pGraphics, pRect, eState, pMatrix); - if (!CFWL_ArrowData::IsInstance()) { - CFWL_ArrowData::GetInstance()->SetColorData(FWL_GetThemeColor(m_dwThemeID)); - } - CFWL_ArrowData::CColorData* pColorData = - CFWL_ArrowData::GetInstance()->m_pColorData; - DrawArrow(pGraphics, pRect, eDict, pColorData->clrSign[eState - 1], pMatrix); -} -FWLCOLOR CFWL_WidgetTP::BlendColor(FWLCOLOR srcColor, - FWLCOLOR renderColor, - uint8_t scale) { - FWLCOLOR dstColor; - uint8_t n = 255 - scale; - dstColor.a = (uint8_t)( - ((FX_WORD)srcColor.a * n + (FX_WORD)renderColor.a * scale) >> 8); - dstColor.r = (uint8_t)( - ((FX_WORD)srcColor.r * n + (FX_WORD)renderColor.r * scale) >> 8); - dstColor.g = (uint8_t)( - ((FX_WORD)srcColor.g * n + (FX_WORD)renderColor.g * scale) >> 8); - dstColor.b = (uint8_t)( - ((FX_WORD)srcColor.b * n + (FX_WORD)renderColor.b * scale) >> 8); - return dstColor; -} -CFWL_ArrowData::CFWL_ArrowData() : m_pColorData(NULL) { - SetColorData(0); -} -CFWL_FontData::CFWL_FontData() - : m_dwStyles(0), - m_dwCodePage(0), - m_pFont(0), - m_pFontMgr(NULL) -#if _FXM_PLATFORM_ != _FXM_PLATFORM_WINDOWS_ - , - m_pFontSource(NULL) -#endif -{ -} -CFWL_FontData::~CFWL_FontData() { - if (m_pFont) { - m_pFont->Release(); - } - if (m_pFontMgr) { - m_pFontMgr->Release(); - } -#if _FXM_PLATFORM_ != _FXM_PLATFORM_WINDOWS_ - if (m_pFontSource != NULL) { - m_pFontSource->Release(); - } -#endif -} -FX_BOOL CFWL_FontData::Equal(const CFX_WideStringC& wsFontFamily, - FX_DWORD dwFontStyles, - FX_WORD wCodePage) { - return m_wsFamily == wsFontFamily && m_dwStyles == dwFontStyles && - m_dwCodePage == wCodePage; -} -FX_BOOL CFWL_FontData::LoadFont(const CFX_WideStringC& wsFontFamily, - FX_DWORD dwFontStyles, - FX_WORD dwCodePage) { - m_wsFamily = wsFontFamily; - m_dwStyles = dwFontStyles; - m_dwCodePage = dwCodePage; - if (!m_pFontMgr) { -#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ - m_pFontMgr = IFX_FontMgr::Create(FX_GetDefFontEnumerator()); -#else - m_pFontSource = FX_CreateDefaultFontSourceEnum(); - m_pFontMgr = IFX_FontMgr::Create(m_pFontSource); -#endif - } - m_pFont = IFX_Font::LoadFont(wsFontFamily.GetPtr(), dwFontStyles, dwCodePage, - m_pFontMgr); - return m_pFont != NULL; -} - -CFWL_FontManager* CFWL_FontManager::s_FontManager = nullptr; -CFWL_FontManager* CFWL_FontManager::GetInstance() { - if (!s_FontManager) - s_FontManager = new CFWL_FontManager; - return s_FontManager; -} -void CFWL_FontManager::DestroyInstance() { - delete s_FontManager; - s_FontManager = nullptr; -} -CFWL_FontManager::CFWL_FontManager() {} -CFWL_FontManager::~CFWL_FontManager() {} -IFX_Font* CFWL_FontManager::FindFont(const CFX_WideStringC& wsFontFamily, - FX_DWORD dwFontStyles, - FX_WORD wCodePage) { - for (const auto& pData : m_FontsArray) { - if (pData->Equal(wsFontFamily, dwFontStyles, wCodePage)) - return pData->GetFont(); - } - std::unique_ptr pFontData(new CFWL_FontData); - if (!pFontData->LoadFont(wsFontFamily, dwFontStyles, wCodePage)) - return nullptr; - m_FontsArray.push_back(std::move(pFontData)); - return m_FontsArray.back()->GetFont(); -} -FX_BOOL FWLTHEME_Init() { - return TRUE; -} -void FWLTHEME_Release() { - CFWL_ArrowData::DestroyInstance(); - CFWL_FontManager::DestroyInstance(); -} -FX_DWORD FWL_GetThemeLayout(FX_DWORD dwThemeID) { - return 0xffff0000 & dwThemeID; -} -FX_DWORD FWL_GetThemeColor(FX_DWORD dwThemeID) { - return 0x0000ffff & dwThemeID; -} -FX_DWORD FWL_MakeThemeID(FX_DWORD dwLayout, FX_DWORD dwColor) { - return (dwLayout << 16) | (0x0000FFFF & dwColor); -} -CFWL_ArrowData* CFWL_ArrowData::m_pInstance = NULL; -CFWL_ArrowData* CFWL_ArrowData::GetInstance() { - if (!m_pInstance) { - m_pInstance = new CFWL_ArrowData; - } - return m_pInstance; -} -FX_BOOL CFWL_ArrowData::IsInstance() { - return (m_pInstance != NULL); -} -void CFWL_ArrowData::DestroyInstance() { - if (m_pInstance) { - delete m_pInstance; - m_pInstance = NULL; - } -} -CFWL_ArrowData::~CFWL_ArrowData() { - if (m_pColorData) { - delete m_pColorData; - m_pColorData = NULL; - } -} -void CFWL_ArrowData::SetColorData(FX_DWORD dwID) { - if (!m_pColorData) { - m_pColorData = new CColorData; - } - if (dwID) { - m_pColorData->clrBorder[0] = ArgbEncode(255, 142, 153, 125); - m_pColorData->clrBorder[1] = ArgbEncode(255, 157, 171, 119); - m_pColorData->clrBorder[2] = ArgbEncode(255, 118, 131, 97); - m_pColorData->clrBorder[3] = ArgbEncode(255, 172, 168, 153); - m_pColorData->clrStart[0] = ArgbEncode(255, 203, 215, 186); - m_pColorData->clrStart[1] = ArgbEncode(255, 218, 232, 185); - m_pColorData->clrStart[2] = ArgbEncode(255, 203, 215, 186); - m_pColorData->clrStart[3] = ArgbEncode(255, 254, 254, 251); - m_pColorData->clrEnd[0] = ArgbEncode(255, 149, 167, 117); - m_pColorData->clrEnd[1] = ArgbEncode(255, 198, 211, 155); - m_pColorData->clrEnd[2] = ArgbEncode(255, 149, 167, 117); - m_pColorData->clrEnd[3] = ArgbEncode(255, 243, 241, 236); - m_pColorData->clrSign[0] = ArgbEncode(255, 255, 255, 255); - m_pColorData->clrSign[1] = ArgbEncode(255, 255, 255, 255); - m_pColorData->clrSign[2] = ArgbEncode(255, 255, 255, 255); - m_pColorData->clrSign[3] = ArgbEncode(255, 128, 128, 128); - } else { - m_pColorData->clrBorder[0] = ArgbEncode(255, 202, 216, 249); - m_pColorData->clrBorder[1] = ArgbEncode(255, 171, 190, 233); - m_pColorData->clrBorder[2] = ArgbEncode(255, 135, 147, 219); - m_pColorData->clrBorder[3] = ArgbEncode(255, 172, 168, 153); - m_pColorData->clrStart[0] = ArgbEncode(255, 225, 234, 254); - m_pColorData->clrStart[1] = ArgbEncode(255, 253, 255, 255); - m_pColorData->clrStart[2] = ArgbEncode(255, 110, 142, 241); - m_pColorData->clrStart[3] = ArgbEncode(255, 254, 254, 251); - m_pColorData->clrEnd[0] = ArgbEncode(255, 175, 204, 251); - m_pColorData->clrEnd[1] = ArgbEncode(255, 185, 218, 251); - m_pColorData->clrEnd[2] = ArgbEncode(255, 210, 222, 235); - m_pColorData->clrEnd[3] = ArgbEncode(255, 243, 241, 236); - m_pColorData->clrSign[0] = ArgbEncode(255, 77, 97, 133); - m_pColorData->clrSign[1] = ArgbEncode(255, 77, 97, 133); - m_pColorData->clrSign[2] = ArgbEncode(255, 77, 97, 133); - m_pColorData->clrSign[3] = ArgbEncode(255, 128, 128, 128); - } -} diff --git a/xfa/src/fxbarcode/BC_BarCode.cpp b/xfa/src/fxbarcode/BC_BarCode.cpp deleted file mode 100644 index 644ead3294..0000000000 --- a/xfa/src/fxbarcode/BC_BarCode.cpp +++ /dev/null @@ -1,877 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2011 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/BC_Binarizer.h" -#include "xfa/src/fxbarcode/BC_BinaryBitmap.h" -#include "xfa/src/fxbarcode/BC_BinaryBitmap.h" -#include "xfa/src/fxbarcode/BC_BufferedImageLuminanceSource.h" -#include "xfa/src/fxbarcode/BC_DecoderResult.h" -#include "xfa/src/fxbarcode/BC_LuminanceSource.h" -#include "xfa/src/fxbarcode/BC_Reader.h" -#include "xfa/src/fxbarcode/BC_ResultPoint.h" -#include "xfa/src/fxbarcode/BC_TwoDimWriter.h" -#include "xfa/src/fxbarcode/BC_UtilCodingConvert.h" -#include "xfa/src/fxbarcode/BC_Writer.h" -#include "xfa/src/fxbarcode/common/BC_CommonBitArray.h" -#include "xfa/src/fxbarcode/common/BC_CommonBitMatrix.h" -#include "xfa/src/fxbarcode/common/BC_CommonBitMatrix.h" -#include "xfa/src/fxbarcode/common/BC_CommonDecoderResult.h" -#include "xfa/src/fxbarcode/common/BC_GlobalHistogramBinarizer.h" -#include "xfa/src/fxbarcode/datamatrix/BC_DataMatrixReader.h" -#include "xfa/src/fxbarcode/datamatrix/BC_DataMatrixWriter.h" -#include "xfa/src/fxbarcode/oned/BC_OneDReader.h" -#include "xfa/src/fxbarcode/oned/BC_OneDimReader.h" -#include "xfa/src/fxbarcode/oned/BC_OneDimWriter.h" -#include "xfa/src/fxbarcode/oned/BC_OnedCodaBarReader.h" -#include "xfa/src/fxbarcode/oned/BC_OnedCodaBarWriter.h" -#include "xfa/src/fxbarcode/oned/BC_OnedCode128Reader.h" -#include "xfa/src/fxbarcode/oned/BC_OnedCode128Writer.h" -#include "xfa/src/fxbarcode/oned/BC_OnedCode39Reader.h" -#include "xfa/src/fxbarcode/oned/BC_OnedCode39Writer.h" -#include "xfa/src/fxbarcode/oned/BC_OnedEAN13Reader.h" -#include "xfa/src/fxbarcode/oned/BC_OnedEAN13Writer.h" -#include "xfa/src/fxbarcode/oned/BC_OnedEAN8Reader.h" -#include "xfa/src/fxbarcode/oned/BC_OnedEAN8Writer.h" -#include "xfa/src/fxbarcode/oned/BC_OnedUPCAReader.h" -#include "xfa/src/fxbarcode/oned/BC_OnedUPCAWriter.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417BarcodeMetadata.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417BarcodeValue.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417BoundingBox.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417Codeword.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417CodewordDecoder.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417Common.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417Compaction.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417DecodedBitStreamParser.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417DecodedBitStreamParser.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417DecodedBitStreamParser.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417DetectionResult.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417DetectionResultColumn.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417DetectionResultRowIndicatorColumn.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417Detector.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417DetectorResult.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417DetectorResult.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417ECErrorCorrection.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417ECModulusGF.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417ECModulusPoly.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417HighLevelEncoder.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417Reader.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417ScanningDecoder.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417Writer.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRCodeReader.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRCodeWriter.h" - -CBC_CodeBase::CBC_CodeBase() {} -CBC_CodeBase::~CBC_CodeBase() {} -FX_BOOL CBC_CodeBase::SetCharEncoding(int32_t encoding) { - if (m_pBCWriter) { - return m_pBCWriter->SetCharEncoding(encoding); - } - return FALSE; -} -FX_BOOL CBC_CodeBase::SetModuleHeight(int32_t moduleHeight) { - if (m_pBCWriter) { - return m_pBCWriter->SetModuleHeight(moduleHeight); - } - return FALSE; -} -FX_BOOL CBC_CodeBase::SetModuleWidth(int32_t moduleWidth) { - if (m_pBCWriter) { - return m_pBCWriter->SetModuleWidth(moduleWidth); - } - return FALSE; -} -FX_BOOL CBC_CodeBase::SetHeight(int32_t height) { - if (m_pBCWriter) { - return m_pBCWriter->SetHeight(height); - } - return FALSE; -} -FX_BOOL CBC_CodeBase::SetWidth(int32_t width) { - if (m_pBCWriter) { - return m_pBCWriter->SetWidth(width); - } - return FALSE; -} -void CBC_CodeBase::SetBackgroundColor(FX_ARGB backgroundColor) { - if (m_pBCWriter) { - m_pBCWriter->SetBackgroundColor(backgroundColor); - } -} -void CBC_CodeBase::SetBarcodeColor(FX_ARGB foregroundColor) { - if (m_pBCWriter) { - m_pBCWriter->SetBarcodeColor(foregroundColor); - } -} -CBC_OneCode::CBC_OneCode() {} -CBC_OneCode::~CBC_OneCode() {} -FX_BOOL CBC_OneCode::CheckContentValidity(const CFX_WideStringC& contents) { - if (m_pBCWriter) { - return ((CBC_OneDimWriter*)m_pBCWriter)->CheckContentValidity(contents); - } - return FALSE; -} -CFX_WideString CBC_OneCode::FilterContents(const CFX_WideStringC& contents) { - CFX_WideString tmp; - if (m_pBCWriter == NULL) { - return tmp; - } - return ((CBC_OneDimWriter*)m_pBCWriter)->FilterContents(contents); -} -void CBC_OneCode::SetPrintChecksum(FX_BOOL checksum) { - if (m_pBCWriter) { - ((CBC_OneDimWriter*)m_pBCWriter)->SetPrintChecksum(checksum); - } -} -void CBC_OneCode::SetDataLength(int32_t length) { - if (m_pBCWriter) { - ((CBC_OneDimWriter*)m_pBCWriter)->SetDataLength(length); - } -} -void CBC_OneCode::SetCalChecksum(FX_BOOL calc) { - if (m_pBCWriter) { - ((CBC_OneDimWriter*)m_pBCWriter)->SetCalcChecksum(calc); - } -} -FX_BOOL CBC_OneCode::SetFont(CFX_Font* cFont) { - if (m_pBCWriter) { - return ((CBC_OneDimWriter*)m_pBCWriter)->SetFont(cFont); - } - return FALSE; -} -void CBC_OneCode::SetFontSize(FX_FLOAT size) { - if (m_pBCWriter) { - ((CBC_OneDimWriter*)m_pBCWriter)->SetFontSize(size); - } -} -void CBC_OneCode::SetFontStyle(int32_t style) { - if (m_pBCWriter) { - ((CBC_OneDimWriter*)m_pBCWriter)->SetFontStyle(style); - } -} -void CBC_OneCode::SetFontColor(FX_ARGB color) { - if (m_pBCWriter) { - ((CBC_OneDimWriter*)m_pBCWriter)->SetFontColor(color); - } -} -CBC_Code39::CBC_Code39() { - m_pBCReader = (CBC_Reader*)new (CBC_OnedCode39Reader); - m_pBCWriter = (CBC_Writer*)new (CBC_OnedCode39Writer); -} -CBC_Code39::CBC_Code39(FX_BOOL usingCheckDigit) { - m_pBCReader = (CBC_Reader*)new CBC_OnedCode39Reader(usingCheckDigit); - m_pBCWriter = (CBC_Writer*)new CBC_OnedCode39Writer; -} -CBC_Code39::CBC_Code39(FX_BOOL usingCheckDigit, FX_BOOL extendedMode) { - m_pBCReader = - (CBC_Reader*)new CBC_OnedCode39Reader(usingCheckDigit, extendedMode); - m_pBCWriter = (CBC_Writer*)new CBC_OnedCode39Writer(extendedMode); -} -CBC_Code39::~CBC_Code39() { - if (m_pBCReader) { - delete (m_pBCReader); - m_pBCReader = NULL; - } - if (m_pBCWriter) { - delete (m_pBCWriter); - m_pBCWriter = NULL; - } -} -FX_BOOL CBC_Code39::Encode(const CFX_WideStringC& contents, - FX_BOOL isDevice, - int32_t& e) { - if (contents.IsEmpty()) { - e = BCExceptionNoContents; - return FALSE; - } - BCFORMAT format = BCFORMAT_CODE_39; - int32_t outWidth = 0; - int32_t outHeight = 0; - CFX_WideString filtercontents = - ((CBC_OnedCode39Writer*)m_pBCWriter)->FilterContents(contents); - CFX_WideString renderContents = - ((CBC_OnedCode39Writer*)m_pBCWriter)->RenderTextContents(contents); - m_renderContents = renderContents; - CFX_ByteString byteString = filtercontents.UTF8Encode(); - uint8_t* data = static_cast(m_pBCWriter) - ->Encode(byteString, format, outWidth, outHeight, e); - BC_EXCEPTION_CHECK_ReturnValue(e, FALSE); - ((CBC_OneDimWriter*)m_pBCWriter) - ->RenderResult(renderContents, data, outWidth, isDevice, e); - FX_Free(data); - BC_EXCEPTION_CHECK_ReturnValue(e, FALSE); - return TRUE; -} -FX_BOOL CBC_Code39::RenderDevice(CFX_RenderDevice* device, - const CFX_Matrix* matirx, - int32_t& e) { - CFX_WideString renderCon = ((CBC_OnedCode39Writer*)m_pBCWriter) - ->encodedContents(m_renderContents, e); - ((CBC_OneDimWriter*)m_pBCWriter) - ->RenderDeviceResult(device, matirx, renderCon, e); - BC_EXCEPTION_CHECK_ReturnValue(e, FALSE); - return TRUE; -} -FX_BOOL CBC_Code39::RenderBitmap(CFX_DIBitmap*& pOutBitmap, int32_t& e) { - CFX_WideString renderCon = ((CBC_OnedCode39Writer*)m_pBCWriter) - ->encodedContents(m_renderContents, e); - ((CBC_OneDimWriter*)m_pBCWriter) - ->RenderBitmapResult(pOutBitmap, renderCon, e); - BC_EXCEPTION_CHECK_ReturnValue(e, FALSE); - return TRUE; -} -CFX_WideString CBC_Code39::Decode(uint8_t* buf, - int32_t width, - int32_t hight, - int32_t& e) { - CFX_WideString str; - return str; -} -CFX_WideString CBC_Code39::Decode(CFX_DIBitmap* pBitmap, int32_t& e) { - CBC_BufferedImageLuminanceSource source(pBitmap); - CBC_GlobalHistogramBinarizer binarizer(&source); - CBC_BinaryBitmap bitmap(&binarizer); - CFX_ByteString str = m_pBCReader->Decode(&bitmap, 0, e); - BC_EXCEPTION_CHECK_ReturnValue(e, FX_WSTRC(L"")); - return CFX_WideString::FromUTF8(str, str.GetLength()); -} -FX_BOOL CBC_Code39::SetTextLocation(BC_TEXT_LOC location) { - if (m_pBCWriter) { - return ((CBC_OnedCode39Writer*)m_pBCWriter)->SetTextLocation(location); - } - return FALSE; -} -FX_BOOL CBC_Code39::SetWideNarrowRatio(int32_t ratio) { - if (m_pBCWriter) { - return ((CBC_OnedCode39Writer*)m_pBCWriter)->SetWideNarrowRatio(ratio); - } - return FALSE; -} -CBC_Codabar::CBC_Codabar() { - m_pBCReader = (CBC_Reader*)new (CBC_OnedCodaBarReader); - m_pBCWriter = (CBC_Writer*)new (CBC_OnedCodaBarWriter); -} -CBC_Codabar::~CBC_Codabar() { - if (m_pBCReader) { - delete (m_pBCReader); - m_pBCReader = NULL; - } - if (m_pBCWriter) { - delete (m_pBCWriter); - m_pBCWriter = NULL; - } -} -FX_BOOL CBC_Codabar::SetStartChar(FX_CHAR start) { - if (m_pBCWriter) { - return ((CBC_OnedCodaBarWriter*)m_pBCWriter)->SetStartChar(start); - } - return FALSE; -} -FX_BOOL CBC_Codabar::SetEndChar(FX_CHAR end) { - if (m_pBCWriter) { - return ((CBC_OnedCodaBarWriter*)m_pBCWriter)->SetEndChar(end); - } - return FALSE; -} -FX_BOOL CBC_Codabar::SetTextLocation(BC_TEXT_LOC location) { - return ((CBC_OnedCodaBarWriter*)m_pBCWriter)->SetTextLocation(location); -} -FX_BOOL CBC_Codabar::SetWideNarrowRatio(int32_t ratio) { - if (m_pBCWriter) { - return ((CBC_OnedCodaBarWriter*)m_pBCWriter)->SetWideNarrowRatio(ratio); - } - return FALSE; -} -FX_BOOL CBC_Codabar::Encode(const CFX_WideStringC& contents, - FX_BOOL isDevice, - int32_t& e) { - if (contents.IsEmpty()) { - e = BCExceptionNoContents; - return FALSE; - } - BCFORMAT format = BCFORMAT_CODABAR; - int32_t outWidth = 0; - int32_t outHeight = 0; - CFX_WideString filtercontents = - ((CBC_OneDimWriter*)m_pBCWriter)->FilterContents(contents); - CFX_ByteString byteString = filtercontents.UTF8Encode(); - m_renderContents = filtercontents; - uint8_t* data = static_cast(m_pBCWriter) - ->Encode(byteString, format, outWidth, outHeight, e); - BC_EXCEPTION_CHECK_ReturnValue(e, FALSE); - ((CBC_OneDimWriter*)m_pBCWriter) - ->RenderResult(filtercontents, data, outWidth, isDevice, e); - FX_Free(data); - BC_EXCEPTION_CHECK_ReturnValue(e, FALSE); - return TRUE; -} -FX_BOOL CBC_Codabar::RenderDevice(CFX_RenderDevice* device, - const CFX_Matrix* matirx, - int32_t& e) { - CFX_WideString renderCon = - ((CBC_OnedCodaBarWriter*)m_pBCWriter)->encodedContents(m_renderContents); - ((CBC_OneDimWriter*)m_pBCWriter) - ->RenderDeviceResult(device, matirx, renderCon, e); - BC_EXCEPTION_CHECK_ReturnValue(e, FALSE); - return TRUE; -} -FX_BOOL CBC_Codabar::RenderBitmap(CFX_DIBitmap*& pOutBitmap, int32_t& e) { - CFX_WideString renderCon = - ((CBC_OnedCodaBarWriter*)m_pBCWriter)->encodedContents(m_renderContents); - ((CBC_OneDimWriter*)m_pBCWriter) - ->RenderBitmapResult(pOutBitmap, renderCon, e); - BC_EXCEPTION_CHECK_ReturnValue(e, FALSE); - return TRUE; -} -CFX_WideString CBC_Codabar::Decode(uint8_t* buf, - int32_t width, - int32_t hight, - int32_t& e) { - CFX_WideString str; - return str; -} -CFX_WideString CBC_Codabar::Decode(CFX_DIBitmap* pBitmap, int32_t& e) { - CBC_BufferedImageLuminanceSource source(pBitmap); - CBC_GlobalHistogramBinarizer binarizer(&source); - CBC_BinaryBitmap bitmap(&binarizer); - CFX_ByteString str = m_pBCReader->Decode(&bitmap, 0, e); - BC_EXCEPTION_CHECK_ReturnValue(e, FX_WSTRC(L"")); - return CFX_WideString::FromUTF8(str, str.GetLength()); -} -CBC_Code128::CBC_Code128(BC_TYPE type) { - m_pBCReader = (CBC_Reader*)new (CBC_OnedCode128Reader); - m_pBCWriter = (CBC_Writer*)new CBC_OnedCode128Writer(type); -} -CBC_Code128::~CBC_Code128() { - if (m_pBCReader) { - delete (m_pBCReader); - m_pBCReader = NULL; - } - if (m_pBCWriter) { - delete (m_pBCWriter); - m_pBCWriter = NULL; - } -} -FX_BOOL CBC_Code128::SetTextLocation(BC_TEXT_LOC location) { - if (m_pBCWriter) { - return ((CBC_OnedCode128Writer*)m_pBCWriter)->SetTextLocation(location); - } - return FALSE; -} -FX_BOOL CBC_Code128::Encode(const CFX_WideStringC& contents, - FX_BOOL isDevice, - int32_t& e) { - if (contents.IsEmpty()) { - e = BCExceptionNoContents; - return FALSE; - } - BCFORMAT format = BCFORMAT_CODE_128; - int32_t outWidth = 0; - int32_t outHeight = 0; - CFX_WideString content = contents; - if (contents.GetLength() % 2 && - ((CBC_OnedCode128Writer*)m_pBCWriter)->GetType() == BC_CODE128_C) { - content += '0'; - } - CFX_WideString encodeContents = - ((CBC_OnedCode128Writer*)m_pBCWriter)->FilterContents(content); - m_renderContents = encodeContents; - CFX_ByteString byteString = encodeContents.UTF8Encode(); - uint8_t* data = static_cast(m_pBCWriter) - ->Encode(byteString, format, outWidth, outHeight, e); - BC_EXCEPTION_CHECK_ReturnValue(e, FALSE); - ((CBC_OneDimWriter*)m_pBCWriter) - ->RenderResult(encodeContents, data, outWidth, isDevice, e); - FX_Free(data); - BC_EXCEPTION_CHECK_ReturnValue(e, FALSE); - return TRUE; -} -FX_BOOL CBC_Code128::RenderDevice(CFX_RenderDevice* device, - const CFX_Matrix* matirx, - int32_t& e) { - ((CBC_OneDimWriter*)m_pBCWriter) - ->RenderDeviceResult(device, matirx, m_renderContents, e); - BC_EXCEPTION_CHECK_ReturnValue(e, FALSE); - return TRUE; -} -FX_BOOL CBC_Code128::RenderBitmap(CFX_DIBitmap*& pOutBitmap, int32_t& e) { - ((CBC_OneDimWriter*)m_pBCWriter) - ->RenderBitmapResult(pOutBitmap, m_renderContents, e); - BC_EXCEPTION_CHECK_ReturnValue(e, FALSE); - return TRUE; -} -CFX_WideString CBC_Code128::Decode(uint8_t* buf, - int32_t width, - int32_t hight, - int32_t& e) { - CFX_WideString str; - return str; -} -CFX_WideString CBC_Code128::Decode(CFX_DIBitmap* pBitmap, int32_t& e) { - CBC_BufferedImageLuminanceSource source(pBitmap); - CBC_GlobalHistogramBinarizer binarizer(&source); - CBC_BinaryBitmap bitmap(&binarizer); - CFX_ByteString str = m_pBCReader->Decode(&bitmap, 0, e); - BC_EXCEPTION_CHECK_ReturnValue(e, FX_WSTRC(L"")); - return CFX_WideString::FromUTF8(str, str.GetLength()); -} -CBC_EAN8::CBC_EAN8() { - m_pBCReader = (CBC_Reader*)new (CBC_OnedEAN8Reader); - m_pBCWriter = (CBC_Writer*)new (CBC_OnedEAN8Writer); -} -CBC_EAN8::~CBC_EAN8() { - if (m_pBCReader) { - delete (m_pBCReader); - m_pBCReader = NULL; - } - if (m_pBCWriter) { - delete (m_pBCWriter); - m_pBCWriter = NULL; - } -} -CFX_WideString CBC_EAN8::Preprocess(const CFX_WideStringC& contents) { - CFX_WideString encodeContents = - ((CBC_OnedEAN8Writer*)m_pBCWriter)->FilterContents(contents); - int32_t length = encodeContents.GetLength(); - if (length <= 7) { - for (int32_t i = 0; i < 7 - length; i++) { - encodeContents = FX_WCHAR('0') + encodeContents; - } - CFX_ByteString byteString = encodeContents.UTF8Encode(); - int32_t checksum = - ((CBC_OnedEAN8Writer*)m_pBCWriter)->CalcChecksum(byteString); - encodeContents += FX_WCHAR(checksum - 0 + '0'); - } - if (length > 8) { - encodeContents = encodeContents.Mid(0, 8); - } - return encodeContents; -} -FX_BOOL CBC_EAN8::Encode(const CFX_WideStringC& contents, - FX_BOOL isDevice, - int32_t& e) { - if (contents.IsEmpty()) { - e = BCExceptionNoContents; - return FALSE; - } - BCFORMAT format = BCFORMAT_EAN_8; - int32_t outWidth = 0; - int32_t outHeight = 0; - CFX_WideString encodeContents = Preprocess(contents); - CFX_ByteString byteString = encodeContents.UTF8Encode(); - m_renderContents = encodeContents; - uint8_t* data = static_cast(m_pBCWriter) - ->Encode(byteString, format, outWidth, outHeight, e); - BC_EXCEPTION_CHECK_ReturnValue(e, FALSE); - ((CBC_OneDimWriter*)m_pBCWriter) - ->RenderResult(encodeContents, data, outWidth, isDevice, e); - FX_Free(data); - BC_EXCEPTION_CHECK_ReturnValue(e, FALSE); - return TRUE; -} -FX_BOOL CBC_EAN8::RenderDevice(CFX_RenderDevice* device, - const CFX_Matrix* matirx, - int32_t& e) { - ((CBC_OneDimWriter*)m_pBCWriter) - ->RenderDeviceResult(device, matirx, m_renderContents, e); - BC_EXCEPTION_CHECK_ReturnValue(e, FALSE); - return TRUE; -} -FX_BOOL CBC_EAN8::RenderBitmap(CFX_DIBitmap*& pOutBitmap, int32_t& e) { - ((CBC_OneDimWriter*)m_pBCWriter) - ->RenderBitmapResult(pOutBitmap, m_renderContents, e); - BC_EXCEPTION_CHECK_ReturnValue(e, FALSE); - return TRUE; -} -CFX_WideString CBC_EAN8::Decode(uint8_t* buf, - int32_t width, - int32_t hight, - int32_t& e) { - CFX_WideString str; - return str; -} -CFX_WideString CBC_EAN8::Decode(CFX_DIBitmap* pBitmap, int32_t& e) { - CBC_BufferedImageLuminanceSource source(pBitmap); - CBC_GlobalHistogramBinarizer binarizer(&source); - CBC_BinaryBitmap bitmap(&binarizer); - CFX_ByteString str = m_pBCReader->Decode(&bitmap, 0, e); - BC_EXCEPTION_CHECK_ReturnValue(e, FX_WSTRC(L"")); - return CFX_WideString::FromUTF8(str, str.GetLength()); -} -CBC_EAN13::CBC_EAN13() { - m_pBCReader = (CBC_Reader*)new (CBC_OnedEAN13Reader); - m_pBCWriter = (CBC_Writer*)new (CBC_OnedEAN13Writer); -} -CBC_EAN13::~CBC_EAN13() { - if (m_pBCReader) { - delete (m_pBCReader); - m_pBCReader = NULL; - } - if (m_pBCWriter) { - delete (m_pBCWriter); - m_pBCWriter = NULL; - } -} -CFX_WideString CBC_EAN13::Preprocess(const CFX_WideStringC& contents) { - CFX_WideString encodeContents = - ((CBC_OnedEAN8Writer*)m_pBCWriter)->FilterContents(contents); - int32_t length = encodeContents.GetLength(); - if (length <= 12) { - for (int32_t i = 0; i < 12 - length; i++) { - encodeContents = FX_WCHAR('0') + encodeContents; - } - CFX_ByteString byteString = encodeContents.UTF8Encode(); - int32_t checksum = - ((CBC_OnedEAN13Writer*)m_pBCWriter)->CalcChecksum(byteString); - byteString += checksum - 0 + '0'; - encodeContents = byteString.UTF8Decode(); - } - if (length > 13) { - encodeContents = encodeContents.Mid(0, 13); - } - return encodeContents; -} -FX_BOOL CBC_EAN13::Encode(const CFX_WideStringC& contents, - FX_BOOL isDevice, - int32_t& e) { - if (contents.IsEmpty()) { - e = BCExceptionNoContents; - return FALSE; - } - BCFORMAT format = BCFORMAT_EAN_13; - int32_t outWidth = 0; - int32_t outHeight = 0; - CFX_WideString encodeContents = Preprocess(contents); - CFX_ByteString byteString = encodeContents.UTF8Encode(); - m_renderContents = encodeContents; - uint8_t* data = static_cast(m_pBCWriter) - ->Encode(byteString, format, outWidth, outHeight, e); - BC_EXCEPTION_CHECK_ReturnValue(e, FALSE); - ((CBC_OneDimWriter*)m_pBCWriter) - ->RenderResult(encodeContents, data, outWidth, isDevice, e); - FX_Free(data); - BC_EXCEPTION_CHECK_ReturnValue(e, FALSE); - return TRUE; -} -FX_BOOL CBC_EAN13::RenderDevice(CFX_RenderDevice* device, - const CFX_Matrix* matirx, - int32_t& e) { - ((CBC_OneDimWriter*)m_pBCWriter) - ->RenderDeviceResult(device, matirx, m_renderContents, e); - BC_EXCEPTION_CHECK_ReturnValue(e, FALSE); - return TRUE; -} -FX_BOOL CBC_EAN13::RenderBitmap(CFX_DIBitmap*& pOutBitmap, int32_t& e) { - ((CBC_OneDimWriter*)m_pBCWriter) - ->RenderBitmapResult(pOutBitmap, m_renderContents, e); - BC_EXCEPTION_CHECK_ReturnValue(e, FALSE); - return TRUE; -} -CFX_WideString CBC_EAN13::Decode(uint8_t* buf, - int32_t width, - int32_t hight, - int32_t& e) { - CFX_WideString str; - return str; -} -CFX_WideString CBC_EAN13::Decode(CFX_DIBitmap* pBitmap, int32_t& e) { - CBC_BufferedImageLuminanceSource source(pBitmap); - CBC_GlobalHistogramBinarizer binarizer(&source); - CBC_BinaryBitmap bitmap(&binarizer); - CFX_ByteString str = m_pBCReader->Decode(&bitmap, 0, e); - BC_EXCEPTION_CHECK_ReturnValue(e, FX_WSTRC(L"")); - return CFX_WideString::FromUTF8(str, str.GetLength()); -} -CBC_UPCA::CBC_UPCA() { - m_pBCReader = (CBC_Reader*)new (CBC_OnedUPCAReader); - ((CBC_OnedUPCAReader*)m_pBCReader)->Init(); - m_pBCWriter = (CBC_Writer*)new (CBC_OnedUPCAWriter); -} -CBC_UPCA::~CBC_UPCA() { - if (m_pBCReader) { - delete (m_pBCReader); - m_pBCReader = NULL; - } - if (m_pBCWriter) { - delete (m_pBCWriter); - m_pBCWriter = NULL; - } -} -CFX_WideString CBC_UPCA::Preprocess(const CFX_WideStringC& contents) { - CFX_WideString encodeContents = - ((CBC_OnedEAN8Writer*)m_pBCWriter)->FilterContents(contents); - int32_t length = encodeContents.GetLength(); - if (length <= 11) { - for (int32_t i = 0; i < 11 - length; i++) { - encodeContents = FX_WCHAR('0') + encodeContents; - } - CFX_ByteString byteString = encodeContents.UTF8Encode(); - int32_t checksum = - ((CBC_OnedUPCAWriter*)m_pBCWriter)->CalcChecksum(byteString); - byteString += checksum - 0 + '0'; - encodeContents = byteString.UTF8Decode(); - } - if (length > 12) { - encodeContents = encodeContents.Mid(0, 12); - } - return encodeContents; -} -FX_BOOL CBC_UPCA::Encode(const CFX_WideStringC& contents, - FX_BOOL isDevice, - int32_t& e) { - if (contents.IsEmpty()) { - e = BCExceptionNoContents; - return FALSE; - } - BCFORMAT format = BCFORMAT_UPC_A; - int32_t outWidth = 0; - int32_t outHeight = 0; - CFX_WideString encodeContents = Preprocess(contents); - CFX_ByteString byteString = encodeContents.UTF8Encode(); - m_renderContents = encodeContents; - ((CBC_OnedUPCAWriter*)m_pBCWriter)->Init(); - uint8_t* data = static_cast(m_pBCWriter) - ->Encode(byteString, format, outWidth, outHeight, e); - BC_EXCEPTION_CHECK_ReturnValue(e, FALSE); - ((CBC_OneDimWriter*)m_pBCWriter) - ->RenderResult(encodeContents, data, outWidth, isDevice, e); - FX_Free(data); - BC_EXCEPTION_CHECK_ReturnValue(e, FALSE); - return TRUE; -} -FX_BOOL CBC_UPCA::RenderDevice(CFX_RenderDevice* device, - const CFX_Matrix* matirx, - int32_t& e) { - ((CBC_OneDimWriter*)m_pBCWriter) - ->RenderDeviceResult(device, matirx, m_renderContents, e); - BC_EXCEPTION_CHECK_ReturnValue(e, FALSE); - return TRUE; -} -FX_BOOL CBC_UPCA::RenderBitmap(CFX_DIBitmap*& pOutBitmap, int32_t& e) { - ((CBC_OneDimWriter*)m_pBCWriter) - ->RenderBitmapResult(pOutBitmap, m_renderContents, e); - BC_EXCEPTION_CHECK_ReturnValue(e, FALSE); - return TRUE; -} -CFX_WideString CBC_UPCA::Decode(uint8_t* buf, - int32_t width, - int32_t hight, - int32_t& e) { - CFX_WideString str; - return str; -} -CFX_WideString CBC_UPCA::Decode(CFX_DIBitmap* pBitmap, int32_t& e) { - CBC_BufferedImageLuminanceSource source(pBitmap); - CBC_GlobalHistogramBinarizer binarizer(&source); - CBC_BinaryBitmap bitmap(&binarizer); - CFX_ByteString str = m_pBCReader->Decode(&bitmap, 0, e); - BC_EXCEPTION_CHECK_ReturnValue(e, FX_WSTRC(L"")); - return CFX_WideString::FromUTF8(str, str.GetLength()); -} -CBC_QRCode::CBC_QRCode() { - m_pBCReader = (CBC_Reader*)new (CBC_QRCodeReader); - ((CBC_QRCodeReader*)m_pBCReader)->Init(); - m_pBCWriter = (CBC_Writer*)new (CBC_QRCodeWriter); -} -CBC_QRCode::~CBC_QRCode() { - if (m_pBCReader) { - delete (m_pBCReader); - m_pBCReader = NULL; - } - if (m_pBCWriter) { - delete (m_pBCWriter); - m_pBCWriter = NULL; - } -} -FX_BOOL CBC_QRCode::SetVersion(int32_t version) { - if (version < 0 || version > 40) { - return FALSE; - } - if (m_pBCWriter == NULL) { - return FALSE; - } - return ((CBC_QRCodeWriter*)m_pBCWriter)->SetVersion(version); -} -FX_BOOL CBC_QRCode::SetErrorCorrectionLevel(int32_t level) { - if (level < 0 || level > 3) { - return FALSE; - } - if (m_pBCWriter == NULL) { - return FALSE; - } - return ((CBC_TwoDimWriter*)m_pBCWriter)->SetErrorCorrectionLevel(level); -} -FX_BOOL CBC_QRCode::Encode(const CFX_WideStringC& contents, - FX_BOOL isDevice, - int32_t& e) { - int32_t outWidth = 0; - int32_t outHeight = 0; - uint8_t* data = ((CBC_QRCodeWriter*)m_pBCWriter) - ->Encode(contents, ((CBC_QRCodeWriter*)m_pBCWriter) - ->GetErrorCorrectionLevel(), - outWidth, outHeight, e); - BC_EXCEPTION_CHECK_ReturnValue(e, FALSE); - ((CBC_TwoDimWriter*)m_pBCWriter)->RenderResult(data, outWidth, outHeight, e); - FX_Free(data); - BC_EXCEPTION_CHECK_ReturnValue(e, FALSE); - return TRUE; -} -FX_BOOL CBC_QRCode::RenderDevice(CFX_RenderDevice* device, - const CFX_Matrix* matirx, - int32_t& e) { - ((CBC_TwoDimWriter*)m_pBCWriter)->RenderDeviceResult(device, matirx); - return TRUE; -} -FX_BOOL CBC_QRCode::RenderBitmap(CFX_DIBitmap*& pOutBitmap, int32_t& e) { - ((CBC_TwoDimWriter*)m_pBCWriter)->RenderBitmapResult(pOutBitmap, e); - BC_EXCEPTION_CHECK_ReturnValue(e, FALSE); - return TRUE; -} -CFX_WideString CBC_QRCode::Decode(uint8_t* buf, - int32_t width, - int32_t hight, - int32_t& e) { - CFX_WideString str; - return str; -} -CFX_WideString CBC_QRCode::Decode(CFX_DIBitmap* pBitmap, int32_t& e) { - CBC_BufferedImageLuminanceSource source(pBitmap); - CBC_GlobalHistogramBinarizer binarizer(&source); - CBC_BinaryBitmap bitmap(&binarizer); - CFX_ByteString retStr = m_pBCReader->Decode(&bitmap, 0, e); - BC_EXCEPTION_CHECK_ReturnValue(e, FX_WSTRC(L"")); - return CFX_WideString::FromUTF8(retStr, retStr.GetLength()); -} -CBC_PDF417I::CBC_PDF417I() { - m_pBCReader = (CBC_Reader*)new (CBC_PDF417Reader); - m_pBCWriter = (CBC_Writer*)new (CBC_PDF417Writer); -} -CBC_PDF417I::~CBC_PDF417I() { - if (m_pBCReader) { - delete (m_pBCReader); - m_pBCReader = NULL; - } - if (m_pBCWriter) { - delete (m_pBCWriter); - m_pBCWriter = NULL; - } -} -FX_BOOL CBC_PDF417I::SetErrorCorrectionLevel(int32_t level) { - ((CBC_PDF417Writer*)m_pBCWriter)->SetErrorCorrectionLevel(level); - return TRUE; -} -void CBC_PDF417I::SetTruncated(FX_BOOL truncated) { - ((CBC_PDF417Writer*)m_pBCWriter)->SetTruncated(truncated); -} -FX_BOOL CBC_PDF417I::Encode(const CFX_WideStringC& contents, - FX_BOOL isDevice, - int32_t& e) { - int32_t outWidth = 0; - int32_t outHeight = 0; - uint8_t* data = ((CBC_PDF417Writer*)m_pBCWriter) - ->Encode(contents, outWidth, outHeight, e); - BC_EXCEPTION_CHECK_ReturnValue(e, FALSE); - ((CBC_TwoDimWriter*)m_pBCWriter)->RenderResult(data, outWidth, outHeight, e); - FX_Free(data); - BC_EXCEPTION_CHECK_ReturnValue(e, FALSE); - return TRUE; -} -FX_BOOL CBC_PDF417I::RenderDevice(CFX_RenderDevice* device, - const CFX_Matrix* matirx, - int32_t& e) { - ((CBC_TwoDimWriter*)m_pBCWriter)->RenderDeviceResult(device, matirx); - return TRUE; -} -FX_BOOL CBC_PDF417I::RenderBitmap(CFX_DIBitmap*& pOutBitmap, int32_t& e) { - ((CBC_TwoDimWriter*)m_pBCWriter)->RenderBitmapResult(pOutBitmap, e); - BC_EXCEPTION_CHECK_ReturnValue(e, FALSE); - return TRUE; -} -CFX_WideString CBC_PDF417I::Decode(uint8_t* buf, - int32_t width, - int32_t hight, - int32_t& e) { - CFX_WideString str; - return str; -} -CFX_WideString CBC_PDF417I::Decode(CFX_DIBitmap* pBitmap, int32_t& e) { - CBC_BufferedImageLuminanceSource source(pBitmap); - CBC_GlobalHistogramBinarizer binarizer(&source); - CBC_BinaryBitmap bitmap(&binarizer); - CFX_ByteString bytestring = m_pBCReader->Decode(&bitmap, 0, e); - BC_EXCEPTION_CHECK_ReturnValue(e, FX_WSTRC(L"")); - return CFX_WideString::FromUTF8(bytestring, bytestring.GetLength()); -} -CBC_DataMatrix::CBC_DataMatrix() { - m_pBCReader = (CBC_Reader*)new (CBC_DataMatrixReader); - ((CBC_DataMatrixReader*)m_pBCReader)->Init(); - m_pBCWriter = (CBC_Writer*)new (CBC_DataMatrixWriter); -} -CBC_DataMatrix::~CBC_DataMatrix() { - if (m_pBCReader) { - delete (m_pBCReader); - m_pBCReader = NULL; - } - if (m_pBCWriter) { - delete (m_pBCWriter); - m_pBCWriter = NULL; - } -} -FX_BOOL CBC_DataMatrix::Encode(const CFX_WideStringC& contents, - FX_BOOL isDevice, - int32_t& e) { - int32_t outWidth = 0; - int32_t outHeight = 0; - uint8_t* data = ((CBC_DataMatrixWriter*)m_pBCWriter) - ->Encode(contents, outWidth, outHeight, e); - BC_EXCEPTION_CHECK_ReturnValue(e, FALSE); - ((CBC_TwoDimWriter*)m_pBCWriter)->RenderResult(data, outWidth, outHeight, e); - FX_Free(data); - BC_EXCEPTION_CHECK_ReturnValue(e, FALSE); - return TRUE; -} -FX_BOOL CBC_DataMatrix::RenderDevice(CFX_RenderDevice* device, - const CFX_Matrix* matirx, - int32_t& e) { - ((CBC_TwoDimWriter*)m_pBCWriter)->RenderDeviceResult(device, matirx); - return TRUE; -} -FX_BOOL CBC_DataMatrix::RenderBitmap(CFX_DIBitmap*& pOutBitmap, int32_t& e) { - ((CBC_TwoDimWriter*)m_pBCWriter)->RenderBitmapResult(pOutBitmap, e); - BC_EXCEPTION_CHECK_ReturnValue(e, FALSE); - return TRUE; -} -CFX_WideString CBC_DataMatrix::Decode(uint8_t* buf, - int32_t width, - int32_t hight, - int32_t& e) { - CFX_WideString str; - return str; -} -CFX_WideString CBC_DataMatrix::Decode(CFX_DIBitmap* pBitmap, int32_t& e) { - CBC_BufferedImageLuminanceSource source(pBitmap); - CBC_GlobalHistogramBinarizer binarizer(&source); - CBC_BinaryBitmap bitmap(&binarizer); - CFX_ByteString retStr = m_pBCReader->Decode(&bitmap, 0, e); - BC_EXCEPTION_CHECK_ReturnValue(e, FX_WSTRC(L"")); - return CFX_WideString::FromUTF8(retStr, retStr.GetLength()); -} diff --git a/xfa/src/fxbarcode/BC_Binarizer.cpp b/xfa/src/fxbarcode/BC_Binarizer.cpp deleted file mode 100644 index 8e214561c6..0000000000 --- a/xfa/src/fxbarcode/BC_Binarizer.cpp +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2009 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/BC_Binarizer.h" -#include "xfa/src/fxbarcode/BC_LuminanceSource.h" -#include "xfa/src/fxbarcode/common/BC_CommonBitArray.h" -#include "xfa/src/fxbarcode/common/BC_CommonBitMatrix.h" - -CBC_Binarizer::CBC_Binarizer(CBC_LuminanceSource* source) { - m_source = source; -} -CBC_Binarizer::~CBC_Binarizer() {} -CBC_LuminanceSource* CBC_Binarizer::GetLuminanceSource() { - return m_source; -} diff --git a/xfa/src/fxbarcode/BC_Binarizer.h b/xfa/src/fxbarcode/BC_Binarizer.h deleted file mode 100644 index ed1ac9c19c..0000000000 --- a/xfa/src/fxbarcode/BC_Binarizer.h +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_BC_BINARIZER_H_ -#define XFA_SRC_FXBARCODE_BC_BINARIZER_H_ - -#include - -class CBC_LuminanceSource; -class CBC_CommonBitMatrix; -class CBC_CommonBitArray; - -class CBC_Binarizer { - public: - CBC_Binarizer(CBC_LuminanceSource* source); - virtual ~CBC_Binarizer(); - CBC_LuminanceSource* GetLuminanceSource(); - virtual CBC_CommonBitMatrix* GetBlackMatrix(int32_t& e) = 0; - virtual CBC_CommonBitArray* GetBlackRow(int32_t y, - CBC_CommonBitArray* row, - int32_t& e) = 0; - - private: - CBC_LuminanceSource* m_source; -}; - -#endif // XFA_SRC_FXBARCODE_BC_BINARIZER_H_ diff --git a/xfa/src/fxbarcode/BC_BinaryBitmap.cpp b/xfa/src/fxbarcode/BC_BinaryBitmap.cpp deleted file mode 100644 index be6258ef1f..0000000000 --- a/xfa/src/fxbarcode/BC_BinaryBitmap.cpp +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2009 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/BC_Binarizer.h" -#include "xfa/src/fxbarcode/BC_BinaryBitmap.h" -#include "xfa/src/fxbarcode/BC_LuminanceSource.h" -#include "xfa/src/fxbarcode/common/BC_CommonBitArray.h" -#include "xfa/src/fxbarcode/common/BC_CommonBitMatrix.h" -#include "xfa/src/fxbarcode/utils.h" - -CBC_BinaryBitmap::CBC_BinaryBitmap(CBC_Binarizer* binarizer) - : m_binarizer(binarizer), m_matrix(NULL) {} -CBC_BinaryBitmap::~CBC_BinaryBitmap() { - delete m_matrix; -} -int32_t CBC_BinaryBitmap::GetHeight() { - return m_binarizer->GetLuminanceSource()->GetHeight(); -} -int32_t CBC_BinaryBitmap::GetWidth() { - return m_binarizer->GetLuminanceSource()->GetWidth(); -} -CBC_CommonBitMatrix* CBC_BinaryBitmap::GetMatrix(int32_t& e) { - if (m_matrix == NULL) { - m_matrix = m_binarizer->GetBlackMatrix(e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - } - return m_matrix; -} -CBC_CommonBitArray* CBC_BinaryBitmap::GetBlackRow(int32_t y, - CBC_CommonBitArray* row, - int32_t& e) { - CBC_CommonBitArray* temp = m_binarizer->GetBlackRow(y, row, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - return temp; -} -CBC_CommonBitMatrix* CBC_BinaryBitmap::GetBlackMatrix(int32_t& e) { - if (m_matrix == NULL) { - m_matrix = m_binarizer->GetBlackMatrix(e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - } - return m_matrix; -} diff --git a/xfa/src/fxbarcode/BC_BinaryBitmap.h b/xfa/src/fxbarcode/BC_BinaryBitmap.h deleted file mode 100644 index 5d34c546ff..0000000000 --- a/xfa/src/fxbarcode/BC_BinaryBitmap.h +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_BC_BINARYBITMAP_H_ -#define XFA_SRC_FXBARCODE_BC_BINARYBITMAP_H_ - -#include - -class CBC_Binarizer; -class CBC_CommonBitMatrix; -class CBC_CommonBitArray; - -class CBC_BinaryBitmap { - public: - CBC_BinaryBitmap(CBC_Binarizer* binarizer); - virtual ~CBC_BinaryBitmap(); - int32_t GetWidth(); - int32_t GetHeight(); - CBC_CommonBitMatrix* GetMatrix(int32_t& e); - CBC_CommonBitArray* GetBlackRow(int32_t y, - CBC_CommonBitArray* row, - int32_t& e); - CBC_CommonBitMatrix* GetBlackMatrix(int32_t& e); - - private: - CBC_Binarizer* m_binarizer; - CBC_CommonBitMatrix* m_matrix; -}; - -#endif // XFA_SRC_FXBARCODE_BC_BINARYBITMAP_H_ diff --git a/xfa/src/fxbarcode/BC_BufferedImageLuminanceSource.cpp b/xfa/src/fxbarcode/BC_BufferedImageLuminanceSource.cpp deleted file mode 100644 index b2fc8a5eac..0000000000 --- a/xfa/src/fxbarcode/BC_BufferedImageLuminanceSource.cpp +++ /dev/null @@ -1,171 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2009 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "core/include/fxcodec/fx_codec.h" -#include "xfa/src/fxbarcode/BC_BufferedImageLuminanceSource.h" -#include "xfa/src/fxbarcode/BC_LuminanceSource.h" -#include "xfa/src/fxbarcode/utils.h" - -class CBC_Pause : public IFX_Pause { - public: - virtual FX_BOOL NeedToPauseNow() { return TRUE; } -}; -static CFX_DIBitmap* CreateDIBSource(IFX_FileRead* fileread) { - CFX_DIBitmap* bitmap = NULL; - CCodec_ModuleMgr* pCodecMgr = NULL; - ICodec_ProgressiveDecoder* pImageCodec = NULL; - pCodecMgr = new CCodec_ModuleMgr(); - pImageCodec = pCodecMgr->CreateProgressiveDecoder(); - FXCODEC_STATUS status = FXCODEC_STATUS_DECODE_FINISH; - status = pImageCodec->LoadImageInfo(fileread, FXCODEC_IMAGE_UNKNOWN, nullptr); - if (status != FXCODEC_STATUS_FRAME_READY) { - return NULL; - } - bitmap = new CFX_DIBitmap; - bitmap->Create(pImageCodec->GetWidth(), pImageCodec->GetHeight(), FXDIB_Argb); - bitmap->Clear(FXARGB_MAKE(0xFF, 0xFF, 0xFF, 0xFF)); - CBC_Pause pause; - int32_t frames; - status = pImageCodec->GetFrames(frames, &pause); - while (status == FXCODEC_STATUS_FRAME_TOBECONTINUE) { - status = pImageCodec->GetFrames(frames, &pause); - } - if (status != FXCODEC_STATUS_DECODE_READY) { - goto except; - } - status = pImageCodec->StartDecode(bitmap, 0, 0, bitmap->GetWidth(), - bitmap->GetHeight(), 0, FALSE); - if (status == FXCODEC_STATUS_ERR_PARAMS) { - goto except; - } - if (status != FXCODEC_STATUS_DECODE_TOBECONTINUE) { - goto except; - } - while (status == FXCODEC_STATUS_DECODE_TOBECONTINUE) { - status = pImageCodec->ContinueDecode(&pause); - } - if (status != FXCODEC_STATUS_DECODE_FINISH) { - goto except; - } - if (pImageCodec) { - delete pImageCodec; - pImageCodec = NULL; - } - delete pCodecMgr; - pCodecMgr = NULL; - return bitmap; -except: - if (pImageCodec) { - delete pImageCodec; - pImageCodec = NULL; - } - delete pCodecMgr; - pCodecMgr = NULL; - if (bitmap) { - delete bitmap; - } - return NULL; -} -CBC_BufferedImageLuminanceSource::CBC_BufferedImageLuminanceSource( - const CFX_WideString& filename) - : CBC_LuminanceSource(0, 0), m_filename(filename) { - m_height = 0; - m_width = 0; - m_bytesPerLine = 0; - m_top = 0; - m_left = 0; -} -void CBC_BufferedImageLuminanceSource::Init(int32_t& e) { - IFX_FileRead* fileread = FX_CreateFileRead(m_filename); - m_pBitmap = CreateDIBSource(fileread); - if (m_pBitmap == NULL) { - e = BCExceptionLoadFile; - return; - } - m_pBitmap->ConvertFormat(FXDIB_Argb); - m_height = m_pBitmap->GetHeight(); - m_width = m_pBitmap->GetWidth(); - m_rgbData.SetSize(m_height * m_width); - m_bytesPerLine = m_width * 4; - m_top = 0; - m_left = 0; -} -CBC_BufferedImageLuminanceSource::CBC_BufferedImageLuminanceSource( - CFX_DIBitmap* pBitmap) - : CBC_LuminanceSource(0, 0) { - m_pBitmap = pBitmap->Clone(); - m_pBitmap->ConvertFormat(FXDIB_Argb); - m_height = m_pBitmap->GetHeight(); - m_width = m_pBitmap->GetWidth(); - m_rgbData.SetSize(m_height * m_width); - m_bytesPerLine = m_width * 4; - m_top = 0; - m_left = 0; -} -CBC_BufferedImageLuminanceSource::~CBC_BufferedImageLuminanceSource() { - delete m_pBitmap; - m_pBitmap = NULL; -} -CFX_ByteArray* CBC_BufferedImageLuminanceSource::GetRow(int32_t y, - CFX_ByteArray& row, - int32_t& e) { - if (y < 0 || y >= m_height) { - e = BCExceptionRequestedRowIsOutSizeTheImage; - return NULL; - } - int32_t width = m_width; - if (row.GetSize() == 0 || row.GetSize() < width) { - row.SetSize(width); - } - if (m_rgbData.GetSize() == 0 || m_rgbData.GetSize() < width) { - m_rgbData.SetSize(width); - } - int32_t* rowLine = (int32_t*)m_pBitmap->GetScanline(y); - int32_t x; - for (x = 0; x < width; x++) { - int32_t pixel = rowLine[x]; - int32_t luminance = (306 * ((pixel >> 16) & 0xFF) + - 601 * ((pixel >> 8) & 0xFF) + 117 * (pixel & 0xFF)) >> - 10; - row[x] = (uint8_t)luminance; - } - return &row; -} -CFX_ByteArray* CBC_BufferedImageLuminanceSource::GetMatrix() { - CFX_ByteArray* matirx = new CFX_ByteArray(); - matirx->SetSize(m_bytesPerLine * m_height); - int32_t* rgb = (int32_t*)m_pBitmap->GetBuffer(); - int32_t y; - for (y = 0; y < m_height; y++) { - int32_t offset = y * m_width; - int32_t x; - for (x = 0; x < m_width; x++) { - int32_t pixel = rgb[offset + x]; - int32_t luminance = - (306 * ((pixel >> 16) & 0xFF) + 601 * ((pixel >> 8) & 0xFF) + - 117 * (pixel & 0xFF)) >> - 10; - (*matirx)[offset + x] = (uint8_t)luminance; - } - } - return matirx; -} diff --git a/xfa/src/fxbarcode/BC_BufferedImageLuminanceSource.h b/xfa/src/fxbarcode/BC_BufferedImageLuminanceSource.h deleted file mode 100644 index 5696d5b554..0000000000 --- a/xfa/src/fxbarcode/BC_BufferedImageLuminanceSource.h +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_BC_BUFFEREDIMAGELUMINANCESOURCE_H_ -#define XFA_SRC_FXBARCODE_BC_BUFFEREDIMAGELUMINANCESOURCE_H_ - -#include "core/include/fxcrt/fx_basic.h" -#include "core/include/fxcrt/fx_string.h" -#include "core/include/fxge/fx_dib.h" -#include "xfa/src/fxbarcode/BC_LuminanceSource.h" - -class CBC_BufferedImageLuminanceSource : public CBC_LuminanceSource { - public: - explicit CBC_BufferedImageLuminanceSource(const CFX_WideString& filename); - explicit CBC_BufferedImageLuminanceSource(CFX_DIBitmap* pBitmap); - virtual ~CBC_BufferedImageLuminanceSource(); - - CFX_ByteArray* GetRow(int32_t y, CFX_ByteArray& row, int32_t& e); - CFX_ByteArray* GetMatrix(); - virtual void Init(int32_t& e); - - private: - int32_t m_bytesPerLine; - int32_t m_left; - int32_t m_top; - CFX_Int32Array m_rgbData; - CFX_DIBitmap* m_pBitmap; - const CFX_WideString m_filename; -}; - -#endif // XFA_SRC_FXBARCODE_BC_BUFFEREDIMAGELUMINANCESOURCE_H_ diff --git a/xfa/src/fxbarcode/BC_DecoderResult.h b/xfa/src/fxbarcode/BC_DecoderResult.h deleted file mode 100644 index fce22a741b..0000000000 --- a/xfa/src/fxbarcode/BC_DecoderResult.h +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_BC_DECODERRESULT_H_ -#define XFA_SRC_FXBARCODE_BC_DECODERRESULT_H_ - -#include "core/include/fxcrt/fx_basic.h" - -class CBC_DecoderResult { - public: - CBC_DecoderResult(CFX_ByteArray* rawBytes, - CFX_ByteString text, - CFX_ByteString ecLevel); - virtual ~CBC_DecoderResult(); - CFX_ByteArray* getRawBytes(); - CFX_ByteString getText(); - CFX_ByteString getECLevel(); - int32_t getErrorsCorrected(); - void setErrorsCorrected(int32_t errorsCorrected); - int32_t getErasures(); - void setErasures(int32_t erasures); - void* getOther(); - void setOther(void* other); - - private: - CFX_ByteArray* m_rawBytes; - CFX_ByteString m_text; - CFX_ByteString m_ecLevel; - int32_t m_errorsCorrected; - int32_t m_erasures; - void* m_other; -}; - -#endif // XFA_SRC_FXBARCODE_BC_DECODERRESULT_H_ diff --git a/xfa/src/fxbarcode/BC_Dimension.cpp b/xfa/src/fxbarcode/BC_Dimension.cpp deleted file mode 100644 index 253a4ea7e0..0000000000 --- a/xfa/src/fxbarcode/BC_Dimension.cpp +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2012 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/BC_Dimension.h" -#include "xfa/src/fxbarcode/datamatrix/BC_Encoder.h" - -CBC_Dimension::CBC_Dimension() {} -CBC_Dimension::CBC_Dimension(int32_t width, int32_t height, int32_t& e) { - if (width < 0 || height < 0) { - e = BCExceptionHeightAndWidthMustBeAtLeast1; - } - m_width = width; - m_height = height; -} -CBC_Dimension::~CBC_Dimension() {} -int32_t CBC_Dimension::getWidth() { - return m_width; -} -int32_t CBC_Dimension::getHeight() { - return m_height; -} -int32_t CBC_Dimension::hashCode() { - return m_width * 32713 + m_height; -} -CFX_WideString CBC_Dimension::toString() { - return (FX_WCHAR)(m_width + (FX_WCHAR)'x' + m_height); -} diff --git a/xfa/src/fxbarcode/BC_Dimension.h b/xfa/src/fxbarcode/BC_Dimension.h deleted file mode 100644 index d6780f0fed..0000000000 --- a/xfa/src/fxbarcode/BC_Dimension.h +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_BC_DIMENSION_H_ -#define XFA_SRC_FXBARCODE_BC_DIMENSION_H_ - -#include - -#include "core/include/fxcrt/fx_string.h" - -class CBC_Dimension { - public: - CBC_Dimension(); - CBC_Dimension(int32_t width, int32_t height, int32_t& e); - virtual ~CBC_Dimension(); - int32_t getWidth(); - int32_t getHeight(); - int32_t hashCode(); - CFX_WideString toString(); - - private: - int32_t m_width; - int32_t m_height; -}; - -#endif // XFA_SRC_FXBARCODE_BC_DIMENSION_H_ diff --git a/xfa/src/fxbarcode/BC_Library.cpp b/xfa/src/fxbarcode/BC_Library.cpp deleted file mode 100644 index a5ec431db9..0000000000 --- a/xfa/src/fxbarcode/BC_Library.cpp +++ /dev/null @@ -1,121 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fxbarcode/BC_Binarizer.h" -#include "xfa/src/fxbarcode/BC_BinaryBitmap.h" -#include "xfa/src/fxbarcode/BC_BinaryBitmap.h" -#include "xfa/src/fxbarcode/BC_BufferedImageLuminanceSource.h" -#include "xfa/src/fxbarcode/BC_DecoderResult.h" -#include "xfa/src/fxbarcode/BC_Dimension.h" -#include "xfa/src/fxbarcode/BC_LuminanceSource.h" -#include "xfa/src/fxbarcode/BC_Reader.h" -#include "xfa/src/fxbarcode/BC_ResultPoint.h" -#include "xfa/src/fxbarcode/BC_TwoDimWriter.h" -#include "xfa/src/fxbarcode/BC_UtilCodingConvert.h" -#include "xfa/src/fxbarcode/BC_UtilCodingConvert.h" -#include "xfa/src/fxbarcode/BC_Writer.h" -#include "xfa/src/fxbarcode/common/BC_CommonBitArray.h" -#include "xfa/src/fxbarcode/common/BC_CommonBitMatrix.h" -#include "xfa/src/fxbarcode/common/BC_CommonBitMatrix.h" -#include "xfa/src/fxbarcode/common/BC_CommonBitMatrix.h" -#include "xfa/src/fxbarcode/common/BC_CommonByteMatrix.h" -#include "xfa/src/fxbarcode/common/BC_CommonDecoderResult.h" -#include "xfa/src/fxbarcode/common/BC_GlobalHistogramBinarizer.h" -#include "xfa/src/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256.h" -#include "xfa/src/fxbarcode/datamatrix/BC_ASCIIEncoder.h" -#include "xfa/src/fxbarcode/datamatrix/BC_Base256Encoder.h" -#include "xfa/src/fxbarcode/datamatrix/BC_C40Encoder.h" -#include "xfa/src/fxbarcode/datamatrix/BC_DataMatrixReader.h" -#include "xfa/src/fxbarcode/datamatrix/BC_DataMatrixSymbolInfo144.h" -#include "xfa/src/fxbarcode/datamatrix/BC_DataMatrixVersion.h" -#include "xfa/src/fxbarcode/datamatrix/BC_DataMatrixWriter.h" -#include "xfa/src/fxbarcode/datamatrix/BC_DefaultPlacement.h" -#include "xfa/src/fxbarcode/datamatrix/BC_EdifactEncoder.h" -#include "xfa/src/fxbarcode/datamatrix/BC_Encoder.h" -#include "xfa/src/fxbarcode/datamatrix/BC_EncoderContext.h" -#include "xfa/src/fxbarcode/datamatrix/BC_ErrorCorrection.h" -#include "xfa/src/fxbarcode/datamatrix/BC_HighLevelEncoder.h" -#include "xfa/src/fxbarcode/datamatrix/BC_SymbolInfo.h" -#include "xfa/src/fxbarcode/datamatrix/BC_SymbolShapeHint.h" -#include "xfa/src/fxbarcode/datamatrix/BC_TextEncoder.h" -#include "xfa/src/fxbarcode/datamatrix/BC_X12Encoder.h" -#include "xfa/src/fxbarcode/oned/BC_OneDReader.h" -#include "xfa/src/fxbarcode/oned/BC_OneDimReader.h" -#include "xfa/src/fxbarcode/oned/BC_OneDimWriter.h" -#include "xfa/src/fxbarcode/oned/BC_OnedCodaBarReader.h" -#include "xfa/src/fxbarcode/oned/BC_OnedCode128Reader.h" -#include "xfa/src/fxbarcode/oned/BC_OnedCode128Writer.h" -#include "xfa/src/fxbarcode/oned/BC_OnedCode39Reader.h" -#include "xfa/src/fxbarcode/oned/BC_OnedCode39Writer.h" -#include "xfa/src/fxbarcode/oned/BC_OnedEAN13Reader.h" -#include "xfa/src/fxbarcode/oned/BC_OnedEAN13Writer.h" -#include "xfa/src/fxbarcode/oned/BC_OnedEAN8Reader.h" -#include "xfa/src/fxbarcode/oned/BC_OnedEAN8Writer.h" -#include "xfa/src/fxbarcode/oned/BC_OnedUPCAReader.h" -#include "xfa/src/fxbarcode/oned/BC_OnedUPCAWriter.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417BarcodeMetadata.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417BarcodeValue.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417BoundingBox.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417Codeword.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417CodewordDecoder.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417Common.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417Compaction.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417DecodedBitStreamParser.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417DecodedBitStreamParser.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417DecodedBitStreamParser.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417DetectionResult.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417DetectionResultColumn.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417DetectionResultRowIndicatorColumn.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417Detector.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417DetectorResult.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417DetectorResult.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417ECErrorCorrection.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417ECModulusGF.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417ECModulusPoly.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417HighLevelEncoder.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417Reader.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417ScanningDecoder.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRCodeReader.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRCodeWriter.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRCoderErrorCorrectionLevel.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRCoderMode.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRCoderVersion.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRDataMask.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRDecodedBitStreamParser.h" - -void BC_Library_Init() { - CBC_QRCoderErrorCorrectionLevel::Initialize(); - CBC_QRCoderMode::Initialize(); - CBC_QRCoderVersion::Initialize(); - CBC_QRDataMask::Initialize(); - CBC_ReedSolomonGF256::Initialize(); - CBC_DataMatrixVersion::Initialize(); - CBC_SymbolInfo::Initialize(); - CBC_ErrorCorrection::Initialize(); - CBC_PDF417HighLevelEncoder::Initialize(); - int32_t e = 0; - CBC_PDF417ECModulusGF::Initialize(e); - CBC_DecodedBitStreamPaser::Initialize(); - CBC_PDF417CodewordDecoder::Initialize(); - CBC_PDF417ECErrorCorrection::Initialize(e); - CBC_PDF417ScanningDecoder::Initialize(); -} -void BC_Library_Destory() { - CBC_QRCoderErrorCorrectionLevel::Finalize(); - CBC_QRCoderMode::Finalize(); - CBC_QRCoderVersion::Finalize(); - CBC_QRDataMask::Finalize(); - CBC_ReedSolomonGF256::Finalize(); - CBC_DataMatrixVersion::Finalize(); - CBC_SymbolInfo::Finalize(); - CBC_ErrorCorrection::Finalize(); - CBC_PDF417HighLevelEncoder::Finalize(); - CBC_DecodedBitStreamPaser::Finalize(); - CBC_PDF417CodewordDecoder::Finalize(); - CBC_PDF417ECErrorCorrection::Finalize(); - CBC_PDF417ECModulusGF::Finalize(); - CBC_PDF417ScanningDecoder::Finalize(); -} diff --git a/xfa/src/fxbarcode/BC_LuminanceSource.cpp b/xfa/src/fxbarcode/BC_LuminanceSource.cpp deleted file mode 100644 index 02ff694ca1..0000000000 --- a/xfa/src/fxbarcode/BC_LuminanceSource.cpp +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2009 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/BC_LuminanceSource.h" - -CBC_LuminanceSource::CBC_LuminanceSource(int32_t width, int32_t height) - : m_width(width), m_height(height) {} -CBC_LuminanceSource::~CBC_LuminanceSource() {} -int32_t CBC_LuminanceSource::GetWidth() { - return m_width; -} -int32_t CBC_LuminanceSource::GetHeight() { - return m_height; -} diff --git a/xfa/src/fxbarcode/BC_LuminanceSource.h b/xfa/src/fxbarcode/BC_LuminanceSource.h deleted file mode 100644 index 862fa2475f..0000000000 --- a/xfa/src/fxbarcode/BC_LuminanceSource.h +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_BC_LUMINANCESOURCE_H_ -#define XFA_SRC_FXBARCODE_BC_LUMINANCESOURCE_H_ - -#include "core/include/fxcrt/fx_basic.h" - -class CBC_LuminanceSource { - public: - CBC_LuminanceSource(int32_t width, int32_t height); - virtual ~CBC_LuminanceSource(); - int32_t GetWidth(); - int32_t GetHeight(); - - virtual CFX_ByteArray* GetRow(int32_t y, CFX_ByteArray& row, int32_t& e) = 0; - virtual CFX_ByteArray* GetMatrix() = 0; - - protected: - int32_t m_width; - int32_t m_height; -}; - -#endif // XFA_SRC_FXBARCODE_BC_LUMINANCESOURCE_H_ diff --git a/xfa/src/fxbarcode/BC_Reader.cpp b/xfa/src/fxbarcode/BC_Reader.cpp deleted file mode 100644 index 15d161f174..0000000000 --- a/xfa/src/fxbarcode/BC_Reader.cpp +++ /dev/null @@ -1,10 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fxbarcode/BC_Reader.h" - -CBC_Reader::CBC_Reader() {} -CBC_Reader::~CBC_Reader() {} diff --git a/xfa/src/fxbarcode/BC_Reader.h b/xfa/src/fxbarcode/BC_Reader.h deleted file mode 100644 index 062268a6e7..0000000000 --- a/xfa/src/fxbarcode/BC_Reader.h +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_BC_READER_H_ -#define XFA_SRC_FXBARCODE_BC_READER_H_ - -#include "core/include/fxcrt/fx_string.h" - -class CBC_BinaryBitmap; - -class CBC_Reader { - public: - CBC_Reader(); - virtual ~CBC_Reader(); - virtual CFX_ByteString Decode(CBC_BinaryBitmap* image, int32_t& e) = 0; - virtual CFX_ByteString Decode(CBC_BinaryBitmap* image, - int32_t hints, - int32_t& e) = 0; -}; - -#endif // XFA_SRC_FXBARCODE_BC_READER_H_ diff --git a/xfa/src/fxbarcode/BC_ResultPoint.cpp b/xfa/src/fxbarcode/BC_ResultPoint.cpp deleted file mode 100644 index 492f156da7..0000000000 --- a/xfa/src/fxbarcode/BC_ResultPoint.cpp +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2007 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/BC_ResultPoint.h" - -CBC_ResultPoint::CBC_ResultPoint(FX_FLOAT x, FX_FLOAT y) : m_x(x), m_y(y) {} -FX_FLOAT CBC_ResultPoint::GetX() { - return m_x; -} -FX_FLOAT CBC_ResultPoint::GetY() { - return m_y; -} diff --git a/xfa/src/fxbarcode/BC_ResultPoint.h b/xfa/src/fxbarcode/BC_ResultPoint.h deleted file mode 100644 index 6e00a26c79..0000000000 --- a/xfa/src/fxbarcode/BC_ResultPoint.h +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_BC_RESULTPOINT_H_ -#define XFA_SRC_FXBARCODE_BC_RESULTPOINT_H_ - -#include "core/include/fxcrt/fx_system.h" - -class CBC_ResultPoint { - public: - CBC_ResultPoint(); - CBC_ResultPoint(FX_FLOAT x, FX_FLOAT y); - virtual ~CBC_ResultPoint() {} - virtual FX_FLOAT GetX(); - virtual FX_FLOAT GetY(); - - protected: - FX_FLOAT m_x; - FX_FLOAT m_y; -}; - -#endif // XFA_SRC_FXBARCODE_BC_RESULTPOINT_H_ diff --git a/xfa/src/fxbarcode/BC_TwoDimWriter.cpp b/xfa/src/fxbarcode/BC_TwoDimWriter.cpp deleted file mode 100644 index a5483026eb..0000000000 --- a/xfa/src/fxbarcode/BC_TwoDimWriter.cpp +++ /dev/null @@ -1,148 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include - -#include "third_party/base/numerics/safe_math.h" -#include "xfa/src/fxbarcode/BC_TwoDimWriter.h" -#include "xfa/src/fxbarcode/BC_Writer.h" -#include "xfa/src/fxbarcode/common/BC_CommonBitMatrix.h" - -CBC_TwoDimWriter::CBC_TwoDimWriter() { - m_iCorrectLevel = 1; - m_bFixedSize = TRUE; - m_output = NULL; -} -CBC_TwoDimWriter::~CBC_TwoDimWriter() { - delete m_output; -} -void CBC_TwoDimWriter::RenderDeviceResult(CFX_RenderDevice* device, - const CFX_Matrix* matrix) { - CFX_GraphStateData stateData; - CFX_PathData path; - path.AppendRect(0, 0, (FX_FLOAT)m_Width, (FX_FLOAT)m_Height); - device->DrawPath(&path, matrix, &stateData, m_backgroundColor, - m_backgroundColor, FXFILL_ALTERNATE); - int32_t leftPos = 0; - int32_t topPos = 0; - if (m_bFixedSize) { - leftPos = (m_Width - m_output->GetWidth()) / 2; - topPos = (m_Height - m_output->GetHeight()) / 2; - } - CFX_Matrix matri = *matrix; - if (m_Width < m_output->GetWidth() && m_Height < m_output->GetHeight()) { - CFX_Matrix matriScale( - (FX_FLOAT)m_Width / (FX_FLOAT)m_output->GetWidth(), 0.0, 0.0, - (FX_FLOAT)m_Height / (FX_FLOAT)m_output->GetHeight(), 0.0, 0.0); - matriScale.Concat(*matrix); - matri = matriScale; - } - for (int32_t x = 0; x < m_output->GetWidth(); x++) { - for (int32_t y = 0; y < m_output->GetHeight(); y++) { - CFX_PathData rect; - rect.AppendRect((FX_FLOAT)leftPos + x, (FX_FLOAT)topPos + y, - (FX_FLOAT)(leftPos + x + 1), (FX_FLOAT)(topPos + y + 1)); - CFX_GraphStateData stateData; - if (m_output->Get(x, y)) { - device->DrawPath(&rect, &matri, &stateData, m_barColor, 0, - FXFILL_WINDING); - } - } - } -} -void CBC_TwoDimWriter::RenderBitmapResult(CFX_DIBitmap*& pOutBitmap, - int32_t& e) { - if (m_bFixedSize) { - pOutBitmap = CreateDIBitmap(m_Width, m_Height); - } else { - pOutBitmap = CreateDIBitmap(m_output->GetWidth(), m_output->GetHeight()); - } - if (!pOutBitmap) { - e = BCExceptionFailToCreateBitmap; - return; - } - pOutBitmap->Clear(m_backgroundColor); - int32_t leftPos = 0; - int32_t topPos = 0; - if (m_bFixedSize) { - leftPos = (m_Width - m_output->GetWidth()) / 2; - topPos = (m_Height - m_output->GetHeight()) / 2; - } - for (int32_t x = 0; x < m_output->GetWidth(); x++) { - for (int32_t y = 0; y < m_output->GetHeight(); y++) { - if (m_output->Get(x, y)) { - pOutBitmap->SetPixel(leftPos + x, topPos + y, m_barColor); - } - } - } - if (!m_bFixedSize) { - CFX_DIBitmap* pStretchBitmap = pOutBitmap->StretchTo(m_Width, m_Height); - if (pOutBitmap) { - delete pOutBitmap; - } - pOutBitmap = pStretchBitmap; - } -} -void CBC_TwoDimWriter::RenderResult(uint8_t* code, - int32_t codeWidth, - int32_t codeHeight, - int32_t& e) { - int32_t inputWidth = codeWidth; - int32_t inputHeight = codeHeight; - int32_t tempWidth = inputWidth + 2; - int32_t tempHeight = inputHeight + 2; - FX_FLOAT moduleHSize = std::min(m_ModuleWidth, m_ModuleHeight); - moduleHSize = std::min(moduleHSize, 8.0f); - moduleHSize = std::max(moduleHSize, 1.0f); - pdfium::base::CheckedNumeric scaledWidth = tempWidth; - pdfium::base::CheckedNumeric scaledHeight = tempHeight; - scaledWidth *= moduleHSize; - scaledHeight *= moduleHSize; - - int32_t outputWidth = scaledWidth.ValueOrDie(); - int32_t outputHeight = scaledHeight.ValueOrDie(); - if (m_bFixedSize) { - if (m_Width < outputWidth || m_Height < outputHeight) { - e = BCExceptionBitmapSizeError; - return; - } - } else { - if (m_Width > outputWidth || m_Height > outputHeight) { - outputWidth = (int32_t)(outputWidth * - ceil((FX_FLOAT)m_Width / (FX_FLOAT)outputWidth)); - outputHeight = (int32_t)( - outputHeight * ceil((FX_FLOAT)m_Height / (FX_FLOAT)outputHeight)); - } - } - int32_t multiX = (int32_t)ceil((FX_FLOAT)outputWidth / (FX_FLOAT)tempWidth); - int32_t multiY = (int32_t)ceil((FX_FLOAT)outputHeight / (FX_FLOAT)tempHeight); - if (m_bFixedSize) { - multiX = std::min(multiX, multiY); - multiY = multiX; - } - int32_t leftPadding = (outputWidth - (inputWidth * multiX)) / 2; - int32_t topPadding = (outputHeight - (inputHeight * multiY)) / 2; - if (leftPadding < 0) { - leftPadding = 0; - } - if (topPadding < 0) { - topPadding = 0; - } - m_output = new CBC_CommonBitMatrix; - m_output->Init(outputWidth, outputHeight); - for (int32_t inputY = 0, outputY = topPadding; - (inputY < inputHeight) && (outputY < outputHeight - multiY); - inputY++, outputY += multiY) { - for (int32_t inputX = 0, outputX = leftPadding; - (inputX < inputWidth) && (outputX < outputWidth - multiX); - inputX++, outputX += multiX) { - if (code[inputX + inputY * inputWidth] == 1) { - m_output->SetRegion(outputX, outputY, multiX, multiY, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - } - } - } -} diff --git a/xfa/src/fxbarcode/BC_TwoDimWriter.h b/xfa/src/fxbarcode/BC_TwoDimWriter.h deleted file mode 100644 index c46691c619..0000000000 --- a/xfa/src/fxbarcode/BC_TwoDimWriter.h +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_BC_TWODIMWRITER_H_ -#define XFA_SRC_FXBARCODE_BC_TWODIMWRITER_H_ - -#include "core/include/fxge/fx_ge.h" -#include "xfa/src/fxbarcode/BC_Writer.h" - -class CBC_CommonBitMatrix; - -class CBC_TwoDimWriter : public CBC_Writer { - public: - CBC_TwoDimWriter(); - virtual ~CBC_TwoDimWriter(); - virtual void RenderResult(uint8_t* code, - int32_t codeWidth, - int32_t codeHeight, - int32_t& e); - virtual void RenderBitmapResult(CFX_DIBitmap*& pOutBitmap, int32_t& e); - virtual void RenderDeviceResult(CFX_RenderDevice* device, - const CFX_Matrix* matrix); - virtual FX_BOOL SetErrorCorrectionLevel(int32_t level) = 0; - virtual int32_t GetErrorCorrectionLevel() { return m_iCorrectLevel; } - - protected: - int32_t m_iCorrectLevel; - FX_BOOL m_bFixedSize; - CBC_CommonBitMatrix* m_output; -}; - -#endif // XFA_SRC_FXBARCODE_BC_TWODIMWRITER_H_ diff --git a/xfa/src/fxbarcode/BC_UtilCodingConvert.cpp b/xfa/src/fxbarcode/BC_UtilCodingConvert.cpp deleted file mode 100644 index dd42cdb5cc..0000000000 --- a/xfa/src/fxbarcode/BC_UtilCodingConvert.cpp +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fxbarcode/BC_UtilCodingConvert.h" - -CBC_UtilCodingConvert::CBC_UtilCodingConvert() {} - -CBC_UtilCodingConvert::~CBC_UtilCodingConvert() {} - -void CBC_UtilCodingConvert::UnicodeToLocale(const CFX_WideString& src, - CFX_ByteString& dst) { - dst = CFX_ByteString::FromUnicode(src); -} - -void CBC_UtilCodingConvert::LocaleToUtf8(const CFX_ByteString& src, - CFX_ByteString& dst) { - CFX_WideString unicode = CFX_WideString::FromLocal(src); - dst = unicode.UTF8Encode(); -} - -void CBC_UtilCodingConvert::LocaleToUtf8(const CFX_ByteString& src, - CFX_ByteArray& dst) { - CFX_WideString unicode = CFX_WideString::FromLocal(src); - CFX_ByteString utf8 = unicode.UTF8Encode(); - for (int32_t i = 0; i < utf8.GetLength(); i++) { - dst.Add(utf8[i]); - } -} - -void CBC_UtilCodingConvert::Utf8ToLocale(const CFX_ByteArray& src, - CFX_ByteString& dst) { - CFX_ByteString utf8; - for (int32_t i = 0; i < src.GetSize(); i++) { - utf8 += src[i]; - } - CFX_WideString unicode = CFX_WideString::FromUTF8(utf8, utf8.GetLength()); - dst = CFX_ByteString::FromUnicode(unicode); -} - -void CBC_UtilCodingConvert::Utf8ToLocale(const uint8_t* src, - int32_t count, - CFX_ByteString& dst) { - CFX_WideString unicode = CFX_WideString::FromUTF8((const char*)src, count); - dst = CFX_ByteString::FromUnicode(unicode); -} - -void CBC_UtilCodingConvert::UnicodeToUTF8(const CFX_WideString& src, - CFX_ByteString& dst) { - dst = src.UTF8Encode(); -} diff --git a/xfa/src/fxbarcode/BC_UtilCodingConvert.h b/xfa/src/fxbarcode/BC_UtilCodingConvert.h deleted file mode 100644 index 2cfd81a176..0000000000 --- a/xfa/src/fxbarcode/BC_UtilCodingConvert.h +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_BC_UTILCODINGCONVERT_H_ -#define XFA_SRC_FXBARCODE_BC_UTILCODINGCONVERT_H_ - -#include "core/include/fxcrt/fx_basic.h" - -class CBC_UtilCodingConvert { - public: - CBC_UtilCodingConvert(); - virtual ~CBC_UtilCodingConvert(); - static void UnicodeToLocale(const CFX_WideString& source, - CFX_ByteString& result); - static void LocaleToUtf8(const CFX_ByteString& source, - CFX_ByteString& result); - static void LocaleToUtf8(const CFX_ByteString& source, CFX_ByteArray& result); - static void Utf8ToLocale(const CFX_ByteArray& source, CFX_ByteString& result); - static void Utf8ToLocale(const uint8_t* source, - int32_t count, - CFX_ByteString& result); - static void UnicodeToUTF8(const CFX_WideString& source, - CFX_ByteString& result); -}; - -#endif // XFA_SRC_FXBARCODE_BC_UTILCODINGCONVERT_H_ diff --git a/xfa/src/fxbarcode/BC_UtilRSS.cpp b/xfa/src/fxbarcode/BC_UtilRSS.cpp deleted file mode 100644 index dcc12e2268..0000000000 --- a/xfa/src/fxbarcode/BC_UtilRSS.cpp +++ /dev/null @@ -1,164 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2009 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/BC_UtilRSS.h" - -#include - -#include "core/include/fxcrt/fx_basic.h" -#include "xfa/src/fxbarcode/utils.h" - -CBC_UtilRSS::CBC_UtilRSS() {} -CBC_UtilRSS::~CBC_UtilRSS() {} -CFX_Int32Array* CBC_UtilRSS::GetRssWidths(int32_t val, - int32_t n, - int32_t elements, - int32_t maxWidth, - FX_BOOL noNarrow) { - std::unique_ptr widths(new CFX_Int32Array); - widths->SetSize(elements); - int32_t bar; - int32_t narrowMask = 0; - for (bar = 0; bar < elements - 1; bar++) { - narrowMask |= (1 << bar); - int32_t elmWidth = 1; - int32_t subVal; - while (TRUE) { - subVal = Combins(n - elmWidth - 1, elements - bar - 2); - if (noNarrow && (narrowMask == 0) && - (n - elmWidth - (elements - bar - 1) >= elements - bar - 1)) { - subVal -= Combins(n - elmWidth - (elements - bar), elements - bar - 2); - } - if (elements - bar - 1 > 1) { - int32_t lessVal = 0; - for (int32_t mxwElement = n - elmWidth - (elements - bar - 2); - mxwElement > maxWidth; mxwElement--) { - lessVal += Combins(n - elmWidth - mxwElement - 1, elements - bar - 3); - } - subVal -= lessVal * (elements - 1 - bar); - } else if (n - elmWidth > maxWidth) { - subVal--; - } - val -= subVal; - if (val < 0) { - break; - } - elmWidth++; - narrowMask &= ~(1 << bar); - } - val += subVal; - n -= elmWidth; - (*widths)[bar] = elmWidth; - } - (*widths)[bar] = n; - return widths.release(); -} -int32_t CBC_UtilRSS::GetRSSvalue(CFX_Int32Array& widths, - int32_t maxWidth, - FX_BOOL noNarrow) { - int32_t elements = widths.GetSize(); - int32_t n = 0; - for (int32_t i = 0; i < elements; i++) { - n += widths[i]; - } - int32_t val = 0; - int32_t narrowMask = 0; - for (int32_t bar = 0; bar < elements - 1; bar++) { - int32_t elmWidth; - for (elmWidth = 1, narrowMask |= (1 << bar); elmWidth < widths[bar]; - elmWidth++, narrowMask &= ~(1 << bar)) { - int32_t subVal = Combins(n - elmWidth - 1, elements - bar - 2); - if (noNarrow && (narrowMask == 0) && - (n - elmWidth - (elements - bar - 1) >= elements - bar - 1)) { - subVal -= Combins(n - elmWidth - (elements - bar), elements - bar - 2); - } - if (elements - bar - 1 > 1) { - int32_t lessVal = 0; - for (int32_t mxwElement = n - elmWidth - (elements - bar - 2); - mxwElement > maxWidth; mxwElement--) { - lessVal += Combins(n - elmWidth - mxwElement - 1, elements - bar - 3); - } - subVal -= lessVal * (elements - 1 - bar); - } else if (n - elmWidth > maxWidth) { - subVal--; - } - val += subVal; - } - n -= elmWidth; - } - return val; -} -int32_t CBC_UtilRSS::Combins(int32_t n, int32_t r) { - int32_t maxDenom; - int32_t minDenom; - if (n - r > r) { - minDenom = r; - maxDenom = n - r; - } else { - minDenom = n - r; - maxDenom = r; - } - int32_t val = 1; - int32_t j = 1; - for (int32_t i = n; i > maxDenom; i--) { - val *= i; - if (j <= minDenom) { - val /= j; - j++; - } - } - while (j <= minDenom) { - val /= j; - j++; - } - return val; -} -CFX_Int32Array* CBC_UtilRSS::Elements(CFX_Int32Array& eDist, - int32_t N, - int32_t K) { - CFX_Int32Array* widths = new CFX_Int32Array; - widths->SetSize(eDist.GetSize() + 2); - int32_t twoK = K << 1; - (*widths)[0] = 1; - int32_t i; - int32_t minEven = 10; - int32_t barSum = 1; - for (i = 1; i < twoK - 2; i += 2) { - (*widths)[i] = eDist[i - 1] - (*widths)[i - 1]; - (*widths)[i + 1] = eDist[i] - (*widths)[i]; - barSum += (*widths)[i] + (*widths)[i + 1]; - if ((*widths)[i] < minEven) { - minEven = (*widths)[i]; - } - } - (*widths)[twoK - 1] = N - barSum; - if ((*widths)[twoK - 1] < minEven) { - minEven = (*widths)[twoK - 1]; - } - if (minEven > 1) { - for (i = 0; i < twoK; i += 2) { - (*widths)[i] += minEven - 1; - (*widths)[i + 1] -= minEven - 1; - } - } - return widths; -} diff --git a/xfa/src/fxbarcode/BC_UtilRSS.h b/xfa/src/fxbarcode/BC_UtilRSS.h deleted file mode 100644 index 825a555744..0000000000 --- a/xfa/src/fxbarcode/BC_UtilRSS.h +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_BC_UTILRSS_H_ -#define XFA_SRC_FXBARCODE_BC_UTILRSS_H_ - -#include - -#include "core/include/fxcrt/fx_basic.h" - -class CBC_UtilRSS { - public: - virtual ~CBC_UtilRSS(); - static int32_t GetRSSvalue(CFX_Int32Array& widths, - int32_t maxWidth, - FX_BOOL noNarrow); - - protected: - static CFX_Int32Array* GetRssWidths(int32_t val, - int32_t n, - int32_t elements, - int32_t maxWidth, - FX_BOOL noNarrow); - static int32_t Combins(int32_t n, int32_t r); - static CFX_Int32Array* Elements(CFX_Int32Array& eDist, int32_t N, int32_t K); - - private: - CBC_UtilRSS(); -}; - -#endif // XFA_SRC_FXBARCODE_BC_UTILRSS_H_ diff --git a/xfa/src/fxbarcode/BC_Utils.cpp b/xfa/src/fxbarcode/BC_Utils.cpp deleted file mode 100644 index 5c681a99d7..0000000000 --- a/xfa/src/fxbarcode/BC_Utils.cpp +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "core/include/fxcrt/fx_basic.h" -#include "xfa/src/fxbarcode/utils.h" - -FX_BOOL BC_FX_ByteString_Replace(CFX_ByteString& dst, - FX_DWORD first, - FX_DWORD last, - int32_t count, - FX_CHAR c) { - if (first > last || count <= 0) { - return FALSE; - } - dst.Delete(first, last - first); - for (int32_t i = 0; i < count; i++) { - dst.Insert(0, c); - } - return TRUE; -} -void BC_FX_ByteString_Append(CFX_ByteString& dst, int32_t count, FX_CHAR c) { - for (int32_t i = 0; i < count; i++) { - dst += c; - } -} -void BC_FX_ByteString_Append(CFX_ByteString& dst, const CFX_ByteArray& ba) { - for (int32_t i = 0; i < ba.GetSize(); i++) { - dst += ba[i]; - } -} -void BC_FX_PtrArray_Sort(CFX_PtrArray& src, BC_PtrArrayCompareCallback fun) { - int32_t nLength = src.GetSize(); - FX_BOOL changed = true; - do { - changed = false; - for (int32_t i = 0; i < nLength - 1; i++) { - if (fun(src[i + 1], src[i])) { - void* temp = src[i]; - src.SetAt(i, src[i + 1]); - src.SetAt(i + 1, temp); - changed = true; - } - } - } while (changed); -} diff --git a/xfa/src/fxbarcode/BC_Writer.cpp b/xfa/src/fxbarcode/BC_Writer.cpp deleted file mode 100644 index 87b856a61e..0000000000 --- a/xfa/src/fxbarcode/BC_Writer.cpp +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fxbarcode/BC_Writer.h" - -CBC_Writer::CBC_Writer() { - m_CharEncoding = 0; - m_ModuleHeight = 1; - m_ModuleWidth = 1; - m_Height = 320; - m_Width = 640; - m_colorSpace = FXDIB_Argb; - m_barColor = 0xff000000; - m_backgroundColor = 0xffffffff; -} -CBC_Writer::~CBC_Writer() {} -FX_BOOL CBC_Writer::SetCharEncoding(int32_t encoding) { - m_CharEncoding = encoding; - return TRUE; -} -FX_BOOL CBC_Writer::SetModuleHeight(int32_t moduleHeight) { - if (moduleHeight > 10 || moduleHeight < 1) { - return FALSE; - } - m_ModuleHeight = moduleHeight; - return TRUE; -} -FX_BOOL CBC_Writer::SetModuleWidth(int32_t moduleWidth) { - if (moduleWidth > 10 || moduleWidth < 1) { - return FALSE; - } - m_ModuleWidth = moduleWidth; - return TRUE; -} -FX_BOOL CBC_Writer::SetHeight(int32_t height) { - m_Height = height; - return TRUE; -} -FX_BOOL CBC_Writer::SetWidth(int32_t width) { - m_Width = width; - return TRUE; -} -void CBC_Writer::SetBackgroundColor(FX_ARGB backgroundColor) { - m_backgroundColor = backgroundColor; -} -void CBC_Writer::SetBarcodeColor(FX_ARGB foregroundColor) { - m_barColor = foregroundColor; -} -CFX_DIBitmap* CBC_Writer::CreateDIBitmap(int32_t width, int32_t height) { - CFX_DIBitmap* pDIBitmap = new CFX_DIBitmap; - pDIBitmap->Create(width, height, m_colorSpace); - return pDIBitmap; -} diff --git a/xfa/src/fxbarcode/BC_Writer.h b/xfa/src/fxbarcode/BC_Writer.h deleted file mode 100644 index a1ebfd0dff..0000000000 --- a/xfa/src/fxbarcode/BC_Writer.h +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_BC_WRITER_H_ -#define XFA_SRC_FXBARCODE_BC_WRITER_H_ - -#include "core/include/fxcrt/fx_string.h" -#include "core/include/fxge/fx_dib.h" -#include "xfa/src/fxbarcode/utils.h" - -class CBC_Writer { - public: - CBC_Writer(); - virtual ~CBC_Writer(); - virtual FX_BOOL SetCharEncoding(int32_t encoding); - virtual FX_BOOL SetModuleHeight(int32_t moduleHeight); - virtual FX_BOOL SetModuleWidth(int32_t moduleWidth); - virtual FX_BOOL SetHeight(int32_t height); - virtual FX_BOOL SetWidth(int32_t width); - virtual void SetBackgroundColor(FX_ARGB backgroundColor); - virtual void SetBarcodeColor(FX_ARGB foregroundColor); - - protected: - CFX_DIBitmap* CreateDIBitmap(int32_t width, int32_t height); - int32_t m_CharEncoding; - int32_t m_ModuleHeight; - int32_t m_ModuleWidth; - int32_t m_Height; - int32_t m_Width; - FXDIB_Format m_colorSpace; - FX_ARGB m_barColor; - FX_ARGB m_backgroundColor; -}; - -#endif // XFA_SRC_FXBARCODE_BC_WRITER_H_ diff --git a/xfa/src/fxbarcode/common/BC_CommonBitArray.cpp b/xfa/src/fxbarcode/common/BC_CommonBitArray.cpp deleted file mode 100644 index 43f1758720..0000000000 --- a/xfa/src/fxbarcode/common/BC_CommonBitArray.cpp +++ /dev/null @@ -1,113 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2007 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/common/BC_CommonBitArray.h" -#include "xfa/src/fxbarcode/utils.h" - -CBC_CommonBitArray::CBC_CommonBitArray(CBC_CommonBitArray* array) { - m_size = array->GetSize(); - m_bits.Copy(array->GetBits()); -} -CBC_CommonBitArray::CBC_CommonBitArray() { - m_bits.SetSize(1); - m_size = 0; -} -CBC_CommonBitArray::CBC_CommonBitArray(int32_t size) { - m_bits.SetSize((size + 31) >> 5); - m_size = size; -} -CBC_CommonBitArray::~CBC_CommonBitArray() { - m_size = 0; -} -int32_t CBC_CommonBitArray::GetSize() { - return m_size; -} -CFX_Int32Array& CBC_CommonBitArray::GetBits() { - return m_bits; -} -int32_t CBC_CommonBitArray::GetSizeInBytes() { - return (m_size + 7) >> 3; -} -FX_BOOL CBC_CommonBitArray::Get(int32_t i) { - return (m_bits[i >> 5] & (1 << (i & 0x1f))) != 0; -} -void CBC_CommonBitArray::Set(int32_t i) { - m_bits[i >> 5] |= 1 << (i & 0x1F); -} -void CBC_CommonBitArray::Flip(int32_t i) { - m_bits[i >> 5] ^= 1 << (i & 0x1F); -} -void CBC_CommonBitArray::SetBulk(int32_t i, int32_t newBits) { - m_bits[i >> 5] = newBits; -} -void CBC_CommonBitArray::Clear() { - FXSYS_memset(&m_bits[0], 0x00, m_bits.GetSize() * sizeof(int32_t)); -} -FX_BOOL CBC_CommonBitArray::IsRange(int32_t start, - int32_t end, - FX_BOOL value, - int32_t& e) { - if (end < start) { - e = BCExceptionEndLessThanStart; - return FALSE; - } - if (end == start) { - return TRUE; - } - end--; - int32_t firstInt = start >> 5; - int32_t lastInt = end >> 5; - int32_t i; - for (i = firstInt; i <= lastInt; i++) { - int32_t firstBit = i > firstInt ? 0 : start & 0x1F; - int32_t lastBit = i < lastInt ? 31 : end & 0x1F; - int32_t mask; - if (firstBit == 0 && lastBit == 31) { - mask = -1; - } else { - mask = 0; - for (int32_t j = firstBit; j <= lastBit; j++) { - mask |= 1 << j; - } - } - if ((m_bits[i] & mask) != (value ? mask : 0)) { - return FALSE; - } - } - return TRUE; -} -int32_t* CBC_CommonBitArray::GetBitArray() { - return &m_bits[0]; -} -void CBC_CommonBitArray::Reverse() { - int32_t* newBits = FX_Alloc(int32_t, m_bits.GetSize()); - FXSYS_memset(newBits, 0x00, m_bits.GetSize() * sizeof(int32_t)); - int32_t size = m_size; - int32_t i; - for (i = 0; i < size; i++) { - if (Get(size - i - 1)) { - newBits[i >> 5] |= 1 << (i & 0x1F); - } - } - FXSYS_memcpy(&m_bits[0], newBits, m_bits.GetSize() * sizeof(int32_t)); - FX_Free(newBits); -} diff --git a/xfa/src/fxbarcode/common/BC_CommonBitArray.h b/xfa/src/fxbarcode/common/BC_CommonBitArray.h deleted file mode 100644 index bf2b3559b7..0000000000 --- a/xfa/src/fxbarcode/common/BC_CommonBitArray.h +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_COMMON_BC_COMMONBITARRAY_H_ -#define XFA_SRC_FXBARCODE_COMMON_BC_COMMONBITARRAY_H_ - -#include "core/include/fxcrt/fx_basic.h" - -class CBC_CommonBitArray { - public: - CBC_CommonBitArray(CBC_CommonBitArray* array); - CBC_CommonBitArray(int32_t size); - CBC_CommonBitArray(); - virtual ~CBC_CommonBitArray(); - int32_t GetSize(); - CFX_Int32Array& GetBits(); - int32_t GetSizeInBytes(); - FX_BOOL Get(int32_t i); - void Set(int32_t i); - void Flip(int32_t i); - void SetBulk(int32_t i, int32_t newBits); - FX_BOOL IsRange(int32_t start, int32_t end, FX_BOOL value, int32_t& e); - int32_t* GetBitArray(); - void Reverse(); - void Clear(); - - private: - int32_t m_size; - CFX_Int32Array m_bits; -}; - -#endif // XFA_SRC_FXBARCODE_COMMON_BC_COMMONBITARRAY_H_ diff --git a/xfa/src/fxbarcode/common/BC_CommonBitMatrix.cpp b/xfa/src/fxbarcode/common/BC_CommonBitMatrix.cpp deleted file mode 100644 index 3a8fa15e2b..0000000000 --- a/xfa/src/fxbarcode/common/BC_CommonBitMatrix.cpp +++ /dev/null @@ -1,146 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2007 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/common/BC_CommonBitArray.h" -#include "xfa/src/fxbarcode/common/BC_CommonBitMatrix.h" -#include "xfa/src/fxbarcode/utils.h" - -CBC_CommonBitMatrix::CBC_CommonBitMatrix() { - m_width = 0; - m_height = 0; - m_rowSize = 0; - m_bits = NULL; -} -void CBC_CommonBitMatrix::Init(int32_t dimension) { - m_width = dimension; - m_height = dimension; - int32_t rowSize = (m_height + 31) >> 5; - m_rowSize = rowSize; - m_bits = FX_Alloc2D(int32_t, m_rowSize, m_height); - FXSYS_memset(m_bits, 0, m_rowSize * m_height * sizeof(int32_t)); -} -void CBC_CommonBitMatrix::Init(int32_t width, int32_t height) { - m_width = width; - m_height = height; - int32_t rowSize = (width + 31) >> 5; - m_rowSize = rowSize; - m_bits = FX_Alloc2D(int32_t, m_rowSize, m_height); - FXSYS_memset(m_bits, 0, m_rowSize * m_height * sizeof(int32_t)); -} -CBC_CommonBitMatrix::~CBC_CommonBitMatrix() { - FX_Free(m_bits); -} -FX_BOOL CBC_CommonBitMatrix::Get(int32_t x, int32_t y) { - int32_t offset = y * m_rowSize + (x >> 5); - if (offset >= m_rowSize * m_height || offset < 0) { - return false; - } - return ((((FX_DWORD)m_bits[offset]) >> (x & 0x1f)) & 1) != 0; -} -int32_t* CBC_CommonBitMatrix::GetBits() { - return m_bits; -} -void CBC_CommonBitMatrix::Set(int32_t x, int32_t y) { - int32_t offset = y * m_rowSize + (x >> 5); - if (offset >= m_rowSize * m_height || offset < 0) { - return; - } - m_bits[offset] |= 1 << (x & 0x1f); -} -void CBC_CommonBitMatrix::Flip(int32_t x, int32_t y) { - int32_t offset = y * m_rowSize + (x >> 5); - m_bits[offset] ^= 1 << (x & 0x1f); -} -void CBC_CommonBitMatrix::Clear() { - FXSYS_memset(m_bits, 0, m_rowSize * m_height * sizeof(int32_t)); -} -void CBC_CommonBitMatrix::SetRegion(int32_t left, - int32_t top, - int32_t width, - int32_t height, - int32_t& e) { - if (top < 0 || left < 0) { - e = BCExceptionLeftAndTopMustBeNonnegative; - return; - } - if (height < 1 || width < 1) { - e = BCExceptionHeightAndWidthMustBeAtLeast1; - return; - } - int32_t right = left + width; - int32_t bottom = top + height; - if (m_height < bottom || m_width < right) { - e = BCExceptionRegionMustFitInsideMatrix; - return; - } - int32_t y; - for (y = top; y < bottom; y++) { - int32_t offset = y * m_rowSize; - int32_t x; - for (x = left; x < right; x++) { - m_bits[offset + (x >> 5)] |= 1 << (x & 0x1f); - } - } -} -CBC_CommonBitArray* CBC_CommonBitMatrix::GetRow(int32_t y, - CBC_CommonBitArray* row) { - CBC_CommonBitArray* rowArray = NULL; - if (row == NULL || row->GetSize() < m_width) { - rowArray = new CBC_CommonBitArray(m_width); - } else { - rowArray = new CBC_CommonBitArray(row); - } - int32_t offset = y * m_rowSize; - int32_t x; - for (x = 0; x < m_rowSize; x++) { - rowArray->SetBulk(x << 5, m_bits[offset + x]); - } - return rowArray; -} -void CBC_CommonBitMatrix::SetRow(int32_t y, CBC_CommonBitArray* row) { - int32_t l = y * m_rowSize; - for (int32_t i = 0; i < m_rowSize; i++) { - m_bits[l] = row->GetBitArray()[i]; - l++; - } -} -void CBC_CommonBitMatrix::SetCol(int32_t y, CBC_CommonBitArray* col) { - for (int32_t i = 0; i < col->GetBits().GetSize(); i++) { - m_bits[i * m_rowSize + y] = col->GetBitArray()[i]; - } -} -int32_t CBC_CommonBitMatrix::GetWidth() { - return m_width; -} -int32_t CBC_CommonBitMatrix::GetHeight() { - return m_height; -} -int32_t CBC_CommonBitMatrix::GetRowSize() { - return m_rowSize; -} -int32_t CBC_CommonBitMatrix::GetDimension(int32_t& e) { - if (m_width != m_height) { - e = BCExceptionCanNotCallGetDimensionOnNonSquareMatrix; - return 0; - } - return m_width; -} diff --git a/xfa/src/fxbarcode/common/BC_CommonBitMatrix.h b/xfa/src/fxbarcode/common/BC_CommonBitMatrix.h deleted file mode 100644 index 86838a1d91..0000000000 --- a/xfa/src/fxbarcode/common/BC_CommonBitMatrix.h +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_COMMON_BC_COMMONBITMATRIX_H_ -#define XFA_SRC_FXBARCODE_COMMON_BC_COMMONBITMATRIX_H_ - -#include "core/include/fxcrt/fx_system.h" - -class CBC_CommonBitArray; - -class CBC_CommonBitMatrix { - public: - CBC_CommonBitMatrix(); - virtual ~CBC_CommonBitMatrix(); - FX_BOOL Get(int32_t x, int32_t y); - void Set(int32_t x, int32_t y); - void Flip(int32_t x, int32_t y); - void Clear(); - void SetRegion(int32_t left, - int32_t top, - int32_t width, - int32_t height, - int32_t& e); - CBC_CommonBitArray* GetRow(int32_t y, CBC_CommonBitArray* row); - void SetRow(int32_t y, CBC_CommonBitArray* row); - CBC_CommonBitArray* GetCol(int32_t y, CBC_CommonBitArray* row); - void SetCol(int32_t y, CBC_CommonBitArray* col); - int32_t GetWidth(); - int32_t GetHeight(); - int32_t GetRowSize(); - int32_t GetDimension(int32_t& e); - virtual void Init(int32_t dimension); - virtual void Init(int32_t width, int32_t height); - int32_t* GetBits(); - - private: - int32_t m_width; - int32_t m_height; - int32_t m_rowSize; - int32_t* m_bits; -}; - -#endif // XFA_SRC_FXBARCODE_COMMON_BC_COMMONBITMATRIX_H_ diff --git a/xfa/src/fxbarcode/common/BC_CommonBitSource.cpp b/xfa/src/fxbarcode/common/BC_CommonBitSource.cpp deleted file mode 100644 index dc10002f84..0000000000 --- a/xfa/src/fxbarcode/common/BC_CommonBitSource.cpp +++ /dev/null @@ -1,71 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2007 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/common/BC_CommonBitSource.h" - -CBC_CommonBitSource::CBC_CommonBitSource(CFX_ByteArray* bytes) { - m_bytes.Copy((*bytes)); - m_bitOffset = 0; - m_byteOffset = 0; -} -CBC_CommonBitSource::~CBC_CommonBitSource() {} -int32_t CBC_CommonBitSource::ReadBits(int32_t numBits, int32_t& e) { - if (numBits < 1 || numBits > 32) { - e = BCExceptionIllegalArgument; - return 0; - } - int32_t result = 0; - if (m_bitOffset > 0) { - int32_t bitsLeft = 8 - m_bitOffset; - int32_t toRead = numBits < bitsLeft ? numBits : bitsLeft; - int32_t bitsToNotRead = bitsLeft - toRead; - int32_t mask = (0xff >> (8 - toRead)) << bitsToNotRead; - result = (m_bytes[m_byteOffset] & mask) >> bitsToNotRead; - numBits -= toRead; - m_bitOffset += toRead; - if (m_bitOffset == 8) { - m_bitOffset = 0; - m_byteOffset++; - } - } - if (numBits > 0) { - while (numBits >= 8) { - result = (result << 8) | (m_bytes[m_byteOffset] & 0xff); - m_byteOffset++; - numBits -= 8; - } - if (numBits > 0) { - int32_t bitsToNotRead = 8 - numBits; - int32_t mask = (0xff >> bitsToNotRead) << bitsToNotRead; - result = (result << numBits) | - ((m_bytes[m_byteOffset] & mask) >> bitsToNotRead); - m_bitOffset += numBits; - } - } - return result; -} -int32_t CBC_CommonBitSource::Available() { - return 8 * (m_bytes.GetSize() - m_byteOffset) - m_bitOffset; -} -int32_t CBC_CommonBitSource::getByteOffset() { - return m_byteOffset; -} diff --git a/xfa/src/fxbarcode/common/BC_CommonBitSource.h b/xfa/src/fxbarcode/common/BC_CommonBitSource.h deleted file mode 100644 index 0e2a4bfb58..0000000000 --- a/xfa/src/fxbarcode/common/BC_CommonBitSource.h +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_COMMON_BC_COMMONBITSOURCE_H_ -#define XFA_SRC_FXBARCODE_COMMON_BC_COMMONBITSOURCE_H_ - -#include "core/include/fxcrt/fx_basic.h" -#include "xfa/src/fxbarcode/utils.h" - -class CBC_CommonBitSource { - public: - CBC_CommonBitSource(CFX_ByteArray* bytes); - virtual ~CBC_CommonBitSource(); - int32_t ReadBits(int32_t numBits, int32_t& e); - int32_t Available(); - int32_t getByteOffset(); - - private: - CFX_ByteArray m_bytes; - int32_t m_byteOffset; - int32_t m_bitOffset; -}; - -#endif // XFA_SRC_FXBARCODE_COMMON_BC_COMMONBITSOURCE_H_ diff --git a/xfa/src/fxbarcode/common/BC_CommonByteArray.cpp b/xfa/src/fxbarcode/common/BC_CommonByteArray.cpp deleted file mode 100644 index 1a6ef9f63f..0000000000 --- a/xfa/src/fxbarcode/common/BC_CommonByteArray.cpp +++ /dev/null @@ -1,99 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2008 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include - -#include "xfa/src/fxbarcode/common/BC_CommonByteArray.h" - -CBC_CommonByteArray::CBC_CommonByteArray() { - m_bytes = NULL; - m_size = 0; - m_index = 0; -} -CBC_CommonByteArray::CBC_CommonByteArray(int32_t size) { - m_size = size; - m_bytes = FX_Alloc(uint8_t, size); - FXSYS_memset(m_bytes, 0, size); - m_index = 0; -} -CBC_CommonByteArray::CBC_CommonByteArray(uint8_t* byteArray, int32_t size) { - m_size = size; - m_bytes = FX_Alloc(uint8_t, size); - FXSYS_memcpy(m_bytes, byteArray, size); - m_index = size; -} -CBC_CommonByteArray::~CBC_CommonByteArray() { - FX_Free(m_bytes); -} -int32_t CBC_CommonByteArray::At(int32_t index) { - return m_bytes[index] & 0xff; -} -void CBC_CommonByteArray::Set(int32_t index, int32_t value) { - m_bytes[index] = (uint8_t)value; -} -int32_t CBC_CommonByteArray::Size() { - return m_size; -} -FX_BOOL CBC_CommonByteArray::IsEmpty() { - return m_size == 0; -} -void CBC_CommonByteArray::AppendByte(int32_t value) { - if (m_size == 0 || m_index >= m_size) { - int32_t newSize = std::max(32, m_size << 1); - Reserve(newSize); - } - m_bytes[m_index] = (uint8_t)value; - m_index++; -} -void CBC_CommonByteArray::Reserve(int32_t capacity) { - if (m_bytes == NULL || m_size < capacity) { - uint8_t* newArray = FX_Alloc(uint8_t, capacity); - if (m_bytes) { - FXSYS_memcpy(newArray, m_bytes, m_size); - FXSYS_memset(newArray + m_size, 0, capacity - m_size); - } else { - FXSYS_memset(newArray, 0, capacity); - } - FX_Free(m_bytes); - m_bytes = newArray; - m_size = capacity; - } -} -void CBC_CommonByteArray::Set(uint8_t* source, int32_t offset, int32_t count) { - FX_Free(m_bytes); - m_bytes = FX_Alloc(uint8_t, count); - m_size = count; - FXSYS_memcpy(m_bytes, source + offset, count); - m_index = count; -} -void CBC_CommonByteArray::Set(CFX_ByteArray* source, - int32_t offset, - int32_t count) { - FX_Free(m_bytes); - m_bytes = FX_Alloc(uint8_t, count); - m_size = count; - int32_t i; - for (i = 0; i < count; i++) { - m_bytes[i] = source->operator[](i + offset); - } - m_index = m_size; -} diff --git a/xfa/src/fxbarcode/common/BC_CommonByteArray.h b/xfa/src/fxbarcode/common/BC_CommonByteArray.h deleted file mode 100644 index c8fb05d50a..0000000000 --- a/xfa/src/fxbarcode/common/BC_CommonByteArray.h +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_COMMON_BC_COMMONBYTEARRAY_H_ -#define XFA_SRC_FXBARCODE_COMMON_BC_COMMONBYTEARRAY_H_ - -#include "core/include/fxcrt/fx_basic.h" - -class CBC_CommonByteArray { - private: - int32_t m_size; - int32_t m_index; - uint8_t* m_bytes; - - public: - CBC_CommonByteArray(); - CBC_CommonByteArray(int32_t size); - CBC_CommonByteArray(uint8_t* byteArray, int32_t size); - virtual ~CBC_CommonByteArray(); - int32_t At(int32_t index); - void Set(int32_t index, int32_t value); - int32_t Size(); - FX_BOOL IsEmpty(); - void AppendByte(int32_t value); - void Reserve(int32_t capacity); - void Set(uint8_t* source, int32_t offset, int32_t count); - void Set(CFX_ByteArray* source, int32_t offset, int32_t count); -}; - -#endif // XFA_SRC_FXBARCODE_COMMON_BC_COMMONBYTEARRAY_H_ diff --git a/xfa/src/fxbarcode/common/BC_CommonByteMatrix.cpp b/xfa/src/fxbarcode/common/BC_CommonByteMatrix.cpp deleted file mode 100644 index 69c39a766c..0000000000 --- a/xfa/src/fxbarcode/common/BC_CommonByteMatrix.cpp +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2008 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "core/include/fxcrt/fx_memory.h" -#include "xfa/src/fxbarcode/common/BC_CommonByteMatrix.h" - -CBC_CommonByteMatrix::CBC_CommonByteMatrix(int32_t width, int32_t height) { - m_height = height; - m_width = width; - m_bytes = NULL; -} -void CBC_CommonByteMatrix::Init() { - m_bytes = FX_Alloc2D(uint8_t, m_height, m_width); - FXSYS_memset(m_bytes, 0xff, m_height * m_width); -} -CBC_CommonByteMatrix::~CBC_CommonByteMatrix() { - FX_Free(m_bytes); -} -int32_t CBC_CommonByteMatrix::GetHeight() { - return m_height; -} -int32_t CBC_CommonByteMatrix::GetWidth() { - return m_width; -} -uint8_t CBC_CommonByteMatrix::Get(int32_t x, int32_t y) { - return m_bytes[y * m_width + x]; -} -void CBC_CommonByteMatrix::Set(int32_t x, int32_t y, int32_t value) { - m_bytes[y * m_width + x] = (uint8_t)value; -} -void CBC_CommonByteMatrix::Set(int32_t x, int32_t y, uint8_t value) { - m_bytes[y * m_width + x] = value; -} -void CBC_CommonByteMatrix::clear(uint8_t value) { - int32_t y; - for (y = 0; y < m_height; y++) { - int32_t x; - for (x = 0; x < m_width; x++) { - m_bytes[y * m_width + x] = value; - } - } -} -uint8_t* CBC_CommonByteMatrix::GetArray() { - return m_bytes; -} diff --git a/xfa/src/fxbarcode/common/BC_CommonByteMatrix.h b/xfa/src/fxbarcode/common/BC_CommonByteMatrix.h deleted file mode 100644 index d9af45d2f3..0000000000 --- a/xfa/src/fxbarcode/common/BC_CommonByteMatrix.h +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_COMMON_BC_COMMONBYTEMATRIX_H_ -#define XFA_SRC_FXBARCODE_COMMON_BC_COMMONBYTEMATRIX_H_ - -#include - -#include "core/include/fxcrt/fx_system.h" - -class CBC_CommonByteMatrix { - public: - CBC_CommonByteMatrix(int32_t width, int32_t height); - virtual ~CBC_CommonByteMatrix(); - int32_t GetHeight(); - int32_t GetWidth(); - uint8_t Get(int32_t x, int32_t y); - uint8_t* GetArray(); - - void Set(int32_t x, int32_t y, int32_t value); - void Set(int32_t x, int32_t y, uint8_t value); - void clear(uint8_t value); - virtual void Init(); - - private: - uint8_t* m_bytes; - int32_t m_width; - int32_t m_height; -}; - -#endif // XFA_SRC_FXBARCODE_COMMON_BC_COMMONBYTEMATRIX_H_ diff --git a/xfa/src/fxbarcode/common/BC_CommonCharacterSetECI.cpp b/xfa/src/fxbarcode/common/BC_CommonCharacterSetECI.cpp deleted file mode 100644 index 58347c37bd..0000000000 --- a/xfa/src/fxbarcode/common/BC_CommonCharacterSetECI.cpp +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2008 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/common/BC_CommonCharacterSetECI.h" -#include "xfa/src/fxbarcode/common/BC_CommonECI.h" - -void CBC_CommonCharacterSetECI::initialize() {} -CBC_CommonCharacterSetECI::CBC_CommonCharacterSetECI( - int32_t value, - CFX_ByteString encodingName) - : CBC_CommonECI(value), m_encodingName(encodingName) {} -CBC_CommonCharacterSetECI::~CBC_CommonCharacterSetECI() {} -CFX_ByteString CBC_CommonCharacterSetECI::GetEncodingName() { - return m_encodingName; -} -void CBC_CommonCharacterSetECI::AddCharacterSet(int32_t value, - CFX_ByteString encodingName) {} -CBC_CommonCharacterSetECI* CBC_CommonCharacterSetECI::GetCharacterSetECIByValue( - int32_t value) { - return NULL; -} -CBC_CommonCharacterSetECI* CBC_CommonCharacterSetECI::GetCharacterSetECIByName( - const CFX_ByteString& name) { - return NULL; -} diff --git a/xfa/src/fxbarcode/common/BC_CommonCharacterSetECI.h b/xfa/src/fxbarcode/common/BC_CommonCharacterSetECI.h deleted file mode 100644 index c593b94f7a..0000000000 --- a/xfa/src/fxbarcode/common/BC_CommonCharacterSetECI.h +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_COMMON_BC_COMMONCHARACTERSETECI_H_ -#define XFA_SRC_FXBARCODE_COMMON_BC_COMMONCHARACTERSETECI_H_ - -#include "core/include/fxcrt/fx_string.h" -#include "xfa/src/fxbarcode/common/BC_CommonECI.h" - -class CBC_CommonCharacterSetECI : public CBC_CommonECI { - public: - CBC_CommonCharacterSetECI(int32_t value, CFX_ByteString encodingName); - virtual ~CBC_CommonCharacterSetECI(); - CFX_ByteString GetEncodingName(); - static void AddCharacterSet(int32_t value, CFX_ByteString encodingName); - int32_t GetValue(); - static CBC_CommonCharacterSetECI* GetCharacterSetECIByValue(int32_t value); - static CBC_CommonCharacterSetECI* GetCharacterSetECIByName( - const CFX_ByteString& name); - - private: - CFX_ByteString m_encodingName; - static void initialize(); -}; - -#endif // XFA_SRC_FXBARCODE_COMMON_BC_COMMONCHARACTERSETECI_H_ diff --git a/xfa/src/fxbarcode/common/BC_CommonDecoderResult.cpp b/xfa/src/fxbarcode/common/BC_CommonDecoderResult.cpp deleted file mode 100644 index a4ad0c4e65..0000000000 --- a/xfa/src/fxbarcode/common/BC_CommonDecoderResult.cpp +++ /dev/null @@ -1,77 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2007 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "core/include/fxcrt/fx_basic.h" -#include "xfa/src/fxbarcode/common/BC_CommonDecoderResult.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417ResultMetadata.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRCoderErrorCorrectionLevel.h" -#include "xfa/src/fxbarcode/utils.h" - -CBC_CommonDecoderResult::CBC_CommonDecoderResult() {} -void CBC_CommonDecoderResult::Init(const CFX_ByteArray& rawBytes, - const CFX_ByteString& text, - const CFX_Int32Array& byteSegments, - CBC_QRCoderErrorCorrectionLevel* ecLevel, - int32_t& e) { - if (text.IsEmpty()) { - e = BCExceptionIllegalArgument; - return; - } - m_rawBytes.Copy(rawBytes); - m_text = text; - m_byteSegments.Copy(byteSegments); - m_ecLevel = ecLevel; - m_other = NULL; -} -void CBC_CommonDecoderResult::Init(const CFX_ByteArray& rawBytes, - const CFX_ByteString& text, - const CFX_PtrArray& byteSegments, - const CFX_ByteString& ecLevel, - int32_t& e) { - if (text.IsEmpty()) { - e = BCExceptionIllegalArgument; - return; - } - m_rawBytes.Copy(rawBytes); - m_text = text; - m_pdf417byteSegments.Copy(byteSegments); - m_pdf417ecLevel = ecLevel; - m_other = NULL; -} -void CBC_CommonDecoderResult::setOther(CBC_PDF417ResultMetadata* other) { - m_other = other; -} -CBC_CommonDecoderResult::~CBC_CommonDecoderResult() { - delete m_other; -} -const CFX_ByteArray& CBC_CommonDecoderResult::GetRawBytes() { - return m_rawBytes; -} -const CFX_Int32Array& CBC_CommonDecoderResult::GetByteSegments() { - return m_byteSegments; -} -const CFX_ByteString& CBC_CommonDecoderResult::GetText() { - return m_text; -} -CBC_QRCoderErrorCorrectionLevel* CBC_CommonDecoderResult::GetECLevel() { - return m_ecLevel; -} diff --git a/xfa/src/fxbarcode/common/BC_CommonDecoderResult.h b/xfa/src/fxbarcode/common/BC_CommonDecoderResult.h deleted file mode 100644 index 185f38d082..0000000000 --- a/xfa/src/fxbarcode/common/BC_CommonDecoderResult.h +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_COMMON_BC_COMMONDECODERRESULT_H_ -#define XFA_SRC_FXBARCODE_COMMON_BC_COMMONDECODERRESULT_H_ - -#include "core/include/fxcrt/fx_basic.h" - -class CBC_QRCoderErrorCorrectionLevel; -class CBC_PDF417ResultMetadata; - -class CBC_CommonDecoderResult { - public: - CBC_CommonDecoderResult(); - virtual ~CBC_CommonDecoderResult(); - const CFX_ByteArray& GetRawBytes(); - const CFX_ByteString& GetText(); - const CFX_Int32Array& GetByteSegments(); - CBC_QRCoderErrorCorrectionLevel* GetECLevel(); - virtual void Init(const CFX_ByteArray& rawBytes, - const CFX_ByteString& text, - const CFX_Int32Array& byteSegments, - CBC_QRCoderErrorCorrectionLevel* ecLevel, - int32_t& e); - virtual void Init(const CFX_ByteArray& rawBytes, - const CFX_ByteString& text, - const CFX_PtrArray& byteSegments, - const CFX_ByteString& ecLevel, - int32_t& e); - void setOther(CBC_PDF417ResultMetadata* other); - - private: - CFX_ByteArray m_rawBytes; - CFX_ByteString m_text; - CFX_Int32Array m_byteSegments; - CFX_PtrArray m_pdf417byteSegments; - CBC_QRCoderErrorCorrectionLevel* m_ecLevel; - CFX_ByteString m_pdf417ecLevel; - CBC_PDF417ResultMetadata* m_other; -}; - -#endif // XFA_SRC_FXBARCODE_COMMON_BC_COMMONDECODERRESULT_H_ diff --git a/xfa/src/fxbarcode/common/BC_CommonECI.cpp b/xfa/src/fxbarcode/common/BC_CommonECI.cpp deleted file mode 100644 index 146c9e24ba..0000000000 --- a/xfa/src/fxbarcode/common/BC_CommonECI.cpp +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2008 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/common/BC_CommonCharacterSetECI.h" -#include "xfa/src/fxbarcode/common/BC_CommonECI.h" -#include "xfa/src/fxbarcode/utils.h" - -CBC_CommonECI::CBC_CommonECI(int32_t value) { - m_value = value; -} -CBC_CommonECI::~CBC_CommonECI() {} -int32_t CBC_CommonECI::GetValue() { - return m_value; -} -CBC_CommonECI* CBC_CommonECI::GetEICByValue(int32_t value, int32_t& e) { - if (value < 0 || value > 999999) { - e = BCExceptionBadECI; - return NULL; - } - if (value < 900) { - } - return NULL; -} diff --git a/xfa/src/fxbarcode/common/BC_CommonECI.h b/xfa/src/fxbarcode/common/BC_CommonECI.h deleted file mode 100644 index e0dc797fbf..0000000000 --- a/xfa/src/fxbarcode/common/BC_CommonECI.h +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_COMMON_BC_COMMONECI_H_ -#define XFA_SRC_FXBARCODE_COMMON_BC_COMMONECI_H_ - -#include - -class CBC_CommonECI { - public: - CBC_CommonECI(int32_t value); - virtual ~CBC_CommonECI(); - - int32_t GetValue(); - static CBC_CommonECI* GetEICByValue(int32_t value, int32_t& e); - - private: - int32_t m_value; -}; - -#endif // XFA_SRC_FXBARCODE_COMMON_BC_COMMONECI_H_ diff --git a/xfa/src/fxbarcode/common/BC_CommonPerspectiveTransform.cpp b/xfa/src/fxbarcode/common/BC_CommonPerspectiveTransform.cpp deleted file mode 100644 index 897d9537fd..0000000000 --- a/xfa/src/fxbarcode/common/BC_CommonPerspectiveTransform.cpp +++ /dev/null @@ -1,153 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2007 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/common/BC_CommonPerspectiveTransform.h" - -#include - -#include "core/include/fxcrt/fx_basic.h" -#include "xfa/src/fxbarcode/utils.h" - -CBC_CommonPerspectiveTransform::CBC_CommonPerspectiveTransform(FX_FLOAT a11, - FX_FLOAT a21, - FX_FLOAT a31, - FX_FLOAT a12, - FX_FLOAT a22, - FX_FLOAT a32, - FX_FLOAT a13, - FX_FLOAT a23, - FX_FLOAT a33) - : m_a11(a11), - m_a12(a12), - m_a13(a13), - m_a21(a21), - m_a22(a22), - m_a23(a23), - m_a31(a31), - m_a32(a32), - m_a33(a33) { -} -CBC_CommonPerspectiveTransform::~CBC_CommonPerspectiveTransform() {} -CBC_CommonPerspectiveTransform* -CBC_CommonPerspectiveTransform::QuadrilateralToQuadrilateral(FX_FLOAT x0, - FX_FLOAT y0, - FX_FLOAT x1, - FX_FLOAT y1, - FX_FLOAT x2, - FX_FLOAT y2, - FX_FLOAT x3, - FX_FLOAT y3, - FX_FLOAT x0p, - FX_FLOAT y0p, - FX_FLOAT x1p, - FX_FLOAT y1p, - FX_FLOAT x2p, - FX_FLOAT y2p, - FX_FLOAT x3p, - FX_FLOAT y3p) { - std::unique_ptr qToS( - QuadrilateralToSquare(x0, y0, x1, y1, x2, y2, x3, y3)); - std::unique_ptr sToQ( - SquareToQuadrilateral(x0p, y0p, x1p, y1p, x2p, y2p, x3p, y3p)); - return sToQ->Times(*(qToS.get())); -} -void CBC_CommonPerspectiveTransform::TransformPoints(CFX_FloatArray* points) { - int32_t max = points->GetSize(); - FX_FLOAT a11 = m_a11; - FX_FLOAT a12 = m_a12; - FX_FLOAT a13 = m_a13; - FX_FLOAT a21 = m_a21; - FX_FLOAT a22 = m_a22; - FX_FLOAT a23 = m_a23; - FX_FLOAT a31 = m_a31; - FX_FLOAT a32 = m_a32; - FX_FLOAT a33 = m_a33; - int32_t i; - for (i = 0; i < max; i += 2) { - FX_FLOAT x = (*points)[i]; - FX_FLOAT y = (*points)[i + 1]; - FX_FLOAT denominator = a13 * x + a23 * y + a33; - (*points)[i] = (a11 * x + a21 * y + a31) / denominator; - (*points)[i + 1] = (a12 * x + a22 * y + a32) / denominator; - } -} -CBC_CommonPerspectiveTransform* -CBC_CommonPerspectiveTransform::SquareToQuadrilateral(FX_FLOAT x0, - FX_FLOAT y0, - FX_FLOAT x1, - FX_FLOAT y1, - FX_FLOAT x2, - FX_FLOAT y2, - FX_FLOAT x3, - FX_FLOAT y3) { - FX_FLOAT dy2 = y3 - y2; - FX_FLOAT dy3 = y0 - y1 + y2 - y3; - if ((dy2 == 0.0f) && (dy3 == 0.0f)) { - return new CBC_CommonPerspectiveTransform(x1 - x0, x2 - x1, x0, y1 - y0, - y2 - y1, y0, 0.0f, 0.0f, 1.0f); - } else { - FX_FLOAT dx1 = x1 - x2; - FX_FLOAT dx2 = x3 - x2; - FX_FLOAT dx3 = x0 - x1 + x2 - x3; - FX_FLOAT dy1 = y1 - y2; - FX_FLOAT denominator = dx1 * dy2 - dx2 * dy1; - FX_FLOAT a13 = (dx3 * dy2 - dx2 * dy3) / denominator; - FX_FLOAT a23 = (dx1 * dy3 - dx3 * dy1) / denominator; - return new CBC_CommonPerspectiveTransform( - x1 - x0 + a13 * x1, x3 - x0 + a23 * x3, x0, y1 - y0 + a13 * y1, - y3 - y0 + a23 * y3, y0, a13, a23, 1.0f); - } -} -CBC_CommonPerspectiveTransform* -CBC_CommonPerspectiveTransform::QuadrilateralToSquare(FX_FLOAT x0, - FX_FLOAT y0, - FX_FLOAT x1, - FX_FLOAT y1, - FX_FLOAT x2, - FX_FLOAT y2, - FX_FLOAT x3, - FX_FLOAT y3) { - std::unique_ptr temp1( - SquareToQuadrilateral(x0, y0, x1, y1, x2, y2, x3, y3)); - return temp1->BuildAdjoint(); -} -CBC_CommonPerspectiveTransform* CBC_CommonPerspectiveTransform::BuildAdjoint() { - return new CBC_CommonPerspectiveTransform( - m_a22 * m_a33 - m_a23 * m_a32, m_a23 * m_a31 - m_a21 * m_a33, - m_a21 * m_a32 - m_a22 * m_a31, m_a13 * m_a32 - m_a12 * m_a33, - m_a11 * m_a33 - m_a13 * m_a31, m_a12 * m_a31 - m_a11 * m_a32, - m_a12 * m_a23 - m_a13 * m_a22, m_a13 * m_a21 - m_a11 * m_a23, - m_a11 * m_a22 - m_a12 * m_a21); -} -CBC_CommonPerspectiveTransform* CBC_CommonPerspectiveTransform::Times( - CBC_CommonPerspectiveTransform& other) { - return new CBC_CommonPerspectiveTransform( - m_a11 * other.m_a11 + m_a21 * other.m_a12 + m_a31 * other.m_a13, - m_a11 * other.m_a21 + m_a21 * other.m_a22 + m_a31 * other.m_a23, - m_a11 * other.m_a31 + m_a21 * other.m_a32 + m_a31 * other.m_a33, - m_a12 * other.m_a11 + m_a22 * other.m_a12 + m_a32 * other.m_a13, - m_a12 * other.m_a21 + m_a22 * other.m_a22 + m_a32 * other.m_a23, - m_a12 * other.m_a31 + m_a22 * other.m_a32 + m_a32 * other.m_a33, - m_a13 * other.m_a11 + m_a23 * other.m_a12 + m_a33 * other.m_a13, - m_a13 * other.m_a21 + m_a23 * other.m_a22 + m_a33 * other.m_a23, - m_a13 * other.m_a31 + m_a23 * other.m_a32 + m_a33 * other.m_a33); -} diff --git a/xfa/src/fxbarcode/common/BC_CommonPerspectiveTransform.h b/xfa/src/fxbarcode/common/BC_CommonPerspectiveTransform.h deleted file mode 100644 index dfe0ce1f2d..0000000000 --- a/xfa/src/fxbarcode/common/BC_CommonPerspectiveTransform.h +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_COMMON_BC_COMMONPERSPECTIVETRANSFORM_H_ -#define XFA_SRC_FXBARCODE_COMMON_BC_COMMONPERSPECTIVETRANSFORM_H_ - -#include "core/include/fxcrt/fx_basic.h" - -class CBC_CommonPerspectiveTransform { - public: - CBC_CommonPerspectiveTransform(FX_FLOAT a11, - FX_FLOAT a21, - FX_FLOAT a31, - FX_FLOAT a12, - FX_FLOAT a22, - FX_FLOAT a32, - FX_FLOAT a13, - FX_FLOAT a23, - FX_FLOAT a33); - virtual ~CBC_CommonPerspectiveTransform(); - static CBC_CommonPerspectiveTransform* QuadrilateralToQuadrilateral( - FX_FLOAT x0, - FX_FLOAT y0, - FX_FLOAT x1, - FX_FLOAT y1, - FX_FLOAT x2, - FX_FLOAT y2, - FX_FLOAT x3, - FX_FLOAT y3, - FX_FLOAT x0p, - FX_FLOAT y0p, - FX_FLOAT x1p, - FX_FLOAT y1p, - FX_FLOAT x2p, - FX_FLOAT y2p, - FX_FLOAT x3p, - FX_FLOAT y3p); - static CBC_CommonPerspectiveTransform* SquareToQuadrilateral(FX_FLOAT x0, - FX_FLOAT y0, - FX_FLOAT x1, - FX_FLOAT y1, - FX_FLOAT x2, - FX_FLOAT y2, - FX_FLOAT x3, - FX_FLOAT y3); - static CBC_CommonPerspectiveTransform* QuadrilateralToSquare(FX_FLOAT x0, - FX_FLOAT y0, - FX_FLOAT x1, - FX_FLOAT y1, - FX_FLOAT x2, - FX_FLOAT y2, - FX_FLOAT x3, - FX_FLOAT y3); - CBC_CommonPerspectiveTransform* BuildAdjoint(); - CBC_CommonPerspectiveTransform* Times(CBC_CommonPerspectiveTransform& other); - void TransformPoints(CFX_FloatArray* points); - - private: - FX_FLOAT m_a11, m_a12, m_a13, m_a21, m_a22, m_a23, m_a31, m_a32, m_a33; -}; - -#endif // XFA_SRC_FXBARCODE_COMMON_BC_COMMONPERSPECTIVETRANSFORM_H_ diff --git a/xfa/src/fxbarcode/common/BC_GlobalHistogramBinarizer.cpp b/xfa/src/fxbarcode/common/BC_GlobalHistogramBinarizer.cpp deleted file mode 100644 index 8babc9c78f..0000000000 --- a/xfa/src/fxbarcode/common/BC_GlobalHistogramBinarizer.cpp +++ /dev/null @@ -1,173 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2009 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/common/BC_GlobalHistogramBinarizer.h" - -#include - -#include "xfa/src/fxbarcode/BC_Binarizer.h" -#include "xfa/src/fxbarcode/BC_LuminanceSource.h" -#include "xfa/src/fxbarcode/common/BC_CommonBitArray.h" -#include "xfa/src/fxbarcode/common/BC_CommonBitMatrix.h" -#include "xfa/src/fxbarcode/utils.h" - -const int32_t LUMINANCE_BITS = 5; -const int32_t LUMINANCE_SHIFT = 8 - LUMINANCE_BITS; -const int32_t LUMINANCE_BUCKETS = 1 << LUMINANCE_BITS; - -CBC_GlobalHistogramBinarizer::CBC_GlobalHistogramBinarizer( - CBC_LuminanceSource* source) - : CBC_Binarizer(source) {} -CBC_GlobalHistogramBinarizer::~CBC_GlobalHistogramBinarizer() {} -CBC_CommonBitArray* CBC_GlobalHistogramBinarizer::GetBlackRow( - int32_t y, - CBC_CommonBitArray* row, - int32_t& e) { - CBC_LuminanceSource* source = GetLuminanceSource(); - int32_t width = source->GetWidth(); - std::unique_ptr result(new CBC_CommonBitArray(width)); - InitArrays(width); - CFX_ByteArray* localLuminances = source->GetRow(y, m_luminance, e); - if (e != BCExceptionNO) { - return result.release(); - } - CFX_Int32Array localBuckets; - localBuckets.Copy(m_buckets); - int32_t x; - for (x = 0; x < width; x++) { - int32_t pixel = (*localLuminances)[x] & 0xff; - localBuckets[pixel >> LUMINANCE_SHIFT]++; - } - int32_t blackPoint = EstimateBlackPoint(localBuckets, e); - if (e != BCExceptionNO) { - return result.release(); - } - int32_t left = (*localLuminances)[0] & 0xff; - int32_t center = (*localLuminances)[1] & 0xff; - for (x = 1; x < width - 1; x++) { - int32_t right = (*localLuminances)[x + 1] & 0xff; - int32_t luminance = ((center << 2) - left - right) >> 1; - if (luminance < blackPoint) { - result->Set(x); - } - left = center; - center = right; - } - return result.release(); -} -CBC_CommonBitMatrix* CBC_GlobalHistogramBinarizer::GetBlackMatrix(int32_t& e) { - CBC_LuminanceSource* source = GetLuminanceSource(); - int32_t width = source->GetWidth(); - int32_t height = source->GetHeight(); - std::unique_ptr matrix(new CBC_CommonBitMatrix()); - matrix->Init(width, height); - InitArrays(width); - CFX_Int32Array localBuckets; - localBuckets.Copy(m_buckets); - int32_t y; - for (y = 1; y < 5; y++) { - int32_t row = height * y / 5; - CFX_ByteArray* localLuminances = source->GetRow(row, m_luminance, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - int32_t right = (width << 2) / 5; - int32_t x; - for (x = width / 5; x < right; x++) { - int32_t pixel = (*localLuminances)[x] & 0xff; - localBuckets[pixel >> LUMINANCE_SHIFT]++; - } - } - int32_t blackPoint = EstimateBlackPoint(localBuckets, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - std::unique_ptr localLuminances(source->GetMatrix()); - for (y = 0; y < height; y++) { - int32_t offset = y * width; - for (int32_t x = 0; x < width; x++) { - int32_t pixel = (*localLuminances)[offset + x] & 0xff; - if (pixel < blackPoint) { - matrix->Set(x, y); - } - } - } - return matrix.release(); -} -void CBC_GlobalHistogramBinarizer::InitArrays(int32_t luminanceSize) { - if (m_luminance.GetSize() < luminanceSize) { - m_luminance.SetSize(luminanceSize); - } - if (m_buckets.GetSize() <= 0) { - m_buckets.SetSize(LUMINANCE_BUCKETS); - } else { - int32_t x; - for (x = 0; x < LUMINANCE_BUCKETS; x++) { - m_buckets[x] = 0; - } - } -} -int32_t CBC_GlobalHistogramBinarizer::EstimateBlackPoint( - CFX_Int32Array& buckets, - int32_t& e) { - int32_t numBuckets = buckets.GetSize(); - int32_t maxBucketCount = 0; - int32_t firstPeak = 0; - int32_t firstPeakSize = 0; - int32_t x; - for (x = 0; x < numBuckets; x++) { - if (buckets[x] > firstPeakSize) { - firstPeak = x; - firstPeakSize = buckets[x]; - } - if (buckets[x] > maxBucketCount) { - maxBucketCount = buckets[x]; - } - } - int32_t secondPeak = 0; - int32_t secondPeakScore = 0; - for (x = 0; x < numBuckets; x++) { - int32_t distanceToBiggest = x - firstPeak; - int32_t score = buckets[x] * distanceToBiggest * distanceToBiggest; - if (score > secondPeakScore) { - secondPeak = x; - secondPeakScore = score; - } - } - if (firstPeak > secondPeak) { - int32_t temp = firstPeak; - firstPeak = secondPeak; - secondPeak = temp; - } - if (secondPeak - firstPeak <= numBuckets >> 4) { - e = BCExceptionRead; - return 0; - } - int32_t bestValley = secondPeak - 1; - int32_t bestValleyScore = -1; - for (x = secondPeak - 1; x > firstPeak; x--) { - int32_t fromFirst = x - firstPeak; - int32_t score = fromFirst * fromFirst * (secondPeak - x) * - (maxBucketCount - buckets[x]); - if (score > bestValleyScore) { - bestValley = x; - bestValleyScore = score; - } - } - return bestValley << LUMINANCE_SHIFT; -} diff --git a/xfa/src/fxbarcode/common/BC_GlobalHistogramBinarizer.h b/xfa/src/fxbarcode/common/BC_GlobalHistogramBinarizer.h deleted file mode 100644 index 56c2794fbe..0000000000 --- a/xfa/src/fxbarcode/common/BC_GlobalHistogramBinarizer.h +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_COMMON_BC_GLOBALHISTOGRAMBINARIZER_H_ -#define XFA_SRC_FXBARCODE_COMMON_BC_GLOBALHISTOGRAMBINARIZER_H_ - -#include "core/include/fxcrt/fx_basic.h" -#include "xfa/src/fxbarcode/BC_Binarizer.h" - -class CBC_CommonBitArray; -class CBC_CommonBitMatrix; -class CBC_LuminanceSource; - -class CBC_GlobalHistogramBinarizer : public CBC_Binarizer { - public: - CBC_GlobalHistogramBinarizer(CBC_LuminanceSource* source); - virtual ~CBC_GlobalHistogramBinarizer(); - - void InitArrays(int32_t luminanceSize); - CBC_CommonBitMatrix* GetBlackMatrix(int32_t& e); - CBC_CommonBitArray* GetBlackRow(int32_t y, - CBC_CommonBitArray* row, - int32_t& e); - static int32_t EstimateBlackPoint(CFX_Int32Array& buckets, int32_t& e); - - private: - CFX_ByteArray m_luminance; - CFX_Int32Array m_buckets; -}; - -#endif // XFA_SRC_FXBARCODE_COMMON_BC_GLOBALHISTOGRAMBINARIZER_H_ diff --git a/xfa/src/fxbarcode/common/BC_WhiteRectangleDetector.cpp b/xfa/src/fxbarcode/common/BC_WhiteRectangleDetector.cpp deleted file mode 100644 index 4e33691e08..0000000000 --- a/xfa/src/fxbarcode/common/BC_WhiteRectangleDetector.cpp +++ /dev/null @@ -1,254 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2010 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/common/BC_WhiteRectangleDetector.h" - -#include - -#include "xfa/src/fxbarcode/BC_ResultPoint.h" -#include "xfa/src/fxbarcode/common/BC_CommonBitMatrix.h" -#include "xfa/src/fxbarcode/utils.h" - -CBC_WhiteRectangleDetector::CBC_WhiteRectangleDetector( - CBC_CommonBitMatrix* image) { - m_image = image; - m_height = image->GetHeight(); - m_width = image->GetWidth(); - m_leftInit = (m_width - INIT_SIZE) >> 1; - m_rightInit = (m_width + INIT_SIZE) >> 1; - m_upInit = (m_height - INIT_SIZE) >> 1; - m_downInit = (m_height + INIT_SIZE) >> 1; -} -void CBC_WhiteRectangleDetector::Init(int32_t& e) { - if (m_upInit < 0 || m_leftInit < 0 || m_downInit >= m_height || - m_rightInit >= m_width) { - e = BCExceptionNotFound; - BC_EXCEPTION_CHECK_ReturnVoid(e); - } -} -CBC_WhiteRectangleDetector::CBC_WhiteRectangleDetector( - CBC_CommonBitMatrix* image, - int32_t initSize, - int32_t x, - int32_t y) { - m_image = image; - m_height = image->GetHeight(); - m_width = image->GetWidth(); - int32_t halfsize = initSize >> 1; - m_leftInit = x - halfsize; - m_rightInit = x + halfsize; - m_upInit = y - halfsize; - m_downInit = y + halfsize; -} -CBC_WhiteRectangleDetector::~CBC_WhiteRectangleDetector() {} -CFX_PtrArray* CBC_WhiteRectangleDetector::Detect(int32_t& e) { - int32_t left = m_leftInit; - int32_t right = m_rightInit; - int32_t up = m_upInit; - int32_t down = m_downInit; - FX_BOOL sizeExceeded = FALSE; - FX_BOOL aBlackPointFoundOnBorder = TRUE; - FX_BOOL atLeastOneBlackPointFoundOnBorder = FALSE; - while (aBlackPointFoundOnBorder) { - aBlackPointFoundOnBorder = FALSE; - FX_BOOL rightBorderNotWhite = TRUE; - while (rightBorderNotWhite && right < m_width) { - rightBorderNotWhite = ContainsBlackPoint(up, down, right, FALSE); - if (rightBorderNotWhite) { - right++; - aBlackPointFoundOnBorder = TRUE; - } - } - if (right >= m_width) { - sizeExceeded = TRUE; - break; - } - FX_BOOL bottomBorderNotWhite = TRUE; - while (bottomBorderNotWhite && down < m_height) { - bottomBorderNotWhite = ContainsBlackPoint(left, right, down, TRUE); - if (bottomBorderNotWhite) { - down++; - aBlackPointFoundOnBorder = TRUE; - } - } - if (down >= m_height) { - sizeExceeded = TRUE; - break; - } - FX_BOOL leftBorderNotWhite = TRUE; - while (leftBorderNotWhite && left >= 0) { - leftBorderNotWhite = ContainsBlackPoint(up, down, left, FALSE); - if (leftBorderNotWhite) { - left--; - aBlackPointFoundOnBorder = TRUE; - } - } - if (left < 0) { - sizeExceeded = TRUE; - break; - } - FX_BOOL topBorderNotWhite = TRUE; - while (topBorderNotWhite && up >= 0) { - topBorderNotWhite = ContainsBlackPoint(left, right, up, TRUE); - if (topBorderNotWhite) { - up--; - aBlackPointFoundOnBorder = TRUE; - } - } - if (up < 0) { - sizeExceeded = TRUE; - break; - } - if (aBlackPointFoundOnBorder) { - atLeastOneBlackPointFoundOnBorder = TRUE; - } - } - if (!sizeExceeded && atLeastOneBlackPointFoundOnBorder) { - int32_t maxSize = right - left; - std::unique_ptr z; - for (int32_t i = 1; i < maxSize; i++) { - z.reset(GetBlackPointOnSegment((FX_FLOAT)left, (FX_FLOAT)(down - i), - (FX_FLOAT)(left + i), (FX_FLOAT)(down))); - if (z) - break; - } - if (z.get() == NULL) { - e = BCExceptionNotFound; - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - } - std::unique_ptr t; - for (int32_t j = 1; j < maxSize; j++) { - t.reset(GetBlackPointOnSegment((FX_FLOAT)left, (FX_FLOAT)(up + j), - (FX_FLOAT)(left + j), (FX_FLOAT)up)); - if (t) - break; - } - if (t.get() == NULL) { - e = BCExceptionNotFound; - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - } - std::unique_ptr x; - for (int32_t k = 1; k < maxSize; k++) { - x.reset(GetBlackPointOnSegment((FX_FLOAT)right, (FX_FLOAT)(up + k), - (FX_FLOAT)(right - k), (FX_FLOAT)up)); - if (x) - break; - } - if (x.get() == NULL) { - e = BCExceptionNotFound; - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - } - std::unique_ptr y; - for (int32_t m = 1; m < maxSize; m++) { - y.reset(GetBlackPointOnSegment((FX_FLOAT)right, (FX_FLOAT)(down - m), - (FX_FLOAT)(right - m), (FX_FLOAT)down)); - if (y) - break; - } - if (y.get() == NULL) { - e = BCExceptionNotFound; - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - } - return CenterEdges(y.get(), z.get(), x.get(), t.get()); - } else { - e = BCExceptionNotFound; - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - } - return NULL; -} -int32_t CBC_WhiteRectangleDetector::Round(FX_FLOAT d) { - return (int32_t)(d + 0.5f); -} -CBC_ResultPoint* CBC_WhiteRectangleDetector::GetBlackPointOnSegment( - FX_FLOAT aX, - FX_FLOAT aY, - FX_FLOAT bX, - FX_FLOAT bY) { - int32_t dist = DistanceL2(aX, aY, bX, bY); - float xStep = (bX - aX) / dist; - float yStep = (bY - aY) / dist; - for (int32_t i = 0; i < dist; i++) { - int32_t x = Round(aX + i * xStep); - int32_t y = Round(aY + i * yStep); - if (m_image->Get(x, y)) { - return new CBC_ResultPoint((FX_FLOAT)x, (FX_FLOAT)y); - } - } - return NULL; -} -int32_t CBC_WhiteRectangleDetector::DistanceL2(FX_FLOAT aX, - FX_FLOAT aY, - FX_FLOAT bX, - FX_FLOAT bY) { - float xDiff = aX - bX; - float yDiff = aY - bY; - return Round((float)sqrt(xDiff * xDiff + yDiff * yDiff)); -} -CFX_PtrArray* CBC_WhiteRectangleDetector::CenterEdges(CBC_ResultPoint* y, - CBC_ResultPoint* z, - CBC_ResultPoint* x, - CBC_ResultPoint* t) { - float yi = y->GetX(); - float yj = y->GetY(); - float zi = z->GetX(); - float zj = z->GetY(); - float xi = x->GetX(); - float xj = x->GetY(); - float ti = t->GetX(); - float tj = t->GetY(); - if (yi < m_width / 2) { - CFX_PtrArray* result = new CFX_PtrArray; - result->SetSize(4); - (*result)[0] = new CBC_ResultPoint(ti - CORR, tj + CORR); - (*result)[1] = new CBC_ResultPoint(zi + CORR, zj + CORR); - (*result)[2] = new CBC_ResultPoint(xi - CORR, xj - CORR); - (*result)[3] = new CBC_ResultPoint(yi + CORR, yj - CORR); - return result; - } else { - CFX_PtrArray* result = new CFX_PtrArray; - result->SetSize(4); - (*result)[0] = new CBC_ResultPoint(ti + CORR, tj + CORR); - (*result)[1] = new CBC_ResultPoint(zi + CORR, zj - CORR); - (*result)[2] = new CBC_ResultPoint(xi - CORR, xj + CORR); - (*result)[3] = new CBC_ResultPoint(yi - CORR, yj - CORR); - return result; - } -} -FX_BOOL CBC_WhiteRectangleDetector::ContainsBlackPoint(int32_t a, - int32_t b, - int32_t fixed, - FX_BOOL horizontal) { - if (horizontal) { - for (int32_t x = a; x <= b; x++) { - if (m_image->Get(x, fixed)) { - return TRUE; - } - } - } else { - for (int32_t y = a; y <= b; y++) { - if (m_image->Get(fixed, y)) { - return TRUE; - } - } - } - return FALSE; -} diff --git a/xfa/src/fxbarcode/common/BC_WhiteRectangleDetector.h b/xfa/src/fxbarcode/common/BC_WhiteRectangleDetector.h deleted file mode 100644 index 4af04ac1fc..0000000000 --- a/xfa/src/fxbarcode/common/BC_WhiteRectangleDetector.h +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_COMMON_BC_WHITERECTANGLEDETECTOR_H_ -#define XFA_SRC_FXBARCODE_COMMON_BC_WHITERECTANGLEDETECTOR_H_ - -#include "core/include/fxcrt/fx_basic.h" - -class CBC_CommonBitMatrix; -class CBC_ResultPoint; - -class CBC_WhiteRectangleDetector { - public: - CBC_WhiteRectangleDetector(CBC_CommonBitMatrix* image); - CBC_WhiteRectangleDetector(CBC_CommonBitMatrix* image, - int32_t initSize, - int32_t x, - int32_t y); - virtual ~CBC_WhiteRectangleDetector(); - CFX_PtrArray* Detect(int32_t& e); - virtual void Init(int32_t& e); - - private: - int32_t Round(float d); - CBC_ResultPoint* GetBlackPointOnSegment(FX_FLOAT aX, - FX_FLOAT aY, - FX_FLOAT bX, - FX_FLOAT bY); - int32_t DistanceL2(FX_FLOAT aX, FX_FLOAT aY, FX_FLOAT bX, FX_FLOAT bY); - CFX_PtrArray* CenterEdges(CBC_ResultPoint* y, - CBC_ResultPoint* z, - CBC_ResultPoint* x, - CBC_ResultPoint* t); - FX_BOOL ContainsBlackPoint(int32_t a, - int32_t b, - int32_t fixed, - FX_BOOL horizontal); - - static const int32_t INIT_SIZE = 30; - static const int32_t CORR = 1; - - CBC_CommonBitMatrix* m_image; - int32_t m_height; - int32_t m_width; - int32_t m_leftInit; - int32_t m_rightInit; - int32_t m_downInit; - int32_t m_upInit; -}; - -#endif // XFA_SRC_FXBARCODE_COMMON_BC_WHITERECTANGLEDETECTOR_H_ diff --git a/xfa/src/fxbarcode/common/reedsolomon/BC_ReedSolomon.cpp b/xfa/src/fxbarcode/common/reedsolomon/BC_ReedSolomon.cpp deleted file mode 100644 index 3e6de6ef06..0000000000 --- a/xfa/src/fxbarcode/common/reedsolomon/BC_ReedSolomon.cpp +++ /dev/null @@ -1,104 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2007 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/common/reedsolomon/BC_ReedSolomon.h" - -#include - -#include "xfa/src/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256.h" -#include "xfa/src/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256Poly.h" - -CBC_ReedSolomonEncoder::CBC_ReedSolomonEncoder(CBC_ReedSolomonGF256* field) { - m_field = field; -} -void CBC_ReedSolomonEncoder::Init() { - m_cachedGenerators.Add(new CBC_ReedSolomonGF256Poly(m_field, 1)); -} -CBC_ReedSolomonGF256Poly* CBC_ReedSolomonEncoder::BuildGenerator(int32_t degree, - int32_t& e) { - if (degree >= m_cachedGenerators.GetSize()) { - CBC_ReedSolomonGF256Poly* lastGenerator = - (CBC_ReedSolomonGF256Poly*)(m_cachedGenerators - [m_cachedGenerators.GetSize() - 1]); - for (int32_t d = m_cachedGenerators.GetSize(); d <= degree; d++) { - CFX_Int32Array temp; - temp.Add(1); - temp.Add(m_field->Exp(d - 1)); - CBC_ReedSolomonGF256Poly temp_poly; - temp_poly.Init(m_field, &temp, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - CBC_ReedSolomonGF256Poly* nextGenerator = - lastGenerator->Multiply(&temp_poly, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - m_cachedGenerators.Add(nextGenerator); - lastGenerator = nextGenerator; - } - } - return (CBC_ReedSolomonGF256Poly*)(m_cachedGenerators[degree]); -} -void CBC_ReedSolomonEncoder::Encode(CFX_Int32Array* toEncode, - int32_t ecBytes, - int32_t& e) { - if (ecBytes == 0) { - e = BCExceptionNoCorrectionBytes; - BC_EXCEPTION_CHECK_ReturnVoid(e); - } - int32_t dataBytes = toEncode->GetSize() - ecBytes; - if (dataBytes <= 0) { - e = BCExceptionNoDataBytesProvided; - BC_EXCEPTION_CHECK_ReturnVoid(e); - } - CBC_ReedSolomonGF256Poly* generator = BuildGenerator(ecBytes, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - CFX_Int32Array infoCoefficients; - infoCoefficients.SetSize(dataBytes); - for (int32_t x = 0; x < dataBytes; x++) { - infoCoefficients[x] = toEncode->operator[](x); - } - CBC_ReedSolomonGF256Poly info; - info.Init(m_field, &infoCoefficients, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - std::unique_ptr infoTemp( - info.MultiplyByMonomial(ecBytes, 1, e)); - BC_EXCEPTION_CHECK_ReturnVoid(e); - std::unique_ptr temp(infoTemp->Divide(generator, e)); - BC_EXCEPTION_CHECK_ReturnVoid(e); - CBC_ReedSolomonGF256Poly* remainder = - (CBC_ReedSolomonGF256Poly*)(temp->operator[](1)); - CFX_Int32Array* coefficients = remainder->GetCoefficients(); - int32_t numZeroCoefficients = ecBytes - coefficients->GetSize(); - for (int32_t i = 0; i < numZeroCoefficients; i++) { - (*toEncode)[dataBytes + i] = 0; - } - for (int32_t y = 0; y < coefficients->GetSize(); y++) { - (*toEncode)[dataBytes + numZeroCoefficients + y] = - coefficients->operator[](y); - } - for (int32_t k = 0; k < temp->GetSize(); k++) { - delete (CBC_ReedSolomonGF256Poly*)(*temp)[k]; - } -} -CBC_ReedSolomonEncoder::~CBC_ReedSolomonEncoder() { - for (int32_t i = 0; i < m_cachedGenerators.GetSize(); i++) { - delete (CBC_ReedSolomonGF256Poly*)m_cachedGenerators[i]; - } -} diff --git a/xfa/src/fxbarcode/common/reedsolomon/BC_ReedSolomon.h b/xfa/src/fxbarcode/common/reedsolomon/BC_ReedSolomon.h deleted file mode 100644 index 71eacc5e76..0000000000 --- a/xfa/src/fxbarcode/common/reedsolomon/BC_ReedSolomon.h +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_COMMON_REEDSOLOMON_BC_REEDSOLOMON_H_ -#define XFA_SRC_FXBARCODE_COMMON_REEDSOLOMON_BC_REEDSOLOMON_H_ - -#include "core/include/fxcrt/fx_basic.h" - -class CBC_ReedSolomonGF256; -class CBC_ReedSolomonGF256Poly; - -class CBC_ReedSolomonEncoder { - private: - CBC_ReedSolomonGF256* m_field; - CFX_PtrArray m_cachedGenerators; - CBC_ReedSolomonGF256Poly* BuildGenerator(int32_t degree, int32_t& e); - - public: - CBC_ReedSolomonEncoder(CBC_ReedSolomonGF256* field); - virtual ~CBC_ReedSolomonEncoder(); - - void Encode(CFX_Int32Array* toEncode, int32_t ecBytes, int32_t& e); - virtual void Init(); -}; - -#endif // XFA_SRC_FXBARCODE_COMMON_REEDSOLOMON_BC_REEDSOLOMON_H_ diff --git a/xfa/src/fxbarcode/common/reedsolomon/BC_ReedSolomonDecoder.cpp b/xfa/src/fxbarcode/common/reedsolomon/BC_ReedSolomonDecoder.cpp deleted file mode 100644 index abdcaf0c88..0000000000 --- a/xfa/src/fxbarcode/common/reedsolomon/BC_ReedSolomonDecoder.cpp +++ /dev/null @@ -1,221 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2007 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/common/reedsolomon/BC_ReedSolomonDecoder.h" - -#include -#include - -#include "xfa/src/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256.h" -#include "xfa/src/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256Poly.h" - -CBC_ReedSolomonDecoder::CBC_ReedSolomonDecoder(CBC_ReedSolomonGF256* field) { - m_field = field; -} -CBC_ReedSolomonDecoder::~CBC_ReedSolomonDecoder() {} -void CBC_ReedSolomonDecoder::Decode(CFX_Int32Array* received, - int32_t twoS, - int32_t& e) { - CBC_ReedSolomonGF256Poly poly; - poly.Init(m_field, received, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - CFX_Int32Array syndromeCoefficients; - syndromeCoefficients.SetSize(twoS); - FX_BOOL dataMatrix = FALSE; - FX_BOOL noError = TRUE; - for (int32_t i = 0; i < twoS; i++) { - int32_t eval = poly.EvaluateAt(m_field->Exp(dataMatrix ? i + 1 : i)); - syndromeCoefficients[twoS - 1 - i] = eval; - if (eval != 0) { - noError = FALSE; - } - } - if (noError) { - return; - } - CBC_ReedSolomonGF256Poly syndrome; - syndrome.Init(m_field, &syndromeCoefficients, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - std::unique_ptr temp( - m_field->BuildMonomial(twoS, 1, e)); - BC_EXCEPTION_CHECK_ReturnVoid(e); - std::unique_ptr sigmaOmega( - RunEuclideanAlgorithm(temp.get(), &syndrome, twoS, e)); - BC_EXCEPTION_CHECK_ReturnVoid(e); - std::unique_ptr sigma( - (CBC_ReedSolomonGF256Poly*)(*sigmaOmega)[0]); - std::unique_ptr omega( - (CBC_ReedSolomonGF256Poly*)(*sigmaOmega)[1]); - std::unique_ptr errorLocations( - FindErrorLocations(sigma.get(), e)); - BC_EXCEPTION_CHECK_ReturnVoid(e); - std::unique_ptr errorMagnitudes( - FindErrorMagnitudes(omega.get(), errorLocations.get(), dataMatrix, e)); - BC_EXCEPTION_CHECK_ReturnVoid(e); - for (int32_t k = 0; k < errorLocations->GetSize(); k++) { - int32_t position = - received->GetSize() - 1 - m_field->Log((*errorLocations)[k], e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - if (position < 0) { - e = BCExceptionBadErrorLocation; - BC_EXCEPTION_CHECK_ReturnVoid(e); - } - (*received)[position] = CBC_ReedSolomonGF256::AddOrSubtract( - (*received)[position], (*errorMagnitudes)[k]); - } -} -CFX_PtrArray* CBC_ReedSolomonDecoder::RunEuclideanAlgorithm( - CBC_ReedSolomonGF256Poly* a, - CBC_ReedSolomonGF256Poly* b, - int32_t R, - int32_t& e) { - if (a->GetDegree() < b->GetDegree()) { - CBC_ReedSolomonGF256Poly* temp = a; - a = b; - b = temp; - } - std::unique_ptr rLast(a->Clone(e)); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - std::unique_ptr r(b->Clone(e)); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - std::unique_ptr sLast(m_field->GetOne()->Clone(e)); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - std::unique_ptr s(m_field->GetZero()->Clone(e)); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - std::unique_ptr tLast(m_field->GetZero()->Clone(e)); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - std::unique_ptr t(m_field->GetOne()->Clone(e)); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - while (r->GetDegree() >= R / 2) { - std::unique_ptr rLastLast = std::move(rLast); - std::unique_ptr sLastLast = std::move(sLast); - std::unique_ptr tLastlast = std::move(tLast); - rLast = std::move(r); - sLast = std::move(s); - tLast = std::move(t); - if (rLast->IsZero()) { - e = BCExceptionR_I_1IsZero; - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - } - r.reset(rLastLast->Clone(e)); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - std::unique_ptr q(m_field->GetZero()->Clone(e)); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - int32_t denominatorLeadingTerm = rLast->GetCoefficients(rLast->GetDegree()); - int32_t dltInverse = m_field->Inverse(denominatorLeadingTerm, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - while (r->GetDegree() >= rLast->GetDegree() && !(r->IsZero())) { - int32_t degreeDiff = r->GetDegree() - rLast->GetDegree(); - int32_t scale = - m_field->Multiply(r->GetCoefficients(r->GetDegree()), dltInverse); - std::unique_ptr build( - m_field->BuildMonomial(degreeDiff, scale, e)); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - q.reset(q->AddOrSubtract(build.get(), e)); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - std::unique_ptr multiply( - rLast->MultiplyByMonomial(degreeDiff, scale, e)); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - r.reset(r->AddOrSubtract(multiply.get(), e)); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - } - std::unique_ptr temp1( - q->Multiply(sLast.get(), e)); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - s.reset(temp1->AddOrSubtract(sLastLast.get(), e)); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - std::unique_ptr temp5( - q->Multiply(tLast.get(), e)); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - t.reset(temp5->AddOrSubtract(tLastlast.get(), e)); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - } - int32_t sigmaTildeAtZero = t->GetCoefficients(0); - if (sigmaTildeAtZero == 0) { - e = BCExceptionIsZero; - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - } - int32_t inverse = m_field->Inverse(sigmaTildeAtZero, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - std::unique_ptr sigma(t->Multiply(inverse, e)); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - std::unique_ptr omega(r->Multiply(inverse, e)); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - CFX_PtrArray* temp = new CFX_PtrArray; - temp->Add(sigma.release()); - temp->Add(omega.release()); - return temp; -} -CFX_Int32Array* CBC_ReedSolomonDecoder::FindErrorLocations( - CBC_ReedSolomonGF256Poly* errorLocator, - int32_t& e) { - int32_t numErrors = errorLocator->GetDegree(); - if (numErrors == 1) { - std::unique_ptr temp(new CFX_Int32Array); - temp->Add(errorLocator->GetCoefficients(1)); - return temp.release(); - } - CFX_Int32Array* tempT = new CFX_Int32Array; - tempT->SetSize(numErrors); - std::unique_ptr result(tempT); - int32_t ie = 0; - for (int32_t i = 1; i < 256 && ie < numErrors; i++) { - if (errorLocator->EvaluateAt(i) == 0) { - (*result)[ie] = m_field->Inverse(i, ie); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - ie++; - } - } - if (ie != numErrors) { - e = BCExceptionDegreeNotMatchRoots; - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - } - return result.release(); -} -CFX_Int32Array* CBC_ReedSolomonDecoder::FindErrorMagnitudes( - CBC_ReedSolomonGF256Poly* errorEvaluator, - CFX_Int32Array* errorLocations, - FX_BOOL dataMatrix, - int32_t& e) { - int32_t s = errorLocations->GetSize(); - CFX_Int32Array* temp = new CFX_Int32Array; - temp->SetSize(s); - std::unique_ptr result(temp); - for (int32_t i = 0; i < s; i++) { - int32_t xiInverse = m_field->Inverse(errorLocations->operator[](i), e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - int32_t denominator = 1; - for (int32_t j = 0; j < s; j++) { - if (i != j) { - denominator = m_field->Multiply( - denominator, CBC_ReedSolomonGF256::AddOrSubtract( - 1, m_field->Multiply(errorLocations->operator[](j), - xiInverse))); - } - } - int32_t temp = m_field->Inverse(denominator, temp); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - (*result)[i] = - m_field->Multiply(errorEvaluator->EvaluateAt(xiInverse), temp); - } - return result.release(); -} diff --git a/xfa/src/fxbarcode/common/reedsolomon/BC_ReedSolomonDecoder.h b/xfa/src/fxbarcode/common/reedsolomon/BC_ReedSolomonDecoder.h deleted file mode 100644 index 092033ca39..0000000000 --- a/xfa/src/fxbarcode/common/reedsolomon/BC_ReedSolomonDecoder.h +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_COMMON_REEDSOLOMON_BC_REEDSOLOMONDECODER_H_ -#define XFA_SRC_FXBARCODE_COMMON_REEDSOLOMON_BC_REEDSOLOMONDECODER_H_ - -#include "core/include/fxcrt/fx_basic.h" - -class CBC_ReedSolomonGF256; -class CBC_ReedSolomonGF256Poly; - -class CBC_ReedSolomonDecoder { - private: - CBC_ReedSolomonGF256* m_field; - - public: - CBC_ReedSolomonDecoder(CBC_ReedSolomonGF256* field); - virtual ~CBC_ReedSolomonDecoder(); - void Decode(CFX_Int32Array* received, int32_t twoS, int32_t& e); - CFX_PtrArray* RunEuclideanAlgorithm(CBC_ReedSolomonGF256Poly* a, - CBC_ReedSolomonGF256Poly* b, - int32_t R, - int32_t& e); - CFX_Int32Array* FindErrorLocations(CBC_ReedSolomonGF256Poly* errorLocator, - int32_t& e); - CFX_Int32Array* FindErrorMagnitudes(CBC_ReedSolomonGF256Poly* errorEvaluator, - CFX_Int32Array* errorLocations, - FX_BOOL dataMatrix, - int32_t& e); -}; - -#endif // XFA_SRC_FXBARCODE_COMMON_REEDSOLOMON_BC_REEDSOLOMONDECODER_H_ diff --git a/xfa/src/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256.cpp b/xfa/src/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256.cpp deleted file mode 100644 index e5002ce6ee..0000000000 --- a/xfa/src/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256.cpp +++ /dev/null @@ -1,124 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2007 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256.h" -#include "xfa/src/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256Poly.h" - -CBC_ReedSolomonGF256* CBC_ReedSolomonGF256::QRCodeFild = NULL; -CBC_ReedSolomonGF256* CBC_ReedSolomonGF256::DataMatrixField = NULL; -void CBC_ReedSolomonGF256::Initialize() { - QRCodeFild = new CBC_ReedSolomonGF256(0x011D); - QRCodeFild->Init(); - DataMatrixField = new CBC_ReedSolomonGF256(0x012D); - DataMatrixField->Init(); -} -void CBC_ReedSolomonGF256::Finalize() { - if (QRCodeFild) { - delete QRCodeFild; - } - QRCodeFild = NULL; - if (DataMatrixField) { - delete DataMatrixField; - } - DataMatrixField = NULL; -} -CBC_ReedSolomonGF256::CBC_ReedSolomonGF256(int32_t primitive) { - int32_t x = 1; - for (int32_t j = 0; j < 256; j++) { - m_expTable[j] = x; - x <<= 1; - if (x >= 0x100) { - x ^= primitive; - } - } - for (int32_t i = 0; i < 255; i++) { - m_logTable[m_expTable[i]] = i; - } - m_logTable[0] = 0; -} -void CBC_ReedSolomonGF256::Init() { - m_zero = new CBC_ReedSolomonGF256Poly(this, 0); - m_one = new CBC_ReedSolomonGF256Poly(this, 1); -} -CBC_ReedSolomonGF256::~CBC_ReedSolomonGF256() { - delete m_zero; - delete m_one; -} -CBC_ReedSolomonGF256Poly* CBC_ReedSolomonGF256::GetZero() { - return m_zero; -} -CBC_ReedSolomonGF256Poly* CBC_ReedSolomonGF256::GetOne() { - return m_one; -} -CBC_ReedSolomonGF256Poly* CBC_ReedSolomonGF256::BuildMonomial( - int32_t degree, - int32_t coefficient, - int32_t& e) { - if (degree < 0) { - e = BCExceptionDegreeIsNegative; - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - } - if (coefficient == 0) { - CBC_ReedSolomonGF256Poly* temp = m_zero->Clone(e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - return temp; - } - CFX_Int32Array coefficients; - coefficients.SetSize(degree + 1); - coefficients[0] = coefficient; - CBC_ReedSolomonGF256Poly* temp = new CBC_ReedSolomonGF256Poly(); - temp->Init(this, &coefficients, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - return temp; -} -int32_t CBC_ReedSolomonGF256::AddOrSubtract(int32_t a, int32_t b) { - return a ^ b; -} -int32_t CBC_ReedSolomonGF256::Exp(int32_t a) { - return m_expTable[a]; -} -int32_t CBC_ReedSolomonGF256::Log(int32_t a, int32_t& e) { - if (a == 0) { - e = BCExceptionAIsZero; - BC_EXCEPTION_CHECK_ReturnValue(e, 0); - } - return m_logTable[a]; -} -int32_t CBC_ReedSolomonGF256::Inverse(int32_t a, int32_t& e) { - if (a == 0) { - e = BCExceptionAIsZero; - BC_EXCEPTION_CHECK_ReturnValue(e, 0); - } - return m_expTable[255 - m_logTable[a]]; -} -int32_t CBC_ReedSolomonGF256::Multiply(int32_t a, int32_t b) { - if (a == 0 || b == 0) { - return 0; - } - if (a == 1) { - return b; - } - if (b == 1) { - return a; - } - return m_expTable[(m_logTable[a] + m_logTable[b]) % 255]; -} diff --git a/xfa/src/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256.h b/xfa/src/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256.h deleted file mode 100644 index b351a03079..0000000000 --- a/xfa/src/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256.h +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_COMMON_REEDSOLOMON_BC_REEDSOLOMONGF256_H_ -#define XFA_SRC_FXBARCODE_COMMON_REEDSOLOMON_BC_REEDSOLOMONGF256_H_ - -#include "core/include/fxcrt/fx_basic.h" -#include "xfa/src/fxbarcode/utils.h" - -class CBC_ReedSolomonGF256Poly; -class CBC_ReedSolomonGF256 { - public: - static void Initialize(); - static void Finalize(); - static CBC_ReedSolomonGF256* QRCodeFild; - static CBC_ReedSolomonGF256* DataMatrixField; - CBC_ReedSolomonGF256(int32_t primitive); - virtual ~CBC_ReedSolomonGF256(); - CBC_ReedSolomonGF256Poly* GetZero(); - CBC_ReedSolomonGF256Poly* GetOne(); - CBC_ReedSolomonGF256Poly* BuildMonomial(int32_t degree, - int32_t coefficient, - int32_t& e); - static int32_t AddOrSubtract(int32_t a, int32_t b); - int32_t Exp(int32_t a); - int32_t Log(int32_t a, int32_t& e); - int32_t Inverse(int32_t a, int32_t& e); - int32_t Multiply(int32_t a, int32_t b); - virtual void Init(); - - private: - int32_t m_expTable[256]; - int32_t m_logTable[256]; - CBC_ReedSolomonGF256Poly* m_zero; - CBC_ReedSolomonGF256Poly* m_one; -}; - -#endif // XFA_SRC_FXBARCODE_COMMON_REEDSOLOMON_BC_REEDSOLOMONGF256_H_ diff --git a/xfa/src/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256Poly.cpp b/xfa/src/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256Poly.cpp deleted file mode 100644 index f138009ffa..0000000000 --- a/xfa/src/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256Poly.cpp +++ /dev/null @@ -1,254 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2007 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256Poly.h" - -#include - -#include "xfa/src/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256.h" - -CBC_ReedSolomonGF256Poly::CBC_ReedSolomonGF256Poly(CBC_ReedSolomonGF256* field, - int32_t coefficients) { - if (field == NULL) { - return; - } - m_field = field; - m_coefficients.Add(coefficients); -} -CBC_ReedSolomonGF256Poly::CBC_ReedSolomonGF256Poly() { - m_field = NULL; -} -void CBC_ReedSolomonGF256Poly::Init(CBC_ReedSolomonGF256* field, - CFX_Int32Array* coefficients, - int32_t& e) { - if (coefficients == NULL || coefficients->GetSize() == 0) { - e = BCExceptionCoefficientsSizeIsNull; - BC_EXCEPTION_CHECK_ReturnVoid(e); - } - m_field = field; - int32_t coefficientsLength = coefficients->GetSize(); - if ((coefficientsLength > 1 && (*coefficients)[0] == 0)) { - int32_t firstNonZero = 1; - while ((firstNonZero < coefficientsLength) && - ((*coefficients)[firstNonZero] == 0)) { - firstNonZero++; - } - if (firstNonZero == coefficientsLength) { - m_coefficients.Copy(*(m_field->GetZero()->GetCoefficients())); - } else { - m_coefficients.SetSize(coefficientsLength - firstNonZero); - for (int32_t i = firstNonZero, j = 0; i < coefficientsLength; i++, j++) { - m_coefficients[j] = coefficients->operator[](i); - } - } - } else { - m_coefficients.Copy(*coefficients); - } -} -CFX_Int32Array* CBC_ReedSolomonGF256Poly::GetCoefficients() { - return &m_coefficients; -} -int32_t CBC_ReedSolomonGF256Poly::GetDegree() { - return m_coefficients.GetSize() - 1; -} -FX_BOOL CBC_ReedSolomonGF256Poly::IsZero() { - return m_coefficients[0] == 0; -} -int32_t CBC_ReedSolomonGF256Poly::GetCoefficients(int32_t degree) { - return m_coefficients[m_coefficients.GetSize() - 1 - degree]; -} -int32_t CBC_ReedSolomonGF256Poly::EvaluateAt(int32_t a) { - if (a == 0) { - return GetCoefficients(0); - } - int32_t size = m_coefficients.GetSize(); - if (a == 1) { - int32_t result = 0; - for (int32_t i = 0; i < size; i++) { - result = CBC_ReedSolomonGF256::AddOrSubtract(result, m_coefficients[i]); - } - return result; - } - int32_t result = m_coefficients[0]; - for (int32_t j = 1; j < size; j++) { - result = CBC_ReedSolomonGF256::AddOrSubtract(m_field->Multiply(a, result), - m_coefficients[j]); - } - return result; -} -CBC_ReedSolomonGF256Poly* CBC_ReedSolomonGF256Poly::Clone(int32_t& e) { - CBC_ReedSolomonGF256Poly* temp = new CBC_ReedSolomonGF256Poly(); - temp->Init(m_field, &m_coefficients, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - return temp; -} -CBC_ReedSolomonGF256Poly* CBC_ReedSolomonGF256Poly::AddOrSubtract( - CBC_ReedSolomonGF256Poly* other, - int32_t& e) { - if (IsZero()) { - return other->Clone(e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - } - if (other->IsZero()) { - return Clone(e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - } - CFX_Int32Array smallerCoefficients; - smallerCoefficients.Copy(m_coefficients); - CFX_Int32Array largerCoefficients; - largerCoefficients.Copy(*(other->GetCoefficients())); - if (smallerCoefficients.GetSize() > largerCoefficients.GetSize()) { - CFX_Int32Array temp; - temp.Copy(smallerCoefficients); - smallerCoefficients.Copy(largerCoefficients); - largerCoefficients.Copy(temp); - } - CFX_Int32Array sumDiff; - sumDiff.SetSize(largerCoefficients.GetSize()); - int32_t lengthDiff = - largerCoefficients.GetSize() - smallerCoefficients.GetSize(); - for (int32_t i = 0; i < lengthDiff; i++) { - sumDiff[i] = largerCoefficients[i]; - } - for (int32_t j = lengthDiff; j < largerCoefficients.GetSize(); j++) { - sumDiff[j] = (CBC_ReedSolomonGF256::AddOrSubtract( - smallerCoefficients[j - lengthDiff], largerCoefficients[j])); - } - CBC_ReedSolomonGF256Poly* temp = new CBC_ReedSolomonGF256Poly(); - temp->Init(m_field, &sumDiff, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - return temp; -} -CBC_ReedSolomonGF256Poly* CBC_ReedSolomonGF256Poly::Multiply( - CBC_ReedSolomonGF256Poly* other, - int32_t& e) { - if (IsZero() || other->IsZero()) { - CBC_ReedSolomonGF256Poly* temp = m_field->GetZero()->Clone(e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - return temp; - } - CFX_Int32Array aCoefficients; - aCoefficients.Copy(m_coefficients); - int32_t aLength = m_coefficients.GetSize(); - CFX_Int32Array bCoefficients; - bCoefficients.Copy(*(other->GetCoefficients())); - int32_t bLength = other->GetCoefficients()->GetSize(); - CFX_Int32Array product; - product.SetSize(aLength + bLength - 1); - for (int32_t i = 0; i < aLength; i++) { - int32_t aCoeff = m_coefficients[i]; - for (int32_t j = 0; j < bLength; j++) { - product[i + j] = CBC_ReedSolomonGF256::AddOrSubtract( - product[i + j], - m_field->Multiply(aCoeff, other->GetCoefficients()->operator[](j))); - } - } - CBC_ReedSolomonGF256Poly* temp = new CBC_ReedSolomonGF256Poly(); - temp->Init(m_field, &product, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - return temp; -} -CBC_ReedSolomonGF256Poly* CBC_ReedSolomonGF256Poly::Multiply(int32_t scalar, - int32_t& e) { - if (scalar == 0) { - CBC_ReedSolomonGF256Poly* temp = m_field->GetZero()->Clone(e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - return temp; - } - if (scalar == 1) { - return Clone(e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - } - int32_t size = m_coefficients.GetSize(); - CFX_Int32Array product; - product.SetSize(size); - for (int32_t i = 0; i < size; i++) { - product[i] = m_field->Multiply(m_coefficients[i], scalar); - } - CBC_ReedSolomonGF256Poly* temp = new CBC_ReedSolomonGF256Poly(); - temp->Init(m_field, &product, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - return temp; -} -CBC_ReedSolomonGF256Poly* CBC_ReedSolomonGF256Poly::MultiplyByMonomial( - int32_t degree, - int32_t coefficient, - int32_t& e) { - if (degree < 0) { - e = BCExceptionDegreeIsNegative; - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - } - if (coefficient == 0) { - CBC_ReedSolomonGF256Poly* temp = m_field->GetZero()->Clone(e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - return temp; - } - int32_t size = m_coefficients.GetSize(); - CFX_Int32Array product; - product.SetSize(size + degree); - for (int32_t i = 0; i < size; i++) { - product[i] = (m_field->Multiply(m_coefficients[i], coefficient)); - } - CBC_ReedSolomonGF256Poly* temp = new CBC_ReedSolomonGF256Poly(); - temp->Init(m_field, &product, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - return temp; -} -CFX_PtrArray* CBC_ReedSolomonGF256Poly::Divide(CBC_ReedSolomonGF256Poly* other, - int32_t& e) { - if (other->IsZero()) { - e = BCExceptionDivideByZero; - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - } - std::unique_ptr quotient( - m_field->GetZero()->Clone(e)); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - std::unique_ptr remainder(Clone(e)); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - int32_t denominatorLeadingTerm = other->GetCoefficients(other->GetDegree()); - int32_t inverseDenominatorLeadingTeam = - m_field->Inverse(denominatorLeadingTerm, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - while (remainder->GetDegree() >= other->GetDegree() && !remainder->IsZero()) { - int32_t degreeDifference = remainder->GetDegree() - other->GetDegree(); - int32_t scale = - m_field->Multiply(remainder->GetCoefficients((remainder->GetDegree())), - inverseDenominatorLeadingTeam); - std::unique_ptr term( - other->MultiplyByMonomial(degreeDifference, scale, e)); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - std::unique_ptr iteratorQuotient( - m_field->BuildMonomial(degreeDifference, scale, e)); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - quotient.reset(quotient->AddOrSubtract(iteratorQuotient.get(), e)); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - remainder.reset(remainder->AddOrSubtract(term.get(), e)); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - } - CFX_PtrArray* tempPtrA = new CFX_PtrArray; - tempPtrA->Add(quotient.release()); - tempPtrA->Add(remainder.release()); - return tempPtrA; -} -CBC_ReedSolomonGF256Poly::~CBC_ReedSolomonGF256Poly() { - m_coefficients.RemoveAll(); -} diff --git a/xfa/src/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256Poly.h b/xfa/src/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256Poly.h deleted file mode 100644 index 71e4a09dd3..0000000000 --- a/xfa/src/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256Poly.h +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_COMMON_REEDSOLOMON_BC_REEDSOLOMONGF256POLY_H_ -#define XFA_SRC_FXBARCODE_COMMON_REEDSOLOMON_BC_REEDSOLOMONGF256POLY_H_ - -#include "core/include/fxcrt/fx_basic.h" - -class CBC_ReedSolomonGF256; - -class CBC_ReedSolomonGF256Poly { - public: - CBC_ReedSolomonGF256Poly(CBC_ReedSolomonGF256* field, int32_t coefficients); - CBC_ReedSolomonGF256Poly(); - virtual ~CBC_ReedSolomonGF256Poly(); - int32_t GetCoefficients(int32_t degree); - CFX_Int32Array* GetCoefficients(); - int32_t GetDegree(); - FX_BOOL IsZero(); - int32_t EvaluateAt(int32_t a); - CBC_ReedSolomonGF256Poly* AddOrSubtract(CBC_ReedSolomonGF256Poly* other, - int32_t& e); - CBC_ReedSolomonGF256Poly* Multiply(CBC_ReedSolomonGF256Poly* other, - int32_t& e); - CBC_ReedSolomonGF256Poly* Multiply(int32_t scalar, int32_t& e); - CBC_ReedSolomonGF256Poly* MultiplyByMonomial(int32_t degree, - int32_t coefficient, - int32_t& e); - CFX_PtrArray* Divide(CBC_ReedSolomonGF256Poly* other, int32_t& e); - CBC_ReedSolomonGF256Poly* Clone(int32_t& e); - virtual void Init(CBC_ReedSolomonGF256* field, - CFX_Int32Array* coefficients, - int32_t& e); - - private: - CBC_ReedSolomonGF256* m_field; - CFX_Int32Array m_coefficients; -}; - -#endif // XFA_SRC_FXBARCODE_COMMON_REEDSOLOMON_BC_REEDSOLOMONGF256POLY_H_ diff --git a/xfa/src/fxbarcode/datamatrix/BC_ASCIIEncoder.cpp b/xfa/src/fxbarcode/datamatrix/BC_ASCIIEncoder.cpp deleted file mode 100644 index 6c4633e605..0000000000 --- a/xfa/src/fxbarcode/datamatrix/BC_ASCIIEncoder.cpp +++ /dev/null @@ -1,98 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2006-2007 Jeremias Maerki. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/BC_Dimension.h" -#include "xfa/src/fxbarcode/datamatrix/BC_ASCIIEncoder.h" -#include "xfa/src/fxbarcode/datamatrix/BC_Encoder.h" -#include "xfa/src/fxbarcode/datamatrix/BC_EncoderContext.h" -#include "xfa/src/fxbarcode/datamatrix/BC_HighLevelEncoder.h" -#include "xfa/src/fxbarcode/datamatrix/BC_SymbolInfo.h" -#include "xfa/src/fxbarcode/datamatrix/BC_SymbolShapeHint.h" - -CBC_ASCIIEncoder::CBC_ASCIIEncoder() {} -CBC_ASCIIEncoder::~CBC_ASCIIEncoder() {} -int32_t CBC_ASCIIEncoder::getEncodingMode() { - return ASCII_ENCODATION; -} -void CBC_ASCIIEncoder::Encode(CBC_EncoderContext& context, int32_t& e) { - int32_t n = CBC_HighLevelEncoder::determineConsecutiveDigitCount( - context.m_msg, context.m_pos); - if (n >= 2) { - FX_WCHAR code = - encodeASCIIDigits(context.m_msg.GetAt(context.m_pos), - context.m_msg.GetAt(context.m_pos + 1), e); - if (e != BCExceptionNO) { - return; - } - context.writeCodeword(code); - context.m_pos += 2; - } else { - FX_WCHAR c = context.getCurrentChar(); - int32_t newMode = CBC_HighLevelEncoder::lookAheadTest( - context.m_msg, context.m_pos, getEncodingMode()); - if (newMode != getEncodingMode()) { - switch (newMode) { - case BASE256_ENCODATION: - context.writeCodeword(CBC_HighLevelEncoder::LATCH_TO_BASE256); - context.signalEncoderChange(BASE256_ENCODATION); - return; - case C40_ENCODATION: - context.writeCodeword(CBC_HighLevelEncoder::LATCH_TO_C40); - context.signalEncoderChange(C40_ENCODATION); - return; - case X12_ENCODATION: - context.writeCodeword(CBC_HighLevelEncoder::LATCH_TO_ANSIX12); - context.signalEncoderChange(X12_ENCODATION); - break; - case TEXT_ENCODATION: - context.writeCodeword(CBC_HighLevelEncoder::LATCH_TO_TEXT); - context.signalEncoderChange(TEXT_ENCODATION); - break; - case EDIFACT_ENCODATION: - context.writeCodeword(CBC_HighLevelEncoder::LATCH_TO_EDIFACT); - context.signalEncoderChange(EDIFACT_ENCODATION); - break; - default: - e = BCExceptionIllegalStateIllegalMode; - return; - } - } else if (CBC_HighLevelEncoder::isExtendedASCII(c)) { - context.writeCodeword(CBC_HighLevelEncoder::UPPER_SHIFT); - context.writeCodeword((FX_WCHAR)(c - 128 + 1)); - context.m_pos++; - } else { - context.writeCodeword((FX_WCHAR)(c + 1)); - context.m_pos++; - } - } -} -FX_WCHAR CBC_ASCIIEncoder::encodeASCIIDigits(FX_WCHAR digit1, - FX_WCHAR digit2, - int32_t& e) { - if (CBC_HighLevelEncoder::isDigit(digit1) && - CBC_HighLevelEncoder::isDigit(digit2)) { - int32_t num = (digit1 - 48) * 10 + (digit2 - 48); - return (FX_WCHAR)(num + 130); - } - e = BCExceptionIllegalArgumentNotGigits; - return 0; -} diff --git a/xfa/src/fxbarcode/datamatrix/BC_ASCIIEncoder.h b/xfa/src/fxbarcode/datamatrix/BC_ASCIIEncoder.h deleted file mode 100644 index 932b353ad4..0000000000 --- a/xfa/src/fxbarcode/datamatrix/BC_ASCIIEncoder.h +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_DATAMATRIX_BC_ASCIIENCODER_H_ -#define XFA_SRC_FXBARCODE_DATAMATRIX_BC_ASCIIENCODER_H_ - -#include "xfa/src/fxbarcode/datamatrix/BC_Encoder.h" - -class CBC_EncoderContext; - -class CBC_ASCIIEncoder : public CBC_Encoder { - public: - CBC_ASCIIEncoder(); - virtual ~CBC_ASCIIEncoder(); - int32_t getEncodingMode(); - void Encode(CBC_EncoderContext& context, int32_t& e); - - private: - static FX_WCHAR encodeASCIIDigits(FX_WCHAR digit1, - FX_WCHAR digit2, - int32_t& e); -}; - -#endif // XFA_SRC_FXBARCODE_DATAMATRIX_BC_ASCIIENCODER_H_ diff --git a/xfa/src/fxbarcode/datamatrix/BC_Base256Encoder.cpp b/xfa/src/fxbarcode/datamatrix/BC_Base256Encoder.cpp deleted file mode 100644 index c719fb9e4f..0000000000 --- a/xfa/src/fxbarcode/datamatrix/BC_Base256Encoder.cpp +++ /dev/null @@ -1,87 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2006-2007 Jeremias Maerki. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/BC_Dimension.h" -#include "xfa/src/fxbarcode/datamatrix/BC_Base256Encoder.h" -#include "xfa/src/fxbarcode/datamatrix/BC_Encoder.h" -#include "xfa/src/fxbarcode/datamatrix/BC_EncoderContext.h" -#include "xfa/src/fxbarcode/datamatrix/BC_HighLevelEncoder.h" -#include "xfa/src/fxbarcode/datamatrix/BC_SymbolInfo.h" -#include "xfa/src/fxbarcode/datamatrix/BC_SymbolShapeHint.h" - -CBC_Base256Encoder::CBC_Base256Encoder() {} -CBC_Base256Encoder::~CBC_Base256Encoder() {} -int32_t CBC_Base256Encoder::getEncodingMode() { - return BASE256_ENCODATION; -} -void CBC_Base256Encoder::Encode(CBC_EncoderContext& context, int32_t& e) { - CFX_WideString buffer; - buffer += (FX_WCHAR)'\0'; - while (context.hasMoreCharacters()) { - FX_WCHAR c = context.getCurrentChar(); - buffer += c; - context.m_pos++; - int32_t newMode = CBC_HighLevelEncoder::lookAheadTest( - context.m_msg, context.m_pos, getEncodingMode()); - if (newMode != getEncodingMode()) { - context.signalEncoderChange(newMode); - break; - } - } - int32_t dataCount = buffer.GetLength() - 1; - FX_CHAR buf[128]; - FXSYS_itoa(dataCount, buf, 10); - buffer.SetAt(0, FX_WCHAR(*buf) - '0'); - int32_t lengthFieldSize = 1; - int32_t currentSize = - context.getCodewordCount() + dataCount + lengthFieldSize; - context.updateSymbolInfo(currentSize, e); - if (e != BCExceptionNO) { - return; - } - FX_BOOL mustPad = (context.m_symbolInfo->m_dataCapacity - currentSize) > 0; - if (context.hasMoreCharacters() || mustPad) { - if (dataCount <= 249) { - buffer.SetAt(0, (FX_WCHAR)dataCount); - } else if (dataCount > 249 && dataCount <= 1555) { - buffer.SetAt(0, (FX_WCHAR)((dataCount / 250) + 249)); - buffer.Insert(1, (FX_WCHAR)(dataCount % 250)); - } else { - e = BCExceptionIllegalStateMessageLengthInvalid; - return; - } - } - for (int32_t i = 0, c = buffer.GetLength(); i < c; i++) { - context.writeCodeword( - randomize255State(buffer.GetAt(i), context.getCodewordCount() + 1)); - } -} -FX_WCHAR CBC_Base256Encoder::randomize255State(FX_WCHAR ch, - int32_t codewordPosition) { - int32_t pseudoRandom = ((149 * codewordPosition) % 255) + 1; - int32_t tempVariable = ch + pseudoRandom; - if (tempVariable <= 255) { - return (FX_WCHAR)tempVariable; - } else { - return (FX_WCHAR)(tempVariable - 256); - } -} diff --git a/xfa/src/fxbarcode/datamatrix/BC_Base256Encoder.h b/xfa/src/fxbarcode/datamatrix/BC_Base256Encoder.h deleted file mode 100644 index c7aa18c2c8..0000000000 --- a/xfa/src/fxbarcode/datamatrix/BC_Base256Encoder.h +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_DATAMATRIX_BC_BASE256ENCODER_H_ -#define XFA_SRC_FXBARCODE_DATAMATRIX_BC_BASE256ENCODER_H_ - -#include "xfa/src/fxbarcode/datamatrix/BC_Encoder.h" - -class CBC_Base256Encoder : public CBC_Encoder { - public: - CBC_Base256Encoder(); - virtual ~CBC_Base256Encoder(); - int32_t getEncodingMode(); - void Encode(CBC_EncoderContext& context, int32_t& e); - - private: - static FX_WCHAR randomize255State(FX_WCHAR ch, int32_t codewordPosition); -}; - -#endif // XFA_SRC_FXBARCODE_DATAMATRIX_BC_BASE256ENCODER_H_ diff --git a/xfa/src/fxbarcode/datamatrix/BC_C40Encoder.cpp b/xfa/src/fxbarcode/datamatrix/BC_C40Encoder.cpp deleted file mode 100644 index 01ececb4b7..0000000000 --- a/xfa/src/fxbarcode/datamatrix/BC_C40Encoder.cpp +++ /dev/null @@ -1,198 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2006-2007 Jeremias Maerki. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/BC_Dimension.h" -#include "xfa/src/fxbarcode/common/BC_CommonBitMatrix.h" -#include "xfa/src/fxbarcode/datamatrix/BC_C40Encoder.h" -#include "xfa/src/fxbarcode/datamatrix/BC_Encoder.h" -#include "xfa/src/fxbarcode/datamatrix/BC_EncoderContext.h" -#include "xfa/src/fxbarcode/datamatrix/BC_HighLevelEncoder.h" -#include "xfa/src/fxbarcode/datamatrix/BC_SymbolInfo.h" -#include "xfa/src/fxbarcode/datamatrix/BC_SymbolShapeHint.h" - -CBC_C40Encoder::CBC_C40Encoder() {} -CBC_C40Encoder::~CBC_C40Encoder() {} -int32_t CBC_C40Encoder::getEncodingMode() { - return C40_ENCODATION; -} -void CBC_C40Encoder::Encode(CBC_EncoderContext& context, int32_t& e) { - CFX_WideString buffer; - while (context.hasMoreCharacters()) { - FX_WCHAR c = context.getCurrentChar(); - context.m_pos++; - int32_t lastCharSize = encodeChar(c, buffer, e); - if (e != BCExceptionNO) { - return; - } - int32_t unwritten = (buffer.GetLength() / 3) * 2; - int32_t curCodewordCount = context.getCodewordCount() + unwritten; - context.updateSymbolInfo(curCodewordCount, e); - if (e != BCExceptionNO) { - return; - } - int32_t available = context.m_symbolInfo->m_dataCapacity - curCodewordCount; - if (!context.hasMoreCharacters()) { - CFX_WideString removed; - if ((buffer.GetLength() % 3) == 2) { - if (available < 2 || available > 2) { - lastCharSize = - backtrackOneCharacter(context, buffer, removed, lastCharSize, e); - if (e != BCExceptionNO) { - return; - } - } - } - while ((buffer.GetLength() % 3) == 1 && - ((lastCharSize <= 3 && available != 1) || lastCharSize > 3)) { - lastCharSize = - backtrackOneCharacter(context, buffer, removed, lastCharSize, e); - if (e != BCExceptionNO) { - return; - } - } - break; - } - int32_t count = buffer.GetLength(); - if ((count % 3) == 0) { - int32_t newMode = CBC_HighLevelEncoder::lookAheadTest( - context.m_msg, context.m_pos, getEncodingMode()); - if (newMode != getEncodingMode()) { - context.signalEncoderChange(newMode); - break; - } - } - } - handleEOD(context, buffer, e); -} -void CBC_C40Encoder::writeNextTriplet(CBC_EncoderContext& context, - CFX_WideString& buffer) { - context.writeCodewords(encodeToCodewords(buffer, 0)); - buffer.Delete(0, 3); -} -void CBC_C40Encoder::handleEOD(CBC_EncoderContext& context, - CFX_WideString& buffer, - int32_t& e) { - int32_t unwritten = (buffer.GetLength() / 3) * 2; - int32_t rest = buffer.GetLength() % 3; - int32_t curCodewordCount = context.getCodewordCount() + unwritten; - context.updateSymbolInfo(curCodewordCount, e); - if (e != BCExceptionNO) { - return; - } - int32_t available = context.m_symbolInfo->m_dataCapacity - curCodewordCount; - if (rest == 2) { - buffer += (FX_WCHAR)'\0'; - while (buffer.GetLength() >= 3) { - writeNextTriplet(context, buffer); - } - if (context.hasMoreCharacters()) { - context.writeCodeword(CBC_HighLevelEncoder::C40_UNLATCH); - } - } else if (available == 1 && rest == 1) { - while (buffer.GetLength() >= 3) { - writeNextTriplet(context, buffer); - } - if (context.hasMoreCharacters()) { - context.writeCodeword(CBC_HighLevelEncoder::C40_UNLATCH); - } - context.m_pos--; - } else if (rest == 0) { - while (buffer.GetLength() >= 3) { - writeNextTriplet(context, buffer); - } - if (available > 0 || context.hasMoreCharacters()) { - context.writeCodeword(CBC_HighLevelEncoder::C40_UNLATCH); - } - } else { - e = BCExceptionIllegalStateUnexpectedCase; - return; - } - context.signalEncoderChange(ASCII_ENCODATION); -} -int32_t CBC_C40Encoder::encodeChar(FX_WCHAR c, CFX_WideString& sb, int32_t& e) { - if (c == ' ') { - sb += (FX_WCHAR)'\3'; - return 1; - } else if ((c >= '0') && (c <= '9')) { - sb += (FX_WCHAR)(c - 48 + 4); - return 1; - } else if ((c >= 'A') && (c <= 'Z')) { - sb += (FX_WCHAR)(c - 65 + 14); - return 1; - } else if (c <= 0x1f) { - sb += (FX_WCHAR)'\0'; - sb += c; - return 2; - } else if ((c >= '!') && (c <= '/')) { - sb += (FX_WCHAR)'\1'; - sb += (FX_WCHAR)(c - 33); - return 2; - } else if ((c >= ':') && (c <= '@')) { - sb += (FX_WCHAR)'\1'; - sb += (FX_WCHAR)(c - 58 + 15); - return 2; - } else if ((c >= '[') && (c <= '_')) { - sb += (FX_WCHAR)'\1'; - sb += (FX_WCHAR)(c - 91 + 22); - return 2; - } else if ((c >= 60) && (c <= 0x7f)) { - sb += (FX_WCHAR)'\2'; - sb += (FX_WCHAR)(c - 96); - return 2; - } else if (c >= 80) { - sb += (FX_WCHAR)'\1'; - sb += (FX_WCHAR)0x001e; - int32_t len = 2; - len += encodeChar((c - 128), sb, e); - BC_EXCEPTION_CHECK_ReturnValue(e, 0); - return len; - } else { - e = BCExceptionIllegalArgument; - return 0; - } -} -int32_t CBC_C40Encoder::backtrackOneCharacter(CBC_EncoderContext& context, - CFX_WideString& buffer, - CFX_WideString& removed, - int32_t lastCharSize, - int32_t& e) { - int32_t count = buffer.GetLength(); - buffer.Delete(count - lastCharSize, count); - context.m_pos--; - FX_WCHAR c = context.getCurrentChar(); - lastCharSize = encodeChar(c, removed, e); - BC_EXCEPTION_CHECK_ReturnValue(e, -1); - context.resetSymbolInfo(); - return lastCharSize; -} -CFX_WideString CBC_C40Encoder::encodeToCodewords(CFX_WideString sb, - int32_t startPos) { - FX_WCHAR c1 = sb.GetAt(startPos); - FX_WCHAR c2 = sb.GetAt(startPos + 1); - FX_WCHAR c3 = sb.GetAt(startPos + 2); - int32_t v = (1600 * c1) + (40 * c2) + c3 + 1; - FX_WCHAR cw1 = (FX_WCHAR)(v / 256); - FX_WCHAR cw2 = (FX_WCHAR)(v % 256); - CFX_WideString b1(cw1); - CFX_WideString b2(cw2); - return b1 + b2; -} diff --git a/xfa/src/fxbarcode/datamatrix/BC_C40Encoder.h b/xfa/src/fxbarcode/datamatrix/BC_C40Encoder.h deleted file mode 100644 index ebc67efb17..0000000000 --- a/xfa/src/fxbarcode/datamatrix/BC_C40Encoder.h +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_DATAMATRIX_BC_C40ENCODER_H_ -#define XFA_SRC_FXBARCODE_DATAMATRIX_BC_C40ENCODER_H_ - -#include "xfa/src/fxbarcode/datamatrix/BC_Encoder.h" - -class CBC_C40Encoder : public CBC_Encoder { - public: - CBC_C40Encoder(); - virtual ~CBC_C40Encoder(); - virtual int32_t getEncodingMode(); - virtual void Encode(CBC_EncoderContext& context, int32_t& e); - static void writeNextTriplet(CBC_EncoderContext& context, - CFX_WideString& buffer); - virtual void handleEOD(CBC_EncoderContext& context, - CFX_WideString& buffer, - int32_t& e); - virtual int32_t encodeChar(FX_WCHAR c, CFX_WideString& sb, int32_t& e); - - private: - int32_t backtrackOneCharacter(CBC_EncoderContext& context, - CFX_WideString& buffer, - CFX_WideString& removed, - int32_t lastCharSize, - int32_t& e); - static CFX_WideString encodeToCodewords(CFX_WideString sb, int32_t startPos); -}; - -#endif // XFA_SRC_FXBARCODE_DATAMATRIX_BC_C40ENCODER_H_ diff --git a/xfa/src/fxbarcode/datamatrix/BC_DataMatrixBitMatrixParser.cpp b/xfa/src/fxbarcode/datamatrix/BC_DataMatrixBitMatrixParser.cpp deleted file mode 100644 index 9315b167e7..0000000000 --- a/xfa/src/fxbarcode/datamatrix/BC_DataMatrixBitMatrixParser.cpp +++ /dev/null @@ -1,378 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2007 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/datamatrix/BC_DataMatrixBitMatrixParser.h" - -#include - -#include "xfa/src/fxbarcode/common/BC_CommonBitMatrix.h" -#include "xfa/src/fxbarcode/datamatrix/BC_DataMatrixVersion.h" -#include "xfa/src/fxbarcode/utils.h" - -CBC_DataMatrixBitMatrixParser::CBC_DataMatrixBitMatrixParser() { - m_mappingBitMatrix = NULL; - m_version = NULL; - m_readMappingMatrix = NULL; -} -void CBC_DataMatrixBitMatrixParser::Init(CBC_CommonBitMatrix* bitMatrix, - int32_t& e) { - int32_t dimension = bitMatrix->GetHeight(); - if (dimension < 8 || dimension > 144 || (dimension & 0x01) != 0) { - e = BCExceptionFormatException; - return; - } - m_version = ReadVersion(bitMatrix, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - m_mappingBitMatrix = ExtractDataRegion(bitMatrix, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - m_readMappingMatrix = new CBC_CommonBitMatrix(); - m_readMappingMatrix->Init(m_mappingBitMatrix->GetWidth(), - m_mappingBitMatrix->GetHeight()); -} -CBC_DataMatrixBitMatrixParser::~CBC_DataMatrixBitMatrixParser() { - delete m_mappingBitMatrix; - delete m_readMappingMatrix; -} -CBC_DataMatrixVersion* CBC_DataMatrixBitMatrixParser::GetVersion() { - return m_version; -} -CBC_DataMatrixVersion* CBC_DataMatrixBitMatrixParser::ReadVersion( - CBC_CommonBitMatrix* bitMatrix, - int32_t& e) { - int32_t rows = bitMatrix->GetHeight(); - int32_t columns = bitMatrix->GetWidth(); - CBC_DataMatrixVersion* temp = - CBC_DataMatrixVersion::GetVersionForDimensions(rows, columns, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - return temp; -} -CFX_ByteArray* CBC_DataMatrixBitMatrixParser::ReadCodewords(int32_t& e) { - std::unique_ptr result(new CFX_ByteArray()); - result->SetSize(m_version->GetTotalCodewords()); - int32_t resultOffset = 0; - int32_t row = 4; - int32_t column = 0; - int32_t numRows = m_mappingBitMatrix->GetHeight(); - int32_t numColumns = m_mappingBitMatrix->GetWidth(); - FX_BOOL corner1Read = FALSE; - FX_BOOL corner2Read = FALSE; - FX_BOOL corner3Read = FALSE; - FX_BOOL corner4Read = FALSE; - do { - if ((row == numRows) && (column == 0) && !corner1Read) { - (*result)[resultOffset++] = (uint8_t)ReadCorner1(numRows, numColumns); - row -= 2; - column += 2; - corner1Read = TRUE; - } else if ((row == numRows - 2) && (column == 0) && - ((numColumns & 0x03) != 0) && !corner2Read) { - (*result)[resultOffset++] = (uint8_t)ReadCorner2(numRows, numColumns); - row -= 2; - column += 2; - corner2Read = TRUE; - } else if ((row == numRows + 4) && (column == 2) && - ((numColumns & 0x07) == 0) && !corner3Read) { - (*result)[resultOffset++] = (uint8_t)ReadCorner3(numRows, numColumns); - row -= 2; - column += 2; - corner3Read = TRUE; - } else if ((row == numRows - 2) && (column == 0) && - ((numColumns & 0x07) == 4) && !corner4Read) { - (*result)[resultOffset++] = (uint8_t)ReadCorner4(numRows, numColumns); - row -= 2; - column += 2; - corner4Read = TRUE; - } else { - do { - if ((row < numRows) && (column >= 0) && - !m_readMappingMatrix->Get(column, row)) { - if (resultOffset < (*result).GetSize()) { - (*result)[resultOffset++] = - (uint8_t)ReadUtah(row, column, numRows, numColumns); - } - } - row -= 2; - column += 2; - } while ((row >= 0) && (column < numColumns)); - row += 1; - column += 3; - do { - if ((row >= 0) && (column < numColumns) && - !m_readMappingMatrix->Get(column, row)) { - if (resultOffset < (*result).GetSize()) { - (*result)[resultOffset++] = - (uint8_t)ReadUtah(row, column, numRows, numColumns); - } - } - row += 2; - column -= 2; - } while ((row < numRows) && (column >= 0)); - row += 3; - column += 1; - } - } while ((row < numRows) || (column < numColumns)); - if (resultOffset != m_version->GetTotalCodewords()) { - e = BCExceptionFormatException; - return NULL; - } - return result.release(); -} -FX_BOOL CBC_DataMatrixBitMatrixParser::ReadModule(int32_t row, - int32_t column, - int32_t numRows, - int32_t numColumns) { - if (row < 0) { - row += numRows; - column += 4 - ((numRows + 4) & 0x07); - } - if (column < 0) { - column += numColumns; - row += 4 - ((numColumns + 4) & 0x07); - } - m_readMappingMatrix->Set(column, row); - return m_mappingBitMatrix->Get(column, row); -} -int32_t CBC_DataMatrixBitMatrixParser::ReadUtah(int32_t row, - int32_t column, - int32_t numRows, - int32_t numColumns) { - int32_t currentByte = 0; - if (ReadModule(row - 2, column - 2, numRows, numColumns)) { - currentByte |= 1; - } - currentByte <<= 1; - if (ReadModule(row - 2, column - 1, numRows, numColumns)) { - currentByte |= 1; - } - currentByte <<= 1; - if (ReadModule(row - 1, column - 2, numRows, numColumns)) { - currentByte |= 1; - } - currentByte <<= 1; - if (ReadModule(row - 1, column - 1, numRows, numColumns)) { - currentByte |= 1; - } - currentByte <<= 1; - if (ReadModule(row - 1, column, numRows, numColumns)) { - currentByte |= 1; - } - currentByte <<= 1; - if (ReadModule(row, column - 2, numRows, numColumns)) { - currentByte |= 1; - } - currentByte <<= 1; - if (ReadModule(row, column - 1, numRows, numColumns)) { - currentByte |= 1; - } - currentByte <<= 1; - if (ReadModule(row, column, numRows, numColumns)) { - currentByte |= 1; - } - return currentByte; -} -int32_t CBC_DataMatrixBitMatrixParser::ReadCorner1(int32_t numRows, - int32_t numColumns) { - int32_t currentByte = 0; - if (ReadModule(numRows - 1, 0, numRows, numColumns)) { - currentByte |= 1; - } - currentByte <<= 1; - if (ReadModule(numRows - 1, 1, numRows, numColumns)) { - currentByte |= 1; - } - currentByte <<= 1; - if (ReadModule(numRows - 1, 2, numRows, numColumns)) { - currentByte |= 1; - } - currentByte <<= 1; - if (ReadModule(0, numColumns - 2, numRows, numColumns)) { - currentByte |= 1; - } - currentByte <<= 1; - if (ReadModule(0, numColumns - 1, numRows, numColumns)) { - currentByte |= 1; - } - currentByte <<= 1; - if (ReadModule(1, numColumns - 1, numRows, numColumns)) { - currentByte |= 1; - } - currentByte <<= 1; - if (ReadModule(2, numColumns - 1, numRows, numColumns)) { - currentByte |= 1; - } - currentByte <<= 1; - if (ReadModule(3, numColumns - 1, numRows, numColumns)) { - currentByte |= 1; - } - return currentByte; -} -int32_t CBC_DataMatrixBitMatrixParser::ReadCorner2(int32_t numRows, - int32_t numColumns) { - int32_t currentByte = 0; - if (ReadModule(numRows - 3, 0, numRows, numColumns)) { - currentByte |= 1; - } - currentByte <<= 1; - if (ReadModule(numRows - 2, 0, numRows, numColumns)) { - currentByte |= 1; - } - currentByte <<= 1; - if (ReadModule(numRows - 1, 0, numRows, numColumns)) { - currentByte |= 1; - } - currentByte <<= 1; - if (ReadModule(0, numColumns - 4, numRows, numColumns)) { - currentByte |= 1; - } - currentByte <<= 1; - if (ReadModule(0, numColumns - 3, numRows, numColumns)) { - currentByte |= 1; - } - currentByte <<= 1; - if (ReadModule(0, numColumns - 2, numRows, numColumns)) { - currentByte |= 1; - } - currentByte <<= 1; - if (ReadModule(0, numColumns - 1, numRows, numColumns)) { - currentByte |= 1; - } - currentByte <<= 1; - if (ReadModule(1, numColumns - 1, numRows, numColumns)) { - currentByte |= 1; - } - return currentByte; -} -int32_t CBC_DataMatrixBitMatrixParser::ReadCorner3(int32_t numRows, - int32_t numColumns) { - int32_t currentByte = 0; - if (ReadModule(numRows - 1, 0, numRows, numColumns)) { - currentByte |= 1; - } - currentByte <<= 1; - if (ReadModule(numRows - 1, numColumns - 1, numRows, numColumns)) { - currentByte |= 1; - } - currentByte <<= 1; - if (ReadModule(0, numColumns - 3, numRows, numColumns)) { - currentByte |= 1; - } - currentByte <<= 1; - if (ReadModule(0, numColumns - 2, numRows, numColumns)) { - currentByte |= 1; - } - currentByte <<= 1; - if (ReadModule(0, numColumns - 1, numRows, numColumns)) { - currentByte |= 1; - } - currentByte <<= 1; - if (ReadModule(1, numColumns - 3, numRows, numColumns)) { - currentByte |= 1; - } - currentByte <<= 1; - if (ReadModule(1, numColumns - 2, numRows, numColumns)) { - currentByte |= 1; - } - currentByte <<= 1; - if (ReadModule(1, numColumns - 1, numRows, numColumns)) { - currentByte |= 1; - } - return currentByte; -} -int32_t CBC_DataMatrixBitMatrixParser::ReadCorner4(int32_t numRows, - int32_t numColumns) { - int32_t currentByte = 0; - if (ReadModule(numRows - 3, 0, numRows, numColumns)) { - currentByte |= 1; - } - currentByte <<= 1; - if (ReadModule(numRows - 2, 0, numRows, numColumns)) { - currentByte |= 1; - } - currentByte <<= 1; - if (ReadModule(numRows - 1, 0, numRows, numColumns)) { - currentByte |= 1; - } - currentByte <<= 1; - if (ReadModule(0, numColumns - 2, numRows, numColumns)) { - currentByte |= 1; - } - currentByte <<= 1; - if (ReadModule(0, numColumns - 1, numRows, numColumns)) { - currentByte |= 1; - } - currentByte <<= 1; - if (ReadModule(1, numColumns - 1, numRows, numColumns)) { - currentByte |= 1; - } - currentByte <<= 1; - if (ReadModule(2, numColumns - 1, numRows, numColumns)) { - currentByte |= 1; - } - currentByte <<= 1; - if (ReadModule(3, numColumns - 1, numRows, numColumns)) { - currentByte |= 1; - } - return currentByte; -} -CBC_CommonBitMatrix* CBC_DataMatrixBitMatrixParser::ExtractDataRegion( - CBC_CommonBitMatrix* bitMatrix, - int32_t& e) { - int32_t symbolSizeRows = m_version->GetSymbolSizeRows(); - int32_t symbolSizeColumns = m_version->GetSymbolSizeColumns(); - if (bitMatrix->GetHeight() != symbolSizeRows) { - e = BCExceptionCanNotCallGetDimensionOnNonSquareMatrix; - return NULL; - } - int32_t dataRegionSizeRows = m_version->GetDataRegionSizeRows(); - int32_t dataRegionSizeColumns = m_version->GetDataRegionSizeColumns(); - int32_t numDataRegionsRow = symbolSizeRows / dataRegionSizeRows; - int32_t numDataRegionsColumn = symbolSizeColumns / dataRegionSizeColumns; - int32_t sizeDataRegionRow = numDataRegionsRow * dataRegionSizeRows; - int32_t sizeDataRegionColumn = numDataRegionsColumn * dataRegionSizeColumns; - CBC_CommonBitMatrix* bitMatrixWithoutAlignment = new CBC_CommonBitMatrix(); - bitMatrixWithoutAlignment->Init(sizeDataRegionColumn, sizeDataRegionRow); - int32_t dataRegionRow; - for (dataRegionRow = 0; dataRegionRow < numDataRegionsRow; ++dataRegionRow) { - int32_t dataRegionRowOffset = dataRegionRow * dataRegionSizeRows; - int32_t dataRegionColumn; - for (dataRegionColumn = 0; dataRegionColumn < numDataRegionsColumn; - ++dataRegionColumn) { - int32_t dataRegionColumnOffset = dataRegionColumn * dataRegionSizeColumns; - int32_t i; - for (i = 0; i < dataRegionSizeRows; ++i) { - int32_t readRowOffset = - dataRegionRow * (dataRegionSizeRows + 2) + 1 + i; - int32_t writeRowOffset = dataRegionRowOffset + i; - int32_t j; - for (j = 0; j < dataRegionSizeColumns; ++j) { - int32_t readColumnOffset = - dataRegionColumn * (dataRegionSizeColumns + 2) + 1 + j; - if (bitMatrix->Get(readColumnOffset, readRowOffset)) { - int32_t writeColumnOffset = dataRegionColumnOffset + j; - bitMatrixWithoutAlignment->Set(writeColumnOffset, writeRowOffset); - } - } - } - } - } - return bitMatrixWithoutAlignment; -} diff --git a/xfa/src/fxbarcode/datamatrix/BC_DataMatrixBitMatrixParser.h b/xfa/src/fxbarcode/datamatrix/BC_DataMatrixBitMatrixParser.h deleted file mode 100644 index 967e08ddfd..0000000000 --- a/xfa/src/fxbarcode/datamatrix/BC_DataMatrixBitMatrixParser.h +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_DATAMATRIX_BC_DATAMATRIXBITMATRIXPARSER_H_ -#define XFA_SRC_FXBARCODE_DATAMATRIX_BC_DATAMATRIXBITMATRIXPARSER_H_ - -#include "core/include/fxcrt/fx_basic.h" - -class CBC_CommonBitMatrix; -class CBC_DataMatrixVersion; - -class CBC_DataMatrixBitMatrixParser { - public: - CBC_DataMatrixBitMatrixParser(); - virtual ~CBC_DataMatrixBitMatrixParser(); - CBC_DataMatrixVersion* GetVersion(); - CFX_ByteArray* ReadCodewords(int32_t& e); - FX_BOOL ReadModule(int32_t row, - int32_t column, - int32_t numRows, - int32_t numColumns); - int32_t ReadUtah(int32_t row, - int32_t column, - int32_t numRows, - int32_t numColumns); - int32_t ReadCorner1(int32_t numRows, int32_t numColumns); - int32_t ReadCorner2(int32_t numRows, int32_t numColumns); - int32_t ReadCorner3(int32_t numRows, int32_t numColumns); - int32_t ReadCorner4(int32_t numRows, int32_t numColumns); - CBC_CommonBitMatrix* ExtractDataRegion(CBC_CommonBitMatrix* bitMatrix, - int32_t& e); - virtual void Init(CBC_CommonBitMatrix* bitMatrix, int32_t& e); - - private: - static CBC_DataMatrixVersion* ReadVersion(CBC_CommonBitMatrix* bitMatrix, - int32_t& e); - CBC_CommonBitMatrix* m_mappingBitMatrix; - CBC_CommonBitMatrix* m_readMappingMatrix; - CBC_DataMatrixVersion* m_version; -}; - -#endif // XFA_SRC_FXBARCODE_DATAMATRIX_BC_DATAMATRIXBITMATRIXPARSER_H_ diff --git a/xfa/src/fxbarcode/datamatrix/BC_DataMatrixDataBlock.cpp b/xfa/src/fxbarcode/datamatrix/BC_DataMatrixDataBlock.cpp deleted file mode 100644 index fbd0ea1c9e..0000000000 --- a/xfa/src/fxbarcode/datamatrix/BC_DataMatrixDataBlock.cpp +++ /dev/null @@ -1,115 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2008 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/datamatrix/BC_DataMatrixDataBlock.h" - -#include - -#include "xfa/src/fxbarcode/datamatrix/BC_DataMatrixVersion.h" -#include "xfa/src/fxbarcode/utils.h" - -CBC_DataMatrixDataBlock::~CBC_DataMatrixDataBlock() {} -CBC_DataMatrixDataBlock::CBC_DataMatrixDataBlock(int32_t numDataCodewords, - CFX_ByteArray* codewords) { - m_codewords.Copy(*codewords); - m_numDataCodewords = numDataCodewords; -} -CFX_PtrArray* CBC_DataMatrixDataBlock::GetDataBlocks( - CFX_ByteArray* rawCodewords, - CBC_DataMatrixVersion* version, - int32_t& e) { - ECBlocks* ecBlocks = version->GetECBlocks(); - int32_t totalBlocks = 0; - const CFX_PtrArray& ecBlockArray = ecBlocks->GetECBlocks(); - int32_t i; - for (i = 0; i < ecBlockArray.GetSize(); i++) { - totalBlocks += ((ECB*)ecBlockArray[i])->GetCount(); - } - std::unique_ptr result(new CFX_PtrArray()); - result->SetSize(totalBlocks); - int32_t numResultBlocks = 0; - int32_t j; - for (j = 0; j < ecBlockArray.GetSize(); j++) { - for (i = 0; i < ((ECB*)ecBlockArray[j])->GetCount(); i++) { - int32_t numDataCodewords = ((ECB*)ecBlockArray[j])->GetDataCodewords(); - int32_t numBlockCodewords = ecBlocks->GetECCodewords() + numDataCodewords; - CFX_ByteArray codewords; - codewords.SetSize(numBlockCodewords); - (*result)[numResultBlocks++] = - new CBC_DataMatrixDataBlock(numDataCodewords, &codewords); - codewords.SetSize(0); - } - } - int32_t longerBlocksTotalCodewords = - ((CBC_DataMatrixDataBlock*)(*result)[0])->GetCodewords()->GetSize(); - int32_t longerBlocksNumDataCodewords = - longerBlocksTotalCodewords - ecBlocks->GetECCodewords(); - int32_t shorterBlocksNumDataCodewords = longerBlocksNumDataCodewords - 1; - int32_t rawCodewordsOffset = 0; - for (i = 0; i < shorterBlocksNumDataCodewords; i++) { - int32_t j; - for (j = 0; j < numResultBlocks; j++) { - if (rawCodewordsOffset < rawCodewords->GetSize()) { - ((CBC_DataMatrixDataBlock*)(*result)[j]) - ->GetCodewords() - -> - operator[](i) = (*rawCodewords)[rawCodewordsOffset++]; - } - } - } - const bool specialVersion = version->GetVersionNumber() == 24; - int32_t numLongerBlocks = specialVersion ? 8 : numResultBlocks; - for (j = 0; j < numLongerBlocks; j++) { - if (rawCodewordsOffset < rawCodewords->GetSize()) { - ((CBC_DataMatrixDataBlock*)(*result)[j]) - ->GetCodewords() - -> - operator[](longerBlocksNumDataCodewords - 1) = - (*rawCodewords)[rawCodewordsOffset++]; - } - } - int32_t max = - ((CBC_DataMatrixDataBlock*)(*result)[0])->GetCodewords()->GetSize(); - for (i = longerBlocksNumDataCodewords; i < max; i++) { - int32_t j; - for (j = 0; j < numResultBlocks; j++) { - int32_t iOffset = specialVersion && j > 7 ? i - 1 : i; - if (rawCodewordsOffset < rawCodewords->GetSize()) { - ((CBC_DataMatrixDataBlock*)(*result)[j]) - ->GetCodewords() - -> - operator[](iOffset) = (*rawCodewords)[rawCodewordsOffset++]; - } - } - } - if (rawCodewordsOffset != rawCodewords->GetSize()) { - e = BCExceptionIllegalArgument; - return NULL; - } - return result.release(); -} -int32_t CBC_DataMatrixDataBlock::GetNumDataCodewords() { - return m_numDataCodewords; -} -CFX_ByteArray* CBC_DataMatrixDataBlock::GetCodewords() { - return &m_codewords; -} diff --git a/xfa/src/fxbarcode/datamatrix/BC_DataMatrixDataBlock.h b/xfa/src/fxbarcode/datamatrix/BC_DataMatrixDataBlock.h deleted file mode 100644 index 68a4ceacc7..0000000000 --- a/xfa/src/fxbarcode/datamatrix/BC_DataMatrixDataBlock.h +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_DATAMATRIX_BC_DATAMATRIXDATABLOCK_H_ -#define XFA_SRC_FXBARCODE_DATAMATRIX_BC_DATAMATRIXDATABLOCK_H_ - -#include "core/include/fxcrt/fx_basic.h" - -class CBC_DataMatrixVersion; - -class CBC_DataMatrixDataBlock { - public: - virtual ~CBC_DataMatrixDataBlock(); - - int32_t GetNumDataCodewords(); - CFX_ByteArray* GetCodewords(); - - static CFX_PtrArray* GetDataBlocks(CFX_ByteArray* rawCodewords, - CBC_DataMatrixVersion* version, - int32_t& e); - - private: - int32_t m_numDataCodewords; - CFX_ByteArray m_codewords; - - CBC_DataMatrixDataBlock(int32_t numDataCodewords, CFX_ByteArray* codewords); -}; - -#endif // XFA_SRC_FXBARCODE_DATAMATRIX_BC_DATAMATRIXDATABLOCK_H_ diff --git a/xfa/src/fxbarcode/datamatrix/BC_DataMatrixDecodedBitStreamParser.cpp b/xfa/src/fxbarcode/datamatrix/BC_DataMatrixDecodedBitStreamParser.cpp deleted file mode 100644 index f378fff05d..0000000000 --- a/xfa/src/fxbarcode/datamatrix/BC_DataMatrixDecodedBitStreamParser.cpp +++ /dev/null @@ -1,473 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2008 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/common/BC_CommonBitSource.h" -#include "xfa/src/fxbarcode/common/BC_CommonDecoderResult.h" -#include "xfa/src/fxbarcode/datamatrix/BC_DataMatrixDecodedBitStreamParser.h" - -const FX_CHAR CBC_DataMatrixDecodedBitStreamParser::C40_BASIC_SET_CHARS[] = { - '*', '*', '*', ' ', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', - 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', - 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'}; -const FX_CHAR CBC_DataMatrixDecodedBitStreamParser::C40_SHIFT2_SET_CHARS[] = { - '!', '"', '#', '$', '%', '&', '\'', '(', ')', '*', '+', ',', '-', '.', - '/', ':', ';', '<', '=', '>', '?', '@', '[', '\\', ']', '^', '_'}; -const FX_CHAR CBC_DataMatrixDecodedBitStreamParser::TEXT_BASIC_SET_CHARS[] = { - '*', '*', '*', ' ', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', - 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', - 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'}; -const FX_CHAR CBC_DataMatrixDecodedBitStreamParser::TEXT_SHIFT3_SET_CHARS[] = { - '\'', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', - 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', - 'V', 'W', 'X', 'Y', 'Z', '{', '|', '}', '~', (FX_CHAR)127}; -const int32_t CBC_DataMatrixDecodedBitStreamParser::PAD_ENCODE = 0; -const int32_t CBC_DataMatrixDecodedBitStreamParser::ASCII_ENCODE = 1; -const int32_t CBC_DataMatrixDecodedBitStreamParser::C40_ENCODE = 2; -const int32_t CBC_DataMatrixDecodedBitStreamParser::TEXT_ENCODE = 3; -const int32_t CBC_DataMatrixDecodedBitStreamParser::ANSIX12_ENCODE = 4; -const int32_t CBC_DataMatrixDecodedBitStreamParser::EDIFACT_ENCODE = 5; -const int32_t CBC_DataMatrixDecodedBitStreamParser::BASE256_ENCODE = 6; -CBC_DataMatrixDecodedBitStreamParser::CBC_DataMatrixDecodedBitStreamParser() {} -CBC_DataMatrixDecodedBitStreamParser::~CBC_DataMatrixDecodedBitStreamParser() {} -CBC_CommonDecoderResult* CBC_DataMatrixDecodedBitStreamParser::Decode( - CFX_ByteArray& bytes, - int32_t& e) { - CBC_CommonBitSource bits(&bytes); - CFX_ByteString result; - CFX_ByteString resultTrailer; - CFX_Int32Array byteSegments; - int32_t mode = ASCII_ENCODE; - do { - if (mode == 1) { - mode = DecodeAsciiSegment(&bits, result, resultTrailer, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - } else { - switch (mode) { - case 2: - DecodeC40Segment(&bits, result, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - break; - case 3: - DecodeTextSegment(&bits, result, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - break; - case 4: - DecodeAnsiX12Segment(&bits, result, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - break; - case 5: - DecodeEdifactSegment(&bits, result, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - break; - case 6: - DecodeBase256Segment(&bits, result, byteSegments, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - break; - default: - e = BCExceptionFormatException; - return NULL; - } - mode = ASCII_ENCODE; - } - } while (mode != PAD_ENCODE && bits.Available() > 0); - if (resultTrailer.GetLength() > 0) { - result += resultTrailer; - } - CBC_CommonDecoderResult* tempCp = new CBC_CommonDecoderResult(); - tempCp->Init(bytes, result, - (byteSegments.GetSize() <= 0) ? CFX_Int32Array() : byteSegments, - NULL, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - return tempCp; -} -int32_t CBC_DataMatrixDecodedBitStreamParser::DecodeAsciiSegment( - CBC_CommonBitSource* bits, - CFX_ByteString& result, - CFX_ByteString& resultTrailer, - int32_t& e) { - FX_CHAR buffer[128]; - FX_BOOL upperShift = FALSE; - do { - int32_t oneByte = bits->ReadBits(8, e); - BC_EXCEPTION_CHECK_ReturnValue(e, 0); - if (oneByte == 0) { - e = BCExceptionFormatException; - return 0; - } else if (oneByte <= 128) { - oneByte = upperShift ? oneByte + 128 : oneByte; - upperShift = FALSE; - result += ((FX_CHAR)(oneByte - 1)); - return ASCII_ENCODE; - } else if (oneByte == 129) { - return PAD_ENCODE; - } else if (oneByte <= 229) { - int32_t value = oneByte - 130; - FXSYS_itoa(value, buffer, 10); - if (value < 10) { - result += '0'; - buffer[1] = '\0'; - } else { - buffer[2] = '\0'; - } - result += buffer; - } else if (oneByte == 230) { - return C40_ENCODE; - } else if (oneByte == 231) { - return BASE256_ENCODE; - } else if (oneByte == 232 || oneByte == 233 || oneByte == 234) { - } else if (oneByte == 235) { - upperShift = TRUE; - } else if (oneByte == 236) { - result += "[)>"; - result += 0x1E; - result += "05"; - result += 0x1D; - resultTrailer.Insert(0, 0x1E); - resultTrailer.Insert(0 + 1, 0x04); - } else if (oneByte == 237) { - result += "[)>"; - result += 0x1E; - result += "06"; - result += 0x1D; - resultTrailer.Insert(0, 0x1E); - resultTrailer.Insert(0 + 1, 0x04); - } else if (oneByte == 238) { - return ANSIX12_ENCODE; - } else if (oneByte == 239) { - return TEXT_ENCODE; - } else if (oneByte == 240) { - return EDIFACT_ENCODE; - } else if (oneByte == 241) { - } else if (oneByte >= 242) { - if (oneByte == 254 && bits->Available() == 0) { - } else { - e = BCExceptionFormatException; - return 0; - } - } - } while (bits->Available() > 0); - return ASCII_ENCODE; -} -void CBC_DataMatrixDecodedBitStreamParser::DecodeC40Segment( - CBC_CommonBitSource* bits, - CFX_ByteString& result, - int32_t& e) { - FX_BOOL upperShift = FALSE; - CFX_Int32Array cValues; - cValues.SetSize(3); - do { - if (bits->Available() == 8) { - return; - } - int32_t firstByte = bits->ReadBits(8, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - if (firstByte == 254) { - return; - } - int32_t tempp = bits->ReadBits(8, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - ParseTwoBytes(firstByte, tempp, cValues); - int32_t shift = 0; - int32_t i; - for (i = 0; i < 3; i++) { - int32_t cValue = cValues[i]; - switch (shift) { - case 0: - if (cValue < 3) { - shift = cValue + 1; - } else if (cValue < 27) { - FX_CHAR c40char = C40_BASIC_SET_CHARS[cValue]; - if (upperShift) { - result += (FX_CHAR)(c40char + 128); - upperShift = FALSE; - } else { - result += c40char; - } - } else { - e = BCExceptionFormatException; - return; - } - break; - case 1: - if (upperShift) { - result += (FX_CHAR)(cValue + 128); - upperShift = FALSE; - } else { - result += cValue; - } - shift = 0; - break; - case 2: - if (cValue < 27) { - FX_CHAR c40char = C40_SHIFT2_SET_CHARS[cValue]; - if (upperShift) { - result += (FX_CHAR)(c40char + 128); - upperShift = FALSE; - } else { - result += c40char; - } - } else if (cValue == 27) { - e = BCExceptionFormatException; - return; - } else if (cValue == 30) { - upperShift = TRUE; - } else { - e = BCExceptionFormatException; - return; - } - shift = 0; - break; - case 3: - if (upperShift) { - result += (FX_CHAR)(cValue + 224); - upperShift = FALSE; - } else { - result += (FX_CHAR)(cValue + 96); - } - shift = 0; - break; - default: - break; - e = BCExceptionFormatException; - return; - } - } - } while (bits->Available() > 0); -} -void CBC_DataMatrixDecodedBitStreamParser::DecodeTextSegment( - CBC_CommonBitSource* bits, - CFX_ByteString& result, - int32_t& e) { - FX_BOOL upperShift = FALSE; - CFX_Int32Array cValues; - cValues.SetSize(3); - int32_t shift = 0; - do { - if (bits->Available() == 8) { - return; - } - int32_t firstByte = bits->ReadBits(8, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - if (firstByte == 254) { - return; - } - int32_t inTp = bits->ReadBits(8, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - ParseTwoBytes(firstByte, inTp, cValues); - for (int32_t i = 0; i < 3; i++) { - int32_t cValue = cValues[i]; - switch (shift) { - case 0: - if (cValue < 3) { - shift = cValue + 1; - } else if (cValue < 40) { - FX_CHAR textChar = TEXT_BASIC_SET_CHARS[cValue]; - if (upperShift) { - result += (FX_CHAR)(textChar + 128); - upperShift = FALSE; - } else { - result += textChar; - } - } else { - e = BCExceptionFormatException; - return; - } - break; - case 1: - if (upperShift) { - result += (FX_CHAR)(cValue + 128); - upperShift = FALSE; - } else { - result += cValue; - } - shift = 0; - break; - case 2: - if (cValue < 27) { - FX_CHAR c40char = C40_SHIFT2_SET_CHARS[cValue]; - if (upperShift) { - result += (FX_CHAR)(c40char + 128); - upperShift = FALSE; - } else { - result += c40char; - } - } else if (cValue == 27) { - e = BCExceptionFormatException; - return; - } else if (cValue == 30) { - upperShift = TRUE; - } else { - e = BCExceptionFormatException; - return; - } - shift = 0; - break; - case 3: - if (cValue < 19) { - FX_CHAR textChar = TEXT_SHIFT3_SET_CHARS[cValue]; - if (upperShift) { - result += (FX_CHAR)(textChar + 128); - upperShift = FALSE; - } else { - result += textChar; - } - shift = 0; - } else { - e = BCExceptionFormatException; - return; - } - break; - default: - break; - e = BCExceptionFormatException; - return; - } - } - } while (bits->Available() > 0); -} -void CBC_DataMatrixDecodedBitStreamParser::DecodeAnsiX12Segment( - CBC_CommonBitSource* bits, - CFX_ByteString& result, - int32_t& e) { - CFX_Int32Array cValues; - cValues.SetSize(3); - do { - if (bits->Available() == 8) { - return; - } - int32_t firstByte = bits->ReadBits(8, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - if (firstByte == 254) { - return; - } - int32_t iTemp1 = bits->ReadBits(8, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - ParseTwoBytes(firstByte, iTemp1, cValues); - int32_t i; - for (i = 0; i < 3; i++) { - int32_t cValue = cValues[i]; - if (cValue == 0) { - BC_FX_ByteString_Append(result, 1, '\r'); - } else if (cValue == 1) { - BC_FX_ByteString_Append(result, 1, '*'); - } else if (cValue == 2) { - BC_FX_ByteString_Append(result, 1, '>'); - } else if (cValue == 3) { - BC_FX_ByteString_Append(result, 1, ' '); - } else if (cValue < 14) { - BC_FX_ByteString_Append(result, 1, (FX_CHAR)(cValue + 44)); - } else if (cValue < 40) { - BC_FX_ByteString_Append(result, 1, (FX_CHAR)(cValue + 51)); - } else { - e = BCExceptionFormatException; - return; - } - } - } while (bits->Available() > 0); -} -void CBC_DataMatrixDecodedBitStreamParser::ParseTwoBytes( - int32_t firstByte, - int32_t secondByte, - CFX_Int32Array& result) { - int32_t fullBitValue = (firstByte << 8) + secondByte - 1; - int32_t temp = fullBitValue / 1600; - result[0] = temp; - fullBitValue -= temp * 1600; - temp = fullBitValue / 40; - result[1] = temp; - result[2] = fullBitValue - temp * 40; -} - -void CBC_DataMatrixDecodedBitStreamParser::DecodeEdifactSegment( - CBC_CommonBitSource* bits, - CFX_ByteString& result, - int32_t& e) { - FX_CHAR buffer[128]; - FX_BOOL unlatch = FALSE; - do { - if (bits->Available() <= 16) - return; - - for (int32_t i = 0; i < 4; i++) { - int32_t edifactValue = bits->ReadBits(6, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - if (edifactValue == 0x1F) - unlatch = TRUE; - - if (!unlatch) { - if ((edifactValue & 32) == 0) - edifactValue |= 64; - result += FXSYS_itoa(edifactValue, buffer, 10); - } - } - } while (!unlatch && bits->Available() > 0); -} - -void CBC_DataMatrixDecodedBitStreamParser::DecodeBase256Segment( - CBC_CommonBitSource* bits, - CFX_ByteString& result, - CFX_Int32Array& byteSegments, - int32_t& e) { - int32_t codewordPosition = 1 + bits->getByteOffset(); - int32_t iTmp = bits->ReadBits(8, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - int32_t d1 = Unrandomize255State(iTmp, codewordPosition++); - int32_t count; - if (d1 == 0) { - count = bits->Available() / 8; - } else if (d1 < 250) { - count = d1; - } else { - int32_t iTmp3 = bits->ReadBits(8, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - count = 250 * (d1 - 249) + Unrandomize255State(iTmp3, codewordPosition++); - } - if (count < 0) { - e = BCExceptionFormatException; - return; - } - CFX_ByteArray* bytes = new CFX_ByteArray(); - bytes->SetSize(count); - int32_t i; - for (i = 0; i < count; i++) { - if (bits->Available() < 8) { - e = BCExceptionFormatException; - delete bytes; - return; - } - int32_t iTemp5 = bits->ReadBits(8, e); - if (e != BCExceptionNO) { - delete bytes; - return; - } - bytes->SetAt(i, Unrandomize255State(iTemp5, codewordPosition++)); - } - BC_FX_ByteString_Append(result, *bytes); - delete bytes; -} -uint8_t CBC_DataMatrixDecodedBitStreamParser::Unrandomize255State( - int32_t randomizedBase256Codeword, - int32_t base256CodewordPosition) { - int32_t pseudoRandomNumber = ((149 * base256CodewordPosition) % 255) + 1; - int32_t tempVariable = randomizedBase256Codeword - pseudoRandomNumber; - return (uint8_t)(tempVariable >= 0 ? tempVariable : tempVariable + 256); -} diff --git a/xfa/src/fxbarcode/datamatrix/BC_DataMatrixDecodedBitStreamParser.h b/xfa/src/fxbarcode/datamatrix/BC_DataMatrixDecodedBitStreamParser.h deleted file mode 100644 index eba1828d19..0000000000 --- a/xfa/src/fxbarcode/datamatrix/BC_DataMatrixDecodedBitStreamParser.h +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_DATAMATRIX_BC_DATAMATRIXDECODEDBITSTREAMPARSER_H_ -#define XFA_SRC_FXBARCODE_DATAMATRIX_BC_DATAMATRIXDECODEDBITSTREAMPARSER_H_ -class CBC_CommonDecoderResult; -class CBC_CommonBitSource; -class CBC_DataMatrixDecodedBitStreamParser { - public: - CBC_DataMatrixDecodedBitStreamParser(); - virtual ~CBC_DataMatrixDecodedBitStreamParser(); - static CBC_CommonDecoderResult* Decode(CFX_ByteArray& bytes, int32_t& e); - - private: - static int32_t DecodeAsciiSegment(CBC_CommonBitSource* bits, - CFX_ByteString& result, - CFX_ByteString& resultTrailer, - int32_t& e); - static void DecodeC40Segment(CBC_CommonBitSource* bits, - CFX_ByteString& result, - int32_t& e); - static void DecodeTextSegment(CBC_CommonBitSource* bits, - CFX_ByteString& result, - int32_t& e); - static void DecodeAnsiX12Segment(CBC_CommonBitSource* bits, - CFX_ByteString& result, - int32_t& e); - static void ParseTwoBytes(int32_t firstByte, - int32_t secondByte, - CFX_Int32Array& result); - static void DecodeEdifactSegment(CBC_CommonBitSource* bits, - CFX_ByteString& result, - int32_t& e); - static void DecodeBase256Segment(CBC_CommonBitSource* bits, - CFX_ByteString& result, - CFX_Int32Array& byteSegments, - int32_t& e); - static uint8_t Unrandomize255State(int32_t randomizedBase256Codeword, - int32_t base256CodewordPosition); - - static const FX_CHAR C40_BASIC_SET_CHARS[]; - static const FX_CHAR C40_SHIFT2_SET_CHARS[]; - - static const FX_CHAR TEXT_BASIC_SET_CHARS[]; - static const FX_CHAR TEXT_SHIFT3_SET_CHARS[]; - static const int32_t PAD_ENCODE; - static const int32_t ASCII_ENCODE; - static const int32_t C40_ENCODE; - static const int32_t TEXT_ENCODE; - static const int32_t ANSIX12_ENCODE; - static const int32_t EDIFACT_ENCODE; - static const int32_t BASE256_ENCODE; -}; - -#endif // XFA_SRC_FXBARCODE_DATAMATRIX_BC_DATAMATRIXDECODEDBITSTREAMPARSER_H_ diff --git a/xfa/src/fxbarcode/datamatrix/BC_DataMatrixDecoder.cpp b/xfa/src/fxbarcode/datamatrix/BC_DataMatrixDecoder.cpp deleted file mode 100644 index 423cefc65f..0000000000 --- a/xfa/src/fxbarcode/datamatrix/BC_DataMatrixDecoder.cpp +++ /dev/null @@ -1,114 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2007 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/datamatrix/BC_DataMatrixDecoder.h" - -#include - -#include "xfa/src/fxbarcode/common/BC_CommonBitMatrix.h" -#include "xfa/src/fxbarcode/common/reedsolomon/BC_ReedSolomonDecoder.h" -#include "xfa/src/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256.h" -#include "xfa/src/fxbarcode/datamatrix/BC_DataMatrixBitMatrixParser.h" -#include "xfa/src/fxbarcode/datamatrix/BC_DataMatrixDataBlock.h" -#include "xfa/src/fxbarcode/datamatrix/BC_DataMatrixDecodedBitStreamParser.h" -#include "xfa/src/fxbarcode/datamatrix/BC_DataMatrixVersion.h" - -CBC_DataMatrixDecoder::CBC_DataMatrixDecoder() { - m_rsDecoder = NULL; -} -void CBC_DataMatrixDecoder::Init() { - m_rsDecoder = - new CBC_ReedSolomonDecoder(CBC_ReedSolomonGF256::DataMatrixField); -} -CBC_DataMatrixDecoder::~CBC_DataMatrixDecoder() { - delete m_rsDecoder; -} -CBC_CommonDecoderResult* CBC_DataMatrixDecoder::Decode( - CBC_CommonBitMatrix* bits, - int32_t& e) { - CBC_DataMatrixBitMatrixParser parser; - parser.Init(bits, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - CBC_DataMatrixVersion* version = parser.GetVersion(); - std::unique_ptr codewords(parser.ReadCodewords(e)); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - CFX_PtrArray* dataBlocks = - CBC_DataMatrixDataBlock::GetDataBlocks(codewords.get(), version, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - int32_t dataBlocksCount = dataBlocks->GetSize(); - int32_t totalBytes = 0; - int32_t i, j; - for (i = 0; i < dataBlocksCount; i++) { - totalBytes += - ((CBC_DataMatrixDataBlock*)(*dataBlocks)[i])->GetNumDataCodewords(); - } - CFX_ByteArray resultBytes; - resultBytes.SetSize(totalBytes); - for (j = 0; j < dataBlocksCount; j++) { - CFX_ByteArray* codewordBytes = - ((CBC_DataMatrixDataBlock*)(*dataBlocks)[j])->GetCodewords(); - int32_t numDataCodewords = - ((CBC_DataMatrixDataBlock*)(*dataBlocks)[j])->GetNumDataCodewords(); - CorrectErrors(*codewordBytes, numDataCodewords, e); - if (e != BCExceptionNO) { - for (int32_t i = 0; i < dataBlocks->GetSize(); i++) { - delete (CBC_DataMatrixDataBlock*)(*dataBlocks)[i]; - } - delete dataBlocks; - dataBlocks = NULL; - return NULL; - } - int32_t i; - for (i = 0; i < numDataCodewords; i++) { - resultBytes[i * dataBlocksCount + j] = (*codewordBytes)[i]; - } - } - for (i = 0; i < (dataBlocks->GetSize()); i++) { - delete (CBC_DataMatrixDataBlock*)(*dataBlocks)[i]; - } - delete dataBlocks; - dataBlocks = NULL; - CBC_CommonDecoderResult* resultR = - CBC_DataMatrixDecodedBitStreamParser::Decode(resultBytes, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - return resultR; -} -void CBC_DataMatrixDecoder::CorrectErrors(CFX_ByteArray& codewordBytes, - int32_t numDataCodewords, - int32_t& e) { - int32_t numCodewords = codewordBytes.GetSize(); - CFX_Int32Array codewordsInts; - codewordsInts.SetSize(numCodewords); - int32_t i; - for (i = 0; i < numCodewords; i++) { - codewordsInts[i] = codewordBytes[i] & 0xFF; - } - int32_t numECCodewords = codewordBytes.GetSize() - numDataCodewords; - m_rsDecoder->Decode(&codewordsInts, numECCodewords, e); - if (e != BCExceptionNO) { - e = BCExceptionChecksumException; - return; - } - for (i = 0; i < numDataCodewords; i++) { - codewordBytes[i] = (uint8_t)codewordsInts[i]; - } -} diff --git a/xfa/src/fxbarcode/datamatrix/BC_DataMatrixDecoder.h b/xfa/src/fxbarcode/datamatrix/BC_DataMatrixDecoder.h deleted file mode 100644 index d80a51247f..0000000000 --- a/xfa/src/fxbarcode/datamatrix/BC_DataMatrixDecoder.h +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_DATAMATRIX_BC_DATAMATRIXDECODER_H_ -#define XFA_SRC_FXBARCODE_DATAMATRIX_BC_DATAMATRIXDECODER_H_ - -#include "core/include/fxcrt/fx_basic.h" - -class CBC_ReedSolomonDecoder; -class CBC_CommonDecoderResult; -class CBC_CommonBitMatrix; - -class CBC_DataMatrixDecoder { - public: - CBC_DataMatrixDecoder(); - virtual ~CBC_DataMatrixDecoder(); - CBC_CommonDecoderResult* Decode(CBC_CommonBitMatrix* bits, int32_t& e); - virtual void Init(); - - private: - void CorrectErrors(CFX_ByteArray& codewordBytes, - int32_t numDataCodewords, - int32_t& e); - CBC_ReedSolomonDecoder* m_rsDecoder; -}; - -#endif // XFA_SRC_FXBARCODE_DATAMATRIX_BC_DATAMATRIXDECODER_H_ diff --git a/xfa/src/fxbarcode/datamatrix/BC_DataMatrixDetector.cpp b/xfa/src/fxbarcode/datamatrix/BC_DataMatrixDetector.cpp deleted file mode 100644 index c29c64862a..0000000000 --- a/xfa/src/fxbarcode/datamatrix/BC_DataMatrixDetector.cpp +++ /dev/null @@ -1,406 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2008 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/datamatrix/BC_DataMatrixDetector.h" - -#include -#include - -#include "xfa/src/fxbarcode/BC_ResultPoint.h" -#include "xfa/src/fxbarcode/common/BC_CommonBitMatrix.h" -#include "xfa/src/fxbarcode/common/BC_WhiteRectangleDetector.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRDetectorResult.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRFinderPatternFinder.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRGridSampler.h" -#include "xfa/src/fxbarcode/utils.h" - -const int32_t CBC_DataMatrixDetector::INTEGERS[5] = {0, 1, 2, 3, 4}; -CBC_DataMatrixDetector::CBC_DataMatrixDetector(CBC_CommonBitMatrix* image) - : m_image(image), m_rectangleDetector(NULL) {} -void CBC_DataMatrixDetector::Init(int32_t& e) { - m_rectangleDetector = new CBC_WhiteRectangleDetector(m_image); - m_rectangleDetector->Init(e); - BC_EXCEPTION_CHECK_ReturnVoid(e); -} -CBC_DataMatrixDetector::~CBC_DataMatrixDetector() { - delete m_rectangleDetector; -} -inline FX_BOOL ResultPointsAndTransitionsComparator(void* a, void* b) { - return ((CBC_ResultPointsAndTransitions*)b)->GetTransitions() > - ((CBC_ResultPointsAndTransitions*)a)->GetTransitions(); -} -CBC_QRDetectorResult* CBC_DataMatrixDetector::Detect(int32_t& e) { - CFX_PtrArray* cornerPoints = m_rectangleDetector->Detect(e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - CBC_ResultPoint* pointA = (CBC_ResultPoint*)(*cornerPoints)[0]; - CBC_ResultPoint* pointB = (CBC_ResultPoint*)(*cornerPoints)[1]; - CBC_ResultPoint* pointC = (CBC_ResultPoint*)(*cornerPoints)[2]; - CBC_ResultPoint* pointD = (CBC_ResultPoint*)(*cornerPoints)[3]; - delete cornerPoints; - cornerPoints = NULL; - CFX_PtrArray transitions; - transitions.Add(TransitionsBetween(pointA, pointB)); - transitions.Add(TransitionsBetween(pointA, pointC)); - transitions.Add(TransitionsBetween(pointB, pointD)); - transitions.Add(TransitionsBetween(pointC, pointD)); - BC_FX_PtrArray_Sort(transitions, &ResultPointsAndTransitionsComparator); - delete ((CBC_ResultPointsAndTransitions*)transitions[2]); - delete ((CBC_ResultPointsAndTransitions*)transitions[3]); - CBC_ResultPointsAndTransitions* lSideOne = - (CBC_ResultPointsAndTransitions*)transitions[0]; - CBC_ResultPointsAndTransitions* lSideTwo = - (CBC_ResultPointsAndTransitions*)transitions[1]; - CFX_MapPtrTemplate pointCount; - Increment(pointCount, lSideOne->GetFrom()); - Increment(pointCount, lSideOne->GetTo()); - Increment(pointCount, lSideTwo->GetFrom()); - Increment(pointCount, lSideTwo->GetTo()); - delete ((CBC_ResultPointsAndTransitions*)transitions[1]); - delete ((CBC_ResultPointsAndTransitions*)transitions[0]); - transitions.RemoveAll(); - CBC_ResultPoint* maybeTopLeft = NULL; - CBC_ResultPoint* bottomLeft = NULL; - CBC_ResultPoint* maybeBottomRight = NULL; - FX_POSITION itBegin = pointCount.GetStartPosition(); - while (itBegin) { - CBC_ResultPoint* key = 0; - int32_t value = 0; - pointCount.GetNextAssoc(itBegin, key, value); - if (value == 2) { - bottomLeft = key; - } else { - if (maybeBottomRight == NULL) { - maybeBottomRight = key; - } else { - maybeTopLeft = key; - } - } - } - if (maybeTopLeft == NULL || bottomLeft == NULL || maybeBottomRight == NULL) { - delete pointA; - delete pointB; - delete pointC; - delete pointD; - e = BCExceptionNotFound; - return NULL; - } - CFX_PtrArray corners; - corners.SetSize(3); - corners[0] = maybeTopLeft; - corners[1] = bottomLeft; - corners[2] = maybeBottomRight; - OrderBestPatterns(&corners); - CBC_ResultPoint* bottomRight = (CBC_ResultPoint*)corners[0]; - bottomLeft = (CBC_ResultPoint*)corners[1]; - CBC_ResultPoint* topLeft = (CBC_ResultPoint*)corners[2]; - CBC_ResultPoint* topRight = NULL; - int32_t value; - if (!pointCount.Lookup(pointA, value)) { - topRight = pointA; - } else if (!pointCount.Lookup(pointB, value)) { - topRight = pointB; - } else if (!pointCount.Lookup(pointC, value)) { - topRight = pointC; - } else { - topRight = pointD; - } - int32_t dimensionTop = std::unique_ptr( - TransitionsBetween(topLeft, topRight)) - ->GetTransitions(); - int32_t dimensionRight = std::unique_ptr( - TransitionsBetween(bottomRight, topRight)) - ->GetTransitions(); - if ((dimensionTop & 0x01) == 1) { - dimensionTop++; - } - dimensionTop += 2; - if ((dimensionRight & 0x01) == 1) { - dimensionRight++; - } - dimensionRight += 2; - std::unique_ptr bits; - std::unique_ptr correctedTopRight; - if (4 * dimensionTop >= 7 * dimensionRight || - 4 * dimensionRight >= 7 * dimensionTop) { - correctedTopRight.reset( - CorrectTopRightRectangular(bottomLeft, bottomRight, topLeft, topRight, - dimensionTop, dimensionRight)); - if (correctedTopRight.get() == NULL) { - correctedTopRight.reset(topRight); - } else { - delete topRight; - topRight = NULL; - } - dimensionTop = std::unique_ptr( - TransitionsBetween(topLeft, correctedTopRight.get())) - ->GetTransitions(); - dimensionRight = - std::unique_ptr( - TransitionsBetween(bottomRight, correctedTopRight.get())) - ->GetTransitions(); - if ((dimensionTop & 0x01) == 1) { - dimensionTop++; - } - if ((dimensionRight & 0x01) == 1) { - dimensionRight++; - } - bits.reset(SampleGrid(m_image, topLeft, bottomLeft, bottomRight, - correctedTopRight.get(), dimensionTop, dimensionRight, - e)); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - } else { - int32_t dimension = std::min(dimensionRight, dimensionTop); - correctedTopRight.reset( - CorrectTopRight(bottomLeft, bottomRight, topLeft, topRight, dimension)); - if (correctedTopRight.get() == NULL) { - correctedTopRight.reset(topRight); - } else { - delete topRight; - topRight = NULL; - } - int32_t dimensionCorrected = - std::max(std::unique_ptr( - TransitionsBetween(topLeft, correctedTopRight.get())) - ->GetTransitions(), - std::unique_ptr( - TransitionsBetween(bottomRight, correctedTopRight.get())) - ->GetTransitions()); - dimensionCorrected++; - if ((dimensionCorrected & 0x01) == 1) { - dimensionCorrected++; - } - bits.reset(SampleGrid(m_image, topLeft, bottomLeft, bottomRight, - correctedTopRight.get(), dimensionCorrected, - dimensionCorrected, e)); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - } - CFX_PtrArray* result = new CFX_PtrArray; - result->SetSize(4); - result->Add(topLeft); - result->Add(bottomLeft); - result->Add(bottomRight); - result->Add(correctedTopRight.release()); - return new CBC_QRDetectorResult(bits.release(), result); -} -CBC_ResultPoint* CBC_DataMatrixDetector::CorrectTopRightRectangular( - CBC_ResultPoint* bottomLeft, - CBC_ResultPoint* bottomRight, - CBC_ResultPoint* topLeft, - CBC_ResultPoint* topRight, - int32_t dimensionTop, - int32_t dimensionRight) { - FX_FLOAT corr = Distance(bottomLeft, bottomRight) / (FX_FLOAT)dimensionTop; - int32_t norm = Distance(topLeft, topRight); - FX_FLOAT cos = (topRight->GetX() - topLeft->GetX()) / norm; - FX_FLOAT sin = (topRight->GetY() - topLeft->GetY()) / norm; - std::unique_ptr c1(new CBC_ResultPoint( - topRight->GetX() + corr * cos, topRight->GetY() + corr * sin)); - corr = Distance(bottomLeft, topLeft) / (FX_FLOAT)dimensionRight; - norm = Distance(bottomRight, topRight); - cos = (topRight->GetX() - bottomRight->GetX()) / norm; - sin = (topRight->GetY() - bottomRight->GetY()) / norm; - std::unique_ptr c2(new CBC_ResultPoint( - topRight->GetX() + corr * cos, topRight->GetY() + corr * sin)); - if (!IsValid(c1.get())) { - if (IsValid(c2.get())) { - return c2.release(); - } - return NULL; - } else if (!IsValid(c2.get())) { - return c1.release(); - } - int32_t l1 = FXSYS_abs(dimensionTop - - std::unique_ptr( - TransitionsBetween(topLeft, c1.get())) - ->GetTransitions()) + - FXSYS_abs(dimensionRight - - std::unique_ptr( - TransitionsBetween(bottomRight, c1.get())) - ->GetTransitions()); - int32_t l2 = FXSYS_abs(dimensionTop - - std::unique_ptr( - TransitionsBetween(topLeft, c2.get())) - ->GetTransitions()) + - FXSYS_abs(dimensionRight - - std::unique_ptr( - TransitionsBetween(bottomRight, c2.get())) - ->GetTransitions()); - if (l1 <= l2) { - return c1.release(); - } - return c2.release(); -} -CBC_ResultPoint* CBC_DataMatrixDetector::CorrectTopRight( - CBC_ResultPoint* bottomLeft, - CBC_ResultPoint* bottomRight, - CBC_ResultPoint* topLeft, - CBC_ResultPoint* topRight, - int32_t dimension) { - FX_FLOAT corr = Distance(bottomLeft, bottomRight) / (FX_FLOAT)dimension; - int32_t norm = Distance(topLeft, topRight); - FX_FLOAT cos = (topRight->GetX() - topLeft->GetX()) / norm; - FX_FLOAT sin = (topRight->GetY() - topLeft->GetY()) / norm; - std::unique_ptr c1(new CBC_ResultPoint( - topRight->GetX() + corr * cos, topRight->GetY() + corr * sin)); - corr = Distance(bottomLeft, bottomRight) / (FX_FLOAT)dimension; - norm = Distance(bottomRight, topRight); - cos = (topRight->GetX() - bottomRight->GetX()) / norm; - sin = (topRight->GetY() - bottomRight->GetY()) / norm; - std::unique_ptr c2(new CBC_ResultPoint( - topRight->GetX() + corr * cos, topRight->GetY() + corr * sin)); - if (!IsValid(c1.get())) { - if (IsValid(c2.get())) { - return c2.release(); - } - return NULL; - } else if (!IsValid(c2.get())) { - return c1.release(); - } - int32_t l1 = FXSYS_abs(std::unique_ptr( - TransitionsBetween(topLeft, c1.get())) - ->GetTransitions() - - std::unique_ptr( - TransitionsBetween(bottomRight, c1.get())) - ->GetTransitions()); - int32_t l2 = FXSYS_abs(std::unique_ptr( - TransitionsBetween(topLeft, c2.get())) - ->GetTransitions() - - std::unique_ptr( - TransitionsBetween(bottomRight, c2.get())) - ->GetTransitions()); - return l1 <= l2 ? c1.release() : c2.release(); -} -FX_BOOL CBC_DataMatrixDetector::IsValid(CBC_ResultPoint* p) { - return p->GetX() >= 0 && p->GetX() < m_image->GetWidth() && p->GetY() > 0 && - p->GetY() < m_image->GetHeight(); -} -int32_t CBC_DataMatrixDetector::Round(FX_FLOAT d) { - return (int32_t)(d + 0.5f); -} -int32_t CBC_DataMatrixDetector::Distance(CBC_ResultPoint* a, - CBC_ResultPoint* b) { - return Round( - (FX_FLOAT)sqrt((a->GetX() - b->GetX()) * (a->GetX() - b->GetX()) + - (a->GetY() - b->GetY()) * (a->GetY() - b->GetY()))); -} -void CBC_DataMatrixDetector::Increment( - CFX_MapPtrTemplate& table, - CBC_ResultPoint* key) { - int32_t value; - if (table.Lookup(key, value)) { - table.SetAt(key, INTEGERS[value + 1]); - } else { - table.SetAt(key, INTEGERS[1]); - } -} -CBC_CommonBitMatrix* CBC_DataMatrixDetector::SampleGrid( - CBC_CommonBitMatrix* image, - CBC_ResultPoint* topLeft, - CBC_ResultPoint* bottomLeft, - CBC_ResultPoint* bottomRight, - CBC_ResultPoint* topRight, - int32_t dimensionX, - int32_t dimensionY, - int32_t& e) { - CBC_QRGridSampler& sampler = CBC_QRGridSampler::GetInstance(); - CBC_CommonBitMatrix* cbm = sampler.SampleGrid( - image, dimensionX, dimensionY, 0.5f, 0.5f, dimensionX - 0.5f, 0.5f, - dimensionX - 0.5f, dimensionY - 0.5f, 0.5f, dimensionY - 0.5f, - topLeft->GetX(), topLeft->GetY(), topRight->GetX(), topRight->GetY(), - bottomRight->GetX(), bottomRight->GetY(), bottomLeft->GetX(), - bottomLeft->GetY(), e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - return cbm; -} -CBC_ResultPointsAndTransitions* CBC_DataMatrixDetector::TransitionsBetween( - CBC_ResultPoint* from, - CBC_ResultPoint* to) { - int32_t fromX = (int32_t)from->GetX(); - int32_t fromY = (int32_t)from->GetY(); - int32_t toX = (int32_t)to->GetX(); - int32_t toY = (int32_t)to->GetY(); - FX_BOOL steep = FXSYS_abs(toY - fromY) > FXSYS_abs(toX - fromX); - if (steep) { - int32_t temp = fromX; - fromX = fromY; - fromY = temp; - temp = toX; - toX = toY; - toY = temp; - } - int32_t dx = FXSYS_abs(toX - fromX); - int32_t dy = FXSYS_abs(toY - fromY); - int32_t error = -dx >> 1; - int32_t ystep = fromY < toY ? 1 : -1; - int32_t xstep = fromX < toX ? 1 : -1; - int32_t transitions = 0; - FX_BOOL inBlack = m_image->Get(steep ? fromY : fromX, steep ? fromX : fromY); - for (int32_t x = fromX, y = fromY; x != toX; x += xstep) { - FX_BOOL isBlack = m_image->Get(steep ? y : x, steep ? x : y); - if (isBlack != inBlack) { - transitions++; - inBlack = isBlack; - } - error += dy; - if (error > 0) { - if (y == toY) { - break; - } - y += ystep; - error -= dx; - } - } - return new CBC_ResultPointsAndTransitions(from, to, transitions); -} -void CBC_DataMatrixDetector::OrderBestPatterns(CFX_PtrArray* patterns) { - FX_FLOAT abDistance = (FX_FLOAT)Distance((CBC_ResultPoint*)(*patterns)[0], - (CBC_ResultPoint*)(*patterns)[1]); - FX_FLOAT bcDistance = (FX_FLOAT)Distance((CBC_ResultPoint*)(*patterns)[1], - (CBC_ResultPoint*)(*patterns)[2]); - FX_FLOAT acDistance = (FX_FLOAT)Distance((CBC_ResultPoint*)(*patterns)[0], - (CBC_ResultPoint*)(*patterns)[2]); - CBC_ResultPoint *topLeft, *topRight, *bottomLeft; - if (bcDistance >= abDistance && bcDistance >= acDistance) { - topLeft = (CBC_ResultPoint*)(*patterns)[0]; - topRight = (CBC_ResultPoint*)(*patterns)[1]; - bottomLeft = (CBC_ResultPoint*)(*patterns)[2]; - } else if (acDistance >= bcDistance && acDistance >= abDistance) { - topLeft = (CBC_ResultPoint*)(*patterns)[1]; - topRight = (CBC_ResultPoint*)(*patterns)[0]; - bottomLeft = (CBC_ResultPoint*)(*patterns)[2]; - } else { - topLeft = (CBC_ResultPoint*)(*patterns)[2]; - topRight = (CBC_ResultPoint*)(*patterns)[0]; - bottomLeft = (CBC_ResultPoint*)(*patterns)[1]; - } - if ((bottomLeft->GetY() - topLeft->GetY()) * - (topRight->GetX() - topLeft->GetX()) < - (bottomLeft->GetX() - topLeft->GetX()) * - (topRight->GetY() - topLeft->GetY())) { - CBC_ResultPoint* temp = topRight; - topRight = bottomLeft; - bottomLeft = temp; - } - (*patterns)[0] = bottomLeft; - (*patterns)[1] = topLeft; - (*patterns)[2] = topRight; -} diff --git a/xfa/src/fxbarcode/datamatrix/BC_DataMatrixDetector.h b/xfa/src/fxbarcode/datamatrix/BC_DataMatrixDetector.h deleted file mode 100644 index 34cbcb9418..0000000000 --- a/xfa/src/fxbarcode/datamatrix/BC_DataMatrixDetector.h +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_DATAMATRIX_BC_DATAMATRIXDETECTOR_H_ -#define XFA_SRC_FXBARCODE_DATAMATRIX_BC_DATAMATRIXDETECTOR_H_ - -#include "core/include/fxcrt/fx_basic.h" - -class CBC_CommonBitMatrix; -class CBC_WhiteRectangleDetector; -class CBC_ResultPoint; -class CBC_QRDetectorResult; -class CBC_DataMatrixDetector; -class ResultPointsAndTransitions; -class CBC_ResultPointsAndTransitions { - public: - CBC_ResultPointsAndTransitions(CBC_ResultPoint* from, - CBC_ResultPoint* to, - int32_t transitions) { - m_from = from; - m_to = to; - m_transitions = transitions; - } - ~CBC_ResultPointsAndTransitions() {} - CBC_ResultPoint* GetFrom() { return m_from; } - CBC_ResultPoint* GetTo() { return m_to; } - int32_t GetTransitions() { return m_transitions; } - - private: - CBC_ResultPoint* m_from; - CBC_ResultPoint* m_to; - int32_t m_transitions; -}; -class CBC_DataMatrixDetector { - public: - CBC_DataMatrixDetector(CBC_CommonBitMatrix* image); - virtual ~CBC_DataMatrixDetector(); - CBC_QRDetectorResult* Detect(int32_t& e); - CBC_ResultPoint* CorrectTopRightRectangular(CBC_ResultPoint* bottomLeft, - CBC_ResultPoint* bottomRight, - CBC_ResultPoint* topLeft, - CBC_ResultPoint* topRight, - int32_t dimensionTop, - int32_t dimensionRight); - CBC_ResultPoint* CorrectTopRight(CBC_ResultPoint* bottomLeft, - CBC_ResultPoint* bottomRight, - CBC_ResultPoint* topLeft, - CBC_ResultPoint* topRight, - int32_t dimension); - CBC_CommonBitMatrix* SampleGrid(CBC_CommonBitMatrix* image, - CBC_ResultPoint* topLeft, - CBC_ResultPoint* bottomLeft, - CBC_ResultPoint* bottomRight, - CBC_ResultPoint* topRight, - int32_t dimensionX, - int32_t dimensionY, - int32_t& e); - CBC_ResultPointsAndTransitions* TransitionsBetween(CBC_ResultPoint* from, - CBC_ResultPoint* to); - FX_BOOL IsValid(CBC_ResultPoint* p); - int32_t Distance(CBC_ResultPoint* a, CBC_ResultPoint* b); - void Increment(CFX_MapPtrTemplate& table, - CBC_ResultPoint* key); - int32_t Round(FX_FLOAT d); - void OrderBestPatterns(CFX_PtrArray* patterns); - virtual void Init(int32_t& e); - - private: - static const int32_t INTEGERS[5]; - - CBC_CommonBitMatrix* m_image; - CBC_WhiteRectangleDetector* m_rectangleDetector; -}; - -#endif // XFA_SRC_FXBARCODE_DATAMATRIX_BC_DATAMATRIXDETECTOR_H_ diff --git a/xfa/src/fxbarcode/datamatrix/BC_DataMatrixReader.cpp b/xfa/src/fxbarcode/datamatrix/BC_DataMatrixReader.cpp deleted file mode 100644 index 36a238b007..0000000000 --- a/xfa/src/fxbarcode/datamatrix/BC_DataMatrixReader.cpp +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2007 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/datamatrix/BC_DataMatrixReader.h" - -#include - -#include "xfa/src/fxbarcode/BC_BinaryBitmap.h" -#include "xfa/src/fxbarcode/BC_Reader.h" -#include "xfa/src/fxbarcode/common/BC_CommonDecoderResult.h" -#include "xfa/src/fxbarcode/datamatrix/BC_DataMatrixDecoder.h" -#include "xfa/src/fxbarcode/datamatrix/BC_DataMatrixDetector.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRDetectorResult.h" -#include "xfa/src/fxbarcode/utils.h" - -CBC_DataMatrixReader::CBC_DataMatrixReader() { - m_decoder = NULL; -} -void CBC_DataMatrixReader::Init() { - m_decoder = new CBC_DataMatrixDecoder; - m_decoder->Init(); -} -CBC_DataMatrixReader::~CBC_DataMatrixReader() { - delete m_decoder; -} -CFX_ByteString CBC_DataMatrixReader::Decode(CBC_BinaryBitmap* image, - int32_t hints, - int32_t& e) { - CBC_CommonBitMatrix* cdr = image->GetBlackMatrix(e); - BC_EXCEPTION_CHECK_ReturnValue(e, ""); - CBC_DataMatrixDetector detector(cdr); - detector.Init(e); - BC_EXCEPTION_CHECK_ReturnValue(e, ""); - std::unique_ptr detectorResult(detector.Detect(e)); - BC_EXCEPTION_CHECK_ReturnValue(e, ""); - std::unique_ptr decodeResult( - m_decoder->Decode(detectorResult->GetBits(), e)); - BC_EXCEPTION_CHECK_ReturnValue(e, ""); - return decodeResult->GetText(); -} -CFX_ByteString CBC_DataMatrixReader::Decode(CBC_BinaryBitmap* image, - int32_t& e) { - CFX_ByteString bs = Decode(image, 0, e); - BC_EXCEPTION_CHECK_ReturnValue(e, ""); - return bs; -} diff --git a/xfa/src/fxbarcode/datamatrix/BC_DataMatrixReader.h b/xfa/src/fxbarcode/datamatrix/BC_DataMatrixReader.h deleted file mode 100644 index 5389c4857b..0000000000 --- a/xfa/src/fxbarcode/datamatrix/BC_DataMatrixReader.h +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_DATAMATRIX_BC_DATAMATRIXREADER_H_ -#define XFA_SRC_FXBARCODE_DATAMATRIX_BC_DATAMATRIXREADER_H_ - -#include "xfa/src/fxbarcode/BC_Reader.h" - -class CBC_BinaryBitmap; -class CBC_DataMatrixDecoder; - -class CBC_DataMatrixReader : public CBC_Reader { - public: - CBC_DataMatrixReader(); - virtual ~CBC_DataMatrixReader(); - CFX_ByteString Decode(CBC_BinaryBitmap* image, int32_t& e); - CFX_ByteString Decode(CBC_BinaryBitmap* image, int hints, int32_t& e); - - virtual void Init(); - - private: - CBC_DataMatrixDecoder* m_decoder; -}; - -#endif // XFA_SRC_FXBARCODE_DATAMATRIX_BC_DATAMATRIXREADER_H_ diff --git a/xfa/src/fxbarcode/datamatrix/BC_DataMatrixSymbolInfo144.cpp b/xfa/src/fxbarcode/datamatrix/BC_DataMatrixSymbolInfo144.cpp deleted file mode 100644 index 2e7685dbb6..0000000000 --- a/xfa/src/fxbarcode/datamatrix/BC_DataMatrixSymbolInfo144.cpp +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2006 Jeremias Maerki - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/datamatrix/BC_DataMatrixSymbolInfo144.h" -#include "xfa/src/fxbarcode/datamatrix/BC_Encoder.h" -#include "xfa/src/fxbarcode/datamatrix/BC_SymbolInfo.h" -#include "xfa/src/fxbarcode/datamatrix/BC_SymbolShapeHint.h" - -CBC_DataMatrixSymbolInfo144::CBC_DataMatrixSymbolInfo144() - : CBC_SymbolInfo(FALSE, 1558, 620, 22, 22, 36) { - m_rsBlockData = -1; - m_rsBlockError = 62; -} -CBC_DataMatrixSymbolInfo144::~CBC_DataMatrixSymbolInfo144() {} -int32_t CBC_DataMatrixSymbolInfo144::getInterleavedBlockCount() { - return 10; -} -int32_t CBC_DataMatrixSymbolInfo144getDataLengthForInterleavedBlock( - int32_t index) { - return (index <= 8) ? 156 : 155; -} diff --git a/xfa/src/fxbarcode/datamatrix/BC_DataMatrixSymbolInfo144.h b/xfa/src/fxbarcode/datamatrix/BC_DataMatrixSymbolInfo144.h deleted file mode 100644 index 607e8937cd..0000000000 --- a/xfa/src/fxbarcode/datamatrix/BC_DataMatrixSymbolInfo144.h +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_DATAMATRIX_BC_DATAMATRIXSYMBOLINFO144_H_ -#define XFA_SRC_FXBARCODE_DATAMATRIX_BC_DATAMATRIXSYMBOLINFO144_H_ - -#include "xfa/src/fxbarcode/datamatrix/BC_SymbolInfo.h" - -class CBC_DataMatrixSymbolInfo144 : public CBC_SymbolInfo { - public: - CBC_DataMatrixSymbolInfo144(); - virtual ~CBC_DataMatrixSymbolInfo144(); - int32_t getInterleavedBlockCount(); - int32_t getDataLengthForInterleavedBlock(int32_t index); -}; - -#endif // XFA_SRC_FXBARCODE_DATAMATRIX_BC_DATAMATRIXSYMBOLINFO144_H_ diff --git a/xfa/src/fxbarcode/datamatrix/BC_DataMatrixVersion.cpp b/xfa/src/fxbarcode/datamatrix/BC_DataMatrixVersion.cpp deleted file mode 100644 index 4fb3a3fad6..0000000000 --- a/xfa/src/fxbarcode/datamatrix/BC_DataMatrixVersion.cpp +++ /dev/null @@ -1,173 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2007 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include - -#include "xfa/src/fxbarcode/datamatrix/BC_DataMatrixVersion.h" -#include "xfa/src/fxbarcode/utils.h" - -CFX_PtrArray* CBC_DataMatrixVersion::VERSIONS = NULL; - -void CBC_DataMatrixVersion::Initialize() { - VERSIONS = new CFX_PtrArray(); -} -void CBC_DataMatrixVersion::Finalize() { - for (int32_t i = 0; i < VERSIONS->GetSize(); i++) { - delete ((CBC_DataMatrixVersion*)(VERSIONS->GetAt(i))); - } - VERSIONS->RemoveAll(); - delete VERSIONS; -} -CBC_DataMatrixVersion::CBC_DataMatrixVersion(int32_t versionNumber, - int32_t symbolSizeRows, - int32_t symbolSizeColumns, - int32_t dataRegionSizeRows, - int32_t dataRegionSizeColumns, - ECBlocks* ecBlocks) { - m_versionNumber = versionNumber; - m_symbolSizeRows = symbolSizeRows; - m_symbolSizeColumns = symbolSizeColumns; - m_dataRegionSizeRows = dataRegionSizeRows; - m_dataRegionSizeColumns = dataRegionSizeColumns; - m_ecBlocks = ecBlocks; - int32_t total = 0; - int32_t ecCodewords = ecBlocks->GetECCodewords(); - const CFX_PtrArray& ecbArray = ecBlocks->GetECBlocks(); - for (int32_t i = 0; i < ecbArray.GetSize(); i++) { - total += ((ECB*)ecbArray[i])->GetCount() * - (((ECB*)ecbArray[i])->GetDataCodewords() + ecCodewords); - } - m_totalCodewords = total; -} -CBC_DataMatrixVersion::~CBC_DataMatrixVersion() { - delete m_ecBlocks; -} -int32_t CBC_DataMatrixVersion::GetVersionNumber() { - return m_versionNumber; -} -int32_t CBC_DataMatrixVersion::GetSymbolSizeRows() { - return m_symbolSizeRows; -} -int32_t CBC_DataMatrixVersion::GetSymbolSizeColumns() { - return m_symbolSizeColumns; -} -int32_t CBC_DataMatrixVersion::GetDataRegionSizeRows() { - return m_dataRegionSizeRows; -} -int32_t CBC_DataMatrixVersion::GetDataRegionSizeColumns() { - return m_dataRegionSizeColumns; -} -int32_t CBC_DataMatrixVersion::GetTotalCodewords() { - return m_totalCodewords; -} -ECBlocks* CBC_DataMatrixVersion::GetECBlocks() { - return m_ecBlocks; -} -void CBC_DataMatrixVersion::ReleaseAll() { - for (int32_t i = 0; i < VERSIONS->GetSize(); i++) { - delete (CBC_DataMatrixVersion*)VERSIONS->GetAt(i); - } - VERSIONS->RemoveAll(); -} -CBC_DataMatrixVersion* CBC_DataMatrixVersion::GetVersionForDimensions( - int32_t numRows, - int32_t numColumns, - int32_t& e) { - if ((numRows & 0x01) != 0 || (numColumns & 0x01) != 0) { - e = BCExceptionNotFound; - return NULL; - } - if (VERSIONS->GetSize() == 0) { - VERSIONS->Add(new CBC_DataMatrixVersion(1, 10, 10, 8, 8, - new ECBlocks(5, new ECB(1, 3)))); - VERSIONS->Add(new CBC_DataMatrixVersion(2, 12, 12, 10, 10, - new ECBlocks(7, new ECB(1, 5)))); - VERSIONS->Add(new CBC_DataMatrixVersion(3, 14, 14, 12, 12, - new ECBlocks(10, new ECB(1, 8)))); - VERSIONS->Add(new CBC_DataMatrixVersion(4, 16, 16, 14, 14, - new ECBlocks(12, new ECB(1, 12)))); - VERSIONS->Add(new CBC_DataMatrixVersion(5, 18, 18, 16, 16, - new ECBlocks(14, new ECB(1, 18)))); - VERSIONS->Add(new CBC_DataMatrixVersion(6, 20, 20, 18, 18, - new ECBlocks(18, new ECB(1, 22)))); - VERSIONS->Add(new CBC_DataMatrixVersion(7, 22, 22, 20, 20, - new ECBlocks(20, new ECB(1, 30)))); - VERSIONS->Add(new CBC_DataMatrixVersion(8, 24, 24, 22, 22, - new ECBlocks(24, new ECB(1, 36)))); - VERSIONS->Add(new CBC_DataMatrixVersion(9, 26, 26, 24, 24, - new ECBlocks(28, new ECB(1, 44)))); - VERSIONS->Add(new CBC_DataMatrixVersion(10, 32, 32, 14, 14, - new ECBlocks(36, new ECB(1, 62)))); - VERSIONS->Add(new CBC_DataMatrixVersion(11, 36, 36, 16, 16, - new ECBlocks(42, new ECB(1, 86)))); - VERSIONS->Add(new CBC_DataMatrixVersion(12, 40, 40, 18, 18, - new ECBlocks(48, new ECB(1, 114)))); - VERSIONS->Add(new CBC_DataMatrixVersion(13, 44, 44, 20, 20, - new ECBlocks(56, new ECB(1, 144)))); - VERSIONS->Add(new CBC_DataMatrixVersion(14, 48, 48, 22, 22, - new ECBlocks(68, new ECB(1, 174)))); - VERSIONS->Add(new CBC_DataMatrixVersion(15, 52, 52, 24, 24, - new ECBlocks(42, new ECB(2, 102)))); - VERSIONS->Add(new CBC_DataMatrixVersion(16, 64, 64, 14, 14, - new ECBlocks(56, new ECB(2, 140)))); - VERSIONS->Add(new CBC_DataMatrixVersion(17, 72, 72, 16, 16, - new ECBlocks(36, new ECB(4, 92)))); - VERSIONS->Add(new CBC_DataMatrixVersion(18, 80, 80, 18, 18, - new ECBlocks(48, new ECB(4, 114)))); - VERSIONS->Add(new CBC_DataMatrixVersion(19, 88, 88, 20, 20, - new ECBlocks(56, new ECB(4, 144)))); - VERSIONS->Add(new CBC_DataMatrixVersion(20, 96, 96, 22, 22, - new ECBlocks(68, new ECB(4, 174)))); - VERSIONS->Add(new CBC_DataMatrixVersion(21, 104, 104, 24, 24, - new ECBlocks(56, new ECB(6, 136)))); - VERSIONS->Add(new CBC_DataMatrixVersion(22, 120, 120, 18, 18, - new ECBlocks(68, new ECB(6, 175)))); - VERSIONS->Add(new CBC_DataMatrixVersion(23, 132, 132, 20, 20, - new ECBlocks(62, new ECB(8, 163)))); - VERSIONS->Add(new CBC_DataMatrixVersion( - 24, 144, 144, 22, 22, - new ECBlocks(62, new ECB(8, 156), new ECB(2, 155)))); - VERSIONS->Add(new CBC_DataMatrixVersion(25, 8, 18, 6, 16, - new ECBlocks(7, new ECB(1, 5)))); - VERSIONS->Add(new CBC_DataMatrixVersion(26, 8, 32, 6, 14, - new ECBlocks(11, new ECB(1, 10)))); - VERSIONS->Add(new CBC_DataMatrixVersion(27, 12, 26, 10, 24, - new ECBlocks(14, new ECB(1, 16)))); - VERSIONS->Add(new CBC_DataMatrixVersion(28, 12, 36, 10, 16, - new ECBlocks(18, new ECB(1, 22)))); - VERSIONS->Add(new CBC_DataMatrixVersion(29, 16, 36, 14, 16, - new ECBlocks(24, new ECB(1, 32)))); - VERSIONS->Add(new CBC_DataMatrixVersion(30, 16, 48, 14, 22, - new ECBlocks(28, new ECB(1, 49)))); - } - int32_t numVersions = VERSIONS->GetSize(); - for (int32_t i = 0; i < numVersions; ++i) { - if (((CBC_DataMatrixVersion*)((*VERSIONS)[i]))->m_symbolSizeRows == - numRows && - ((CBC_DataMatrixVersion*)((*VERSIONS)[i]))->m_symbolSizeColumns == - numColumns) { - return (CBC_DataMatrixVersion*)(*VERSIONS)[i]; - } - } - e = BCExceptionNotFound; - return NULL; -} diff --git a/xfa/src/fxbarcode/datamatrix/BC_DataMatrixVersion.h b/xfa/src/fxbarcode/datamatrix/BC_DataMatrixVersion.h deleted file mode 100644 index 0a29e2b49c..0000000000 --- a/xfa/src/fxbarcode/datamatrix/BC_DataMatrixVersion.h +++ /dev/null @@ -1,92 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_DATAMATRIX_BC_DATAMATRIXVERSION_H_ -#define XFA_SRC_FXBARCODE_DATAMATRIX_BC_DATAMATRIXVERSION_H_ - -#include "core/include/fxcrt/fx_basic.h" - -class CBC_DataMatrixVersion; - -class ECB { - public: - ECB(int32_t count, int32_t dataCodewords) { - m_count = count; - m_dataCodewords = dataCodewords; - } - - int32_t GetCount() { return m_count; } - - int32_t GetDataCodewords() { return m_dataCodewords; } - - private: - int32_t m_count; - int32_t m_dataCodewords; -}; - -class ECBlocks { - public: - ECBlocks(int32_t ecCodewords, ECB* ecBlocks) { - m_ecCodewords = ecCodewords; - m_ecBlocks.Add(ecBlocks); - } - - ECBlocks(int32_t ecCodewords, ECB* ecBlocks1, ECB* ecBlocks2) { - m_ecCodewords = ecCodewords; - m_ecBlocks.Add(ecBlocks1); - m_ecBlocks.Add(ecBlocks2); - } - ~ECBlocks() { - for (int32_t i = 0; i < m_ecBlocks.GetSize(); i++) { - delete (ECB*)m_ecBlocks[i]; - } - m_ecBlocks.RemoveAll(); - } - - int32_t GetECCodewords() { return m_ecCodewords; } - - const CFX_PtrArray& GetECBlocks() { return m_ecBlocks; } - - private: - int32_t m_ecCodewords; - CFX_PtrArray m_ecBlocks; -}; - -class CBC_DataMatrixVersion { - public: - CBC_DataMatrixVersion(int32_t versionNumber, - int32_t symbolSizeRows, - int32_t symbolSizeColumns, - int32_t dataRegionSizeRows, - int32_t dataRegionSizeColumns, - ECBlocks* ecBlocks); - virtual ~CBC_DataMatrixVersion(); - static void Initialize(); - static void Finalize(); - int32_t GetVersionNumber(); - int32_t GetSymbolSizeRows(); - int32_t GetSymbolSizeColumns(); - int32_t GetDataRegionSizeRows(); - int32_t GetDataRegionSizeColumns(); - int32_t GetTotalCodewords(); - ECBlocks* GetECBlocks(); - static CBC_DataMatrixVersion* GetVersionForDimensions(int32_t numRows, - int32_t numColumns, - int32_t& e); - static void ReleaseAll(); - - private: - int32_t m_versionNumber; - int32_t m_symbolSizeRows; - int32_t m_symbolSizeColumns; - int32_t m_dataRegionSizeRows; - int32_t m_dataRegionSizeColumns; - ECBlocks* m_ecBlocks; - int32_t m_totalCodewords; - static CFX_PtrArray* VERSIONS; -}; - -#endif // XFA_SRC_FXBARCODE_DATAMATRIX_BC_DATAMATRIXVERSION_H_ diff --git a/xfa/src/fxbarcode/datamatrix/BC_DataMatrixWriter.cpp b/xfa/src/fxbarcode/datamatrix/BC_DataMatrixWriter.cpp deleted file mode 100644 index 5a6a082808..0000000000 --- a/xfa/src/fxbarcode/datamatrix/BC_DataMatrixWriter.cpp +++ /dev/null @@ -1,136 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2008 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/BC_BinaryBitmap.h" -#include "xfa/src/fxbarcode/BC_Dimension.h" -#include "xfa/src/fxbarcode/BC_TwoDimWriter.h" -#include "xfa/src/fxbarcode/BC_UtilCodingConvert.h" -#include "xfa/src/fxbarcode/BC_Writer.h" -#include "xfa/src/fxbarcode/common/BC_CommonBitMatrix.h" -#include "xfa/src/fxbarcode/common/BC_CommonByteMatrix.h" -#include "xfa/src/fxbarcode/datamatrix/BC_ASCIIEncoder.h" -#include "xfa/src/fxbarcode/datamatrix/BC_Base256Encoder.h" -#include "xfa/src/fxbarcode/datamatrix/BC_C40Encoder.h" -#include "xfa/src/fxbarcode/datamatrix/BC_DataMatrixSymbolInfo144.h" -#include "xfa/src/fxbarcode/datamatrix/BC_DataMatrixWriter.h" -#include "xfa/src/fxbarcode/datamatrix/BC_DefaultPlacement.h" -#include "xfa/src/fxbarcode/datamatrix/BC_EdifactEncoder.h" -#include "xfa/src/fxbarcode/datamatrix/BC_Encoder.h" -#include "xfa/src/fxbarcode/datamatrix/BC_EncoderContext.h" -#include "xfa/src/fxbarcode/datamatrix/BC_ErrorCorrection.h" -#include "xfa/src/fxbarcode/datamatrix/BC_HighLevelEncoder.h" -#include "xfa/src/fxbarcode/datamatrix/BC_SymbolInfo.h" -#include "xfa/src/fxbarcode/datamatrix/BC_SymbolShapeHint.h" -#include "xfa/src/fxbarcode/datamatrix/BC_TextEncoder.h" -#include "xfa/src/fxbarcode/datamatrix/BC_X12Encoder.h" - -CBC_DataMatrixWriter::CBC_DataMatrixWriter() {} -CBC_DataMatrixWriter::~CBC_DataMatrixWriter() {} -FX_BOOL CBC_DataMatrixWriter::SetErrorCorrectionLevel(int32_t level) { - m_iCorrectLevel = level; - return TRUE; -} -uint8_t* CBC_DataMatrixWriter::Encode(const CFX_WideString& contents, - int32_t& outWidth, - int32_t& outHeight, - int32_t& e) { - if (outWidth < 0 || outHeight < 0) { - e = BCExceptionHeightAndWidthMustBeAtLeast1; - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - } - CBC_SymbolShapeHint::SymbolShapeHint shape = - CBC_SymbolShapeHint::FORCE_SQUARE; - CBC_Dimension* minSize = NULL; - CBC_Dimension* maxSize = NULL; - CFX_WideString ecLevel; - CFX_WideString encoded = CBC_HighLevelEncoder::encodeHighLevel( - contents, ecLevel, shape, minSize, maxSize, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - CBC_SymbolInfo* symbolInfo = CBC_SymbolInfo::lookup( - encoded.GetLength(), shape, minSize, maxSize, TRUE, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - CFX_WideString codewords = - CBC_ErrorCorrection::encodeECC200(encoded, symbolInfo, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - CBC_DefaultPlacement* placement = - new CBC_DefaultPlacement(codewords, symbolInfo->getSymbolDataWidth(e), - symbolInfo->getSymbolDataHeight(e)); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - placement->place(); - CBC_CommonByteMatrix* bytematrix = encodeLowLevel(placement, symbolInfo, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - outWidth = bytematrix->GetWidth(); - outHeight = bytematrix->GetHeight(); - uint8_t* result = FX_Alloc2D(uint8_t, outWidth, outHeight); - FXSYS_memcpy(result, bytematrix->GetArray(), outWidth * outHeight); - delete bytematrix; - delete placement; - return result; -} -CBC_CommonByteMatrix* CBC_DataMatrixWriter::encodeLowLevel( - CBC_DefaultPlacement* placement, - CBC_SymbolInfo* symbolInfo, - int32_t& e) { - int32_t symbolWidth = symbolInfo->getSymbolDataWidth(e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - int32_t symbolHeight = symbolInfo->getSymbolDataHeight(e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - CBC_CommonByteMatrix* matrix = new CBC_CommonByteMatrix( - symbolInfo->getSymbolWidth(e), symbolInfo->getSymbolHeight(e)); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - matrix->Init(); - int32_t matrixY = 0; - for (int32_t y = 0; y < symbolHeight; y++) { - int32_t matrixX; - if ((y % symbolInfo->m_matrixHeight) == 0) { - matrixX = 0; - for (int32_t x = 0; x < symbolInfo->getSymbolWidth(e); x++) { - matrix->Set(matrixX, matrixY, (x % 2) == 0); - matrixX++; - } - matrixY++; - } - matrixX = 0; - for (int32_t x = 0; x < symbolWidth; x++) { - if ((x % symbolInfo->m_matrixWidth) == 0) { - matrix->Set(matrixX, matrixY, TRUE); - matrixX++; - } - matrix->Set(matrixX, matrixY, placement->getBit(x, y)); - matrixX++; - if ((x % symbolInfo->m_matrixWidth) == symbolInfo->m_matrixWidth - 1) { - matrix->Set(matrixX, matrixY, (y % 2) == 0); - matrixX++; - } - } - matrixY++; - if ((y % symbolInfo->m_matrixHeight) == symbolInfo->m_matrixHeight - 1) { - matrixX = 0; - for (int32_t x = 0; x < symbolInfo->getSymbolWidth(e); x++) { - matrix->Set(matrixX, matrixY, TRUE); - matrixX++; - } - matrixY++; - } - } - return matrix; -} diff --git a/xfa/src/fxbarcode/datamatrix/BC_DataMatrixWriter.h b/xfa/src/fxbarcode/datamatrix/BC_DataMatrixWriter.h deleted file mode 100644 index d1abbbc451..0000000000 --- a/xfa/src/fxbarcode/datamatrix/BC_DataMatrixWriter.h +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_DATAMATRIX_BC_DATAMATRIXWRITER_H_ -#define XFA_SRC_FXBARCODE_DATAMATRIX_BC_DATAMATRIXWRITER_H_ - -#include "xfa/src/fxbarcode/BC_TwoDimWriter.h" - -class CBC_CommonByteMatrix; -class CBC_DefaultPlacement; -class CBC_SymbolInfo; - -class CBC_DataMatrixWriter : public CBC_TwoDimWriter { - public: - CBC_DataMatrixWriter(); - virtual ~CBC_DataMatrixWriter(); - uint8_t* Encode(const CFX_WideString& contents, - int32_t& outWidth, - int32_t& outHeight, - int32_t& e); - FX_BOOL SetErrorCorrectionLevel(int32_t level); - - private: - static CBC_CommonByteMatrix* encodeLowLevel(CBC_DefaultPlacement* placement, - CBC_SymbolInfo* symbolInfo, - int32_t& e); - int32_t m_iCorrectLevel; -}; - -#endif // XFA_SRC_FXBARCODE_DATAMATRIX_BC_DATAMATRIXWRITER_H_ diff --git a/xfa/src/fxbarcode/datamatrix/BC_DefaultPlacement.cpp b/xfa/src/fxbarcode/datamatrix/BC_DefaultPlacement.cpp deleted file mode 100644 index f021b75282..0000000000 --- a/xfa/src/fxbarcode/datamatrix/BC_DefaultPlacement.cpp +++ /dev/null @@ -1,164 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2006 Jeremias Maerki. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/datamatrix/BC_DefaultPlacement.h" -#include "xfa/src/fxbarcode/datamatrix/BC_Encoder.h" - -CBC_DefaultPlacement::CBC_DefaultPlacement(CFX_WideString codewords, - int32_t numcols, - int32_t numrows) { - m_codewords = codewords; - m_numcols = numcols; - m_numrows = numrows; - m_bits.SetSize(numcols * numrows); - for (int32_t i = 0; i < numcols * numrows; i++) { - m_bits[i] = (uint8_t)2; - } -} -CBC_DefaultPlacement::~CBC_DefaultPlacement() { - m_bits.RemoveAll(); -} -int32_t CBC_DefaultPlacement::getNumrows() { - return m_numrows; -} -int32_t CBC_DefaultPlacement::getNumcols() { - return m_numcols; -} -CFX_ByteArray& CBC_DefaultPlacement::getBits() { - return m_bits; -} -FX_BOOL CBC_DefaultPlacement::getBit(int32_t col, int32_t row) { - return m_bits[row * m_numcols + col] == 1; -} -void CBC_DefaultPlacement::setBit(int32_t col, int32_t row, FX_BOOL bit) { - m_bits[row * m_numcols + col] = bit ? (uint8_t)1 : (uint8_t)0; -} -FX_BOOL CBC_DefaultPlacement::hasBit(int32_t col, int32_t row) { - return m_bits[row * m_numcols + col] != 2; -} -void CBC_DefaultPlacement::place() { - int32_t pos = 0; - int32_t row = 4; - int32_t col = 0; - do { - if ((row == m_numrows) && (col == 0)) { - corner1(pos++); - } - if ((row == m_numrows - 2) && (col == 0) && ((m_numcols % 4) != 0)) { - corner2(pos++); - } - if ((row == m_numrows - 2) && (col == 0) && (m_numcols % 8 == 4)) { - corner3(pos++); - } - if ((row == m_numrows + 4) && (col == 2) && ((m_numcols % 8) == 0)) { - corner4(pos++); - } - do { - if ((row < m_numrows) && (col >= 0) && !hasBit(col, row)) { - utah(row, col, pos++); - } - row -= 2; - col += 2; - } while (row >= 0 && (col < m_numcols)); - row++; - col += 3; - do { - if ((row >= 0) && (col < m_numcols) && !hasBit(col, row)) { - utah(row, col, pos++); - } - row += 2; - col -= 2; - } while ((row < m_numrows) && (col >= 0)); - row += 3; - col++; - } while ((row < m_numrows) || (col < m_numcols)); - if (!hasBit(m_numcols - 1, m_numrows - 1)) { - setBit(m_numcols - 1, m_numrows - 1, TRUE); - setBit(m_numcols - 2, m_numrows - 2, TRUE); - } -} -void CBC_DefaultPlacement::module(int32_t row, - int32_t col, - int32_t pos, - int32_t bit) { - if (row < 0) { - row += m_numrows; - col += 4 - ((m_numrows + 4) % 8); - } - if (col < 0) { - col += m_numcols; - row += 4 - ((m_numcols + 4) % 8); - } - int32_t v = m_codewords.GetAt(pos); - v &= 1 << (8 - bit); - setBit(col, row, v != 0); -} -void CBC_DefaultPlacement::utah(int32_t row, int32_t col, int32_t pos) { - module(row - 2, col - 2, pos, 1); - module(row - 2, col - 1, pos, 2); - module(row - 1, col - 2, pos, 3); - module(row - 1, col - 1, pos, 4); - module(row - 1, col, pos, 5); - module(row, col - 2, pos, 6); - module(row, col - 1, pos, 7); - module(row, col, pos, 8); -} -void CBC_DefaultPlacement::corner1(int32_t pos) { - module(m_numrows - 1, 0, pos, 1); - module(m_numrows - 1, 1, pos, 2); - module(m_numrows - 1, 2, pos, 3); - module(0, m_numcols - 2, pos, 4); - module(0, m_numcols - 1, pos, 5); - module(1, m_numcols - 1, pos, 6); - module(2, m_numcols - 1, pos, 7); - module(3, m_numcols - 1, pos, 8); -} -void CBC_DefaultPlacement::corner2(int32_t pos) { - module(m_numrows - 3, 0, pos, 1); - module(m_numrows - 2, 0, pos, 2); - module(m_numrows - 1, 0, pos, 3); - module(0, m_numcols - 4, pos, 4); - module(0, m_numcols - 3, pos, 5); - module(0, m_numcols - 2, pos, 6); - module(0, m_numcols - 1, pos, 7); - module(1, m_numcols - 1, pos, 8); -} -void CBC_DefaultPlacement::corner3(int32_t pos) { - module(m_numrows - 3, 0, pos, 1); - module(m_numrows - 2, 0, pos, 2); - module(m_numrows - 1, 0, pos, 3); - module(0, m_numcols - 2, pos, 4); - module(0, m_numcols - 1, pos, 5); - module(1, m_numcols - 1, pos, 6); - module(2, m_numcols - 1, pos, 7); - module(3, m_numcols - 1, pos, 8); -} -void CBC_DefaultPlacement::corner4(int32_t pos) { - module(m_numrows - 1, 0, pos, 1); - module(m_numrows - 1, m_numcols - 1, pos, 2); - module(0, m_numcols - 3, pos, 3); - module(0, m_numcols - 2, pos, 4); - module(0, m_numcols - 1, pos, 5); - module(1, m_numcols - 3, pos, 6); - module(1, m_numcols - 2, pos, 7); - module(1, m_numcols - 1, pos, 8); -} diff --git a/xfa/src/fxbarcode/datamatrix/BC_DefaultPlacement.h b/xfa/src/fxbarcode/datamatrix/BC_DefaultPlacement.h deleted file mode 100644 index be67f3c05a..0000000000 --- a/xfa/src/fxbarcode/datamatrix/BC_DefaultPlacement.h +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_DATAMATRIX_BC_DEFAULTPLACEMENT_H_ -#define XFA_SRC_FXBARCODE_DATAMATRIX_BC_DEFAULTPLACEMENT_H_ - -#include "core/include/fxcrt/fx_basic.h" - -class CBC_DefaultPlacement { - public: - CBC_DefaultPlacement(CFX_WideString codewords, - int32_t numcols, - int32_t numrows); - virtual ~CBC_DefaultPlacement(); - - int32_t getNumrows(); - int32_t getNumcols(); - CFX_ByteArray& getBits(); - FX_BOOL getBit(int32_t col, int32_t row); - void setBit(int32_t col, int32_t row, FX_BOOL bit); - FX_BOOL hasBit(int32_t col, int32_t row); - void place(); - - private: - CFX_WideString m_codewords; - int32_t m_numrows; - int32_t m_numcols; - CFX_ByteArray m_bits; - void module(int32_t row, int32_t col, int32_t pos, int32_t bit); - void utah(int32_t row, int32_t col, int32_t pos); - void corner1(int32_t pos); - void corner2(int32_t pos); - void corner3(int32_t pos); - void corner4(int32_t pos); -}; - -#endif // XFA_SRC_FXBARCODE_DATAMATRIX_BC_DEFAULTPLACEMENT_H_ diff --git a/xfa/src/fxbarcode/datamatrix/BC_EdifactEncoder.cpp b/xfa/src/fxbarcode/datamatrix/BC_EdifactEncoder.cpp deleted file mode 100644 index 006c85117d..0000000000 --- a/xfa/src/fxbarcode/datamatrix/BC_EdifactEncoder.cpp +++ /dev/null @@ -1,154 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2006-2007 Jeremias Maerki. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/BC_Dimension.h" -#include "xfa/src/fxbarcode/common/BC_CommonBitMatrix.h" -#include "xfa/src/fxbarcode/datamatrix/BC_EdifactEncoder.h" -#include "xfa/src/fxbarcode/datamatrix/BC_Encoder.h" -#include "xfa/src/fxbarcode/datamatrix/BC_EncoderContext.h" -#include "xfa/src/fxbarcode/datamatrix/BC_HighLevelEncoder.h" -#include "xfa/src/fxbarcode/datamatrix/BC_SymbolInfo.h" -#include "xfa/src/fxbarcode/datamatrix/BC_SymbolShapeHint.h" - -CBC_EdifactEncoder::CBC_EdifactEncoder() {} -CBC_EdifactEncoder::~CBC_EdifactEncoder() {} -int32_t CBC_EdifactEncoder::getEncodingMode() { - return EDIFACT_ENCODATION; -} -void CBC_EdifactEncoder::Encode(CBC_EncoderContext& context, int32_t& e) { - CFX_WideString buffer; - while (context.hasMoreCharacters()) { - FX_WCHAR c = context.getCurrentChar(); - encodeChar(c, buffer, e); - if (e != BCExceptionNO) { - return; - } - context.m_pos++; - int32_t count = buffer.GetLength(); - if (count >= 4) { - context.writeCodewords(encodeToCodewords(buffer, 0, e)); - if (e != BCExceptionNO) { - return; - } - buffer.Delete(0, 4); - int32_t newMode = CBC_HighLevelEncoder::lookAheadTest( - context.m_msg, context.m_pos, getEncodingMode()); - if (newMode != getEncodingMode()) { - context.signalEncoderChange(ASCII_ENCODATION); - break; - } - } - } - buffer += (FX_WCHAR)31; - handleEOD(context, buffer, e); -} -void CBC_EdifactEncoder::handleEOD(CBC_EncoderContext& context, - CFX_WideString buffer, - int32_t& e) { - int32_t count = buffer.GetLength(); - if (count == 0) { - return; - } - if (count == 1) { - context.updateSymbolInfo(e); - if (e != BCExceptionNO) { - return; - } - int32_t available = - context.m_symbolInfo->m_dataCapacity - context.getCodewordCount(); - int32_t remaining = context.getRemainingCharacters(); - if (remaining == 0 && available <= 2) { - return; - } - } - if (count > 4) { - e = BCExceptionIllegalStateCountMustNotExceed4; - return; - } - int32_t restChars = count - 1; - CFX_WideString encoded = encodeToCodewords(buffer, 0, e); - if (e != BCExceptionNO) { - return; - } - FX_BOOL endOfSymbolReached = !context.hasMoreCharacters(); - FX_BOOL restInAscii = endOfSymbolReached && restChars <= 2; - if (restChars <= 2) { - context.updateSymbolInfo(context.getCodewordCount() + restChars, e); - if (e != BCExceptionNO) { - return; - } - int32_t available = - context.m_symbolInfo->m_dataCapacity - context.getCodewordCount(); - if (available >= 3) { - restInAscii = FALSE; - context.updateSymbolInfo(context.getCodewordCount() + encoded.GetLength(), - e); - if (e != BCExceptionNO) { - return; - } - } - } - if (restInAscii) { - context.resetSymbolInfo(); - context.m_pos -= restChars; - } else { - context.writeCodewords(encoded); - } - context.signalEncoderChange(ASCII_ENCODATION); -} -void CBC_EdifactEncoder::encodeChar(FX_WCHAR c, - CFX_WideString& sb, - int32_t& e) { - if (c >= ' ' && c <= '?') { - sb += c; - } else if (c >= '@' && c <= '^') { - sb += (FX_WCHAR)(c - 64); - } else { - CBC_HighLevelEncoder::illegalCharacter(c, e); - } -} -CFX_WideString CBC_EdifactEncoder::encodeToCodewords(CFX_WideString sb, - int32_t startPos, - int32_t& e) { - int32_t len = sb.GetLength() - startPos; - if (len == 0) { - e = BCExceptionNoContents; - return (FX_WCHAR*)""; - } - FX_WCHAR c1 = sb.GetAt(startPos); - FX_WCHAR c2 = len >= 2 ? sb.GetAt(startPos + 1) : 0; - FX_WCHAR c3 = len >= 3 ? sb.GetAt(startPos + 2) : 0; - FX_WCHAR c4 = len >= 4 ? sb.GetAt(startPos + 3) : 0; - int32_t v = (c1 << 18) + (c2 << 12) + (c3 << 6) + c4; - FX_WCHAR cw1 = (FX_WCHAR)((v >> 16) & 255); - FX_WCHAR cw2 = (FX_WCHAR)((v >> 8) & 255); - FX_WCHAR cw3 = (FX_WCHAR)(v & 255); - CFX_WideString res; - res += cw1; - if (len >= 2) { - res += cw2; - } - if (len >= 3) { - res += cw3; - } - return res; -} diff --git a/xfa/src/fxbarcode/datamatrix/BC_EdifactEncoder.h b/xfa/src/fxbarcode/datamatrix/BC_EdifactEncoder.h deleted file mode 100644 index 4d905edb63..0000000000 --- a/xfa/src/fxbarcode/datamatrix/BC_EdifactEncoder.h +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_DATAMATRIX_BC_EDIFACTENCODER_H_ -#define XFA_SRC_FXBARCODE_DATAMATRIX_BC_EDIFACTENCODER_H_ - -#include "xfa/src/fxbarcode/datamatrix/BC_Encoder.h" - -class CBC_EdifactEncoder : public CBC_Encoder { - public: - CBC_EdifactEncoder(); - virtual ~CBC_EdifactEncoder(); - int32_t getEncodingMode(); - void Encode(CBC_EncoderContext& context, int32_t& e); - - private: - static void handleEOD(CBC_EncoderContext& context, - CFX_WideString buffer, - int32_t& e); - static void encodeChar(FX_WCHAR c, CFX_WideString& sb, int32_t& e); - static CFX_WideString encodeToCodewords(CFX_WideString sb, - int32_t startPos, - int32_t& e); -}; - -#endif // XFA_SRC_FXBARCODE_DATAMATRIX_BC_EDIFACTENCODER_H_ diff --git a/xfa/src/fxbarcode/datamatrix/BC_Encoder.cpp b/xfa/src/fxbarcode/datamatrix/BC_Encoder.cpp deleted file mode 100644 index 5a5ca3f5a4..0000000000 --- a/xfa/src/fxbarcode/datamatrix/BC_Encoder.cpp +++ /dev/null @@ -1,10 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fxbarcode/datamatrix/BC_Encoder.h" - -CBC_Encoder::CBC_Encoder() {} -CBC_Encoder::~CBC_Encoder() {} diff --git a/xfa/src/fxbarcode/datamatrix/BC_Encoder.h b/xfa/src/fxbarcode/datamatrix/BC_Encoder.h deleted file mode 100644 index a11b19cc74..0000000000 --- a/xfa/src/fxbarcode/datamatrix/BC_Encoder.h +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_DATAMATRIX_BC_ENCODER_H_ -#define XFA_SRC_FXBARCODE_DATAMATRIX_BC_ENCODER_H_ - -#include "xfa/src/fxbarcode/utils.h" - -class CBC_EncoderContext; -class CBC_Encoder { - public: - CBC_Encoder(); - virtual ~CBC_Encoder(); - virtual int32_t getEncodingMode() = 0; - virtual void Encode(CBC_EncoderContext& context, int32_t& e) = 0; -}; - -#endif // XFA_SRC_FXBARCODE_DATAMATRIX_BC_ENCODER_H_ diff --git a/xfa/src/fxbarcode/datamatrix/BC_EncoderContext.cpp b/xfa/src/fxbarcode/datamatrix/BC_EncoderContext.cpp deleted file mode 100644 index 54aa5349b0..0000000000 --- a/xfa/src/fxbarcode/datamatrix/BC_EncoderContext.cpp +++ /dev/null @@ -1,111 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2006-2007 Jeremias Maerki. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/BC_Dimension.h" -#include "xfa/src/fxbarcode/BC_UtilCodingConvert.h" -#include "xfa/src/fxbarcode/common/BC_CommonBitMatrix.h" -#include "xfa/src/fxbarcode/datamatrix/BC_Encoder.h" -#include "xfa/src/fxbarcode/datamatrix/BC_EncoderContext.h" -#include "xfa/src/fxbarcode/datamatrix/BC_SymbolInfo.h" -#include "xfa/src/fxbarcode/datamatrix/BC_SymbolShapeHint.h" - -CBC_EncoderContext::CBC_EncoderContext(const CFX_WideString msg, - CFX_WideString ecLevel, - int32_t& e) { - CFX_ByteString dststr; - CBC_UtilCodingConvert::UnicodeToUTF8(msg, dststr); - CFX_WideString sb; - int32_t c = dststr.GetLength(); - for (int32_t i = 0; i < c; i++) { - FX_WCHAR ch = (FX_WCHAR)(dststr.GetAt(i) & 0xff); - if (ch == '?' && dststr.GetAt(i) != '?') { - e = BCExceptionCharactersOutsideISO88591Encoding; - } - sb += ch; - } - m_msg = sb; - m_shape = FORCE_NONE; - m_newEncoding = -1; - m_pos = 0; - m_symbolInfo = NULL; - m_skipAtEnd = 0; - m_maxSize = NULL; - m_minSize = NULL; -} -CBC_EncoderContext::~CBC_EncoderContext() {} -void CBC_EncoderContext::setSymbolShape(SymbolShapeHint shape) { - m_shape = shape; -} -void CBC_EncoderContext::setSizeConstraints(CBC_Dimension* minSize, - CBC_Dimension* maxSize) { - m_maxSize = maxSize; - m_minSize = minSize; -} -CFX_WideString CBC_EncoderContext::getMessage() { - return m_msg; -} -void CBC_EncoderContext::setSkipAtEnd(int32_t count) { - m_skipAtEnd = count; -} -FX_WCHAR CBC_EncoderContext::getCurrentChar() { - return m_msg.GetAt(m_pos); -} -FX_WCHAR CBC_EncoderContext::getCurrent() { - return m_msg.GetAt(m_pos); -} -void CBC_EncoderContext::writeCodewords(CFX_WideString codewords) { - m_codewords += codewords; -} -void CBC_EncoderContext::writeCodeword(FX_WCHAR codeword) { - m_codewords += codeword; -} -int32_t CBC_EncoderContext::getCodewordCount() { - return m_codewords.GetLength(); -} -void CBC_EncoderContext::signalEncoderChange(int32_t encoding) { - m_newEncoding = encoding; -} -void CBC_EncoderContext::resetEncoderSignal() { - m_newEncoding = -1; -} -FX_BOOL CBC_EncoderContext::hasMoreCharacters() { - return m_pos < getTotalMessageCharCount(); -} -int32_t CBC_EncoderContext::getRemainingCharacters() { - return getTotalMessageCharCount() - m_pos; -} -void CBC_EncoderContext::updateSymbolInfo(int32_t& e) { - updateSymbolInfo(getCodewordCount(), e); -} -void CBC_EncoderContext::updateSymbolInfo(int32_t len, int32_t& e) { - if (m_symbolInfo == NULL || len > m_symbolInfo->m_dataCapacity) { - m_symbolInfo = - CBC_SymbolInfo::lookup(len, m_shape, m_minSize, m_maxSize, true, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - } -} -void CBC_EncoderContext::resetSymbolInfo() { - m_shape = FORCE_NONE; -} -int32_t CBC_EncoderContext::getTotalMessageCharCount() { - return m_msg.GetLength() - m_skipAtEnd; -} diff --git a/xfa/src/fxbarcode/datamatrix/BC_EncoderContext.h b/xfa/src/fxbarcode/datamatrix/BC_EncoderContext.h deleted file mode 100644 index 076581c7aa..0000000000 --- a/xfa/src/fxbarcode/datamatrix/BC_EncoderContext.h +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_DATAMATRIX_BC_ENCODERCONTEXT_H_ -#define XFA_SRC_FXBARCODE_DATAMATRIX_BC_ENCODERCONTEXT_H_ - -#include "xfa/src/fxbarcode/datamatrix/BC_SymbolShapeHint.h" - -class CBC_SymbolInfo; -class CBC_Dimension; - -class CBC_EncoderContext : public CBC_SymbolShapeHint { - public: - CBC_EncoderContext(const CFX_WideString msg, - CFX_WideString ecLevel, - int32_t& e); - virtual ~CBC_EncoderContext(); - void setSymbolShape(SymbolShapeHint shape); - void setSizeConstraints(CBC_Dimension* minSize, CBC_Dimension* maxSize); - CFX_WideString getMessage(); - void setSkipAtEnd(int32_t count); - FX_WCHAR getCurrentChar(); - FX_WCHAR getCurrent(); - void writeCodewords(CFX_WideString codewords); - void writeCodeword(FX_WCHAR codeword); - int32_t getCodewordCount(); - void signalEncoderChange(int32_t encoding); - void resetEncoderSignal(); - FX_BOOL hasMoreCharacters(); - int32_t getRemainingCharacters(); - void updateSymbolInfo(int32_t& e); - void updateSymbolInfo(int32_t len, int32_t& e); - void resetSymbolInfo(); - - public: - CFX_WideString m_msg; - CFX_WideString m_codewords; - int32_t m_pos; - int32_t m_newEncoding; - CBC_SymbolInfo* m_symbolInfo; - - private: - int32_t getTotalMessageCharCount(); - - private: - SymbolShapeHint m_shape; - CBC_Dimension* m_minSize; - CBC_Dimension* m_maxSize; - int32_t m_skipAtEnd; -}; - -#endif // XFA_SRC_FXBARCODE_DATAMATRIX_BC_ENCODERCONTEXT_H_ diff --git a/xfa/src/fxbarcode/datamatrix/BC_ErrorCorrection.cpp b/xfa/src/fxbarcode/datamatrix/BC_ErrorCorrection.cpp deleted file mode 100644 index d5ae9bf9bf..0000000000 --- a/xfa/src/fxbarcode/datamatrix/BC_ErrorCorrection.cpp +++ /dev/null @@ -1,175 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2006 Jeremias Maerki. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/datamatrix/BC_Encoder.h" -#include "xfa/src/fxbarcode/datamatrix/BC_ErrorCorrection.h" -#include "xfa/src/fxbarcode/datamatrix/BC_SymbolInfo.h" -#include "xfa/src/fxbarcode/datamatrix/BC_SymbolShapeHint.h" - -int32_t CBC_ErrorCorrection::FACTOR_SETS[] = {5, 7, 10, 11, 12, 14, 18, 20, - 24, 28, 36, 42, 48, 56, 62, 68}; -int32_t CBC_ErrorCorrection::FACTORS[][100] = { - {228, 48, 15, 111, 62}, - {23, 68, 144, 134, 240, 92, 254}, - {28, 24, 185, 166, 223, 248, 116, 255, 110, 61}, - {175, 138, 205, 12, 194, 168, 39, 245, 60, 97, 120}, - {41, 153, 158, 91, 61, 42, 142, 213, 97, 178, 100, 242}, - {156, 97, 192, 252, 95, 9, 157, 119, 138, 45, 18, 186, 83, 185}, - {83, 195, 100, 39, 188, 75, 66, 61, 241, 213, 109, 129, 94, 254, 225, 48, - 90, 188}, - {15, 195, 244, 9, 233, 71, 168, 2, 188, 160, 153, 145, 253, 79, 108, 82, 27, - 174, 186, 172}, - {52, 190, 88, 205, 109, 39, 176, 21, 155, 197, 251, 223, 155, 21, 5, 172, - 254, 124, 12, 181, 184, 96, 50, 193}, - {211, 231, 43, 97, 71, 96, 103, 174, 37, 151, 170, 53, 75, 34, 249, 121, 17, - 138, 110, 213, 141, 136, 120, 151, 233, 168, 93, 255}, - {245, 127, 242, 218, 130, 250, 162, 181, 102, 120, 84, 179, 220, 251, 80, - 182, 229, 18, 2, 4, 68, 33, 101, 137, 95, 119, 115, 44, 175, 184, 59, 25, - 225, 98, 81, 112}, - {77, 193, 137, 31, 19, 38, 22, 153, 247, 105, 122, 2, 245, 133, 242, 8, 175, - 95, 100, 9, 167, 105, 214, 111, 57, 121, 21, 1, 253, 57, 54, 101, 248, 202, - 69, 50, 150, 177, 226, 5, 9, 5}, - {245, 132, 172, 223, 96, 32, 117, 22, 238, 133, 238, 231, 205, 188, 237, 87, - 191, 106, 16, 147, 118, 23, 37, 90, 170, 205, 131, 88, 120, 100, 66, 138, - 186, 240, 82, 44, 176, 87, 187, 147, 160, 175, 69, 213, 92, 253, 225, 19}, - {175, 9, 223, 238, 12, 17, 220, 208, 100, 29, 175, 170, 230, 192, 215, 235, - 150, 159, 36, 223, 38, 200, 132, 54, 228, 146, 218, 234, 117, 203, 29, 232, - 144, 238, 22, 150, 201, 117, 62, 207, 164, 13, 137, 245, 127, 67, 247, 28, - 155, 43, 203, 107, 233, 53, 143, 46}, - {242, 93, 169, 50, 144, 210, 39, 118, 202, 188, 201, 189, 143, 108, 196, 37, - 185, 112, 134, 230, 245, 63, 197, 190, 250, 106, 185, 221, 175, 64, 114, - 71, 161, 44, 147, 6, 27, 218, 51, 63, 87, 10, 40, 130, 188, 17, 163, 31, - 176, 170, 4, 107, 232, 7, 94, 166, 224, 124, 86, 47, 11, 204}, - {220, 228, 173, 89, 251, 149, 159, 56, 89, 33, 147, 244, 154, 36, 73, 127, - 213, 136, 248, 180, 234, 197, 158, 177, 68, 122, 93, 213, 15, 160, 227, - 236, 66, 139, 153, 185, 202, 167, 179, 25, 220, 232, 96, 210, 231, 136, - 223, 239, 181, 241, 59, 52, 172, 25, 49, 232, 211, 189, 64, 54, 108, 153, - 132, 63, 96, 103, 82, 186}}; -int32_t CBC_ErrorCorrection::MODULO_VALUE = 0x12D; -int32_t CBC_ErrorCorrection::LOG[256] = {0}; -int32_t CBC_ErrorCorrection::ALOG[256] = {0}; -void CBC_ErrorCorrection::Initialize() { - int32_t p = 1; - for (int32_t i = 0; i < 255; i++) { - ALOG[i] = p; - LOG[p] = i; - p <<= 1; - if (p >= 256) { - p ^= MODULO_VALUE; - } - } -} -void CBC_ErrorCorrection::Finalize() {} -CBC_ErrorCorrection::CBC_ErrorCorrection() {} -CBC_ErrorCorrection::~CBC_ErrorCorrection() {} -CFX_WideString CBC_ErrorCorrection::encodeECC200(CFX_WideString codewords, - CBC_SymbolInfo* symbolInfo, - int32_t& e) { - if (codewords.GetLength() != symbolInfo->m_dataCapacity) { - e = BCExceptionIllegalArgument; - return (FX_WCHAR*)""; - } - CFX_WideString sb; - sb += codewords; - int32_t blockCount = symbolInfo->getInterleavedBlockCount(); - if (blockCount == 1) { - CFX_WideString ecc = - createECCBlock(codewords, symbolInfo->m_errorCodewords, e); - BC_EXCEPTION_CHECK_ReturnValue(e, (FX_WCHAR*)""); - sb += ecc; - } else { - CFX_Int32Array dataSizes; - dataSizes.SetSize(blockCount); - CFX_Int32Array errorSizes; - errorSizes.SetSize(blockCount); - CFX_Int32Array startPos; - startPos.SetSize(blockCount); - for (int32_t i = 0; i < blockCount; i++) { - dataSizes[i] = symbolInfo->getDataLengthForInterleavedBlock(i + 1); - errorSizes[i] = symbolInfo->getErrorLengthForInterleavedBlock(i + 1); - startPos[i] = 0; - if (i > 0) { - startPos[i] = startPos[i - 1] + dataSizes[i]; - } - } - for (int32_t block = 0; block < blockCount; block++) { - CFX_WideString temp; - for (int32_t d = block; d < symbolInfo->m_dataCapacity; d += blockCount) { - temp += (FX_WCHAR)codewords.GetAt(d); - } - CFX_WideString ecc = createECCBlock(temp, errorSizes[block], e); - BC_EXCEPTION_CHECK_ReturnValue(e, (FX_WCHAR*)""); - int32_t pos = 0; - for (int32_t l = block; l < errorSizes[block] * blockCount; - l += blockCount) { - sb.SetAt(symbolInfo->m_dataCapacity + l, ecc.GetAt(pos++)); - } - } - } - return sb; -} -CFX_WideString CBC_ErrorCorrection::createECCBlock(CFX_WideString codewords, - int32_t numECWords, - int32_t& e) { - return createECCBlock(codewords, 0, codewords.GetLength(), numECWords, e); -} -CFX_WideString CBC_ErrorCorrection::createECCBlock(CFX_WideString codewords, - int32_t start, - int32_t len, - int32_t numECWords, - int32_t& e) { - int32_t table = -1; - for (int32_t i = 0; i < sizeof(FACTOR_SETS) / sizeof(int32_t); i++) { - if (FACTOR_SETS[i] == numECWords) { - table = i; - break; - } - } - if (table < 0) { - e = BCExceptionIllegalArgument; - return (FX_WCHAR*)""; - } - FX_WORD* ecc = FX_Alloc(FX_WORD, numECWords); - FXSYS_memset(ecc, 0, numECWords * sizeof(FX_WORD)); - for (int32_t l = start; l < start + len; l++) { - FX_WORD m = ecc[numECWords - 1] ^ codewords.GetAt(l); - for (int32_t k = numECWords - 1; k > 0; k--) { - if (m != 0 && FACTORS[table][k] != 0) { - ecc[k] = (FX_WORD)(ecc[k - 1] ^ - ALOG[(LOG[m] + LOG[FACTORS[table][k]]) % 255]); - } else { - ecc[k] = ecc[k - 1]; - } - } - if (m != 0 && FACTORS[table][0] != 0) { - ecc[0] = (FX_WORD)ALOG[(LOG[m] + LOG[FACTORS[table][0]]) % 255]; - } else { - ecc[0] = 0; - } - } - CFX_WideString strecc; - for (int32_t j = 0; j < numECWords; j++) { - strecc += (FX_WCHAR)ecc[numECWords - j - 1]; - } - FX_Free(ecc); - return strecc; -} diff --git a/xfa/src/fxbarcode/datamatrix/BC_ErrorCorrection.h b/xfa/src/fxbarcode/datamatrix/BC_ErrorCorrection.h deleted file mode 100644 index 951b9ea572..0000000000 --- a/xfa/src/fxbarcode/datamatrix/BC_ErrorCorrection.h +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_DATAMATRIX_BC_ERRORCORRECTION_H_ -#define XFA_SRC_FXBARCODE_DATAMATRIX_BC_ERRORCORRECTION_H_ - -class CBC_SymbolInfo; -class CBC_ErrorCorrection { - public: - CBC_ErrorCorrection(); - virtual ~CBC_ErrorCorrection(); - static void Initialize(); - static void Finalize(); - static CFX_WideString encodeECC200(CFX_WideString codewords, - CBC_SymbolInfo* symbolInfo, - int32_t& e); - - private: - static int32_t FACTOR_SETS[]; - static int32_t FACTORS[][100]; - static int32_t MODULO_VALUE; - static int32_t LOG[256]; - static int32_t ALOG[256]; - - private: - static CFX_WideString createECCBlock(CFX_WideString codewords, - int32_t numECWords, - int32_t& e); - static CFX_WideString createECCBlock(CFX_WideString codewords, - int32_t start, - int32_t len, - int32_t numECWords, - int32_t& e); -}; - -#endif // XFA_SRC_FXBARCODE_DATAMATRIX_BC_ERRORCORRECTION_H_ diff --git a/xfa/src/fxbarcode/datamatrix/BC_HighLevelEncoder.cpp b/xfa/src/fxbarcode/datamatrix/BC_HighLevelEncoder.cpp deleted file mode 100644 index 21e1b6bb51..0000000000 --- a/xfa/src/fxbarcode/datamatrix/BC_HighLevelEncoder.cpp +++ /dev/null @@ -1,375 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2006-2007 Jeremias Maerki. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include - -#include "xfa/src/fxbarcode/BC_Dimension.h" -#include "xfa/src/fxbarcode/BC_UtilCodingConvert.h" -#include "xfa/src/fxbarcode/common/BC_CommonBitMatrix.h" -#include "xfa/src/fxbarcode/datamatrix/BC_ASCIIEncoder.h" -#include "xfa/src/fxbarcode/datamatrix/BC_Base256Encoder.h" -#include "xfa/src/fxbarcode/datamatrix/BC_C40Encoder.h" -#include "xfa/src/fxbarcode/datamatrix/BC_EdifactEncoder.h" -#include "xfa/src/fxbarcode/datamatrix/BC_Encoder.h" -#include "xfa/src/fxbarcode/datamatrix/BC_EncoderContext.h" -#include "xfa/src/fxbarcode/datamatrix/BC_HighLevelEncoder.h" -#include "xfa/src/fxbarcode/datamatrix/BC_SymbolInfo.h" -#include "xfa/src/fxbarcode/datamatrix/BC_SymbolShapeHint.h" -#include "xfa/src/fxbarcode/datamatrix/BC_TextEncoder.h" -#include "xfa/src/fxbarcode/datamatrix/BC_X12Encoder.h" -#include "xfa/src/fxbarcode/utils.h" - -FX_WCHAR CBC_HighLevelEncoder::LATCH_TO_C40 = 230; -FX_WCHAR CBC_HighLevelEncoder::LATCH_TO_BASE256 = 231; -FX_WCHAR CBC_HighLevelEncoder::UPPER_SHIFT = 235; -FX_WCHAR CBC_HighLevelEncoder::LATCH_TO_ANSIX12 = 238; -FX_WCHAR CBC_HighLevelEncoder::LATCH_TO_TEXT = 239; -FX_WCHAR CBC_HighLevelEncoder::LATCH_TO_EDIFACT = 240; -FX_WCHAR CBC_HighLevelEncoder::C40_UNLATCH = 254; -FX_WCHAR CBC_HighLevelEncoder::X12_UNLATCH = 254; -FX_WCHAR CBC_HighLevelEncoder::PAD = 129; -FX_WCHAR CBC_HighLevelEncoder::MACRO_05 = 236; -FX_WCHAR CBC_HighLevelEncoder::MACRO_06 = 237; -const wchar_t* CBC_HighLevelEncoder::MACRO_05_HEADER = L"[)>05"; -const wchar_t* CBC_HighLevelEncoder::MACRO_06_HEADER = L"[)>06"; -const wchar_t CBC_HighLevelEncoder::MACRO_TRAILER = 0x0004; - -CBC_HighLevelEncoder::CBC_HighLevelEncoder() {} -CBC_HighLevelEncoder::~CBC_HighLevelEncoder() {} -CFX_ByteArray& CBC_HighLevelEncoder::getBytesForMessage(CFX_WideString msg) { - CFX_ByteString bytestr; - CBC_UtilCodingConvert::UnicodeToUTF8(msg, bytestr); - for (int32_t i = 0; i < bytestr.GetLength(); i++) { - m_bytearray.Add(bytestr.GetAt(i)); - } - return m_bytearray; -} -CFX_WideString CBC_HighLevelEncoder::encodeHighLevel(CFX_WideString msg, - CFX_WideString ecLevel, - int32_t& e) { - return encodeHighLevel(msg, ecLevel, FORCE_NONE, NULL, NULL, e); -} -CFX_WideString CBC_HighLevelEncoder::encodeHighLevel(CFX_WideString msg, - CFX_WideString ecLevel, - SymbolShapeHint shape, - CBC_Dimension* minSize, - CBC_Dimension* maxSize, - int32_t& e) { - CBC_EncoderContext context(msg, ecLevel, e); - BC_EXCEPTION_CHECK_ReturnValue(e, (FX_WCHAR*)""); - context.setSymbolShape(shape); - context.setSizeConstraints(minSize, maxSize); - if ((msg.Mid(0, 6) == MACRO_05_HEADER) && - (msg.Mid(msg.GetLength() - 1, 1) == MACRO_TRAILER)) { - context.writeCodeword(MACRO_05); - context.setSkipAtEnd(2); - context.m_pos += 6; - } else if ((msg.Mid(0, 6) == MACRO_06_HEADER) && - (msg.Mid(msg.GetLength() - 1, 1) == MACRO_TRAILER)) { - context.writeCodeword(MACRO_06); - context.setSkipAtEnd(2); - context.m_pos += 6; - } - CFX_PtrArray encoders; - encoders.Add(new CBC_ASCIIEncoder()); - encoders.Add(new CBC_C40Encoder()); - encoders.Add(new CBC_TextEncoder()); - encoders.Add(new CBC_X12Encoder()); - encoders.Add(new CBC_EdifactEncoder()); - encoders.Add(new CBC_Base256Encoder()); - int32_t encodingMode = ASCII_ENCODATION; - while (context.hasMoreCharacters()) { - ((CBC_Encoder*)encoders.GetAt(encodingMode))->Encode(context, e); - if (e != BCExceptionNO) { - for (int32_t i = 0; i < encoders.GetSize(); i++) { - delete (CBC_Encoder*)encoders.GetAt(i); - } - encoders.RemoveAll(); - return (FX_WCHAR*)""; - } - if (context.m_newEncoding >= 0) { - encodingMode = context.m_newEncoding; - context.resetEncoderSignal(); - } - } - int32_t len = context.m_codewords.GetLength(); - context.updateSymbolInfo(e); - if (e != BCExceptionNO) { - for (int32_t i = 0; i < encoders.GetSize(); i++) { - delete (CBC_Encoder*)encoders.GetAt(i); - } - encoders.RemoveAll(); - return (FX_WCHAR*)""; - } - int32_t capacity = context.m_symbolInfo->m_dataCapacity; - if (len < capacity) { - if (encodingMode != ASCII_ENCODATION && - encodingMode != BASE256_ENCODATION) { - context.writeCodeword(0x00fe); - } - } - CFX_WideString codewords = context.m_codewords; - if (codewords.GetLength() < capacity) { - codewords += PAD; - } - while (codewords.GetLength() < capacity) { - codewords += (randomize253State(PAD, codewords.GetLength() + 1)); - } - for (int32_t i = 0; i < encoders.GetSize(); i++) { - delete (CBC_Encoder*)encoders.GetAt(i); - } - encoders.RemoveAll(); - return codewords; -} -int32_t CBC_HighLevelEncoder::lookAheadTest(CFX_WideString msg, - int32_t startpos, - int32_t currentMode) { - if (startpos >= msg.GetLength()) { - return currentMode; - } - CFX_FloatArray charCounts; - if (currentMode == ASCII_ENCODATION) { - charCounts.Add(0); - charCounts.Add(1); - charCounts.Add(1); - charCounts.Add(1); - charCounts.Add(1); - charCounts.Add(1.25f); - } else { - charCounts.Add(1); - charCounts.Add(2); - charCounts.Add(2); - charCounts.Add(2); - charCounts.Add(2); - charCounts.Add(2.25f); - charCounts[currentMode] = 0; - } - int32_t charsProcessed = 0; - while (TRUE) { - if ((startpos + charsProcessed) == msg.GetLength()) { - FX_DWORD min = std::numeric_limits::max(); - CFX_ByteArray mins; - mins.SetSize(6); - CFX_Int32Array intCharCounts; - intCharCounts.SetSize(6); - min = findMinimums(charCounts, intCharCounts, min, mins); - int32_t minCount = getMinimumCount(mins); - if (intCharCounts[ASCII_ENCODATION] == min) { - return ASCII_ENCODATION; - } - if (minCount == 1 && mins[BASE256_ENCODATION] > 0) { - return BASE256_ENCODATION; - } - if (minCount == 1 && mins[EDIFACT_ENCODATION] > 0) { - return EDIFACT_ENCODATION; - } - if (minCount == 1 && mins[TEXT_ENCODATION] > 0) { - return TEXT_ENCODATION; - } - if (minCount == 1 && mins[X12_ENCODATION] > 0) { - return X12_ENCODATION; - } - return C40_ENCODATION; - } - FX_WCHAR c = msg.GetAt(startpos + charsProcessed); - charsProcessed++; - if (isDigit(c)) { - charCounts[ASCII_ENCODATION] += 0.5; - } else if (isExtendedASCII(c)) { - charCounts[ASCII_ENCODATION] = - (FX_FLOAT)ceil(charCounts[ASCII_ENCODATION]); - charCounts[ASCII_ENCODATION] += 2; - } else { - charCounts[ASCII_ENCODATION] = - (FX_FLOAT)ceil(charCounts[ASCII_ENCODATION]); - charCounts[ASCII_ENCODATION]++; - } - if (isNativeC40(c)) { - charCounts[C40_ENCODATION] += 2.0f / 3.0f; - } else if (isExtendedASCII(c)) { - charCounts[C40_ENCODATION] += 8.0f / 3.0f; - } else { - charCounts[C40_ENCODATION] += 4.0f / 3.0f; - } - if (isNativeText(c)) { - charCounts[TEXT_ENCODATION] += 2.0f / 3.0f; - } else if (isExtendedASCII(c)) { - charCounts[TEXT_ENCODATION] += 8.0f / 3.0f; - } else { - charCounts[TEXT_ENCODATION] += 4.0f / 3.0f; - } - if (isNativeX12(c)) { - charCounts[X12_ENCODATION] += 2.0f / 3.0f; - } else if (isExtendedASCII(c)) { - charCounts[X12_ENCODATION] += 13.0f / 3.0f; - } else { - charCounts[X12_ENCODATION] += 10.0f / 3.0f; - } - if (isNativeEDIFACT(c)) { - charCounts[EDIFACT_ENCODATION] += 3.0f / 4.0f; - } else if (isExtendedASCII(c)) { - charCounts[EDIFACT_ENCODATION] += 17.0f / 4.0f; - } else { - charCounts[EDIFACT_ENCODATION] += 13.0f / 4.0f; - } - if (isSpecialB256(c)) { - charCounts[BASE256_ENCODATION] += 4; - } else { - charCounts[BASE256_ENCODATION]++; - } - if (charsProcessed >= 4) { - CFX_Int32Array intCharCounts; - intCharCounts.SetSize(6); - CFX_ByteArray mins; - mins.SetSize(6); - findMinimums(charCounts, intCharCounts, - std::numeric_limits::max(), mins); - int32_t minCount = getMinimumCount(mins); - if (intCharCounts[ASCII_ENCODATION] < intCharCounts[BASE256_ENCODATION] && - intCharCounts[ASCII_ENCODATION] < intCharCounts[C40_ENCODATION] && - intCharCounts[ASCII_ENCODATION] < intCharCounts[TEXT_ENCODATION] && - intCharCounts[ASCII_ENCODATION] < intCharCounts[X12_ENCODATION] && - intCharCounts[ASCII_ENCODATION] < intCharCounts[EDIFACT_ENCODATION]) { - return ASCII_ENCODATION; - } - if (intCharCounts[BASE256_ENCODATION] < intCharCounts[ASCII_ENCODATION] || - (mins[C40_ENCODATION] + mins[TEXT_ENCODATION] + mins[X12_ENCODATION] + - mins[EDIFACT_ENCODATION]) == 0) { - return BASE256_ENCODATION; - } - if (minCount == 1 && mins[EDIFACT_ENCODATION] > 0) { - return EDIFACT_ENCODATION; - } - if (minCount == 1 && mins[TEXT_ENCODATION] > 0) { - return TEXT_ENCODATION; - } - if (minCount == 1 && mins[X12_ENCODATION] > 0) { - return X12_ENCODATION; - } - if (intCharCounts[C40_ENCODATION] + 1 < intCharCounts[ASCII_ENCODATION] && - intCharCounts[C40_ENCODATION] + 1 < - intCharCounts[BASE256_ENCODATION] && - intCharCounts[C40_ENCODATION] + 1 < - intCharCounts[EDIFACT_ENCODATION] && - intCharCounts[C40_ENCODATION] + 1 < intCharCounts[TEXT_ENCODATION]) { - if (intCharCounts[C40_ENCODATION] < intCharCounts[X12_ENCODATION]) { - return C40_ENCODATION; - } - if (intCharCounts[C40_ENCODATION] == intCharCounts[X12_ENCODATION]) { - int32_t p = startpos + charsProcessed + 1; - while (p < msg.GetLength()) { - FX_WCHAR tc = msg.GetAt(p); - if (isX12TermSep(tc)) { - return X12_ENCODATION; - } - if (!isNativeX12(tc)) { - break; - } - p++; - } - return C40_ENCODATION; - } - } - } - } -} -FX_BOOL CBC_HighLevelEncoder::isDigit(FX_WCHAR ch) { - return ch >= '0' && ch <= '9'; -} -FX_BOOL CBC_HighLevelEncoder::isExtendedASCII(FX_WCHAR ch) { - return ch >= 128 && ch <= 255; -} -int32_t CBC_HighLevelEncoder::determineConsecutiveDigitCount(CFX_WideString msg, - int32_t startpos) { - int32_t count = 0; - int32_t len = msg.GetLength(); - int32_t idx = startpos; - if (idx < len) { - FX_WCHAR ch = msg.GetAt(idx); - while (isDigit(ch) && idx < len) { - count++; - idx++; - if (idx < len) { - ch = msg.GetAt(idx); - } - } - } - return count; -} -void CBC_HighLevelEncoder::illegalCharacter(FX_WCHAR c, int32_t& e) { - e = BCExceptionIllegalArgument; -} -FX_WCHAR CBC_HighLevelEncoder::randomize253State(FX_WCHAR ch, - int32_t codewordPosition) { - int32_t pseudoRandom = ((149 * codewordPosition) % 253) + 1; - int32_t tempVariable = ch + pseudoRandom; - return tempVariable <= 254 ? (FX_WCHAR)tempVariable - : (FX_WCHAR)(tempVariable - 254); -} -int32_t CBC_HighLevelEncoder::findMinimums(CFX_FloatArray& charCounts, - CFX_Int32Array& intCharCounts, - int32_t min, - CFX_ByteArray& mins) { - for (int32_t l = 0; l < mins.GetSize(); l++) { - mins[l] = (uint8_t)0; - } - for (int32_t i = 0; i < 6; i++) { - intCharCounts[i] = (int32_t)ceil(charCounts[i]); - int32_t current = intCharCounts[i]; - if (min > current) { - min = current; - for (int32_t j = 0; j < mins.GetSize(); j++) { - mins[j] = (uint8_t)0; - } - } - if (min == current) { - mins[i]++; - } - } - return min; -} -int32_t CBC_HighLevelEncoder::getMinimumCount(CFX_ByteArray& mins) { - int32_t minCount = 0; - for (int32_t i = 0; i < 6; i++) { - minCount += mins[i]; - } - return minCount; -} -FX_BOOL CBC_HighLevelEncoder::isNativeC40(FX_WCHAR ch) { - return (ch == ' ') || (ch >= '0' && ch <= '9') || (ch >= 'A' && ch <= 'Z'); -} -FX_BOOL CBC_HighLevelEncoder::isNativeText(FX_WCHAR ch) { - return (ch == ' ') || (ch >= '0' && ch <= '9') || (ch >= 'a' && ch <= 'z'); -} -FX_BOOL CBC_HighLevelEncoder::isNativeX12(FX_WCHAR ch) { - return isX12TermSep(ch) || (ch == ' ') || (ch >= '0' && ch <= '9') || - (ch >= 'A' && ch <= 'Z'); -} -FX_BOOL CBC_HighLevelEncoder::isX12TermSep(FX_WCHAR ch) { - return (ch == '\r') || (ch == '*') || (ch == '>'); -} -FX_BOOL CBC_HighLevelEncoder::isNativeEDIFACT(FX_WCHAR ch) { - return ch >= ' ' && ch <= '^'; -} -FX_BOOL CBC_HighLevelEncoder::isSpecialB256(FX_WCHAR ch) { - return FALSE; -} diff --git a/xfa/src/fxbarcode/datamatrix/BC_HighLevelEncoder.h b/xfa/src/fxbarcode/datamatrix/BC_HighLevelEncoder.h deleted file mode 100644 index 2ac64695eb..0000000000 --- a/xfa/src/fxbarcode/datamatrix/BC_HighLevelEncoder.h +++ /dev/null @@ -1,76 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_DATAMATRIX_BC_HIGHLEVELENCODER_H_ -#define XFA_SRC_FXBARCODE_DATAMATRIX_BC_HIGHLEVELENCODER_H_ - -#include "xfa/src/fxbarcode/datamatrix/BC_SymbolShapeHint.h" - -#define ASCII_ENCODATION 0 -#define C40_ENCODATION 1 -#define TEXT_ENCODATION 2 -#define X12_ENCODATION 3 -#define EDIFACT_ENCODATION 4 -#define BASE256_ENCODATION 5 - -class CBC_HighLevelEncoder : public CBC_SymbolShapeHint { - public: - CBC_HighLevelEncoder(); - virtual ~CBC_HighLevelEncoder(); - CFX_ByteArray& getBytesForMessage(CFX_WideString msg); - static CFX_WideString encodeHighLevel(CFX_WideString msg, - CFX_WideString ecLevel, - int32_t& e); - static CFX_WideString encodeHighLevel(CFX_WideString msg, - CFX_WideString ecLevel, - SymbolShapeHint shape, - CBC_Dimension* minSize, - CBC_Dimension* maxSize, - int32_t& e); - static int32_t lookAheadTest(CFX_WideString msg, - int32_t startpos, - int32_t currentMode); - static FX_BOOL isDigit(FX_WCHAR ch); - static FX_BOOL isExtendedASCII(FX_WCHAR ch); - static int32_t determineConsecutiveDigitCount(CFX_WideString msg, - int32_t startpos); - static void illegalCharacter(FX_WCHAR c, int32_t& e); - - public: - static FX_WCHAR LATCH_TO_C40; - static FX_WCHAR LATCH_TO_BASE256; - static FX_WCHAR UPPER_SHIFT; - static FX_WCHAR LATCH_TO_ANSIX12; - static FX_WCHAR LATCH_TO_TEXT; - static FX_WCHAR LATCH_TO_EDIFACT; - static FX_WCHAR C40_UNLATCH; - static FX_WCHAR X12_UNLATCH; - - private: - static FX_WCHAR PAD; - static FX_WCHAR MACRO_05; - static FX_WCHAR MACRO_06; - static const wchar_t* MACRO_05_HEADER; - static const wchar_t* MACRO_06_HEADER; - static const wchar_t MACRO_TRAILER; - CFX_ByteArray m_bytearray; - - private: - static FX_WCHAR randomize253State(FX_WCHAR ch, int32_t codewordPosition); - static int32_t findMinimums(CFX_FloatArray& charCounts, - CFX_Int32Array& intCharCounts, - int32_t min, - CFX_ByteArray& mins); - static int32_t getMinimumCount(CFX_ByteArray& mins); - static FX_BOOL isNativeC40(FX_WCHAR ch); - static FX_BOOL isNativeText(FX_WCHAR ch); - static FX_BOOL isNativeX12(FX_WCHAR ch); - static FX_BOOL isX12TermSep(FX_WCHAR ch); - static FX_BOOL isNativeEDIFACT(FX_WCHAR ch); - static FX_BOOL isSpecialB256(FX_WCHAR ch); -}; - -#endif // XFA_SRC_FXBARCODE_DATAMATRIX_BC_HIGHLEVELENCODER_H_ diff --git a/xfa/src/fxbarcode/datamatrix/BC_SymbolInfo.cpp b/xfa/src/fxbarcode/datamatrix/BC_SymbolInfo.cpp deleted file mode 100644 index 7909054533..0000000000 --- a/xfa/src/fxbarcode/datamatrix/BC_SymbolInfo.cpp +++ /dev/null @@ -1,255 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2006 Jeremias Maerki - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/BC_Dimension.h" -#include "xfa/src/fxbarcode/common/BC_CommonBitMatrix.h" -#include "xfa/src/fxbarcode/datamatrix/BC_DataMatrixSymbolInfo144.h" -#include "xfa/src/fxbarcode/datamatrix/BC_Encoder.h" -#include "xfa/src/fxbarcode/datamatrix/BC_SymbolInfo.h" -#include "xfa/src/fxbarcode/datamatrix/BC_SymbolShapeHint.h" - -#define SYMBOLS_COUNT 30 - -CBC_SymbolInfo* CBC_SymbolInfo::m_PROD_SYMBOLS[30] = { - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}; -CBC_SymbolInfo* CBC_SymbolInfo::m_symbols[30] = { - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}; -void CBC_SymbolInfo::Initialize() { - m_PROD_SYMBOLS[0] = new CBC_SymbolInfo(FALSE, 3, 5, 8, 8, 1); - m_PROD_SYMBOLS[1] = new CBC_SymbolInfo(FALSE, 5, 7, 10, 10, 1); - m_PROD_SYMBOLS[2] = new CBC_SymbolInfo(TRUE, 5, 7, 16, 6, 1); - m_PROD_SYMBOLS[3] = new CBC_SymbolInfo(FALSE, 8, 10, 12, 12, 1); - m_PROD_SYMBOLS[4] = new CBC_SymbolInfo(TRUE, 10, 11, 14, 6, 2); - m_PROD_SYMBOLS[5] = new CBC_SymbolInfo(FALSE, 12, 12, 14, 14, 1); - m_PROD_SYMBOLS[6] = new CBC_SymbolInfo(TRUE, 16, 14, 24, 10, 1); - m_PROD_SYMBOLS[7] = new CBC_SymbolInfo(FALSE, 18, 14, 16, 16, 1); - m_PROD_SYMBOLS[8] = new CBC_SymbolInfo(FALSE, 22, 18, 18, 18, 1); - m_PROD_SYMBOLS[9] = new CBC_SymbolInfo(TRUE, 22, 18, 16, 10, 2); - m_PROD_SYMBOLS[10] = new CBC_SymbolInfo(FALSE, 30, 20, 20, 20, 1); - m_PROD_SYMBOLS[11] = new CBC_SymbolInfo(TRUE, 32, 24, 16, 14, 2); - m_PROD_SYMBOLS[12] = new CBC_SymbolInfo(FALSE, 36, 24, 22, 22, 1); - m_PROD_SYMBOLS[13] = new CBC_SymbolInfo(FALSE, 44, 28, 24, 24, 1); - m_PROD_SYMBOLS[14] = new CBC_SymbolInfo(TRUE, 49, 28, 22, 14, 2); - m_PROD_SYMBOLS[15] = new CBC_SymbolInfo(FALSE, 62, 36, 14, 14, 4); - m_PROD_SYMBOLS[16] = new CBC_SymbolInfo(FALSE, 86, 42, 16, 16, 4); - m_PROD_SYMBOLS[17] = new CBC_SymbolInfo(FALSE, 114, 48, 18, 18, 4); - m_PROD_SYMBOLS[18] = new CBC_SymbolInfo(FALSE, 144, 56, 20, 20, 4); - m_PROD_SYMBOLS[19] = new CBC_SymbolInfo(FALSE, 174, 68, 22, 22, 4); - m_PROD_SYMBOLS[20] = new CBC_SymbolInfo(FALSE, 204, 84, 24, 24, 4, 102, 42); - m_PROD_SYMBOLS[21] = new CBC_SymbolInfo(FALSE, 280, 112, 14, 14, 16, 140, 56); - m_PROD_SYMBOLS[22] = new CBC_SymbolInfo(FALSE, 368, 144, 16, 16, 16, 92, 36); - m_PROD_SYMBOLS[23] = new CBC_SymbolInfo(FALSE, 456, 192, 18, 18, 16, 114, 48); - m_PROD_SYMBOLS[24] = new CBC_SymbolInfo(FALSE, 576, 224, 20, 20, 16, 144, 56); - m_PROD_SYMBOLS[25] = new CBC_SymbolInfo(FALSE, 696, 272, 22, 22, 16, 174, 68); - m_PROD_SYMBOLS[26] = new CBC_SymbolInfo(FALSE, 816, 336, 24, 24, 16, 136, 56); - m_PROD_SYMBOLS[27] = - new CBC_SymbolInfo(FALSE, 1050, 408, 18, 18, 36, 175, 68); - m_PROD_SYMBOLS[28] = - new CBC_SymbolInfo(FALSE, 1304, 496, 20, 20, 36, 163, 62); - m_PROD_SYMBOLS[29] = new CBC_DataMatrixSymbolInfo144(); - for (int32_t i = 0; i < SYMBOLS_COUNT; i++) { - m_symbols[i] = m_PROD_SYMBOLS[i]; - } -} -void CBC_SymbolInfo::Finalize() { - for (int32_t i = 0; i < SYMBOLS_COUNT; i++) { - delete m_PROD_SYMBOLS[i]; - m_PROD_SYMBOLS[i] = NULL; - m_symbols[i] = NULL; - } -} -CBC_SymbolInfo::CBC_SymbolInfo(FX_BOOL rectangular, - int32_t dataCapacity, - int32_t errorCodewords, - int32_t matrixWidth, - int32_t matrixHeight, - int32_t dataRegions) { - m_rectangular = rectangular; - m_dataCapacity = dataCapacity; - m_errorCodewords = errorCodewords; - m_matrixWidth = matrixWidth; - m_matrixHeight = matrixHeight; - m_dataRegions = dataRegions; - m_rsBlockData = dataCapacity; - m_rsBlockError = errorCodewords; -} -CBC_SymbolInfo::CBC_SymbolInfo(FX_BOOL rectangular, - int32_t dataCapacity, - int32_t errorCodewords, - int32_t matrixWidth, - int32_t matrixHeight, - int32_t dataRegions, - int32_t rsBlockData, - int32_t rsBlockError) { - m_rectangular = rectangular; - m_dataCapacity = dataCapacity; - m_errorCodewords = errorCodewords; - m_matrixWidth = matrixWidth; - m_matrixHeight = matrixHeight; - m_dataRegions = dataRegions; - m_rsBlockData = rsBlockData; - m_rsBlockError = rsBlockError; -} -CBC_SymbolInfo::~CBC_SymbolInfo() {} - -CBC_SymbolInfo* CBC_SymbolInfo::lookup(int32_t dataCodewords, int32_t& e) { - return lookup(dataCodewords, FORCE_NONE, TRUE, e); -} -CBC_SymbolInfo* CBC_SymbolInfo::lookup(int32_t dataCodewords, - SymbolShapeHint shape, - int32_t& e) { - return lookup(dataCodewords, shape, TRUE, e); -} -CBC_SymbolInfo* CBC_SymbolInfo::lookup(int32_t dataCodewords, - FX_BOOL allowRectangular, - FX_BOOL fail, - int32_t& e) { - SymbolShapeHint shape = allowRectangular ? FORCE_NONE : FORCE_SQUARE; - return lookup(dataCodewords, shape, fail, e); -} -CBC_SymbolInfo* CBC_SymbolInfo::lookup(int32_t dataCodewords, - SymbolShapeHint shape, - FX_BOOL fail, - int32_t& e) { - return lookup(dataCodewords, shape, NULL, NULL, fail, e); -} -CBC_SymbolInfo* CBC_SymbolInfo::lookup(int32_t dataCodewords, - SymbolShapeHint shape, - CBC_Dimension* minSize, - CBC_Dimension* maxSize, - FX_BOOL fail, - int32_t& e) { - for (int32_t i = 0; i < SYMBOLS_COUNT; i++) { - CBC_SymbolInfo* symbol = m_symbols[i]; - if (shape == FORCE_SQUARE && symbol->m_rectangular) { - continue; - } - if (shape == FORCE_RECTANGLE && !symbol->m_rectangular) { - continue; - } - if (minSize && (symbol->getSymbolWidth(e) < minSize->getWidth() || - symbol->getSymbolHeight(e) < minSize->getHeight())) { - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - continue; - } - if (maxSize && (symbol->getSymbolWidth(e) > maxSize->getWidth() || - symbol->getSymbolHeight(e) > maxSize->getHeight())) { - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - continue; - } - if (dataCodewords <= symbol->m_dataCapacity) { - return symbol; - } - } - if (fail) { - e = BCExceptionIllegalDataCodewords; - return NULL; - } - return NULL; -} -int32_t CBC_SymbolInfo::getHorizontalDataRegions(int32_t& e) { - switch (m_dataRegions) { - case 1: - return 1; - case 2: - return 2; - case 4: - return 2; - case 16: - return 4; - case 36: - return 6; - default: - e = BCExceptionCannotHandleThisNumberOfDataRegions; - return 0; - } -} -int32_t CBC_SymbolInfo::getVerticalDataRegions(int32_t& e) { - switch (m_dataRegions) { - case 1: - return 1; - case 2: - return 1; - case 4: - return 2; - case 16: - return 4; - case 36: - return 6; - default: - e = BCExceptionCannotHandleThisNumberOfDataRegions; - return 0; - } -} -int32_t CBC_SymbolInfo::getSymbolDataWidth(int32_t& e) { - return getHorizontalDataRegions(e) * m_matrixWidth; -} -int32_t CBC_SymbolInfo::getSymbolDataHeight(int32_t& e) { - return getVerticalDataRegions(e) * m_matrixHeight; -} -int32_t CBC_SymbolInfo::getSymbolWidth(int32_t& e) { - return getSymbolDataWidth(e) + (getHorizontalDataRegions(e) * 2); -} -int32_t CBC_SymbolInfo::getSymbolHeight(int32_t& e) { - return getSymbolDataHeight(e) + (getVerticalDataRegions(e) * 2); -} -int32_t CBC_SymbolInfo::getCodewordCount() { - return m_dataCapacity + m_errorCodewords; -} -int32_t CBC_SymbolInfo::getInterleavedBlockCount() { - return m_dataCapacity / m_rsBlockData; -} -int32_t CBC_SymbolInfo::getDataLengthForInterleavedBlock(int32_t index) { - return m_rsBlockData; -} -int32_t CBC_SymbolInfo::getErrorLengthForInterleavedBlock(int32_t index) { - return m_rsBlockError; -} -CFX_WideString CBC_SymbolInfo::toString(int32_t& e) { - CFX_WideString sb; - sb += (FX_WCHAR*)(m_rectangular ? "Rectangular Symbol:" : "Square Symbol:"); - sb += (FX_WCHAR*)" data region "; - sb += m_matrixWidth; - sb += (FX_WCHAR)'x'; - sb += m_matrixHeight; - sb += (FX_WCHAR*)", symbol size "; - sb += getSymbolWidth(e); - BC_EXCEPTION_CHECK_ReturnValue(e, (FX_WCHAR*)""); - sb += (FX_WCHAR)'x'; - sb += getSymbolHeight(e); - BC_EXCEPTION_CHECK_ReturnValue(e, (FX_WCHAR*)""); - sb += (FX_WCHAR*)", symbol data size "; - sb += getSymbolDataWidth(e); - BC_EXCEPTION_CHECK_ReturnValue(e, (FX_WCHAR*)""); - sb += (FX_WCHAR)'x'; - sb += getSymbolDataHeight(e); - BC_EXCEPTION_CHECK_ReturnValue(e, (FX_WCHAR*)""); - sb += (FX_WCHAR*)", codewords "; - sb += m_dataCapacity; - sb += (FX_WCHAR)'+'; - sb += m_errorCodewords; - return sb; -} diff --git a/xfa/src/fxbarcode/datamatrix/BC_SymbolInfo.h b/xfa/src/fxbarcode/datamatrix/BC_SymbolInfo.h deleted file mode 100644 index acbc038ef3..0000000000 --- a/xfa/src/fxbarcode/datamatrix/BC_SymbolInfo.h +++ /dev/null @@ -1,83 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_DATAMATRIX_BC_SYMBOLINFO_H_ -#define XFA_SRC_FXBARCODE_DATAMATRIX_BC_SYMBOLINFO_H_ - -#include "core/include/fxcrt/fx_string.h" -#include "core/include/fxcrt/fx_system.h" -#include "xfa/src/fxbarcode/datamatrix/BC_SymbolShapeHint.h" - -class CBC_Dimension; - -class CBC_SymbolInfo : public CBC_SymbolShapeHint { - public: - CBC_SymbolInfo(FX_BOOL rectangular, - int32_t dataCapacity, - int32_t errorCodewords, - int32_t matrixWidth, - int32_t matrixHeight, - int32_t dataRegions); - virtual ~CBC_SymbolInfo(); - static void Initialize(); - static void Finalize(); - static void overrideSymbolSet(CBC_SymbolInfo* override); - static CBC_SymbolInfo* lookup(int32_t dataCodewords, int32_t& e); - static CBC_SymbolInfo* lookup(int32_t dataCodewords, - SymbolShapeHint shape, - int32_t& e); - static CBC_SymbolInfo* lookup(int32_t dataCodewords, - FX_BOOL allowRectangular, - FX_BOOL fail, - int32_t& e); - static CBC_SymbolInfo* lookup(int32_t dataCodewords, - SymbolShapeHint shape, - FX_BOOL fail, - int32_t& e); - static CBC_SymbolInfo* lookup(int32_t dataCodewords, - SymbolShapeHint shape, - CBC_Dimension* minSize, - CBC_Dimension* maxSize, - FX_BOOL fail, - int32_t& e); - int32_t getHorizontalDataRegions(int32_t& e); - int32_t getVerticalDataRegions(int32_t& e); - int32_t getSymbolDataWidth(int32_t& e); - int32_t getSymbolDataHeight(int32_t& e); - int32_t getSymbolWidth(int32_t& e); - int32_t getSymbolHeight(int32_t& e); - int32_t getCodewordCount(); - int32_t getInterleavedBlockCount(); - int32_t getDataLengthForInterleavedBlock(int32_t index); - int32_t getErrorLengthForInterleavedBlock(int32_t index); - CFX_WideString toString(int32_t& e); - - public: - int32_t m_dataCapacity; - int32_t m_errorCodewords; - int32_t m_matrixWidth; - int32_t m_matrixHeight; - int32_t m_rsBlockData; - int32_t m_rsBlockError; - static CBC_SymbolInfo* m_PROD_SYMBOLS[30]; - - private: - static CBC_SymbolInfo* m_symbols[30]; - FX_BOOL m_rectangular; - int32_t m_dataRegions; - - private: - CBC_SymbolInfo(FX_BOOL rectangular, - int32_t dataCapacity, - int32_t errorCodewords, - int32_t matrixWidth, - int32_t matrixHeight, - int32_t dataRegions, - int32_t rsBlockData, - int32_t rsBlockError); -}; - -#endif // XFA_SRC_FXBARCODE_DATAMATRIX_BC_SYMBOLINFO_H_ diff --git a/xfa/src/fxbarcode/datamatrix/BC_SymbolShapeHint.cpp b/xfa/src/fxbarcode/datamatrix/BC_SymbolShapeHint.cpp deleted file mode 100644 index 52c9960257..0000000000 --- a/xfa/src/fxbarcode/datamatrix/BC_SymbolShapeHint.cpp +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2007 Jeremias Maerki. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/datamatrix/BC_SymbolShapeHint.h" - -CBC_SymbolShapeHint::CBC_SymbolShapeHint() {} -CBC_SymbolShapeHint::~CBC_SymbolShapeHint() {} diff --git a/xfa/src/fxbarcode/datamatrix/BC_SymbolShapeHint.h b/xfa/src/fxbarcode/datamatrix/BC_SymbolShapeHint.h deleted file mode 100644 index ea8acdfb0f..0000000000 --- a/xfa/src/fxbarcode/datamatrix/BC_SymbolShapeHint.h +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_DATAMATRIX_BC_SYMBOLSHAPEHINT_H_ -#define XFA_SRC_FXBARCODE_DATAMATRIX_BC_SYMBOLSHAPEHINT_H_ - -class CBC_SymbolShapeHint { - public: - CBC_SymbolShapeHint(); - virtual ~CBC_SymbolShapeHint(); - enum SymbolShapeHint { - FORCE_NONE, - FORCE_SQUARE, - FORCE_RECTANGLE, - }; -}; - -#endif // XFA_SRC_FXBARCODE_DATAMATRIX_BC_SYMBOLSHAPEHINT_H_ diff --git a/xfa/src/fxbarcode/datamatrix/BC_TextEncoder.cpp b/xfa/src/fxbarcode/datamatrix/BC_TextEncoder.cpp deleted file mode 100644 index ec340f30e7..0000000000 --- a/xfa/src/fxbarcode/datamatrix/BC_TextEncoder.cpp +++ /dev/null @@ -1,98 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2006-2007 Jeremias Maerki. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/BC_Dimension.h" -#include "xfa/src/fxbarcode/common/BC_CommonBitMatrix.h" -#include "xfa/src/fxbarcode/datamatrix/BC_C40Encoder.h" -#include "xfa/src/fxbarcode/datamatrix/BC_Encoder.h" -#include "xfa/src/fxbarcode/datamatrix/BC_EncoderContext.h" -#include "xfa/src/fxbarcode/datamatrix/BC_HighLevelEncoder.h" -#include "xfa/src/fxbarcode/datamatrix/BC_SymbolInfo.h" -#include "xfa/src/fxbarcode/datamatrix/BC_SymbolShapeHint.h" -#include "xfa/src/fxbarcode/datamatrix/BC_TextEncoder.h" - -CBC_TextEncoder::CBC_TextEncoder() {} -CBC_TextEncoder::~CBC_TextEncoder() {} -int32_t CBC_TextEncoder::getEncodingMode() { - return TEXT_ENCODATION; -} -int32_t CBC_TextEncoder::encodeChar(FX_WCHAR c, - CFX_WideString& sb, - int32_t& e) { - if (c == ' ') { - sb += (FX_WCHAR)'\3'; - return 1; - } - if (c >= '0' && c <= '9') { - sb += (FX_WCHAR)(c - 48 + 4); - return 1; - } - if (c >= 'a' && c <= 'z') { - sb += (FX_WCHAR)(c - 97 + 14); - return 1; - } - if (c <= 0x1f) { - sb += (FX_WCHAR)'\0'; - sb += c; - return 2; - } - if (c >= '!' && c <= '/') { - sb += (FX_WCHAR)'\1'; - sb += (FX_WCHAR)(c - 33); - return 2; - } - if (c >= ':' && c <= '@') { - sb += (FX_WCHAR)'\1'; - sb += (FX_WCHAR)(c - 58 + 15); - return 2; - } - if (c >= '[' && c <= '_') { - sb += (FX_WCHAR)'\1'; - sb += (FX_WCHAR)(c - 91 + 22); - return 2; - } - if (c == 0x0060) { - sb += (FX_WCHAR)'\2'; - sb += (FX_WCHAR)(c - 96); - return 2; - } - if (c >= 'A' && c <= 'Z') { - sb += (FX_WCHAR)'\2'; - sb += (FX_WCHAR)(c - 65 + 1); - return 2; - } - if (c >= '{' && c <= 0x007f) { - sb += (FX_WCHAR)'\2'; - sb += (FX_WCHAR)(c - 123 + 27); - return 2; - } - if (c >= 0x0080) { - sb += (FX_WCHAR)'\1'; - sb += (FX_WCHAR)0x001e; - int32_t len = 2; - len += encodeChar((FX_WCHAR)(c - 128), sb, e); - BC_EXCEPTION_CHECK_ReturnValue(e, -1); - return len; - } - CBC_HighLevelEncoder::illegalCharacter(c, e); - return -1; -} diff --git a/xfa/src/fxbarcode/datamatrix/BC_TextEncoder.h b/xfa/src/fxbarcode/datamatrix/BC_TextEncoder.h deleted file mode 100644 index 399b21bb90..0000000000 --- a/xfa/src/fxbarcode/datamatrix/BC_TextEncoder.h +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_DATAMATRIX_BC_TEXTENCODER_H_ -#define XFA_SRC_FXBARCODE_DATAMATRIX_BC_TEXTENCODER_H_ - -class CBC_TextEncoder; -class CBC_TextEncoder : public CBC_C40Encoder { - public: - CBC_TextEncoder(); - virtual ~CBC_TextEncoder(); - int32_t getEncodingMode(); - int32_t encodeChar(FX_WCHAR c, CFX_WideString& sb, int32_t& e); -}; - -#endif // XFA_SRC_FXBARCODE_DATAMATRIX_BC_TEXTENCODER_H_ diff --git a/xfa/src/fxbarcode/datamatrix/BC_X12Encoder.cpp b/xfa/src/fxbarcode/datamatrix/BC_X12Encoder.cpp deleted file mode 100644 index 759279d526..0000000000 --- a/xfa/src/fxbarcode/datamatrix/BC_X12Encoder.cpp +++ /dev/null @@ -1,100 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2006-2007 Jeremias Maerki. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/BC_Dimension.h" -#include "xfa/src/fxbarcode/common/BC_CommonBitMatrix.h" -#include "xfa/src/fxbarcode/datamatrix/BC_C40Encoder.h" -#include "xfa/src/fxbarcode/datamatrix/BC_Encoder.h" -#include "xfa/src/fxbarcode/datamatrix/BC_EncoderContext.h" -#include "xfa/src/fxbarcode/datamatrix/BC_HighLevelEncoder.h" -#include "xfa/src/fxbarcode/datamatrix/BC_SymbolInfo.h" -#include "xfa/src/fxbarcode/datamatrix/BC_SymbolShapeHint.h" -#include "xfa/src/fxbarcode/datamatrix/BC_X12Encoder.h" - -CBC_X12Encoder::CBC_X12Encoder() {} -CBC_X12Encoder::~CBC_X12Encoder() {} -int32_t CBC_X12Encoder::getEncodingMode() { - return X12_ENCODATION; -} -void CBC_X12Encoder::Encode(CBC_EncoderContext& context, int32_t& e) { - CFX_WideString buffer; - while (context.hasMoreCharacters()) { - FX_WCHAR c = context.getCurrentChar(); - context.m_pos++; - encodeChar(c, buffer, e); - if (e != BCExceptionNO) { - return; - } - int32_t count = buffer.GetLength(); - if ((count % 3) == 0) { - writeNextTriplet(context, buffer); - int32_t newMode = CBC_HighLevelEncoder::lookAheadTest( - context.m_msg, context.m_pos, getEncodingMode()); - if (newMode != getEncodingMode()) { - context.signalEncoderChange(newMode); - break; - } - } - } - handleEOD(context, buffer, e); -} -void CBC_X12Encoder::handleEOD(CBC_EncoderContext& context, - CFX_WideString& buffer, - int32_t& e) { - context.updateSymbolInfo(e); - if (e != BCExceptionNO) { - return; - } - int32_t available = - context.m_symbolInfo->m_dataCapacity - context.getCodewordCount(); - int32_t count = buffer.GetLength(); - if (count == 2) { - context.writeCodeword(CBC_HighLevelEncoder::X12_UNLATCH); - context.m_pos -= 2; - context.signalEncoderChange(ASCII_ENCODATION); - } else if (count == 1) { - context.m_pos--; - if (available > 1) { - context.writeCodeword(CBC_HighLevelEncoder::X12_UNLATCH); - } - context.signalEncoderChange(ASCII_ENCODATION); - } -} -int32_t CBC_X12Encoder::encodeChar(FX_WCHAR c, CFX_WideString& sb, int32_t& e) { - if (c == '\r') { - sb += (FX_WCHAR)'\0'; - } else if (c == '*') { - sb += (FX_WCHAR)'\1'; - } else if (c == '>') { - sb += (FX_WCHAR)'\2'; - } else if (c == ' ') { - sb += (FX_WCHAR)'\3'; - } else if (c >= '0' && c <= '9') { - sb += (FX_WCHAR)(c - 48 + 4); - } else if (c >= 'A' && c <= 'Z') { - sb += (FX_WCHAR)(c - 65 + 14); - } else { - CBC_HighLevelEncoder::illegalCharacter(c, e); - BC_EXCEPTION_CHECK_ReturnValue(e, -1); - } - return 1; -} diff --git a/xfa/src/fxbarcode/datamatrix/BC_X12Encoder.h b/xfa/src/fxbarcode/datamatrix/BC_X12Encoder.h deleted file mode 100644 index 62b35feb66..0000000000 --- a/xfa/src/fxbarcode/datamatrix/BC_X12Encoder.h +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_DATAMATRIX_BC_X12ENCODER_H_ -#define XFA_SRC_FXBARCODE_DATAMATRIX_BC_X12ENCODER_H_ - -class CBC_C40Encoder; -class CBC_X12Encoder; -class CBC_X12Encoder : public CBC_C40Encoder { - public: - CBC_X12Encoder(); - virtual ~CBC_X12Encoder(); - int32_t getEncodingMode(); - void Encode(CBC_EncoderContext& context, int32_t& e); - void handleEOD(CBC_EncoderContext& context, - CFX_WideString& buffer, - int32_t& e); - int32_t encodeChar(FX_WCHAR c, CFX_WideString& sb, int32_t& e); -}; - -#endif // XFA_SRC_FXBARCODE_DATAMATRIX_BC_X12ENCODER_H_ diff --git a/xfa/src/fxbarcode/oned/BC_OneDReader.cpp b/xfa/src/fxbarcode/oned/BC_OneDReader.cpp deleted file mode 100644 index 9ecb20e671..0000000000 --- a/xfa/src/fxbarcode/oned/BC_OneDReader.cpp +++ /dev/null @@ -1,175 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2008 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include -#include - -#include "xfa/src/fxbarcode/BC_BinaryBitmap.h" -#include "xfa/src/fxbarcode/BC_Reader.h" -#include "xfa/src/fxbarcode/common/BC_CommonBitArray.h" -#include "xfa/src/fxbarcode/oned/BC_OneDReader.h" -#include "xfa/src/fxbarcode/utils.h" - -CBC_OneDReader::CBC_OneDReader() {} -CBC_OneDReader::~CBC_OneDReader() {} -CFX_ByteString CBC_OneDReader::Decode(CBC_BinaryBitmap* image, int32_t& e) { - CFX_ByteString strtemp = Decode(image, 0, e); - BC_EXCEPTION_CHECK_ReturnValue(e, ""); - return strtemp; -} -CFX_ByteString CBC_OneDReader::Decode(CBC_BinaryBitmap* image, - int32_t hints, - int32_t& e) { - CFX_ByteString strtemp = DeDecode(image, hints, e); - BC_EXCEPTION_CHECK_ReturnValue(e, ""); - return strtemp; -} -CFX_ByteString CBC_OneDReader::DeDecode(CBC_BinaryBitmap* image, - int32_t hints, - int32_t& e) { - int32_t height = image->GetHeight(); - int32_t middle = height >> 1; - FX_BOOL tryHarder = FALSE; - int32_t rowStep = std::max(1, height >> (tryHarder ? 8 : 5)); - int32_t maxLines; - if (tryHarder) { - maxLines = height; - } else { - maxLines = 15; - } - for (int32_t x = 0; x < maxLines; x++) { - int32_t rowStepsAboveOrBelow = (x + 1) >> 1; - const bool isAbove = (x & 0x01) == 0; - int32_t rowNumber = - middle + - rowStep * (isAbove ? rowStepsAboveOrBelow : -rowStepsAboveOrBelow); - if (rowNumber < 0 || rowNumber >= height) { - break; - } - std::unique_ptr row( - image->GetBlackRow(rowNumber, nullptr, e)); - if (e != BCExceptionNO) { - e = BCExceptionNO; - continue; - } - for (int32_t attempt = 0; attempt < 2; attempt++) { - if (attempt == 1) { - row->Reverse(); - } - CFX_ByteString result = DecodeRow(rowNumber, row.get(), hints, e); - if (e != BCExceptionNO) { - e = BCExceptionNO; - continue; - } - return result; - } - } - e = BCExceptionNotFound; - return ""; -} -void CBC_OneDReader::RecordPattern(CBC_CommonBitArray* row, - int32_t start, - CFX_Int32Array* counters, - int32_t& e) { - int32_t numCounters = counters->GetSize(); - for (int32_t i = 0; i < numCounters; i++) { - (*counters)[i] = 0; - } - int32_t end = row->GetSize(); - if (start >= end) { - e = BCExceptionNotFound; - return; - } - FX_BOOL isWhite = !row->Get(start); - int32_t counterPosition = 0; - int32_t j = start; - while (j < end) { - FX_BOOL pixel = row->Get(j); - if (pixel ^ isWhite) { - (*counters)[counterPosition]++; - } else { - counterPosition++; - if (counterPosition == numCounters) { - break; - } else { - (*counters)[counterPosition] = 1; - isWhite = !isWhite; - } - } - j++; - } - if (!(counterPosition == numCounters || - (counterPosition == numCounters - 1 && j == end))) { - e = BCExceptionNotFound; - return; - } -} -void CBC_OneDReader::RecordPatternInReverse(CBC_CommonBitArray* row, - int32_t start, - CFX_Int32Array* counters, - int32_t& e) { - int32_t numTransitionsLeft = counters->GetSize(); - FX_BOOL last = row->Get(start); - while (start > 0 && numTransitionsLeft >= 0) { - if (row->Get(--start) != last) { - numTransitionsLeft--; - last = !last; - } - } - if (numTransitionsLeft >= 0) { - e = BCExceptionNotFound; - return; - } - RecordPattern(row, start + 1, counters, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); -} -int32_t CBC_OneDReader::PatternMatchVariance(CFX_Int32Array* counters, - const int32_t* pattern, - int32_t maxIndividualVariance) { - int32_t numCounters = counters->GetSize(); - int32_t total = 0; - int32_t patternLength = 0; - for (int32_t i = 0; i < numCounters; i++) { - total += (*counters)[i]; - patternLength += pattern[i]; - } - if (total < patternLength) { -#undef max - return FXSYS_IntMax; - } - int32_t unitBarWidth = (total << INTEGER_MATH_SHIFT) / patternLength; - maxIndividualVariance = - (maxIndividualVariance * unitBarWidth) >> INTEGER_MATH_SHIFT; - int32_t totalVariance = 0; - for (int32_t x = 0; x < numCounters; x++) { - int32_t counter = (*counters)[x] << INTEGER_MATH_SHIFT; - int32_t scaledPattern = pattern[x] * unitBarWidth; - int32_t variance = counter > scaledPattern ? counter - scaledPattern - : scaledPattern - counter; - if (variance > maxIndividualVariance) { -#undef max - return FXSYS_IntMax; - } - totalVariance += variance; - } - return totalVariance / total; -} diff --git a/xfa/src/fxbarcode/oned/BC_OneDReader.h b/xfa/src/fxbarcode/oned/BC_OneDReader.h deleted file mode 100644 index bcd7cbc8b5..0000000000 --- a/xfa/src/fxbarcode/oned/BC_OneDReader.h +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_ONED_BC_ONEDREADER_H_ -#define XFA_SRC_FXBARCODE_ONED_BC_ONEDREADER_H_ - -#include "xfa/src/fxbarcode/BC_Reader.h" - -class CBC_BinaryBitmap; -class CBC_CommonBitArray; - -class CBC_OneDReader : public CBC_Reader { - public: - CBC_OneDReader(); - virtual ~CBC_OneDReader(); - virtual CFX_ByteString Decode(CBC_BinaryBitmap* image, int32_t& e); - virtual CFX_ByteString Decode(CBC_BinaryBitmap* image, - int32_t hints, - int32_t& e); - virtual CFX_ByteString DecodeRow(int32_t rowNumber, - CBC_CommonBitArray* row, - int32_t hints, - int32_t& e) { - return ""; - } - - private: - CFX_ByteString DeDecode(CBC_BinaryBitmap* image, int32_t hints, int32_t& e); - - protected: - static const int32_t INTEGER_MATH_SHIFT = 8; - static const int32_t PATTERN_MATCH_RESULT_SCALE_FACTOR = 1 << 8; - - void RecordPattern(CBC_CommonBitArray* row, - int32_t start, - CFX_Int32Array* counters, - int32_t& e); - void RecordPatternInReverse(CBC_CommonBitArray* row, - int32_t start, - CFX_Int32Array* counters, - int32_t& e); - int32_t PatternMatchVariance(CFX_Int32Array* counters, - const int32_t* pattern, - int32_t maxIndividualVariance); -}; - -#endif // XFA_SRC_FXBARCODE_ONED_BC_ONEDREADER_H_ diff --git a/xfa/src/fxbarcode/oned/BC_OneDimReader.cpp b/xfa/src/fxbarcode/oned/BC_OneDimReader.cpp deleted file mode 100644 index 07b8657189..0000000000 --- a/xfa/src/fxbarcode/oned/BC_OneDimReader.cpp +++ /dev/null @@ -1,219 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2008 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/oned/BC_OneDimReader.h" - -#include - -#include "xfa/src/fxbarcode/BC_Reader.h" -#include "xfa/src/fxbarcode/common/BC_CommonBitArray.h" -#include "xfa/src/fxbarcode/oned/BC_OneDReader.h" -#include "xfa/src/fxbarcode/utils.h" - -const int32_t CBC_OneDimReader::START_END_PATTERN[3] = {1, 1, 1}; -const int32_t CBC_OneDimReader::MIDDLE_PATTERN[5] = {1, 1, 1, 1, 1}; -const int32_t CBC_OneDimReader::L_PATTERNS[10][4] = { - {3, 2, 1, 1}, {2, 2, 2, 1}, {2, 1, 2, 2}, {1, 4, 1, 1}, {1, 1, 3, 2}, - {1, 2, 3, 1}, {1, 1, 1, 4}, {1, 3, 1, 2}, {1, 2, 1, 3}, {3, 1, 1, 2}}; -const int32_t CBC_OneDimReader::L_AND_G_PATTERNS[20][4] = { - {3, 2, 1, 1}, {2, 2, 2, 1}, {2, 1, 2, 2}, {1, 4, 1, 1}, {1, 1, 3, 2}, - {1, 2, 3, 1}, {1, 1, 1, 4}, {1, 3, 1, 2}, {1, 2, 1, 3}, {3, 1, 1, 2}, - {1, 1, 2, 3}, {1, 2, 2, 2}, {2, 2, 1, 2}, {1, 1, 4, 1}, {2, 3, 1, 1}, - {1, 3, 2, 1}, {4, 1, 1, 1}, {2, 1, 3, 1}, {3, 1, 2, 1}, {2, 1, 1, 3}}; - -CBC_OneDimReader::CBC_OneDimReader() {} -CBC_OneDimReader::~CBC_OneDimReader() {} -CFX_Int32Array* CBC_OneDimReader::FindStartGuardPattern(CBC_CommonBitArray* row, - int32_t& e) { - FX_BOOL foundStart = FALSE; - CFX_Int32Array* startRange = NULL; - CFX_Int32Array startEndPattern; - startEndPattern.SetSize(3); - startEndPattern[0] = START_END_PATTERN[0]; - startEndPattern[1] = START_END_PATTERN[1]; - startEndPattern[2] = START_END_PATTERN[2]; - int32_t nextStart = 0; - while (!foundStart) { - delete startRange; - startRange = FindGuardPattern(row, nextStart, FALSE, &startEndPattern, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - int32_t start = (*startRange)[0]; - nextStart = (*startRange)[1]; - if (start <= 1) { - break; - } - int32_t quietStart = start - (nextStart - start); - if (quietStart >= 0) { - FX_BOOL booT = row->IsRange(quietStart, start, FALSE, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - foundStart = booT; - } - } - return startRange; -} -CFX_ByteString CBC_OneDimReader::DecodeRow(int32_t rowNumber, - CBC_CommonBitArray* row, - int32_t hints, - int32_t& e) { - std::unique_ptr result(FindStartGuardPattern(row, e)); - BC_EXCEPTION_CHECK_ReturnValue(e, ""); - CFX_ByteString temp = DecodeRow(rowNumber, row, result.get(), hints, e); - BC_EXCEPTION_CHECK_ReturnValue(e, ""); - return temp; -} -CFX_ByteString CBC_OneDimReader::DecodeRow(int32_t rowNumber, - CBC_CommonBitArray* row, - CFX_Int32Array* startGuardRange, - int32_t hints, - int32_t& e) { - CFX_ByteString result; - DecodeMiddle(row, startGuardRange, result, e); - BC_EXCEPTION_CHECK_ReturnValue(e, ""); - FX_BOOL b = CheckChecksum(result, e); - BC_EXCEPTION_CHECK_ReturnValue(e, ""); - if (!b) { - e = BCExceptionChecksumException; - return ""; - } - return result; -} -FX_BOOL CBC_OneDimReader::CheckChecksum(CFX_ByteString& s, int32_t& e) { - FX_BOOL temp = CheckStandardUPCEANChecksum(s, e); - BC_EXCEPTION_CHECK_ReturnValue(e, FALSE); - return temp; -} -FX_BOOL CBC_OneDimReader::CheckStandardUPCEANChecksum(CFX_ByteString& s, - int32_t& e) { - int32_t length = s.GetLength(); - if (length == 0) { - return FALSE; - } - int32_t sum = 0; - for (int32_t i = length - 2; i >= 0; i -= 2) { - int32_t digit = (int32_t)s[i] - (int32_t)'0'; - if (digit < 0 || digit > 9) { - e = BCExceptionFormatException; - return FALSE; - } - sum += digit; - } - sum *= 3; - for (int32_t j = length - 1; j >= 0; j -= 2) { - int32_t digit = (int32_t)s[j] - (int32_t)'0'; - if (digit < 0 || digit > 9) { - e = BCExceptionFormatException; - return FALSE; - } - sum += digit; - } - return sum % 10 == 0; -} -CFX_Int32Array* CBC_OneDimReader::DecodeEnd(CBC_CommonBitArray* row, - int32_t endStart, - int32_t& e) { - CFX_Int32Array startEndPattern; - startEndPattern.Add(START_END_PATTERN[0]); - startEndPattern.Add(START_END_PATTERN[1]); - startEndPattern.Add(START_END_PATTERN[2]); - CFX_Int32Array* FindGuard = - FindGuardPattern(row, endStart, FALSE, &startEndPattern, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - return FindGuard; -} -CFX_Int32Array* CBC_OneDimReader::FindGuardPattern(CBC_CommonBitArray* row, - int32_t rowOffset, - FX_BOOL whiteFirst, - CFX_Int32Array* pattern, - int32_t& e) { - int32_t patternLength = pattern->GetSize(); - CFX_Int32Array counters; - counters.SetSize(patternLength); - int32_t width = row->GetSize(); - FX_BOOL isWhite = FALSE; - while (rowOffset < width) { - isWhite = !row->Get(rowOffset); - if (whiteFirst == isWhite) { - break; - } - rowOffset++; - } - int32_t counterPosition = 0; - int32_t patternStart = rowOffset; - for (int32_t x = rowOffset; x < width; x++) { - FX_BOOL pixel = row->Get(x); - if (pixel ^ isWhite) { - counters[counterPosition]++; - } else { - if (counterPosition == patternLength - 1) { - if (PatternMatchVariance(&counters, &(*pattern)[0], - MAX_INDIVIDUAL_VARIANCE) < MAX_AVG_VARIANCE) { - CFX_Int32Array* result = new CFX_Int32Array(); - result->SetSize(2); - (*result)[0] = patternStart; - (*result)[1] = x; - return result; - } - patternStart += counters[0] + counters[1]; - for (int32_t y = 2; y < patternLength; y++) { - counters[y - 2] = counters[y]; - } - counters[patternLength - 2] = 0; - counters[patternLength - 1] = 0; - counterPosition--; - } else { - counterPosition++; - } - counters[counterPosition] = 1; - isWhite = !isWhite; - } - } - e = BCExceptionNotFound; - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - return NULL; -} -int32_t CBC_OneDimReader::DecodeDigit(CBC_CommonBitArray* row, - CFX_Int32Array* counters, - int32_t rowOffset, - const int32_t* patterns, - int32_t patternLength, - int32_t& e) { - RecordPattern(row, rowOffset, counters, e); - BC_EXCEPTION_CHECK_ReturnValue(e, 0); - int32_t bestVariance = MAX_AVG_VARIANCE; - int32_t bestMatch = -1; - int32_t max = patternLength; - for (int32_t i = 0; i < max; i++) { - int32_t variance = PatternMatchVariance(counters, &patterns[i * 4], - MAX_INDIVIDUAL_VARIANCE); - if (variance < bestVariance) { - bestVariance = variance; - bestMatch = i; - } - } - if (bestMatch >= 0) { - return bestMatch; - } else { - e = BCExceptionNotFound; - return 0; - } - return 0; -} diff --git a/xfa/src/fxbarcode/oned/BC_OneDimReader.h b/xfa/src/fxbarcode/oned/BC_OneDimReader.h deleted file mode 100644 index 9e5789afb9..0000000000 --- a/xfa/src/fxbarcode/oned/BC_OneDimReader.h +++ /dev/null @@ -1,66 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_ONED_BC_ONEDIMREADER_H_ -#define XFA_SRC_FXBARCODE_ONED_BC_ONEDIMREADER_H_ - -#include "core/include/fxcrt/fx_basic.h" -#include "xfa/src/fxbarcode/oned/BC_OneDReader.h" - -class CBC_CommonBitArray; - -class CBC_OneDimReader : public CBC_OneDReader { - private: - static const int32_t MAX_AVG_VARIANCE = (int32_t)(256 * 0.48f); - static const int32_t MAX_INDIVIDUAL_VARIANCE = (int32_t)(256 * 0.7f); - - FX_BOOL CheckStandardUPCEANChecksum(CFX_ByteString& s, int32_t& e); - - public: - static const int32_t START_END_PATTERN[3]; - static const int32_t MIDDLE_PATTERN[5]; - static const int32_t L_PATTERNS[10][4]; - static const int32_t L_AND_G_PATTERNS[20][4]; - - CBC_OneDimReader(); - virtual ~CBC_OneDimReader(); - - CFX_ByteString DecodeRow(int32_t rowNumber, - CBC_CommonBitArray* row, - int32_t hints, - int32_t& e); - CFX_ByteString DecodeRow(int32_t rowNumber, - CBC_CommonBitArray* row, - CFX_Int32Array* startGuardRange, - int32_t hints, - int32_t& e); - - protected: - CFX_Int32Array* FindStartGuardPattern(CBC_CommonBitArray* row, int32_t& e); - virtual FX_BOOL CheckChecksum(CFX_ByteString& s, int32_t& e); - CFX_Int32Array* FindGuardPattern(CBC_CommonBitArray* row, - int32_t rowOffset, - FX_BOOL whiteFirst, - CFX_Int32Array* pattern, - int32_t& e); - int32_t DecodeDigit(CBC_CommonBitArray* row, - CFX_Int32Array* counters, - int32_t rowOffset, - const int32_t* patterns, - int32_t patternLength, - int32_t& e); - virtual int32_t DecodeMiddle(CBC_CommonBitArray* row, - CFX_Int32Array* startRange, - CFX_ByteString& resultResult, - int32_t& e) { - return 0; - } - virtual CFX_Int32Array* DecodeEnd(CBC_CommonBitArray* row, - int32_t endStart, - int32_t& e); -}; - -#endif // XFA_SRC_FXBARCODE_ONED_BC_ONEDIMREADER_H_ diff --git a/xfa/src/fxbarcode/oned/BC_OneDimWriter.cpp b/xfa/src/fxbarcode/oned/BC_OneDimWriter.cpp deleted file mode 100644 index 121b72cb05..0000000000 --- a/xfa/src/fxbarcode/oned/BC_OneDimWriter.cpp +++ /dev/null @@ -1,437 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2011 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/oned/BC_OneDimWriter.h" - -#include -#include - -#include "xfa/src/fxbarcode/BC_Writer.h" -#include "xfa/src/fxbarcode/common/BC_CommonBitMatrix.h" - -CBC_OneDimWriter::CBC_OneDimWriter() { - m_locTextLoc = BC_TEXT_LOC_BELOWEMBED; - m_bPrintChecksum = TRUE; - m_iDataLenth = 0; - m_bCalcChecksum = FALSE; - m_pFont = NULL; - m_fFontSize = 10; - m_iFontStyle = 0; - m_fontColor = 0xff000000; - m_iContentLen = 0; - m_bLeftPadding = FALSE; - m_bRightPadding = FALSE; - m_output = NULL; -} -CBC_OneDimWriter::~CBC_OneDimWriter() { - delete m_output; -} -void CBC_OneDimWriter::SetPrintChecksum(FX_BOOL checksum) { - m_bPrintChecksum = checksum; -} -void CBC_OneDimWriter::SetDataLength(int32_t length) { - m_iDataLenth = length; -} -void CBC_OneDimWriter::SetCalcChecksum(int32_t state) { - m_bCalcChecksum = state; -} -FX_BOOL CBC_OneDimWriter::SetFont(CFX_Font* cFont) { - if (cFont == NULL) { - return FALSE; - } - m_pFont = cFont; - return TRUE; -} -void CBC_OneDimWriter::SetFontSize(FX_FLOAT size) { - m_fFontSize = size; -} -void CBC_OneDimWriter::SetFontStyle(int32_t style) { - m_iFontStyle = style; -} -void CBC_OneDimWriter::SetFontColor(FX_ARGB color) { - m_fontColor = color; -} -FX_WCHAR CBC_OneDimWriter::Upper(FX_WCHAR ch) { - if (ch >= 'a' && ch <= 'z') { - ch = ch - ('a' - 'A'); - } - return ch; -} -uint8_t* CBC_OneDimWriter::Encode(const CFX_ByteString& contents, - BCFORMAT format, - int32_t& outWidth, - int32_t& outHeight, - int32_t hints, - int32_t& e) { - uint8_t* ret = NULL; - outHeight = 1; - if (m_Width >= 20) { - ret = Encode(contents, outWidth, e); - } else { - ret = Encode(contents, outWidth, e); - } - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - return ret; -} -uint8_t* CBC_OneDimWriter::Encode(const CFX_ByteString& contents, - BCFORMAT format, - int32_t& outWidth, - int32_t& outHeight, - int32_t& e) { - uint8_t* ret = Encode(contents, format, outWidth, outHeight, 0, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - return ret; -} -int32_t CBC_OneDimWriter::AppendPattern(uint8_t* target, - int32_t pos, - const int32_t* pattern, - int32_t patternLength, - int32_t startColor, - int32_t& e) { - if (startColor != 0 && startColor != 1) { - e = BCExceptionValueMustBeEither0or1; - return 0; - } - uint8_t color = (uint8_t)startColor; - int32_t numAdded = 0; - for (int32_t i = 0; i < patternLength; i++) { - for (int32_t j = 0; j < pattern[i]; j++) { - target[pos] = color; - pos += 1; - numAdded += 1; - } - color ^= 1; - } - return numAdded; -} -void CBC_OneDimWriter::CalcTextInfo(const CFX_ByteString& text, - FXTEXT_CHARPOS* charPos, - CFX_Font* cFont, - FX_FLOAT geWidth, - int32_t fontSize, - FX_FLOAT& charsLen) { - std::unique_ptr encoding( - FX_CreateFontEncodingEx(cFont)); - - int32_t length = text.GetLength(); - FX_DWORD* pCharCode = FX_Alloc(FX_DWORD, text.GetLength()); - FX_FLOAT charWidth = 0; - for (int32_t j = 0; j < text.GetLength(); j++) { - pCharCode[j] = encoding->CharCodeFromUnicode(text[j]); - int32_t glyp_code = encoding->GlyphFromCharCode(pCharCode[j]); - int32_t glyp_value = cFont->GetGlyphWidth(glyp_code); - FX_FLOAT temp = (FX_FLOAT)((glyp_value)*fontSize / 1000.0); - charWidth += temp; - } - charsLen = charWidth; - FX_FLOAT leftPositon = (FX_FLOAT)(geWidth - charsLen) / 2.0f; - if (leftPositon < 0 && geWidth == 0) { - leftPositon = 0; - } - FX_FLOAT penX = 0.0; - FX_FLOAT penY = - (FX_FLOAT)FXSYS_abs(cFont->GetDescent()) * (FX_FLOAT)fontSize / 1000.0f; - FX_FLOAT left = leftPositon; - FX_FLOAT top = 0.0; - charPos[0].m_OriginX = penX + left; - charPos[0].m_OriginY = penY + top; - charPos[0].m_GlyphIndex = encoding->GlyphFromCharCode(pCharCode[0]); - charPos[0].m_FontCharWidth = cFont->GetGlyphWidth(charPos[0].m_GlyphIndex); -#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ - charPos[0].m_ExtGID = charPos[0].m_GlyphIndex; -#endif - penX += (FX_FLOAT)(charPos[0].m_FontCharWidth) * (FX_FLOAT)fontSize / 1000.0f; - for (int32_t i = 1; i < length; i++) { - charPos[i].m_OriginX = penX + left; - charPos[i].m_OriginY = penY + top; - charPos[i].m_GlyphIndex = encoding->GlyphFromCharCode(pCharCode[i]); - charPos[i].m_FontCharWidth = cFont->GetGlyphWidth(charPos[i].m_GlyphIndex); -#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ - charPos[i].m_ExtGID = charPos[i].m_GlyphIndex; -#endif - penX += - (FX_FLOAT)(charPos[i].m_FontCharWidth) * (FX_FLOAT)fontSize / 1000.0f; - } - FX_Free(pCharCode); -} -void CBC_OneDimWriter::ShowDeviceChars(CFX_RenderDevice* device, - const CFX_Matrix* matrix, - const CFX_ByteString str, - FX_FLOAT geWidth, - FXTEXT_CHARPOS* pCharPos, - FX_FLOAT locX, - FX_FLOAT locY, - int32_t barWidth) { - int32_t iFontSize = (int32_t)fabs(m_fFontSize); - int32_t iTextHeight = iFontSize + 1; - CFX_FloatRect rect((FX_FLOAT)locX, (FX_FLOAT)locY, (FX_FLOAT)(locX + geWidth), - (FX_FLOAT)(locY + iTextHeight)); - if (geWidth != m_Width) { - rect.right -= 1; - } - matrix->TransformRect(rect); - FX_RECT re = rect.GetOutterRect(); - device->FillRect(&re, m_backgroundColor); - CFX_Matrix affine_matrix(1.0, 0.0, 0.0, -1.0, (FX_FLOAT)locX, - (FX_FLOAT)(locY + iFontSize)); - if (matrix) { - affine_matrix.Concat(*matrix); - } - device->DrawNormalText(str.GetLength(), pCharPos, m_pFont, - CFX_GEModule::Get()->GetFontCache(), - (FX_FLOAT)iFontSize, (CFX_Matrix*)&affine_matrix, - m_fontColor, FXTEXT_CLEARTYPE); -} -void CBC_OneDimWriter::ShowBitmapChars(CFX_DIBitmap* pOutBitmap, - const CFX_ByteString str, - FX_FLOAT geWidth, - FXTEXT_CHARPOS* pCharPos, - FX_FLOAT locX, - FX_FLOAT locY, - int32_t barWidth) { - int32_t iFontSize = (int32_t)fabs(m_fFontSize); - int32_t iTextHeight = iFontSize + 1; - CFX_FxgeDevice ge; - ge.Create((int)geWidth, iTextHeight, m_colorSpace); - FX_RECT geRect(0, 0, (int)geWidth, iTextHeight); - ge.FillRect(&geRect, m_backgroundColor); - CFX_Matrix affine_matrix(1.0, 0.0, 0.0, -1.0, 0.0, (FX_FLOAT)iFontSize); - ge.DrawNormalText(str.GetLength(), pCharPos, m_pFont, - CFX_GEModule::Get()->GetFontCache(), (FX_FLOAT)iFontSize, - (CFX_Matrix*)&affine_matrix, m_fontColor, FXTEXT_CLEARTYPE); - CFX_FxgeDevice geBitmap; - geBitmap.Attach(pOutBitmap); - geBitmap.SetDIBits(ge.GetBitmap(), (int)locX, (int)locY); -} -void CBC_OneDimWriter::ShowChars(const CFX_WideStringC& contents, - CFX_DIBitmap* pOutBitmap, - CFX_RenderDevice* device, - const CFX_Matrix* matrix, - int32_t barWidth, - int32_t multiple, - int32_t& e) { - if (device == NULL && pOutBitmap == NULL) { - e = BCExceptionIllegalArgument; - return; - } - if (m_pFont == NULL) { - e = BCExceptionNullPointer; - return; - } - CFX_ByteString str = FX_UTF8Encode(contents); - int32_t iLen = str.GetLength(); - FXTEXT_CHARPOS* pCharPos = FX_Alloc(FXTEXT_CHARPOS, iLen); - FXSYS_memset(pCharPos, 0, sizeof(FXTEXT_CHARPOS) * iLen); - FX_FLOAT charsLen = 0; - FX_FLOAT geWidth = 0; - if (m_locTextLoc == BC_TEXT_LOC_ABOVEEMBED || - m_locTextLoc == BC_TEXT_LOC_BELOWEMBED) { - geWidth = 0; - } else if (m_locTextLoc == BC_TEXT_LOC_ABOVE || - m_locTextLoc == BC_TEXT_LOC_BELOW) { - geWidth = (FX_FLOAT)barWidth; - } - int32_t iFontSize = (int32_t)fabs(m_fFontSize); - int32_t iTextHeight = iFontSize + 1; - CalcTextInfo(str, pCharPos, m_pFont, geWidth, iFontSize, charsLen); - if (charsLen < 1) { - return; - } - int32_t locX = 0; - int32_t locY = 0; - switch (m_locTextLoc) { - case BC_TEXT_LOC_ABOVEEMBED: - locX = (int32_t)(barWidth - charsLen) / 2; - locY = 0; - geWidth = charsLen; - break; - case BC_TEXT_LOC_ABOVE: - locX = 0; - locY = 0; - geWidth = (FX_FLOAT)barWidth; - break; - case BC_TEXT_LOC_BELOWEMBED: - locX = (int32_t)(barWidth - charsLen) / 2; - locY = m_Height - iTextHeight; - geWidth = charsLen; - break; - case BC_TEXT_LOC_BELOW: - default: - locX = 0; - locY = m_Height - iTextHeight; - geWidth = (FX_FLOAT)barWidth; - break; - } - if (device) { - ShowDeviceChars(device, matrix, str, geWidth, pCharPos, (FX_FLOAT)locX, - (FX_FLOAT)locY, barWidth); - } else { - ShowBitmapChars(pOutBitmap, str, geWidth, pCharPos, (FX_FLOAT)locX, - (FX_FLOAT)locY, barWidth); - } - FX_Free(pCharPos); -} -void CBC_OneDimWriter::RenderBitmapResult(CFX_DIBitmap*& pOutBitmap, - const CFX_WideStringC& contents, - int32_t& e) { - if (m_output == NULL) { - BC_EXCEPTION_CHECK_ReturnVoid(e); - } - pOutBitmap = CreateDIBitmap(m_output->GetWidth(), m_output->GetHeight()); - pOutBitmap->Clear(m_backgroundColor); - if (!pOutBitmap) { - e = BCExceptionFailToCreateBitmap; - return; - } - for (int32_t x = 0; x < m_output->GetWidth(); x++) { - for (int32_t y = 0; y < m_output->GetHeight(); y++) { - if (m_output->Get(x, y)) { - pOutBitmap->SetPixel(x, y, m_barColor); - } - } - } - int32_t i = 0; - for (; i < contents.GetLength(); i++) - if (contents.GetAt(i) != ' ') { - break; - } - if (m_locTextLoc != BC_TEXT_LOC_NONE && i < contents.GetLength()) { - ShowChars(contents, pOutBitmap, NULL, NULL, m_barWidth, m_multiple, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - } - CFX_DIBitmap* pStretchBitmap = pOutBitmap->StretchTo(m_Width, m_Height); - if (pOutBitmap) { - delete pOutBitmap; - } - pOutBitmap = pStretchBitmap; -} -void CBC_OneDimWriter::RenderDeviceResult(CFX_RenderDevice* device, - const CFX_Matrix* matrix, - const CFX_WideStringC& contents, - int32_t& e) { - if (m_output == NULL) { - BC_EXCEPTION_CHECK_ReturnVoid(e); - } - CFX_GraphStateData stateData; - CFX_PathData path; - path.AppendRect(0, 0, (FX_FLOAT)m_Width, (FX_FLOAT)m_Height); - device->DrawPath(&path, matrix, &stateData, m_backgroundColor, - m_backgroundColor, FXFILL_ALTERNATE); - CFX_Matrix matri(m_outputHScale, 0.0, 0.0, (FX_FLOAT)m_Height, 0.0, 0.0); - matri.Concat(*matrix); - for (int32_t x = 0; x < m_output->GetWidth(); x++) { - for (int32_t y = 0; y < m_output->GetHeight(); y++) { - CFX_PathData rect; - rect.AppendRect((FX_FLOAT)x, (FX_FLOAT)y, (FX_FLOAT)(x + 1), - (FX_FLOAT)(y + 1)); - CFX_GraphStateData stateData; - if (m_output->Get(x, y)) { - device->DrawPath(&rect, &matri, &stateData, m_barColor, 0, - FXFILL_WINDING); - } - } - } - int32_t i = 0; - for (; i < contents.GetLength(); i++) - if (contents.GetAt(i) != ' ') { - break; - } - if (m_locTextLoc != BC_TEXT_LOC_NONE && i < contents.GetLength()) { - ShowChars(contents, NULL, device, matrix, m_barWidth, m_multiple, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - } -} -void CBC_OneDimWriter::RenderResult(const CFX_WideStringC& contents, - uint8_t* code, - int32_t codeLength, - FX_BOOL isDevice, - int32_t& e) { - if (codeLength < 1) { - BC_EXCEPTION_CHECK_ReturnVoid(e); - } - if (m_ModuleHeight < 20.0) { - m_ModuleHeight = 20; - } - int32_t codeOldLength = codeLength; - int32_t leftPadding = 0; - int32_t rightPadding = 0; - if (m_bLeftPadding) { - leftPadding = 7; - } - if (m_bRightPadding) { - rightPadding = 7; - } - codeLength += leftPadding; - codeLength += rightPadding; - m_outputHScale = 1.0; - if (m_Width > 0) { - m_outputHScale = (FX_FLOAT)m_Width / (FX_FLOAT)codeLength; - } - if (!isDevice) { - m_outputHScale = - std::max(m_outputHScale, static_cast(m_ModuleWidth)); - } - FX_FLOAT dataLengthScale = 1.0; - if (m_iDataLenth > 0 && contents.GetLength() != 0) { - dataLengthScale = FX_FLOAT(contents.GetLength()) / FX_FLOAT(m_iDataLenth); - } - if (m_iDataLenth > 0 && contents.GetLength() == 0) { - dataLengthScale = FX_FLOAT(1) / FX_FLOAT(m_iDataLenth); - } - m_multiple = 1; - if (!isDevice) { - m_multiple = (int32_t)ceil(m_outputHScale * dataLengthScale); - } - int32_t outputHeight = 1; - if (!isDevice) { - if (m_Height == 0) { - outputHeight = std::max(20, m_ModuleHeight); - } else { - outputHeight = m_Height; - } - } - int32_t outputWidth = codeLength; - if (!isDevice) { - outputWidth = (int32_t)(codeLength * m_multiple / dataLengthScale); - } - m_barWidth = m_Width; - if (!isDevice) { - m_barWidth = codeLength * m_multiple; - } - m_output = new CBC_CommonBitMatrix; - m_output->Init(outputWidth, outputHeight); - int32_t outputX = leftPadding * m_multiple; - for (int32_t inputX = 0; inputX < codeOldLength; inputX++) { - if (code[inputX] == 1) { - if (outputX >= outputWidth) { - break; - } - if (outputX + m_multiple > outputWidth && outputWidth - outputX > 0) { - m_output->SetRegion(outputX, 0, outputWidth - outputX, outputHeight, e); - break; - } - m_output->SetRegion(outputX, 0, m_multiple, outputHeight, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - } - outputX += m_multiple; - } -} diff --git a/xfa/src/fxbarcode/oned/BC_OneDimWriter.h b/xfa/src/fxbarcode/oned/BC_OneDimWriter.h deleted file mode 100644 index f8001dc5c7..0000000000 --- a/xfa/src/fxbarcode/oned/BC_OneDimWriter.h +++ /dev/null @@ -1,120 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_ONED_BC_ONEDIMWRITER_H_ -#define XFA_SRC_FXBARCODE_ONED_BC_ONEDIMWRITER_H_ - -#include "core/include/fxge/fx_ge.h" -#include "xfa/include/fxbarcode/BC_BarCode.h" -#include "xfa/src/fxbarcode/BC_Writer.h" - -class CBC_CommonBitMatrix; -class CFX_Font; -class CFX_RenderDevice; - -class CBC_OneDimWriter : public CBC_Writer { - public: - CBC_OneDimWriter(); - virtual ~CBC_OneDimWriter(); - uint8_t* Encode(const CFX_ByteString& contents, - BCFORMAT format, - int32_t& outWidth, - int32_t& outHeight, - int32_t& e); - uint8_t* Encode(const CFX_ByteString& contents, - BCFORMAT format, - int32_t& outWidth, - int32_t& outHeight, - int32_t hints, - int32_t& e); - virtual uint8_t* Encode(const CFX_ByteString& contents, - int32_t& outLength, - int32_t& e) { - return NULL; - } - virtual void RenderResult(const CFX_WideStringC& contents, - uint8_t* code, - int32_t codeLength, - FX_BOOL isDevice, - int32_t& e); - virtual void RenderBitmapResult(CFX_DIBitmap*& pOutBitmap, - const CFX_WideStringC& contents, - int32_t& e); - virtual void RenderDeviceResult(CFX_RenderDevice* device, - const CFX_Matrix* matrix, - const CFX_WideStringC& contents, - int32_t& e); - virtual FX_BOOL CheckContentValidity(const CFX_WideStringC& contents) { - return TRUE; - } - virtual CFX_WideString FilterContents(const CFX_WideStringC& contents) { - return CFX_WideString(); - } - virtual CFX_WideString RenderTextContents(const CFX_WideStringC& contents) { - return CFX_WideString(); - } - virtual void SetPrintChecksum(FX_BOOL checksum); - virtual void SetDataLength(int32_t length); - virtual void SetCalcChecksum(int32_t state); - virtual void SetFontSize(FX_FLOAT size); - virtual void SetFontStyle(int32_t style); - virtual void SetFontColor(FX_ARGB color); - virtual FX_BOOL SetFont(CFX_Font* cFont); - - protected: - FX_BOOL m_bPrintChecksum; - int32_t m_iDataLenth; - FX_BOOL m_bCalcChecksum; - CFX_Font* m_pFont; - FX_FLOAT m_fFontSize; - int32_t m_iFontStyle; - FX_DWORD m_fontColor; - BC_TEXT_LOC m_locTextLoc; - int32_t m_iContentLen; - FX_BOOL m_bLeftPadding; - FX_BOOL m_bRightPadding; - CBC_CommonBitMatrix* m_output; - int32_t m_barWidth; - int32_t m_multiple; - FX_FLOAT m_outputHScale; - void CalcTextInfo(const CFX_ByteString& text, - FXTEXT_CHARPOS* charPos, - CFX_Font* cFont, - FX_FLOAT geWidth, - int32_t fontSize, - FX_FLOAT& charsLen); - virtual void ShowChars(const CFX_WideStringC& contents, - CFX_DIBitmap* pOutBitmap, - CFX_RenderDevice* device, - const CFX_Matrix* matrix, - int32_t barWidth, - int32_t multiple, - int32_t& e); - virtual void ShowBitmapChars(CFX_DIBitmap* pOutBitmap, - const CFX_ByteString str, - FX_FLOAT geWidth, - FXTEXT_CHARPOS* pCharPos, - FX_FLOAT locX, - FX_FLOAT locY, - int32_t barWidth); - virtual void ShowDeviceChars(CFX_RenderDevice* device, - const CFX_Matrix* matrix, - const CFX_ByteString str, - FX_FLOAT geWidth, - FXTEXT_CHARPOS* pCharPos, - FX_FLOAT locX, - FX_FLOAT locY, - int32_t barWidth); - int32_t AppendPattern(uint8_t* target, - int32_t pos, - const int32_t* pattern, - int32_t patternLength, - int32_t startColor, - int32_t& e); - FX_WCHAR Upper(FX_WCHAR ch); -}; - -#endif // XFA_SRC_FXBARCODE_ONED_BC_ONEDIMWRITER_H_ diff --git a/xfa/src/fxbarcode/oned/BC_OnedCodaBarReader.cpp b/xfa/src/fxbarcode/oned/BC_OnedCodaBarReader.cpp deleted file mode 100644 index 5d2d447efc..0000000000 --- a/xfa/src/fxbarcode/oned/BC_OnedCodaBarReader.cpp +++ /dev/null @@ -1,212 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2008 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/oned/BC_OnedCodaBarReader.h" - -#include -#include - -#include "core/include/fxcrt/fx_basic.h" -#include "xfa/src/fxbarcode/BC_Reader.h" -#include "xfa/src/fxbarcode/common/BC_CommonBitArray.h" -#include "xfa/src/fxbarcode/oned/BC_OneDReader.h" -#include "xfa/src/fxbarcode/oned/BC_OnedCode39Reader.h" -#include "xfa/src/fxbarcode/utils.h" - -const FX_CHAR* CBC_OnedCodaBarReader::ALPHABET_STRING = - "0123456789-$:/.+ABCDTN"; -const int32_t CBC_OnedCodaBarReader::CHARACTER_ENCODINGS[22] = { - 0x003, 0x006, 0x009, 0x060, 0x012, 0x042, 0x021, 0x024, - 0x030, 0x048, 0x00c, 0x018, 0x045, 0x051, 0x054, 0x015, - 0x01A, 0x029, 0x00B, 0x00E, 0x01A, 0x029}; -const FX_CHAR CBC_OnedCodaBarReader::STARTEND_ENCODING[8] = { - 'E', '*', 'A', 'B', 'C', 'D', 'T', 'N'}; - -CBC_OnedCodaBarReader::CBC_OnedCodaBarReader() {} -CBC_OnedCodaBarReader::~CBC_OnedCodaBarReader() {} -CFX_ByteString CBC_OnedCodaBarReader::DecodeRow(int32_t rowNumber, - CBC_CommonBitArray* row, - int32_t hints, - int32_t& e) { - std::unique_ptr start(FindAsteriskPattern(row, e)); - BC_EXCEPTION_CHECK_ReturnValue(e, ""); - (*start)[1] = 0; - int32_t nextStart = (*start)[1]; - int32_t end = row->GetSize(); - while (nextStart < end && !row->Get(nextStart)) { - nextStart++; - } - CFX_ByteString result; - CFX_Int32Array counters; - counters.SetSize(7); - FX_CHAR decodedChar; - int32_t lastStart; - do { - RecordPattern(row, nextStart, &counters, e); - BC_EXCEPTION_CHECK_ReturnValue(e, ""); - decodedChar = ToNarrowWidePattern(&counters); - if (decodedChar == '!') { - e = BCExceptionNotFound; - return ""; - } - result += decodedChar; - lastStart = nextStart; - for (int32_t i = 0; i < counters.GetSize(); i++) { - nextStart += counters[i]; - } - while (nextStart < end && !row->Get(nextStart)) { - nextStart++; - } - } while (nextStart < end); - int32_t lastPatternSize = 0; - for (int32_t j = 0; j < counters.GetSize(); j++) { - lastPatternSize += counters[j]; - } - int32_t whiteSpaceAfterEnd = nextStart - lastStart - lastPatternSize; - if (nextStart != end && (whiteSpaceAfterEnd / 2 < lastPatternSize)) { - e = BCExceptionNotFound; - return ""; - } - if (result.GetLength() < 2) { - e = BCExceptionNotFound; - return ""; - } - FX_CHAR startchar = result[0]; - if (!ArrayContains(STARTEND_ENCODING, startchar)) { - e = BCExceptionNotFound; - return ""; - } - int32_t len = result.GetLength(); - CFX_ByteString temp = result; - for (int32_t k = 1; k < result.GetLength(); k++) { - if (ArrayContains(STARTEND_ENCODING, result[k])) { - if ((k + 1) != result.GetLength()) { - result.Delete(1, k); - k = 1; - } - } - } - if (result.GetLength() < 5) { - int32_t index = temp.Find(result.Mid(1, result.GetLength() - 1)); - if (index == len - (result.GetLength() - 1)) { - e = BCExceptionNotFound; - return ""; - } - } - if (result.GetLength() > minCharacterLength) { - result = result.Mid(1, result.GetLength() - 2); - } else { - e = BCExceptionNotFound; - return ""; - } - return result; -} -CFX_Int32Array* CBC_OnedCodaBarReader::FindAsteriskPattern( - CBC_CommonBitArray* row, - int32_t& e) { - int32_t width = row->GetSize(); - int32_t rowOffset = 0; - while (rowOffset < width) { - if (row->Get(rowOffset)) { - break; - } - rowOffset++; - } - int32_t counterPosition = 0; - CFX_Int32Array counters; - counters.SetSize(7); - int32_t patternStart = rowOffset; - FX_BOOL isWhite = FALSE; - int32_t patternLength = counters.GetSize(); - for (int32_t i = rowOffset; i < width; i++) { - FX_BOOL pixel = row->Get(i); - if (pixel ^ isWhite) { - counters[counterPosition]++; - } else { - if (counterPosition == patternLength - 1) { - if (ArrayContains(STARTEND_ENCODING, ToNarrowWidePattern(&counters))) { - FX_BOOL btemp3 = - row->IsRange(std::max(0, patternStart - (i - patternStart) / 2), - patternStart, FALSE, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - if (btemp3) { - CFX_Int32Array* result = new CFX_Int32Array(); - result->SetSize(2); - (*result)[0] = patternStart; - (*result)[1] = i; - return result; - } - } - patternStart += counters[0] + counters[1]; - for (int32_t y = 2; y < patternLength; y++) { - counters[y - 2] = counters[y]; - } - counters[patternLength - 2] = 0; - counters[patternLength - 1] = 0; - counterPosition--; - } else { - counterPosition++; - } - counters[counterPosition] = 1; - isWhite = !isWhite; - } - } - e = BCExceptionNotFound; - return NULL; -} -FX_BOOL CBC_OnedCodaBarReader::ArrayContains(const FX_CHAR array[], - FX_CHAR key) { - for (int32_t i = 0; i < 8; i++) { - if (array[i] == key) { - return TRUE; - } - } - return FALSE; -} -FX_CHAR CBC_OnedCodaBarReader::ToNarrowWidePattern(CFX_Int32Array* counter) { - int32_t numCounters = counter->GetSize(); - if (numCounters < 1) { - return '!'; - } - int32_t averageCounter = 0; - int32_t totalCounters = 0; - for (int32_t i = 0; i < numCounters; i++) { - totalCounters += (*counter)[i]; - } - averageCounter = totalCounters / numCounters; - int32_t pattern = 0; - int32_t wideCounters = 0; - for (int32_t j = 0; j < numCounters; j++) { - if ((*counter)[j] > averageCounter) { - pattern |= 1 << (numCounters - 1 - j); - wideCounters++; - } - } - if ((wideCounters == 2) || (wideCounters == 3)) { - for (int32_t k = 0; k < 22; k++) { - if (CHARACTER_ENCODINGS[k] == pattern) { - return (ALPHABET_STRING)[k]; - } - } - } - return '!'; -} diff --git a/xfa/src/fxbarcode/oned/BC_OnedCodaBarReader.h b/xfa/src/fxbarcode/oned/BC_OnedCodaBarReader.h deleted file mode 100644 index 49c136f4fd..0000000000 --- a/xfa/src/fxbarcode/oned/BC_OnedCodaBarReader.h +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_ONED_BC_ONEDCODABARREADER_H_ -#define XFA_SRC_FXBARCODE_ONED_BC_ONEDCODABARREADER_H_ - -#include "core/include/fxcrt/fx_basic.h" -#include "xfa/src/fxbarcode/oned/BC_OneDReader.h" - -class CBC_CommonBitArray; -class CBC_OneDReader; - -class CBC_OnedCodaBarReader : public CBC_OneDReader { - public: - CBC_OnedCodaBarReader(); - virtual ~CBC_OnedCodaBarReader(); - CFX_ByteString DecodeRow(int32_t rowNumber, - CBC_CommonBitArray* row, - int32_t hints, - int32_t& e); - CFX_Int32Array* FindAsteriskPattern(CBC_CommonBitArray* row, int32_t& e); - FX_BOOL ArrayContains(const FX_CHAR array[], FX_CHAR key); - FX_CHAR ToNarrowWidePattern(CFX_Int32Array* counter); - - static const FX_CHAR* ALPHABET_STRING; - static const int32_t CHARACTER_ENCODINGS[22]; - - private: - static const int32_t minCharacterLength = 3; - static const FX_CHAR STARTEND_ENCODING[8]; -}; - -#endif // XFA_SRC_FXBARCODE_ONED_BC_ONEDCODABARREADER_H_ diff --git a/xfa/src/fxbarcode/oned/BC_OnedCodaBarWriter.cpp b/xfa/src/fxbarcode/oned/BC_OnedCodaBarWriter.cpp deleted file mode 100644 index 5d363814af..0000000000 --- a/xfa/src/fxbarcode/oned/BC_OnedCodaBarWriter.cpp +++ /dev/null @@ -1,231 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2011 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/BC_Reader.h" -#include "xfa/src/fxbarcode/BC_Writer.h" -#include "xfa/src/fxbarcode/common/BC_CommonBitArray.h" -#include "xfa/src/fxbarcode/common/BC_CommonBitMatrix.h" -#include "xfa/src/fxbarcode/oned/BC_OneDReader.h" -#include "xfa/src/fxbarcode/oned/BC_OneDimWriter.h" -#include "xfa/src/fxbarcode/oned/BC_OnedCodaBarReader.h" -#include "xfa/src/fxbarcode/oned/BC_OnedCodaBarWriter.h" - -const FX_CHAR CBC_OnedCodaBarWriter::START_END_CHARS[] = { - 'A', 'B', 'C', 'D', 'T', 'N', '*', 'E', 'a', 'b', 'c', 'd', 't', 'n', 'e'}; -const FX_CHAR CBC_OnedCodaBarWriter::CONTENT_CHARS[] = { - '0', '1', '2', '3', '4', '5', '6', '7', - '8', '9', '-', '$', '/', ':', '+', '.'}; - -CBC_OnedCodaBarWriter::CBC_OnedCodaBarWriter() { - m_chStart = 'A'; - m_chEnd = 'B'; - m_iWideNarrRatio = 2; -} -CBC_OnedCodaBarWriter::~CBC_OnedCodaBarWriter() {} -FX_BOOL CBC_OnedCodaBarWriter::SetStartChar(FX_CHAR start) { - for (size_t i = 0; i < FX_ArraySize(START_END_CHARS); ++i) { - if (START_END_CHARS[i] == start) { - m_chStart = start; - return TRUE; - } - } - return FALSE; -} - -FX_BOOL CBC_OnedCodaBarWriter::SetEndChar(FX_CHAR end) { - for (size_t i = 0; i < FX_ArraySize(START_END_CHARS); ++i) { - if (START_END_CHARS[i] == end) { - m_chEnd = end; - return TRUE; - } - } - return FALSE; -} -void CBC_OnedCodaBarWriter::SetDataLength(int32_t length) { - m_iDataLenth = length + 2; -} -FX_BOOL CBC_OnedCodaBarWriter::SetTextLocation(BC_TEXT_LOC location) { - if (location < BC_TEXT_LOC_NONE || location > BC_TEXT_LOC_BELOWEMBED) { - return FALSE; - } - m_locTextLoc = location; - return TRUE; -} -FX_BOOL CBC_OnedCodaBarWriter::SetWideNarrowRatio(int32_t ratio) { - if (ratio < 2 || ratio > 3) { - return FALSE; - } - m_iWideNarrRatio = ratio; - return TRUE; -} -FX_BOOL CBC_OnedCodaBarWriter::FindChar(FX_WCHAR ch, FX_BOOL isContent) { - if (isContent) { - for (size_t i = 0; i < FX_ArraySize(CONTENT_CHARS); ++i) { - if (ch == (FX_WCHAR)CONTENT_CHARS[i]) { - return TRUE; - } - } - for (size_t j = 0; j < FX_ArraySize(START_END_CHARS); ++j) { - if (ch == (FX_WCHAR)START_END_CHARS[j]) { - return TRUE; - } - } - return FALSE; - } else { - for (size_t i = 0; i < FX_ArraySize(CONTENT_CHARS); ++i) { - if (ch == (FX_WCHAR)CONTENT_CHARS[i]) { - return TRUE; - } - } - return FALSE; - } -} -FX_BOOL CBC_OnedCodaBarWriter::CheckContentValidity( - const CFX_WideStringC& contents) { - FX_WCHAR ch; - int32_t index = 0; - for (index = 0; index < contents.GetLength(); index++) { - ch = contents.GetAt(index); - if (FindChar(ch, FALSE)) { - continue; - } else { - return FALSE; - } - } - return TRUE; -} -CFX_WideString CBC_OnedCodaBarWriter::FilterContents( - const CFX_WideStringC& contents) { - CFX_WideString filtercontents; - FX_WCHAR ch; - for (int32_t index = 0; index < contents.GetLength(); index++) { - ch = contents.GetAt(index); - if (ch > 175) { - index++; - continue; - } - if (FindChar(ch, TRUE)) { - filtercontents += ch; - } else { - continue; - } - } - return filtercontents; -} -uint8_t* CBC_OnedCodaBarWriter::Encode(const CFX_ByteString& contents, - BCFORMAT format, - int32_t& outWidth, - int32_t& outHeight, - int32_t& e) { - uint8_t* ret = Encode(contents, format, outWidth, outHeight, 0, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - return ret; -} -uint8_t* CBC_OnedCodaBarWriter::Encode(const CFX_ByteString& contents, - BCFORMAT format, - int32_t& outWidth, - int32_t& outHeight, - int32_t hints, - int32_t& e) { - if (format != BCFORMAT_CODABAR) { - e = BCExceptionOnlyEncodeCODEBAR; - return NULL; - } - uint8_t* ret = - CBC_OneDimWriter::Encode(contents, format, outWidth, outHeight, hints, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - return ret; -} -uint8_t* CBC_OnedCodaBarWriter::Encode(const CFX_ByteString& contents, - int32_t& outLength, - int32_t& e) { - CBC_OnedCodaBarReader CodaBarR; - CFX_ByteString data = m_chStart + contents + m_chEnd; - m_iContentLen = data.GetLength(); - uint8_t* result = FX_Alloc2D(uint8_t, m_iWideNarrRatio * 7, data.GetLength()); - FX_CHAR ch; - int32_t position = 0; - for (int32_t index = 0; index < data.GetLength(); index++) { - ch = data.GetAt(index); - if (((ch >= 'a') && (ch <= 'z'))) { - ch = ch - 32; - } - switch (ch) { - case 'T': - ch = 'A'; - break; - case 'N': - ch = 'B'; - break; - case '*': - ch = 'C'; - break; - case 'E': - ch = 'D'; - break; - default: - break; - } - int32_t code = 0; - int32_t len = (int32_t)strlen(CodaBarR.ALPHABET_STRING); - for (int32_t i = 0; i < len; i++) { - if (ch == CodaBarR.ALPHABET_STRING[i]) { - code = CodaBarR.CHARACTER_ENCODINGS[i]; - break; - } - } - uint8_t color = 1; - int32_t counter = 0; - int32_t bit = 0; - while (bit < 7) { - result[position] = color; - position++; - if (((code >> (6 - bit)) & 1) == 0 || counter == m_iWideNarrRatio - 1) { - color = !color; - bit++; - counter = 0; - } else { - counter++; - } - } - if (index < data.GetLength() - 1) { - result[position] = 0; - position++; - } - } - outLength = position; - return result; -} -CFX_WideString CBC_OnedCodaBarWriter::encodedContents( - const CFX_WideStringC& contents) { - CFX_WideString strStart(m_chStart); - CFX_WideString strEnd(m_chEnd); - return strStart + contents + strEnd; -} -void CBC_OnedCodaBarWriter::RenderResult(const CFX_WideStringC& contents, - uint8_t* code, - int32_t codeLength, - FX_BOOL isDevice, - int32_t& e) { - CBC_OneDimWriter::RenderResult(encodedContents(contents), code, codeLength, - isDevice, e); -} diff --git a/xfa/src/fxbarcode/oned/BC_OnedCodaBarWriter.h b/xfa/src/fxbarcode/oned/BC_OnedCodaBarWriter.h deleted file mode 100644 index 8f9ca5883d..0000000000 --- a/xfa/src/fxbarcode/oned/BC_OnedCodaBarWriter.h +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_ONED_BC_ONEDCODABARWRITER_H_ -#define XFA_SRC_FXBARCODE_ONED_BC_ONEDCODABARWRITER_H_ - -enum BC_TEXT_LOC; -class CBC_OneDimWriter; -class CBC_OnedCodaBarWriter; -class CBC_OnedCodaBarWriter : public CBC_OneDimWriter { - public: - CBC_OnedCodaBarWriter(); - virtual ~CBC_OnedCodaBarWriter(); - uint8_t* Encode(const CFX_ByteString& contents, - int32_t& outLength, - int32_t& e); - uint8_t* Encode(const CFX_ByteString& contents, - BCFORMAT format, - int32_t& outWidth, - int32_t& outHeight, - int32_t& e); - uint8_t* Encode(const CFX_ByteString& contents, - BCFORMAT format, - int32_t& outWidth, - int32_t& outHeight, - int32_t hints, - int32_t& e); - CFX_WideString encodedContents(const CFX_WideStringC& contents); - FX_BOOL CheckContentValidity(const CFX_WideStringC& contents); - CFX_WideString FilterContents(const CFX_WideStringC& contents); - FX_BOOL SetStartChar(FX_CHAR start); - FX_BOOL SetEndChar(FX_CHAR end); - void SetDataLength(int32_t length); - FX_BOOL SetTextLocation(BC_TEXT_LOC location); - FX_BOOL SetWideNarrowRatio(int32_t ratio); - FX_BOOL FindChar(FX_WCHAR ch, FX_BOOL isContent); - - private: - void RenderResult(const CFX_WideStringC& contents, - uint8_t* code, - int32_t codeLength, - FX_BOOL isDevice, - int32_t& e); - static const FX_CHAR START_END_CHARS[]; - static const FX_CHAR CONTENT_CHARS[]; - FX_CHAR m_chStart; - FX_CHAR m_chEnd; - int32_t m_iWideNarrRatio; -}; - -#endif // XFA_SRC_FXBARCODE_ONED_BC_ONEDCODABARWRITER_H_ diff --git a/xfa/src/fxbarcode/oned/BC_OnedCode128Reader.cpp b/xfa/src/fxbarcode/oned/BC_OnedCode128Reader.cpp deleted file mode 100644 index 41a6ad1d05..0000000000 --- a/xfa/src/fxbarcode/oned/BC_OnedCode128Reader.cpp +++ /dev/null @@ -1,351 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2008 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include - -#include "xfa/src/fxbarcode/BC_Reader.h" -#include "xfa/src/fxbarcode/common/BC_CommonBitArray.h" -#include "xfa/src/fxbarcode/oned/BC_OneDReader.h" -#include "xfa/src/fxbarcode/oned/BC_OnedCode128Reader.h" -#include "xfa/src/fxbarcode/utils.h" - -const int32_t CBC_OnedCode128Reader::CODE_PATTERNS[107][7] = { - {2, 1, 2, 2, 2, 2, 0}, {2, 2, 2, 1, 2, 2, 0}, {2, 2, 2, 2, 2, 1, 0}, - {1, 2, 1, 2, 2, 3, 0}, {1, 2, 1, 3, 2, 2, 0}, {1, 3, 1, 2, 2, 2, 0}, - {1, 2, 2, 2, 1, 3, 0}, {1, 2, 2, 3, 1, 2, 0}, {1, 3, 2, 2, 1, 2, 0}, - {2, 2, 1, 2, 1, 3, 0}, {2, 2, 1, 3, 1, 2, 0}, {2, 3, 1, 2, 1, 2, 0}, - {1, 1, 2, 2, 3, 2, 0}, {1, 2, 2, 1, 3, 2, 0}, {1, 2, 2, 2, 3, 1, 0}, - {1, 1, 3, 2, 2, 2, 0}, {1, 2, 3, 1, 2, 2, 0}, {1, 2, 3, 2, 2, 1, 0}, - {2, 2, 3, 2, 1, 1, 0}, {2, 2, 1, 1, 3, 2, 0}, {2, 2, 1, 2, 3, 1, 0}, - {2, 1, 3, 2, 1, 2, 0}, {2, 2, 3, 1, 1, 2, 0}, {3, 1, 2, 1, 3, 1, 0}, - {3, 1, 1, 2, 2, 2, 0}, {3, 2, 1, 1, 2, 2, 0}, {3, 2, 1, 2, 2, 1, 0}, - {3, 1, 2, 2, 1, 2, 0}, {3, 2, 2, 1, 1, 2, 0}, {3, 2, 2, 2, 1, 1, 0}, - {2, 1, 2, 1, 2, 3, 0}, {2, 1, 2, 3, 2, 1, 0}, {2, 3, 2, 1, 2, 1, 0}, - {1, 1, 1, 3, 2, 3, 0}, {1, 3, 1, 1, 2, 3, 0}, {1, 3, 1, 3, 2, 1, 0}, - {1, 1, 2, 3, 1, 3, 0}, {1, 3, 2, 1, 1, 3, 0}, {1, 3, 2, 3, 1, 1, 0}, - {2, 1, 1, 3, 1, 3, 0}, {2, 3, 1, 1, 1, 3, 0}, {2, 3, 1, 3, 1, 1, 0}, - {1, 1, 2, 1, 3, 3, 0}, {1, 1, 2, 3, 3, 1, 0}, {1, 3, 2, 1, 3, 1, 0}, - {1, 1, 3, 1, 2, 3, 0}, {1, 1, 3, 3, 2, 1, 0}, {1, 3, 3, 1, 2, 1, 0}, - {3, 1, 3, 1, 2, 1, 0}, {2, 1, 1, 3, 3, 1, 0}, {2, 3, 1, 1, 3, 1, 0}, - {2, 1, 3, 1, 1, 3, 0}, {2, 1, 3, 3, 1, 1, 0}, {2, 1, 3, 1, 3, 1, 0}, - {3, 1, 1, 1, 2, 3, 0}, {3, 1, 1, 3, 2, 1, 0}, {3, 3, 1, 1, 2, 1, 0}, - {3, 1, 2, 1, 1, 3, 0}, {3, 1, 2, 3, 1, 1, 0}, {3, 3, 2, 1, 1, 1, 0}, - {3, 1, 4, 1, 1, 1, 0}, {2, 2, 1, 4, 1, 1, 0}, {4, 3, 1, 1, 1, 1, 0}, - {1, 1, 1, 2, 2, 4, 0}, {1, 1, 1, 4, 2, 2, 0}, {1, 2, 1, 1, 2, 4, 0}, - {1, 2, 1, 4, 2, 1, 0}, {1, 4, 1, 1, 2, 2, 0}, {1, 4, 1, 2, 2, 1, 0}, - {1, 1, 2, 2, 1, 4, 0}, {1, 1, 2, 4, 1, 2, 0}, {1, 2, 2, 1, 1, 4, 0}, - {1, 2, 2, 4, 1, 1, 0}, {1, 4, 2, 1, 1, 2, 0}, {1, 4, 2, 2, 1, 1, 0}, - {2, 4, 1, 2, 1, 1, 0}, {2, 2, 1, 1, 1, 4, 0}, {4, 1, 3, 1, 1, 1, 0}, - {2, 4, 1, 1, 1, 2, 0}, {1, 3, 4, 1, 1, 1, 0}, {1, 1, 1, 2, 4, 2, 0}, - {1, 2, 1, 1, 4, 2, 0}, {1, 2, 1, 2, 4, 1, 0}, {1, 1, 4, 2, 1, 2, 0}, - {1, 2, 4, 1, 1, 2, 0}, {1, 2, 4, 2, 1, 1, 0}, {4, 1, 1, 2, 1, 2, 0}, - {4, 2, 1, 1, 1, 2, 0}, {4, 2, 1, 2, 1, 1, 0}, {2, 1, 2, 1, 4, 1, 0}, - {2, 1, 4, 1, 2, 1, 0}, {4, 1, 2, 1, 2, 1, 0}, {1, 1, 1, 1, 4, 3, 0}, - {1, 1, 1, 3, 4, 1, 0}, {1, 3, 1, 1, 4, 1, 0}, {1, 1, 4, 1, 1, 3, 0}, - {1, 1, 4, 3, 1, 1, 0}, {4, 1, 1, 1, 1, 3, 0}, {4, 1, 1, 3, 1, 1, 0}, - {1, 1, 3, 1, 4, 1, 0}, {1, 1, 4, 1, 3, 1, 0}, {3, 1, 1, 1, 4, 1, 0}, - {4, 1, 1, 1, 3, 1, 0}, {2, 1, 1, 4, 1, 2, 0}, {2, 1, 1, 2, 1, 4, 0}, - {2, 1, 1, 2, 3, 2, 0}, {2, 3, 3, 1, 1, 1, 2}}; - -CBC_OnedCode128Reader::CBC_OnedCode128Reader() {} -CBC_OnedCode128Reader::~CBC_OnedCode128Reader() {} -CFX_Int32Array* CBC_OnedCode128Reader::FindStartPattern(CBC_CommonBitArray* row, - int32_t& e) { - int32_t width = row->GetSize(); - int32_t rowOffset = 0; - while (rowOffset < width) { - if (row->Get(rowOffset)) { - break; - } - rowOffset++; - } - int32_t counterPosition = 0; - CFX_Int32Array counters; - counters.SetSize(6); - int32_t patternStart = rowOffset; - FX_BOOL isWhite = FALSE; - int32_t patternLength = counters.GetSize(); - for (int32_t i = rowOffset; i < width; i++) { - FX_BOOL pixel = row->Get(i); - if (pixel ^ isWhite) { - counters[counterPosition]++; - } else { - if (counterPosition == patternLength - 1) { - int32_t bestVariance = MAX_AVG_VARIANCE; - int32_t bestMatch = -1; - for (int32_t startCode = CODE_START_A; startCode <= CODE_START_C; - startCode++) { - int32_t variance = PatternMatchVariance( - &counters, &CODE_PATTERNS[startCode][0], MAX_INDIVIDUAL_VARIANCE); - if (variance < bestVariance) { - bestVariance = variance; - bestMatch = startCode; - } - } - if (bestMatch >= 0) { - FX_BOOL btemp2 = - row->IsRange(std::max(0, patternStart - (i - patternStart) / 2), - patternStart, FALSE, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - if (btemp2) { - CFX_Int32Array* result = new CFX_Int32Array; - result->SetSize(3); - (*result)[0] = patternStart; - (*result)[1] = i; - (*result)[2] = bestMatch; - return result; - } - } - patternStart += counters[0] + counters[1]; - for (int32_t y = 2; y < patternLength; y++) { - counters[y - 2] = counters[y]; - } - counters[patternLength - 2] = 0; - counters[patternLength - 1] = 0; - counterPosition--; - } else { - counterPosition++; - } - counters[counterPosition] = 1; - isWhite = !isWhite; - } - } - e = BCExceptionNotFound; - return NULL; -} -int32_t CBC_OnedCode128Reader::DecodeCode(CBC_CommonBitArray* row, - CFX_Int32Array* counters, - int32_t rowOffset, - int32_t& e) { - RecordPattern(row, rowOffset, counters, e); - BC_EXCEPTION_CHECK_ReturnValue(e, 0); - int32_t bestVariance = MAX_AVG_VARIANCE; - int32_t bestMatch = -1; - for (int32_t d = 0; d < 107; d++) { - int32_t variance = PatternMatchVariance(counters, &CODE_PATTERNS[d][0], - MAX_INDIVIDUAL_VARIANCE); - if (variance < bestVariance) { - bestVariance = variance; - bestMatch = d; - } - } - if (bestMatch >= 0) { - return bestMatch; - } else { - e = BCExceptionNotFound; - return 0; - } - return 0; -} -CFX_ByteString CBC_OnedCode128Reader::DecodeRow(int32_t rowNumber, - CBC_CommonBitArray* row, - int32_t hints, - int32_t& e) { - CFX_Int32Array* startPatternInfo = FindStartPattern(row, e); - BC_EXCEPTION_CHECK_ReturnValue(e, ""); - int32_t startCode = (*startPatternInfo)[2]; - int32_t codeSet; - switch (startCode) { - case 103: - codeSet = CODE_CODE_A; - break; - case 104: - codeSet = CODE_CODE_B; - break; - case 105: - codeSet = CODE_CODE_C; - break; - default: - if (startPatternInfo) { - startPatternInfo->RemoveAll(); - delete startPatternInfo; - startPatternInfo = NULL; - } - e = BCExceptionFormatException; - return ""; - } - FX_BOOL done = FALSE; - FX_BOOL isNextShifted = FALSE; - CFX_ByteString result; - int32_t lastStart = (*startPatternInfo)[0]; - int32_t nextStart = (*startPatternInfo)[1]; - if (startPatternInfo) { - startPatternInfo->RemoveAll(); - delete startPatternInfo; - startPatternInfo = NULL; - } - CFX_Int32Array counters; - counters.SetSize(6); - int32_t lastCode = 0; - int32_t code = 0; - int32_t checksumTotal = startCode; - int32_t multiplier = 0; - FX_BOOL lastCharacterWasPrintable = TRUE; - while (!done) { - FX_BOOL unshift = isNextShifted; - isNextShifted = FALSE; - lastCode = code; - code = DecodeCode(row, &counters, nextStart, e); - BC_EXCEPTION_CHECK_ReturnValue(e, ""); - if (code != CODE_STOP) { - lastCharacterWasPrintable = TRUE; - } - if (code != CODE_STOP) { - multiplier++; - checksumTotal += multiplier * code; - } - lastStart = nextStart; - for (int32_t i = 0; i < counters.GetSize(); i++) { - nextStart += counters[i]; - } - switch (code) { - case 103: - case 104: - case 105: - e = BCExceptionFormatException; - return ""; - } - switch (codeSet) { - case 101: - if (code < 64) { - result += (FX_CHAR)(' ' + code); - } else if (code < 96) { - result += (FX_CHAR)(code - 64); - } else { - if (code != CODE_STOP) { - lastCharacterWasPrintable = FALSE; - } - switch (code) { - case 102: - case 97: - case 96: - case 101: - break; - case 98: - isNextShifted = TRUE; - codeSet = CODE_CODE_B; - break; - case 100: - codeSet = CODE_CODE_B; - break; - case 99: - codeSet = CODE_CODE_C; - break; - case 106: - done = TRUE; - break; - } - } - break; - case 100: - if (code < 96) { - result += (FX_CHAR)(' ' + code); - } else { - if (code != CODE_STOP) { - lastCharacterWasPrintable = FALSE; - } - switch (code) { - case 102: - case 97: - case 96: - case 100: - break; - case 98: - isNextShifted = TRUE; - codeSet = CODE_CODE_A; - break; - case 101: - codeSet = CODE_CODE_A; - break; - case 99: - codeSet = CODE_CODE_C; - break; - case 106: - done = TRUE; - break; - } - } - break; - case 99: - if (code < 100) { - if (code < 10) { - result += '0'; - } - FX_CHAR temp[128]; - // TODO(dsinclair): Should this be snprintf? - sprintf(temp, "%d", code); - result += temp; - } else { - if (code != CODE_STOP) { - lastCharacterWasPrintable = FALSE; - } - switch (code) { - case 102: - break; - case 101: - codeSet = CODE_CODE_A; - break; - case 100: - codeSet = CODE_CODE_B; - break; - case 106: - done = TRUE; - break; - } - } - break; - } - if (unshift) { - codeSet = codeSet == CODE_CODE_A ? CODE_CODE_B : CODE_CODE_A; - } - } - int32_t width = row->GetSize(); - while (nextStart < width && row->Get(nextStart)) { - nextStart++; - } - FX_BOOL boolT1 = row->IsRange( - nextStart, std::min(width, nextStart + (nextStart - lastStart) / 2), - FALSE, e); - BC_EXCEPTION_CHECK_ReturnValue(e, ""); - if (!boolT1) { - e = BCExceptionNotFound; - return ""; - } - checksumTotal -= multiplier * lastCode; - if (checksumTotal % 103 != lastCode) { - e = BCExceptionChecksumException; - return ""; - } - int32_t resultLength = result.GetLength(); - if (resultLength > 0 && lastCharacterWasPrintable) { - if (codeSet == CODE_CODE_C) { - result = result.Mid(0, result.GetLength() - 2); - } else { - result = result.Mid(0, result.GetLength() - 1); - } - } - if (result.GetLength() == 0) { - e = BCExceptionFormatException; - return ""; - } - return result; -} diff --git a/xfa/src/fxbarcode/oned/BC_OnedCode128Reader.h b/xfa/src/fxbarcode/oned/BC_OnedCode128Reader.h deleted file mode 100644 index 1d2c6a1ce0..0000000000 --- a/xfa/src/fxbarcode/oned/BC_OnedCode128Reader.h +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_ONED_BC_ONEDCODE128READER_H_ -#define XFA_SRC_FXBARCODE_ONED_BC_ONEDCODE128READER_H_ - -class CBC_OneDReader; -class CBC_CommonBitArray; -class CBC_OnedCode128Reader : public CBC_OneDReader { - public: - CBC_OnedCode128Reader(); - virtual ~CBC_OnedCode128Reader(); - virtual CFX_ByteString DecodeRow(int32_t rowNumber, - CBC_CommonBitArray* row, - int32_t hints, - int32_t& e); - - static const int32_t CODE_PATTERNS[107][7]; - - private: - static const int32_t MAX_AVG_VARIANCE = (int32_t)(256 * 0.25f); - static const int32_t MAX_INDIVIDUAL_VARIANCE = (int32_t)(256 * 0.7f); - - static const int32_t CODE_SHIFT = 98; - static const int32_t CODE_CODE_C = 99; - static const int32_t CODE_CODE_B = 100; - static const int32_t CODE_CODE_A = 101; - static const int32_t CODE_FNC_1 = 102; - static const int32_t CODE_FNC_2 = 97; - static const int32_t CODE_FNC_3 = 96; - static const int32_t CODE_FNC_4_A = 101; - static const int32_t CODE_FNC_4_B = 100; - - static const int32_t CODE_START_A = 103; - static const int32_t CODE_START_B = 104; - static const int32_t CODE_START_C = 105; - static const int32_t CODE_STOP = 106; - - CFX_Int32Array* FindStartPattern(CBC_CommonBitArray* row, int32_t& e); - int32_t DecodeCode(CBC_CommonBitArray* row, - CFX_Int32Array* counters, - int32_t rowOffset, - int32_t& e); -}; - -#endif // XFA_SRC_FXBARCODE_ONED_BC_ONEDCODE128READER_H_ diff --git a/xfa/src/fxbarcode/oned/BC_OnedCode128Writer.cpp b/xfa/src/fxbarcode/oned/BC_OnedCode128Writer.cpp deleted file mode 100644 index c8977d3171..0000000000 --- a/xfa/src/fxbarcode/oned/BC_OnedCode128Writer.cpp +++ /dev/null @@ -1,235 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2010 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/BC_Reader.h" -#include "xfa/src/fxbarcode/BC_Writer.h" -#include "xfa/src/fxbarcode/oned/BC_OneDReader.h" -#include "xfa/src/fxbarcode/oned/BC_OneDimWriter.h" -#include "xfa/src/fxbarcode/oned/BC_OnedCode128Reader.h" -#include "xfa/src/fxbarcode/oned/BC_OnedCode128Writer.h" - -const int32_t CBC_OnedCode128Writer::CODE_CODE_B = 100; -const int32_t CBC_OnedCode128Writer::CODE_CODE_C = 99; -const int32_t CBC_OnedCode128Writer::CODE_START_B = 104; -const int32_t CBC_OnedCode128Writer::CODE_START_C = 105; -const int32_t CBC_OnedCode128Writer::CODE_STOP = 106; - -CBC_OnedCode128Writer::CBC_OnedCode128Writer() { - m_codeFormat = BC_CODE128_B; -} -CBC_OnedCode128Writer::CBC_OnedCode128Writer(BC_TYPE type) { - m_codeFormat = type; -} -CBC_OnedCode128Writer::~CBC_OnedCode128Writer() {} -BC_TYPE CBC_OnedCode128Writer::GetType() { - return m_codeFormat; -} -FX_BOOL CBC_OnedCode128Writer::CheckContentValidity( - const CFX_WideStringC& contents) { - FX_BOOL ret = TRUE; - int32_t position = 0; - int32_t patternIndex = -1; - if (m_codeFormat == BC_CODE128_B || m_codeFormat == BC_CODE128_C) { - while (position < contents.GetLength()) { - patternIndex = (int32_t)contents.GetAt(position); - if (patternIndex >= 32 && patternIndex <= 126 && patternIndex != 34) { - position++; - continue; - } else { - ret = FALSE; - break; - } - position++; - } - } else { - ret = FALSE; - } - return ret; -} -CFX_WideString CBC_OnedCode128Writer::FilterContents( - const CFX_WideStringC& contents) { - CFX_WideString filterChineseChar; - FX_WCHAR ch; - for (int32_t i = 0; i < contents.GetLength(); i++) { - ch = contents.GetAt(i); - if (ch > 175) { - i++; - continue; - } - filterChineseChar += ch; - } - CFX_WideString filtercontents; - if (m_codeFormat == BC_CODE128_B) { - for (int32_t i = 0; i < filterChineseChar.GetLength(); i++) { - ch = filterChineseChar.GetAt(i); - if (ch >= 32 && ch <= 126) { - filtercontents += ch; - } else { - continue; - } - } - } else if (m_codeFormat == BC_CODE128_C) { - for (int32_t i = 0; i < filterChineseChar.GetLength(); i++) { - ch = filterChineseChar.GetAt(i); - if (ch >= 32 && ch <= 106) { - filtercontents += ch; - } else { - continue; - } - } - } else { - filtercontents = contents; - } - return filtercontents; -} -FX_BOOL CBC_OnedCode128Writer::SetTextLocation(BC_TEXT_LOC location) { - if (location < BC_TEXT_LOC_NONE || location > BC_TEXT_LOC_BELOWEMBED) { - return FALSE; - } - m_locTextLoc = location; - return TRUE; -} -uint8_t* CBC_OnedCode128Writer::Encode(const CFX_ByteString& contents, - BCFORMAT format, - int32_t& outWidth, - int32_t& outHeight, - int32_t hints, - int32_t& e) { - if (format != BCFORMAT_CODE_128) { - e = BCExceptionOnlyEncodeCODE_128; - return NULL; - } - uint8_t* ret = - CBC_OneDimWriter::Encode(contents, format, outWidth, outHeight, hints, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - return ret; -} -uint8_t* CBC_OnedCode128Writer::Encode(const CFX_ByteString& contents, - BCFORMAT format, - int32_t& outWidth, - int32_t& outHeight, - int32_t& e) { - uint8_t* ret = Encode(contents, format, outWidth, outHeight, 0, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - return ret; -} -FX_BOOL CBC_OnedCode128Writer::IsDigits(const CFX_ByteString& contents, - int32_t start, - int32_t length) { - int32_t end = start + length; - for (int32_t i = start; i < end; i++) { - if (contents[i] < '0' || contents[i] > '9') { - return FALSE; - } - } - return TRUE; -} -uint8_t* CBC_OnedCode128Writer::Encode(const CFX_ByteString& contents, - int32_t& outLength, - int32_t& e) { - if (contents.GetLength() < 1 || contents.GetLength() > 80) { - e = BCExceptionContentsLengthShouldBetween1and80; - return NULL; - } - CFX_PtrArray patterns; - int32_t checkSum = 0; - if (m_codeFormat == BC_CODE128_B) { - checkSum = Encode128B(contents, patterns); - } else if (m_codeFormat == BC_CODE128_C) { - checkSum = Encode128C(contents, patterns); - } else { - e = BCExceptionFormatException; - return NULL; - } - checkSum %= 103; - patterns.Add((int32_t*)CBC_OnedCode128Reader::CODE_PATTERNS[checkSum]); - patterns.Add((int32_t*)CBC_OnedCode128Reader::CODE_PATTERNS[CODE_STOP]); - m_iContentLen = contents.GetLength() + 3; - int32_t codeWidth = 0; - for (int32_t k = 0; k < patterns.GetSize(); k++) { - int32_t* pattern = (int32_t*)patterns[k]; - for (int32_t j = 0; j < 7; j++) { - codeWidth += pattern[j]; - } - } - outLength = codeWidth; - uint8_t* result = FX_Alloc(uint8_t, outLength); - int32_t pos = 0; - for (int32_t j = 0; j < patterns.GetSize(); j++) { - int32_t* pattern = (int32_t*)patterns[j]; - pos += AppendPattern(result, pos, pattern, 7, 1, e); - if (e != BCExceptionNO) { - FX_Free(result); - return NULL; - } - } - return result; -} -int32_t CBC_OnedCode128Writer::Encode128B(const CFX_ByteString& contents, - CFX_PtrArray& patterns) { - int32_t checkSum = 0; - int32_t checkWeight = 1; - int32_t position = 0; - patterns.Add((int32_t*)CBC_OnedCode128Reader::CODE_PATTERNS[CODE_START_B]); - checkSum += CODE_START_B * checkWeight; - while (position < contents.GetLength()) { - int32_t patternIndex = 0; - patternIndex = contents[position] - ' '; - position += 1; - patterns.Add((int32_t*)CBC_OnedCode128Reader::CODE_PATTERNS[patternIndex]); - checkSum += patternIndex * checkWeight; - if (position != 0) { - checkWeight++; - } - } - return checkSum; -} -int32_t CBC_OnedCode128Writer::Encode128C(const CFX_ByteString& contents, - CFX_PtrArray& patterns) { - int32_t checkSum = 0; - int32_t checkWeight = 1; - int32_t position = 0; - patterns.Add((int32_t*)CBC_OnedCode128Reader::CODE_PATTERNS[CODE_START_C]); - checkSum += CODE_START_C * checkWeight; - while (position < contents.GetLength()) { - int32_t patternIndex = 0; - FX_CHAR ch = contents.GetAt(position); - if (ch < '0' || ch > '9') { - patternIndex = (int32_t)ch; - position++; - } else { - patternIndex = FXSYS_atoi(contents.Mid(position, 2)); - if (contents.GetAt(position + 1) < '0' || - contents.GetAt(position + 1) > '9') { - position += 1; - } else { - position += 2; - } - } - patterns.Add((int32_t*)CBC_OnedCode128Reader::CODE_PATTERNS[patternIndex]); - checkSum += patternIndex * checkWeight; - if (position != 0) { - checkWeight++; - } - } - return checkSum; -} diff --git a/xfa/src/fxbarcode/oned/BC_OnedCode128Writer.h b/xfa/src/fxbarcode/oned/BC_OnedCode128Writer.h deleted file mode 100644 index 1fbb02832b..0000000000 --- a/xfa/src/fxbarcode/oned/BC_OnedCode128Writer.h +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_ONED_BC_ONEDCODE128WRITER_H_ -#define XFA_SRC_FXBARCODE_ONED_BC_ONEDCODE128WRITER_H_ - -class CBC_OneDimWriter; -class CBC_OnedCode128Writer : public CBC_OneDimWriter { - public: - CBC_OnedCode128Writer(); - CBC_OnedCode128Writer(BC_TYPE type); - virtual ~CBC_OnedCode128Writer(); - uint8_t* Encode(const CFX_ByteString& contents, - BCFORMAT format, - int32_t& outWidth, - int32_t& outHeight, - int32_t hints, - int32_t& e); - uint8_t* Encode(const CFX_ByteString& contents, - BCFORMAT format, - int32_t& outWidth, - int32_t& outHeight, - int32_t& e); - uint8_t* Encode(const CFX_ByteString& contents, - int32_t& outLength, - int32_t& e); - FX_BOOL CheckContentValidity(const CFX_WideStringC& contents); - CFX_WideString FilterContents(const CFX_WideStringC& contents); - FX_BOOL SetTextLocation(BC_TEXT_LOC location); - BC_TYPE GetType(); - - private: - FX_BOOL IsDigits(const CFX_ByteString& contents, - int32_t start, - int32_t length); - int32_t Encode128B(const CFX_ByteString& contents, CFX_PtrArray& patterns); - int32_t Encode128C(const CFX_ByteString& contents, CFX_PtrArray& patterns); - BC_TYPE m_codeFormat; - static const int32_t CODE_START_B; - static const int32_t CODE_START_C; - static const int32_t CODE_CODE_B; - static const int32_t CODE_CODE_C; - static const int32_t CODE_STOP; -}; - -#endif // XFA_SRC_FXBARCODE_ONED_BC_ONEDCODE128WRITER_H_ diff --git a/xfa/src/fxbarcode/oned/BC_OnedCode39Reader.cpp b/xfa/src/fxbarcode/oned/BC_OnedCode39Reader.cpp deleted file mode 100644 index 689cf4c87e..0000000000 --- a/xfa/src/fxbarcode/oned/BC_OnedCode39Reader.cpp +++ /dev/null @@ -1,290 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2008 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include - -#include "xfa/src/fxbarcode/BC_Reader.h" -#include "xfa/src/fxbarcode/common/BC_CommonBitArray.h" -#include "xfa/src/fxbarcode/oned/BC_OneDReader.h" -#include "xfa/src/fxbarcode/oned/BC_OnedCode39Reader.h" -#include "xfa/src/fxbarcode/utils.h" - -const FX_CHAR* CBC_OnedCode39Reader::ALPHABET_STRING = - "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. *$/+%"; -const FX_CHAR* CBC_OnedCode39Reader::CHECKSUM_STRING = - "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%"; -const int32_t CBC_OnedCode39Reader::CHARACTER_ENCODINGS[44] = { - 0x034, 0x121, 0x061, 0x160, 0x031, 0x130, 0x070, 0x025, 0x124, - 0x064, 0x109, 0x049, 0x148, 0x019, 0x118, 0x058, 0x00D, 0x10C, - 0x04C, 0x01C, 0x103, 0x043, 0x142, 0x013, 0x112, 0x052, 0x007, - 0x106, 0x046, 0x016, 0x181, 0x0C1, 0x1C0, 0x091, 0x190, 0x0D0, - 0x085, 0x184, 0x0C4, 0x094, 0x0A8, 0x0A2, 0x08A, 0x02A}; -const int32_t CBC_OnedCode39Reader::ASTERISK_ENCODING = 0x094; - -CBC_OnedCode39Reader::CBC_OnedCode39Reader() - : m_usingCheckDigit(FALSE), m_extendedMode(FALSE) { -} -CBC_OnedCode39Reader::CBC_OnedCode39Reader(FX_BOOL usingCheckDigit) - : m_usingCheckDigit(usingCheckDigit), m_extendedMode(FALSE) { -} -CBC_OnedCode39Reader::CBC_OnedCode39Reader(FX_BOOL usingCheckDigit, - FX_BOOL extendedMode) - : m_usingCheckDigit(usingCheckDigit), m_extendedMode(extendedMode) { -} -CBC_OnedCode39Reader::~CBC_OnedCode39Reader() {} -CFX_ByteString CBC_OnedCode39Reader::DecodeRow(int32_t rowNumber, - CBC_CommonBitArray* row, - int32_t hints, - int32_t& e) { - CFX_Int32Array* start = FindAsteriskPattern(row, e); - BC_EXCEPTION_CHECK_ReturnValue(e, ""); - int32_t nextStart = (*start)[1]; - delete start; - int32_t end = row->GetSize(); - while (nextStart < end && !row->Get(nextStart)) { - nextStart++; - } - CFX_ByteString result; - CFX_Int32Array counters; - counters.SetSize(9); - FX_CHAR decodedChar; - do { - RecordPattern(row, nextStart, &counters, e); - BC_EXCEPTION_CHECK_ReturnValue(e, ""); - int32_t pattern = ToNarrowWidePattern(&counters); - if (pattern < 0) { - e = BCExceptionNotFound; - return ""; - } - decodedChar = PatternToChar(pattern, e); - BC_EXCEPTION_CHECK_ReturnValue(e, ""); - result += decodedChar; - for (int32_t i = 0; i < counters.GetSize(); i++) { - nextStart += counters[i]; - } - while (nextStart < end && !row->Get(nextStart)) { - nextStart++; - } - } while (decodedChar != '*'); - result = result.Mid(0, result.GetLength() - 1); - int32_t lastPatternSize = 0; - for (int32_t j = 0; j < counters.GetSize(); j++) { - lastPatternSize += counters[j]; - } - if (m_usingCheckDigit) { - int32_t max = result.GetLength() - 1; - int32_t total = 0; - int32_t len = (int32_t)strlen(ALPHABET_STRING); - for (int32_t k = 0; k < max; k++) { - for (int32_t j = 0; j < len; j++) - if (ALPHABET_STRING[j] == result[k]) { - total += j; - } - } - if (result[max] != (ALPHABET_STRING)[total % 43]) { - e = BCExceptionChecksumException; - return ""; - } - result = result.Mid(0, result.GetLength() - 1); - } - if (result.GetLength() == 0) { - e = BCExceptionNotFound; - return ""; - } - if (m_extendedMode) { - CFX_ByteString bytestr = DecodeExtended(result, e); - BC_EXCEPTION_CHECK_ReturnValue(e, ""); - return bytestr; - } else { - return result; - } -} -CFX_Int32Array* CBC_OnedCode39Reader::FindAsteriskPattern( - CBC_CommonBitArray* row, - int32_t& e) { - int32_t width = row->GetSize(); - int32_t rowOffset = 0; - while (rowOffset < width) { - if (row->Get(rowOffset)) { - break; - } - rowOffset++; - } - int32_t counterPosition = 0; - CFX_Int32Array counters; - counters.SetSize(9); - int32_t patternStart = rowOffset; - FX_BOOL isWhite = FALSE; - int32_t patternLength = counters.GetSize(); - for (int32_t i = rowOffset; i < width; i++) { - FX_BOOL pixel = row->Get(i); - if (pixel ^ isWhite) { - counters[counterPosition]++; - } else { - if (counterPosition == patternLength - 1) { - if (ToNarrowWidePattern(&counters) == ASTERISK_ENCODING) { - FX_BOOL bT1 = - row->IsRange(std::max(0, patternStart - (i - patternStart) / 2), - patternStart, FALSE, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - if (bT1) { - CFX_Int32Array* result = new CFX_Int32Array; - result->SetSize(2); - (*result)[0] = patternStart; - (*result)[1] = i; - return result; - } - } - patternStart += counters[0] + counters[1]; - for (int32_t y = 2; y < patternLength; y++) { - counters[y - 2] = counters[y]; - } - counters[patternLength - 2] = 0; - counters[patternLength - 1] = 0; - counterPosition--; - } else { - counterPosition++; - } - counters[counterPosition] = 1; - isWhite = !isWhite; - } - } - e = BCExceptionNotFound; - return NULL; -} -int32_t CBC_OnedCode39Reader::ToNarrowWidePattern(CFX_Int32Array* counters) { - int32_t numCounters = counters->GetSize(); - int32_t maxNarrowCounter = 0; - int32_t wideCounters; - do { -#undef max - int32_t minCounter = FXSYS_IntMax; - for (int32_t i = 0; i < numCounters; i++) { - int32_t counter = (*counters)[i]; - if (counter < minCounter && counter > maxNarrowCounter) { - minCounter = counter; - } - } - maxNarrowCounter = minCounter; - wideCounters = 0; - int32_t totalWideCountersWidth = 0; - int32_t pattern = 0; - for (int32_t j = 0; j < numCounters; j++) { - int32_t counter = (*counters)[j]; - if ((*counters)[j] > maxNarrowCounter) { - pattern |= 1 << (numCounters - 1 - j); - wideCounters++; - totalWideCountersWidth += counter; - } - } - if (wideCounters == 3) { - for (int32_t k = 0; k < numCounters && wideCounters > 0; k++) { - int32_t counter = (*counters)[k]; - if ((*counters)[k] > maxNarrowCounter) { - wideCounters--; - if ((counter << 1) >= totalWideCountersWidth) { - return -1; - } - } - } - return pattern; - } - } while (wideCounters > 3); - return -1; -} -FX_CHAR CBC_OnedCode39Reader::PatternToChar(int32_t pattern, int32_t& e) { - for (int32_t i = 0; i < 44; i++) { - if (CHARACTER_ENCODINGS[i] == pattern) { - return (ALPHABET_STRING)[i]; - } - } - e = BCExceptionNotFound; - return 0; -} -CFX_ByteString CBC_OnedCode39Reader::DecodeExtended(CFX_ByteString& encoded, - int32_t& e) { - int32_t length = encoded.GetLength(); - CFX_ByteString decoded; - FX_CHAR c, next; - for (int32_t i = 0; i < length; i++) { - c = encoded[i]; - if (c == '+' || c == '$' || c == '%' || c == '/') { - next = encoded[i + 1]; - FX_CHAR decodedChar = '\0'; - switch (c) { - case '+': - if (next >= 'A' && next <= 'Z') { - decodedChar = (FX_CHAR)(next + 32); - } else { - e = BCExceptionFormatException; - return ""; - } - break; - case '$': - if (next >= 'A' && next <= 'Z') { - decodedChar = (FX_CHAR)(next - 64); - } else { - e = BCExceptionFormatException; - return ""; - } - break; - case '%': - if (next >= 'A' && next <= 'E') { - decodedChar = (FX_CHAR)(next - 38); - } else if (next >= 'F' && next <= 'J') { - decodedChar = (FX_CHAR)(next - 11); - } else if (next >= 'K' && next <= 'O' && next != 'M' && next != 'N') { - decodedChar = (FX_CHAR)(next + 16); - } else if (next >= 'P' && next <= 'S') { - decodedChar = (FX_CHAR)(next + 43); - } else if (next == 'U') { - decodedChar = (FX_CHAR)0; - } else if (next == 'V') { - decodedChar = (FX_CHAR)64; - } else if (next == 'W') { - decodedChar = (FX_CHAR)96; - } else if (next == 'T' || next == 'X' || next == 'Y' || next == 'Z') { - decodedChar = (FX_CHAR)127; - } else { - e = BCExceptionFormatException; - return ""; - } - break; - case '/': - if (next >= 'A' && next <= 'O') { - decodedChar = (FX_CHAR)(next - 32); - } else if (next == 'Z') { - decodedChar = ':'; - } else { - e = BCExceptionFormatException; - return ""; - } - break; - } - decoded += decodedChar; - i++; - } else { - decoded += c; - } - } - return decoded; -} diff --git a/xfa/src/fxbarcode/oned/BC_OnedCode39Reader.h b/xfa/src/fxbarcode/oned/BC_OnedCode39Reader.h deleted file mode 100644 index b5573b1bdf..0000000000 --- a/xfa/src/fxbarcode/oned/BC_OnedCode39Reader.h +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_ONED_BC_ONEDCODE39READER_H_ -#define XFA_SRC_FXBARCODE_ONED_BC_ONEDCODE39READER_H_ - -class CBC_OneDReader; -class CBC_CommonBitArray; -class CBC_OnedCode39Reader : public CBC_OneDReader { - public: - static const FX_CHAR* ALPHABET_STRING; - static const FX_CHAR* CHECKSUM_STRING; - static const int32_t CHARACTER_ENCODINGS[44]; - static const int32_t ASTERISK_ENCODING; - CBC_OnedCode39Reader(); - CBC_OnedCode39Reader(FX_BOOL usingCheckDigit); - CBC_OnedCode39Reader(FX_BOOL usingCheckDigit, FX_BOOL extendedMode); - virtual ~CBC_OnedCode39Reader(); - CFX_ByteString DecodeRow(int32_t rowNumber, - CBC_CommonBitArray* row, - int32_t hints, - int32_t& e); - - private: - FX_BOOL m_usingCheckDigit; - FX_BOOL m_extendedMode; - CFX_Int32Array* FindAsteriskPattern(CBC_CommonBitArray* row, int32_t& e); - int32_t ToNarrowWidePattern(CFX_Int32Array* counters); - FX_CHAR PatternToChar(int32_t pattern, int32_t& e); - CFX_ByteString DecodeExtended(CFX_ByteString& encoded, int32_t& e); -}; - -#endif // XFA_SRC_FXBARCODE_ONED_BC_ONEDCODE39READER_H_ diff --git a/xfa/src/fxbarcode/oned/BC_OnedCode39Writer.cpp b/xfa/src/fxbarcode/oned/BC_OnedCode39Writer.cpp deleted file mode 100644 index 5b33965622..0000000000 --- a/xfa/src/fxbarcode/oned/BC_OnedCode39Writer.cpp +++ /dev/null @@ -1,364 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2010 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/BC_Reader.h" -#include "xfa/src/fxbarcode/BC_Writer.h" -#include "xfa/src/fxbarcode/common/BC_CommonBitMatrix.h" -#include "xfa/src/fxbarcode/oned/BC_OneDReader.h" -#include "xfa/src/fxbarcode/oned/BC_OneDimWriter.h" -#include "xfa/src/fxbarcode/oned/BC_OnedCode39Reader.h" -#include "xfa/src/fxbarcode/oned/BC_OnedCode39Writer.h" - -CBC_OnedCode39Writer::CBC_OnedCode39Writer() { - m_extendedMode = FALSE; - m_iWideNarrRatio = 3; -} -CBC_OnedCode39Writer::CBC_OnedCode39Writer(FX_BOOL extendedMode) { - m_iWideNarrRatio = 3; - m_extendedMode = extendedMode; -} -CBC_OnedCode39Writer::~CBC_OnedCode39Writer() {} -FX_BOOL CBC_OnedCode39Writer::CheckContentValidity( - const CFX_WideStringC& contents) { - if (m_extendedMode) { - return CheckExtendedContentValidity(contents); - } - for (int32_t i = 0; i < contents.GetLength(); i++) { - FX_WCHAR ch = contents.GetAt(i); - if ((ch >= (FX_WCHAR)'0' && ch <= (FX_WCHAR)'9') || - (ch >= (FX_WCHAR)'A' && ch <= (FX_WCHAR)'Z') || ch == (FX_WCHAR)'-' || - ch == (FX_WCHAR)'.' || ch == (FX_WCHAR)' ' || ch == (FX_WCHAR)'*' || - ch == (FX_WCHAR)'$' || ch == (FX_WCHAR)'/' || ch == (FX_WCHAR)'+' || - ch == (FX_WCHAR)'%') { - continue; - } - return FALSE; - } - return TRUE; -} -FX_BOOL CBC_OnedCode39Writer::CheckExtendedContentValidity( - const CFX_WideStringC& contents) { - for (int32_t i = 0; i < contents.GetLength(); i++) { - FX_WCHAR ch = contents.GetAt(i); - if (ch > 127) { - return FALSE; - } - } - return TRUE; -} -CFX_WideString CBC_OnedCode39Writer::FilterContents( - const CFX_WideStringC& contents) { - if (m_extendedMode) { - return FilterExtendedContents(contents); - } - CFX_WideString filtercontents; - for (int32_t i = 0; i < contents.GetLength(); i++) { - FX_WCHAR ch = contents.GetAt(i); - if (ch == (FX_WCHAR)'*' && (i == 0 || i == contents.GetLength() - 1)) { - continue; - } - if (ch > 175) { - i++; - continue; - } else { - ch = Upper(ch); - } - if ((ch >= (FX_WCHAR)'0' && ch <= (FX_WCHAR)'9') || - (ch >= (FX_WCHAR)'A' && ch <= (FX_WCHAR)'Z') || ch == (FX_WCHAR)'-' || - ch == (FX_WCHAR)'.' || ch == (FX_WCHAR)' ' || ch == (FX_WCHAR)'*' || - ch == (FX_WCHAR)'$' || ch == (FX_WCHAR)'/' || ch == (FX_WCHAR)'+' || - ch == (FX_WCHAR)'%') { - filtercontents += ch; - } - } - return filtercontents; -} -CFX_WideString CBC_OnedCode39Writer::FilterExtendedContents( - const CFX_WideStringC& contents) { - CFX_WideString filtercontents; - for (int32_t i = 0; i < contents.GetLength(); i++) { - FX_WCHAR ch = contents.GetAt(i); - if (ch == (FX_WCHAR)'*' && (i == 0 || i == contents.GetLength() - 1)) { - continue; - } - if (ch > 175) { - i++; - continue; - } - if (ch > 127 && ch < 176) { - continue; - } - if (ch == 0) { - filtercontents += '%'; - filtercontents += 'U'; - } else if (ch >= 1 && ch <= 26) { - filtercontents += '$'; - filtercontents += (ch + 64); - } else if (ch >= 27 && ch <= 31) { - filtercontents += '%'; - filtercontents += (ch + 38); - } else if (ch >= 33 && ch <= 47 && ch != 45 && ch != 46) { - filtercontents += '/'; - filtercontents += (ch + 32); - } else if (ch == 58) { - filtercontents += '/'; - filtercontents += 'Z'; - } else if (ch >= 59 && ch <= 63) { - filtercontents += '%'; - filtercontents += ch + 11; - } else if (ch == 64) { - filtercontents += '%'; - filtercontents += 'V'; - } else if (ch >= 91 && ch <= 95) { - filtercontents += '%'; - filtercontents += ch - 16; - } else if (ch == 96) { - filtercontents += '%'; - filtercontents += 'W'; - } else if (ch >= 97 && ch <= 122) { - filtercontents += '+'; - filtercontents += ch - 32; - } else if (ch >= 123 && ch <= 126) { - filtercontents += '%'; - filtercontents += ch - 43; - } else if (ch == 127) { - filtercontents += '%'; - filtercontents += 'T'; - } else { - filtercontents += ch; - } - } - return filtercontents; -} -CFX_WideString CBC_OnedCode39Writer::RenderTextContents( - const CFX_WideStringC& contents) { - if (m_extendedMode) { - return RenderExtendedTextContents(contents); - } - CFX_WideString renderContents; - for (int32_t i = 0; i < contents.GetLength(); i++) { - FX_WCHAR ch = contents.GetAt(i); - if (ch == (FX_WCHAR)'*' && (i == 0 || i == contents.GetLength() - 1)) { - continue; - } - if (ch > 175) { - i++; - continue; - } - if ((ch >= (FX_WCHAR)'0' && ch <= (FX_WCHAR)'9') || - (ch >= (FX_WCHAR)'A' && ch <= (FX_WCHAR)'Z') || - (ch >= (FX_WCHAR)'a' && ch <= (FX_WCHAR)'z') || ch == (FX_WCHAR)'-' || - ch == (FX_WCHAR)'.' || ch == (FX_WCHAR)' ' || ch == (FX_WCHAR)'*' || - ch == (FX_WCHAR)'$' || ch == (FX_WCHAR)'/' || ch == (FX_WCHAR)'+' || - ch == (FX_WCHAR)'%') { - renderContents += ch; - } - } - return renderContents; -} -CFX_WideString CBC_OnedCode39Writer::RenderExtendedTextContents( - const CFX_WideStringC& contents) { - CFX_WideString renderContents; - for (int32_t i = 0; i < contents.GetLength(); i++) { - FX_WCHAR ch = contents.GetAt(i); - if (ch == (FX_WCHAR)'*' && (i == 0 || i == contents.GetLength() - 1)) { - continue; - } - if (ch > 175) { - i++; - continue; - } - if (ch > 127 && ch < 176) { - continue; - } - renderContents += ch; - } - return renderContents; -} -FX_BOOL CBC_OnedCode39Writer::SetTextLocation(BC_TEXT_LOC location) { - if (location < BC_TEXT_LOC_NONE || location > BC_TEXT_LOC_BELOWEMBED) { - return FALSE; - } - m_locTextLoc = location; - return TRUE; -} -FX_BOOL CBC_OnedCode39Writer::SetWideNarrowRatio(int32_t ratio) { - if (ratio < 2 || ratio > 3) { - return FALSE; - } - m_iWideNarrRatio = ratio; - return TRUE; -} -uint8_t* CBC_OnedCode39Writer::Encode(const CFX_ByteString& contents, - BCFORMAT format, - int32_t& outWidth, - int32_t& outHeight, - int32_t& e) { - uint8_t* ret = Encode(contents, format, outWidth, outHeight, 0, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - return ret; -} -uint8_t* CBC_OnedCode39Writer::Encode(const CFX_ByteString& contents, - BCFORMAT format, - int32_t& outWidth, - int32_t& outHeight, - int32_t hints, - int32_t& e) { - if (format != BCFORMAT_CODE_39) { - e = BCExceptionOnlyEncodeCODE_39; - return NULL; - } - uint8_t* ret = - CBC_OneDimWriter::Encode(contents, format, outWidth, outHeight, hints, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - return ret; -} -void CBC_OnedCode39Writer::ToIntArray(int32_t a, int32_t* toReturn) { - for (int32_t i = 0; i < 9; i++) { - toReturn[i] = (a & (1 << i)) == 0 ? 1 : m_iWideNarrRatio; - } -} -FX_CHAR CBC_OnedCode39Writer::CalcCheckSum(const CFX_ByteString& contents, - int32_t& e) { - int32_t length = contents.GetLength(); - if (length > 80) { - e = BCExceptionContentsLengthShouldBetween1and80; - return '*'; - } - int32_t checksum = 0; - int32_t len = (int32_t)strlen(CBC_OnedCode39Reader::ALPHABET_STRING); - for (int32_t i = 0; i < contents.GetLength(); i++) { - int32_t j = 0; - for (; j < len; j++) { - if (CBC_OnedCode39Reader::ALPHABET_STRING[j] == contents[i]) { - if (contents[i] != '*') { - checksum += j; - break; - } else { - break; - } - } - } - if (j >= len) { - e = BCExceptionUnSupportedString; - return '*'; - } - } - checksum = checksum % 43; - return CBC_OnedCode39Reader::CHECKSUM_STRING[checksum]; -} -uint8_t* CBC_OnedCode39Writer::Encode(const CFX_ByteString& contents, - int32_t& outlength, - int32_t& e) { - FX_CHAR checksum = CalcCheckSum(contents, e); - if (checksum == '*') { - return NULL; - } - int32_t widths[9] = {0}; - int32_t wideStrideNum = 3; - int32_t narrStrideNum = 9 - wideStrideNum; - CFX_ByteString encodedContents = contents; - if (m_bCalcChecksum) { - encodedContents += checksum; - } - m_iContentLen = encodedContents.GetLength(); - int32_t codeWidth = (wideStrideNum * m_iWideNarrRatio + narrStrideNum) * 2 + - 1 + m_iContentLen; - int32_t len = (int32_t)strlen(CBC_OnedCode39Reader::ALPHABET_STRING); - for (int32_t j = 0; j < m_iContentLen; j++) { - for (int32_t i = 0; i < len; i++) { - if (CBC_OnedCode39Reader::ALPHABET_STRING[i] == encodedContents[j]) { - ToIntArray(CBC_OnedCode39Reader::CHARACTER_ENCODINGS[i], widths); - for (int32_t k = 0; k < 9; k++) { - codeWidth += widths[k]; - } - } - } - } - outlength = codeWidth; - uint8_t* result = FX_Alloc(uint8_t, codeWidth); - ToIntArray(CBC_OnedCode39Reader::CHARACTER_ENCODINGS[39], widths); - int32_t pos = AppendPattern(result, 0, widths, 9, 1, e); - if (e != BCExceptionNO) { - FX_Free(result); - return NULL; - } - int32_t narrowWhite[] = {1}; - pos += AppendPattern(result, pos, narrowWhite, 1, 0, e); - if (e != BCExceptionNO) { - FX_Free(result); - return NULL; - } - for (int32_t l = m_iContentLen - 1; l >= 0; l--) { - for (int32_t i = 0; i < len; i++) { - if (CBC_OnedCode39Reader::ALPHABET_STRING[i] == encodedContents[l]) { - ToIntArray(CBC_OnedCode39Reader::CHARACTER_ENCODINGS[i], widths); - pos += AppendPattern(result, pos, widths, 9, 1, e); - if (e != BCExceptionNO) { - FX_Free(result); - return NULL; - } - } - } - pos += AppendPattern(result, pos, narrowWhite, 1, 0, e); - if (e != BCExceptionNO) { - FX_Free(result); - return NULL; - } - } - ToIntArray(CBC_OnedCode39Reader::CHARACTER_ENCODINGS[39], widths); - pos += AppendPattern(result, pos, widths, 9, 1, e); - if (e != BCExceptionNO) { - FX_Free(result); - return NULL; - } - for (int32_t i = 0; i < codeWidth / 2; i++) { - result[i] ^= result[codeWidth - 1 - i]; - result[codeWidth - 1 - i] ^= result[i]; - result[i] ^= result[codeWidth - 1 - i]; - } - return result; -} -CFX_WideString CBC_OnedCode39Writer::encodedContents( - const CFX_WideStringC& contents, - int32_t& e) { - CFX_WideString encodedContents = contents; - if (m_bCalcChecksum && m_bPrintChecksum) { - CFX_WideString checksumContent = FilterContents(contents); - CFX_ByteString str = checksumContent.UTF8Encode(); - FX_CHAR checksum; - checksum = CalcCheckSum(str, e); - BC_EXCEPTION_CHECK_ReturnValue(e, FX_WSTRC(L"")); - str += checksum; - encodedContents += checksum; - } - return encodedContents; -} -void CBC_OnedCode39Writer::RenderResult(const CFX_WideStringC& contents, - uint8_t* code, - int32_t codeLength, - FX_BOOL isDevice, - int32_t& e) { - CFX_WideString encodedCon = encodedContents(contents, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - CBC_OneDimWriter::RenderResult(encodedCon, code, codeLength, isDevice, e); -} diff --git a/xfa/src/fxbarcode/oned/BC_OnedCode39Writer.h b/xfa/src/fxbarcode/oned/BC_OnedCode39Writer.h deleted file mode 100644 index d453b49b48..0000000000 --- a/xfa/src/fxbarcode/oned/BC_OnedCode39Writer.h +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_ONED_BC_ONEDCODE39WRITER_H_ -#define XFA_SRC_FXBARCODE_ONED_BC_ONEDCODE39WRITER_H_ - -enum BC_TEXT_LOC; -class CBC_OneDimWriter; -class CBC_OnedCode39Writer : public CBC_OneDimWriter { - public: - CBC_OnedCode39Writer(); - CBC_OnedCode39Writer(FX_BOOL extendedMode); - virtual ~CBC_OnedCode39Writer(); - uint8_t* Encode(const CFX_ByteString& contents, - BCFORMAT format, - int32_t& outWidth, - int32_t& outHeight, - int32_t& e); - uint8_t* Encode(const CFX_ByteString& contents, - BCFORMAT format, - int32_t& outWidth, - int32_t& outHeight, - int32_t hints, - int32_t& e); - uint8_t* Encode(const CFX_ByteString& contents, - int32_t& outLength, - int32_t& e); - void RenderResult(const CFX_WideStringC& contents, - uint8_t* code, - int32_t codeLength, - FX_BOOL isDevice, - int32_t& e); - CFX_WideString encodedContents(const CFX_WideStringC& contents, int32_t& e); - FX_BOOL CheckContentValidity(const CFX_WideStringC& contents); - FX_BOOL CheckExtendedContentValidity(const CFX_WideStringC& contents); - CFX_WideString FilterContents(const CFX_WideStringC& contents); - CFX_WideString FilterExtendedContents(const CFX_WideStringC& contents); - CFX_WideString RenderTextContents(const CFX_WideStringC& contents); - CFX_WideString RenderExtendedTextContents(const CFX_WideStringC& contents); - FX_BOOL SetTextLocation(BC_TEXT_LOC loction); - FX_BOOL SetWideNarrowRatio(int32_t ratio); - - private: - void ToIntArray(int32_t a, int32_t* toReturn); - FX_CHAR CalcCheckSum(const CFX_ByteString& contents, int32_t& e); - int32_t m_iWideNarrRatio; - FX_BOOL m_extendedMode; -}; - -#endif // XFA_SRC_FXBARCODE_ONED_BC_ONEDCODE39WRITER_H_ diff --git a/xfa/src/fxbarcode/oned/BC_OnedEAN13Reader.cpp b/xfa/src/fxbarcode/oned/BC_OnedEAN13Reader.cpp deleted file mode 100644 index 1cb08cd9b8..0000000000 --- a/xfa/src/fxbarcode/oned/BC_OnedEAN13Reader.cpp +++ /dev/null @@ -1,96 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2008 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/BC_Reader.h" -#include "xfa/src/fxbarcode/common/BC_CommonBitArray.h" -#include "xfa/src/fxbarcode/oned/BC_OneDReader.h" -#include "xfa/src/fxbarcode/oned/BC_OneDimReader.h" -#include "xfa/src/fxbarcode/oned/BC_OnedEAN13Reader.h" -#include "xfa/src/fxbarcode/utils.h" - -const int32_t CBC_OnedEAN13Reader::FIRST_DIGIT_ENCODINGS[10] = { - 0x00, 0x0B, 0x0D, 0xE, 0x13, 0x19, 0x1C, 0x15, 0x16, 0x1A}; - -CBC_OnedEAN13Reader::CBC_OnedEAN13Reader() {} -CBC_OnedEAN13Reader::~CBC_OnedEAN13Reader() {} -void CBC_OnedEAN13Reader::DetermineFirstDigit(CFX_ByteString& result, - int32_t lgPatternFound, - int32_t& e) { - for (int32_t d = 0; d < 10; d++) { - if (lgPatternFound == FIRST_DIGIT_ENCODINGS[d]) { - result.Insert(0, (FX_CHAR)('0' + d)); - return; - } - } - e = BCExceptionNotFound; - BC_EXCEPTION_CHECK_ReturnVoid(e); -} -int32_t CBC_OnedEAN13Reader::DecodeMiddle(CBC_CommonBitArray* row, - CFX_Int32Array* startRange, - CFX_ByteString& resultString, - int32_t& e) { - CFX_Int32Array counters; - counters.Add(0); - counters.Add(0); - counters.Add(0); - counters.Add(0); - int32_t end = row->GetSize(); - int32_t rowOffset = (*startRange)[1]; - int32_t lgPatternFound = 0; - for (int32_t x = 0; x < 6 && rowOffset < end; x++) { - int32_t bestMatch = - DecodeDigit(row, &counters, rowOffset, - &(CBC_OneDimReader::L_AND_G_PATTERNS[0][0]), 20, e); - BC_EXCEPTION_CHECK_ReturnValue(e, 0); - resultString += (FX_CHAR)('0' + bestMatch % 10); - for (int32_t i = 0; i < counters.GetSize(); i++) { - rowOffset += counters[i]; - } - if (bestMatch >= 10) { - lgPatternFound |= 1 << (5 - x); - } - } - DetermineFirstDigit(resultString, lgPatternFound, e); - BC_EXCEPTION_CHECK_ReturnValue(e, 0); - CFX_Int32Array result; - result.Add(CBC_OneDimReader::MIDDLE_PATTERN[0]); - result.Add(CBC_OneDimReader::MIDDLE_PATTERN[1]); - result.Add(CBC_OneDimReader::MIDDLE_PATTERN[2]); - result.Add(CBC_OneDimReader::MIDDLE_PATTERN[3]); - result.Add(CBC_OneDimReader::MIDDLE_PATTERN[4]); - CFX_Int32Array* middleRange = - FindGuardPattern(row, rowOffset, TRUE, &result, e); - BC_EXCEPTION_CHECK_ReturnValue(e, 0); - rowOffset = (*middleRange)[1]; - delete middleRange; - for (int32_t Y = 0; Y < 6 && rowOffset < end; Y++) { - int32_t bestMatch = - DecodeDigit(row, &counters, rowOffset, - &(CBC_OneDimReader::L_PATTERNS[0][0]), 10, e); - BC_EXCEPTION_CHECK_ReturnValue(e, 0); - resultString += (FX_CHAR)('0' + bestMatch); - for (int32_t k = 0; k < counters.GetSize(); k++) { - rowOffset += counters[k]; - } - } - return rowOffset; -} diff --git a/xfa/src/fxbarcode/oned/BC_OnedEAN13Reader.h b/xfa/src/fxbarcode/oned/BC_OnedEAN13Reader.h deleted file mode 100644 index 795cc2fbde..0000000000 --- a/xfa/src/fxbarcode/oned/BC_OnedEAN13Reader.h +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_ONED_BC_ONEDEAN13READER_H_ -#define XFA_SRC_FXBARCODE_ONED_BC_ONEDEAN13READER_H_ -class CBC_OneDimReader; -class CBC_CommonBitArray; -class CBC_OnedEAN13Reader; -class CBC_OnedEAN13Reader : public CBC_OneDimReader { - public: - static const int32_t FIRST_DIGIT_ENCODINGS[10]; - CBC_OnedEAN13Reader(); - virtual ~CBC_OnedEAN13Reader(); - - private: - void DetermineFirstDigit(CFX_ByteString& result, - int32_t lgPatternFound, - int32_t& e); - - protected: - int32_t DecodeMiddle(CBC_CommonBitArray* row, - CFX_Int32Array* startRange, - CFX_ByteString& resultString, - int32_t& e); - friend class CBC_OnedUPCAReader; -}; - -#endif // XFA_SRC_FXBARCODE_ONED_BC_ONEDEAN13READER_H_ diff --git a/xfa/src/fxbarcode/oned/BC_OnedEAN13Writer.cpp b/xfa/src/fxbarcode/oned/BC_OnedEAN13Writer.cpp deleted file mode 100644 index 1a026da98f..0000000000 --- a/xfa/src/fxbarcode/oned/BC_OnedEAN13Writer.cpp +++ /dev/null @@ -1,301 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2009 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/BC_Reader.h" -#include "xfa/src/fxbarcode/BC_Writer.h" -#include "xfa/src/fxbarcode/oned/BC_OneDReader.h" -#include "xfa/src/fxbarcode/oned/BC_OneDimReader.h" -#include "xfa/src/fxbarcode/oned/BC_OneDimWriter.h" -#include "xfa/src/fxbarcode/oned/BC_OnedEAN13Reader.h" -#include "xfa/src/fxbarcode/oned/BC_OnedEAN13Writer.h" - -CBC_OnedEAN13Writer::CBC_OnedEAN13Writer() { - m_bLeftPadding = TRUE; - m_codeWidth = 3 + (7 * 6) + 5 + (7 * 6) + 3; -} -CBC_OnedEAN13Writer::~CBC_OnedEAN13Writer() {} -FX_BOOL CBC_OnedEAN13Writer::CheckContentValidity( - const CFX_WideStringC& contents) { - for (int32_t i = 0; i < contents.GetLength(); i++) { - if (contents.GetAt(i) >= '0' && contents.GetAt(i) <= '9') { - continue; - } else { - return FALSE; - } - } - return TRUE; -} -CFX_WideString CBC_OnedEAN13Writer::FilterContents( - const CFX_WideStringC& contents) { - CFX_WideString filtercontents; - FX_WCHAR ch; - for (int32_t i = 0; i < contents.GetLength(); i++) { - ch = contents.GetAt(i); - if (ch > 175) { - i++; - continue; - } - if (ch >= '0' && ch <= '9') { - filtercontents += ch; - } - } - return filtercontents; -} -int32_t CBC_OnedEAN13Writer::CalcChecksum(const CFX_ByteString& contents) { - int32_t odd = 0; - int32_t even = 0; - int32_t j = 1; - for (int32_t i = contents.GetLength() - 1; i >= 0; i--) { - if (j % 2) { - odd += FXSYS_atoi(contents.Mid(i, 1)); - } else { - even += FXSYS_atoi(contents.Mid(i, 1)); - } - j++; - } - int32_t checksum = (odd * 3 + even) % 10; - checksum = (10 - checksum) % 10; - return (checksum); -} -uint8_t* CBC_OnedEAN13Writer::Encode(const CFX_ByteString& contents, - BCFORMAT format, - int32_t& outWidth, - int32_t& outHeight, - int32_t& e) { - uint8_t* ret = Encode(contents, format, outWidth, outHeight, 0, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - return ret; -} -uint8_t* CBC_OnedEAN13Writer::Encode(const CFX_ByteString& contents, - BCFORMAT format, - int32_t& outWidth, - int32_t& outHeight, - int32_t hints, - int32_t& e) { - if (format != BCFORMAT_EAN_13) { - e = BCExceptionOnlyEncodeEAN_13; - } - uint8_t* ret = - CBC_OneDimWriter::Encode(contents, format, outWidth, outHeight, hints, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - return ret; -} -uint8_t* CBC_OnedEAN13Writer::Encode(const CFX_ByteString& contents, - int32_t& outLength, - int32_t& e) { - if (contents.GetLength() != 13) { - e = BCExceptionDigitLengthShould13; - return NULL; - } - m_iDataLenth = 13; - int32_t firstDigit = FXSYS_atoi(contents.Mid(0, 1)); - int32_t parities = CBC_OnedEAN13Reader::FIRST_DIGIT_ENCODINGS[firstDigit]; - outLength = m_codeWidth; - uint8_t* result = FX_Alloc(uint8_t, m_codeWidth); - int32_t pos = 0; - pos += - AppendPattern(result, pos, CBC_OneDimReader::START_END_PATTERN, 3, 1, e); - if (e != BCExceptionNO) { - FX_Free(result); - return NULL; - } - int32_t i = 0; - for (i = 1; i <= 6; i++) { - int32_t digit = FXSYS_atoi(contents.Mid(i, 1)); - if ((parities >> (6 - i) & 1) == 1) { - digit += 10; - } - pos += AppendPattern(result, pos, CBC_OneDimReader::L_AND_G_PATTERNS[digit], - 4, 0, e); - if (e != BCExceptionNO) { - FX_Free(result); - return NULL; - } - } - pos += AppendPattern(result, pos, CBC_OneDimReader::MIDDLE_PATTERN, 5, 0, e); - if (e != BCExceptionNO) { - FX_Free(result); - return NULL; - } - for (i = 7; i <= 12; i++) { - int32_t digit = FXSYS_atoi(contents.Mid(i, 1)); - pos += AppendPattern(result, pos, CBC_OneDimReader::L_PATTERNS[digit], 4, 1, - e); - if (e != BCExceptionNO) { - FX_Free(result); - return NULL; - } - } - pos += - AppendPattern(result, pos, CBC_OneDimReader::START_END_PATTERN, 3, 1, e); - if (e != BCExceptionNO) { - FX_Free(result); - return NULL; - } - return result; -} -void CBC_OnedEAN13Writer::ShowChars(const CFX_WideStringC& contents, - CFX_DIBitmap* pOutBitmap, - CFX_RenderDevice* device, - const CFX_Matrix* matrix, - int32_t barWidth, - int32_t multiple, - int32_t& e) { - if (device == NULL && pOutBitmap == NULL) { - e = BCExceptionIllegalArgument; - return; - } - int32_t leftPadding = 7 * multiple; - int32_t leftPosition = 3 * multiple + leftPadding; - CFX_ByteString str = FX_UTF8Encode(contents); - int32_t iLen = str.GetLength(); - FXTEXT_CHARPOS* pCharPos = FX_Alloc(FXTEXT_CHARPOS, iLen); - FXSYS_memset(pCharPos, 0, sizeof(FXTEXT_CHARPOS) * iLen); - CFX_FxgeDevice geBitmap; - if (pOutBitmap) { - geBitmap.Attach(pOutBitmap); - } - int32_t iFontSize = (int32_t)fabs(m_fFontSize); - int32_t iTextHeight = iFontSize + 1; - CFX_ByteString tempStr = str.Mid(1, 6); - int32_t strWidth = multiple * 42; - if (pOutBitmap == NULL) { - CFX_Matrix matr(m_outputHScale, 0.0, 0.0, 1.0, 0.0, 0.0); - CFX_FloatRect rect( - (FX_FLOAT)leftPosition, (FX_FLOAT)(m_Height - iTextHeight), - (FX_FLOAT)(leftPosition + strWidth - 0.5), (FX_FLOAT)m_Height); - matr.Concat(*matrix); - matr.TransformRect(rect); - FX_RECT re = rect.GetOutterRect(); - device->FillRect(&re, m_backgroundColor); - CFX_FloatRect rect1( - (FX_FLOAT)(leftPosition + 47 * multiple), - (FX_FLOAT)(m_Height - iTextHeight), - (FX_FLOAT)(leftPosition + 47 * multiple + strWidth - 0.5), - (FX_FLOAT)m_Height); - CFX_Matrix matr1(m_outputHScale, 0.0, 0.0, 1.0, 0.0, 0.0); - matr1.Concat(*matrix); - matr1.TransformRect(rect1); - re = rect1.GetOutterRect(); - device->FillRect(&re, m_backgroundColor); - int32_t strWidth1 = multiple * 7; - CFX_Matrix matr2(m_outputHScale, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f); - CFX_FloatRect rect2(0.0f, (FX_FLOAT)(m_Height - iTextHeight), - (FX_FLOAT)strWidth1 - 0.5f, (FX_FLOAT)m_Height); - matr2.Concat(*matrix); - matr2.TransformRect(rect2); - re = rect2.GetOutterRect(); - device->FillRect(&re, m_backgroundColor); - } - FX_FLOAT blank = 0.0; - iLen = tempStr.GetLength(); - if (pOutBitmap == NULL) { - strWidth = (int32_t)(strWidth * m_outputHScale); - } - CalcTextInfo(tempStr, pCharPos + 1, m_pFont, (FX_FLOAT)strWidth, iFontSize, - blank); - CFX_Matrix affine_matrix(1.0, 0.0, 0.0, -1.0, 0.0, (FX_FLOAT)iFontSize); - CFX_FxgeDevice ge; - if (pOutBitmap) { - ge.Create(strWidth, iTextHeight, FXDIB_Argb); - FX_RECT rect(0, 0, strWidth, iTextHeight); - ge.FillRect(&rect, m_backgroundColor); - ge.DrawNormalText(iLen, pCharPos + 1, m_pFont, - CFX_GEModule::Get()->GetFontCache(), (FX_FLOAT)iFontSize, - (CFX_Matrix*)&affine_matrix, m_fontColor, - FXTEXT_CLEARTYPE); - geBitmap.SetDIBits(ge.GetBitmap(), leftPosition, m_Height - iTextHeight); - } else { - CFX_Matrix affine_matrix1(1.0, 0.0, 0.0, -1.0, - (FX_FLOAT)leftPosition * m_outputHScale, - (FX_FLOAT)(m_Height - iTextHeight) + iFontSize); - if (matrix) { - affine_matrix1.Concat(*matrix); - } - device->DrawNormalText(iLen, pCharPos + 1, m_pFont, - CFX_GEModule::Get()->GetFontCache(), - (FX_FLOAT)iFontSize, (CFX_Matrix*)&affine_matrix1, - m_fontColor, FXTEXT_CLEARTYPE); - } - tempStr = str.Mid(7, 6); - iLen = tempStr.GetLength(); - CalcTextInfo(tempStr, pCharPos + 7, m_pFont, (FX_FLOAT)strWidth, iFontSize, - blank); - if (pOutBitmap) { - FX_RECT rect1(0, 0, strWidth, iTextHeight); - ge.FillRect(&rect1, m_backgroundColor); - ge.DrawNormalText(iLen, pCharPos + 7, m_pFont, - CFX_GEModule::Get()->GetFontCache(), (FX_FLOAT)iFontSize, - (CFX_Matrix*)&affine_matrix, m_fontColor, - FXTEXT_CLEARTYPE); - geBitmap.SetDIBits(ge.GetBitmap(), leftPosition + 47 * multiple, - m_Height - iTextHeight); - } else { - CFX_Matrix affine_matrix1( - 1.0, 0.0, 0.0, -1.0, - (FX_FLOAT)(leftPosition + 47 * multiple) * m_outputHScale, - (FX_FLOAT)(m_Height - iTextHeight + iFontSize)); - if (matrix) { - affine_matrix1.Concat(*matrix); - } - device->DrawNormalText(iLen, pCharPos + 7, m_pFont, - CFX_GEModule::Get()->GetFontCache(), - (FX_FLOAT)iFontSize, (CFX_Matrix*)&affine_matrix1, - m_fontColor, FXTEXT_CLEARTYPE); - } - tempStr = str.Mid(0, 1); - iLen = tempStr.GetLength(); - strWidth = multiple * 7; - if (pOutBitmap == NULL) { - strWidth = (int32_t)(strWidth * m_outputHScale); - } - CalcTextInfo(tempStr, pCharPos, m_pFont, (FX_FLOAT)strWidth, iFontSize, - blank); - if (pOutBitmap) { - delete ge.GetBitmap(); - ge.Create(strWidth, iTextHeight, FXDIB_Argb); - ge.GetBitmap()->Clear(m_backgroundColor); - ge.DrawNormalText(iLen, pCharPos, m_pFont, - CFX_GEModule::Get()->GetFontCache(), (FX_FLOAT)iFontSize, - (CFX_Matrix*)&affine_matrix, m_fontColor, - FXTEXT_CLEARTYPE); - geBitmap.SetDIBits(ge.GetBitmap(), 0, m_Height - iTextHeight); - } else { - CFX_Matrix affine_matrix1(1.0, 0.0, 0.0, -1.0, 0.0, - (FX_FLOAT)(m_Height - iTextHeight + iFontSize)); - if (matrix) { - affine_matrix1.Concat(*matrix); - } - device->DrawNormalText(iLen, pCharPos, m_pFont, - CFX_GEModule::Get()->GetFontCache(), - (FX_FLOAT)iFontSize, (CFX_Matrix*)&affine_matrix1, - m_fontColor, FXTEXT_CLEARTYPE); - } - FX_Free(pCharPos); -} -void CBC_OnedEAN13Writer::RenderResult(const CFX_WideStringC& contents, - uint8_t* code, - int32_t codeLength, - FX_BOOL isDevice, - int32_t& e) { - CBC_OneDimWriter::RenderResult(contents, code, codeLength, isDevice, e); -} diff --git a/xfa/src/fxbarcode/oned/BC_OnedEAN13Writer.h b/xfa/src/fxbarcode/oned/BC_OnedEAN13Writer.h deleted file mode 100644 index 8fd42733f3..0000000000 --- a/xfa/src/fxbarcode/oned/BC_OnedEAN13Writer.h +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_ONED_BC_ONEDEAN13WRITER_H_ -#define XFA_SRC_FXBARCODE_ONED_BC_ONEDEAN13WRITER_H_ - -class CBC_OneDimWriter; -class CBC_OnedEAN13Writer; -class CBC_OnedEAN13Writer : public CBC_OneDimWriter { - private: - int32_t m_codeWidth; - - public: - CBC_OnedEAN13Writer(); - virtual ~CBC_OnedEAN13Writer(); - - uint8_t* Encode(const CFX_ByteString& contents, - BCFORMAT format, - int32_t& outWidth, - int32_t& outHeight, - int32_t& e); - uint8_t* Encode(const CFX_ByteString& contents, - BCFORMAT format, - int32_t& outWidth, - int32_t& outHeight, - int32_t hints, - int32_t& e); - uint8_t* Encode(const CFX_ByteString& contents, - int32_t& outLength, - int32_t& e); - void RenderResult(const CFX_WideStringC& contents, - uint8_t* code, - int32_t codeLength, - FX_BOOL isDevice, - int32_t& e); - FX_BOOL CheckContentValidity(const CFX_WideStringC& contents); - CFX_WideString FilterContents(const CFX_WideStringC& contents); - int32_t CalcChecksum(const CFX_ByteString& contents); - - protected: - void ShowChars(const CFX_WideStringC& contents, - CFX_DIBitmap* pOutBitmap, - CFX_RenderDevice* device, - const CFX_Matrix* matrix, - int32_t barWidth, - int32_t multiple, - int32_t& e); -}; - -#endif // XFA_SRC_FXBARCODE_ONED_BC_ONEDEAN13WRITER_H_ diff --git a/xfa/src/fxbarcode/oned/BC_OnedEAN8Reader.cpp b/xfa/src/fxbarcode/oned/BC_OnedEAN8Reader.cpp deleted file mode 100644 index 8d13d26347..0000000000 --- a/xfa/src/fxbarcode/oned/BC_OnedEAN8Reader.cpp +++ /dev/null @@ -1,82 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2008 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/BC_Reader.h" -#include "xfa/src/fxbarcode/common/BC_CommonBitArray.h" -#include "xfa/src/fxbarcode/oned/BC_OneDReader.h" -#include "xfa/src/fxbarcode/oned/BC_OneDimReader.h" -#include "xfa/src/fxbarcode/oned/BC_OnedEAN8Reader.h" -#include "xfa/src/fxbarcode/utils.h" - -CBC_OnedEAN8Reader::CBC_OnedEAN8Reader() {} -CBC_OnedEAN8Reader::~CBC_OnedEAN8Reader() {} -int32_t CBC_OnedEAN8Reader::DecodeMiddle(CBC_CommonBitArray* row, - CFX_Int32Array* startRange, - CFX_ByteString& resultResult, - int32_t& e) { - CFX_Int32Array counters; - counters.Add(0); - counters.Add(0); - counters.Add(0); - counters.Add(0); - int32_t end = row->GetSize(); - int32_t rowOffset = (*startRange)[1]; - int32_t rowOffsetLeft = rowOffset; - for (int32_t x = 0; x < 4 && rowOffset < end; x++) { - int32_t bestMatch = - DecodeDigit(row, &counters, rowOffset, - &(CBC_OneDimReader::L_PATTERNS[0][0]), 10, e); - BC_EXCEPTION_CHECK_ReturnValue(e, 0); - resultResult += (FX_CHAR)('0' + bestMatch); - for (int32_t i = 0; i < counters.GetSize(); i++) { - rowOffset += counters[i]; - } - } - int32_t RowOffsetLen = (rowOffset - rowOffsetLeft) / 4; - CFX_Int32Array result; - result.Add(CBC_OneDimReader::MIDDLE_PATTERN[0]); - result.Add(CBC_OneDimReader::MIDDLE_PATTERN[1]); - result.Add(CBC_OneDimReader::MIDDLE_PATTERN[2]); - result.Add(CBC_OneDimReader::MIDDLE_PATTERN[3]); - result.Add(CBC_OneDimReader::MIDDLE_PATTERN[4]); - CFX_Int32Array* middleRange = - FindGuardPattern(row, rowOffset, TRUE, &result, e); - BC_EXCEPTION_CHECK_ReturnValue(e, 0); - int32_t rowOffsetMid = rowOffset; - rowOffset = (*middleRange)[1]; - if ((rowOffset - rowOffsetMid) > RowOffsetLen) { - e = BCExceptionNotFound; - BC_EXCEPTION_CHECK_ReturnValue(e, 0); - } - delete middleRange; - for (int32_t y = 0; y < 4 && rowOffset < end; y++) { - int32_t bestMatch = - DecodeDigit(row, &counters, rowOffset, - &(CBC_OneDimReader::L_PATTERNS[0][0]), 10, e); - BC_EXCEPTION_CHECK_ReturnValue(e, 0); - resultResult += (FX_CHAR)('0' + bestMatch); - for (int32_t i = 0; i < counters.GetSize(); i++) { - rowOffset += counters[i]; - } - } - return rowOffset; -} diff --git a/xfa/src/fxbarcode/oned/BC_OnedEAN8Reader.h b/xfa/src/fxbarcode/oned/BC_OnedEAN8Reader.h deleted file mode 100644 index b9f14d6c85..0000000000 --- a/xfa/src/fxbarcode/oned/BC_OnedEAN8Reader.h +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_ONED_BC_ONEDEAN8READER_H_ -#define XFA_SRC_FXBARCODE_ONED_BC_ONEDEAN8READER_H_ - -class CBC_OneDimReader; -class CBC_CommonBitArray; -class CBC_OnedEAN8Reader; -class CBC_OnedEAN8Reader : public CBC_OneDimReader { - public: - CBC_OnedEAN8Reader(); - virtual ~CBC_OnedEAN8Reader(); - - protected: - int32_t DecodeMiddle(CBC_CommonBitArray*, - CFX_Int32Array* startRange, - CFX_ByteString& result, - int32_t& e); -}; - -#endif // XFA_SRC_FXBARCODE_ONED_BC_ONEDEAN8READER_H_ diff --git a/xfa/src/fxbarcode/oned/BC_OnedEAN8Writer.cpp b/xfa/src/fxbarcode/oned/BC_OnedEAN8Writer.cpp deleted file mode 100644 index 9981575112..0000000000 --- a/xfa/src/fxbarcode/oned/BC_OnedEAN8Writer.cpp +++ /dev/null @@ -1,268 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2009 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/BC_Reader.h" -#include "xfa/src/fxbarcode/BC_Writer.h" -#include "xfa/src/fxbarcode/common/BC_CommonBitMatrix.h" -#include "xfa/src/fxbarcode/oned/BC_OneDReader.h" -#include "xfa/src/fxbarcode/oned/BC_OneDimReader.h" -#include "xfa/src/fxbarcode/oned/BC_OneDimWriter.h" -#include "xfa/src/fxbarcode/oned/BC_OnedEAN8Writer.h" - -CBC_OnedEAN8Writer::CBC_OnedEAN8Writer() { - m_iDataLenth = 8; - m_codeWidth = 3 + (7 * 4) + 5 + (7 * 4) + 3; -} -CBC_OnedEAN8Writer::~CBC_OnedEAN8Writer() {} -void CBC_OnedEAN8Writer::SetDataLength(int32_t length) { - m_iDataLenth = 8; -} -FX_BOOL CBC_OnedEAN8Writer::SetTextLocation(BC_TEXT_LOC location) { - if (location == BC_TEXT_LOC_BELOWEMBED) { - m_locTextLoc = location; - return TRUE; - } - return FALSE; -} -FX_BOOL CBC_OnedEAN8Writer::CheckContentValidity( - const CFX_WideStringC& contents) { - for (int32_t i = 0; i < contents.GetLength(); i++) { - if (contents.GetAt(i) >= '0' && contents.GetAt(i) <= '9') { - continue; - } else { - return FALSE; - } - } - return TRUE; -} -CFX_WideString CBC_OnedEAN8Writer::FilterContents( - const CFX_WideStringC& contents) { - CFX_WideString filtercontents; - FX_WCHAR ch; - for (int32_t i = 0; i < contents.GetLength(); i++) { - ch = contents.GetAt(i); - if (ch > 175) { - i++; - continue; - } - if (ch >= '0' && ch <= '9') { - filtercontents += ch; - } - } - return filtercontents; -} -int32_t CBC_OnedEAN8Writer::CalcChecksum(const CFX_ByteString& contents) { - int32_t odd = 0; - int32_t even = 0; - int32_t j = 1; - for (int32_t i = contents.GetLength() - 1; i >= 0; i--) { - if (j % 2) { - odd += FXSYS_atoi(contents.Mid(i, 1)); - } else { - even += FXSYS_atoi(contents.Mid(i, 1)); - } - j++; - } - int32_t checksum = (odd * 3 + even) % 10; - checksum = (10 - checksum) % 10; - return (checksum); -} -uint8_t* CBC_OnedEAN8Writer::Encode(const CFX_ByteString& contents, - BCFORMAT format, - int32_t& outWidth, - int32_t& outHeight, - int32_t& e) { - uint8_t* ret = Encode(contents, format, outWidth, outHeight, 0, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - return ret; -} -uint8_t* CBC_OnedEAN8Writer::Encode(const CFX_ByteString& contents, - BCFORMAT format, - int32_t& outWidth, - int32_t& outHeight, - int32_t hints, - int32_t& e) { - if (format != BCFORMAT_EAN_8) { - e = BCExceptionOnlyEncodeEAN_8; - return NULL; - } - uint8_t* ret = - CBC_OneDimWriter::Encode(contents, format, outWidth, outHeight, hints, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - return ret; -} -uint8_t* CBC_OnedEAN8Writer::Encode(const CFX_ByteString& contents, - int32_t& outLength, - int32_t& e) { - if (contents.GetLength() != 8) { - e = BCExceptionDigitLengthMustBe8; - return NULL; - } - outLength = m_codeWidth; - uint8_t* result = FX_Alloc(uint8_t, m_codeWidth); - int32_t pos = 0; - pos += - AppendPattern(result, pos, CBC_OneDimReader::START_END_PATTERN, 3, 1, e); - if (e != BCExceptionNO) { - FX_Free(result); - return NULL; - } - int32_t i = 0; - for (i = 0; i <= 3; i++) { - int32_t digit = FXSYS_atoi(contents.Mid(i, 1)); - pos += AppendPattern(result, pos, CBC_OneDimReader::L_PATTERNS[digit], 4, 0, - e); - if (e != BCExceptionNO) { - FX_Free(result); - return NULL; - } - } - pos += AppendPattern(result, pos, CBC_OneDimReader::MIDDLE_PATTERN, 5, 0, e); - if (e != BCExceptionNO) { - FX_Free(result); - return NULL; - } - for (i = 4; i <= 7; i++) { - int32_t digit = FXSYS_atoi(contents.Mid(i, 1)); - pos += AppendPattern(result, pos, CBC_OneDimReader::L_PATTERNS[digit], 4, 1, - e); - if (e != BCExceptionNO) { - FX_Free(result); - return NULL; - } - } - pos += - AppendPattern(result, pos, CBC_OneDimReader::START_END_PATTERN, 3, 1, e); - if (e != BCExceptionNO) { - FX_Free(result); - return NULL; - } - return result; -} -void CBC_OnedEAN8Writer::ShowChars(const CFX_WideStringC& contents, - CFX_DIBitmap* pOutBitmap, - CFX_RenderDevice* device, - const CFX_Matrix* matrix, - int32_t barWidth, - int32_t multiple, - int32_t& e) { - if (device == NULL && pOutBitmap == NULL) { - e = BCExceptionIllegalArgument; - return; - } - int32_t leftPosition = 3 * multiple; - CFX_ByteString str = FX_UTF8Encode(contents); - int32_t iLength = str.GetLength(); - FXTEXT_CHARPOS* pCharPos = FX_Alloc(FXTEXT_CHARPOS, iLength); - FXSYS_memset(pCharPos, 0, sizeof(FXTEXT_CHARPOS) * iLength); - CFX_ByteString tempStr = str.Mid(0, 4); - int32_t iLen = tempStr.GetLength(); - int32_t strWidth = 7 * multiple * 4; - FX_FLOAT blank = 0.0; - CFX_FxgeDevice geBitmap; - if (pOutBitmap) { - geBitmap.Attach(pOutBitmap); - } - int32_t iFontSize = (int32_t)fabs(m_fFontSize); - int32_t iTextHeight = iFontSize + 1; - if (pOutBitmap == NULL) { - CFX_Matrix matr(m_outputHScale, 0.0, 0.0, 1.0, 0.0, 0.0); - CFX_FloatRect rect( - (FX_FLOAT)leftPosition, (FX_FLOAT)(m_Height - iTextHeight), - (FX_FLOAT)(leftPosition + strWidth - 0.5), (FX_FLOAT)m_Height); - matr.Concat(*matrix); - matr.TransformRect(rect); - FX_RECT re = rect.GetOutterRect(); - device->FillRect(&re, m_backgroundColor); - CFX_Matrix matr1(m_outputHScale, 0.0, 0.0, 1.0, 0.0, 0.0); - CFX_FloatRect rect1( - (FX_FLOAT)(leftPosition + 33 * multiple), - (FX_FLOAT)(m_Height - iTextHeight), - (FX_FLOAT)(leftPosition + 33 * multiple + strWidth - 0.5), - (FX_FLOAT)m_Height); - matr1.Concat(*matrix); - matr1.TransformRect(rect1); - re = rect1.GetOutterRect(); - device->FillRect(&re, m_backgroundColor); - } - if (pOutBitmap == NULL) { - strWidth = (int32_t)(strWidth * m_outputHScale); - } - CalcTextInfo(tempStr, pCharPos, m_pFont, (FX_FLOAT)strWidth, iFontSize, - blank); - CFX_Matrix affine_matrix(1.0, 0.0, 0.0, -1.0, 0.0, (FX_FLOAT)iFontSize); - CFX_FxgeDevice ge; - if (pOutBitmap) { - delete ge.GetBitmap(); - ge.Create(strWidth, iTextHeight, FXDIB_Argb); - ge.GetBitmap()->Clear(m_backgroundColor); - ge.DrawNormalText(iLen, pCharPos, m_pFont, - CFX_GEModule::Get()->GetFontCache(), (FX_FLOAT)iFontSize, - (CFX_Matrix*)&affine_matrix, m_fontColor, - FXTEXT_CLEARTYPE); - geBitmap.SetDIBits(ge.GetBitmap(), leftPosition, m_Height - iTextHeight); - } else { - CFX_Matrix affine_matrix1(1.0, 0.0, 0.0, -1.0, - (FX_FLOAT)leftPosition * m_outputHScale, - (FX_FLOAT)(m_Height - iTextHeight + iFontSize)); - affine_matrix1.Concat(*matrix); - device->DrawNormalText(iLen, pCharPos, m_pFont, - CFX_GEModule::Get()->GetFontCache(), - (FX_FLOAT)iFontSize, (CFX_Matrix*)&affine_matrix1, - m_fontColor, FXTEXT_CLEARTYPE); - } - tempStr = str.Mid(4, 4); - iLen = tempStr.GetLength(); - CalcTextInfo(tempStr, pCharPos + 4, m_pFont, (FX_FLOAT)strWidth, iFontSize, - blank); - if (pOutBitmap) { - delete ge.GetBitmap(); - ge.Create(strWidth, iTextHeight, FXDIB_Argb); - ge.GetBitmap()->Clear(m_backgroundColor); - ge.DrawNormalText(iLen, pCharPos + 4, m_pFont, - CFX_GEModule::Get()->GetFontCache(), (FX_FLOAT)iFontSize, - (CFX_Matrix*)&affine_matrix, m_fontColor, - FXTEXT_CLEARTYPE); - geBitmap.SetDIBits(ge.GetBitmap(), leftPosition + 33 * multiple, - m_Height - iTextHeight); - } else { - CFX_Matrix affine_matrix1( - 1.0, 0.0, 0.0, -1.0, - (FX_FLOAT)(leftPosition + 33 * multiple) * m_outputHScale, - (FX_FLOAT)(m_Height - iTextHeight + iFontSize)); - if (matrix) { - affine_matrix1.Concat(*matrix); - } - device->DrawNormalText(iLen, pCharPos + 4, m_pFont, - CFX_GEModule::Get()->GetFontCache(), - (FX_FLOAT)iFontSize, (CFX_Matrix*)&affine_matrix1, - m_fontColor, FXTEXT_CLEARTYPE); - } - FX_Free(pCharPos); -} -void CBC_OnedEAN8Writer::RenderResult(const CFX_WideStringC& contents, - uint8_t* code, - int32_t codeLength, - FX_BOOL isDevice, - int32_t& e) { - CBC_OneDimWriter::RenderResult(contents, code, codeLength, isDevice, e); -} diff --git a/xfa/src/fxbarcode/oned/BC_OnedEAN8Writer.h b/xfa/src/fxbarcode/oned/BC_OnedEAN8Writer.h deleted file mode 100644 index fd858fcc02..0000000000 --- a/xfa/src/fxbarcode/oned/BC_OnedEAN8Writer.h +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_ONED_BC_ONEDEAN8WRITER_H_ -#define XFA_SRC_FXBARCODE_ONED_BC_ONEDEAN8WRITER_H_ - -enum BC_TEXT_LOC; -class CBC_OneDimWriter; -class CBC_OnedEAN8Writer; -class CBC_OnedEAN8Writer : public CBC_OneDimWriter { - private: - int32_t m_codeWidth; - - public: - CBC_OnedEAN8Writer(); - virtual ~CBC_OnedEAN8Writer(); - uint8_t* Encode(const CFX_ByteString& contents, - BCFORMAT format, - int32_t& outWidth, - int32_t& outHeight, - int32_t& e); - uint8_t* Encode(const CFX_ByteString& contents, - BCFORMAT format, - int32_t& outWidth, - int32_t& outHeight, - int32_t hints, - int32_t& e); - uint8_t* Encode(const CFX_ByteString& contents, - int32_t& outLength, - int32_t& e); - void RenderResult(const CFX_WideStringC& contents, - uint8_t* code, - int32_t codeLength, - FX_BOOL isDevice, - int32_t& e); - FX_BOOL CheckContentValidity(const CFX_WideStringC& contents); - CFX_WideString FilterContents(const CFX_WideStringC& contents); - void SetDataLength(int32_t length); - FX_BOOL SetTextLocation(BC_TEXT_LOC location); - int32_t CalcChecksum(const CFX_ByteString& contents); - - protected: - void ShowChars(const CFX_WideStringC& contents, - CFX_DIBitmap* pOutBitmap, - CFX_RenderDevice* device, - const CFX_Matrix* matrix, - int32_t barWidth, - int32_t multiple, - int32_t& e); -}; - -#endif // XFA_SRC_FXBARCODE_ONED_BC_ONEDEAN8WRITER_H_ diff --git a/xfa/src/fxbarcode/oned/BC_OnedUPCAReader.cpp b/xfa/src/fxbarcode/oned/BC_OnedUPCAReader.cpp deleted file mode 100644 index 416b08ae9a..0000000000 --- a/xfa/src/fxbarcode/oned/BC_OnedUPCAReader.cpp +++ /dev/null @@ -1,97 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2008 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "core/include/fxcrt/fx_basic.h" -#include "xfa/src/fxbarcode/BC_Reader.h" -#include "xfa/src/fxbarcode/oned/BC_OneDReader.h" -#include "xfa/src/fxbarcode/oned/BC_OneDimReader.h" -#include "xfa/src/fxbarcode/oned/BC_OnedEAN13Reader.h" -#include "xfa/src/fxbarcode/oned/BC_OnedUPCAReader.h" -#include "xfa/src/fxbarcode/utils.h" - -CBC_OnedUPCAReader::CBC_OnedUPCAReader() { - m_ean13Reader = NULL; -} -void CBC_OnedUPCAReader::Init() { - m_ean13Reader = new CBC_OnedEAN13Reader; -} -CBC_OnedUPCAReader::~CBC_OnedUPCAReader() { - delete m_ean13Reader; -} -CFX_ByteString CBC_OnedUPCAReader::DecodeRow(int32_t rowNumber, - CBC_CommonBitArray* row, - int32_t hints, - int32_t& e) { - CFX_ByteString bytestring = - m_ean13Reader->DecodeRow(rowNumber, row, hints, e); - BC_EXCEPTION_CHECK_ReturnValue(e, ""); - CFX_ByteString temp = MaybeReturnResult(bytestring, e); - BC_EXCEPTION_CHECK_ReturnValue(e, ""); - return temp; -} -CFX_ByteString CBC_OnedUPCAReader::DecodeRow(int32_t rowNumber, - CBC_CommonBitArray* row, - CFX_Int32Array* startGuardRange, - int32_t hints, - int32_t& e) { - CFX_ByteString bytestring = - m_ean13Reader->DecodeRow(rowNumber, row, startGuardRange, hints, e); - BC_EXCEPTION_CHECK_ReturnValue(e, ""); - CFX_ByteString temp = MaybeReturnResult(bytestring, e); - BC_EXCEPTION_CHECK_ReturnValue(e, ""); - return temp; -} -CFX_ByteString CBC_OnedUPCAReader::Decode(CBC_BinaryBitmap* image, int32_t& e) { - CFX_ByteString bytestring = m_ean13Reader->Decode(image, e); - BC_EXCEPTION_CHECK_ReturnValue(e, ""); - CFX_ByteString temp = MaybeReturnResult(bytestring, e); - BC_EXCEPTION_CHECK_ReturnValue(e, ""); - return temp; -} -CFX_ByteString CBC_OnedUPCAReader::Decode(CBC_BinaryBitmap* image, - int32_t hints, - int32_t& e) { - CFX_ByteString bytestring = m_ean13Reader->Decode(image, hints, e); - BC_EXCEPTION_CHECK_ReturnValue(e, ""); - CFX_ByteString temp = MaybeReturnResult(bytestring, e); - BC_EXCEPTION_CHECK_ReturnValue(e, ""); - return temp; -} -int32_t CBC_OnedUPCAReader::DecodeMiddle(CBC_CommonBitArray* row, - CFX_Int32Array* startRange, - CFX_ByteString& resultString, - int32_t& e) { - int32_t temp = m_ean13Reader->DecodeMiddle(row, startRange, resultString, e); - BC_EXCEPTION_CHECK_ReturnValue(e, 0); - return temp; -} -CFX_ByteString CBC_OnedUPCAReader::MaybeReturnResult(CFX_ByteString& result, - int32_t& e) { - if (result[0] == '0') { - result.Delete(0); - return result; - } else { - e = BCExceptionFormatException; - return ""; - } - return ""; -} diff --git a/xfa/src/fxbarcode/oned/BC_OnedUPCAReader.h b/xfa/src/fxbarcode/oned/BC_OnedUPCAReader.h deleted file mode 100644 index 2b6bd1785a..0000000000 --- a/xfa/src/fxbarcode/oned/BC_OnedUPCAReader.h +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_ONED_BC_ONEDUPCAREADER_H_ -#define XFA_SRC_FXBARCODE_ONED_BC_ONEDUPCAREADER_H_ - -class CBC_BinaryBitmap; -class CBC_CommonBitArray; -class CBC_OneDimReader; -class CBC_OnedEAN13Reader; -class CBC_OnedUPCAReader; -class CBC_OnedUPCAReader : public CBC_OneDimReader { - private: - CBC_OnedEAN13Reader* m_ean13Reader; - - public: - CBC_OnedUPCAReader(); - virtual ~CBC_OnedUPCAReader(); - CFX_ByteString DecodeRow(int32_t rowNumber, - CBC_CommonBitArray* row, - int32_t hints, - int32_t& e); - CFX_ByteString DecodeRow(int32_t rowNumber, - CBC_CommonBitArray* row, - CFX_Int32Array* startGuardRange, - int32_t hints, - int32_t& e); - CFX_ByteString Decode(CBC_BinaryBitmap* image, int32_t& e); - CFX_ByteString Decode(CBC_BinaryBitmap* image, int32_t hints, int32_t& e); - virtual void Init(); - - protected: - int32_t DecodeMiddle(CBC_CommonBitArray* row, - CFX_Int32Array* startRange, - CFX_ByteString& resultString, - int32_t& e); - CFX_ByteString MaybeReturnResult(CFX_ByteString& result, int32_t& e); -}; - -#endif // XFA_SRC_FXBARCODE_ONED_BC_ONEDUPCAREADER_H_ diff --git a/xfa/src/fxbarcode/oned/BC_OnedUPCAWriter.cpp b/xfa/src/fxbarcode/oned/BC_OnedUPCAWriter.cpp deleted file mode 100644 index fe4a8e7824..0000000000 --- a/xfa/src/fxbarcode/oned/BC_OnedUPCAWriter.cpp +++ /dev/null @@ -1,286 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2010 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/BC_Writer.h" -#include "xfa/src/fxbarcode/oned/BC_OneDimWriter.h" -#include "xfa/src/fxbarcode/oned/BC_OnedEAN13Writer.h" -#include "xfa/src/fxbarcode/oned/BC_OnedUPCAWriter.h" - -CBC_OnedUPCAWriter::CBC_OnedUPCAWriter() { - m_subWriter = NULL; - m_bLeftPadding = TRUE; - m_bRightPadding = TRUE; -} -void CBC_OnedUPCAWriter::Init() { - m_subWriter = new CBC_OnedEAN13Writer; -} -CBC_OnedUPCAWriter::~CBC_OnedUPCAWriter() { - delete m_subWriter; -} -FX_BOOL CBC_OnedUPCAWriter::CheckContentValidity( - const CFX_WideStringC& contents) { - int32_t i = 0; - for (i = 0; i < contents.GetLength(); i++) { - if (contents.GetAt(i) >= '0' && contents.GetAt(i) <= '9') { - continue; - } else { - return FALSE; - } - } - return TRUE; -} -CFX_WideString CBC_OnedUPCAWriter::FilterContents( - const CFX_WideStringC& contents) { - CFX_WideString filtercontents; - FX_WCHAR ch; - for (int32_t i = 0; i < contents.GetLength(); i++) { - ch = contents.GetAt(i); - if (ch > 175) { - i++; - continue; - } - if (ch >= '0' && ch <= '9') { - filtercontents += ch; - } - } - return filtercontents; -} -int32_t CBC_OnedUPCAWriter::CalcChecksum(const CFX_ByteString& contents) { - int32_t odd = 0; - int32_t even = 0; - int32_t j = 1; - for (int32_t i = contents.GetLength() - 1; i >= 0; i--) { - if (j % 2) { - odd += FXSYS_atoi(contents.Mid(i, 1)); - } else { - even += FXSYS_atoi(contents.Mid(i, 1)); - } - j++; - } - int32_t checksum = (odd * 3 + even) % 10; - checksum = (10 - checksum) % 10; - return (checksum); -} -uint8_t* CBC_OnedUPCAWriter::Encode(const CFX_ByteString& contents, - BCFORMAT format, - int32_t& outWidth, - int32_t& outHeight, - int32_t& e) { - uint8_t* ret = Encode(contents, format, outWidth, outHeight, 0, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - return ret; -} -uint8_t* CBC_OnedUPCAWriter::Encode(const CFX_ByteString& contents, - BCFORMAT format, - int32_t& outWidth, - int32_t& outHeight, - int32_t hints, - int32_t& e) { - if (format != BCFORMAT_UPC_A) { - e = BCExceptionOnlyEncodeUPC_A; - return NULL; - } - CFX_ByteString toEAN13String = '0' + contents; - m_iDataLenth = 13; - uint8_t* ret = m_subWriter->Encode(toEAN13String, BCFORMAT_EAN_13, outWidth, - outHeight, hints, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - return ret; -} -void CBC_OnedUPCAWriter::ShowChars(const CFX_WideStringC& contents, - CFX_DIBitmap* pOutBitmap, - CFX_RenderDevice* device, - const CFX_Matrix* matrix, - int32_t barWidth, - int32_t multiple, - int32_t& e) { - if (device == NULL && pOutBitmap == NULL) { - e = BCExceptionIllegalArgument; - return; - } - int32_t leftPadding = 7 * multiple; - int32_t leftPosition = 10 * multiple + leftPadding; - CFX_ByteString str = FX_UTF8Encode(contents); - int32_t iLen = str.GetLength(); - FXTEXT_CHARPOS* pCharPos = FX_Alloc(FXTEXT_CHARPOS, iLen); - FXSYS_memset(pCharPos, 0, sizeof(FXTEXT_CHARPOS) * iLen); - CFX_ByteString tempStr = str.Mid(1, 5); - FX_FLOAT strWidth = (FX_FLOAT)35 * multiple; - FX_FLOAT blank = 0.0; - CFX_FxgeDevice geBitmap; - if (pOutBitmap) { - geBitmap.Attach(pOutBitmap); - } - iLen = tempStr.GetLength(); - int32_t iFontSize = (int32_t)fabs(m_fFontSize); - int32_t iTextHeight = iFontSize + 1; - if (pOutBitmap == NULL) { - CFX_Matrix matr(m_outputHScale, 0.0, 0.0, 1.0, 0.0, 0.0); - CFX_FloatRect rect( - (FX_FLOAT)leftPosition, (FX_FLOAT)(m_Height - iTextHeight), - (FX_FLOAT)(leftPosition + strWidth - 0.5), (FX_FLOAT)m_Height); - matr.Concat(*matrix); - matr.TransformRect(rect); - FX_RECT re = rect.GetOutterRect(); - device->FillRect(&re, m_backgroundColor); - CFX_Matrix matr1(m_outputHScale, 0.0, 0.0, 1.0, 0.0, 0.0); - CFX_FloatRect rect1( - (FX_FLOAT)(leftPosition + 40 * multiple), - (FX_FLOAT)(m_Height - iTextHeight), - (FX_FLOAT)((leftPosition + 40 * multiple) + strWidth - 0.5), - (FX_FLOAT)m_Height); - matr1.Concat(*matrix); - matr1.TransformRect(rect1); - re = rect1.GetOutterRect(); - device->FillRect(&re, m_backgroundColor); - FX_FLOAT strWidth1 = (FX_FLOAT)multiple * 7; - CFX_Matrix matr2(m_outputHScale, 0.0, 0.0, 1.0, 0.0, 0.0); - CFX_FloatRect rect2(0.0, (FX_FLOAT)(m_Height - iTextHeight), - (FX_FLOAT)strWidth1 - 1, (FX_FLOAT)m_Height); - matr2.Concat(*matrix); - matr2.TransformRect(rect2); - re = rect2.GetOutterRect(); - device->FillRect(&re, m_backgroundColor); - CFX_Matrix matr3(m_outputHScale, 0.0, 0.0, 1.0, 0.0, 0.0); - CFX_FloatRect rect3( - (FX_FLOAT)(leftPosition + 85 * multiple), - (FX_FLOAT)(m_Height - iTextHeight), - (FX_FLOAT)((leftPosition + 85 * multiple) + strWidth1 - 0.5), - (FX_FLOAT)m_Height); - matr3.Concat(*matrix); - matr3.TransformRect(rect3); - re = rect3.GetOutterRect(); - device->FillRect(&re, m_backgroundColor); - } - if (pOutBitmap == NULL) { - strWidth = strWidth * m_outputHScale; - } - CalcTextInfo(tempStr, pCharPos + 1, m_pFont, strWidth, iFontSize, blank); - CFX_Matrix affine_matrix(1.0, 0.0, 0.0, -1.0, 0.0, (FX_FLOAT)iFontSize); - CFX_FxgeDevice ge; - if (pOutBitmap) { - ge.Create((int)strWidth, iTextHeight, FXDIB_Argb); - ge.GetBitmap()->Clear(m_backgroundColor); - ge.DrawNormalText(iLen, pCharPos + 1, m_pFont, - CFX_GEModule::Get()->GetFontCache(), (FX_FLOAT)iFontSize, - (CFX_Matrix*)&affine_matrix, m_fontColor, - FXTEXT_CLEARTYPE); - geBitmap.SetDIBits(ge.GetBitmap(), leftPosition, m_Height - iTextHeight); - } else { - CFX_Matrix affine_matrix1(1.0, 0.0, 0.0, -1.0, - (FX_FLOAT)leftPosition * m_outputHScale, - (FX_FLOAT)(m_Height - iTextHeight + iFontSize)); - if (matrix) { - affine_matrix1.Concat(*matrix); - } - device->DrawNormalText(iLen, pCharPos + 1, m_pFont, - CFX_GEModule::Get()->GetFontCache(), - (FX_FLOAT)iFontSize, (CFX_Matrix*)&affine_matrix1, - m_fontColor, FXTEXT_CLEARTYPE); - } - tempStr = str.Mid(6, 5); - iLen = tempStr.GetLength(); - CalcTextInfo(tempStr, pCharPos + 6, m_pFont, strWidth, iFontSize, blank); - if (pOutBitmap) { - FX_RECT rect2(0, 0, (int)strWidth, iTextHeight); - ge.FillRect(&rect2, m_backgroundColor); - ge.DrawNormalText(iLen, pCharPos + 6, m_pFont, - CFX_GEModule::Get()->GetFontCache(), (FX_FLOAT)iFontSize, - (CFX_Matrix*)&affine_matrix, m_fontColor, - FXTEXT_CLEARTYPE); - geBitmap.SetDIBits(ge.GetBitmap(), leftPosition + 40 * multiple, - m_Height - iTextHeight); - } else { - CFX_Matrix affine_matrix1( - 1.0, 0.0, 0.0, -1.0, - (FX_FLOAT)(leftPosition + 40 * multiple) * m_outputHScale, - (FX_FLOAT)(m_Height - iTextHeight + iFontSize)); - if (matrix) { - affine_matrix1.Concat(*matrix); - } - device->DrawNormalText(iLen, pCharPos + 6, m_pFont, - CFX_GEModule::Get()->GetFontCache(), - (FX_FLOAT)iFontSize, (CFX_Matrix*)&affine_matrix1, - m_fontColor, FXTEXT_CLEARTYPE); - } - tempStr = str.Mid(0, 1); - iLen = tempStr.GetLength(); - strWidth = (FX_FLOAT)multiple * 7; - if (pOutBitmap == NULL) { - strWidth = strWidth * m_outputHScale; - } - CalcTextInfo(tempStr, pCharPos, m_pFont, strWidth, iFontSize, blank); - if (pOutBitmap) { - delete ge.GetBitmap(); - ge.Create((int)strWidth, iTextHeight, FXDIB_Argb); - ge.GetBitmap()->Clear(m_backgroundColor); - ge.DrawNormalText(iLen, pCharPos, m_pFont, - CFX_GEModule::Get()->GetFontCache(), (FX_FLOAT)iFontSize, - (CFX_Matrix*)&affine_matrix, m_fontColor, - FXTEXT_CLEARTYPE); - geBitmap.SetDIBits(ge.GetBitmap(), 0, m_Height - iTextHeight); - } else { - CFX_Matrix affine_matrix1(1.0, 0.0, 0.0, -1.0, 0, - (FX_FLOAT)(m_Height - iTextHeight + iFontSize)); - if (matrix) { - affine_matrix1.Concat(*matrix); - } - device->DrawNormalText(iLen, pCharPos, m_pFont, - CFX_GEModule::Get()->GetFontCache(), - (FX_FLOAT)iFontSize, (CFX_Matrix*)&affine_matrix1, - m_fontColor, FXTEXT_CLEARTYPE); - } - tempStr = str.Mid(11, 1); - iLen = tempStr.GetLength(); - CalcTextInfo(tempStr, pCharPos + 11, m_pFont, strWidth, iFontSize, blank); - if (pOutBitmap) { - delete ge.GetBitmap(); - ge.Create((int)strWidth, iTextHeight, FXDIB_Argb); - ge.GetBitmap()->Clear(m_backgroundColor); - ge.DrawNormalText(iLen, pCharPos + 11, m_pFont, - CFX_GEModule::Get()->GetFontCache(), (FX_FLOAT)iFontSize, - (CFX_Matrix*)&affine_matrix, m_fontColor, - FXTEXT_CLEARTYPE); - geBitmap.SetDIBits(ge.GetBitmap(), leftPosition + 85 * multiple, - m_Height - iTextHeight); - } else { - CFX_Matrix affine_matrix1( - 1.0, 0.0, 0.0, -1.0, - (FX_FLOAT)(leftPosition + 85 * multiple) * m_outputHScale, - (FX_FLOAT)(m_Height - iTextHeight + iFontSize)); - if (matrix) { - affine_matrix1.Concat(*matrix); - } - device->DrawNormalText(iLen, pCharPos + 11, m_pFont, - CFX_GEModule::Get()->GetFontCache(), - (FX_FLOAT)iFontSize, (CFX_Matrix*)&affine_matrix1, - m_fontColor, FXTEXT_CLEARTYPE); - } - FX_Free(pCharPos); -} -void CBC_OnedUPCAWriter::RenderResult(const CFX_WideStringC& contents, - uint8_t* code, - int32_t codeLength, - FX_BOOL isDevice, - int32_t& e) { - CBC_OneDimWriter::RenderResult(contents, code, codeLength, isDevice, e); -} diff --git a/xfa/src/fxbarcode/oned/BC_OnedUPCAWriter.h b/xfa/src/fxbarcode/oned/BC_OnedUPCAWriter.h deleted file mode 100644 index 6146425b0b..0000000000 --- a/xfa/src/fxbarcode/oned/BC_OnedUPCAWriter.h +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_ONED_BC_ONEDUPCAWRITER_H_ -#define XFA_SRC_FXBARCODE_ONED_BC_ONEDUPCAWRITER_H_ - -class CBC_OnedEAN13Writer; -class CBC_OnedUPCAWriter; -class CBC_OnedUPCAWriter : public CBC_OneDimWriter { - private: - CBC_OnedEAN13Writer* m_subWriter; - - public: - CBC_OnedUPCAWriter(); - virtual ~CBC_OnedUPCAWriter(); - virtual void Init(); - uint8_t* Encode(const CFX_ByteString& contents, - BCFORMAT format, - int32_t& outWidth, - int32_t& outHeight, - int32_t& e); - uint8_t* Encode(const CFX_ByteString& contents, - BCFORMAT format, - int32_t& outWidth, - int32_t& outHeight, - int32_t hints, - int32_t& e); - uint8_t* Encode(const CFX_ByteString& contents, - int32_t& outLength, - int32_t& e) { - return nullptr; - } - void RenderResult(const CFX_WideStringC& contents, - uint8_t* code, - int32_t codeLength, - FX_BOOL isDevice, - int32_t& e); - FX_BOOL CheckContentValidity(const CFX_WideStringC& contents); - CFX_WideString FilterContents(const CFX_WideStringC& contents); - int32_t CalcChecksum(const CFX_ByteString& contents); - - protected: - void ShowChars(const CFX_WideStringC& contents, - CFX_DIBitmap* pOutBitmap, - CFX_RenderDevice* device, - const CFX_Matrix* matrix, - int32_t barWidth, - int32_t multiple, - int32_t& e); -}; - -#endif // XFA_SRC_FXBARCODE_ONED_BC_ONEDUPCAWRITER_H_ diff --git a/xfa/src/fxbarcode/pdf417/BC_PDF417.cpp b/xfa/src/fxbarcode/pdf417/BC_PDF417.cpp deleted file mode 100644 index c06f8112da..0000000000 --- a/xfa/src/fxbarcode/pdf417/BC_PDF417.cpp +++ /dev/null @@ -1,586 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2006 Jeremias Maerki in part, and ZXing Authors in part - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/pdf417/BC_PDF417.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417BarcodeMatrix.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417BarcodeRow.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417Compaction.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417ErrorCorrection.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417HighLevelEncoder.h" -#include "xfa/src/fxbarcode/utils.h" - -int32_t CBC_PDF417::START_PATTERN = 0x1fea8; -int32_t CBC_PDF417::STOP_PATTERN = 0x3fa29; -int32_t CBC_PDF417::CODEWORD_TABLE[][1000] = { - {0x1d5c0, 0x1eaf0, 0x1f57c, 0x1d4e0, 0x1ea78, 0x1f53e, 0x1a8c0, 0x1d470, - 0x1a860, 0x15040, 0x1a830, 0x15020, 0x1adc0, 0x1d6f0, 0x1eb7c, 0x1ace0, - 0x1d678, 0x1eb3e, 0x158c0, 0x1ac70, 0x15860, 0x15dc0, 0x1aef0, 0x1d77c, - 0x15ce0, 0x1ae78, 0x1d73e, 0x15c70, 0x1ae3c, 0x15ef0, 0x1af7c, 0x15e78, - 0x1af3e, 0x15f7c, 0x1f5fa, 0x1d2e0, 0x1e978, 0x1f4be, 0x1a4c0, 0x1d270, - 0x1e93c, 0x1a460, 0x1d238, 0x14840, 0x1a430, 0x1d21c, 0x14820, 0x1a418, - 0x14810, 0x1a6e0, 0x1d378, 0x1e9be, 0x14cc0, 0x1a670, 0x1d33c, 0x14c60, - 0x1a638, 0x1d31e, 0x14c30, 0x1a61c, 0x14ee0, 0x1a778, 0x1d3be, 0x14e70, - 0x1a73c, 0x14e38, 0x1a71e, 0x14f78, 0x1a7be, 0x14f3c, 0x14f1e, 0x1a2c0, - 0x1d170, 0x1e8bc, 0x1a260, 0x1d138, 0x1e89e, 0x14440, 0x1a230, 0x1d11c, - 0x14420, 0x1a218, 0x14410, 0x14408, 0x146c0, 0x1a370, 0x1d1bc, 0x14660, - 0x1a338, 0x1d19e, 0x14630, 0x1a31c, 0x14618, 0x1460c, 0x14770, 0x1a3bc, - 0x14738, 0x1a39e, 0x1471c, 0x147bc, 0x1a160, 0x1d0b8, 0x1e85e, 0x14240, - 0x1a130, 0x1d09c, 0x14220, 0x1a118, 0x1d08e, 0x14210, 0x1a10c, 0x14208, - 0x1a106, 0x14360, 0x1a1b8, 0x1d0de, 0x14330, 0x1a19c, 0x14318, 0x1a18e, - 0x1430c, 0x14306, 0x1a1de, 0x1438e, 0x14140, 0x1a0b0, 0x1d05c, 0x14120, - 0x1a098, 0x1d04e, 0x14110, 0x1a08c, 0x14108, 0x1a086, 0x14104, 0x141b0, - 0x14198, 0x1418c, 0x140a0, 0x1d02e, 0x1a04c, 0x1a046, 0x14082, 0x1cae0, - 0x1e578, 0x1f2be, 0x194c0, 0x1ca70, 0x1e53c, 0x19460, 0x1ca38, 0x1e51e, - 0x12840, 0x19430, 0x12820, 0x196e0, 0x1cb78, 0x1e5be, 0x12cc0, 0x19670, - 0x1cb3c, 0x12c60, 0x19638, 0x12c30, 0x12c18, 0x12ee0, 0x19778, 0x1cbbe, - 0x12e70, 0x1973c, 0x12e38, 0x12e1c, 0x12f78, 0x197be, 0x12f3c, 0x12fbe, - 0x1dac0, 0x1ed70, 0x1f6bc, 0x1da60, 0x1ed38, 0x1f69e, 0x1b440, 0x1da30, - 0x1ed1c, 0x1b420, 0x1da18, 0x1ed0e, 0x1b410, 0x1da0c, 0x192c0, 0x1c970, - 0x1e4bc, 0x1b6c0, 0x19260, 0x1c938, 0x1e49e, 0x1b660, 0x1db38, 0x1ed9e, - 0x16c40, 0x12420, 0x19218, 0x1c90e, 0x16c20, 0x1b618, 0x16c10, 0x126c0, - 0x19370, 0x1c9bc, 0x16ec0, 0x12660, 0x19338, 0x1c99e, 0x16e60, 0x1b738, - 0x1db9e, 0x16e30, 0x12618, 0x16e18, 0x12770, 0x193bc, 0x16f70, 0x12738, - 0x1939e, 0x16f38, 0x1b79e, 0x16f1c, 0x127bc, 0x16fbc, 0x1279e, 0x16f9e, - 0x1d960, 0x1ecb8, 0x1f65e, 0x1b240, 0x1d930, 0x1ec9c, 0x1b220, 0x1d918, - 0x1ec8e, 0x1b210, 0x1d90c, 0x1b208, 0x1b204, 0x19160, 0x1c8b8, 0x1e45e, - 0x1b360, 0x19130, 0x1c89c, 0x16640, 0x12220, 0x1d99c, 0x1c88e, 0x16620, - 0x12210, 0x1910c, 0x16610, 0x1b30c, 0x19106, 0x12204, 0x12360, 0x191b8, - 0x1c8de, 0x16760, 0x12330, 0x1919c, 0x16730, 0x1b39c, 0x1918e, 0x16718, - 0x1230c, 0x12306, 0x123b8, 0x191de, 0x167b8, 0x1239c, 0x1679c, 0x1238e, - 0x1678e, 0x167de, 0x1b140, 0x1d8b0, 0x1ec5c, 0x1b120, 0x1d898, 0x1ec4e, - 0x1b110, 0x1d88c, 0x1b108, 0x1d886, 0x1b104, 0x1b102, 0x12140, 0x190b0, - 0x1c85c, 0x16340, 0x12120, 0x19098, 0x1c84e, 0x16320, 0x1b198, 0x1d8ce, - 0x16310, 0x12108, 0x19086, 0x16308, 0x1b186, 0x16304, 0x121b0, 0x190dc, - 0x163b0, 0x12198, 0x190ce, 0x16398, 0x1b1ce, 0x1638c, 0x12186, 0x16386, - 0x163dc, 0x163ce, 0x1b0a0, 0x1d858, 0x1ec2e, 0x1b090, 0x1d84c, 0x1b088, - 0x1d846, 0x1b084, 0x1b082, 0x120a0, 0x19058, 0x1c82e, 0x161a0, 0x12090, - 0x1904c, 0x16190, 0x1b0cc, 0x19046, 0x16188, 0x12084, 0x16184, 0x12082, - 0x120d8, 0x161d8, 0x161cc, 0x161c6, 0x1d82c, 0x1d826, 0x1b042, 0x1902c, - 0x12048, 0x160c8, 0x160c4, 0x160c2, 0x18ac0, 0x1c570, 0x1e2bc, 0x18a60, - 0x1c538, 0x11440, 0x18a30, 0x1c51c, 0x11420, 0x18a18, 0x11410, 0x11408, - 0x116c0, 0x18b70, 0x1c5bc, 0x11660, 0x18b38, 0x1c59e, 0x11630, 0x18b1c, - 0x11618, 0x1160c, 0x11770, 0x18bbc, 0x11738, 0x18b9e, 0x1171c, 0x117bc, - 0x1179e, 0x1cd60, 0x1e6b8, 0x1f35e, 0x19a40, 0x1cd30, 0x1e69c, 0x19a20, - 0x1cd18, 0x1e68e, 0x19a10, 0x1cd0c, 0x19a08, 0x1cd06, 0x18960, 0x1c4b8, - 0x1e25e, 0x19b60, 0x18930, 0x1c49c, 0x13640, 0x11220, 0x1cd9c, 0x1c48e, - 0x13620, 0x19b18, 0x1890c, 0x13610, 0x11208, 0x13608, 0x11360, 0x189b8, - 0x1c4de, 0x13760, 0x11330, 0x1cdde, 0x13730, 0x19b9c, 0x1898e, 0x13718, - 0x1130c, 0x1370c, 0x113b8, 0x189de, 0x137b8, 0x1139c, 0x1379c, 0x1138e, - 0x113de, 0x137de, 0x1dd40, 0x1eeb0, 0x1f75c, 0x1dd20, 0x1ee98, 0x1f74e, - 0x1dd10, 0x1ee8c, 0x1dd08, 0x1ee86, 0x1dd04, 0x19940, 0x1ccb0, 0x1e65c, - 0x1bb40, 0x19920, 0x1eedc, 0x1e64e, 0x1bb20, 0x1dd98, 0x1eece, 0x1bb10, - 0x19908, 0x1cc86, 0x1bb08, 0x1dd86, 0x19902, 0x11140, 0x188b0, 0x1c45c, - 0x13340, 0x11120, 0x18898, 0x1c44e, 0x17740, 0x13320, 0x19998, 0x1ccce, - 0x17720, 0x1bb98, 0x1ddce, 0x18886, 0x17710, 0x13308, 0x19986, 0x17708, - 0x11102, 0x111b0, 0x188dc, 0x133b0, 0x11198, 0x188ce, 0x177b0, 0x13398, - 0x199ce, 0x17798, 0x1bbce, 0x11186, 0x13386, 0x111dc, 0x133dc, 0x111ce, - 0x177dc, 0x133ce, 0x1dca0, 0x1ee58, 0x1f72e, 0x1dc90, 0x1ee4c, 0x1dc88, - 0x1ee46, 0x1dc84, 0x1dc82, 0x198a0, 0x1cc58, 0x1e62e, 0x1b9a0, 0x19890, - 0x1ee6e, 0x1b990, 0x1dccc, 0x1cc46, 0x1b988, 0x19884, 0x1b984, 0x19882, - 0x1b982, 0x110a0, 0x18858, 0x1c42e, 0x131a0, 0x11090, 0x1884c, 0x173a0, - 0x13190, 0x198cc, 0x18846, 0x17390, 0x1b9cc, 0x11084, 0x17388, 0x13184, - 0x11082, 0x13182, 0x110d8, 0x1886e, 0x131d8, 0x110cc, 0x173d8, 0x131cc, - 0x110c6, 0x173cc, 0x131c6, 0x110ee, 0x173ee, 0x1dc50, 0x1ee2c, 0x1dc48, - 0x1ee26, 0x1dc44, 0x1dc42, 0x19850, 0x1cc2c, 0x1b8d0, 0x19848, 0x1cc26, - 0x1b8c8, 0x1dc66, 0x1b8c4, 0x19842, 0x1b8c2, 0x11050, 0x1882c, 0x130d0, - 0x11048, 0x18826, 0x171d0, 0x130c8, 0x19866, 0x171c8, 0x1b8e6, 0x11042, - 0x171c4, 0x130c2, 0x171c2, 0x130ec, 0x171ec, 0x171e6, 0x1ee16, 0x1dc22, - 0x1cc16, 0x19824, 0x19822, 0x11028, 0x13068, 0x170e8, 0x11022, 0x13062, - 0x18560, 0x10a40, 0x18530, 0x10a20, 0x18518, 0x1c28e, 0x10a10, 0x1850c, - 0x10a08, 0x18506, 0x10b60, 0x185b8, 0x1c2de, 0x10b30, 0x1859c, 0x10b18, - 0x1858e, 0x10b0c, 0x10b06, 0x10bb8, 0x185de, 0x10b9c, 0x10b8e, 0x10bde, - 0x18d40, 0x1c6b0, 0x1e35c, 0x18d20, 0x1c698, 0x18d10, 0x1c68c, 0x18d08, - 0x1c686, 0x18d04, 0x10940, 0x184b0, 0x1c25c, 0x11b40, 0x10920, 0x1c6dc, - 0x1c24e, 0x11b20, 0x18d98, 0x1c6ce, 0x11b10, 0x10908, 0x18486, 0x11b08, - 0x18d86, 0x10902, 0x109b0, 0x184dc, 0x11bb0, 0x10998, 0x184ce, 0x11b98, - 0x18dce, 0x11b8c, 0x10986, 0x109dc, 0x11bdc, 0x109ce, 0x11bce, 0x1cea0, - 0x1e758, 0x1f3ae, 0x1ce90, 0x1e74c, 0x1ce88, 0x1e746, 0x1ce84, 0x1ce82, - 0x18ca0, 0x1c658, 0x19da0, 0x18c90, 0x1c64c, 0x19d90, 0x1cecc, 0x1c646, - 0x19d88, 0x18c84, 0x19d84, 0x18c82, 0x19d82, 0x108a0, 0x18458, 0x119a0, - 0x10890, 0x1c66e, 0x13ba0, 0x11990, 0x18ccc, 0x18446, 0x13b90, 0x19dcc, - 0x10884, 0x13b88, 0x11984, 0x10882, 0x11982, 0x108d8, 0x1846e, 0x119d8, - 0x108cc, 0x13bd8, 0x119cc, 0x108c6, 0x13bcc, 0x119c6, 0x108ee, 0x119ee, - 0x13bee, 0x1ef50, 0x1f7ac, 0x1ef48, 0x1f7a6, 0x1ef44, 0x1ef42, 0x1ce50, - 0x1e72c, 0x1ded0, 0x1ef6c, 0x1e726, 0x1dec8, 0x1ef66, 0x1dec4, 0x1ce42, - 0x1dec2, 0x18c50, 0x1c62c, 0x19cd0, 0x18c48, 0x1c626, 0x1bdd0, 0x19cc8, - 0x1ce66, 0x1bdc8, 0x1dee6, 0x18c42, 0x1bdc4, 0x19cc2, 0x1bdc2, 0x10850, - 0x1842c, 0x118d0, 0x10848, 0x18426, 0x139d0, 0x118c8, 0x18c66, 0x17bd0, - 0x139c8, 0x19ce6, 0x10842, 0x17bc8, 0x1bde6, 0x118c2, 0x17bc4, 0x1086c, - 0x118ec, 0x10866, 0x139ec, 0x118e6, 0x17bec, 0x139e6, 0x17be6, 0x1ef28, - 0x1f796, 0x1ef24, 0x1ef22, 0x1ce28, 0x1e716, 0x1de68, 0x1ef36, 0x1de64, - 0x1ce22, 0x1de62, 0x18c28, 0x1c616, 0x19c68, 0x18c24, 0x1bce8, 0x19c64, - 0x18c22, 0x1bce4, 0x19c62, 0x1bce2, 0x10828, 0x18416, 0x11868, 0x18c36, - 0x138e8, 0x11864, 0x10822, 0x179e8, 0x138e4, 0x11862, 0x179e4, 0x138e2, - 0x179e2, 0x11876, 0x179f6, 0x1ef12, 0x1de34, 0x1de32, 0x19c34, 0x1bc74, - 0x1bc72, 0x11834, 0x13874, 0x178f4, 0x178f2, 0x10540, 0x10520, 0x18298, - 0x10510, 0x10508, 0x10504, 0x105b0, 0x10598, 0x1058c, 0x10586, 0x105dc, - 0x105ce, 0x186a0, 0x18690, 0x1c34c, 0x18688, 0x1c346, 0x18684, 0x18682, - 0x104a0, 0x18258, 0x10da0, 0x186d8, 0x1824c, 0x10d90, 0x186cc, 0x10d88, - 0x186c6, 0x10d84, 0x10482, 0x10d82, 0x104d8, 0x1826e, 0x10dd8, 0x186ee, - 0x10dcc, 0x104c6, 0x10dc6, 0x104ee, 0x10dee, 0x1c750, 0x1c748, 0x1c744, - 0x1c742, 0x18650, 0x18ed0, 0x1c76c, 0x1c326, 0x18ec8, 0x1c766, 0x18ec4, - 0x18642, 0x18ec2, 0x10450, 0x10cd0, 0x10448, 0x18226, 0x11dd0, 0x10cc8, - 0x10444, 0x11dc8, 0x10cc4, 0x10442, 0x11dc4, 0x10cc2, 0x1046c, 0x10cec, - 0x10466, 0x11dec, 0x10ce6, 0x11de6, 0x1e7a8, 0x1e7a4, 0x1e7a2, 0x1c728, - 0x1cf68, 0x1e7b6, 0x1cf64, 0x1c722, 0x1cf62, 0x18628, 0x1c316, 0x18e68, - 0x1c736, 0x19ee8, 0x18e64, 0x18622, 0x19ee4, 0x18e62, 0x19ee2, 0x10428, - 0x18216, 0x10c68, 0x18636, 0x11ce8, 0x10c64, 0x10422, 0x13de8, 0x11ce4, - 0x10c62, 0x13de4, 0x11ce2, 0x10436, 0x10c76, 0x11cf6, 0x13df6, 0x1f7d4, - 0x1f7d2, 0x1e794, 0x1efb4, 0x1e792, 0x1efb2, 0x1c714, 0x1cf34, 0x1c712, - 0x1df74, 0x1cf32, 0x1df72, 0x18614, 0x18e34, 0x18612, 0x19e74, 0x18e32, - 0x1bef4}, - {0x1f560, 0x1fab8, 0x1ea40, 0x1f530, 0x1fa9c, 0x1ea20, 0x1f518, 0x1fa8e, - 0x1ea10, 0x1f50c, 0x1ea08, 0x1f506, 0x1ea04, 0x1eb60, 0x1f5b8, 0x1fade, - 0x1d640, 0x1eb30, 0x1f59c, 0x1d620, 0x1eb18, 0x1f58e, 0x1d610, 0x1eb0c, - 0x1d608, 0x1eb06, 0x1d604, 0x1d760, 0x1ebb8, 0x1f5de, 0x1ae40, 0x1d730, - 0x1eb9c, 0x1ae20, 0x1d718, 0x1eb8e, 0x1ae10, 0x1d70c, 0x1ae08, 0x1d706, - 0x1ae04, 0x1af60, 0x1d7b8, 0x1ebde, 0x15e40, 0x1af30, 0x1d79c, 0x15e20, - 0x1af18, 0x1d78e, 0x15e10, 0x1af0c, 0x15e08, 0x1af06, 0x15f60, 0x1afb8, - 0x1d7de, 0x15f30, 0x1af9c, 0x15f18, 0x1af8e, 0x15f0c, 0x15fb8, 0x1afde, - 0x15f9c, 0x15f8e, 0x1e940, 0x1f4b0, 0x1fa5c, 0x1e920, 0x1f498, 0x1fa4e, - 0x1e910, 0x1f48c, 0x1e908, 0x1f486, 0x1e904, 0x1e902, 0x1d340, 0x1e9b0, - 0x1f4dc, 0x1d320, 0x1e998, 0x1f4ce, 0x1d310, 0x1e98c, 0x1d308, 0x1e986, - 0x1d304, 0x1d302, 0x1a740, 0x1d3b0, 0x1e9dc, 0x1a720, 0x1d398, 0x1e9ce, - 0x1a710, 0x1d38c, 0x1a708, 0x1d386, 0x1a704, 0x1a702, 0x14f40, 0x1a7b0, - 0x1d3dc, 0x14f20, 0x1a798, 0x1d3ce, 0x14f10, 0x1a78c, 0x14f08, 0x1a786, - 0x14f04, 0x14fb0, 0x1a7dc, 0x14f98, 0x1a7ce, 0x14f8c, 0x14f86, 0x14fdc, - 0x14fce, 0x1e8a0, 0x1f458, 0x1fa2e, 0x1e890, 0x1f44c, 0x1e888, 0x1f446, - 0x1e884, 0x1e882, 0x1d1a0, 0x1e8d8, 0x1f46e, 0x1d190, 0x1e8cc, 0x1d188, - 0x1e8c6, 0x1d184, 0x1d182, 0x1a3a0, 0x1d1d8, 0x1e8ee, 0x1a390, 0x1d1cc, - 0x1a388, 0x1d1c6, 0x1a384, 0x1a382, 0x147a0, 0x1a3d8, 0x1d1ee, 0x14790, - 0x1a3cc, 0x14788, 0x1a3c6, 0x14784, 0x14782, 0x147d8, 0x1a3ee, 0x147cc, - 0x147c6, 0x147ee, 0x1e850, 0x1f42c, 0x1e848, 0x1f426, 0x1e844, 0x1e842, - 0x1d0d0, 0x1e86c, 0x1d0c8, 0x1e866, 0x1d0c4, 0x1d0c2, 0x1a1d0, 0x1d0ec, - 0x1a1c8, 0x1d0e6, 0x1a1c4, 0x1a1c2, 0x143d0, 0x1a1ec, 0x143c8, 0x1a1e6, - 0x143c4, 0x143c2, 0x143ec, 0x143e6, 0x1e828, 0x1f416, 0x1e824, 0x1e822, - 0x1d068, 0x1e836, 0x1d064, 0x1d062, 0x1a0e8, 0x1d076, 0x1a0e4, 0x1a0e2, - 0x141e8, 0x1a0f6, 0x141e4, 0x141e2, 0x1e814, 0x1e812, 0x1d034, 0x1d032, - 0x1a074, 0x1a072, 0x1e540, 0x1f2b0, 0x1f95c, 0x1e520, 0x1f298, 0x1f94e, - 0x1e510, 0x1f28c, 0x1e508, 0x1f286, 0x1e504, 0x1e502, 0x1cb40, 0x1e5b0, - 0x1f2dc, 0x1cb20, 0x1e598, 0x1f2ce, 0x1cb10, 0x1e58c, 0x1cb08, 0x1e586, - 0x1cb04, 0x1cb02, 0x19740, 0x1cbb0, 0x1e5dc, 0x19720, 0x1cb98, 0x1e5ce, - 0x19710, 0x1cb8c, 0x19708, 0x1cb86, 0x19704, 0x19702, 0x12f40, 0x197b0, - 0x1cbdc, 0x12f20, 0x19798, 0x1cbce, 0x12f10, 0x1978c, 0x12f08, 0x19786, - 0x12f04, 0x12fb0, 0x197dc, 0x12f98, 0x197ce, 0x12f8c, 0x12f86, 0x12fdc, - 0x12fce, 0x1f6a0, 0x1fb58, 0x16bf0, 0x1f690, 0x1fb4c, 0x169f8, 0x1f688, - 0x1fb46, 0x168fc, 0x1f684, 0x1f682, 0x1e4a0, 0x1f258, 0x1f92e, 0x1eda0, - 0x1e490, 0x1fb6e, 0x1ed90, 0x1f6cc, 0x1f246, 0x1ed88, 0x1e484, 0x1ed84, - 0x1e482, 0x1ed82, 0x1c9a0, 0x1e4d8, 0x1f26e, 0x1dba0, 0x1c990, 0x1e4cc, - 0x1db90, 0x1edcc, 0x1e4c6, 0x1db88, 0x1c984, 0x1db84, 0x1c982, 0x1db82, - 0x193a0, 0x1c9d8, 0x1e4ee, 0x1b7a0, 0x19390, 0x1c9cc, 0x1b790, 0x1dbcc, - 0x1c9c6, 0x1b788, 0x19384, 0x1b784, 0x19382, 0x1b782, 0x127a0, 0x193d8, - 0x1c9ee, 0x16fa0, 0x12790, 0x193cc, 0x16f90, 0x1b7cc, 0x193c6, 0x16f88, - 0x12784, 0x16f84, 0x12782, 0x127d8, 0x193ee, 0x16fd8, 0x127cc, 0x16fcc, - 0x127c6, 0x16fc6, 0x127ee, 0x1f650, 0x1fb2c, 0x165f8, 0x1f648, 0x1fb26, - 0x164fc, 0x1f644, 0x1647e, 0x1f642, 0x1e450, 0x1f22c, 0x1ecd0, 0x1e448, - 0x1f226, 0x1ecc8, 0x1f666, 0x1ecc4, 0x1e442, 0x1ecc2, 0x1c8d0, 0x1e46c, - 0x1d9d0, 0x1c8c8, 0x1e466, 0x1d9c8, 0x1ece6, 0x1d9c4, 0x1c8c2, 0x1d9c2, - 0x191d0, 0x1c8ec, 0x1b3d0, 0x191c8, 0x1c8e6, 0x1b3c8, 0x1d9e6, 0x1b3c4, - 0x191c2, 0x1b3c2, 0x123d0, 0x191ec, 0x167d0, 0x123c8, 0x191e6, 0x167c8, - 0x1b3e6, 0x167c4, 0x123c2, 0x167c2, 0x123ec, 0x167ec, 0x123e6, 0x167e6, - 0x1f628, 0x1fb16, 0x162fc, 0x1f624, 0x1627e, 0x1f622, 0x1e428, 0x1f216, - 0x1ec68, 0x1f636, 0x1ec64, 0x1e422, 0x1ec62, 0x1c868, 0x1e436, 0x1d8e8, - 0x1c864, 0x1d8e4, 0x1c862, 0x1d8e2, 0x190e8, 0x1c876, 0x1b1e8, 0x1d8f6, - 0x1b1e4, 0x190e2, 0x1b1e2, 0x121e8, 0x190f6, 0x163e8, 0x121e4, 0x163e4, - 0x121e2, 0x163e2, 0x121f6, 0x163f6, 0x1f614, 0x1617e, 0x1f612, 0x1e414, - 0x1ec34, 0x1e412, 0x1ec32, 0x1c834, 0x1d874, 0x1c832, 0x1d872, 0x19074, - 0x1b0f4, 0x19072, 0x1b0f2, 0x120f4, 0x161f4, 0x120f2, 0x161f2, 0x1f60a, - 0x1e40a, 0x1ec1a, 0x1c81a, 0x1d83a, 0x1903a, 0x1b07a, 0x1e2a0, 0x1f158, - 0x1f8ae, 0x1e290, 0x1f14c, 0x1e288, 0x1f146, 0x1e284, 0x1e282, 0x1c5a0, - 0x1e2d8, 0x1f16e, 0x1c590, 0x1e2cc, 0x1c588, 0x1e2c6, 0x1c584, 0x1c582, - 0x18ba0, 0x1c5d8, 0x1e2ee, 0x18b90, 0x1c5cc, 0x18b88, 0x1c5c6, 0x18b84, - 0x18b82, 0x117a0, 0x18bd8, 0x1c5ee, 0x11790, 0x18bcc, 0x11788, 0x18bc6, - 0x11784, 0x11782, 0x117d8, 0x18bee, 0x117cc, 0x117c6, 0x117ee, 0x1f350, - 0x1f9ac, 0x135f8, 0x1f348, 0x1f9a6, 0x134fc, 0x1f344, 0x1347e, 0x1f342, - 0x1e250, 0x1f12c, 0x1e6d0, 0x1e248, 0x1f126, 0x1e6c8, 0x1f366, 0x1e6c4, - 0x1e242, 0x1e6c2, 0x1c4d0, 0x1e26c, 0x1cdd0, 0x1c4c8, 0x1e266, 0x1cdc8, - 0x1e6e6, 0x1cdc4, 0x1c4c2, 0x1cdc2, 0x189d0, 0x1c4ec, 0x19bd0, 0x189c8, - 0x1c4e6, 0x19bc8, 0x1cde6, 0x19bc4, 0x189c2, 0x19bc2, 0x113d0, 0x189ec, - 0x137d0, 0x113c8, 0x189e6, 0x137c8, 0x19be6, 0x137c4, 0x113c2, 0x137c2, - 0x113ec, 0x137ec, 0x113e6, 0x137e6, 0x1fba8, 0x175f0, 0x1bafc, 0x1fba4, - 0x174f8, 0x1ba7e, 0x1fba2, 0x1747c, 0x1743e, 0x1f328, 0x1f996, 0x132fc, - 0x1f768, 0x1fbb6, 0x176fc, 0x1327e, 0x1f764, 0x1f322, 0x1767e, 0x1f762, - 0x1e228, 0x1f116, 0x1e668, 0x1e224, 0x1eee8, 0x1f776, 0x1e222, 0x1eee4, - 0x1e662, 0x1eee2, 0x1c468, 0x1e236, 0x1cce8, 0x1c464, 0x1dde8, 0x1cce4, - 0x1c462, 0x1dde4, 0x1cce2, 0x1dde2, 0x188e8, 0x1c476, 0x199e8, 0x188e4, - 0x1bbe8, 0x199e4, 0x188e2, 0x1bbe4, 0x199e2, 0x1bbe2, 0x111e8, 0x188f6, - 0x133e8, 0x111e4, 0x177e8, 0x133e4, 0x111e2, 0x177e4, 0x133e2, 0x177e2, - 0x111f6, 0x133f6, 0x1fb94, 0x172f8, 0x1b97e, 0x1fb92, 0x1727c, 0x1723e, - 0x1f314, 0x1317e, 0x1f734, 0x1f312, 0x1737e, 0x1f732, 0x1e214, 0x1e634, - 0x1e212, 0x1ee74, 0x1e632, 0x1ee72, 0x1c434, 0x1cc74, 0x1c432, 0x1dcf4, - 0x1cc72, 0x1dcf2, 0x18874, 0x198f4, 0x18872, 0x1b9f4, 0x198f2, 0x1b9f2, - 0x110f4, 0x131f4, 0x110f2, 0x173f4, 0x131f2, 0x173f2, 0x1fb8a, 0x1717c, - 0x1713e, 0x1f30a, 0x1f71a, 0x1e20a, 0x1e61a, 0x1ee3a, 0x1c41a, 0x1cc3a, - 0x1dc7a, 0x1883a, 0x1987a, 0x1b8fa, 0x1107a, 0x130fa, 0x171fa, 0x170be, - 0x1e150, 0x1f0ac, 0x1e148, 0x1f0a6, 0x1e144, 0x1e142, 0x1c2d0, 0x1e16c, - 0x1c2c8, 0x1e166, 0x1c2c4, 0x1c2c2, 0x185d0, 0x1c2ec, 0x185c8, 0x1c2e6, - 0x185c4, 0x185c2, 0x10bd0, 0x185ec, 0x10bc8, 0x185e6, 0x10bc4, 0x10bc2, - 0x10bec, 0x10be6, 0x1f1a8, 0x1f8d6, 0x11afc, 0x1f1a4, 0x11a7e, 0x1f1a2, - 0x1e128, 0x1f096, 0x1e368, 0x1e124, 0x1e364, 0x1e122, 0x1e362, 0x1c268, - 0x1e136, 0x1c6e8, 0x1c264, 0x1c6e4, 0x1c262, 0x1c6e2, 0x184e8, 0x1c276, - 0x18de8, 0x184e4, 0x18de4, 0x184e2, 0x18de2, 0x109e8, 0x184f6, 0x11be8, - 0x109e4, 0x11be4, 0x109e2, 0x11be2, 0x109f6, 0x11bf6, 0x1f9d4, 0x13af8, - 0x19d7e, 0x1f9d2, 0x13a7c, 0x13a3e, 0x1f194, 0x1197e, 0x1f3b4, 0x1f192, - 0x13b7e, 0x1f3b2, 0x1e114, 0x1e334, 0x1e112, 0x1e774, 0x1e332, 0x1e772, - 0x1c234, 0x1c674, 0x1c232, 0x1cef4, 0x1c672, 0x1cef2, 0x18474, 0x18cf4, - 0x18472, 0x19df4, 0x18cf2, 0x19df2, 0x108f4, 0x119f4, 0x108f2, 0x13bf4, - 0x119f2, 0x13bf2, 0x17af0, 0x1bd7c, 0x17a78, 0x1bd3e, 0x17a3c, 0x17a1e, - 0x1f9ca, 0x1397c, 0x1fbda, 0x17b7c, 0x1393e, 0x17b3e, 0x1f18a, 0x1f39a, - 0x1f7ba, 0x1e10a, 0x1e31a, 0x1e73a, 0x1ef7a, 0x1c21a, 0x1c63a, 0x1ce7a, - 0x1defa, 0x1843a, 0x18c7a, 0x19cfa, 0x1bdfa, 0x1087a, 0x118fa, 0x139fa, - 0x17978, 0x1bcbe, 0x1793c, 0x1791e, 0x138be, 0x179be, 0x178bc, 0x1789e, - 0x1785e, 0x1e0a8, 0x1e0a4, 0x1e0a2, 0x1c168, 0x1e0b6, 0x1c164, 0x1c162, - 0x182e8, 0x1c176, 0x182e4, 0x182e2, 0x105e8, 0x182f6, 0x105e4, 0x105e2, - 0x105f6, 0x1f0d4, 0x10d7e, 0x1f0d2, 0x1e094, 0x1e1b4, 0x1e092, 0x1e1b2, - 0x1c134, 0x1c374, 0x1c132, 0x1c372, 0x18274, 0x186f4, 0x18272, 0x186f2, - 0x104f4, 0x10df4, 0x104f2, 0x10df2, 0x1f8ea, 0x11d7c, 0x11d3e, 0x1f0ca, - 0x1f1da, 0x1e08a, 0x1e19a, 0x1e3ba, 0x1c11a, 0x1c33a, 0x1c77a, 0x1823a, - 0x1867a, 0x18efa, 0x1047a, 0x10cfa, 0x11dfa, 0x13d78, 0x19ebe, 0x13d3c, - 0x13d1e, 0x11cbe, 0x13dbe, 0x17d70, 0x1bebc, 0x17d38, 0x1be9e, 0x17d1c, - 0x17d0e, 0x13cbc, 0x17dbc, 0x13c9e, 0x17d9e, 0x17cb8, 0x1be5e, 0x17c9c, - 0x17c8e, 0x13c5e, 0x17cde, 0x17c5c, 0x17c4e, 0x17c2e, 0x1c0b4, 0x1c0b2, - 0x18174, 0x18172, 0x102f4, 0x102f2, 0x1e0da, 0x1c09a, 0x1c1ba, 0x1813a, - 0x1837a, 0x1027a, 0x106fa, 0x10ebe, 0x11ebc, 0x11e9e, 0x13eb8, 0x19f5e, - 0x13e9c, 0x13e8e, 0x11e5e, 0x13ede, 0x17eb0, 0x1bf5c, 0x17e98, 0x1bf4e, - 0x17e8c, 0x17e86, 0x13e5c, 0x17edc, 0x13e4e, 0x17ece, 0x17e58, 0x1bf2e, - 0x17e4c, 0x17e46, 0x13e2e, 0x17e6e, 0x17e2c, 0x17e26, 0x10f5e, 0x11f5c, - 0x11f4e, 0x13f58, 0x19fae, 0x13f4c, 0x13f46, 0x11f2e, 0x13f6e, 0x13f2c, - 0x13f26}, - {0x1abe0, 0x1d5f8, 0x153c0, 0x1a9f0, 0x1d4fc, 0x151e0, 0x1a8f8, 0x1d47e, - 0x150f0, 0x1a87c, 0x15078, 0x1fad0, 0x15be0, 0x1adf8, 0x1fac8, 0x159f0, - 0x1acfc, 0x1fac4, 0x158f8, 0x1ac7e, 0x1fac2, 0x1587c, 0x1f5d0, 0x1faec, - 0x15df8, 0x1f5c8, 0x1fae6, 0x15cfc, 0x1f5c4, 0x15c7e, 0x1f5c2, 0x1ebd0, - 0x1f5ec, 0x1ebc8, 0x1f5e6, 0x1ebc4, 0x1ebc2, 0x1d7d0, 0x1ebec, 0x1d7c8, - 0x1ebe6, 0x1d7c4, 0x1d7c2, 0x1afd0, 0x1d7ec, 0x1afc8, 0x1d7e6, 0x1afc4, - 0x14bc0, 0x1a5f0, 0x1d2fc, 0x149e0, 0x1a4f8, 0x1d27e, 0x148f0, 0x1a47c, - 0x14878, 0x1a43e, 0x1483c, 0x1fa68, 0x14df0, 0x1a6fc, 0x1fa64, 0x14cf8, - 0x1a67e, 0x1fa62, 0x14c7c, 0x14c3e, 0x1f4e8, 0x1fa76, 0x14efc, 0x1f4e4, - 0x14e7e, 0x1f4e2, 0x1e9e8, 0x1f4f6, 0x1e9e4, 0x1e9e2, 0x1d3e8, 0x1e9f6, - 0x1d3e4, 0x1d3e2, 0x1a7e8, 0x1d3f6, 0x1a7e4, 0x1a7e2, 0x145e0, 0x1a2f8, - 0x1d17e, 0x144f0, 0x1a27c, 0x14478, 0x1a23e, 0x1443c, 0x1441e, 0x1fa34, - 0x146f8, 0x1a37e, 0x1fa32, 0x1467c, 0x1463e, 0x1f474, 0x1477e, 0x1f472, - 0x1e8f4, 0x1e8f2, 0x1d1f4, 0x1d1f2, 0x1a3f4, 0x1a3f2, 0x142f0, 0x1a17c, - 0x14278, 0x1a13e, 0x1423c, 0x1421e, 0x1fa1a, 0x1437c, 0x1433e, 0x1f43a, - 0x1e87a, 0x1d0fa, 0x14178, 0x1a0be, 0x1413c, 0x1411e, 0x141be, 0x140bc, - 0x1409e, 0x12bc0, 0x195f0, 0x1cafc, 0x129e0, 0x194f8, 0x1ca7e, 0x128f0, - 0x1947c, 0x12878, 0x1943e, 0x1283c, 0x1f968, 0x12df0, 0x196fc, 0x1f964, - 0x12cf8, 0x1967e, 0x1f962, 0x12c7c, 0x12c3e, 0x1f2e8, 0x1f976, 0x12efc, - 0x1f2e4, 0x12e7e, 0x1f2e2, 0x1e5e8, 0x1f2f6, 0x1e5e4, 0x1e5e2, 0x1cbe8, - 0x1e5f6, 0x1cbe4, 0x1cbe2, 0x197e8, 0x1cbf6, 0x197e4, 0x197e2, 0x1b5e0, - 0x1daf8, 0x1ed7e, 0x169c0, 0x1b4f0, 0x1da7c, 0x168e0, 0x1b478, 0x1da3e, - 0x16870, 0x1b43c, 0x16838, 0x1b41e, 0x1681c, 0x125e0, 0x192f8, 0x1c97e, - 0x16de0, 0x124f0, 0x1927c, 0x16cf0, 0x1b67c, 0x1923e, 0x16c78, 0x1243c, - 0x16c3c, 0x1241e, 0x16c1e, 0x1f934, 0x126f8, 0x1937e, 0x1fb74, 0x1f932, - 0x16ef8, 0x1267c, 0x1fb72, 0x16e7c, 0x1263e, 0x16e3e, 0x1f274, 0x1277e, - 0x1f6f4, 0x1f272, 0x16f7e, 0x1f6f2, 0x1e4f4, 0x1edf4, 0x1e4f2, 0x1edf2, - 0x1c9f4, 0x1dbf4, 0x1c9f2, 0x1dbf2, 0x193f4, 0x193f2, 0x165c0, 0x1b2f0, - 0x1d97c, 0x164e0, 0x1b278, 0x1d93e, 0x16470, 0x1b23c, 0x16438, 0x1b21e, - 0x1641c, 0x1640e, 0x122f0, 0x1917c, 0x166f0, 0x12278, 0x1913e, 0x16678, - 0x1b33e, 0x1663c, 0x1221e, 0x1661e, 0x1f91a, 0x1237c, 0x1fb3a, 0x1677c, - 0x1233e, 0x1673e, 0x1f23a, 0x1f67a, 0x1e47a, 0x1ecfa, 0x1c8fa, 0x1d9fa, - 0x191fa, 0x162e0, 0x1b178, 0x1d8be, 0x16270, 0x1b13c, 0x16238, 0x1b11e, - 0x1621c, 0x1620e, 0x12178, 0x190be, 0x16378, 0x1213c, 0x1633c, 0x1211e, - 0x1631e, 0x121be, 0x163be, 0x16170, 0x1b0bc, 0x16138, 0x1b09e, 0x1611c, - 0x1610e, 0x120bc, 0x161bc, 0x1209e, 0x1619e, 0x160b8, 0x1b05e, 0x1609c, - 0x1608e, 0x1205e, 0x160de, 0x1605c, 0x1604e, 0x115e0, 0x18af8, 0x1c57e, - 0x114f0, 0x18a7c, 0x11478, 0x18a3e, 0x1143c, 0x1141e, 0x1f8b4, 0x116f8, - 0x18b7e, 0x1f8b2, 0x1167c, 0x1163e, 0x1f174, 0x1177e, 0x1f172, 0x1e2f4, - 0x1e2f2, 0x1c5f4, 0x1c5f2, 0x18bf4, 0x18bf2, 0x135c0, 0x19af0, 0x1cd7c, - 0x134e0, 0x19a78, 0x1cd3e, 0x13470, 0x19a3c, 0x13438, 0x19a1e, 0x1341c, - 0x1340e, 0x112f0, 0x1897c, 0x136f0, 0x11278, 0x1893e, 0x13678, 0x19b3e, - 0x1363c, 0x1121e, 0x1361e, 0x1f89a, 0x1137c, 0x1f9ba, 0x1377c, 0x1133e, - 0x1373e, 0x1f13a, 0x1f37a, 0x1e27a, 0x1e6fa, 0x1c4fa, 0x1cdfa, 0x189fa, - 0x1bae0, 0x1dd78, 0x1eebe, 0x174c0, 0x1ba70, 0x1dd3c, 0x17460, 0x1ba38, - 0x1dd1e, 0x17430, 0x1ba1c, 0x17418, 0x1ba0e, 0x1740c, 0x132e0, 0x19978, - 0x1ccbe, 0x176e0, 0x13270, 0x1993c, 0x17670, 0x1bb3c, 0x1991e, 0x17638, - 0x1321c, 0x1761c, 0x1320e, 0x1760e, 0x11178, 0x188be, 0x13378, 0x1113c, - 0x17778, 0x1333c, 0x1111e, 0x1773c, 0x1331e, 0x1771e, 0x111be, 0x133be, - 0x177be, 0x172c0, 0x1b970, 0x1dcbc, 0x17260, 0x1b938, 0x1dc9e, 0x17230, - 0x1b91c, 0x17218, 0x1b90e, 0x1720c, 0x17206, 0x13170, 0x198bc, 0x17370, - 0x13138, 0x1989e, 0x17338, 0x1b99e, 0x1731c, 0x1310e, 0x1730e, 0x110bc, - 0x131bc, 0x1109e, 0x173bc, 0x1319e, 0x1739e, 0x17160, 0x1b8b8, 0x1dc5e, - 0x17130, 0x1b89c, 0x17118, 0x1b88e, 0x1710c, 0x17106, 0x130b8, 0x1985e, - 0x171b8, 0x1309c, 0x1719c, 0x1308e, 0x1718e, 0x1105e, 0x130de, 0x171de, - 0x170b0, 0x1b85c, 0x17098, 0x1b84e, 0x1708c, 0x17086, 0x1305c, 0x170dc, - 0x1304e, 0x170ce, 0x17058, 0x1b82e, 0x1704c, 0x17046, 0x1302e, 0x1706e, - 0x1702c, 0x17026, 0x10af0, 0x1857c, 0x10a78, 0x1853e, 0x10a3c, 0x10a1e, - 0x10b7c, 0x10b3e, 0x1f0ba, 0x1e17a, 0x1c2fa, 0x185fa, 0x11ae0, 0x18d78, - 0x1c6be, 0x11a70, 0x18d3c, 0x11a38, 0x18d1e, 0x11a1c, 0x11a0e, 0x10978, - 0x184be, 0x11b78, 0x1093c, 0x11b3c, 0x1091e, 0x11b1e, 0x109be, 0x11bbe, - 0x13ac0, 0x19d70, 0x1cebc, 0x13a60, 0x19d38, 0x1ce9e, 0x13a30, 0x19d1c, - 0x13a18, 0x19d0e, 0x13a0c, 0x13a06, 0x11970, 0x18cbc, 0x13b70, 0x11938, - 0x18c9e, 0x13b38, 0x1191c, 0x13b1c, 0x1190e, 0x13b0e, 0x108bc, 0x119bc, - 0x1089e, 0x13bbc, 0x1199e, 0x13b9e, 0x1bd60, 0x1deb8, 0x1ef5e, 0x17a40, - 0x1bd30, 0x1de9c, 0x17a20, 0x1bd18, 0x1de8e, 0x17a10, 0x1bd0c, 0x17a08, - 0x1bd06, 0x17a04, 0x13960, 0x19cb8, 0x1ce5e, 0x17b60, 0x13930, 0x19c9c, - 0x17b30, 0x1bd9c, 0x19c8e, 0x17b18, 0x1390c, 0x17b0c, 0x13906, 0x17b06, - 0x118b8, 0x18c5e, 0x139b8, 0x1189c, 0x17bb8, 0x1399c, 0x1188e, 0x17b9c, - 0x1398e, 0x17b8e, 0x1085e, 0x118de, 0x139de, 0x17bde, 0x17940, 0x1bcb0, - 0x1de5c, 0x17920, 0x1bc98, 0x1de4e, 0x17910, 0x1bc8c, 0x17908, 0x1bc86, - 0x17904, 0x17902, 0x138b0, 0x19c5c, 0x179b0, 0x13898, 0x19c4e, 0x17998, - 0x1bcce, 0x1798c, 0x13886, 0x17986, 0x1185c, 0x138dc, 0x1184e, 0x179dc, - 0x138ce, 0x179ce, 0x178a0, 0x1bc58, 0x1de2e, 0x17890, 0x1bc4c, 0x17888, - 0x1bc46, 0x17884, 0x17882, 0x13858, 0x19c2e, 0x178d8, 0x1384c, 0x178cc, - 0x13846, 0x178c6, 0x1182e, 0x1386e, 0x178ee, 0x17850, 0x1bc2c, 0x17848, - 0x1bc26, 0x17844, 0x17842, 0x1382c, 0x1786c, 0x13826, 0x17866, 0x17828, - 0x1bc16, 0x17824, 0x17822, 0x13816, 0x17836, 0x10578, 0x182be, 0x1053c, - 0x1051e, 0x105be, 0x10d70, 0x186bc, 0x10d38, 0x1869e, 0x10d1c, 0x10d0e, - 0x104bc, 0x10dbc, 0x1049e, 0x10d9e, 0x11d60, 0x18eb8, 0x1c75e, 0x11d30, - 0x18e9c, 0x11d18, 0x18e8e, 0x11d0c, 0x11d06, 0x10cb8, 0x1865e, 0x11db8, - 0x10c9c, 0x11d9c, 0x10c8e, 0x11d8e, 0x1045e, 0x10cde, 0x11dde, 0x13d40, - 0x19eb0, 0x1cf5c, 0x13d20, 0x19e98, 0x1cf4e, 0x13d10, 0x19e8c, 0x13d08, - 0x19e86, 0x13d04, 0x13d02, 0x11cb0, 0x18e5c, 0x13db0, 0x11c98, 0x18e4e, - 0x13d98, 0x19ece, 0x13d8c, 0x11c86, 0x13d86, 0x10c5c, 0x11cdc, 0x10c4e, - 0x13ddc, 0x11cce, 0x13dce, 0x1bea0, 0x1df58, 0x1efae, 0x1be90, 0x1df4c, - 0x1be88, 0x1df46, 0x1be84, 0x1be82, 0x13ca0, 0x19e58, 0x1cf2e, 0x17da0, - 0x13c90, 0x19e4c, 0x17d90, 0x1becc, 0x19e46, 0x17d88, 0x13c84, 0x17d84, - 0x13c82, 0x17d82, 0x11c58, 0x18e2e, 0x13cd8, 0x11c4c, 0x17dd8, 0x13ccc, - 0x11c46, 0x17dcc, 0x13cc6, 0x17dc6, 0x10c2e, 0x11c6e, 0x13cee, 0x17dee, - 0x1be50, 0x1df2c, 0x1be48, 0x1df26, 0x1be44, 0x1be42, 0x13c50, 0x19e2c, - 0x17cd0, 0x13c48, 0x19e26, 0x17cc8, 0x1be66, 0x17cc4, 0x13c42, 0x17cc2, - 0x11c2c, 0x13c6c, 0x11c26, 0x17cec, 0x13c66, 0x17ce6, 0x1be28, 0x1df16, - 0x1be24, 0x1be22, 0x13c28, 0x19e16, 0x17c68, 0x13c24, 0x17c64, 0x13c22, - 0x17c62, 0x11c16, 0x13c36, 0x17c76, 0x1be14, 0x1be12, 0x13c14, 0x17c34, - 0x13c12, 0x17c32, 0x102bc, 0x1029e, 0x106b8, 0x1835e, 0x1069c, 0x1068e, - 0x1025e, 0x106de, 0x10eb0, 0x1875c, 0x10e98, 0x1874e, 0x10e8c, 0x10e86, - 0x1065c, 0x10edc, 0x1064e, 0x10ece, 0x11ea0, 0x18f58, 0x1c7ae, 0x11e90, - 0x18f4c, 0x11e88, 0x18f46, 0x11e84, 0x11e82, 0x10e58, 0x1872e, 0x11ed8, - 0x18f6e, 0x11ecc, 0x10e46, 0x11ec6, 0x1062e, 0x10e6e, 0x11eee, 0x19f50, - 0x1cfac, 0x19f48, 0x1cfa6, 0x19f44, 0x19f42, 0x11e50, 0x18f2c, 0x13ed0, - 0x19f6c, 0x18f26, 0x13ec8, 0x11e44, 0x13ec4, 0x11e42, 0x13ec2, 0x10e2c, - 0x11e6c, 0x10e26, 0x13eec, 0x11e66, 0x13ee6, 0x1dfa8, 0x1efd6, 0x1dfa4, - 0x1dfa2, 0x19f28, 0x1cf96, 0x1bf68, 0x19f24, 0x1bf64, 0x19f22, 0x1bf62, - 0x11e28, 0x18f16, 0x13e68, 0x11e24, 0x17ee8, 0x13e64, 0x11e22, 0x17ee4, - 0x13e62, 0x17ee2, 0x10e16, 0x11e36, 0x13e76, 0x17ef6, 0x1df94, 0x1df92, - 0x19f14, 0x1bf34, 0x19f12, 0x1bf32, 0x11e14, 0x13e34, 0x11e12, 0x17e74, - 0x13e32, 0x17e72, 0x1df8a, 0x19f0a, 0x1bf1a, 0x11e0a, 0x13e1a, 0x17e3a, - 0x1035c, 0x1034e, 0x10758, 0x183ae, 0x1074c, 0x10746, 0x1032e, 0x1076e, - 0x10f50, 0x187ac, 0x10f48, 0x187a6, 0x10f44, 0x10f42, 0x1072c, 0x10f6c, - 0x10726, 0x10f66, 0x18fa8, 0x1c7d6, 0x18fa4, 0x18fa2, 0x10f28, 0x18796, - 0x11f68, 0x18fb6, 0x11f64, 0x10f22, 0x11f62, 0x10716, 0x10f36, 0x11f76, - 0x1cfd4, 0x1cfd2, 0x18f94, 0x19fb4, 0x18f92, 0x19fb2, 0x10f14, 0x11f34, - 0x10f12, 0x13f74, 0x11f32, 0x13f72, 0x1cfca, 0x18f8a, 0x19f9a, 0x10f0a, - 0x11f1a, 0x13f3a, 0x103ac, 0x103a6, 0x107a8, 0x183d6, 0x107a4, 0x107a2, - 0x10396, 0x107b6, 0x187d4, 0x187d2, 0x10794, 0x10fb4, 0x10792, 0x10fb2, - 0x1c7ea}}; -FX_FLOAT CBC_PDF417::PREFERRED_RATIO = 3.0f; -FX_FLOAT CBC_PDF417::DEFAULT_MODULE_WIDTH = 0.357f; -FX_FLOAT CBC_PDF417::HEIGHT = 2.0f; -CBC_PDF417::CBC_PDF417() { - m_compact = FALSE; - m_compaction = AUTO; - m_minCols = 1; - m_maxCols = 30; - m_maxRows = 90; - m_minRows = 3; - m_barcodeMatrix = NULL; -} -CBC_PDF417::CBC_PDF417(FX_BOOL compact) { - m_compact = compact; - m_compaction = AUTO; - m_minCols = 1; - m_maxCols = 30; - m_maxRows = 90; - m_minRows = 3; - m_barcodeMatrix = NULL; -} -CBC_PDF417::~CBC_PDF417() { - if (m_barcodeMatrix) { - delete m_barcodeMatrix; - } -} -CBC_BarcodeMatrix* CBC_PDF417::getBarcodeMatrix() { - return m_barcodeMatrix; -} -void CBC_PDF417::generateBarcodeLogic(CFX_WideString msg, - int32_t errorCorrectionLevel, - int32_t& e) { - int32_t errorCorrectionCodeWords = - CBC_PDF417ErrorCorrection::getErrorCorrectionCodewordCount( - errorCorrectionLevel, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - CFX_WideString highLevel = - CBC_PDF417HighLevelEncoder::encodeHighLevel(msg, m_compaction, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - int32_t sourceCodeWords = highLevel.GetLength(); - CFX_Int32Array* dimension = - determineDimensions(sourceCodeWords, errorCorrectionCodeWords, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - int32_t cols = dimension->GetAt(0); - int32_t rows = dimension->GetAt(1); - delete dimension; - int32_t pad = getNumberOfPadCodewords(sourceCodeWords, - errorCorrectionCodeWords, cols, rows); - if (sourceCodeWords + errorCorrectionCodeWords + 1 > 929) { - e = BCExceptionEncodedMessageContainsTooManyCodeWords; - return; - } - int32_t n = sourceCodeWords + pad + 1; - CFX_WideString sb; - sb += (FX_WCHAR)n; - sb += highLevel; - for (int32_t i = 0; i < pad; i++) { - sb += (FX_WCHAR)900; - } - CFX_WideString dataCodewords(sb); - CFX_WideString ec = CBC_PDF417ErrorCorrection::generateErrorCorrection( - dataCodewords, errorCorrectionLevel, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - CFX_WideString fullCodewords = dataCodewords + ec; - m_barcodeMatrix = new CBC_BarcodeMatrix(rows, cols); - encodeLowLevel(fullCodewords, cols, rows, errorCorrectionLevel, - m_barcodeMatrix); -} -void CBC_PDF417::setDimensions(int32_t maxCols, - int32_t minCols, - int32_t maxRows, - int32_t minRows) { - m_maxCols = maxCols; - m_minCols = minCols; - m_maxRows = maxRows; - m_minRows = minRows; -} -void CBC_PDF417::setCompaction(Compaction compaction) { - m_compaction = compaction; -} -void CBC_PDF417::setCompact(FX_BOOL compact) { - m_compact = compact; -} -int32_t CBC_PDF417::calculateNumberOfRows(int32_t m, int32_t k, int32_t c) { - int32_t r = ((m + 1 + k) / c) + 1; - if (c * r >= (m + 1 + k + c)) { - r--; - } - return r; -} -int32_t CBC_PDF417::getNumberOfPadCodewords(int32_t m, - int32_t k, - int32_t c, - int32_t r) { - int32_t n = c * r - k; - return n > m + 1 ? n - m - 1 : 0; -} -void CBC_PDF417::encodeChar(int32_t pattern, - int32_t len, - CBC_BarcodeRow* logic) { - int32_t map = 1 << (len - 1); - FX_BOOL last = ((pattern & map) != 0); - int32_t width = 0; - for (int32_t i = 0; i < len; i++) { - FX_BOOL black = ((pattern & map) != 0); - if (last == black) { - width++; - } else { - logic->addBar(last, width); - last = black; - width = 1; - } - map >>= 1; - } - logic->addBar(last, width); -} -void CBC_PDF417::encodeLowLevel(CFX_WideString fullCodewords, - int32_t c, - int32_t r, - int32_t errorCorrectionLevel, - CBC_BarcodeMatrix* logic) { - int32_t idx = 0; - for (int32_t y = 0; y < r; y++) { - int32_t cluster = y % 3; - logic->startRow(); - encodeChar(START_PATTERN, 17, logic->getCurrentRow()); - int32_t left; - int32_t right; - if (cluster == 0) { - left = (30 * (y / 3)) + ((r - 1) / 3); - right = (30 * (y / 3)) + (c - 1); - } else if (cluster == 1) { - left = (30 * (y / 3)) + (errorCorrectionLevel * 3) + ((r - 1) % 3); - right = (30 * (y / 3)) + ((r - 1) / 3); - } else { - left = (30 * (y / 3)) + (c - 1); - right = (30 * (y / 3)) + (errorCorrectionLevel * 3) + ((r - 1) % 3); - } - int32_t pattern = CODEWORD_TABLE[cluster][left]; - encodeChar(pattern, 17, logic->getCurrentRow()); - for (int32_t x = 0; x < c; x++) { - pattern = CODEWORD_TABLE[cluster][fullCodewords.GetAt(idx)]; - encodeChar(pattern, 17, logic->getCurrentRow()); - idx++; - } - if (m_compact) { - encodeChar(STOP_PATTERN, 1, logic->getCurrentRow()); - } else { - pattern = CODEWORD_TABLE[cluster][right]; - encodeChar(pattern, 17, logic->getCurrentRow()); - encodeChar(STOP_PATTERN, 18, logic->getCurrentRow()); - } - } -} -CFX_Int32Array* CBC_PDF417::determineDimensions( - int32_t sourceCodeWords, - int32_t errorCorrectionCodeWords, - int32_t& e) { - FX_FLOAT ratio = 0.0f; - CFX_Int32Array* dimension = NULL; - for (int32_t cols = m_minCols; cols <= m_maxCols; cols++) { - int32_t rows = - calculateNumberOfRows(sourceCodeWords, errorCorrectionCodeWords, cols); - if (rows < m_minRows) { - break; - } - if (rows > m_maxRows) { - continue; - } - FX_FLOAT newRatio = - ((17 * cols + 69) * DEFAULT_MODULE_WIDTH) / (rows * HEIGHT); - if (dimension && - fabsf(newRatio - PREFERRED_RATIO) > fabsf(ratio - PREFERRED_RATIO)) { - continue; - } - ratio = newRatio; - if (dimension) { - delete dimension; - } - dimension = new CFX_Int32Array; - dimension->Add(cols); - dimension->Add(rows); - } - if (dimension == NULL) { - int32_t rows = calculateNumberOfRows(sourceCodeWords, - errorCorrectionCodeWords, m_minCols); - if (rows < m_minRows) { - dimension = new CFX_Int32Array; - dimension->Add(m_minCols); - dimension->Add(m_minRows); - } else if (rows >= 3 && rows <= 90) { - dimension = new CFX_Int32Array; - dimension->Add(m_minCols); - dimension->Add(rows); - } - } - if (dimension == NULL) { - e = BCExceptionUnableToFitMessageInColumns; - return NULL; - } - return dimension; -} diff --git a/xfa/src/fxbarcode/pdf417/BC_PDF417.h b/xfa/src/fxbarcode/pdf417/BC_PDF417.h deleted file mode 100644 index a7a4649461..0000000000 --- a/xfa/src/fxbarcode/pdf417/BC_PDF417.h +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_PDF417_BC_PDF417_H_ -#define XFA_SRC_FXBARCODE_PDF417_BC_PDF417_H_ - -#include "core/include/fxcrt/fx_basic.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417Compaction.h" - -class CBC_BarcodeRow; -class CBC_BarcodeMatrix; - -class CBC_PDF417 { - public: - CBC_PDF417(); - CBC_PDF417(FX_BOOL compact); - virtual ~CBC_PDF417(); - CBC_BarcodeMatrix* getBarcodeMatrix(); - void generateBarcodeLogic(CFX_WideString msg, - int32_t errorCorrectionLevel, - int32_t& e); - void setDimensions(int32_t maxCols, - int32_t minCols, - int32_t maxRows, - int32_t minRows); - void setCompaction(Compaction compaction); - void setCompact(FX_BOOL compact); - - private: - static int32_t START_PATTERN; - static int32_t STOP_PATTERN; - static int32_t CODEWORD_TABLE[][1000]; - static FX_FLOAT PREFERRED_RATIO; - static FX_FLOAT DEFAULT_MODULE_WIDTH; - static FX_FLOAT HEIGHT; - CBC_BarcodeMatrix* m_barcodeMatrix; - FX_BOOL m_compact; - Compaction m_compaction; - int32_t m_minCols; - int32_t m_maxCols; - int32_t m_maxRows; - int32_t m_minRows; - - private: - static int32_t calculateNumberOfRows(int32_t m, int32_t k, int32_t c); - static int32_t getNumberOfPadCodewords(int32_t m, - int32_t k, - int32_t c, - int32_t r); - static void encodeChar(int32_t pattern, int32_t len, CBC_BarcodeRow* logic); - void encodeLowLevel(CFX_WideString fullCodewords, - int32_t c, - int32_t r, - int32_t errorCorrectionLevel, - CBC_BarcodeMatrix* logic); - CFX_Int32Array* determineDimensions(int32_t sourceCodeWords, - int32_t errorCorrectionCodeWords, - int32_t& e); -}; - -#endif // XFA_SRC_FXBARCODE_PDF417_BC_PDF417_H_ diff --git a/xfa/src/fxbarcode/pdf417/BC_PDF417BarcodeMatrix.cpp b/xfa/src/fxbarcode/pdf417/BC_PDF417BarcodeMatrix.cpp deleted file mode 100644 index fbc252e202..0000000000 --- a/xfa/src/fxbarcode/pdf417/BC_PDF417BarcodeMatrix.cpp +++ /dev/null @@ -1,90 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2011 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/pdf417/BC_PDF417BarcodeMatrix.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417BarcodeRow.h" - -CBC_BarcodeMatrix::CBC_BarcodeMatrix(int32_t height, int32_t width) { - m_matrix.SetSize(height + 2); - for (int32_t i = 0, matrixLength = m_matrix.GetSize(); i < matrixLength; - i++) { - m_matrix[i] = new CBC_BarcodeRow((width + 4) * 17 + 1); - } - m_width = width * 17; - m_height = height + 2; - m_currentRow = 0; - m_outHeight = 0; - m_outWidth = 0; -} -CBC_BarcodeMatrix::~CBC_BarcodeMatrix() { - for (int32_t i = 0; i < m_matrix.GetSize(); i++) { - delete (CBC_BarcodeRow*)m_matrix.GetAt(i); - } - m_matrix.RemoveAll(); - m_matrixOut.RemoveAll(); -} -void CBC_BarcodeMatrix::set(int32_t x, int32_t y, uint8_t value) { - ((CBC_BarcodeRow*)m_matrix[y])->set(x, value); -} -void CBC_BarcodeMatrix::setMatrix(int32_t x, int32_t y, FX_BOOL black) { - set(x, y, (uint8_t)(black ? 1 : 0)); -} -void CBC_BarcodeMatrix::startRow() { - ++m_currentRow; -} -CBC_BarcodeRow* CBC_BarcodeMatrix::getCurrentRow() { - return (CBC_BarcodeRow*)m_matrix[m_currentRow]; -} -int32_t CBC_BarcodeMatrix::getWidth() { - return m_outWidth; -} -int32_t CBC_BarcodeMatrix::getHeight() { - return m_outHeight; -} -CFX_ByteArray& CBC_BarcodeMatrix::getMatrix() { - return getScaledMatrix(1, 1); -} -CFX_ByteArray& CBC_BarcodeMatrix::getScaledMatrix(int32_t scale) { - return getScaledMatrix(scale, scale); -} -CFX_ByteArray& CBC_BarcodeMatrix::getScaledMatrix(int32_t xScale, - int32_t yScale) { - int32_t yMax = m_height * yScale; - CFX_ByteArray bytearray; - bytearray.Copy(((CBC_BarcodeRow*)m_matrix[0])->getScaledRow(xScale)); - int32_t xMax = bytearray.GetSize(); - m_matrixOut.SetSize(xMax * yMax); - m_outWidth = xMax; - m_outHeight = yMax; - int32_t k = 0; - for (int32_t i = 0; i < yMax; i++) { - if (i != 0) { - bytearray.Copy( - ((CBC_BarcodeRow*)m_matrix[i / yScale])->getScaledRow(xScale)); - } - k = i * xMax; - for (int32_t l = 0; l < xMax; l++) { - m_matrixOut[k + l] = bytearray.GetAt(l); - } - } - return m_matrixOut; -} diff --git a/xfa/src/fxbarcode/pdf417/BC_PDF417BarcodeMatrix.h b/xfa/src/fxbarcode/pdf417/BC_PDF417BarcodeMatrix.h deleted file mode 100644 index 15e1c3f2bb..0000000000 --- a/xfa/src/fxbarcode/pdf417/BC_PDF417BarcodeMatrix.h +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_PDF417_BC_PDF417BARCODEMATRIX_H_ -#define XFA_SRC_FXBARCODE_PDF417_BC_PDF417BARCODEMATRIX_H_ - -#include "core/include/fxcrt/fx_basic.h" - -class CBC_BarcodeRow; -class CBC_BarcodeMatrix { - public: - CBC_BarcodeMatrix(); - CBC_BarcodeMatrix(int32_t height, int32_t width); - virtual ~CBC_BarcodeMatrix(); - void set(int32_t x, int32_t y, uint8_t value); - void setMatrix(int32_t x, int32_t y, FX_BOOL black); - void startRow(); - CBC_BarcodeRow* getCurrentRow(); - CFX_ByteArray& getMatrix(); - CFX_ByteArray& getScaledMatrix(int32_t scale); - CFX_ByteArray& getScaledMatrix(int32_t xScale, int32_t yScale); - int32_t getWidth(); - int32_t getHeight(); - - private: - CFX_PtrArray m_matrix; - CFX_ByteArray m_matrixOut; - int32_t m_currentRow; - int32_t m_height; - int32_t m_width; - int32_t m_outWidth; - int32_t m_outHeight; -}; - -#endif // XFA_SRC_FXBARCODE_PDF417_BC_PDF417BARCODEMATRIX_H_ diff --git a/xfa/src/fxbarcode/pdf417/BC_PDF417BarcodeMetadata.cpp b/xfa/src/fxbarcode/pdf417/BC_PDF417BarcodeMetadata.cpp deleted file mode 100644 index 87aacb1ff9..0000000000 --- a/xfa/src/fxbarcode/pdf417/BC_PDF417BarcodeMetadata.cpp +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2013 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/pdf417/BC_PDF417BarcodeMetadata.h" - -CBC_BarcodeMetadata::CBC_BarcodeMetadata(int32_t columnCount, - int32_t rowCountUpperPart, - int32_t rowCountLowerPart, - int32_t errorCorrectionLevel) { - m_columnCount = columnCount; - m_rowCountUpperPart = rowCountUpperPart; - m_rowCountLowerPart = rowCountLowerPart; - m_errorCorrectionLevel = errorCorrectionLevel; - m_rowCount = m_rowCountUpperPart + m_rowCountLowerPart; -} -CBC_BarcodeMetadata::~CBC_BarcodeMetadata() {} -int32_t CBC_BarcodeMetadata::getColumnCount() { - return m_columnCount; -} -int32_t CBC_BarcodeMetadata::getErrorCorrectionLevel() { - return m_errorCorrectionLevel; -} -int32_t CBC_BarcodeMetadata::getRowCount() { - return m_rowCount; -} -int32_t CBC_BarcodeMetadata::getRowCountUpperPart() { - return m_rowCountUpperPart; -} -int32_t CBC_BarcodeMetadata::getRowCountLowerPart() { - return m_rowCountLowerPart; -} diff --git a/xfa/src/fxbarcode/pdf417/BC_PDF417BarcodeMetadata.h b/xfa/src/fxbarcode/pdf417/BC_PDF417BarcodeMetadata.h deleted file mode 100644 index 6d4b95e8f9..0000000000 --- a/xfa/src/fxbarcode/pdf417/BC_PDF417BarcodeMetadata.h +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_PDF417_BC_PDF417BARCODEMETADATA_H_ -#define XFA_SRC_FXBARCODE_PDF417_BC_PDF417BARCODEMETADATA_H_ - -#include - -class CBC_BarcodeMetadata { - public: - CBC_BarcodeMetadata(int32_t columnCount, - int32_t rowCountUpperPart, - int32_t rowCountLowerPart, - int32_t errorCorrectionLevel); - virtual ~CBC_BarcodeMetadata(); - int32_t getColumnCount(); - int32_t getErrorCorrectionLevel(); - int32_t getRowCount(); - int32_t getRowCountUpperPart(); - int32_t getRowCountLowerPart(); - - private: - int32_t m_columnCount; - int32_t m_errorCorrectionLevel; - int32_t m_rowCountUpperPart; - int32_t m_rowCountLowerPart; - int32_t m_rowCount; -}; - -#endif // XFA_SRC_FXBARCODE_PDF417_BC_PDF417BARCODEMETADATA_H_ diff --git a/xfa/src/fxbarcode/pdf417/BC_PDF417BarcodeRow.cpp b/xfa/src/fxbarcode/pdf417/BC_PDF417BarcodeRow.cpp deleted file mode 100644 index 41e1955c48..0000000000 --- a/xfa/src/fxbarcode/pdf417/BC_PDF417BarcodeRow.cpp +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2011 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/pdf417/BC_PDF417BarcodeRow.h" - -CBC_BarcodeRow::CBC_BarcodeRow(int32_t width) { - m_row.SetSize(width); - m_currentLocation = 0; -} -CBC_BarcodeRow::~CBC_BarcodeRow() { - m_output.RemoveAll(); - m_row.RemoveAll(); -} -void CBC_BarcodeRow::set(int32_t x, uint8_t value) { - m_row.SetAt(x, value); -} -void CBC_BarcodeRow::set(int32_t x, FX_BOOL black) { - m_row.SetAt(x, (uint8_t)(black ? 1 : 0)); -} -void CBC_BarcodeRow::addBar(FX_BOOL black, int32_t width) { - for (int32_t ii = 0; ii < width; ii++) { - set(m_currentLocation++, black); - } -} -CFX_ByteArray& CBC_BarcodeRow::getRow() { - return m_row; -} -CFX_ByteArray& CBC_BarcodeRow::getScaledRow(int32_t scale) { - m_output.SetSize(m_row.GetSize() * scale); - for (int32_t i = 0; i < m_output.GetSize(); i++) { - m_output[i] = (m_row[i / scale]); - } - return m_output; -} diff --git a/xfa/src/fxbarcode/pdf417/BC_PDF417BarcodeRow.h b/xfa/src/fxbarcode/pdf417/BC_PDF417BarcodeRow.h deleted file mode 100644 index f387a62740..0000000000 --- a/xfa/src/fxbarcode/pdf417/BC_PDF417BarcodeRow.h +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_PDF417_BC_PDF417BARCODEROW_H_ -#define XFA_SRC_FXBARCODE_PDF417_BC_PDF417BARCODEROW_H_ - -#include "core/include/fxcrt/fx_basic.h" - -class CBC_BarcodeRow { - public: - CBC_BarcodeRow(int32_t width); - virtual ~CBC_BarcodeRow(); - void set(int32_t x, uint8_t value); - void set(int32_t x, FX_BOOL black); - void addBar(FX_BOOL black, int32_t width); - CFX_ByteArray& getRow(); - CFX_ByteArray& getScaledRow(int32_t scale); - - private: - CFX_ByteArray m_row; - CFX_ByteArray m_output; - int32_t m_currentLocation; -}; - -#endif // XFA_SRC_FXBARCODE_PDF417_BC_PDF417BARCODEROW_H_ diff --git a/xfa/src/fxbarcode/pdf417/BC_PDF417BarcodeValue.cpp b/xfa/src/fxbarcode/pdf417/BC_PDF417BarcodeValue.cpp deleted file mode 100644 index 7ecb1a7b30..0000000000 --- a/xfa/src/fxbarcode/pdf417/BC_PDF417BarcodeValue.cpp +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2013 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/pdf417/BC_PDF417BarcodeValue.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417Common.h" - -CBC_BarcodeValue::CBC_BarcodeValue() {} -CBC_BarcodeValue::~CBC_BarcodeValue() {} -void CBC_BarcodeValue::setValue(int32_t value) { - int32_t confidence = 0; - for (int32_t i = 0; i < m_keys.GetSize(); i++) { - if (m_keys.GetAt(i) == value) { - confidence = m_values.GetAt(i); - m_values.SetAt(i, confidence + 1); - return; - } - } - confidence = 1; - m_keys.Add(value); - m_values.Add(confidence); -} -CFX_Int32Array* CBC_BarcodeValue::getValue() { - int32_t maxConfidence = -1; - CFX_Int32Array* result = new CFX_Int32Array; - for (int32_t i = 0; i < m_keys.GetSize(); i++) { - if (m_values.GetAt(i) > maxConfidence) { - maxConfidence = m_values.GetAt(i); - result->RemoveAll(); - result->Add(m_keys.GetAt(i)); - } else if (m_values.GetAt(i) == maxConfidence) { - result->Add(m_keys.GetAt(i)); - } - } - return result; -} -int32_t CBC_BarcodeValue::getConfidence(int32_t value) { - for (int32_t i = 0; i < m_keys.GetSize(); i++) - if (m_keys.GetAt(i) == value) { - return m_values.GetAt(i); - } - return -1; -} diff --git a/xfa/src/fxbarcode/pdf417/BC_PDF417BarcodeValue.h b/xfa/src/fxbarcode/pdf417/BC_PDF417BarcodeValue.h deleted file mode 100644 index 8e567d7ec8..0000000000 --- a/xfa/src/fxbarcode/pdf417/BC_PDF417BarcodeValue.h +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_PDF417_BC_PDF417BARCODEVALUE_H_ -#define XFA_SRC_FXBARCODE_PDF417_BC_PDF417BARCODEVALUE_H_ - -#include "core/include/fxcrt/fx_basic.h" - -class CBC_BarcodeValue { - public: - CBC_BarcodeValue(); - virtual ~CBC_BarcodeValue(); - void setValue(int32_t value); - CFX_Int32Array* getValue(); - int32_t getConfidence(int32_t value); - - private: - CFX_Int32Array m_keys; - CFX_Int32Array m_values; -}; - -#endif // XFA_SRC_FXBARCODE_PDF417_BC_PDF417BARCODEVALUE_H_ diff --git a/xfa/src/fxbarcode/pdf417/BC_PDF417BoundingBox.cpp b/xfa/src/fxbarcode/pdf417/BC_PDF417BoundingBox.cpp deleted file mode 100644 index 6deef4c969..0000000000 --- a/xfa/src/fxbarcode/pdf417/BC_PDF417BoundingBox.cpp +++ /dev/null @@ -1,207 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2013 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/BC_ResultPoint.h" -#include "xfa/src/fxbarcode/common/BC_CommonBitMatrix.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417BoundingBox.h" -#include "xfa/src/fxbarcode/utils.h" - -CBC_BoundingBox::CBC_BoundingBox(CBC_CommonBitMatrix* image, - CBC_ResultPoint* topLeft, - CBC_ResultPoint* bottomLeft, - CBC_ResultPoint* topRight, - CBC_ResultPoint* bottomRight, - int32_t& e) { - if ((topLeft == NULL && topRight == NULL) || - (bottomLeft == NULL && bottomRight == NULL) || - (topLeft && bottomLeft == NULL) || (topRight && bottomRight == NULL)) { - e = BCExceptionNotFoundInstance; - } - init(image, topLeft, bottomLeft, topRight, bottomRight); -} -CBC_BoundingBox::CBC_BoundingBox(CBC_BoundingBox* boundingBox) { - init(boundingBox->m_image, boundingBox->m_topLeft, boundingBox->m_bottomLeft, - boundingBox->m_topRight, boundingBox->m_bottomRight); -} -CBC_BoundingBox::~CBC_BoundingBox() { - if (m_topLeft) { - delete m_topLeft; - } - if (m_bottomLeft) { - delete m_bottomLeft; - } - if (m_topRight) { - delete m_topRight; - } - if (m_bottomRight) { - delete m_bottomRight; - } -} -CBC_BoundingBox* CBC_BoundingBox::merge(CBC_BoundingBox* leftBox, - CBC_BoundingBox* rightBox, - int32_t& e) { - CBC_BoundingBox* boundingBox = NULL; - if (leftBox == NULL) { - boundingBox = new CBC_BoundingBox(rightBox); - return boundingBox; - } - if (rightBox == NULL) { - boundingBox = new CBC_BoundingBox(leftBox); - return boundingBox; - } - boundingBox = new CBC_BoundingBox(leftBox->m_image, leftBox->m_topLeft, - leftBox->m_bottomLeft, rightBox->m_topRight, - rightBox->m_bottomRight, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - return boundingBox; -} -CBC_BoundingBox* CBC_BoundingBox::addMissingRows(int32_t missingStartRows, - int32_t missingEndRows, - FX_BOOL isLeft, - int32_t& e) { - CBC_ResultPoint* newTopLeft = m_topLeft; - CBC_ResultPoint* newBottomLeft = m_bottomLeft; - CBC_ResultPoint* newTopRight = m_topRight; - CBC_ResultPoint* newBottomRight = m_bottomRight; - CBC_ResultPoint* newTop = NULL; - CBC_ResultPoint* newBottom = NULL; - if (missingStartRows > 0) { - CBC_ResultPoint* top = isLeft ? m_topLeft : m_topRight; - int32_t newMinY = (int32_t)top->GetY() - missingStartRows; - if (newMinY < 0) { - newMinY = 0; - } - newTop = new CBC_ResultPoint((FX_FLOAT)top->GetX(), (FX_FLOAT)newMinY); - if (isLeft) { - newTopLeft = newTop; - } else { - newTopRight = newTop; - } - } - if (missingEndRows > 0) { - CBC_ResultPoint* bottom = isLeft ? m_bottomLeft : m_bottomRight; - int32_t newMaxY = (int32_t)bottom->GetY() + missingEndRows; - if (newMaxY >= m_image->GetHeight()) { - newMaxY = m_image->GetHeight() - 1; - } - newBottom = - new CBC_ResultPoint((FX_FLOAT)bottom->GetX(), (FX_FLOAT)newMaxY); - if (isLeft) { - newBottomLeft = newBottom; - } else { - newBottomRight = newBottom; - } - } - calculateMinMaxValues(); - CBC_BoundingBox* boundingBox = new CBC_BoundingBox( - m_image, newTopLeft, newBottomLeft, newTopRight, newBottomRight, e); - delete newTop; - delete newBottom; - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - return boundingBox; -} -void CBC_BoundingBox::setTopRight(CBC_ResultPoint topRight) { - if (m_topRight) { - delete m_topRight; - } - m_topRight = new CBC_ResultPoint(topRight.GetX(), topRight.GetY()); - calculateMinMaxValues(); -} -void CBC_BoundingBox::setBottomRight(CBC_ResultPoint bottomRight) { - if (m_bottomRight) { - delete m_bottomRight; - } - m_bottomRight = new CBC_ResultPoint(bottomRight.GetX(), bottomRight.GetY()); - calculateMinMaxValues(); -} -int32_t CBC_BoundingBox::getMinX() { - return m_minX; -} -int32_t CBC_BoundingBox::getMaxX() { - return m_maxX; -} -int32_t CBC_BoundingBox::getMinY() { - return m_minY; -} -int32_t CBC_BoundingBox::getMaxY() { - return m_maxY; -} -CBC_ResultPoint* CBC_BoundingBox::getTopLeft() { - return m_topLeft; -} -CBC_ResultPoint* CBC_BoundingBox::getTopRight() { - return m_topRight; -} -CBC_ResultPoint* CBC_BoundingBox::getBottomLeft() { - return m_bottomLeft; -} -CBC_ResultPoint* CBC_BoundingBox::getBottomRight() { - return m_bottomRight; -} -void CBC_BoundingBox::init(CBC_CommonBitMatrix* image, - CBC_ResultPoint* topLeft, - CBC_ResultPoint* bottomLeft, - CBC_ResultPoint* topRight, - CBC_ResultPoint* bottomRight) { - m_topLeft = NULL; - m_bottomLeft = NULL; - m_topRight = NULL; - m_bottomRight = NULL; - m_image = image; - if (topLeft) { - m_topLeft = new CBC_ResultPoint(topLeft->GetX(), topLeft->GetY()); - } - if (bottomLeft) { - m_bottomLeft = new CBC_ResultPoint(bottomLeft->GetX(), bottomLeft->GetY()); - } - if (topRight) { - m_topRight = new CBC_ResultPoint(topRight->GetX(), topRight->GetY()); - } - if (bottomRight) { - m_bottomRight = - new CBC_ResultPoint(bottomRight->GetX(), bottomRight->GetY()); - } - calculateMinMaxValues(); -} -void CBC_BoundingBox::calculateMinMaxValues() { - if (m_topLeft == NULL) { - m_topLeft = new CBC_ResultPoint(0, m_topRight->GetY()); - m_bottomLeft = new CBC_ResultPoint(0, m_bottomRight->GetY()); - } else if (m_topRight == NULL) { - m_topRight = new CBC_ResultPoint((FX_FLOAT)m_image->GetWidth() - 1, - (FX_FLOAT)m_topLeft->GetY()); - m_bottomRight = new CBC_ResultPoint((FX_FLOAT)m_image->GetWidth() - 1, - (FX_FLOAT)m_bottomLeft->GetY()); - } - m_minX = (int32_t)(m_topLeft->GetX() < m_bottomLeft->GetX() - ? m_topLeft->GetX() - : m_bottomLeft->GetX()); - m_maxX = (int32_t)(m_topRight->GetX() > m_bottomRight->GetX() - ? m_topRight->GetX() - : m_bottomRight->GetX()); - m_minY = - (int32_t)(m_topLeft->GetY() < m_topRight->GetY() ? m_topLeft->GetY() - : m_topRight->GetY()); - m_maxY = (int32_t)(m_bottomLeft->GetY() > m_bottomRight->GetY() - ? m_bottomLeft->GetY() - : m_bottomRight->GetY()); -} diff --git a/xfa/src/fxbarcode/pdf417/BC_PDF417BoundingBox.h b/xfa/src/fxbarcode/pdf417/BC_PDF417BoundingBox.h deleted file mode 100644 index c241572985..0000000000 --- a/xfa/src/fxbarcode/pdf417/BC_PDF417BoundingBox.h +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_PDF417_BC_PDF417BOUNDINGBOX_H_ -#define XFA_SRC_FXBARCODE_PDF417_BC_PDF417BOUNDINGBOX_H_ - -#include "core/include/fxcrt/fx_system.h" - -class CBC_CommonBitMatrix; -class CBC_ResultPoint; - -class CBC_BoundingBox { - public: - CBC_BoundingBox(CBC_CommonBitMatrix* image, - CBC_ResultPoint* topLeft, - CBC_ResultPoint* bottomLeft, - CBC_ResultPoint* topRight, - CBC_ResultPoint* bottomRight, - int32_t& e); - CBC_BoundingBox(CBC_BoundingBox* boundingBox); - virtual ~CBC_BoundingBox(); - static CBC_BoundingBox* merge(CBC_BoundingBox* leftBox, - CBC_BoundingBox* rightBox, - int32_t& e); - CBC_BoundingBox* addMissingRows(int32_t missingStartRows, - int32_t missingEndRows, - FX_BOOL isLeft, - int32_t& e); - void setTopRight(CBC_ResultPoint topRight); - void setBottomRight(CBC_ResultPoint bottomRight); - int32_t getMinX(); - int32_t getMaxX(); - int32_t getMinY(); - int32_t getMaxY(); - CBC_ResultPoint* getTopLeft(); - CBC_ResultPoint* getTopRight(); - CBC_ResultPoint* getBottomLeft(); - CBC_ResultPoint* getBottomRight(); - - private: - CBC_CommonBitMatrix* m_image; - CBC_ResultPoint* m_topLeft; - CBC_ResultPoint* m_bottomLeft; - CBC_ResultPoint* m_topRight; - CBC_ResultPoint* m_bottomRight; - int32_t m_minX; - int32_t m_maxX; - int32_t m_minY; - int32_t m_maxY; - void init(CBC_CommonBitMatrix* image, - CBC_ResultPoint* topLeft, - CBC_ResultPoint* bottomLeft, - CBC_ResultPoint* topRight, - CBC_ResultPoint* bottomRight); - void calculateMinMaxValues(); -}; - -#endif // XFA_SRC_FXBARCODE_PDF417_BC_PDF417BOUNDINGBOX_H_ diff --git a/xfa/src/fxbarcode/pdf417/BC_PDF417Codeword.cpp b/xfa/src/fxbarcode/pdf417/BC_PDF417Codeword.cpp deleted file mode 100644 index f8b627a8b4..0000000000 --- a/xfa/src/fxbarcode/pdf417/BC_PDF417Codeword.cpp +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2013 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/pdf417/BC_PDF417Codeword.h" - -int32_t CBC_Codeword::BARCODE_ROW_UNKNOWN = -1; -CBC_Codeword::CBC_Codeword(int32_t startX, - int32_t endX, - int32_t bucket, - int32_t cvalue) { - m_startX = startX; - m_endX = endX; - m_bucket = bucket; - m_value = cvalue; - m_rowNumber = BARCODE_ROW_UNKNOWN; -} -CBC_Codeword::~CBC_Codeword() {} -FX_BOOL CBC_Codeword::hasValidRowNumber() { - return isValidRowNumber(m_rowNumber); -} -FX_BOOL CBC_Codeword::isValidRowNumber(int32_t rowNumber) { - return m_rowNumber != BARCODE_ROW_UNKNOWN && - m_bucket == (m_rowNumber % 3) * 3; -} -void CBC_Codeword::setRowNumberAsRowIndicatorColumn() { - m_rowNumber = (m_value / 30) * 3 + m_bucket / 3; -} -int32_t CBC_Codeword::getWidth() { - return m_endX - m_startX; -} -int32_t CBC_Codeword::getStartX() { - return m_startX; -} -int32_t CBC_Codeword::getEndX() { - return m_endX; -} -int32_t CBC_Codeword::getBucket() { - return m_bucket; -} -int32_t CBC_Codeword::getValue() { - return m_value; -} -int32_t CBC_Codeword::getRowNumber() { - return m_rowNumber; -} -void CBC_Codeword::setRowNumber(int32_t rowNumber) { - m_rowNumber = rowNumber; -} -CFX_ByteString CBC_Codeword::toString() { - return m_rowNumber + (FX_CHAR)'|' + m_value; -} diff --git a/xfa/src/fxbarcode/pdf417/BC_PDF417Codeword.h b/xfa/src/fxbarcode/pdf417/BC_PDF417Codeword.h deleted file mode 100644 index e2eb52c9ba..0000000000 --- a/xfa/src/fxbarcode/pdf417/BC_PDF417Codeword.h +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_PDF417_BC_PDF417CODEWORD_H_ -#define XFA_SRC_FXBARCODE_PDF417_BC_PDF417CODEWORD_H_ - -#include "core/include/fxcrt/fx_basic.h" - -class CBC_Codeword { - public: - CBC_Codeword(int32_t startX, int32_t endX, int32_t bucket, int32_t value); - virtual ~CBC_Codeword(); - FX_BOOL hasValidRowNumber(); - FX_BOOL isValidRowNumber(int32_t rowNumber); - void setRowNumberAsRowIndicatorColumn(); - int32_t getWidth(); - int32_t getStartX(); - int32_t getEndX(); - int32_t getBucket(); - int32_t getValue(); - int32_t getRowNumber(); - void setRowNumber(int32_t rowNumber); - CFX_ByteString toString(); - - private: - static int32_t BARCODE_ROW_UNKNOWN; - int32_t m_startX; - int32_t m_endX; - int32_t m_bucket; - int32_t m_value; - int32_t m_rowNumber; -}; - -#endif // XFA_SRC_FXBARCODE_PDF417_BC_PDF417CODEWORD_H_ diff --git a/xfa/src/fxbarcode/pdf417/BC_PDF417CodewordDecoder.cpp b/xfa/src/fxbarcode/pdf417/BC_PDF417CodewordDecoder.cpp deleted file mode 100644 index ea1e38765a..0000000000 --- a/xfa/src/fxbarcode/pdf417/BC_PDF417CodewordDecoder.cpp +++ /dev/null @@ -1,117 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2013 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include - -#include "xfa/src/fxbarcode/pdf417/BC_PDF417CodewordDecoder.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417Common.h" - -#define SYMBOL_TABLE_Length 2787 - -FX_FLOAT CBC_PDF417CodewordDecoder::RATIOS_TABLE[2787][8] = {{0}}; - -CBC_PDF417CodewordDecoder::CBC_PDF417CodewordDecoder() {} -CBC_PDF417CodewordDecoder::~CBC_PDF417CodewordDecoder() {} -void CBC_PDF417CodewordDecoder::Initialize() { - for (int32_t i = 0; i < SYMBOL_TABLE_Length; i++) { - int32_t currentSymbol = CBC_PDF417Common::SYMBOL_TABLE[i]; - int32_t currentBit = currentSymbol & 0x1; - for (int32_t j = 0; j < CBC_PDF417Common::BARS_IN_MODULE; j++) { - FX_FLOAT size = 0.0f; - while ((currentSymbol & 0x1) == currentBit) { - size += 1.0f; - currentSymbol >>= 1; - } - currentBit = currentSymbol & 0x1; - RATIOS_TABLE[i][CBC_PDF417Common::BARS_IN_MODULE - j - 1] = - size / CBC_PDF417Common::MODULES_IN_CODEWORD; - } - } -} -void CBC_PDF417CodewordDecoder::Finalize() {} -int32_t CBC_PDF417CodewordDecoder::getDecodedValue( - CFX_Int32Array& moduleBitCount) { - CFX_Int32Array* array = sampleBitCounts(moduleBitCount); - int32_t decodedValue = getDecodedCodewordValue(*array); - delete array; - if (decodedValue != -1) { - return decodedValue; - } - return getClosestDecodedValue(moduleBitCount); -} -CFX_Int32Array* CBC_PDF417CodewordDecoder::sampleBitCounts( - CFX_Int32Array& moduleBitCount) { - FX_FLOAT bitCountSum = - (FX_FLOAT)CBC_PDF417Common::getBitCountSum(moduleBitCount); - CFX_Int32Array* bitCount = new CFX_Int32Array(); - bitCount->SetSize(CBC_PDF417Common::BARS_IN_MODULE); - int32_t bitCountIndex = 0; - int32_t sumPreviousBits = 0; - for (int32_t i = 0; i < CBC_PDF417Common::MODULES_IN_CODEWORD; i++) { - FX_FLOAT sampleIndex = - bitCountSum / (2 * CBC_PDF417Common::MODULES_IN_CODEWORD) + - (i * bitCountSum) / CBC_PDF417Common::MODULES_IN_CODEWORD; - if (sumPreviousBits + moduleBitCount.GetAt(bitCountIndex) <= sampleIndex) { - sumPreviousBits += moduleBitCount.GetAt(bitCountIndex); - bitCountIndex++; - } - bitCount->SetAt(bitCountIndex, bitCount->GetAt(bitCountIndex) + 1); - } - return bitCount; -} -int32_t CBC_PDF417CodewordDecoder::getDecodedCodewordValue( - CFX_Int32Array& moduleBitCount) { - int32_t decodedValue = getBitValue(moduleBitCount); - return CBC_PDF417Common::getCodeword(decodedValue) == -1 ? -1 : decodedValue; -} -int32_t CBC_PDF417CodewordDecoder::getBitValue(CFX_Int32Array& moduleBitCount) { - int64_t result = 0; - for (int32_t i = 0; i < moduleBitCount.GetSize(); i++) { - for (int32_t bit = 0; bit < moduleBitCount.GetAt(i); bit++) { - result = (result << 1) | (i % 2 == 0 ? 1 : 0); - } - } - return (int32_t)result; -} -int32_t CBC_PDF417CodewordDecoder::getClosestDecodedValue( - CFX_Int32Array& moduleBitCount) { - int32_t bitCountSum = CBC_PDF417Common::getBitCountSum(moduleBitCount); - CFX_FloatArray bitCountRatios; - bitCountRatios.SetSize(CBC_PDF417Common::BARS_IN_MODULE); - for (int32_t i = 0; i < bitCountRatios.GetSize(); i++) { - bitCountRatios[i] = moduleBitCount.GetAt(i) / (FX_FLOAT)bitCountSum; - } - FX_FLOAT bestMatchError = std::numeric_limits::max(); - int32_t bestMatch = -1; - for (int32_t j = 0; j < SYMBOL_TABLE_Length; j++) { - FX_FLOAT error = 0.0f; - for (int32_t k = 0; k < CBC_PDF417Common::BARS_IN_MODULE; k++) { - FX_FLOAT diff = RATIOS_TABLE[j][k] - bitCountRatios[k]; - error += diff * diff; - } - if (error < bestMatchError) { - bestMatchError = error; - bestMatch = CBC_PDF417Common::SYMBOL_TABLE[j]; - } - } - return bestMatch; -} diff --git a/xfa/src/fxbarcode/pdf417/BC_PDF417CodewordDecoder.h b/xfa/src/fxbarcode/pdf417/BC_PDF417CodewordDecoder.h deleted file mode 100644 index 149a640676..0000000000 --- a/xfa/src/fxbarcode/pdf417/BC_PDF417CodewordDecoder.h +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_PDF417_BC_PDF417CODEWORDDECODER_H_ -#define XFA_SRC_FXBARCODE_PDF417_BC_PDF417CODEWORDDECODER_H_ - -#include "core/include/fxcrt/fx_basic.h" - -class CBC_PDF417CodewordDecoder { - public: - CBC_PDF417CodewordDecoder(); - virtual ~CBC_PDF417CodewordDecoder(); - static void Initialize(); - static void Finalize(); - static int32_t getDecodedValue(CFX_Int32Array& moduleBitCount); - - private: - static FX_FLOAT RATIOS_TABLE[][8]; - static CFX_Int32Array* sampleBitCounts(CFX_Int32Array& moduleBitCount); - static int32_t getDecodedCodewordValue(CFX_Int32Array& moduleBitCount); - static int32_t getBitValue(CFX_Int32Array& moduleBitCount); - static int32_t getClosestDecodedValue(CFX_Int32Array& moduleBitCount); -}; - -#endif // XFA_SRC_FXBARCODE_PDF417_BC_PDF417CODEWORDDECODER_H_ diff --git a/xfa/src/fxbarcode/pdf417/BC_PDF417Common.cpp b/xfa/src/fxbarcode/pdf417/BC_PDF417Common.cpp deleted file mode 100644 index 5bd2dafbe8..0000000000 --- a/xfa/src/fxbarcode/pdf417/BC_PDF417Common.cpp +++ /dev/null @@ -1,651 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2009 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/pdf417/BC_PDF417Common.h" - -int32_t CBC_PDF417Common::NUMBER_OF_CODEWORDS = 929; -int32_t CBC_PDF417Common::MAX_CODEWORDS_IN_BARCODE = NUMBER_OF_CODEWORDS - 1; -int32_t CBC_PDF417Common::MIN_ROWS_IN_BARCODE = 3; -int32_t CBC_PDF417Common::MAX_ROWS_IN_BARCODE = 90; -int32_t CBC_PDF417Common::MAX_CODEWORDS_IN_ROW = 32; -int32_t CBC_PDF417Common::MODULES_IN_CODEWORD = 17; -int32_t CBC_PDF417Common::MODULES_IN_STOP_PATTERN = 18; -int32_t CBC_PDF417Common::BARS_IN_MODULE = 8; -CFX_Int32Array* CBC_PDF417Common::EMPTY_INT_ARRAY = NULL; -int32_t CBC_PDF417Common::SYMBOL_TABLE[] = { - 0x1025e, 0x1027a, 0x1029e, 0x102bc, 0x102f2, 0x102f4, 0x1032e, 0x1034e, - 0x1035c, 0x10396, 0x103a6, 0x103ac, 0x10422, 0x10428, 0x10436, 0x10442, - 0x10444, 0x10448, 0x10450, 0x1045e, 0x10466, 0x1046c, 0x1047a, 0x10482, - 0x1049e, 0x104a0, 0x104bc, 0x104c6, 0x104d8, 0x104ee, 0x104f2, 0x104f4, - 0x10504, 0x10508, 0x10510, 0x1051e, 0x10520, 0x1053c, 0x10540, 0x10578, - 0x10586, 0x1058c, 0x10598, 0x105b0, 0x105be, 0x105ce, 0x105dc, 0x105e2, - 0x105e4, 0x105e8, 0x105f6, 0x1062e, 0x1064e, 0x1065c, 0x1068e, 0x1069c, - 0x106b8, 0x106de, 0x106fa, 0x10716, 0x10726, 0x1072c, 0x10746, 0x1074c, - 0x10758, 0x1076e, 0x10792, 0x10794, 0x107a2, 0x107a4, 0x107a8, 0x107b6, - 0x10822, 0x10828, 0x10842, 0x10848, 0x10850, 0x1085e, 0x10866, 0x1086c, - 0x1087a, 0x10882, 0x10884, 0x10890, 0x1089e, 0x108a0, 0x108bc, 0x108c6, - 0x108cc, 0x108d8, 0x108ee, 0x108f2, 0x108f4, 0x10902, 0x10908, 0x1091e, - 0x10920, 0x1093c, 0x10940, 0x10978, 0x10986, 0x10998, 0x109b0, 0x109be, - 0x109ce, 0x109dc, 0x109e2, 0x109e4, 0x109e8, 0x109f6, 0x10a08, 0x10a10, - 0x10a1e, 0x10a20, 0x10a3c, 0x10a40, 0x10a78, 0x10af0, 0x10b06, 0x10b0c, - 0x10b18, 0x10b30, 0x10b3e, 0x10b60, 0x10b7c, 0x10b8e, 0x10b9c, 0x10bb8, - 0x10bc2, 0x10bc4, 0x10bc8, 0x10bd0, 0x10bde, 0x10be6, 0x10bec, 0x10c2e, - 0x10c4e, 0x10c5c, 0x10c62, 0x10c64, 0x10c68, 0x10c76, 0x10c8e, 0x10c9c, - 0x10cb8, 0x10cc2, 0x10cc4, 0x10cc8, 0x10cd0, 0x10cde, 0x10ce6, 0x10cec, - 0x10cfa, 0x10d0e, 0x10d1c, 0x10d38, 0x10d70, 0x10d7e, 0x10d82, 0x10d84, - 0x10d88, 0x10d90, 0x10d9e, 0x10da0, 0x10dbc, 0x10dc6, 0x10dcc, 0x10dd8, - 0x10dee, 0x10df2, 0x10df4, 0x10e16, 0x10e26, 0x10e2c, 0x10e46, 0x10e58, - 0x10e6e, 0x10e86, 0x10e8c, 0x10e98, 0x10eb0, 0x10ebe, 0x10ece, 0x10edc, - 0x10f0a, 0x10f12, 0x10f14, 0x10f22, 0x10f28, 0x10f36, 0x10f42, 0x10f44, - 0x10f48, 0x10f50, 0x10f5e, 0x10f66, 0x10f6c, 0x10fb2, 0x10fb4, 0x11022, - 0x11028, 0x11042, 0x11048, 0x11050, 0x1105e, 0x1107a, 0x11082, 0x11084, - 0x11090, 0x1109e, 0x110a0, 0x110bc, 0x110c6, 0x110cc, 0x110d8, 0x110ee, - 0x110f2, 0x110f4, 0x11102, 0x1111e, 0x11120, 0x1113c, 0x11140, 0x11178, - 0x11186, 0x11198, 0x111b0, 0x111be, 0x111ce, 0x111dc, 0x111e2, 0x111e4, - 0x111e8, 0x111f6, 0x11208, 0x1121e, 0x11220, 0x11278, 0x112f0, 0x1130c, - 0x11330, 0x1133e, 0x11360, 0x1137c, 0x1138e, 0x1139c, 0x113b8, 0x113c2, - 0x113c8, 0x113d0, 0x113de, 0x113e6, 0x113ec, 0x11408, 0x11410, 0x1141e, - 0x11420, 0x1143c, 0x11440, 0x11478, 0x114f0, 0x115e0, 0x1160c, 0x11618, - 0x11630, 0x1163e, 0x11660, 0x1167c, 0x116c0, 0x116f8, 0x1171c, 0x11738, - 0x11770, 0x1177e, 0x11782, 0x11784, 0x11788, 0x11790, 0x1179e, 0x117a0, - 0x117bc, 0x117c6, 0x117cc, 0x117d8, 0x117ee, 0x1182e, 0x11834, 0x1184e, - 0x1185c, 0x11862, 0x11864, 0x11868, 0x11876, 0x1188e, 0x1189c, 0x118b8, - 0x118c2, 0x118c8, 0x118d0, 0x118de, 0x118e6, 0x118ec, 0x118fa, 0x1190e, - 0x1191c, 0x11938, 0x11970, 0x1197e, 0x11982, 0x11984, 0x11990, 0x1199e, - 0x119a0, 0x119bc, 0x119c6, 0x119cc, 0x119d8, 0x119ee, 0x119f2, 0x119f4, - 0x11a0e, 0x11a1c, 0x11a38, 0x11a70, 0x11a7e, 0x11ae0, 0x11afc, 0x11b08, - 0x11b10, 0x11b1e, 0x11b20, 0x11b3c, 0x11b40, 0x11b78, 0x11b8c, 0x11b98, - 0x11bb0, 0x11bbe, 0x11bce, 0x11bdc, 0x11be2, 0x11be4, 0x11be8, 0x11bf6, - 0x11c16, 0x11c26, 0x11c2c, 0x11c46, 0x11c4c, 0x11c58, 0x11c6e, 0x11c86, - 0x11c98, 0x11cb0, 0x11cbe, 0x11cce, 0x11cdc, 0x11ce2, 0x11ce4, 0x11ce8, - 0x11cf6, 0x11d06, 0x11d0c, 0x11d18, 0x11d30, 0x11d3e, 0x11d60, 0x11d7c, - 0x11d8e, 0x11d9c, 0x11db8, 0x11dc4, 0x11dc8, 0x11dd0, 0x11dde, 0x11de6, - 0x11dec, 0x11dfa, 0x11e0a, 0x11e12, 0x11e14, 0x11e22, 0x11e24, 0x11e28, - 0x11e36, 0x11e42, 0x11e44, 0x11e50, 0x11e5e, 0x11e66, 0x11e6c, 0x11e82, - 0x11e84, 0x11e88, 0x11e90, 0x11e9e, 0x11ea0, 0x11ebc, 0x11ec6, 0x11ecc, - 0x11ed8, 0x11eee, 0x11f1a, 0x11f2e, 0x11f32, 0x11f34, 0x11f4e, 0x11f5c, - 0x11f62, 0x11f64, 0x11f68, 0x11f76, 0x12048, 0x1205e, 0x12082, 0x12084, - 0x12090, 0x1209e, 0x120a0, 0x120bc, 0x120d8, 0x120f2, 0x120f4, 0x12108, - 0x1211e, 0x12120, 0x1213c, 0x12140, 0x12178, 0x12186, 0x12198, 0x121b0, - 0x121be, 0x121e2, 0x121e4, 0x121e8, 0x121f6, 0x12204, 0x12210, 0x1221e, - 0x12220, 0x12278, 0x122f0, 0x12306, 0x1230c, 0x12330, 0x1233e, 0x12360, - 0x1237c, 0x1238e, 0x1239c, 0x123b8, 0x123c2, 0x123c8, 0x123d0, 0x123e6, - 0x123ec, 0x1241e, 0x12420, 0x1243c, 0x124f0, 0x125e0, 0x12618, 0x1263e, - 0x12660, 0x1267c, 0x126c0, 0x126f8, 0x12738, 0x12770, 0x1277e, 0x12782, - 0x12784, 0x12790, 0x1279e, 0x127a0, 0x127bc, 0x127c6, 0x127cc, 0x127d8, - 0x127ee, 0x12820, 0x1283c, 0x12840, 0x12878, 0x128f0, 0x129e0, 0x12bc0, - 0x12c18, 0x12c30, 0x12c3e, 0x12c60, 0x12c7c, 0x12cc0, 0x12cf8, 0x12df0, - 0x12e1c, 0x12e38, 0x12e70, 0x12e7e, 0x12ee0, 0x12efc, 0x12f04, 0x12f08, - 0x12f10, 0x12f20, 0x12f3c, 0x12f40, 0x12f78, 0x12f86, 0x12f8c, 0x12f98, - 0x12fb0, 0x12fbe, 0x12fce, 0x12fdc, 0x1302e, 0x1304e, 0x1305c, 0x13062, - 0x13068, 0x1308e, 0x1309c, 0x130b8, 0x130c2, 0x130c8, 0x130d0, 0x130de, - 0x130ec, 0x130fa, 0x1310e, 0x13138, 0x13170, 0x1317e, 0x13182, 0x13184, - 0x13190, 0x1319e, 0x131a0, 0x131bc, 0x131c6, 0x131cc, 0x131d8, 0x131f2, - 0x131f4, 0x1320e, 0x1321c, 0x13270, 0x1327e, 0x132e0, 0x132fc, 0x13308, - 0x1331e, 0x13320, 0x1333c, 0x13340, 0x13378, 0x13386, 0x13398, 0x133b0, - 0x133be, 0x133ce, 0x133dc, 0x133e2, 0x133e4, 0x133e8, 0x133f6, 0x1340e, - 0x1341c, 0x13438, 0x13470, 0x1347e, 0x134e0, 0x134fc, 0x135c0, 0x135f8, - 0x13608, 0x13610, 0x1361e, 0x13620, 0x1363c, 0x13640, 0x13678, 0x136f0, - 0x1370c, 0x13718, 0x13730, 0x1373e, 0x13760, 0x1377c, 0x1379c, 0x137b8, - 0x137c2, 0x137c4, 0x137c8, 0x137d0, 0x137de, 0x137e6, 0x137ec, 0x13816, - 0x13826, 0x1382c, 0x13846, 0x1384c, 0x13858, 0x1386e, 0x13874, 0x13886, - 0x13898, 0x138b0, 0x138be, 0x138ce, 0x138dc, 0x138e2, 0x138e4, 0x138e8, - 0x13906, 0x1390c, 0x13930, 0x1393e, 0x13960, 0x1397c, 0x1398e, 0x1399c, - 0x139b8, 0x139c8, 0x139d0, 0x139de, 0x139e6, 0x139ec, 0x139fa, 0x13a06, - 0x13a0c, 0x13a18, 0x13a30, 0x13a3e, 0x13a60, 0x13a7c, 0x13ac0, 0x13af8, - 0x13b0e, 0x13b1c, 0x13b38, 0x13b70, 0x13b7e, 0x13b88, 0x13b90, 0x13b9e, - 0x13ba0, 0x13bbc, 0x13bcc, 0x13bd8, 0x13bee, 0x13bf2, 0x13bf4, 0x13c12, - 0x13c14, 0x13c22, 0x13c24, 0x13c28, 0x13c36, 0x13c42, 0x13c48, 0x13c50, - 0x13c5e, 0x13c66, 0x13c6c, 0x13c82, 0x13c84, 0x13c90, 0x13c9e, 0x13ca0, - 0x13cbc, 0x13cc6, 0x13ccc, 0x13cd8, 0x13cee, 0x13d02, 0x13d04, 0x13d08, - 0x13d10, 0x13d1e, 0x13d20, 0x13d3c, 0x13d40, 0x13d78, 0x13d86, 0x13d8c, - 0x13d98, 0x13db0, 0x13dbe, 0x13dce, 0x13ddc, 0x13de4, 0x13de8, 0x13df6, - 0x13e1a, 0x13e2e, 0x13e32, 0x13e34, 0x13e4e, 0x13e5c, 0x13e62, 0x13e64, - 0x13e68, 0x13e76, 0x13e8e, 0x13e9c, 0x13eb8, 0x13ec2, 0x13ec4, 0x13ec8, - 0x13ed0, 0x13ede, 0x13ee6, 0x13eec, 0x13f26, 0x13f2c, 0x13f3a, 0x13f46, - 0x13f4c, 0x13f58, 0x13f6e, 0x13f72, 0x13f74, 0x14082, 0x1409e, 0x140a0, - 0x140bc, 0x14104, 0x14108, 0x14110, 0x1411e, 0x14120, 0x1413c, 0x14140, - 0x14178, 0x1418c, 0x14198, 0x141b0, 0x141be, 0x141e2, 0x141e4, 0x141e8, - 0x14208, 0x14210, 0x1421e, 0x14220, 0x1423c, 0x14240, 0x14278, 0x142f0, - 0x14306, 0x1430c, 0x14318, 0x14330, 0x1433e, 0x14360, 0x1437c, 0x1438e, - 0x143c2, 0x143c4, 0x143c8, 0x143d0, 0x143e6, 0x143ec, 0x14408, 0x14410, - 0x1441e, 0x14420, 0x1443c, 0x14440, 0x14478, 0x144f0, 0x145e0, 0x1460c, - 0x14618, 0x14630, 0x1463e, 0x14660, 0x1467c, 0x146c0, 0x146f8, 0x1471c, - 0x14738, 0x14770, 0x1477e, 0x14782, 0x14784, 0x14788, 0x14790, 0x147a0, - 0x147bc, 0x147c6, 0x147cc, 0x147d8, 0x147ee, 0x14810, 0x14820, 0x1483c, - 0x14840, 0x14878, 0x148f0, 0x149e0, 0x14bc0, 0x14c30, 0x14c3e, 0x14c60, - 0x14c7c, 0x14cc0, 0x14cf8, 0x14df0, 0x14e38, 0x14e70, 0x14e7e, 0x14ee0, - 0x14efc, 0x14f04, 0x14f08, 0x14f10, 0x14f1e, 0x14f20, 0x14f3c, 0x14f40, - 0x14f78, 0x14f86, 0x14f8c, 0x14f98, 0x14fb0, 0x14fce, 0x14fdc, 0x15020, - 0x15040, 0x15078, 0x150f0, 0x151e0, 0x153c0, 0x15860, 0x1587c, 0x158c0, - 0x158f8, 0x159f0, 0x15be0, 0x15c70, 0x15c7e, 0x15ce0, 0x15cfc, 0x15dc0, - 0x15df8, 0x15e08, 0x15e10, 0x15e20, 0x15e40, 0x15e78, 0x15ef0, 0x15f0c, - 0x15f18, 0x15f30, 0x15f60, 0x15f7c, 0x15f8e, 0x15f9c, 0x15fb8, 0x1604e, - 0x1605c, 0x1608e, 0x1609c, 0x160b8, 0x160c2, 0x160c4, 0x160c8, 0x160de, - 0x1610e, 0x1611c, 0x16138, 0x16170, 0x1617e, 0x16184, 0x16188, 0x16190, - 0x1619e, 0x161a0, 0x161bc, 0x161c6, 0x161cc, 0x161d8, 0x161f2, 0x161f4, - 0x1620e, 0x1621c, 0x16238, 0x16270, 0x1627e, 0x162e0, 0x162fc, 0x16304, - 0x16308, 0x16310, 0x1631e, 0x16320, 0x1633c, 0x16340, 0x16378, 0x16386, - 0x1638c, 0x16398, 0x163b0, 0x163be, 0x163ce, 0x163dc, 0x163e2, 0x163e4, - 0x163e8, 0x163f6, 0x1640e, 0x1641c, 0x16438, 0x16470, 0x1647e, 0x164e0, - 0x164fc, 0x165c0, 0x165f8, 0x16610, 0x1661e, 0x16620, 0x1663c, 0x16640, - 0x16678, 0x166f0, 0x16718, 0x16730, 0x1673e, 0x16760, 0x1677c, 0x1678e, - 0x1679c, 0x167b8, 0x167c2, 0x167c4, 0x167c8, 0x167d0, 0x167de, 0x167e6, - 0x167ec, 0x1681c, 0x16838, 0x16870, 0x168e0, 0x168fc, 0x169c0, 0x169f8, - 0x16bf0, 0x16c10, 0x16c1e, 0x16c20, 0x16c3c, 0x16c40, 0x16c78, 0x16cf0, - 0x16de0, 0x16e18, 0x16e30, 0x16e3e, 0x16e60, 0x16e7c, 0x16ec0, 0x16ef8, - 0x16f1c, 0x16f38, 0x16f70, 0x16f7e, 0x16f84, 0x16f88, 0x16f90, 0x16f9e, - 0x16fa0, 0x16fbc, 0x16fc6, 0x16fcc, 0x16fd8, 0x17026, 0x1702c, 0x17046, - 0x1704c, 0x17058, 0x1706e, 0x17086, 0x1708c, 0x17098, 0x170b0, 0x170be, - 0x170ce, 0x170dc, 0x170e8, 0x17106, 0x1710c, 0x17118, 0x17130, 0x1713e, - 0x17160, 0x1717c, 0x1718e, 0x1719c, 0x171b8, 0x171c2, 0x171c4, 0x171c8, - 0x171d0, 0x171de, 0x171e6, 0x171ec, 0x171fa, 0x17206, 0x1720c, 0x17218, - 0x17230, 0x1723e, 0x17260, 0x1727c, 0x172c0, 0x172f8, 0x1730e, 0x1731c, - 0x17338, 0x17370, 0x1737e, 0x17388, 0x17390, 0x1739e, 0x173a0, 0x173bc, - 0x173cc, 0x173d8, 0x173ee, 0x173f2, 0x173f4, 0x1740c, 0x17418, 0x17430, - 0x1743e, 0x17460, 0x1747c, 0x174c0, 0x174f8, 0x175f0, 0x1760e, 0x1761c, - 0x17638, 0x17670, 0x1767e, 0x176e0, 0x176fc, 0x17708, 0x17710, 0x1771e, - 0x17720, 0x1773c, 0x17740, 0x17778, 0x17798, 0x177b0, 0x177be, 0x177dc, - 0x177e2, 0x177e4, 0x177e8, 0x17822, 0x17824, 0x17828, 0x17836, 0x17842, - 0x17844, 0x17848, 0x17850, 0x1785e, 0x17866, 0x1786c, 0x17882, 0x17884, - 0x17888, 0x17890, 0x1789e, 0x178a0, 0x178bc, 0x178c6, 0x178cc, 0x178d8, - 0x178ee, 0x178f2, 0x178f4, 0x17902, 0x17904, 0x17908, 0x17910, 0x1791e, - 0x17920, 0x1793c, 0x17940, 0x17978, 0x17986, 0x1798c, 0x17998, 0x179b0, - 0x179be, 0x179ce, 0x179dc, 0x179e2, 0x179e4, 0x179e8, 0x179f6, 0x17a04, - 0x17a08, 0x17a10, 0x17a1e, 0x17a20, 0x17a3c, 0x17a40, 0x17a78, 0x17af0, - 0x17b06, 0x17b0c, 0x17b18, 0x17b30, 0x17b3e, 0x17b60, 0x17b7c, 0x17b8e, - 0x17b9c, 0x17bb8, 0x17bc4, 0x17bc8, 0x17bd0, 0x17bde, 0x17be6, 0x17bec, - 0x17c2e, 0x17c32, 0x17c34, 0x17c4e, 0x17c5c, 0x17c62, 0x17c64, 0x17c68, - 0x17c76, 0x17c8e, 0x17c9c, 0x17cb8, 0x17cc2, 0x17cc4, 0x17cc8, 0x17cd0, - 0x17cde, 0x17ce6, 0x17cec, 0x17d0e, 0x17d1c, 0x17d38, 0x17d70, 0x17d82, - 0x17d84, 0x17d88, 0x17d90, 0x17d9e, 0x17da0, 0x17dbc, 0x17dc6, 0x17dcc, - 0x17dd8, 0x17dee, 0x17e26, 0x17e2c, 0x17e3a, 0x17e46, 0x17e4c, 0x17e58, - 0x17e6e, 0x17e72, 0x17e74, 0x17e86, 0x17e8c, 0x17e98, 0x17eb0, 0x17ece, - 0x17edc, 0x17ee2, 0x17ee4, 0x17ee8, 0x17ef6, 0x1813a, 0x18172, 0x18174, - 0x18216, 0x18226, 0x1823a, 0x1824c, 0x18258, 0x1826e, 0x18272, 0x18274, - 0x18298, 0x182be, 0x182e2, 0x182e4, 0x182e8, 0x182f6, 0x1835e, 0x1837a, - 0x183ae, 0x183d6, 0x18416, 0x18426, 0x1842c, 0x1843a, 0x18446, 0x18458, - 0x1846e, 0x18472, 0x18474, 0x18486, 0x184b0, 0x184be, 0x184ce, 0x184dc, - 0x184e2, 0x184e4, 0x184e8, 0x184f6, 0x18506, 0x1850c, 0x18518, 0x18530, - 0x1853e, 0x18560, 0x1857c, 0x1858e, 0x1859c, 0x185b8, 0x185c2, 0x185c4, - 0x185c8, 0x185d0, 0x185de, 0x185e6, 0x185ec, 0x185fa, 0x18612, 0x18614, - 0x18622, 0x18628, 0x18636, 0x18642, 0x18650, 0x1865e, 0x1867a, 0x18682, - 0x18684, 0x18688, 0x18690, 0x1869e, 0x186a0, 0x186bc, 0x186c6, 0x186cc, - 0x186d8, 0x186ee, 0x186f2, 0x186f4, 0x1872e, 0x1874e, 0x1875c, 0x18796, - 0x187a6, 0x187ac, 0x187d2, 0x187d4, 0x18826, 0x1882c, 0x1883a, 0x18846, - 0x1884c, 0x18858, 0x1886e, 0x18872, 0x18874, 0x18886, 0x18898, 0x188b0, - 0x188be, 0x188ce, 0x188dc, 0x188e2, 0x188e4, 0x188e8, 0x188f6, 0x1890c, - 0x18930, 0x1893e, 0x18960, 0x1897c, 0x1898e, 0x189b8, 0x189c2, 0x189c8, - 0x189d0, 0x189de, 0x189e6, 0x189ec, 0x189fa, 0x18a18, 0x18a30, 0x18a3e, - 0x18a60, 0x18a7c, 0x18ac0, 0x18af8, 0x18b1c, 0x18b38, 0x18b70, 0x18b7e, - 0x18b82, 0x18b84, 0x18b88, 0x18b90, 0x18b9e, 0x18ba0, 0x18bbc, 0x18bc6, - 0x18bcc, 0x18bd8, 0x18bee, 0x18bf2, 0x18bf4, 0x18c22, 0x18c24, 0x18c28, - 0x18c36, 0x18c42, 0x18c48, 0x18c50, 0x18c5e, 0x18c66, 0x18c7a, 0x18c82, - 0x18c84, 0x18c90, 0x18c9e, 0x18ca0, 0x18cbc, 0x18ccc, 0x18cf2, 0x18cf4, - 0x18d04, 0x18d08, 0x18d10, 0x18d1e, 0x18d20, 0x18d3c, 0x18d40, 0x18d78, - 0x18d86, 0x18d98, 0x18dce, 0x18de2, 0x18de4, 0x18de8, 0x18e2e, 0x18e32, - 0x18e34, 0x18e4e, 0x18e5c, 0x18e62, 0x18e64, 0x18e68, 0x18e8e, 0x18e9c, - 0x18eb8, 0x18ec2, 0x18ec4, 0x18ec8, 0x18ed0, 0x18efa, 0x18f16, 0x18f26, - 0x18f2c, 0x18f46, 0x18f4c, 0x18f58, 0x18f6e, 0x18f8a, 0x18f92, 0x18f94, - 0x18fa2, 0x18fa4, 0x18fa8, 0x18fb6, 0x1902c, 0x1903a, 0x19046, 0x1904c, - 0x19058, 0x19072, 0x19074, 0x19086, 0x19098, 0x190b0, 0x190be, 0x190ce, - 0x190dc, 0x190e2, 0x190e8, 0x190f6, 0x19106, 0x1910c, 0x19130, 0x1913e, - 0x19160, 0x1917c, 0x1918e, 0x1919c, 0x191b8, 0x191c2, 0x191c8, 0x191d0, - 0x191de, 0x191e6, 0x191ec, 0x191fa, 0x19218, 0x1923e, 0x19260, 0x1927c, - 0x192c0, 0x192f8, 0x19338, 0x19370, 0x1937e, 0x19382, 0x19384, 0x19390, - 0x1939e, 0x193a0, 0x193bc, 0x193c6, 0x193cc, 0x193d8, 0x193ee, 0x193f2, - 0x193f4, 0x19430, 0x1943e, 0x19460, 0x1947c, 0x194c0, 0x194f8, 0x195f0, - 0x19638, 0x19670, 0x1967e, 0x196e0, 0x196fc, 0x19702, 0x19704, 0x19708, - 0x19710, 0x19720, 0x1973c, 0x19740, 0x19778, 0x19786, 0x1978c, 0x19798, - 0x197b0, 0x197be, 0x197ce, 0x197dc, 0x197e2, 0x197e4, 0x197e8, 0x19822, - 0x19824, 0x19842, 0x19848, 0x19850, 0x1985e, 0x19866, 0x1987a, 0x19882, - 0x19884, 0x19890, 0x1989e, 0x198a0, 0x198bc, 0x198cc, 0x198f2, 0x198f4, - 0x19902, 0x19908, 0x1991e, 0x19920, 0x1993c, 0x19940, 0x19978, 0x19986, - 0x19998, 0x199ce, 0x199e2, 0x199e4, 0x199e8, 0x19a08, 0x19a10, 0x19a1e, - 0x19a20, 0x19a3c, 0x19a40, 0x19a78, 0x19af0, 0x19b18, 0x19b3e, 0x19b60, - 0x19b9c, 0x19bc2, 0x19bc4, 0x19bc8, 0x19bd0, 0x19be6, 0x19c2e, 0x19c34, - 0x19c4e, 0x19c5c, 0x19c62, 0x19c64, 0x19c68, 0x19c8e, 0x19c9c, 0x19cb8, - 0x19cc2, 0x19cc8, 0x19cd0, 0x19ce6, 0x19cfa, 0x19d0e, 0x19d1c, 0x19d38, - 0x19d70, 0x19d7e, 0x19d82, 0x19d84, 0x19d88, 0x19d90, 0x19da0, 0x19dcc, - 0x19df2, 0x19df4, 0x19e16, 0x19e26, 0x19e2c, 0x19e46, 0x19e4c, 0x19e58, - 0x19e74, 0x19e86, 0x19e8c, 0x19e98, 0x19eb0, 0x19ebe, 0x19ece, 0x19ee2, - 0x19ee4, 0x19ee8, 0x19f0a, 0x19f12, 0x19f14, 0x19f22, 0x19f24, 0x19f28, - 0x19f42, 0x19f44, 0x19f48, 0x19f50, 0x19f5e, 0x19f6c, 0x19f9a, 0x19fae, - 0x19fb2, 0x19fb4, 0x1a046, 0x1a04c, 0x1a072, 0x1a074, 0x1a086, 0x1a08c, - 0x1a098, 0x1a0b0, 0x1a0be, 0x1a0e2, 0x1a0e4, 0x1a0e8, 0x1a0f6, 0x1a106, - 0x1a10c, 0x1a118, 0x1a130, 0x1a13e, 0x1a160, 0x1a17c, 0x1a18e, 0x1a19c, - 0x1a1b8, 0x1a1c2, 0x1a1c4, 0x1a1c8, 0x1a1d0, 0x1a1de, 0x1a1e6, 0x1a1ec, - 0x1a218, 0x1a230, 0x1a23e, 0x1a260, 0x1a27c, 0x1a2c0, 0x1a2f8, 0x1a31c, - 0x1a338, 0x1a370, 0x1a37e, 0x1a382, 0x1a384, 0x1a388, 0x1a390, 0x1a39e, - 0x1a3a0, 0x1a3bc, 0x1a3c6, 0x1a3cc, 0x1a3d8, 0x1a3ee, 0x1a3f2, 0x1a3f4, - 0x1a418, 0x1a430, 0x1a43e, 0x1a460, 0x1a47c, 0x1a4c0, 0x1a4f8, 0x1a5f0, - 0x1a61c, 0x1a638, 0x1a670, 0x1a67e, 0x1a6e0, 0x1a6fc, 0x1a702, 0x1a704, - 0x1a708, 0x1a710, 0x1a71e, 0x1a720, 0x1a73c, 0x1a740, 0x1a778, 0x1a786, - 0x1a78c, 0x1a798, 0x1a7b0, 0x1a7be, 0x1a7ce, 0x1a7dc, 0x1a7e2, 0x1a7e4, - 0x1a7e8, 0x1a830, 0x1a860, 0x1a87c, 0x1a8c0, 0x1a8f8, 0x1a9f0, 0x1abe0, - 0x1ac70, 0x1ac7e, 0x1ace0, 0x1acfc, 0x1adc0, 0x1adf8, 0x1ae04, 0x1ae08, - 0x1ae10, 0x1ae20, 0x1ae3c, 0x1ae40, 0x1ae78, 0x1aef0, 0x1af06, 0x1af0c, - 0x1af18, 0x1af30, 0x1af3e, 0x1af60, 0x1af7c, 0x1af8e, 0x1af9c, 0x1afb8, - 0x1afc4, 0x1afc8, 0x1afd0, 0x1afde, 0x1b042, 0x1b05e, 0x1b07a, 0x1b082, - 0x1b084, 0x1b088, 0x1b090, 0x1b09e, 0x1b0a0, 0x1b0bc, 0x1b0cc, 0x1b0f2, - 0x1b0f4, 0x1b102, 0x1b104, 0x1b108, 0x1b110, 0x1b11e, 0x1b120, 0x1b13c, - 0x1b140, 0x1b178, 0x1b186, 0x1b198, 0x1b1ce, 0x1b1e2, 0x1b1e4, 0x1b1e8, - 0x1b204, 0x1b208, 0x1b210, 0x1b21e, 0x1b220, 0x1b23c, 0x1b240, 0x1b278, - 0x1b2f0, 0x1b30c, 0x1b33e, 0x1b360, 0x1b39c, 0x1b3c2, 0x1b3c4, 0x1b3c8, - 0x1b3d0, 0x1b3e6, 0x1b410, 0x1b41e, 0x1b420, 0x1b43c, 0x1b440, 0x1b478, - 0x1b4f0, 0x1b5e0, 0x1b618, 0x1b660, 0x1b67c, 0x1b6c0, 0x1b738, 0x1b782, - 0x1b784, 0x1b788, 0x1b790, 0x1b79e, 0x1b7a0, 0x1b7cc, 0x1b82e, 0x1b84e, - 0x1b85c, 0x1b88e, 0x1b89c, 0x1b8b8, 0x1b8c2, 0x1b8c4, 0x1b8c8, 0x1b8d0, - 0x1b8e6, 0x1b8fa, 0x1b90e, 0x1b91c, 0x1b938, 0x1b970, 0x1b97e, 0x1b982, - 0x1b984, 0x1b988, 0x1b990, 0x1b99e, 0x1b9a0, 0x1b9cc, 0x1b9f2, 0x1b9f4, - 0x1ba0e, 0x1ba1c, 0x1ba38, 0x1ba70, 0x1ba7e, 0x1bae0, 0x1bafc, 0x1bb08, - 0x1bb10, 0x1bb20, 0x1bb3c, 0x1bb40, 0x1bb98, 0x1bbce, 0x1bbe2, 0x1bbe4, - 0x1bbe8, 0x1bc16, 0x1bc26, 0x1bc2c, 0x1bc46, 0x1bc4c, 0x1bc58, 0x1bc72, - 0x1bc74, 0x1bc86, 0x1bc8c, 0x1bc98, 0x1bcb0, 0x1bcbe, 0x1bcce, 0x1bce2, - 0x1bce4, 0x1bce8, 0x1bd06, 0x1bd0c, 0x1bd18, 0x1bd30, 0x1bd3e, 0x1bd60, - 0x1bd7c, 0x1bd9c, 0x1bdc2, 0x1bdc4, 0x1bdc8, 0x1bdd0, 0x1bde6, 0x1bdfa, - 0x1be12, 0x1be14, 0x1be22, 0x1be24, 0x1be28, 0x1be42, 0x1be44, 0x1be48, - 0x1be50, 0x1be5e, 0x1be66, 0x1be82, 0x1be84, 0x1be88, 0x1be90, 0x1be9e, - 0x1bea0, 0x1bebc, 0x1becc, 0x1bef4, 0x1bf1a, 0x1bf2e, 0x1bf32, 0x1bf34, - 0x1bf4e, 0x1bf5c, 0x1bf62, 0x1bf64, 0x1bf68, 0x1c09a, 0x1c0b2, 0x1c0b4, - 0x1c11a, 0x1c132, 0x1c134, 0x1c162, 0x1c164, 0x1c168, 0x1c176, 0x1c1ba, - 0x1c21a, 0x1c232, 0x1c234, 0x1c24e, 0x1c25c, 0x1c262, 0x1c264, 0x1c268, - 0x1c276, 0x1c28e, 0x1c2c2, 0x1c2c4, 0x1c2c8, 0x1c2d0, 0x1c2de, 0x1c2e6, - 0x1c2ec, 0x1c2fa, 0x1c316, 0x1c326, 0x1c33a, 0x1c346, 0x1c34c, 0x1c372, - 0x1c374, 0x1c41a, 0x1c42e, 0x1c432, 0x1c434, 0x1c44e, 0x1c45c, 0x1c462, - 0x1c464, 0x1c468, 0x1c476, 0x1c48e, 0x1c49c, 0x1c4b8, 0x1c4c2, 0x1c4c8, - 0x1c4d0, 0x1c4de, 0x1c4e6, 0x1c4ec, 0x1c4fa, 0x1c51c, 0x1c538, 0x1c570, - 0x1c57e, 0x1c582, 0x1c584, 0x1c588, 0x1c590, 0x1c59e, 0x1c5a0, 0x1c5bc, - 0x1c5c6, 0x1c5cc, 0x1c5d8, 0x1c5ee, 0x1c5f2, 0x1c5f4, 0x1c616, 0x1c626, - 0x1c62c, 0x1c63a, 0x1c646, 0x1c64c, 0x1c658, 0x1c66e, 0x1c672, 0x1c674, - 0x1c686, 0x1c68c, 0x1c698, 0x1c6b0, 0x1c6be, 0x1c6ce, 0x1c6dc, 0x1c6e2, - 0x1c6e4, 0x1c6e8, 0x1c712, 0x1c714, 0x1c722, 0x1c728, 0x1c736, 0x1c742, - 0x1c744, 0x1c748, 0x1c750, 0x1c75e, 0x1c766, 0x1c76c, 0x1c77a, 0x1c7ae, - 0x1c7d6, 0x1c7ea, 0x1c81a, 0x1c82e, 0x1c832, 0x1c834, 0x1c84e, 0x1c85c, - 0x1c862, 0x1c864, 0x1c868, 0x1c876, 0x1c88e, 0x1c89c, 0x1c8b8, 0x1c8c2, - 0x1c8c8, 0x1c8d0, 0x1c8de, 0x1c8e6, 0x1c8ec, 0x1c8fa, 0x1c90e, 0x1c938, - 0x1c970, 0x1c97e, 0x1c982, 0x1c984, 0x1c990, 0x1c99e, 0x1c9a0, 0x1c9bc, - 0x1c9c6, 0x1c9cc, 0x1c9d8, 0x1c9ee, 0x1c9f2, 0x1c9f4, 0x1ca38, 0x1ca70, - 0x1ca7e, 0x1cae0, 0x1cafc, 0x1cb02, 0x1cb04, 0x1cb08, 0x1cb10, 0x1cb20, - 0x1cb3c, 0x1cb40, 0x1cb78, 0x1cb86, 0x1cb8c, 0x1cb98, 0x1cbb0, 0x1cbbe, - 0x1cbce, 0x1cbdc, 0x1cbe2, 0x1cbe4, 0x1cbe8, 0x1cbf6, 0x1cc16, 0x1cc26, - 0x1cc2c, 0x1cc3a, 0x1cc46, 0x1cc58, 0x1cc72, 0x1cc74, 0x1cc86, 0x1ccb0, - 0x1ccbe, 0x1ccce, 0x1cce2, 0x1cce4, 0x1cce8, 0x1cd06, 0x1cd0c, 0x1cd18, - 0x1cd30, 0x1cd3e, 0x1cd60, 0x1cd7c, 0x1cd9c, 0x1cdc2, 0x1cdc4, 0x1cdc8, - 0x1cdd0, 0x1cdde, 0x1cde6, 0x1cdfa, 0x1ce22, 0x1ce28, 0x1ce42, 0x1ce50, - 0x1ce5e, 0x1ce66, 0x1ce7a, 0x1ce82, 0x1ce84, 0x1ce88, 0x1ce90, 0x1ce9e, - 0x1cea0, 0x1cebc, 0x1cecc, 0x1cef2, 0x1cef4, 0x1cf2e, 0x1cf32, 0x1cf34, - 0x1cf4e, 0x1cf5c, 0x1cf62, 0x1cf64, 0x1cf68, 0x1cf96, 0x1cfa6, 0x1cfac, - 0x1cfca, 0x1cfd2, 0x1cfd4, 0x1d02e, 0x1d032, 0x1d034, 0x1d04e, 0x1d05c, - 0x1d062, 0x1d064, 0x1d068, 0x1d076, 0x1d08e, 0x1d09c, 0x1d0b8, 0x1d0c2, - 0x1d0c4, 0x1d0c8, 0x1d0d0, 0x1d0de, 0x1d0e6, 0x1d0ec, 0x1d0fa, 0x1d11c, - 0x1d138, 0x1d170, 0x1d17e, 0x1d182, 0x1d184, 0x1d188, 0x1d190, 0x1d19e, - 0x1d1a0, 0x1d1bc, 0x1d1c6, 0x1d1cc, 0x1d1d8, 0x1d1ee, 0x1d1f2, 0x1d1f4, - 0x1d21c, 0x1d238, 0x1d270, 0x1d27e, 0x1d2e0, 0x1d2fc, 0x1d302, 0x1d304, - 0x1d308, 0x1d310, 0x1d31e, 0x1d320, 0x1d33c, 0x1d340, 0x1d378, 0x1d386, - 0x1d38c, 0x1d398, 0x1d3b0, 0x1d3be, 0x1d3ce, 0x1d3dc, 0x1d3e2, 0x1d3e4, - 0x1d3e8, 0x1d3f6, 0x1d470, 0x1d47e, 0x1d4e0, 0x1d4fc, 0x1d5c0, 0x1d5f8, - 0x1d604, 0x1d608, 0x1d610, 0x1d620, 0x1d640, 0x1d678, 0x1d6f0, 0x1d706, - 0x1d70c, 0x1d718, 0x1d730, 0x1d73e, 0x1d760, 0x1d77c, 0x1d78e, 0x1d79c, - 0x1d7b8, 0x1d7c2, 0x1d7c4, 0x1d7c8, 0x1d7d0, 0x1d7de, 0x1d7e6, 0x1d7ec, - 0x1d826, 0x1d82c, 0x1d83a, 0x1d846, 0x1d84c, 0x1d858, 0x1d872, 0x1d874, - 0x1d886, 0x1d88c, 0x1d898, 0x1d8b0, 0x1d8be, 0x1d8ce, 0x1d8e2, 0x1d8e4, - 0x1d8e8, 0x1d8f6, 0x1d90c, 0x1d918, 0x1d930, 0x1d93e, 0x1d960, 0x1d97c, - 0x1d99c, 0x1d9c2, 0x1d9c4, 0x1d9c8, 0x1d9d0, 0x1d9e6, 0x1d9fa, 0x1da0c, - 0x1da18, 0x1da30, 0x1da3e, 0x1da60, 0x1da7c, 0x1dac0, 0x1daf8, 0x1db38, - 0x1db82, 0x1db84, 0x1db88, 0x1db90, 0x1db9e, 0x1dba0, 0x1dbcc, 0x1dbf2, - 0x1dbf4, 0x1dc22, 0x1dc42, 0x1dc44, 0x1dc48, 0x1dc50, 0x1dc5e, 0x1dc66, - 0x1dc7a, 0x1dc82, 0x1dc84, 0x1dc88, 0x1dc90, 0x1dc9e, 0x1dca0, 0x1dcbc, - 0x1dccc, 0x1dcf2, 0x1dcf4, 0x1dd04, 0x1dd08, 0x1dd10, 0x1dd1e, 0x1dd20, - 0x1dd3c, 0x1dd40, 0x1dd78, 0x1dd86, 0x1dd98, 0x1ddce, 0x1dde2, 0x1dde4, - 0x1dde8, 0x1de2e, 0x1de32, 0x1de34, 0x1de4e, 0x1de5c, 0x1de62, 0x1de64, - 0x1de68, 0x1de8e, 0x1de9c, 0x1deb8, 0x1dec2, 0x1dec4, 0x1dec8, 0x1ded0, - 0x1dee6, 0x1defa, 0x1df16, 0x1df26, 0x1df2c, 0x1df46, 0x1df4c, 0x1df58, - 0x1df72, 0x1df74, 0x1df8a, 0x1df92, 0x1df94, 0x1dfa2, 0x1dfa4, 0x1dfa8, - 0x1e08a, 0x1e092, 0x1e094, 0x1e0a2, 0x1e0a4, 0x1e0a8, 0x1e0b6, 0x1e0da, - 0x1e10a, 0x1e112, 0x1e114, 0x1e122, 0x1e124, 0x1e128, 0x1e136, 0x1e142, - 0x1e144, 0x1e148, 0x1e150, 0x1e166, 0x1e16c, 0x1e17a, 0x1e19a, 0x1e1b2, - 0x1e1b4, 0x1e20a, 0x1e212, 0x1e214, 0x1e222, 0x1e224, 0x1e228, 0x1e236, - 0x1e242, 0x1e248, 0x1e250, 0x1e25e, 0x1e266, 0x1e26c, 0x1e27a, 0x1e282, - 0x1e284, 0x1e288, 0x1e290, 0x1e2a0, 0x1e2bc, 0x1e2c6, 0x1e2cc, 0x1e2d8, - 0x1e2ee, 0x1e2f2, 0x1e2f4, 0x1e31a, 0x1e332, 0x1e334, 0x1e35c, 0x1e362, - 0x1e364, 0x1e368, 0x1e3ba, 0x1e40a, 0x1e412, 0x1e414, 0x1e422, 0x1e428, - 0x1e436, 0x1e442, 0x1e448, 0x1e450, 0x1e45e, 0x1e466, 0x1e46c, 0x1e47a, - 0x1e482, 0x1e484, 0x1e490, 0x1e49e, 0x1e4a0, 0x1e4bc, 0x1e4c6, 0x1e4cc, - 0x1e4d8, 0x1e4ee, 0x1e4f2, 0x1e4f4, 0x1e502, 0x1e504, 0x1e508, 0x1e510, - 0x1e51e, 0x1e520, 0x1e53c, 0x1e540, 0x1e578, 0x1e586, 0x1e58c, 0x1e598, - 0x1e5b0, 0x1e5be, 0x1e5ce, 0x1e5dc, 0x1e5e2, 0x1e5e4, 0x1e5e8, 0x1e5f6, - 0x1e61a, 0x1e62e, 0x1e632, 0x1e634, 0x1e64e, 0x1e65c, 0x1e662, 0x1e668, - 0x1e68e, 0x1e69c, 0x1e6b8, 0x1e6c2, 0x1e6c4, 0x1e6c8, 0x1e6d0, 0x1e6e6, - 0x1e6fa, 0x1e716, 0x1e726, 0x1e72c, 0x1e73a, 0x1e746, 0x1e74c, 0x1e758, - 0x1e772, 0x1e774, 0x1e792, 0x1e794, 0x1e7a2, 0x1e7a4, 0x1e7a8, 0x1e7b6, - 0x1e812, 0x1e814, 0x1e822, 0x1e824, 0x1e828, 0x1e836, 0x1e842, 0x1e844, - 0x1e848, 0x1e850, 0x1e85e, 0x1e866, 0x1e86c, 0x1e87a, 0x1e882, 0x1e884, - 0x1e888, 0x1e890, 0x1e89e, 0x1e8a0, 0x1e8bc, 0x1e8c6, 0x1e8cc, 0x1e8d8, - 0x1e8ee, 0x1e8f2, 0x1e8f4, 0x1e902, 0x1e904, 0x1e908, 0x1e910, 0x1e920, - 0x1e93c, 0x1e940, 0x1e978, 0x1e986, 0x1e98c, 0x1e998, 0x1e9b0, 0x1e9be, - 0x1e9ce, 0x1e9dc, 0x1e9e2, 0x1e9e4, 0x1e9e8, 0x1e9f6, 0x1ea04, 0x1ea08, - 0x1ea10, 0x1ea20, 0x1ea40, 0x1ea78, 0x1eaf0, 0x1eb06, 0x1eb0c, 0x1eb18, - 0x1eb30, 0x1eb3e, 0x1eb60, 0x1eb7c, 0x1eb8e, 0x1eb9c, 0x1ebb8, 0x1ebc2, - 0x1ebc4, 0x1ebc8, 0x1ebd0, 0x1ebde, 0x1ebe6, 0x1ebec, 0x1ec1a, 0x1ec2e, - 0x1ec32, 0x1ec34, 0x1ec4e, 0x1ec5c, 0x1ec62, 0x1ec64, 0x1ec68, 0x1ec8e, - 0x1ec9c, 0x1ecb8, 0x1ecc2, 0x1ecc4, 0x1ecc8, 0x1ecd0, 0x1ece6, 0x1ecfa, - 0x1ed0e, 0x1ed1c, 0x1ed38, 0x1ed70, 0x1ed7e, 0x1ed82, 0x1ed84, 0x1ed88, - 0x1ed90, 0x1ed9e, 0x1eda0, 0x1edcc, 0x1edf2, 0x1edf4, 0x1ee16, 0x1ee26, - 0x1ee2c, 0x1ee3a, 0x1ee46, 0x1ee4c, 0x1ee58, 0x1ee6e, 0x1ee72, 0x1ee74, - 0x1ee86, 0x1ee8c, 0x1ee98, 0x1eeb0, 0x1eebe, 0x1eece, 0x1eedc, 0x1eee2, - 0x1eee4, 0x1eee8, 0x1ef12, 0x1ef22, 0x1ef24, 0x1ef28, 0x1ef36, 0x1ef42, - 0x1ef44, 0x1ef48, 0x1ef50, 0x1ef5e, 0x1ef66, 0x1ef6c, 0x1ef7a, 0x1efae, - 0x1efb2, 0x1efb4, 0x1efd6, 0x1f096, 0x1f0a6, 0x1f0ac, 0x1f0ba, 0x1f0ca, - 0x1f0d2, 0x1f0d4, 0x1f116, 0x1f126, 0x1f12c, 0x1f13a, 0x1f146, 0x1f14c, - 0x1f158, 0x1f16e, 0x1f172, 0x1f174, 0x1f18a, 0x1f192, 0x1f194, 0x1f1a2, - 0x1f1a4, 0x1f1a8, 0x1f1da, 0x1f216, 0x1f226, 0x1f22c, 0x1f23a, 0x1f246, - 0x1f258, 0x1f26e, 0x1f272, 0x1f274, 0x1f286, 0x1f28c, 0x1f298, 0x1f2b0, - 0x1f2be, 0x1f2ce, 0x1f2dc, 0x1f2e2, 0x1f2e4, 0x1f2e8, 0x1f2f6, 0x1f30a, - 0x1f312, 0x1f314, 0x1f322, 0x1f328, 0x1f342, 0x1f344, 0x1f348, 0x1f350, - 0x1f35e, 0x1f366, 0x1f37a, 0x1f39a, 0x1f3ae, 0x1f3b2, 0x1f3b4, 0x1f416, - 0x1f426, 0x1f42c, 0x1f43a, 0x1f446, 0x1f44c, 0x1f458, 0x1f46e, 0x1f472, - 0x1f474, 0x1f486, 0x1f48c, 0x1f498, 0x1f4b0, 0x1f4be, 0x1f4ce, 0x1f4dc, - 0x1f4e2, 0x1f4e4, 0x1f4e8, 0x1f4f6, 0x1f506, 0x1f50c, 0x1f518, 0x1f530, - 0x1f53e, 0x1f560, 0x1f57c, 0x1f58e, 0x1f59c, 0x1f5b8, 0x1f5c2, 0x1f5c4, - 0x1f5c8, 0x1f5d0, 0x1f5de, 0x1f5e6, 0x1f5ec, 0x1f5fa, 0x1f60a, 0x1f612, - 0x1f614, 0x1f622, 0x1f624, 0x1f628, 0x1f636, 0x1f642, 0x1f644, 0x1f648, - 0x1f650, 0x1f65e, 0x1f666, 0x1f67a, 0x1f682, 0x1f684, 0x1f688, 0x1f690, - 0x1f69e, 0x1f6a0, 0x1f6bc, 0x1f6cc, 0x1f6f2, 0x1f6f4, 0x1f71a, 0x1f72e, - 0x1f732, 0x1f734, 0x1f74e, 0x1f75c, 0x1f762, 0x1f764, 0x1f768, 0x1f776, - 0x1f796, 0x1f7a6, 0x1f7ac, 0x1f7ba, 0x1f7d2, 0x1f7d4, 0x1f89a, 0x1f8ae, - 0x1f8b2, 0x1f8b4, 0x1f8d6, 0x1f8ea, 0x1f91a, 0x1f92e, 0x1f932, 0x1f934, - 0x1f94e, 0x1f95c, 0x1f962, 0x1f964, 0x1f968, 0x1f976, 0x1f996, 0x1f9a6, - 0x1f9ac, 0x1f9ba, 0x1f9ca, 0x1f9d2, 0x1f9d4, 0x1fa1a, 0x1fa2e, 0x1fa32, - 0x1fa34, 0x1fa4e, 0x1fa5c, 0x1fa62, 0x1fa64, 0x1fa68, 0x1fa76, 0x1fa8e, - 0x1fa9c, 0x1fab8, 0x1fac2, 0x1fac4, 0x1fac8, 0x1fad0, 0x1fade, 0x1fae6, - 0x1faec, 0x1fb16, 0x1fb26, 0x1fb2c, 0x1fb3a, 0x1fb46, 0x1fb4c, 0x1fb58, - 0x1fb6e, 0x1fb72, 0x1fb74, 0x1fb8a, 0x1fb92, 0x1fb94, 0x1fba2, 0x1fba4, - 0x1fba8, 0x1fbb6, 0x1fbda}; -int32_t CBC_PDF417Common::CODEWORD_TABLE[] = { - 2627, 1819, 2622, 2621, 1813, 1812, 2729, 2724, 2723, 2779, 2774, 2773, - 902, 896, 908, 868, 865, 861, 859, 2511, 873, 871, 1780, 835, - 2493, 825, 2491, 842, 837, 844, 1764, 1762, 811, 810, 809, 2483, - 807, 2482, 806, 2480, 815, 814, 813, 812, 2484, 817, 816, 1745, - 1744, 1742, 1746, 2655, 2637, 2635, 2626, 2625, 2623, 2628, 1820, 2752, - 2739, 2737, 2728, 2727, 2725, 2730, 2785, 2783, 2778, 2777, 2775, 2780, - 787, 781, 747, 739, 736, 2413, 754, 752, 1719, 692, 689, 681, - 2371, 678, 2369, 700, 697, 694, 703, 1688, 1686, 642, 638, 2343, - 631, 2341, 627, 2338, 651, 646, 643, 2345, 654, 652, 1652, 1650, - 1647, 1654, 601, 599, 2322, 596, 2321, 594, 2319, 2317, 611, 610, - 608, 606, 2324, 603, 2323, 615, 614, 612, 1617, 1616, 1614, 1612, - 616, 1619, 1618, 2575, 2538, 2536, 905, 901, 898, 909, 2509, 2507, - 2504, 870, 867, 864, 860, 2512, 875, 872, 1781, 2490, 2489, 2487, - 2485, 1748, 836, 834, 832, 830, 2494, 827, 2492, 843, 841, 839, - 845, 1765, 1763, 2701, 2676, 2674, 2653, 2648, 2656, 2634, 2633, 2631, - 2629, 1821, 2638, 2636, 2770, 2763, 2761, 2750, 2745, 2753, 2736, 2735, - 2733, 2731, 1848, 2740, 2738, 2786, 2784, 591, 588, 576, 569, 566, - 2296, 1590, 537, 534, 526, 2276, 522, 2274, 545, 542, 539, 548, - 1572, 1570, 481, 2245, 466, 2242, 462, 2239, 492, 485, 482, 2249, - 496, 494, 1534, 1531, 1528, 1538, 413, 2196, 406, 2191, 2188, 425, - 419, 2202, 415, 2199, 432, 430, 427, 1472, 1467, 1464, 433, 1476, - 1474, 368, 367, 2160, 365, 2159, 362, 2157, 2155, 2152, 378, 377, - 375, 2166, 372, 2165, 369, 2162, 383, 381, 379, 2168, 1419, 1418, - 1416, 1414, 385, 1411, 384, 1423, 1422, 1420, 1424, 2461, 802, 2441, - 2439, 790, 786, 783, 794, 2409, 2406, 2403, 750, 742, 738, 2414, - 756, 753, 1720, 2367, 2365, 2362, 2359, 1663, 693, 691, 684, 2373, - 680, 2370, 702, 699, 696, 704, 1690, 1687, 2337, 2336, 2334, 2332, - 1624, 2329, 1622, 640, 637, 2344, 634, 2342, 630, 2340, 650, 648, - 645, 2346, 655, 653, 1653, 1651, 1649, 1655, 2612, 2597, 2595, 2571, - 2568, 2565, 2576, 2534, 2529, 2526, 1787, 2540, 2537, 907, 904, 900, - 910, 2503, 2502, 2500, 2498, 1768, 2495, 1767, 2510, 2508, 2506, 869, - 866, 863, 2513, 876, 874, 1782, 2720, 2713, 2711, 2697, 2694, 2691, - 2702, 2672, 2670, 2664, 1828, 2678, 2675, 2647, 2646, 2644, 2642, 1823, - 2639, 1822, 2654, 2652, 2650, 2657, 2771, 1855, 2765, 2762, 1850, 1849, - 2751, 2749, 2747, 2754, 353, 2148, 344, 342, 336, 2142, 332, 2140, - 345, 1375, 1373, 306, 2130, 299, 2128, 295, 2125, 319, 314, 311, - 2132, 1354, 1352, 1349, 1356, 262, 257, 2101, 253, 2096, 2093, 274, - 273, 267, 2107, 263, 2104, 280, 278, 275, 1316, 1311, 1308, 1320, - 1318, 2052, 202, 2050, 2044, 2040, 219, 2063, 212, 2060, 208, 2055, - 224, 221, 2066, 1260, 1258, 1252, 231, 1248, 229, 1266, 1264, 1261, - 1268, 155, 1998, 153, 1996, 1994, 1991, 1988, 165, 164, 2007, 162, - 2006, 159, 2003, 2000, 172, 171, 169, 2012, 166, 2010, 1186, 1184, - 1182, 1179, 175, 1176, 173, 1192, 1191, 1189, 1187, 176, 1194, 1193, - 2313, 2307, 2305, 592, 589, 2294, 2292, 2289, 578, 572, 568, 2297, - 580, 1591, 2272, 2267, 2264, 1547, 538, 536, 529, 2278, 525, 2275, - 547, 544, 541, 1574, 1571, 2237, 2235, 2229, 1493, 2225, 1489, 478, - 2247, 470, 2244, 465, 2241, 493, 488, 484, 2250, 498, 495, 1536, - 1533, 1530, 1539, 2187, 2186, 2184, 2182, 1432, 2179, 1430, 2176, 1427, - 414, 412, 2197, 409, 2195, 405, 2193, 2190, 426, 424, 421, 2203, - 418, 2201, 431, 429, 1473, 1471, 1469, 1466, 434, 1477, 1475, 2478, - 2472, 2470, 2459, 2457, 2454, 2462, 803, 2437, 2432, 2429, 1726, 2443, - 2440, 792, 789, 785, 2401, 2399, 2393, 1702, 2389, 1699, 2411, 2408, - 2405, 745, 741, 2415, 758, 755, 1721, 2358, 2357, 2355, 2353, 1661, - 2350, 1660, 2347, 1657, 2368, 2366, 2364, 2361, 1666, 690, 687, 2374, - 683, 2372, 701, 698, 705, 1691, 1689, 2619, 2617, 2610, 2608, 2605, - 2613, 2593, 2588, 2585, 1803, 2599, 2596, 2563, 2561, 2555, 1797, 2551, - 1795, 2573, 2570, 2567, 2577, 2525, 2524, 2522, 2520, 1786, 2517, 1785, - 2514, 1783, 2535, 2533, 2531, 2528, 1788, 2541, 2539, 906, 903, 911, - 2721, 1844, 2715, 2712, 1838, 1836, 2699, 2696, 2693, 2703, 1827, 1826, - 1824, 2673, 2671, 2669, 2666, 1829, 2679, 2677, 1858, 1857, 2772, 1854, - 1853, 1851, 1856, 2766, 2764, 143, 1987, 139, 1986, 135, 133, 131, - 1984, 128, 1983, 125, 1981, 138, 137, 136, 1985, 1133, 1132, 1130, - 112, 110, 1974, 107, 1973, 104, 1971, 1969, 122, 121, 119, 117, - 1977, 114, 1976, 124, 1115, 1114, 1112, 1110, 1117, 1116, 84, 83, - 1953, 81, 1952, 78, 1950, 1948, 1945, 94, 93, 91, 1959, 88, - 1958, 85, 1955, 99, 97, 95, 1961, 1086, 1085, 1083, 1081, 1078, - 100, 1090, 1089, 1087, 1091, 49, 47, 1917, 44, 1915, 1913, 1910, - 1907, 59, 1926, 56, 1925, 53, 1922, 1919, 66, 64, 1931, 61, - 1929, 1042, 1040, 1038, 71, 1035, 70, 1032, 68, 1048, 1047, 1045, - 1043, 1050, 1049, 12, 10, 1869, 1867, 1864, 1861, 21, 1880, 19, - 1877, 1874, 1871, 28, 1888, 25, 1886, 22, 1883, 982, 980, 977, - 974, 32, 30, 991, 989, 987, 984, 34, 995, 994, 992, 2151, - 2150, 2147, 2146, 2144, 356, 355, 354, 2149, 2139, 2138, 2136, 2134, - 1359, 343, 341, 338, 2143, 335, 2141, 348, 347, 346, 1376, 1374, - 2124, 2123, 2121, 2119, 1326, 2116, 1324, 310, 308, 305, 2131, 302, - 2129, 298, 2127, 320, 318, 316, 313, 2133, 322, 321, 1355, 1353, - 1351, 1357, 2092, 2091, 2089, 2087, 1276, 2084, 1274, 2081, 1271, 259, - 2102, 256, 2100, 252, 2098, 2095, 272, 269, 2108, 266, 2106, 281, - 279, 277, 1317, 1315, 1313, 1310, 282, 1321, 1319, 2039, 2037, 2035, - 2032, 1203, 2029, 1200, 1197, 207, 2053, 205, 2051, 201, 2049, 2046, - 2043, 220, 218, 2064, 215, 2062, 211, 2059, 228, 226, 223, 2069, - 1259, 1257, 1254, 232, 1251, 230, 1267, 1265, 1263, 2316, 2315, 2312, - 2311, 2309, 2314, 2304, 2303, 2301, 2299, 1593, 2308, 2306, 590, 2288, - 2287, 2285, 2283, 1578, 2280, 1577, 2295, 2293, 2291, 579, 577, 574, - 571, 2298, 582, 581, 1592, 2263, 2262, 2260, 2258, 1545, 2255, 1544, - 2252, 1541, 2273, 2271, 2269, 2266, 1550, 535, 532, 2279, 528, 2277, - 546, 543, 549, 1575, 1573, 2224, 2222, 2220, 1486, 2217, 1485, 2214, - 1482, 1479, 2238, 2236, 2234, 2231, 1496, 2228, 1492, 480, 477, 2248, - 473, 2246, 469, 2243, 490, 487, 2251, 497, 1537, 1535, 1532, 2477, - 2476, 2474, 2479, 2469, 2468, 2466, 2464, 1730, 2473, 2471, 2453, 2452, - 2450, 2448, 1729, 2445, 1728, 2460, 2458, 2456, 2463, 805, 804, 2428, - 2427, 2425, 2423, 1725, 2420, 1724, 2417, 1722, 2438, 2436, 2434, 2431, - 1727, 2444, 2442, 793, 791, 788, 795, 2388, 2386, 2384, 1697, 2381, - 1696, 2378, 1694, 1692, 2402, 2400, 2398, 2395, 1703, 2392, 1701, 2412, - 2410, 2407, 751, 748, 744, 2416, 759, 757, 1807, 2620, 2618, 1806, - 1805, 2611, 2609, 2607, 2614, 1802, 1801, 1799, 2594, 2592, 2590, 2587, - 1804, 2600, 2598, 1794, 1793, 1791, 1789, 2564, 2562, 2560, 2557, 1798, - 2554, 1796, 2574, 2572, 2569, 2578, 1847, 1846, 2722, 1843, 1842, 1840, - 1845, 2716, 2714, 1835, 1834, 1832, 1830, 1839, 1837, 2700, 2698, 2695, - 2704, 1817, 1811, 1810, 897, 862, 1777, 829, 826, 838, 1760, 1758, - 808, 2481, 1741, 1740, 1738, 1743, 2624, 1818, 2726, 2776, 782, 740, - 737, 1715, 686, 679, 695, 1682, 1680, 639, 628, 2339, 647, 644, - 1645, 1643, 1640, 1648, 602, 600, 597, 595, 2320, 593, 2318, 609, - 607, 604, 1611, 1610, 1608, 1606, 613, 1615, 1613, 2328, 926, 924, - 892, 886, 899, 857, 850, 2505, 1778, 824, 823, 821, 819, 2488, - 818, 2486, 833, 831, 828, 840, 1761, 1759, 2649, 2632, 2630, 2746, - 2734, 2732, 2782, 2781, 570, 567, 1587, 531, 527, 523, 540, 1566, - 1564, 476, 467, 463, 2240, 486, 483, 1524, 1521, 1518, 1529, 411, - 403, 2192, 399, 2189, 423, 416, 1462, 1457, 1454, 428, 1468, 1465, - 2210, 366, 363, 2158, 360, 2156, 357, 2153, 376, 373, 370, 2163, - 1410, 1409, 1407, 1405, 382, 1402, 380, 1417, 1415, 1412, 1421, 2175, - 2174, 777, 774, 771, 784, 732, 725, 722, 2404, 743, 1716, 676, - 674, 668, 2363, 665, 2360, 685, 1684, 1681, 626, 624, 622, 2335, - 620, 2333, 617, 2330, 641, 635, 649, 1646, 1644, 1642, 2566, 928, - 925, 2530, 2527, 894, 891, 888, 2501, 2499, 2496, 858, 856, 854, - 851, 1779, 2692, 2668, 2665, 2645, 2643, 2640, 2651, 2768, 2759, 2757, - 2744, 2743, 2741, 2748, 352, 1382, 340, 337, 333, 1371, 1369, 307, - 300, 296, 2126, 315, 312, 1347, 1342, 1350, 261, 258, 250, 2097, - 246, 2094, 271, 268, 264, 1306, 1301, 1298, 276, 1312, 1309, 2115, - 203, 2048, 195, 2045, 191, 2041, 213, 209, 2056, 1246, 1244, 1238, - 225, 1234, 222, 1256, 1253, 1249, 1262, 2080, 2079, 154, 1997, 150, - 1995, 147, 1992, 1989, 163, 160, 2004, 156, 2001, 1175, 1174, 1172, - 1170, 1167, 170, 1164, 167, 1185, 1183, 1180, 1177, 174, 1190, 1188, - 2025, 2024, 2022, 587, 586, 564, 559, 556, 2290, 573, 1588, 520, - 518, 512, 2268, 508, 2265, 530, 1568, 1565, 461, 457, 2233, 450, - 2230, 446, 2226, 479, 471, 489, 1526, 1523, 1520, 397, 395, 2185, - 392, 2183, 389, 2180, 2177, 410, 2194, 402, 422, 1463, 1461, 1459, - 1456, 1470, 2455, 799, 2433, 2430, 779, 776, 773, 2397, 2394, 2390, - 734, 728, 724, 746, 1717, 2356, 2354, 2351, 2348, 1658, 677, 675, - 673, 670, 667, 688, 1685, 1683, 2606, 2589, 2586, 2559, 2556, 2552, - 927, 2523, 2521, 2518, 2515, 1784, 2532, 895, 893, 890, 2718, 2709, - 2707, 2689, 2687, 2684, 2663, 2662, 2660, 2658, 1825, 2667, 2769, 1852, - 2760, 2758, 142, 141, 1139, 1138, 134, 132, 129, 126, 1982, 1129, - 1128, 1126, 1131, 113, 111, 108, 105, 1972, 101, 1970, 120, 118, - 115, 1109, 1108, 1106, 1104, 123, 1113, 1111, 82, 79, 1951, 75, - 1949, 72, 1946, 92, 89, 86, 1956, 1077, 1076, 1074, 1072, 98, - 1069, 96, 1084, 1082, 1079, 1088, 1968, 1967, 48, 45, 1916, 42, - 1914, 39, 1911, 1908, 60, 57, 54, 1923, 50, 1920, 1031, 1030, - 1028, 1026, 67, 1023, 65, 1020, 62, 1041, 1039, 1036, 1033, 69, - 1046, 1044, 1944, 1943, 1941, 11, 9, 1868, 7, 1865, 1862, 1859, - 20, 1878, 16, 1875, 13, 1872, 970, 968, 966, 963, 29, 960, - 26, 23, 983, 981, 978, 975, 33, 971, 31, 990, 988, 985, - 1906, 1904, 1902, 993, 351, 2145, 1383, 331, 330, 328, 326, 2137, - 323, 2135, 339, 1372, 1370, 294, 293, 291, 289, 2122, 286, 2120, - 283, 2117, 309, 303, 317, 1348, 1346, 1344, 245, 244, 242, 2090, - 239, 2088, 236, 2085, 2082, 260, 2099, 249, 270, 1307, 1305, 1303, - 1300, 1314, 189, 2038, 186, 2036, 183, 2033, 2030, 2026, 206, 198, - 2047, 194, 216, 1247, 1245, 1243, 1240, 227, 1237, 1255, 2310, 2302, - 2300, 2286, 2284, 2281, 565, 563, 561, 558, 575, 1589, 2261, 2259, - 2256, 2253, 1542, 521, 519, 517, 514, 2270, 511, 533, 1569, 1567, - 2223, 2221, 2218, 2215, 1483, 2211, 1480, 459, 456, 453, 2232, 449, - 474, 491, 1527, 1525, 1522, 2475, 2467, 2465, 2451, 2449, 2446, 801, - 800, 2426, 2424, 2421, 2418, 1723, 2435, 780, 778, 775, 2387, 2385, - 2382, 2379, 1695, 2375, 1693, 2396, 735, 733, 730, 727, 749, 1718, - 2616, 2615, 2604, 2603, 2601, 2584, 2583, 2581, 2579, 1800, 2591, 2550, - 2549, 2547, 2545, 1792, 2542, 1790, 2558, 929, 2719, 1841, 2710, 2708, - 1833, 1831, 2690, 2688, 2686, 1815, 1809, 1808, 1774, 1756, 1754, 1737, - 1736, 1734, 1739, 1816, 1711, 1676, 1674, 633, 629, 1638, 1636, 1633, - 1641, 598, 1605, 1604, 1602, 1600, 605, 1609, 1607, 2327, 887, 853, - 1775, 822, 820, 1757, 1755, 1584, 524, 1560, 1558, 468, 464, 1514, - 1511, 1508, 1519, 408, 404, 400, 1452, 1447, 1444, 417, 1458, 1455, - 2208, 364, 361, 358, 2154, 1401, 1400, 1398, 1396, 374, 1393, 371, - 1408, 1406, 1403, 1413, 2173, 2172, 772, 726, 723, 1712, 672, 669, - 666, 682, 1678, 1675, 625, 623, 621, 618, 2331, 636, 632, 1639, - 1637, 1635, 920, 918, 884, 880, 889, 849, 848, 847, 846, 2497, - 855, 852, 1776, 2641, 2742, 2787, 1380, 334, 1367, 1365, 301, 297, - 1340, 1338, 1335, 1343, 255, 251, 247, 1296, 1291, 1288, 265, 1302, - 1299, 2113, 204, 196, 192, 2042, 1232, 1230, 1224, 214, 1220, 210, - 1242, 1239, 1235, 1250, 2077, 2075, 151, 148, 1993, 144, 1990, 1163, - 1162, 1160, 1158, 1155, 161, 1152, 157, 1173, 1171, 1168, 1165, 168, - 1181, 1178, 2021, 2020, 2018, 2023, 585, 560, 557, 1585, 516, 509, - 1562, 1559, 458, 447, 2227, 472, 1516, 1513, 1510, 398, 396, 393, - 390, 2181, 386, 2178, 407, 1453, 1451, 1449, 1446, 420, 1460, 2209, - 769, 764, 720, 712, 2391, 729, 1713, 664, 663, 661, 659, 2352, - 656, 2349, 671, 1679, 1677, 2553, 922, 919, 2519, 2516, 885, 883, - 881, 2685, 2661, 2659, 2767, 2756, 2755, 140, 1137, 1136, 130, 127, - 1125, 1124, 1122, 1127, 109, 106, 102, 1103, 1102, 1100, 1098, 116, - 1107, 1105, 1980, 80, 76, 73, 1947, 1068, 1067, 1065, 1063, 90, - 1060, 87, 1075, 1073, 1070, 1080, 1966, 1965, 46, 43, 40, 1912, - 36, 1909, 1019, 1018, 1016, 1014, 58, 1011, 55, 1008, 51, 1029, - 1027, 1024, 1021, 63, 1037, 1034, 1940, 1939, 1937, 1942, 8, 1866, - 4, 1863, 1, 1860, 956, 954, 952, 949, 946, 17, 14, 969, - 967, 964, 961, 27, 957, 24, 979, 976, 972, 1901, 1900, 1898, - 1896, 986, 1905, 1903, 350, 349, 1381, 329, 327, 324, 1368, 1366, - 292, 290, 287, 284, 2118, 304, 1341, 1339, 1337, 1345, 243, 240, - 237, 2086, 233, 2083, 254, 1297, 1295, 1293, 1290, 1304, 2114, 190, - 187, 184, 2034, 180, 2031, 177, 2027, 199, 1233, 1231, 1229, 1226, - 217, 1223, 1241, 2078, 2076, 584, 555, 554, 552, 550, 2282, 562, - 1586, 507, 506, 504, 502, 2257, 499, 2254, 515, 1563, 1561, 445, - 443, 441, 2219, 438, 2216, 435, 2212, 460, 454, 475, 1517, 1515, - 1512, 2447, 798, 797, 2422, 2419, 770, 768, 766, 2383, 2380, 2376, - 721, 719, 717, 714, 731, 1714, 2602, 2582, 2580, 2548, 2546, 2543, - 923, 921, 2717, 2706, 2705, 2683, 2682, 2680, 1771, 1752, 1750, 1733, - 1732, 1731, 1735, 1814, 1707, 1670, 1668, 1631, 1629, 1626, 1634, 1599, - 1598, 1596, 1594, 1603, 1601, 2326, 1772, 1753, 1751, 1581, 1554, 1552, - 1504, 1501, 1498, 1509, 1442, 1437, 1434, 401, 1448, 1445, 2206, 1392, - 1391, 1389, 1387, 1384, 359, 1399, 1397, 1394, 1404, 2171, 2170, 1708, - 1672, 1669, 619, 1632, 1630, 1628, 1773, 1378, 1363, 1361, 1333, 1328, - 1336, 1286, 1281, 1278, 248, 1292, 1289, 2111, 1218, 1216, 1210, 197, - 1206, 193, 1228, 1225, 1221, 1236, 2073, 2071, 1151, 1150, 1148, 1146, - 152, 1143, 149, 1140, 145, 1161, 1159, 1156, 1153, 158, 1169, 1166, - 2017, 2016, 2014, 2019, 1582, 510, 1556, 1553, 452, 448, 1506, 1500, - 394, 391, 387, 1443, 1441, 1439, 1436, 1450, 2207, 765, 716, 713, - 1709, 662, 660, 657, 1673, 1671, 916, 914, 879, 878, 877, 882, - 1135, 1134, 1121, 1120, 1118, 1123, 1097, 1096, 1094, 1092, 103, 1101, - 1099, 1979, 1059, 1058, 1056, 1054, 77, 1051, 74, 1066, 1064, 1061, - 1071, 1964, 1963, 1007, 1006, 1004, 1002, 999, 41, 996, 37, 1017, - 1015, 1012, 1009, 52, 1025, 1022, 1936, 1935, 1933, 1938, 942, 940, - 938, 935, 932, 5, 2, 955, 953, 950, 947, 18, 943, 15, - 965, 962, 958, 1895, 1894, 1892, 1890, 973, 1899, 1897, 1379, 325, - 1364, 1362, 288, 285, 1334, 1332, 1330, 241, 238, 234, 1287, 1285, - 1283, 1280, 1294, 2112, 188, 185, 181, 178, 2028, 1219, 1217, 1215, - 1212, 200, 1209, 1227, 2074, 2072, 583, 553, 551, 1583, 505, 503, - 500, 513, 1557, 1555, 444, 442, 439, 436, 2213, 455, 451, 1507, - 1505, 1502, 796, 763, 762, 760, 767, 711, 710, 708, 706, 2377, - 718, 715, 1710, 2544, 917, 915, 2681, 1627, 1597, 1595, 2325, 1769, - 1749, 1747, 1499, 1438, 1435, 2204, 1390, 1388, 1385, 1395, 2169, 2167, - 1704, 1665, 1662, 1625, 1623, 1620, 1770, 1329, 1282, 1279, 2109, 1214, - 1207, 1222, 2068, 2065, 1149, 1147, 1144, 1141, 146, 1157, 1154, 2013, - 2011, 2008, 2015, 1579, 1549, 1546, 1495, 1487, 1433, 1431, 1428, 1425, - 388, 1440, 2205, 1705, 658, 1667, 1664, 1119, 1095, 1093, 1978, 1057, - 1055, 1052, 1062, 1962, 1960, 1005, 1003, 1000, 997, 38, 1013, 1010, - 1932, 1930, 1927, 1934, 941, 939, 936, 933, 6, 930, 3, 951, - 948, 944, 1889, 1887, 1884, 1881, 959, 1893, 1891, 35, 1377, 1360, - 1358, 1327, 1325, 1322, 1331, 1277, 1275, 1272, 1269, 235, 1284, 2110, - 1205, 1204, 1201, 1198, 182, 1195, 179, 1213, 2070, 2067, 1580, 501, - 1551, 1548, 440, 437, 1497, 1494, 1490, 1503, 761, 709, 707, 1706, - 913, 912, 2198, 1386, 2164, 2161, 1621, 1766, 2103, 1208, 2058, 2054, - 1145, 1142, 2005, 2002, 1999, 2009, 1488, 1429, 1426, 2200, 1698, 1659, - 1656, 1975, 1053, 1957, 1954, 1001, 998, 1924, 1921, 1918, 1928, 937, - 934, 931, 1879, 1876, 1873, 1870, 945, 1885, 1882, 1323, 1273, 1270, - 2105, 1202, 1199, 1196, 1211, 2061, 2057, 1576, 1543, 1540, 1484, 1481, - 1478, 1491, 1700}; - -CBC_PDF417Common::CBC_PDF417Common() {} -CBC_PDF417Common::~CBC_PDF417Common() {} -int32_t CBC_PDF417Common::getBitCountSum(CFX_Int32Array& moduleBitCount) { - int32_t bitCountSum = 0; - for (int32_t i = 0; i < moduleBitCount.GetSize(); i++) { - int32_t count = moduleBitCount.GetAt(i); - bitCountSum += count; - } - return bitCountSum; -} -int32_t CBC_PDF417Common::getCodeword(FX_DWORD symbol) { - FX_DWORD sym = symbol & 0x3FFFF; - int32_t i = findCodewordIndex(sym); - if (i == -1) { - return -1; - } - return (CODEWORD_TABLE[i] - 1) % NUMBER_OF_CODEWORDS; -} -int32_t CBC_PDF417Common::findCodewordIndex(FX_DWORD symbol) { - int32_t first = 0; - int32_t upto = sizeof(SYMBOL_TABLE) / sizeof(SYMBOL_TABLE[0]); - while (first < upto) { - int32_t mid = ((FX_DWORD)(first + upto)) >> 1; - if (symbol < (FX_DWORD)SYMBOL_TABLE[mid]) { - upto = mid; - } else if (symbol > (FX_DWORD)SYMBOL_TABLE[mid]) { - first = mid + 1; - } else { - return mid; - } - } - return -1; -} diff --git a/xfa/src/fxbarcode/pdf417/BC_PDF417Common.h b/xfa/src/fxbarcode/pdf417/BC_PDF417Common.h deleted file mode 100644 index f145b25383..0000000000 --- a/xfa/src/fxbarcode/pdf417/BC_PDF417Common.h +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_PDF417_BC_PDF417COMMON_H_ -#define XFA_SRC_FXBARCODE_PDF417_BC_PDF417COMMON_H_ - -#include "core/include/fxcrt/fx_basic.h" - -class CBC_PDF417Common { - public: - CBC_PDF417Common(); - virtual ~CBC_PDF417Common(); - static int32_t getBitCountSum(CFX_Int32Array& moduleBitCount); - static int32_t getCodeword(FX_DWORD symbol); - static int32_t NUMBER_OF_CODEWORDS; - static int32_t MAX_CODEWORDS_IN_BARCODE; - static int32_t MIN_ROWS_IN_BARCODE; - static int32_t MAX_ROWS_IN_BARCODE; - static int32_t MAX_CODEWORDS_IN_ROW; - static int32_t MODULES_IN_CODEWORD; - static int32_t MODULES_IN_STOP_PATTERN; - static int32_t BARS_IN_MODULE; - static int32_t SYMBOL_TABLE[]; - static int32_t CODEWORD_TABLE[]; - - private: - static CFX_Int32Array* EMPTY_INT_ARRAY; - static int32_t findCodewordIndex(FX_DWORD symbol); -}; - -#endif // XFA_SRC_FXBARCODE_PDF417_BC_PDF417COMMON_H_ diff --git a/xfa/src/fxbarcode/pdf417/BC_PDF417Compaction.cpp b/xfa/src/fxbarcode/pdf417/BC_PDF417Compaction.cpp deleted file mode 100644 index 01e85d64c0..0000000000 --- a/xfa/src/fxbarcode/pdf417/BC_PDF417Compaction.cpp +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2011 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/pdf417/BC_PDF417Compaction.h" - -CBC_Compaction::CBC_Compaction() {} -CBC_Compaction::~CBC_Compaction() {} diff --git a/xfa/src/fxbarcode/pdf417/BC_PDF417Compaction.h b/xfa/src/fxbarcode/pdf417/BC_PDF417Compaction.h deleted file mode 100644 index 4c60e2d841..0000000000 --- a/xfa/src/fxbarcode/pdf417/BC_PDF417Compaction.h +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_PDF417_BC_PDF417COMPACTION_H_ -#define XFA_SRC_FXBARCODE_PDF417_BC_PDF417COMPACTION_H_ - -class CBC_Compaction; -enum Compaction { AUTO, TEXT, BYTES, NUMERIC }; -class CBC_Compaction { - public: - CBC_Compaction(); - virtual ~CBC_Compaction(); -}; - -#endif // XFA_SRC_FXBARCODE_PDF417_BC_PDF417COMPACTION_H_ diff --git a/xfa/src/fxbarcode/pdf417/BC_PDF417DecodedBitStreamParser.cpp b/xfa/src/fxbarcode/pdf417/BC_PDF417DecodedBitStreamParser.cpp deleted file mode 100644 index 7a04fddebe..0000000000 --- a/xfa/src/fxbarcode/pdf417/BC_PDF417DecodedBitStreamParser.cpp +++ /dev/null @@ -1,493 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2009 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/pdf417/BC_PDF417DecodedBitStreamParser.h" - -#include - -#include "third_party/bigint/BigIntegerLibrary.hh" -#include "xfa/src/fxbarcode/BC_DecoderResult.h" -#include "xfa/src/fxbarcode/common/BC_CommonDecoderResult.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417ResultMetadata.h" -#include "xfa/src/fxbarcode/utils.h" - -#define TEXT_COMPACTION_MODE_LATCH 900 -#define BYTE_COMPACTION_MODE_LATCH 901 -#define NUMERIC_COMPACTION_MODE_LATCH 902 -#define BYTE_COMPACTION_MODE_LATCH_6 924 -#define BEGIN_MACRO_PDF417_CONTROL_BLOCK 928 -#define BEGIN_MACRO_PDF417_OPTIONAL_FIELD 923 -#define MACRO_PDF417_TERMINATOR 922 -#define MODE_SHIFT_TO_BYTE_COMPACTION_MODE 913 - -int32_t CBC_DecodedBitStreamPaser::MAX_NUMERIC_CODEWORDS = 15; -int32_t CBC_DecodedBitStreamPaser::NUMBER_OF_SEQUENCE_CODEWORDS = 2; -int32_t CBC_DecodedBitStreamPaser::PL = 25; -int32_t CBC_DecodedBitStreamPaser::LL = 27; -int32_t CBC_DecodedBitStreamPaser::AS = 27; -int32_t CBC_DecodedBitStreamPaser::ML = 28; -int32_t CBC_DecodedBitStreamPaser::AL = 28; -int32_t CBC_DecodedBitStreamPaser::PS = 29; -int32_t CBC_DecodedBitStreamPaser::PAL = 29; -FX_CHAR CBC_DecodedBitStreamPaser::PUNCT_CHARS[29] = { - ';', '<', '>', '@', '[', '\\', '}', '_', '`', '~', - '!', '\r', '\t', ',', ':', '\n', '-', '.', '$', '/', - '"', '|', '*', '(', ')', '?', '{', '}', '\''}; -FX_CHAR CBC_DecodedBitStreamPaser::MIXED_CHARS[30] = { - '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '&', '\r', '\t', - ',', ':', '#', '-', '.', '$', '/', '+', '%', '*', '=', '^'}; - -void CBC_DecodedBitStreamPaser::Initialize() {} -void CBC_DecodedBitStreamPaser::Finalize() {} -CBC_DecodedBitStreamPaser::CBC_DecodedBitStreamPaser() {} -CBC_DecodedBitStreamPaser::~CBC_DecodedBitStreamPaser() {} -CBC_CommonDecoderResult* CBC_DecodedBitStreamPaser::decode( - CFX_Int32Array& codewords, - CFX_ByteString ecLevel, - int32_t& e) { - CFX_ByteString result; - int32_t codeIndex = 1; - int32_t code = codewords.GetAt(codeIndex); - codeIndex++; - CBC_PDF417ResultMetadata* resultMetadata = new CBC_PDF417ResultMetadata; - while (codeIndex < codewords[0]) { - switch (code) { - case TEXT_COMPACTION_MODE_LATCH: - codeIndex = textCompaction(codewords, codeIndex, result); - break; - case BYTE_COMPACTION_MODE_LATCH: - codeIndex = byteCompaction(code, codewords, codeIndex, result); - break; - case NUMERIC_COMPACTION_MODE_LATCH: - codeIndex = numericCompaction(codewords, codeIndex, result, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - break; - case MODE_SHIFT_TO_BYTE_COMPACTION_MODE: - codeIndex = byteCompaction(code, codewords, codeIndex, result); - break; - case BYTE_COMPACTION_MODE_LATCH_6: - codeIndex = byteCompaction(code, codewords, codeIndex, result); - break; - case BEGIN_MACRO_PDF417_CONTROL_BLOCK: - codeIndex = decodeMacroBlock(codewords, codeIndex, resultMetadata, e); - if (e != BCExceptionNO) { - delete resultMetadata; - return NULL; - } - break; - default: - codeIndex--; - codeIndex = textCompaction(codewords, codeIndex, result); - break; - } - if (codeIndex < codewords.GetSize()) { - code = codewords[codeIndex++]; - } else { - e = BCExceptionFormatInstance; - delete resultMetadata; - return NULL; - } - } - if (result.GetLength() == 0) { - e = BCExceptionFormatInstance; - delete resultMetadata; - return NULL; - } - CFX_ByteArray rawBytes; - CFX_PtrArray byteSegments; - CBC_CommonDecoderResult* tempCd = new CBC_CommonDecoderResult(); - tempCd->Init(rawBytes, result, byteSegments, ecLevel, e); - if (e != BCExceptionNO) { - delete resultMetadata; - return NULL; - } - tempCd->setOther(resultMetadata); - return tempCd; -} -int32_t CBC_DecodedBitStreamPaser::decodeMacroBlock( - CFX_Int32Array& codewords, - int32_t codeIndex, - CBC_PDF417ResultMetadata* resultMetadata, - int32_t& e) { - if (codeIndex + NUMBER_OF_SEQUENCE_CODEWORDS > codewords[0]) { - e = BCExceptionFormatInstance; - return -1; - } - CFX_Int32Array segmentIndexArray; - segmentIndexArray.SetSize(NUMBER_OF_SEQUENCE_CODEWORDS); - for (int32_t i = 0; i < NUMBER_OF_SEQUENCE_CODEWORDS; i++, codeIndex++) { - segmentIndexArray.SetAt(i, codewords[codeIndex]); - } - CFX_ByteString str = - decodeBase900toBase10(segmentIndexArray, NUMBER_OF_SEQUENCE_CODEWORDS, e); - BC_EXCEPTION_CHECK_ReturnValue(e, -1); - resultMetadata->setSegmentIndex(atoi(str.GetBuffer(str.GetLength()))); - CFX_ByteString fileId; - codeIndex = textCompaction(codewords, codeIndex, fileId); - resultMetadata->setFileId(fileId); - if (codewords[codeIndex] == BEGIN_MACRO_PDF417_OPTIONAL_FIELD) { - codeIndex++; - CFX_Int32Array additionalOptionCodeWords; - additionalOptionCodeWords.SetSize(codewords[0] - codeIndex); - int32_t additionalOptionCodeWordsIndex = 0; - FX_BOOL end = FALSE; - while ((codeIndex < codewords[0]) && !end) { - int32_t code = codewords[codeIndex++]; - if (code < TEXT_COMPACTION_MODE_LATCH) { - additionalOptionCodeWords[additionalOptionCodeWordsIndex++] = code; - } else { - switch (code) { - case MACRO_PDF417_TERMINATOR: - resultMetadata->setLastSegment(TRUE); - codeIndex++; - end = TRUE; - break; - default: - e = BCExceptionFormatInstance; - return -1; - } - } - } - CFX_Int32Array array; - array.SetSize(additionalOptionCodeWordsIndex); - array.Copy(additionalOptionCodeWords); - resultMetadata->setOptionalData(array); - } else if (codewords[codeIndex] == MACRO_PDF417_TERMINATOR) { - resultMetadata->setLastSegment(TRUE); - codeIndex++; - } - return codeIndex; -} -int32_t CBC_DecodedBitStreamPaser::textCompaction(CFX_Int32Array& codewords, - int32_t codeIndex, - CFX_ByteString& result) { - CFX_Int32Array textCompactionData; - textCompactionData.SetSize((codewords[0] - codeIndex) << 1); - CFX_Int32Array byteCompactionData; - byteCompactionData.SetSize((codewords[0] - codeIndex) << 1); - int32_t index = 0; - FX_BOOL end = FALSE; - while ((codeIndex < codewords[0]) && !end) { - int32_t code = codewords[codeIndex++]; - if (code < TEXT_COMPACTION_MODE_LATCH) { - textCompactionData[index] = code / 30; - textCompactionData[index + 1] = code % 30; - index += 2; - } else { - switch (code) { - case TEXT_COMPACTION_MODE_LATCH: - textCompactionData[index++] = TEXT_COMPACTION_MODE_LATCH; - break; - case BYTE_COMPACTION_MODE_LATCH: - codeIndex--; - end = TRUE; - break; - case NUMERIC_COMPACTION_MODE_LATCH: - codeIndex--; - end = TRUE; - break; - case BEGIN_MACRO_PDF417_CONTROL_BLOCK: - codeIndex--; - end = TRUE; - break; - case BEGIN_MACRO_PDF417_OPTIONAL_FIELD: - codeIndex--; - end = TRUE; - break; - case MACRO_PDF417_TERMINATOR: - codeIndex--; - end = TRUE; - break; - case MODE_SHIFT_TO_BYTE_COMPACTION_MODE: - textCompactionData[index] = MODE_SHIFT_TO_BYTE_COMPACTION_MODE; - code = codewords[codeIndex++]; - byteCompactionData[index] = code; - index++; - break; - case BYTE_COMPACTION_MODE_LATCH_6: - codeIndex--; - end = TRUE; - break; - } - } - } - decodeTextCompaction(textCompactionData, byteCompactionData, index, result); - return codeIndex; -} -void CBC_DecodedBitStreamPaser::decodeTextCompaction( - CFX_Int32Array& textCompactionData, - CFX_Int32Array& byteCompactionData, - int32_t length, - CFX_ByteString& result) { - Mode subMode = ALPHA; - Mode priorToShiftMode = ALPHA; - int32_t i = 0; - while (i < length) { - int32_t subModeCh = textCompactionData[i]; - FX_CHAR ch = 0; - switch (subMode) { - case ALPHA: - if (subModeCh < 26) { - ch = (FX_CHAR)('A' + subModeCh); - } else { - if (subModeCh == 26) { - ch = ' '; - } else if (subModeCh == LL) { - subMode = LOWER; - } else if (subModeCh == ML) { - subMode = MIXED; - } else if (subModeCh == PS) { - priorToShiftMode = subMode; - subMode = PUNCT_SHIFT; - } else if (subModeCh == MODE_SHIFT_TO_BYTE_COMPACTION_MODE) { - result += (FX_CHAR)byteCompactionData[i]; - } else if (subModeCh == TEXT_COMPACTION_MODE_LATCH) { - subMode = ALPHA; - } - } - break; - case LOWER: - if (subModeCh < 26) { - ch = (FX_CHAR)('a' + subModeCh); - } else { - if (subModeCh == 26) { - ch = ' '; - } else if (subModeCh == AS) { - priorToShiftMode = subMode; - subMode = ALPHA_SHIFT; - } else if (subModeCh == ML) { - subMode = MIXED; - } else if (subModeCh == PS) { - priorToShiftMode = subMode; - subMode = PUNCT_SHIFT; - } else if (subModeCh == MODE_SHIFT_TO_BYTE_COMPACTION_MODE) { - result += (FX_CHAR)byteCompactionData[i]; - } else if (subModeCh == TEXT_COMPACTION_MODE_LATCH) { - subMode = ALPHA; - } - } - break; - case MIXED: - if (subModeCh < PL) { - ch = MIXED_CHARS[subModeCh]; - } else { - if (subModeCh == PL) { - subMode = PUNCT; - } else if (subModeCh == 26) { - ch = ' '; - } else if (subModeCh == LL) { - subMode = LOWER; - } else if (subModeCh == AL) { - subMode = ALPHA; - } else if (subModeCh == PS) { - priorToShiftMode = subMode; - subMode = PUNCT_SHIFT; - } else if (subModeCh == MODE_SHIFT_TO_BYTE_COMPACTION_MODE) { - result += (FX_CHAR)byteCompactionData[i]; - } else if (subModeCh == TEXT_COMPACTION_MODE_LATCH) { - subMode = ALPHA; - } - } - break; - case PUNCT: - if (subModeCh < PAL) { - ch = PUNCT_CHARS[subModeCh]; - } else { - if (subModeCh == PAL) { - subMode = ALPHA; - } else if (subModeCh == MODE_SHIFT_TO_BYTE_COMPACTION_MODE) { - result += (FX_CHAR)byteCompactionData[i]; - } else if (subModeCh == TEXT_COMPACTION_MODE_LATCH) { - subMode = ALPHA; - } - } - break; - case ALPHA_SHIFT: - subMode = priorToShiftMode; - if (subModeCh < 26) { - ch = (FX_CHAR)('A' + subModeCh); - } else { - if (subModeCh == 26) { - ch = ' '; - } else if (subModeCh == TEXT_COMPACTION_MODE_LATCH) { - subMode = ALPHA; - } - } - break; - case PUNCT_SHIFT: - subMode = priorToShiftMode; - if (subModeCh < PAL) { - ch = PUNCT_CHARS[subModeCh]; - } else { - if (subModeCh == PAL) { - subMode = ALPHA; - } else if (subModeCh == MODE_SHIFT_TO_BYTE_COMPACTION_MODE) { - result += (FX_CHAR)byteCompactionData[i]; - } else if (subModeCh == TEXT_COMPACTION_MODE_LATCH) { - subMode = ALPHA; - } - } - break; - } - if (ch != 0) { - result += ch; - } - i++; - } -} -int32_t CBC_DecodedBitStreamPaser::byteCompaction(int32_t mode, - CFX_Int32Array& codewords, - int32_t codeIndex, - CFX_ByteString& result) { - if (mode == BYTE_COMPACTION_MODE_LATCH) { - int32_t count = 0; - int64_t value = 0; - FX_WORD* decodedData = FX_Alloc(FX_WORD, 6); - CFX_Int32Array byteCompactedCodewords; - byteCompactedCodewords.SetSize(6); - FX_BOOL end = FALSE; - int32_t nextCode = codewords[codeIndex++]; - while ((codeIndex < codewords[0]) && !end) { - byteCompactedCodewords[count++] = nextCode; - value = 900 * value + nextCode; - nextCode = codewords[codeIndex++]; - if (nextCode == TEXT_COMPACTION_MODE_LATCH || - nextCode == BYTE_COMPACTION_MODE_LATCH || - nextCode == NUMERIC_COMPACTION_MODE_LATCH || - nextCode == BYTE_COMPACTION_MODE_LATCH_6 || - nextCode == BEGIN_MACRO_PDF417_CONTROL_BLOCK || - nextCode == BEGIN_MACRO_PDF417_OPTIONAL_FIELD || - nextCode == MACRO_PDF417_TERMINATOR) { - codeIndex--; - end = TRUE; - } else { - if ((count % 5 == 0) && (count > 0)) { - int32_t j = 0; - for (; j < 6; ++j) { - decodedData[5 - j] = (FX_WORD)(value % 256); - value >>= 8; - } - for (j = 0; j < 6; ++j) { - result += (FX_CHAR)decodedData[j]; - } - count = 0; - } - } - } - FX_Free(decodedData); - if (codeIndex == codewords[0] && nextCode < TEXT_COMPACTION_MODE_LATCH) { - byteCompactedCodewords[count++] = nextCode; - } - for (int32_t i = 0; i < count; i++) { - result += (FX_CHAR)(FX_WORD)byteCompactedCodewords[i]; - } - } else if (mode == BYTE_COMPACTION_MODE_LATCH_6) { - int32_t count = 0; - int64_t value = 0; - FX_BOOL end = FALSE; - while (codeIndex < codewords[0] && !end) { - int32_t code = codewords[codeIndex++]; - if (code < TEXT_COMPACTION_MODE_LATCH) { - count++; - value = 900 * value + code; - } else { - if (code == TEXT_COMPACTION_MODE_LATCH || - code == BYTE_COMPACTION_MODE_LATCH || - code == NUMERIC_COMPACTION_MODE_LATCH || - code == BYTE_COMPACTION_MODE_LATCH_6 || - code == BEGIN_MACRO_PDF417_CONTROL_BLOCK || - code == BEGIN_MACRO_PDF417_OPTIONAL_FIELD || - code == MACRO_PDF417_TERMINATOR) { - codeIndex--; - end = TRUE; - } - } - if ((count % 5 == 0) && (count > 0)) { - FX_WORD* decodedData = FX_Alloc(FX_WORD, 6); - int32_t j = 0; - for (; j < 6; ++j) { - decodedData[5 - j] = (FX_WORD)(value & 0xFF); - value >>= 8; - } - for (j = 0; j < 6; ++j) { - result += (FX_CHAR)decodedData[j]; - } - count = 0; - FX_Free(decodedData); - } - } - } - return codeIndex; -} -int32_t CBC_DecodedBitStreamPaser::numericCompaction(CFX_Int32Array& codewords, - int32_t codeIndex, - CFX_ByteString& result, - int32_t& e) { - int32_t count = 0; - FX_BOOL end = FALSE; - CFX_Int32Array numericCodewords; - numericCodewords.SetSize(MAX_NUMERIC_CODEWORDS); - while (codeIndex < codewords[0] && !end) { - int32_t code = codewords[codeIndex++]; - if (codeIndex == codewords[0]) { - end = TRUE; - } - if (code < TEXT_COMPACTION_MODE_LATCH) { - numericCodewords[count] = code; - count++; - } else { - if (code == TEXT_COMPACTION_MODE_LATCH || - code == BYTE_COMPACTION_MODE_LATCH || - code == BYTE_COMPACTION_MODE_LATCH_6 || - code == BEGIN_MACRO_PDF417_CONTROL_BLOCK || - code == BEGIN_MACRO_PDF417_OPTIONAL_FIELD || - code == MACRO_PDF417_TERMINATOR) { - codeIndex--; - end = TRUE; - } - } - if (count % MAX_NUMERIC_CODEWORDS == 0 || - code == NUMERIC_COMPACTION_MODE_LATCH || end) { - CFX_ByteString s = decodeBase900toBase10(numericCodewords, count, e); - BC_EXCEPTION_CHECK_ReturnValue(e, -1); - result += s; - count = 0; - } - } - return codeIndex; -} -CFX_ByteString CBC_DecodedBitStreamPaser::decodeBase900toBase10( - CFX_Int32Array& codewords, - int32_t count, - int32_t& e) { - BigInteger result = 0; - BigInteger nineHundred(900); - for (int32_t i = 0; i < count; i++) { - result = result * nineHundred + BigInteger(codewords[i]); - } - CFX_ByteString resultString(bigIntegerToString(result).c_str()); - if (resultString.GetAt(0) != '1') { - e = BCExceptionFormatInstance; - return ' '; - } - return resultString.Mid(1, resultString.GetLength() - 1); -} diff --git a/xfa/src/fxbarcode/pdf417/BC_PDF417DecodedBitStreamParser.h b/xfa/src/fxbarcode/pdf417/BC_PDF417DecodedBitStreamParser.h deleted file mode 100644 index 52901c66bf..0000000000 --- a/xfa/src/fxbarcode/pdf417/BC_PDF417DecodedBitStreamParser.h +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_PDF417_BC_PDF417DECODEDBITSTREAMPARSER_H_ -#define XFA_SRC_FXBARCODE_PDF417_BC_PDF417DECODEDBITSTREAMPARSER_H_ - -#include "core/include/fxcrt/fx_basic.h" -#include "core/include/fxcrt/fx_string.h" - -class CBC_CommonDecoderResult; -class CBC_PDF417ResultMetadata; - -class CBC_DecodedBitStreamPaser { - public: - CBC_DecodedBitStreamPaser(); - virtual ~CBC_DecodedBitStreamPaser(); - static void Initialize(); - static void Finalize(); - static CBC_CommonDecoderResult* decode(CFX_Int32Array& codewords, - CFX_ByteString ecLevel, - int32_t& e); - - private: - enum Mode { ALPHA, LOWER, MIXED, PUNCT, ALPHA_SHIFT, PUNCT_SHIFT }; - static int32_t MAX_NUMERIC_CODEWORDS; - static int32_t PL; - static int32_t LL; - static int32_t AS; - static int32_t ML; - static int32_t AL; - static int32_t PS; - static int32_t PAL; - static FX_CHAR PUNCT_CHARS[29]; - static FX_CHAR MIXED_CHARS[30]; - static int32_t NUMBER_OF_SEQUENCE_CODEWORDS; - static int32_t decodeMacroBlock(CFX_Int32Array& codewords, - int32_t codeIndex, - CBC_PDF417ResultMetadata* resultMetadata, - int32_t& e); - static int32_t textCompaction(CFX_Int32Array& codewords, - int32_t codeIndex, - CFX_ByteString& result); - static void decodeTextCompaction(CFX_Int32Array& textCompactionData, - CFX_Int32Array& byteCompactionData, - int32_t length, - CFX_ByteString& result); - static int32_t byteCompaction(int32_t mode, - CFX_Int32Array& codewords, - int32_t codeIndex, - CFX_ByteString& result); - static int32_t numericCompaction(CFX_Int32Array& codewords, - int32_t codeIndex, - CFX_ByteString& result, - int32_t& e); - static CFX_ByteString decodeBase900toBase10(CFX_Int32Array& codewords, - int32_t count, - int32_t& e); -}; - -#endif // XFA_SRC_FXBARCODE_PDF417_BC_PDF417DECODEDBITSTREAMPARSER_H_ diff --git a/xfa/src/fxbarcode/pdf417/BC_PDF417DetectionResult.cpp b/xfa/src/fxbarcode/pdf417/BC_PDF417DetectionResult.cpp deleted file mode 100644 index b9eee7c446..0000000000 --- a/xfa/src/fxbarcode/pdf417/BC_PDF417DetectionResult.cpp +++ /dev/null @@ -1,339 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2013 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/pdf417/BC_PDF417BarcodeMetadata.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417BoundingBox.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417Codeword.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417Common.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417DetectionResult.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417DetectionResultColumn.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417DetectionResultRowIndicatorColumn.h" - -int32_t CBC_DetectionResult::ADJUST_ROW_NUMBER_SKIP = 2; - -CBC_DetectionResult::CBC_DetectionResult(CBC_BarcodeMetadata* barcodeMetadata, - CBC_BoundingBox* boundingBox) { - m_barcodeMetadata = barcodeMetadata; - m_barcodeColumnCount = barcodeMetadata->getColumnCount(); - m_boundingBox = boundingBox; - m_detectionResultColumns.SetSize(m_barcodeColumnCount + 2); - for (int32_t i = 0; i < m_barcodeColumnCount + 2; i++) { - m_detectionResultColumns[i] = NULL; - } -} -CBC_DetectionResult::~CBC_DetectionResult() { - delete m_boundingBox; - delete m_barcodeMetadata; - m_detectionResultColumns.RemoveAll(); -} -CFX_PtrArray& CBC_DetectionResult::getDetectionResultColumns() { - adjustIndicatorColumnRowNumbers( - (CBC_DetectionResultColumn*)m_detectionResultColumns.GetAt(0)); - adjustIndicatorColumnRowNumbers( - (CBC_DetectionResultColumn*)m_detectionResultColumns.GetAt( - m_barcodeColumnCount + 1)); - int32_t unadjustedCodewordCount = CBC_PDF417Common::MAX_CODEWORDS_IN_BARCODE; - int32_t previousUnadjustedCount; - do { - previousUnadjustedCount = unadjustedCodewordCount; - unadjustedCodewordCount = adjustRowNumbers(); - } while (unadjustedCodewordCount > 0 && - unadjustedCodewordCount < previousUnadjustedCount); - return m_detectionResultColumns; -} -void CBC_DetectionResult::setBoundingBox(CBC_BoundingBox* boundingBox) { - m_boundingBox = boundingBox; -} -CBC_BoundingBox* CBC_DetectionResult::getBoundingBox() { - return m_boundingBox; -} -void CBC_DetectionResult::setDetectionResultColumn( - int32_t barcodeColumn, - CBC_DetectionResultColumn* detectionResultColumn) { - m_detectionResultColumns[barcodeColumn] = detectionResultColumn; -} -CBC_DetectionResultColumn* CBC_DetectionResult::getDetectionResultColumn( - int32_t barcodeColumn) { - return (CBC_DetectionResultColumn*)m_detectionResultColumns[barcodeColumn]; -} -CFX_ByteString CBC_DetectionResult::toString() { - CBC_DetectionResultColumn* rowIndicatorColumn = - (CBC_DetectionResultColumn*)m_detectionResultColumns[0]; - if (rowIndicatorColumn == NULL) { - rowIndicatorColumn = (CBC_DetectionResultColumn*) - m_detectionResultColumns[m_barcodeColumnCount + 1]; - } - CFX_ByteString result; - for (int32_t codewordsRow = 0; - codewordsRow < rowIndicatorColumn->getCodewords()->GetSize(); - codewordsRow++) { - result += (FX_CHAR)codewordsRow; - for (int32_t barcodeColumn = 0; barcodeColumn < m_barcodeColumnCount + 2; - barcodeColumn++) { - if (m_detectionResultColumns[barcodeColumn] == NULL) { - result += " | "; - continue; - } - CBC_Codeword* codeword = - (CBC_Codeword*)((CBC_DetectionResultColumn*) - m_detectionResultColumns[barcodeColumn]) - ->getCodewords() - ->GetAt(codewordsRow); - if (codeword == NULL) { - result += " | "; - continue; - } - result += codeword->getRowNumber(); - result += codeword->getValue(); - } - } - return result; -} -void CBC_DetectionResult::adjustIndicatorColumnRowNumbers( - CBC_DetectionResultColumn* detectionResultColumn) { - if (detectionResultColumn) { - ((CBC_DetectionResultRowIndicatorColumn*)detectionResultColumn) - ->adjustCompleteIndicatorColumnRowNumbers(*m_barcodeMetadata); - } -} -int32_t CBC_DetectionResult::adjustRowNumbers() { - int32_t unadjustedCount = adjustRowNumbersByRow(); - if (unadjustedCount == 0) { - return 0; - } - for (int32_t barcodeColumn = 1; barcodeColumn < m_barcodeColumnCount + 1; - barcodeColumn++) { - CFX_PtrArray* codewords = - ((CBC_DetectionResultColumn*)m_detectionResultColumns[barcodeColumn]) - ->getCodewords(); - for (int32_t codewordsRow = 0; codewordsRow < codewords->GetSize(); - codewordsRow++) { - if (codewords->GetAt(codewordsRow) == NULL) { - continue; - } - if (!((CBC_Codeword*)codewords->GetAt(codewordsRow)) - ->hasValidRowNumber()) { - adjustRowNumbers(barcodeColumn, codewordsRow, codewords); - } - } - } - return unadjustedCount; -} -int32_t CBC_DetectionResult::adjustRowNumbersByRow() { - adjustRowNumbersFromBothRI(); - int32_t unadjustedCount = adjustRowNumbersFromLRI(); - return unadjustedCount + adjustRowNumbersFromRRI(); -} -int32_t CBC_DetectionResult::adjustRowNumbersFromBothRI() { - if (m_detectionResultColumns[0] == NULL || - m_detectionResultColumns[m_barcodeColumnCount + 1] == NULL) { - return 0; - } - CFX_PtrArray* LRIcodewords = - ((CBC_DetectionResultColumn*)m_detectionResultColumns[0])->getCodewords(); - CFX_PtrArray* RRIcodewords = - ((CBC_DetectionResultColumn*) - m_detectionResultColumns[m_barcodeColumnCount + 1]) - ->getCodewords(); - for (int32_t codewordsRow = 0; codewordsRow < LRIcodewords->GetSize(); - codewordsRow++) { - if (LRIcodewords->GetAt(codewordsRow) && - RRIcodewords->GetAt(codewordsRow) && - ((CBC_Codeword*)LRIcodewords->GetAt(codewordsRow))->getRowNumber() == - ((CBC_Codeword*)RRIcodewords->GetAt(codewordsRow)) - ->getRowNumber()) { - for (int32_t barcodeColumn = 1; barcodeColumn <= m_barcodeColumnCount; - barcodeColumn++) { - CBC_Codeword* codeword = - (CBC_Codeword*)((CBC_DetectionResultColumn*) - m_detectionResultColumns[barcodeColumn]) - ->getCodewords() - ->GetAt(codewordsRow); - if (codeword == NULL) { - continue; - } - codeword->setRowNumber( - ((CBC_Codeword*)LRIcodewords->GetAt(codewordsRow))->getRowNumber()); - if (!codeword->hasValidRowNumber()) { - ((CBC_DetectionResultColumn*)m_detectionResultColumns[barcodeColumn]) - ->getCodewords() - ->SetAt(codewordsRow, NULL); - } - } - } - } - return 0; -} -int32_t CBC_DetectionResult::adjustRowNumbersFromRRI() { - if (m_detectionResultColumns[m_barcodeColumnCount + 1] == NULL) { - return 0; - } - int32_t unadjustedCount = 0; - CFX_PtrArray* codewords = - ((CBC_DetectionResultColumn*)m_detectionResultColumns.GetAt( - m_barcodeColumnCount + 1)) - ->getCodewords(); - for (int32_t codewordsRow = 0; codewordsRow < codewords->GetSize(); - codewordsRow++) { - if (codewords->GetAt(codewordsRow) == NULL) { - continue; - } - int32_t rowIndicatorRowNumber = - ((CBC_Codeword*)codewords->GetAt(codewordsRow))->getRowNumber(); - int32_t invalidRowCounts = 0; - for (int32_t barcodeColumn = m_barcodeColumnCount + 1; - barcodeColumn > 0 && invalidRowCounts < ADJUST_ROW_NUMBER_SKIP; - barcodeColumn--) { - CBC_Codeword* codeword = - (CBC_Codeword*)((CBC_DetectionResultColumn*) - m_detectionResultColumns.GetAt(barcodeColumn)) - ->getCodewords() - ->GetAt(codewordsRow); - if (codeword) { - invalidRowCounts = adjustRowNumberIfValid(rowIndicatorRowNumber, - invalidRowCounts, codeword); - if (!codeword->hasValidRowNumber()) { - unadjustedCount++; - } - } - } - } - return unadjustedCount; -} -int32_t CBC_DetectionResult::adjustRowNumbersFromLRI() { - if (m_detectionResultColumns[0] == NULL) { - return 0; - } - int32_t unadjustedCount = 0; - CFX_PtrArray* codewords = - ((CBC_DetectionResultColumn*)m_detectionResultColumns.GetAt(0)) - ->getCodewords(); - for (int32_t codewordsRow = 0; codewordsRow < codewords->GetSize(); - codewordsRow++) { - if (codewords->GetAt(codewordsRow) == NULL) { - continue; - } - int32_t rowIndicatorRowNumber = - ((CBC_Codeword*)codewords->GetAt(codewordsRow))->getRowNumber(); - int32_t invalidRowCounts = 0; - for (int32_t barcodeColumn = 1; barcodeColumn < m_barcodeColumnCount + 1 && - invalidRowCounts < ADJUST_ROW_NUMBER_SKIP; - barcodeColumn++) { - CBC_Codeword* codeword = - (CBC_Codeword*)((CBC_DetectionResultColumn*) - m_detectionResultColumns[barcodeColumn]) - ->getCodewords() - ->GetAt(codewordsRow); - if (codeword) { - invalidRowCounts = adjustRowNumberIfValid(rowIndicatorRowNumber, - invalidRowCounts, codeword); - if (!codeword->hasValidRowNumber()) { - unadjustedCount++; - } - } - } - } - return unadjustedCount; -} -int32_t CBC_DetectionResult::adjustRowNumberIfValid( - int32_t rowIndicatorRowNumber, - int32_t invalidRowCounts, - CBC_Codeword* codeword) { - if (codeword == NULL) { - return invalidRowCounts; - } - if (!codeword->hasValidRowNumber()) { - if (codeword->isValidRowNumber(rowIndicatorRowNumber)) { - codeword->setRowNumber(rowIndicatorRowNumber); - invalidRowCounts = 0; - } else { - ++invalidRowCounts; - } - } - return invalidRowCounts; -} -void CBC_DetectionResult::adjustRowNumbers(int32_t barcodeColumn, - int32_t codewordsRow, - CFX_PtrArray* codewords) { - CBC_Codeword* codeword = (CBC_Codeword*)codewords->GetAt(codewordsRow); - CFX_PtrArray* previousColumnCodewords = - ((CBC_DetectionResultColumn*)m_detectionResultColumns.GetAt( - barcodeColumn - 1)) - ->getCodewords(); - CFX_PtrArray* nextColumnCodewords = previousColumnCodewords; - if (m_detectionResultColumns[barcodeColumn + 1]) { - nextColumnCodewords = ((CBC_DetectionResultColumn*) - m_detectionResultColumns[barcodeColumn + 1]) - ->getCodewords(); - } - CFX_PtrArray otherCodewords; - otherCodewords.SetSize(14); - otherCodewords[2] = previousColumnCodewords->GetAt(codewordsRow); - otherCodewords[3] = nextColumnCodewords->GetAt(codewordsRow); - if (codewordsRow > 0) { - otherCodewords[0] = codewords->GetAt(codewordsRow - 1); - otherCodewords[4] = previousColumnCodewords->GetAt(codewordsRow - 1); - otherCodewords[5] = nextColumnCodewords->GetAt(codewordsRow - 1); - } - if (codewordsRow > 1) { - otherCodewords[8] = codewords->GetAt(codewordsRow - 2); - otherCodewords[10] = previousColumnCodewords->GetAt(codewordsRow - 2); - otherCodewords[11] = nextColumnCodewords->GetAt(codewordsRow - 2); - } - if (codewordsRow < codewords->GetSize() - 1) { - otherCodewords[1] = codewords->GetAt(codewordsRow + 1); - otherCodewords[6] = previousColumnCodewords->GetAt(codewordsRow + 1); - otherCodewords[7] = nextColumnCodewords->GetAt(codewordsRow + 1); - } - if (codewordsRow < codewords->GetSize() - 2) { - otherCodewords[9] = codewords->GetAt(codewordsRow + 2); - otherCodewords[12] = previousColumnCodewords->GetAt(codewordsRow + 2); - otherCodewords[13] = nextColumnCodewords->GetAt(codewordsRow + 2); - } - for (int32_t i = 0; i < otherCodewords.GetSize(); i++) { - CBC_Codeword* otherCodeword = (CBC_Codeword*)otherCodewords.GetAt(i); - if (adjustRowNumber(codeword, otherCodeword)) { - return; - } - } -} -FX_BOOL CBC_DetectionResult::adjustRowNumber(CBC_Codeword* codeword, - CBC_Codeword* otherCodeword) { - if (otherCodeword == NULL) { - return FALSE; - } - if (otherCodeword->hasValidRowNumber() && - otherCodeword->getBucket() == codeword->getBucket()) { - codeword->setRowNumber(otherCodeword->getRowNumber()); - return TRUE; - } - return FALSE; -} -int32_t CBC_DetectionResult::getBarcodeColumnCount() { - return m_barcodeColumnCount; -} -int32_t CBC_DetectionResult::getBarcodeRowCount() { - return m_barcodeMetadata->getRowCount(); -} -int32_t CBC_DetectionResult::getBarcodeECLevel() { - return m_barcodeMetadata->getErrorCorrectionLevel(); -} diff --git a/xfa/src/fxbarcode/pdf417/BC_PDF417DetectionResult.h b/xfa/src/fxbarcode/pdf417/BC_PDF417DetectionResult.h deleted file mode 100644 index 969d513c7e..0000000000 --- a/xfa/src/fxbarcode/pdf417/BC_PDF417DetectionResult.h +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_PDF417_BC_PDF417DETECTIONRESULT_H_ -#define XFA_SRC_FXBARCODE_PDF417_BC_PDF417DETECTIONRESULT_H_ - -class CBC_BarcodeMetadata; -class CBC_BoundingBox; -class CBC_Codeword; -class CBC_DetectionResultColumn; -class CBC_DetectionResult { - public: - CBC_DetectionResult(CBC_BarcodeMetadata* barcodeMetadata, - CBC_BoundingBox* boundingBox); - virtual ~CBC_DetectionResult(); - CFX_PtrArray& getDetectionResultColumns(); - void setBoundingBox(CBC_BoundingBox* boundingBox); - CBC_BoundingBox* getBoundingBox(); - void setDetectionResultColumn( - int32_t barcodeColumn, - CBC_DetectionResultColumn* detectionResultColumn); - CBC_DetectionResultColumn* getDetectionResultColumn(int32_t barcodeColumn); - CFX_ByteString toString(); - - int32_t getBarcodeColumnCount(); - int32_t getBarcodeRowCount(); - int32_t getBarcodeECLevel(); - - private: - static int32_t ADJUST_ROW_NUMBER_SKIP; - CBC_BarcodeMetadata* m_barcodeMetadata; - CFX_PtrArray m_detectionResultColumns; - CBC_BoundingBox* m_boundingBox; - int32_t m_barcodeColumnCount; - - private: - void adjustIndicatorColumnRowNumbers( - CBC_DetectionResultColumn* detectionResultColumn); - int32_t adjustRowNumbers(); - int32_t adjustRowNumbersByRow(); - int32_t adjustRowNumbersFromBothRI(); - int32_t adjustRowNumbersFromRRI(); - int32_t adjustRowNumbersFromLRI(); - static int32_t adjustRowNumberIfValid(int32_t rowIndicatorRowNumber, - int32_t invalidRowCounts, - CBC_Codeword* codeword); - void adjustRowNumbers(int32_t barcodeColumn, - int32_t codewordsRow, - CFX_PtrArray* codewords); - static FX_BOOL adjustRowNumber(CBC_Codeword* codeword, - CBC_Codeword* otherCodeword); -}; - -#endif // XFA_SRC_FXBARCODE_PDF417_BC_PDF417DETECTIONRESULT_H_ diff --git a/xfa/src/fxbarcode/pdf417/BC_PDF417DetectionResultColumn.cpp b/xfa/src/fxbarcode/pdf417/BC_PDF417DetectionResultColumn.cpp deleted file mode 100644 index e375b7c30f..0000000000 --- a/xfa/src/fxbarcode/pdf417/BC_PDF417DetectionResultColumn.cpp +++ /dev/null @@ -1,101 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2013 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/pdf417/BC_PDF417BoundingBox.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417Codeword.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417DetectionResultColumn.h" - -int32_t CBC_DetectionResultColumn::MAX_NEARBY_DISTANCE = 5; - -CBC_DetectionResultColumn::CBC_DetectionResultColumn( - CBC_BoundingBox* boundingBox) { - m_boundingBox = boundingBox; - m_codewords = new CFX_PtrArray; - m_codewords->SetSize(boundingBox->getMaxY() - boundingBox->getMinY() + 1); -} -CBC_DetectionResultColumn::~CBC_DetectionResultColumn() { - for (int32_t i = 0; i < m_codewords->GetSize(); i++) { - delete (CBC_Codeword*)m_codewords->GetAt(i); - } - m_codewords->RemoveAll(); - delete m_codewords; -} -CBC_Codeword* CBC_DetectionResultColumn::getCodewordNearby(int32_t imageRow) { - CBC_Codeword* codeword = getCodeword(imageRow); - if (codeword) { - return codeword; - } - for (int32_t i = 1; i < MAX_NEARBY_DISTANCE; i++) { - int32_t nearImageRow = imageRowToCodewordIndex(imageRow) - i; - if (nearImageRow >= 0) { - codeword = (CBC_Codeword*)m_codewords->GetAt(nearImageRow); - if (codeword) { - return codeword; - } - } - nearImageRow = imageRowToCodewordIndex(imageRow) + i; - if (nearImageRow < m_codewords->GetSize()) { - codeword = (CBC_Codeword*)m_codewords->GetAt(nearImageRow); - if (codeword) { - return codeword; - } - } - } - return NULL; -} -int32_t CBC_DetectionResultColumn::imageRowToCodewordIndex(int32_t imageRow) { - return imageRow - m_boundingBox->getMinY(); -} -int32_t CBC_DetectionResultColumn::codewordIndexToImageRow( - int32_t codewordIndex) { - return m_boundingBox->getMinY() + codewordIndex; -} -void CBC_DetectionResultColumn::setCodeword(int32_t imageRow, - CBC_Codeword* codeword) { - m_codewords->SetAt(imageRowToCodewordIndex(imageRow), codeword); -} -CBC_Codeword* CBC_DetectionResultColumn::getCodeword(int32_t imageRow) { - return (CBC_Codeword*)m_codewords->GetAt(imageRowToCodewordIndex(imageRow)); -} -CBC_BoundingBox* CBC_DetectionResultColumn::getBoundingBox() { - return m_boundingBox; -} -CFX_PtrArray* CBC_DetectionResultColumn::getCodewords() { - return m_codewords; -} -CFX_ByteString CBC_DetectionResultColumn::toString() { - CFX_ByteString result; - int32_t row = 0; - for (int32_t i = 0; i < m_codewords->GetSize(); i++) { - CBC_Codeword* codeword = (CBC_Codeword*)m_codewords->GetAt(i); - if (codeword == NULL) { - result += (FX_CHAR)row; - row++; - continue; - } - result += (FX_CHAR)row; - result += codeword->getRowNumber(); - result += codeword->getValue(); - row++; - } - return result; -} diff --git a/xfa/src/fxbarcode/pdf417/BC_PDF417DetectionResultColumn.h b/xfa/src/fxbarcode/pdf417/BC_PDF417DetectionResultColumn.h deleted file mode 100644 index 279b2c1057..0000000000 --- a/xfa/src/fxbarcode/pdf417/BC_PDF417DetectionResultColumn.h +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_PDF417_BC_PDF417DETECTIONRESULTCOLUMN_H_ -#define XFA_SRC_FXBARCODE_PDF417_BC_PDF417DETECTIONRESULTCOLUMN_H_ - -class CBC_Codeword; -class CBC_BoundingBox; -class CBC_DetectionResultColumn { - public: - CBC_DetectionResultColumn(CBC_BoundingBox* boundingBox); - virtual ~CBC_DetectionResultColumn(); - CBC_Codeword* getCodewordNearby(int32_t imageRow); - int32_t imageRowToCodewordIndex(int32_t imageRow); - int32_t codewordIndexToImageRow(int32_t codewordIndex); - void setCodeword(int32_t imageRow, CBC_Codeword* codeword); - CBC_Codeword* getCodeword(int32_t imageRow); - CBC_BoundingBox* getBoundingBox(); - CFX_PtrArray* getCodewords(); - CFX_ByteString toString(); - - public: - CBC_BoundingBox* m_boundingBox; - CFX_PtrArray* m_codewords; - - private: - static int32_t MAX_NEARBY_DISTANCE; -}; - -#endif // XFA_SRC_FXBARCODE_PDF417_BC_PDF417DETECTIONRESULTCOLUMN_H_ diff --git a/xfa/src/fxbarcode/pdf417/BC_PDF417DetectionResultRowIndicatorColumn.cpp b/xfa/src/fxbarcode/pdf417/BC_PDF417DetectionResultRowIndicatorColumn.cpp deleted file mode 100644 index 403c34c5fd..0000000000 --- a/xfa/src/fxbarcode/pdf417/BC_PDF417DetectionResultRowIndicatorColumn.cpp +++ /dev/null @@ -1,267 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2013 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "core/include/fxcrt/fx_basic.h" -#include "xfa/src/fxbarcode/BC_ResultPoint.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417BarcodeMetadata.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417BarcodeValue.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417BoundingBox.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417Codeword.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417Common.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417DetectionResultColumn.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417DetectionResultRowIndicatorColumn.h" -#include "xfa/src/fxbarcode/utils.h" - -CBC_DetectionResultRowIndicatorColumn::CBC_DetectionResultRowIndicatorColumn( - CBC_BoundingBox* boundingBox, - FX_BOOL isLeft) - : CBC_DetectionResultColumn(boundingBox) { - m_isLeft = isLeft; -} -CBC_DetectionResultRowIndicatorColumn:: - ~CBC_DetectionResultRowIndicatorColumn() {} -void CBC_DetectionResultRowIndicatorColumn::setRowNumbers() { - for (int32_t i = 0; i < m_codewords->GetSize(); i++) { - CBC_Codeword* codeword = (CBC_Codeword*)m_codewords->GetAt(i); - if (codeword) { - codeword->setRowNumberAsRowIndicatorColumn(); - } - } -} -int32_t -CBC_DetectionResultRowIndicatorColumn::adjustCompleteIndicatorColumnRowNumbers( - CBC_BarcodeMetadata barcodeMetadata) { - CFX_PtrArray* codewords = getCodewords(); - setRowNumbers(); - removeIncorrectCodewords(codewords, barcodeMetadata); - CBC_BoundingBox* boundingBox = getBoundingBox(); - CBC_ResultPoint* top = - m_isLeft ? boundingBox->getTopLeft() : boundingBox->getTopRight(); - CBC_ResultPoint* bottom = - m_isLeft ? boundingBox->getBottomLeft() : boundingBox->getBottomRight(); - int32_t firstRow = imageRowToCodewordIndex((int32_t)top->GetY()); - int32_t lastRow = imageRowToCodewordIndex((int32_t)bottom->GetY()); - FX_FLOAT averageRowHeight = - (lastRow - firstRow) / (FX_FLOAT)barcodeMetadata.getRowCount(); - int32_t barcodeRow = -1; - int32_t maxRowHeight = 1; - int32_t currentRowHeight = 0; - for (int32_t codewordsRow = firstRow; codewordsRow < lastRow; - codewordsRow++) { - if (codewords->GetAt(codewordsRow) == NULL) { - continue; - } - CBC_Codeword* codeword = (CBC_Codeword*)codewords->GetAt(codewordsRow); - int32_t rowDifference = codeword->getRowNumber() - barcodeRow; - if (rowDifference == 0) { - currentRowHeight++; - } else if (rowDifference == 1) { - maxRowHeight = - maxRowHeight > currentRowHeight ? maxRowHeight : currentRowHeight; - currentRowHeight = 1; - barcodeRow = codeword->getRowNumber(); - } else if (rowDifference < 0) { - codewords->SetAt(codewordsRow, NULL); - } else if (codeword->getRowNumber() >= barcodeMetadata.getRowCount()) { - codewords->SetAt(codewordsRow, NULL); - } else if (rowDifference > codewordsRow) { - codewords->SetAt(codewordsRow, NULL); - } else { - int32_t checkedRows; - if (maxRowHeight > 2) { - checkedRows = (maxRowHeight - 2) * rowDifference; - } else { - checkedRows = rowDifference; - } - FX_BOOL closePreviousCodewordFound = checkedRows >= codewordsRow; - for (int32_t i = 1; i <= checkedRows && !closePreviousCodewordFound; - i++) { - closePreviousCodewordFound = codewords->GetAt(codewordsRow - i) != NULL; - } - if (closePreviousCodewordFound) { - codewords->SetAt(codewordsRow, NULL); - } else { - barcodeRow = codeword->getRowNumber(); - currentRowHeight = 1; - } - } - } - return (int32_t)(averageRowHeight + 0.5); -} -CFX_Int32Array* CBC_DetectionResultRowIndicatorColumn::getRowHeights( - int32_t& e) { - CBC_BarcodeMetadata* barcodeMetadata = getBarcodeMetadata(); - if (barcodeMetadata == NULL) { - e = BCExceptionCannotMetadata; - return NULL; - } - adjustIncompleteIndicatorColumnRowNumbers(*barcodeMetadata); - CFX_Int32Array* result = new CFX_Int32Array; - result->SetSize(barcodeMetadata->getRowCount()); - for (int32_t i = 0; i < getCodewords()->GetSize(); i++) { - CBC_Codeword* codeword = (CBC_Codeword*)getCodewords()->GetAt(i); - if (codeword) { - result->SetAt(codeword->getRowNumber(), - result->GetAt(codeword->getRowNumber()) + 1); - } - } - return result; -} -int32_t CBC_DetectionResultRowIndicatorColumn:: - adjustIncompleteIndicatorColumnRowNumbers( - CBC_BarcodeMetadata barcodeMetadata) { - CBC_BoundingBox* boundingBox = getBoundingBox(); - CBC_ResultPoint* top = - m_isLeft ? boundingBox->getTopLeft() : boundingBox->getTopRight(); - CBC_ResultPoint* bottom = - m_isLeft ? boundingBox->getBottomLeft() : boundingBox->getBottomRight(); - int32_t firstRow = imageRowToCodewordIndex((int32_t)top->GetY()); - int32_t lastRow = imageRowToCodewordIndex((int32_t)bottom->GetY()); - FX_FLOAT averageRowHeight = - (lastRow - firstRow) / (FX_FLOAT)barcodeMetadata.getRowCount(); - CFX_PtrArray* codewords = getCodewords(); - int32_t barcodeRow = -1; - int32_t maxRowHeight = 1; - int32_t currentRowHeight = 0; - for (int32_t codewordsRow = firstRow; codewordsRow < lastRow; - codewordsRow++) { - if (codewords->GetAt(codewordsRow) == NULL) { - continue; - } - CBC_Codeword* codeword = (CBC_Codeword*)codewords->GetAt(codewordsRow); - codeword->setRowNumberAsRowIndicatorColumn(); - int32_t rowDifference = codeword->getRowNumber() - barcodeRow; - if (rowDifference == 0) { - currentRowHeight++; - } else if (rowDifference == 1) { - maxRowHeight = - maxRowHeight > currentRowHeight ? maxRowHeight : currentRowHeight; - currentRowHeight = 1; - barcodeRow = codeword->getRowNumber(); - } else if (codeword->getRowNumber() >= barcodeMetadata.getRowCount()) { - codewords->SetAt(codewordsRow, NULL); - } else { - barcodeRow = codeword->getRowNumber(); - currentRowHeight = 1; - } - } - return (int32_t)(averageRowHeight + 0.5); -} -CBC_BarcodeMetadata* -CBC_DetectionResultRowIndicatorColumn::getBarcodeMetadata() { - CFX_PtrArray* codewords = getCodewords(); - CBC_BarcodeValue barcodeColumnCount; - CBC_BarcodeValue barcodeRowCountUpperPart; - CBC_BarcodeValue barcodeRowCountLowerPart; - CBC_BarcodeValue barcodeECLevel; - for (int32_t i = 0; i < codewords->GetSize(); i++) { - CBC_Codeword* codeword = (CBC_Codeword*)codewords->GetAt(i); - if (codeword == NULL) { - continue; - } - codeword->setRowNumberAsRowIndicatorColumn(); - int32_t rowIndicatorValue = codeword->getValue() % 30; - int32_t codewordRowNumber = codeword->getRowNumber(); - if (!m_isLeft) { - codewordRowNumber += 2; - } - switch (codewordRowNumber % 3) { - case 0: - barcodeRowCountUpperPart.setValue(rowIndicatorValue * 3 + 1); - break; - case 1: - barcodeECLevel.setValue(rowIndicatorValue / 3); - barcodeRowCountLowerPart.setValue(rowIndicatorValue % 3); - break; - case 2: - barcodeColumnCount.setValue(rowIndicatorValue + 1); - break; - } - } - if ((barcodeColumnCount.getValue()->GetSize() == 0) || - (barcodeRowCountUpperPart.getValue()->GetSize() == 0) || - (barcodeRowCountLowerPart.getValue()->GetSize() == 0) || - (barcodeECLevel.getValue()->GetSize() == 0) || - barcodeColumnCount.getValue()->GetAt(0) < 1 || - barcodeRowCountUpperPart.getValue()->GetAt(0) + - barcodeRowCountLowerPart.getValue()->GetAt(0) < - CBC_PDF417Common::MIN_ROWS_IN_BARCODE || - barcodeRowCountUpperPart.getValue()->GetAt(0) + - barcodeRowCountLowerPart.getValue()->GetAt(0) > - CBC_PDF417Common::MAX_ROWS_IN_BARCODE) { - return NULL; - } - CBC_BarcodeMetadata* barcodeMetadata = - new CBC_BarcodeMetadata(barcodeColumnCount.getValue()->GetAt(0), - barcodeRowCountUpperPart.getValue()->GetAt(0), - barcodeRowCountLowerPart.getValue()->GetAt(0), - barcodeECLevel.getValue()->GetAt(0)); - removeIncorrectCodewords(codewords, *barcodeMetadata); - return barcodeMetadata; -} -FX_BOOL CBC_DetectionResultRowIndicatorColumn::isLeft() { - return m_isLeft; -} -CFX_ByteString CBC_DetectionResultRowIndicatorColumn::toString() { - return (CFX_ByteString) "IsLeft: " + (CFX_ByteString)m_isLeft + '\n' + - CBC_DetectionResultColumn::toString(); -} -void CBC_DetectionResultRowIndicatorColumn::removeIncorrectCodewords( - CFX_PtrArray* codewords, - CBC_BarcodeMetadata barcodeMetadata) { - for (int32_t codewordRow = 0; codewordRow < codewords->GetSize(); - codewordRow++) { - CBC_Codeword* codeword = (CBC_Codeword*)codewords->GetAt(codewordRow); - if (codeword == NULL) { - continue; - } - int32_t rowIndicatorValue = codeword->getValue() % 30; - int32_t codewordRowNumber = codeword->getRowNumber(); - if (codewordRowNumber > barcodeMetadata.getRowCount()) { - codewords->SetAt(codewordRow, NULL); - continue; - } - if (!m_isLeft) { - codewordRowNumber += 2; - } - switch (codewordRowNumber % 3) { - case 0: - if (rowIndicatorValue * 3 + 1 != - barcodeMetadata.getRowCountUpperPart()) { - codewords->SetAt(codewordRow, NULL); - } - break; - case 1: - if (rowIndicatorValue / 3 != - barcodeMetadata.getErrorCorrectionLevel() || - rowIndicatorValue % 3 != barcodeMetadata.getRowCountLowerPart()) { - codewords->SetAt(codewordRow, NULL); - } - break; - case 2: - if (rowIndicatorValue + 1 != barcodeMetadata.getColumnCount()) { - codewords->SetAt(codewordRow, NULL); - } - break; - } - } -} diff --git a/xfa/src/fxbarcode/pdf417/BC_PDF417DetectionResultRowIndicatorColumn.h b/xfa/src/fxbarcode/pdf417/BC_PDF417DetectionResultRowIndicatorColumn.h deleted file mode 100644 index e235586fcd..0000000000 --- a/xfa/src/fxbarcode/pdf417/BC_PDF417DetectionResultRowIndicatorColumn.h +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_PDF417_BC_PDF417DETECTIONRESULTROWINDICATORCOLUMN_H_ -#define XFA_SRC_FXBARCODE_PDF417_BC_PDF417DETECTIONRESULTROWINDICATORCOLUMN_H_ - -class CBC_BarcodeMetadata; -class CBC_BoundingBox; -class CBC_DetectionResultRowIndicatorColumn; -class CBC_DetectionResultRowIndicatorColumn : public CBC_DetectionResultColumn { - public: - CBC_DetectionResultRowIndicatorColumn(CBC_BoundingBox* boundingBox, - FX_BOOL isLeft); - virtual ~CBC_DetectionResultRowIndicatorColumn(); - void setRowNumbers(); - int32_t adjustCompleteIndicatorColumnRowNumbers( - CBC_BarcodeMetadata barcodeMetadata); - CFX_Int32Array* getRowHeights(int32_t& e); - int32_t adjustIncompleteIndicatorColumnRowNumbers( - CBC_BarcodeMetadata barcodeMetadata); - CBC_BarcodeMetadata* getBarcodeMetadata(); - FX_BOOL isLeft(); - CFX_ByteString toString(); - - private: - FX_BOOL m_isLeft; - void removeIncorrectCodewords(CFX_PtrArray* codewords, - CBC_BarcodeMetadata barcodeMetadata); -}; - -#endif // XFA_SRC_FXBARCODE_PDF417_BC_PDF417DETECTIONRESULTROWINDICATORCOLUMN_H_ diff --git a/xfa/src/fxbarcode/pdf417/BC_PDF417Detector.cpp b/xfa/src/fxbarcode/pdf417/BC_PDF417Detector.cpp deleted file mode 100644 index 54556af97c..0000000000 --- a/xfa/src/fxbarcode/pdf417/BC_PDF417Detector.cpp +++ /dev/null @@ -1,352 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2009 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/BC_BinaryBitmap.h" -#include "xfa/src/fxbarcode/BC_ResultPoint.h" -#include "xfa/src/fxbarcode/common/BC_CommonBitArray.h" -#include "xfa/src/fxbarcode/common/BC_CommonBitMatrix.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417Detector.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417DetectorResult.h" -#include "xfa/src/fxbarcode/utils.h" - -#define INTEGER_MAX 2147483647 - -int32_t CBC_Detector::INDEXES_START_PATTERN[] = {0, 4, 1, 5}; -int32_t CBC_Detector::INDEXES_STOP_PATTERN[] = {6, 2, 7, 3}; -int32_t CBC_Detector::INTEGER_MATH_SHIFT = 8; -int32_t CBC_Detector::PATTERN_MATCH_RESULT_SCALE_FACTOR = 1 - << INTEGER_MATH_SHIFT; -int32_t CBC_Detector::MAX_AVG_VARIANCE = - (int32_t)(PATTERN_MATCH_RESULT_SCALE_FACTOR * 0.42f); -int32_t CBC_Detector::MAX_INDIVIDUAL_VARIANCE = - (int32_t)(PATTERN_MATCH_RESULT_SCALE_FACTOR * 0.8f); -int32_t CBC_Detector::START_PATTERN[] = {8, 1, 1, 1, 1, 1, 1, 3}; -int32_t CBC_Detector::STOP_PATTERN[] = {7, 1, 1, 3, 1, 1, 1, 2, 1}; -int32_t CBC_Detector::MAX_PIXEL_DRIFT = 3; -int32_t CBC_Detector::MAX_PATTERN_DRIFT = 5; -int32_t CBC_Detector::SKIPPED_ROW_COUNT_MAX = 25; -int32_t CBC_Detector::ROW_STEP = 5; -int32_t CBC_Detector::BARCODE_MIN_HEIGHT = 10; - -CBC_Detector::CBC_Detector() {} -CBC_Detector::~CBC_Detector() {} -CBC_PDF417DetectorResult* CBC_Detector::detect(CBC_BinaryBitmap* image, - int32_t hints, - FX_BOOL multiple, - int32_t& e) { - CBC_CommonBitMatrix* bitMatrix = image->GetBlackMatrix(e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - CFX_PtrArray* barcodeCoordinates = detect(multiple, bitMatrix); - if (barcodeCoordinates->GetSize() == 0) { - rotate180(bitMatrix); - barcodeCoordinates = detect(multiple, bitMatrix); - } - if (barcodeCoordinates->GetSize() == 0) { - e = BCExceptionUnSupportedBarcode; - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - } - CBC_PDF417DetectorResult* detectorResult = - new CBC_PDF417DetectorResult(bitMatrix, barcodeCoordinates); - return detectorResult; -} -void CBC_Detector::rotate180(CBC_CommonBitMatrix* bitMatrix) { - int32_t width = bitMatrix->GetWidth(); - int32_t height = bitMatrix->GetHeight(); - CBC_CommonBitArray* firstRowBitArray = new CBC_CommonBitArray(width); - CBC_CommonBitArray* secondRowBitArray = new CBC_CommonBitArray(width); - CBC_CommonBitArray* tmpBitArray = new CBC_CommonBitArray(width); - for (int32_t y = 0; y<(height + 1)>> 1; y++) { - CBC_CommonBitArray* temp = - bitMatrix->GetRow(height - 1 - y, secondRowBitArray); - CBC_CommonBitArray* tempfirstRow = firstRowBitArray; - firstRowBitArray = bitMatrix->GetRow(y, tempfirstRow); - delete tempfirstRow; - CBC_CommonBitArray* row = mirror(temp, tmpBitArray); - delete temp; - bitMatrix->SetRow(y, row); - delete row; - CBC_CommonBitArray* rowfirstRow = mirror(firstRowBitArray, tmpBitArray); - bitMatrix->SetRow(height - 1 - y, rowfirstRow); - delete rowfirstRow; - } - delete tmpBitArray; - delete firstRowBitArray; - delete secondRowBitArray; -} -CBC_CommonBitArray* CBC_Detector::mirror(CBC_CommonBitArray* input, - CBC_CommonBitArray* result) { - CBC_CommonBitArray* array = new CBC_CommonBitArray(result->GetSize()); - array->Clear(); - int32_t size = input->GetSize(); - for (int32_t i = 0; i < size; i++) { - if (input->Get(i)) { - array->Set(size - 1 - i); - } - } - return array; -} -CFX_PtrArray* CBC_Detector::detect(FX_BOOL multiple, - CBC_CommonBitMatrix* bitMatrix) { - CFX_PtrArray* barcodeCoordinates = new CFX_PtrArray; - int32_t row = 0; - int32_t column = 0; - FX_BOOL foundBarcodeInRow = FALSE; - while (row < bitMatrix->GetHeight()) { - CFX_PtrArray* vertices = findVertices(bitMatrix, row, column); - if (vertices->GetAt(0) == NULL && vertices->GetAt(3) == NULL) { - if (!foundBarcodeInRow) { - if (vertices) { - delete (vertices); - } - break; - } - foundBarcodeInRow = FALSE; - column = 0; - for (int32_t i = 0; i < barcodeCoordinates->GetSize(); i++) { - CFX_PtrArray* barcodeCoordinate = - (CFX_PtrArray*)barcodeCoordinates->GetAt(i); - if (barcodeCoordinate->GetAt(1)) { - row = row > ((CBC_ResultPoint*)barcodeCoordinate->GetAt(1))->GetY(); - } - if (barcodeCoordinate->GetAt(3)) { - row = row > ((CBC_ResultPoint*)barcodeCoordinate->GetAt(3))->GetY(); - } - } - row += ROW_STEP; - if (vertices) { - delete (vertices); - } - continue; - } - foundBarcodeInRow = TRUE; - barcodeCoordinates->Add(vertices); - if (!multiple) { - break; - } - if (vertices->GetAt(2)) { - column = (int32_t)((CBC_ResultPoint*)vertices->GetAt(2))->GetX(); - row = (int32_t)((CBC_ResultPoint*)vertices->GetAt(2))->GetY(); - } else { - column = (int32_t)((CBC_ResultPoint*)vertices->GetAt(4))->GetX(); - row = (int32_t)((CBC_ResultPoint*)vertices->GetAt(4))->GetY(); - } - } - return barcodeCoordinates; -} -CFX_PtrArray* CBC_Detector::findVertices(CBC_CommonBitMatrix* matrix, - int32_t startRow, - int32_t startColumn) { - int32_t height = matrix->GetHeight(); - int32_t width = matrix->GetWidth(); - CFX_PtrArray* result = new CFX_PtrArray; - result->SetSize(8); - CFX_PtrArray* startptr = findRowsWithPattern( - matrix, height, width, startRow, startColumn, START_PATTERN, - sizeof(START_PATTERN) / sizeof(START_PATTERN[0])); - copyToResult( - result, startptr, INDEXES_START_PATTERN, - sizeof(INDEXES_START_PATTERN) / sizeof(INDEXES_START_PATTERN[0])); - startptr->RemoveAll(); - delete startptr; - if (result->GetAt(4)) { - startColumn = (int32_t)((CBC_ResultPoint*)result->GetAt(4))->GetX(); - startRow = (int32_t)((CBC_ResultPoint*)result->GetAt(4))->GetY(); - } - CFX_PtrArray* stopptr = findRowsWithPattern( - matrix, height, width, startRow, startColumn, STOP_PATTERN, - sizeof(STOP_PATTERN) / sizeof(STOP_PATTERN[0])); - copyToResult(result, stopptr, INDEXES_STOP_PATTERN, - sizeof(INDEXES_STOP_PATTERN) / sizeof(INDEXES_STOP_PATTERN[0])); - stopptr->RemoveAll(); - delete stopptr; - return result; -} -void CBC_Detector::copyToResult(CFX_PtrArray* result, - CFX_PtrArray* tmpResult, - int32_t* destinationIndexes, - int32_t destinationLength) { - for (int32_t i = 0; i < destinationLength; i++) { - result->SetAt(destinationIndexes[i], tmpResult->GetAt(i)); - } -} -CFX_PtrArray* CBC_Detector::findRowsWithPattern(CBC_CommonBitMatrix* matrix, - int32_t height, - int32_t width, - int32_t startRow, - int32_t startColumn, - int32_t* pattern, - int32_t patternLength) { - CFX_PtrArray* result = new CFX_PtrArray; - result->SetSize(4); - FX_BOOL found = FALSE; - CFX_Int32Array counters; - counters.SetSize(patternLength); - for (; startRow < height; startRow += ROW_STEP) { - CFX_Int32Array* loc = - findGuardPattern(matrix, startColumn, startRow, width, FALSE, pattern, - patternLength, counters); - if (loc) { - while (startRow > 0) { - CFX_Int32Array* previousRowLoc = - findGuardPattern(matrix, startColumn, --startRow, width, FALSE, - pattern, patternLength, counters); - if (previousRowLoc) { - delete loc; - loc = previousRowLoc; - } else { - startRow++; - break; - } - } - result->SetAt( - 0, new CBC_ResultPoint((FX_FLOAT)loc->GetAt(0), (FX_FLOAT)startRow)); - result->SetAt( - 1, new CBC_ResultPoint((FX_FLOAT)loc->GetAt(1), (FX_FLOAT)startRow)); - found = TRUE; - delete loc; - break; - } - } - int32_t stopRow = startRow + 1; - if (found) { - int32_t skippedRowCount = 0; - CFX_Int32Array previousRowLoc; - previousRowLoc.Add((int32_t)((CBC_ResultPoint*)result->GetAt(0))->GetX()); - previousRowLoc.Add((int32_t)((CBC_ResultPoint*)result->GetAt(1))->GetX()); - for (; stopRow < height; stopRow++) { - CFX_Int32Array* loc = - findGuardPattern(matrix, previousRowLoc[0], stopRow, width, FALSE, - pattern, patternLength, counters); - if (loc && abs(previousRowLoc[0] - loc->GetAt(0)) < MAX_PATTERN_DRIFT && - abs(previousRowLoc[1] - loc->GetAt(1)) < MAX_PATTERN_DRIFT) { - previousRowLoc.Copy(*loc); - skippedRowCount = 0; - } else { - if (skippedRowCount > SKIPPED_ROW_COUNT_MAX) { - delete loc; - break; - } else { - skippedRowCount++; - } - } - delete loc; - } - stopRow -= skippedRowCount + 1; - result->SetAt(2, new CBC_ResultPoint((FX_FLOAT)previousRowLoc.GetAt(0), - (FX_FLOAT)stopRow)); - result->SetAt(3, new CBC_ResultPoint((FX_FLOAT)previousRowLoc.GetAt(1), - (FX_FLOAT)stopRow)); - } - if (stopRow - startRow < BARCODE_MIN_HEIGHT) { - for (int32_t i = 0; i < result->GetSize(); i++) { - result->SetAt(i, NULL); - } - } - return result; -} -CFX_Int32Array* CBC_Detector::findGuardPattern(CBC_CommonBitMatrix* matrix, - int32_t column, - int32_t row, - int32_t width, - FX_BOOL whiteFirst, - int32_t* pattern, - int32_t patternLength, - CFX_Int32Array& counters) { - for (int32_t i = 0; i < counters.GetSize(); i++) { - counters.SetAt(i, 0); - } - FX_BOOL isWhite = whiteFirst; - int32_t patternStart = column; - int32_t pixelDrift = 0; - CFX_Int32Array* intarray = new CFX_Int32Array; - while (matrix->Get(patternStart, row) && patternStart > 0 && - pixelDrift++ < MAX_PIXEL_DRIFT) { - patternStart--; - } - int32_t x = patternStart; - int32_t counterPosition = 0; - for (; x < width; x++) { - FX_BOOL pixel = matrix->Get(x, row); - if (pixel ^ isWhite) { - counters[counterPosition]++; - } else { - if (counterPosition == patternLength - 1) { - if (patternMatchVariance(counters, pattern, MAX_INDIVIDUAL_VARIANCE) < - MAX_AVG_VARIANCE) { - intarray->Add(patternStart); - intarray->Add(x); - return intarray; - } - patternStart += counters[0] + counters[1]; - for (int32_t l = 2, k = 0; l < patternLength; l++, k++) { - counters.SetAt(k, counters.GetAt(l)); - } - counters.SetAt(patternLength - 2, 0); - counters.SetAt(patternLength - 1, 0); - counterPosition--; - } else { - counterPosition++; - } - counters[counterPosition] = 1; - isWhite = !isWhite; - } - } - if (counterPosition == patternLength - 1) { - if (patternMatchVariance(counters, pattern, MAX_INDIVIDUAL_VARIANCE) < - MAX_AVG_VARIANCE) { - intarray->Add(patternStart); - intarray->Add(x - 1); - return intarray; - } - } - delete intarray; - return NULL; -} -int32_t CBC_Detector::patternMatchVariance(CFX_Int32Array& counters, - int32_t* pattern, - int32_t maxIndividualVariance) { - int32_t numCounters = counters.GetSize(); - int32_t total = 0; - int32_t patternLength = 0; - for (int32_t i = 0; i < numCounters; i++) { - total += counters[i]; - patternLength += pattern[i]; - } - if (total < patternLength) { - return INTEGER_MAX; - } - int32_t unitBarWidth = (total << INTEGER_MATH_SHIFT) / patternLength; - maxIndividualVariance = - (maxIndividualVariance * unitBarWidth) >> INTEGER_MATH_SHIFT; - int32_t totalVariance = 0; - for (int32_t x = 0; x < numCounters; x++) { - int32_t counter = counters[x] << INTEGER_MATH_SHIFT; - int32_t scaledPattern = pattern[x] * unitBarWidth; - int32_t variance = counter > scaledPattern ? counter - scaledPattern - : scaledPattern - counter; - if (variance > maxIndividualVariance) { - return INTEGER_MAX; - } - totalVariance += variance; - } - return totalVariance / total; -} diff --git a/xfa/src/fxbarcode/pdf417/BC_PDF417Detector.h b/xfa/src/fxbarcode/pdf417/BC_PDF417Detector.h deleted file mode 100644 index e18a2b5151..0000000000 --- a/xfa/src/fxbarcode/pdf417/BC_PDF417Detector.h +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_PDF417_BC_PDF417DETECTOR_H_ -#define XFA_SRC_FXBARCODE_PDF417_BC_PDF417DETECTOR_H_ - -class CBC_PDF417DetectorResult; -class CBC_BinaryBitmap; -class CBC_CommonBitMatrix; -class CBC_CommonBitArray; - -class CBC_Detector { - public: - CBC_Detector(); - virtual ~CBC_Detector(); - static CBC_PDF417DetectorResult* detect(CBC_BinaryBitmap* image, - int32_t hints, - FX_BOOL multiple, - int32_t& e); - static void rotate180(CBC_CommonBitMatrix* bitMatrix); - static CBC_CommonBitArray* mirror(CBC_CommonBitArray* input, - CBC_CommonBitArray* result); - - private: - static int32_t INDEXES_START_PATTERN[]; - static int32_t INDEXES_STOP_PATTERN[]; - static int32_t INTEGER_MATH_SHIFT; - static int32_t PATTERN_MATCH_RESULT_SCALE_FACTOR; - static int32_t MAX_AVG_VARIANCE; - static int32_t MAX_INDIVIDUAL_VARIANCE; - static int32_t START_PATTERN[]; - static int32_t STOP_PATTERN[]; - static int32_t MAX_PIXEL_DRIFT; - static int32_t MAX_PATTERN_DRIFT; - static int32_t SKIPPED_ROW_COUNT_MAX; - static int32_t ROW_STEP; - static int32_t BARCODE_MIN_HEIGHT; - static CFX_PtrArray* detect(FX_BOOL multiple, CBC_CommonBitMatrix* bitMatrix); - static CFX_PtrArray* findVertices(CBC_CommonBitMatrix* matrix, - int32_t startRow, - int32_t startColumn); - static void copyToResult(CFX_PtrArray* result, - CFX_PtrArray* tmpResult, - int32_t* destinationIndexes, - int32_t destinationLength); - static CFX_PtrArray* findRowsWithPattern(CBC_CommonBitMatrix* matrix, - int32_t height, - int32_t width, - int32_t startRow, - int32_t startColumn, - int32_t* pattern, - int32_t patternLength); - static CFX_Int32Array* findGuardPattern(CBC_CommonBitMatrix* matrix, - int32_t column, - int32_t row, - int32_t width, - FX_BOOL whiteFirst, - int32_t* pattern, - int32_t patternLength, - CFX_Int32Array& counters); - static int32_t patternMatchVariance(CFX_Int32Array& counters, - int32_t* pattern, - int32_t maxIndividualVariance); -}; - -#endif // XFA_SRC_FXBARCODE_PDF417_BC_PDF417DETECTOR_H_ diff --git a/xfa/src/fxbarcode/pdf417/BC_PDF417DetectorResult.cpp b/xfa/src/fxbarcode/pdf417/BC_PDF417DetectorResult.cpp deleted file mode 100644 index 395c53954b..0000000000 --- a/xfa/src/fxbarcode/pdf417/BC_PDF417DetectorResult.cpp +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2007 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/BC_ResultPoint.h" -#include "xfa/src/fxbarcode/common/BC_CommonBitMatrix.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417DetectorResult.h" - -CBC_PDF417DetectorResult::CBC_PDF417DetectorResult(CBC_CommonBitMatrix* bits, - CFX_PtrArray* points) { - m_bits = bits; - m_points = points; -} -CBC_PDF417DetectorResult::~CBC_PDF417DetectorResult() { - for (int32_t i = 0; i < m_points->GetSize(); i++) { - CFX_PtrArray* temp = (CFX_PtrArray*)m_points->GetAt(i); - for (int32_t j = 0; j < temp->GetSize(); j++) { - delete (CBC_ResultPoint*)temp->GetAt(j); - } - temp->RemoveAll(); - delete temp; - } - m_points->RemoveAll(); - delete m_points; -} -CBC_CommonBitMatrix* CBC_PDF417DetectorResult::getBits() { - return m_bits; -} - -CFX_PtrArray* CBC_PDF417DetectorResult::getPoints() { - return m_points; -} diff --git a/xfa/src/fxbarcode/pdf417/BC_PDF417DetectorResult.h b/xfa/src/fxbarcode/pdf417/BC_PDF417DetectorResult.h deleted file mode 100644 index b0b365e9a9..0000000000 --- a/xfa/src/fxbarcode/pdf417/BC_PDF417DetectorResult.h +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_PDF417_BC_PDF417DETECTORRESULT_H_ -#define XFA_SRC_FXBARCODE_PDF417_BC_PDF417DETECTORRESULT_H_ - -#include "core/include/fxcrt/fx_basic.h" - -class CBC_CommonBitMatrix; - -class CBC_PDF417DetectorResult { - public: - CBC_PDF417DetectorResult(CBC_CommonBitMatrix* bits, CFX_PtrArray* points); - virtual ~CBC_PDF417DetectorResult(); - CBC_CommonBitMatrix* getBits(); - CFX_PtrArray* getPoints(); - - private: - CBC_CommonBitMatrix* m_bits; - CFX_PtrArray* m_points; -}; - -#endif // XFA_SRC_FXBARCODE_PDF417_BC_PDF417DETECTORRESULT_H_ diff --git a/xfa/src/fxbarcode/pdf417/BC_PDF417Dimensions.cpp b/xfa/src/fxbarcode/pdf417/BC_PDF417Dimensions.cpp deleted file mode 100644 index 18edeacddb..0000000000 --- a/xfa/src/fxbarcode/pdf417/BC_PDF417Dimensions.cpp +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2012 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/pdf417/BC_PDF417Dimensions.h" - -CBC_Dimensions::CBC_Dimensions(int32_t minCols, - int32_t maxCols, - int32_t minRows, - int32_t maxRows) { - m_minCols = minCols; - m_maxCols = maxCols; - m_minRows = minRows; - m_maxRows = maxRows; -} -CBC_Dimensions::~CBC_Dimensions() {} -int32_t CBC_Dimensions::getMinCols() { - return m_minCols; -} -int32_t CBC_Dimensions::getMaxCols() { - return m_maxCols; -} -int32_t CBC_Dimensions::getMinRows() { - return m_minRows; -} -int32_t CBC_Dimensions::getMaxRows() { - return m_maxRows; -} diff --git a/xfa/src/fxbarcode/pdf417/BC_PDF417Dimensions.h b/xfa/src/fxbarcode/pdf417/BC_PDF417Dimensions.h deleted file mode 100644 index 9b69fc4a8a..0000000000 --- a/xfa/src/fxbarcode/pdf417/BC_PDF417Dimensions.h +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_PDF417_BC_PDF417DIMENSIONS_H_ -#define XFA_SRC_FXBARCODE_PDF417_BC_PDF417DIMENSIONS_H_ - -#include - -class CBC_Dimensions { - public: - CBC_Dimensions(int32_t minCols, - int32_t maxCols, - int32_t minRows, - int32_t maxRows); - virtual ~CBC_Dimensions(); - int32_t getMinCols(); - int32_t getMaxCols(); - int32_t getMinRows(); - int32_t getMaxRows(); - - private: - int32_t m_minCols; - int32_t m_maxCols; - int32_t m_minRows; - int32_t m_maxRows; -}; - -#endif // XFA_SRC_FXBARCODE_PDF417_BC_PDF417DIMENSIONS_H_ diff --git a/xfa/src/fxbarcode/pdf417/BC_PDF417ECErrorCorrection.cpp b/xfa/src/fxbarcode/pdf417/BC_PDF417ECErrorCorrection.cpp deleted file mode 100644 index aea60df578..0000000000 --- a/xfa/src/fxbarcode/pdf417/BC_PDF417ECErrorCorrection.cpp +++ /dev/null @@ -1,389 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2012 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/pdf417/BC_PDF417Common.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417ECErrorCorrection.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417ECModulusGF.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417ECModulusPoly.h" -#include "xfa/src/fxbarcode/utils.h" - -CBC_PDF417ECModulusGF* CBC_PDF417ECErrorCorrection::m_field = NULL; - -void CBC_PDF417ECErrorCorrection::Initialize(int32_t& e) { - m_field = - new CBC_PDF417ECModulusGF(CBC_PDF417Common::NUMBER_OF_CODEWORDS, 3, e); -} -void CBC_PDF417ECErrorCorrection::Finalize() { - delete m_field; -} -CBC_PDF417ECErrorCorrection::CBC_PDF417ECErrorCorrection() {} -CBC_PDF417ECErrorCorrection::~CBC_PDF417ECErrorCorrection() {} -int32_t CBC_PDF417ECErrorCorrection::decode(CFX_Int32Array& received, - int32_t numECCodewords, - CFX_Int32Array& erasures, - int32_t& e) { - CBC_PDF417ECModulusPoly poly(m_field, received, e); - BC_EXCEPTION_CHECK_ReturnValue(e, -1); - CFX_Int32Array S; - S.SetSize(numECCodewords); - FX_BOOL error = FALSE; - for (int32_t l = numECCodewords; l > 0; l--) { - int32_t eval = poly.evaluateAt(m_field->exp(l)); - S[numECCodewords - l] = eval; - if (eval != 0) { - error = TRUE; - } - } - if (!error) { - return 0; - } - CBC_PDF417ECModulusPoly* syndrome = - new CBC_PDF417ECModulusPoly(m_field, S, e); - BC_EXCEPTION_CHECK_ReturnValue(e, -1); - CBC_PDF417ECModulusPoly* buildmonomial = - m_field->buildMonomial(numECCodewords, 1, e); - if (e != BCExceptionNO) { - delete syndrome; - return -1; - } - CFX_PtrArray* sigmaOmega = - runEuclideanAlgorithm(buildmonomial, syndrome, numECCodewords, e); - delete buildmonomial; - delete syndrome; - BC_EXCEPTION_CHECK_ReturnValue(e, -1); - CBC_PDF417ECModulusPoly* sigma = - (CBC_PDF417ECModulusPoly*)sigmaOmega->GetAt(0); - CBC_PDF417ECModulusPoly* omega = - (CBC_PDF417ECModulusPoly*)sigmaOmega->GetAt(1); - CFX_Int32Array* errorLocations = findErrorLocations(sigma, e); - if (e != BCExceptionNO) { - for (int32_t i = 0; i < sigmaOmega->GetSize(); i++) { - delete (CBC_PDF417ECModulusPoly*)sigmaOmega->GetAt(i); - } - sigmaOmega->RemoveAll(); - delete sigmaOmega; - return -1; - } - CFX_Int32Array* errorMagnitudes = - findErrorMagnitudes(omega, sigma, *errorLocations, e); - if (e != BCExceptionNO) { - delete errorLocations; - for (int32_t i = 0; i < sigmaOmega->GetSize(); i++) { - delete (CBC_PDF417ECModulusPoly*)sigmaOmega->GetAt(i); - } - sigmaOmega->RemoveAll(); - delete sigmaOmega; - return -1; - } - for (int32_t i = 0; i < errorLocations->GetSize(); i++) { - int32_t log = m_field->log(errorLocations->GetAt(i), e); - - BC_EXCEPTION_CHECK_ReturnValue(e, -1); - int32_t position = received.GetSize() - 1 - log; - if (position < 0) { - e = BCExceptionChecksumException; - delete errorLocations; - delete errorMagnitudes; - for (int32_t j = 0; j < sigmaOmega->GetSize(); j++) { - delete (CBC_PDF417ECModulusPoly*)sigmaOmega->GetAt(j); - } - sigmaOmega->RemoveAll(); - delete sigmaOmega; - return -1; - } - received[position] = - m_field->subtract(received[position], errorMagnitudes->GetAt(i)); - } - int32_t result = errorLocations->GetSize(); - delete errorLocations; - delete errorMagnitudes; - for (int32_t k = 0; k < sigmaOmega->GetSize(); k++) { - delete (CBC_PDF417ECModulusPoly*)sigmaOmega->GetAt(k); - } - sigmaOmega->RemoveAll(); - delete sigmaOmega; - return result; -} -CFX_PtrArray* CBC_PDF417ECErrorCorrection::runEuclideanAlgorithm( - CBC_PDF417ECModulusPoly* a, - CBC_PDF417ECModulusPoly* b, - int32_t R, - int32_t& e) { - if (a->getDegree() < b->getDegree()) { - CBC_PDF417ECModulusPoly* temp = a; - a = b; - b = temp; - } - CBC_PDF417ECModulusPoly* rLast = a; - CBC_PDF417ECModulusPoly* r = b; - CBC_PDF417ECModulusPoly* tLast = m_field->getZero(); - CBC_PDF417ECModulusPoly* t = m_field->getOne(); - CBC_PDF417ECModulusPoly* qtemp = NULL; - CBC_PDF417ECModulusPoly* rtemp = NULL; - CBC_PDF417ECModulusPoly* ttemp = NULL; - int32_t i = 0; - int32_t j = 0; - int32_t m = 0; - int32_t n = 0; - while (r->getDegree() >= R / 2) { - CBC_PDF417ECModulusPoly* rLastLast = rLast; - CBC_PDF417ECModulusPoly* tLastLast = tLast; - rLast = r; - tLast = t; - m = i; - n = j; - if (rLast->isZero()) { - e = BCExceptionChecksumException; - if (qtemp) { - delete qtemp; - } - if (rtemp) { - delete rtemp; - } - if (ttemp) { - delete ttemp; - } - return NULL; - } - r = rLastLast; - CBC_PDF417ECModulusPoly* q = m_field->getZero(); - int32_t denominatorLeadingTerm = rLast->getCoefficient(rLast->getDegree()); - int32_t dltInverse = m_field->inverse(denominatorLeadingTerm, e); - if (e != BCExceptionNO) { - if (qtemp) { - delete qtemp; - } - if (rtemp) { - delete rtemp; - } - if (ttemp) { - delete ttemp; - } - return NULL; - } - while (r->getDegree() >= rLast->getDegree() && !r->isZero()) { - int32_t degreeDiff = r->getDegree() - rLast->getDegree(); - int32_t scale = - m_field->multiply(r->getCoefficient(r->getDegree()), dltInverse); - CBC_PDF417ECModulusPoly* buildmonomial = - m_field->buildMonomial(degreeDiff, scale, e); - if (e != BCExceptionNO) { - if (qtemp) { - delete qtemp; - } - if (rtemp) { - delete rtemp; - } - if (ttemp) { - delete ttemp; - } - return NULL; - } - q = q->add(buildmonomial, e); - delete buildmonomial; - if (qtemp) { - delete qtemp; - } - if (e != BCExceptionNO) { - if (rtemp) { - delete rtemp; - } - if (ttemp) { - delete ttemp; - } - return NULL; - } - qtemp = q; - CBC_PDF417ECModulusPoly* multiply = - rLast->multiplyByMonomial(degreeDiff, scale, e); - if (e != BCExceptionNO) { - if (qtemp) { - delete qtemp; - } - if (rtemp) { - delete rtemp; - } - if (ttemp) { - delete ttemp; - } - return NULL; - } - CBC_PDF417ECModulusPoly* temp = r; - r = temp->subtract(multiply, e); - delete multiply; - if (m > 1 && i > m) { - delete temp; - temp = NULL; - } - if (e != BCExceptionNO) { - if (qtemp) { - delete qtemp; - } - if (rtemp) { - delete rtemp; - } - if (ttemp) { - delete ttemp; - } - return NULL; - } - rtemp = r; - i = m + 1; - } - ttemp = q->multiply(tLast, e); - if (qtemp) { - delete qtemp; - qtemp = NULL; - } - if (e != BCExceptionNO) { - if (rtemp) { - delete rtemp; - } - if (ttemp) { - delete ttemp; - } - return NULL; - } - t = ttemp->subtract(tLastLast, e); - if (n > 1 && j > n) { - delete tLastLast; - } - delete ttemp; - if (e != BCExceptionNO) { - if (rtemp) { - delete rtemp; - } - return NULL; - } - ttemp = t; - t = ttemp->negative(e); - delete ttemp; - if (e != BCExceptionNO) { - if (rtemp) { - delete rtemp; - } - return NULL; - } - ttemp = t; - j++; - } - int32_t sigmaTildeAtZero = t->getCoefficient(0); - if (sigmaTildeAtZero == 0) { - e = BCExceptionChecksumException; - if (rtemp) { - delete rtemp; - } - if (ttemp) { - delete ttemp; - } - return NULL; - } - int32_t inverse = m_field->inverse(sigmaTildeAtZero, e); - if (e != BCExceptionNO) { - if (rtemp) { - delete rtemp; - } - if (ttemp) { - delete ttemp; - } - return NULL; - } - CBC_PDF417ECModulusPoly* sigma = t->multiply(inverse, e); - if (ttemp) { - delete ttemp; - } - if (e != BCExceptionNO) { - if (rtemp) { - delete rtemp; - } - return NULL; - } - CBC_PDF417ECModulusPoly* omega = r->multiply(inverse, e); - if (rtemp) { - delete rtemp; - } - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - CFX_PtrArray* modulusPoly = new CFX_PtrArray; - modulusPoly->Add(sigma); - modulusPoly->Add(omega); - return modulusPoly; -} -CFX_Int32Array* CBC_PDF417ECErrorCorrection::findErrorLocations( - CBC_PDF417ECModulusPoly* errorLocator, - int32_t& e) { - int32_t numErrors = errorLocator->getDegree(); - CFX_Int32Array* result = new CFX_Int32Array; - result->SetSize(numErrors); - int32_t ee = 0; - for (int32_t i = 1; i < m_field->getSize() && ee < numErrors; i++) { - if (errorLocator->evaluateAt(i) == 0) { - result->SetAt(ee, m_field->inverse(i, e)); - if (e != BCExceptionNO) { - delete result; - return NULL; - } - ee++; - } - } - if (ee != numErrors) { - e = BCExceptionChecksumException; - delete result; - return NULL; - } - return result; -} -CFX_Int32Array* CBC_PDF417ECErrorCorrection::findErrorMagnitudes( - CBC_PDF417ECModulusPoly* errorEvaluator, - CBC_PDF417ECModulusPoly* errorLocator, - CFX_Int32Array& errorLocations, - int32_t& e) { - int32_t errorLocatorDegree = errorLocator->getDegree(); - CFX_Int32Array formalDerivativeCoefficients; - formalDerivativeCoefficients.SetSize(errorLocatorDegree); - for (int32_t l = 1; l <= errorLocatorDegree; l++) { - formalDerivativeCoefficients[errorLocatorDegree - l] = - m_field->multiply(l, errorLocator->getCoefficient(l)); - } - CBC_PDF417ECModulusPoly formalDerivative(m_field, - formalDerivativeCoefficients, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - int32_t s = errorLocations.GetSize(); - CFX_Int32Array* result = new CFX_Int32Array; - result->SetSize(s); - for (int32_t i = 0; i < s; i++) { - int32_t xiInverse = m_field->inverse(errorLocations[i], e); - if (e != BCExceptionNO) { - delete result; - return NULL; - } - int32_t numerator = - m_field->subtract(0, errorEvaluator->evaluateAt(xiInverse)); - int32_t denominator = - m_field->inverse(formalDerivative.evaluateAt(xiInverse), e); - if (e != BCExceptionNO) { - delete result; - return NULL; - } - result->SetAt(i, m_field->multiply(numerator, denominator)); - } - return result; -} diff --git a/xfa/src/fxbarcode/pdf417/BC_PDF417ECErrorCorrection.h b/xfa/src/fxbarcode/pdf417/BC_PDF417ECErrorCorrection.h deleted file mode 100644 index 8966ae109c..0000000000 --- a/xfa/src/fxbarcode/pdf417/BC_PDF417ECErrorCorrection.h +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_PDF417_BC_PDF417ECERRORCORRECTION_H_ -#define XFA_SRC_FXBARCODE_PDF417_BC_PDF417ECERRORCORRECTION_H_ - -class CBC_PDF417ECModulusGF; -class CBC_PDF417ECModulusPoly; -class CBC_PDF417ECErrorCorrection { - public: - CBC_PDF417ECErrorCorrection(); - virtual ~CBC_PDF417ECErrorCorrection(); - static void Initialize(int32_t& e); - static void Finalize(); - static int32_t decode(CFX_Int32Array& received, - int32_t numECCodewords, - CFX_Int32Array& erasures, - int32_t& e); - - private: - static CBC_PDF417ECModulusGF* m_field; - static CFX_PtrArray* runEuclideanAlgorithm(CBC_PDF417ECModulusPoly* a, - CBC_PDF417ECModulusPoly* b, - int32_t R, - int32_t& e); - static CFX_Int32Array* findErrorLocations( - CBC_PDF417ECModulusPoly* errorLocator, - int32_t& e); - static CFX_Int32Array* findErrorMagnitudes( - CBC_PDF417ECModulusPoly* errorEvaluator, - CBC_PDF417ECModulusPoly* errorLocator, - CFX_Int32Array& errorLocations, - int32_t& e); -}; - -#endif // XFA_SRC_FXBARCODE_PDF417_BC_PDF417ECERRORCORRECTION_H_ diff --git a/xfa/src/fxbarcode/pdf417/BC_PDF417ECModulusGF.cpp b/xfa/src/fxbarcode/pdf417/BC_PDF417ECModulusGF.cpp deleted file mode 100644 index 1ba77dac16..0000000000 --- a/xfa/src/fxbarcode/pdf417/BC_PDF417ECModulusGF.cpp +++ /dev/null @@ -1,120 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2012 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/pdf417/BC_PDF417Common.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417ECModulusGF.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417ECModulusPoly.h" -#include "xfa/src/fxbarcode/utils.h" - -CBC_PDF417ECModulusGF* CBC_PDF417ECModulusGF::PDF417_GF = NULL; -void CBC_PDF417ECModulusGF::Initialize(int32_t& e) { - PDF417_GF = - new CBC_PDF417ECModulusGF(CBC_PDF417Common::NUMBER_OF_CODEWORDS, 3, e); -} -void CBC_PDF417ECModulusGF::Finalize() { - delete PDF417_GF; -} -CBC_PDF417ECModulusGF::CBC_PDF417ECModulusGF(int32_t modulus, - int32_t generator, - int32_t& e) { - m_modulus = modulus; - m_expTable.SetSize(modulus); - m_logTable.SetSize(modulus); - int32_t x = 1; - for (int32_t i = 0; i < modulus; i++) { - m_expTable[i] = x; - x = (x * generator) % modulus; - } - for (int32_t j = 0; j < modulus - 1; j++) { - m_logTable[m_expTable[j]] = j; - } - CFX_Int32Array zero; - zero.Add(0); - m_zero = new CBC_PDF417ECModulusPoly(this, zero, e); - CFX_Int32Array one; - one.Add(1); - m_one = new CBC_PDF417ECModulusPoly(this, one, e); -} -CBC_PDF417ECModulusGF::~CBC_PDF417ECModulusGF() { - delete m_zero; - delete m_one; -} -CBC_PDF417ECModulusPoly* CBC_PDF417ECModulusGF::getZero() { - return m_zero; -} -CBC_PDF417ECModulusPoly* CBC_PDF417ECModulusGF::getOne() { - return m_one; -} -CBC_PDF417ECModulusPoly* CBC_PDF417ECModulusGF::buildMonomial( - int32_t degree, - int32_t coefficient, - int32_t& e) { - if (degree < 0) { - e = BCExceptionIllegalArgument; - return NULL; - } - CBC_PDF417ECModulusPoly* modulusPoly = NULL; - if (coefficient == 0) { - modulusPoly = new CBC_PDF417ECModulusPoly(m_zero->getField(), - m_zero->getCoefficients(), e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - return modulusPoly; - } - CFX_Int32Array coefficients; - coefficients.SetSize(degree + 1); - coefficients[0] = coefficient; - modulusPoly = new CBC_PDF417ECModulusPoly(this, coefficients, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - return modulusPoly; -} -int32_t CBC_PDF417ECModulusGF::add(int32_t a, int32_t b) { - return (a + b) % m_modulus; -} -int32_t CBC_PDF417ECModulusGF::subtract(int32_t a, int32_t b) { - return (m_modulus + a - b) % m_modulus; -} -int32_t CBC_PDF417ECModulusGF::exp(int32_t a) { - return m_expTable[a]; -} -int32_t CBC_PDF417ECModulusGF::log(int32_t a, int32_t& e) { - if (a == 0) { - e = BCExceptionIllegalArgument; - return -1; - } - return m_logTable[a]; -} -int32_t CBC_PDF417ECModulusGF::inverse(int32_t a, int32_t& e) { - if (a == 0) { - e = BCExceptionIllegalArgument; - return -1; - } - return m_expTable[m_modulus - m_logTable[a] - 1]; -} -int32_t CBC_PDF417ECModulusGF::multiply(int32_t a, int32_t b) { - if (a == 0 || b == 0) { - return 0; - } - return m_expTable[(m_logTable[a] + m_logTable[b]) % (m_modulus - 1)]; -} -int32_t CBC_PDF417ECModulusGF::getSize() { - return m_modulus; -} diff --git a/xfa/src/fxbarcode/pdf417/BC_PDF417ECModulusGF.h b/xfa/src/fxbarcode/pdf417/BC_PDF417ECModulusGF.h deleted file mode 100644 index f5d245b0e3..0000000000 --- a/xfa/src/fxbarcode/pdf417/BC_PDF417ECModulusGF.h +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_PDF417_BC_PDF417ECMODULUSGF_H_ -#define XFA_SRC_FXBARCODE_PDF417_BC_PDF417ECMODULUSGF_H_ - -class CBC_PDF417ECModulusPoly; -class CBC_PDF417ECModulusGF { - public: - CBC_PDF417ECModulusGF(int32_t modulus, int32_t generator, int32_t& e); - virtual ~CBC_PDF417ECModulusGF(); - static void Initialize(int32_t& e); - static void Finalize(); - CBC_PDF417ECModulusPoly* getZero(); - CBC_PDF417ECModulusPoly* getOne(); - CBC_PDF417ECModulusPoly* buildMonomial(int32_t degree, - int32_t coefficient, - int32_t& e); - int32_t add(int32_t a, int32_t b); - int32_t subtract(int32_t a, int32_t b); - int32_t exp(int32_t a); - int32_t log(int32_t a, int32_t& e); - int32_t inverse(int32_t a, int32_t& e); - int32_t multiply(int32_t a, int32_t b); - int32_t getSize(); - static CBC_PDF417ECModulusGF* PDF417_GF; - - private: - CFX_Int32Array m_expTable; - CFX_Int32Array m_logTable; - CBC_PDF417ECModulusPoly* m_zero; - CBC_PDF417ECModulusPoly* m_one; - int32_t m_modulus; -}; - -#endif // XFA_SRC_FXBARCODE_PDF417_BC_PDF417ECMODULUSGF_H_ diff --git a/xfa/src/fxbarcode/pdf417/BC_PDF417ECModulusPoly.cpp b/xfa/src/fxbarcode/pdf417/BC_PDF417ECModulusPoly.cpp deleted file mode 100644 index 04f7752b65..0000000000 --- a/xfa/src/fxbarcode/pdf417/BC_PDF417ECModulusPoly.cpp +++ /dev/null @@ -1,332 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2012 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/pdf417/BC_PDF417Common.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417ECModulusGF.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417ECModulusPoly.h" -#include "xfa/src/fxbarcode/utils.h" - -CBC_PDF417ECModulusPoly::CBC_PDF417ECModulusPoly(CBC_PDF417ECModulusGF* field, - CFX_Int32Array& coefficients, - int32_t& e) { - if (coefficients.GetSize() == 0) { - e = BCExceptionIllegalArgument; - } - m_field = field; - int32_t coefficientsLength = coefficients.GetSize(); - if (coefficientsLength > 1 && coefficients[0] == 0) { - int32_t firstNonZero = 1; - while (firstNonZero < coefficientsLength && - coefficients[firstNonZero] == 0) { - firstNonZero++; - } - if (firstNonZero == coefficientsLength) { - m_coefficients = field->getZero()->m_coefficients; - } else { - m_coefficients.SetSize(coefficientsLength - firstNonZero); - int32_t l = 0; - for (int32_t i = firstNonZero; - i < firstNonZero + m_coefficients.GetSize(); i++) { - m_coefficients.SetAt(l, coefficients.GetAt(i)); - l++; - } - } - } else { - m_coefficients.Copy(coefficients); - } -} -CBC_PDF417ECModulusPoly::~CBC_PDF417ECModulusPoly() {} -CFX_Int32Array& CBC_PDF417ECModulusPoly::getCoefficients() { - return m_coefficients; -} -CBC_PDF417ECModulusGF* CBC_PDF417ECModulusPoly::getField() { - return m_field; -} -int32_t CBC_PDF417ECModulusPoly::getDegree() { - return m_coefficients.GetSize() - 1; -} -FX_BOOL CBC_PDF417ECModulusPoly::isZero() { - return m_coefficients[0] == 0; -} -int32_t CBC_PDF417ECModulusPoly::getCoefficient(int32_t degree) { - return m_coefficients[m_coefficients.GetSize() - 1 - degree]; -} -int32_t CBC_PDF417ECModulusPoly::evaluateAt(int32_t a) { - if (a == 0) { - return getCoefficient(0); - } - int32_t size = m_coefficients.GetSize(); - if (a == 1) { - int32_t result = 0; - for (int32_t l = 0; l < m_coefficients.GetSize(); l++) { - int32_t coefficient = m_coefficients.GetAt(l); - result = m_field->add(result, coefficient); - } - return result; - } - int32_t result = m_coefficients[0]; - for (int32_t i = 1; i < size; i++) { - result = m_field->add(m_field->multiply(a, result), m_coefficients[i]); - } - return result; -} -CBC_PDF417ECModulusPoly* CBC_PDF417ECModulusPoly::add( - CBC_PDF417ECModulusPoly* other, - int32_t& e) { - CBC_PDF417ECModulusPoly* modulusPoly = NULL; - if (isZero()) { - modulusPoly = new CBC_PDF417ECModulusPoly(other->getField(), - other->getCoefficients(), e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - return modulusPoly; - } - if (other->isZero()) { - modulusPoly = new CBC_PDF417ECModulusPoly(m_field, m_coefficients, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - return modulusPoly; - } - CFX_Int32Array smallerCoefficients; - smallerCoefficients.Copy(m_coefficients); - CFX_Int32Array largerCoefficients; - largerCoefficients.Copy(other->m_coefficients); - if (smallerCoefficients.GetSize() > largerCoefficients.GetSize()) { - CFX_Int32Array temp; - temp.Copy(smallerCoefficients); - smallerCoefficients.Copy(largerCoefficients); - largerCoefficients.Copy(temp); - } - CFX_Int32Array sumDiff; - sumDiff.SetSize(largerCoefficients.GetSize()); - int32_t lengthDiff = - largerCoefficients.GetSize() - smallerCoefficients.GetSize(); - for (int32_t l = 0; l < lengthDiff; l++) { - sumDiff.SetAt(l, largerCoefficients.GetAt(l)); - } - for (int32_t i = lengthDiff; i < largerCoefficients.GetSize(); i++) { - sumDiff[i] = m_field->add(smallerCoefficients[i - lengthDiff], - largerCoefficients[i]); - } - modulusPoly = new CBC_PDF417ECModulusPoly(m_field, sumDiff, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - return modulusPoly; -} -CBC_PDF417ECModulusPoly* CBC_PDF417ECModulusPoly::subtract( - CBC_PDF417ECModulusPoly* other, - int32_t& e) { - CBC_PDF417ECModulusPoly* modulusPoly = NULL; - if (other->isZero()) { - modulusPoly = new CBC_PDF417ECModulusPoly(m_field, m_coefficients, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - return modulusPoly; - } - CBC_PDF417ECModulusPoly* poly = other->negative(e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - modulusPoly = add(poly, e); - delete poly; - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - return modulusPoly; -} -CBC_PDF417ECModulusPoly* CBC_PDF417ECModulusPoly::multiply( - CBC_PDF417ECModulusPoly* other, - int32_t& e) { - CBC_PDF417ECModulusPoly* modulusPoly = NULL; - if (isZero() || other->isZero()) { - modulusPoly = - new CBC_PDF417ECModulusPoly(m_field->getZero()->getField(), - m_field->getZero()->getCoefficients(), e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - return modulusPoly; - } - CFX_Int32Array aCoefficients; - aCoefficients.Copy(m_coefficients); - int32_t aLength = aCoefficients.GetSize(); - CFX_Int32Array bCoefficients; - bCoefficients.Copy(other->m_coefficients); - int32_t bLength = bCoefficients.GetSize(); - CFX_Int32Array product; - product.SetSize(aLength + bLength - 1); - for (int32_t i = 0; i < aLength; i++) { - int32_t aCoeff = aCoefficients[i]; - for (int32_t j = 0; j < bLength; j++) { - product[i + j] = m_field->add( - product[i + j], m_field->multiply(aCoeff, bCoefficients[j])); - } - } - modulusPoly = new CBC_PDF417ECModulusPoly(m_field, product, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - return modulusPoly; -} -CBC_PDF417ECModulusPoly* CBC_PDF417ECModulusPoly::negative(int32_t& e) { - int32_t size = m_coefficients.GetSize(); - CFX_Int32Array negativeCoefficients; - negativeCoefficients.SetSize(size); - for (int32_t i = 0; i < size; i++) { - negativeCoefficients[i] = m_field->subtract(0, m_coefficients[i]); - } - CBC_PDF417ECModulusPoly* modulusPoly = - new CBC_PDF417ECModulusPoly(m_field, negativeCoefficients, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - return modulusPoly; -} -CBC_PDF417ECModulusPoly* CBC_PDF417ECModulusPoly::multiply(int32_t scalar, - int32_t& e) { - CBC_PDF417ECModulusPoly* modulusPoly = NULL; - if (scalar == 0) { - modulusPoly = - new CBC_PDF417ECModulusPoly(m_field->getZero()->getField(), - m_field->getZero()->getCoefficients(), e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - return modulusPoly; - } - if (scalar == 1) { - modulusPoly = new CBC_PDF417ECModulusPoly(m_field, m_coefficients, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - return modulusPoly; - } - int32_t size = m_coefficients.GetSize(); - CFX_Int32Array product; - product.SetSize(size); - for (int32_t i = 0; i < size; i++) { - product[i] = m_field->multiply(m_coefficients[i], scalar); - } - modulusPoly = new CBC_PDF417ECModulusPoly(m_field, product, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - return modulusPoly; -} -CBC_PDF417ECModulusPoly* CBC_PDF417ECModulusPoly::multiplyByMonomial( - int32_t degree, - int32_t coefficient, - int32_t& e) { - if (degree < 0) { - e = BCExceptionIllegalArgument; - return NULL; - } - CBC_PDF417ECModulusPoly* modulusPoly = NULL; - if (coefficient == 0) { - modulusPoly = new CBC_PDF417ECModulusPoly( - m_field->getZero()->m_field, m_field->getZero()->m_coefficients, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - return modulusPoly; - } - int32_t size = m_coefficients.GetSize(); - CFX_Int32Array product; - product.SetSize(size + degree); - for (int32_t i = 0; i < size; i++) { - product[i] = m_field->multiply(m_coefficients[i], coefficient); - } - modulusPoly = new CBC_PDF417ECModulusPoly(m_field, product, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - return modulusPoly; -} -CFX_PtrArray* CBC_PDF417ECModulusPoly::divide(CBC_PDF417ECModulusPoly* other, - int32_t& e) { - if (other->isZero()) { - e = BCExceptionDivideByZero; - return NULL; - } - CBC_PDF417ECModulusPoly* quotient = new CBC_PDF417ECModulusPoly( - m_field->getZero()->m_field, m_field->getZero()->m_coefficients, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - CBC_PDF417ECModulusPoly* remainder = - new CBC_PDF417ECModulusPoly(m_field, m_coefficients, e); - if (e != BCExceptionNO) { - delete quotient; - return NULL; - } - int32_t denominatorLeadingTerm = other->getCoefficient(other->getDegree()); - int32_t inverseDenominatorLeadingTerm = - m_field->inverse(denominatorLeadingTerm, e); - if (e != BCExceptionNO) { - delete quotient; - delete remainder; - return NULL; - } - while (remainder->getDegree() >= other->getDegree() && !remainder->isZero()) { - int32_t degreeDifference = remainder->getDegree() - other->getDegree(); - int32_t scale = - m_field->multiply(remainder->getCoefficient(remainder->getDegree()), - inverseDenominatorLeadingTerm); - CBC_PDF417ECModulusPoly* term = - other->multiplyByMonomial(degreeDifference, scale, e); - if (e != BCExceptionNO) { - delete quotient; - delete remainder; - return NULL; - } - CBC_PDF417ECModulusPoly* iterationQuotient = - m_field->buildMonomial(degreeDifference, scale, e); - if (e != BCExceptionNO) { - delete quotient; - delete remainder; - delete term; - return NULL; - } - CBC_PDF417ECModulusPoly* temp = quotient; - quotient = temp->add(iterationQuotient, e); - delete iterationQuotient; - delete temp; - if (e != BCExceptionNO) { - delete remainder; - return NULL; - } - temp = remainder; - remainder = temp->subtract(term, e); - delete term; - delete temp; - if (e != BCExceptionNO) { - delete quotient; - return NULL; - } - } - CFX_PtrArray* modulusPoly = new CFX_PtrArray; - modulusPoly->Add(quotient); - modulusPoly->Add(remainder); - return modulusPoly; -} -CFX_ByteString CBC_PDF417ECModulusPoly::toString() { - CFX_ByteString result; - for (int32_t degree = getDegree(); degree >= 0; degree--) { - int32_t coefficient = getCoefficient(degree); - if (coefficient != 0) { - if (coefficient < 0) { - result += " - "; - coefficient = -coefficient; - } else { - if (result.GetLength() > 0) { - result += " + "; - } - } - if (degree == 0 || coefficient != 1) { - result += coefficient; - } - if (degree != 0) { - if (degree == 1) { - result += 'x'; - } else { - result += "x^"; - result += degree; - } - } - } - } - return result; -} diff --git a/xfa/src/fxbarcode/pdf417/BC_PDF417ECModulusPoly.h b/xfa/src/fxbarcode/pdf417/BC_PDF417ECModulusPoly.h deleted file mode 100644 index 89384fcd69..0000000000 --- a/xfa/src/fxbarcode/pdf417/BC_PDF417ECModulusPoly.h +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_PDF417_BC_PDF417ECMODULUSPOLY_H_ -#define XFA_SRC_FXBARCODE_PDF417_BC_PDF417ECMODULUSPOLY_H_ - -class CBC_PDF417ECModulusGF; -class CBC_PDF417ECModulusPoly { - public: - CBC_PDF417ECModulusPoly(CBC_PDF417ECModulusGF* field, - CFX_Int32Array& coefficients, - int32_t& e); - virtual ~CBC_PDF417ECModulusPoly(); - CFX_Int32Array& getCoefficients(); - CBC_PDF417ECModulusGF* getField(); - int32_t getDegree(); - FX_BOOL isZero(); - int32_t getCoefficient(int32_t degree); - int32_t evaluateAt(int32_t a); - CBC_PDF417ECModulusPoly* add(CBC_PDF417ECModulusPoly* other, int32_t& e); - CBC_PDF417ECModulusPoly* subtract(CBC_PDF417ECModulusPoly* other, int32_t& e); - CBC_PDF417ECModulusPoly* multiply(CBC_PDF417ECModulusPoly* other, int32_t& e); - CBC_PDF417ECModulusPoly* negative(int32_t& e); - CBC_PDF417ECModulusPoly* multiply(int32_t scalar, int32_t& e); - CBC_PDF417ECModulusPoly* multiplyByMonomial(int32_t degree, - int32_t coefficient, - int32_t& e); - CFX_PtrArray* divide(CBC_PDF417ECModulusPoly* other, int32_t& e); - CFX_ByteString toString(); - - private: - CBC_PDF417ECModulusGF* m_field; - CFX_Int32Array m_coefficients; -}; - -#endif // XFA_SRC_FXBARCODE_PDF417_BC_PDF417ECMODULUSPOLY_H_ diff --git a/xfa/src/fxbarcode/pdf417/BC_PDF417ErrorCorrection.cpp b/xfa/src/fxbarcode/pdf417/BC_PDF417ErrorCorrection.cpp deleted file mode 100644 index 5fb2d8e21e..0000000000 --- a/xfa/src/fxbarcode/pdf417/BC_PDF417ErrorCorrection.cpp +++ /dev/null @@ -1,165 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2006 Jeremias Maerki in part, and ZXing Authors in part - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/pdf417/BC_PDF417ErrorCorrection.h" -#include "xfa/src/fxbarcode/utils.h" - -int32_t CBC_PDF417ErrorCorrection::EC_COEFFICIENTS[][2500] = { - {27, 917}, - {522, 568, 723, 809}, - {237, 308, 436, 284, 646, 653, 428, 379}, - {274, 562, 232, 755, 599, 524, 801, 132, 295, 116, 442, 428, 295, 42, 176, - 65}, - {361, 575, 922, 525, 176, 586, 640, 321, 536, 742, 677, 742, 687, 284, 193, - 517, 273, 494, 263, 147, 593, 800, 571, 320, 803, 133, 231, 390, 685, 330, - 63, 410}, - {539, 422, 6, 93, 862, 771, 453, 106, 610, 287, 107, 505, 733, 877, 381, - 612, 723, 476, 462, 172, 430, 609, 858, 822, 543, 376, 511, 400, 672, 762, - 283, 184, 440, 35, 519, 31, 460, 594, 225, 535, 517, 352, 605, 158, 651, - 201, 488, 502, 648, 733, 717, 83, 404, 97, 280, 771, 840, 629, 4, 381, 843, - 623, 264, 543}, - {521, 310, 864, 547, 858, 580, 296, 379, 53, 779, 897, 444, 400, 925, 749, - 415, 822, 93, 217, 208, 928, 244, 583, 620, 246, 148, 447, 631, 292, 908, - 490, 704, 516, 258, 457, 907, 594, 723, 674, 292, 272, 96, 684, 432, 686, - 606, 860, 569, 193, 219, 129, 186, 236, 287, 192, 775, 278, 173, 40, 379, - 712, 463, 646, 776, 171, 491, 297, 763, 156, 732, 95, 270, 447, 90, 507, - 48, 228, 821, 808, 898, 784, 663, 627, 378, 382, 262, 380, 602, 754, 336, - 89, 614, 87, 432, 670, 616, 157, 374, 242, 726, 600, 269, 375, 898, 845, - 454, 354, 130, 814, 587, 804, 34, 211, 330, 539, 297, 827, 865, 37, 517, - 834, 315, 550, 86, 801, 4, 108, 539}, - {524, 894, 75, 766, 882, 857, 74, 204, 82, 586, 708, 250, 905, 786, 138, - 720, 858, 194, 311, 913, 275, 190, 375, 850, 438, 733, 194, 280, 201, 280, - 828, 757, 710, 814, 919, 89, 68, 569, 11, 204, 796, 605, 540, 913, 801, - 700, 799, 137, 439, 418, 592, 668, 353, 859, 370, 694, 325, 240, 216, 257, - 284, 549, 209, 884, 315, 70, 329, 793, 490, 274, 877, 162, 749, 812, 684, - 461, 334, 376, 849, 521, 307, 291, 803, 712, 19, 358, 399, 908, 103, 511, - 51, 8, 517, 225, 289, 470, 637, 731, 66, 255, 917, 269, 463, 830, 730, 433, - 848, 585, 136, 538, 906, 90, 2, 290, 743, 199, 655, 903, 329, 49, 802, 580, - 355, 588, 188, 462, 10, 134, 628, 320, 479, 130, 739, 71, 263, 318, 374, - 601, 192, 605, 142, 673, 687, 234, 722, 384, 177, 752, 607, 640, 455, 193, - 689, 707, 805, 641, 48, 60, 732, 621, 895, 544, 261, 852, 655, 309, 697, - 755, 756, 60, 231, 773, 434, 421, 726, 528, 503, 118, 49, 795, 32, 144, - 500, 238, 836, 394, 280, 566, 319, 9, 647, 550, 73, 914, 342, 126, 32, 681, - 331, 792, 620, 60, 609, 441, 180, 791, 893, 754, 605, 383, 228, 749, 760, - 213, 54, 297, 134, 54, 834, 299, 922, 191, 910, 532, 609, 829, 189, 20, - 167, 29, 872, 449, 83, 402, 41, 656, 505, 579, 481, 173, 404, 251, 688, 95, - 497, 555, 642, 543, 307, 159, 924, 558, 648, 55, 497, 10}, - {352, 77, 373, 504, 35, 599, 428, 207, 409, 574, 118, 498, 285, 380, 350, - 492, 197, 265, 920, 155, 914, 299, 229, 643, 294, 871, 306, 88, 87, 193, - 352, 781, 846, 75, 327, 520, 435, 543, 203, 666, 249, 346, 781, 621, 640, - 268, 794, 534, 539, 781, 408, 390, 644, 102, 476, 499, 290, 632, 545, 37, - 858, 916, 552, 41, 542, 289, 122, 272, 383, 800, 485, 98, 752, 472, 761, - 107, 784, 860, 658, 741, 290, 204, 681, 407, 855, 85, 99, 62, 482, 180, 20, - 297, 451, 593, 913, 142, 808, 684, 287, 536, 561, 76, 653, 899, 729, 567, - 744, 390, 513, 192, 516, 258, 240, 518, 794, 395, 768, 848, 51, 610, 384, - 168, 190, 826, 328, 596, 786, 303, 570, 381, 415, 641, 156, 237, 151, 429, - 531, 207, 676, 710, 89, 168, 304, 402, 40, 708, 575, 162, 864, 229, 65, - 861, 841, 512, 164, 477, 221, 92, 358, 785, 288, 357, 850, 836, 827, 736, - 707, 94, 8, 494, 114, 521, 2, 499, 851, 543, 152, 729, 771, 95, 248, 361, - 578, 323, 856, 797, 289, 51, 684, 466, 533, 820, 669, 45, 902, 452, 167, - 342, 244, 173, 35, 463, 651, 51, 699, 591, 452, 578, 37, 124, 298, 332, - 552, 43, 427, 119, 662, 777, 475, 850, 764, 364, 578, 911, 283, 711, 472, - 420, 245, 288, 594, 394, 511, 327, 589, 777, 699, 688, 43, 408, 842, 383, - 721, 521, 560, 644, 714, 559, 62, 145, 873, 663, 713, 159, 672, 729, 624, - 59, 193, 417, 158, 209, 563, 564, 343, 693, 109, 608, 563, 365, 181, 772, - 677, 310, 248, 353, 708, 410, 579, 870, 617, 841, 632, 860, 289, 536, 35, - 777, 618, 586, 424, 833, 77, 597, 346, 269, 757, 632, 695, 751, 331, 247, - 184, 45, 787, 680, 18, 66, 407, 369, 54, 492, 228, 613, 830, 922, 437, 519, - 644, 905, 789, 420, 305, 441, 207, 300, 892, 827, 141, 537, 381, 662, 513, - 56, 252, 341, 242, 797, 838, 837, 720, 224, 307, 631, 61, 87, 560, 310, - 756, 665, 397, 808, 851, 309, 473, 795, 378, 31, 647, 915, 459, 806, 590, - 731, 425, 216, 548, 249, 321, 881, 699, 535, 673, 782, 210, 815, 905, 303, - 843, 922, 281, 73, 469, 791, 660, 162, 498, 308, 155, 422, 907, 817, 187, - 62, 16, 425, 535, 336, 286, 437, 375, 273, 610, 296, 183, 923, 116, 667, - 751, 353, 62, 366, 691, 379, 687, 842, 37, 357, 720, 742, 330, 5, 39, 923, - 311, 424, 242, 749, 321, 54, 669, 316, 342, 299, 534, 105, 667, 488, 640, - 672, 576, 540, 316, 486, 721, 610, 46, 656, 447, 171, 616, 464, 190, 531, - 297, 321, 762, 752, 533, 175, 134, 14, 381, 433, 717, 45, 111, 20, 596, - 284, 736, 138, 646, 411, 877, 669, 141, 919, 45, 780, 407, 164, 332, 899, - 165, 726, 600, 325, 498, 655, 357, 752, 768, 223, 849, 647, 63, 310, 863, - 251, 366, 304, 282, 738, 675, 410, 389, 244, 31, 121, 303, 263}}; - -CBC_PDF417ErrorCorrection::CBC_PDF417ErrorCorrection() {} -CBC_PDF417ErrorCorrection::~CBC_PDF417ErrorCorrection() {} -int32_t CBC_PDF417ErrorCorrection::getErrorCorrectionCodewordCount( - int32_t errorCorrectionLevel, - int32_t& e) { - if (errorCorrectionLevel < 0 || errorCorrectionLevel > 8) { - e = BCExceptionErrorCorrectionLevelMustBeBetween0And8; - return -1; - } - return 1 << (errorCorrectionLevel + 1); -} -int32_t CBC_PDF417ErrorCorrection::getRecommendedMinimumErrorCorrectionLevel( - int32_t n, - int32_t& e) { - if (n <= 0) { - e = BCExceptionIllegalArgumentnMustBeAbove0; - return -1; - } - if (n <= 40) { - return 2; - } - if (n <= 160) { - return 3; - } - if (n <= 320) { - return 4; - } - if (n <= 863) { - return 5; - } - e = BCExceptionNoRecommendationPossible; - return -1; -} -CFX_WideString CBC_PDF417ErrorCorrection::generateErrorCorrection( - CFX_WideString dataCodewords, - int32_t errorCorrectionLevel, - int32_t& e) { - int32_t k = getErrorCorrectionCodewordCount(errorCorrectionLevel, e); - BC_EXCEPTION_CHECK_ReturnValue(e, (FX_WCHAR)' '); - FX_WCHAR* ech = FX_Alloc(FX_WCHAR, k); - FXSYS_memset(ech, 0, k * sizeof(FX_WCHAR)); - int32_t sld = dataCodewords.GetLength(); - for (int32_t i = 0; i < sld; i++) { - int32_t t1 = (dataCodewords.GetAt(i) + ech[k - 1]) % 929; - int32_t t2; - int32_t t3; - for (int32_t j = k - 1; j >= 1; j--) { - t2 = (t1 * EC_COEFFICIENTS[errorCorrectionLevel][j]) % 929; - t3 = 929 - t2; - ech[j] = (FX_WCHAR)((ech[j - 1] + t3) % 929); - } - t2 = (t1 * EC_COEFFICIENTS[errorCorrectionLevel][0]) % 929; - t3 = 929 - t2; - ech[0] = (FX_WCHAR)(t3 % 929); - } - CFX_WideString sb; - for (int32_t j = k - 1; j >= 0; j--) { - if (ech[j] != 0) { - ech[j] = (FX_WCHAR)(929 - ech[j]); - } - sb += (FX_WCHAR)ech[j]; - } - FX_Free(ech); - return sb; -} diff --git a/xfa/src/fxbarcode/pdf417/BC_PDF417ErrorCorrection.h b/xfa/src/fxbarcode/pdf417/BC_PDF417ErrorCorrection.h deleted file mode 100644 index 1c73173e55..0000000000 --- a/xfa/src/fxbarcode/pdf417/BC_PDF417ErrorCorrection.h +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_PDF417_BC_PDF417ERRORCORRECTION_H_ -#define XFA_SRC_FXBARCODE_PDF417_BC_PDF417ERRORCORRECTION_H_ - -#include - -#include "core/include/fxcrt/fx_string.h" - -class CBC_PDF417ErrorCorrection { - public: - CBC_PDF417ErrorCorrection(); - virtual ~CBC_PDF417ErrorCorrection(); - static int32_t getErrorCorrectionCodewordCount(int32_t errorCorrectionLevel, - int32_t& e); - static int32_t getRecommendedMinimumErrorCorrectionLevel(int32_t n, - int32_t& e); - static CFX_WideString generateErrorCorrection(CFX_WideString dataCodewords, - int32_t errorCorrectionLevel, - int32_t& e); - - private: - static int32_t EC_COEFFICIENTS[][2500]; -}; - -#endif // XFA_SRC_FXBARCODE_PDF417_BC_PDF417ERRORCORRECTION_H_ diff --git a/xfa/src/fxbarcode/pdf417/BC_PDF417HighLevelEncoder.cpp b/xfa/src/fxbarcode/pdf417/BC_PDF417HighLevelEncoder.cpp deleted file mode 100644 index 89fed29ffa..0000000000 --- a/xfa/src/fxbarcode/pdf417/BC_PDF417HighLevelEncoder.cpp +++ /dev/null @@ -1,427 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2006 Jeremias Maerki in part, and ZXing Authors in part - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/pdf417/BC_PDF417HighLevelEncoder.h" - -#include "third_party/bigint/BigIntegerLibrary.hh" -#include "xfa/src/fxbarcode/BC_UtilCodingConvert.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417Compaction.h" -#include "xfa/src/fxbarcode/utils.h" - -#define SUBMODE_ALPHA 0 -#define SUBMODE_LOWER 1 -#define SUBMODE_MIXED 2 - -int32_t CBC_PDF417HighLevelEncoder::TEXT_COMPACTION = 0; -int32_t CBC_PDF417HighLevelEncoder::BYTE_COMPACTION = 1; -int32_t CBC_PDF417HighLevelEncoder::NUMERIC_COMPACTION = 2; -int32_t CBC_PDF417HighLevelEncoder::SUBMODE_PUNCTUATION = 3; -int32_t CBC_PDF417HighLevelEncoder::LATCH_TO_TEXT = 900; -int32_t CBC_PDF417HighLevelEncoder::LATCH_TO_BYTE_PADDED = 901; -int32_t CBC_PDF417HighLevelEncoder::LATCH_TO_NUMERIC = 902; -int32_t CBC_PDF417HighLevelEncoder::SHIFT_TO_BYTE = 913; -int32_t CBC_PDF417HighLevelEncoder::LATCH_TO_BYTE = 924; -uint8_t CBC_PDF417HighLevelEncoder::TEXT_MIXED_RAW[] = { - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 38, 13, 9, 44, 58, - 35, 45, 46, 36, 47, 43, 37, 42, 61, 94, 0, 32, 0, 0, 0}; -uint8_t CBC_PDF417HighLevelEncoder::TEXT_PUNCTUATION_RAW[] = { - 59, 60, 62, 64, 91, 92, 93, 95, 96, 126, 33, 13, 9, 44, 58, - 10, 45, 46, 36, 47, 34, 124, 42, 40, 41, 63, 123, 125, 39, 0}; -int32_t CBC_PDF417HighLevelEncoder::MIXED[128] = {0}; -int32_t CBC_PDF417HighLevelEncoder::PUNCTUATION[128] = {0}; - -void CBC_PDF417HighLevelEncoder::Initialize() { - Inverse(); -} -void CBC_PDF417HighLevelEncoder::Finalize() {} -CFX_WideString CBC_PDF417HighLevelEncoder::encodeHighLevel( - CFX_WideString wideMsg, - Compaction compaction, - int32_t& e) { - CFX_ByteString bytes; - CBC_UtilCodingConvert::UnicodeToUTF8(wideMsg, bytes); - CFX_WideString msg; - int32_t len = bytes.GetLength(); - for (int32_t i = 0; i < len; i++) { - FX_WCHAR ch = (FX_WCHAR)(bytes.GetAt(i) & 0xff); - if (ch == '?' && bytes.GetAt(i) != '?') { - e = BCExceptionCharactersOutsideISO88591Encoding; - return (FX_WCHAR*)""; - } - msg += ch; - } - CFX_ByteArray byteArr; - for (int32_t k = 0; k < bytes.GetLength(); k++) { - byteArr.Add(bytes.GetAt(k)); - } - CFX_WideString sb; - len = msg.GetLength(); - int32_t p = 0; - int32_t textSubMode = SUBMODE_ALPHA; - if (compaction == TEXT) { - encodeText(msg, p, len, sb, textSubMode); - } else if (compaction == BYTES) { - encodeBinary(&byteArr, p, byteArr.GetSize(), BYTE_COMPACTION, sb); - } else if (compaction == NUMERIC) { - sb += (FX_WCHAR)LATCH_TO_NUMERIC; - encodeNumeric(msg, p, len, sb); - } else { - int32_t encodingMode = LATCH_TO_TEXT; - while (p < len) { - int32_t n = determineConsecutiveDigitCount(msg, p); - if (n >= 13) { - sb += (FX_WCHAR)LATCH_TO_NUMERIC; - encodingMode = NUMERIC_COMPACTION; - textSubMode = SUBMODE_ALPHA; - encodeNumeric(msg, p, n, sb); - p += n; - } else { - int32_t t = determineConsecutiveTextCount(msg, p); - if (t >= 5 || n == len) { - if (encodingMode != TEXT_COMPACTION) { - sb += (FX_WCHAR)LATCH_TO_TEXT; - encodingMode = TEXT_COMPACTION; - textSubMode = SUBMODE_ALPHA; - } - textSubMode = encodeText(msg, p, t, sb, textSubMode); - p += t; - } else { - int32_t b = determineConsecutiveBinaryCount(msg, &byteArr, p, e); - BC_EXCEPTION_CHECK_ReturnValue(e, (FX_WCHAR)' '); - if (b == 0) { - b = 1; - } - if (b == 1 && encodingMode == TEXT_COMPACTION) { - encodeBinary(&byteArr, p, 1, TEXT_COMPACTION, sb); - } else { - encodeBinary(&byteArr, p, b, encodingMode, sb); - encodingMode = BYTE_COMPACTION; - textSubMode = SUBMODE_ALPHA; - } - p += b; - } - } - } - } - return sb; -} - -void CBC_PDF417HighLevelEncoder::Inverse() { - for (size_t l = 0; l < FX_ArraySize(MIXED); ++l) - MIXED[l] = -1; - - for (uint8_t i = 0; i < FX_ArraySize(TEXT_MIXED_RAW); ++i) { - uint8_t b = TEXT_MIXED_RAW[i]; - if (b != 0) - MIXED[b] = i; - } - - for (size_t l = 0; l < FX_ArraySize(PUNCTUATION); ++l) - PUNCTUATION[l] = -1; - - for (uint8_t i = 0; i < FX_ArraySize(TEXT_PUNCTUATION_RAW); ++i) { - uint8_t b = TEXT_PUNCTUATION_RAW[i]; - if (b != 0) - PUNCTUATION[b] = i; - } -} - -int32_t CBC_PDF417HighLevelEncoder::encodeText(CFX_WideString msg, - int32_t startpos, - int32_t count, - CFX_WideString& sb, - int32_t initialSubmode) { - CFX_WideString tmp; - int32_t submode = initialSubmode; - int32_t idx = 0; - while (TRUE) { - FX_WCHAR ch = msg.GetAt(startpos + idx); - switch (submode) { - case SUBMODE_ALPHA: - if (isAlphaUpper(ch)) { - if (ch == ' ') { - tmp += (FX_WCHAR)26; - } else { - tmp += (FX_WCHAR)(ch - 65); - } - } else { - if (isAlphaLower(ch)) { - submode = SUBMODE_LOWER; - tmp += (FX_WCHAR)27; - continue; - } else if (isMixed(ch)) { - submode = SUBMODE_MIXED; - tmp += (FX_WCHAR)28; - continue; - } else { - tmp += (FX_WCHAR)29; - tmp += PUNCTUATION[ch]; - break; - } - } - break; - case SUBMODE_LOWER: - if (isAlphaLower(ch)) { - if (ch == ' ') { - tmp += (FX_WCHAR)26; - } else { - tmp += (FX_WCHAR)(ch - 97); - } - } else { - if (isAlphaUpper(ch)) { - tmp += (FX_WCHAR)27; - tmp += (FX_WCHAR)(ch - 65); - break; - } else if (isMixed(ch)) { - submode = SUBMODE_MIXED; - tmp += (FX_WCHAR)28; - continue; - } else { - tmp += (FX_WCHAR)29; - tmp += PUNCTUATION[ch]; - break; - } - } - break; - case SUBMODE_MIXED: - if (isMixed(ch)) { - tmp += MIXED[ch]; - } else { - if (isAlphaUpper(ch)) { - submode = SUBMODE_ALPHA; - tmp += (FX_WCHAR)28; - continue; - } else if (isAlphaLower(ch)) { - submode = SUBMODE_LOWER; - tmp += (FX_WCHAR)27; - continue; - } else { - if (startpos + idx + 1 < count) { - FX_WCHAR next = msg.GetAt(startpos + idx + 1); - if (isPunctuation(next)) { - submode = SUBMODE_PUNCTUATION; - tmp += (FX_WCHAR)25; - continue; - } - } - tmp += (FX_WCHAR)29; - tmp += PUNCTUATION[ch]; - } - } - break; - default: - if (isPunctuation(ch)) { - tmp += PUNCTUATION[ch]; - } else { - submode = SUBMODE_ALPHA; - tmp += (FX_WCHAR)29; - continue; - } - } - idx++; - if (idx >= count) { - break; - } - } - FX_WCHAR h = 0; - int32_t len = tmp.GetLength(); - for (int32_t i = 0; i < len; i++) { - FX_BOOL odd = (i % 2) != 0; - if (odd) { - h = (FX_WCHAR)((h * 30) + tmp.GetAt(i)); - sb += h; - } else { - h = tmp.GetAt(i); - } - } - if ((len % 2) != 0) { - sb += (FX_WCHAR)((h * 30) + 29); - } - return submode; -} -void CBC_PDF417HighLevelEncoder::encodeBinary(CFX_ByteArray* bytes, - int32_t startpos, - int32_t count, - int32_t startmode, - CFX_WideString& sb) { - if (count == 1 && startmode == TEXT_COMPACTION) { - sb += (FX_WCHAR)SHIFT_TO_BYTE; - } - int32_t idx = startpos; - int32_t i = 0; - if (count >= 6) { - sb += (FX_WCHAR)LATCH_TO_BYTE; - FX_WCHAR chars[5]; - while ((startpos + count - idx) >= 6) { - int64_t t = 0; - for (i = 0; i < 6; i++) { - t <<= 8; - t += bytes->GetAt(idx + i) & 0xff; - } - for (i = 0; i < 5; i++) { - chars[i] = (FX_WCHAR)(t % 900); - t /= 900; - } - for (i = 4; i >= 0; i--) { - sb += (chars[i]); - } - idx += 6; - } - } - if (idx < startpos + count) { - sb += (FX_WCHAR)LATCH_TO_BYTE_PADDED; - } - for (i = idx; i < startpos + count; i++) { - int32_t ch = bytes->GetAt(i) & 0xff; - sb += (FX_WCHAR)ch; - } -} -void CBC_PDF417HighLevelEncoder::encodeNumeric(CFX_WideString msg, - int32_t startpos, - int32_t count, - CFX_WideString& sb) { - int32_t idx = 0; - BigInteger num900 = 900; - while (idx < count) { - CFX_WideString tmp; - int32_t len = 44 < count - idx ? 44 : count - idx; - CFX_ByteString part = - ((FX_WCHAR)'1' + msg.Mid(startpos + idx, len)).UTF8Encode(); - BigInteger bigint = stringToBigInteger(part.c_str()); - do { - int32_t c = (bigint % num900).toInt(); - tmp += (FX_WCHAR)(c); - bigint = bigint / num900; - } while (!bigint.isZero()); - for (int32_t i = tmp.GetLength() - 1; i >= 0; i--) { - sb += tmp.GetAt(i); - } - idx += len; - } -} -FX_BOOL CBC_PDF417HighLevelEncoder::isDigit(FX_WCHAR ch) { - return ch >= '0' && ch <= '9'; -} -FX_BOOL CBC_PDF417HighLevelEncoder::isAlphaUpper(FX_WCHAR ch) { - return ch == ' ' || (ch >= 'A' && ch <= 'Z'); -} -FX_BOOL CBC_PDF417HighLevelEncoder::isAlphaLower(FX_WCHAR ch) { - return ch == ' ' || (ch >= 'a' && ch <= 'z'); -} -FX_BOOL CBC_PDF417HighLevelEncoder::isMixed(FX_WCHAR ch) { - return MIXED[ch] != -1; -} -FX_BOOL CBC_PDF417HighLevelEncoder::isPunctuation(FX_WCHAR ch) { - return PUNCTUATION[ch] != -1; -} -FX_BOOL CBC_PDF417HighLevelEncoder::isText(FX_WCHAR ch) { - return ch == '\t' || ch == '\n' || ch == '\r' || (ch >= 32 && ch <= 126); -} -int32_t CBC_PDF417HighLevelEncoder::determineConsecutiveDigitCount( - CFX_WideString msg, - int32_t startpos) { - int32_t count = 0; - int32_t len = msg.GetLength(); - int32_t idx = startpos; - if (idx < len) { - FX_WCHAR ch = msg.GetAt(idx); - while (isDigit(ch) && idx < len) { - count++; - idx++; - if (idx < len) { - ch = msg.GetAt(idx); - } - } - } - return count; -} -int32_t CBC_PDF417HighLevelEncoder::determineConsecutiveTextCount( - CFX_WideString msg, - int32_t startpos) { - int32_t len = msg.GetLength(); - int32_t idx = startpos; - while (idx < len) { - FX_WCHAR ch = msg.GetAt(idx); - int32_t numericCount = 0; - while (numericCount < 13 && isDigit(ch) && idx < len) { - numericCount++; - idx++; - if (idx < len) { - ch = msg.GetAt(idx); - } - } - if (numericCount >= 13) { - return idx - startpos - numericCount; - } - if (numericCount > 0) { - continue; - } - ch = msg.GetAt(idx); - if (!isText(ch)) { - break; - } - idx++; - } - return idx - startpos; -} -int32_t CBC_PDF417HighLevelEncoder::determineConsecutiveBinaryCount( - CFX_WideString msg, - CFX_ByteArray* bytes, - int32_t startpos, - int32_t& e) { - int32_t len = msg.GetLength(); - int32_t idx = startpos; - while (idx < len) { - FX_WCHAR ch = msg.GetAt(idx); - int32_t numericCount = 0; - while (numericCount < 13 && isDigit(ch)) { - numericCount++; - int32_t i = idx + numericCount; - if (i >= len) { - break; - } - ch = msg.GetAt(i); - } - if (numericCount >= 13) { - return idx - startpos; - } - int32_t textCount = 0; - while (textCount < 5 && isText(ch)) { - textCount++; - int32_t i = idx + textCount; - if (i >= len) { - break; - } - ch = msg.GetAt(i); - } - if (textCount >= 5) { - return idx - startpos; - } - ch = msg.GetAt(idx); - if (bytes->GetAt(idx) == 63 && ch != '?') { - e = BCExceptionNonEncodableCharacterDetected; - return -1; - } - idx++; - } - return idx - startpos; -} diff --git a/xfa/src/fxbarcode/pdf417/BC_PDF417HighLevelEncoder.h b/xfa/src/fxbarcode/pdf417/BC_PDF417HighLevelEncoder.h deleted file mode 100644 index 6ce363d08f..0000000000 --- a/xfa/src/fxbarcode/pdf417/BC_PDF417HighLevelEncoder.h +++ /dev/null @@ -1,74 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_PDF417_BC_PDF417HIGHLEVELENCODER_H_ -#define XFA_SRC_FXBARCODE_PDF417_BC_PDF417HIGHLEVELENCODER_H_ - -#include "core/include/fxcrt/fx_basic.h" -#include "core/include/fxcrt/fx_string.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417Compaction.h" - -class CBC_PDF417HighLevelEncoder { - public: - static CFX_WideString encodeHighLevel(CFX_WideString msg, - Compaction compaction, - int32_t& e); - static void Inverse(); - static void Initialize(); - static void Finalize(); - - private: - static int32_t TEXT_COMPACTION; - static int32_t BYTE_COMPACTION; - static int32_t NUMERIC_COMPACTION; - static int32_t SUBMODE_PUNCTUATION; - static int32_t LATCH_TO_TEXT; - static int32_t LATCH_TO_BYTE_PADDED; - static int32_t LATCH_TO_NUMERIC; - static int32_t SHIFT_TO_BYTE; - static int32_t LATCH_TO_BYTE; - static uint8_t TEXT_MIXED_RAW[]; - static uint8_t TEXT_PUNCTUATION_RAW[]; - static int32_t MIXED[128]; - static int32_t PUNCTUATION[128]; - static int32_t encodeText(CFX_WideString msg, - int32_t startpos, - int32_t count, - CFX_WideString& sb, - int32_t initialSubmode); - static void encodeBinary(CFX_ByteArray* bytes, - int32_t startpos, - int32_t count, - int32_t startmode, - CFX_WideString& sb); - static void encodeNumeric(CFX_WideString msg, - int32_t startpos, - int32_t count, - CFX_WideString& sb); - static FX_BOOL isDigit(FX_WCHAR ch); - static FX_BOOL isAlphaUpper(FX_WCHAR ch); - static FX_BOOL isAlphaLower(FX_WCHAR ch); - static FX_BOOL isMixed(FX_WCHAR ch); - static FX_BOOL isPunctuation(FX_WCHAR ch); - static FX_BOOL isText(FX_WCHAR ch); - static int32_t determineConsecutiveDigitCount(CFX_WideString msg, - int32_t startpos); - static int32_t determineConsecutiveTextCount(CFX_WideString msg, - int32_t startpos); - static int32_t determineConsecutiveBinaryCount(CFX_WideString msg, - CFX_ByteArray* bytes, - int32_t startpos, - int32_t& e); - - friend class PDF417HighLevelEncoder_EncodeNumeric_Test; - friend class PDF417HighLevelEncoder_EncodeBinary_Test; - friend class PDF417HighLevelEncoder_EncodeText_Test; - friend class PDF417HighLevelEncoder_ConsecutiveDigitCount_Test; - friend class PDF417HighLevelEncoder_ConsecutiveTextCount_Test; - friend class PDF417HighLevelEncoder_ConsecutiveBinaryCount_Test; -}; - -#endif // XFA_SRC_FXBARCODE_PDF417_BC_PDF417HIGHLEVELENCODER_H_ diff --git a/xfa/src/fxbarcode/pdf417/BC_PDF417HighLevelEncoder_unittest.cpp b/xfa/src/fxbarcode/pdf417/BC_PDF417HighLevelEncoder_unittest.cpp deleted file mode 100644 index b0f717e5bc..0000000000 --- a/xfa/src/fxbarcode/pdf417/BC_PDF417HighLevelEncoder_unittest.cpp +++ /dev/null @@ -1,239 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "core/include/fxcrt/fx_basic.h" -#include "testing/fx_string_testhelpers.h" -#include "testing/gtest/include/gtest/gtest.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417HighLevelEncoder.h" - -TEST(PDF417HighLevelEncoder, EncodeHighLevel) { - // TODO(tsepez): implement test cases. -} - -TEST(PDF417HighLevelEncoder, EncodeText) { - // TODO(tsepez): implement test cases. -} - -TEST(PDF417HighLevelEncoder, EncodeBinary) { - struct EncodeBinaryCase { - const char* input; - int offset; - int count; - int startmode; - const wchar_t* expected; - int expected_length; - } encode_binary_cases[] = { - // Empty string encodes as empty string. - {"", 0, 0, CBC_PDF417HighLevelEncoder::TEXT_COMPACTION, L"", 0}, - - // Fewer than 6 characters encodes as prefix without compaction. - {"xxxxx", 0, 5, CBC_PDF417HighLevelEncoder::TEXT_COMPACTION, - L"\x0385xxxxx", 6}, - - // 6 charcters triggerst text encoding compaction. - {"xxxxxx", 0, 6, CBC_PDF417HighLevelEncoder::TEXT_COMPACTION, - L"\u039c\u00c9\u031f\u012a\u00d2\u02d0", 6}, - - // Same result if initially in numeric compaction mode. - {"xxxxxx", 0, 6, CBC_PDF417HighLevelEncoder::NUMERIC_COMPACTION, - L"\u039c\u00c9\u031f\u012a\u00d2\u02d0", 6}, - }; - - CBC_PDF417HighLevelEncoder::Initialize(); - for (size_t i = 0; i < FX_ArraySize(encode_binary_cases); ++i) { - EncodeBinaryCase* ptr = &encode_binary_cases[i]; - CFX_ByteArray input_array; - size_t input_length = strlen(ptr->input); - input_array.SetSize(input_length); - for (size_t j = 0; j < input_length; ++j) { - input_array.SetAt(j, ptr->input[j]); - } - CFX_WideString expected(ptr->expected, ptr->expected_length); - CFX_WideString result; - CBC_PDF417HighLevelEncoder::encodeBinary( - &input_array, ptr->offset, ptr->count, ptr->startmode, result); - EXPECT_EQ(expected, result) << " for case number " << i; - } - CBC_PDF417HighLevelEncoder::Finalize(); -} - -TEST(PDF417HighLevelEncoder, EncodeNumeric) { - struct EncodeNumericCase { - const wchar_t* input; - int offset; - int count; - const wchar_t* expected; - int expected_length; - } encode_numeric_cases[] = { - // Empty string encodes as empty string. - {L"", 0, 0, L"", 0}, - - // Single 0 should encode as 10 base-900 == a. - {L"0", 0, 1, L"\x000a", 1}, - - // 800 should encode as 1800 base-900 == 2,0. - {L"800", 0, 3, L"\x0002\x0000", 2}, - - // Test longer strings and sub-strings. - {L"123456", 0, 6, L"\x0001\x015c\x0100", 3}, - {L"123456", 0, 5, L"\x007c\x02e9", 2}, - {L"123456", 1, 5, L"\x0089\x009c", 2}, - {L"123456", 2, 2, L"\x0086", 1}, - - // Up to 44 characters encodes as 15 base-900 words. - {L"00000000000000000000000000000000000000000000", - 0, - 44, - L"\x01b5\x006f\x02cc\x0084\x01bc\x0076\x00b3\x005c\x01f0\x034f\x01e6" - L"\x0090\x020b\x019b\x0064", - 15}, - - // 45 characters should encode as same 15 words followed by one additional - // word. - {L"000000000000000000000000000000000000000000000", - 0, - 45, - L"\x01b5\x006f\x02cc\x0084\x01bc\x0076\x00b3\x005c\x01f0\x034f\x01e6" - L"\x0090\x020b\x019b\x0064\x000a", - 16}, - - // 44 characters followed by 800 should encode as 15 words followed by - // 1800 base-900 == 2,0. - {L"00000000000000000000000000000000000000000000800", - 0, - 47, - L"\x01b5\x006f\x02cc\x0084\x01bc\x0076\x00b3\x005c\x01f0\x034f\x01e6" - L"\x0090\x020b\x019b\x0064\x0002\x0000", - 17}, - - // Even longer input. - {L"10000000000000000000000000000000000000000000000000", - 0, - 50, - L"\x01e0\x02f0\x036d\x02ad\x029c\x01ea\x0011\x000b\x02d6\x023c\x0108" - L"\x02bb\x0023\x02d2\x00c8\x0001\x00d3\x0064", - 18}, - }; - - CBC_PDF417HighLevelEncoder::Initialize(); - for (size_t i = 0; i < FX_ArraySize(encode_numeric_cases); ++i) { - EncodeNumericCase* ptr = &encode_numeric_cases[i]; - CFX_WideString input(ptr->input); - CFX_WideString expected(ptr->expected, ptr->expected_length); - CFX_WideString result; - CBC_PDF417HighLevelEncoder::encodeNumeric(input, ptr->offset, ptr->count, - result); - EXPECT_EQ(expected, result) << " for case number " << i; - } - CBC_PDF417HighLevelEncoder::Finalize(); -} - -TEST(PDF417HighLevelEncoder, ConsecutiveDigitCount) { - struct ConsecutiveDigitCase { - const wchar_t* input; - int offset; - int expected_count; - } consecutive_digit_cases[] = { - // Empty string contains 0 consecuitve digits. - {L"", 0, 0}, - - // Single non-digit character contains 0 consecutive digits. - {L"X", 0, 0}, - - // Leading non-digit followed by digits contains 0 consecutive. - {L"X123", 0, 0}, - - // Single digit contains 1 consecutive digit. - {L"1", 0, 1}, - - // Single digit followe by non-digit contains 1 consecutive digit. - {L"1Z", 0, 1}, - - // Test longer strings. - {L"123FOO45678", 0, 3}, - - // Test subtring starting in digits field. - {L"123FOO45678", 3, 0}, - - // Test subtring starting in non-digits field. - {L"123FOO45678", 3, 0}, - - // Test substring starting in digits field following non-digit field. - {L"123FOO45678", 6, 5}, - }; - - CBC_PDF417HighLevelEncoder::Initialize(); - for (size_t i = 0; i < FX_ArraySize(consecutive_digit_cases); ++i) { - ConsecutiveDigitCase* ptr = &consecutive_digit_cases[i]; - CFX_WideString input(ptr->input); - int actual_count = - CBC_PDF417HighLevelEncoder::determineConsecutiveDigitCount(input, - ptr->offset); - EXPECT_EQ(ptr->expected_count, actual_count) << " for case number " << i; - } - CBC_PDF417HighLevelEncoder::Finalize(); -} - -TEST(PDF417HighLevelEncoder, ConsecutiveTextCount) { - struct ConsecutiveTextCase { - const wchar_t* input; - int offset; - int expected_count; - } consecutive_text_cases[] = { - // Empty string contains 0 consecutive text characters. - {L"", 0, 0}, - - // Single text character is 1 consecutive text characters. - {L"X", 0, 1}, - - // Trailing numbers count as text characters. - {L"X123", 0, 4}, - - // Leading numbers count as text characters. - {L"123X", 0, 4}, - - // Embedded lo-value binary characters terminate text runs. - {L"ABC\x0001XXXX", 0, 3}, - - // Embedded hi-value binary characters terminate text runs. - {L"ABC\x0100XXXX", 0, 3}, - - // Text run still found after indexing past lo-value character. - {L"ABC\x0001XXXX", 4, 4}, - - // Text run still found after indexing past hi-value character. - {L"ABC\x0100XXXX", 4, 4}, - - // Leading hi-value character results in 0 consecutive characters. - {L"\x0100XXX", 0, 0}, - - // Up to 12 numbers count as text. - {L"123456789012", 0, 12}, - - // 13 or more numbers are compresssed using numeric compression, not text. - {L"1234567890123", 0, 0}, - - // Leading Text character doesn't affect the 12 character case. - {L"X123456789012", 0, 13}, - - // Leading Text character doesn't affect the 13 character case. - {L"X1234567890123", 0, 1}, - - // Jumping between numbers and letters works properly. - {L"XXX121XXX12345678901234", 0, 9}, - }; - - CBC_PDF417HighLevelEncoder::Initialize(); - for (size_t i = 0; i < FX_ArraySize(consecutive_text_cases); ++i) { - ConsecutiveTextCase* ptr = &consecutive_text_cases[i]; - CFX_WideString input(ptr->input); - int actual_count = - CBC_PDF417HighLevelEncoder::determineConsecutiveTextCount(input, - ptr->offset); - EXPECT_EQ(ptr->expected_count, actual_count) << " for case number " << i; - } - CBC_PDF417HighLevelEncoder::Finalize(); -} - -TEST(PDF417HighLevelEncoder, ConsecutiveBinaryCount) {} diff --git a/xfa/src/fxbarcode/pdf417/BC_PDF417Reader.cpp b/xfa/src/fxbarcode/pdf417/BC_PDF417Reader.cpp deleted file mode 100644 index 6365e27efb..0000000000 --- a/xfa/src/fxbarcode/pdf417/BC_PDF417Reader.cpp +++ /dev/null @@ -1,149 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2009 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include - -#include "xfa/src/fxbarcode/BC_BinaryBitmap.h" -#include "xfa/src/fxbarcode/BC_BinaryBitmap.h" -#include "xfa/src/fxbarcode/BC_DecoderResult.h" -#include "xfa/src/fxbarcode/BC_Reader.h" -#include "xfa/src/fxbarcode/BC_ResultPoint.h" -#include "xfa/src/fxbarcode/common/BC_CommonBitArray.h" -#include "xfa/src/fxbarcode/common/BC_CommonBitMatrix.h" -#include "xfa/src/fxbarcode/common/BC_CommonBitMatrix.h" -#include "xfa/src/fxbarcode/common/BC_CommonDecoderResult.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417BarcodeMetadata.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417BarcodeValue.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417BoundingBox.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417Codeword.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417CodewordDecoder.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417Common.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417DecodedBitStreamParser.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417DecodedBitStreamParser.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417DecodedBitStreamParser.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417DetectionResult.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417DetectionResultColumn.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417DetectionResultRowIndicatorColumn.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417Detector.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417DetectorResult.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417DetectorResult.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417ECErrorCorrection.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417ECModulusGF.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417ECModulusPoly.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417Reader.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417ScanningDecoder.h" -#include "xfa/src/fxbarcode/utils.h" - -CBC_PDF417Reader::CBC_PDF417Reader() {} -CBC_PDF417Reader::~CBC_PDF417Reader() {} - -CFX_ByteString CBC_PDF417Reader::Decode(CBC_BinaryBitmap* image, int32_t& e) { - return Decode(image, 0, e); -} -CFX_ByteString CBC_PDF417Reader::Decode(CBC_BinaryBitmap* image, - FX_BOOL multiple, - int32_t hints, - int32_t& e) { - CFX_ByteString results; - CBC_PDF417DetectorResult* detectorResult = - CBC_Detector::detect(image, hints, multiple, e); - BC_EXCEPTION_CHECK_ReturnValue(e, ""); - for (int32_t i = 0; i < detectorResult->getPoints()->GetSize(); i++) { - CFX_PtrArray* points = (CFX_PtrArray*)detectorResult->getPoints()->GetAt(i); - CBC_CommonDecoderResult* ResultTemp = CBC_PDF417ScanningDecoder::decode( - detectorResult->getBits(), (CBC_ResultPoint*)points->GetAt(4), - (CBC_ResultPoint*)points->GetAt(5), (CBC_ResultPoint*)points->GetAt(6), - (CBC_ResultPoint*)points->GetAt(7), getMinCodewordWidth(*points), - getMaxCodewordWidth(*points), e); - if (ResultTemp == NULL) { - delete detectorResult; - e = BCExceptiontNotFoundInstance; - return ""; - } - results += ResultTemp->GetText(); - delete ResultTemp; - } - delete detectorResult; - return results; -} -CFX_ByteString CBC_PDF417Reader::Decode(CBC_BinaryBitmap* image, - int32_t hints, - int32_t& e) { - CFX_ByteString bs = Decode(image, FALSE, 0, e); - BC_EXCEPTION_CHECK_ReturnValue(e, ""); - return bs; -} -int32_t CBC_PDF417Reader::getMaxWidth(CBC_ResultPoint* p1, - CBC_ResultPoint* p2) { - if (p1 == NULL || p2 == NULL) { - return 0; - } - return (int32_t)FXSYS_fabs(p1->GetX() - p2->GetX()); -} -int32_t CBC_PDF417Reader::getMinWidth(CBC_ResultPoint* p1, - CBC_ResultPoint* p2) { - if (!p1 || !p2) - return std::numeric_limits::max(); - return (int32_t)FXSYS_fabs(p1->GetX() - p2->GetX()); -} -int32_t CBC_PDF417Reader::getMaxCodewordWidth(CFX_PtrArray& p) { - int32_t a = - getMaxWidth((CBC_ResultPoint*)p.GetAt(6), (CBC_ResultPoint*)p.GetAt(2)) * - CBC_PDF417Common::MODULES_IN_CODEWORD / - CBC_PDF417Common::MODULES_IN_STOP_PATTERN; - int32_t b = - getMaxWidth((CBC_ResultPoint*)p.GetAt(7), (CBC_ResultPoint*)p.GetAt(3)) * - CBC_PDF417Common::MODULES_IN_CODEWORD / - CBC_PDF417Common::MODULES_IN_STOP_PATTERN; - int32_t c = getMaxWidth((CBC_ResultPoint*)p.GetAt(0), - (CBC_ResultPoint*)p.GetAt(4)) < a - ? getMaxWidth((CBC_ResultPoint*)p.GetAt(0), - (CBC_ResultPoint*)p.GetAt(4)) - : a; - int32_t d = getMaxWidth((CBC_ResultPoint*)p.GetAt(1), - (CBC_ResultPoint*)p.GetAt(5)) < b - ? getMaxWidth((CBC_ResultPoint*)p.GetAt(1), - (CBC_ResultPoint*)p.GetAt(5)) - : b; - return c < d ? c : d; -} -int32_t CBC_PDF417Reader::getMinCodewordWidth(CFX_PtrArray& p) { - int32_t a = - getMinWidth((CBC_ResultPoint*)p.GetAt(6), (CBC_ResultPoint*)p.GetAt(2)) * - CBC_PDF417Common::MODULES_IN_CODEWORD / - CBC_PDF417Common::MODULES_IN_STOP_PATTERN; - int32_t b = - getMinWidth((CBC_ResultPoint*)p.GetAt(7), (CBC_ResultPoint*)p.GetAt(3)) * - CBC_PDF417Common::MODULES_IN_CODEWORD / - CBC_PDF417Common::MODULES_IN_STOP_PATTERN; - int32_t c = getMinWidth((CBC_ResultPoint*)p.GetAt(0), - (CBC_ResultPoint*)p.GetAt(4)) < a - ? getMinWidth((CBC_ResultPoint*)p.GetAt(0), - (CBC_ResultPoint*)p.GetAt(4)) - : a; - int32_t d = getMinWidth((CBC_ResultPoint*)p.GetAt(1), - (CBC_ResultPoint*)p.GetAt(5)) < b - ? getMinWidth((CBC_ResultPoint*)p.GetAt(1), - (CBC_ResultPoint*)p.GetAt(5)) - : b; - return c < d ? c : d; -} diff --git a/xfa/src/fxbarcode/pdf417/BC_PDF417Reader.h b/xfa/src/fxbarcode/pdf417/BC_PDF417Reader.h deleted file mode 100644 index 5c19d86b97..0000000000 --- a/xfa/src/fxbarcode/pdf417/BC_PDF417Reader.h +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_PDF417_BC_PDF417READER_H_ -#define XFA_SRC_FXBARCODE_PDF417_BC_PDF417READER_H_ - -class CBC_BinaryBitmap; -class CBC_ResultPoint; -class CBC_PDF417Reader; -class CBC_PDF417Reader : public CBC_Reader { - public: - CBC_PDF417Reader(); - virtual ~CBC_PDF417Reader(); - CFX_ByteString Decode(CBC_BinaryBitmap* image, int32_t& e); - CFX_ByteString Decode(CBC_BinaryBitmap* image, - FX_BOOL multiple, - int32_t hints, - int32_t& e); - CFX_ByteString Decode(CBC_BinaryBitmap* image, int32_t hints, int32_t& e); - - private: - static int32_t getMaxWidth(CBC_ResultPoint* p1, CBC_ResultPoint* p2); - static int32_t getMinWidth(CBC_ResultPoint* p1, CBC_ResultPoint* p2); - static int32_t getMaxCodewordWidth(CFX_PtrArray& p); - static int32_t getMinCodewordWidth(CFX_PtrArray& p); -}; - -#endif // XFA_SRC_FXBARCODE_PDF417_BC_PDF417READER_H_ diff --git a/xfa/src/fxbarcode/pdf417/BC_PDF417ResultMetadata.cpp b/xfa/src/fxbarcode/pdf417/BC_PDF417ResultMetadata.cpp deleted file mode 100644 index 5bfcdee412..0000000000 --- a/xfa/src/fxbarcode/pdf417/BC_PDF417ResultMetadata.cpp +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2013 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/pdf417/BC_PDF417ResultMetadata.h" - -CBC_PDF417ResultMetadata::CBC_PDF417ResultMetadata() {} -CBC_PDF417ResultMetadata::~CBC_PDF417ResultMetadata() {} -int32_t CBC_PDF417ResultMetadata::getSegmentIndex() { - return m_segmentIndex; -} -void CBC_PDF417ResultMetadata::setSegmentIndex(int32_t segmentIndex) { - m_segmentIndex = segmentIndex; -} -CFX_ByteString CBC_PDF417ResultMetadata::getFileId() { - return m_fileId; -} -void CBC_PDF417ResultMetadata::setFileId(CFX_ByteString fileId) { - m_fileId = fileId; -} -CFX_Int32Array& CBC_PDF417ResultMetadata::getOptionalData() { - return m_optionalData; -} -void CBC_PDF417ResultMetadata::setOptionalData(CFX_Int32Array& optionalData) { - m_optionalData.Copy(optionalData); -} -FX_BOOL CBC_PDF417ResultMetadata::isLastSegment() { - return m_lastSegment; -} -void CBC_PDF417ResultMetadata::setLastSegment(FX_BOOL lastSegment) { - m_lastSegment = lastSegment; -} diff --git a/xfa/src/fxbarcode/pdf417/BC_PDF417ResultMetadata.h b/xfa/src/fxbarcode/pdf417/BC_PDF417ResultMetadata.h deleted file mode 100644 index a70d3efc4a..0000000000 --- a/xfa/src/fxbarcode/pdf417/BC_PDF417ResultMetadata.h +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_PDF417_BC_PDF417RESULTMETADATA_H_ -#define XFA_SRC_FXBARCODE_PDF417_BC_PDF417RESULTMETADATA_H_ - -#include "core/include/fxcrt/fx_basic.h" - -class CBC_PDF417ResultMetadata { - public: - CBC_PDF417ResultMetadata(); - virtual ~CBC_PDF417ResultMetadata(); - int32_t getSegmentIndex(); - void setSegmentIndex(int32_t segmentIndex); - CFX_ByteString getFileId(); - void setFileId(CFX_ByteString fileId); - CFX_Int32Array& getOptionalData(); - void setOptionalData(CFX_Int32Array& optionalData); - FX_BOOL isLastSegment(); - void setLastSegment(FX_BOOL lastSegment); - - private: - int32_t m_segmentIndex; - CFX_ByteString m_fileId; - CFX_Int32Array m_optionalData; - FX_BOOL m_lastSegment; -}; - -#endif // XFA_SRC_FXBARCODE_PDF417_BC_PDF417RESULTMETADATA_H_ diff --git a/xfa/src/fxbarcode/pdf417/BC_PDF417ScanningDecoder.cpp b/xfa/src/fxbarcode/pdf417/BC_PDF417ScanningDecoder.cpp deleted file mode 100644 index 820b15e91d..0000000000 --- a/xfa/src/fxbarcode/pdf417/BC_PDF417ScanningDecoder.cpp +++ /dev/null @@ -1,752 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2013 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/BC_DecoderResult.h" -#include "xfa/src/fxbarcode/BC_ResultPoint.h" -#include "xfa/src/fxbarcode/common/BC_CommonBitMatrix.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417BarcodeMetadata.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417BarcodeValue.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417BoundingBox.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417Codeword.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417CodewordDecoder.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417Common.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417DecodedBitStreamParser.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417DecodedBitStreamParser.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417DecodedBitStreamParser.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417DetectionResult.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417DetectionResultColumn.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417DetectionResultRowIndicatorColumn.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417ECErrorCorrection.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417ECModulusGF.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417ECModulusPoly.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417ScanningDecoder.h" -#include "xfa/src/fxbarcode/utils.h" - -int32_t CBC_PDF417ScanningDecoder::CODEWORD_SKEW_SIZE = 2; -int32_t CBC_PDF417ScanningDecoder::MAX_ERRORS = 3; -int32_t CBC_PDF417ScanningDecoder::MAX_EC_CODEWORDS = 512; -CBC_PDF417ECErrorCorrection* CBC_PDF417ScanningDecoder::errorCorrection = NULL; - -CBC_PDF417ScanningDecoder::CBC_PDF417ScanningDecoder() {} -CBC_PDF417ScanningDecoder::~CBC_PDF417ScanningDecoder() {} -void CBC_PDF417ScanningDecoder::Initialize() { - errorCorrection = new CBC_PDF417ECErrorCorrection; -} -void CBC_PDF417ScanningDecoder::Finalize() { - delete errorCorrection; -} -CBC_CommonDecoderResult* CBC_PDF417ScanningDecoder::decode( - CBC_CommonBitMatrix* image, - CBC_ResultPoint* imageTopLeft, - CBC_ResultPoint* imageBottomLeft, - CBC_ResultPoint* imageTopRight, - CBC_ResultPoint* imageBottomRight, - int32_t minCodewordWidth, - int32_t maxCodewordWidth, - int32_t& e) { - CBC_BoundingBox* boundingBox = new CBC_BoundingBox( - image, imageTopLeft, imageBottomLeft, imageTopRight, imageBottomRight, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - CBC_DetectionResultRowIndicatorColumn* leftRowIndicatorColumn = NULL; - CBC_DetectionResultRowIndicatorColumn* rightRowIndicatorColumn = NULL; - CBC_DetectionResult* detectionResult = NULL; - for (int32_t i = 0; i < 2; i++) { - if (imageTopLeft) { - leftRowIndicatorColumn = - getRowIndicatorColumn(image, boundingBox, *imageTopLeft, TRUE, - minCodewordWidth, maxCodewordWidth); - } - if (imageTopRight) { - rightRowIndicatorColumn = - getRowIndicatorColumn(image, boundingBox, *imageTopRight, FALSE, - minCodewordWidth, maxCodewordWidth); - } - detectionResult = merge(leftRowIndicatorColumn, rightRowIndicatorColumn, e); - if (e != BCExceptionNO) { - e = BCExceptiontNotFoundInstance; - delete leftRowIndicatorColumn; - delete rightRowIndicatorColumn; - delete boundingBox; - return NULL; - } - if (i == 0 && (detectionResult->getBoundingBox()->getMinY() < - boundingBox->getMinY() || - detectionResult->getBoundingBox()->getMaxY() > - boundingBox->getMaxY())) { - delete boundingBox; - boundingBox = detectionResult->getBoundingBox(); - } else { - detectionResult->setBoundingBox(boundingBox); - break; - } - } - int32_t maxBarcodeColumn = detectionResult->getBarcodeColumnCount() + 1; - detectionResult->setDetectionResultColumn(0, leftRowIndicatorColumn); - detectionResult->setDetectionResultColumn(maxBarcodeColumn, - rightRowIndicatorColumn); - FX_BOOL leftToRight = leftRowIndicatorColumn != NULL; - for (int32_t barcodeColumnCount = 1; barcodeColumnCount <= maxBarcodeColumn; - barcodeColumnCount++) { - int32_t barcodeColumn = leftToRight ? barcodeColumnCount - : maxBarcodeColumn - barcodeColumnCount; - if (detectionResult->getDetectionResultColumn(barcodeColumn)) { - continue; - } - CBC_DetectionResultColumn* detectionResultColumn = NULL; - if (barcodeColumn == 0 || barcodeColumn == maxBarcodeColumn) { - detectionResultColumn = new CBC_DetectionResultRowIndicatorColumn( - boundingBox, barcodeColumn == 0); - } else { - detectionResultColumn = new CBC_DetectionResultColumn(boundingBox); - } - detectionResult->setDetectionResultColumn(barcodeColumn, - detectionResultColumn); - int32_t startColumn = -1; - int32_t previousStartColumn = startColumn; - for (int32_t imageRow = boundingBox->getMinY(); - imageRow <= boundingBox->getMaxY(); imageRow++) { - startColumn = - getStartColumn(detectionResult, barcodeColumn, imageRow, leftToRight); - if (startColumn < 0 || startColumn > boundingBox->getMaxX()) { - if (previousStartColumn == -1) { - continue; - } - startColumn = previousStartColumn; - } - CBC_Codeword* codeword = detectCodeword( - image, boundingBox->getMinX(), boundingBox->getMaxX(), leftToRight, - startColumn, imageRow, minCodewordWidth, maxCodewordWidth); - if (codeword) { - detectionResultColumn->setCodeword(imageRow, codeword); - previousStartColumn = startColumn; - minCodewordWidth = minCodewordWidth < codeword->getWidth() - ? minCodewordWidth - : codeword->getWidth(); - maxCodewordWidth = maxCodewordWidth > codeword->getWidth() - ? maxCodewordWidth - : codeword->getWidth(); - } - } - } - CBC_CommonDecoderResult* decoderresult = - createDecoderResult(detectionResult, e); - if (e != BCExceptionNO) { - delete detectionResult; - return NULL; - } - return decoderresult; -} -CFX_ByteString CBC_PDF417ScanningDecoder::toString( - CFX_PtrArray* barcodeMatrix) { - CFX_ByteString result; - for (int32_t row = 0; row < barcodeMatrix->GetSize(); row++) { - result += row; - int32_t l = 0; - for (; l < ((CFX_PtrArray*)barcodeMatrix->GetAt(row))->GetSize(); l++) { - CBC_BarcodeValue* barcodeValue = - (CBC_BarcodeValue*)((CFX_PtrArray*)barcodeMatrix->GetAt(row)) - ->GetAt(l); - if (barcodeValue->getValue()->GetSize() == 0) { - result += ""; - } else { - result += barcodeValue->getValue()->GetAt(0); - result += - barcodeValue->getConfidence(barcodeValue->getValue()->GetAt(0)); - } - } - } - return result; -} -CBC_DetectionResult* CBC_PDF417ScanningDecoder::merge( - CBC_DetectionResultRowIndicatorColumn* leftRowIndicatorColumn, - CBC_DetectionResultRowIndicatorColumn* rightRowIndicatorColumn, - int32_t& e) { - if (leftRowIndicatorColumn == NULL && rightRowIndicatorColumn == NULL) { - e = BCExceptionIllegalArgument; - return NULL; - } - CBC_BarcodeMetadata* barcodeMetadata = - getBarcodeMetadata(leftRowIndicatorColumn, rightRowIndicatorColumn); - if (barcodeMetadata == NULL) { - e = BCExceptionCannotMetadata; - return NULL; - } - CBC_BoundingBox* leftboundingBox = - adjustBoundingBox(leftRowIndicatorColumn, e); - if (e != BCExceptionNO) { - delete barcodeMetadata; - return NULL; - } - CBC_BoundingBox* rightboundingBox = - adjustBoundingBox(rightRowIndicatorColumn, e); - if (e != BCExceptionNO) { - delete barcodeMetadata; - return NULL; - } - CBC_BoundingBox* boundingBox = - CBC_BoundingBox::merge(leftboundingBox, rightboundingBox, e); - if (e != BCExceptionNO) { - delete barcodeMetadata; - return NULL; - } - CBC_DetectionResult* detectionresult = - new CBC_DetectionResult(barcodeMetadata, boundingBox); - return detectionresult; -} -CBC_BoundingBox* CBC_PDF417ScanningDecoder::adjustBoundingBox( - CBC_DetectionResultRowIndicatorColumn* rowIndicatorColumn, - int32_t& e) { - if (rowIndicatorColumn == NULL) { - return NULL; - } - CFX_Int32Array* rowHeights = rowIndicatorColumn->getRowHeights(e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - int32_t maxRowHeight = getMax(*rowHeights); - int32_t missingStartRows = 0; - for (int32_t i = 0; i < rowHeights->GetSize(); i++) { - int32_t rowHeight = rowHeights->GetAt(i); - missingStartRows += maxRowHeight - rowHeight; - if (rowHeight > 0) { - break; - } - } - CFX_PtrArray* codewords = rowIndicatorColumn->getCodewords(); - for (int32_t row = 0; missingStartRows > 0 && codewords->GetAt(row) == NULL; - row++) { - missingStartRows--; - } - int32_t missingEndRows = 0; - for (int32_t row1 = rowHeights->GetSize() - 1; row1 >= 0; row1--) { - missingEndRows += maxRowHeight - rowHeights->GetAt(row1); - if (rowHeights->GetAt(row1) > 0) { - break; - } - } - for (int32_t row2 = codewords->GetSize() - 1; - missingEndRows > 0 && codewords->GetAt(row2) == NULL; row2--) { - missingEndRows--; - } - CBC_BoundingBox* boundingBox = - rowIndicatorColumn->getBoundingBox()->addMissingRows( - missingStartRows, missingEndRows, rowIndicatorColumn->isLeft(), e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - return boundingBox; -} -int32_t CBC_PDF417ScanningDecoder::getMax(CFX_Int32Array& values) { - int32_t maxValue = -1; - for (int32_t i = 0; i < values.GetSize(); i++) { - int32_t value = values.GetAt(i); - maxValue = maxValue > value ? maxValue : value; - } - return maxValue; -} -CBC_BarcodeMetadata* CBC_PDF417ScanningDecoder::getBarcodeMetadata( - CBC_DetectionResultRowIndicatorColumn* leftRowIndicatorColumn, - CBC_DetectionResultRowIndicatorColumn* rightRowIndicatorColumn) { - CBC_BarcodeMetadata* leftBarcodeMetadata = NULL; - CBC_BarcodeMetadata* rightBarcodeMetadata = NULL; - if (leftRowIndicatorColumn == NULL || - (leftBarcodeMetadata = leftRowIndicatorColumn->getBarcodeMetadata()) == - NULL) { - return rightRowIndicatorColumn == NULL - ? NULL - : rightRowIndicatorColumn->getBarcodeMetadata(); - } - if (rightRowIndicatorColumn == NULL || - (rightBarcodeMetadata = rightRowIndicatorColumn->getBarcodeMetadata()) == - NULL) { - return leftRowIndicatorColumn == NULL - ? NULL - : leftRowIndicatorColumn->getBarcodeMetadata(); - } - if (leftBarcodeMetadata->getColumnCount() != - rightBarcodeMetadata->getColumnCount() && - leftBarcodeMetadata->getErrorCorrectionLevel() != - rightBarcodeMetadata->getErrorCorrectionLevel() && - leftBarcodeMetadata->getRowCount() != - rightBarcodeMetadata->getRowCount()) { - delete leftBarcodeMetadata; - delete rightBarcodeMetadata; - return NULL; - } - delete rightBarcodeMetadata; - return leftBarcodeMetadata; -} -CBC_DetectionResultRowIndicatorColumn* -CBC_PDF417ScanningDecoder::getRowIndicatorColumn(CBC_CommonBitMatrix* image, - CBC_BoundingBox* boundingBox, - CBC_ResultPoint startPoint, - FX_BOOL leftToRight, - int32_t minCodewordWidth, - int32_t maxCodewordWidth) { - CBC_DetectionResultRowIndicatorColumn* rowIndicatorColumn = - new CBC_DetectionResultRowIndicatorColumn(boundingBox, leftToRight); - for (int32_t i = 0; i < 2; i++) { - int32_t increment = i == 0 ? 1 : -1; - int32_t startColumn = (int32_t)startPoint.GetX(); - for (int32_t imageRow = (int32_t)startPoint.GetY(); - imageRow <= boundingBox->getMaxY() && - imageRow >= boundingBox->getMinY(); - imageRow += increment) { - CBC_Codeword* codeword = - detectCodeword(image, 0, image->GetWidth(), leftToRight, startColumn, - imageRow, minCodewordWidth, maxCodewordWidth); - if (codeword) { - rowIndicatorColumn->setCodeword(imageRow, codeword); - if (leftToRight) { - startColumn = codeword->getStartX(); - } else { - startColumn = codeword->getEndX(); - } - } - } - } - return rowIndicatorColumn; -} -void CBC_PDF417ScanningDecoder::adjustCodewordCount( - CBC_DetectionResult* detectionResult, - CFX_PtrArray* barcodeMatrix, - int32_t& e) { - CFX_Int32Array* numberOfCodewords = - ((CBC_BarcodeValue*)((CFX_PtrArray*)barcodeMatrix->GetAt(0))->GetAt(1)) - ->getValue(); - int32_t calculatedNumberOfCodewords = - detectionResult->getBarcodeColumnCount() * - detectionResult->getBarcodeRowCount() - - getNumberOfECCodeWords(detectionResult->getBarcodeECLevel()); - if (numberOfCodewords->GetSize() == 0) { - if (calculatedNumberOfCodewords < 1 || - calculatedNumberOfCodewords > - CBC_PDF417Common::MAX_CODEWORDS_IN_BARCODE) { - e = BCExceptiontNotFoundInstance; - delete numberOfCodewords; - BC_EXCEPTION_CHECK_ReturnVoid(e); - } - ((CBC_BarcodeValue*)((CFX_PtrArray*)barcodeMatrix->GetAt(0))->GetAt(1)) - ->setValue(calculatedNumberOfCodewords); - } else if (numberOfCodewords->GetAt(0) != calculatedNumberOfCodewords) { - ((CBC_BarcodeValue*)((CFX_PtrArray*)barcodeMatrix->GetAt(0))->GetAt(1)) - ->setValue(calculatedNumberOfCodewords); - } - delete numberOfCodewords; -} -CBC_CommonDecoderResult* CBC_PDF417ScanningDecoder::createDecoderResult( - CBC_DetectionResult* detectionResult, - int32_t& e) { - CFX_PtrArray* barcodeMatrix = createBarcodeMatrix(detectionResult); - adjustCodewordCount(detectionResult, barcodeMatrix, e); - if (e != BCExceptionNO) { - for (int32_t i = 0; i < barcodeMatrix->GetSize(); i++) { - CFX_PtrArray* temp = (CFX_PtrArray*)barcodeMatrix->GetAt(i); - for (int32_t j = 0; j < temp->GetSize(); j++) { - delete (CBC_BarcodeValue*)temp->GetAt(j); - } - temp->RemoveAll(); - delete temp; - } - barcodeMatrix->RemoveAll(); - delete barcodeMatrix; - return NULL; - } - CFX_Int32Array erasures; - CFX_Int32Array codewords; - codewords.SetSize(detectionResult->getBarcodeRowCount() * - detectionResult->getBarcodeColumnCount()); - CFX_PtrArray ambiguousIndexValuesList; - CFX_Int32Array ambiguousIndexesList; - for (int32_t row = 0; row < detectionResult->getBarcodeRowCount(); row++) { - for (int32_t l = 0; l < detectionResult->getBarcodeColumnCount(); l++) { - CFX_Int32Array* values = - ((CBC_BarcodeValue*)((CFX_PtrArray*)barcodeMatrix->GetAt(row)) - ->GetAt(l + 1)) - ->getValue(); - int32_t codewordIndex = - row * detectionResult->getBarcodeColumnCount() + l; - if (values->GetSize() == 0) { - erasures.Add(codewordIndex); - } else if (values->GetSize() == 1) { - codewords[codewordIndex] = values->GetAt(0); - } else { - ambiguousIndexesList.Add(codewordIndex); - ambiguousIndexValuesList.Add(values); - } - } - } - CFX_PtrArray ambiguousIndexValues; - ambiguousIndexValues.SetSize(ambiguousIndexValuesList.GetSize()); - for (int32_t i = 0; i < ambiguousIndexValues.GetSize(); i++) { - ambiguousIndexValues.SetAt(i, ambiguousIndexValuesList.GetAt(i)); - } - for (int32_t l = 0; l < barcodeMatrix->GetSize(); l++) { - CFX_PtrArray* temp = (CFX_PtrArray*)barcodeMatrix->GetAt(l); - for (int32_t j = 0; j < temp->GetSize(); j++) { - delete (CBC_BarcodeValue*)temp->GetAt(j); - } - temp->RemoveAll(); - delete temp; - } - barcodeMatrix->RemoveAll(); - delete barcodeMatrix; - CBC_CommonDecoderResult* decoderResult = - createDecoderResultFromAmbiguousValues( - detectionResult->getBarcodeECLevel(), codewords, erasures, - ambiguousIndexesList, ambiguousIndexValues, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - return decoderResult; -} -CBC_CommonDecoderResult* -CBC_PDF417ScanningDecoder::createDecoderResultFromAmbiguousValues( - int32_t ecLevel, - CFX_Int32Array& codewords, - CFX_Int32Array& erasureArray, - CFX_Int32Array& ambiguousIndexes, - CFX_PtrArray& ambiguousIndexValues, - int32_t& e) { - CFX_Int32Array ambiguousIndexCount; - ambiguousIndexCount.SetSize(ambiguousIndexes.GetSize()); - int32_t tries = 100; - while (tries-- > 0) { - for (int32_t l = 0; l < ambiguousIndexCount.GetSize(); l++) { - codewords[ambiguousIndexes[l]] = - ((CFX_Int32Array*)ambiguousIndexValues.GetAt(l)) - ->GetAt(ambiguousIndexCount[l]); - } - CBC_CommonDecoderResult* decoderResult = - decodeCodewords(codewords, ecLevel, erasureArray, e); - if (e != BCExceptionNO) { - e = BCExceptionNO; - continue; - } else { - return decoderResult; - } - if (ambiguousIndexCount.GetSize() == 0) { - e = BCExceptionChecksumInstance; - return NULL; - } - for (int32_t i = 0; i < ambiguousIndexCount.GetSize(); i++) { - if (ambiguousIndexCount[i] < - ((CFX_Int32Array*)(ambiguousIndexValues.GetAt(i)))->GetSize() - 1) { - ambiguousIndexCount[i]++; - break; - } else { - ambiguousIndexCount[i] = 0; - if (i == ambiguousIndexCount.GetSize() - 1) { - e = BCExceptionChecksumInstance; - return NULL; - } - } - } - } - e = BCExceptionChecksumInstance; - return NULL; -} -CFX_PtrArray* CBC_PDF417ScanningDecoder::createBarcodeMatrix( - CBC_DetectionResult* detectionResult) { - CFX_PtrArray* barcodeMatrix = new CFX_PtrArray; - barcodeMatrix->SetSize(detectionResult->getBarcodeRowCount()); - CFX_PtrArray* temp = NULL; - int32_t colume = 0; - for (int32_t row = 0; row < barcodeMatrix->GetSize(); row++) { - temp = new CFX_PtrArray; - temp->SetSize(detectionResult->getBarcodeColumnCount() + 2); - for (colume = 0; colume < detectionResult->getBarcodeColumnCount() + 2; - colume++) { - temp->SetAt(colume, new CBC_BarcodeValue()); - } - barcodeMatrix->SetAt(row, temp); - } - colume = -1; - for (int32_t i = 0; - i < detectionResult->getDetectionResultColumns().GetSize(); i++) { - CBC_DetectionResultColumn* detectionResultColumn = - (CBC_DetectionResultColumn*)detectionResult->getDetectionResultColumns() - .GetAt(i); - colume++; - if (detectionResultColumn == NULL) { - continue; - } - CFX_PtrArray* temp = detectionResultColumn->getCodewords(); - for (int32_t l = 0; l < temp->GetSize(); l++) { - CBC_Codeword* codeword = (CBC_Codeword*)temp->GetAt(l); - if (codeword == NULL || codeword->getRowNumber() == -1) { - continue; - } - ((CBC_BarcodeValue*)((CFX_PtrArray*)barcodeMatrix->GetAt( - codeword->getRowNumber())) - ->GetAt(colume)) - ->setValue(codeword->getValue()); - } - } - return barcodeMatrix; -} -FX_BOOL CBC_PDF417ScanningDecoder::isValidBarcodeColumn( - CBC_DetectionResult* detectionResult, - int32_t barcodeColumn) { - return barcodeColumn >= 0 && - barcodeColumn <= detectionResult->getBarcodeColumnCount() + 1; -} -int32_t CBC_PDF417ScanningDecoder::getStartColumn( - CBC_DetectionResult* detectionResult, - int32_t barcodeColumn, - int32_t imageRow, - FX_BOOL leftToRight) { - int32_t offset = leftToRight ? 1 : -1; - CBC_Codeword* codeword = NULL; - if (isValidBarcodeColumn(detectionResult, barcodeColumn - offset)) { - codeword = detectionResult->getDetectionResultColumn(barcodeColumn - offset) - ->getCodeword(imageRow); - } - if (codeword) { - return leftToRight ? codeword->getEndX() : codeword->getStartX(); - } - codeword = detectionResult->getDetectionResultColumn(barcodeColumn) - ->getCodewordNearby(imageRow); - if (codeword) { - return leftToRight ? codeword->getStartX() : codeword->getEndX(); - } - if (isValidBarcodeColumn(detectionResult, barcodeColumn - offset)) { - codeword = detectionResult->getDetectionResultColumn(barcodeColumn - offset) - ->getCodewordNearby(imageRow); - } - if (codeword) { - return leftToRight ? codeword->getEndX() : codeword->getStartX(); - } - int32_t skippedColumns = 0; - while (isValidBarcodeColumn(detectionResult, barcodeColumn - offset)) { - barcodeColumn -= offset; - for (int32_t i = 0; - i < detectionResult->getDetectionResultColumn(barcodeColumn) - ->getCodewords() - ->GetSize(); - i++) { - CBC_Codeword* previousRowCodeword = - (CBC_Codeword*)detectionResult->getDetectionResultColumn( - barcodeColumn) - ->getCodewords() - ->GetAt(i); - if (previousRowCodeword) { - return (leftToRight ? previousRowCodeword->getEndX() - : previousRowCodeword->getStartX()) + - offset * skippedColumns * (previousRowCodeword->getEndX() - - previousRowCodeword->getStartX()); - } - } - skippedColumns++; - } - return leftToRight ? detectionResult->getBoundingBox()->getMinX() - : detectionResult->getBoundingBox()->getMaxX(); -} -CBC_Codeword* CBC_PDF417ScanningDecoder::detectCodeword( - CBC_CommonBitMatrix* image, - int32_t minColumn, - int32_t maxColumn, - FX_BOOL leftToRight, - int32_t startColumn, - int32_t imageRow, - int32_t minCodewordWidth, - int32_t maxCodewordWidth) { - startColumn = adjustCodewordStartColumn(image, minColumn, maxColumn, - leftToRight, startColumn, imageRow); - CFX_Int32Array* moduleBitCount = getModuleBitCount( - image, minColumn, maxColumn, leftToRight, startColumn, imageRow); - if (moduleBitCount == NULL) { - return NULL; - } - int32_t endColumn; - int32_t codewordBitCount = CBC_PDF417Common::getBitCountSum(*moduleBitCount); - if (leftToRight) { - endColumn = startColumn + codewordBitCount; - } else { - for (int32_t i = 0; iGetSize()>> 1; i++) { - int32_t tmpCount = moduleBitCount->GetAt(i); - moduleBitCount->SetAt( - i, moduleBitCount->GetAt(moduleBitCount->GetSize() - 1 - i)); - moduleBitCount->SetAt(moduleBitCount->GetSize() - 1 - i, tmpCount); - } - endColumn = startColumn; - startColumn = endColumn - codewordBitCount; - } - int32_t decodedValue = - CBC_PDF417CodewordDecoder::getDecodedValue(*moduleBitCount); - int32_t codeword = CBC_PDF417Common::getCodeword(decodedValue); - delete moduleBitCount; - if (codeword == -1) { - return NULL; - } - return new CBC_Codeword(startColumn, endColumn, - getCodewordBucketNumber(decodedValue), codeword); -} -CFX_Int32Array* CBC_PDF417ScanningDecoder::getModuleBitCount( - CBC_CommonBitMatrix* image, - int32_t minColumn, - int32_t maxColumn, - FX_BOOL leftToRight, - int32_t startColumn, - int32_t imageRow) { - int32_t imageColumn = startColumn; - CFX_Int32Array* moduleBitCount = new CFX_Int32Array; - moduleBitCount->SetSize(8); - int32_t moduleNumber = 0; - int32_t increment = leftToRight ? 1 : -1; - FX_BOOL previousPixelValue = leftToRight; - while (((leftToRight && imageColumn < maxColumn) || - (!leftToRight && imageColumn >= minColumn)) && - moduleNumber < moduleBitCount->GetSize()) { - if (image->Get(imageColumn, imageRow) == previousPixelValue) { - moduleBitCount->SetAt(moduleNumber, - moduleBitCount->GetAt(moduleNumber) + 1); - imageColumn += increment; - } else { - moduleNumber++; - previousPixelValue = !previousPixelValue; - } - } - if (moduleNumber == moduleBitCount->GetSize() || - (((leftToRight && imageColumn == maxColumn) || - (!leftToRight && imageColumn == minColumn)) && - moduleNumber == moduleBitCount->GetSize() - 1)) { - return moduleBitCount; - } - delete moduleBitCount; - return NULL; -} -int32_t CBC_PDF417ScanningDecoder::getNumberOfECCodeWords( - int32_t barcodeECLevel) { - return 2 << barcodeECLevel; -} -int32_t CBC_PDF417ScanningDecoder::adjustCodewordStartColumn( - CBC_CommonBitMatrix* image, - int32_t minColumn, - int32_t maxColumn, - FX_BOOL leftToRight, - int32_t codewordStartColumn, - int32_t imageRow) { - int32_t correctedStartColumn = codewordStartColumn; - int32_t increment = leftToRight ? -1 : 1; - for (int32_t i = 0; i < 2; i++) { - while (((leftToRight && correctedStartColumn >= minColumn) || - (!leftToRight && correctedStartColumn < maxColumn)) && - leftToRight == image->Get(correctedStartColumn, imageRow)) { - if (abs(codewordStartColumn - correctedStartColumn) > - CODEWORD_SKEW_SIZE) { - return codewordStartColumn; - } - correctedStartColumn += increment; - } - increment = -increment; - leftToRight = !leftToRight; - } - return correctedStartColumn; -} -FX_BOOL CBC_PDF417ScanningDecoder::checkCodewordSkew(int32_t codewordSize, - int32_t minCodewordWidth, - int32_t maxCodewordWidth) { - return minCodewordWidth - CODEWORD_SKEW_SIZE <= codewordSize && - codewordSize <= maxCodewordWidth + CODEWORD_SKEW_SIZE; -} -CBC_CommonDecoderResult* CBC_PDF417ScanningDecoder::decodeCodewords( - CFX_Int32Array& codewords, - int32_t ecLevel, - CFX_Int32Array& erasures, - int32_t& e) { - if (codewords.GetSize() == 0) { - e = BCExceptionFormatInstance; - return NULL; - } - int32_t numECCodewords = 1 << (ecLevel + 1); - correctErrors(codewords, erasures, numECCodewords, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - verifyCodewordCount(codewords, numECCodewords, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - CFX_ByteString bytestring; - CBC_CommonDecoderResult* decoderResult = CBC_DecodedBitStreamPaser::decode( - codewords, bytestring.FormatInteger(ecLevel), e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - return decoderResult; -} -int32_t CBC_PDF417ScanningDecoder::correctErrors(CFX_Int32Array& codewords, - CFX_Int32Array& erasures, - int32_t numECCodewords, - int32_t& e) { - if ((erasures.GetSize() != 0 && - erasures.GetSize() > (numECCodewords / 2 + MAX_ERRORS)) || - numECCodewords < 0 || numECCodewords > MAX_EC_CODEWORDS) { - e = BCExceptionChecksumInstance; - return -1; - } - int32_t result = CBC_PDF417ECErrorCorrection::decode( - codewords, numECCodewords, erasures, e); - BC_EXCEPTION_CHECK_ReturnValue(e, -1); - return result; -} -void CBC_PDF417ScanningDecoder::verifyCodewordCount(CFX_Int32Array& codewords, - int32_t numECCodewords, - int32_t& e) { - if (codewords.GetSize() < 4) { - e = BCExceptionFormatInstance; - return; - } - int32_t numberOfCodewords = codewords.GetAt(0); - if (numberOfCodewords > codewords.GetSize()) { - e = BCExceptionFormatInstance; - return; - } - if (numberOfCodewords == 0) { - if (numECCodewords < codewords.GetSize()) { - codewords[0] = codewords.GetSize() - numECCodewords; - } else { - e = BCExceptionFormatInstance; - return; - } - } -} -CFX_Int32Array* CBC_PDF417ScanningDecoder::getBitCountForCodeword( - int32_t codeword) { - CFX_Int32Array* result = new CFX_Int32Array; - result->SetSize(8); - int32_t previousValue = 0; - int32_t i = result->GetSize() - 1; - while (TRUE) { - if ((codeword & 0x1) != previousValue) { - previousValue = codeword & 0x1; - i--; - if (i < 0) { - break; - } - } - result->SetAt(i, result->GetAt(i) + 1); - codeword >>= 1; - } - return result; -} -int32_t CBC_PDF417ScanningDecoder::getCodewordBucketNumber(int32_t codeword) { - CFX_Int32Array* array = getBitCountForCodeword(codeword); - int32_t result = getCodewordBucketNumber(*array); - delete array; - return result; -} -int32_t CBC_PDF417ScanningDecoder::getCodewordBucketNumber( - CFX_Int32Array& moduleBitCount) { - return (moduleBitCount.GetAt(0) - moduleBitCount.GetAt(2) + - moduleBitCount.GetAt(4) - moduleBitCount.GetAt(6) + 9) % - 9; -} diff --git a/xfa/src/fxbarcode/pdf417/BC_PDF417ScanningDecoder.h b/xfa/src/fxbarcode/pdf417/BC_PDF417ScanningDecoder.h deleted file mode 100644 index ca310d2c44..0000000000 --- a/xfa/src/fxbarcode/pdf417/BC_PDF417ScanningDecoder.h +++ /dev/null @@ -1,119 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_PDF417_BC_PDF417SCANNINGDECODER_H_ -#define XFA_SRC_FXBARCODE_PDF417_BC_PDF417SCANNINGDECODER_H_ - -class CBC_CommonDecoderResult; -class CBC_CommonBitMatrix; -class CBC_Codeword; -class CBC_BoundingBox; -class CBC_ResultPoint; -class CBC_BarcodeMetadata; -class CBC_DetectionResult; -class CBC_DetectionResultRowIndicatorColumn; - -class CBC_PDF417ScanningDecoder { - public: - CBC_PDF417ScanningDecoder(); - virtual ~CBC_PDF417ScanningDecoder(); - static void Initialize(); - static void Finalize(); - static CBC_CommonDecoderResult* decode(CBC_CommonBitMatrix* image, - CBC_ResultPoint* imageTopLeft, - CBC_ResultPoint* imageBottomLeft, - CBC_ResultPoint* imageTopRight, - CBC_ResultPoint* imageBottomRight, - int32_t minCodewordWidth, - int32_t maxCodewordWidth, - int32_t& e); - static CFX_ByteString toString(CFX_PtrArray* barcodeMatrix); - - private: - static int32_t CODEWORD_SKEW_SIZE; - static int32_t MAX_ERRORS; - static int32_t MAX_EC_CODEWORDS; - static CBC_PDF417ECErrorCorrection* errorCorrection; - static CBC_DetectionResult* merge( - CBC_DetectionResultRowIndicatorColumn* leftRowIndicatorColumn, - CBC_DetectionResultRowIndicatorColumn* rightRowIndicatorColumn, - int32_t& e); - static CBC_BoundingBox* adjustBoundingBox( - CBC_DetectionResultRowIndicatorColumn* rowIndicatorColumn, - int32_t& e); - static int32_t getMax(CFX_Int32Array& values); - static CBC_BarcodeMetadata* getBarcodeMetadata( - CBC_DetectionResultRowIndicatorColumn* leftRowIndicatorColumn, - CBC_DetectionResultRowIndicatorColumn* rightRowIndicatorColumn); - static CBC_DetectionResultRowIndicatorColumn* getRowIndicatorColumn( - CBC_CommonBitMatrix* image, - CBC_BoundingBox* boundingBox, - CBC_ResultPoint startPoint, - FX_BOOL leftToRight, - int32_t minCodewordWidth, - int32_t maxCodewordWidth); - static void adjustCodewordCount(CBC_DetectionResult* detectionResult, - CFX_PtrArray* barcodeMatrix, - int32_t& e); - static CBC_CommonDecoderResult* createDecoderResult( - CBC_DetectionResult* detectionResult, - int32_t& e); - static CBC_CommonDecoderResult* createDecoderResultFromAmbiguousValues( - int32_t ecLevel, - CFX_Int32Array& codewords, - CFX_Int32Array& erasureArray, - CFX_Int32Array& ambiguousIndexes, - CFX_PtrArray& ambiguousIndexValues, - int32_t& e); - static CFX_PtrArray* createBarcodeMatrix( - CBC_DetectionResult* detectionResult); - static FX_BOOL isValidBarcodeColumn(CBC_DetectionResult* detectionResult, - int32_t barcodeColumn); - static int32_t getStartColumn(CBC_DetectionResult* detectionResult, - int32_t barcodeColumn, - int32_t imageRow, - FX_BOOL leftToRight); - static CBC_Codeword* detectCodeword(CBC_CommonBitMatrix* image, - int32_t minColumn, - int32_t maxColumn, - FX_BOOL leftToRight, - int32_t startColumn, - int32_t imageRow, - int32_t minCodewordWidth, - int32_t maxCodewordWidth); - static CFX_Int32Array* getModuleBitCount(CBC_CommonBitMatrix* image, - int32_t minColumn, - int32_t maxColumn, - FX_BOOL leftToRight, - int32_t startColumn, - int32_t imageRow); - static int32_t getNumberOfECCodeWords(int32_t barcodeECLevel); - static int32_t adjustCodewordStartColumn(CBC_CommonBitMatrix* image, - int32_t minColumn, - int32_t maxColumn, - FX_BOOL leftToRight, - int32_t codewordStartColumn, - int32_t imageRow); - static FX_BOOL checkCodewordSkew(int32_t codewordSize, - int32_t minCodewordWidth, - int32_t maxCodewordWidth); - static CBC_CommonDecoderResult* decodeCodewords(CFX_Int32Array& codewords, - int32_t ecLevel, - CFX_Int32Array& erasures, - int32_t& e); - static int32_t correctErrors(CFX_Int32Array& codewords, - CFX_Int32Array& erasures, - int32_t numECCodewords, - int32_t& e); - static void verifyCodewordCount(CFX_Int32Array& codewords, - int32_t numECCodewords, - int32_t& e); - static CFX_Int32Array* getBitCountForCodeword(int32_t codeword); - static int32_t getCodewordBucketNumber(int32_t codeword); - static int32_t getCodewordBucketNumber(CFX_Int32Array& moduleBitCount); -}; - -#endif // XFA_SRC_FXBARCODE_PDF417_BC_PDF417SCANNINGDECODER_H_ diff --git a/xfa/src/fxbarcode/pdf417/BC_PDF417Writer.cpp b/xfa/src/fxbarcode/pdf417/BC_PDF417Writer.cpp deleted file mode 100644 index 97cd9d82c4..0000000000 --- a/xfa/src/fxbarcode/pdf417/BC_PDF417Writer.cpp +++ /dev/null @@ -1,115 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2012 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/BC_TwoDimWriter.h" -#include "xfa/src/fxbarcode/common/BC_CommonBitArray.h" -#include "xfa/src/fxbarcode/common/BC_CommonBitMatrix.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417BarcodeMatrix.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417Compaction.h" -#include "xfa/src/fxbarcode/pdf417/BC_PDF417Writer.h" - -CBC_PDF417Writer::CBC_PDF417Writer() { - m_bFixedSize = FALSE; -} -CBC_PDF417Writer::~CBC_PDF417Writer() { - m_bTruncated = TRUE; -} -FX_BOOL CBC_PDF417Writer::SetErrorCorrectionLevel(int32_t level) { - if (level < 0 || level > 8) { - return FALSE; - } - m_iCorrectLevel = level; - return TRUE; -} -void CBC_PDF417Writer::SetTruncated(FX_BOOL truncated) { - m_bTruncated = truncated; -} -uint8_t* CBC_PDF417Writer::Encode(const CFX_WideString& contents, - int32_t& outWidth, - int32_t& outHeight, - int32_t& e) { - CBC_PDF417 encoder; - int32_t col = (m_Width / m_ModuleWidth - 69) / 17; - int32_t row = m_Height / (m_ModuleWidth * 20); - if (row >= 3 && row <= 90 && col >= 1 && col <= 30) { - encoder.setDimensions(col, col, row, row); - } else if (col >= 1 && col <= 30) { - encoder.setDimensions(col, col, 90, 3); - } else if (row >= 3 && row <= 90) { - encoder.setDimensions(30, 1, row, row); - } - encoder.generateBarcodeLogic(contents, m_iCorrectLevel, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - int32_t lineThickness = 2; - int32_t aspectRatio = 4; - CBC_BarcodeMatrix* barcodeMatrix = encoder.getBarcodeMatrix(); - CFX_ByteArray originalScale; - originalScale.Copy(barcodeMatrix->getScaledMatrix( - lineThickness, aspectRatio * lineThickness)); - int32_t width = outWidth; - int32_t height = outHeight; - outWidth = barcodeMatrix->getWidth(); - outHeight = barcodeMatrix->getHeight(); - FX_BOOL rotated = FALSE; - if ((height > width) ^ (outWidth < outHeight)) { - rotateArray(originalScale, outHeight, outWidth); - rotated = TRUE; - int32_t temp = outHeight; - outHeight = outWidth; - outWidth = temp; - } - int32_t scaleX = width / outWidth; - int32_t scaleY = height / outHeight; - int32_t scale; - if (scaleX < scaleY) { - scale = scaleX; - } else { - scale = scaleY; - } - if (scale > 1) { - originalScale.RemoveAll(); - originalScale.Copy(barcodeMatrix->getScaledMatrix( - scale * lineThickness, scale * aspectRatio * lineThickness)); - if (rotated) { - rotateArray(originalScale, outHeight, outWidth); - int32_t temp = outHeight; - outHeight = outWidth; - outWidth = temp; - } - } - uint8_t* result = FX_Alloc2D(uint8_t, outHeight, outWidth); - FXSYS_memcpy(result, originalScale.GetData(), outHeight * outWidth); - return result; -} -void CBC_PDF417Writer::rotateArray(CFX_ByteArray& bitarray, - int32_t height, - int32_t width) { - CFX_ByteArray temp; - temp.Copy(bitarray); - for (int32_t ii = 0; ii < height; ii++) { - int32_t inverseii = height - ii - 1; - for (int32_t jj = 0; jj < width; jj++) { - bitarray[jj * height + inverseii] = temp[ii * width + jj]; - } - } -} diff --git a/xfa/src/fxbarcode/pdf417/BC_PDF417Writer.h b/xfa/src/fxbarcode/pdf417/BC_PDF417Writer.h deleted file mode 100644 index 3bfae5e05d..0000000000 --- a/xfa/src/fxbarcode/pdf417/BC_PDF417Writer.h +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_PDF417_BC_PDF417WRITER_H_ -#define XFA_SRC_FXBARCODE_PDF417_BC_PDF417WRITER_H_ - -class CBC_TwoDimWriter; -class CBC_PDF417Writer; -class CBC_PDF417Writer : public CBC_TwoDimWriter { - public: - CBC_PDF417Writer(); - virtual ~CBC_PDF417Writer(); - uint8_t* Encode(const CFX_WideString& contents, - int32_t& outWidth, - int32_t& outHeight, - int32_t& e); - FX_BOOL SetErrorCorrectionLevel(int32_t level); - void SetTruncated(FX_BOOL truncated); - - private: - void rotateArray(CFX_ByteArray& bitarray, int32_t width, int32_t height); - FX_BOOL m_bTruncated; -}; - -#endif // XFA_SRC_FXBARCODE_PDF417_BC_PDF417WRITER_H_ diff --git a/xfa/src/fxbarcode/qrcode/BC_FinderPatternInfo.cpp b/xfa/src/fxbarcode/qrcode/BC_FinderPatternInfo.cpp deleted file mode 100644 index 1a2069030e..0000000000 --- a/xfa/src/fxbarcode/qrcode/BC_FinderPatternInfo.cpp +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2007 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/BC_ResultPoint.h" -#include "xfa/src/fxbarcode/qrcode/BC_FinderPatternInfo.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRFinderPattern.h" - -CBC_QRFinderPatternInfo::CBC_QRFinderPatternInfo(CFX_PtrArray* patternCenters) { - m_bottomLeft = (CBC_QRFinderPattern*)(*patternCenters)[0]; - m_topLeft = (CBC_QRFinderPattern*)(*patternCenters)[1]; - m_topRight = (CBC_QRFinderPattern*)(*patternCenters)[2]; -} -CBC_QRFinderPatternInfo::~CBC_QRFinderPatternInfo() {} -CBC_QRFinderPattern* CBC_QRFinderPatternInfo::GetBottomLeft() { - return m_bottomLeft; -} -CBC_QRFinderPattern* CBC_QRFinderPatternInfo::GetTopLeft() { - return m_topLeft; -} -CBC_QRFinderPattern* CBC_QRFinderPatternInfo::GetTopRight() { - return m_topRight; -} diff --git a/xfa/src/fxbarcode/qrcode/BC_FinderPatternInfo.h b/xfa/src/fxbarcode/qrcode/BC_FinderPatternInfo.h deleted file mode 100644 index 14316e5a16..0000000000 --- a/xfa/src/fxbarcode/qrcode/BC_FinderPatternInfo.h +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_QRCODE_BC_FINDERPATTERNINFO_H_ -#define XFA_SRC_FXBARCODE_QRCODE_BC_FINDERPATTERNINFO_H_ - -#include "core/include/fxcrt/fx_basic.h" - -class CBC_QRFinderPattern; - -class CBC_QRFinderPatternInfo { - private: - CBC_QRFinderPattern* m_bottomLeft; - CBC_QRFinderPattern* m_topLeft; - CBC_QRFinderPattern* m_topRight; - - public: - CBC_QRFinderPatternInfo(CFX_PtrArray* patternCenters); - virtual ~CBC_QRFinderPatternInfo(); - CBC_QRFinderPattern* GetBottomLeft(); - CBC_QRFinderPattern* GetTopLeft(); - CBC_QRFinderPattern* GetTopRight(); -}; - -#endif // XFA_SRC_FXBARCODE_QRCODE_BC_FINDERPATTERNINFO_H_ diff --git a/xfa/src/fxbarcode/qrcode/BC_QRAlignmentPattern.cpp b/xfa/src/fxbarcode/qrcode/BC_QRAlignmentPattern.cpp deleted file mode 100644 index 50b25f8535..0000000000 --- a/xfa/src/fxbarcode/qrcode/BC_QRAlignmentPattern.cpp +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2007 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/BC_ResultPoint.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRAlignmentPattern.h" - -CBC_QRAlignmentPattern::CBC_QRAlignmentPattern(FX_FLOAT posX, - FX_FLOAT posY, - FX_FLOAT estimateModuleSize) - : CBC_ResultPoint(posX, posY), m_moduleSize(estimateModuleSize) {} -CBC_QRAlignmentPattern::~CBC_QRAlignmentPattern() {} -FX_FLOAT CBC_QRAlignmentPattern::GetX() { - return m_x; -} -FX_FLOAT CBC_QRAlignmentPattern::GetY() { - return m_y; -} -FX_BOOL CBC_QRAlignmentPattern::AboutEquals(FX_FLOAT moduleSize, - FX_FLOAT i, - FX_FLOAT j) { - if ((FXSYS_fabs(i - GetY()) <= moduleSize) && - (FXSYS_fabs(j - GetX()) <= moduleSize)) { - FX_FLOAT moduleSizeDiff = FXSYS_fabs(moduleSize - m_moduleSize); - return (moduleSizeDiff <= 1.0f) || (moduleSizeDiff / m_moduleSize <= 1.0f); - } - return FALSE; -} -CBC_QRAlignmentPattern* CBC_QRAlignmentPattern::Clone() { - return new CBC_QRAlignmentPattern(m_x, m_y, m_moduleSize); -} diff --git a/xfa/src/fxbarcode/qrcode/BC_QRAlignmentPattern.h b/xfa/src/fxbarcode/qrcode/BC_QRAlignmentPattern.h deleted file mode 100644 index f40d371631..0000000000 --- a/xfa/src/fxbarcode/qrcode/BC_QRAlignmentPattern.h +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_QRCODE_BC_QRALIGNMENTPATTERN_H_ -#define XFA_SRC_FXBARCODE_QRCODE_BC_QRALIGNMENTPATTERN_H_ -class CBC_ResultPoint; -class CBC_QRAlignmentPattern : public CBC_ResultPoint { - private: - FX_FLOAT m_moduleSize; - - public: - CBC_QRAlignmentPattern(FX_FLOAT posX, - FX_FLOAT posY, - FX_FLOAT estimateModuleSize); - virtual ~CBC_QRAlignmentPattern(); - FX_BOOL AboutEquals(FX_FLOAT moduleSize, FX_FLOAT i, FX_FLOAT j); - FX_FLOAT GetX(); - FX_FLOAT GetY(); - CBC_QRAlignmentPattern* Clone(); -}; - -#endif // XFA_SRC_FXBARCODE_QRCODE_BC_QRALIGNMENTPATTERN_H_ diff --git a/xfa/src/fxbarcode/qrcode/BC_QRAlignmentPatternFinder.cpp b/xfa/src/fxbarcode/qrcode/BC_QRAlignmentPatternFinder.cpp deleted file mode 100644 index 2d1aa433a0..0000000000 --- a/xfa/src/fxbarcode/qrcode/BC_QRAlignmentPatternFinder.cpp +++ /dev/null @@ -1,200 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2007 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/BC_ResultPoint.h" -#include "xfa/src/fxbarcode/common/BC_CommonBitMatrix.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRAlignmentPattern.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRAlignmentPatternFinder.h" - -CBC_QRAlignmentPatternFinder::CBC_QRAlignmentPatternFinder( - CBC_CommonBitMatrix* image, - int32_t startX, - int32_t startY, - int32_t width, - int32_t height, - FX_FLOAT moduleSize) - : m_image(image), - m_startX(startX), - m_startY(startY), - m_width(width), - m_height(height), - m_moduleSize(moduleSize) { - m_crossCheckStateCount.SetSize(3); -} -CBC_QRAlignmentPatternFinder::~CBC_QRAlignmentPatternFinder() { - for (int32_t i = 0; i < m_possibleCenters.GetSize(); i++) { - delete (CBC_QRAlignmentPattern*)m_possibleCenters[i]; - } - m_possibleCenters.RemoveAll(); -} -CBC_QRAlignmentPattern* CBC_QRAlignmentPatternFinder::Find(int32_t& e) { - int32_t startX = m_startX; - int32_t height = m_height; - int32_t maxJ = startX + m_width; - int32_t middleI = m_startY + (height >> 1); - CFX_Int32Array stateCount; - stateCount.SetSize(3); - for (int32_t iGen = 0; iGen < height; iGen++) { - int32_t i = - middleI + ((iGen & 0x01) == 0 ? ((iGen + 1) >> 1) : -((iGen + 1) >> 1)); - stateCount[0] = 0; - stateCount[1] = 0; - stateCount[2] = 0; - int32_t j = startX; - while (j < maxJ && !m_image->Get(j, i)) { - j++; - } - int32_t currentState = 0; - while (j < maxJ) { - if (m_image->Get(j, i)) { - if (currentState == 1) { - stateCount[currentState]++; - } else { - if (currentState == 2) { - if (FoundPatternCross(stateCount)) { - CBC_QRAlignmentPattern* confirmed = - HandlePossibleCenter(stateCount, i, j); - if (confirmed) { - return confirmed; - } - } - stateCount[0] = stateCount[2]; - stateCount[1] = 1; - stateCount[2] = 0; - currentState = 1; - } else { - stateCount[++currentState]++; - } - } - } else { - if (currentState == 1) { - currentState++; - } - stateCount[currentState]++; - } - j++; - } - if (FoundPatternCross(stateCount)) { - CBC_QRAlignmentPattern* confirmed = - HandlePossibleCenter(stateCount, i, maxJ); - if (confirmed) { - return confirmed; - } - } - } - if (m_possibleCenters.GetSize() != 0) { - return ((CBC_QRAlignmentPattern*)(m_possibleCenters[0]))->Clone(); - } - e = BCExceptionRead; - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - return NULL; -} -FX_FLOAT CBC_QRAlignmentPatternFinder::CenterFromEnd( - const CFX_Int32Array& stateCount, - int32_t end) { - return (FX_FLOAT)(end - stateCount[2]) - stateCount[1] / 2.0f; -} -FX_BOOL CBC_QRAlignmentPatternFinder::FoundPatternCross( - const CFX_Int32Array& stateCount) { - FX_FLOAT moduleSize = m_moduleSize; - FX_FLOAT maxVariance = moduleSize / 2.0f; - for (int32_t i = 0; i < 3; i++) { - if (fabs(moduleSize - stateCount[i]) >= maxVariance) { - return false; - } - } - return TRUE; -} -FX_FLOAT CBC_QRAlignmentPatternFinder::CrossCheckVertical( - int32_t startI, - int32_t centerJ, - int32_t maxCount, - int32_t originalStateCountTotal) { - int32_t maxI = m_image->GetHeight(); - CFX_Int32Array stateCount; - stateCount.Copy(m_crossCheckStateCount); - stateCount[0] = 0; - stateCount[1] = 0; - stateCount[2] = 0; - int32_t i = startI; - while (i >= 0 && m_image->Get(centerJ, i) && stateCount[1] <= maxCount) { - stateCount[1]++; - i--; - } - if (i < 0 || stateCount[1] > maxCount) { - return FXSYS_nan(); - } - while (i >= 0 && !m_image->Get(centerJ, i) && stateCount[0] <= maxCount) { - stateCount[0]++; - i--; - } - if (stateCount[0] > maxCount) { - return FXSYS_nan(); - } - i = startI + 1; - while (i < maxI && m_image->Get(centerJ, i) && stateCount[1] <= maxCount) { - stateCount[1]++; - i++; - } - if (i == maxI || stateCount[1] > maxCount) { - return FXSYS_nan(); - } - while (i < maxI && !m_image->Get(centerJ, i) && stateCount[2] <= maxCount) { - stateCount[2]++; - i++; - } - if (stateCount[2] > maxCount) { - return FXSYS_nan(); - } - int32_t stateCountTotal = stateCount[0] + stateCount[1] + stateCount[2]; - if (5 * abs(stateCountTotal - originalStateCountTotal) >= - originalStateCountTotal) { - return FXSYS_nan(); - } - return FoundPatternCross(stateCount) ? CenterFromEnd(stateCount, i) - : FXSYS_nan(); -} -CBC_QRAlignmentPattern* CBC_QRAlignmentPatternFinder::HandlePossibleCenter( - const CFX_Int32Array& stateCount, - int32_t i, - int32_t j) { - int32_t stateCountTotal = stateCount[0] + stateCount[1] + stateCount[2]; - FX_FLOAT centerJ = CenterFromEnd(stateCount, j); - FX_FLOAT centerI = CrossCheckVertical(i, (int32_t)centerJ, 2 * stateCount[1], - stateCountTotal); - if (!FXSYS_isnan(centerI)) { - FX_FLOAT estimatedModuleSize = - (FX_FLOAT)(stateCount[0] + stateCount[1] + stateCount[2]) / 3.0f; - int32_t max = m_possibleCenters.GetSize(); - for (int32_t index = 0; index < max; index++) { - CBC_QRAlignmentPattern* center = - (CBC_QRAlignmentPattern*)(m_possibleCenters[index]); - if (center->AboutEquals(estimatedModuleSize, centerI, centerJ)) { - return new CBC_QRAlignmentPattern(centerJ, centerI, - estimatedModuleSize); - } - } - m_possibleCenters.Add( - new CBC_QRAlignmentPattern(centerJ, centerI, estimatedModuleSize)); - } - return NULL; -} diff --git a/xfa/src/fxbarcode/qrcode/BC_QRAlignmentPatternFinder.h b/xfa/src/fxbarcode/qrcode/BC_QRAlignmentPatternFinder.h deleted file mode 100644 index d1fff0aa3c..0000000000 --- a/xfa/src/fxbarcode/qrcode/BC_QRAlignmentPatternFinder.h +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_QRCODE_BC_QRALIGNMENTPATTERNFINDER_H_ -#define XFA_SRC_FXBARCODE_QRCODE_BC_QRALIGNMENTPATTERNFINDER_H_ - -#include "core/include/fxcrt/fx_basic.h" -#include "xfa/src/fxbarcode/utils.h" - -class CBC_CommonBitMatrix; -class CBC_QRAlignmentPattern; - -class CBC_QRAlignmentPatternFinder { - private: - CBC_CommonBitMatrix* m_image; - CFX_PtrArray m_possibleCenters; - int32_t m_startX; - int32_t m_startY; - int32_t m_width; - int32_t m_height; - FX_FLOAT m_moduleSize; - CFX_Int32Array m_crossCheckStateCount; - - public: - CBC_QRAlignmentPatternFinder(CBC_CommonBitMatrix* image, - int32_t startX, - int32_t startY, - int32_t width, - int32_t height, - FX_FLOAT moduleSize); - virtual ~CBC_QRAlignmentPatternFinder(); - FX_BOOL FoundPatternCross(const CFX_Int32Array& stateCount); - FX_FLOAT CrossCheckVertical(int32_t startI, - int32_t startJ, - int32_t maxCount, - int32_t originalStateCountTotal); - CBC_QRAlignmentPattern* Find(int32_t& e); - CBC_QRAlignmentPattern* HandlePossibleCenter(const CFX_Int32Array& stateCount, - int32_t i, - int32_t j); - static FX_FLOAT CenterFromEnd(const CFX_Int32Array& stateCount, int32_t end); -}; - -#endif // XFA_SRC_FXBARCODE_QRCODE_BC_QRALIGNMENTPATTERNFINDER_H_ diff --git a/xfa/src/fxbarcode/qrcode/BC_QRBitMatrixParser.cpp b/xfa/src/fxbarcode/qrcode/BC_QRBitMatrixParser.cpp deleted file mode 100644 index 7426d95d4c..0000000000 --- a/xfa/src/fxbarcode/qrcode/BC_QRBitMatrixParser.cpp +++ /dev/null @@ -1,183 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2007 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/qrcode/BC_QRBitMatrixParser.h" - -#include - -#include "xfa/src/fxbarcode/common/BC_CommonBitMatrix.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRCoderFormatInformation.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRCoderVersion.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRDataMask.h" -#include "xfa/src/fxbarcode/utils.h" - -CBC_QRBitMatrixParser::CBC_QRBitMatrixParser() {} -void CBC_QRBitMatrixParser::Init(CBC_CommonBitMatrix* bitMatrix, int32_t& e) { - m_dimension = bitMatrix->GetDimension(e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - m_tempBitMatrix = bitMatrix; - if (m_dimension < 21 || (m_dimension & 0x03) != 1) { - e = BCExceptionRead; - BC_EXCEPTION_CHECK_ReturnVoid(e); - } - m_bitMatrix = m_tempBitMatrix; - m_parsedFormatInfo = NULL; - m_version = NULL; -} -CBC_QRBitMatrixParser::~CBC_QRBitMatrixParser() { - delete m_parsedFormatInfo; -} -CBC_QRCoderFormatInformation* CBC_QRBitMatrixParser::ReadFormatInformation( - int32_t& e) { - if (m_parsedFormatInfo) { - return m_parsedFormatInfo; - } - int32_t formatInfoBits = 0; - int32_t j; - for (j = 0; j < 6; j++) { - formatInfoBits = CopyBit(8, j, formatInfoBits); - } - formatInfoBits = CopyBit(8, 7, formatInfoBits); - formatInfoBits = CopyBit(8, 8, formatInfoBits); - formatInfoBits = CopyBit(7, 8, formatInfoBits); - for (int32_t i = 5; i >= 0; i--) { - formatInfoBits = CopyBit(i, 8, formatInfoBits); - } - m_parsedFormatInfo = - CBC_QRCoderFormatInformation::DecodeFormatInformation(formatInfoBits); - if (m_parsedFormatInfo) { - return m_parsedFormatInfo; - } - int32_t dimension = m_bitMatrix->GetDimension(e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - formatInfoBits = 0; - int32_t iMin = dimension - 8; - for (j = dimension - 1; j >= iMin; j--) { - formatInfoBits = CopyBit(j, 8, formatInfoBits); - } - for (int32_t k = dimension - 7; k < dimension; k++) { - formatInfoBits = CopyBit(8, k, formatInfoBits); - } - m_parsedFormatInfo = - CBC_QRCoderFormatInformation::DecodeFormatInformation(formatInfoBits); - if (m_parsedFormatInfo) { - return m_parsedFormatInfo; - } - e = BCExceptionRead; - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - return NULL; -} -CBC_QRCoderVersion* CBC_QRBitMatrixParser::ReadVersion(int32_t& e) { - if (m_version) { - return m_version; - } - int32_t dimension = m_bitMatrix->GetDimension(e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - int32_t provisionVersion = (dimension - 17) >> 2; - if (provisionVersion <= 6) { - CBC_QRCoderVersion* qrv = - CBC_QRCoderVersion::GetVersionForNumber(provisionVersion, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - return qrv; - } - int32_t versionBits = 0; - for (int32_t i = 5; i >= 0; i--) { - int32_t jMin = dimension - 11; - for (int32_t j = dimension - 9; j >= jMin; j--) { - versionBits = CopyBit(i, j, versionBits); - } - } - m_version = CBC_QRCoderVersion::DecodeVersionInformation(versionBits, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - if (m_version && m_version->GetDimensionForVersion() == dimension) { - return m_version; - } - versionBits = 0; - for (int32_t j = 5; j >= 0; j--) { - int32_t iMin = dimension - 11; - for (int32_t i = dimension - 9; i >= iMin; i--) { - versionBits = CopyBit(i, j, versionBits); - } - } - m_version = CBC_QRCoderVersion::DecodeVersionInformation(versionBits, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - if (m_version && m_version->GetDimensionForVersion() == dimension) { - return m_version; - } - e = BCExceptionRead; - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - return NULL; -} -int32_t CBC_QRBitMatrixParser::CopyBit(int32_t i, - int32_t j, - int32_t versionBits) { - return m_bitMatrix->Get(j, i) ? (versionBits << 1) | 0x1 : versionBits << 1; -} -CFX_ByteArray* CBC_QRBitMatrixParser::ReadCodewords(int32_t& e) { - CBC_QRCoderFormatInformation* formatInfo = ReadFormatInformation(e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL) CBC_QRCoderVersion* version = - ReadVersion(e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - CBC_QRDataMask* dataMask = - CBC_QRDataMask::ForReference((int32_t)(formatInfo->GetDataMask()), e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - int32_t dimension = m_bitMatrix->GetDimension(e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - dataMask->UnmaskBitMatirx(m_bitMatrix, dimension); - std::unique_ptr functionPattern( - version->BuildFunctionPattern(e)); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - FX_BOOL readingUp = TRUE; - std::unique_ptr result(new CFX_ByteArray); - result->SetSize(version->GetTotalCodeWords()); - int32_t resultOffset = 0; - int32_t currentByte = 0; - int32_t bitsRead = 0; - for (int32_t j = dimension - 1; j > 0; j -= 2) { - if (j == 6) { - j--; - } - for (int32_t count = 0; count < dimension; count++) { - int32_t i = readingUp ? dimension - 1 - count : count; - for (int32_t col = 0; col < 2; col++) { - if (!functionPattern->Get(j - col, i)) { - bitsRead++; - currentByte <<= 1; - if (m_bitMatrix->Get(j - col, i)) { - currentByte |= 1; - } - if (bitsRead == 8) { - (*result)[resultOffset++] = (uint8_t)currentByte; - bitsRead = 0; - currentByte = 0; - } - } - } - } - readingUp ^= TRUE; - } - if (resultOffset != version->GetTotalCodeWords()) { - e = BCExceptionRead; - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - } - return result.release(); -} diff --git a/xfa/src/fxbarcode/qrcode/BC_QRBitMatrixParser.h b/xfa/src/fxbarcode/qrcode/BC_QRBitMatrixParser.h deleted file mode 100644 index c93be6db9a..0000000000 --- a/xfa/src/fxbarcode/qrcode/BC_QRBitMatrixParser.h +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_QRCODE_BC_QRBITMATRIXPARSER_H_ -#define XFA_SRC_FXBARCODE_QRCODE_BC_QRBITMATRIXPARSER_H_ - -#include "core/include/fxcrt/fx_basic.h" - -class CBC_CommonBitMatrix; -class CBC_QRCoderVersion; -class CBC_QRCoderFormatInformation; - -class CBC_QRBitMatrixParser { - private: - CBC_CommonBitMatrix* m_bitMatrix; - CBC_CommonBitMatrix* m_tempBitMatrix; - CBC_QRCoderVersion* m_version; - CBC_QRCoderFormatInformation* m_parsedFormatInfo; - int32_t m_dimension; - - public: - CBC_QRBitMatrixParser(); - virtual ~CBC_QRBitMatrixParser(); - CBC_QRCoderFormatInformation* ReadFormatInformation(int32_t& e); - CBC_QRCoderVersion* ReadVersion(int32_t& e); - int32_t CopyBit(int32_t i, int32_t j, int32_t versionBits); - CFX_ByteArray* ReadCodewords(int32_t& e); - virtual void Init(CBC_CommonBitMatrix* bitMatrix, int32_t& e); -}; - -#endif // XFA_SRC_FXBARCODE_QRCODE_BC_QRBITMATRIXPARSER_H_ diff --git a/xfa/src/fxbarcode/qrcode/BC_QRCodeReader.cpp b/xfa/src/fxbarcode/qrcode/BC_QRCodeReader.cpp deleted file mode 100644 index 896a3a107b..0000000000 --- a/xfa/src/fxbarcode/qrcode/BC_QRCodeReader.cpp +++ /dev/null @@ -1,108 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2007 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/qrcode/BC_QRCodeReader.h" - -#include - -#include "xfa/src/fxbarcode/BC_Binarizer.h" -#include "xfa/src/fxbarcode/BC_BinaryBitmap.h" -#include "xfa/src/fxbarcode/BC_BufferedImageLuminanceSource.h" -#include "xfa/src/fxbarcode/BC_LuminanceSource.h" -#include "xfa/src/fxbarcode/BC_Reader.h" -#include "xfa/src/fxbarcode/BC_ResultPoint.h" -#include "xfa/src/fxbarcode/common/BC_CommonDecoderResult.h" -#include "xfa/src/fxbarcode/common/BC_GlobalHistogramBinarizer.h" -#include "xfa/src/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRCoderDecoder.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRCoderErrorCorrectionLevel.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRCoderMode.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRCoderVersion.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRDataMask.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRDetector.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRDetectorResult.h" - -CBC_QRCodeReader::CBC_QRCodeReader() : m_decoder(NULL) {} -void CBC_QRCodeReader::Init() { - m_decoder = new CBC_QRCoderDecoder; - m_decoder->Init(); -} -CBC_QRCodeReader::~CBC_QRCodeReader() { - delete m_decoder; -} -CFX_ByteString CBC_QRCodeReader::Decode(CBC_BinaryBitmap* image, - int32_t hints, - int32_t& e) { - CBC_CommonBitMatrix* matrix = image->GetMatrix(e); - BC_EXCEPTION_CHECK_ReturnValue(e, ""); - CBC_QRDetector detector(matrix); - std::unique_ptr detectorResult( - detector.Detect(hints, e)); - BC_EXCEPTION_CHECK_ReturnValue(e, ""); - std::unique_ptr decodeResult( - m_decoder->Decode(detectorResult->GetBits(), 0, e)); - BC_EXCEPTION_CHECK_ReturnValue(e, ""); - return (decodeResult->GetText()); -} -CFX_ByteString CBC_QRCodeReader::Decode(const CFX_WideString& filename, - int32_t hints, - int32_t byteModeDecode, - int32_t& e) { - CBC_BufferedImageLuminanceSource source(filename); - source.Init(e); - BC_EXCEPTION_CHECK_ReturnValue(e, ""); - CBC_GlobalHistogramBinarizer binarizer(&source); - CBC_BinaryBitmap bitmap(&binarizer); - CFX_ByteString bs = Decode(&bitmap, hints, e); - BC_EXCEPTION_CHECK_ReturnValue(e, ""); - return bs; -} -CFX_ByteString CBC_QRCodeReader::Decode(CFX_DIBitmap* pBitmap, - int32_t hints, - int32_t byteModeDecode, - int32_t& e) { - CBC_BufferedImageLuminanceSource source(pBitmap); - CBC_GlobalHistogramBinarizer binarizer(&source); - CBC_BinaryBitmap bitmap(&binarizer); - CFX_ByteString bs = Decode(&bitmap, hints, e); - BC_EXCEPTION_CHECK_ReturnValue(e, ""); - return bs; -} -CFX_ByteString CBC_QRCodeReader::Decode(CBC_BinaryBitmap* image, int32_t& e) { - CFX_ByteString bs = Decode(image, 0, e); - BC_EXCEPTION_CHECK_ReturnValue(e, ""); - return bs; -} -void CBC_QRCodeReader::ReleaseAll() { - if (CBC_ReedSolomonGF256::QRCodeFild) { - delete CBC_ReedSolomonGF256::QRCodeFild; - CBC_ReedSolomonGF256::QRCodeFild = NULL; - } - if (CBC_ReedSolomonGF256::DataMatrixField) { - delete CBC_ReedSolomonGF256::DataMatrixField; - CBC_ReedSolomonGF256::DataMatrixField = NULL; - } - CBC_QRCoderMode::Destroy(); - CBC_QRCoderErrorCorrectionLevel::Destroy(); - CBC_QRDataMask::Destroy(); - CBC_QRCoderVersion::Destroy(); -} diff --git a/xfa/src/fxbarcode/qrcode/BC_QRCodeReader.h b/xfa/src/fxbarcode/qrcode/BC_QRCodeReader.h deleted file mode 100644 index 7edb12b937..0000000000 --- a/xfa/src/fxbarcode/qrcode/BC_QRCodeReader.h +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_QRCODE_BC_QRCODEREADER_H_ -#define XFA_SRC_FXBARCODE_QRCODE_BC_QRCODEREADER_H_ - -#include - -#include "core/include/fxcrt/fx_string.h" -#include "xfa/src/fxbarcode/BC_Reader.h" - -class CBC_BinaryBitmap; -class CBC_QRCoderDecoder; -class CFX_DIBitmap; - -class CBC_QRCodeReader : public CBC_Reader { - private: - CBC_QRCoderDecoder* m_decoder; - - public: - CBC_QRCodeReader(); - virtual ~CBC_QRCodeReader(); - CFX_ByteString Decode(CFX_DIBitmap* pBitmap, - int32_t hints, - int32_t byteModeDecode, - int32_t& e); - CFX_ByteString Decode(const CFX_WideString& filename, - int32_t hints, - int32_t byteModeDecode, - int32_t& e); - static void ReleaseAll(); - CFX_ByteString Decode(CBC_BinaryBitmap* image, int32_t hints, int32_t& e); - CFX_ByteString Decode(CBC_BinaryBitmap* image, int32_t& e); - virtual void Init(); -}; - -#endif // XFA_SRC_FXBARCODE_QRCODE_BC_QRCODEREADER_H_ diff --git a/xfa/src/fxbarcode/qrcode/BC_QRCodeWriter.cpp b/xfa/src/fxbarcode/qrcode/BC_QRCodeWriter.cpp deleted file mode 100644 index e51b9260ef..0000000000 --- a/xfa/src/fxbarcode/qrcode/BC_QRCodeWriter.cpp +++ /dev/null @@ -1,107 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2008 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/BC_Reader.h" -#include "xfa/src/fxbarcode/BC_TwoDimWriter.h" -#include "xfa/src/fxbarcode/common/BC_CommonByteMatrix.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRCodeReader.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRCodeWriter.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRCoder.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRCoderEncoder.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRCoderErrorCorrectionLevel.h" - -CBC_QRCodeWriter::CBC_QRCodeWriter() { - m_bFixedSize = TRUE; - m_iCorrectLevel = 1; - m_iVersion = 0; -} -CBC_QRCodeWriter::~CBC_QRCodeWriter() {} -void CBC_QRCodeWriter::ReleaseAll() { - CBC_QRCodeReader::ReleaseAll(); -} -FX_BOOL CBC_QRCodeWriter::SetVersion(int32_t version) { - if (version < 0 || version > 40) { - return FALSE; - } - m_iVersion = version; - return TRUE; -} -FX_BOOL CBC_QRCodeWriter::SetErrorCorrectionLevel(int32_t level) { - if (level < 0 || level > 3) { - return FALSE; - } - m_iCorrectLevel = level; - return TRUE; -} -uint8_t* CBC_QRCodeWriter::Encode(const CFX_WideString& contents, - int32_t ecLevel, - int32_t& outWidth, - int32_t& outHeight, - int32_t& e) { - CBC_QRCoderErrorCorrectionLevel* ec = NULL; - switch (ecLevel) { - case 0: - ec = CBC_QRCoderErrorCorrectionLevel::L; - break; - case 1: - ec = CBC_QRCoderErrorCorrectionLevel::M; - break; - case 2: - ec = CBC_QRCoderErrorCorrectionLevel::Q; - break; - case 3: - ec = CBC_QRCoderErrorCorrectionLevel::H; - break; - default: { - e = BCExceptionUnSupportEclevel; - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - } - } - CBC_QRCoder qr; - if (m_iVersion > 0 && m_iVersion < 41) { - CFX_ByteString byteStr = contents.UTF8Encode(); - CBC_QRCoderEncoder::Encode(byteStr, ec, &qr, e, m_iVersion); - } else { - CBC_QRCoderEncoder::Encode(contents, ec, &qr, e); - } - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - outWidth = qr.GetMatrixWidth(); - outHeight = qr.GetMatrixWidth(); - uint8_t* result = FX_Alloc2D(uint8_t, outWidth, outHeight); - FXSYS_memcpy(result, qr.GetMatrix()->GetArray(), outWidth * outHeight); - return result; -} -uint8_t* CBC_QRCodeWriter::Encode(const CFX_ByteString& contents, - BCFORMAT format, - int32_t& outWidth, - int32_t& outHeight, - int32_t hints, - int32_t& e) { - return NULL; -} -uint8_t* CBC_QRCodeWriter::Encode(const CFX_ByteString& contents, - BCFORMAT format, - int32_t& outWidth, - int32_t& outHeight, - int32_t& e) { - return NULL; -} diff --git a/xfa/src/fxbarcode/qrcode/BC_QRCodeWriter.h b/xfa/src/fxbarcode/qrcode/BC_QRCodeWriter.h deleted file mode 100644 index ceb6547640..0000000000 --- a/xfa/src/fxbarcode/qrcode/BC_QRCodeWriter.h +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_QRCODE_BC_QRCODEWRITER_H_ -#define XFA_SRC_FXBARCODE_QRCODE_BC_QRCODEWRITER_H_ - -#include "xfa/src/fxbarcode/BC_TwoDimWriter.h" - -class CBC_TwoDimWriter; -class CBC_QRCodeWriter : public CBC_TwoDimWriter { - public: - CBC_QRCodeWriter(); - virtual ~CBC_QRCodeWriter(); - uint8_t* Encode(const CFX_WideString& contents, - int32_t ecLevel, - int32_t& outWidth, - int32_t& outHeight, - int32_t& e); - uint8_t* Encode(const CFX_ByteString& contents, - BCFORMAT format, - int32_t& outWidth, - int32_t& outHeight, - int32_t hints, - int32_t& e); - uint8_t* Encode(const CFX_ByteString& contents, - BCFORMAT format, - int32_t& outWidth, - int32_t& outHeight, - int32_t& e); - FX_BOOL SetVersion(int32_t version); - FX_BOOL SetErrorCorrectionLevel(int32_t level); - static void ReleaseAll(); - - private: - int32_t m_iVersion; -}; - -#endif // XFA_SRC_FXBARCODE_QRCODE_BC_QRCODEWRITER_H_ diff --git a/xfa/src/fxbarcode/qrcode/BC_QRCoder.cpp b/xfa/src/fxbarcode/qrcode/BC_QRCoder.cpp deleted file mode 100644 index be46f2dec5..0000000000 --- a/xfa/src/fxbarcode/qrcode/BC_QRCoder.cpp +++ /dev/null @@ -1,124 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2008 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/common/BC_CommonByteMatrix.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRCoder.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRCoderErrorCorrectionLevel.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRCoderMode.h" -#include "xfa/src/fxbarcode/utils.h" - -CBC_QRCoder::CBC_QRCoder() { - m_mode = NULL; - m_ecLevel = NULL; - m_version = -1; - m_matrixWidth = -1; - m_maskPattern = -1; - m_numTotalBytes = -1; - m_numDataBytes = -1; - m_numECBytes = -1; - m_numRSBlocks = -1; - m_matrix = NULL; -} -CBC_QRCoder::~CBC_QRCoder() { - delete m_matrix; -} -CBC_QRCoderMode* CBC_QRCoder::GetMode() { - return m_mode; -} -CBC_QRCoderErrorCorrectionLevel* CBC_QRCoder::GetECLevel() { - return m_ecLevel; -} -int32_t CBC_QRCoder::GetVersion() { - return m_version; -} -int32_t CBC_QRCoder::GetMatrixWidth() { - return m_matrixWidth; -} -int32_t CBC_QRCoder::GetMaskPattern() { - return m_maskPattern; -} -int32_t CBC_QRCoder::GetNumTotalBytes() { - return m_numTotalBytes; -} -int32_t CBC_QRCoder::GetNumDataBytes() { - return m_numDataBytes; -} -int32_t CBC_QRCoder::GetNumECBytes() { - return m_numECBytes; -} -int32_t CBC_QRCoder::GetNumRSBlocks() { - return m_numRSBlocks; -} -CBC_CommonByteMatrix* CBC_QRCoder::GetMatrix() { - return m_matrix; -} -int32_t CBC_QRCoder::At(int32_t x, int32_t y, int32_t& e) { - int32_t value = m_matrix->Get(x, y); - if (!(value == 0 || value == 1)) { - e = BCExceptionValueMustBeEither0or1; - BC_EXCEPTION_CHECK_ReturnValue(e, 0); - } - return value; -} -FX_BOOL CBC_QRCoder::IsValid() { - return m_mode && m_ecLevel && m_version != -1 && m_matrixWidth != -1 && - m_maskPattern != -1 && m_numTotalBytes != -1 && m_numDataBytes != -1 && - m_numECBytes != -1 && m_numRSBlocks != -1 && - IsValidMaskPattern(m_maskPattern) && - m_numTotalBytes == m_numDataBytes + m_numECBytes && m_matrix && - m_matrixWidth == m_matrix->GetWidth() && - m_matrix->GetWidth() == m_matrix->GetHeight(); -} -void CBC_QRCoder::SetMode(CBC_QRCoderMode* value) { - m_mode = value; -} -void CBC_QRCoder::SetECLevel(CBC_QRCoderErrorCorrectionLevel* ecLevel) { - m_ecLevel = ecLevel; -} -void CBC_QRCoder::SetVersion(int32_t version) { - m_version = version; -} -void CBC_QRCoder::SetMatrixWidth(int32_t width) { - m_matrixWidth = width; -} -void CBC_QRCoder::SetMaskPattern(int32_t pattern) { - m_maskPattern = pattern; -} -void CBC_QRCoder::SetNumDataBytes(int32_t bytes) { - m_numDataBytes = bytes; -} -void CBC_QRCoder::SetNumTotalBytes(int32_t value) { - m_numTotalBytes = value; -} -void CBC_QRCoder::SetNumRSBlocks(int32_t block) { - m_numRSBlocks = block; -} -void CBC_QRCoder::SetNumECBytes(int32_t value) { - m_numECBytes = value; -} -FX_BOOL CBC_QRCoder::IsValidMaskPattern(int32_t maskPattern) { - return maskPattern >= 0 && maskPattern < NUM_MASK_PATTERNS; -} -void CBC_QRCoder::SetMatrix(CBC_CommonByteMatrix* value) { - m_matrix = value; -} -const int32_t CBC_QRCoder::NUM_MASK_PATTERNS = 8; diff --git a/xfa/src/fxbarcode/qrcode/BC_QRCoder.h b/xfa/src/fxbarcode/qrcode/BC_QRCoder.h deleted file mode 100644 index 6a44b53a6d..0000000000 --- a/xfa/src/fxbarcode/qrcode/BC_QRCoder.h +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_QRCODE_BC_QRCODER_H_ -#define XFA_SRC_FXBARCODE_QRCODE_BC_QRCODER_H_ - -class CBC_QRCoderErrorCorrectionLevel; -class CBC_QRCoderMode; -class CBC_CommonByteMatrix; - -class CBC_QRCoder { - private: - CBC_QRCoderMode* m_mode; - CBC_QRCoderErrorCorrectionLevel* m_ecLevel; - int32_t m_version; - int32_t m_matrixWidth; - int32_t m_maskPattern; - int32_t m_numTotalBytes; - int32_t m_numDataBytes; - int32_t m_numECBytes; - int32_t m_numRSBlocks; - CBC_CommonByteMatrix* m_matrix; - - public: - static const int32_t NUM_MASK_PATTERNS; - CBC_QRCoder(); - virtual ~CBC_QRCoder(); - CBC_QRCoderMode* GetMode(); - CBC_QRCoderErrorCorrectionLevel* GetECLevel(); - int32_t GetVersion(); - int32_t GetMatrixWidth(); - int32_t GetMaskPattern(); - int32_t GetNumTotalBytes(); - int32_t GetNumDataBytes(); - int32_t GetNumECBytes(); - int32_t GetNumRSBlocks(); - CBC_CommonByteMatrix* GetMatrix(); - int32_t At(int32_t x, int32_t y, int32_t& e); - FX_BOOL IsValid(); - - void SetMode(CBC_QRCoderMode* value); - void SetECLevel(CBC_QRCoderErrorCorrectionLevel* ecLevel); - void SetVersion(int32_t version); - void SetMatrixWidth(int32_t width); - void SetMaskPattern(int32_t pattern); - void SetNumDataBytes(int32_t bytes); - void SetNumTotalBytes(int32_t value); - void SetNumECBytes(int32_t value); - void SetNumRSBlocks(int32_t block); - void SetMatrix(CBC_CommonByteMatrix* value); - static FX_BOOL IsValidMaskPattern(int32_t maskPattern); -}; - -#endif // XFA_SRC_FXBARCODE_QRCODE_BC_QRCODER_H_ diff --git a/xfa/src/fxbarcode/qrcode/BC_QRCoderBitVector.cpp b/xfa/src/fxbarcode/qrcode/BC_QRCoderBitVector.cpp deleted file mode 100644 index ad1b3200ab..0000000000 --- a/xfa/src/fxbarcode/qrcode/BC_QRCoderBitVector.cpp +++ /dev/null @@ -1,124 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2007 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "core/include/fxcrt/fx_memory.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRCoderBitVector.h" -#include "xfa/src/fxbarcode/utils.h" - -CBC_QRCoderBitVector::CBC_QRCoderBitVector() { - m_sizeInBits = 0; - m_size = 32; -} -void CBC_QRCoderBitVector::Init() { - m_array = FX_Alloc(uint8_t, m_size); -} -CBC_QRCoderBitVector::~CBC_QRCoderBitVector() { - FX_Free(m_array); -} -void CBC_QRCoderBitVector::Clear() { - FX_Free(m_array); - m_sizeInBits = 0; - m_size = 32; - m_array = FX_Alloc(uint8_t, m_size); -} -int32_t CBC_QRCoderBitVector::At(int32_t index, int32_t& e) { - if (index < 0 || index >= m_sizeInBits) { - e = BCExceptionBadIndexException; - BC_EXCEPTION_CHECK_ReturnValue(e, 0); - } - int32_t value = m_array[index >> 3] & 0xff; - return (value >> (7 - (index & 0x7))) & 1; -} -int32_t CBC_QRCoderBitVector::sizeInBytes() { - return (m_sizeInBits + 7) >> 3; -} -int32_t CBC_QRCoderBitVector::Size() { - return m_sizeInBits; -} -void CBC_QRCoderBitVector::AppendBit(int32_t bit, int32_t& e) { - if (!(bit == 0 || bit == 1)) { - e = BCExceptionBadValueException; - BC_EXCEPTION_CHECK_ReturnVoid(e); - } - int32_t numBitsInLastByte = m_sizeInBits & 0x7; - if (numBitsInLastByte == 0) { - AppendByte(0); - m_sizeInBits -= 8; - } - m_array[m_sizeInBits >> 3] |= (bit << (7 - numBitsInLastByte)); - ++m_sizeInBits; -} -void CBC_QRCoderBitVector::AppendBits(int32_t value, - int32_t numBits, - int32_t& e) { - if (numBits < 0 || numBits > 32) { - e = BCExceptionBadNumBitsException; - BC_EXCEPTION_CHECK_ReturnVoid(e); - } - int32_t numBitsLeft = numBits; - while (numBitsLeft > 0) { - if ((m_sizeInBits & 0x7) == 0 && numBitsLeft >= 8) { - int32_t newByte = (value >> (numBitsLeft - 8)) & 0xff; - AppendByte(newByte); - numBitsLeft -= 8; - } else { - int32_t bit = (value >> (numBitsLeft - 1)) & 1; - AppendBit(bit, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - --numBitsLeft; - } - } -} -void CBC_QRCoderBitVector::AppendBitVector(CBC_QRCoderBitVector* bits, - int32_t& e) { - int32_t size = bits->Size(); - for (int32_t i = 0; i < size; i++) { - int32_t num = bits->At(i, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - AppendBit(num, e); - BC_EXCEPTION_CHECK_ReturnVoid(e) - } -} -void CBC_QRCoderBitVector::XOR(CBC_QRCoderBitVector* other, int32_t& e) { - if (m_sizeInBits != other->Size()) { - e = BCExceptioncanNotOperatexorOperator; - BC_EXCEPTION_CHECK_ReturnVoid(e); - } - int32_t sizeInBytes = (m_sizeInBits + 7) >> 3; - for (int32_t i = 0; i < sizeInBytes; ++i) { - m_array[i] ^= (other->GetArray())[i]; - } -} -uint8_t* CBC_QRCoderBitVector::GetArray() { - return m_array; -} -void CBC_QRCoderBitVector::AppendByte(int32_t value) { - if ((m_sizeInBits >> 3) == m_size) { - uint8_t* newArray = FX_Alloc(uint8_t, m_size << 1); - FXSYS_memcpy(newArray, m_array, m_size); - FX_Free(m_array); - m_array = newArray; - m_size = m_size << 1; - } - m_array[m_sizeInBits >> 3] = (uint8_t)value; - m_sizeInBits += 8; -} diff --git a/xfa/src/fxbarcode/qrcode/BC_QRCoderBitVector.h b/xfa/src/fxbarcode/qrcode/BC_QRCoderBitVector.h deleted file mode 100644 index 86c40527a1..0000000000 --- a/xfa/src/fxbarcode/qrcode/BC_QRCoderBitVector.h +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_QRCODE_BC_QRCODERBITVECTOR_H_ -#define XFA_SRC_FXBARCODE_QRCODE_BC_QRCODERBITVECTOR_H_ - -#include - -class CBC_QRCoderBitVector { - private: - int32_t m_sizeInBits; - uint8_t* m_array; - int32_t m_size; - - void AppendByte(int32_t value); - - public: - CBC_QRCoderBitVector(); - virtual ~CBC_QRCoderBitVector(); - int32_t At(int32_t index, int32_t& e); - int32_t Size(); - int32_t sizeInBytes(); - void AppendBit(int32_t bit, int32_t& e); - void AppendBits(int32_t value, int32_t numBits, int32_t& e); - void AppendBitVector(CBC_QRCoderBitVector* bits, int32_t& e); - void XOR(CBC_QRCoderBitVector* other, int32_t& e); - uint8_t* GetArray(); - void Clear(); - virtual void Init(); -}; - -#endif // XFA_SRC_FXBARCODE_QRCODE_BC_QRCODERBITVECTOR_H_ diff --git a/xfa/src/fxbarcode/qrcode/BC_QRCoderBlockPair.cpp b/xfa/src/fxbarcode/qrcode/BC_QRCoderBlockPair.cpp deleted file mode 100644 index b9accd6097..0000000000 --- a/xfa/src/fxbarcode/qrcode/BC_QRCoderBlockPair.cpp +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2008 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/common/BC_CommonByteArray.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRCoderBlockPair.h" - -CBC_QRCoderBlockPair::CBC_QRCoderBlockPair( - CBC_CommonByteArray* data, - CBC_CommonByteArray* errorCorrection) { - m_dataBytes = data; - m_errorCorrectionBytes = errorCorrection; -} -CBC_QRCoderBlockPair::~CBC_QRCoderBlockPair() { - delete m_dataBytes; - delete m_errorCorrectionBytes; -} -CBC_CommonByteArray* CBC_QRCoderBlockPair::GetDataBytes() { - return m_dataBytes; -} -CBC_CommonByteArray* CBC_QRCoderBlockPair::GetErrorCorrectionBytes() { - return m_errorCorrectionBytes; -} diff --git a/xfa/src/fxbarcode/qrcode/BC_QRCoderBlockPair.h b/xfa/src/fxbarcode/qrcode/BC_QRCoderBlockPair.h deleted file mode 100644 index 30551fe610..0000000000 --- a/xfa/src/fxbarcode/qrcode/BC_QRCoderBlockPair.h +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_QRCODE_BC_QRCODERBLOCKPAIR_H_ -#define XFA_SRC_FXBARCODE_QRCODE_BC_QRCODERBLOCKPAIR_H_ - -class CBC_CommonByteArray; -class CBC_QRCoderBlockPair { - private: - CBC_CommonByteArray* m_dataBytes; - CBC_CommonByteArray* m_errorCorrectionBytes; - - public: - CBC_QRCoderBlockPair(CBC_CommonByteArray* data, - CBC_CommonByteArray* errorCorrection); - virtual ~CBC_QRCoderBlockPair(); - - CBC_CommonByteArray* GetDataBytes(); - CBC_CommonByteArray* GetErrorCorrectionBytes(); -}; - -#endif // XFA_SRC_FXBARCODE_QRCODE_BC_QRCODERBLOCKPAIR_H_ diff --git a/xfa/src/fxbarcode/qrcode/BC_QRCoderDecoder.cpp b/xfa/src/fxbarcode/qrcode/BC_QRCoderDecoder.cpp deleted file mode 100644 index dd310217d4..0000000000 --- a/xfa/src/fxbarcode/qrcode/BC_QRCoderDecoder.cpp +++ /dev/null @@ -1,129 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2008 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/qrcode/BC_QRCoderDecoder.h" - -#include - -#include "xfa/src/fxbarcode/common/BC_CommonBitMatrix.h" -#include "xfa/src/fxbarcode/common/BC_CommonDecoderResult.h" -#include "xfa/src/fxbarcode/common/reedsolomon/BC_ReedSolomonDecoder.h" -#include "xfa/src/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRBitMatrixParser.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRCoderFormatInformation.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRCoderVersion.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRDataBlock.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRDecodedBitStreamParser.h" - -CBC_QRCoderDecoder::CBC_QRCoderDecoder() { - m_rsDecoder = NULL; -} - -void CBC_QRCoderDecoder::Init() { - m_rsDecoder = new CBC_ReedSolomonDecoder(CBC_ReedSolomonGF256::QRCodeFild); -} -CBC_QRCoderDecoder::~CBC_QRCoderDecoder() { - delete m_rsDecoder; -} -CBC_CommonDecoderResult* CBC_QRCoderDecoder::Decode(FX_BOOL* image, - int32_t width, - int32_t height, - int32_t& e) { - CBC_CommonBitMatrix bits; - bits.Init(width); - for (int32_t i = 0; i < width; i++) { - for (int32_t j = 0; j < height; j++) { - if (image[i * width + j]) { - bits.Set(j, i); - } - } - } - CBC_CommonDecoderResult* cdr = Decode(&bits, height, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - return cdr; -} -CBC_CommonDecoderResult* CBC_QRCoderDecoder::Decode(CBC_CommonBitMatrix* bits, - int32_t byteModeDecode, - int32_t& e) { - CBC_QRBitMatrixParser parser; - parser.Init(bits, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - CBC_QRCoderVersion* version = parser.ReadVersion(e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - CBC_QRCoderFormatInformation* temp = parser.ReadFormatInformation(e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - CBC_QRCoderErrorCorrectionLevel* ecLevel = temp->GetErrorCorrectionLevel(); - std::unique_ptr codewords(parser.ReadCodewords(e)); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - CFX_PtrArray* dataBlocks = - CBC_QRDataBlock::GetDataBlocks(codewords.get(), version, ecLevel, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - int32_t totalBytes = 0; - for (int32_t i = 0; i < dataBlocks->GetSize(); i++) { - totalBytes += ((CBC_QRDataBlock*)((*dataBlocks)[i]))->GetNumDataCodewords(); - } - CFX_ByteArray resultBytes; - for (int32_t j = 0; j < dataBlocks->GetSize(); j++) { - CBC_QRDataBlock* dataBlock = (CBC_QRDataBlock*)((*dataBlocks)[j]); - CFX_ByteArray* codewordBytes = dataBlock->GetCodewords(); - int32_t numDataCodewords = dataBlock->GetNumDataCodewords(); - CorrectErrors(codewordBytes, numDataCodewords, e); - if (e != BCExceptionNO) { - for (int32_t k = 0; k < dataBlocks->GetSize(); k++) { - delete (CBC_QRDataBlock*)(*dataBlocks)[k]; - } - dataBlocks->RemoveAll(); - delete dataBlocks; - dataBlocks = NULL; - return NULL; - } - for (int32_t i = 0; i < numDataCodewords; i++) { - resultBytes.Add((*codewordBytes)[i]); - } - } - for (int32_t k = 0; k < dataBlocks->GetSize(); k++) { - delete (CBC_QRDataBlock*)(*dataBlocks)[k]; - } - dataBlocks->RemoveAll(); - delete dataBlocks; - dataBlocks = NULL; - CBC_CommonDecoderResult* cdr = CBC_QRDecodedBitStreamParser::Decode( - &resultBytes, version, ecLevel, byteModeDecode, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - return cdr; -} -void CBC_QRCoderDecoder::CorrectErrors(CFX_ByteArray* codewordBytes, - int32_t numDataCodewords, - int32_t& e) { - int32_t numCodewords = codewordBytes->GetSize(); - CFX_Int32Array codewordsInts; - codewordsInts.SetSize(numCodewords); - for (int32_t i = 0; i < numCodewords; i++) { - codewordsInts[i] = (int32_t)((*codewordBytes)[i] & 0xff); - } - int32_t numECCodewords = codewordBytes->GetSize() - numDataCodewords; - m_rsDecoder->Decode(&codewordsInts, numECCodewords, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - for (int32_t k = 0; k < numDataCodewords; k++) { - (*codewordBytes)[k] = (uint8_t)codewordsInts[k]; - } -} diff --git a/xfa/src/fxbarcode/qrcode/BC_QRCoderDecoder.h b/xfa/src/fxbarcode/qrcode/BC_QRCoderDecoder.h deleted file mode 100644 index e2e53a796c..0000000000 --- a/xfa/src/fxbarcode/qrcode/BC_QRCoderDecoder.h +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_QRCODE_BC_QRCODERDECODER_H_ -#define XFA_SRC_FXBARCODE_QRCODE_BC_QRCODERDECODER_H_ - -#include "core/include/fxcrt/fx_basic.h" - -class CBC_CommonBitMatrix; -class CBC_ReedSolomonDecoder; -class CBC_CommonDecoderResult; - -class CBC_QRCoderDecoder { - private: - CBC_ReedSolomonDecoder* m_rsDecoder; - - public: - CBC_QRCoderDecoder(); - virtual ~CBC_QRCoderDecoder(); - - CBC_CommonDecoderResult* Decode(FX_BOOL* image, - int32_t width, - int32_t height, - int32_t& e); - CBC_CommonDecoderResult* Decode(CBC_CommonBitMatrix* bits, - int32_t byteModeDecode, - int32_t& e); - void CorrectErrors(CFX_ByteArray* codewordBytes, - int32_t numDataCodewords, - int32_t& e); - virtual void Init(); -}; - -#endif // XFA_SRC_FXBARCODE_QRCODE_BC_QRCODERDECODER_H_ diff --git a/xfa/src/fxbarcode/qrcode/BC_QRCoderECB.cpp b/xfa/src/fxbarcode/qrcode/BC_QRCoderECB.cpp deleted file mode 100644 index 4dc394daae..0000000000 --- a/xfa/src/fxbarcode/qrcode/BC_QRCoderECB.cpp +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2007 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/qrcode/BC_QRCoderECB.h" - -CBC_QRCoderECB::CBC_QRCoderECB(int32_t count, int32_t dataCodeWords) { - m_dataCodeWords = dataCodeWords; - m_count = count; -} -CBC_QRCoderECB::~CBC_QRCoderECB() {} -int32_t CBC_QRCoderECB::GetCount() { - return m_count; -} -int32_t CBC_QRCoderECB::GetDataCodeWords() { - return m_dataCodeWords; -} diff --git a/xfa/src/fxbarcode/qrcode/BC_QRCoderECB.h b/xfa/src/fxbarcode/qrcode/BC_QRCoderECB.h deleted file mode 100644 index c269e38093..0000000000 --- a/xfa/src/fxbarcode/qrcode/BC_QRCoderECB.h +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_QRCODE_BC_QRCODERECB_H_ -#define XFA_SRC_FXBARCODE_QRCODE_BC_QRCODERECB_H_ - -#include - -class CBC_QRCoderECB { - private: - int32_t m_count; - int32_t m_dataCodeWords; - - public: - CBC_QRCoderECB(int32_t count, int32_t dataCodeWords); - virtual ~CBC_QRCoderECB(); - int32_t GetCount(); - int32_t GetDataCodeWords(); -}; - -#endif // XFA_SRC_FXBARCODE_QRCODE_BC_QRCODERECB_H_ diff --git a/xfa/src/fxbarcode/qrcode/BC_QRCoderECBlocks.cpp b/xfa/src/fxbarcode/qrcode/BC_QRCoderECBlocks.cpp deleted file mode 100644 index c418651483..0000000000 --- a/xfa/src/fxbarcode/qrcode/BC_QRCoderECBlocks.cpp +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2007 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/qrcode/BC_QRCoderECB.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRCoderECBlocks.h" - -CBC_QRCoderECBlocks::CBC_QRCoderECBlocks(int32_t ecCodeWordsPerBlock, - CBC_QRCoderECB* ecBlocks) { - m_ecCodeWordsPerBlock = ecCodeWordsPerBlock; - m_ecBlocks.Add(ecBlocks); -} -CBC_QRCoderECBlocks::CBC_QRCoderECBlocks(int32_t ecCodeWordsPerBlock, - CBC_QRCoderECB* ecBlocks1, - CBC_QRCoderECB* ecBlocks2) { - m_ecCodeWordsPerBlock = ecCodeWordsPerBlock; - m_ecBlocks.Add(ecBlocks1); - m_ecBlocks.Add(ecBlocks2); -} -CBC_QRCoderECBlocks::~CBC_QRCoderECBlocks() { - for (int32_t i = 0; i < m_ecBlocks.GetSize(); i++) { - delete ((CBC_QRCoderECB*)(m_ecBlocks[i])); - } - m_ecBlocks.RemoveAll(); -} -int32_t CBC_QRCoderECBlocks::GetECCodeWordsPerBlock() { - return m_ecCodeWordsPerBlock; -} -int32_t CBC_QRCoderECBlocks::GetNumBlocks() { - int32_t total = 0; - for (int32_t i = 0; i < m_ecBlocks.GetSize(); i++) { - total += ((CBC_QRCoderECB*)(m_ecBlocks[i]))->GetCount(); - } - return total; -} -int32_t CBC_QRCoderECBlocks::GetTotalECCodeWords() { - return m_ecCodeWordsPerBlock * GetNumBlocks(); -} -CFX_PtrArray* CBC_QRCoderECBlocks::GetECBlocks() { - return &m_ecBlocks; -} diff --git a/xfa/src/fxbarcode/qrcode/BC_QRCoderECBlocks.h b/xfa/src/fxbarcode/qrcode/BC_QRCoderECBlocks.h deleted file mode 100644 index 7d25eee42b..0000000000 --- a/xfa/src/fxbarcode/qrcode/BC_QRCoderECBlocks.h +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_QRCODE_BC_QRCODERECBLOCKS_H_ -#define XFA_SRC_FXBARCODE_QRCODE_BC_QRCODERECBLOCKS_H_ - -#include "core/include/fxcrt/fx_basic.h" - -class CBC_QRCoderECB; - -class CBC_QRCoderECBlocks { - private: - int32_t m_ecCodeWordsPerBlock; - CFX_PtrArray m_ecBlocks; - - public: - CBC_QRCoderECBlocks(int32_t ecCodeWordsPerBlock, CBC_QRCoderECB* ecBlocks); - CBC_QRCoderECBlocks(int32_t ecCodeWordsPerBlock, - CBC_QRCoderECB* ecBlocks1, - CBC_QRCoderECB* ecBlocks2); - virtual ~CBC_QRCoderECBlocks(); - int32_t GetECCodeWordsPerBlock(); - int32_t GetNumBlocks(); - int32_t GetTotalECCodeWords(); - CFX_PtrArray* GetECBlocks(); -}; - -#endif // XFA_SRC_FXBARCODE_QRCODE_BC_QRCODERECBLOCKS_H_ diff --git a/xfa/src/fxbarcode/qrcode/BC_QRCoderEncoder.cpp b/xfa/src/fxbarcode/qrcode/BC_QRCoderEncoder.cpp deleted file mode 100644 index eb31ddc301..0000000000 --- a/xfa/src/fxbarcode/qrcode/BC_QRCoderEncoder.cpp +++ /dev/null @@ -1,961 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2008 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/qrcode/BC_QRCoderEncoder.h" - -#include -#include - -#include "xfa/src/fxbarcode/BC_UtilCodingConvert.h" -#include "xfa/src/fxbarcode/common/BC_CommonByteArray.h" -#include "xfa/src/fxbarcode/common/BC_CommonByteMatrix.h" -#include "xfa/src/fxbarcode/common/reedsolomon/BC_ReedSolomon.h" -#include "xfa/src/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRCoder.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRCoderBitVector.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRCoderBlockPair.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRCoderECBlocks.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRCoderMaskUtil.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRCoderMatrixUtil.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRCoderMode.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRCoderVersion.h" - -const int32_t CBC_QRCoderEncoder::m_alphaNumbericTable[] = { - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 36, -1, -1, -1, 37, 38, -1, -1, -1, -1, 39, 40, -1, 41, 42, 43, - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 44, -1, -1, -1, -1, -1, - -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, - 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, -1, -1, -1, -1, -1}; - -CBC_QRCoderEncoder::CBC_QRCoderEncoder() {} -CBC_QRCoderEncoder::~CBC_QRCoderEncoder() {} -class Make_Pair { - public: - CBC_QRCoderMode* m_mode; - CFX_ByteString m_string; - - private: - Make_Pair(const Make_Pair& mode_string) {} - Make_Pair& operator=(Make_Pair& mode_string) { - if (this == &mode_string) { - return *this; - } - m_mode = mode_string.m_mode; - m_string = mode_string.m_string; - return *this; - } - - public: - Make_Pair(CBC_QRCoderMode* mode, const CFX_ByteString& str) - : m_mode(mode), m_string(str) {} - ~Make_Pair() {} -}; -void CBC_QRCoderEncoder::Encode(const CFX_ByteString& content, - CBC_QRCoderErrorCorrectionLevel* ecLevel, - CBC_QRCoder* qrCode, - int32_t& e, - int32_t versionSpecify) { - if (versionSpecify == 0) { - EncodeWithAutoVersion(content, ecLevel, qrCode, e); - BC_EXCEPTION_CHECK_ReturnVoid(e) - } else if (versionSpecify > 0 && versionSpecify <= 40) { - EncodeWithSpecifyVersion(content, ecLevel, qrCode, versionSpecify, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - } else { - e = BCExceptionVersionMust1_40; - BC_EXCEPTION_CHECK_ReturnVoid(e); - } -} -void CBC_QRCoderEncoder::AppendECI(CBC_QRCoderBitVector* bits) {} -void CBC_QRCoderEncoder::AppendDataModeLenghInfo( - CFX_PtrArray& splitResult, - CBC_QRCoderBitVector& headerAndDataBits, - CBC_QRCoderMode* tempMode, - CBC_QRCoder* qrCode, - CFX_ByteString& encoding, - int32_t& e) { - for (int32_t i = 0; i < splitResult.GetSize(); i++) { - tempMode = ((Make_Pair*)splitResult[i])->m_mode; - if (tempMode == CBC_QRCoderMode::sGBK) { - AppendModeInfo(tempMode, &headerAndDataBits, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - AppendLengthInfo(((Make_Pair*)splitResult[i])->m_string.GetLength(), - qrCode->GetVersion(), tempMode, &headerAndDataBits, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - AppendBytes(((Make_Pair*)splitResult[i])->m_string, tempMode, - &headerAndDataBits, encoding, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - } else if (tempMode == CBC_QRCoderMode::sBYTE) { - CFX_ByteArray bytes; - CBC_UtilCodingConvert::LocaleToUtf8( - ((Make_Pair*)splitResult[i])->m_string, bytes); - AppendModeInfo(tempMode, &headerAndDataBits, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - AppendLengthInfo(bytes.GetSize(), qrCode->GetVersion(), tempMode, - &headerAndDataBits, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - Append8BitBytes(bytes, &headerAndDataBits, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - } else if (tempMode == CBC_QRCoderMode::sALPHANUMERIC) { - AppendModeInfo(tempMode, &headerAndDataBits, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - AppendLengthInfo(((Make_Pair*)splitResult[i])->m_string.GetLength(), - qrCode->GetVersion(), tempMode, &headerAndDataBits, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - AppendBytes(((Make_Pair*)splitResult[i])->m_string, tempMode, - &headerAndDataBits, encoding, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - } else if (tempMode == CBC_QRCoderMode::sNUMERIC) { - AppendModeInfo(tempMode, &headerAndDataBits, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - AppendLengthInfo(((Make_Pair*)splitResult[i])->m_string.GetLength(), - qrCode->GetVersion(), tempMode, &headerAndDataBits, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - AppendBytes(((Make_Pair*)splitResult[i])->m_string, tempMode, - &headerAndDataBits, encoding, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - } else { - e = BCExceptionUnknown; - BC_EXCEPTION_CHECK_ReturnVoid(e); - } - } -} -void CBC_QRCoderEncoder::SplitString(const CFX_ByteString& content, - CFX_PtrArray& result) { - int32_t index = 0, flag = 0; - while ( - (((uint8_t)content[index] >= 0xA1 && (uint8_t)content[index] <= 0xAA) || - ((uint8_t)content[index] >= 0xB0 && (uint8_t)content[index] <= 0xFA)) && - (index < content.GetLength())) { - index += 2; - } - if (index != flag) { - result.Add( - new Make_Pair(CBC_QRCoderMode::sGBK, content.Mid(flag, index - flag))); - } - flag = index; - if (index >= content.GetLength()) { - return; - } - while ( - GetAlphaNumericCode((uint8_t)content[index]) == -1 && - !(((uint8_t)content[index] >= 0xA1 && (uint8_t)content[index] <= 0xAA) || - ((uint8_t)content[index] >= 0xB0 && (uint8_t)content[index] <= 0xFA)) && - (index < content.GetLength())) { -#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ - if (IsDBCSLeadByte((uint8_t)content[index])) -#else - if ((uint8_t)content[index] > 127) -#endif - { - index += 2; - } else { - index++; - } - } - if (index != flag) { - result.Add( - new Make_Pair(CBC_QRCoderMode::sBYTE, content.Mid(flag, index - flag))); - } - flag = index; - if (index >= content.GetLength()) { - return; - } - while (FXSYS_Isdigit((uint8_t)content[index]) && - (index < content.GetLength())) { - index++; - } - if (index != flag) { - result.Add(new Make_Pair(CBC_QRCoderMode::sNUMERIC, - content.Mid(flag, index - flag))); - } - flag = index; - if (index >= content.GetLength()) { - return; - } - while (GetAlphaNumericCode((uint8_t)content[index]) != -1 && - (index < content.GetLength())) { - index++; - } - if (index != flag) { - result.Add(new Make_Pair(CBC_QRCoderMode::sALPHANUMERIC, - content.Mid(flag, index - flag))); - } - flag = index; - if (index >= content.GetLength()) { - return; - } - SplitString(content.Mid(index, content.GetLength() - index), result); -} -int32_t CBC_QRCoderEncoder::GetSpanByVersion(CBC_QRCoderMode* modeFirst, - CBC_QRCoderMode* modeSecond, - int32_t versionNum, - int32_t& e) { - if (versionNum == 0) { - return 0; - } - if ((modeFirst == CBC_QRCoderMode::sALPHANUMERIC) && - (modeSecond == CBC_QRCoderMode::sBYTE)) { - if (versionNum >= 1 && versionNum <= 9) { - return 11; - } else if (versionNum >= 10 && versionNum <= 26) { - return 15; - } else if (versionNum >= 27 && versionNum <= 40) { - return 16; - } else { - e = BCExceptionNoSuchVersion; - BC_EXCEPTION_CHECK_ReturnValue(e, 0); - } - } else if ((modeSecond == CBC_QRCoderMode::sALPHANUMERIC) && - (modeFirst == CBC_QRCoderMode::sNUMERIC)) { - if (versionNum >= 1 && versionNum <= 9) { - return 13; - } else if (versionNum >= 10 && versionNum <= 26) { - return 15; - } else if (versionNum >= 27 && versionNum <= 40) { - return 17; - } else { - e = BCExceptionNoSuchVersion; - BC_EXCEPTION_CHECK_ReturnValue(e, 0); - } - } else if ((modeSecond == CBC_QRCoderMode::sBYTE) && - (modeFirst == CBC_QRCoderMode::sNUMERIC)) { - if (versionNum >= 1 && versionNum <= 9) { - return 6; - } else if (versionNum >= 10 && versionNum <= 26) { - return 8; - } else if (versionNum >= 27 && versionNum <= 40) { - return 9; - } else { - e = BCExceptionNoSuchVersion; - BC_EXCEPTION_CHECK_ReturnValue(e, 0); - } - } - return -1; -} -void CBC_QRCoderEncoder::MergeString(CFX_PtrArray& result, - int32_t versionNum, - int32_t& e) { - Make_Pair* first = NULL; - Make_Pair* second = NULL; - size_t mergeNum = 0; - int32_t i; - for (i = 0; ((i < result.GetSize()) && (i + 1 < result.GetSize())); i++) { - first = (Make_Pair*)result[i]; - second = (Make_Pair*)result[i + 1]; - if (first->m_mode == CBC_QRCoderMode::sALPHANUMERIC) { - int32_t tmp = GetSpanByVersion(CBC_QRCoderMode::sALPHANUMERIC, - CBC_QRCoderMode::sBYTE, versionNum, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - if ((second->m_mode == CBC_QRCoderMode::sBYTE) && - (first->m_string.GetLength() < tmp)) { - CFX_ByteString str = first->m_string + second->m_string; - second->m_string = str; - delete first; - result.RemoveAt(i); - i--; - mergeNum++; - } - } else if (first->m_mode == CBC_QRCoderMode::sBYTE) { - if (second->m_mode == CBC_QRCoderMode::sBYTE) { - first->m_string += second->m_string; - delete second; - result.RemoveAt(i + 1); - i--; - mergeNum++; - } - } else if (first->m_mode == CBC_QRCoderMode::sNUMERIC) { - int32_t tmp = GetSpanByVersion(CBC_QRCoderMode::sNUMERIC, - CBC_QRCoderMode::sBYTE, versionNum, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - if ((second->m_mode == CBC_QRCoderMode::sBYTE) && - (first->m_string.GetLength() < tmp)) { - CFX_ByteString str = first->m_string + second->m_string; - second->m_string = str; - delete first; - result.RemoveAt(i); - i--; - mergeNum++; - } - tmp = GetSpanByVersion(CBC_QRCoderMode::sNUMERIC, - CBC_QRCoderMode::sALPHANUMERIC, versionNum, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - if ((second->m_mode == CBC_QRCoderMode::sALPHANUMERIC) && - (first->m_string.GetLength() < tmp)) { - CFX_ByteString str = first->m_string + second->m_string; - second->m_string = str; - delete first; - result.RemoveAt(i); - i--; - mergeNum++; - } - } - } - if (mergeNum == 0) { - return; - } - MergeString(result, versionNum, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); -} -void CBC_QRCoderEncoder::InitQRCode(int32_t numInputBytes, - int32_t versionNumber, - CBC_QRCoderErrorCorrectionLevel* ecLevel, - CBC_QRCoderMode* mode, - CBC_QRCoder* qrCode, - int32_t& e) { - qrCode->SetECLevel(ecLevel); - qrCode->SetMode(mode); - CBC_QRCoderVersion* version = - CBC_QRCoderVersion::GetVersionForNumber(versionNumber, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - int32_t numBytes = version->GetTotalCodeWords(); - CBC_QRCoderECBlocks* ecBlocks = version->GetECBlocksForLevel(ecLevel); - int32_t numEcBytes = ecBlocks->GetTotalECCodeWords(); - int32_t numRSBlocks = ecBlocks->GetNumBlocks(); - int32_t numDataBytes = numBytes - numEcBytes; - if (numDataBytes >= numInputBytes + 3) { - qrCode->SetVersion(versionNumber); - qrCode->SetNumTotalBytes(numBytes); - qrCode->SetNumDataBytes(numDataBytes); - qrCode->SetNumRSBlocks(numRSBlocks); - qrCode->SetNumECBytes(numEcBytes); - qrCode->SetMatrixWidth(version->GetDimensionForVersion()); - return; - } - e = BCExceptionCannotFindBlockInfo; - BC_EXCEPTION_CHECK_ReturnVoid(e); -} -void CBC_QRCoderEncoder::EncodeWithSpecifyVersion( - const CFX_ByteString& content, - CBC_QRCoderErrorCorrectionLevel* ecLevel, - CBC_QRCoder* qrCode, - int32_t versionSpecify, - int32_t& e) { - CFX_ByteString encoding = "utf8"; - CBC_QRCoderMode* mode = CBC_QRCoderMode::sBYTE; - CFX_PtrArray splitResult; - CBC_QRCoderBitVector dataBits; - dataBits.Init(); - SplitString(content, splitResult); - MergeString(splitResult, versionSpecify, e); - BC_EXCEPTION_CHECK_ReturnVoid(e) CBC_QRCoderMode* tempMode = NULL; - for (int32_t i = 0; i < splitResult.GetSize(); i++) { - AppendBytes(((Make_Pair*)splitResult[i])->m_string, - ((Make_Pair*)splitResult[i])->m_mode, &dataBits, encoding, e); - if (e != BCExceptionNO) { - for (int32_t y = 0; y < splitResult.GetSize(); y++) { - delete (Make_Pair*)splitResult[y]; - } - splitResult.RemoveAll(); - return; - } - } - int32_t numInputBytes = dataBits.sizeInBytes(); - CBC_QRCoderBitVector headerAndDataBits; - headerAndDataBits.Init(); - InitQRCode(numInputBytes, versionSpecify, ecLevel, mode, qrCode, e); - if (e != BCExceptionNO) { - for (int32_t k = 0; k < splitResult.GetSize(); k++) { - delete (Make_Pair*)splitResult[k]; - } - splitResult.RemoveAll(); - return; - } - AppendDataModeLenghInfo(splitResult, headerAndDataBits, tempMode, qrCode, - encoding, e); - if (e != BCExceptionNO) { - for (int32_t k = 0; k < splitResult.GetSize(); k++) { - delete (Make_Pair*)splitResult[k]; - } - splitResult.RemoveAll(); - return; - } - numInputBytes = headerAndDataBits.sizeInBytes(); - TerminateBits(qrCode->GetNumDataBytes(), &headerAndDataBits, e); - if (e != BCExceptionNO) { - for (int32_t k = 0; k < splitResult.GetSize(); k++) { - delete (Make_Pair*)splitResult[k]; - } - splitResult.RemoveAll(); - return; - } - for (int32_t j = 0; j < splitResult.GetSize(); j++) { - delete (Make_Pair*)splitResult[j]; - } - splitResult.RemoveAll(); - CBC_QRCoderBitVector finalBits; - finalBits.Init(); - InterleaveWithECBytes(&headerAndDataBits, qrCode->GetNumTotalBytes(), - qrCode->GetNumDataBytes(), qrCode->GetNumRSBlocks(), - &finalBits, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - std::unique_ptr matrix(new CBC_CommonByteMatrix( - qrCode->GetMatrixWidth(), qrCode->GetMatrixWidth())); - matrix->Init(); - int32_t maskPattern = ChooseMaskPattern( - &finalBits, qrCode->GetECLevel(), qrCode->GetVersion(), matrix.get(), e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - qrCode->SetMaskPattern(maskPattern); - CBC_QRCoderMatrixUtil::BuildMatrix(&finalBits, qrCode->GetECLevel(), - qrCode->GetVersion(), - qrCode->GetMaskPattern(), matrix.get(), e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - qrCode->SetMatrix(matrix.release()); - if (!qrCode->IsValid()) { - e = BCExceptionInvalidQRCode; - BC_EXCEPTION_CHECK_ReturnVoid(e); - } -} -void CBC_QRCoderEncoder::EncodeWithAutoVersion( - const CFX_ByteString& content, - CBC_QRCoderErrorCorrectionLevel* ecLevel, - CBC_QRCoder* qrCode, - int32_t& e) { - CFX_ByteString encoding = "utf8"; - CBC_QRCoderMode* mode = CBC_QRCoderMode::sBYTE; - CFX_PtrArray splitResult; - CBC_QRCoderBitVector dataBits; - dataBits.Init(); - SplitString(content, splitResult); - MergeString(splitResult, 8, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - CBC_QRCoderMode* tempMode = NULL; - for (int32_t i = 0; i < splitResult.GetSize(); i++) { - AppendBytes(((Make_Pair*)splitResult[i])->m_string, - ((Make_Pair*)splitResult[i])->m_mode, &dataBits, encoding, e); - if (e != BCExceptionNO) { - for (int32_t l = 0; l < splitResult.GetSize(); l++) { - delete (Make_Pair*)splitResult[l]; - } - splitResult.RemoveAll(); - return; - } - } - int32_t numInputBytes = dataBits.sizeInBytes(); - InitQRCode(numInputBytes, ecLevel, mode, qrCode, e); - BC_EXCEPTION_CHECK_ReturnVoid(e) CBC_QRCoderBitVector headerAndDataBits; - headerAndDataBits.Init(); - tempMode = NULL; - int32_t versionNum = qrCode->GetVersion(); -sign: - AppendDataModeLenghInfo(splitResult, headerAndDataBits, tempMode, qrCode, - encoding, e); - if (e != BCExceptionNO) { - goto catchException; - } - numInputBytes = headerAndDataBits.sizeInBytes(); - TerminateBits(qrCode->GetNumDataBytes(), &headerAndDataBits, e); - if (e != BCExceptionNO) { - goto catchException; - } -catchException: - if (e != BCExceptionNO) { - int32_t e1 = BCExceptionNO; - InitQRCode(numInputBytes, ecLevel, mode, qrCode, e1); - if (e1 != BCExceptionNO) { - e = e1; - return; - } - versionNum++; - if (versionNum <= 40) { - headerAndDataBits.Clear(); - e = BCExceptionNO; - goto sign; - } else { - for (int32_t j = 0; j < splitResult.GetSize(); j++) { - delete (Make_Pair*)splitResult[j]; - } - splitResult.RemoveAll(); - return; - } - } - for (int32_t k = 0; k < splitResult.GetSize(); k++) { - delete (Make_Pair*)splitResult[k]; - } - splitResult.RemoveAll(); - CBC_QRCoderBitVector finalBits; - finalBits.Init(); - InterleaveWithECBytes(&headerAndDataBits, qrCode->GetNumTotalBytes(), - qrCode->GetNumDataBytes(), qrCode->GetNumRSBlocks(), - &finalBits, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - std::unique_ptr matrix(new CBC_CommonByteMatrix( - qrCode->GetMatrixWidth(), qrCode->GetMatrixWidth())); - matrix->Init(); - int32_t maskPattern = ChooseMaskPattern( - &finalBits, qrCode->GetECLevel(), qrCode->GetVersion(), matrix.get(), e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - qrCode->SetMaskPattern(maskPattern); - CBC_QRCoderMatrixUtil::BuildMatrix(&finalBits, qrCode->GetECLevel(), - qrCode->GetVersion(), - qrCode->GetMaskPattern(), matrix.get(), e); - BC_EXCEPTION_CHECK_ReturnVoid(e) qrCode->SetMatrix(matrix.release()); - if (!qrCode->IsValid()) { - e = BCExceptionInvalidQRCode; - BC_EXCEPTION_CHECK_ReturnVoid(e); - } -} -void CBC_QRCoderEncoder::Encode(const CFX_WideString& content, - CBC_QRCoderErrorCorrectionLevel* ecLevel, - CBC_QRCoder* qrCode, - int32_t& e) { - CFX_ByteString encoding = "utf8"; - CFX_ByteString utf8Data; - CBC_UtilCodingConvert::UnicodeToUTF8(content, utf8Data); - CBC_QRCoderMode* mode = ChooseMode(utf8Data, encoding); - CBC_QRCoderBitVector dataBits; - dataBits.Init(); - AppendBytes(utf8Data, mode, &dataBits, encoding, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - int32_t numInputBytes = dataBits.sizeInBytes(); - InitQRCode(numInputBytes, ecLevel, mode, qrCode, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - CBC_QRCoderBitVector headerAndDataBits; - headerAndDataBits.Init(); - AppendModeInfo(mode, &headerAndDataBits, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - int32_t numLetters = mode == CBC_QRCoderMode::sBYTE ? dataBits.sizeInBytes() - : content.GetLength(); - AppendLengthInfo(numLetters, qrCode->GetVersion(), mode, &headerAndDataBits, - e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - headerAndDataBits.AppendBitVector(&dataBits, e); - BC_EXCEPTION_CHECK_ReturnVoid(e) - TerminateBits(qrCode->GetNumDataBytes(), &headerAndDataBits, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - CBC_QRCoderBitVector finalBits; - finalBits.Init(); - InterleaveWithECBytes(&headerAndDataBits, qrCode->GetNumTotalBytes(), - qrCode->GetNumDataBytes(), qrCode->GetNumRSBlocks(), - &finalBits, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - std::unique_ptr matrix(new CBC_CommonByteMatrix( - qrCode->GetMatrixWidth(), qrCode->GetMatrixWidth())); - matrix->Init(); - int32_t maskPattern = ChooseMaskPattern( - &finalBits, qrCode->GetECLevel(), qrCode->GetVersion(), matrix.get(), e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - qrCode->SetMaskPattern(maskPattern); - CBC_QRCoderMatrixUtil::BuildMatrix(&finalBits, qrCode->GetECLevel(), - qrCode->GetVersion(), - qrCode->GetMaskPattern(), matrix.get(), e); - BC_EXCEPTION_CHECK_ReturnVoid(e) qrCode->SetMatrix(matrix.release()); - if (!qrCode->IsValid()) { - e = BCExceptionInvalidQRCode; - BC_EXCEPTION_CHECK_ReturnVoid(e); - } -} -void CBC_QRCoderEncoder::TerminateBits(int32_t numDataBytes, - CBC_QRCoderBitVector* bits, - int32_t& e) { - int32_t capacity = numDataBytes << 3; - if (bits->Size() > capacity) { - e = BCExceptionDataTooMany; - BC_EXCEPTION_CHECK_ReturnVoid(e); - } - for (int32_t i = 0; i < 4 && bits->Size() < capacity; ++i) { - bits->AppendBit(0, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - } - int32_t numBitsInLastByte = bits->Size() % 8; - if (numBitsInLastByte > 0) { - int32_t numPaddingBits = 8 - numBitsInLastByte; - for (int32_t j = 0; j < numPaddingBits; ++j) { - bits->AppendBit(0, e); - BC_EXCEPTION_CHECK_ReturnVoid(e) - } - } - if (bits->Size() % 8 != 0) { - e = BCExceptionDigitLengthMustBe8; - BC_EXCEPTION_CHECK_ReturnVoid(e); - } - int32_t numPaddingBytes = numDataBytes - bits->sizeInBytes(); - for (int32_t k = 0; k < numPaddingBytes; ++k) { - if (k % 2 == 0) { - bits->AppendBits(0xec, 8, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - } else { - bits->AppendBits(0x11, 8, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - } - } - if (bits->Size() != capacity) { - e = BCExceptionBitsNotEqualCacity; - BC_EXCEPTION_CHECK_ReturnVoid(e); - } -} -int32_t CBC_QRCoderEncoder::ChooseMaskPattern( - CBC_QRCoderBitVector* bits, - CBC_QRCoderErrorCorrectionLevel* ecLevel, - int32_t version, - CBC_CommonByteMatrix* matrix, - int32_t& e) { - int32_t minPenalty = 65535; - int32_t bestMaskPattern = -1; - for (int32_t maskPattern = 0; maskPattern < CBC_QRCoder::NUM_MASK_PATTERNS; - maskPattern++) { - CBC_QRCoderMatrixUtil::BuildMatrix(bits, ecLevel, version, maskPattern, - matrix, e); - BC_EXCEPTION_CHECK_ReturnValue(e, 0); - int32_t penalty = CalculateMaskPenalty(matrix); - if (penalty < minPenalty) { - minPenalty = penalty; - bestMaskPattern = maskPattern; - } - } - return bestMaskPattern; -} -int32_t CBC_QRCoderEncoder::CalculateMaskPenalty(CBC_CommonByteMatrix* matrix) { - int32_t penalty = 0; - penalty += CBC_QRCoderMaskUtil::ApplyMaskPenaltyRule1(matrix); - penalty += CBC_QRCoderMaskUtil::ApplyMaskPenaltyRule2(matrix); - penalty += CBC_QRCoderMaskUtil::ApplyMaskPenaltyRule3(matrix); - penalty += CBC_QRCoderMaskUtil::ApplyMaskPenaltyRule4(matrix); - return penalty; -} -CBC_QRCoderMode* CBC_QRCoderEncoder::ChooseMode(const CFX_ByteString& content, - CFX_ByteString encoding) { - if (encoding.Compare("SHIFT_JIS") == 0) { - return CBC_QRCoderMode::sKANJI; - } - FX_BOOL hasNumeric = FALSE; - FX_BOOL hasAlphaNumeric = FALSE; - for (int32_t i = 0; i < content.GetLength(); i++) { - if (isdigit((uint8_t)content[i])) { - hasNumeric = TRUE; - } else if (GetAlphaNumericCode((uint8_t)content[i]) != -1) { - hasAlphaNumeric = TRUE; - } else { - return CBC_QRCoderMode::sBYTE; - } - } - if (hasAlphaNumeric) { - return CBC_QRCoderMode::sALPHANUMERIC; - } else if (hasNumeric) { - return CBC_QRCoderMode::sNUMERIC; - } - return CBC_QRCoderMode::sBYTE; -} -int32_t CBC_QRCoderEncoder::GetAlphaNumericCode(int32_t code) { - if (code < 96 && code >= 0) { - return m_alphaNumbericTable[code]; - } - return -1; -} -void CBC_QRCoderEncoder::AppendBytes(const CFX_ByteString& content, - CBC_QRCoderMode* mode, - CBC_QRCoderBitVector* bits, - CFX_ByteString encoding, - int32_t& e) { - if (mode == CBC_QRCoderMode::sNUMERIC) { - AppendNumericBytes(content, bits, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - } else if (mode == CBC_QRCoderMode::sALPHANUMERIC) { - AppendAlphaNumericBytes(content, bits, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - } else if (mode == CBC_QRCoderMode::sBYTE) { - Append8BitBytes(content, bits, encoding, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - } else if (mode == CBC_QRCoderMode::sKANJI) { - AppendKanjiBytes(content, bits, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - } else if (mode == CBC_QRCoderMode::sGBK) { - AppendGBKBytes(content, bits, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - } else { - e = BCExceptionUnsupportedMode; - BC_EXCEPTION_CHECK_ReturnVoid(e); - } -} -void CBC_QRCoderEncoder::AppendNumericBytes(const CFX_ByteString& content, - CBC_QRCoderBitVector* bits, - int32_t& e) { - int32_t length = content.GetLength(); - int32_t i = 0; - while (i < length) { - int32_t num1 = content[i] - '0'; - if (i + 2 < length) { - int32_t num2 = content[i + 1] - '0'; - int32_t num3 = content[i + 2] - '0'; - bits->AppendBits(num1 * 100 + num2 * 10 + num3, 10, e); - BC_EXCEPTION_CHECK_ReturnVoid(e) i += 3; - } else if (i + 1 < length) { - int32_t num2 = content[i + 1] - '0'; - bits->AppendBits(num1 * 10 + num2, 7, e); - BC_EXCEPTION_CHECK_ReturnVoid(e) i += 2; - } else { - bits->AppendBits(num1, 4, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - i++; - } - } -} -void CBC_QRCoderEncoder::AppendAlphaNumericBytes(const CFX_ByteString& content, - CBC_QRCoderBitVector* bits, - int32_t& e) { - int32_t length = content.GetLength(); - int32_t i = 0; - while (i < length) { - int32_t code1 = GetAlphaNumericCode(content[i]); - if (code1 == -1) { - e = BCExceptionInvalidateCharacter; - BC_EXCEPTION_CHECK_ReturnVoid(e); - } - if (i + 1 < length) { - int32_t code2 = GetAlphaNumericCode(content[i + 1]); - if (code2 == -1) { - e = BCExceptionInvalidateCharacter; - BC_EXCEPTION_CHECK_ReturnVoid(e); - } - bits->AppendBits(code1 * 45 + code2, 11, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - i += 2; - } else { - bits->AppendBits(code1, 6, e); - BC_EXCEPTION_CHECK_ReturnVoid(e) i++; - } - } -} -void CBC_QRCoderEncoder::AppendGBKBytes(const CFX_ByteString& content, - CBC_QRCoderBitVector* bits, - int32_t& e) { - int32_t length = content.GetLength(); - FX_DWORD value = 0; - for (int32_t i = 0; i < length; i += 2) { - value = (FX_DWORD)((uint8_t)content[i] << 8 | (uint8_t)content[i + 1]); - if (value <= 0xAAFE && value >= 0xA1A1) { - value -= 0xA1A1; - } else if (value <= 0xFAFE && value >= 0xB0A1) { - value -= 0xA6A1; - } else { - e = BCExceptionInvalidateCharacter; - BC_EXCEPTION_CHECK_ReturnVoid(e); - } - value = (FX_DWORD)((value >> 8) * 0x60) + (FX_DWORD)(value & 0xff); - bits->AppendBits(value, 13, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - } -} -void CBC_QRCoderEncoder::Append8BitBytes(const CFX_ByteString& content, - CBC_QRCoderBitVector* bits, - CFX_ByteString encoding, - int32_t& e) { - for (int32_t i = 0; i < content.GetLength(); i++) { - bits->AppendBits(content[i], 8, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - } -} -void CBC_QRCoderEncoder::Append8BitBytes(CFX_ByteArray& bytes, - CBC_QRCoderBitVector* bits, - int32_t& e) { - for (int32_t i = 0; i < bytes.GetSize(); i++) { - bits->AppendBits(bytes[i], 8, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - } -} -void CBC_QRCoderEncoder::AppendKanjiBytes(const CFX_ByteString& content, - CBC_QRCoderBitVector* bits, - int32_t& e) { - CFX_ByteArray bytes; - FX_DWORD value = 0; - for (int32_t i = 0; i < bytes.GetSize(); i += 2) { - value = (FX_DWORD)((uint8_t)(content[i] << 8) | (uint8_t)content[i + 1]); - if (value <= 0x9ffc && value >= 0x8140) { - value -= 0x8140; - } else if (value <= 0xebbf && value >= 0xe040) { - value -= 0xc140; - } else { - e = BCExceptionInvalidateCharacter; - BC_EXCEPTION_CHECK_ReturnVoid(e); - } - value = (FX_DWORD)((value >> 8) * 0xc0) + (FX_DWORD)(value & 0xff); - bits->AppendBits(value, 13, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - } -} -void CBC_QRCoderEncoder::InitQRCode(int32_t numInputBytes, - CBC_QRCoderErrorCorrectionLevel* ecLevel, - CBC_QRCoderMode* mode, - CBC_QRCoder* qrCode, - int32_t& e) { - qrCode->SetECLevel(ecLevel); - qrCode->SetMode(mode); - for (int32_t versionNum = 1; versionNum <= 40; versionNum++) { - CBC_QRCoderVersion* version = - CBC_QRCoderVersion::GetVersionForNumber(versionNum, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - int32_t numBytes = version->GetTotalCodeWords(); - CBC_QRCoderECBlocks* ecBlocks = version->GetECBlocksForLevel(ecLevel); - int32_t numEcBytes = ecBlocks->GetTotalECCodeWords(); - int32_t numRSBlocks = ecBlocks->GetNumBlocks(); - int32_t numDataBytes = numBytes - numEcBytes; - if (numDataBytes >= numInputBytes + 3) { - qrCode->SetVersion(versionNum); - qrCode->SetNumTotalBytes(numBytes); - qrCode->SetNumDataBytes(numDataBytes); - qrCode->SetNumRSBlocks(numRSBlocks); - qrCode->SetNumECBytes(numEcBytes); - qrCode->SetMatrixWidth(version->GetDimensionForVersion()); - return; - } - } - e = BCExceptionCannotFindBlockInfo; - BC_EXCEPTION_CHECK_ReturnVoid(e); -} -void CBC_QRCoderEncoder::AppendModeInfo(CBC_QRCoderMode* mode, - CBC_QRCoderBitVector* bits, - int32_t& e) { - bits->AppendBits(mode->GetBits(), 4, e); - if (mode == CBC_QRCoderMode::sGBK) { - bits->AppendBits(1, 4, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - } -} -void CBC_QRCoderEncoder::AppendLengthInfo(int32_t numLetters, - int32_t version, - CBC_QRCoderMode* mode, - CBC_QRCoderBitVector* bits, - int32_t& e) { - CBC_QRCoderVersion* qcv = CBC_QRCoderVersion::GetVersionForNumber(version, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - int32_t numBits = mode->GetCharacterCountBits(qcv, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - if (numBits > ((1 << numBits) - 1)) { - return; - } - if (mode == CBC_QRCoderMode::sGBK) { - bits->AppendBits(numLetters / 2, numBits, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - } - bits->AppendBits(numLetters, numBits, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); -} -void CBC_QRCoderEncoder::InterleaveWithECBytes(CBC_QRCoderBitVector* bits, - int32_t numTotalBytes, - int32_t numDataBytes, - int32_t numRSBlocks, - CBC_QRCoderBitVector* result, - int32_t& e) { - if (bits->sizeInBytes() != numDataBytes) { - e = BCExceptionBitsBytesNotMatch; - BC_EXCEPTION_CHECK_ReturnVoid(e); - } - int32_t dataBytesOffset = 0; - int32_t maxNumDataBytes = 0; - int32_t maxNumEcBytes = 0; - CFX_PtrArray blocks; - int32_t i; - for (i = 0; i < numRSBlocks; i++) { - int32_t numDataBytesInBlock; - int32_t numEcBytesInBlosk; - GetNumDataBytesAndNumECBytesForBlockID(numTotalBytes, numDataBytes, - numRSBlocks, i, numDataBytesInBlock, - numEcBytesInBlosk); - CBC_CommonByteArray* dataBytes = new CBC_CommonByteArray; - dataBytes->Set(bits->GetArray(), dataBytesOffset, numDataBytesInBlock); - CBC_CommonByteArray* ecBytes = - GenerateECBytes(dataBytes, numEcBytesInBlosk, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - blocks.Add(new CBC_QRCoderBlockPair(dataBytes, ecBytes)); - maxNumDataBytes = std::max(maxNumDataBytes, dataBytes->Size()); - maxNumEcBytes = std::max(maxNumEcBytes, ecBytes->Size()); - dataBytesOffset += numDataBytesInBlock; - } - if (numDataBytes != dataBytesOffset) { - e = BCExceptionBytesNotMatchOffset; - BC_EXCEPTION_CHECK_ReturnVoid(e); - } - for (int32_t x = 0; x < maxNumDataBytes; x++) { - for (int32_t j = 0; j < blocks.GetSize(); j++) { - CBC_CommonByteArray* dataBytes = - ((CBC_QRCoderBlockPair*)blocks[j])->GetDataBytes(); - if (x < dataBytes->Size()) { - result->AppendBits(dataBytes->At(x), 8, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - } - } - } - for (int32_t y = 0; y < maxNumEcBytes; y++) { - for (int32_t l = 0; l < blocks.GetSize(); l++) { - CBC_CommonByteArray* ecBytes = - ((CBC_QRCoderBlockPair*)blocks[l])->GetErrorCorrectionBytes(); - if (y < ecBytes->Size()) { - result->AppendBits(ecBytes->At(y), 8, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - } - } - } - for (int32_t k = 0; k < blocks.GetSize(); k++) { - delete (CBC_QRCoderBlockPair*)blocks[k]; - } - if (numTotalBytes != result->sizeInBytes()) { - e = BCExceptionSizeInBytesDiffer; - BC_EXCEPTION_CHECK_ReturnVoid(e); - } -} -void CBC_QRCoderEncoder::GetNumDataBytesAndNumECBytesForBlockID( - int32_t numTotalBytes, - int32_t numDataBytes, - int32_t numRSBlocks, - int32_t blockID, - int32_t& numDataBytesInBlock, - int32_t& numECBytesInBlock) { - if (blockID >= numRSBlocks) { - return; - } - int32_t numRsBlocksInGroup2 = numTotalBytes % numRSBlocks; - int32_t numRsBlocksInGroup1 = numRSBlocks - numRsBlocksInGroup2; - int32_t numTotalBytesInGroup1 = numTotalBytes / numRSBlocks; - int32_t numTotalBytesInGroup2 = numTotalBytesInGroup1 + 1; - int32_t numDataBytesInGroup1 = numDataBytes / numRSBlocks; - int32_t numDataBytesInGroup2 = numDataBytesInGroup1 + 1; - int32_t numEcBytesInGroup1 = numTotalBytesInGroup1 - numDataBytesInGroup1; - int32_t numEcBytesInGroup2 = numTotalBytesInGroup2 - numDataBytesInGroup2; - if (blockID < numRsBlocksInGroup1) { - numDataBytesInBlock = numDataBytesInGroup1; - numECBytesInBlock = numEcBytesInGroup1; - } else { - numDataBytesInBlock = numDataBytesInGroup2; - numECBytesInBlock = numEcBytesInGroup2; - } -} -CBC_CommonByteArray* CBC_QRCoderEncoder::GenerateECBytes( - CBC_CommonByteArray* dataBytes, - int32_t numEcBytesInBlock, - int32_t& e) { - int32_t numDataBytes = dataBytes->Size(); - CFX_Int32Array toEncode; - toEncode.SetSize(numDataBytes + numEcBytesInBlock); - for (int32_t i = 0; i < numDataBytes; i++) { - toEncode[i] = (dataBytes->At(i)); - } - CBC_ReedSolomonEncoder encode(CBC_ReedSolomonGF256::QRCodeFild); - encode.Init(); - encode.Encode(&toEncode, numEcBytesInBlock, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - CBC_CommonByteArray* ecBytes = new CBC_CommonByteArray(numEcBytesInBlock); - for (int32_t j = 0; j < numEcBytesInBlock; j++) { - ecBytes->Set(j, toEncode[numDataBytes + j]); - } - return ecBytes; -} diff --git a/xfa/src/fxbarcode/qrcode/BC_QRCoderEncoder.h b/xfa/src/fxbarcode/qrcode/BC_QRCoderEncoder.h deleted file mode 100644 index f1b6504b2f..0000000000 --- a/xfa/src/fxbarcode/qrcode/BC_QRCoderEncoder.h +++ /dev/null @@ -1,133 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_QRCODE_BC_QRCODERENCODER_H_ -#define XFA_SRC_FXBARCODE_QRCODE_BC_QRCODERENCODER_H_ - -#include "core/include/fxcrt/fx_basic.h" -#include "core/include/fxcrt/fx_string.h" - -class CBC_QRCoder; -class CBC_QRCoderErrorCorrectionLevel; -class CBC_QRCoderMode; -class CBC_QRCoderBitVector; -class CBC_CommonByteArray; -class CBC_CommonByteMatrix; - -class CBC_QRCoderEncoder { - private: - static const int32_t m_alphaNumbericTable[96]; - - public: - CBC_QRCoderEncoder(); - virtual ~CBC_QRCoderEncoder(); - - static void Encode(const CFX_ByteString& content, - CBC_QRCoderErrorCorrectionLevel* ecLevel, - CBC_QRCoder* qrCode, - int32_t& e, - int32_t versionSpecify = 0); - static void Encode(const CFX_WideString& content, - CBC_QRCoderErrorCorrectionLevel* ecLevel, - CBC_QRCoder* qrCode, - int32_t& e); - static void EncodeWithSpecifyVersion(const CFX_ByteString& content, - CBC_QRCoderErrorCorrectionLevel* ecLevel, - CBC_QRCoder* qrCode, - int32_t versionSpecify, - int32_t& e); - static void EncodeWithAutoVersion(const CFX_ByteString& content, - CBC_QRCoderErrorCorrectionLevel* ecLevel, - CBC_QRCoder* qrCode, - int32_t& e); - static CBC_QRCoderMode* ChooseMode(const CFX_ByteString& content, - CFX_ByteString encoding); - static int32_t GetAlphaNumericCode(int32_t code); - static void AppendECI(CBC_QRCoderBitVector* bits); - static void AppendBytes(const CFX_ByteString& content, - CBC_QRCoderMode* mode, - CBC_QRCoderBitVector* bits, - CFX_ByteString encoding, - int32_t& e); - static void AppendNumericBytes(const CFX_ByteString& content, - CBC_QRCoderBitVector* bits, - int32_t& e); - static void AppendAlphaNumericBytes(const CFX_ByteString& content, - CBC_QRCoderBitVector* bits, - int32_t& e); - static void Append8BitBytes(const CFX_ByteString& content, - CBC_QRCoderBitVector* bits, - CFX_ByteString encoding, - int32_t& e); - static void Append8BitBytes(CFX_ByteArray& bytes, - CBC_QRCoderBitVector* bits, - int32_t& e); - static void AppendKanjiBytes(const CFX_ByteString& content, - CBC_QRCoderBitVector* bits, - int32_t& e); - static void AppendGBKBytes(const CFX_ByteString& content, - CBC_QRCoderBitVector* bits, - int32_t& e); - static void InitQRCode(int32_t numInputBytes, - int32_t versionNumber, - CBC_QRCoderErrorCorrectionLevel* ecLevel, - CBC_QRCoderMode* mode, - CBC_QRCoder* qrCode, - int32_t& e); - static void InitQRCode(int32_t numInputBytes, - CBC_QRCoderErrorCorrectionLevel* ecLevel, - CBC_QRCoderMode* mode, - CBC_QRCoder* qrCode, - int32_t& e); - static void AppendModeInfo(CBC_QRCoderMode* mode, - CBC_QRCoderBitVector* bits, - int32_t& e); - static void AppendLengthInfo(int32_t numLetters, - int32_t version, - CBC_QRCoderMode* mode, - CBC_QRCoderBitVector* bits, - int32_t& e); - - static void InterleaveWithECBytes(CBC_QRCoderBitVector* bits, - int32_t numTotalBytes, - int32_t numDataBytes, - int32_t numRSBlocks, - CBC_QRCoderBitVector* result, - int32_t& e); - static void GetNumDataBytesAndNumECBytesForBlockID( - int32_t numTotalBytes, - int32_t numDataBytes, - int32_t numRSBlocks, - int32_t blockID, - int32_t& numDataBytesInBlock, - int32_t& numECBytesInBlocks); - static CBC_CommonByteArray* GenerateECBytes(CBC_CommonByteArray* dataBytes, - int32_t numEcBytesInBlock, - int32_t& e); - static int32_t ChooseMaskPattern(CBC_QRCoderBitVector* bits, - CBC_QRCoderErrorCorrectionLevel* ecLevel, - int32_t version, - CBC_CommonByteMatrix* matrix, - int32_t& e); - static int32_t CalculateMaskPenalty(CBC_CommonByteMatrix* matrix); - static void TerminateBits(int32_t numDataBytes, - CBC_QRCoderBitVector* bits, - int32_t& e); - static int32_t GetSpanByVersion(CBC_QRCoderMode* modeFirst, - CBC_QRCoderMode* modeSecond, - int32_t versionNum, - int32_t& e); - static void MergeString(CFX_PtrArray& result, int32_t versionNum, int32_t& e); - static void SplitString(const CFX_ByteString& content, CFX_PtrArray& result); - static void AppendDataModeLenghInfo(CFX_PtrArray& splitResult, - CBC_QRCoderBitVector& headerAndDataBits, - CBC_QRCoderMode* tempMode, - CBC_QRCoder* qrCode, - CFX_ByteString& encoding, - int32_t& e); -}; - -#endif // XFA_SRC_FXBARCODE_QRCODE_BC_QRCODERENCODER_H_ diff --git a/xfa/src/fxbarcode/qrcode/BC_QRCoderErrorCorrectionLevel.cpp b/xfa/src/fxbarcode/qrcode/BC_QRCoderErrorCorrectionLevel.cpp deleted file mode 100644 index ea239bdc0c..0000000000 --- a/xfa/src/fxbarcode/qrcode/BC_QRCoderErrorCorrectionLevel.cpp +++ /dev/null @@ -1,92 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2007 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/qrcode/BC_QRCoderErrorCorrectionLevel.h" - -CBC_QRCoderErrorCorrectionLevel* CBC_QRCoderErrorCorrectionLevel::L = NULL; -CBC_QRCoderErrorCorrectionLevel* CBC_QRCoderErrorCorrectionLevel::M = NULL; -CBC_QRCoderErrorCorrectionLevel* CBC_QRCoderErrorCorrectionLevel::Q = NULL; -CBC_QRCoderErrorCorrectionLevel* CBC_QRCoderErrorCorrectionLevel::H = NULL; - -CBC_QRCoderErrorCorrectionLevel::CBC_QRCoderErrorCorrectionLevel( - int32_t ordinal, - int32_t bits, - FX_CHAR* name) { - m_name += name; - m_ordinal = ordinal; - m_bits = bits; -} -CBC_QRCoderErrorCorrectionLevel::~CBC_QRCoderErrorCorrectionLevel() {} -void CBC_QRCoderErrorCorrectionLevel::Initialize() { - L = new CBC_QRCoderErrorCorrectionLevel(0, 0x01, (FX_CHAR*)"L"); - M = new CBC_QRCoderErrorCorrectionLevel(1, 0x00, (FX_CHAR*)"M"); - Q = new CBC_QRCoderErrorCorrectionLevel(2, 0x03, (FX_CHAR*)"Q"); - H = new CBC_QRCoderErrorCorrectionLevel(3, 0x02, (FX_CHAR*)"H"); -} -void CBC_QRCoderErrorCorrectionLevel::Finalize() { - delete L; - delete M; - delete Q; - delete H; -} -int32_t CBC_QRCoderErrorCorrectionLevel::Ordinal() { - return m_ordinal; -} -int32_t CBC_QRCoderErrorCorrectionLevel::GetBits() { - return m_bits; -} -CFX_ByteString CBC_QRCoderErrorCorrectionLevel::GetName() { - return m_name; -} -CBC_QRCoderErrorCorrectionLevel* CBC_QRCoderErrorCorrectionLevel::ForBits( - int32_t bits) { - switch (bits) { - case 0x00: - return M; - case 0x01: - return L; - case 0x02: - return H; - case 0x03: - return Q; - default: - return NULL; - } -} -void CBC_QRCoderErrorCorrectionLevel::Destroy() { - if (L) { - delete CBC_QRCoderErrorCorrectionLevel::L; - L = NULL; - } - if (M) { - delete CBC_QRCoderErrorCorrectionLevel::M; - M = NULL; - } - if (H) { - delete CBC_QRCoderErrorCorrectionLevel::H; - H = NULL; - } - if (Q) { - delete CBC_QRCoderErrorCorrectionLevel::Q; - Q = NULL; - } -} diff --git a/xfa/src/fxbarcode/qrcode/BC_QRCoderErrorCorrectionLevel.h b/xfa/src/fxbarcode/qrcode/BC_QRCoderErrorCorrectionLevel.h deleted file mode 100644 index 77142423bf..0000000000 --- a/xfa/src/fxbarcode/qrcode/BC_QRCoderErrorCorrectionLevel.h +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_QRCODE_BC_QRCODERERRORCORRECTIONLEVEL_H_ -#define XFA_SRC_FXBARCODE_QRCODE_BC_QRCODERERRORCORRECTIONLEVEL_H_ - -#include "core/include/fxcrt/fx_string.h" - -class CBC_QRCoderErrorCorrectionLevel { - private: - int32_t m_ordinal; - int32_t m_bits; - CFX_ByteString m_name; - CBC_QRCoderErrorCorrectionLevel(int32_t ordinal, int32_t bits, FX_CHAR* name); - CBC_QRCoderErrorCorrectionLevel(); - - public: - static CBC_QRCoderErrorCorrectionLevel* L; - static CBC_QRCoderErrorCorrectionLevel* M; - static CBC_QRCoderErrorCorrectionLevel* Q; - static CBC_QRCoderErrorCorrectionLevel* H; - virtual ~CBC_QRCoderErrorCorrectionLevel(); - static void Initialize(); - static void Finalize(); - int32_t Ordinal(); - int32_t GetBits(); - CFX_ByteString GetName(); - static void Destroy(); - static CBC_QRCoderErrorCorrectionLevel* ForBits(int32_t bits); -}; - -#endif // XFA_SRC_FXBARCODE_QRCODE_BC_QRCODERERRORCORRECTIONLEVEL_H_ diff --git a/xfa/src/fxbarcode/qrcode/BC_QRCoderFormatInformation.cpp b/xfa/src/fxbarcode/qrcode/BC_QRCoderFormatInformation.cpp deleted file mode 100644 index 97c6c2a091..0000000000 --- a/xfa/src/fxbarcode/qrcode/BC_QRCoderFormatInformation.cpp +++ /dev/null @@ -1,95 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2007 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/qrcode/BC_QRCoderErrorCorrectionLevel.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRCoderFormatInformation.h" -#include "xfa/src/fxbarcode/utils.h" - -const int32_t CBC_QRCoderFormatInformation::FORMAT_INFO_MASK_QR = 0X5412; -const int32_t CBC_QRCoderFormatInformation::FORMAT_INFO_DECODE_LOOKUP[32][2] = { - {0x5412, 0x00}, {0x5125, 0x01}, {0x5E7C, 0x02}, {0x5B4B, 0x03}, - {0x45F9, 0x04}, {0x40CE, 0x05}, {0x4F97, 0x06}, {0x4AA0, 0x07}, - {0x77C4, 0x08}, {0x72F3, 0x09}, {0x7DAA, 0x0A}, {0x789D, 0x0B}, - {0x662F, 0x0C}, {0x6318, 0x0D}, {0x6C41, 0x0E}, {0x6976, 0x0F}, - {0x1689, 0x10}, {0x13BE, 0x11}, {0x1CE7, 0x12}, {0x19D0, 0x13}, - {0x0762, 0x14}, {0x0255, 0x15}, {0x0D0C, 0x16}, {0x083B, 0x17}, - {0x355F, 0x18}, {0x3068, 0x19}, {0x3F31, 0x1A}, {0x3A06, 0x1B}, - {0x24B4, 0x1C}, {0x2183, 0x1D}, {0x2EDA, 0x1E}, {0x2BED, 0x1F}, -}; -const int32_t CBC_QRCoderFormatInformation::BITS_SET_IN_HALF_BYTE[] = { - 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4}; - -CBC_QRCoderFormatInformation::CBC_QRCoderFormatInformation(int32_t formatInfo) { - m_errorCorrectLevl = - CBC_QRCoderErrorCorrectionLevel::ForBits((formatInfo >> 3) & 0x03); - m_dataMask = (uint8_t)(formatInfo & 0x07); -} -CBC_QRCoderFormatInformation::~CBC_QRCoderFormatInformation() {} -int32_t CBC_QRCoderFormatInformation::NumBitsDiffering(int32_t a, int32_t b) { - a ^= b; - return BITS_SET_IN_HALF_BYTE[a & 0x0F] + - BITS_SET_IN_HALF_BYTE[(a >> 4) & 0x0F] + - BITS_SET_IN_HALF_BYTE[(a >> 8) & 0x0F] + - BITS_SET_IN_HALF_BYTE[(a >> 12) & 0x0F] + - BITS_SET_IN_HALF_BYTE[(a >> 16) & 0x0F] + - BITS_SET_IN_HALF_BYTE[(a >> 20) & 0x0F] + - BITS_SET_IN_HALF_BYTE[(a >> 24) & 0x0F] + - BITS_SET_IN_HALF_BYTE[(a >> 28) & 0x0F]; -} -uint8_t CBC_QRCoderFormatInformation::GetDataMask() { - return m_dataMask; -} -CBC_QRCoderErrorCorrectionLevel* -CBC_QRCoderFormatInformation::GetErrorCorrectionLevel() { - return m_errorCorrectLevl; -} -CBC_QRCoderFormatInformation* -CBC_QRCoderFormatInformation::DecodeFormatInformation( - int32_t maskedFormatInfo) { - CBC_QRCoderFormatInformation* formatInfo = - DoDecodeFormatInformation(maskedFormatInfo); - if (formatInfo) - return formatInfo; - return DoDecodeFormatInformation(maskedFormatInfo ^ FORMAT_INFO_MASK_QR); -} -CBC_QRCoderFormatInformation* -CBC_QRCoderFormatInformation::DoDecodeFormatInformation( - int32_t maskedFormatInfo) { - int32_t bestDifference = (int32_t)FXSYS_nan(); - int32_t bestFormatInfo = 0; - for (int32_t i = 0; i < 32; i++) { - int32_t const* decodeInfo = &FORMAT_INFO_DECODE_LOOKUP[i][0]; - int32_t targetInfo = decodeInfo[0]; - if (targetInfo == maskedFormatInfo) { - return new CBC_QRCoderFormatInformation(decodeInfo[1]); - } - int32_t bitsDifference = NumBitsDiffering(maskedFormatInfo, targetInfo); - if (bitsDifference < bestDifference) { - bestFormatInfo = decodeInfo[1]; - bestDifference = bitsDifference; - } - } - if (bestDifference <= 3) { - return new CBC_QRCoderFormatInformation(bestFormatInfo); - } - return NULL; -} diff --git a/xfa/src/fxbarcode/qrcode/BC_QRCoderFormatInformation.h b/xfa/src/fxbarcode/qrcode/BC_QRCoderFormatInformation.h deleted file mode 100644 index 61870d788d..0000000000 --- a/xfa/src/fxbarcode/qrcode/BC_QRCoderFormatInformation.h +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_QRCODE_BC_QRCODERFORMATINFORMATION_H_ -#define XFA_SRC_FXBARCODE_QRCODE_BC_QRCODERFORMATINFORMATION_H_ - -class CBC_QRCoderErrorCorrectionLevel; -class CBC_QRCoderFormatInformation { - private: - static const int32_t FORMAT_INFO_MASK_QR; - static const int32_t FORMAT_INFO_DECODE_LOOKUP[32][2]; - static const int32_t BITS_SET_IN_HALF_BYTE[16]; - CBC_QRCoderErrorCorrectionLevel* m_errorCorrectLevl; - uint8_t m_dataMask; - - public: - CBC_QRCoderFormatInformation(int32_t formatInfo); - virtual ~CBC_QRCoderFormatInformation(); - uint8_t GetDataMask(); - CBC_QRCoderErrorCorrectionLevel* GetErrorCorrectionLevel(); - - static int32_t NumBitsDiffering(int32_t a, int32_t b); - static CBC_QRCoderFormatInformation* DecodeFormatInformation( - int32_t maskedFormatInfo); - static CBC_QRCoderFormatInformation* DoDecodeFormatInformation( - int32_t maskedFormatInfo); -}; - -#endif // XFA_SRC_FXBARCODE_QRCODE_BC_QRCODERFORMATINFORMATION_H_ diff --git a/xfa/src/fxbarcode/qrcode/BC_QRCoderMaskUtil.cpp b/xfa/src/fxbarcode/qrcode/BC_QRCoderMaskUtil.cpp deleted file mode 100644 index 840d542fc3..0000000000 --- a/xfa/src/fxbarcode/qrcode/BC_QRCoderMaskUtil.cpp +++ /dev/null @@ -1,198 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2008 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/common/BC_CommonByteMatrix.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRCoder.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRCoderErrorCorrectionLevel.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRCoderMaskUtil.h" -#include "xfa/src/fxbarcode/utils.h" - -CBC_QRCoderMaskUtil::CBC_QRCoderMaskUtil() {} -CBC_QRCoderMaskUtil::~CBC_QRCoderMaskUtil() {} -int32_t CBC_QRCoderMaskUtil::ApplyMaskPenaltyRule1( - CBC_CommonByteMatrix* matrix) { - return ApplyMaskPenaltyRule1Internal(matrix, TRUE) + - ApplyMaskPenaltyRule1Internal(matrix, FALSE); -} - -int32_t CBC_QRCoderMaskUtil::ApplyMaskPenaltyRule2( - CBC_CommonByteMatrix* matrix) { - int32_t penalty = 0; - uint8_t* array = matrix->GetArray(); - int32_t width = matrix->GetWidth(); - int32_t height = matrix->GetHeight(); - for (int32_t y = 0; y < height - 1; y++) { - for (int32_t x = 0; x < width - 1; x++) { - int32_t value = array[y * width + x]; - if (value == array[y * width + x + 1] && - value == array[(y + 1) * width + x] && - value == array[(y + 1) * width + x + 1]) { - penalty++; - } - } - } - return 3 * penalty; -} - -int32_t CBC_QRCoderMaskUtil::ApplyMaskPenaltyRule3( - CBC_CommonByteMatrix* matrix) { - int32_t penalty = 0; - uint8_t* array = matrix->GetArray(); - int32_t width = matrix->GetWidth(); - int32_t height = matrix->GetHeight(); - for (int32_t y = 0; y < height; ++y) { - for (int32_t x = 0; x < width; ++x) { - if (x == 0 && - ((y >= 0 && y <= 6) || (y >= height - 7 && y <= height - 1))) { - continue; - } - if (x == width - 7 && (y >= 0 && y <= 6)) { - continue; - } - if (y == 0 && - ((x >= 0 && x <= 6) || (x >= width - 7 && x <= width - 1))) { - continue; - } - if (y == height - 7 && (x >= 0 && x <= 6)) { - continue; - } - if (x + 6 < width && array[y * width + x] == 1 && - array[y * width + x + 1] == 0 && array[y * width + x + 2] == 1 && - array[y * width + x + 3] == 1 && array[y * width + x + 4] == 1 && - array[y * width + x + 5] == 0 && array[y * width + x + 6] == 1 && - ((x + 10 < width && array[y * width + x + 7] == 0 && - array[y * width + x + 8] == 0 && array[y * width + x + 9] == 0 && - array[y * width + x + 10] == 0) || - (x - 4 >= 0 && array[y * width + x - 1] == 0 && - array[y * width + x - 2] == 0 && array[y * width + x - 3] == 0 && - array[y * width + x - 4] == 0))) { - penalty += 40; - } - if (y + 6 < height && array[y * width + x] == 1 && - array[(y + 1) * width + x] == 0 && array[(y + 2) * width + x] == 1 && - array[(y + 3) * width + x] == 1 && array[(y + 4) * width + x] == 1 && - array[(y + 5) * width + x] == 0 && array[(y + 6) * width + x] == 1 && - ((y + 10 < height && array[(y + 7) * width + x] == 0 && - array[(y + 8) * width + x] == 0 && - array[(y + 9) * width + x] == 0 && - array[(y + 10) * width + x] == 0) || - (y - 4 >= 0 && array[(y - 1) * width + x] == 0 && - array[(y - 2) * width + x] == 0 && - array[(y - 3) * width + x] == 0 && - array[(y - 4) * width + x] == 0))) { - penalty += 40; - } - } - } - return penalty; -} -int32_t CBC_QRCoderMaskUtil::ApplyMaskPenaltyRule4( - CBC_CommonByteMatrix* matrix) { - int32_t numDarkCells = 0; - uint8_t* array = matrix->GetArray(); - int32_t width = matrix->GetWidth(); - int32_t height = matrix->GetHeight(); - for (int32_t y = 0; y < height; ++y) { - for (int32_t x = 0; x < width; ++x) { - if (array[y * width + x] == 1) { - numDarkCells += 1; - } - } - } - int32_t numTotalCells = matrix->GetHeight() * matrix->GetWidth(); - double darkRatio = (double)numDarkCells / numTotalCells; - return abs((int32_t)(darkRatio * 100 - 50) / 5) * 5 * 10; -} -FX_BOOL CBC_QRCoderMaskUtil::GetDataMaskBit(int32_t maskPattern, - int32_t x, - int32_t y, - int32_t& e) { - if (!CBC_QRCoder::IsValidMaskPattern(maskPattern)) { - e = (BCExceptionInvalidateMaskPattern); - BC_EXCEPTION_CHECK_ReturnValue(e, FALSE); - } - int32_t intermediate = 0, temp = 0; - switch (maskPattern) { - case 0: - intermediate = (y + x) & 0x1; - break; - case 1: - intermediate = y & 0x1; - break; - case 2: - intermediate = x % 3; - break; - case 3: - intermediate = (y + x) % 3; - break; - case 4: - intermediate = ((y >> 1) + (x / 3)) & 0x1; - break; - case 5: - temp = y * x; - intermediate = (temp & 0x1) + (temp % 3); - break; - case 6: - temp = y * x; - intermediate = (((temp & 0x1) + (temp % 3)) & 0x1); - break; - case 7: - temp = y * x; - intermediate = (((temp % 3) + ((y + x) & 0x1)) & 0x1); - break; - default: { - e = BCExceptionInvalidateMaskPattern; - BC_EXCEPTION_CHECK_ReturnValue(e, FALSE); - } - } - return intermediate == 0; -} -int32_t CBC_QRCoderMaskUtil::ApplyMaskPenaltyRule1Internal( - CBC_CommonByteMatrix* matrix, - FX_BOOL isHorizontal) { - int32_t penalty = 0; - int32_t numSameBitCells = 0; - int32_t prevBit = -1; - int32_t width = matrix->GetWidth(); - int32_t height = matrix->GetHeight(); - int32_t iLimit = isHorizontal ? height : width; - int32_t jLimit = isHorizontal ? width : height; - uint8_t* array = matrix->GetArray(); - for (int32_t i = 0; i < iLimit; ++i) { - for (int32_t j = 0; j < jLimit; ++j) { - int32_t bit = isHorizontal ? array[i * width + j] : array[j * width + i]; - if (bit == prevBit) { - numSameBitCells += 1; - if (numSameBitCells == 5) { - penalty += 3; - } else if (numSameBitCells > 5) { - penalty += 1; - } - } else { - numSameBitCells = 1; - prevBit = bit; - } - } - numSameBitCells = 0; - } - return penalty; -} diff --git a/xfa/src/fxbarcode/qrcode/BC_QRCoderMaskUtil.h b/xfa/src/fxbarcode/qrcode/BC_QRCoderMaskUtil.h deleted file mode 100644 index ad6274c8a2..0000000000 --- a/xfa/src/fxbarcode/qrcode/BC_QRCoderMaskUtil.h +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_QRCODE_BC_QRCODERMASKUTIL_H_ -#define XFA_SRC_FXBARCODE_QRCODE_BC_QRCODERMASKUTIL_H_ -class CBC_CommonByteMatrix; -class CBC_QRCoderMaskUtil { - public: - CBC_QRCoderMaskUtil(); - virtual ~CBC_QRCoderMaskUtil(); - static FX_BOOL GetDataMaskBit(int32_t maskPattern, - int32_t x, - int32_t y, - int32_t& e); - - static int32_t ApplyMaskPenaltyRule1(CBC_CommonByteMatrix* matrix); - static int32_t ApplyMaskPenaltyRule2(CBC_CommonByteMatrix* matrix); - static int32_t ApplyMaskPenaltyRule3(CBC_CommonByteMatrix* matrix); - static int32_t ApplyMaskPenaltyRule4(CBC_CommonByteMatrix* matrix); - static int32_t ApplyMaskPenaltyRule1Internal(CBC_CommonByteMatrix* matrix, - FX_BOOL isHorizontal); -}; - -#endif // XFA_SRC_FXBARCODE_QRCODE_BC_QRCODERMASKUTIL_H_ diff --git a/xfa/src/fxbarcode/qrcode/BC_QRCoderMatrixUtil.cpp b/xfa/src/fxbarcode/qrcode/BC_QRCoderMatrixUtil.cpp deleted file mode 100644 index bf1d258d2a..0000000000 --- a/xfa/src/fxbarcode/qrcode/BC_QRCoderMatrixUtil.cpp +++ /dev/null @@ -1,478 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2008 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/common/BC_CommonByteMatrix.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRCoder.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRCoderBitVector.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRCoderErrorCorrectionLevel.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRCoderMaskUtil.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRCoderMatrixUtil.h" -#include "xfa/src/fxbarcode/utils.h" - -const int32_t CBC_QRCoderMatrixUtil::POSITION_DETECTION_PATTERN[7][7] = { - {1, 1, 1, 1, 1, 1, 1}, - {1, 0, 0, 0, 0, 0, 1}, - {1, 0, 1, 1, 1, 0, 1}, - {1, 0, 1, 1, 1, 0, 1}, - {1, 0, 1, 1, 1, 0, 1}, - {1, 0, 0, 0, 0, 0, 1}, - {1, 1, 1, 1, 1, 1, 1}}; -const int32_t CBC_QRCoderMatrixUtil::HORIZONTAL_SEPARATION_PATTERN[1][8] = { - {0, 0, 0, 0, 0, 0, 0, 0}}; -const int32_t CBC_QRCoderMatrixUtil::VERTICAL_SEPARATION_PATTERN[7][1] = - {{0}, {0}, {0}, {0}, {0}, {0}, {0}}; -const int32_t CBC_QRCoderMatrixUtil::POSITION_ADJUSTMENT_PATTERN[5][5] = { - {1, 1, 1, 1, 1}, - {1, 0, 0, 0, 1}, - {1, 0, 1, 0, 1}, - {1, 0, 0, 0, 1}, - {1, 1, 1, 1, 1}}; -const int32_t - CBC_QRCoderMatrixUtil::POSITION_ADJUSTMENT_PATTERN_COORDINATE_TABLE[40][7] = - // NOLINTNEXTLINE - { - {-1, -1, -1, -1, -1, -1, -1}, {6, 18, -1, -1, -1, -1, -1}, - {6, 22, -1, -1, -1, -1, -1}, {6, 26, -1, -1, -1, -1, -1}, - {6, 30, -1, -1, -1, -1, -1}, {6, 34, -1, -1, -1, -1, -1}, - {6, 22, 38, -1, -1, -1, -1}, {6, 24, 42, -1, -1, -1, -1}, - {6, 26, 46, -1, -1, -1, -1}, {6, 28, 50, -1, -1, -1, -1}, - {6, 30, 54, -1, -1, -1, -1}, {6, 32, 58, -1, -1, -1, -1}, - {6, 34, 62, -1, -1, -1, -1}, {6, 26, 46, 66, -1, -1, -1}, - {6, 26, 48, 70, -1, -1, -1}, {6, 26, 50, 74, -1, -1, -1}, - {6, 30, 54, 78, -1, -1, -1}, {6, 30, 56, 82, -1, -1, -1}, - {6, 30, 58, 86, -1, -1, -1}, {6, 34, 62, 90, -1, -1, -1}, - {6, 28, 50, 72, 94, -1, -1}, {6, 26, 50, 74, 98, -1, -1}, - {6, 30, 54, 78, 102, -1, -1}, {6, 28, 54, 80, 106, -1, -1}, - {6, 32, 58, 84, 110, -1, -1}, {6, 30, 58, 86, 114, -1, -1}, - {6, 34, 62, 90, 118, -1, -1}, {6, 26, 50, 74, 98, 122, -1}, - {6, 30, 54, 78, 102, 126, -1}, {6, 26, 52, 78, 104, 130, -1}, - {6, 30, 56, 82, 108, 134, -1}, {6, 34, 60, 86, 112, 138, -1}, - {6, 30, 58, 86, 114, 142, -1}, {6, 34, 62, 90, 118, 146, -1}, - {6, 30, 54, 78, 102, 126, 150}, {6, 24, 50, 76, 102, 128, 154}, - {6, 28, 54, 80, 106, 132, 158}, {6, 32, 58, 84, 110, 136, 162}, - {6, 26, 54, 82, 110, 138, 166}, {6, 30, 58, 86, 114, 142, 170}, -}; -const int32_t CBC_QRCoderMatrixUtil::TYPE_INFO_COORDINATES[15][2] = { - {8, 0}, {8, 1}, {8, 2}, {8, 3}, {8, 4}, {8, 5}, {8, 7}, {8, 8}, - {7, 8}, {5, 8}, {4, 8}, {3, 8}, {2, 8}, {1, 8}, {0, 8}, -}; -const int32_t CBC_QRCoderMatrixUtil::VERSION_INFO_POLY = 0x1f25; -const int32_t CBC_QRCoderMatrixUtil::TYPE_INFO_POLY = 0x0537; -const int32_t CBC_QRCoderMatrixUtil::TYPE_INFO_MASK_PATTERN = 0x5412; - -void CBC_QRCoderMatrixUtil::ClearMatrix(CBC_CommonByteMatrix* matrix, - int32_t& e) { - if (matrix == NULL) { - e = BCExceptionNullPointer; - BC_EXCEPTION_CHECK_ReturnVoid(e); - } - matrix->clear((uint8_t)-1); -} -void CBC_QRCoderMatrixUtil::BuildMatrix( - CBC_QRCoderBitVector* dataBits, - CBC_QRCoderErrorCorrectionLevel* ecLevel, - int32_t version, - int32_t maskPattern, - CBC_CommonByteMatrix* matrix, - int32_t& e) { - if (matrix == NULL) { - e = BCExceptionNullPointer; - BC_EXCEPTION_CHECK_ReturnVoid(e); - } - ClearMatrix(matrix, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - EmbedBasicPatterns(version, matrix, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - EmbedTypeInfo(ecLevel, maskPattern, matrix, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - MaybeEmbedVersionInfo(version, matrix, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - EmbedDataBits(dataBits, maskPattern, matrix, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); -} -void CBC_QRCoderMatrixUtil::EmbedBasicPatterns(int32_t version, - CBC_CommonByteMatrix* matrix, - int32_t& e) { - if (matrix == NULL) { - e = BCExceptionNullPointer; - BC_EXCEPTION_CHECK_ReturnVoid(e); - } - EmbedPositionDetectionPatternsAndSeparators(matrix, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - EmbedDarkDotAtLeftBottomCorner(matrix, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - MaybeEmbedPositionAdjustmentPatterns(version, matrix, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - EmbedTimingPatterns(matrix, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); -} -void CBC_QRCoderMatrixUtil::EmbedTypeInfo( - CBC_QRCoderErrorCorrectionLevel* ecLevel, - int32_t maskPattern, - CBC_CommonByteMatrix* matrix, - int32_t& e) { - if (matrix == NULL) { - e = BCExceptionNullPointer; - BC_EXCEPTION_CHECK_ReturnVoid(e); - } - CBC_QRCoderBitVector typeInfoBits; - typeInfoBits.Init(); - MakeTypeInfoBits(ecLevel, maskPattern, &typeInfoBits, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - for (int32_t i = 0; i < typeInfoBits.Size(); i++) { - int32_t bit = typeInfoBits.At(typeInfoBits.Size() - 1 - i, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - int32_t x1 = TYPE_INFO_COORDINATES[i][0]; - int32_t y1 = TYPE_INFO_COORDINATES[i][1]; - matrix->Set(x1, y1, bit); - if (i < 8) { - int32_t x2 = matrix->GetWidth() - i - 1; - int32_t y2 = 8; - matrix->Set(x2, y2, bit); - } else { - int32_t x2 = 8; - int32_t y2 = matrix->GetHeight() - 7 + (i - 8); - matrix->Set(x2, y2, bit); - } - } -} -void CBC_QRCoderMatrixUtil::MaybeEmbedVersionInfo(int32_t version, - CBC_CommonByteMatrix* matrix, - int32_t& e) { - if (matrix == NULL) { - e = BCExceptionNullPointer; - BC_EXCEPTION_CHECK_ReturnVoid(e); - } - if (version < 7) { - return; - } - CBC_QRCoderBitVector versionInfoBits; - versionInfoBits.Init(); - MakeVersionInfoBits(version, &versionInfoBits, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - int32_t bitIndex = 6 * 3 - 1; - for (int32_t i = 0; i < 6; i++) { - for (int32_t j = 0; j < 3; j++) { - int32_t bit = versionInfoBits.At(bitIndex, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - bitIndex--; - matrix->Set(i, matrix->GetHeight() - 11 + j, bit); - matrix->Set(matrix->GetHeight() - 11 + j, i, bit); - } - } -} -void CBC_QRCoderMatrixUtil::EmbedDataBits(CBC_QRCoderBitVector* dataBits, - int32_t maskPattern, - CBC_CommonByteMatrix* matrix, - int32_t& e) { - if (matrix == NULL || dataBits == NULL) { - e = BCExceptionNullPointer; - BC_EXCEPTION_CHECK_ReturnVoid(e); - } - int32_t bitIndex = 0; - int32_t direction = -1; - int32_t x = matrix->GetWidth() - 1; - int32_t y = matrix->GetHeight() - 1; - while (x > 0) { - if (x == 6) { - x -= 1; - } - while (y >= 0 && y < matrix->GetHeight()) { - if (y == 6) { - y += direction; - continue; - } - for (int32_t i = 0; i < 2; i++) { - int32_t xx = x - i; - if (!IsEmpty(matrix->Get(xx, y))) { - continue; - } - int32_t bit; - if (bitIndex < dataBits->Size()) { - bit = dataBits->At(bitIndex, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - bitIndex++; - } else { - bit = 0; - } - if (maskPattern != -1) { - FX_BOOL bol = - CBC_QRCoderMaskUtil::GetDataMaskBit(maskPattern, xx, y, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - if (bol) { - bit ^= 0x01; - } - } - matrix->Set(xx, y, bit); - } - y += direction; - } - direction = -direction; - y += direction; - x -= 2; - } - if (bitIndex != dataBits->Size()) { - return; - } -} -int32_t CBC_QRCoderMatrixUtil::CalculateBCHCode(int32_t value, int32_t poly) { - int32_t msbSetInPoly = FindMSBSet(poly); - value <<= msbSetInPoly - 1; - while (FindMSBSet(value) >= msbSetInPoly) { - value ^= poly << (FindMSBSet(value) - msbSetInPoly); - } - return value; -} -void CBC_QRCoderMatrixUtil::MakeTypeInfoBits( - CBC_QRCoderErrorCorrectionLevel* ecLevel, - int32_t maskPattern, - CBC_QRCoderBitVector* bits, - int32_t& e) { - if (bits == NULL) { - e = BCExceptionNullPointer; - BC_EXCEPTION_CHECK_ReturnVoid(e); - } - if (!CBC_QRCoder::IsValidMaskPattern(maskPattern)) { - e = BCExceptionBadMask; - BC_EXCEPTION_CHECK_ReturnVoid(e); - } - int32_t typeInfo = (ecLevel->GetBits() << 3) | maskPattern; - BC_EXCEPTION_CHECK_ReturnVoid(e); - bits->AppendBits(typeInfo, 5, e); - int32_t bchCode = CalculateBCHCode(typeInfo, TYPE_INFO_POLY); - BC_EXCEPTION_CHECK_ReturnVoid(e); - bits->AppendBits(bchCode, 10, e); - CBC_QRCoderBitVector maskBits; - maskBits.Init(); - maskBits.AppendBits(TYPE_INFO_MASK_PATTERN, 15, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - bits->XOR(&maskBits, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - if (bits->Size() != 15) { - e = BCExceptionBitSizeNot15; - BC_EXCEPTION_CHECK_ReturnVoid(e); - } -} -void CBC_QRCoderMatrixUtil::MakeVersionInfoBits(int32_t version, - CBC_QRCoderBitVector* bits, - int32_t& e) { - if (bits == NULL) { - e = BCExceptionNullPointer; - BC_EXCEPTION_CHECK_ReturnVoid(e); - } - bits->AppendBits(version, 6, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - int32_t bchCode = CalculateBCHCode(version, VERSION_INFO_POLY); - bits->AppendBits(bchCode, 12, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - if (bits->Size() != 18) { - e = BCExceptionBitSizeNot18; - BC_EXCEPTION_CHECK_ReturnVoid(e); - } -} -FX_BOOL CBC_QRCoderMatrixUtil::IsEmpty(int32_t value) { - return (uint8_t)value == 0xff; -} -FX_BOOL CBC_QRCoderMatrixUtil::IsValidValue(int32_t value) { - return ((uint8_t)value == 0xff || (uint8_t)value == 0x00 || - (uint8_t)value == 0x01); -} -void CBC_QRCoderMatrixUtil::EmbedTimingPatterns(CBC_CommonByteMatrix* matrix, - int32_t& e) { - if (matrix == NULL) { - e = BCExceptionNullPointer; - BC_EXCEPTION_CHECK_ReturnVoid(e); - } - for (int32_t i = 8; i < matrix->GetWidth() - 8; i++) { - int32_t bit = (i + 1) % 2; - if (!IsValidValue(matrix->Get(i, 6))) { - e = BCExceptionInvalidateImageData; - BC_EXCEPTION_CHECK_ReturnVoid(e); - } - if (IsEmpty(matrix->Get(i, 6))) { - matrix->Set(i, 6, bit); - } - if (!IsValidValue(matrix->Get(6, i))) { - e = BCExceptionInvalidateImageData; - BC_EXCEPTION_CHECK_ReturnVoid(e); - } - if (IsEmpty(matrix->Get(6, i))) { - matrix->Set(6, i, bit); - } - } -} -void CBC_QRCoderMatrixUtil::EmbedDarkDotAtLeftBottomCorner( - CBC_CommonByteMatrix* matrix, - int32_t& e) { - if (matrix == NULL) { - e = BCExceptionNullPointer; - BC_EXCEPTION_CHECK_ReturnVoid(e); - } - if (matrix->Get(8, matrix->GetHeight() - 8) == 0) { - e = BCExceptionHeight_8BeZero; - BC_EXCEPTION_CHECK_ReturnVoid(e); - } - matrix->Set(8, matrix->GetHeight() - 8, 1); -} -void CBC_QRCoderMatrixUtil::EmbedHorizontalSeparationPattern( - int32_t xStart, - int32_t yStart, - CBC_CommonByteMatrix* matrix, - int32_t& e) { - if (matrix == NULL) { - e = BCExceptionNullPointer; - BC_EXCEPTION_CHECK_ReturnVoid(e); - } - for (int32_t x = 0; x < 8; x++) { - if (!IsEmpty(matrix->Get(xStart + x, yStart))) { - e = BCExceptionInvalidateData; - BC_EXCEPTION_CHECK_ReturnVoid(e) - } - matrix->Set(xStart + x, yStart, HORIZONTAL_SEPARATION_PATTERN[0][x]); - } -} -void CBC_QRCoderMatrixUtil::EmbedVerticalSeparationPattern( - int32_t xStart, - int32_t yStart, - CBC_CommonByteMatrix* matrix, - int32_t& e) { - if (matrix == NULL) { - e = BCExceptionNullPointer; - BC_EXCEPTION_CHECK_ReturnVoid(e); - } - for (int32_t y = 0; y < 7; y++) { - if (!IsEmpty(matrix->Get(xStart, yStart + y))) { - e = BCExceptionInvalidateData; - BC_EXCEPTION_CHECK_ReturnVoid(e); - } - matrix->Set(xStart, yStart + y, VERTICAL_SEPARATION_PATTERN[y][0]); - } -} -void CBC_QRCoderMatrixUtil::EmbedPositionAdjustmentPattern( - int32_t xStart, - int32_t yStart, - CBC_CommonByteMatrix* matrix, - int32_t& e) { - if (matrix == NULL) { - e = BCExceptionNullPointer; - BC_EXCEPTION_CHECK_ReturnVoid(e); - } - for (int32_t y = 0; y < 5; y++) { - for (int32_t x = 0; x < 5; x++) { - if (!IsEmpty(matrix->Get(xStart + x, y + yStart))) { - e = BCExceptionInvalidateData; - BC_EXCEPTION_CHECK_ReturnVoid(e); - } - matrix->Set(xStart + x, yStart + y, POSITION_ADJUSTMENT_PATTERN[y][x]); - } - } -} -void CBC_QRCoderMatrixUtil::EmbedPositionDetectionPattern( - int32_t xStart, - int32_t yStart, - CBC_CommonByteMatrix* matrix, - int32_t& e) { - if (matrix == NULL) { - e = BCExceptionNullPointer; - BC_EXCEPTION_CHECK_ReturnVoid(e); - } - for (int32_t y = 0; y < 7; y++) { - for (int32_t x = 0; x < 7; x++) { - if (!IsEmpty(matrix->Get(xStart + x, yStart + y))) { - e = BCExceptionInvalidateData; - BC_EXCEPTION_CHECK_ReturnVoid(e); - } - matrix->Set(xStart + x, yStart + y, POSITION_DETECTION_PATTERN[y][x]); - } - } -} -void CBC_QRCoderMatrixUtil::EmbedPositionDetectionPatternsAndSeparators( - CBC_CommonByteMatrix* matrix, - int32_t& e) { - if (matrix == NULL) { - e = BCExceptionNullPointer; - BC_EXCEPTION_CHECK_ReturnVoid(e); - } - int32_t pdpWidth = 7; - EmbedPositionDetectionPattern(0, 0, matrix, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - EmbedPositionDetectionPattern(matrix->GetWidth() - pdpWidth, 0, matrix, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - EmbedPositionDetectionPattern(0, matrix->GetWidth() - pdpWidth, matrix, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - int32_t hspWidth = 8; - EmbedHorizontalSeparationPattern(0, hspWidth - 1, matrix, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - EmbedHorizontalSeparationPattern(matrix->GetWidth() - hspWidth, hspWidth - 1, - matrix, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - EmbedHorizontalSeparationPattern(0, matrix->GetWidth() - hspWidth, matrix, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - int32_t vspSize = 7; - EmbedVerticalSeparationPattern(vspSize, 0, matrix, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - EmbedVerticalSeparationPattern(matrix->GetHeight() - vspSize - 1, 0, matrix, - e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - EmbedVerticalSeparationPattern(vspSize, matrix->GetHeight() - vspSize, matrix, - e); - BC_EXCEPTION_CHECK_ReturnVoid(e); -} -void CBC_QRCoderMatrixUtil::MaybeEmbedPositionAdjustmentPatterns( - int32_t version, - CBC_CommonByteMatrix* matrix, - int32_t& e) { - if (matrix == NULL) { - e = BCExceptionNullPointer; - BC_EXCEPTION_CHECK_ReturnVoid(e); - } - if (version < 2) { - return; - } - int32_t index = version - 1; - int32_t const* coordinates = - &(POSITION_ADJUSTMENT_PATTERN_COORDINATE_TABLE[index][0]); - int32_t numCoordinate = 7; - for (int32_t i = 0; i < numCoordinate; i++) { - for (int32_t j = 0; j < numCoordinate; j++) { - int32_t y = coordinates[i]; - int32_t x = coordinates[j]; - if (x == -1 || y == -1) { - continue; - } - if (IsEmpty(matrix->Get(x, y))) { - EmbedPositionAdjustmentPattern(x - 2, y - 2, matrix, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - } - } - } -} -int32_t CBC_QRCoderMatrixUtil::FindMSBSet(int32_t value) { - int32_t numDigits = 0; - while (value != 0) { - value >>= 1; - ++numDigits; - } - return numDigits; -} -CBC_QRCoderMatrixUtil::CBC_QRCoderMatrixUtil() {} -CBC_QRCoderMatrixUtil::~CBC_QRCoderMatrixUtil() {} diff --git a/xfa/src/fxbarcode/qrcode/BC_QRCoderMatrixUtil.h b/xfa/src/fxbarcode/qrcode/BC_QRCoderMatrixUtil.h deleted file mode 100644 index 6676b8389d..0000000000 --- a/xfa/src/fxbarcode/qrcode/BC_QRCoderMatrixUtil.h +++ /dev/null @@ -1,87 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_QRCODE_BC_QRCODERMATRIXUTIL_H_ -#define XFA_SRC_FXBARCODE_QRCODE_BC_QRCODERMATRIXUTIL_H_ - -class CBC_CommonByteMatrix; -class CBC_QRCoderErrorCorrectionLevel; -class CBC_QRCoderBitVector; -class CBC_QRCoderMatrixUtil { - private: - static const int32_t POSITION_DETECTION_PATTERN[7][7]; - static const int32_t VERTICAL_SEPARATION_PATTERN[7][1]; - static const int32_t HORIZONTAL_SEPARATION_PATTERN[1][8]; - static const int32_t POSITION_ADJUSTMENT_PATTERN[5][5]; - static const int32_t POSITION_ADJUSTMENT_PATTERN_COORDINATE_TABLE[40][7]; - static const int32_t TYPE_INFO_COORDINATES[15][2]; - static const int32_t VERSION_INFO_POLY; - static const int32_t TYPE_INFO_POLY; - static const int32_t TYPE_INFO_MASK_PATTERN; - - public: - CBC_QRCoderMatrixUtil(); - virtual ~CBC_QRCoderMatrixUtil(); - static void ClearMatrix(CBC_CommonByteMatrix* matrix, int32_t& e); - static void BuildMatrix(CBC_QRCoderBitVector* dataBits, - CBC_QRCoderErrorCorrectionLevel* ecLevel, - int32_t version, - int32_t maskPattern, - CBC_CommonByteMatrix* matrix, - int32_t& e); - static void EmbedBasicPatterns(int32_t version, - CBC_CommonByteMatrix* matrix, - int32_t& e); - static void EmbedTypeInfo(CBC_QRCoderErrorCorrectionLevel* ecLevel, - int32_t maskPattern, - CBC_CommonByteMatrix* matrix, - int32_t& e); - static void EmbedDataBits(CBC_QRCoderBitVector* dataBits, - int32_t maskPattern, - CBC_CommonByteMatrix* matrix, - int32_t& e); - static void MaybeEmbedVersionInfo(int32_t version, - CBC_CommonByteMatrix* matrix, - int32_t& e); - static int32_t FindMSBSet(int32_t value); - static int32_t CalculateBCHCode(int32_t code, int32_t poly); - static void MakeTypeInfoBits(CBC_QRCoderErrorCorrectionLevel* ecLevel, - int32_t maskPattern, - CBC_QRCoderBitVector* bits, - int32_t& e); - static void MakeVersionInfoBits(int32_t version, - CBC_QRCoderBitVector* bits, - int32_t& e); - static FX_BOOL IsEmpty(int32_t value); - static FX_BOOL IsValidValue(int32_t value); - static void EmbedTimingPatterns(CBC_CommonByteMatrix* matrix, int32_t& e); - static void EmbedDarkDotAtLeftBottomCorner(CBC_CommonByteMatrix* matrix, - int32_t& e); - static void EmbedHorizontalSeparationPattern(int32_t xStart, - int32_t yStart, - CBC_CommonByteMatrix* matrix, - int32_t& e); - static void EmbedVerticalSeparationPattern(int32_t xStart, - int32_t yStart, - CBC_CommonByteMatrix* matrix, - int32_t& e); - static void EmbedPositionAdjustmentPattern(int32_t xStart, - int32_t yStart, - CBC_CommonByteMatrix* matrix, - int32_t& e); - static void EmbedPositionDetectionPattern(int32_t xStart, - int32_t yStart, - CBC_CommonByteMatrix* matrix, - int32_t& e); - static void EmbedPositionDetectionPatternsAndSeparators( - CBC_CommonByteMatrix* matrix, - int32_t& e); - static void MaybeEmbedPositionAdjustmentPatterns(int32_t version, - CBC_CommonByteMatrix* matrix, - int32_t& e); -}; - -#endif // XFA_SRC_FXBARCODE_QRCODE_BC_QRCODERMATRIXUTIL_H_ diff --git a/xfa/src/fxbarcode/qrcode/BC_QRCoderMode.cpp b/xfa/src/fxbarcode/qrcode/BC_QRCoderMode.cpp deleted file mode 100644 index 337d21a9e9..0000000000 --- a/xfa/src/fxbarcode/qrcode/BC_QRCoderMode.cpp +++ /dev/null @@ -1,179 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2007 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/qrcode/BC_QRCoderMode.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRCoderVersion.h" -#include "xfa/src/fxbarcode/utils.h" - -CBC_QRCoderMode* CBC_QRCoderMode::sBYTE = NULL; -CBC_QRCoderMode* CBC_QRCoderMode::sNUMERIC = NULL; -CBC_QRCoderMode* CBC_QRCoderMode::sALPHANUMERIC = NULL; -CBC_QRCoderMode* CBC_QRCoderMode::sKANJI = NULL; -CBC_QRCoderMode* CBC_QRCoderMode::sECI = NULL; -CBC_QRCoderMode* CBC_QRCoderMode::sGBK = NULL; -CBC_QRCoderMode* CBC_QRCoderMode::sTERMINATOR = NULL; -CBC_QRCoderMode* CBC_QRCoderMode::sFNC1_FIRST_POSITION = NULL; -CBC_QRCoderMode* CBC_QRCoderMode::sFNC1_SECOND_POSITION = NULL; -CBC_QRCoderMode* CBC_QRCoderMode::sSTRUCTURED_APPEND = NULL; - -CBC_QRCoderMode::CBC_QRCoderMode(int32_t* characterCountBitsForVersions, - int32_t x1, - int32_t x2, - int32_t x3, - int32_t bits, - CFX_ByteString name) { - m_characterCountBitsForVersions = characterCountBitsForVersions; - if (m_characterCountBitsForVersions) { - m_characterCountBitsForVersions[0] = x1; - m_characterCountBitsForVersions[1] = x2; - m_characterCountBitsForVersions[2] = x3; - } - m_name += name; - m_bits = bits; -} -CBC_QRCoderMode::~CBC_QRCoderMode() { - FX_Free(m_characterCountBitsForVersions); -} -void CBC_QRCoderMode::Initialize() { - sBYTE = new CBC_QRCoderMode(FX_Alloc(int32_t, 3), 8, 16, 16, 0x4, "BYTE"); - sALPHANUMERIC = - new CBC_QRCoderMode(FX_Alloc(int32_t, 3), 9, 11, 13, 0x2, "ALPHANUMERIC"); - sECI = new CBC_QRCoderMode(NULL, 0, 0, 0, 0x7, "ECI"); - sKANJI = new CBC_QRCoderMode(FX_Alloc(int32_t, 3), 8, 10, 12, 0x8, "KANJI"); - sNUMERIC = - new CBC_QRCoderMode(FX_Alloc(int32_t, 3), 10, 12, 14, 0x1, "NUMERIC"); - sGBK = new CBC_QRCoderMode(FX_Alloc(int32_t, 3), 8, 10, 12, 0x0D, "GBK"); - sTERMINATOR = - new CBC_QRCoderMode(FX_Alloc(int32_t, 3), 0, 0, 0, 0x00, "TERMINATOR"); - sFNC1_FIRST_POSITION = - new CBC_QRCoderMode(NULL, 0, 0, 0, 0x05, "FNC1_FIRST_POSITION"); - sFNC1_SECOND_POSITION = - new CBC_QRCoderMode(NULL, 0, 0, 0, 0x09, "FNC1_SECOND_POSITION"); - sSTRUCTURED_APPEND = new CBC_QRCoderMode(FX_Alloc(int32_t, 3), 0, 0, 0, 0x03, - "STRUCTURED_APPEND"); -} -void CBC_QRCoderMode::Finalize() { - delete sBYTE; - delete sALPHANUMERIC; - delete sECI; - delete sKANJI; - delete sNUMERIC; - delete sGBK; - delete sTERMINATOR; - delete sFNC1_FIRST_POSITION; - delete sFNC1_SECOND_POSITION; - delete sSTRUCTURED_APPEND; -} -CBC_QRCoderMode* CBC_QRCoderMode::ForBits(int32_t bits, int32_t& e) { - switch (bits) { - case 0x0: - return sTERMINATOR; - case 0x1: - return sNUMERIC; - case 0x2: - return sALPHANUMERIC; - case 0x3: - return sSTRUCTURED_APPEND; - case 0x4: - return sBYTE; - case 0x5: - return sFNC1_FIRST_POSITION; - case 0x7: - return sECI; - case 0x8: - return sKANJI; - case 0x9: - return sFNC1_SECOND_POSITION; - case 0x0D: - return sGBK; - default: { - e = BCExceptionUnsupportedMode; - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - } - } - return NULL; -} -int32_t CBC_QRCoderMode::GetBits() { - return m_bits; -} -CFX_ByteString CBC_QRCoderMode::GetName() { - return m_name; -} -int32_t CBC_QRCoderMode::GetCharacterCountBits(CBC_QRCoderVersion* version, - int32_t& e) { - if (m_characterCountBitsForVersions == NULL) { - e = BCExceptionCharacterNotThisMode; - BC_EXCEPTION_CHECK_ReturnValue(e, 0); - } - int32_t number = version->GetVersionNumber(); - int32_t offset; - if (number <= 9) { - offset = 0; - } else if (number <= 26) { - offset = 1; - } else { - offset = 2; - } - return m_characterCountBitsForVersions[offset]; -} -void CBC_QRCoderMode::Destroy() { - if (sBYTE) { - delete CBC_QRCoderMode::sBYTE; - sBYTE = NULL; - } - if (sNUMERIC) { - delete CBC_QRCoderMode::sNUMERIC; - sNUMERIC = NULL; - } - if (sALPHANUMERIC) { - delete CBC_QRCoderMode::sALPHANUMERIC; - sALPHANUMERIC = NULL; - } - if (sKANJI) { - delete CBC_QRCoderMode::sKANJI; - sKANJI = NULL; - } - if (sECI) { - delete CBC_QRCoderMode::sECI; - sECI = NULL; - } - if (sGBK) { - delete CBC_QRCoderMode::sGBK; - sGBK = NULL; - } - if (sTERMINATOR) { - delete CBC_QRCoderMode::sTERMINATOR; - sTERMINATOR = NULL; - } - if (sFNC1_FIRST_POSITION) { - delete CBC_QRCoderMode::sFNC1_FIRST_POSITION; - sFNC1_FIRST_POSITION = NULL; - } - if (sFNC1_SECOND_POSITION) { - delete CBC_QRCoderMode::sFNC1_SECOND_POSITION; - sFNC1_SECOND_POSITION = NULL; - } - if (sSTRUCTURED_APPEND) { - delete CBC_QRCoderMode::sSTRUCTURED_APPEND; - sSTRUCTURED_APPEND = NULL; - } -} diff --git a/xfa/src/fxbarcode/qrcode/BC_QRCoderMode.h b/xfa/src/fxbarcode/qrcode/BC_QRCoderMode.h deleted file mode 100644 index 9098b35beb..0000000000 --- a/xfa/src/fxbarcode/qrcode/BC_QRCoderMode.h +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_QRCODE_BC_QRCODERMODE_H_ -#define XFA_SRC_FXBARCODE_QRCODE_BC_QRCODERMODE_H_ - -#include - -#include "core/include/fxcrt/fx_string.h" - -class CBC_QRCoderVersion; - -class CBC_QRCoderMode { - private: - int32_t* m_characterCountBitsForVersions; - int32_t m_bits; - CFX_ByteString m_name; - CBC_QRCoderMode(int32_t* characterCountBitsForVersions, - int32_t x1, - int32_t x2, - int32_t x3, - int32_t bits, - CFX_ByteString name); - CBC_QRCoderMode(); - - public: - static CBC_QRCoderMode* sBYTE; - static CBC_QRCoderMode* sNUMERIC; - static CBC_QRCoderMode* sALPHANUMERIC; - static CBC_QRCoderMode* sKANJI; - static CBC_QRCoderMode* sECI; - static CBC_QRCoderMode* sGBK; - static CBC_QRCoderMode* sTERMINATOR; - static CBC_QRCoderMode* sFNC1_FIRST_POSITION; - static CBC_QRCoderMode* sFNC1_SECOND_POSITION; - static CBC_QRCoderMode* sSTRUCTURED_APPEND; - virtual ~CBC_QRCoderMode(); - - static void Initialize(); - static void Finalize(); - static CBC_QRCoderMode* ForBits(int32_t bits, int32_t& e); - int32_t GetCharacterCountBits(CBC_QRCoderVersion* version, int32_t& e); - int32_t GetBits(); - CFX_ByteString GetName(); - static void Destroy(); -}; - -#endif // XFA_SRC_FXBARCODE_QRCODE_BC_QRCODERMODE_H_ diff --git a/xfa/src/fxbarcode/qrcode/BC_QRCoderVersion.cpp b/xfa/src/fxbarcode/qrcode/BC_QRCoderVersion.cpp deleted file mode 100644 index 86e08c933c..0000000000 --- a/xfa/src/fxbarcode/qrcode/BC_QRCoderVersion.cpp +++ /dev/null @@ -1,769 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2007 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/common/BC_CommonBitMatrix.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRCoderBitVector.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRCoderECB.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRCoderECBlocks.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRCoderErrorCorrectionLevel.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRCoderFormatInformation.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRCoderVersion.h" -#include "xfa/src/fxbarcode/utils.h" - -const int32_t CBC_QRCoderVersion::VERSION_DECODE_INFO[] = { - 0x07C94, 0x085BC, 0x09A99, 0x0A4D3, 0x0BBF6, 0x0C762, 0x0D847, - 0x0E60D, 0x0F928, 0x10B78, 0x1145D, 0x12A17, 0x13532, 0x149A6, - 0x15683, 0x168C9, 0x177EC, 0x18EC4, 0x191E1, 0x1AFAB, 0x1B08E, - 0x1CC1A, 0x1D33F, 0x1ED75, 0x1F250, 0x209D5, 0x216F0, 0x228BA, - 0x2379F, 0x24B0B, 0x2542E, 0x26A64, 0x27541, 0x28C69}; -CFX_PtrArray* CBC_QRCoderVersion::VERSION = NULL; - -void CBC_QRCoderVersion::Initialize() { - VERSION = new CFX_PtrArray(); -} -void CBC_QRCoderVersion::Finalize() { - for (int32_t i = 0; i < VERSION->GetSize(); i++) { - CBC_QRCoderVersion* v = (CBC_QRCoderVersion*)(VERSION->GetAt(i)); - delete v; - } - delete VERSION; -} -CBC_QRCoderVersion::CBC_QRCoderVersion(int32_t versionNumber, - CBC_QRCoderECBlocks* ecBlocks1, - CBC_QRCoderECBlocks* ecBlocks2, - CBC_QRCoderECBlocks* ecBlocks3, - CBC_QRCoderECBlocks* ecBlocks4) { - m_versionNumber = versionNumber; - m_ecBlocks.Add(ecBlocks1); - m_ecBlocks.Add(ecBlocks2); - m_ecBlocks.Add(ecBlocks3); - m_ecBlocks.Add(ecBlocks4); - int32_t total = 0; - int32_t ecCodeWords = ecBlocks1->GetECCodeWordsPerBlock(); - CFX_PtrArray* ecbArray = ecBlocks1->GetECBlocks(); - for (int32_t i = 0; i < ecbArray->GetSize(); i++) { - CBC_QRCoderECB* ecBlock = (CBC_QRCoderECB*)((*ecbArray)[i]); - total += ecBlock->GetCount() * (ecBlock->GetDataCodeWords() + ecCodeWords); - } - m_totalCodeWords = total; - switch (versionNumber) { - case 1: - break; - case 2: - m_alignmentPatternCenters.Add(6); - m_alignmentPatternCenters.Add(18); - break; - case 3: - m_alignmentPatternCenters.Add(6); - m_alignmentPatternCenters.Add(22); - break; - case 4: - m_alignmentPatternCenters.Add(6); - m_alignmentPatternCenters.Add(26); - break; - case 5: - m_alignmentPatternCenters.Add(6); - m_alignmentPatternCenters.Add(30); - break; - case 6: - m_alignmentPatternCenters.Add(6); - m_alignmentPatternCenters.Add(34); - break; - case 7: - m_alignmentPatternCenters.Add(6); - m_alignmentPatternCenters.Add(22); - m_alignmentPatternCenters.Add(38); - break; - case 8: - m_alignmentPatternCenters.Add(6); - m_alignmentPatternCenters.Add(24); - m_alignmentPatternCenters.Add(42); - break; - case 9: - m_alignmentPatternCenters.Add(6); - m_alignmentPatternCenters.Add(26); - m_alignmentPatternCenters.Add(46); - break; - case 10: - m_alignmentPatternCenters.Add(6); - m_alignmentPatternCenters.Add(28); - m_alignmentPatternCenters.Add(50); - break; - case 11: - m_alignmentPatternCenters.Add(6); - m_alignmentPatternCenters.Add(30); - m_alignmentPatternCenters.Add(54); - break; - case 12: - m_alignmentPatternCenters.Add(6); - m_alignmentPatternCenters.Add(32); - m_alignmentPatternCenters.Add(58); - break; - case 13: - m_alignmentPatternCenters.Add(6); - m_alignmentPatternCenters.Add(34); - m_alignmentPatternCenters.Add(62); - break; - case 14: - m_alignmentPatternCenters.Add(6); - m_alignmentPatternCenters.Add(26); - m_alignmentPatternCenters.Add(46); - m_alignmentPatternCenters.Add(66); - break; - case 15: - m_alignmentPatternCenters.Add(6); - m_alignmentPatternCenters.Add(26); - m_alignmentPatternCenters.Add(48); - m_alignmentPatternCenters.Add(70); - break; - case 16: - m_alignmentPatternCenters.Add(6); - m_alignmentPatternCenters.Add(26); - m_alignmentPatternCenters.Add(50); - m_alignmentPatternCenters.Add(74); - break; - case 17: - m_alignmentPatternCenters.Add(6); - m_alignmentPatternCenters.Add(30); - m_alignmentPatternCenters.Add(54); - m_alignmentPatternCenters.Add(78); - break; - case 18: - m_alignmentPatternCenters.Add(6); - m_alignmentPatternCenters.Add(30); - m_alignmentPatternCenters.Add(56); - m_alignmentPatternCenters.Add(82); - break; - case 19: - m_alignmentPatternCenters.Add(6); - m_alignmentPatternCenters.Add(30); - m_alignmentPatternCenters.Add(58); - m_alignmentPatternCenters.Add(86); - break; - case 20: - m_alignmentPatternCenters.Add(6); - m_alignmentPatternCenters.Add(34); - m_alignmentPatternCenters.Add(62); - m_alignmentPatternCenters.Add(90); - break; - case 21: - m_alignmentPatternCenters.Add(6); - m_alignmentPatternCenters.Add(28); - m_alignmentPatternCenters.Add(50); - m_alignmentPatternCenters.Add(72); - m_alignmentPatternCenters.Add(94); - break; - case 22: - m_alignmentPatternCenters.Add(6); - m_alignmentPatternCenters.Add(26); - m_alignmentPatternCenters.Add(50); - m_alignmentPatternCenters.Add(74); - m_alignmentPatternCenters.Add(98); - break; - case 23: - m_alignmentPatternCenters.Add(6); - m_alignmentPatternCenters.Add(30); - m_alignmentPatternCenters.Add(54); - m_alignmentPatternCenters.Add(74); - m_alignmentPatternCenters.Add(102); - break; - case 24: - m_alignmentPatternCenters.Add(6); - m_alignmentPatternCenters.Add(28); - m_alignmentPatternCenters.Add(54); - m_alignmentPatternCenters.Add(80); - m_alignmentPatternCenters.Add(106); - break; - case 25: - m_alignmentPatternCenters.Add(6); - m_alignmentPatternCenters.Add(32); - m_alignmentPatternCenters.Add(58); - m_alignmentPatternCenters.Add(84); - m_alignmentPatternCenters.Add(110); - break; - case 26: - m_alignmentPatternCenters.Add(6); - m_alignmentPatternCenters.Add(30); - m_alignmentPatternCenters.Add(58); - m_alignmentPatternCenters.Add(86); - m_alignmentPatternCenters.Add(114); - break; - case 27: - m_alignmentPatternCenters.Add(6); - m_alignmentPatternCenters.Add(34); - m_alignmentPatternCenters.Add(62); - m_alignmentPatternCenters.Add(90); - m_alignmentPatternCenters.Add(118); - break; - case 28: - m_alignmentPatternCenters.Add(6); - m_alignmentPatternCenters.Add(26); - m_alignmentPatternCenters.Add(50); - m_alignmentPatternCenters.Add(74); - m_alignmentPatternCenters.Add(98); - m_alignmentPatternCenters.Add(122); - break; - case 29: - m_alignmentPatternCenters.Add(6); - m_alignmentPatternCenters.Add(30); - m_alignmentPatternCenters.Add(54); - m_alignmentPatternCenters.Add(78); - m_alignmentPatternCenters.Add(102); - m_alignmentPatternCenters.Add(126); - break; - case 30: - m_alignmentPatternCenters.Add(6); - m_alignmentPatternCenters.Add(26); - m_alignmentPatternCenters.Add(52); - m_alignmentPatternCenters.Add(78); - m_alignmentPatternCenters.Add(104); - m_alignmentPatternCenters.Add(130); - break; - case 31: - m_alignmentPatternCenters.Add(6); - m_alignmentPatternCenters.Add(30); - m_alignmentPatternCenters.Add(56); - m_alignmentPatternCenters.Add(82); - m_alignmentPatternCenters.Add(108); - m_alignmentPatternCenters.Add(134); - break; - case 32: - m_alignmentPatternCenters.Add(6); - m_alignmentPatternCenters.Add(34); - m_alignmentPatternCenters.Add(60); - m_alignmentPatternCenters.Add(86); - m_alignmentPatternCenters.Add(112); - m_alignmentPatternCenters.Add(138); - break; - case 33: - m_alignmentPatternCenters.Add(6); - m_alignmentPatternCenters.Add(30); - m_alignmentPatternCenters.Add(58); - m_alignmentPatternCenters.Add(86); - m_alignmentPatternCenters.Add(114); - m_alignmentPatternCenters.Add(142); - break; - case 34: - m_alignmentPatternCenters.Add(6); - m_alignmentPatternCenters.Add(34); - m_alignmentPatternCenters.Add(62); - m_alignmentPatternCenters.Add(90); - m_alignmentPatternCenters.Add(118); - m_alignmentPatternCenters.Add(146); - break; - case 35: - m_alignmentPatternCenters.Add(6); - m_alignmentPatternCenters.Add(30); - m_alignmentPatternCenters.Add(54); - m_alignmentPatternCenters.Add(78); - m_alignmentPatternCenters.Add(102); - m_alignmentPatternCenters.Add(126); - m_alignmentPatternCenters.Add(150); - break; - case 36: - m_alignmentPatternCenters.Add(6); - m_alignmentPatternCenters.Add(24); - m_alignmentPatternCenters.Add(50); - m_alignmentPatternCenters.Add(76); - m_alignmentPatternCenters.Add(102); - m_alignmentPatternCenters.Add(128); - m_alignmentPatternCenters.Add(154); - break; - case 37: - m_alignmentPatternCenters.Add(6); - m_alignmentPatternCenters.Add(28); - m_alignmentPatternCenters.Add(54); - m_alignmentPatternCenters.Add(80); - m_alignmentPatternCenters.Add(106); - m_alignmentPatternCenters.Add(132); - m_alignmentPatternCenters.Add(158); - break; - case 38: - m_alignmentPatternCenters.Add(6); - m_alignmentPatternCenters.Add(32); - m_alignmentPatternCenters.Add(58); - m_alignmentPatternCenters.Add(84); - m_alignmentPatternCenters.Add(110); - m_alignmentPatternCenters.Add(136); - m_alignmentPatternCenters.Add(162); - break; - case 39: - m_alignmentPatternCenters.Add(6); - m_alignmentPatternCenters.Add(26); - m_alignmentPatternCenters.Add(54); - m_alignmentPatternCenters.Add(82); - m_alignmentPatternCenters.Add(110); - m_alignmentPatternCenters.Add(138); - m_alignmentPatternCenters.Add(166); - break; - case 40: - m_alignmentPatternCenters.Add(6); - m_alignmentPatternCenters.Add(30); - m_alignmentPatternCenters.Add(58); - m_alignmentPatternCenters.Add(86); - m_alignmentPatternCenters.Add(114); - m_alignmentPatternCenters.Add(142); - m_alignmentPatternCenters.Add(170); - break; - } -} -CBC_QRCoderVersion::~CBC_QRCoderVersion() { - if (m_ecBlocks.GetSize() != 0) { - int32_t itBeg = 0; - int32_t itEnd = m_ecBlocks.GetSize(); - while (itBeg != itEnd) { - delete ((CBC_QRCoderECBlocks*)(m_ecBlocks[itBeg])); - itBeg++; - } - } -} -int32_t CBC_QRCoderVersion::GetVersionNumber() { - return m_versionNumber; -} -CFX_Int32Array* CBC_QRCoderVersion::GetAlignmentPatternCenters() { - return &m_alignmentPatternCenters; -} -int32_t CBC_QRCoderVersion::GetTotalCodeWords() { - return m_totalCodeWords; -} -int32_t CBC_QRCoderVersion::GetDimensionForVersion() { - return 17 + 4 * m_versionNumber; -} -CBC_QRCoderECBlocks* CBC_QRCoderVersion::GetECBlocksForLevel( - CBC_QRCoderErrorCorrectionLevel* ecLevel) { - return (CBC_QRCoderECBlocks*)m_ecBlocks[ecLevel->Ordinal()]; -} -CBC_QRCoderVersion* CBC_QRCoderVersion::GetProvisionalVersionForDimension( - int32_t dimension, - int32_t& e) { - if ((dimension % 4) != 1) { - e = BCExceptionRead; - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - } - CBC_QRCoderVersion* qcv = GetVersionForNumber((dimension - 17) >> 2, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - return qcv; -} -CBC_QRCoderVersion* CBC_QRCoderVersion::DecodeVersionInformation( - int32_t versionBits, - int32_t& e) { - int32_t bestDifference = FXSYS_IntMax; - int32_t bestVersion = 0; - for (int32_t i = 0; i < 34; i++) { - int32_t targetVersion = VERSION_DECODE_INFO[i]; - if (targetVersion == versionBits) { - CBC_QRCoderVersion* qcv = GetVersionForNumber(i + 7, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - return qcv; - } - int32_t bitsDifference = CBC_QRCoderFormatInformation::NumBitsDiffering( - versionBits, targetVersion); - if (bitsDifference < bestDifference) { - bestVersion = i + 7; - bestDifference = bitsDifference; - } - } - if (bestDifference <= 3) { - CBC_QRCoderVersion* qcv = GetVersionForNumber(bestVersion, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - return qcv; - } - return NULL; -} -CBC_CommonBitMatrix* CBC_QRCoderVersion::BuildFunctionPattern(int32_t& e) { - int32_t dimension = GetDimensionForVersion(); - CBC_CommonBitMatrix* bitMatrix = new CBC_CommonBitMatrix(); - bitMatrix->Init(dimension); - bitMatrix->SetRegion(0, 0, 9, 9, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - bitMatrix->SetRegion(dimension - 8, 0, 8, 9, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - bitMatrix->SetRegion(0, dimension - 8, 9, 8, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - int32_t max = m_alignmentPatternCenters.GetSize(); - for (int32_t x = 0; x < max; x++) { - int32_t i = m_alignmentPatternCenters[x] - 2; - for (int32_t y = 0; y < max; y++) { - if ((x == 0 && (y == 0 || y == max - 1)) || (x == max - 1 && y == 0)) { - continue; - } - bitMatrix->SetRegion(m_alignmentPatternCenters[y] - 2, i, 5, 5, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - } - } - bitMatrix->SetRegion(6, 9, 1, dimension - 17, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - bitMatrix->SetRegion(9, 6, dimension - 17, 1, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - if (m_versionNumber > 6) { - bitMatrix->SetRegion(dimension - 11, 0, 3, 6, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - bitMatrix->SetRegion(0, dimension - 11, 6, 3, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - } - return bitMatrix; -} -CBC_QRCoderVersion* CBC_QRCoderVersion::GetVersionForNumber( - int32_t versionNumber, - int32_t& e) { - if (VERSION->GetSize() == 0) { - VERSION->Add(new CBC_QRCoderVersion( - 1, new CBC_QRCoderECBlocks(7, new CBC_QRCoderECB(1, 19)), - new CBC_QRCoderECBlocks(10, new CBC_QRCoderECB(1, 16)), - new CBC_QRCoderECBlocks(13, new CBC_QRCoderECB(1, 13)), - new CBC_QRCoderECBlocks(17, new CBC_QRCoderECB(1, 9)))); - VERSION->Add(new CBC_QRCoderVersion( - 2, new CBC_QRCoderECBlocks(10, new CBC_QRCoderECB(1, 34)), - new CBC_QRCoderECBlocks(16, new CBC_QRCoderECB(1, 28)), - new CBC_QRCoderECBlocks(22, new CBC_QRCoderECB(1, 22)), - new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(1, 16)))); - VERSION->Add(new CBC_QRCoderVersion( - 3, new CBC_QRCoderECBlocks(15, new CBC_QRCoderECB(1, 55)), - new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(1, 44)), - new CBC_QRCoderECBlocks(18, new CBC_QRCoderECB(2, 17)), - new CBC_QRCoderECBlocks(22, new CBC_QRCoderECB(2, 13)))); - VERSION->Add(new CBC_QRCoderVersion( - 4, new CBC_QRCoderECBlocks(20, new CBC_QRCoderECB(1, 80)), - new CBC_QRCoderECBlocks(18, new CBC_QRCoderECB(2, 32)), - new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(2, 24)), - new CBC_QRCoderECBlocks(16, new CBC_QRCoderECB(4, 9)))); - VERSION->Add(new CBC_QRCoderVersion( - 5, new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(1, 108)), - new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(2, 43)), - new CBC_QRCoderECBlocks(18, new CBC_QRCoderECB(2, 15), - new CBC_QRCoderECB(2, 16)), - new CBC_QRCoderECBlocks(22, new CBC_QRCoderECB(2, 11), - new CBC_QRCoderECB(2, 12)))); - VERSION->Add(new CBC_QRCoderVersion( - 6, new CBC_QRCoderECBlocks(18, new CBC_QRCoderECB(2, 68)), - new CBC_QRCoderECBlocks(16, new CBC_QRCoderECB(4, 27)), - new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(4, 19)), - new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(4, 15)))); - VERSION->Add(new CBC_QRCoderVersion( - 7, new CBC_QRCoderECBlocks(20, new CBC_QRCoderECB(2, 78)), - new CBC_QRCoderECBlocks(18, new CBC_QRCoderECB(4, 31)), - new CBC_QRCoderECBlocks(18, new CBC_QRCoderECB(2, 14), - new CBC_QRCoderECB(4, 15)), - new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(4, 13), - new CBC_QRCoderECB(1, 14)))); - VERSION->Add(new CBC_QRCoderVersion( - 8, new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(2, 97)), - new CBC_QRCoderECBlocks(22, new CBC_QRCoderECB(2, 38), - new CBC_QRCoderECB(2, 39)), - new CBC_QRCoderECBlocks(22, new CBC_QRCoderECB(4, 18), - new CBC_QRCoderECB(2, 19)), - new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(4, 14), - new CBC_QRCoderECB(2, 15)))); - VERSION->Add(new CBC_QRCoderVersion( - 9, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(2, 116)), - new CBC_QRCoderECBlocks(22, new CBC_QRCoderECB(3, 36), - new CBC_QRCoderECB(2, 37)), - new CBC_QRCoderECBlocks(20, new CBC_QRCoderECB(4, 16), - new CBC_QRCoderECB(4, 17)), - new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(4, 12), - new CBC_QRCoderECB(4, 13)))); - VERSION->Add(new CBC_QRCoderVersion( - 10, new CBC_QRCoderECBlocks(18, new CBC_QRCoderECB(2, 68), - new CBC_QRCoderECB(2, 69)), - new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(4, 43), - new CBC_QRCoderECB(1, 44)), - new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(6, 19), - new CBC_QRCoderECB(2, 20)), - new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(6, 15), - new CBC_QRCoderECB(2, 16)))); - VERSION->Add(new CBC_QRCoderVersion( - 11, new CBC_QRCoderECBlocks(20, new CBC_QRCoderECB(4, 81)), - new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(1, 50), - new CBC_QRCoderECB(4, 51)), - new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(4, 22), - new CBC_QRCoderECB(4, 23)), - new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(3, 12), - new CBC_QRCoderECB(8, 13)))); - VERSION->Add(new CBC_QRCoderVersion( - 12, new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(2, 92), - new CBC_QRCoderECB(2, 93)), - new CBC_QRCoderECBlocks(22, new CBC_QRCoderECB(6, 36), - new CBC_QRCoderECB(2, 37)), - new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(4, 20), - new CBC_QRCoderECB(6, 21)), - new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(7, 14), - new CBC_QRCoderECB(4, 15)))); - VERSION->Add(new CBC_QRCoderVersion( - 13, new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(4, 107)), - new CBC_QRCoderECBlocks(22, new CBC_QRCoderECB(8, 37), - new CBC_QRCoderECB(1, 38)), - new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(8, 20), - new CBC_QRCoderECB(4, 21)), - new CBC_QRCoderECBlocks(22, new CBC_QRCoderECB(12, 11), - new CBC_QRCoderECB(4, 12)))); - VERSION->Add(new CBC_QRCoderVersion( - 14, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(3, 115), - new CBC_QRCoderECB(1, 116)), - new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(4, 40), - new CBC_QRCoderECB(5, 41)), - new CBC_QRCoderECBlocks(20, new CBC_QRCoderECB(11, 16), - new CBC_QRCoderECB(5, 17)), - new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(11, 12), - new CBC_QRCoderECB(5, 13)))); - VERSION->Add(new CBC_QRCoderVersion( - 15, new CBC_QRCoderECBlocks(22, new CBC_QRCoderECB(5, 87), - new CBC_QRCoderECB(1, 88)), - new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(5, 41), - new CBC_QRCoderECB(5, 42)), - new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(5, 24), - new CBC_QRCoderECB(7, 25)), - new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(11, 12), - new CBC_QRCoderECB(7, 13)))); - VERSION->Add(new CBC_QRCoderVersion( - 16, new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(5, 98), - new CBC_QRCoderECB(1, 99)), - new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(7, 45), - new CBC_QRCoderECB(3, 46)), - new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(15, 19), - new CBC_QRCoderECB(2, 20)), - new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(3, 15), - new CBC_QRCoderECB(13, 16)))); - VERSION->Add(new CBC_QRCoderVersion( - 17, new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(1, 107), - new CBC_QRCoderECB(5, 108)), - new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(10, 46), - new CBC_QRCoderECB(1, 47)), - new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(1, 22), - new CBC_QRCoderECB(15, 23)), - new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(2, 14), - new CBC_QRCoderECB(17, 15)))); - VERSION->Add(new CBC_QRCoderVersion( - 18, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(5, 120), - new CBC_QRCoderECB(1, 121)), - new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(9, 43), - new CBC_QRCoderECB(4, 44)), - new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(17, 22), - new CBC_QRCoderECB(1, 23)), - new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(2, 14), - new CBC_QRCoderECB(19, 15)))); - VERSION->Add(new CBC_QRCoderVersion( - 19, new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(3, 113), - new CBC_QRCoderECB(4, 114)), - new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(3, 44), - new CBC_QRCoderECB(11, 45)), - new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(17, 21), - new CBC_QRCoderECB(4, 22)), - new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(9, 13), - new CBC_QRCoderECB(16, 14)))); - VERSION->Add(new CBC_QRCoderVersion( - 20, new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(3, 107), - new CBC_QRCoderECB(5, 108)), - new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(3, 41), - new CBC_QRCoderECB(13, 42)), - new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(15, 24), - new CBC_QRCoderECB(5, 25)), - new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(15, 15), - new CBC_QRCoderECB(10, 16)))); - VERSION->Add(new CBC_QRCoderVersion( - 21, new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(4, 116), - new CBC_QRCoderECB(4, 117)), - new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(17, 42)), - new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(17, 22), - new CBC_QRCoderECB(6, 23)), - new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(19, 16), - new CBC_QRCoderECB(6, 17)))); - VERSION->Add(new CBC_QRCoderVersion( - 22, new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(2, 111), - new CBC_QRCoderECB(7, 112)), - new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(17, 46)), - new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(7, 24), - new CBC_QRCoderECB(16, 25)), - new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(34, 13)))); - VERSION->Add(new CBC_QRCoderVersion( - 23, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(4, 121), - new CBC_QRCoderECB(5, 122)), - new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(4, 47), - new CBC_QRCoderECB(14, 48)), - new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(11, 24), - new CBC_QRCoderECB(14, 25)), - new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(16, 15), - new CBC_QRCoderECB(14, 16)))); - VERSION->Add(new CBC_QRCoderVersion( - 24, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(6, 117), - new CBC_QRCoderECB(4, 118)), - new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(6, 45), - new CBC_QRCoderECB(14, 46)), - new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(11, 24), - new CBC_QRCoderECB(16, 25)), - new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(30, 16), - new CBC_QRCoderECB(2, 17)))); - VERSION->Add(new CBC_QRCoderVersion( - 25, new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(8, 106), - new CBC_QRCoderECB(4, 107)), - new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(8, 47), - new CBC_QRCoderECB(13, 48)), - new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(7, 24), - new CBC_QRCoderECB(22, 25)), - new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(22, 15), - new CBC_QRCoderECB(13, 16)))); - VERSION->Add(new CBC_QRCoderVersion( - 26, new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(10, 114), - new CBC_QRCoderECB(2, 115)), - new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(19, 46), - new CBC_QRCoderECB(4, 47)), - new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(28, 22), - new CBC_QRCoderECB(6, 23)), - new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(33, 16), - new CBC_QRCoderECB(4, 17)))); - VERSION->Add(new CBC_QRCoderVersion( - 27, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(8, 122), - new CBC_QRCoderECB(4, 123)), - new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(22, 45), - new CBC_QRCoderECB(3, 46)), - new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(8, 23), - new CBC_QRCoderECB(26, 24)), - new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(12, 15), - new CBC_QRCoderECB(28, 16)))); - VERSION->Add(new CBC_QRCoderVersion( - 28, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(3, 117), - new CBC_QRCoderECB(10, 118)), - new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(3, 45), - new CBC_QRCoderECB(23, 46)), - new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(4, 24), - new CBC_QRCoderECB(31, 25)), - new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(11, 15), - new CBC_QRCoderECB(31, 16)))); - VERSION->Add(new CBC_QRCoderVersion( - 29, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(7, 116), - new CBC_QRCoderECB(7, 117)), - new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(21, 45), - new CBC_QRCoderECB(7, 46)), - new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(1, 23), - new CBC_QRCoderECB(37, 24)), - new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(19, 15), - new CBC_QRCoderECB(26, 16)))); - VERSION->Add(new CBC_QRCoderVersion( - 30, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(5, 115), - new CBC_QRCoderECB(10, 116)), - new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(19, 47), - new CBC_QRCoderECB(10, 48)), - new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(15, 24), - new CBC_QRCoderECB(25, 25)), - new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(23, 15), - new CBC_QRCoderECB(25, 16)))); - VERSION->Add(new CBC_QRCoderVersion( - 31, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(13, 115), - new CBC_QRCoderECB(3, 116)), - new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(2, 46), - new CBC_QRCoderECB(29, 47)), - new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(42, 24), - new CBC_QRCoderECB(1, 25)), - new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(23, 15), - new CBC_QRCoderECB(28, 16)))); - VERSION->Add(new CBC_QRCoderVersion( - 32, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(17, 115)), - new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(10, 46), - new CBC_QRCoderECB(23, 47)), - new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(10, 24), - new CBC_QRCoderECB(35, 25)), - new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(19, 15), - new CBC_QRCoderECB(35, 16)))); - VERSION->Add(new CBC_QRCoderVersion( - 33, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(17, 115), - new CBC_QRCoderECB(1, 116)), - new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(14, 46), - new CBC_QRCoderECB(21, 47)), - new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(29, 24), - new CBC_QRCoderECB(19, 25)), - new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(11, 15), - new CBC_QRCoderECB(46, 16)))); - VERSION->Add(new CBC_QRCoderVersion( - 34, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(13, 115), - new CBC_QRCoderECB(6, 116)), - new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(14, 46), - new CBC_QRCoderECB(23, 47)), - new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(44, 24), - new CBC_QRCoderECB(7, 25)), - new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(59, 16), - new CBC_QRCoderECB(1, 17)))); - VERSION->Add(new CBC_QRCoderVersion( - 35, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(12, 121), - new CBC_QRCoderECB(7, 122)), - new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(12, 47), - new CBC_QRCoderECB(26, 48)), - new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(39, 24), - new CBC_QRCoderECB(14, 25)), - new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(22, 15), - new CBC_QRCoderECB(41, 16)))); - VERSION->Add(new CBC_QRCoderVersion( - 36, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(6, 121), - new CBC_QRCoderECB(14, 122)), - new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(6, 47), - new CBC_QRCoderECB(34, 48)), - new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(46, 24), - new CBC_QRCoderECB(10, 25)), - new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(2, 15), - new CBC_QRCoderECB(64, 16)))); - VERSION->Add(new CBC_QRCoderVersion( - 37, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(17, 122), - new CBC_QRCoderECB(4, 123)), - new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(29, 46), - new CBC_QRCoderECB(14, 47)), - new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(49, 24), - new CBC_QRCoderECB(10, 25)), - new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(24, 15), - new CBC_QRCoderECB(46, 16)))); - VERSION->Add(new CBC_QRCoderVersion( - 38, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(4, 122), - new CBC_QRCoderECB(18, 123)), - new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(13, 46), - new CBC_QRCoderECB(32, 47)), - new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(48, 24), - new CBC_QRCoderECB(14, 25)), - new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(42, 15), - new CBC_QRCoderECB(32, 16)))); - VERSION->Add(new CBC_QRCoderVersion( - 39, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(20, 117), - new CBC_QRCoderECB(4, 118)), - new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(40, 47), - new CBC_QRCoderECB(7, 48)), - new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(43, 24), - new CBC_QRCoderECB(22, 25)), - new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(10, 15), - new CBC_QRCoderECB(67, 16)))); - VERSION->Add(new CBC_QRCoderVersion( - 40, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(19, 118), - new CBC_QRCoderECB(6, 119)), - new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(18, 47), - new CBC_QRCoderECB(31, 48)), - new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(34, 24), - new CBC_QRCoderECB(34, 25)), - new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(20, 15), - new CBC_QRCoderECB(61, 16)))); - } - if (versionNumber < 1 || versionNumber > 40) { - e = BCExceptionIllegalArgument; - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - } - return (CBC_QRCoderVersion*)(*VERSION)[versionNumber - 1]; -} -void CBC_QRCoderVersion::Destroy() { - int32_t i; - for (i = 0; i < VERSION->GetSize(); i++) { - delete ((CBC_QRCoderVersion*)(*VERSION)[i]); - } -} diff --git a/xfa/src/fxbarcode/qrcode/BC_QRCoderVersion.h b/xfa/src/fxbarcode/qrcode/BC_QRCoderVersion.h deleted file mode 100644 index ceb6f91930..0000000000 --- a/xfa/src/fxbarcode/qrcode/BC_QRCoderVersion.h +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_QRCODE_BC_QRCODERVERSION_H_ -#define XFA_SRC_FXBARCODE_QRCODE_BC_QRCODERVERSION_H_ - -#include "core/include/fxcrt/fx_basic.h" - -class CBC_QRCoderECBlocks; -class CBC_CommonBitMatrix; -class CBC_QRCoderErrorCorrectionLevel; - -class CBC_QRCoderVersion { - private: - static const int32_t VERSION_DECODE_INFO[34]; - static CFX_PtrArray* VERSION; - int32_t m_versionNumber; - int32_t m_totalCodeWords; - CFX_Int32Array m_alignmentPatternCenters; - CFX_PtrArray m_ecBlocks; - - CBC_QRCoderVersion(); - CBC_QRCoderVersion(int32_t versionNumber, - CBC_QRCoderECBlocks* ecBlocks1, - CBC_QRCoderECBlocks* ecBlocks2, - CBC_QRCoderECBlocks* ecBlocks3, - CBC_QRCoderECBlocks* ecBlocks4); - - public: - virtual ~CBC_QRCoderVersion(); - static void Initialize(); - static void Finalize(); - - int32_t GetVersionNumber(); - int32_t GetTotalCodeWords(); - int32_t GetDimensionForVersion(); - CBC_CommonBitMatrix* BuildFunctionPattern(int32_t& e); - CFX_Int32Array* GetAlignmentPatternCenters(); - CBC_QRCoderECBlocks* GetECBlocksForLevel( - CBC_QRCoderErrorCorrectionLevel* ecLevel); - static CBC_QRCoderVersion* GetVersionForNumber(int32_t versionNumber, - int32_t& e); - static CBC_QRCoderVersion* GetProvisionalVersionForDimension( - int32_t dimension, - int32_t& e); - static CBC_QRCoderVersion* DecodeVersionInformation(int32_t versionBits, - int32_t& e); - static void Destroy(); -}; - -#endif // XFA_SRC_FXBARCODE_QRCODE_BC_QRCODERVERSION_H_ diff --git a/xfa/src/fxbarcode/qrcode/BC_QRDataBlock.cpp b/xfa/src/fxbarcode/qrcode/BC_QRDataBlock.cpp deleted file mode 100644 index 185e16c5b7..0000000000 --- a/xfa/src/fxbarcode/qrcode/BC_QRDataBlock.cpp +++ /dev/null @@ -1,111 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2007 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/qrcode/BC_QRDataBlock.h" - -#include - -#include "xfa/src/fxbarcode/qrcode/BC_QRCoderECB.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRCoderECBlocks.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRCoderVersion.h" -#include "xfa/src/fxbarcode/utils.h" - -CBC_QRDataBlock::CBC_QRDataBlock(int32_t numDataCodewords, - CFX_ByteArray* codewords) - : m_numDataCodewords(numDataCodewords), m_codewords(codewords) {} -CBC_QRDataBlock::~CBC_QRDataBlock() { - delete m_codewords; -} -int32_t CBC_QRDataBlock::GetNumDataCodewords() { - return m_numDataCodewords; -} -CFX_ByteArray* CBC_QRDataBlock::GetCodewords() { - return m_codewords; -} -CFX_PtrArray* CBC_QRDataBlock::GetDataBlocks( - CFX_ByteArray* rawCodewords, - CBC_QRCoderVersion* version, - CBC_QRCoderErrorCorrectionLevel* ecLevel, - int32_t& e) { - if (rawCodewords->GetSize() != version->GetTotalCodeWords()) { - e = BCExceptionIllegalArgument; - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - } - CBC_QRCoderECBlocks* ecBlocks = version->GetECBlocksForLevel(ecLevel); - int32_t totalBlocks = 0; - CFX_PtrArray* ecBlockArray = ecBlocks->GetECBlocks(); - int32_t i = 0; - for (i = 0; i < ecBlockArray->GetSize(); i++) { - totalBlocks += ((CBC_QRCoderECB*)(*ecBlockArray)[i])->GetCount(); - } - std::unique_ptr result(new CFX_PtrArray()); - result->SetSize(totalBlocks); - int32_t numResultBlocks = 0; - for (int32_t j = 0; j < ecBlockArray->GetSize(); j++) { - CBC_QRCoderECB* ecBlock = (CBC_QRCoderECB*)(*ecBlockArray)[j]; - for (int32_t k = 0; k < ecBlock->GetCount(); k++) { - int32_t numDataCodewords = ecBlock->GetDataCodeWords(); - int32_t numBlockCodewords = - ecBlocks->GetECCodeWordsPerBlock() + numDataCodewords; - CFX_ByteArray* bytearray = new CFX_ByteArray(); - bytearray->SetSize(numBlockCodewords); - (*result)[numResultBlocks++] = - new CBC_QRDataBlock(numDataCodewords, bytearray); - } - } - int32_t shorterBlocksTotalCodewords = - ((CBC_QRDataBlock*)(*result)[0])->m_codewords->GetSize(); - int32_t longerBlocksStartAt = result->GetSize() - 1; - while (longerBlocksStartAt >= 0) { - int32_t numCodewords = ((CBC_QRDataBlock*)(*result)[longerBlocksStartAt]) - ->m_codewords->GetSize(); - if (numCodewords == shorterBlocksTotalCodewords) { - break; - } - longerBlocksStartAt--; - } - longerBlocksStartAt++; - int32_t shorterBlocksNumDataCodewords = - shorterBlocksTotalCodewords - ecBlocks->GetECCodeWordsPerBlock(); - int32_t rawCodewordsOffset = 0; - int32_t x = 0; - for (int32_t k = 0; k < shorterBlocksNumDataCodewords; k++) { - for (x = 0; x < numResultBlocks; x++) { - (*(((CBC_QRDataBlock*)(*result)[x])->m_codewords))[k] = - (*rawCodewords)[rawCodewordsOffset++]; - } - } - for (x = longerBlocksStartAt; x < numResultBlocks; x++) { - (*(((CBC_QRDataBlock*)(*result)[x]) - ->m_codewords))[shorterBlocksNumDataCodewords] = - (*rawCodewords)[rawCodewordsOffset++]; - } - int32_t max = ((CBC_QRDataBlock*)(*result)[0])->m_codewords->GetSize(); - for (i = shorterBlocksNumDataCodewords; i < max; i++) { - for (int32_t y = 0; y < numResultBlocks; y++) { - int32_t iOffset = y < longerBlocksStartAt ? i : i + 1; - (*(((CBC_QRDataBlock*)(*result)[y])->m_codewords))[iOffset] = - (*rawCodewords)[rawCodewordsOffset++]; - } - } - return result.release(); -} diff --git a/xfa/src/fxbarcode/qrcode/BC_QRDataBlock.h b/xfa/src/fxbarcode/qrcode/BC_QRDataBlock.h deleted file mode 100644 index de53ca49d4..0000000000 --- a/xfa/src/fxbarcode/qrcode/BC_QRDataBlock.h +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_QRCODE_BC_QRDATABLOCK_H_ -#define XFA_SRC_FXBARCODE_QRCODE_BC_QRDATABLOCK_H_ - -#include "core/include/fxcrt/fx_basic.h" - -class CBC_QRCoderVersion; -class CBC_QRCoderErrorCorrectionLevel; -class CBC_QRDataBlock { - private: - int32_t m_numDataCodewords; - CFX_ByteArray* m_codewords; - CBC_QRDataBlock(int32_t numDataCodewords, CFX_ByteArray* codewords); - - public: - virtual ~CBC_QRDataBlock(); - int32_t GetNumDataCodewords(); - CFX_ByteArray* GetCodewords(); - static CFX_PtrArray* GetDataBlocks(CFX_ByteArray* rawCodewords, - CBC_QRCoderVersion* version, - CBC_QRCoderErrorCorrectionLevel* ecLevel, - int32_t& e); -}; - -#endif // XFA_SRC_FXBARCODE_QRCODE_BC_QRDATABLOCK_H_ diff --git a/xfa/src/fxbarcode/qrcode/BC_QRDataMask.cpp b/xfa/src/fxbarcode/qrcode/BC_QRDataMask.cpp deleted file mode 100644 index a5a8a3a73b..0000000000 --- a/xfa/src/fxbarcode/qrcode/BC_QRDataMask.cpp +++ /dev/null @@ -1,118 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2007 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/common/BC_CommonBitMatrix.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRDataMask.h" -#include "xfa/src/fxbarcode/utils.h" - -static int32_t N_DATA_MASKS = 0; -CFX_PtrArray* CBC_QRDataMask::DATA_MASKS = NULL; - -void CBC_QRDataMask::Initialize() { - DATA_MASKS = new CFX_PtrArray(); - N_DATA_MASKS = BuildDataMasks(); -} -void CBC_QRDataMask::Finalize() { - Destroy(); - delete DATA_MASKS; -} -void CBC_QRDataMask::Destroy() { - int32_t i; - for (i = 0; i < N_DATA_MASKS; i++) { - CBC_QRDataMask* p = (CBC_QRDataMask*)(*DATA_MASKS)[i]; - if (p) { - delete p; - } - } -} -void CBC_QRDataMask::UnmaskBitMatirx(CBC_CommonBitMatrix* bits, - int32_t dimension) { - for (int32_t i = 0; i < dimension; i++) { - for (int32_t j = 0; j < dimension; j++) { - if (IsMasked(i, j)) { - bits->Flip(j, i); - } - } - } -} -CBC_QRDataMask* CBC_QRDataMask::ForReference(int32_t reference, int32_t& e) { - if (reference < 0 || reference > 7) { - e = BCExceptionReferenceMustBeBetween0And7; - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - } - return (CBC_QRDataMask*)(*DATA_MASKS)[reference]; -} -class DataMask000 : public CBC_QRDataMask { - public: - FX_BOOL IsMasked(int32_t x, int32_t y) { return ((x + y) % 2) == 0; } -}; -class DataMask001 : public CBC_QRDataMask { - public: - FX_BOOL IsMasked(int32_t x, int32_t y) { return (x % 2) == 0; } -}; -class DataMask010 : public CBC_QRDataMask { - public: - FX_BOOL IsMasked(int32_t x, int32_t y) { return y % 3 == 0; } -}; -class DataMask011 : public CBC_QRDataMask { - public: - FX_BOOL IsMasked(int32_t x, int32_t y) { return (x + y) % 3 == 0; } -}; -class DataMask100 : public CBC_QRDataMask { - public: - FX_BOOL IsMasked(int32_t x, int32_t y) { - return (((x >> 1) + (y / 3)) % 2) == 0; - } -}; -class DataMask101 : public CBC_QRDataMask { - public: - FX_BOOL IsMasked(int32_t x, int32_t y) { - size_t temp = x * y; - return (temp % 2) + (temp % 3) == 0; - } -}; -class DataMask110 : public CBC_QRDataMask { - public: - FX_BOOL IsMasked(int32_t x, int32_t y) { - size_t temp = x * y; - return (((temp % 2) + (temp % 3)) % 2) == 0; - } -}; -class DataMask111 : public CBC_QRDataMask { - public: - FX_BOOL IsMasked(int32_t x, int32_t y) { - return ((((x + y) % 2) + ((x * y) % 3)) % 2) == 0; - } -}; -int32_t CBC_QRDataMask::BuildDataMasks() { - DATA_MASKS->Add(new DataMask000); - DATA_MASKS->Add(new DataMask001); - DATA_MASKS->Add(new DataMask010); - DATA_MASKS->Add(new DataMask011); - DATA_MASKS->Add(new DataMask100); - DATA_MASKS->Add(new DataMask101); - DATA_MASKS->Add(new DataMask110); - DATA_MASKS->Add(new DataMask111); - return DATA_MASKS->GetSize(); -} -CBC_QRDataMask::CBC_QRDataMask() {} -CBC_QRDataMask::~CBC_QRDataMask() {} diff --git a/xfa/src/fxbarcode/qrcode/BC_QRDataMask.h b/xfa/src/fxbarcode/qrcode/BC_QRDataMask.h deleted file mode 100644 index cbf8d47a0e..0000000000 --- a/xfa/src/fxbarcode/qrcode/BC_QRDataMask.h +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_QRCODE_BC_QRDATAMASK_H_ -#define XFA_SRC_FXBARCODE_QRCODE_BC_QRDATAMASK_H_ - -#include "core/include/fxcrt/fx_basic.h" - -class CBC_CommonBitMatrix; - -class CBC_QRDataMask { - public: - static CFX_PtrArray* DATA_MASKS; - CBC_QRDataMask(); - virtual ~CBC_QRDataMask(); - static void Initialize(); - static void Finalize(); - virtual FX_BOOL IsMasked(int32_t i, int32_t j) = 0; - void UnmaskBitMatirx(CBC_CommonBitMatrix* bits, int32_t dimension); - static CBC_QRDataMask* ForReference(int32_t reference, int32_t& e); - static int32_t BuildDataMasks(); - static void Destroy(); -}; - -#endif // XFA_SRC_FXBARCODE_QRCODE_BC_QRDATAMASK_H_ diff --git a/xfa/src/fxbarcode/qrcode/BC_QRDecodedBitStreamParser.cpp b/xfa/src/fxbarcode/qrcode/BC_QRDecodedBitStreamParser.cpp deleted file mode 100644 index ed97280932..0000000000 --- a/xfa/src/fxbarcode/qrcode/BC_QRDecodedBitStreamParser.cpp +++ /dev/null @@ -1,273 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2007 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/BC_UtilCodingConvert.h" -#include "xfa/src/fxbarcode/common/BC_CommonBitSource.h" -#include "xfa/src/fxbarcode/common/BC_CommonCharacterSetECI.h" -#include "xfa/src/fxbarcode/common/BC_CommonDecoderResult.h" -#include "xfa/src/fxbarcode/common/BC_CommonECI.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRCoderMode.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRDecodedBitStreamParser.h" - -const FX_CHAR* CBC_QRDecodedBitStreamParser::UTF_8 = "utf8"; -const FX_CHAR CBC_QRDecodedBitStreamParser::ALPHANUMERIC_CHARS[45] = { - '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', - 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', - 'U', 'V', 'W', 'X', 'Y', 'Z', ' ', '$', '%', '*', '+', '-', '.', '/', ':'}; - -CBC_QRDecodedBitStreamParser::CBC_QRDecodedBitStreamParser() {} -CBC_QRDecodedBitStreamParser::~CBC_QRDecodedBitStreamParser() {} -CBC_CommonDecoderResult* CBC_QRDecodedBitStreamParser::Decode( - CFX_ByteArray* bytes, - CBC_QRCoderVersion* version, - CBC_QRCoderErrorCorrectionLevel* ecLevel, - int32_t byteModeDecode, - int32_t& e) { - CBC_CommonBitSource bits(bytes); - CFX_ByteString result; - CBC_CommonCharacterSetECI* currentCharacterSetECI = NULL; - FX_BOOL fc1Infact = FALSE; - CFX_Int32Array byteSegments; - CBC_QRCoderMode* mode = NULL; - do { - if (bits.Available() < 4) { - mode = CBC_QRCoderMode::sTERMINATOR; - } else { - int32_t iTemp1 = bits.ReadBits(4, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - mode = CBC_QRCoderMode::ForBits(iTemp1, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - if (mode == NULL) { - e = BCExceptionUnSupportMode; - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - } - } - if (!(mode == CBC_QRCoderMode::sTERMINATOR)) { - if (mode == CBC_QRCoderMode::sFNC1_FIRST_POSITION || - mode == CBC_QRCoderMode::sFNC1_SECOND_POSITION) { - fc1Infact = TRUE; - } else if (mode == CBC_QRCoderMode::sSTRUCTURED_APPEND) { - bits.ReadBits(16, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - } else if (mode == CBC_QRCoderMode::sECI) { - int32_t value = ParseECIValue(&bits, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - currentCharacterSetECI = - CBC_CommonCharacterSetECI::GetCharacterSetECIByValue(value); - } else { - if (mode == CBC_QRCoderMode::sGBK) { - bits.ReadBits(4, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - } - int32_t numBits = mode->GetCharacterCountBits(version, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - int32_t count = bits.ReadBits(numBits, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - if (mode == CBC_QRCoderMode::sNUMERIC) { - DecodeNumericSegment(&bits, result, count, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - } else if (mode == CBC_QRCoderMode::sALPHANUMERIC) { - DecodeAlphanumericSegment(&bits, result, count, fc1Infact, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - } else if (mode == CBC_QRCoderMode::sBYTE) { - DecodeByteSegment(&bits, result, count, currentCharacterSetECI, - &byteSegments, byteModeDecode, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - } else if (mode == CBC_QRCoderMode::sGBK) { - DecodeGBKSegment(&bits, result, count, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - } else if (mode == CBC_QRCoderMode::sKANJI) { - DecodeKanjiSegment(&bits, result, count, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - } else { - e = BCExceptionUnSupportMode; - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - } - } - } - } while (!(mode == CBC_QRCoderMode::sTERMINATOR)); - CBC_CommonDecoderResult* tempCd = new CBC_CommonDecoderResult(); - tempCd->Init(*bytes, result, byteSegments, ecLevel, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - return tempCd; -} -void CBC_QRDecodedBitStreamParser::DecodeGBKSegment(CBC_CommonBitSource* bits, - CFX_ByteString& result, - int32_t count, - int32_t& e) { - CFX_ByteString buffer; - while (count > 0) { - int32_t twoBytes = bits->ReadBits(13, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - int32_t assembledTwoBytes = ((twoBytes / 0x060) << 8) | (twoBytes % 0x060); - if (assembledTwoBytes <= 0x0095d) { - assembledTwoBytes += 0x0a1a1; - } else { - assembledTwoBytes += 0x0a6a1; - } - buffer += (uint8_t)(assembledTwoBytes >> 8); - buffer += (uint8_t)assembledTwoBytes; - count--; - } - CBC_UtilCodingConvert::LocaleToUtf8(buffer, result); -} -void CBC_QRDecodedBitStreamParser::DecodeKanjiSegment(CBC_CommonBitSource* bits, - CFX_ByteString& result, - int32_t count, - int32_t& e) { - CFX_ByteString buffer; - while (count > 0) { - int32_t twoBytes = bits->ReadBits(13, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - int32_t assembledTwoBytes = ((twoBytes / 0x0c0) << 8) | (twoBytes % 0x0c0); - if (assembledTwoBytes <= 0x01f00) { - assembledTwoBytes += 0x08140; - } else { - assembledTwoBytes += 0x0c140; - } - buffer += (uint8_t)(assembledTwoBytes >> 8); - buffer += (uint8_t)assembledTwoBytes; - count--; - } - CBC_UtilCodingConvert::LocaleToUtf8(buffer, result); -} -void CBC_QRDecodedBitStreamParser::DecodeByteSegment( - CBC_CommonBitSource* bits, - CFX_ByteString& result, - int32_t count, - CBC_CommonCharacterSetECI* currentCharacterSetECI, - CFX_Int32Array* byteSegments, - int32_t byteModeDecode, - int32_t& e) { - if (count < 0) { - e = BCExceptionNotFound; - BC_EXCEPTION_CHECK_ReturnVoid(e); - } - if ((count << 3) > bits->Available()) { - e = BCExceptionRead; - BC_EXCEPTION_CHECK_ReturnVoid(e); - } - uint8_t* readBytes = FX_Alloc(uint8_t, count); - FXSYS_memset(readBytes, 0x00, count); - for (int32_t i = 0; i < count; i++) { - readBytes[i] = (uint8_t)bits->ReadBits(8, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - } - CFX_ByteString bs(readBytes, count); - result += bs; - FX_Free(readBytes); -} -void CBC_QRDecodedBitStreamParser::DecodeAlphanumericSegment( - CBC_CommonBitSource* bits, - CFX_ByteString& result, - int32_t count, - FX_BOOL fac1InEffect, - int32_t& e) { - int32_t start = result.GetLength(); - while (count > 1) { - int32_t nextTwoCharsBits = bits->ReadBits(11, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - BC_FX_ByteString_Append(result, 1, - ALPHANUMERIC_CHARS[nextTwoCharsBits / 45]); - BC_FX_ByteString_Append(result, 1, - ALPHANUMERIC_CHARS[nextTwoCharsBits % 45]); - count -= 2; - } - if (count == 1) { - int32_t itemp = bits->ReadBits(6, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - BC_FX_ByteString_Append(result, 1, ALPHANUMERIC_CHARS[itemp]); - } - if (fac1InEffect) { - for (int32_t i = start; i < result.GetLength(); i++) { - if (result[i] == '%') { - if ((i < result.GetLength() - 1) && result[i + 1] == '%') { - result.Delete(i + 1, 1); - } else { - result.SetAt(i, (FX_CHAR)0x1d); - } - } - } - } -} -void CBC_QRDecodedBitStreamParser::DecodeNumericSegment( - CBC_CommonBitSource* bits, - CFX_ByteString& result, - int32_t count, - int32_t& e) { - while (count >= 3) { - int32_t threeDigitsBits = bits->ReadBits(10, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - if (threeDigitsBits >= 1000) { - e = BCExceptionRead; - BC_EXCEPTION_CHECK_ReturnVoid(e); - } - BC_FX_ByteString_Append(result, 1, - ALPHANUMERIC_CHARS[threeDigitsBits / 100]); - BC_FX_ByteString_Append(result, 1, - ALPHANUMERIC_CHARS[(threeDigitsBits / 10) % 10]); - BC_FX_ByteString_Append(result, 1, - ALPHANUMERIC_CHARS[threeDigitsBits % 10]); - count -= 3; - } - if (count == 2) { - int32_t twoDigitBits = bits->ReadBits(7, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - if (twoDigitBits >= 100) { - e = BCExceptionRead; - BC_EXCEPTION_CHECK_ReturnVoid(e); - } - BC_FX_ByteString_Append(result, 1, ALPHANUMERIC_CHARS[twoDigitBits / 10]); - BC_FX_ByteString_Append(result, 1, ALPHANUMERIC_CHARS[twoDigitBits % 10]); - } else if (count == 1) { - int32_t digitBits = bits->ReadBits(4, e); - BC_EXCEPTION_CHECK_ReturnVoid(e); - if (digitBits >= 10) { - e = BCExceptionRead; - BC_EXCEPTION_CHECK_ReturnVoid(e); - } - BC_FX_ByteString_Append(result, 1, ALPHANUMERIC_CHARS[digitBits]); - } -} -const CFX_ByteString CBC_QRDecodedBitStreamParser::GuessEncoding( - CFX_ByteArray* bytes) { - return *UTF_8; -} -int32_t CBC_QRDecodedBitStreamParser::ParseECIValue(CBC_CommonBitSource* bits, - int32_t& e) { - int32_t firstByte = bits->ReadBits(8, e); - BC_EXCEPTION_CHECK_ReturnValue(e, 0); - if ((firstByte & 0x80) == 0) { - return firstByte & 0x7f; - } else if ((firstByte & 0xc0) == 0x80) { - int32_t secondByte = bits->ReadBits(8, e); - BC_EXCEPTION_CHECK_ReturnValue(e, 0); - return ((firstByte & 0x3f) << 8) | secondByte; - } else if ((firstByte & 0xe0) == 0xc0) { - int32_t secondThirdByte = bits->ReadBits(16, e); - BC_EXCEPTION_CHECK_ReturnValue(e, 0); - return ((firstByte & 0x1f) << 16) | secondThirdByte; - } - e = BCExceptionBadECI; - BC_EXCEPTION_CHECK_ReturnValue(e, 0); - return 0; -} diff --git a/xfa/src/fxbarcode/qrcode/BC_QRDecodedBitStreamParser.h b/xfa/src/fxbarcode/qrcode/BC_QRDecodedBitStreamParser.h deleted file mode 100644 index ca64ab0fb0..0000000000 --- a/xfa/src/fxbarcode/qrcode/BC_QRDecodedBitStreamParser.h +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_QRCODE_BC_QRDECODEDBITSTREAMPARSER_H_ -#define XFA_SRC_FXBARCODE_QRCODE_BC_QRDECODEDBITSTREAMPARSER_H_ - -class CBC_CommonDecoderResult; -class CBC_QRCoderErrorCorrectionLevel; -class CBC_CommonBitSource; -class CBC_QRCoderVersion; -class CBC_CommonCharacterSetECI; -class CBC_QRDecodedBitStreamParser { - private: - static const FX_CHAR ALPHANUMERIC_CHARS[45]; - static const FX_CHAR* UTF_8; - CBC_QRDecodedBitStreamParser(); - - public: - virtual ~CBC_QRDecodedBitStreamParser(); - static CBC_CommonDecoderResult* Decode( - CFX_ByteArray* bytes, - CBC_QRCoderVersion* version, - CBC_QRCoderErrorCorrectionLevel* ecLevel, - int32_t byteModeDecode, - int32_t& e); - - static const CFX_ByteString GuessEncoding(CFX_ByteArray* bytes); - static int32_t ParseECIValue(CBC_CommonBitSource* bits, int32_t& e); - static void DecodeGBKSegment(CBC_CommonBitSource* bits, - CFX_ByteString& result, - int32_t count, - int32_t& e); - static void DecodeKanjiSegment(CBC_CommonBitSource* bits, - CFX_ByteString& result, - int32_t count, - int32_t& e); - static void DecodeNumericSegment(CBC_CommonBitSource* bits, - CFX_ByteString& result, - int32_t count, - int32_t& e); - static void DecodeAlphanumericSegment(CBC_CommonBitSource* bits, - CFX_ByteString& result, - int32_t count, - FX_BOOL fac1InEffect, - int32_t& e); - static void DecodeByteSegment( - CBC_CommonBitSource* bits, - CFX_ByteString& result, - int32_t count, - CBC_CommonCharacterSetECI* currentCharacterSetECI, - CFX_Int32Array* byteSegments, - int32_t byteModeDecode, - int32_t& e); -}; - -#endif // XFA_SRC_FXBARCODE_QRCODE_BC_QRDECODEDBITSTREAMPARSER_H_ diff --git a/xfa/src/fxbarcode/qrcode/BC_QRDetector.cpp b/xfa/src/fxbarcode/qrcode/BC_QRDetector.cpp deleted file mode 100644 index 72ce42fc4c..0000000000 --- a/xfa/src/fxbarcode/qrcode/BC_QRDetector.cpp +++ /dev/null @@ -1,278 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2007 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/qrcode/BC_QRDetector.h" - -#include -#include - -#include "xfa/src/fxbarcode/BC_ResultPoint.h" -#include "xfa/src/fxbarcode/common/BC_CommonBitMatrix.h" -#include "xfa/src/fxbarcode/qrcode/BC_FinderPatternInfo.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRAlignmentPatternFinder.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRCoderVersion.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRDetectorResult.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRFinderPattern.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRFinderPatternFinder.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRGridSampler.h" - -CBC_QRDetector::CBC_QRDetector(CBC_CommonBitMatrix* image) : m_image(image) {} -CBC_QRDetector::~CBC_QRDetector() {} -CBC_QRDetectorResult* CBC_QRDetector::Detect(int32_t hints, int32_t& e) { - CBC_QRFinderPatternFinder finder(m_image); - std::unique_ptr info(finder.Find(hints, e)); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - CBC_QRDetectorResult* qdr = ProcessFinderPatternInfo(info.get(), e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - return qdr; -} -CBC_QRDetectorResult* CBC_QRDetector::ProcessFinderPatternInfo( - CBC_QRFinderPatternInfo* info, - int32_t& e) { - std::unique_ptr topLeft(info->GetTopLeft()); - std::unique_ptr topRight(info->GetTopRight()); - std::unique_ptr bottomLeft(info->GetBottomLeft()); - FX_FLOAT moduleSize = - CalculateModuleSize(topLeft.get(), topRight.get(), bottomLeft.get()); - if (moduleSize < 1.0f) { - e = BCExceptionRead; - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - } - int32_t dimension = ComputeDimension(topLeft.get(), topRight.get(), - bottomLeft.get(), moduleSize, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - CBC_QRCoderVersion* provisionalVersion = - CBC_QRCoderVersion::GetProvisionalVersionForDimension(dimension, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - int32_t modulesBetweenFPCenters = - provisionalVersion->GetDimensionForVersion() - 7; - CBC_QRAlignmentPattern* alignmentPattern = NULL; - if (provisionalVersion->GetAlignmentPatternCenters()->GetSize() > 0) { - FX_FLOAT bottomRightX = - topRight->GetX() - topLeft->GetX() + bottomLeft->GetX(); - FX_FLOAT bottomRightY = - topRight->GetY() - topLeft->GetY() + bottomLeft->GetY(); - FX_FLOAT correctionToTopLeft = - 1.0f - 3.0f / (FX_FLOAT)modulesBetweenFPCenters; - FX_FLOAT xtemp = (topLeft->GetX() + - correctionToTopLeft * (bottomRightX - topLeft->GetX())); - int32_t estAlignmentX = (int32_t)xtemp; - FX_FLOAT ytemp = (topLeft->GetY() + - correctionToTopLeft * (bottomRightY - topLeft->GetY())); - int32_t estAlignmentY = (int32_t)ytemp; - for (int32_t i = 4; i <= 16; i <<= 1) { - CBC_QRAlignmentPattern* temp = FindAlignmentInRegion( - moduleSize, estAlignmentX, estAlignmentY, (FX_FLOAT)i, e); - alignmentPattern = temp; - break; - } - } - CBC_CommonBitMatrix* bits = - SampleGrid(m_image, topLeft.get(), topRight.get(), bottomLeft.get(), - (CBC_ResultPoint*)(alignmentPattern), dimension, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - CFX_PtrArray* points = new CFX_PtrArray; - if (alignmentPattern == NULL) { - points->Add(bottomLeft.release()); - points->Add(topLeft.release()); - points->Add(topRight.release()); - } else { - points->Add(bottomLeft.release()); - points->Add(topLeft.release()); - points->Add(topRight.release()); - points->Add(alignmentPattern); - } - return new CBC_QRDetectorResult(bits, points); -} -CBC_CommonBitMatrix* CBC_QRDetector::SampleGrid( - CBC_CommonBitMatrix* image, - CBC_ResultPoint* topLeft, - CBC_ResultPoint* topRight, - CBC_ResultPoint* bottomLeft, - CBC_ResultPoint* alignmentPattern, - int32_t dimension, - int32_t& e) { - FX_FLOAT dimMinusThree = (FX_FLOAT)dimension - 3.5f; - FX_FLOAT bottomRightX; - FX_FLOAT bottomRightY; - FX_FLOAT sourceBottomRightX; - FX_FLOAT sourceBottomRightY; - if (alignmentPattern) { - bottomRightX = alignmentPattern->GetX(); - bottomRightY = alignmentPattern->GetY(); - sourceBottomRightX = sourceBottomRightY = dimMinusThree - 3.0f; - } else { - bottomRightX = (topRight->GetX() - topLeft->GetX()) + bottomLeft->GetX(); - bottomRightY = (topRight->GetY() - topLeft->GetY()) + bottomLeft->GetY(); - sourceBottomRightX = sourceBottomRightY = dimMinusThree; - } - CBC_QRGridSampler& sampler = CBC_QRGridSampler::GetInstance(); - CBC_CommonBitMatrix* cbm = sampler.SampleGrid( - image, dimension, dimension, 3.5f, 3.5f, dimMinusThree, 3.5f, - sourceBottomRightX, sourceBottomRightY, 3.5f, dimMinusThree, - topLeft->GetX(), topLeft->GetY(), topRight->GetX(), topRight->GetY(), - bottomRightX, bottomRightY, bottomLeft->GetX(), bottomLeft->GetY(), e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - return cbm; -} -int32_t CBC_QRDetector::ComputeDimension(CBC_ResultPoint* topLeft, - CBC_ResultPoint* topRight, - CBC_ResultPoint* bottomLeft, - FX_FLOAT moduleSize, - int32_t& e) { - int32_t tltrCentersDimension = Round( - CBC_QRFinderPatternFinder::Distance(topLeft, topRight) / moduleSize); - int32_t tlblCentersDimension = Round( - CBC_QRFinderPatternFinder::Distance(topLeft, bottomLeft) / moduleSize); - int32_t dimension = ((tltrCentersDimension + tlblCentersDimension) >> 1) + 7; - switch (dimension & 0x03) { - case 0: - dimension++; - break; - case 2: - dimension--; - break; - case 3: { - e = BCExceptionRead; - BC_EXCEPTION_CHECK_ReturnValue(e, 0); - } - } - return dimension; -} -FX_FLOAT CBC_QRDetector::CalculateModuleSize(CBC_ResultPoint* topLeft, - CBC_ResultPoint* topRight, - CBC_ResultPoint* bottomLeft) { - return (CalculateModuleSizeOneWay(topLeft, topRight) + - CalculateModuleSizeOneWay(topLeft, bottomLeft)) / - 2.0f; -} -FX_FLOAT CBC_QRDetector::CalculateModuleSizeOneWay( - CBC_ResultPoint* pattern, - CBC_ResultPoint* otherPattern) { - FX_FLOAT moduleSizeEst1 = SizeOfBlackWhiteBlackRunBothWays( - (int32_t)pattern->GetX(), (int32_t)pattern->GetY(), - (int32_t)otherPattern->GetX(), (int32_t)otherPattern->GetY()); - FX_FLOAT moduleSizeEst2 = SizeOfBlackWhiteBlackRunBothWays( - (int32_t)otherPattern->GetX(), (int32_t)otherPattern->GetY(), - (int32_t)pattern->GetX(), (int32_t)pattern->GetY()); - if (FXSYS_isnan(moduleSizeEst1)) { - return moduleSizeEst2; - } - if (FXSYS_isnan(moduleSizeEst2)) { - return moduleSizeEst1; - } - return (moduleSizeEst1 + moduleSizeEst2) / 14.0f; -} -int32_t CBC_QRDetector::Round(FX_FLOAT d) { - return (int32_t)(d + 0.5f); -} -FX_FLOAT CBC_QRDetector::SizeOfBlackWhiteBlackRunBothWays(int32_t fromX, - int32_t fromY, - int32_t toX, - int32_t toY) { - FX_FLOAT result = SizeOfBlackWhiteBlackRun(fromX, fromY, toX, toY); - int32_t otherToX = fromX - (toX - fromX); - if (otherToX < 0) { - otherToX = -1; - } else if (otherToX >= m_image->GetWidth()) { - otherToX = m_image->GetWidth(); - } - int32_t otherToY = fromY - (toY - fromY); - if (otherToY < 0) { - otherToY = -1; - } else if (otherToY >= m_image->GetHeight()) { - otherToY = m_image->GetHeight(); - } - result += SizeOfBlackWhiteBlackRun(fromX, fromY, otherToX, otherToY); - return result - 1.0f; -} -FX_FLOAT CBC_QRDetector::SizeOfBlackWhiteBlackRun(int32_t fromX, - int32_t fromY, - int32_t toX, - int32_t toY) { - FX_BOOL steep = FXSYS_abs(toY - fromY) > FXSYS_abs(toX - fromX); - if (steep) { - int32_t temp = fromX; - fromX = fromY; - fromY = temp; - temp = toX; - toX = toY; - toY = temp; - } - int32_t dx = FXSYS_abs(toX - fromX); - int32_t dy = FXSYS_abs(toY - fromY); - int32_t error = -dx >> 1; - int32_t ystep = fromY < toY ? 1 : -1; - int32_t xstep = fromX < toX ? 1 : -1; - int32_t state = 0; - for (int32_t x = fromX, y = fromY; x != toX; x += xstep) { - int32_t realX = steep ? y : x; - int32_t realY = steep ? x : y; - if (state == 1) { - if (m_image->Get(realX, realY)) { - state++; - } - } else { - if (!m_image->Get(realX, realY)) { - state++; - } - } - if (state == 3) { - int32_t diffX = x - fromX; - int32_t diffY = y - fromY; - return (FX_FLOAT)sqrt((double)(diffX * diffX + diffY * diffY)); - } - error += dy; - if (error > 0) { - y += ystep; - error -= dx; - } - } - int32_t diffX = toX - fromX; - int32_t diffY = toY - fromY; - return (FX_FLOAT)sqrt((double)(diffX * diffX + diffY * diffY)); -} -CBC_QRAlignmentPattern* CBC_QRDetector::FindAlignmentInRegion( - FX_FLOAT overallEstModuleSize, - int32_t estAlignmentX, - int32_t estAlignmentY, - FX_FLOAT allowanceFactor, - int32_t& e) { - int32_t allowance = (int32_t)(allowanceFactor * overallEstModuleSize); - int32_t alignmentAreaLeftX = std::max(0, estAlignmentX - allowance); - int32_t alignmentAreaRightX = - std::min(m_image->GetWidth() - 1, estAlignmentX + allowance); - if (alignmentAreaRightX - alignmentAreaLeftX < overallEstModuleSize * 3) { - e = BCExceptionRead; - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - } - int32_t alignmentAreaTopY = std::max(0, estAlignmentY - allowance); - int32_t alignmentAreaBottomY = - std::min(m_image->GetHeight() - 1, estAlignmentY + allowance); - CBC_QRAlignmentPatternFinder alignmentFinder( - m_image, alignmentAreaLeftX, alignmentAreaTopY, - alignmentAreaRightX - alignmentAreaLeftX, - alignmentAreaBottomY - alignmentAreaTopY, overallEstModuleSize); - CBC_QRAlignmentPattern* qap = alignmentFinder.Find(e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - return qap; -} diff --git a/xfa/src/fxbarcode/qrcode/BC_QRDetector.h b/xfa/src/fxbarcode/qrcode/BC_QRDetector.h deleted file mode 100644 index 67cbeb44d6..0000000000 --- a/xfa/src/fxbarcode/qrcode/BC_QRDetector.h +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_QRCODE_BC_QRDETECTOR_H_ -#define XFA_SRC_FXBARCODE_QRCODE_BC_QRDETECTOR_H_ - -#include "core/include/fxcrt/fx_basic.h" - -class CBC_ResultPoint; -class CBC_CommonBitMatrix; -class CBC_QRDetectorResult; -class CBC_QRFinderPatternInfo; -class CBC_QRAlignmentPattern; - -class CBC_QRDetector { - private: - CBC_CommonBitMatrix* m_image; - - public: - CBC_QRDetector(CBC_CommonBitMatrix* image); - virtual ~CBC_QRDetector(); - - CBC_CommonBitMatrix* GetImage(); - CBC_QRDetectorResult* Detect(int32_t hints, int32_t& e); - CBC_QRDetectorResult* ProcessFinderPatternInfo(CBC_QRFinderPatternInfo* info, - int32_t& e); - FX_FLOAT CalculateModuleSize(CBC_ResultPoint* topLeft, - CBC_ResultPoint* topRight, - CBC_ResultPoint* bottomLeft); - FX_FLOAT CalculateModuleSizeOneWay(CBC_ResultPoint* pattern, - CBC_ResultPoint* otherPattern); - FX_FLOAT SizeOfBlackWhiteBlackRunBothWays(int32_t fromX, - int32_t fromY, - int32_t toX, - int32_t toY); - FX_FLOAT SizeOfBlackWhiteBlackRun(int32_t fromX, - int32_t fromY, - int32_t toX, - int32_t toY); - CBC_QRAlignmentPattern* FindAlignmentInRegion(FX_FLOAT overallEstModuleSize, - int32_t estAlignmentX, - int32_t estAlignmentY, - FX_FLOAT allowanceFactor, - int32_t& e); - static int32_t Round(FX_FLOAT d); - static int32_t ComputeDimension(CBC_ResultPoint* topLeft, - CBC_ResultPoint* topRight, - CBC_ResultPoint* bottomLeft, - FX_FLOAT moduleSize, - int32_t& e); - static CBC_CommonBitMatrix* SampleGrid(CBC_CommonBitMatrix* image, - CBC_ResultPoint* topLeft, - CBC_ResultPoint* topRight, - CBC_ResultPoint* bottomLeft, - CBC_ResultPoint* alignmentPattern, - int32_t dimension, - int32_t& e); -}; - -#endif // XFA_SRC_FXBARCODE_QRCODE_BC_QRDETECTOR_H_ diff --git a/xfa/src/fxbarcode/qrcode/BC_QRDetectorResult.cpp b/xfa/src/fxbarcode/qrcode/BC_QRDetectorResult.cpp deleted file mode 100644 index df83d35be7..0000000000 --- a/xfa/src/fxbarcode/qrcode/BC_QRDetectorResult.cpp +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2007 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/BC_ResultPoint.h" -#include "xfa/src/fxbarcode/common/BC_CommonBitMatrix.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRDetectorResult.h" - -CBC_QRDetectorResult::CBC_QRDetectorResult(CBC_CommonBitMatrix* bits, - CFX_PtrArray* points) - : m_bits(bits), m_points(points) {} -CBC_QRDetectorResult::~CBC_QRDetectorResult() { - for (int32_t i = 0; i < m_points->GetSize(); i++) { - delete (CBC_ResultPoint*)(*m_points)[i]; - } - m_points->RemoveAll(); - delete m_points; - delete m_bits; -} -CBC_CommonBitMatrix* CBC_QRDetectorResult::GetBits() { - return m_bits; -} -CFX_PtrArray* CBC_QRDetectorResult::GetPoints() { - return m_points; -} diff --git a/xfa/src/fxbarcode/qrcode/BC_QRDetectorResult.h b/xfa/src/fxbarcode/qrcode/BC_QRDetectorResult.h deleted file mode 100644 index e2397db7ef..0000000000 --- a/xfa/src/fxbarcode/qrcode/BC_QRDetectorResult.h +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_QRCODE_BC_QRDETECTORRESULT_H_ -#define XFA_SRC_FXBARCODE_QRCODE_BC_QRDETECTORRESULT_H_ - -#include "core/include/fxcrt/fx_basic.h" - -class CBC_CommonBitMatrix; - -class CBC_QRDetectorResult { - private: - CBC_CommonBitMatrix* m_bits; - CFX_PtrArray* m_points; - - public: - CBC_QRDetectorResult(CBC_CommonBitMatrix* bits, CFX_PtrArray* points); - virtual ~CBC_QRDetectorResult(); - CBC_CommonBitMatrix* GetBits(); - CFX_PtrArray* GetPoints(); -}; - -#endif // XFA_SRC_FXBARCODE_QRCODE_BC_QRDETECTORRESULT_H_ diff --git a/xfa/src/fxbarcode/qrcode/BC_QRFinderPattern.cpp b/xfa/src/fxbarcode/qrcode/BC_QRFinderPattern.cpp deleted file mode 100644 index b4482cae1d..0000000000 --- a/xfa/src/fxbarcode/qrcode/BC_QRFinderPattern.cpp +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2007 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/BC_ResultPoint.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRFinderPattern.h" - -CBC_QRFinderPattern::CBC_QRFinderPattern(FX_FLOAT x, - FX_FLOAT posY, - FX_FLOAT estimatedModuleSize) - : CBC_ResultPoint(x, posY), - m_estimatedModuleSize(estimatedModuleSize), - m_count(1) {} -CBC_QRFinderPattern::~CBC_QRFinderPattern() { - m_count = 0; - m_x = 0.0f; - m_y = 0.0f; - m_estimatedModuleSize = 0.0f; -} -CBC_QRFinderPattern* CBC_QRFinderPattern::Clone() { - CBC_QRFinderPattern* temp = - new CBC_QRFinderPattern(m_x, m_y, m_estimatedModuleSize); - temp->m_count = m_count; - return temp; -} -FX_FLOAT CBC_QRFinderPattern::GetEstimatedModuleSize() { - return m_estimatedModuleSize; -} -int32_t CBC_QRFinderPattern::GetCount() { - return m_count; -} -void CBC_QRFinderPattern::IncrementCount() { - m_count++; -} -FX_BOOL CBC_QRFinderPattern::AboutEquals(FX_FLOAT moduleSize, - FX_FLOAT i, - FX_FLOAT j) { - if ((fabs(i - GetY()) <= moduleSize) && (fabs(j - GetX()) <= moduleSize)) { - FX_FLOAT moduleSizeDiff = fabs(moduleSize - m_estimatedModuleSize); - return (moduleSizeDiff <= 1.0f) || - (moduleSizeDiff / m_estimatedModuleSize <= 1.0f); - } - return false; -} -FX_FLOAT CBC_QRFinderPattern::GetX() { - return m_x; -} -FX_FLOAT CBC_QRFinderPattern::GetY() { - return m_y; -} diff --git a/xfa/src/fxbarcode/qrcode/BC_QRFinderPattern.h b/xfa/src/fxbarcode/qrcode/BC_QRFinderPattern.h deleted file mode 100644 index 3e71034de3..0000000000 --- a/xfa/src/fxbarcode/qrcode/BC_QRFinderPattern.h +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_QRCODE_BC_QRFINDERPATTERN_H_ -#define XFA_SRC_FXBARCODE_QRCODE_BC_QRFINDERPATTERN_H_ - -class CBC_ResultPoint; -class CBC_QRFinderPattern; -class CBC_QRFinderPattern : public CBC_ResultPoint { - private: - FX_FLOAT m_estimatedModuleSize; - int32_t m_count; - - public: - CBC_QRFinderPattern(FX_FLOAT x, FX_FLOAT posY, FX_FLOAT estimatedModuleSize); - virtual ~CBC_QRFinderPattern(); - - int32_t GetCount(); - FX_FLOAT GetX(); - FX_FLOAT GetY(); - FX_FLOAT GetEstimatedModuleSize(); - void IncrementCount(); - FX_BOOL AboutEquals(FX_FLOAT moduleSize, FX_FLOAT i, FX_FLOAT j); - CBC_QRFinderPattern* Clone(); -}; -typedef CBC_QRFinderPattern FinderPattern; - -#endif // XFA_SRC_FXBARCODE_QRCODE_BC_QRFINDERPATTERN_H_ diff --git a/xfa/src/fxbarcode/qrcode/BC_QRFinderPatternFinder.cpp b/xfa/src/fxbarcode/qrcode/BC_QRFinderPatternFinder.cpp deleted file mode 100644 index f5a3c7aead..0000000000 --- a/xfa/src/fxbarcode/qrcode/BC_QRFinderPatternFinder.cpp +++ /dev/null @@ -1,477 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2007 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/qrcode/BC_QRFinderPatternFinder.h" - -#include - -#include "core/include/fxcrt/fx_basic.h" -#include "xfa/src/fxbarcode/BC_ResultPoint.h" -#include "xfa/src/fxbarcode/common/BC_CommonBitMatrix.h" -#include "xfa/src/fxbarcode/qrcode/BC_FinderPatternInfo.h" -#include "xfa/src/fxbarcode/qrcode/BC_QRFinderPattern.h" -#include "xfa/src/fxbarcode/utils.h" - -const int32_t CBC_QRFinderPatternFinder::CENTER_QUORUM = 2; -const int32_t CBC_QRFinderPatternFinder::MIN_SKIP = 3; -const int32_t CBC_QRFinderPatternFinder::MAX_MODULES = 57; -const int32_t CBC_QRFinderPatternFinder::INTEGER_MATH_SHIFT = 8; - -CBC_QRFinderPatternFinder::CBC_QRFinderPatternFinder( - CBC_CommonBitMatrix* image) { - m_image = image; - m_crossCheckStateCount.SetSize(5); - m_hasSkipped = FALSE; -} -CBC_QRFinderPatternFinder::~CBC_QRFinderPatternFinder() { - for (int32_t i = 0; i < m_possibleCenters.GetSize(); i++) { - delete (CBC_QRFinderPattern*)m_possibleCenters[i]; - } - m_possibleCenters.RemoveAll(); -} -class ClosestToAverageComparator { - private: - FX_FLOAT m_averageModuleSize; - - public: - ClosestToAverageComparator(FX_FLOAT averageModuleSize) - : m_averageModuleSize(averageModuleSize) {} - int32_t operator()(FinderPattern* a, FinderPattern* b) { - FX_FLOAT dA = - (FX_FLOAT)fabs(a->GetEstimatedModuleSize() - m_averageModuleSize); - FX_FLOAT dB = - (FX_FLOAT)fabs(b->GetEstimatedModuleSize() - m_averageModuleSize); - return dA < dB ? -1 : dA > dB ? 1 : 0; - } -}; -class CenterComparator { - public: - int32_t operator()(FinderPattern* a, FinderPattern* b) { - return b->GetCount() - a->GetCount(); - } -}; -CBC_CommonBitMatrix* CBC_QRFinderPatternFinder::GetImage() { - return m_image; -} -CFX_Int32Array& CBC_QRFinderPatternFinder::GetCrossCheckStateCount() { - m_crossCheckStateCount[0] = 0; - m_crossCheckStateCount[1] = 0; - m_crossCheckStateCount[2] = 0; - m_crossCheckStateCount[3] = 0; - m_crossCheckStateCount[4] = 0; - return m_crossCheckStateCount; -} -CFX_PtrArray* CBC_QRFinderPatternFinder::GetPossibleCenters() { - return &m_possibleCenters; -} -CBC_QRFinderPatternInfo* CBC_QRFinderPatternFinder::Find(int32_t hint, - int32_t& e) { - int32_t maxI = m_image->GetHeight(); - int32_t maxJ = m_image->GetWidth(); - int32_t iSkip = (3 * maxI) / (4 * MAX_MODULES); - if (iSkip < MIN_SKIP || 0) { - iSkip = MIN_SKIP; - } - FX_BOOL done = FALSE; - CFX_Int32Array stateCount; - stateCount.SetSize(5); - for (int32_t i = iSkip - 1; i < maxI && !done; i += iSkip) { - stateCount[0] = 0; - stateCount[1] = 0; - stateCount[2] = 0; - stateCount[3] = 0; - stateCount[4] = 0; - int32_t currentState = 0; - for (int32_t j = 0; j < maxJ; j++) { - if (m_image->Get(j, i)) { - if ((currentState & 1) == 1) { - currentState++; - } - stateCount[currentState]++; - } else { - if ((currentState & 1) == 0) { - if (currentState == 4) { - if (FoundPatternCross(stateCount)) { - FX_BOOL confirmed = HandlePossibleCenter(stateCount, i, j); - if (confirmed) { - iSkip = 2; - if (m_hasSkipped) { - done = HaveMultiplyConfirmedCenters(); - } else { - int32_t rowSkip = FindRowSkip(); - if (rowSkip > stateCount[2]) { - i += rowSkip - stateCount[2] - iSkip; - j = maxJ - 1; - } - } - } else { - do { - j++; - } while (j < maxJ && !m_image->Get(j, i)); - j--; - } - currentState = 0; - stateCount[0] = 0; - stateCount[1] = 0; - stateCount[2] = 0; - stateCount[3] = 0; - stateCount[4] = 0; - } else { - stateCount[0] = stateCount[2]; - stateCount[1] = stateCount[3]; - stateCount[2] = stateCount[4]; - stateCount[3] = 1; - stateCount[4] = 0; - currentState = 3; - } - } else { - stateCount[++currentState]++; - } - } else { - stateCount[currentState]++; - } - } - } - if (FoundPatternCross(stateCount)) { - FX_BOOL confirmed = HandlePossibleCenter(stateCount, i, maxJ); - if (confirmed) { - iSkip = stateCount[0]; - if (m_hasSkipped) { - done = HaveMultiplyConfirmedCenters(); - } - } - } - } - std::unique_ptr patternInfo(SelectBestpatterns(e)); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - OrderBestPatterns(patternInfo.get()); - return new CBC_QRFinderPatternInfo(patternInfo.get()); -} -void CBC_QRFinderPatternFinder::OrderBestPatterns(CFX_PtrArray* patterns) { - FX_FLOAT abDistance = Distance((CBC_ResultPoint*)(*patterns)[0], - (CBC_ResultPoint*)(*patterns)[1]); - FX_FLOAT bcDistance = Distance((CBC_ResultPoint*)(*patterns)[1], - (CBC_ResultPoint*)(*patterns)[2]); - FX_FLOAT acDistance = Distance((CBC_ResultPoint*)(*patterns)[0], - (CBC_ResultPoint*)(*patterns)[2]); - CBC_QRFinderPattern *topLeft, *topRight, *bottomLeft; - if (bcDistance >= abDistance && bcDistance >= acDistance) { - topLeft = (CBC_QRFinderPattern*)(*patterns)[0]; - topRight = (CBC_QRFinderPattern*)(*patterns)[1]; - bottomLeft = (CBC_QRFinderPattern*)(*patterns)[2]; - } else if (acDistance >= bcDistance && acDistance >= abDistance) { - topLeft = (CBC_QRFinderPattern*)(*patterns)[1]; - topRight = (CBC_QRFinderPattern*)(*patterns)[0]; - bottomLeft = (CBC_QRFinderPattern*)(*patterns)[2]; - } else { - topLeft = (CBC_QRFinderPattern*)(*patterns)[2]; - topRight = (CBC_QRFinderPattern*)(*patterns)[0]; - bottomLeft = (CBC_QRFinderPattern*)(*patterns)[1]; - } - if ((bottomLeft->GetY() - topLeft->GetY()) * - (topRight->GetX() - topLeft->GetX()) < - (bottomLeft->GetX() - topLeft->GetX()) * - (topRight->GetY() - topLeft->GetY())) { - CBC_QRFinderPattern* temp = topRight; - topRight = bottomLeft; - bottomLeft = temp; - } - (*patterns)[0] = bottomLeft; - (*patterns)[1] = topLeft; - (*patterns)[2] = topRight; -} -FX_FLOAT CBC_QRFinderPatternFinder::Distance(CBC_ResultPoint* point1, - CBC_ResultPoint* point2) { - FX_FLOAT dx = point1->GetX() - point2->GetX(); - FX_FLOAT dy = point1->GetY() - point2->GetY(); - return (FX_FLOAT)FXSYS_sqrt(dx * dx + dy * dy); -} -FX_FLOAT CBC_QRFinderPatternFinder::CenterFromEnd( - const CFX_Int32Array& stateCount, - int32_t end) { - return (FX_FLOAT)(end - stateCount[4] - stateCount[3]) - stateCount[2] / 2.0f; -} -FX_BOOL CBC_QRFinderPatternFinder::FoundPatternCross( - const CFX_Int32Array& stateCount) { - int32_t totalModuleSize = 0; - for (int32_t i = 0; i < 5; i++) { - int32_t count = stateCount[i]; - if (count == 0) { - return FALSE; - } - totalModuleSize += count; - } - if (totalModuleSize < 7) { - return FALSE; - } - int32_t moduleSize = (totalModuleSize << INTEGER_MATH_SHIFT) / 7; - int32_t maxVariance = moduleSize / 2; - return FXSYS_abs(moduleSize - (stateCount[0] << INTEGER_MATH_SHIFT)) < - maxVariance && - FXSYS_abs(moduleSize - (stateCount[1] << INTEGER_MATH_SHIFT)) < - maxVariance && - FXSYS_abs(3 * moduleSize - (stateCount[2] << INTEGER_MATH_SHIFT)) < - 3 * maxVariance && - FXSYS_abs(moduleSize - (stateCount[3] << INTEGER_MATH_SHIFT)) < - maxVariance && - FXSYS_abs(moduleSize - (stateCount[4] << INTEGER_MATH_SHIFT)) < - maxVariance; -} -FX_FLOAT CBC_QRFinderPatternFinder::CrossCheckVertical( - int32_t startI, - int32_t centerJ, - int32_t maxCount, - int32_t originalStateCountTotal) { - CBC_CommonBitMatrix* image = m_image; - int32_t maxI = image->GetHeight(); - CFX_Int32Array& stateCount = GetCrossCheckStateCount(); - int32_t i = startI; - while (i >= 0 && image->Get(centerJ, i)) { - stateCount[2]++; - i--; - } - if (i < 0) { - return FXSYS_nan(); - } - while (i >= 0 && !image->Get(centerJ, i) && stateCount[1] <= maxCount) { - stateCount[1]++; - i--; - } - if (i < 0 || stateCount[1] > maxCount) { - return FXSYS_nan(); - } - while (i >= 0 && image->Get(centerJ, i) && stateCount[0] <= maxCount) { - stateCount[0]++; - i--; - } - if (stateCount[0] > maxCount) { - return FXSYS_nan(); - } - i = startI + 1; - while (i < maxI && image->Get(centerJ, i)) { - stateCount[2]++; - i++; - } - if (i == maxI) { - return FXSYS_nan(); - } - while (i < maxI && !image->Get(centerJ, i) && stateCount[3] < maxCount) { - stateCount[3]++; - i++; - } - if (i == maxI || stateCount[3] >= maxCount) { - return FXSYS_nan(); - } - while (i < maxI && image->Get(centerJ, i) && stateCount[4] < maxCount) { - stateCount[4]++; - i++; - } - if (stateCount[4] >= maxCount) { - return FXSYS_nan(); - } - int32_t stateCountTotal = stateCount[0] + stateCount[1] + stateCount[2] + - stateCount[3] + stateCount[4]; - if (5 * FXSYS_abs(stateCountTotal - originalStateCountTotal) >= - originalStateCountTotal) { - return FXSYS_nan(); - } - return FoundPatternCross(stateCount) ? CenterFromEnd(stateCount, i) - : FXSYS_nan(); -} -FX_FLOAT CBC_QRFinderPatternFinder::CrossCheckHorizontal( - int32_t startJ, - int32_t centerI, - int32_t maxCount, - int32_t originalStateCountTotal) { - CBC_CommonBitMatrix* image = m_image; - int32_t maxJ = image->GetWidth(); - CFX_Int32Array& stateCount = GetCrossCheckStateCount(); - int32_t j = startJ; - while (j >= 0 && image->Get(j, centerI)) { - stateCount[2]++; - j--; - } - if (j < 0) { - return FXSYS_nan(); - } - while (j >= 0 && !image->Get(j, centerI) && stateCount[1] <= maxCount) { - stateCount[1]++; - j--; - } - if (j < 0 || stateCount[1] > maxCount) { - return FXSYS_nan(); - } - while (j >= 0 && image->Get(j, centerI) && stateCount[0] <= maxCount) { - stateCount[0]++; - j--; - } - if (stateCount[0] > maxCount) { - return FXSYS_nan(); - } - j = startJ + 1; - while (j < maxJ && image->Get(j, centerI)) { - stateCount[2]++; - j++; - } - if (j == maxJ) { - return FXSYS_nan(); - } - while (j < maxJ && !image->Get(j, centerI) && stateCount[3] < maxCount) { - stateCount[3]++; - j++; - } - if (j == maxJ || stateCount[3] >= maxCount) { - return FXSYS_nan(); - } - while (j < maxJ && image->Get(j, centerI) && stateCount[4] < maxCount) { - stateCount[4]++; - j++; - } - if (stateCount[4] >= maxCount) { - return FXSYS_nan(); - } - int32_t stateCountTotal = stateCount[0] + stateCount[1] + stateCount[2] + - stateCount[3] + stateCount[4]; - if (5 * FXSYS_abs(stateCountTotal - originalStateCountTotal) >= - originalStateCountTotal) { - return FXSYS_nan(); - } - return FoundPatternCross(stateCount) ? CenterFromEnd(stateCount, j) - : FXSYS_nan(); -} -FX_BOOL CBC_QRFinderPatternFinder::HandlePossibleCenter( - const CFX_Int32Array& stateCount, - int32_t i, - int32_t j) { - int32_t stateCountTotal = stateCount[0] + stateCount[1] + stateCount[2] + - stateCount[3] + stateCount[4]; - FX_FLOAT centerJ = CenterFromEnd(stateCount, j); - FX_FLOAT centerI = - CrossCheckVertical(i, (int32_t)centerJ, stateCount[2], stateCountTotal); - if (!FXSYS_isnan(centerI)) { - centerJ = CrossCheckHorizontal((int32_t)centerJ, (int32_t)centerI, - stateCount[2], stateCountTotal); - if (!FXSYS_isnan(centerJ)) { - FX_FLOAT estimatedModuleSize = (FX_FLOAT)stateCountTotal / 7.0f; - FX_BOOL found = FALSE; - int32_t max = m_possibleCenters.GetSize(); - for (int32_t index = 0; index < max; index++) { - CBC_QRFinderPattern* center = - (CBC_QRFinderPattern*)(m_possibleCenters[index]); - if (center->AboutEquals(estimatedModuleSize, centerI, centerJ)) { - center->IncrementCount(); - found = TRUE; - break; - } - } - if (!found) { - m_possibleCenters.Add( - new CBC_QRFinderPattern(centerJ, centerI, estimatedModuleSize)); - } - return TRUE; - } - } - return FALSE; -} -int32_t CBC_QRFinderPatternFinder::FindRowSkip() { - int32_t max = m_possibleCenters.GetSize(); - if (max <= 1) { - return 0; - } - FinderPattern* firstConfirmedCenter = NULL; - for (int32_t i = 0; i < max; i++) { - CBC_QRFinderPattern* center = (CBC_QRFinderPattern*)m_possibleCenters[i]; - if (center->GetCount() >= CENTER_QUORUM) { - if (firstConfirmedCenter == NULL) { - firstConfirmedCenter = center; - } else { - m_hasSkipped = TRUE; - return (int32_t)((fabs(firstConfirmedCenter->GetX() - center->GetX()) - - fabs(firstConfirmedCenter->GetY() - center->GetY())) / - 2); - } - } - } - return 0; -} -FX_BOOL CBC_QRFinderPatternFinder::HaveMultiplyConfirmedCenters() { - int32_t confirmedCount = 0; - FX_FLOAT totalModuleSize = 0.0f; - int32_t max = m_possibleCenters.GetSize(); - int32_t i; - for (i = 0; i < max; i++) { - CBC_QRFinderPattern* pattern = (CBC_QRFinderPattern*)m_possibleCenters[i]; - if (pattern->GetCount() >= CENTER_QUORUM) { - confirmedCount++; - totalModuleSize += pattern->GetEstimatedModuleSize(); - } - } - if (confirmedCount < 3) { - return FALSE; - } - FX_FLOAT average = totalModuleSize / (FX_FLOAT)max; - FX_FLOAT totalDeviation = 0.0f; - for (i = 0; i < max; i++) { - CBC_QRFinderPattern* pattern = (CBC_QRFinderPattern*)m_possibleCenters[i]; - totalDeviation += fabs(pattern->GetEstimatedModuleSize() - average); - } - return totalDeviation <= 0.05f * totalModuleSize; -} -inline FX_BOOL centerComparator(void* a, void* b) { - return ((CBC_QRFinderPattern*)b)->GetCount() < - ((CBC_QRFinderPattern*)a)->GetCount(); -} -CFX_PtrArray* CBC_QRFinderPatternFinder::SelectBestpatterns(int32_t& e) { - int32_t startSize = m_possibleCenters.GetSize(); - if (m_possibleCenters.GetSize() < 3) { - e = BCExceptionRead; - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - } - FX_FLOAT average = 0.0f; - if (startSize > 3) { - FX_FLOAT totalModuleSize = 0.0f; - for (int32_t i = 0; i < startSize; i++) { - totalModuleSize += ((CBC_QRFinderPattern*)m_possibleCenters[i]) - ->GetEstimatedModuleSize(); - } - average = totalModuleSize / (FX_FLOAT)startSize; - for (int32_t j = 0; - j < m_possibleCenters.GetSize() && m_possibleCenters.GetSize() > 3; - j++) { - CBC_QRFinderPattern* pattern = (CBC_QRFinderPattern*)m_possibleCenters[j]; - if (fabs(pattern->GetEstimatedModuleSize() - average) > 0.2f * average) { - delete pattern; - m_possibleCenters.RemoveAt(j); - j--; - } - } - } - if (m_possibleCenters.GetSize() > 3) { - BC_FX_PtrArray_Sort(m_possibleCenters, centerComparator); - } - CFX_PtrArray* vec = new CFX_PtrArray(); - vec->SetSize(3); - (*vec)[0] = ((CBC_QRFinderPattern*)m_possibleCenters[0])->Clone(); - (*vec)[1] = ((CBC_QRFinderPattern*)m_possibleCenters[1])->Clone(); - (*vec)[2] = ((CBC_QRFinderPattern*)m_possibleCenters[2])->Clone(); - return vec; -} diff --git a/xfa/src/fxbarcode/qrcode/BC_QRFinderPatternFinder.h b/xfa/src/fxbarcode/qrcode/BC_QRFinderPatternFinder.h deleted file mode 100644 index b7640491f0..0000000000 --- a/xfa/src/fxbarcode/qrcode/BC_QRFinderPatternFinder.h +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_QRCODE_BC_QRFINDERPATTERNFINDER_H_ -#define XFA_SRC_FXBARCODE_QRCODE_BC_QRFINDERPATTERNFINDER_H_ - -#include "core/include/fxcrt/fx_basic.h" - -class CBC_CommonBitMatrix; -class CBC_QRFinderPattern; -class CBC_ResultPoint; -class CBC_QRFinderPatternInfo; - -class CBC_QRFinderPatternFinder { - private: - static const int32_t CENTER_QUORUM; - static const int32_t MIN_SKIP; - static const int32_t MAX_MODULES; - static const int32_t INTEGER_MATH_SHIFT; - FX_BOOL m_hasSkipped; - CBC_CommonBitMatrix* m_image; - CFX_Int32Array m_crossCheckStateCount; - CFX_PtrArray m_possibleCenters; - - public: - CBC_QRFinderPatternFinder(CBC_CommonBitMatrix* image); - virtual ~CBC_QRFinderPatternFinder(); - int32_t FindRowSkip(); - CBC_CommonBitMatrix* GetImage(); - CBC_QRFinderPatternInfo* Find(int32_t hint, int32_t& e); - - CFX_Int32Array& GetCrossCheckStateCount(); - CFX_PtrArray* GetPossibleCenters(); - CFX_PtrArray* SelectBestpatterns(int32_t& e); - - FX_BOOL HandlePossibleCenter(const CFX_Int32Array& stateCount, - int32_t i, - int32_t j); - FX_BOOL HaveMultiplyConfirmedCenters(); - FX_FLOAT CenterFromEnd(const CFX_Int32Array& stateCount, int32_t end); - FX_FLOAT CrossCheckVertical(int32_t startI, - int32_t centerJ, - int32_t maxCount, - int32_t originalStateCountTotal); - FX_FLOAT CrossCheckHorizontal(int32_t startJ, - int32_t CenterI, - int32_t maxCOunt, - int32_t originalStateCountTotal); - static void OrderBestPatterns(CFX_PtrArray* patterns); - static FX_BOOL FoundPatternCross(const CFX_Int32Array& stateCount); - static FX_FLOAT Distance(CBC_ResultPoint* point1, CBC_ResultPoint* point2); -}; - -#endif // XFA_SRC_FXBARCODE_QRCODE_BC_QRFINDERPATTERNFINDER_H_ diff --git a/xfa/src/fxbarcode/qrcode/BC_QRGridSampler.cpp b/xfa/src/fxbarcode/qrcode/BC_QRGridSampler.cpp deleted file mode 100644 index 87f0fd072e..0000000000 --- a/xfa/src/fxbarcode/qrcode/BC_QRGridSampler.cpp +++ /dev/null @@ -1,139 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -// Original code is licensed as follows: -/* - * Copyright 2007 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "xfa/src/fxbarcode/qrcode/BC_QRGridSampler.h" - -#include - -#include "xfa/src/fxbarcode/common/BC_CommonBitMatrix.h" -#include "xfa/src/fxbarcode/common/BC_CommonPerspectiveTransform.h" -#include "xfa/src/fxbarcode/utils.h" - -CBC_QRGridSampler CBC_QRGridSampler::m_gridSampler; - -CBC_QRGridSampler::CBC_QRGridSampler() {} -CBC_QRGridSampler::~CBC_QRGridSampler() {} -CBC_QRGridSampler& CBC_QRGridSampler::GetInstance() { - return m_gridSampler; -} -void CBC_QRGridSampler::CheckAndNudgePoints(CBC_CommonBitMatrix* image, - CFX_FloatArray* points, - int32_t& e) { - int32_t width = image->GetWidth(); - int32_t height = image->GetHeight(); - FX_BOOL nudged = TRUE; - int32_t offset; - for (offset = 0; offset < points->GetSize() && nudged; offset += 2) { - int32_t x = (int32_t)(*points)[offset]; - int32_t y = (int32_t)(*points)[offset + 1]; - if (x < -1 || x > width || y < -1 || y > height) { - e = BCExceptionRead; - BC_EXCEPTION_CHECK_ReturnVoid(e); - } - nudged = FALSE; - if (x == -1) { - (*points)[offset] = 0.0f; - nudged = TRUE; - } else if (x == width) { - (*points)[offset] = (FX_FLOAT)(width - 1); - nudged = TRUE; - } - if (y == -1) { - (*points)[offset + 1] = 0.0f; - nudged = TRUE; - } else if (y == height) { - (*points)[offset + 1] = (FX_FLOAT)(height - 1); - nudged = TRUE; - } - } - nudged = TRUE; - for (offset = (*points).GetSize() - 2; offset >= 0 && nudged; offset -= 2) { - int32_t x = (int32_t)(*points)[offset]; - int32_t y = (int32_t)(*points)[offset + 1]; - if (x < -1 || x > width || y < -1 || y > height) { - e = BCExceptionRead; - BC_EXCEPTION_CHECK_ReturnVoid(e); - } - nudged = FALSE; - if (x == -1) { - (*points)[offset] = 0.0f; - nudged = TRUE; - } else if (x == width) { - (*points)[offset] = (FX_FLOAT)(width - 1); - nudged = TRUE; - } - if (y == -1) { - (*points)[offset + 1] = 0.0f; - nudged = TRUE; - } else if (y == height) { - (*points)[offset + 1] = (FX_FLOAT)(height - 1); - nudged = TRUE; - } - } -} -CBC_CommonBitMatrix* CBC_QRGridSampler::SampleGrid(CBC_CommonBitMatrix* image, - int32_t dimensionX, - int32_t dimensionY, - FX_FLOAT p1ToX, - FX_FLOAT p1ToY, - FX_FLOAT p2ToX, - FX_FLOAT p2ToY, - FX_FLOAT p3ToX, - FX_FLOAT p3ToY, - FX_FLOAT p4ToX, - FX_FLOAT p4ToY, - FX_FLOAT p1FromX, - FX_FLOAT p1FromY, - FX_FLOAT p2FromX, - FX_FLOAT p2FromY, - FX_FLOAT p3FromX, - FX_FLOAT p3FromY, - FX_FLOAT p4FromX, - FX_FLOAT p4FromY, - int32_t& e) { - std::unique_ptr transform( - CBC_CommonPerspectiveTransform::QuadrilateralToQuadrilateral( - p1ToX, p1ToY, p2ToX, p2ToY, p3ToX, p3ToY, p4ToX, p4ToY, p1FromX, - p1FromY, p2FromX, p2FromY, p3FromX, p3FromY, p4FromX, p4FromY)); - std::unique_ptr bits(new CBC_CommonBitMatrix()); - bits->Init(dimensionX, dimensionY); - CFX_FloatArray points; - points.SetSize(dimensionX << 1); - for (int32_t y = 0; y < dimensionY; y++) { - int32_t max = points.GetSize(); - FX_FLOAT iValue = (FX_FLOAT)(y + 0.5f); - int32_t x; - for (x = 0; x < max; x += 2) { - points[x] = (FX_FLOAT)((x >> 1) + 0.5f); - points[x + 1] = iValue; - } - transform->TransformPoints(&points); - CheckAndNudgePoints(image, &points, e); - BC_EXCEPTION_CHECK_ReturnValue(e, NULL); - for (x = 0; x < max; x += 2) { - if (image->Get((int32_t)points[x], (int32_t)points[x + 1])) { - bits->Set(x >> 1, y); - } - } - } - return bits.release(); -} diff --git a/xfa/src/fxbarcode/qrcode/BC_QRGridSampler.h b/xfa/src/fxbarcode/qrcode/BC_QRGridSampler.h deleted file mode 100644 index ce75ac8d05..0000000000 --- a/xfa/src/fxbarcode/qrcode/BC_QRGridSampler.h +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_QRCODE_BC_QRGRIDSAMPLER_H_ -#define XFA_SRC_FXBARCODE_QRCODE_BC_QRGRIDSAMPLER_H_ - -#include "core/include/fxcrt/fx_basic.h" - -class CBC_CommonBitMatrix; - -class CBC_QRGridSampler { - private: - static CBC_QRGridSampler m_gridSampler; - - public: - CBC_QRGridSampler(); - virtual ~CBC_QRGridSampler(); - virtual CBC_CommonBitMatrix* SampleGrid(CBC_CommonBitMatrix* image, - int32_t dimensionX, - int32_t dimensionY, - FX_FLOAT p1ToX, - FX_FLOAT p1ToY, - FX_FLOAT p2ToX, - FX_FLOAT p2ToY, - FX_FLOAT p3ToX, - FX_FLOAT p3ToY, - FX_FLOAT p4ToX, - FX_FLOAT p4ToY, - FX_FLOAT p1FromX, - FX_FLOAT p1FromY, - FX_FLOAT p2FromX, - FX_FLOAT p2FromY, - FX_FLOAT p3FromX, - FX_FLOAT p3FromY, - FX_FLOAT p4FromX, - FX_FLOAT p4FromY, - int32_t& e); - - static CBC_QRGridSampler& GetInstance(); - static void CheckAndNudgePoints(CBC_CommonBitMatrix* image, - CFX_FloatArray* points, - int32_t& e); -}; - -#endif // XFA_SRC_FXBARCODE_QRCODE_BC_QRGRIDSAMPLER_H_ diff --git a/xfa/src/fxbarcode/utils.h b/xfa/src/fxbarcode/utils.h deleted file mode 100644 index 23830d5656..0000000000 --- a/xfa/src/fxbarcode/utils.h +++ /dev/null @@ -1,183 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXBARCODE_UTILS_H_ -#define XFA_SRC_FXBARCODE_UTILS_H_ - -#include "core/include/fxcrt/fx_basic.h" - -typedef CFX_MapPtrTemplate CFX_PtrToInt32; -FX_BOOL BC_FX_ByteString_Replace(CFX_ByteString& dst, - FX_DWORD first, - FX_DWORD last, - int32_t count, - FX_CHAR c); -void BC_FX_ByteString_Append(CFX_ByteString& dst, int32_t count, FX_CHAR c); -void BC_FX_ByteString_Append(CFX_ByteString& dst, const CFX_ByteArray& ba); -typedef FX_BOOL (*BC_PtrArrayCompareCallback)(void* l, void* r); -void BC_FX_PtrArray_Sort(CFX_PtrArray& src, BC_PtrArrayCompareCallback fun); - -#if (_FX_OS_ == _FX_WIN32_DESKTOP_ || _FX_OS_ == _FX_WIN64_) -#include -#elif(_FX_OS_ == _FX_MACOSX_ || _FX_OS_ == _FX_LINUX_DESKTOP_ || \ - _FX_OS_ == _FX_IOS_) -#include -#endif -#if (_FX_OS_ == _FX_WIN32_DESKTOP_ || _FX_OS_ == _FX_WIN64_) -#define FXSYS_isnan(x) _isnan(x) -#elif(_FX_OS_ == _FX_MACOSX_ || _FX_OS_ == _FX_IOS_) -#include -#define FXSYS_isnan(x) std::isnan(x) -#elif(_FX_OS_ == _FX_LINUX_DESKTOP_ || _FX_OS_ == _FX_ANDROID_) -#include -#define FXSYS_isnan(x) isnan(x) -#endif -#if (_FX_OS_ == _FX_WIN32_DESKTOP_ || _FX_OS_ == _FX_WIN64_) -#define FXSYS_nan() (std::numeric_limits::quiet_NaN()) -#elif(_FX_OS_ == _FX_MACOSX_ || _FX_OS_ == _FX_LINUX_DESKTOP_ || \ - _FX_OS_ == _FX_IOS_ || _FX_OS_ == _FX_ANDROID_) -#define FXSYS_nan() NAN -#endif -enum BCFORMAT { - BCFORMAT_UNSPECIFY = -1, - BCFORMAT_CODABAR, - BCFORMAT_CODE_39, - BCFORMAT_CODE_128, - BCFORMAT_CODE_128B, - BCFORMAT_CODE_128C, - BCFORMAT_EAN_8, - BCFORMAT_UPC_A, - BCFORMAT_EAN_13, - BCFORMAT_PDF_417, - BCFORMAT_DATAMATRIX, - BCFORMAT_QR_CODE -}; -#define BCFORMAT_ECLEVEL_L 0 -#define BCFORMAT_ECLEVEL_M 1 -#define BCFORMAT_ECLEVEL_Q 2 -#define BCFORMAT_ECLEVEL_H 3 -#include -#define FXSYS_IntMax INT_MAX -#define FXSYS_Isdigit isdigit -#define BCExceptionNO 0 -#define BCExceptionNotFound 1 -#define BCExceptionEndLessThanStart 2 -#define BCExceptionUnknownDecoder 3 -#define BCExceptionRotateNotSupported 4 -#define BCExceptionHeightAndWidthMustBeAtLeast1 5 -#define BCExceptionRegionMustFitInsideMatrix 6 -#define BCExceptionCanNotCallGetDimensionOnNonSquareMatrix 7 -#define BCExceptionFormatException 8 -#define BCExceptionIllegalArgumentMustMatchVersionSize 9 -#define BCExceptionChecksumException 10 -#define BCExceptionIllegalArgumentInvalidFirstDigit 11 -#define BCExceptionIllegalArgumentInvalidSecondDigit 12 -#define BCExceptionRuntimeDecodingInvalidISO_IEC 13 -#define BCExceptionRuntimeDecodingInvalidAlphanumeric 14 -#define BCExceptionLeftAndTopMustBeNonnegative 15 -#define BCExceptionIllegalArgument 16 -#define BCExceptionBadECI 17 -#define BCExceptionUnSupportedBarcode 18 -#define BCExceptionUnSupportedString 19 -#define BCExceptionDigitLengthMustBe8 20 -#define BCExceptionDataCheckException 21 -#define BCExceptionExtractNumberValueFromBitArray 22 -#define BCExceptionRead 23 -#define BCExceptionRequestedRowIsOutSizeTheImage 24 -#define BCExceptionNoContents 26 -#define BCExceptionUnSupportEclevel 27 -#define BCExceptionUnSupportMode 28 -#define BCExceptionReferenceMustBeBetween0And7 29 -#define BCExceptionBadErrorLocation 30 -#define BCExceptionDegreeIsNegative 31 -#define BCExceptionDivideByZero 32 -#define BCExceptionCoefficientsSizeIsNull 33 -#define BCExceptionNoCorrectionBytes 34 -#define BCExceptionNoDataBytesProvided 35 -#define BCExceptionR_I_1IsZero 36 -#define BCExceptionAIsZero 37 -#define BCExceptionIsZero 38 -#define BCExceptionDegreeNotMatchRoots 39 -#define BCExceptionContentsLengthShouldBetween1and80 40 -#define BCExceptionOnlyEncodeCODE_128 41 -#define BCExceptionOnlyEncodeCODE_39 42 -#define BCExceptionOnlyEncodeEAN_13 43 -#define BCExceptionOnlyEncodeEAN_8 44 -#define BCExceptionOnlyEncodeITF 45 -#define BCExceptionDigitLengthShould13 46 -#define BCExceptionDigitLengthMustBe6or8or10or12or14or16or20or24or44 47 -#define BCExceptionOnlyEncodeUPC_A 48 -#define BCExceptionDigitLengthShouldBe12 49 -#define BCExceptionValueMustBeEither0or1 50 -#define BCExceptionReedsolomnDecodeException 51 -#define BCExceptionBadIndexException 52 -#define BCExceptionBadValueException 53 -#define BCExceptionBadNumBitsException 54 -#define BCExceptioncanNotOperatexorOperator 55 -#define BCExceptionVersionMust1_40 56 -#define BCExceptionUnknown 57 -#define BCExceptionNoSuchVersion 58 -#define BCExceptionCannotFindBlockInfo 59 -#define BCExceptionDataTooBig 60 -#define BCExceptionInvalidQRCode 61 -#define BCExceptionDataTooMany 62 -#define BCExceptionBitsNotEqualCacity 63 -#define BCExceptionUnsupportedMode 64 -#define BCExceptionInvalidateCharacter 65 -#define BCExceptionBytesNotMatchOffset 66 -#define BCExceptionSizeInBytesDiffer 67 -#define BCExceptionInvalidateMaskPattern 68 -#define BCExceptionNullPointer 69 -#define BCExceptionBadMask 70 -#define BCExceptionBitSizeNot15 71 -#define BCExceptionBitSizeNot18 72 -#define BCExceptionInvalidateImageData 73 -#define BCExceptionHeight_8BeZero 74 -#define BCExceptionCharacterNotThisMode 75 -#define BCExceptionBitsBytesNotMatch 76 -#define BCExceptionInvalidateData 77 -#define BCExceptionLoadFile 78 -#define BCExceptionPDF417EncodeFail 79 -#define BCExceptionFailToCreateBitmap 80 -#define BCExceptionLoadFontFail 81 -#define BCExceptionOnlyEncodeCODEBAR 82 -#define BCExceptionCodabarShouldStartWithOneOfABCD 83 -#define BCExceptionCodabarShouldEndWithOneOfTNE 84 -#define BCExceptionCodabarEncodeCharsInvalid 85 -#define BCExceptionOnlyEncodeDATAMATRIX 86 -#define BCExceptionCharactersOutsideISO88591Encoding 87 -#define BCExceptionIllegalDataCodewords 88 -#define BCExceptionCannotHandleThisNumberOfDataRegions 89 -#define BCExceptionIllegalStateUnexpectedCase 90 -#define BCExceptionIllegalStateCountMustNotExceed4 91 -#define BCExceptionIllegalStateMessageLengthInvalid 92 -#define BCExceptionIllegalArgumentNotGigits 93 -#define BCExceptionIllegalStateIllegalMode 94 -#define BCExceptionOnlyEncodePDF417 95 -#define BCExceptionNonEncodableCharacterDetected 96 -#define BCExceptionErrorCorrectionLevelMustBeBetween0And8 97 -#define BCExceptionNoRecommendationPossible 98 -#define BCExceptionIllegalArgumentnMustBeAbove0 99 -#define BCExceptionUnableToFitMessageInColumns 100 -#define BCExceptionEncodedMessageContainsTooManyCodeWords 101 -#define BCExceptionBitmapSizeError 102 -#define BCExceptionFormatInstance 102 -#define BCExceptionChecksumInstance 103 -#define BCExceptiontNotFoundInstance 104 -#define BCExceptionNotFoundInstance 105 -#define BCExceptionCannotMetadata 106 -#define TWO_DIGIT_DATA_LENGTH_SIZE 24 -#define THREE_DIGIT_DATA_LENGTH_SIZE 23 -#define THREE_DIGIT_PLUS_DIGIT_DATA_LENGTH_SIZE 57 -#define FOUR_DIGIT_DATA_LENGTH_SIZE 17 -#define BC_EXCEPTION_CHECK_ReturnVoid(e) \ - if (e != BCExceptionNO) \ - return; -#define BC_EXCEPTION_CHECK_ReturnValue(e, v) \ - if (e != BCExceptionNO) \ - return v; - -#endif // XFA_SRC_FXBARCODE_UTILS_H_ diff --git a/xfa/src/fxfa/app/xfa_checksum.cpp b/xfa/src/fxfa/app/xfa_checksum.cpp deleted file mode 100644 index 3df37cf156..0000000000 --- a/xfa/src/fxfa/app/xfa_checksum.cpp +++ /dev/null @@ -1,190 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fxfa/app/xfa_checksum.h" - -#include "core/include/fdrm/fx_crypt.h" -#include "xfa/src/fgas/crt/fgas_algorithm.h" - -CXFA_SAXReaderHandler::CXFA_SAXReaderHandler(CXFA_ChecksumContext* pContext) - : m_pContext(pContext) { - FXSYS_assert(m_pContext); -} -CXFA_SAXReaderHandler::~CXFA_SAXReaderHandler() {} -void* CXFA_SAXReaderHandler::OnTagEnter(const CFX_ByteStringC& bsTagName, - FX_SAXNODE eType, - FX_DWORD dwStartPos) { - UpdateChecksum(TRUE); - if (eType != FX_SAXNODE_Tag && eType != FX_SAXNODE_Instruction) { - return NULL; - } - m_SAXContext.m_eNode = eType; - CFX_ByteTextBuf& textBuf = m_SAXContext.m_TextBuf; - textBuf << "<"; - if (eType == FX_SAXNODE_Instruction) { - textBuf << "?"; - } - textBuf << bsTagName; - m_SAXContext.m_bsTagName = bsTagName; - return &m_SAXContext; -} -void CXFA_SAXReaderHandler::OnTagAttribute(void* pTag, - const CFX_ByteStringC& bsAttri, - const CFX_ByteStringC& bsValue) { - if (pTag == NULL) { - return; - } - CFX_ByteTextBuf& textBuf = ((CXFA_SAXContext*)pTag)->m_TextBuf; - textBuf << " " << bsAttri << "=\"" << bsValue << "\""; -} -void CXFA_SAXReaderHandler::OnTagBreak(void* pTag) { - if (pTag == NULL) { - return; - } - CFX_ByteTextBuf& textBuf = ((CXFA_SAXContext*)pTag)->m_TextBuf; - textBuf << ">"; - UpdateChecksum(FALSE); -} -void CXFA_SAXReaderHandler::OnTagData(void* pTag, - FX_SAXNODE eType, - const CFX_ByteStringC& bsData, - FX_DWORD dwStartPos) { - if (pTag == NULL) { - return; - } - CFX_ByteTextBuf& textBuf = ((CXFA_SAXContext*)pTag)->m_TextBuf; - if (eType == FX_SAXNODE_CharData) { - textBuf << ""; - } -} -void CXFA_SAXReaderHandler::OnTagClose(void* pTag, FX_DWORD dwEndPos) { - if (pTag == NULL) { - return; - } - CXFA_SAXContext* pSAXContext = (CXFA_SAXContext*)pTag; - CFX_ByteTextBuf& textBuf = pSAXContext->m_TextBuf; - if (pSAXContext->m_eNode == FX_SAXNODE_Instruction) { - textBuf << "?>"; - } else if (pSAXContext->m_eNode == FX_SAXNODE_Tag) { - textBuf << ">m_bsTagName << ">"; - } - UpdateChecksum(FALSE); -} -void CXFA_SAXReaderHandler::OnTagEnd(void* pTag, - const CFX_ByteStringC& bsTagName, - FX_DWORD dwEndPos) { - if (pTag == NULL) { - return; - } - CFX_ByteTextBuf& textBuf = ((CXFA_SAXContext*)pTag)->m_TextBuf; - textBuf << ""; - UpdateChecksum(FALSE); -} -void CXFA_SAXReaderHandler::OnTargetData(void* pTag, - FX_SAXNODE eType, - const CFX_ByteStringC& bsData, - FX_DWORD dwStartPos) { - if (pTag == NULL && eType != FX_SAXNODE_Comment) { - return; - } - if (eType == FX_SAXNODE_Comment) { - CFX_ByteTextBuf& textBuf = m_SAXContext.m_TextBuf; - textBuf << ""; - UpdateChecksum(FALSE); - } else { - CFX_ByteTextBuf& textBuf = ((CXFA_SAXContext*)pTag)->m_TextBuf; - textBuf << " " << bsData; - } -} -void CXFA_SAXReaderHandler::UpdateChecksum(FX_BOOL bCheckSpace) { - int32_t iLength = m_SAXContext.m_TextBuf.GetLength(); - if (iLength < 1) { - return; - } - uint8_t* pBuffer = m_SAXContext.m_TextBuf.GetBuffer(); - FX_BOOL bUpdata = TRUE; - if (bCheckSpace) { - bUpdata = FALSE; - for (int32_t i = 0; i < iLength; i++) { - bUpdata = (pBuffer[i] > 0x20); - if (bUpdata) { - break; - } - } - } - if (bUpdata) { - m_pContext->Update(CFX_ByteStringC(pBuffer, iLength)); - } - m_SAXContext.m_TextBuf.Clear(); -} -IXFA_ChecksumContext* XFA_Checksum_Create() { - return new CXFA_ChecksumContext; -} -CXFA_ChecksumContext::CXFA_ChecksumContext() - : m_pSAXReader(NULL), m_pByteContext(NULL) {} -CXFA_ChecksumContext::~CXFA_ChecksumContext() { - FinishChecksum(); -} -FX_BOOL CXFA_ChecksumContext::StartChecksum() { - FinishChecksum(); - m_pByteContext = FX_Alloc(uint8_t, 128); - CRYPT_SHA1Start(m_pByteContext); - m_bsChecksum.Empty(); - m_pSAXReader = FX_SAXReader_Create(); - return m_pSAXReader != NULL; -} -FX_BOOL CXFA_ChecksumContext::UpdateChecksum(IFX_FileRead* pSrcFile, - FX_FILESIZE offset, - size_t size) { - if (m_pSAXReader == NULL) { - return FALSE; - } - if (pSrcFile == NULL) { - return FALSE; - } - if (size < 1) { - size = pSrcFile->GetSize(); - } - CXFA_SAXReaderHandler handler(this); - m_pSAXReader->SetHandler(&handler); - if (m_pSAXReader->StartParse( - pSrcFile, (FX_DWORD)offset, (FX_DWORD)size, - FX_SAXPARSEMODE_NotSkipSpace | FX_SAXPARSEMODE_NotConvert_amp | - FX_SAXPARSEMODE_NotConvert_lt | FX_SAXPARSEMODE_NotConvert_gt | - FX_SAXPARSEMODE_NotConvert_sharp) < 0) { - return FALSE; - } - return m_pSAXReader->ContinueParse(NULL) > 99; -} -void CXFA_ChecksumContext::FinishChecksum() { - if (m_pSAXReader) { - m_pSAXReader->Release(); - m_pSAXReader = NULL; - } - if (m_pByteContext) { - uint8_t digest[20]; - FXSYS_memset(digest, 0, 20); - CRYPT_SHA1Finish(m_pByteContext, digest); - int32_t nLen = FX_Base64EncodeA(digest, 20, NULL); - FX_CHAR* pBuffer = m_bsChecksum.GetBuffer(nLen); - FX_Base64EncodeA(digest, 20, pBuffer); - m_bsChecksum.ReleaseBuffer(nLen); - FX_Free(m_pByteContext); - m_pByteContext = NULL; - } -} -void CXFA_ChecksumContext::GetChecksum(CFX_ByteString& bsChecksum) { - bsChecksum = m_bsChecksum; -} -void CXFA_ChecksumContext::Update(const CFX_ByteStringC& bsText) { - if (m_pByteContext) { - CRYPT_SHA1Update(m_pByteContext, bsText.GetPtr(), bsText.GetLength()); - } -} diff --git a/xfa/src/fxfa/app/xfa_checksum.h b/xfa/src/fxfa/app/xfa_checksum.h deleted file mode 100644 index fb004d37c1..0000000000 --- a/xfa/src/fxfa/app/xfa_checksum.h +++ /dev/null @@ -1,73 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXFA_APP_XFA_CHECKSUM_H_ -#define XFA_SRC_FXFA_APP_XFA_CHECKSUM_H_ - -#include "xfa/include/fxfa/fxfa.h" -#include "xfa/src/fgas/xml/fgas_sax.h" - -class CXFA_SAXReaderHandler; -class CXFA_ChecksumContext; - -class CXFA_SAXContext { - public: - CXFA_SAXContext() : m_eNode(FX_SAXNODE_Unknown) {} - CFX_ByteTextBuf m_TextBuf; - CFX_ByteString m_bsTagName; - FX_SAXNODE m_eNode; -}; -class CXFA_SAXReaderHandler : public IFX_SAXReaderHandler { - public: - CXFA_SAXReaderHandler(CXFA_ChecksumContext* pContext); - virtual ~CXFA_SAXReaderHandler(); - virtual void* OnTagEnter(const CFX_ByteStringC& bsTagName, - FX_SAXNODE eType, - FX_DWORD dwStartPos); - virtual void OnTagAttribute(void* pTag, - const CFX_ByteStringC& bsAttri, - const CFX_ByteStringC& bsValue); - virtual void OnTagBreak(void* pTag); - virtual void OnTagData(void* pTag, - FX_SAXNODE eType, - const CFX_ByteStringC& bsData, - FX_DWORD dwStartPos); - virtual void OnTagClose(void* pTag, FX_DWORD dwEndPos); - virtual void OnTagEnd(void* pTag, - const CFX_ByteStringC& bsTagName, - FX_DWORD dwEndPos); - - virtual void OnTargetData(void* pTag, - FX_SAXNODE eType, - const CFX_ByteStringC& bsData, - FX_DWORD dwStartPos); - - protected: - void UpdateChecksum(FX_BOOL bCheckSpace); - CXFA_ChecksumContext* m_pContext; - CXFA_SAXContext m_SAXContext; -}; - -class CXFA_ChecksumContext : public IXFA_ChecksumContext { - public: - CXFA_ChecksumContext(); - virtual ~CXFA_ChecksumContext(); - virtual void Release() { delete this; } - virtual FX_BOOL StartChecksum(); - virtual FX_BOOL UpdateChecksum(IFX_FileRead* pSrcFile, - FX_FILESIZE offset = 0, - size_t size = 0); - virtual void FinishChecksum(); - virtual void GetChecksum(CFX_ByteString& bsChecksum); - void Update(const CFX_ByteStringC& bsText); - - protected: - IFX_SAXReader* m_pSAXReader; - uint8_t* m_pByteContext; - CFX_ByteString m_bsChecksum; -}; - -#endif // XFA_SRC_FXFA_APP_XFA_CHECKSUM_H_ diff --git a/xfa/src/fxfa/app/xfa_ffapp.cpp b/xfa/src/fxfa/app/xfa_ffapp.cpp deleted file mode 100644 index d37eaf5b83..0000000000 --- a/xfa/src/fxfa/app/xfa_ffapp.cpp +++ /dev/null @@ -1,190 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fxfa/app/xfa_ffapp.h" - -#include - -#include "xfa/include/fwl/core/fwl_widgetmgr.h" -#include "xfa/src/fxfa/app/xfa_ffdoc.h" -#include "xfa/src/fxfa/app/xfa_ffdochandler.h" -#include "xfa/src/fxfa/app/xfa_ffwidgethandler.h" -#include "xfa/src/fxfa/app/xfa_fontmgr.h" -#include "xfa/src/fxfa/app/xfa_fwladapter.h" -#include "xfa/src/fxfa/app/xfa_fwltheme.h" - -CXFA_FileRead::CXFA_FileRead(const CFX_ArrayTemplate& streams) { - int32_t iCount = streams.GetSize(); - for (int32_t i = 0; i < iCount; i++) { - CPDF_StreamAcc& acc = m_Data.Add(); - acc.LoadAllData(streams[i]); - } -} -FX_FILESIZE CXFA_FileRead::GetSize() { - FX_DWORD dwSize = 0; - int32_t iCount = m_Data.GetSize(); - for (int32_t i = 0; i < iCount; i++) { - CPDF_StreamAcc& acc = m_Data[i]; - dwSize += acc.GetSize(); - } - return dwSize; -} -FX_BOOL CXFA_FileRead::ReadBlock(void* buffer, - FX_FILESIZE offset, - size_t size) { - int32_t iCount = m_Data.GetSize(); - int32_t index = 0; - while (index < iCount) { - CPDF_StreamAcc& acc = m_Data[index]; - FX_FILESIZE dwSize = acc.GetSize(); - if (offset < dwSize) { - break; - } - offset -= dwSize; - index++; - } - while (index < iCount) { - CPDF_StreamAcc& acc = m_Data[index]; - FX_DWORD dwSize = acc.GetSize(); - size_t dwRead = std::min(size, static_cast(dwSize - offset)); - FXSYS_memcpy(buffer, acc.GetData() + offset, dwRead); - size -= dwRead; - if (size == 0) { - return TRUE; - } - buffer = (uint8_t*)buffer + dwRead; - offset = 0; - index++; - } - return FALSE; -} -// static -IXFA_App* IXFA_App::Create(IXFA_AppProvider* pProvider) { - return new CXFA_FFApp(pProvider); -} -// virtual -IXFA_App::~IXFA_App() {} -CXFA_FFApp::CXFA_FFApp(IXFA_AppProvider* pProvider) - : m_pDocHandler(nullptr), - m_pFWLTheme(nullptr), - m_pProvider(pProvider), - m_pFontMgr(nullptr), -#if _FXM_PLATFORM_ != _FXM_PLATFORM_WINDOWS_ - m_pFontSource(nullptr), -#endif - m_pAdapterWidgetMgr(nullptr), - m_pWidgetMgrDelegate(nullptr), - m_pFDEFontMgr(nullptr), - m_pMenuHandler(nullptr), - m_pAdapterThreadMgr(nullptr) { - m_pFWLApp = IFWL_App::Create(this); - FWL_SetApp(m_pFWLApp); - m_pFWLApp->Initialize(); - IXFA_TimeZoneProvider::Create(); -} -CXFA_FFApp::~CXFA_FFApp() { - delete m_pDocHandler; - if (m_pFWLApp) { - m_pFWLApp->Finalize(); - m_pFWLApp->Release(); - delete m_pFWLApp; - } - if (m_pFWLTheme) - m_pFWLTheme->Release(); - delete m_pAdapterWidgetMgr; - delete m_pAdapterThreadMgr; - delete m_pMenuHandler; - IXFA_TimeZoneProvider::Destroy(); - delete m_pFontMgr; -#if _FXM_PLATFORM_ != _FXM_PLATFORM_WINDOWS_ - if (m_pFontSource) - m_pFontSource->Release(); -#endif - if (m_pFDEFontMgr) - m_pFDEFontMgr->Release(); -} -IXFA_MenuHandler* CXFA_FFApp::GetMenuHandler() { - if (!m_pMenuHandler) { - m_pMenuHandler = new CXFA_FFMenuHandler; - } - return m_pMenuHandler; -} -IXFA_DocHandler* CXFA_FFApp::GetDocHandler() { - if (!m_pDocHandler) { - m_pDocHandler = new CXFA_FFDocHandler; - } - return m_pDocHandler; -} -IXFA_Doc* CXFA_FFApp::CreateDoc(IXFA_DocProvider* pProvider, - IFX_FileRead* pStream, - FX_BOOL bTakeOverFile) { - CXFA_FFDoc* pDoc = new CXFA_FFDoc(this, pProvider); - FX_BOOL bSuccess = pDoc->OpenDoc(pStream, bTakeOverFile); - if (!bSuccess) { - delete pDoc; - pDoc = NULL; - } - return pDoc; -} -IXFA_Doc* CXFA_FFApp::CreateDoc(IXFA_DocProvider* pProvider, - CPDF_Document* pPDFDoc) { - if (pPDFDoc == NULL) { - return NULL; - } - CXFA_FFDoc* pDoc = new CXFA_FFDoc(this, pProvider); - FX_BOOL bSuccess = pDoc->OpenDoc(pPDFDoc); - if (!bSuccess) { - delete pDoc; - pDoc = NULL; - } - return pDoc; -} - -void CXFA_FFApp::SetDefaultFontMgr(IXFA_FontMgr* pFontMgr) { - if (!m_pFontMgr) { - m_pFontMgr = new CXFA_FontMgr(); - } - m_pFontMgr->SetDefFontMgr(pFontMgr); -} -CXFA_FontMgr* CXFA_FFApp::GetXFAFontMgr() { - return m_pFontMgr; -} -IFX_FontMgr* CXFA_FFApp::GetFDEFontMgr() { - if (!m_pFDEFontMgr) { -#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ - m_pFDEFontMgr = IFX_FontMgr::Create(FX_GetDefFontEnumerator()); -#else - m_pFontSource = FX_CreateDefaultFontSourceEnum(); - m_pFDEFontMgr = IFX_FontMgr::Create(m_pFontSource); -#endif - } - return m_pFDEFontMgr; -} -CXFA_FWLTheme* CXFA_FFApp::GetFWLTheme() { - if (!m_pFWLTheme) { - m_pFWLTheme = new CXFA_FWLTheme(this); - } - return m_pFWLTheme; -} -IFWL_AdapterWidgetMgr* CXFA_FFApp::GetWidgetMgr( - IFWL_WidgetMgrDelegate* pDelegate) { - if (!m_pAdapterWidgetMgr) { - m_pAdapterWidgetMgr = new CXFA_FWLAdapterWidgetMgr; - pDelegate->OnSetCapability(FWL_WGTMGR_DisableThread | - FWL_WGTMGR_DisableForm); - m_pWidgetMgrDelegate = pDelegate; - } - return m_pAdapterWidgetMgr; -} -IFWL_AdapterThreadMgr* CXFA_FFApp::GetThreadMgr() { - if (!m_pAdapterThreadMgr) { - m_pAdapterThreadMgr = new CFWL_SDAdapterThreadMgr; - } - return m_pAdapterThreadMgr; -} -IFWL_AdapterTimerMgr* CXFA_FFApp::GetTimerMgr() { - return m_pProvider->GetTimerMgr(); -} diff --git a/xfa/src/fxfa/app/xfa_ffapp.h b/xfa/src/fxfa/app/xfa_ffapp.h deleted file mode 100644 index ba6a0f2034..0000000000 --- a/xfa/src/fxfa/app/xfa_ffapp.h +++ /dev/null @@ -1,81 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXFA_APP_XFA_FFAPP_H_ -#define XFA_SRC_FXFA_APP_XFA_FFAPP_H_ - -#include "core/include/fpdfapi/cpdf_stream.h" -#include "xfa/include/fwl/adapter/fwl_adapternative.h" -#include "xfa/include/fwl/adapter/fwl_sdadapterimp.h" -#include "xfa/include/fwl/core/fwl_app.h" -#include "xfa/include/fxfa/fxfa.h" -#include "xfa/src/fgas/font/fgas_font.h" - -class CXFA_FWLAdapterWidgetMgr; -class CXFA_FWLTheme; -class CXFA_FFDocHandler; -class CXFA_FFMenuHandler; -class CXFA_FontMgr; - -class CXFA_FileRead : public IFX_FileRead { - public: - explicit CXFA_FileRead(const CFX_ArrayTemplate& streams); - - virtual FX_FILESIZE GetSize(); - virtual FX_BOOL ReadBlock(void* buffer, FX_FILESIZE offset, size_t size); - - virtual void Release() { delete this; } - - protected: - CFX_ObjectArray m_Data; -}; - -class CXFA_FFApp : public IXFA_App, public IFWL_AdapterNative { - public: - CXFA_FFApp(IXFA_AppProvider* pProvider); - ~CXFA_FFApp() override; - - // IFXFA_App: - IXFA_DocHandler* GetDocHandler() override; - IXFA_Doc* CreateDoc(IXFA_DocProvider* pProvider, - IFX_FileRead* pStream, - FX_BOOL bTakeOverFile) override; - IXFA_Doc* CreateDoc(IXFA_DocProvider* pProvider, - CPDF_Document* pPDFDoc) override; - IXFA_AppProvider* GetAppProvider() override { return m_pProvider; } - void SetDefaultFontMgr(IXFA_FontMgr* pFontMgr) override; - IXFA_MenuHandler* GetMenuHandler() override; - - // IFWL_AdapterNative: - IFWL_AdapterWidgetMgr* GetWidgetMgr( - IFWL_WidgetMgrDelegate* pDelegate) override; - IFWL_AdapterThreadMgr* GetThreadMgr() override; - IFWL_AdapterTimerMgr* GetTimerMgr() override; - - CXFA_FontMgr* GetXFAFontMgr(); - IFX_FontMgr* GetFDEFontMgr(); - CXFA_FWLTheme* GetFWLTheme(); - IFWL_WidgetMgrDelegate* GetWidgetMgrDelegate() { - return m_pWidgetMgrDelegate; - } - - protected: - CXFA_FFDocHandler* m_pDocHandler; - IFWL_App* m_pFWLApp; - CXFA_FWLTheme* m_pFWLTheme; - IXFA_AppProvider* m_pProvider; - CXFA_FontMgr* m_pFontMgr; -#if _FXM_PLATFORM_ != _FXM_PLATFORM_WINDOWS_ - IFX_FontSourceEnum* m_pFontSource; -#endif - CXFA_FWLAdapterWidgetMgr* m_pAdapterWidgetMgr; - IFWL_WidgetMgrDelegate* m_pWidgetMgrDelegate; - IFX_FontMgr* m_pFDEFontMgr; - CXFA_FFMenuHandler* m_pMenuHandler; - CFWL_SDAdapterThreadMgr* m_pAdapterThreadMgr; -}; - -#endif // XFA_SRC_FXFA_APP_XFA_FFAPP_H_ diff --git a/xfa/src/fxfa/app/xfa_ffbarcode.cpp b/xfa/src/fxfa/app/xfa_ffbarcode.cpp deleted file mode 100644 index e1d4aa11c1..0000000000 --- a/xfa/src/fxfa/app/xfa_ffbarcode.cpp +++ /dev/null @@ -1,235 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fxfa/app/xfa_ffbarcode.h" - -#include "core/include/fxcrt/fx_ext.h" -#include "xfa/include/fwl/core/fwl_app.h" -#include "xfa/include/fwl/lightwidget/barcode.h" -#include "xfa/src/fxfa/app/xfa_fffield.h" -#include "xfa/src/fxfa/app/xfa_ffpageview.h" -#include "xfa/src/fxfa/app/xfa_fftextedit.h" -#include "xfa/src/fxfa/app/xfa_ffwidget.h" -#include "xfa/src/fxfa/app/xfa_fwladapter.h" - -static XFA_LPCBARCODETYPEENUMINFO XFA_GetBarcodeTypeByName( - const CFX_WideStringC& wsName); -CXFA_FFBarcode::CXFA_FFBarcode(CXFA_FFPageView* pPageView, - CXFA_WidgetAcc* pDataAcc) - : CXFA_FFTextEdit(pPageView, pDataAcc) {} -CXFA_FFBarcode::~CXFA_FFBarcode() {} -FX_BOOL CXFA_FFBarcode::LoadWidget() { - CFWL_Barcode* pFWLBarcode = CFWL_Barcode::Create(); - if (pFWLBarcode) { - pFWLBarcode->Initialize(); - } - m_pNormalWidget = pFWLBarcode; - IFWL_Widget* pWidget = m_pNormalWidget->GetWidget(); - m_pNormalWidget->SetPrivateData(pWidget, this, NULL); - IFWL_NoteDriver* pNoteDriver = FWL_GetApp()->GetNoteDriver(); - pNoteDriver->RegisterEventTarget(pWidget, pWidget); - m_pOldDelegate = m_pNormalWidget->SetDelegate(this); - m_pNormalWidget->LockUpdate(); - CFX_WideString wsText; - m_pDataAcc->GetValue(wsText, XFA_VALUEPICTURE_Display); - pFWLBarcode->SetText(wsText); - UpdateWidgetProperty(); - m_pNormalWidget->UnlockUpdate(); - return CXFA_FFField::LoadWidget(); -} -void CXFA_FFBarcode::RenderWidget(CFX_Graphics* pGS, - CFX_Matrix* pMatrix, - FX_DWORD dwStatus, - int32_t iRotate) { - if (!IsMatchVisibleStatus(dwStatus)) { - return; - } - CFX_Matrix mtRotate; - GetRotateMatrix(mtRotate); - if (pMatrix) { - mtRotate.Concat(*pMatrix); - } - CXFA_FFWidget::RenderWidget(pGS, &mtRotate, dwStatus); - CXFA_Border borderUI = m_pDataAcc->GetUIBorder(); - DrawBorder(pGS, borderUI, m_rtUI, &mtRotate); - RenderCaption(pGS, &mtRotate); - CFX_RectF rtWidget; - m_pNormalWidget->GetWidgetRect(rtWidget); - CFX_Matrix mt; - mt.Set(1, 0, 0, 1, rtWidget.left, rtWidget.top); - mt.Concat(mtRotate); - m_pNormalWidget->DrawWidget(pGS, &mt); -} -void CXFA_FFBarcode::UpdateWidgetProperty() { - CXFA_FFTextEdit::UpdateWidgetProperty(); - CFWL_Barcode* pBarCodeWidget = (CFWL_Barcode*)m_pNormalWidget; - CFX_WideString wsType = GetDataAcc()->GetBarcodeType(); - XFA_LPCBARCODETYPEENUMINFO pBarcodeTypeInfo = - XFA_GetBarcodeTypeByName(wsType); - pBarCodeWidget->SetType(pBarcodeTypeInfo->eBCType); - CXFA_WidgetAcc* pAcc = GetDataAcc(); - int32_t intVal; - FX_CHAR charVal; - FX_BOOL boolVal; - FX_FLOAT floatVal; - if (pAcc->GetBarcodeAttribute_CharEncoding(intVal)) { - pBarCodeWidget->SetCharEncoding((BC_CHAR_ENCODING)intVal); - } - if (pAcc->GetBarcodeAttribute_Checksum(intVal)) { - pBarCodeWidget->SetCalChecksum(intVal); - } - if (pAcc->GetBarcodeAttribute_DataLength(intVal)) { - pBarCodeWidget->SetDataLength(intVal); - } - if (pAcc->GetBarcodeAttribute_StartChar(charVal)) { - pBarCodeWidget->SetStartChar(charVal); - } - if (pAcc->GetBarcodeAttribute_EndChar(charVal)) { - pBarCodeWidget->SetEndChar(charVal); - } - if (pAcc->GetBarcodeAttribute_ECLevel(intVal)) { - pBarCodeWidget->SetErrorCorrectionLevel(intVal); - } - if (pAcc->GetBarcodeAttribute_ModuleWidth(intVal)) { - pBarCodeWidget->SetModuleWidth(intVal); - } - if (pAcc->GetBarcodeAttribute_ModuleHeight(intVal)) { - pBarCodeWidget->SetModuleHeight(intVal); - } - if (pAcc->GetBarcodeAttribute_PrintChecksum(boolVal)) { - pBarCodeWidget->SetPrintChecksum(boolVal); - } - if (pAcc->GetBarcodeAttribute_TextLocation(intVal)) { - pBarCodeWidget->SetTextLocation((BC_TEXT_LOC)intVal); - } - if (pAcc->GetBarcodeAttribute_Truncate(boolVal)) { - pBarCodeWidget->SetTruncated(boolVal); - } - if (pAcc->GetBarcodeAttribute_WideNarrowRatio(floatVal)) { - pBarCodeWidget->SetWideNarrowRatio((int32_t)floatVal); - } - if (pBarcodeTypeInfo->eName == XFA_BARCODETYPE_code3Of9 || - pBarcodeTypeInfo->eName == XFA_BARCODETYPE_ean8 || - pBarcodeTypeInfo->eName == XFA_BARCODETYPE_ean13 || - pBarcodeTypeInfo->eName == XFA_BARCODETYPE_upcA) { - pBarCodeWidget->SetPrintChecksum(TRUE); - } -} -FX_BOOL CXFA_FFBarcode::OnLButtonDown(FX_DWORD dwFlags, - FX_FLOAT fx, - FX_FLOAT fy) { - CFWL_Barcode* pBarCodeWidget = (CFWL_Barcode*)m_pNormalWidget; - if (!pBarCodeWidget || pBarCodeWidget->IsProtectedType()) { - return FALSE; - } - if (m_pDataAcc->GetAccess() != XFA_ATTRIBUTEENUM_Open) { - return FALSE; - } - return CXFA_FFTextEdit::OnLButtonDown(dwFlags, fx, fy); -} -FX_BOOL CXFA_FFBarcode::OnRButtonDown(FX_DWORD dwFlags, - FX_FLOAT fx, - FX_FLOAT fy) { - CFWL_Barcode* pBarCodeWidget = (CFWL_Barcode*)m_pNormalWidget; - if (!pBarCodeWidget || pBarCodeWidget->IsProtectedType()) { - return FALSE; - } - return CXFA_FFTextEdit::OnRButtonDown(dwFlags, fx, fy); -} -extern const XFA_BARCODETYPEENUMINFO g_XFABarCodeTypeEnumData[] = { - {0x7fb4a18, L"ean13", XFA_BARCODETYPE_ean13, BC_EAN13}, - {0x8d13a3d, L"code11", XFA_BARCODETYPE_code11, BC_UNKNOWN}, - {0x8d149a8, L"code49", XFA_BARCODETYPE_code49, BC_UNKNOWN}, - {0x8d16347, L"code93", XFA_BARCODETYPE_code93, BC_UNKNOWN}, - {0x91a92e2, L"upsMaxicode", XFA_BARCODETYPE_upsMaxicode, BC_UNKNOWN}, - {0xa7d48dc, L"fim", XFA_BARCODETYPE_fim, BC_UNKNOWN}, - {0xb359fe9, L"msi", XFA_BARCODETYPE_msi, BC_UNKNOWN}, - {0x121f738c, L"code2Of5Matrix", XFA_BARCODETYPE_code2Of5Matrix, BC_UNKNOWN}, - {0x15358616, L"ucc128", XFA_BARCODETYPE_ucc128, BC_UNKNOWN}, - {0x1f4bfa05, L"rfid", XFA_BARCODETYPE_rfid, BC_UNKNOWN}, - {0x1fda71bc, L"rss14Stacked", XFA_BARCODETYPE_rss14Stacked, BC_UNKNOWN}, - {0x22065087, L"ean8add2", XFA_BARCODETYPE_ean8add2, BC_UNKNOWN}, - {0x2206508a, L"ean8add5", XFA_BARCODETYPE_ean8add5, BC_UNKNOWN}, - {0x2278366c, L"codabar", XFA_BARCODETYPE_codabar, BC_CODABAR}, - {0x2a039a8d, L"telepen", XFA_BARCODETYPE_telepen, BC_UNKNOWN}, - {0x323ed337, L"upcApwcd", XFA_BARCODETYPE_upcApwcd, BC_UNKNOWN}, - {0x347a1846, L"postUSIMB", XFA_BARCODETYPE_postUSIMB, BC_UNKNOWN}, - {0x391bb836, L"code128", XFA_BARCODETYPE_code128, BC_CODE128}, - {0x398eddaf, L"dataMatrix", XFA_BARCODETYPE_dataMatrix, BC_DATAMATRIX}, - {0x3cff60a8, L"upcEadd2", XFA_BARCODETYPE_upcEadd2, BC_UNKNOWN}, - {0x3cff60ab, L"upcEadd5", XFA_BARCODETYPE_upcEadd5, BC_UNKNOWN}, - {0x402cb188, L"code2Of5Standard", XFA_BARCODETYPE_code2Of5Standard, - BC_UNKNOWN}, - {0x411764f7, L"aztec", XFA_BARCODETYPE_aztec, BC_UNKNOWN}, - {0x44d4e84c, L"ean8", XFA_BARCODETYPE_ean8, BC_EAN8}, - {0x48468902, L"ucc128sscc", XFA_BARCODETYPE_ucc128sscc, BC_UNKNOWN}, - {0x4880aea4, L"upcAadd2", XFA_BARCODETYPE_upcAadd2, BC_UNKNOWN}, - {0x4880aea7, L"upcAadd5", XFA_BARCODETYPE_upcAadd5, BC_UNKNOWN}, - {0x54f18256, L"code2Of5Industrial", XFA_BARCODETYPE_code2Of5Industrial, - BC_UNKNOWN}, - {0x58e15f25, L"rss14Limited", XFA_BARCODETYPE_rss14Limited, BC_UNKNOWN}, - {0x5c08d1b9, L"postAUSReplyPaid", XFA_BARCODETYPE_postAUSReplyPaid, - BC_UNKNOWN}, - {0x5fa700bd, L"rss14", XFA_BARCODETYPE_rss14, BC_UNKNOWN}, - {0x631a7e35, L"logmars", XFA_BARCODETYPE_logmars, BC_UNKNOWN}, - {0x6a236236, L"pdf417", XFA_BARCODETYPE_pdf417, BC_PDF417}, - {0x6d098ece, L"upcean2", XFA_BARCODETYPE_upcean2, BC_UNKNOWN}, - {0x6d098ed1, L"upcean5", XFA_BARCODETYPE_upcean5, BC_UNKNOWN}, - {0x76b04eed, L"code3Of9extended", XFA_BARCODETYPE_code3Of9extended, - BC_UNKNOWN}, - {0x7c7db84a, L"maxicode", XFA_BARCODETYPE_maxicode, BC_UNKNOWN}, - {0x8266f7f7, L"ucc128random", XFA_BARCODETYPE_ucc128random, BC_UNKNOWN}, - {0x83eca147, L"postUSDPBC", XFA_BARCODETYPE_postUSDPBC, BC_UNKNOWN}, - {0x8dd71de0, L"postAUSStandard", XFA_BARCODETYPE_postAUSStandard, - BC_UNKNOWN}, - {0x98adad85, L"plessey", XFA_BARCODETYPE_plessey, BC_UNKNOWN}, - {0x9f84cce6, L"ean13pwcd", XFA_BARCODETYPE_ean13pwcd, BC_UNKNOWN}, - {0xb514fbe9, L"upcA", XFA_BARCODETYPE_upcA, BC_UPCA}, - {0xb514fbed, L"upcE", XFA_BARCODETYPE_upcE, BC_UNKNOWN}, - {0xb5c6a853, L"ean13add2", XFA_BARCODETYPE_ean13add2, BC_UNKNOWN}, - {0xb5c6a856, L"ean13add5", XFA_BARCODETYPE_ean13add5, BC_UNKNOWN}, - {0xb81fc512, L"postUKRM4SCC", XFA_BARCODETYPE_postUKRM4SCC, BC_UNKNOWN}, - {0xbad34b22, L"code128SSCC", XFA_BARCODETYPE_code128SSCC, BC_UNKNOWN}, - {0xbfbe0cf6, L"postUS5Zip", XFA_BARCODETYPE_postUS5Zip, BC_UNKNOWN}, - {0xc56618e8, L"pdf417macro", XFA_BARCODETYPE_pdf417macro, BC_UNKNOWN}, - {0xca730f8a, L"code2Of5Interleaved", XFA_BARCODETYPE_code2Of5Interleaved, - BC_UNKNOWN}, - {0xd0097ac6, L"rss14Expanded", XFA_BARCODETYPE_rss14Expanded, BC_UNKNOWN}, - {0xd25a0240, L"postAUSCust2", XFA_BARCODETYPE_postAUSCust2, BC_UNKNOWN}, - {0xd25a0241, L"postAUSCust3", XFA_BARCODETYPE_postAUSCust3, BC_UNKNOWN}, - {0xd53ed3e7, L"rss14Truncated", XFA_BARCODETYPE_rss14Truncated, BC_UNKNOWN}, - {0xe72bcd57, L"code128A", XFA_BARCODETYPE_code128A, BC_UNKNOWN}, - {0xe72bcd58, L"code128B", XFA_BARCODETYPE_code128B, BC_CODE128_B}, - {0xe72bcd59, L"code128C", XFA_BARCODETYPE_code128C, BC_CODE128_C}, - {0xee83c50f, L"rss14StackedOmni", XFA_BARCODETYPE_rss14StackedOmni, - BC_UNKNOWN}, - {0xf2a18f7e, L"QRCode", XFA_BARCODETYPE_QRCode, BC_QR_CODE}, - {0xfaeaf37f, L"postUSStandard", XFA_BARCODETYPE_postUSStandard, BC_UNKNOWN}, - {0xfb48155c, L"code3Of9", XFA_BARCODETYPE_code3Of9, BC_CODE39}, -}; -extern const int32_t g_iXFABarcodeTypeCount = - sizeof(g_XFABarCodeTypeEnumData) / sizeof(XFA_BARCODETYPEENUMINFO); -static XFA_LPCBARCODETYPEENUMINFO XFA_GetBarcodeTypeByName( - const CFX_WideStringC& wsName) { - int32_t iLength = wsName.GetLength(); - if (iLength == 0) { - return NULL; - } - uint32_t uHash = FX_HashCode_String_GetW(wsName.GetPtr(), iLength, TRUE); - int32_t iStart = 0, iEnd = g_iXFABarcodeTypeCount - 1; - do { - int32_t iMid = (iStart + iEnd) / 2; - XFA_LPCBARCODETYPEENUMINFO pInfo = g_XFABarCodeTypeEnumData + iMid; - if (uHash == pInfo->uHash) { - return pInfo; - } else if (uHash < pInfo->uHash) { - iEnd = iMid - 1; - } else { - iStart = iMid + 1; - } - } while (iStart <= iEnd); - return NULL; -} diff --git a/xfa/src/fxfa/app/xfa_ffbarcode.h b/xfa/src/fxfa/app/xfa_ffbarcode.h deleted file mode 100644 index d2f8058296..0000000000 --- a/xfa/src/fxfa/app/xfa_ffbarcode.h +++ /dev/null @@ -1,101 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXFA_APP_XFA_FFBARCODE_H_ -#define XFA_SRC_FXFA_APP_XFA_FFBARCODE_H_ - -#include "xfa/include/fxbarcode/BC_BarCode.h" -#include "xfa/src/fxfa/app/xfa_ffpageview.h" -#include "xfa/src/fxfa/app/xfa_fftextedit.h" - -class CXFA_FFBarcode : public CXFA_FFTextEdit { - public: - CXFA_FFBarcode(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc); - virtual ~CXFA_FFBarcode(); - virtual FX_BOOL LoadWidget(); - virtual void RenderWidget(CFX_Graphics* pGS, - CFX_Matrix* pMatrix = NULL, - FX_DWORD dwStatus = 0, - int32_t iRotate = 0); - virtual void UpdateWidgetProperty(); - virtual FX_BOOL OnLButtonDown(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy); - virtual FX_BOOL OnRButtonDown(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy); -}; - -enum XFA_BARCODETYPEENUM { - XFA_BARCODETYPE_aztec, - XFA_BARCODETYPE_codabar, - XFA_BARCODETYPE_code11, - XFA_BARCODETYPE_code128, - XFA_BARCODETYPE_code128A, - XFA_BARCODETYPE_code128B, - XFA_BARCODETYPE_code128C, - XFA_BARCODETYPE_code128SSCC, - XFA_BARCODETYPE_code2Of5Industrial, - XFA_BARCODETYPE_code2Of5Interleaved, - XFA_BARCODETYPE_code2Of5Matrix, - XFA_BARCODETYPE_code2Of5Standard, - XFA_BARCODETYPE_code3Of9, - XFA_BARCODETYPE_code3Of9extended, - XFA_BARCODETYPE_code49, - XFA_BARCODETYPE_code93, - XFA_BARCODETYPE_dataMatrix, - XFA_BARCODETYPE_ean13, - XFA_BARCODETYPE_ean13add2, - XFA_BARCODETYPE_ean13add5, - XFA_BARCODETYPE_ean13pwcd, - XFA_BARCODETYPE_ean8, - XFA_BARCODETYPE_ean8add2, - XFA_BARCODETYPE_ean8add5, - XFA_BARCODETYPE_fim, - XFA_BARCODETYPE_logmars, - XFA_BARCODETYPE_maxicode, - XFA_BARCODETYPE_msi, - XFA_BARCODETYPE_pdf417, - XFA_BARCODETYPE_pdf417macro, - XFA_BARCODETYPE_plessey, - XFA_BARCODETYPE_postAUSCust2, - XFA_BARCODETYPE_postAUSCust3, - XFA_BARCODETYPE_postAUSReplyPaid, - XFA_BARCODETYPE_postAUSStandard, - XFA_BARCODETYPE_postUKRM4SCC, - XFA_BARCODETYPE_postUS5Zip, - XFA_BARCODETYPE_postUSDPBC, - XFA_BARCODETYPE_postUSIMB, - XFA_BARCODETYPE_postUSStandard, - XFA_BARCODETYPE_QRCode, - XFA_BARCODETYPE_rfid, - XFA_BARCODETYPE_rss14, - XFA_BARCODETYPE_rss14Expanded, - XFA_BARCODETYPE_rss14Limited, - XFA_BARCODETYPE_rss14Stacked, - XFA_BARCODETYPE_rss14StackedOmni, - XFA_BARCODETYPE_rss14Truncated, - XFA_BARCODETYPE_telepen, - XFA_BARCODETYPE_ucc128, - XFA_BARCODETYPE_ucc128random, - XFA_BARCODETYPE_ucc128sscc, - XFA_BARCODETYPE_upcA, - XFA_BARCODETYPE_upcAadd2, - XFA_BARCODETYPE_upcAadd5, - XFA_BARCODETYPE_upcApwcd, - XFA_BARCODETYPE_upcE, - XFA_BARCODETYPE_upcEadd2, - XFA_BARCODETYPE_upcEadd5, - XFA_BARCODETYPE_upcean2, - XFA_BARCODETYPE_upcean5, - XFA_BARCODETYPE_upsMaxicode -}; -struct XFA_BARCODETYPEENUMINFO { - uint32_t uHash; - const FX_WCHAR* pName; - XFA_BARCODETYPEENUM eName; - BC_TYPE eBCType; -}; -typedef XFA_BARCODETYPEENUMINFO const* XFA_LPCBARCODETYPEENUMINFO; -extern const XFA_BARCODETYPEENUMINFO g_XFABarCodeTypeEnumData[]; - -#endif // XFA_SRC_FXFA_APP_XFA_FFBARCODE_H_ diff --git a/xfa/src/fxfa/app/xfa_ffcheckbutton.cpp b/xfa/src/fxfa/app/xfa_ffcheckbutton.cpp deleted file mode 100644 index e5a6e809c4..0000000000 --- a/xfa/src/fxfa/app/xfa_ffcheckbutton.cpp +++ /dev/null @@ -1,335 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fxfa/app/xfa_ffcheckbutton.h" - -#include "xfa/include/fwl/core/fwl_widgetmgr.h" -#include "xfa/include/fwl/lightwidget/checkbox.h" -#include "xfa/src/fxfa/app/xfa_ffapp.h" -#include "xfa/src/fxfa/app/xfa_ffdoc.h" -#include "xfa/src/fxfa/app/xfa_ffdocview.h" -#include "xfa/src/fxfa/app/xfa_ffexclgroup.h" -#include "xfa/src/fxfa/app/xfa_fffield.h" -#include "xfa/src/fxfa/app/xfa_ffpageview.h" -#include "xfa/src/fxfa/app/xfa_ffwidget.h" - -CXFA_FFCheckButton::CXFA_FFCheckButton(CXFA_FFPageView* pPageView, - CXFA_WidgetAcc* pDataAcc) - : CXFA_FFField(pPageView, pDataAcc), m_pOldDelegate(NULL) { - m_rtCheckBox.Set(0, 0, 0, 0); -} -CXFA_FFCheckButton::~CXFA_FFCheckButton() {} -FX_BOOL CXFA_FFCheckButton::LoadWidget() { - CFWL_CheckBox* pCheckBox = CFWL_CheckBox::Create(); - pCheckBox->Initialize(); - m_pNormalWidget = pCheckBox; - IFWL_Widget* pWidget = m_pNormalWidget->GetWidget(); - m_pNormalWidget->SetPrivateData(pWidget, this, NULL); - IFWL_NoteDriver* pNoteDriver = FWL_GetApp()->GetNoteDriver(); - pNoteDriver->RegisterEventTarget(pWidget, pWidget); - m_pOldDelegate = m_pNormalWidget->SetDelegate(this); - if (m_pDataAcc->IsRadioButton()) { - pCheckBox->ModifyStylesEx(FWL_STYLEEXT_CKB_RadioButton, 0xFFFFFFFF); - } - m_pNormalWidget = (CFWL_Widget*)pCheckBox; - m_pNormalWidget->SetPrivateData(m_pNormalWidget->GetWidget(), this, NULL); - m_pNormalWidget->LockUpdate(); - UpdateWidgetProperty(); - XFA_CHECKSTATE eState = m_pDataAcc->GetCheckState(); - SetFWLCheckState(eState); - m_pNormalWidget->UnlockUpdate(); - return CXFA_FFField::LoadWidget(); -} -void CXFA_FFCheckButton::UpdateWidgetProperty() { - CFWL_CheckBox* pCheckBox = (CFWL_CheckBox*)m_pNormalWidget; - if (!m_pNormalWidget) { - return; - } - FX_FLOAT fSize = m_pDataAcc->GetCheckButtonSize(); - pCheckBox->SetBoxSize(fSize); - FX_DWORD dwStyleEx = FWL_STYLEEXT_CKB_SignShapeCross; - int32_t iCheckMark = m_pDataAcc->GetCheckButtonMark(); - switch (iCheckMark) { - case XFA_ATTRIBUTEENUM_Check: - dwStyleEx = FWL_STYLEEXT_CKB_SignShapeCheck; - break; - case XFA_ATTRIBUTEENUM_Circle: - dwStyleEx = FWL_STYLEEXT_CKB_SignShapeCircle; - break; - case XFA_ATTRIBUTEENUM_Cross: - break; - case XFA_ATTRIBUTEENUM_Diamond: - dwStyleEx = FWL_STYLEEXT_CKB_SignShapeDiamond; - break; - case XFA_ATTRIBUTEENUM_Square: - dwStyleEx = FWL_STYLEEXT_CKB_SignShapeSquare; - break; - case XFA_ATTRIBUTEENUM_Star: - dwStyleEx = FWL_STYLEEXT_CKB_SignShapeStar; - break; - default: { - int32_t iShape = m_pDataAcc->GetCheckButtonShape(); - if (iShape == XFA_ATTRIBUTEENUM_Round) { - dwStyleEx = FWL_STYLEEXT_CKB_SignShapeCircle; - } - } break; - } - if (m_pDataAcc->IsAllowNeutral()) { - dwStyleEx |= FWL_STYLEEXT_CKB_3State; - } - pCheckBox->ModifyStylesEx( - dwStyleEx, FWL_STYLEEXT_CKB_SignShapeMask | FWL_STYLEEXT_CKB_3State); -} -FX_BOOL CXFA_FFCheckButton::PerformLayout() { - CXFA_FFWidget::PerformLayout(); - FX_FLOAT fCheckSize = m_pDataAcc->GetCheckButtonSize(); - CXFA_Margin mgWidget = m_pDataAcc->GetMargin(); - CFX_RectF rtWidget; - GetRectWithoutRotate(rtWidget); - if (mgWidget) { - XFA_RectWidthoutMargin(rtWidget, mgWidget); - } - int32_t iCapPlacement = -1; - FX_FLOAT fCapReserve = 0; - CXFA_Caption caption = m_pDataAcc->GetCaption(); - if (caption && caption.GetPresence()) { - m_rtCaption.Set(rtWidget.left, rtWidget.top, rtWidget.width, - rtWidget.height); - iCapPlacement = caption.GetPlacementType(); - fCapReserve = caption.GetReserve(); - if (fCapReserve <= 0) { - if (iCapPlacement == XFA_ATTRIBUTEENUM_Top || - iCapPlacement == XFA_ATTRIBUTEENUM_Bottom) { - fCapReserve = rtWidget.height - fCheckSize; - } else { - fCapReserve = rtWidget.width - fCheckSize; - } - } - } - int32_t iHorzAlign = XFA_ATTRIBUTEENUM_Left; - int32_t iVertAlign = XFA_ATTRIBUTEENUM_Top; - if (CXFA_Para para = m_pDataAcc->GetPara()) { - iHorzAlign = para.GetHorizontalAlign(); - iVertAlign = para.GetVerticalAlign(); - } - m_rtUI = rtWidget; - CXFA_Margin mgCap = caption.GetMargin(); - switch (iCapPlacement) { - case XFA_ATTRIBUTEENUM_Left: { - m_rtCaption.width = fCapReserve; - CapLeftRightPlacement(mgCap); - m_rtUI.width -= fCapReserve; - m_rtUI.left += fCapReserve; - } break; - case XFA_ATTRIBUTEENUM_Top: { - m_rtCaption.height = fCapReserve; - XFA_RectWidthoutMargin(m_rtCaption, mgCap); - m_rtUI.height -= fCapReserve; - m_rtUI.top += fCapReserve; - } break; - case XFA_ATTRIBUTEENUM_Right: { - m_rtCaption.left = m_rtCaption.right() - fCapReserve; - m_rtCaption.width = fCapReserve; - CapLeftRightPlacement(mgCap); - m_rtUI.width -= fCapReserve; - } break; - case XFA_ATTRIBUTEENUM_Bottom: { - m_rtCaption.top = m_rtCaption.bottom() - fCapReserve; - m_rtCaption.height = fCapReserve; - XFA_RectWidthoutMargin(m_rtCaption, mgCap); - m_rtUI.height -= fCapReserve; - } break; - case XFA_ATTRIBUTEENUM_Inline: - break; - default: - iHorzAlign = XFA_ATTRIBUTEENUM_Right; - break; - } - if (iHorzAlign == XFA_ATTRIBUTEENUM_Center) { - m_rtUI.left += (m_rtUI.width - fCheckSize) / 2; - } else if (iHorzAlign == XFA_ATTRIBUTEENUM_Right) { - m_rtUI.left = m_rtUI.right() - fCheckSize; - } - if (iVertAlign == XFA_ATTRIBUTEENUM_Middle) { - m_rtUI.top += (m_rtUI.height - fCheckSize) / 2; - } else if (iVertAlign == XFA_ATTRIBUTEENUM_Bottom) { - m_rtUI.top = m_rtUI.bottom() - fCheckSize; - } - m_rtUI.width = fCheckSize; - m_rtUI.height = fCheckSize; - AddUIMargin(iCapPlacement); - m_rtCheckBox = m_rtUI; - CXFA_Border borderUI = m_pDataAcc->GetUIBorder(); - if (borderUI) { - CXFA_Margin margin = borderUI.GetMargin(); - if (margin) { - XFA_RectWidthoutMargin(m_rtUI, margin); - } - } - m_rtUI.Normalize(); - LayoutCaption(); - SetFWLRect(); - if (m_pNormalWidget) { - m_pNormalWidget->Update(); - } - return TRUE; -} -void CXFA_FFCheckButton::CapLeftRightPlacement(CXFA_Margin mgCap) { - XFA_RectWidthoutMargin(m_rtCaption, mgCap); - if (m_rtCaption.height < 0) { - m_rtCaption.top += m_rtCaption.height; - } - if (m_rtCaption.width < 0) { - m_rtCaption.left += m_rtCaption.width; - m_rtCaption.width = -m_rtCaption.width; - } -} -void CXFA_FFCheckButton::AddUIMargin(int32_t iCapPlacement) { - CFX_RectF rtUIMargin; - m_pDataAcc->GetUIMargin(rtUIMargin); - m_rtUI.top -= rtUIMargin.top / 2 - rtUIMargin.height / 2; - FX_FLOAT fLeftAddRight = rtUIMargin.left + rtUIMargin.width; - FX_FLOAT fTopAddBottom = rtUIMargin.top + rtUIMargin.height; - if (m_rtUI.width < fLeftAddRight) { - if (iCapPlacement == XFA_ATTRIBUTEENUM_Right || - iCapPlacement == XFA_ATTRIBUTEENUM_Left) { - m_rtUI.left -= fLeftAddRight - m_rtUI.width; - } else { - m_rtUI.left -= 2 * (fLeftAddRight - m_rtUI.width); - } - m_rtUI.width += 2 * (fLeftAddRight - m_rtUI.width); - } - if (m_rtUI.height < fTopAddBottom) { - if (iCapPlacement == XFA_ATTRIBUTEENUM_Right) { - m_rtUI.left -= fTopAddBottom - m_rtUI.height; - } - m_rtUI.top -= fTopAddBottom - m_rtUI.height; - m_rtUI.height += 2 * (fTopAddBottom - m_rtUI.height); - } -} -void CXFA_FFCheckButton::RenderWidget(CFX_Graphics* pGS, - CFX_Matrix* pMatrix, - FX_DWORD dwStatus, - int32_t iRotate) { - if (!IsMatchVisibleStatus(dwStatus)) { - return; - } - CFX_Matrix mtRotate; - GetRotateMatrix(mtRotate); - if (pMatrix) { - mtRotate.Concat(*pMatrix); - } - CXFA_FFWidget::RenderWidget(pGS, &mtRotate, dwStatus); - CXFA_Border borderUI = m_pDataAcc->GetUIBorder(); - DrawBorder(pGS, borderUI, m_rtUI, &mtRotate, - m_pDataAcc->GetCheckButtonShape() == XFA_ATTRIBUTEENUM_Round - ? XFA_DRAWBOX_ForceRound - : 0); - RenderCaption(pGS, &mtRotate); - DrawHighlight(pGS, &mtRotate, dwStatus, - m_pDataAcc->GetCheckButtonShape() == XFA_ATTRIBUTEENUM_Round); - CFX_Matrix mt; - mt.Set(1, 0, 0, 1, m_rtCheckBox.left, m_rtCheckBox.top); - mt.Concat(mtRotate); - GetApp()->GetWidgetMgrDelegate()->OnDrawWidget(m_pNormalWidget->GetWidget(), - pGS, &mt); -} -FX_BOOL CXFA_FFCheckButton::OnLButtonUp(FX_DWORD dwFlags, - FX_FLOAT fx, - FX_FLOAT fy) { - if (!m_pNormalWidget) { - return FALSE; - } - if (!IsButtonDown()) { - return FALSE; - } - SetButtonDown(FALSE); - CFWL_MsgMouse ms; - ms.m_dwCmd = FWL_MSGMOUSECMD_LButtonUp; - ms.m_dwFlags = dwFlags; - ms.m_fx = fx; - ms.m_fy = fy; - FWLToClient(ms.m_fx, ms.m_fy); - ms.m_pDstTarget = m_pNormalWidget->m_pIface; - TranslateFWLMessage(&ms); - return TRUE; -} -XFA_CHECKSTATE CXFA_FFCheckButton::FWLState2XFAState() { - XFA_CHECKSTATE eCheckState = XFA_CHECKSTATE_Off; - FX_DWORD dwState = m_pNormalWidget->GetStates(); - if (dwState & FWL_STATE_CKB_Checked) { - eCheckState = XFA_CHECKSTATE_On; - } else if (dwState & FWL_STATE_CKB_Neutral) { - eCheckState = XFA_CHECKSTATE_Neutral; - } - return eCheckState; -} -FX_BOOL CXFA_FFCheckButton::CommitData() { - XFA_CHECKSTATE eCheckState = FWLState2XFAState(); - m_pDataAcc->SetCheckState(eCheckState, TRUE); - return TRUE; -} -FX_BOOL CXFA_FFCheckButton::IsDataChanged() { - XFA_CHECKSTATE eCheckState = FWLState2XFAState(); - return m_pDataAcc->GetCheckState() != eCheckState; -} -void CXFA_FFCheckButton::SetFWLCheckState(XFA_CHECKSTATE eCheckState) { - if (eCheckState == XFA_CHECKSTATE_Neutral) { - m_pNormalWidget->SetStates(FWL_STATE_CKB_Neutral, TRUE); - } else { - m_pNormalWidget->SetStates(FWL_STATE_CKB_Checked, - eCheckState == XFA_CHECKSTATE_On); - } -} -FX_BOOL CXFA_FFCheckButton::UpdateFWLData() { - if (!m_pNormalWidget) { - return FALSE; - } - XFA_CHECKSTATE eState = m_pDataAcc->GetCheckState(); - SetFWLCheckState(eState); - m_pNormalWidget->Update(); - return TRUE; -} -int32_t CXFA_FFCheckButton::OnProcessMessage(CFWL_Message* pMessage) { - return m_pOldDelegate->OnProcessMessage(pMessage); -} -FWL_ERR CXFA_FFCheckButton::OnProcessEvent(CFWL_Event* pEvent) { - CXFA_FFField::OnProcessEvent(pEvent); - FX_DWORD dwEventID = pEvent->GetClassID(); - switch (dwEventID) { - case FWL_EVTHASH_CKB_CheckStateChanged: { - CXFA_EventParam eParam; - eParam.m_eType = XFA_EVENT_Change; - m_pDataAcc->GetValue(eParam.m_wsNewText, XFA_VALUEPICTURE_Raw); - CXFA_WidgetAcc* pFFExclGroup = m_pDataAcc->GetExclGroup(); - if (ProcessCommittedData()) { - eParam.m_pTarget = pFFExclGroup; - if (pFFExclGroup) { - m_pDocView->AddValidateWidget(pFFExclGroup); - m_pDocView->AddCalculateWidgetAcc(pFFExclGroup); - pFFExclGroup->ProcessEvent(XFA_ATTRIBUTEENUM_Change, &eParam); - } - eParam.m_pTarget = m_pDataAcc; - m_pDataAcc->ProcessEvent(XFA_ATTRIBUTEENUM_Change, &eParam); - } else { - SetFWLCheckState(m_pDataAcc->GetCheckState()); - } - if (pFFExclGroup) { - eParam.m_pTarget = pFFExclGroup; - pFFExclGroup->ProcessEvent(XFA_ATTRIBUTEENUM_Click, &eParam); - } - eParam.m_pTarget = m_pDataAcc; - m_pDataAcc->ProcessEvent(XFA_ATTRIBUTEENUM_Click, &eParam); - break; - } - default: {} - } - return m_pOldDelegate->OnProcessEvent(pEvent); -} -FWL_ERR CXFA_FFCheckButton::OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - return m_pOldDelegate->OnDrawWidget(pGraphics, pMatrix); -} diff --git a/xfa/src/fxfa/app/xfa_ffcheckbutton.h b/xfa/src/fxfa/app/xfa_ffcheckbutton.h deleted file mode 100644 index 9731d4d53b..0000000000 --- a/xfa/src/fxfa/app/xfa_ffcheckbutton.h +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXFA_APP_XFA_FFCHECKBUTTON_H_ -#define XFA_SRC_FXFA_APP_XFA_FFCHECKBUTTON_H_ - -#include "xfa/src/fxfa/app/xfa_fffield.h" -#include "xfa/src/fxfa/app/xfa_ffpageview.h" - -class CXFA_FFCheckButton : public CXFA_FFField { - public: - CXFA_FFCheckButton(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc); - virtual ~CXFA_FFCheckButton(); - virtual void RenderWidget(CFX_Graphics* pGS, - CFX_Matrix* pMatrix = NULL, - FX_DWORD dwStatus = 0, - int32_t iRotate = 0); - - virtual FX_BOOL LoadWidget(); - virtual FX_BOOL PerformLayout(); - virtual FX_BOOL UpdateFWLData(); - virtual void UpdateWidgetProperty(); - virtual FX_BOOL OnLButtonUp(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy); - void SetFWLCheckState(XFA_CHECKSTATE eCheckState); - virtual int32_t OnProcessMessage(CFWL_Message* pMessage); - virtual FWL_ERR OnProcessEvent(CFWL_Event* pEvent); - virtual FWL_ERR OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL); - - protected: - virtual FX_BOOL CommitData(); - virtual FX_BOOL IsDataChanged(); - void CapLeftRightPlacement(CXFA_Margin mgCap); - void AddUIMargin(int32_t iCapPlacement); - XFA_CHECKSTATE FWLState2XFAState(); - IFWL_WidgetDelegate* m_pOldDelegate; - CFX_RectF m_rtCheckBox; -}; - -#endif // XFA_SRC_FXFA_APP_XFA_FFCHECKBUTTON_H_ diff --git a/xfa/src/fxfa/app/xfa_ffchoicelist.cpp b/xfa/src/fxfa/app/xfa_ffchoicelist.cpp deleted file mode 100644 index cb481f56a4..0000000000 --- a/xfa/src/fxfa/app/xfa_ffchoicelist.cpp +++ /dev/null @@ -1,530 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fxfa/app/xfa_ffchoicelist.h" - -#include "xfa/include/fwl/basewidget/fwl_edit.h" -#include "xfa/include/fwl/core/fwl_app.h" -#include "xfa/include/fwl/lightwidget/combobox.h" -#include "xfa/include/fwl/lightwidget/listbox.h" -#include "xfa/src/fxfa/app/xfa_ffdoc.h" -#include "xfa/src/fxfa/app/xfa_ffdocview.h" -#include "xfa/src/fxfa/app/xfa_fffield.h" -#include "xfa/src/fxfa/app/xfa_ffpageview.h" -#include "xfa/src/fxfa/app/xfa_ffwidget.h" -#include "xfa/src/fxfa/app/xfa_fwladapter.h" - -CXFA_FFListBox::CXFA_FFListBox(CXFA_FFPageView* pPageView, - CXFA_WidgetAcc* pDataAcc) - : CXFA_FFField(pPageView, pDataAcc), m_pOldDelegate(NULL) {} -CXFA_FFListBox::~CXFA_FFListBox() { - if (m_pNormalWidget) { - IFWL_Widget* pWidget = m_pNormalWidget->GetWidget(); - IFWL_NoteDriver* pNoteDriver = FWL_GetApp()->GetNoteDriver(); - pNoteDriver->UnregisterEventTarget(pWidget); - } -} -FX_BOOL CXFA_FFListBox::LoadWidget() { - CFWL_ListBox* pListBox = CFWL_ListBox::Create(); - pListBox->Initialize(); - pListBox->ModifyStyles(FWL_WGTSTYLE_VScroll | FWL_WGTSTYLE_NoBackground, - 0xFFFFFFFF); - m_pNormalWidget = (CFWL_Widget*)pListBox; - IFWL_Widget* pWidget = m_pNormalWidget->GetWidget(); - m_pNormalWidget->SetPrivateData(pWidget, this, NULL); - IFWL_NoteDriver* pNoteDriver = FWL_GetApp()->GetNoteDriver(); - pNoteDriver->RegisterEventTarget(pWidget, pWidget); - m_pOldDelegate = m_pNormalWidget->SetDelegate(this); - m_pNormalWidget->LockUpdate(); - CFX_WideStringArray wsLabelArray; - m_pDataAcc->GetChoiceListItems(wsLabelArray, FALSE); - int32_t iItems = wsLabelArray.GetSize(); - for (int32_t i = 0; i < iItems; i++) { - pListBox->AddString(wsLabelArray[i]); - } - FX_DWORD dwExtendedStyle = FWL_STYLEEXT_LTB_ShowScrollBarFocus; - if (m_pDataAcc->GetChoiceListOpen() == XFA_ATTRIBUTEENUM_MultiSelect) { - dwExtendedStyle |= FWL_STYLEEXT_LTB_MultiSelection; - } - dwExtendedStyle |= GetAlignment(); - m_pNormalWidget->ModifyStylesEx(dwExtendedStyle, 0xFFFFFFFF); - CFX_Int32Array iSelArray; - m_pDataAcc->GetSelectedItems(iSelArray); - int32_t iSelCount = iSelArray.GetSize(); - for (int32_t j = 0; j < iSelCount; j++) { - FWL_HLISTITEM item = pListBox->GetItem(iSelArray[j]); - pListBox->SetSelItem(item, TRUE); - } - m_pNormalWidget->UnlockUpdate(); - return CXFA_FFField::LoadWidget(); -} -FX_BOOL CXFA_FFListBox::OnKillFocus(CXFA_FFWidget* pNewFocus) { - FX_BOOL flag = ProcessCommittedData(); - if (!flag) { - UpdateFWLData(); - } - CXFA_FFField::OnKillFocus(pNewFocus); - return TRUE; -} -FX_BOOL CXFA_FFListBox::CommitData() { - CFWL_ListBox* pListBox = static_cast(m_pNormalWidget); - int32_t iSels = pListBox->CountSelItems(); - CFX_Int32Array iSelArray; - for (int32_t i = 0; i < iSels; i++) { - iSelArray.Add(pListBox->GetSelIndex(i)); - } - m_pDataAcc->SetSelectdItems(iSelArray, TRUE); - return TRUE; -} -FX_BOOL CXFA_FFListBox::IsDataChanged() { - CFX_Int32Array iSelArray; - m_pDataAcc->GetSelectedItems(iSelArray); - int32_t iOldSels = iSelArray.GetSize(); - CFWL_ListBox* pListBox = (CFWL_ListBox*)m_pNormalWidget; - int32_t iSels = pListBox->CountSelItems(); - if (iOldSels == iSels) { - int32_t iIndex = 0; - for (; iIndex < iSels; iIndex++) { - FWL_HLISTITEM hlistItem = pListBox->GetItem(iSelArray[iIndex]); - if (!(pListBox->GetItemStates(hlistItem) && FWL_ITEMSTATE_LTB_Selected)) { - break; - } - } - if (iIndex == iSels) { - return FALSE; - } - } - return TRUE; -} -FX_DWORD CXFA_FFListBox::GetAlignment() { - FX_DWORD dwExtendedStyle = 0; - if (CXFA_Para para = m_pDataAcc->GetPara()) { - int32_t iHorz = para.GetHorizontalAlign(); - switch (iHorz) { - case XFA_ATTRIBUTEENUM_Center: - dwExtendedStyle |= FWL_STYLEEXT_LTB_CenterAlign; - break; - case XFA_ATTRIBUTEENUM_Justify: - break; - case XFA_ATTRIBUTEENUM_JustifyAll: - break; - case XFA_ATTRIBUTEENUM_Radix: - break; - case XFA_ATTRIBUTEENUM_Right: - dwExtendedStyle |= FWL_STYLEEXT_LTB_RightAlign; - break; - default: - dwExtendedStyle |= FWL_STYLEEXT_LTB_LeftAlign; - break; - } - } - return dwExtendedStyle; -} -FX_BOOL CXFA_FFListBox::UpdateFWLData() { - if (!m_pNormalWidget) { - return FALSE; - } - CFWL_ListBox* pListBox = ((CFWL_ListBox*)m_pNormalWidget); - CFX_ArrayTemplate selItemArray; - CFX_Int32Array iSelArray; - m_pDataAcc->GetSelectedItems(iSelArray); - int32_t iSelCount = iSelArray.GetSize(); - for (int32_t j = 0; j < iSelCount; j++) { - FWL_HLISTITEM lpItemSel = pListBox->GetSelItem(iSelArray[j]); - selItemArray.Add(lpItemSel); - } - pListBox->SetSelItem(pListBox->GetSelItem(-1), FALSE); - for (int32_t i = 0; i < iSelCount; i++) { - ((CFWL_ListBox*)m_pNormalWidget)->SetSelItem(selItemArray[i], TRUE); - } - m_pNormalWidget->Update(); - return TRUE; -} -void CXFA_FFListBox::OnSelectChanged(IFWL_Widget* pWidget, - const CFX_Int32Array& arrSels) { - CXFA_EventParam eParam; - eParam.m_eType = XFA_EVENT_Change; - eParam.m_pTarget = m_pDataAcc; - m_pDataAcc->GetValue(eParam.m_wsPrevText, XFA_VALUEPICTURE_Raw); - CFWL_ListBox* pListBox = (CFWL_ListBox*)m_pNormalWidget; - int32_t iSels = pListBox->CountSelItems(); - if (iSels > 0) { - pListBox->GetItemText(pListBox->GetSelItem(0), eParam.m_wsNewText); - } - m_pDataAcc->ProcessEvent(XFA_ATTRIBUTEENUM_Change, &eParam); -} -void CXFA_FFListBox::SetItemState(int32_t nIndex, FX_BOOL bSelected) { - FWL_HLISTITEM item = ((CFWL_ListBox*)m_pNormalWidget)->GetSelItem(nIndex); - ((CFWL_ListBox*)m_pNormalWidget)->SetSelItem(item, bSelected); - m_pNormalWidget->Update(); - AddInvalidateRect(); -} -void CXFA_FFListBox::InsertItem(const CFX_WideStringC& wsLabel, - int32_t nIndex) { - CFX_WideString wsTemp(wsLabel); - ((CFWL_ListBox*)m_pNormalWidget)->AddString(wsTemp); - m_pNormalWidget->Update(); - AddInvalidateRect(); -} -void CXFA_FFListBox::DeleteItem(int32_t nIndex) { - if (nIndex < 0) { - ((CFWL_ListBox*)m_pNormalWidget)->DeleteAll(); - } else { - ((CFWL_ListBox*)m_pNormalWidget) - ->DeleteString(((CFWL_ListBox*)m_pNormalWidget)->GetItem(nIndex)); - } - m_pNormalWidget->Update(); - AddInvalidateRect(); -} -int32_t CXFA_FFListBox::OnProcessMessage(CFWL_Message* pMessage) { - return m_pOldDelegate->OnProcessMessage(pMessage); -} -FWL_ERR CXFA_FFListBox::OnProcessEvent(CFWL_Event* pEvent) { - CXFA_FFField::OnProcessEvent(pEvent); - FX_DWORD dwEventID = pEvent->GetClassID(); - switch (dwEventID) { - case FWL_EVTHASH_LTB_SelChanged: { - CFX_Int32Array arrSels; - OnSelectChanged(m_pNormalWidget->GetWidget(), arrSels); - break; - } - default: {} - } - return m_pOldDelegate->OnProcessEvent(pEvent); -} -FWL_ERR CXFA_FFListBox::OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - return m_pOldDelegate->OnDrawWidget(pGraphics, pMatrix); -} - -CXFA_FFComboBox::CXFA_FFComboBox(CXFA_FFPageView* pPageView, - CXFA_WidgetAcc* pDataAcc) - : CXFA_FFField(pPageView, pDataAcc), m_pOldDelegate(NULL) {} - -CXFA_FFComboBox::~CXFA_FFComboBox() {} - -FX_BOOL CXFA_FFComboBox::GetBBox(CFX_RectF& rtBox, - FX_DWORD dwStatus, - FX_BOOL bDrawFocus) { - if (bDrawFocus) - return FALSE; - return CXFA_FFWidget::GetBBox(rtBox, dwStatus); -} - -FX_BOOL CXFA_FFComboBox::PtInActiveRect(FX_FLOAT fx, FX_FLOAT fy) { - if (!m_pNormalWidget) { - return FALSE; - } - CFX_RectF rtWidget; - ((CFWL_ComboBox*)m_pNormalWidget)->GetBBox(rtWidget); - if (rtWidget.Contains(fx, fy)) { - return TRUE; - } - return FALSE; -} -FX_BOOL CXFA_FFComboBox::LoadWidget() { - CFWL_ComboBox* pComboBox = CFWL_ComboBox::Create(); - pComboBox->Initialize(); - m_pNormalWidget = (CFWL_Widget*)pComboBox; - IFWL_Widget* pWidget = m_pNormalWidget->GetWidget(); - m_pNormalWidget->SetPrivateData(pWidget, this, NULL); - IFWL_NoteDriver* pNoteDriver = FWL_GetApp()->GetNoteDriver(); - pNoteDriver->RegisterEventTarget(pWidget, pWidget); - m_pOldDelegate = m_pNormalWidget->SetDelegate(this); - m_pNormalWidget->LockUpdate(); - CFX_WideStringArray wsLabelArray; - m_pDataAcc->GetChoiceListItems(wsLabelArray, FALSE); - int32_t iItems = wsLabelArray.GetSize(); - for (int32_t i = 0; i < iItems; i++) { - pComboBox->AddString(wsLabelArray[i]); - } - CFX_Int32Array iSelArray; - m_pDataAcc->GetSelectedItems(iSelArray); - int32_t iSelCount = iSelArray.GetSize(); - if (iSelCount > 0) { - pComboBox->SetCurSel(iSelArray[0]); - } else { - CFX_WideString wsText; - m_pDataAcc->GetValue(wsText, XFA_VALUEPICTURE_Raw); - pComboBox->SetEditText(wsText); - } - UpdateWidgetProperty(); - m_pNormalWidget->UnlockUpdate(); - return CXFA_FFField::LoadWidget(); -} -void CXFA_FFComboBox::UpdateWidgetProperty() { - CFWL_ComboBox* pComboBox = (CFWL_ComboBox*)m_pNormalWidget; - if (!pComboBox) { - return; - } - FX_DWORD dwExtendedStyle = 0; - FX_DWORD dwEditStyles = - FWL_STYLEEXT_EDT_ReadOnly | FWL_STYLEEXT_EDT_LastLineHeight; - dwExtendedStyle |= UpdateUIProperty(); - if (m_pDataAcc->IsChoiceListAllowTextEntry()) { - dwEditStyles &= ~FWL_STYLEEXT_EDT_ReadOnly; - dwExtendedStyle |= FWL_STYLEEXT_CMB_DropDown; - } - if (m_pDataAcc->GetAccess() != XFA_ATTRIBUTEENUM_Open || - !m_pDataAcc->GetDoc()->GetXFADoc()->IsInteractive()) { - dwEditStyles |= FWL_STYLEEXT_EDT_ReadOnly; - dwExtendedStyle |= FWL_STYLEEXT_CMB_ReadOnly; - } - dwExtendedStyle |= GetAlignment(); - m_pNormalWidget->ModifyStylesEx(dwExtendedStyle, 0xFFFFFFFF); - if (m_pDataAcc->GetHorizontalScrollPolicy() != XFA_ATTRIBUTEENUM_Off) { - dwEditStyles |= FWL_STYLEEXT_EDT_AutoHScroll; - } - pComboBox->EditModifyStylesEx(dwEditStyles, 0xFFFFFFFF); -} -FX_BOOL CXFA_FFComboBox::OnRButtonUp(FX_DWORD dwFlags, - FX_FLOAT fx, - FX_FLOAT fy) { - if (!CXFA_FFField::OnRButtonUp(dwFlags, fx, fy)) - return FALSE; - - GetDoc()->GetDocProvider()->PopupMenu(this, CFX_PointF(fx, fy), nullptr); - return TRUE; -} -FX_BOOL CXFA_FFComboBox::OnKillFocus(CXFA_FFWidget* pNewWidget) { - FX_BOOL flag = ProcessCommittedData(); - if (!flag) { - UpdateFWLData(); - } - CXFA_FFField::OnKillFocus(pNewWidget); - return TRUE; -} -void CXFA_FFComboBox::OpenDropDownList() { - ((CFWL_ComboBox*)m_pNormalWidget)->OpenDropDownList(TRUE); -} -FX_BOOL CXFA_FFComboBox::CommitData() { - return m_pDataAcc->SetValue(m_wsNewValue, XFA_VALUEPICTURE_Raw); -} -FX_BOOL CXFA_FFComboBox::IsDataChanged() { - CFWL_ComboBox* pFWLcombobox = ((CFWL_ComboBox*)m_pNormalWidget); - CFX_WideString wsText; - pFWLcombobox->GetEditText(wsText); - int32_t iCursel = pFWLcombobox->GetCurSel(); - if (iCursel >= 0) { - CFX_WideString wsSel; - pFWLcombobox->GetTextByIndex(iCursel, wsSel); - if (wsSel == wsText) { - m_pDataAcc->GetChoiceListItem(wsText, iCursel, TRUE); - } - } - CFX_WideString wsOldValue; - m_pDataAcc->GetValue(wsOldValue, XFA_VALUEPICTURE_Raw); - if (wsOldValue != wsText) { - m_wsNewValue = wsText; - return TRUE; - } - return FALSE; -} -void CXFA_FFComboBox::FWLEventSelChange(CXFA_EventParam* pParam) { - pParam->m_eType = XFA_EVENT_Change; - pParam->m_pTarget = m_pDataAcc; - CFWL_ComboBox* pFWLcombobox = ((CFWL_ComboBox*)m_pNormalWidget); - pFWLcombobox->GetEditText(pParam->m_wsNewText); - m_pDataAcc->ProcessEvent(XFA_ATTRIBUTEENUM_Change, pParam); -} -FX_DWORD CXFA_FFComboBox::GetAlignment() { - FX_DWORD dwExtendedStyle = 0; - if (CXFA_Para para = m_pDataAcc->GetPara()) { - int32_t iHorz = para.GetHorizontalAlign(); - switch (iHorz) { - case XFA_ATTRIBUTEENUM_Center: - dwExtendedStyle |= - FWL_STYLEEXT_CMB_EditHCenter | FWL_STYLEEXT_CMB_ListItemCenterAlign; - break; - case XFA_ATTRIBUTEENUM_Justify: - dwExtendedStyle |= FWL_STYLEEXT_CMB_EditJustified; - break; - case XFA_ATTRIBUTEENUM_JustifyAll: - break; - case XFA_ATTRIBUTEENUM_Radix: - break; - case XFA_ATTRIBUTEENUM_Right: - break; - default: - dwExtendedStyle |= - FWL_STYLEEXT_CMB_EditHNear | FWL_STYLEEXT_CMB_ListItemLeftAlign; - break; - } - int32_t iVert = para.GetVerticalAlign(); - switch (iVert) { - case XFA_ATTRIBUTEENUM_Middle: - dwExtendedStyle |= FWL_STYLEEXT_CMB_EditVCenter; - break; - case XFA_ATTRIBUTEENUM_Bottom: - dwExtendedStyle |= FWL_STYLEEXT_CMB_EditVFar; - break; - default: - dwExtendedStyle |= FWL_STYLEEXT_CMB_EditVNear; - break; - } - } - return dwExtendedStyle; -} -FX_BOOL CXFA_FFComboBox::UpdateFWLData() { - if (!m_pNormalWidget) { - return FALSE; - } - CFX_Int32Array iSelArray; - m_pDataAcc->GetSelectedItems(iSelArray); - int32_t iSelCount = iSelArray.GetSize(); - if (iSelCount > 0) { - ((CFWL_ComboBox*)m_pNormalWidget)->SetCurSel(iSelArray[0]); - } else { - CFX_WideString wsText; - ((CFWL_ComboBox*)m_pNormalWidget)->SetCurSel(-1); - m_pDataAcc->GetValue(wsText, XFA_VALUEPICTURE_Raw); - ((CFWL_ComboBox*)m_pNormalWidget)->SetEditText(wsText); - } - m_pNormalWidget->Update(); - return TRUE; -} -FX_BOOL CXFA_FFComboBox::CanUndo() { - return m_pDataAcc->IsChoiceListAllowTextEntry() && - ((CFWL_ComboBox*)m_pNormalWidget)->EditCanUndo(); -} -FX_BOOL CXFA_FFComboBox::CanRedo() { - return m_pDataAcc->IsChoiceListAllowTextEntry() && - ((CFWL_ComboBox*)m_pNormalWidget)->EditCanRedo(); -} -FX_BOOL CXFA_FFComboBox::Undo() { - return m_pDataAcc->IsChoiceListAllowTextEntry() && - ((CFWL_ComboBox*)m_pNormalWidget)->EditUndo(); -} -FX_BOOL CXFA_FFComboBox::Redo() { - return m_pDataAcc->IsChoiceListAllowTextEntry() && - ((CFWL_ComboBox*)m_pNormalWidget)->EditRedo(); -} -FX_BOOL CXFA_FFComboBox::CanCopy() { - return ((CFWL_ComboBox*)m_pNormalWidget)->EditCanCopy(); -} -FX_BOOL CXFA_FFComboBox::CanCut() { - if (m_pDataAcc->GetAccess() != XFA_ATTRIBUTEENUM_Open) { - return FALSE; - } - return m_pDataAcc->IsChoiceListAllowTextEntry() && - ((CFWL_ComboBox*)m_pNormalWidget)->EditCanCut(); -} -FX_BOOL CXFA_FFComboBox::CanPaste() { - return m_pDataAcc->IsChoiceListAllowTextEntry() && - (m_pDataAcc->GetAccess() == XFA_ATTRIBUTEENUM_Open); -} -FX_BOOL CXFA_FFComboBox::CanSelectAll() { - return ((CFWL_ComboBox*)m_pNormalWidget)->EditCanSelectAll(); -} -FX_BOOL CXFA_FFComboBox::Copy(CFX_WideString& wsCopy) { - return ((CFWL_ComboBox*)m_pNormalWidget)->EditCopy(wsCopy); -} -FX_BOOL CXFA_FFComboBox::Cut(CFX_WideString& wsCut) { - return m_pDataAcc->IsChoiceListAllowTextEntry() && - ((CFWL_ComboBox*)m_pNormalWidget)->EditCut(wsCut); -} -FX_BOOL CXFA_FFComboBox::Paste(const CFX_WideString& wsPaste) { - return m_pDataAcc->IsChoiceListAllowTextEntry() && - ((CFWL_ComboBox*)m_pNormalWidget)->EditPaste(wsPaste); -} -FX_BOOL CXFA_FFComboBox::SelectAll() { - return ((CFWL_ComboBox*)m_pNormalWidget)->EditSelectAll(); -} -FX_BOOL CXFA_FFComboBox::Delete() { - return ((CFWL_ComboBox*)m_pNormalWidget)->EditDelete(); -} -FX_BOOL CXFA_FFComboBox::DeSelect() { - return ((CFWL_ComboBox*)m_pNormalWidget)->EditDeSelect(); -} -void CXFA_FFComboBox::SetItemState(int32_t nIndex, FX_BOOL bSelected) { - if (bSelected) { - ((CFWL_ComboBox*)m_pNormalWidget)->SetCurSel(nIndex); - } else { - ((CFWL_ComboBox*)m_pNormalWidget)->SetCurSel(-1); - } - m_pNormalWidget->Update(); - AddInvalidateRect(); -} -void CXFA_FFComboBox::InsertItem(const CFX_WideStringC& wsLabel, - int32_t nIndex) { - ((CFWL_ComboBox*)m_pNormalWidget)->AddString(wsLabel); - m_pNormalWidget->Update(); - AddInvalidateRect(); -} -void CXFA_FFComboBox::DeleteItem(int32_t nIndex) { - if (nIndex < 0) { - ((CFWL_ComboBox*)m_pNormalWidget)->RemoveAll(); - } else { - ((CFWL_ComboBox*)m_pNormalWidget)->RemoveAt(nIndex); - } - m_pNormalWidget->Update(); - AddInvalidateRect(); -} -void CXFA_FFComboBox::OnTextChanged(IFWL_Widget* pWidget, - const CFX_WideString& wsChanged) { - CXFA_EventParam eParam; - m_pDataAcc->GetValue(eParam.m_wsPrevText, XFA_VALUEPICTURE_Raw); - eParam.m_wsChange = wsChanged; - FWLEventSelChange(&eParam); -} -void CXFA_FFComboBox::OnSelectChanged(IFWL_Widget* pWidget, - const CFX_Int32Array& arrSels, - FX_BOOL bLButtonUp) { - CXFA_EventParam eParam; - m_pDataAcc->GetValue(eParam.m_wsPrevText, XFA_VALUEPICTURE_Raw); - FWLEventSelChange(&eParam); - if (m_pDataAcc->GetChoiceListCommitOn() == XFA_ATTRIBUTEENUM_Select && - bLButtonUp) { - m_pDocView->SetFocusWidgetAcc(NULL); - } -} -void CXFA_FFComboBox::OnPreOpen(IFWL_Widget* pWidget) { - CXFA_EventParam eParam; - eParam.m_eType = XFA_EVENT_PreOpen; - eParam.m_pTarget = m_pDataAcc; - m_pDataAcc->ProcessEvent(XFA_ATTRIBUTEENUM_PreOpen, &eParam); -} -void CXFA_FFComboBox::OnPostOpen(IFWL_Widget* pWidget) { - CXFA_EventParam eParam; - eParam.m_eType = XFA_EVENT_PostOpen; - eParam.m_pTarget = m_pDataAcc; - m_pDataAcc->ProcessEvent(XFA_ATTRIBUTEENUM_PostOpen, &eParam); -} - -int32_t CXFA_FFComboBox::OnProcessMessage(CFWL_Message* pMessage) { - return m_pOldDelegate->OnProcessMessage(pMessage); -} -FWL_ERR CXFA_FFComboBox::OnProcessEvent(CFWL_Event* pEvent) { - CXFA_FFField::OnProcessEvent(pEvent); - FX_DWORD dwEventID = pEvent->GetClassID(); - switch (dwEventID) { - case FWL_EVTHASH_CMB_SelChanged: { - CFWL_EvtCmbSelChanged* postEvent = (CFWL_EvtCmbSelChanged*)pEvent; - OnSelectChanged(m_pNormalWidget->GetWidget(), postEvent->iArraySels, - postEvent->bLButtonUp); - break; - } - case FWL_EVTHASH_CMB_EditChanged: { - CFX_WideString wsChanged; - OnTextChanged(m_pNormalWidget->GetWidget(), wsChanged); - break; - } - case FWL_EVTHASH_CMB_PreDropDown: { - OnPreOpen(m_pNormalWidget->GetWidget()); - break; - } - case FWL_EVTHASH_CMB_PostDropDown: { - OnPostOpen(m_pNormalWidget->GetWidget()); - break; - } - default: {} - } - return m_pOldDelegate->OnProcessEvent(pEvent); -} -FWL_ERR CXFA_FFComboBox::OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - return m_pOldDelegate->OnDrawWidget(pGraphics, pMatrix); -} diff --git a/xfa/src/fxfa/app/xfa_ffchoicelist.h b/xfa/src/fxfa/app/xfa_ffchoicelist.h deleted file mode 100644 index 781360f8ad..0000000000 --- a/xfa/src/fxfa/app/xfa_ffchoicelist.h +++ /dev/null @@ -1,96 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXFA_APP_XFA_FFCHOICELIST_H_ -#define XFA_SRC_FXFA_APP_XFA_FFCHOICELIST_H_ - -#include "xfa/src/fxfa/app/xfa_fffield.h" -#include "xfa/src/fxfa/app/xfa_ffpageview.h" - -class CXFA_FFListBox : public CXFA_FFField { - public: - CXFA_FFListBox(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc); - virtual ~CXFA_FFListBox(); - virtual FX_BOOL LoadWidget(); - virtual FX_BOOL OnKillFocus(CXFA_FFWidget* pNewWidget); - - protected: - virtual FX_BOOL CommitData(); - virtual FX_BOOL UpdateFWLData(); - virtual FX_BOOL IsDataChanged(); - FX_DWORD GetAlignment(); - - public: - void OnSelectChanged(IFWL_Widget* pWidget, const CFX_Int32Array& arrSels); - void SetItemState(int32_t nIndex, FX_BOOL bSelected); - void InsertItem(const CFX_WideStringC& wsLabel, int32_t nIndex = -1); - void DeleteItem(int32_t nIndex); - virtual int32_t OnProcessMessage(CFWL_Message* pMessage); - virtual FWL_ERR OnProcessEvent(CFWL_Event* pEvent); - virtual FWL_ERR OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL); - - protected: - IFWL_WidgetDelegate* m_pOldDelegate; -}; -class CXFA_FFComboBox : public CXFA_FFField { - public: - CXFA_FFComboBox(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc); - virtual ~CXFA_FFComboBox(); - virtual FX_BOOL GetBBox(CFX_RectF& rtBox, - FX_DWORD dwStatus, - FX_BOOL bDrawFocus = FALSE); - virtual FX_BOOL LoadWidget(); - virtual void UpdateWidgetProperty(); - virtual FX_BOOL OnRButtonUp(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy); - virtual FX_BOOL OnKillFocus(CXFA_FFWidget* pNewWidget); - virtual FX_BOOL CanUndo(); - virtual FX_BOOL CanRedo(); - virtual FX_BOOL Undo(); - virtual FX_BOOL Redo(); - - virtual FX_BOOL CanCopy(); - virtual FX_BOOL CanCut(); - virtual FX_BOOL CanPaste(); - virtual FX_BOOL CanSelectAll(); - virtual FX_BOOL Copy(CFX_WideString& wsCopy); - virtual FX_BOOL Cut(CFX_WideString& wsCut); - virtual FX_BOOL Paste(const CFX_WideString& wsPaste); - virtual FX_BOOL SelectAll(); - virtual FX_BOOL Delete(); - virtual FX_BOOL DeSelect(); - void OpenDropDownList(); - - protected: - virtual FX_BOOL PtInActiveRect(FX_FLOAT fx, FX_FLOAT fy); - virtual FX_BOOL CommitData(); - virtual FX_BOOL UpdateFWLData(); - virtual FX_BOOL IsDataChanged(); - FX_DWORD GetAlignment(); - void FWLEventSelChange(CXFA_EventParam* pParam); - - CFX_WideString m_wsNewValue; - - public: - void OnTextChanged(IFWL_Widget* pWidget, const CFX_WideString& wsChanged); - void OnSelectChanged(IFWL_Widget* pWidget, - const CFX_Int32Array& arrSels, - FX_BOOL bLButtonUp); - void OnPreOpen(IFWL_Widget* pWidget); - void OnPostOpen(IFWL_Widget* pWidget); - void SetItemState(int32_t nIndex, FX_BOOL bSelected); - void InsertItem(const CFX_WideStringC& wsLabel, int32_t nIndex = -1); - void DeleteItem(int32_t nIndex); - virtual int32_t OnProcessMessage(CFWL_Message* pMessage); - virtual FWL_ERR OnProcessEvent(CFWL_Event* pEvent); - virtual FWL_ERR OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL); - - protected: - IFWL_WidgetDelegate* m_pOldDelegate; -}; - -#endif // XFA_SRC_FXFA_APP_XFA_FFCHOICELIST_H_ diff --git a/xfa/src/fxfa/app/xfa_ffdoc.cpp b/xfa/src/fxfa/app/xfa_ffdoc.cpp deleted file mode 100644 index 0e45417399..0000000000 --- a/xfa/src/fxfa/app/xfa_ffdoc.cpp +++ /dev/null @@ -1,431 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fxfa/app/xfa_ffdoc.h" - -#include "core/include/fpdfapi/cpdf_array.h" -#include "core/include/fpdfapi/cpdf_document.h" -#include "core/include/fpdfdoc/fpdf_doc.h" -#include "core/include/fxcrt/fx_ext.h" -#include "xfa/include/fwl/core/fwl_note.h" -#include "xfa/src/fgas/crt/fgas_algorithm.h" -#include "xfa/src/fxfa/app/xfa_ffapp.h" -#include "xfa/src/fxfa/app/xfa_ffdocview.h" -#include "xfa/src/fxfa/app/xfa_ffnotify.h" -#include "xfa/src/fxfa/app/xfa_ffwidget.h" -#include "xfa/src/fxfa/app/xfa_fontmgr.h" -#include "xfa/src/fxfa/parser/xfa_docdata.h" -#include "xfa/src/fxfa/parser/xfa_parser.h" - -CXFA_FFDoc::CXFA_FFDoc(CXFA_FFApp* pApp, IXFA_DocProvider* pDocProvider) - : m_pDocProvider(pDocProvider), - m_pDocument(nullptr), - m_pStream(nullptr), - m_pApp(pApp), - m_pNotify(nullptr), - m_pPDFDoc(nullptr), - m_dwDocType(XFA_DOCTYPE_Static), - m_bOwnStream(TRUE) {} -CXFA_FFDoc::~CXFA_FFDoc() { - CloseDoc(); -} -FX_DWORD CXFA_FFDoc::GetDocType() { - return m_dwDocType; -} -int32_t CXFA_FFDoc::StartLoad() { - m_pNotify = new CXFA_FFNotify(this); - IXFA_DocParser* pDocParser = IXFA_DocParser::Create(m_pNotify); - int32_t iStatus = pDocParser->StartParse(m_pStream); - m_pDocument = pDocParser->GetDocument(); - return iStatus; -} -FX_BOOL XFA_GetPDFContentsFromPDFXML(IFDE_XMLNode* pPDFElement, - uint8_t*& pByteBuffer, - int32_t& iBufferSize) { - IFDE_XMLElement* pDocumentElement = NULL; - for (IFDE_XMLNode* pXMLNode = - pPDFElement->GetNodeItem(IFDE_XMLNode::FirstChild); - pXMLNode; pXMLNode = pXMLNode->GetNodeItem(IFDE_XMLNode::NextSibling)) { - if (pXMLNode->GetType() == FDE_XMLNODE_Element) { - CFX_WideString wsTagName; - IFDE_XMLElement* pXMLElement = (IFDE_XMLElement*)pXMLNode; - pXMLElement->GetTagName(wsTagName); - if (wsTagName.Equal(FX_WSTRC(L"document"))) { - pDocumentElement = pXMLElement; - break; - } - } - } - if (!pDocumentElement) { - return FALSE; - } - IFDE_XMLElement* pChunkElement = NULL; - for (IFDE_XMLNode* pXMLNode = - pDocumentElement->GetNodeItem(IFDE_XMLNode::FirstChild); - pXMLNode; pXMLNode = pXMLNode->GetNodeItem(IFDE_XMLNode::NextSibling)) { - if (pXMLNode->GetType() == FDE_XMLNODE_Element) { - CFX_WideString wsTagName; - IFDE_XMLElement* pXMLElement = (IFDE_XMLElement*)pXMLNode; - pXMLElement->GetTagName(wsTagName); - if (wsTagName.Equal(FX_WSTRC(L"chunk"))) { - pChunkElement = pXMLElement; - break; - } - } - } - if (!pChunkElement) { - return FALSE; - } - CFX_WideString wsPDFContent; - pChunkElement->GetTextData(wsPDFContent); - iBufferSize = FX_Base64DecodeW(wsPDFContent, wsPDFContent.GetLength(), NULL); - pByteBuffer = FX_Alloc(uint8_t, iBufferSize + 1); - pByteBuffer[iBufferSize] = '0'; // FIXME: I bet this is wrong. - FX_Base64DecodeW(wsPDFContent, wsPDFContent.GetLength(), pByteBuffer); - return TRUE; -} -void XFA_XPDPacket_MergeRootNode(CXFA_Node* pOriginRoot, CXFA_Node* pNewRoot) { - CXFA_Node* pChildNode = pNewRoot->GetNodeItem(XFA_NODEITEM_FirstChild); - while (pChildNode) { - CXFA_Node* pOriginChild = - pOriginRoot->GetFirstChildByName(pChildNode->GetNameHash()); - if (pOriginChild) { - pChildNode = pChildNode->GetNodeItem(XFA_NODEITEM_NextSibling); - } else { - CXFA_Node* pNextSibling = - pChildNode->GetNodeItem(XFA_NODEITEM_NextSibling); - pNewRoot->RemoveChild(pChildNode); - pOriginRoot->InsertChild(pChildNode); - pChildNode = pNextSibling; - pNextSibling = NULL; - } - } -} -int32_t CXFA_FFDoc::DoLoad(IFX_Pause* pPause) { - int32_t iStatus = m_pDocument->GetParser()->DoParse(pPause); - if (iStatus == XFA_PARSESTATUS_Done && !m_pPDFDoc) { - CXFA_Node* pPDFNode = ToNode(m_pDocument->GetXFAObject(XFA_HASHCODE_Pdf)); - if (!pPDFNode) { - return XFA_PARSESTATUS_SyntaxErr; - } - IFDE_XMLNode* pPDFXML = pPDFNode->GetXMLMappingNode(); - if (pPDFXML->GetType() != FDE_XMLNODE_Element) { - return XFA_PARSESTATUS_SyntaxErr; - } - int32_t iBufferSize = 0; - uint8_t* pByteBuffer = NULL; - IFX_FileRead* pXFAReader = NULL; - if (XFA_GetPDFContentsFromPDFXML(pPDFXML, pByteBuffer, iBufferSize)) { - pXFAReader = FX_CreateMemoryStream(pByteBuffer, iBufferSize, TRUE); - } else { - CFX_WideString wsHref; - ((IFDE_XMLElement*)pPDFXML)->GetString(L"href", wsHref); - if (!wsHref.IsEmpty()) { - pXFAReader = GetDocProvider()->OpenLinkedFile(this, wsHref); - } - } - if (!pXFAReader) { - return XFA_PARSESTATUS_SyntaxErr; - } - CPDF_Document* pPDFDocument = - GetDocProvider()->OpenPDF(this, pXFAReader, TRUE); - FXSYS_assert(!m_pPDFDoc); - if (!OpenDoc(pPDFDocument)) { - return XFA_PARSESTATUS_SyntaxErr; - } - IXFA_Parser* pParser = IXFA_Parser::Create(m_pDocument, TRUE); - if (!pParser) { - return XFA_PARSESTATUS_SyntaxErr; - } - CXFA_Node* pRootNode = NULL; - if (pParser->StartParse(m_pStream) == XFA_PARSESTATUS_Ready && - pParser->DoParse(NULL) == XFA_PARSESTATUS_Done) { - pRootNode = pParser->GetRootNode(); - } - if (pRootNode && m_pDocument->GetRoot()) { - XFA_XPDPacket_MergeRootNode(m_pDocument->GetRoot(), pRootNode); - iStatus = XFA_PARSESTATUS_Done; - } else { - iStatus = XFA_PARSESTATUS_StatusErr; - } - pParser->Release(); - pParser = NULL; - } - return iStatus; -} -void CXFA_FFDoc::StopLoad() { - m_pApp->GetXFAFontMgr()->LoadDocFonts(this); - m_dwDocType = XFA_DOCTYPE_Static; - CXFA_Node* pConfig = ToNode(m_pDocument->GetXFAObject(XFA_HASHCODE_Config)); - if (!pConfig) { - return; - } - CXFA_Node* pAcrobat = pConfig->GetFirstChildByClass(XFA_ELEMENT_Acrobat); - if (!pAcrobat) { - return; - } - CXFA_Node* pAcrobat7 = pAcrobat->GetFirstChildByClass(XFA_ELEMENT_Acrobat7); - if (!pAcrobat7) { - return; - } - CXFA_Node* pDynamicRender = - pAcrobat7->GetFirstChildByClass(XFA_ELEMENT_DynamicRender); - if (!pDynamicRender) { - return; - } - CFX_WideString wsType; - if (pDynamicRender->TryContent(wsType) && wsType == FX_WSTRC(L"required")) { - m_dwDocType = XFA_DOCTYPE_Dynamic; - } -} -IXFA_DocView* CXFA_FFDoc::CreateDocView(FX_DWORD dwView) { - CXFA_FFDocView* pDocView = - (CXFA_FFDocView*)m_mapTypeToDocView.GetValueAt((void*)(uintptr_t)dwView); - if (!pDocView) { - pDocView = new CXFA_FFDocView(this); - m_mapTypeToDocView.SetAt((void*)(uintptr_t)dwView, pDocView); - } - return pDocView; -} -CXFA_FFDocView* CXFA_FFDoc::GetDocView(IXFA_DocLayout* pLayout) { - FX_POSITION ps = m_mapTypeToDocView.GetStartPosition(); - while (ps) { - void* pType; - CXFA_FFDocView* pDocView; - m_mapTypeToDocView.GetNextAssoc(ps, pType, (void*&)pDocView); - if (pDocView->GetXFALayout() == pLayout) { - return pDocView; - } - } - return NULL; -} -CXFA_FFDocView* CXFA_FFDoc::GetDocView() { - FX_POSITION ps = m_mapTypeToDocView.GetStartPosition(); - if (ps) { - void* pType; - CXFA_FFDocView* pDocView; - m_mapTypeToDocView.GetNextAssoc(ps, pType, (void*&)pDocView); - return pDocView; - } - return NULL; -} -FX_BOOL CXFA_FFDoc::OpenDoc(IFX_FileRead* pStream, FX_BOOL bTakeOverFile) { - m_bOwnStream = bTakeOverFile; - m_pStream = pStream; - return TRUE; -} -FX_BOOL CXFA_FFDoc::OpenDoc(CPDF_Document* pPDFDoc) { - if (pPDFDoc == NULL) { - return FALSE; - } - CPDF_Dictionary* pRoot = pPDFDoc->GetRoot(); - if (pRoot == NULL) { - return FALSE; - } - CPDF_Dictionary* pAcroForm = pRoot->GetDictBy("AcroForm"); - if (pAcroForm == NULL) { - return FALSE; - } - CPDF_Object* pElementXFA = pAcroForm->GetElementValue("XFA"); - if (pElementXFA == NULL) { - return FALSE; - } - CFX_ArrayTemplate xfaStreams; - if (pElementXFA->IsArray()) { - CPDF_Array* pXFAArray = (CPDF_Array*)pElementXFA; - FX_DWORD count = pXFAArray->GetCount() / 2; - for (FX_DWORD i = 0; i < count; i++) { - if (CPDF_Stream* pStream = pXFAArray->GetStreamAt(i * 2 + 1)) - xfaStreams.Add(pStream); - } - } else if (pElementXFA->IsStream()) { - xfaStreams.Add((CPDF_Stream*)pElementXFA); - } - if (xfaStreams.GetSize() < 1) { - return FALSE; - } - IFX_FileRead* pFileRead = new CXFA_FileRead(xfaStreams); - m_pPDFDoc = pPDFDoc; - if (m_pStream) { - m_pStream->Release(); - m_pStream = NULL; - } - m_pStream = pFileRead; - m_bOwnStream = TRUE; - return TRUE; -} -FX_BOOL CXFA_FFDoc::CloseDoc() { - FX_POSITION psClose = m_mapTypeToDocView.GetStartPosition(); - while (psClose) { - void* pType; - CXFA_FFDocView* pDocView; - m_mapTypeToDocView.GetNextAssoc(psClose, pType, (void*&)pDocView); - pDocView->RunDocClose(); - } - if (m_pDocument) { - m_pDocument->ClearLayoutData(); - } - FX_POSITION ps = m_mapTypeToDocView.GetStartPosition(); - while (ps) { - void* pType; - CXFA_FFDocView* pDocView; - m_mapTypeToDocView.GetNextAssoc(ps, pType, (void*&)pDocView); - delete pDocView; - } - m_mapTypeToDocView.RemoveAll(); - if (m_pDocument) { - IXFA_Parser* pParser = m_pDocument->GetParser(); - pParser->Release(); - m_pDocument = NULL; - } - if (m_pNotify) { - delete m_pNotify; - m_pNotify = NULL; - } - m_pApp->GetXFAFontMgr()->ReleaseDocFonts(this); - if (m_dwDocType != XFA_DOCTYPE_XDP && m_pStream && m_bOwnStream) { - m_pStream->Release(); - m_pStream = NULL; - } - ps = m_mapNamedImages.GetStartPosition(); - while (ps) { - void* pName; - FX_IMAGEDIB_AND_DPI* pImage = NULL; - m_mapNamedImages.GetNextAssoc(ps, pName, (void*&)pImage); - if (pImage) { - delete pImage->pDibSource; - pImage->pDibSource = NULL; - FX_Free(pImage); - pImage = NULL; - } - } - m_mapNamedImages.RemoveAll(); - IFWL_NoteDriver* pNoteDriver = FWL_GetApp()->GetNoteDriver(); - pNoteDriver->ClearEventTargets(FALSE); - return TRUE; -} -void CXFA_FFDoc::SetDocType(FX_DWORD dwType) { - m_dwDocType = dwType; -} -CPDF_Document* CXFA_FFDoc::GetPDFDoc() { - return m_pPDFDoc; -} - -CFX_DIBitmap* CXFA_FFDoc::GetPDFNamedImage(const CFX_WideStringC& wsName, - int32_t& iImageXDpi, - int32_t& iImageYDpi) { - if (!m_pPDFDoc) - return nullptr; - - FX_DWORD dwHash = - FX_HashCode_String_GetW(wsName.GetPtr(), wsName.GetLength(), FALSE); - FX_IMAGEDIB_AND_DPI* imageDIBDpi = nullptr; - if (m_mapNamedImages.Lookup((void*)(uintptr_t)dwHash, (void*&)imageDIBDpi)) { - iImageXDpi = imageDIBDpi->iImageXDpi; - iImageYDpi = imageDIBDpi->iImageYDpi; - return static_cast(imageDIBDpi->pDibSource); - } - - CPDF_Dictionary* pRoot = m_pPDFDoc->GetRoot(); - if (!pRoot) - return nullptr; - - CPDF_Dictionary* pNames = pRoot->GetDictBy("Names"); - if (!pNames) - return nullptr; - - CPDF_Dictionary* pXFAImages = pNames->GetDictBy("XFAImages"); - if (!pXFAImages) - return nullptr; - - CPDF_NameTree nametree(pXFAImages); - CFX_ByteString bsName = PDF_EncodeText(wsName.GetPtr(), wsName.GetLength()); - CPDF_Object* pObject = nametree.LookupValue(bsName); - if (!pObject) { - int32_t iCount = nametree.GetCount(); - for (int32_t i = 0; i < iCount; i++) { - CFX_ByteString bsTemp; - CPDF_Object* pTempObject = nametree.LookupValue(i, bsTemp); - if (bsTemp == bsName) { - pObject = pTempObject; - break; - } - } - } - - if (!pObject || !pObject->IsStream()) - return nullptr; - - if (!imageDIBDpi) { - imageDIBDpi = FX_Alloc(FX_IMAGEDIB_AND_DPI, 1); - imageDIBDpi->pDibSource = nullptr; - imageDIBDpi->iImageXDpi = 0; - imageDIBDpi->iImageYDpi = 0; - CPDF_StreamAcc streamAcc; - streamAcc.LoadAllData((CPDF_Stream*)pObject); - IFX_FileRead* pImageFileRead = FX_CreateMemoryStream( - (uint8_t*)streamAcc.GetData(), streamAcc.GetSize()); - imageDIBDpi->pDibSource = XFA_LoadImageFromBuffer( - pImageFileRead, FXCODEC_IMAGE_UNKNOWN, iImageXDpi, iImageYDpi); - imageDIBDpi->iImageXDpi = iImageXDpi; - imageDIBDpi->iImageYDpi = iImageYDpi; - pImageFileRead->Release(); - } - m_mapNamedImages.SetAt((void*)(uintptr_t)dwHash, imageDIBDpi); - return (CFX_DIBitmap*)imageDIBDpi->pDibSource; -} - -IFDE_XMLElement* CXFA_FFDoc::GetPackageData(const CFX_WideStringC& wsPackage) { - FX_DWORD packetHash = - FX_HashCode_String_GetW(wsPackage.GetPtr(), wsPackage.GetLength()); - CXFA_Node* pNode = ToNode(m_pDocument->GetXFAObject(packetHash)); - if (!pNode) { - return NULL; - } - IFDE_XMLNode* pXMLNode = pNode->GetXMLMappingNode(); - return (pXMLNode && pXMLNode->GetType() == FDE_XMLNODE_Element) - ? (IFDE_XMLElement*)pXMLNode - : NULL; -} -FX_BOOL CXFA_FFDoc::SavePackage(const CFX_WideStringC& wsPackage, - IFX_FileWrite* pFile, - IXFA_ChecksumContext* pCSContext) { - IXFA_PacketExport* pExport = IXFA_PacketExport::Create(m_pDocument); - if (!pExport) { - return FALSE; - } - FX_DWORD packetHash = - FX_HashCode_String_GetW(wsPackage.GetPtr(), wsPackage.GetLength()); - CXFA_Node* pNode = NULL; - if (packetHash == XFA_HASHCODE_Xfa) { - pNode = m_pDocument->GetRoot(); - } else { - pNode = ToNode(m_pDocument->GetXFAObject(packetHash)); - } - FX_BOOL bFlags = FALSE; - if (pNode) { - CFX_ByteString bsChecksum; - if (pCSContext) { - pCSContext->GetChecksum(bsChecksum); - } - bFlags = pExport->Export(pFile, pNode, 0, bsChecksum.GetLength() - ? (const FX_CHAR*)bsChecksum - : NULL); - } else { - bFlags = pExport->Export(pFile); - } - pExport->Release(); - return bFlags; -} -FX_BOOL CXFA_FFDoc::ImportData(IFX_FileRead* pStream, FX_BOOL bXDP) { - FX_BOOL bRet = FALSE; - IXFA_PacketImport* pImport = IXFA_PacketImport::Create(m_pDocument); - if (pImport) { - bRet = pImport->ImportData(pStream); - pImport->Release(); - } - return bRet; -} diff --git a/xfa/src/fxfa/app/xfa_ffdoc.h b/xfa/src/fxfa/app/xfa_ffdoc.h deleted file mode 100644 index c5980138aa..0000000000 --- a/xfa/src/fxfa/app/xfa_ffdoc.h +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXFA_APP_XFA_FFDOC_H_ -#define XFA_SRC_FXFA_APP_XFA_FFDOC_H_ - -#include "xfa/include/fxfa/fxfa.h" -#include "xfa/src/fxfa/parser/xfa_document.h" - -class CXFA_FFApp; -class CXFA_FFNotify; -class CXFA_FFDocView; - -struct FX_IMAGEDIB_AND_DPI { - CFX_DIBSource* pDibSource; - int32_t iImageXDpi; - int32_t iImageYDpi; -}; - -class CXFA_FFDoc : public IXFA_Doc { - public: - CXFA_FFDoc(CXFA_FFApp* pApp, IXFA_DocProvider* pDocProvider); - ~CXFA_FFDoc(); - IXFA_DocProvider* GetDocProvider() { return m_pDocProvider; } - FX_DWORD GetDocType(); - int32_t StartLoad(); - int32_t DoLoad(IFX_Pause* pPause = NULL); - void StopLoad(); - IXFA_DocView* CreateDocView(FX_DWORD dwView = 0); - FX_BOOL OpenDoc(IFX_FileRead* pStream, FX_BOOL bTakeOverFile); - FX_BOOL OpenDoc(CPDF_Document* pPDFDoc); - FX_BOOL CloseDoc(); - void SetDocType(FX_DWORD dwType); - CXFA_Document* GetXFADoc() { return m_pDocument; } - CXFA_FFApp* GetApp() { return m_pApp; } - CXFA_FFDocView* GetDocView(IXFA_DocLayout* pLayout); - CXFA_FFDocView* GetDocView(); - CPDF_Document* GetPDFDoc(); - CFX_DIBitmap* GetPDFNamedImage(const CFX_WideStringC& wsName, - int32_t& iImageXDpi, - int32_t& iImageYDpi); - IFDE_XMLElement* GetPackageData(const CFX_WideStringC& wsPackage); - FX_BOOL SavePackage(const CFX_WideStringC& wsPackage, - IFX_FileWrite* pFile, - IXFA_ChecksumContext* pCSContext = NULL); - FX_BOOL ImportData(IFX_FileRead* pStream, FX_BOOL bXDP = TRUE); - - protected: - IXFA_DocProvider* m_pDocProvider; - CXFA_Document* m_pDocument; - IFX_FileRead* m_pStream; - CXFA_FFApp* m_pApp; - CXFA_FFNotify* m_pNotify; - CPDF_Document* m_pPDFDoc; - CFX_MapPtrToPtr m_mapNamedImages; - CFX_MapPtrToPtr m_mapTypeToDocView; - FX_DWORD m_dwDocType; - FX_BOOL m_bOwnStream; -}; - -#endif // XFA_SRC_FXFA_APP_XFA_FFDOC_H_ diff --git a/xfa/src/fxfa/app/xfa_ffdochandler.cpp b/xfa/src/fxfa/app/xfa_ffdochandler.cpp deleted file mode 100644 index f2473659ec..0000000000 --- a/xfa/src/fxfa/app/xfa_ffdochandler.cpp +++ /dev/null @@ -1,110 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fxfa/app/xfa_ffdochandler.h" - -#include "xfa/src/fxfa/app/xfa_ffdoc.h" -#include "xfa/src/fxfa/parser/xfa_script.h" - -CXFA_FFDocHandler::CXFA_FFDocHandler() {} -CXFA_FFDocHandler::~CXFA_FFDocHandler() {} -void CXFA_FFDocHandler::ReleaseDoc(IXFA_Doc* hDoc) { - delete hDoc; // virtual dtor. -} -IXFA_DocProvider* CXFA_FFDocHandler::GetDocProvider(IXFA_Doc* hDoc) { - return static_cast(hDoc)->GetDocProvider(); -} -FX_DWORD CXFA_FFDocHandler::GetDocType(IXFA_Doc* hDoc) { - return static_cast(hDoc)->GetDocType(); -} -int32_t CXFA_FFDocHandler::StartLoad(IXFA_Doc* hDoc) { - return static_cast(hDoc)->StartLoad(); -} -int32_t CXFA_FFDocHandler::DoLoad(IXFA_Doc* hDoc, IFX_Pause* pPause) { - return static_cast(hDoc)->DoLoad(pPause); -} -void CXFA_FFDocHandler::StopLoad(IXFA_Doc* hDoc) { - static_cast(hDoc)->StopLoad(); -} - -IXFA_DocView* CXFA_FFDocHandler::CreateDocView(IXFA_Doc* hDoc, - FX_DWORD dwView) { - return static_cast(hDoc)->CreateDocView(dwView); -} -int32_t CXFA_FFDocHandler::CountPackages(IXFA_Doc* hDoc) { - return 0; -} -void CXFA_FFDocHandler::GetPackageName(IXFA_Doc* hDoc, - int32_t iPackage, - CFX_WideStringC& wsPackage) {} -IFDE_XMLElement* CXFA_FFDocHandler::GetPackageData( - IXFA_Doc* hDoc, - const CFX_WideStringC& wsPackage) { - return static_cast(hDoc)->GetPackageData(wsPackage); -} -FX_BOOL CXFA_FFDocHandler::SavePackage(IXFA_Doc* hDoc, - const CFX_WideStringC& wsPackage, - IFX_FileWrite* pFile, - IXFA_ChecksumContext* pCSContext) { - return static_cast(hDoc) - ->SavePackage(wsPackage, pFile, pCSContext); -} -FX_BOOL CXFA_FFDocHandler::CloseDoc(IXFA_Doc* hDoc) { - return static_cast(hDoc)->CloseDoc(); -} - -FX_BOOL CXFA_FFDocHandler::ImportData(IXFA_Doc* hDoc, - IFX_FileRead* pStream, - FX_BOOL bXDP) { - return static_cast(hDoc)->ImportData(pStream, bXDP); -} -void CXFA_FFDocHandler::SetJSERuntime(IXFA_Doc* hDoc, FXJSE_HRUNTIME hRuntime) { - static_cast(hDoc)->GetXFADoc()->InitScriptContext(hRuntime); -} -FXJSE_HVALUE CXFA_FFDocHandler::GetXFAScriptObject(IXFA_Doc* hDoc) { - CXFA_Document* pXFADoc = static_cast(hDoc)->GetXFADoc(); - if (!pXFADoc) { - return NULL; - } - IXFA_ScriptContext* pScriptContext = pXFADoc->GetScriptContext(); - if (!pScriptContext) { - return NULL; - } - return pScriptContext->GetJSValueFromMap(pXFADoc->GetRoot()); -} -XFA_ATTRIBUTEENUM CXFA_FFDocHandler::GetRestoreState(IXFA_Doc* hDoc) { - CXFA_Document* pXFADoc = static_cast(hDoc)->GetXFADoc(); - if (!pXFADoc) { - return XFA_ATTRIBUTEENUM_Unknown; - } - CXFA_Node* pForm = ToNode(pXFADoc->GetXFAObject(XFA_HASHCODE_Form)); - if (!pForm) { - return XFA_ATTRIBUTEENUM_Unknown; - } - CXFA_Node* pSubForm = pForm->GetFirstChildByClass(XFA_ELEMENT_Subform); - if (!pSubForm) { - return XFA_ATTRIBUTEENUM_Unknown; - } - return pSubForm->GetEnum(XFA_ATTRIBUTE_RestoreState); -} -FX_BOOL CXFA_FFDocHandler::RunDocScript(IXFA_Doc* hDoc, - XFA_SCRIPTTYPE eScriptType, - const CFX_WideStringC& wsScript, - FXJSE_HVALUE hRetValue, - FXJSE_HVALUE hThisObject) { - CXFA_Document* pXFADoc = static_cast(hDoc)->GetXFADoc(); - if (!pXFADoc) { - return FALSE; - } - IXFA_ScriptContext* pScriptContext = pXFADoc->GetScriptContext(); - if (!pScriptContext) { - return FALSE; - } - return pScriptContext->RunScript( - (XFA_SCRIPTLANGTYPE)eScriptType, wsScript, hRetValue, - hThisObject ? (CXFA_Object*)FXJSE_Value_ToObject(hThisObject, NULL) - : NULL); -} diff --git a/xfa/src/fxfa/app/xfa_ffdochandler.h b/xfa/src/fxfa/app/xfa_ffdochandler.h deleted file mode 100644 index e324bff81d..0000000000 --- a/xfa/src/fxfa/app/xfa_ffdochandler.h +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXFA_APP_XFA_FFDOCHANDLER_H_ -#define XFA_SRC_FXFA_APP_XFA_FFDOCHANDLER_H_ - -#include "xfa/include/fxfa/fxfa.h" - -class CXFA_FFDocHandler : public IXFA_DocHandler { - public: - CXFA_FFDocHandler(); - ~CXFA_FFDocHandler(); - virtual void ReleaseDoc(IXFA_Doc* hDoc); - virtual IXFA_DocProvider* GetDocProvider(IXFA_Doc* hDoc); - virtual FX_DWORD GetDocType(IXFA_Doc* hDoc); - virtual int32_t StartLoad(IXFA_Doc* hDoc); - virtual int32_t DoLoad(IXFA_Doc* hDoc, IFX_Pause* pPause = NULL); - virtual void StopLoad(IXFA_Doc* hDoc); - - virtual IXFA_DocView* CreateDocView(IXFA_Doc* hDoc, FX_DWORD dwView = 0); - virtual int32_t CountPackages(IXFA_Doc* hDoc); - virtual void GetPackageName(IXFA_Doc* hDoc, - int32_t iPackage, - CFX_WideStringC& wsPackage); - virtual IFDE_XMLElement* GetPackageData(IXFA_Doc* hDoc, - const CFX_WideStringC& wsPackage); - virtual FX_BOOL SavePackage(IXFA_Doc* hDoc, - const CFX_WideStringC& wsPackage, - IFX_FileWrite* pFile, - IXFA_ChecksumContext* pCSContext = NULL); - virtual FX_BOOL CloseDoc(IXFA_Doc* hDoc); - virtual FX_BOOL ImportData(IXFA_Doc* hDoc, - IFX_FileRead* pStream, - FX_BOOL bXDP = TRUE); - virtual void SetJSERuntime(IXFA_Doc* hDoc, FXJSE_HRUNTIME hRuntime); - virtual FXJSE_HVALUE GetXFAScriptObject(IXFA_Doc* hDoc); - virtual XFA_ATTRIBUTEENUM GetRestoreState(IXFA_Doc* hDoc); - virtual FX_BOOL RunDocScript(IXFA_Doc* hDoc, - XFA_SCRIPTTYPE eScriptType, - const CFX_WideStringC& wsScript, - FXJSE_HVALUE hRetValue, - FXJSE_HVALUE hThisObject); - - protected: -}; - -#endif // XFA_SRC_FXFA_APP_XFA_FFDOCHANDLER_H_ diff --git a/xfa/src/fxfa/app/xfa_ffdocview.cpp b/xfa/src/fxfa/app/xfa_ffdocview.cpp deleted file mode 100644 index 3c94a69d87..0000000000 --- a/xfa/src/fxfa/app/xfa_ffdocview.cpp +++ /dev/null @@ -1,932 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fxfa/app/xfa_ffdocview.h" - -#include "core/include/fxcrt/fx_ext.h" -#include "xfa/src/fxfa/app/xfa_ffapp.h" -#include "xfa/src/fxfa/app/xfa_ffbarcode.h" -#include "xfa/src/fxfa/app/xfa_ffcheckbutton.h" -#include "xfa/src/fxfa/app/xfa_ffchoicelist.h" -#include "xfa/src/fxfa/app/xfa_ffdoc.h" -#include "xfa/src/fxfa/app/xfa_ffdraw.h" -#include "xfa/src/fxfa/app/xfa_ffexclgroup.h" -#include "xfa/src/fxfa/app/xfa_fffield.h" -#include "xfa/src/fxfa/app/xfa_ffimage.h" -#include "xfa/src/fxfa/app/xfa_ffimageedit.h" -#include "xfa/src/fxfa/app/xfa_ffpageview.h" -#include "xfa/src/fxfa/app/xfa_ffpath.h" -#include "xfa/src/fxfa/app/xfa_ffpushbutton.h" -#include "xfa/src/fxfa/app/xfa_ffsignature.h" -#include "xfa/src/fxfa/app/xfa_ffsubform.h" -#include "xfa/src/fxfa/app/xfa_fftext.h" -#include "xfa/src/fxfa/app/xfa_fftextedit.h" -#include "xfa/src/fxfa/app/xfa_ffwidget.h" -#include "xfa/src/fxfa/app/xfa_ffwidgetacc.h" -#include "xfa/src/fxfa/app/xfa_ffwidgethandler.h" -#include "xfa/src/fxfa/app/xfa_fwladapter.h" -#include "xfa/src/fxfa/app/xfa_textlayout.h" -#include "xfa/src/fxfa/parser/xfa_script.h" - -extern const XFA_ATTRIBUTEENUM gs_EventActivity[] = { - XFA_ATTRIBUTEENUM_Click, XFA_ATTRIBUTEENUM_Change, - XFA_ATTRIBUTEENUM_DocClose, XFA_ATTRIBUTEENUM_DocReady, - XFA_ATTRIBUTEENUM_Enter, XFA_ATTRIBUTEENUM_Exit, - XFA_ATTRIBUTEENUM_Full, XFA_ATTRIBUTEENUM_IndexChange, - XFA_ATTRIBUTEENUM_Initialize, XFA_ATTRIBUTEENUM_MouseDown, - XFA_ATTRIBUTEENUM_MouseEnter, XFA_ATTRIBUTEENUM_MouseExit, - XFA_ATTRIBUTEENUM_MouseUp, XFA_ATTRIBUTEENUM_PostExecute, - XFA_ATTRIBUTEENUM_PostOpen, XFA_ATTRIBUTEENUM_PostPrint, - XFA_ATTRIBUTEENUM_PostSave, XFA_ATTRIBUTEENUM_PostSign, - XFA_ATTRIBUTEENUM_PostSubmit, XFA_ATTRIBUTEENUM_PreExecute, - XFA_ATTRIBUTEENUM_PreOpen, XFA_ATTRIBUTEENUM_PrePrint, - XFA_ATTRIBUTEENUM_PreSave, XFA_ATTRIBUTEENUM_PreSign, - XFA_ATTRIBUTEENUM_PreSubmit, XFA_ATTRIBUTEENUM_Ready, - XFA_ATTRIBUTEENUM_Unknown, -}; -CXFA_FFDocView::CXFA_FFDocView(CXFA_FFDoc* pDoc) - : m_bLayoutEvent(FALSE), - m_pListFocusWidget(nullptr), - m_bInLayoutStatus(FALSE), - m_pDoc(pDoc), - m_pWidgetHandler(nullptr), - m_pXFADocLayout(nullptr), - m_pFocusAcc(nullptr), - m_pFocusWidget(nullptr), - m_pOldFocusWidget(nullptr), - m_iStatus(XFA_DOCVIEW_LAYOUTSTATUS_None), - m_iLock(0) {} -CXFA_FFDocView::~CXFA_FFDocView() { - DestroyDocView(); - if (m_pWidgetHandler) { - delete m_pWidgetHandler; - } - m_pWidgetHandler = NULL; -} -void CXFA_FFDocView::InitLayout(CXFA_Node* pNode) { - RunBindItems(); - ExecEventActivityByDeepFirst(pNode, XFA_EVENT_Initialize); - ExecEventActivityByDeepFirst(pNode, XFA_EVENT_IndexChange); -} -int32_t CXFA_FFDocView::StartLayout(int32_t iStartPage) { - m_iStatus = XFA_DOCVIEW_LAYOUTSTATUS_Start; - m_pDoc->GetXFADoc()->DoProtoMerge(); - m_pDoc->GetXFADoc()->DoDataMerge(); - m_pXFADocLayout = GetXFALayout(); - int32_t iStatus = m_pXFADocLayout->StartLayout(); - if (iStatus < 0) { - return iStatus; - } - CXFA_Node* pRootItem = - ToNode(m_pDoc->GetXFADoc()->GetXFAObject(XFA_HASHCODE_Form)); - if (!pRootItem) { - return iStatus; - } - InitLayout(pRootItem); - InitCalculate(pRootItem); - InitValidate(pRootItem); - ExecEventActivityByDeepFirst(pRootItem, XFA_EVENT_Ready, TRUE); - m_iStatus = XFA_DOCVIEW_LAYOUTSTATUS_Start; - return iStatus; -} -int32_t CXFA_FFDocView::DoLayout(IFX_Pause* pPause) { - int32_t iStatus = 100; - iStatus = m_pXFADocLayout->DoLayout(pPause); - if (iStatus != 100) { - return iStatus; - } - m_iStatus = XFA_DOCVIEW_LAYOUTSTATUS_Doing; - return iStatus; -} -void CXFA_FFDocView::StopLayout() { - CXFA_Node* pRootItem = - ToNode(m_pDoc->GetXFADoc()->GetXFAObject(XFA_HASHCODE_Form)); - if (!pRootItem) { - return; - } - CXFA_Node* pSubformNode = pRootItem->GetChild(0, XFA_ELEMENT_Subform); - if (!pSubformNode) { - return; - } - CXFA_Node* pPageSetNode = - pSubformNode->GetFirstChildByClass(XFA_ELEMENT_PageSet); - if (!pPageSetNode) { - return; - } - RunCalculateWidgets(); - RunValidate(); - InitLayout(pPageSetNode); - InitCalculate(pPageSetNode); - InitValidate(pPageSetNode); - ExecEventActivityByDeepFirst(pPageSetNode, XFA_EVENT_Ready, TRUE); - ExecEventActivityByDeepFirst(pRootItem, XFA_EVENT_Ready); - ExecEventActivityByDeepFirst(pRootItem, XFA_EVENT_DocReady); - RunCalculateWidgets(); - RunValidate(); - if (RunLayout()) { - ExecEventActivityByDeepFirst(pRootItem, XFA_EVENT_Ready); - } - m_CalculateAccs.RemoveAll(); - if (m_pFocusAcc && !m_pFocusWidget) { - SetFocusWidgetAcc(m_pFocusAcc); - } - m_iStatus = XFA_DOCVIEW_LAYOUTSTATUS_End; -} -int32_t CXFA_FFDocView::GetLayoutStatus() { - return m_iStatus; -} -void CXFA_FFDocView::ShowNullTestMsg() { - int32_t iCount = m_arrNullTestMsg.GetSize(); - CXFA_FFApp* pApp = m_pDoc->GetApp(); - IXFA_AppProvider* pAppProvider = pApp->GetAppProvider(); - if (pAppProvider && iCount) { - int32_t iRemain = iCount > 7 ? iCount - 7 : 0; - iCount -= iRemain; - CFX_WideString wsMsg; - for (int32_t i = 0; i < iCount; i++) { - wsMsg += m_arrNullTestMsg[i] + FX_WSTRC(L"\n"); - } - if (iRemain > 0) { - CFX_WideString wsLimit; - pAppProvider->LoadString(XFA_IDS_ValidateLimit, wsLimit); - if (!wsLimit.IsEmpty()) { - CFX_WideString wsTemp; - wsTemp.Format((const FX_WCHAR*)wsLimit, iRemain); - wsMsg += FX_WSTRC(L"\n") + wsTemp; - } - } - CFX_WideString wsTitle; - pAppProvider->LoadString(XFA_IDS_AppName, wsTitle); - pAppProvider->MsgBox(wsMsg, wsTitle, XFA_MBICON_Status, XFA_MB_OK); - } - m_arrNullTestMsg.RemoveAll(); -} -void CXFA_FFDocView::UpdateDocView() { - if (IsUpdateLocked()) { - return; - } - LockUpdate(); - int32_t iNewAdds = m_NewAddedNodes.GetSize(); - for (int32_t i = 0; i < iNewAdds; i++) { - CXFA_Node* pNode = reinterpret_cast(m_NewAddedNodes[i]); - InitCalculate(pNode); - InitValidate(pNode); - ExecEventActivityByDeepFirst(pNode, XFA_EVENT_Ready, TRUE); - } - m_NewAddedNodes.RemoveAll(); - RunSubformIndexChange(); - RunCalculateWidgets(); - RunValidate(); - ShowNullTestMsg(); - if (RunLayout() && m_bLayoutEvent) { - RunEventLayoutReady(); - } - m_bLayoutEvent = FALSE; - m_CalculateAccs.RemoveAll(); - RunInvalidate(); - UnlockUpdate(); -} -int32_t CXFA_FFDocView::CountPageViews() { - if (!m_pXFADocLayout) { - return 0; - } - return m_pXFADocLayout->CountPages(); -} -IXFA_PageView* CXFA_FFDocView::GetPageView(int32_t nIndex) { - if (!m_pXFADocLayout) { - return NULL; - } - return static_cast(m_pXFADocLayout->GetPage(nIndex)); -} -IXFA_Widget* CXFA_FFDocView::GetWidgetByName(const CFX_WideStringC& wsName) { - return GetWidgetByName(wsName, NULL); -} -CXFA_WidgetAcc* CXFA_FFDocView::GetWidgetAccByName( - const CFX_WideStringC& wsName) { - return GetWidgetAccByName(wsName, NULL); -} -IXFA_DocLayout* CXFA_FFDocView::GetXFALayout() const { - return m_pDoc->GetXFADoc()->GetDocLayout(); -} -FX_BOOL CXFA_FFDocView::ResetSingleWidgetAccData(CXFA_WidgetAcc* pWidgetAcc) { - CXFA_Node* pNode = pWidgetAcc->GetNode(); - XFA_ELEMENT eType = pNode->GetClassID(); - if (eType != XFA_ELEMENT_Field && eType != XFA_ELEMENT_ExclGroup) { - return FALSE; - } - FX_BOOL bNotify = IsStaticNotify(); - pWidgetAcc->ResetData(); - pWidgetAcc->UpdateUIDisplay(); - if (bNotify) { - pWidgetAcc->NotifyEvent(XFA_WIDGETEVENT_PostContentChanged, NULL, NULL, - NULL); - } - if (CXFA_Validate validate = pWidgetAcc->GetValidate()) { - AddValidateWidget(pWidgetAcc); - validate.GetNode()->SetFlag(XFA_NODEFLAG_NeedsInitApp, TRUE, FALSE); - } - return TRUE; -} -void CXFA_FFDocView::ResetWidgetData(CXFA_WidgetAcc* pWidgetAcc) { - m_bLayoutEvent = TRUE; - FX_BOOL bChanged = FALSE; - CXFA_Node* pFormNode = NULL; - if (pWidgetAcc) { - bChanged = ResetSingleWidgetAccData(pWidgetAcc); - pFormNode = pWidgetAcc->GetNode(); - } else { - pFormNode = GetRootSubform(); - } - if (!pFormNode) { - return; - } - if (pFormNode->GetClassID() != XFA_ELEMENT_Field && - pFormNode->GetClassID() != XFA_ELEMENT_ExclGroup) { - CXFA_WidgetAccIterator Iterator(this, pFormNode); - while (CXFA_WidgetAcc* pAcc = Iterator.MoveToNext()) { - bChanged |= ResetSingleWidgetAccData(pAcc); - if (pAcc->GetNode()->GetClassID() == XFA_ELEMENT_ExclGroup) { - Iterator.SkipTree(); - } - } - } - if (bChanged) { - m_pDoc->GetDocProvider()->SetChangeMark(m_pDoc); - } -} -int32_t CXFA_FFDocView::ProcessWidgetEvent(CXFA_EventParam* pParam, - CXFA_WidgetAcc* pWidgetAcc) { - if (pParam == NULL) { - return XFA_EVENTERROR_Error; - } - if (pParam->m_eType == XFA_EVENT_Validate) { - CFX_WideString wsValidateStr = FX_WSTRC(L"preSubmit"); - CXFA_Node* pConfigItem = - ToNode(m_pDoc->GetXFADoc()->GetXFAObject(XFA_HASHCODE_Config)); - if (pConfigItem) { - CXFA_Node* pValidateNode = NULL; - CXFA_Node* pAcrobatNode = pConfigItem->GetChild(0, XFA_ELEMENT_Acrobat); - pValidateNode = - pAcrobatNode ? pAcrobatNode->GetChild(0, XFA_ELEMENT_Validate) : NULL; - if (!pValidateNode) { - CXFA_Node* pPresentNode = pConfigItem->GetChild(0, XFA_ELEMENT_Present); - pValidateNode = pPresentNode - ? pPresentNode->GetChild(0, XFA_ELEMENT_Validate) - : NULL; - } - if (pValidateNode) { - wsValidateStr = pValidateNode->GetContent(); - } - } - FX_BOOL bValidate = FALSE; - switch (pParam->m_iValidateActivities) { - case XFA_VALIDATE_preSubmit: - bValidate = wsValidateStr.Find(L"preSubmit") != -1; - break; - case XFA_VALIDATE_prePrint: - bValidate = wsValidateStr.Find(L"prePrint") != -1; - break; - case XFA_VALIDATE_preExecute: - bValidate = wsValidateStr.Find(L"preExecute") != -1; - break; - case XFA_VALIDATE_preSave: - bValidate = wsValidateStr.Find(L"preSave") != -1; - break; - } - if (!bValidate) { - return XFA_EVENTERROR_Sucess; - } - } - CXFA_Node* pNode = pWidgetAcc ? pWidgetAcc->GetNode() : NULL; - if (!pNode) { - CXFA_Node* pRootItem = - ToNode(m_pDoc->GetXFADoc()->GetXFAObject(XFA_HASHCODE_Form)); - if (!pRootItem) { - return XFA_EVENTERROR_Error; - } - pNode = pRootItem->GetChild(0, XFA_ELEMENT_Subform); - } - ExecEventActivityByDeepFirst(pNode, pParam->m_eType, pParam->m_bIsFormReady); - return XFA_EVENTERROR_Sucess; -} -IXFA_WidgetHandler* CXFA_FFDocView::GetWidgetHandler() { - if (!m_pWidgetHandler) { - m_pWidgetHandler = new CXFA_FFWidgetHandler(this); - } - return m_pWidgetHandler; -} -IXFA_WidgetIterator* CXFA_FFDocView::CreateWidgetIterator() { - CXFA_Node* pFormRoot = GetRootSubform(); - if (!pFormRoot) { - return NULL; - } - return new CXFA_FFDocWidgetIterator(this, pFormRoot); -} -IXFA_WidgetAccIterator* CXFA_FFDocView::CreateWidgetAccIterator( - XFA_WIDGETORDER eOrder) { - CXFA_Node* pFormRoot = GetRootSubform(); - if (!pFormRoot) { - return NULL; - } - return new CXFA_WidgetAccIterator(this, pFormRoot); -} -IXFA_Widget* CXFA_FFDocView::GetFocusWidget() { - return m_pFocusWidget; -} -void CXFA_FFDocView::KillFocus() { - if (m_pFocusWidget && - (m_pFocusWidget->GetStatus() & XFA_WIDGETSTATUS_Focused)) { - (m_pFocusWidget)->OnKillFocus(NULL); - } - m_pFocusAcc = NULL; - m_pFocusWidget = NULL; - m_pOldFocusWidget = NULL; -} -FX_BOOL CXFA_FFDocView::SetFocus(IXFA_Widget* hWidget) { - CXFA_FFWidget* pNewFocus = (CXFA_FFWidget*)hWidget; - if (m_pOldFocusWidget == pNewFocus) { - return FALSE; - } - CXFA_FFWidget* pOldFocus = m_pOldFocusWidget; - m_pOldFocusWidget = pNewFocus; - if (pOldFocus) { - if (m_pFocusWidget != m_pOldFocusWidget && - (pOldFocus->GetStatus() & XFA_WIDGETSTATUS_Focused)) { - m_pFocusWidget = pOldFocus; - pOldFocus->OnKillFocus(pNewFocus); - } else if ((pOldFocus->GetStatus() & XFA_WIDGETSTATUS_Visible)) { - if (!pOldFocus->IsLoaded()) { - pOldFocus->LoadWidget(); - } - pOldFocus->OnSetFocus(m_pFocusWidget); - m_pFocusWidget = pOldFocus; - pOldFocus->OnKillFocus(pNewFocus); - } - } - if (m_pFocusWidget == m_pOldFocusWidget) { - return FALSE; - } - pNewFocus = m_pOldFocusWidget; - if (m_pListFocusWidget && pNewFocus == m_pListFocusWidget) { - m_pFocusAcc = NULL; - m_pFocusWidget = NULL; - m_pListFocusWidget = NULL; - m_pOldFocusWidget = NULL; - return FALSE; - } - if (pNewFocus && (pNewFocus->GetStatus() & XFA_WIDGETSTATUS_Visible)) { - if (!pNewFocus->IsLoaded()) { - pNewFocus->LoadWidget(); - } - pNewFocus->OnSetFocus(m_pFocusWidget); - } - m_pFocusAcc = pNewFocus ? pNewFocus->GetDataAcc() : NULL; - m_pFocusWidget = pNewFocus; - m_pOldFocusWidget = m_pFocusWidget; - return TRUE; -} -CXFA_WidgetAcc* CXFA_FFDocView::GetFocusWidgetAcc() { - return m_pFocusAcc; -} -void CXFA_FFDocView::SetFocusWidgetAcc(CXFA_WidgetAcc* pWidgetAcc) { - CXFA_FFWidget* pNewFocus = - pWidgetAcc ? pWidgetAcc->GetNextWidget(NULL) : NULL; - if (SetFocus(pNewFocus)) { - m_pFocusAcc = pWidgetAcc; - if (m_iStatus == XFA_DOCVIEW_LAYOUTSTATUS_End) { - m_pDoc->GetDocProvider()->SetFocusWidget(m_pDoc, m_pFocusWidget); - } - } -} -void CXFA_FFDocView::DeleteLayoutItem(CXFA_FFWidget* pWidget) { - if (m_pFocusAcc == pWidget->GetDataAcc()) { - m_pFocusAcc = NULL; - m_pFocusWidget = NULL; - m_pOldFocusWidget = NULL; - } -} -static int32_t XFA_ProcessEvent(CXFA_FFDocView* pDocView, - CXFA_WidgetAcc* pWidgetAcc, - CXFA_EventParam* pParam) { - if (!pParam || pParam->m_eType == XFA_EVENT_Unknown) { - return XFA_EVENTERROR_NotExist; - } - if (!pWidgetAcc || pWidgetAcc->GetClassID() == XFA_ELEMENT_Draw) { - return XFA_EVENTERROR_NotExist; - } - switch (pParam->m_eType) { - case XFA_EVENT_Calculate: - return pWidgetAcc->ProcessCalculate(); - case XFA_EVENT_Validate: - if (((CXFA_FFDoc*)pDocView->GetDoc()) - ->GetDocProvider() - ->IsValidationsEnabled(pDocView->GetDoc())) { - return pWidgetAcc->ProcessValidate(0x01); - } - return XFA_EVENTERROR_Disabled; - case XFA_EVENT_InitCalculate: { - CXFA_Calculate calc = pWidgetAcc->GetCalculate(); - if (!calc) { - return XFA_EVENTERROR_NotExist; - } - if (pWidgetAcc->GetNode()->HasFlag(XFA_NODEFLAG_UserInteractive)) { - return XFA_EVENTERROR_Disabled; - } - CXFA_Script script = calc.GetScript(); - return pWidgetAcc->ExecuteScript(script, pParam); - } - default: - break; - } - int32_t iRet = - pWidgetAcc->ProcessEvent(gs_EventActivity[pParam->m_eType], pParam); - return iRet; -} -int32_t CXFA_FFDocView::ExecEventActivityByDeepFirst(CXFA_Node* pFormNode, - XFA_EVENTTYPE eEventType, - FX_BOOL bIsFormReady, - FX_BOOL bRecursive, - CXFA_Node* pExclude) { - int32_t iRet = XFA_EVENTERROR_NotExist; - if (pFormNode == pExclude) { - return iRet; - } - XFA_ELEMENT elementType = pFormNode->GetClassID(); - if (elementType == XFA_ELEMENT_Field) { - if (eEventType == XFA_EVENT_IndexChange) { - return iRet; - } - CXFA_WidgetAcc* pWidgetAcc = (CXFA_WidgetAcc*)pFormNode->GetWidgetData(); - if (pWidgetAcc == NULL) { - return iRet; - } - CXFA_EventParam eParam; - eParam.m_eType = eEventType; - eParam.m_pTarget = pWidgetAcc; - eParam.m_bIsFormReady = bIsFormReady; - return XFA_ProcessEvent(this, pWidgetAcc, &eParam); - } - if (bRecursive) { - for (CXFA_Node* pNode = pFormNode->GetNodeItem( - XFA_NODEITEM_FirstChild, XFA_OBJECTTYPE_ContainerNode); - pNode; pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling, - XFA_OBJECTTYPE_ContainerNode)) { - elementType = pNode->GetClassID(); - if (elementType != XFA_ELEMENT_Variables && - elementType != XFA_ELEMENT_Draw) { - iRet |= ExecEventActivityByDeepFirst(pNode, eEventType, bIsFormReady, - bRecursive, pExclude); - } - } - } - CXFA_WidgetAcc* pWidgetAcc = (CXFA_WidgetAcc*)pFormNode->GetWidgetData(); - if (pWidgetAcc == NULL) { - return iRet; - } - CXFA_EventParam eParam; - eParam.m_eType = eEventType; - eParam.m_pTarget = pWidgetAcc; - eParam.m_bIsFormReady = bIsFormReady; - iRet |= XFA_ProcessEvent(this, pWidgetAcc, &eParam); - return iRet; -} -CXFA_FFWidget* CXFA_FFDocView::GetWidgetByName(const CFX_WideStringC& wsName, - CXFA_FFWidget* pRefWidget) { - CXFA_WidgetAcc* pRefAcc = pRefWidget ? pRefWidget->GetDataAcc() : NULL; - if (CXFA_WidgetAcc* pAcc = GetWidgetAccByName(wsName, pRefAcc)) { - return pAcc->GetNextWidget(NULL); - } - return NULL; -} -CXFA_WidgetAcc* CXFA_FFDocView::GetWidgetAccByName( - const CFX_WideStringC& wsName, - CXFA_WidgetAcc* pRefWidgetAcc) { - CFX_WideString wsExpression; - FX_DWORD dwStyle = XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Properties | - XFA_RESOLVENODE_Siblings | XFA_RESOLVENODE_Parent; - IXFA_ScriptContext* pScriptContext = m_pDoc->GetXFADoc()->GetScriptContext(); - if (!pScriptContext) { - return NULL; - } - CXFA_Node* refNode = NULL; - if (pRefWidgetAcc) { - refNode = pRefWidgetAcc->GetNode(); - wsExpression = wsName; - } else { - wsExpression = L"$form." + wsName; - } - XFA_RESOLVENODE_RS resoveNodeRS; - int32_t iRet = pScriptContext->ResolveObjects(refNode, wsExpression, - resoveNodeRS, dwStyle); - if (iRet < 1) { - return NULL; - } - if (resoveNodeRS.dwFlags == XFA_RESOVENODE_RSTYPE_Nodes) { - CXFA_Node* pNode = resoveNodeRS.nodes[0]->AsNode(); - if (pNode) { - return (CXFA_WidgetAcc*)pNode->GetWidgetData(); - } - } - return NULL; -} -void CXFA_FFDocView::OnPageEvent(IXFA_LayoutPage* pSender, - XFA_PAGEEVENT eEvent, - int32_t iPageIndex) { - CXFA_FFPageView* pFFPageView = static_cast(pSender); - if (eEvent == XFA_PAGEEVENT_PageRemoved) { - m_pDoc->GetDocProvider()->PageViewEvent(pFFPageView, - XFA_PAGEVIEWEVENT_PostRemoved); - return; - } - m_pDoc->GetDocProvider()->PageViewEvent(pFFPageView, - XFA_PAGEVIEWEVENT_PostAdded); - pFFPageView->LoadPageView(); -} -void CXFA_FFDocView::LockUpdate() { - m_iLock++; -} -void CXFA_FFDocView::UnlockUpdate() { - m_iLock--; -} -FX_BOOL CXFA_FFDocView::IsUpdateLocked() { - return m_iLock; -} -void CXFA_FFDocView::ClearInvalidateList() { - FX_POSITION ps = m_mapPageInvalidate.GetStartPosition(); - while (ps) { - void* pPageView = NULL; - CFX_RectF* pRect = NULL; - m_mapPageInvalidate.GetNextAssoc(ps, pPageView, (void*&)pRect); - delete pRect; - } - m_mapPageInvalidate.RemoveAll(); -} -void CXFA_FFDocView::AddInvalidateRect(CXFA_FFWidget* pWidget, - const CFX_RectF& rtInvalidate) { - AddInvalidateRect(pWidget->GetPageView(), rtInvalidate); -} -void CXFA_FFDocView::AddInvalidateRect(IXFA_PageView* pPageView, - const CFX_RectF& rtInvalidate) { - CFX_RectF* pRect = (CFX_RectF*)m_mapPageInvalidate.GetValueAt(pPageView); - if (!pRect) { - pRect = new CFX_RectF; - pRect->Set(rtInvalidate.left, rtInvalidate.top, rtInvalidate.width, - rtInvalidate.height); - m_mapPageInvalidate.SetAt(pPageView, pRect); - } else { - pRect->Union(rtInvalidate); - } -} -void CXFA_FFDocView::RunInvalidate() { - FX_POSITION ps = m_mapPageInvalidate.GetStartPosition(); - while (ps) { - IXFA_PageView* pPageView = NULL; - CFX_RectF* pRect = NULL; - m_mapPageInvalidate.GetNextAssoc(ps, (void*&)pPageView, (void*&)pRect); - m_pDoc->GetDocProvider()->InvalidateRect(pPageView, *pRect); - delete pRect; - } - m_mapPageInvalidate.RemoveAll(); -} -FX_BOOL CXFA_FFDocView::RunLayout() { - LockUpdate(); - m_bInLayoutStatus = TRUE; - if (!m_pXFADocLayout->IncrementLayout() && - m_pXFADocLayout->StartLayout() < 100) { - m_pXFADocLayout->DoLayout(); - UnlockUpdate(); - m_bInLayoutStatus = FALSE; - return TRUE; - } - m_bInLayoutStatus = FALSE; - UnlockUpdate(); - return FALSE; -} -void CXFA_FFDocView::RunSubformIndexChange() { - int32_t iSubforms = m_IndexChangedSubforms.GetSize(); - for (int32_t i = 0; i < iSubforms; i++) { - CXFA_Node* pSubformNode = - reinterpret_cast(m_IndexChangedSubforms[i]); - CXFA_WidgetAcc* pWidgetAcc = (CXFA_WidgetAcc*)pSubformNode->GetWidgetData(); - if (!pWidgetAcc) { - continue; - } - CXFA_EventParam eParam; - eParam.m_eType = XFA_EVENT_IndexChange; - eParam.m_pTarget = pWidgetAcc; - pWidgetAcc->ProcessEvent(XFA_ATTRIBUTEENUM_IndexChange, &eParam); - } - m_IndexChangedSubforms.RemoveAll(); -} -void CXFA_FFDocView::AddNewFormNode(CXFA_Node* pNode) { - m_NewAddedNodes.Add(pNode); - InitLayout(pNode); -} -void CXFA_FFDocView::AddIndexChangedSubform(CXFA_Node* pNode) { - FXSYS_assert(pNode->GetClassID() == XFA_ELEMENT_Subform); - m_IndexChangedSubforms.Add(pNode); -} -void CXFA_FFDocView::RunDocClose() { - CXFA_Node* pRootItem = - ToNode(m_pDoc->GetXFADoc()->GetXFAObject(XFA_HASHCODE_Form)); - if (!pRootItem) { - return; - } - ExecEventActivityByDeepFirst(pRootItem, XFA_EVENT_DocClose); -} -void CXFA_FFDocView::DestroyDocView() { - ClearInvalidateList(); - m_iStatus = XFA_DOCVIEW_LAYOUTSTATUS_None; - m_iLock = 0; - m_ValidateAccs.RemoveAll(); - m_bindItems.RemoveAll(); - m_CalculateAccs.RemoveAll(); -} -FX_BOOL CXFA_FFDocView::IsStaticNotify() { - return m_pDoc->GetDocType() == XFA_DOCTYPE_Static; -} -void CXFA_FFDocView::AddCalculateWidgetAcc(CXFA_WidgetAcc* pWidgetAcc) { - int32_t iAccs = m_CalculateAccs.GetSize(); - CXFA_WidgetAcc* pCurrentAcc = - (iAccs < 1) ? (CXFA_WidgetAcc*)NULL - : (CXFA_WidgetAcc*)m_CalculateAccs[iAccs - 1]; - if (pCurrentAcc != pWidgetAcc) { - m_CalculateAccs.Add(pWidgetAcc); - } -} -void CXFA_FFDocView::AddCalculateNodeNotify(CXFA_Node* pNodeChange) { - CXFA_CalcData* pGlobalData = - (CXFA_CalcData*)pNodeChange->GetUserData(XFA_CalcData); - int32_t iCount = pGlobalData ? pGlobalData->m_Globals.GetSize() : 0; - for (int32_t i = 0; i < iCount; i++) { - CXFA_WidgetAcc* pResultAcc = (CXFA_WidgetAcc*)pGlobalData->m_Globals[i]; - if (pResultAcc->GetNode()->HasFlag(XFA_NODEFLAG_HasRemoved)) { - continue; - } - int32_t iAccs = m_CalculateAccs.GetSize(); - CXFA_WidgetAcc* pCurrentAcc = - (iAccs < 1) ? (CXFA_WidgetAcc*)NULL - : (CXFA_WidgetAcc*)m_CalculateAccs[iAccs - 1]; - if (pCurrentAcc != pResultAcc) { - m_CalculateAccs.Add(pResultAcc); - } - } -} -void CXFA_FFDocView::RunCalculateRecursive(int32_t& iIndex) { - while (iIndex < m_CalculateAccs.GetSize()) { - CXFA_WidgetAcc* pCurAcc = (CXFA_WidgetAcc*)m_CalculateAccs[iIndex]; - AddCalculateNodeNotify(pCurAcc->GetNode()); - int32_t iRefCount = - (int32_t)(uintptr_t)pCurAcc->GetNode()->GetUserData(XFA_CalcRefCount); - iRefCount++; - pCurAcc->GetNode()->SetUserData(XFA_CalcRefCount, - (void*)(uintptr_t)iRefCount); - if (iRefCount > 11) { - break; - } - if ((pCurAcc->ProcessCalculate()) == XFA_EVENTERROR_Sucess) { - AddValidateWidget(pCurAcc); - } - iIndex++; - RunCalculateRecursive(iIndex); - } -} -int32_t CXFA_FFDocView::RunCalculateWidgets() { - if (!m_pDoc->GetDocProvider()->IsCalculationsEnabled(m_pDoc)) { - return XFA_EVENTERROR_Disabled; - } - int32_t iCounts = m_CalculateAccs.GetSize(); - int32_t iIndex = 0; - if (iCounts > 0) { - RunCalculateRecursive(iIndex); - } - for (int32_t i = 0; i < m_CalculateAccs.GetSize(); i++) { - CXFA_WidgetAcc* pCurAcc = (CXFA_WidgetAcc*)m_CalculateAccs[i]; - pCurAcc->GetNode()->SetUserData(XFA_CalcRefCount, (void*)(uintptr_t)0); - } - m_CalculateAccs.RemoveAll(); - return XFA_EVENTERROR_Sucess; -} -void CXFA_FFDocView::AddValidateWidget(CXFA_WidgetAcc* pWidget) { - if (m_ValidateAccs.Find(pWidget) < 0) { - m_ValidateAccs.Add(pWidget); - } -} -FX_BOOL CXFA_FFDocView::InitCalculate(CXFA_Node* pNode) { - ExecEventActivityByDeepFirst(pNode, XFA_EVENT_InitCalculate); - return TRUE; -} -FX_BOOL CXFA_FFDocView::InitValidate(CXFA_Node* pNode) { - if (!m_pDoc->GetDocProvider()->IsValidationsEnabled(m_pDoc)) { - return FALSE; - } - ExecEventActivityByDeepFirst(pNode, XFA_EVENT_Validate); - m_ValidateAccs.RemoveAll(); - return TRUE; -} -FX_BOOL CXFA_FFDocView::RunValidate() { - if (!m_pDoc->GetDocProvider()->IsValidationsEnabled(m_pDoc)) { - return FALSE; - } - int32_t iCounts = m_ValidateAccs.GetSize(); - for (int32_t i = 0; i < iCounts; i++) { - CXFA_WidgetAcc* pAcc = (CXFA_WidgetAcc*)m_ValidateAccs[i]; - if (pAcc->GetNode()->HasFlag(XFA_NODEFLAG_HasRemoved)) { - continue; - } - pAcc->ProcessValidate(); - } - m_ValidateAccs.RemoveAll(); - return TRUE; -} -FX_BOOL CXFA_FFDocView::RunEventLayoutReady() { - CXFA_Node* pRootItem = - ToNode(m_pDoc->GetXFADoc()->GetXFAObject(XFA_HASHCODE_Form)); - if (!pRootItem) { - return FALSE; - } - ExecEventActivityByDeepFirst(pRootItem, XFA_EVENT_Ready); - RunLayout(); - return TRUE; -} -void CXFA_FFDocView::RunBindItems() { - int32_t iCount = m_bindItems.GetSize(); - for (int32_t i = 0; i < iCount; i++) { - if (reinterpret_cast(m_bindItems[i]) - ->HasFlag(XFA_NODEFLAG_HasRemoved)) { - continue; - } - CXFA_Node* pWidgetNode = reinterpret_cast(m_bindItems[i]) - ->GetNodeItem(XFA_NODEITEM_Parent); - CXFA_WidgetAcc* pAcc = (CXFA_WidgetAcc*)pWidgetNode->GetWidgetData(); - if (!pAcc) { - continue; - } - CXFA_BindItems binditems(reinterpret_cast(m_bindItems[i])); - IXFA_ScriptContext* pScriptContext = - pWidgetNode->GetDocument()->GetScriptContext(); - CFX_WideStringC wsRef; - binditems.GetRef(wsRef); - FX_DWORD dwStyle = XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Properties | - XFA_RESOLVENODE_Siblings | XFA_RESOLVENODE_Parent | - XFA_RESOLVENODE_ALL; - XFA_RESOLVENODE_RS rs; - pScriptContext->ResolveObjects(pWidgetNode, wsRef, rs, dwStyle); - int32_t iCount = rs.nodes.GetSize(); - pAcc->DeleteItem(-1); - if (rs.dwFlags != XFA_RESOVENODE_RSTYPE_Nodes || iCount < 1) { - continue; - } - CFX_WideStringC wsValueRef, wsLabelRef; - binditems.GetValueRef(wsValueRef); - binditems.GetLabelRef(wsLabelRef); - const bool bUseValue = wsLabelRef.IsEmpty() || wsLabelRef == wsValueRef; - const bool bLabelUseContent = - wsLabelRef.IsEmpty() || wsLabelRef == FX_WSTRC(L"$"); - const bool bValueUseContent = - wsValueRef.IsEmpty() || wsValueRef == FX_WSTRC(L"$"); - CFX_WideString wsValue, wsLabel; - FX_DWORD uValueHash = FX_HashCode_String_GetW(CFX_WideString(wsValueRef), - wsValueRef.GetLength()); - for (int32_t i = 0; i < iCount; i++) { - CXFA_Object* refObj = rs.nodes[i]; - if (!refObj->IsNode()) { - continue; - } - CXFA_Node* refNode = refObj->AsNode(); - if (bValueUseContent) { - wsValue = refNode->GetContent(); - } else { - CXFA_Node* nodeValue = refNode->GetFirstChildByName(uValueHash); - if (nodeValue == NULL) { - wsValue = refNode->GetContent(); - } else { - wsValue = nodeValue->GetContent(); - } - } - if (!bUseValue) { - if (bLabelUseContent) { - wsLabel = refNode->GetContent(); - } else { - CXFA_Node* nodeLabel = refNode->GetFirstChildByName(wsLabelRef); - if (nodeLabel) - wsLabel = nodeLabel->GetContent(); - } - } else { - wsLabel = wsValue; - } - pAcc->InsertItem(wsLabel, wsValue); - } - } - m_bindItems.RemoveAll(); -} -void CXFA_FFDocView::SetChangeMark() { - if (m_iStatus < XFA_DOCVIEW_LAYOUTSTATUS_End) { - return; - } - m_pDoc->GetDocProvider()->SetChangeMark(m_pDoc); -} -CXFA_Node* CXFA_FFDocView::GetRootSubform() { - CXFA_Node* pFormPacketNode = - ToNode(m_pDoc->GetXFADoc()->GetXFAObject(XFA_HASHCODE_Form)); - if (!pFormPacketNode) { - return NULL; - } - return pFormPacketNode->GetFirstChildByClass(XFA_ELEMENT_Subform); -} -CXFA_FFDocWidgetIterator::CXFA_FFDocWidgetIterator(CXFA_FFDocView* pDocView, - CXFA_Node* pTravelRoot) - : m_ContentIterator(pTravelRoot) { - m_pDocView = pDocView; - m_pCurWidget = NULL; -} -CXFA_FFDocWidgetIterator::~CXFA_FFDocWidgetIterator() {} -void CXFA_FFDocWidgetIterator::Reset() { - m_ContentIterator.Reset(); - m_pCurWidget = NULL; -} -IXFA_Widget* CXFA_FFDocWidgetIterator::MoveToFirst() { - return NULL; -} -IXFA_Widget* CXFA_FFDocWidgetIterator::MoveToLast() { - return NULL; -} -IXFA_Widget* CXFA_FFDocWidgetIterator::MoveToNext() { - CXFA_Node* pItem = m_pCurWidget ? m_ContentIterator.MoveToNext() - : m_ContentIterator.GetCurrent(); - while (pItem) { - if (CXFA_WidgetAcc* pAcc = (CXFA_WidgetAcc*)pItem->GetWidgetData()) { - while ((m_pCurWidget = pAcc->GetNextWidget(NULL))) { - if (!m_pCurWidget->IsLoaded() && - (m_pCurWidget->GetStatus() & XFA_WIDGETSTATUS_Visible)) { - m_pCurWidget->LoadWidget(); - } - return m_pCurWidget; - } - } - pItem = m_ContentIterator.MoveToNext(); - } - return NULL; -} -IXFA_Widget* CXFA_FFDocWidgetIterator::MoveToPrevious() { - return NULL; -} -IXFA_Widget* CXFA_FFDocWidgetIterator::GetCurrentWidget() { - return NULL; -} -FX_BOOL CXFA_FFDocWidgetIterator::SetCurrentWidget(IXFA_Widget* hWidget) { - return FALSE; -} -IXFA_WidgetAccIterator* XFA_WidgetAccIterator_Create( - CXFA_WidgetAcc* pTravelRoot, - XFA_WIDGETORDER eOrder) { - if (!pTravelRoot) { - return NULL; - } - return new CXFA_WidgetAccIterator(pTravelRoot->GetDocView(), - pTravelRoot->GetNode()); -} -CXFA_WidgetAccIterator::CXFA_WidgetAccIterator(CXFA_FFDocView* pDocView, - CXFA_Node* pTravelRoot) - : m_ContentIterator(pTravelRoot) { - m_pDocView = pDocView; - m_pCurWidgetAcc = NULL; -} -CXFA_WidgetAccIterator::~CXFA_WidgetAccIterator() {} -void CXFA_WidgetAccIterator::Reset() { - m_pCurWidgetAcc = NULL; - m_ContentIterator.Reset(); -} -CXFA_WidgetAcc* CXFA_WidgetAccIterator::MoveToFirst() { - return NULL; -} -CXFA_WidgetAcc* CXFA_WidgetAccIterator::MoveToLast() { - return NULL; -} -CXFA_WidgetAcc* CXFA_WidgetAccIterator::MoveToNext() { - CXFA_Node* pItem = m_pCurWidgetAcc ? m_ContentIterator.MoveToNext() - : m_ContentIterator.GetCurrent(); - while (pItem) { - if ((m_pCurWidgetAcc = (CXFA_WidgetAcc*)pItem->GetWidgetData())) { - return m_pCurWidgetAcc; - } - pItem = m_ContentIterator.MoveToNext(); - } - return NULL; -} -CXFA_WidgetAcc* CXFA_WidgetAccIterator::MoveToPrevious() { - return NULL; -} -CXFA_WidgetAcc* CXFA_WidgetAccIterator::GetCurrentWidgetAcc() { - return NULL; -} -FX_BOOL CXFA_WidgetAccIterator::SetCurrentWidgetAcc(CXFA_WidgetAcc* hWidget) { - return FALSE; -} -void CXFA_WidgetAccIterator::SkipTree() { - m_ContentIterator.SkipChildrenAndMoveToNext(); - m_pCurWidgetAcc = NULL; -} diff --git a/xfa/src/fxfa/app/xfa_ffdocview.h b/xfa/src/fxfa/app/xfa_ffdocview.h deleted file mode 100644 index 6ca9d2d015..0000000000 --- a/xfa/src/fxfa/app/xfa_ffdocview.h +++ /dev/null @@ -1,170 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXFA_APP_XFA_FFDOCVIEW_H_ -#define XFA_SRC_FXFA_APP_XFA_FFDOCVIEW_H_ - -#include "xfa/src/fxfa/app/xfa_ffdoc.h" - -class CXFA_FFWidgetHandler; -class CXFA_FFDoc; -class CXFA_FFWidget; -extern const XFA_ATTRIBUTEENUM gs_EventActivity[]; -enum XFA_DOCVIEW_LAYOUTSTATUS { - XFA_DOCVIEW_LAYOUTSTATUS_None, - XFA_DOCVIEW_LAYOUTSTATUS_Start, - XFA_DOCVIEW_LAYOUTSTATUS_FormInitialize, - XFA_DOCVIEW_LAYOUTSTATUS_FormInitCalculate, - XFA_DOCVIEW_LAYOUTSTATUS_FormInitValidate, - XFA_DOCVIEW_LAYOUTSTATUS_FormFormReady, - XFA_DOCVIEW_LAYOUTSTATUS_Doing, - XFA_DOCVIEW_LAYOUTSTATUS_PagesetInitialize, - XFA_DOCVIEW_LAYOUTSTATUS_PagesetInitCalculate, - XFA_DOCVIEW_LAYOUTSTATUS_PagesetInitValidate, - XFA_DOCVIEW_LAYOUTSTATUS_PagesetFormReady, - XFA_DOCVIEW_LAYOUTSTATUS_LayoutReady, - XFA_DOCVIEW_LAYOUTSTATUS_DocReady, - XFA_DOCVIEW_LAYOUTSTATUS_End -}; -class CXFA_FFDocView : public IXFA_DocView { - public: - CXFA_FFDocView(CXFA_FFDoc* pDoc); - ~CXFA_FFDocView(); - - virtual IXFA_Doc* GetDoc() { return m_pDoc; } - virtual int32_t StartLayout(int32_t iStartPage = 0); - virtual int32_t DoLayout(IFX_Pause* pPause = NULL); - virtual void StopLayout(); - virtual int32_t GetLayoutStatus(); - virtual void UpdateDocView(); - virtual int32_t CountPageViews(); - virtual IXFA_PageView* GetPageView(int32_t nIndex); - virtual IXFA_Widget* GetWidgetByName(const CFX_WideStringC& wsName); - virtual CXFA_WidgetAcc* GetWidgetAccByName(const CFX_WideStringC& wsName); - virtual void ResetWidgetData(CXFA_WidgetAcc* pWidgetAcc = NULL); - virtual int32_t ProcessWidgetEvent(CXFA_EventParam* pParam, - CXFA_WidgetAcc* pWidgetAcc = NULL); - virtual IXFA_WidgetHandler* GetWidgetHandler(); - virtual IXFA_WidgetIterator* CreateWidgetIterator(); - virtual IXFA_WidgetAccIterator* CreateWidgetAccIterator( - XFA_WIDGETORDER eOrder = XFA_WIDGETORDER_PreOrder); - virtual IXFA_Widget* GetFocusWidget(); - virtual void KillFocus(); - virtual FX_BOOL SetFocus(IXFA_Widget* hWidget); - CXFA_FFWidget* GetWidgetByName(const CFX_WideStringC& wsName, - CXFA_FFWidget* pRefWidget = NULL); - CXFA_WidgetAcc* GetWidgetAccByName(const CFX_WideStringC& wsName, - CXFA_WidgetAcc* pRefWidgetAcc = NULL); - IXFA_DocLayout* GetXFALayout() const; - void OnPageEvent(IXFA_LayoutPage* pSender, - XFA_PAGEEVENT eEvent, - int32_t iPageIndex); - void LockUpdate(); - void UnlockUpdate(); - FX_BOOL IsUpdateLocked(); - void ClearInvalidateList(); - void AddInvalidateRect(CXFA_FFWidget* pWidget, const CFX_RectF& rtInvalidate); - void AddInvalidateRect(IXFA_PageView* pPageView, - const CFX_RectF& rtInvalidate); - void RunInvalidate(); - void RunDocClose(); - void DestroyDocView(); - - FX_BOOL InitValidate(CXFA_Node* pNode); - FX_BOOL RunValidate(); - - void SetChangeMark(); - - void AddValidateWidget(CXFA_WidgetAcc* pWidget); - void AddCalculateNodeNotify(CXFA_Node* pNodeChange); - void AddCalculateWidgetAcc(CXFA_WidgetAcc* pWidgetAcc); - int32_t RunCalculateWidgets(); - FX_BOOL IsStaticNotify(); - FX_BOOL RunLayout(); - void RunSubformIndexChange(); - void AddNewFormNode(CXFA_Node* pNode); - void AddIndexChangedSubform(CXFA_Node* pNode); - CXFA_WidgetAcc* GetFocusWidgetAcc(); - void SetFocusWidgetAcc(CXFA_WidgetAcc* pWidgetAcc); - void DeleteLayoutItem(CXFA_FFWidget* pWidget); - int32_t ExecEventActivityByDeepFirst(CXFA_Node* pFormNode, - XFA_EVENTTYPE eEventType, - FX_BOOL bIsFormReady = FALSE, - FX_BOOL bRecursive = TRUE, - CXFA_Node* pExclude = NULL); - FX_BOOL m_bLayoutEvent; - CFX_WideStringArray m_arrNullTestMsg; - CXFA_FFWidget* m_pListFocusWidget; - FX_BOOL m_bInLayoutStatus; - - protected: - FX_BOOL RunEventLayoutReady(); - void RunBindItems(); - FX_BOOL InitCalculate(CXFA_Node* pNode); - void InitLayout(CXFA_Node* pNode); - void RunCalculateRecursive(int32_t& iIndex); - void ShowNullTestMsg(); - FX_BOOL ResetSingleWidgetAccData(CXFA_WidgetAcc* pWidgetAcc); - CXFA_Node* GetRootSubform(); - - CXFA_FFDoc* m_pDoc; - CXFA_FFWidgetHandler* m_pWidgetHandler; - IXFA_DocLayout* m_pXFADocLayout; - CXFA_WidgetAcc* m_pFocusAcc; - CXFA_FFWidget* m_pFocusWidget; - CXFA_FFWidget* m_pOldFocusWidget; - CFX_MapPtrToPtr m_mapPageInvalidate; - CFX_PtrArray m_ValidateAccs; - CFX_PtrArray m_bindItems; - CFX_PtrArray m_CalculateAccs; - - CFX_PtrArray m_NewAddedNodes; - CFX_PtrArray m_IndexChangedSubforms; - XFA_DOCVIEW_LAYOUTSTATUS m_iStatus; - int32_t m_iLock; - friend class CXFA_FFNotify; -}; -class CXFA_FFDocWidgetIterator : public IXFA_WidgetIterator { - public: - CXFA_FFDocWidgetIterator(CXFA_FFDocView* pDocView, CXFA_Node* pTravelRoot); - virtual ~CXFA_FFDocWidgetIterator(); - - virtual void Release() { delete this; } - - virtual void Reset(); - virtual IXFA_Widget* MoveToFirst(); - virtual IXFA_Widget* MoveToLast(); - virtual IXFA_Widget* MoveToNext(); - virtual IXFA_Widget* MoveToPrevious(); - virtual IXFA_Widget* GetCurrentWidget(); - virtual FX_BOOL SetCurrentWidget(IXFA_Widget* hWidget); - - protected: - CXFA_ContainerIterator m_ContentIterator; - CXFA_FFDocView* m_pDocView; - CXFA_FFWidget* m_pCurWidget; -}; -class CXFA_WidgetAccIterator : public IXFA_WidgetAccIterator { - public: - CXFA_WidgetAccIterator(CXFA_FFDocView* pDocView, CXFA_Node* pTravelRoot); - virtual ~CXFA_WidgetAccIterator(); - virtual void Release() { delete this; } - virtual void Reset(); - virtual CXFA_WidgetAcc* MoveToFirst(); - virtual CXFA_WidgetAcc* MoveToLast(); - virtual CXFA_WidgetAcc* MoveToNext(); - virtual CXFA_WidgetAcc* MoveToPrevious(); - virtual CXFA_WidgetAcc* GetCurrentWidgetAcc(); - virtual FX_BOOL SetCurrentWidgetAcc(CXFA_WidgetAcc* hWidget); - virtual void SkipTree(); - - protected: - CXFA_ContainerIterator m_ContentIterator; - CXFA_FFDocView* m_pDocView; - CXFA_WidgetAcc* m_pCurWidgetAcc; -}; - -#endif // XFA_SRC_FXFA_APP_XFA_FFDOCVIEW_H_ diff --git a/xfa/src/fxfa/app/xfa_ffdraw.cpp b/xfa/src/fxfa/app/xfa_ffdraw.cpp deleted file mode 100644 index e3be99b5ec..0000000000 --- a/xfa/src/fxfa/app/xfa_ffdraw.cpp +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fxfa/app/xfa_ffdraw.h" - -#include "xfa/src/fxfa/app/xfa_ffapp.h" -#include "xfa/src/fxfa/app/xfa_ffdoc.h" -#include "xfa/src/fxfa/app/xfa_ffpageview.h" -#include "xfa/src/fxfa/app/xfa_ffwidget.h" - -CXFA_FFDraw::CXFA_FFDraw(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc) - : CXFA_FFWidget(pPageView, pDataAcc) {} -CXFA_FFDraw::~CXFA_FFDraw() {} diff --git a/xfa/src/fxfa/app/xfa_ffdraw.h b/xfa/src/fxfa/app/xfa_ffdraw.h deleted file mode 100644 index 467c0728cc..0000000000 --- a/xfa/src/fxfa/app/xfa_ffdraw.h +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXFA_APP_XFA_FFDRAW_H_ -#define XFA_SRC_FXFA_APP_XFA_FFDRAW_H_ - -#include "xfa/src/fxfa/app/xfa_ffpageview.h" -#include "xfa/src/fxfa/app/xfa_ffwidget.h" - -class CXFA_FFDraw : public CXFA_FFWidget { - public: - CXFA_FFDraw(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc); - virtual ~CXFA_FFDraw(); -}; - -#endif // XFA_SRC_FXFA_APP_XFA_FFDRAW_H_ diff --git a/xfa/src/fxfa/app/xfa_ffexclgroup.cpp b/xfa/src/fxfa/app/xfa_ffexclgroup.cpp deleted file mode 100644 index 4fde5ef6e0..0000000000 --- a/xfa/src/fxfa/app/xfa_ffexclgroup.cpp +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fxfa/app/xfa_ffexclgroup.h" - -#include "xfa/src/fxfa/app/xfa_ffapp.h" -#include "xfa/src/fxfa/app/xfa_ffdoc.h" -#include "xfa/src/fxfa/app/xfa_ffpageview.h" -#include "xfa/src/fxfa/app/xfa_ffwidget.h" - -CXFA_FFExclGroup::CXFA_FFExclGroup(CXFA_FFPageView* pPageView, - CXFA_WidgetAcc* pDataAcc) - : CXFA_FFWidget(pPageView, pDataAcc) {} -CXFA_FFExclGroup::~CXFA_FFExclGroup() {} -void CXFA_FFExclGroup::RenderWidget(CFX_Graphics* pGS, - CFX_Matrix* pMatrix, - FX_DWORD dwStatus, - int32_t iRotate) { - if (!IsMatchVisibleStatus(dwStatus)) { - return; - } - CFX_Matrix mtRotate; - GetRotateMatrix(mtRotate); - if (pMatrix) { - mtRotate.Concat(*pMatrix); - } - CXFA_FFWidget::RenderWidget(pGS, &mtRotate, dwStatus); -} diff --git a/xfa/src/fxfa/app/xfa_ffexclgroup.h b/xfa/src/fxfa/app/xfa_ffexclgroup.h deleted file mode 100644 index 52416f9c70..0000000000 --- a/xfa/src/fxfa/app/xfa_ffexclgroup.h +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXFA_APP_XFA_FFEXCLGROUP_H_ -#define XFA_SRC_FXFA_APP_XFA_FFEXCLGROUP_H_ - -#include "xfa/src/fxfa/app/xfa_ffpageview.h" -#include "xfa/src/fxfa/app/xfa_ffwidget.h" - -class CXFA_FFExclGroup : public CXFA_FFWidget { - public: - CXFA_FFExclGroup(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc); - virtual ~CXFA_FFExclGroup(); - - virtual void RenderWidget(CFX_Graphics* pGS, - CFX_Matrix* pMatrix = NULL, - FX_DWORD dwStatus = 0, - int32_t iRotate = 0); -}; - -#endif // XFA_SRC_FXFA_APP_XFA_FFEXCLGROUP_H_ diff --git a/xfa/src/fxfa/app/xfa_fffield.cpp b/xfa/src/fxfa/app/xfa_fffield.cpp deleted file mode 100644 index 607434c5b7..0000000000 --- a/xfa/src/fxfa/app/xfa_fffield.cpp +++ /dev/null @@ -1,835 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fxfa/app/xfa_fffield.h" - -#include "xfa/include/fwl/basewidget/fwl_edit.h" -#include "xfa/include/fwl/core/fwl_widgetmgr.h" -#include "xfa/include/fwl/lightwidget/edit.h" -#include "xfa/include/fwl/lightwidget/picturebox.h" -#include "xfa/src/fxfa/app/xfa_ffapp.h" -#include "xfa/src/fxfa/app/xfa_ffdoc.h" -#include "xfa/src/fxfa/app/xfa_ffdocview.h" -#include "xfa/src/fxfa/app/xfa_ffpageview.h" -#include "xfa/src/fxfa/app/xfa_ffwidget.h" -#include "xfa/src/fxfa/app/xfa_fwltheme.h" -#include "xfa/src/fxfa/app/xfa_textlayout.h" - -CXFA_FFField::CXFA_FFField(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc) - : CXFA_FFWidget(pPageView, pDataAcc), m_pNormalWidget(NULL) { - m_rtUI.Set(0, 0, 0, 0); - m_rtCaption.Set(0, 0, 0, 0); -} -CXFA_FFField::~CXFA_FFField() { - CXFA_FFField::UnloadWidget(); -} - -FX_BOOL CXFA_FFField::GetBBox(CFX_RectF& rtBox, - FX_DWORD dwStatus, - FX_BOOL bDrawFocus) { - if (!bDrawFocus) - return CXFA_FFWidget::GetBBox(rtBox, dwStatus); - - XFA_ELEMENT type = (XFA_ELEMENT)m_pDataAcc->GetUIType(); - if (type == XFA_ELEMENT_Button || type == XFA_ELEMENT_CheckButton || - type == XFA_ELEMENT_ImageEdit || type == XFA_ELEMENT_Signature || - type == XFA_ELEMENT_ChoiceList) { - rtBox = m_rtUI; - CFX_Matrix mt; - GetRotateMatrix(mt); - mt.TransformRect(rtBox); - return TRUE; - } - return FALSE; -} - -void CXFA_FFField::RenderWidget(CFX_Graphics* pGS, - CFX_Matrix* pMatrix, - FX_DWORD dwStatus, - int32_t iRotate) { - if (!IsMatchVisibleStatus(dwStatus)) { - return; - } - CFX_Matrix mtRotate; - GetRotateMatrix(mtRotate); - if (pMatrix) { - mtRotate.Concat(*pMatrix); - } - CXFA_FFWidget::RenderWidget(pGS, &mtRotate, dwStatus); - CXFA_Border borderUI = m_pDataAcc->GetUIBorder(); - DrawBorder(pGS, borderUI, m_rtUI, &mtRotate); - RenderCaption(pGS, &mtRotate); - DrawHighlight(pGS, &mtRotate, dwStatus, FALSE); - CFX_RectF rtWidget; - m_pNormalWidget->GetWidgetRect(rtWidget); - CFX_Matrix mt; - mt.Set(1, 0, 0, 1, rtWidget.left, rtWidget.top); - mt.Concat(mtRotate); - GetApp()->GetWidgetMgrDelegate()->OnDrawWidget(m_pNormalWidget->GetWidget(), - pGS, &mt); -} -void CXFA_FFField::DrawHighlight(CFX_Graphics* pGS, - CFX_Matrix* pMatrix, - FX_DWORD dwStatus, - FX_BOOL bEllipse) { - if (m_rtUI.IsEmpty() || !m_pDataAcc->GetDoc()->GetXFADoc()->IsInteractive()) { - return; - } - if ((dwStatus & XFA_WIDGETSTATUS_Highlight) && - m_pDataAcc->GetAccess() == XFA_ATTRIBUTEENUM_Open) { - CXFA_FFDoc* pDoc = GetDoc(); - CFX_Color crHighlight(pDoc->GetDocProvider()->GetHighlightColor(pDoc)); - pGS->SetFillColor(&crHighlight); - CFX_Path path; - path.Create(); - if (bEllipse) { - path.AddEllipse(m_rtUI); - } else { - path.AddRectangle(m_rtUI.left, m_rtUI.top, m_rtUI.width, m_rtUI.height); - } - pGS->FillPath(&path, FXFILL_WINDING, pMatrix); - } -} -void CXFA_FFField::DrawFocus(CFX_Graphics* pGS, CFX_Matrix* pMatrix) { - if (m_dwStatus & XFA_WIDGETSTATUS_Focused) { - CFX_Color cr(0xFF000000); - pGS->SetStrokeColor(&cr); - FX_FLOAT DashPattern[2] = {1, 1}; - pGS->SetLineDash(0.0f, DashPattern, 2); - pGS->SetLineWidth(0, FALSE); - CFX_Path path; - path.Create(); - path.AddRectangle(m_rtUI.left, m_rtUI.top, m_rtUI.width, m_rtUI.height); - pGS->StrokePath(&path, pMatrix); - } -} -void CXFA_FFField::SetFWLThemeProvider() { - if (m_pNormalWidget) { - m_pNormalWidget->m_pIface->SetThemeProvider(GetApp()->GetFWLTheme()); - } -} -FX_BOOL CXFA_FFField::IsLoaded() { - return m_pNormalWidget && CXFA_FFWidget::IsLoaded(); -} -FX_BOOL CXFA_FFField::LoadWidget() { - SetFWLThemeProvider(); - m_pDataAcc->LoadCaption(); - PerformLayout(); - return TRUE; -} -void CXFA_FFField::UnloadWidget() { - delete m_pNormalWidget; - m_pNormalWidget = nullptr; -} -void CXFA_FFField::SetEditScrollOffset() { - XFA_ELEMENT eType = m_pDataAcc->GetUIType(); - if (eType == XFA_ELEMENT_TextEdit || eType == XFA_ELEMENT_NumericEdit || - eType == XFA_ELEMENT_PasswordEdit) { - FX_FLOAT fScrollOffset = 0; - CXFA_FFField* pPrev = static_cast(GetPrev()); - if (pPrev) { - CFX_RectF rtMargin; - m_pDataAcc->GetUIMargin(rtMargin); - fScrollOffset = -rtMargin.top; - } - while (pPrev) { - fScrollOffset += pPrev->m_rtUI.height; - pPrev = static_cast(pPrev->GetPrev()); - } - ((CFWL_Edit*)m_pNormalWidget)->SetScrollOffset(fScrollOffset); - } -} -FX_BOOL CXFA_FFField::PerformLayout() { - CXFA_FFWidget::PerformLayout(); - CapPlacement(); - LayoutCaption(); - SetFWLRect(); - SetEditScrollOffset(); - if (m_pNormalWidget) { - m_pNormalWidget->Update(); - } - return TRUE; -} -void CXFA_FFField::CapPlacement() { - CFX_RectF rtWidget; - GetRectWithoutRotate(rtWidget); - CXFA_Margin mgWidget = m_pDataAcc->GetMargin(); - if (mgWidget) { - CXFA_LayoutItem* pItem = this; - FX_FLOAT fLeftInset = 0, fRightInset = 0, fTopInset = 0, fBottomInset = 0; - mgWidget.GetLeftInset(fLeftInset); - mgWidget.GetRightInset(fRightInset); - mgWidget.GetTopInset(fTopInset); - mgWidget.GetBottomInset(fBottomInset); - if (pItem->GetPrev() == NULL && pItem->GetNext() == NULL) { - rtWidget.Deflate(fLeftInset, fTopInset, fRightInset, fBottomInset); - } else { - if (pItem->GetPrev() == NULL) { - rtWidget.Deflate(fLeftInset, fTopInset, fRightInset, 0); - } else if (pItem->GetNext() == NULL) { - rtWidget.Deflate(fLeftInset, 0, fRightInset, fBottomInset); - } else { - rtWidget.Deflate(fLeftInset, 0, fRightInset, 0); - } - } - } - XFA_ATTRIBUTEENUM iCapPlacement = XFA_ATTRIBUTEENUM_Unknown; - FX_FLOAT fCapReserve = 0; - CXFA_Caption caption = m_pDataAcc->GetCaption(); - if (caption && caption.GetPresence() != XFA_ATTRIBUTEENUM_Hidden) { - iCapPlacement = (XFA_ATTRIBUTEENUM)caption.GetPlacementType(); - if (iCapPlacement == XFA_ATTRIBUTEENUM_Top && GetPrev()) { - m_rtCaption.Set(0, 0, 0, 0); - } else if (iCapPlacement == XFA_ATTRIBUTEENUM_Bottom && GetNext()) { - m_rtCaption.Set(0, 0, 0, 0); - } else { - fCapReserve = caption.GetReserve(); - CXFA_LayoutItem* pItem = this; - if (pItem->GetPrev() == NULL && pItem->GetNext() == NULL) { - m_rtCaption.Set(rtWidget.left, rtWidget.top, rtWidget.width, - rtWidget.height); - } else { - pItem = pItem->GetFirst(); - pItem->GetRect(m_rtCaption); - pItem = pItem->GetNext(); - while (pItem) { - CFX_RectF rtRect; - pItem->GetRect(rtRect); - m_rtCaption.height += rtRect.Height(); - pItem = pItem->GetNext(); - } - XFA_RectWidthoutMargin(m_rtCaption, mgWidget); - } - CXFA_TextLayout* pCapTextLayout = m_pDataAcc->GetCaptionTextLayout(); - if (fCapReserve <= 0 && pCapTextLayout) { - CFX_SizeF size; - CFX_SizeF minSize; - CFX_SizeF maxSize; - pCapTextLayout->CalcSize(minSize, maxSize, size); - if (iCapPlacement == XFA_ATTRIBUTEENUM_Top || - iCapPlacement == XFA_ATTRIBUTEENUM_Bottom) { - fCapReserve = size.y; - } else { - fCapReserve = size.x; - } - } - } - } - m_rtUI = rtWidget; - switch (iCapPlacement) { - case XFA_ATTRIBUTEENUM_Left: { - m_rtCaption.width = fCapReserve; - CapLeftRightPlacement(caption, rtWidget, iCapPlacement); - m_rtUI.width -= fCapReserve; - m_rtUI.left += fCapReserve; - } break; - case XFA_ATTRIBUTEENUM_Top: { - m_rtCaption.height = fCapReserve; - CapTopBottomPlacement(caption, rtWidget, iCapPlacement); - m_rtUI.top += fCapReserve; - m_rtUI.height -= fCapReserve; - } break; - case XFA_ATTRIBUTEENUM_Right: { - m_rtCaption.left = m_rtCaption.right() - fCapReserve; - m_rtCaption.width = fCapReserve; - CapLeftRightPlacement(caption, rtWidget, iCapPlacement); - m_rtUI.width -= fCapReserve; - } break; - case XFA_ATTRIBUTEENUM_Bottom: { - m_rtCaption.top = m_rtCaption.bottom() - fCapReserve; - m_rtCaption.height = fCapReserve; - CapTopBottomPlacement(caption, rtWidget, iCapPlacement); - m_rtUI.height -= fCapReserve; - } break; - case XFA_ATTRIBUTEENUM_Inline: - break; - default: - break; - } - CXFA_Border borderUI = m_pDataAcc->GetUIBorder(); - if (borderUI) { - CXFA_Margin margin = borderUI.GetMargin(); - if (margin) { - XFA_RectWidthoutMargin(m_rtUI, margin); - } - } - m_rtUI.Normalize(); -} -void CXFA_FFField::CapTopBottomPlacement(CXFA_Caption caption, - const CFX_RectF& rtWidget, - int32_t iCapPlacement) { - CFX_RectF rtUIMargin; - m_pDataAcc->GetUIMargin(rtUIMargin); - m_rtCaption.left += rtUIMargin.left; - if (CXFA_Margin mgCap = caption.GetMargin()) { - XFA_RectWidthoutMargin(m_rtCaption, mgCap); - if (m_rtCaption.height < 0) { - m_rtCaption.top += m_rtCaption.height; - } - } - FX_FLOAT fWidth = rtUIMargin.left + rtUIMargin.width; - FX_FLOAT fHeight = m_rtCaption.height + rtUIMargin.top + rtUIMargin.height; - if (fWidth > rtWidget.width) { - m_rtUI.width += fWidth - rtWidget.width; - } - if (fHeight == XFA_DEFAULTUI_HEIGHT && m_rtUI.height < XFA_MINUI_HEIGHT) { - m_rtUI.height = XFA_MINUI_HEIGHT; - m_rtCaption.top += rtUIMargin.top + rtUIMargin.height; - } else if (fHeight > rtWidget.height) { - m_rtUI.height += fHeight - rtWidget.height; - if (iCapPlacement == XFA_ATTRIBUTEENUM_Bottom) { - m_rtCaption.top += fHeight - rtWidget.height; - } - } -} -void CXFA_FFField::CapLeftRightPlacement(CXFA_Caption caption, - const CFX_RectF& rtWidget, - int32_t iCapPlacement) { - CFX_RectF rtUIMargin; - m_pDataAcc->GetUIMargin(rtUIMargin); - m_rtCaption.top += rtUIMargin.top; - m_rtCaption.height -= rtUIMargin.top; - if (CXFA_Margin mgCap = caption.GetMargin()) { - XFA_RectWidthoutMargin(m_rtCaption, mgCap); - if (m_rtCaption.height < 0) { - m_rtCaption.top += m_rtCaption.height; - } - } - FX_FLOAT fWidth = m_rtCaption.width + rtUIMargin.left + rtUIMargin.width; - FX_FLOAT fHeight = rtUIMargin.top + rtUIMargin.height; - if (fWidth > rtWidget.width) { - m_rtUI.width += fWidth - rtWidget.width; - if (iCapPlacement == XFA_ATTRIBUTEENUM_Right) { - m_rtCaption.left += fWidth - rtWidget.width; - } - } - if (fHeight == XFA_DEFAULTUI_HEIGHT && m_rtUI.height < XFA_MINUI_HEIGHT) { - m_rtUI.height = XFA_MINUI_HEIGHT; - m_rtCaption.top += rtUIMargin.top + rtUIMargin.height; - } else if (fHeight > rtWidget.height) { - m_rtUI.height += fHeight - rtWidget.height; - } -} -void CXFA_FFField::UpdateFWL() { - if (m_pNormalWidget) { - m_pNormalWidget->Update(); - } -} -FX_DWORD CXFA_FFField::UpdateUIProperty() { - CXFA_Node* pUiNode = m_pDataAcc->GetUIChild(); - FX_DWORD dwStyle = 0; - if (pUiNode && pUiNode->GetClassID() == XFA_ELEMENT_DefaultUi) { - dwStyle = FWL_STYLEEXT_EDT_ReadOnly; - } - return dwStyle; -} -void CXFA_FFField::SetFWLRect() { - if (!m_pNormalWidget) { - return; - } - CFX_RectF rtUi = m_rtUI; - if (rtUi.width < 1.0) { - FXSYS_assert(rtUi.width < 1.0); - rtUi.width = 1.0; - } - if (!m_pDataAcc->GetDoc()->GetXFADoc()->IsInteractive()) { - FX_FLOAT fFontSize = m_pDataAcc->GetFontSize(); - if (rtUi.height < fFontSize) { - rtUi.height = fFontSize; - } - } - m_pNormalWidget->SetWidgetRect(rtUi); -} -FX_BOOL CXFA_FFField::OnMouseEnter() { - if (!m_pNormalWidget) { - return FALSE; - } - CFWL_MsgMouse ms; - ms.m_dwCmd = FWL_MSGMOUSECMD_MouseEnter; - ms.m_pDstTarget = m_pNormalWidget->m_pIface; - ms.m_pSrcTarget = NULL; - TranslateFWLMessage(&ms); - return TRUE; -} -FX_BOOL CXFA_FFField::OnMouseExit() { - if (!m_pNormalWidget) { - return FALSE; - } - CFWL_MsgMouse ms; - ms.m_dwCmd = FWL_MSGMOUSECMD_MouseLeave; - ms.m_pDstTarget = m_pNormalWidget->m_pIface; - TranslateFWLMessage(&ms); - return TRUE; -} -void CXFA_FFField::FWLToClient(FX_FLOAT& fx, FX_FLOAT& fy) { - if (!m_pNormalWidget) { - return; - } - CFX_RectF rtWidget; - m_pNormalWidget->GetWidgetRect(rtWidget); - fx -= rtWidget.left; - fy -= rtWidget.top; -} -FX_BOOL CXFA_FFField::OnLButtonDown(FX_DWORD dwFlags, - FX_FLOAT fx, - FX_FLOAT fy) { - if (!m_pNormalWidget) { - return FALSE; - } - if (m_pDataAcc->GetAccess() != XFA_ATTRIBUTEENUM_Open || - !m_pDataAcc->GetDoc()->GetXFADoc()->IsInteractive()) { - return FALSE; - } - if (!PtInActiveRect(fx, fy)) { - return FALSE; - } - SetButtonDown(TRUE); - CFWL_MsgMouse ms; - ms.m_dwCmd = FWL_MSGMOUSECMD_LButtonDown; - ms.m_dwFlags = dwFlags; - ms.m_fx = fx; - ms.m_fy = fy; - FWLToClient(ms.m_fx, ms.m_fy); - ms.m_pDstTarget = m_pNormalWidget->m_pIface; - TranslateFWLMessage(&ms); - return TRUE; -} -FX_BOOL CXFA_FFField::OnLButtonUp(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy) { - if (!m_pNormalWidget) { - return FALSE; - } - if (!IsButtonDown()) { - return FALSE; - } - SetButtonDown(FALSE); - CFWL_MsgMouse ms; - ms.m_dwCmd = FWL_MSGMOUSECMD_LButtonUp; - ms.m_dwFlags = dwFlags; - ms.m_fx = fx; - ms.m_fy = fy; - FWLToClient(ms.m_fx, ms.m_fy); - ms.m_pDstTarget = m_pNormalWidget->m_pIface; - TranslateFWLMessage(&ms); - return TRUE; -} -FX_BOOL CXFA_FFField::OnLButtonDblClk(FX_DWORD dwFlags, - FX_FLOAT fx, - FX_FLOAT fy) { - if (!m_pNormalWidget) { - return FALSE; - } - CFWL_MsgMouse ms; - ms.m_dwCmd = FWL_MSGMOUSECMD_LButtonDblClk; - ms.m_dwFlags = dwFlags; - ms.m_fx = fx; - ms.m_fy = fy; - FWLToClient(ms.m_fx, ms.m_fy); - ms.m_pDstTarget = m_pNormalWidget->m_pIface; - TranslateFWLMessage(&ms); - return TRUE; -} -FX_BOOL CXFA_FFField::OnMouseMove(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy) { - if (!m_pNormalWidget) { - return FALSE; - } - CFWL_MsgMouse ms; - ms.m_dwCmd = FWL_MSGMOUSECMD_MouseMove; - ms.m_dwFlags = dwFlags; - ms.m_fx = fx; - ms.m_fy = fy; - FWLToClient(ms.m_fx, ms.m_fy); - ms.m_pDstTarget = m_pNormalWidget->m_pIface; - TranslateFWLMessage(&ms); - return TRUE; -} -FX_BOOL CXFA_FFField::OnMouseWheel(FX_DWORD dwFlags, - int16_t zDelta, - FX_FLOAT fx, - FX_FLOAT fy) { - return FALSE; - if (!m_pNormalWidget) { - return FALSE; - } - CFWL_MsgMouseWheel ms; - ms.m_dwFlags = dwFlags; - ms.m_fx = fx; - ms.m_fy = fy; - FWLToClient(ms.m_fx, ms.m_fy); - ms.m_fDeltaX = zDelta; - ms.m_fDeltaY = 0; - ms.m_pDstTarget = m_pNormalWidget->m_pIface; - TranslateFWLMessage(&ms); - return TRUE; -} -FX_BOOL CXFA_FFField::OnRButtonDown(FX_DWORD dwFlags, - FX_FLOAT fx, - FX_FLOAT fy) { - if (!m_pNormalWidget) { - return FALSE; - } - if (m_pDataAcc->GetAccess() != XFA_ATTRIBUTEENUM_Open || - !m_pDataAcc->GetDoc()->GetXFADoc()->IsInteractive()) { - return FALSE; - } - if (!PtInActiveRect(fx, fy)) { - return FALSE; - } - SetButtonDown(TRUE); - CFWL_MsgMouse ms; - ms.m_dwCmd = FWL_MSGMOUSECMD_RButtonDown; - ms.m_dwFlags = dwFlags; - ms.m_fx = fx; - ms.m_fy = fy; - FWLToClient(ms.m_fx, ms.m_fy); - ms.m_pDstTarget = m_pNormalWidget->m_pIface; - TranslateFWLMessage(&ms); - return TRUE; -} -FX_BOOL CXFA_FFField::OnRButtonUp(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy) { - if (!m_pNormalWidget) { - return FALSE; - } - if (!IsButtonDown()) { - return FALSE; - } - SetButtonDown(FALSE); - CFWL_MsgMouse ms; - ms.m_dwCmd = FWL_MSGMOUSECMD_RButtonUp; - ms.m_dwFlags = dwFlags; - ms.m_fx = fx; - ms.m_fy = fy; - FWLToClient(ms.m_fx, ms.m_fy); - ms.m_pDstTarget = m_pNormalWidget->m_pIface; - TranslateFWLMessage(&ms); - return TRUE; -} -FX_BOOL CXFA_FFField::OnRButtonDblClk(FX_DWORD dwFlags, - FX_FLOAT fx, - FX_FLOAT fy) { - if (!m_pNormalWidget) { - return FALSE; - } - CFWL_MsgMouse ms; - ms.m_dwCmd = FWL_MSGMOUSECMD_RButtonDblClk; - ms.m_dwFlags = dwFlags; - ms.m_fx = fx; - ms.m_fy = fy; - FWLToClient(ms.m_fx, ms.m_fy); - ms.m_pDstTarget = m_pNormalWidget->m_pIface; - TranslateFWLMessage(&ms); - return TRUE; -} - -FX_BOOL CXFA_FFField::OnSetFocus(CXFA_FFWidget* pOldWidget) { - CXFA_FFWidget::OnSetFocus(pOldWidget); - if (!m_pNormalWidget) { - return FALSE; - } - CFWL_MsgSetFocus ms; - ms.m_pDstTarget = m_pNormalWidget->m_pIface; - ms.m_pSrcTarget = NULL; - TranslateFWLMessage(&ms); - m_dwStatus |= XFA_WIDGETSTATUS_Focused; - AddInvalidateRect(); - return TRUE; -} -FX_BOOL CXFA_FFField::OnKillFocus(CXFA_FFWidget* pNewWidget) { - if (!m_pNormalWidget) { - return CXFA_FFWidget::OnKillFocus(pNewWidget); - } - CFWL_MsgKillFocus ms; - ms.m_pDstTarget = m_pNormalWidget->m_pIface; - ms.m_pSrcTarget = NULL; - TranslateFWLMessage(&ms); - m_dwStatus &= ~XFA_WIDGETSTATUS_Focused; - AddInvalidateRect(); - CXFA_FFWidget::OnKillFocus(pNewWidget); - return TRUE; -} -FX_BOOL CXFA_FFField::OnKeyDown(FX_DWORD dwKeyCode, FX_DWORD dwFlags) { - if (!m_pNormalWidget || !m_pDataAcc->GetDoc()->GetXFADoc()->IsInteractive()) { - return FALSE; - } - CFWL_MsgKey ms; - ms.m_dwCmd = FWL_MSGKEYCMD_KeyDown; - ms.m_dwFlags = dwFlags; - ms.m_dwKeyCode = dwKeyCode; - ms.m_pDstTarget = m_pNormalWidget->m_pIface; - ms.m_pSrcTarget = NULL; - TranslateFWLMessage(&ms); - return TRUE; -} -FX_BOOL CXFA_FFField::OnKeyUp(FX_DWORD dwKeyCode, FX_DWORD dwFlags) { - if (!m_pNormalWidget || !m_pDataAcc->GetDoc()->GetXFADoc()->IsInteractive()) { - return FALSE; - } - CFWL_MsgKey ms; - ms.m_dwCmd = FWL_MSGKEYCMD_KeyUp; - ms.m_dwFlags = dwFlags; - ms.m_dwKeyCode = dwKeyCode; - ms.m_pDstTarget = m_pNormalWidget->m_pIface; - ms.m_pSrcTarget = NULL; - TranslateFWLMessage(&ms); - return TRUE; -} -FX_BOOL CXFA_FFField::OnChar(FX_DWORD dwChar, FX_DWORD dwFlags) { - if (!m_pDataAcc->GetDoc()->GetXFADoc()->IsInteractive()) { - return FALSE; - } - if (dwChar == FWL_VKEY_Tab) { - return TRUE; - } - if (!m_pNormalWidget) { - return FALSE; - } - if (m_pDataAcc->GetAccess() != XFA_ATTRIBUTEENUM_Open) { - return FALSE; - } - CFWL_MsgKey ms; - ms.m_dwCmd = FWL_MSGKEYCMD_Char; - ms.m_dwFlags = dwFlags; - ms.m_dwKeyCode = dwChar; - ms.m_pDstTarget = m_pNormalWidget->m_pIface; - ms.m_pSrcTarget = NULL; - TranslateFWLMessage(&ms); - return TRUE; -} -FX_DWORD CXFA_FFField::OnHitTest(FX_FLOAT fx, FX_FLOAT fy) { - if (m_pNormalWidget) { - FX_FLOAT ffx = fx, ffy = fy; - FWLToClient(ffx, ffy); - FX_DWORD dwWidgetHit = m_pNormalWidget->HitTest(ffx, ffy); - if (dwWidgetHit != FWL_WGTHITTEST_Unknown) { - return FWL_WGTHITTEST_Client; - } - } - CFX_RectF rtBox; - GetRectWithoutRotate(rtBox); - if (!rtBox.Contains(fx, fy)) { - return FWL_WGTHITTEST_Unknown; - } - if (m_rtCaption.Contains(fx, fy)) { - return FWL_WGTHITTEST_Titlebar; - } - return FWL_WGTHITTEST_Border; -} -FX_BOOL CXFA_FFField::OnSetCursor(FX_FLOAT fx, FX_FLOAT fy) { - return TRUE; -} -FX_BOOL CXFA_FFField::PtInActiveRect(FX_FLOAT fx, FX_FLOAT fy) { - if (!m_pNormalWidget) { - return FALSE; - } - CFX_RectF rtWidget; - m_pNormalWidget->GetWidgetRect(rtWidget); - if (rtWidget.Contains(fx, fy)) { - return TRUE; - } - return FALSE; -} -void CXFA_FFField::LayoutCaption() { - CXFA_TextLayout* pCapTextLayout = m_pDataAcc->GetCaptionTextLayout(); - if (!pCapTextLayout) - return; - - FX_FLOAT fHeight = 0; - pCapTextLayout->Layout(CFX_SizeF(m_rtCaption.width, m_rtCaption.height), - &fHeight); - if (m_rtCaption.height < fHeight) - m_rtCaption.height = fHeight; -} -void CXFA_FFField::RenderCaption(CFX_Graphics* pGS, CFX_Matrix* pMatrix) { - CXFA_TextLayout* pCapTextLayout = m_pDataAcc->GetCaptionTextLayout(); - if (!pCapTextLayout) { - return; - } - CXFA_Caption caption = m_pDataAcc->GetCaption(); - if (caption && caption.GetPresence() == XFA_ATTRIBUTEENUM_Visible) { - if (!pCapTextLayout->IsLoaded()) { - pCapTextLayout->Layout(CFX_SizeF(m_rtCaption.width, m_rtCaption.height)); - } - CFX_RectF rtWidget; - GetRectWithoutRotate(rtWidget); - CFX_RectF rtClip = m_rtCaption; - rtClip.Intersect(rtWidget); - CFX_RenderDevice* pRenderDevice = pGS->GetRenderDevice(); - CFX_Matrix mt; - mt.Set(1, 0, 0, 1, m_rtCaption.left, m_rtCaption.top); - if (pMatrix) { - pMatrix->TransformRect(rtClip); - mt.Concat(*pMatrix); - } - pCapTextLayout->DrawString(pRenderDevice, mt, rtClip); - } -} -FX_BOOL CXFA_FFField::ProcessCommittedData() { - if (m_pDataAcc->GetAccess() != XFA_ATTRIBUTEENUM_Open) { - return FALSE; - } - if (!IsDataChanged()) { - return FALSE; - } - if (CalculateOverride() != 1) { - return FALSE; - } - if (!CommitData()) { - return FALSE; - } - m_pDocView->SetChangeMark(); - m_pDocView->AddValidateWidget(m_pDataAcc); - return TRUE; -} -int32_t CXFA_FFField::CalculateOverride() { - CXFA_WidgetAcc* pAcc = m_pDataAcc->GetExclGroup(); - if (!pAcc) { - return CalculateWidgetAcc(m_pDataAcc); - } - if (CalculateWidgetAcc(pAcc) == 0) { - return 0; - } - CXFA_Node* pNode = pAcc->GetExclGroupFirstMember(); - if (!pNode) { - return 1; - } - CXFA_WidgetAcc* pWidgetAcc = NULL; - while (pNode) { - pWidgetAcc = (CXFA_WidgetAcc*)pNode->GetWidgetData(); - if (!pWidgetAcc) { - return 1; - } - if (CalculateWidgetAcc(pWidgetAcc) == 0) { - return 0; - } - pNode = pWidgetAcc->GetExclGroupNextMember(pNode); - } - return 1; -} -int32_t CXFA_FFField::CalculateWidgetAcc(CXFA_WidgetAcc* pAcc) { - CXFA_Calculate calc = pAcc->GetCalculate(); - if (!calc) { - return 1; - } - XFA_VERSION version = pAcc->GetDoc()->GetXFADoc()->GetCurVersionMode(); - if (calc) { - int32_t iOverride = calc.GetOverride(); - switch (iOverride) { - case XFA_ATTRIBUTEENUM_Error: { - if (version <= XFA_VERSION_204) { - return 1; - } - IXFA_AppProvider* pAppProvider = GetApp()->GetAppProvider(); - if (pAppProvider) { - CFX_WideString wsMessage; - CFX_WideString wsWarning; - pAppProvider->LoadString(XFA_IDS_NotModifyField, wsWarning); - wsMessage += wsWarning; - CFX_WideString wsTitle; - pAppProvider->LoadString(XFA_IDS_CalcOverride, wsTitle); - pAppProvider->MsgBox(wsMessage, wsTitle, XFA_MBICON_Warning, - XFA_MB_OK); - } - } - return 0; - case XFA_ATTRIBUTEENUM_Warning: { - if (version <= XFA_VERSION_204) { - CXFA_Script script = calc.GetScript(); - if (!script) { - return 1; - } - CFX_WideString wsExpression; - script.GetExpression(wsExpression); - if (wsExpression.IsEmpty()) { - return 1; - } - } - if (pAcc->GetNode()->HasFlag(XFA_NODEFLAG_UserInteractive)) { - return 1; - } - IXFA_AppProvider* pAppProvider = GetApp()->GetAppProvider(); - if (pAppProvider) { - CFX_WideString wsMessage; - calc.GetMessageText(wsMessage); - if (!wsMessage.IsEmpty()) { - wsMessage += L"\r\n"; - } - CFX_WideString wsWarning; - pAppProvider->LoadString(XFA_IDS_ModifyField, wsWarning); - wsMessage += wsWarning; - CFX_WideString wsTitle; - pAppProvider->LoadString(XFA_IDS_CalcOverride, wsTitle); - if (pAppProvider->MsgBox(wsMessage, wsTitle, XFA_MBICON_Warning, - XFA_MB_YesNo) == XFA_IDYes) { - pAcc->GetNode()->SetFlag(XFA_NODEFLAG_UserInteractive, TRUE, FALSE); - return 1; - } - } - return 0; - } - case XFA_ATTRIBUTEENUM_Ignore: - return 0; - case XFA_ATTRIBUTEENUM_Disabled: - pAcc->GetNode()->SetFlag(XFA_NODEFLAG_UserInteractive, TRUE, FALSE); - default: - return 1; - } - } - return 1; -} -FX_BOOL CXFA_FFField::CommitData() { - return FALSE; -} -FX_BOOL CXFA_FFField::IsDataChanged() { - return FALSE; -} -void CXFA_FFField::TranslateFWLMessage(CFWL_Message* pMessage) { - GetApp()->GetWidgetMgrDelegate()->OnProcessMessageToForm(pMessage); -} -int32_t CXFA_FFField::OnProcessMessage(CFWL_Message* pMessage) { - return FWL_ERR_Succeeded; -} -FWL_ERR CXFA_FFField::OnProcessEvent(CFWL_Event* pEvent) { - FX_DWORD dwEventID = pEvent->GetClassID(); - switch (dwEventID) { - case FWL_EVTHASH_Mouse: { - CFWL_EvtMouse* event = (CFWL_EvtMouse*)pEvent; - if (event->m_dwCmd == FWL_MSGMOUSECMD_MouseEnter) { - CXFA_EventParam eParam; - eParam.m_eType = XFA_EVENT_MouseEnter; - eParam.m_pTarget = m_pDataAcc; - m_pDataAcc->ProcessEvent(XFA_ATTRIBUTEENUM_MouseEnter, &eParam); - } else if (event->m_dwCmd == FWL_MSGMOUSECMD_MouseLeave) { - CXFA_EventParam eParam; - eParam.m_eType = XFA_EVENT_MouseExit; - eParam.m_pTarget = m_pDataAcc; - m_pDataAcc->ProcessEvent(XFA_ATTRIBUTEENUM_MouseExit, &eParam); - } else if (event->m_dwCmd == FWL_MSGMOUSECMD_LButtonDown) { - CXFA_EventParam eParam; - eParam.m_eType = XFA_EVENT_MouseDown; - eParam.m_pTarget = m_pDataAcc; - m_pDataAcc->ProcessEvent(XFA_ATTRIBUTEENUM_MouseDown, &eParam); - } else if (event->m_dwCmd == FWL_MSGMOUSECMD_LButtonUp) { - CXFA_EventParam eParam; - eParam.m_eType = XFA_EVENT_MouseUp; - eParam.m_pTarget = m_pDataAcc; - m_pDataAcc->ProcessEvent(XFA_ATTRIBUTEENUM_MouseUp, &eParam); - } - break; - } - case FWL_EVTHASH_Click: { - CXFA_EventParam eParam; - eParam.m_eType = XFA_EVENT_Click; - eParam.m_pTarget = m_pDataAcc; - m_pDataAcc->ProcessEvent(XFA_ATTRIBUTEENUM_Click, &eParam); - break; - } - default: {} - } - return FWL_ERR_Succeeded; -} -FWL_ERR CXFA_FFField::OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - return FWL_ERR_Succeeded; -} diff --git a/xfa/src/fxfa/app/xfa_fffield.h b/xfa/src/fxfa/app/xfa_fffield.h deleted file mode 100644 index e2699c97b2..0000000000 --- a/xfa/src/fxfa/app/xfa_fffield.h +++ /dev/null @@ -1,100 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXFA_APP_XFA_FFFIELD_H_ -#define XFA_SRC_FXFA_APP_XFA_FFFIELD_H_ - -#include "xfa/include/fwl/adapter/fwl_sdadapterimp.h" -#include "xfa/include/fwl/core/fwl_widget.h" -#include "xfa/include/fwl/lightwidget/widget.h" -#include "xfa/src/fxfa/app/xfa_ffpageview.h" -#include "xfa/src/fxfa/app/xfa_ffwidget.h" - -#define XFA_MINUI_HEIGHT 4.32f -#define XFA_DEFAULTUI_HEIGHT 2.0f - -class CXFA_FFField : public CXFA_FFWidget, public IFWL_WidgetDelegate { - public: - CXFA_FFField(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc); - virtual ~CXFA_FFField(); - - virtual FX_BOOL GetBBox(CFX_RectF& rtBox, - FX_DWORD dwStatus, - FX_BOOL bDrawFocus = FALSE); - virtual void RenderWidget(CFX_Graphics* pGS, - CFX_Matrix* pMatrix = NULL, - FX_DWORD dwStatus = 0, - int32_t iRotate = 0); - virtual FX_BOOL IsLoaded(); - virtual FX_BOOL LoadWidget(); - virtual void UnloadWidget(); - virtual FX_BOOL PerformLayout(); - virtual void UpdateFWL(); - FX_DWORD UpdateUIProperty(); - virtual FX_BOOL OnMouseEnter(); - virtual FX_BOOL OnMouseExit(); - virtual FX_BOOL OnLButtonDown(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy); - virtual FX_BOOL OnLButtonUp(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy); - virtual FX_BOOL OnLButtonDblClk(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy); - virtual FX_BOOL OnMouseMove(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy); - virtual FX_BOOL OnMouseWheel(FX_DWORD dwFlags, - int16_t zDelta, - FX_FLOAT fx, - FX_FLOAT fy); - virtual FX_BOOL OnRButtonDown(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy); - virtual FX_BOOL OnRButtonUp(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy); - virtual FX_BOOL OnRButtonDblClk(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy); - - virtual FX_BOOL OnSetFocus(CXFA_FFWidget* pOldWidget); - virtual FX_BOOL OnKillFocus(CXFA_FFWidget* pNewWidget); - virtual FX_BOOL OnKeyDown(FX_DWORD dwKeyCode, FX_DWORD dwFlags); - virtual FX_BOOL OnKeyUp(FX_DWORD dwKeyCode, FX_DWORD dwFlags); - virtual FX_BOOL OnChar(FX_DWORD dwChar, FX_DWORD dwFlags); - virtual FX_DWORD OnHitTest(FX_FLOAT fx, FX_FLOAT fy); - virtual FX_BOOL OnSetCursor(FX_FLOAT fx, FX_FLOAT fy); - - protected: - virtual FX_BOOL PtInActiveRect(FX_FLOAT fx, FX_FLOAT fy); - virtual void SetFWLRect(); - void SetFWLThemeProvider(); - CFWL_Widget* GetNormalWidget() { return m_pNormalWidget; } - void FWLToClient(FX_FLOAT& fx, FX_FLOAT& fy); - void LayoutCaption(); - void RenderCaption(CFX_Graphics* pGS, CFX_Matrix* pMatrix = NULL); - - int32_t CalculateOverride(); - int32_t CalculateWidgetAcc(CXFA_WidgetAcc* pAcc); - FX_BOOL ProcessCommittedData(); - virtual FX_BOOL CommitData(); - virtual FX_BOOL IsDataChanged(); - void DrawHighlight(CFX_Graphics* pGS, - CFX_Matrix* pMatrix, - FX_DWORD dwStatus, - FX_BOOL bEllipse = FALSE); - void DrawFocus(CFX_Graphics* pGS, CFX_Matrix* pMatrix); - void TranslateFWLMessage(CFWL_Message* pMessage); - void CapPlacement(); - void CapTopBottomPlacement(CXFA_Caption caption, - const CFX_RectF& rtWidget, - int32_t iCapPlacement); - void CapLeftRightPlacement(CXFA_Caption caption, - const CFX_RectF& rtWidget, - int32_t iCapPlacement); - void SetEditScrollOffset(); - - public: - virtual int32_t OnProcessMessage(CFWL_Message* pMessage); - virtual FWL_ERR OnProcessEvent(CFWL_Event* pEvent); - virtual FWL_ERR OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL); - - protected: - CFWL_Widget* m_pNormalWidget; - CFX_RectF m_rtUI; - CFX_RectF m_rtCaption; -}; - -#endif // XFA_SRC_FXFA_APP_XFA_FFFIELD_H_ diff --git a/xfa/src/fxfa/app/xfa_ffimage.cpp b/xfa/src/fxfa/app/xfa_ffimage.cpp deleted file mode 100644 index 37c5991544..0000000000 --- a/xfa/src/fxfa/app/xfa_ffimage.cpp +++ /dev/null @@ -1,67 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fxfa/app/xfa_ffimage.h" - -#include "xfa/src/fxfa/app/xfa_ffapp.h" -#include "xfa/src/fxfa/app/xfa_ffdoc.h" -#include "xfa/src/fxfa/app/xfa_ffdraw.h" -#include "xfa/src/fxfa/app/xfa_ffpageview.h" -#include "xfa/src/fxfa/app/xfa_ffwidget.h" - -CXFA_FFImage::CXFA_FFImage(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc) - : CXFA_FFDraw(pPageView, pDataAcc) {} -CXFA_FFImage::~CXFA_FFImage() { - CXFA_FFImage::UnloadWidget(); -} -FX_BOOL CXFA_FFImage::IsLoaded() { - return GetDataAcc()->GetImageImage() != NULL; -} -FX_BOOL CXFA_FFImage::LoadWidget() { - if (GetDataAcc()->GetImageImage()) { - return TRUE; - } - GetDataAcc()->LoadImageImage(); - return CXFA_FFDraw::LoadWidget(); -} -void CXFA_FFImage::UnloadWidget() { - GetDataAcc()->SetImageImage(NULL); -} -void CXFA_FFImage::RenderWidget(CFX_Graphics* pGS, - CFX_Matrix* pMatrix, - FX_DWORD dwStatus, - int32_t iRotate) { - if (!IsMatchVisibleStatus(dwStatus)) { - return; - } - CFX_Matrix mtRotate; - GetRotateMatrix(mtRotate); - if (pMatrix) { - mtRotate.Concat(*pMatrix); - } - CXFA_FFWidget::RenderWidget(pGS, &mtRotate, dwStatus); - if (CFX_DIBitmap* pDIBitmap = GetDataAcc()->GetImageImage()) { - CFX_RectF rtImage; - GetRectWithoutRotate(rtImage); - if (CXFA_Margin mgWidget = m_pDataAcc->GetMargin()) { - XFA_RectWidthoutMargin(rtImage, mgWidget); - } - int32_t iHorzAlign = XFA_ATTRIBUTEENUM_Left; - int32_t iVertAlign = XFA_ATTRIBUTEENUM_Top; - if (CXFA_Para para = m_pDataAcc->GetPara()) { - iHorzAlign = para.GetHorizontalAlign(); - iVertAlign = para.GetVerticalAlign(); - } - CXFA_Value value = m_pDataAcc->GetFormValue(); - CXFA_Image imageObj = value.GetImage(); - int32_t iAspect = imageObj.GetAspect(); - int32_t iImageXDpi = 0; - int32_t iImageYDpi = 0; - m_pDataAcc->GetImageDpi(iImageXDpi, iImageYDpi); - XFA_DrawImage(pGS, rtImage, &mtRotate, pDIBitmap, iAspect, iImageXDpi, - iImageYDpi, iHorzAlign, iVertAlign); - } -} diff --git a/xfa/src/fxfa/app/xfa_ffimage.h b/xfa/src/fxfa/app/xfa_ffimage.h deleted file mode 100644 index 5767e16a7b..0000000000 --- a/xfa/src/fxfa/app/xfa_ffimage.h +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXFA_APP_XFA_FFIMAGE_H_ -#define XFA_SRC_FXFA_APP_XFA_FFIMAGE_H_ - -#include "xfa/src/fxfa/app/xfa_ffdraw.h" - -class CXFA_FFImage : public CXFA_FFDraw { - public: - CXFA_FFImage(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc); - virtual ~CXFA_FFImage(); - virtual void RenderWidget(CFX_Graphics* pGS, - CFX_Matrix* pMatrix = NULL, - FX_DWORD dwStatus = 0, - int32_t iRotate = 0); - virtual FX_BOOL IsLoaded(); - virtual FX_BOOL LoadWidget(); - virtual void UnloadWidget(); -}; - -#endif // XFA_SRC_FXFA_APP_XFA_FFIMAGE_H_ diff --git a/xfa/src/fxfa/app/xfa_ffimageedit.cpp b/xfa/src/fxfa/app/xfa_ffimageedit.cpp deleted file mode 100644 index 68e4009139..0000000000 --- a/xfa/src/fxfa/app/xfa_ffimageedit.cpp +++ /dev/null @@ -1,183 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fxfa/app/xfa_ffimageedit.h" - -#include "xfa/include/fwl/core/fwl_app.h" -#include "xfa/include/fwl/lightwidget/picturebox.h" -#include "xfa/src/fxfa/app/xfa_ffdoc.h" -#include "xfa/src/fxfa/app/xfa_ffdocview.h" -#include "xfa/src/fxfa/app/xfa_fffield.h" -#include "xfa/src/fxfa/app/xfa_ffpageview.h" -#include "xfa/src/fxfa/app/xfa_ffwidget.h" - -CXFA_FFImageEdit::CXFA_FFImageEdit(CXFA_FFPageView* pPageView, - CXFA_WidgetAcc* pDataAcc) - : CXFA_FFField(pPageView, pDataAcc), m_pOldDelegate(NULL) {} -CXFA_FFImageEdit::~CXFA_FFImageEdit() { - CXFA_FFImageEdit::UnloadWidget(); -} -FX_BOOL CXFA_FFImageEdit::LoadWidget() { - CFWL_PictureBox* pPictureBox = new CFWL_PictureBox; - if (pPictureBox) { - pPictureBox->Initialize(); - } - m_pNormalWidget = (CFWL_Widget*)pPictureBox; - IFWL_Widget* pWidget = m_pNormalWidget->GetWidget(); - m_pNormalWidget->SetPrivateData(pWidget, this, NULL); - IFWL_NoteDriver* pNoteDriver = FWL_GetApp()->GetNoteDriver(); - pNoteDriver->RegisterEventTarget(pWidget, pWidget); - m_pOldDelegate = pPictureBox->SetDelegate(this); - CXFA_FFField::LoadWidget(); - if (m_pDataAcc->GetImageEditImage()) { - return TRUE; - } - UpdateFWLData(); - return TRUE; -} -void CXFA_FFImageEdit::UnloadWidget() { - m_pDataAcc->SetImageEditImage(NULL); - CXFA_FFField::UnloadWidget(); -} -void CXFA_FFImageEdit::RenderWidget(CFX_Graphics* pGS, - CFX_Matrix* pMatrix, - FX_DWORD dwStatus, - int32_t iRotate) { - if (!IsMatchVisibleStatus(dwStatus)) { - return; - } - CFX_Matrix mtRotate; - GetRotateMatrix(mtRotate); - if (pMatrix) { - mtRotate.Concat(*pMatrix); - } - CXFA_FFWidget::RenderWidget(pGS, &mtRotate, dwStatus); - CXFA_Border borderUI = m_pDataAcc->GetUIBorder(); - DrawBorder(pGS, borderUI, m_rtUI, &mtRotate); - RenderCaption(pGS, &mtRotate); - if (CFX_DIBitmap* pDIBitmap = m_pDataAcc->GetImageEditImage()) { - CFX_RectF rtImage; - m_pNormalWidget->GetWidgetRect(rtImage); - int32_t iHorzAlign = XFA_ATTRIBUTEENUM_Left; - int32_t iVertAlign = XFA_ATTRIBUTEENUM_Top; - if (CXFA_Para para = m_pDataAcc->GetPara()) { - iHorzAlign = para.GetHorizontalAlign(); - iVertAlign = para.GetVerticalAlign(); - } - int32_t iAspect = XFA_ATTRIBUTEENUM_Fit; - if (CXFA_Value value = m_pDataAcc->GetFormValue()) { - if (CXFA_Image imageObj = value.GetImage()) { - iAspect = imageObj.GetAspect(); - } - } - int32_t iImageXDpi = 0; - int32_t iImageYDpi = 0; - m_pDataAcc->GetImageEditDpi(iImageXDpi, iImageYDpi); - XFA_DrawImage(pGS, rtImage, &mtRotate, pDIBitmap, iAspect, iImageXDpi, - iImageYDpi, iHorzAlign, iVertAlign); - } -} -FX_BOOL CXFA_FFImageEdit::OnLButtonDown(FX_DWORD dwFlags, - FX_FLOAT fx, - FX_FLOAT fy) { - if (m_pDataAcc->GetAccess() != XFA_ATTRIBUTEENUM_Open) { - return FALSE; - } - if (!PtInActiveRect(fx, fy)) { - return FALSE; - } - SetButtonDown(TRUE); - CFWL_MsgMouse ms; - ms.m_dwCmd = FWL_MSGMOUSECMD_LButtonDown; - ms.m_dwFlags = dwFlags; - ms.m_fx = fx; - ms.m_fy = fy; - ms.m_pDstTarget = m_pNormalWidget->m_pIface; - FWLToClient(ms.m_fx, ms.m_fy); - TranslateFWLMessage(&ms); - IXFA_AppProvider* pAppProvider = GetAppProvider(); - if (!pAppProvider) { - return TRUE; - } - CFX_WideString wsTitle; - CFX_WideString wsFilter; - pAppProvider->LoadString(XFA_IDS_ImageFilter, wsFilter); - CFX_WideStringArray wsPathArray; - pAppProvider->ShowFileDialog(wsTitle, wsFilter, wsPathArray); - int32_t iSize = wsPathArray.GetSize(); - if (iSize < 1) { - return TRUE; - } - CFX_WideString wsFilePath = wsPathArray[0]; - FX_STRSIZE nLen = wsFilePath.GetLength(); - FX_STRSIZE nIndex = nLen - 1; - while (nIndex > 0 && wsFilePath[nIndex] != '.') { - nIndex--; - } - if (nIndex <= 0) { - return TRUE; - } - CFX_WideString wsContentType(L"image/"); - wsContentType += wsFilePath.Right(nLen - nIndex - 1); - wsContentType.MakeLower(); - FXCODEC_IMAGE_TYPE eImageType = XFA_GetImageType(wsContentType); - if (eImageType == FXCODEC_IMAGE_UNKNOWN) { - return TRUE; - } - CFX_WideString wsImage; - IFX_FileRead* pFileRead = FX_CreateFileRead(wsFilePath); - if (pFileRead) { - int32_t nDataSize = pFileRead->GetSize(); - if (nDataSize > 0) { - CFX_ByteString bsBuf; - FX_CHAR* pImageBuffer = bsBuf.GetBuffer(nDataSize); - pFileRead->ReadBlock(pImageBuffer, 0, nDataSize); - bsBuf.ReleaseBuffer(); - if (!bsBuf.IsEmpty()) { - FX_CHAR* pData = XFA_Base64Encode(bsBuf, nDataSize); - wsImage = CFX_WideString::FromLocal(pData); - FX_Free(pData); - } - } - m_pDataAcc->SetImageEditImage(NULL); - pFileRead->Release(); - } - m_pDataAcc->SetImageEdit(wsContentType, CFX_WideStringC(), wsImage); - m_pDataAcc->LoadImageEditImage(); - AddInvalidateRect(); - m_pDocView->SetChangeMark(); - return TRUE; -} -void CXFA_FFImageEdit::SetFWLRect() { - if (!m_pNormalWidget) { - return; - } - CFX_RectF rtUIMargin; - m_pDataAcc->GetUIMargin(rtUIMargin); - CFX_RectF rtImage(m_rtUI); - rtImage.Deflate(rtUIMargin.left, rtUIMargin.top, rtUIMargin.width, - rtUIMargin.height); - m_pNormalWidget->SetWidgetRect(rtImage); -} -FX_BOOL CXFA_FFImageEdit::CommitData() { - return TRUE; -} -FX_BOOL CXFA_FFImageEdit::UpdateFWLData() { - m_pDataAcc->SetImageEditImage(NULL); - m_pDataAcc->LoadImageEditImage(); - return TRUE; -} -int32_t CXFA_FFImageEdit::OnProcessMessage(CFWL_Message* pMessage) { - return m_pOldDelegate->OnProcessMessage(pMessage); -} -FWL_ERR CXFA_FFImageEdit::OnProcessEvent(CFWL_Event* pEvent) { - CXFA_FFField::OnProcessEvent(pEvent); - return m_pOldDelegate->OnProcessEvent(pEvent); -} -FWL_ERR CXFA_FFImageEdit::OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - return m_pOldDelegate->OnDrawWidget(pGraphics, pMatrix); -} diff --git a/xfa/src/fxfa/app/xfa_ffimageedit.h b/xfa/src/fxfa/app/xfa_ffimageedit.h deleted file mode 100644 index d7438ae2e4..0000000000 --- a/xfa/src/fxfa/app/xfa_ffimageedit.h +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXFA_APP_XFA_FFIMAGEEDIT_H_ -#define XFA_SRC_FXFA_APP_XFA_FFIMAGEEDIT_H_ - -#include "xfa/src/fxfa/app/xfa_fffield.h" - -class CXFA_FFImageEdit : public CXFA_FFField { - public: - CXFA_FFImageEdit(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc); - virtual ~CXFA_FFImageEdit(); - - virtual void RenderWidget(CFX_Graphics* pGS, - CFX_Matrix* pMatrix = NULL, - FX_DWORD dwStatus = 0, - int32_t iRotate = 0); - virtual FX_BOOL LoadWidget(); - virtual void UnloadWidget(); - virtual FX_BOOL OnLButtonDown(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy); - virtual int32_t OnProcessMessage(CFWL_Message* pMessage); - virtual FWL_ERR OnProcessEvent(CFWL_Event* pEvent); - virtual FWL_ERR OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL); - - protected: - virtual void SetFWLRect(); - virtual FX_BOOL UpdateFWLData(); - virtual FX_BOOL CommitData(); - IFWL_WidgetDelegate* m_pOldDelegate; -}; - -#endif // XFA_SRC_FXFA_APP_XFA_FFIMAGEEDIT_H_ diff --git a/xfa/src/fxfa/app/xfa_ffnotify.cpp b/xfa/src/fxfa/app/xfa_ffnotify.cpp deleted file mode 100644 index 6b9094c77b..0000000000 --- a/xfa/src/fxfa/app/xfa_ffnotify.cpp +++ /dev/null @@ -1,648 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fxfa/app/xfa_ffnotify.h" - -#include "xfa/src/fxfa/app/xfa_ffapp.h" -#include "xfa/src/fxfa/app/xfa_ffbarcode.h" -#include "xfa/src/fxfa/app/xfa_ffcheckbutton.h" -#include "xfa/src/fxfa/app/xfa_ffchoicelist.h" -#include "xfa/src/fxfa/app/xfa_ffdoc.h" -#include "xfa/src/fxfa/app/xfa_ffdocview.h" -#include "xfa/src/fxfa/app/xfa_ffdraw.h" -#include "xfa/src/fxfa/app/xfa_ffexclgroup.h" -#include "xfa/src/fxfa/app/xfa_fffield.h" -#include "xfa/src/fxfa/app/xfa_ffimage.h" -#include "xfa/src/fxfa/app/xfa_ffimageedit.h" -#include "xfa/src/fxfa/app/xfa_ffpageview.h" -#include "xfa/src/fxfa/app/xfa_ffpath.h" -#include "xfa/src/fxfa/app/xfa_ffpushbutton.h" -#include "xfa/src/fxfa/app/xfa_ffsignature.h" -#include "xfa/src/fxfa/app/xfa_ffsubform.h" -#include "xfa/src/fxfa/app/xfa_fftext.h" -#include "xfa/src/fxfa/app/xfa_fftextedit.h" -#include "xfa/src/fxfa/app/xfa_ffwidget.h" -#include "xfa/src/fxfa/app/xfa_ffwidgetacc.h" -#include "xfa/src/fxfa/app/xfa_ffwidgethandler.h" -#include "xfa/src/fxfa/app/xfa_fwladapter.h" -#include "xfa/src/fxfa/app/xfa_textlayout.h" - -static void XFA_FFDeleteWidgetAcc(void* pData) { - delete static_cast(pData); -} -static XFA_MAPDATABLOCKCALLBACKINFO gs_XFADeleteWidgetAcc = { - XFA_FFDeleteWidgetAcc, NULL}; -CXFA_FFNotify::CXFA_FFNotify(CXFA_FFDoc* pDoc) : m_pDoc(pDoc) {} -CXFA_FFNotify::~CXFA_FFNotify() {} -void CXFA_FFNotify::OnPageEvent(IXFA_LayoutPage* pSender, - XFA_PAGEEVENT eEvent, - void* pParam) { - CXFA_FFDocView* pDocView = m_pDoc->GetDocView(pSender->GetLayout()); - if (!pDocView) { - return; - } - pDocView->OnPageEvent(pSender, eEvent, (int32_t)(uintptr_t)pParam); -} -void CXFA_FFNotify::OnNodeEvent(CXFA_Node* pSender, - XFA_NODEEVENT eEvent, - void* pParam, - void* pParam2, - void* pParam3, - void* pParam4) { - switch (eEvent) { - case XFA_NODEEVENT_Ready: - OnNodeReady(pSender); - break; - case XFA_NODEEVENT_ValueChanging: - OnValueChanging(pSender, pParam, pParam2); - break; - case XFA_NODEEVENT_ValueChanged: - OnValueChanged(pSender, pParam, pParam2, pParam3, pParam4); - break; - case XFA_NODEEVENT_ChildAdded: - OnChildAdded(pSender, pParam, pParam2); - break; - case XFA_NODEEVENT_ChildRemoved: - OnChildRemoved(pSender, pParam, pParam2); - break; - } -} -void CXFA_FFNotify::OnWidgetDataEvent(CXFA_WidgetData* pSender, - FX_DWORD dwEvent, - void* pParam, - void* pAdditional, - void* pAdditional2) { - CXFA_WidgetAcc* pWidgetAcc = static_cast(pSender); - switch (dwEvent) { - case XFA_WIDGETEVENT_ListItemAdded: { - if (pWidgetAcc->GetUIType() != XFA_ELEMENT_ChoiceList) { - return; - } - FX_BOOL bStaticNotify = pWidgetAcc->GetDocView()->IsStaticNotify(); - CXFA_FFWidget* pWidget = pWidgetAcc->GetNextWidget(NULL); - if (!pWidget) { - if (bStaticNotify) { - pWidgetAcc->GetDoc()->GetDocProvider()->WidgetEvent( - pWidget, pWidgetAcc, XFA_WIDGETEVENT_ListItemAdded, pParam, - pAdditional); - } - return; - } - while (pWidget) { - if (pWidget->IsLoaded()) { - if (pWidgetAcc->IsListBox()) { - static_cast(pWidget) - ->InsertItem((const CFX_WideStringC&)(const FX_WCHAR*)pParam, - (int32_t)(uintptr_t)pAdditional2); - } else { - static_cast(pWidget) - ->InsertItem((const CFX_WideStringC&)(const FX_WCHAR*)pParam, - (int32_t)(uintptr_t)pAdditional2); - } - } - if (bStaticNotify) { - pWidgetAcc->GetDoc()->GetDocProvider()->WidgetEvent( - pWidget, pWidgetAcc, XFA_WIDGETEVENT_ListItemAdded, pParam, - pAdditional); - } - pWidget = pWidgetAcc->GetNextWidget(pWidget); - } - } break; - case XFA_WIDGETEVENT_ListItemRemoved: { - if (pWidgetAcc->GetUIType() != XFA_ELEMENT_ChoiceList) { - return; - } - FX_BOOL bStaticNotify = pWidgetAcc->GetDocView()->IsStaticNotify(); - CXFA_FFWidget* pWidget = pWidgetAcc->GetNextWidget(NULL); - if (!pWidget) { - if (bStaticNotify) { - pWidgetAcc->GetDoc()->GetDocProvider()->WidgetEvent( - pWidget, pWidgetAcc, XFA_WIDGETEVENT_ListItemRemoved, pParam, - pAdditional); - } - return; - } - while (pWidget) { - if (pWidget->IsLoaded()) { - if (pWidgetAcc->IsListBox()) { - static_cast(pWidget) - ->DeleteItem((int32_t)(uintptr_t)pParam); - } else { - static_cast(pWidget) - ->DeleteItem((int32_t)(uintptr_t)pParam); - } - } - if (bStaticNotify) { - pWidgetAcc->GetDoc()->GetDocProvider()->WidgetEvent( - pWidget, pWidgetAcc, XFA_WIDGETEVENT_ListItemRemoved, pParam, - pAdditional); - } - pWidget = pWidgetAcc->GetNextWidget(pWidget); - } - } break; - } -} -CXFA_LayoutItem* CXFA_FFNotify::OnCreateLayoutItem(CXFA_Node* pNode) { - IXFA_DocLayout* pLayout = m_pDoc->GetXFADoc()->GetDocLayout(); - CXFA_FFDocView* pDocView = m_pDoc->GetDocView(pLayout); - XFA_ELEMENT eType = pNode->GetClassID(); - if (eType == XFA_ELEMENT_PageArea) { - return new CXFA_FFPageView(pDocView, pNode); - } - if (eType == XFA_ELEMENT_ContentArea) { - return new CXFA_ContainerLayoutItem(pNode); - } - CXFA_WidgetAcc* pAcc = static_cast(pNode->GetWidgetData()); - if (!pAcc) { - return new CXFA_ContentLayoutItem(pNode); - } - CXFA_FFPageView* pPageView = NULL; - CXFA_FFWidget* pWidget = NULL; - switch (pAcc->GetUIType()) { - case XFA_ELEMENT_Barcode: - pWidget = new CXFA_FFBarcode(pPageView, pAcc); - break; - case XFA_ELEMENT_Button: - pWidget = new CXFA_FFPushButton(pPageView, pAcc); - break; - case XFA_ELEMENT_CheckButton: - pWidget = new CXFA_FFCheckButton(pPageView, pAcc); - break; - case XFA_ELEMENT_ChoiceList: { - if (pAcc->IsListBox()) { - pWidget = new CXFA_FFListBox(pPageView, pAcc); - } else { - pWidget = new CXFA_FFComboBox(pPageView, pAcc); - } - } break; - case XFA_ELEMENT_DateTimeEdit: - pWidget = new CXFA_FFDateTimeEdit(pPageView, pAcc); - break; - case XFA_ELEMENT_ImageEdit: - pWidget = new CXFA_FFImageEdit(pPageView, pAcc); - break; - case XFA_ELEMENT_NumericEdit: - pWidget = new CXFA_FFNumericEdit(pPageView, pAcc); - break; - case XFA_ELEMENT_PasswordEdit: - pWidget = new CXFA_FFPasswordEdit(pPageView, pAcc); - break; - case XFA_ELEMENT_Signature: - pWidget = new CXFA_FFSignature(pPageView, pAcc); - break; - case XFA_ELEMENT_TextEdit: - pWidget = new CXFA_FFTextEdit(pPageView, pAcc); - break; - case XFA_ELEMENT_Arc: - pWidget = new CXFA_FFArc(pPageView, pAcc); - break; - case XFA_ELEMENT_Line: - pWidget = new CXFA_FFLine(pPageView, pAcc); - break; - case XFA_ELEMENT_Rectangle: - pWidget = new CXFA_FFRectangle(pPageView, pAcc); - break; - case XFA_ELEMENT_Text: - pWidget = new CXFA_FFText(pPageView, pAcc); - break; - case XFA_ELEMENT_Image: - pWidget = new CXFA_FFImage(pPageView, pAcc); - break; - case XFA_ELEMENT_Draw: - pWidget = new CXFA_FFDraw(pPageView, pAcc); - break; - case XFA_ELEMENT_Subform: - pWidget = new CXFA_FFSubForm(pPageView, pAcc); - break; - case XFA_ELEMENT_ExclGroup: - pWidget = new CXFA_FFExclGroup(pPageView, pAcc); - break; - case XFA_ELEMENT_DefaultUi: - default: - pWidget = NULL; - break; - } - if (!pWidget) { - return NULL; - } - pWidget->SetDocView(pDocView); - return pWidget; -} -void CXFA_FFNotify::OnLayoutEvent(IXFA_DocLayout* pLayout, - CXFA_LayoutItem* pSender, - XFA_LAYOUTEVENT eEvent, - void* pParam, - void* pParam2) { - CXFA_FFDocView* pDocView = m_pDoc->GetDocView(pLayout); - if (!pDocView || !XFA_GetWidgetFromLayoutItem(pSender)) { - return; - } - switch (eEvent) { - case XFA_LAYOUTEVENT_ItemAdded: - OnLayoutItemAdd(pDocView, pLayout, pSender, pParam, pParam2); - break; - case XFA_LAYOUTEVENT_ItemRemoving: - OnLayoutItemRemoving(pDocView, pLayout, pSender, pParam, pParam2); - break; - case XFA_LAYOUTEVENT_RectChanged: - OnLayoutItemRectChanged(pDocView, pLayout, pSender, pParam, pParam2); - break; - case XFA_LAYOUTEVENT_StatusChanged: - OnLayoutItemStatustChanged(pDocView, pLayout, pSender, pParam, pParam2); - break; - } -} -void CXFA_FFNotify::StartFieldDrawLayout(CXFA_Node* pItem, - FX_FLOAT& fCalcWidth, - FX_FLOAT& fCalcHeight) { - CXFA_WidgetAcc* pAcc = static_cast(pItem->GetWidgetData()); - if (!pAcc) { - return; - } - pAcc->StartWidgetLayout(fCalcWidth, fCalcHeight); -} -FX_BOOL CXFA_FFNotify::FindSplitPos(CXFA_Node* pItem, - int32_t iBlockIndex, - FX_FLOAT& fCalcHeightPos) { - CXFA_WidgetAcc* pAcc = static_cast(pItem->GetWidgetData()); - if (!pAcc) { - return FALSE; - } - return (XFA_LAYOUTRESULT)pAcc->FindSplitPos(iBlockIndex, fCalcHeightPos); -} -FX_BOOL CXFA_FFNotify::RunScript(CXFA_Node* pScript, CXFA_Node* pFormItem) { - FX_BOOL bRet = FALSE; - CXFA_FFDocView* pDocView = m_pDoc->GetDocView(); - if (!pDocView) { - return bRet; - } - CXFA_WidgetAcc* pWidgetAcc = - static_cast(pFormItem->GetWidgetData()); - if (!pWidgetAcc) { - return bRet; - } - CXFA_EventParam EventParam; - EventParam.m_eType = XFA_EVENT_Unknown; - FXJSE_HVALUE pRetValue = NULL; - int32_t iRet = - pWidgetAcc->ExecuteScript(CXFA_Script(pScript), &EventParam, &pRetValue); - if (iRet == XFA_EVENTERROR_Sucess && pRetValue) { - bRet = FXJSE_Value_ToBoolean(pRetValue); - FXJSE_Value_Release(pRetValue); - } - return bRet; -} -int32_t CXFA_FFNotify::ExecEventByDeepFirst(CXFA_Node* pFormNode, - XFA_EVENTTYPE eEventType, - FX_BOOL bIsFormReady, - FX_BOOL bRecursive, - CXFA_WidgetAcc* pExclude) { - CXFA_FFDocView* pDocView = m_pDoc->GetDocView(); - if (!pDocView) { - return XFA_EVENTERROR_NotExist; - } - return pDocView->ExecEventActivityByDeepFirst( - pFormNode, eEventType, bIsFormReady, bRecursive, - pExclude ? pExclude->GetNode() : NULL); -} -void CXFA_FFNotify::AddCalcValidate(CXFA_Node* pNode) { - CXFA_FFDocView* pDocView = m_pDoc->GetDocView(); - if (!pDocView) { - return; - } - CXFA_WidgetAcc* pWidgetAcc = - static_cast(pNode->GetWidgetData()); - if (!pWidgetAcc) { - return; - } - pDocView->AddCalculateWidgetAcc(pWidgetAcc); - pDocView->AddValidateWidget(pWidgetAcc); -} -IXFA_Doc* CXFA_FFNotify::GetHDOC() { - return m_pDoc; -} -IXFA_DocProvider* CXFA_FFNotify::GetDocProvider() { - return m_pDoc->GetDocProvider(); -} -IXFA_AppProvider* CXFA_FFNotify::GetAppProvider() { - return m_pDoc->GetApp()->GetAppProvider(); -} -IXFA_WidgetHandler* CXFA_FFNotify::GetWidgetHandler() { - CXFA_FFDocView* pDocView = m_pDoc->GetDocView(); - return pDocView ? pDocView->GetWidgetHandler() : NULL; -} -IXFA_Widget* CXFA_FFNotify::GetHWidget(CXFA_LayoutItem* pLayoutItem) { - return XFA_GetWidgetFromLayoutItem(pLayoutItem); -} -void CXFA_FFNotify::OpenDropDownList(IXFA_Widget* hWidget) { - CXFA_FFWidget* pWidget = static_cast(hWidget); - if (pWidget->GetDataAcc()->GetUIType() != XFA_ELEMENT_ChoiceList) { - return; - } - CXFA_FFDocView* pDocView = m_pDoc->GetDocView(); - pDocView->LockUpdate(); - static_cast(pWidget)->OpenDropDownList(); - pDocView->UnlockUpdate(); - pDocView->UpdateDocView(); -} -CFX_WideString CXFA_FFNotify::GetCurrentDateTime() { - CFX_Unitime dataTime; - dataTime.Now(); - CFX_WideString wsDateTime; - wsDateTime.Format(L"%d%02d%02dT%02d%02d%02d", dataTime.GetYear(), - dataTime.GetMonth(), dataTime.GetDay(), dataTime.GetHour(), - dataTime.GetMinute(), dataTime.GetSecond()); - return wsDateTime; -} -void CXFA_FFNotify::ResetData(CXFA_WidgetData* pWidgetData) { - CXFA_FFDocView* pDocView = m_pDoc->GetDocView(); - if (!pDocView) { - return; - } - pDocView->ResetWidgetData(static_cast(pWidgetData)); -} -int32_t CXFA_FFNotify::GetLayoutStatus() { - CXFA_FFDocView* pDocView = m_pDoc->GetDocView(); - return pDocView ? pDocView->GetLayoutStatus() : 0; -} -void CXFA_FFNotify::RunNodeInitialize(CXFA_Node* pNode) { - CXFA_FFDocView* pDocView = m_pDoc->GetDocView(); - if (!pDocView) { - return; - } - pDocView->AddNewFormNode(pNode); -} -void CXFA_FFNotify::RunSubformIndexChange(CXFA_Node* pSubformNode) { - CXFA_FFDocView* pDocView = m_pDoc->GetDocView(); - if (!pDocView) { - return; - } - pDocView->AddIndexChangedSubform(pSubformNode); -} -CXFA_Node* CXFA_FFNotify::GetFocusWidgetNode() { - CXFA_FFDocView* pDocView = m_pDoc->GetDocView(); - if (!pDocView) { - return NULL; - } - CXFA_WidgetAcc* pAcc = pDocView->GetFocusWidgetAcc(); - return pAcc ? pAcc->GetNode() : NULL; -} -void CXFA_FFNotify::SetFocusWidgetNode(CXFA_Node* pNode) { - CXFA_FFDocView* pDocView = m_pDoc->GetDocView(); - if (!pDocView) { - return; - } - CXFA_WidgetAcc* pAcc = - pNode ? static_cast(pNode->GetWidgetData()) : nullptr; - pDocView->SetFocusWidgetAcc(pAcc); -} -void CXFA_FFNotify::OnNodeReady(CXFA_Node* pNode) { - CXFA_FFDocView* pDocView = m_pDoc->GetDocView(); - if (!pDocView) { - return; - } - XFA_ELEMENT iType = pNode->GetClassID(); - if (XFA_IsCreateWidget(iType)) { - CXFA_WidgetAcc* pAcc = - new CXFA_WidgetAcc(pDocView, static_cast(pNode)); - pNode->SetObject(XFA_ATTRIBUTE_WidgetData, pAcc, &gs_XFADeleteWidgetAcc); - return; - } - switch (iType) { - case XFA_ELEMENT_BindItems: - pDocView->m_bindItems.Add(pNode); - break; - case XFA_ELEMENT_Validate: { - pNode->SetFlag(XFA_NODEFLAG_NeedsInitApp, TRUE, FALSE); - } break; - default: - break; - } -} -void CXFA_FFNotify::OnValueChanging(CXFA_Node* pSender, - void* pParam, - void* pParam2) { - CXFA_FFDocView* pDocView = m_pDoc->GetDocView(); - if (!pDocView) { - return; - } - if (pDocView->GetLayoutStatus() < XFA_DOCVIEW_LAYOUTSTATUS_End) { - return; - } - FX_DWORD dwPacket = pSender->GetPacketID(); - if (dwPacket & XFA_XDPPACKET_Datasets) { - } else if (pSender->IsFormContainer()) { - XFA_ATTRIBUTE eAttr = (XFA_ATTRIBUTE)(uintptr_t)pParam; - if (eAttr == XFA_ATTRIBUTE_Presence) { - CXFA_WidgetAcc* pWidgetAcc = - static_cast(pSender->GetWidgetData()); - if (!pWidgetAcc) { - return; - } - CXFA_FFWidget* pWidget = NULL; - while ((pWidget = pWidgetAcc->GetNextWidget(pWidget))) { - if (pWidget->IsLoaded()) { - pWidget->AddInvalidateRect(); - } - } - } - } -} -void CXFA_FFNotify::OnValueChanged(CXFA_Node* pSender, - void* pParam, - void* pParam2, - void* pParam3, - void* pParam4) { - CXFA_FFDocView* pDocView = m_pDoc->GetDocView(); - if (!pDocView) { - return; - } - FX_DWORD dwPacket = pSender->GetPacketID(); - XFA_ATTRIBUTE eAttr = (XFA_ATTRIBUTE)(uintptr_t)pParam; - if (dwPacket & XFA_XDPPACKET_Form) { - CXFA_Node* pParentNode = static_cast(pParam3); - CXFA_Node* pWidgetNode = static_cast(pParam4); - XFA_ELEMENT ePType = pParentNode->GetClassID(); - FX_BOOL bIsContainerNode = pParentNode->IsContainerNode(); - CXFA_WidgetAcc* pWidgetAcc = - static_cast(pWidgetNode->GetWidgetData()); - if (!pWidgetAcc) { - return; - } - FX_BOOL bUpdateProperty = FALSE; - pDocView->SetChangeMark(); - switch (ePType) { - case XFA_ELEMENT_Caption: { - CXFA_TextLayout* pCapOut = pWidgetAcc->GetCaptionTextLayout(); - if (!pCapOut) { - return; - } - pCapOut->Unload(); - } break; - case XFA_ELEMENT_Ui: - case XFA_ELEMENT_Para: - bUpdateProperty = TRUE; - break; - case XFA_ELEMENT_Font: - case XFA_ELEMENT_Margin: - case XFA_ELEMENT_Value: - case XFA_ELEMENT_Items: - break; - default: - break; - } - if (bIsContainerNode && eAttr == XFA_ATTRIBUTE_Access) { - bUpdateProperty = TRUE; - FX_BOOL bNotify = pDocView->IsStaticNotify(); - if (bNotify) { - pWidgetAcc->NotifyEvent(XFA_WIDGETEVENT_AccessChanged, NULL, pParam2, - NULL); - } - } - if (eAttr == XFA_ATTRIBUTE_Value) { - pDocView->AddCalculateNodeNotify(pSender); - if (ePType == XFA_ELEMENT_Value || bIsContainerNode) { - FX_BOOL bNotify = pDocView->IsStaticNotify(); - if (bIsContainerNode) { - pWidgetAcc->UpdateUIDisplay(); - pDocView->AddCalculateWidgetAcc(pWidgetAcc); - pDocView->AddValidateWidget(pWidgetAcc); - } else if (pWidgetNode->GetNodeItem(XFA_NODEITEM_Parent) - ->GetClassID() == XFA_ELEMENT_ExclGroup) { - pWidgetAcc->UpdateUIDisplay(); - } - if (bNotify) { - pWidgetAcc->NotifyEvent(XFA_WIDGETEVENT_PostContentChanged, NULL, - NULL, NULL); - } - return; - } - } - CXFA_FFWidget* pWidget = NULL; - while ((pWidget = pWidgetAcc->GetNextWidget(pWidget))) { - if (!pWidget->IsLoaded()) { - continue; - } - if (bUpdateProperty) { - pWidget->UpdateWidgetProperty(); - } - pWidget->PerformLayout(); - pWidget->AddInvalidateRect(); - } - } else { - if (eAttr == XFA_ATTRIBUTE_Value) { - pDocView->AddCalculateNodeNotify(pSender); - } - } -} -void CXFA_FFNotify::OnChildAdded(CXFA_Node* pSender, - void* pParam, - void* pParam2) { - if (!pSender->IsFormContainer()) { - return; - } - CXFA_FFDocView* pDocView = m_pDoc->GetDocView(); - if (!pDocView) { - return; - } - FX_BOOL bLayoutReady = - !(pDocView->m_bInLayoutStatus) && - (pDocView->GetLayoutStatus() == XFA_DOCVIEW_LAYOUTSTATUS_End); - if (bLayoutReady) { - m_pDoc->GetDocProvider()->SetChangeMark(m_pDoc); - } -} -void CXFA_FFNotify::OnChildRemoved(CXFA_Node* pSender, - void* pParam, - void* pParam2) { - if (CXFA_FFDocView* pDocView = m_pDoc->GetDocView()) { - FX_BOOL bLayoutReady = - !(pDocView->m_bInLayoutStatus) && - (pDocView->GetLayoutStatus() == XFA_DOCVIEW_LAYOUTSTATUS_End); - if (bLayoutReady) { - m_pDoc->GetDocProvider()->SetChangeMark(m_pDoc); - } - } -} -void CXFA_FFNotify::OnLayoutItemAdd(CXFA_FFDocView* pDocView, - IXFA_DocLayout* pLayout, - CXFA_LayoutItem* pSender, - void* pParam, - void* pParam2) { - CXFA_FFWidget* pWidget = static_cast(pSender); - int32_t iPageIdx = (int32_t)(uintptr_t)pParam; - IXFA_PageView* pNewPageView = pDocView->GetPageView(iPageIdx); - FX_DWORD dwStatus = (FX_DWORD)(uintptr_t)pParam2; - FX_DWORD dwFilter = XFA_WIDGETSTATUS_Visible | XFA_WIDGETSTATUS_Viewable | - XFA_WIDGETSTATUS_Printable; - pWidget->ModifyStatus(dwStatus, dwFilter); - IXFA_PageView* pPrePageView = pWidget->GetPageView(); - if (pPrePageView != pNewPageView || - (dwStatus & (XFA_WIDGETSTATUS_Visible | XFA_WIDGETSTATUS_Viewable)) == - (XFA_WIDGETSTATUS_Visible | XFA_WIDGETSTATUS_Viewable)) { - pWidget->SetPageView(pNewPageView); - m_pDoc->GetDocProvider()->WidgetEvent(pWidget, pWidget->GetDataAcc(), - XFA_WIDGETEVENT_PostAdded, - pNewPageView, pPrePageView); - } - if (pDocView->GetLayoutStatus() != XFA_DOCVIEW_LAYOUTSTATUS_End || - !(dwStatus & XFA_WIDGETSTATUS_Visible)) { - return; - } - if (pWidget->IsLoaded()) { - CFX_RectF rtOld; - pWidget->GetWidgetRect(rtOld); - if (rtOld != pWidget->ReCacheWidgetRect()) - pWidget->PerformLayout(); - } else { - pWidget->LoadWidget(); - } - pWidget->AddInvalidateRect(nullptr); -} -void CXFA_FFNotify::OnLayoutItemRemoving(CXFA_FFDocView* pDocView, - IXFA_DocLayout* pLayout, - CXFA_LayoutItem* pSender, - void* pParam, - void* pParam2) { - CXFA_FFWidget* pWidget = static_cast(pSender); - pDocView->DeleteLayoutItem(pWidget); - m_pDoc->GetDocProvider()->WidgetEvent(pWidget, pWidget->GetDataAcc(), - XFA_WIDGETEVENT_PreRemoved, nullptr, - pWidget->GetPageView()); - pWidget->AddInvalidateRect(nullptr); -} -void CXFA_FFNotify::OnLayoutItemRectChanged(CXFA_FFDocView* pDocView, - IXFA_DocLayout* pLayout, - CXFA_LayoutItem* pSender, - void* pParam, - void* pParam2) {} -void CXFA_FFNotify::OnLayoutItemStatustChanged(CXFA_FFDocView* pDocView, - IXFA_DocLayout* pLayout, - CXFA_LayoutItem* pSender, - void* pParam, - void* pParam2) { - CXFA_FFWidget* pWidget = static_cast(pSender); - if (!pWidget) { - return; - } - FX_DWORD dwStatus = (FX_DWORD)(uintptr_t)pParam; - if (dwStatus == 0) { - CXFA_LayoutItem* pPreItem = pSender->GetPrev(); - if (pPreItem) { - CXFA_FFWidget* pPreWidget = static_cast(pPreItem); - if (pPreWidget) { - dwStatus = pPreWidget->GetStatus(); - } - } - } - FX_DWORD dwOldStatus = pWidget->GetStatus(); - FX_DWORD dwFilter = XFA_WIDGETSTATUS_Visible | XFA_WIDGETSTATUS_Viewable | - XFA_WIDGETSTATUS_Printable; - if ((dwOldStatus & dwFilter) == dwStatus) { - return; - } - pWidget->ModifyStatus(dwStatus, dwFilter); -} diff --git a/xfa/src/fxfa/app/xfa_ffnotify.h b/xfa/src/fxfa/app/xfa_ffnotify.h deleted file mode 100644 index 0e0b77bed6..0000000000 --- a/xfa/src/fxfa/app/xfa_ffnotify.h +++ /dev/null @@ -1,99 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXFA_APP_XFA_FFNOTIFY_H_ -#define XFA_SRC_FXFA_APP_XFA_FFNOTIFY_H_ - -#include "xfa/src/fxfa/parser/xfa_document.h" - -class CXFA_FFNotify : public IXFA_Notify { - public: - CXFA_FFNotify(CXFA_FFDoc* pDoc); - ~CXFA_FFNotify(); - - virtual void OnPageEvent(IXFA_LayoutPage* pSender, - XFA_PAGEEVENT eEvent, - void* pParam = NULL); - - virtual void OnNodeEvent(CXFA_Node* pSender, - XFA_NODEEVENT eEvent, - void* pParam = NULL, - void* pParam2 = NULL, - void* pParam3 = NULL, - void* pParam4 = NULL); - virtual void OnWidgetDataEvent(CXFA_WidgetData* pSender, - FX_DWORD dwEvent, - void* pParam = NULL, - void* pAdditional = NULL, - void* pAdditional2 = NULL); - virtual CXFA_LayoutItem* OnCreateLayoutItem(CXFA_Node* pNode); - virtual void OnLayoutEvent(IXFA_DocLayout* pLayout, - CXFA_LayoutItem* pSender, - XFA_LAYOUTEVENT eEvent, - void* pParam = NULL, - void* pParam2 = NULL); - - virtual void StartFieldDrawLayout(CXFA_Node* pItem, - FX_FLOAT& fCalcWidth, - FX_FLOAT& fCalcHeight); - virtual FX_BOOL FindSplitPos(CXFA_Node* pItem, - int32_t iBlockIndex, - FX_FLOAT& fCalcHeightPos); - virtual FX_BOOL RunScript(CXFA_Node* pScript, CXFA_Node* pFormItem); - virtual int32_t ExecEventByDeepFirst(CXFA_Node* pFormNode, - XFA_EVENTTYPE eEventType, - FX_BOOL bIsFormReady = FALSE, - FX_BOOL bRecursive = TRUE, - CXFA_WidgetAcc* pExclude = NULL); - virtual void AddCalcValidate(CXFA_Node* pNode); - virtual IXFA_Doc* GetHDOC(); - virtual IXFA_DocProvider* GetDocProvider(); - virtual IXFA_AppProvider* GetAppProvider(); - virtual IXFA_WidgetHandler* GetWidgetHandler(); - virtual IXFA_Widget* GetHWidget(CXFA_LayoutItem* pLayoutItem); - virtual void OpenDropDownList(IXFA_Widget* hWidget); - virtual CFX_WideString GetCurrentDateTime(); - virtual void ResetData(CXFA_WidgetData* pWidgetData = NULL); - virtual int32_t GetLayoutStatus(); - virtual void RunNodeInitialize(CXFA_Node* pNode); - virtual void RunSubformIndexChange(CXFA_Node* pSubformNode); - virtual CXFA_Node* GetFocusWidgetNode(); - virtual void SetFocusWidgetNode(CXFA_Node* pNode); - - protected: - void OnNodeReady(CXFA_Node* pNode); - void OnValueChanging(CXFA_Node* pSender, void* pParam, void* pParam2); - void OnValueChanged(CXFA_Node* pSender, - void* pParam, - void* pParam2, - void* pParam3, - void* pParam4); - void OnChildAdded(CXFA_Node* pSender, void* pParam, void* pParam2); - void OnChildRemoved(CXFA_Node* pSender, void* pParam, void* pParam2); - void OnLayoutItemAdd(CXFA_FFDocView* pDocView, - IXFA_DocLayout* pLayout, - CXFA_LayoutItem* pSender, - void* pParam, - void* pParam2); - void OnLayoutItemRemoving(CXFA_FFDocView* pDocView, - IXFA_DocLayout* pLayout, - CXFA_LayoutItem* pSender, - void* pParam, - void* pParam2); - void OnLayoutItemRectChanged(CXFA_FFDocView* pDocView, - IXFA_DocLayout* pLayout, - CXFA_LayoutItem* pSender, - void* pParam, - void* pParam2); - void OnLayoutItemStatustChanged(CXFA_FFDocView* pDocView, - IXFA_DocLayout* pLayout, - CXFA_LayoutItem* pSender, - void* pParam, - void* pParam2); - CXFA_FFDoc* m_pDoc; -}; - -#endif // XFA_SRC_FXFA_APP_XFA_FFNOTIFY_H_ diff --git a/xfa/src/fxfa/app/xfa_ffpageview.cpp b/xfa/src/fxfa/app/xfa_ffpageview.cpp deleted file mode 100644 index ba4c9709eb..0000000000 --- a/xfa/src/fxfa/app/xfa_ffpageview.cpp +++ /dev/null @@ -1,424 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fxfa/app/xfa_ffpageview.h" - -#include "xfa/src/fde/fde_render.h" -#include "xfa/src/fxfa/app/xfa_ffcheckbutton.h" -#include "xfa/src/fxfa/app/xfa_ffchoicelist.h" -#include "xfa/src/fxfa/app/xfa_ffdoc.h" -#include "xfa/src/fxfa/app/xfa_ffdocview.h" -#include "xfa/src/fxfa/app/xfa_fffield.h" -#include "xfa/src/fxfa/app/xfa_ffimageedit.h" -#include "xfa/src/fxfa/app/xfa_ffpushbutton.h" -#include "xfa/src/fxfa/app/xfa_fftextedit.h" -#include "xfa/src/fxfa/app/xfa_ffwidget.h" -#include "xfa/src/fxfa/app/xfa_fwladapter.h" - -CXFA_FFPageView::CXFA_FFPageView(CXFA_FFDocView* pDocView, CXFA_Node* pPageArea) - : CXFA_ContainerLayoutItem(pPageArea), - m_pDocView(pDocView), - m_bLoaded(FALSE) {} -CXFA_FFPageView::~CXFA_FFPageView() {} -IXFA_DocView* CXFA_FFPageView::GetDocView() { - return m_pDocView; -} -int32_t CXFA_FFPageView::GetPageViewIndex() { - return GetPageIndex(); -} -void CXFA_FFPageView::GetPageViewRect(CFX_RectF& rtPage) { - CFX_SizeF sz; - GetPageSize(sz); - rtPage.Set(0, 0, sz); -} -void CXFA_FFPageView::GetDisplayMatrix(CFX_Matrix& mt, - const CFX_Rect& rtDisp, - int32_t iRotate) { - CFX_SizeF sz; - GetPageSize(sz); - CFX_RectF fdePage; - fdePage.Set(0, 0, sz.x, sz.y); - FDE_GetPageMatrix(mt, fdePage, rtDisp, iRotate, 0); -} -int32_t CXFA_FFPageView::LoadPageView(IFX_Pause* pPause) { - if (m_bLoaded) { - return 100; - } - m_bLoaded = TRUE; - return 100; -} -void CXFA_FFPageView::UnloadPageView() { - if (!m_bLoaded) { - return; - } -} -FX_BOOL CXFA_FFPageView::IsPageViewLoaded() { - return m_bLoaded; -} -IXFA_Widget* CXFA_FFPageView::GetWidgetByPos(FX_FLOAT fx, FX_FLOAT fy) { - if (!m_bLoaded) { - return nullptr; - } - IXFA_WidgetIterator* pIterator = CreateWidgetIterator(); - CXFA_FFWidget* pWidget = nullptr; - while ((pWidget = static_cast(pIterator->MoveToNext()))) { - if (!(pWidget->GetStatus() & XFA_WIDGETSTATUS_Visible)) { - continue; - } - CXFA_WidgetAcc* pAcc = pWidget->GetDataAcc(); - int32_t type = pAcc->GetClassID(); - if (type != XFA_ELEMENT_Field && type != XFA_ELEMENT_Draw) { - continue; - } - FX_FLOAT fWidgetx = fx; - FX_FLOAT fWidgety = fy; - pWidget->Rotate2Normal(fWidgetx, fWidgety); - FX_DWORD dwFlag = pWidget->OnHitTest(fWidgetx, fWidgety); - if ((FWL_WGTHITTEST_Client == dwFlag || - FWL_WGTHITTEST_HyperLink == dwFlag)) { - break; - } - } - pIterator->Release(); - return pWidget; -} -IXFA_WidgetIterator* CXFA_FFPageView::CreateWidgetIterator( - FX_DWORD dwTraverseWay, - FX_DWORD dwWidgetFilter) { - switch (dwTraverseWay) { - case XFA_TRAVERSEWAY_Tranvalse: - return new CXFA_FFTabOrderPageWidgetIterator(this, dwWidgetFilter); - case XFA_TRAVERSEWAY_Form: - return new CXFA_FFPageWidgetIterator(this, dwWidgetFilter); - } - return NULL; -} -static FX_BOOL XFA_PageWidgetFilter(CXFA_FFWidget* pWidget, - FX_DWORD dwFilter, - FX_BOOL bTraversal, - FX_BOOL bIgnorerelevant) { - CXFA_WidgetAcc* pWidgetAcc = pWidget->GetDataAcc(); - FX_DWORD dwType = dwFilter & XFA_WIDGETFILTER_AllType; - if ((dwType == XFA_WIDGETFILTER_Field) && - (pWidgetAcc->GetClassID() != XFA_ELEMENT_Field)) { - return FALSE; - } - FX_DWORD dwStatus = pWidget->GetStatus(); - if (bTraversal && (dwStatus & XFA_WIDGETSTATUS_Disabled)) { - return FALSE; - } - if (bIgnorerelevant) { - return (dwStatus & XFA_WIDGETFILTER_Visible) != 0; - } - dwFilter &= (XFA_WIDGETFILTER_Visible | XFA_WIDGETFILTER_Viewable | - XFA_WIDGETFILTER_Printable); - return (dwFilter & dwStatus) == dwFilter; -} -CXFA_FFPageWidgetIterator::CXFA_FFPageWidgetIterator(CXFA_FFPageView* pPageView, - FX_DWORD dwFilter) { - m_pPageView = pPageView; - m_dwFilter = dwFilter; - m_sIterator.Init(pPageView); - m_bIgnorerelevant = ((CXFA_FFDoc*)m_pPageView->GetDocView()->GetDoc()) - ->GetXFADoc() - ->GetCurVersionMode() < XFA_VERSION_205; -} -CXFA_FFPageWidgetIterator::~CXFA_FFPageWidgetIterator() {} -void CXFA_FFPageWidgetIterator::Reset() { - m_sIterator.Reset(); -} -IXFA_Widget* CXFA_FFPageWidgetIterator::MoveToFirst() { - m_sIterator.Reset(); - for (CXFA_LayoutItem* pLayoutItem = m_sIterator.GetCurrent(); pLayoutItem; - pLayoutItem = m_sIterator.MoveToNext()) { - if (IXFA_Widget* hWidget = GetWidget(pLayoutItem)) { - return hWidget; - } - } - return NULL; -} -IXFA_Widget* CXFA_FFPageWidgetIterator::MoveToLast() { - m_sIterator.SetCurrent(NULL); - return MoveToPrevious(); -} -IXFA_Widget* CXFA_FFPageWidgetIterator::MoveToNext() { - for (CXFA_LayoutItem* pLayoutItem = m_sIterator.MoveToNext(); pLayoutItem; - pLayoutItem = m_sIterator.MoveToNext()) { - if (IXFA_Widget* hWidget = GetWidget(pLayoutItem)) { - return hWidget; - } - } - return NULL; -} -IXFA_Widget* CXFA_FFPageWidgetIterator::MoveToPrevious() { - for (CXFA_LayoutItem* pLayoutItem = m_sIterator.MoveToPrev(); pLayoutItem; - pLayoutItem = m_sIterator.MoveToPrev()) { - if (IXFA_Widget* hWidget = GetWidget(pLayoutItem)) { - return hWidget; - } - } - return NULL; -} -IXFA_Widget* CXFA_FFPageWidgetIterator::GetCurrentWidget() { - CXFA_LayoutItem* pLayoutItem = m_sIterator.GetCurrent(); - return pLayoutItem ? XFA_GetWidgetFromLayoutItem(pLayoutItem) : NULL; -} -FX_BOOL CXFA_FFPageWidgetIterator::SetCurrentWidget(IXFA_Widget* hWidget) { - CXFA_FFWidget* pWidget = static_cast(hWidget); - return pWidget && m_sIterator.SetCurrent(pWidget); -} -IXFA_Widget* CXFA_FFPageWidgetIterator::GetWidget( - CXFA_LayoutItem* pLayoutItem) { - if (CXFA_FFWidget* pWidget = XFA_GetWidgetFromLayoutItem(pLayoutItem)) { - if (!XFA_PageWidgetFilter(pWidget, m_dwFilter, FALSE, m_bIgnorerelevant)) { - return NULL; - } - if (!pWidget->IsLoaded() && - (pWidget->GetStatus() & XFA_WIDGETSTATUS_Visible) != 0) { - pWidget->LoadWidget(); - } - return pWidget; - } - return NULL; -} -CXFA_FFTabOrderPageWidgetIterator::CXFA_FFTabOrderPageWidgetIterator( - CXFA_FFPageView* pPageView, - FX_DWORD dwFilter) - : m_pPageView(pPageView), m_dwFilter(dwFilter), m_iCurWidget(-1) { - m_bIgnorerelevant = ((CXFA_FFDoc*)m_pPageView->GetDocView()->GetDoc()) - ->GetXFADoc() - ->GetCurVersionMode() < XFA_VERSION_205; - Reset(); -} -CXFA_FFTabOrderPageWidgetIterator::~CXFA_FFTabOrderPageWidgetIterator() {} -void CXFA_FFTabOrderPageWidgetIterator::Release() { - delete this; -} -void CXFA_FFTabOrderPageWidgetIterator::Reset() { - CreateTabOrderWidgetArray(); - m_iCurWidget = -1; -} -IXFA_Widget* CXFA_FFTabOrderPageWidgetIterator::MoveToFirst() { - if (m_TabOrderWidgetArray.GetSize() > 0) { - for (int32_t i = 0; i < m_TabOrderWidgetArray.GetSize(); i++) { - if (XFA_PageWidgetFilter(m_TabOrderWidgetArray[i], m_dwFilter, TRUE, - m_bIgnorerelevant)) { - m_iCurWidget = i; - return m_TabOrderWidgetArray[m_iCurWidget]; - } - } - } - return NULL; -} -IXFA_Widget* CXFA_FFTabOrderPageWidgetIterator::MoveToLast() { - if (m_TabOrderWidgetArray.GetSize() > 0) { - for (int32_t i = m_TabOrderWidgetArray.GetSize() - 1; i >= 0; i--) { - if (XFA_PageWidgetFilter(m_TabOrderWidgetArray[i], m_dwFilter, TRUE, - m_bIgnorerelevant)) { - m_iCurWidget = i; - return m_TabOrderWidgetArray[m_iCurWidget]; - } - } - } - return NULL; -} -IXFA_Widget* CXFA_FFTabOrderPageWidgetIterator::MoveToNext() { - for (int32_t i = m_iCurWidget + 1; i < m_TabOrderWidgetArray.GetSize(); i++) { - if (XFA_PageWidgetFilter(m_TabOrderWidgetArray[i], m_dwFilter, TRUE, - m_bIgnorerelevant)) { - m_iCurWidget = i; - return m_TabOrderWidgetArray[m_iCurWidget]; - } - } - m_iCurWidget = -1; - return NULL; -} -IXFA_Widget* CXFA_FFTabOrderPageWidgetIterator::MoveToPrevious() { - for (int32_t i = m_iCurWidget - 1; i >= 0; i--) { - if (XFA_PageWidgetFilter(m_TabOrderWidgetArray[i], m_dwFilter, TRUE, - m_bIgnorerelevant)) { - m_iCurWidget = i; - return m_TabOrderWidgetArray[m_iCurWidget]; - } - } - m_iCurWidget = -1; - return NULL; -} -IXFA_Widget* CXFA_FFTabOrderPageWidgetIterator::GetCurrentWidget() { - if (m_iCurWidget >= 0) { - return m_TabOrderWidgetArray[m_iCurWidget]; - } - return NULL; -} -FX_BOOL CXFA_FFTabOrderPageWidgetIterator::SetCurrentWidget( - IXFA_Widget* hWidget) { - int32_t iWidgetIndex = - m_TabOrderWidgetArray.Find(static_cast(hWidget)); - if (iWidgetIndex >= 0) { - m_iCurWidget = iWidgetIndex; - return TRUE; - } - return FALSE; -} -CXFA_FFWidget* CXFA_FFTabOrderPageWidgetIterator::GetTraverseWidget( - CXFA_FFWidget* pWidget) { - CXFA_WidgetAcc* pAcc = pWidget->GetDataAcc(); - CXFA_Node* pTraversal = pAcc->GetNode()->GetChild(0, XFA_ELEMENT_Traversal); - if (pTraversal) { - CXFA_Node* pTraverse = pTraversal->GetChild(0, XFA_ELEMENT_Traverse); - if (pTraverse) { - CFX_WideString wsTraverseWidgetName; - if (pTraverse->GetAttribute(XFA_ATTRIBUTE_Ref, wsTraverseWidgetName)) { - return FindWidgetByName(wsTraverseWidgetName, pWidget); - } - } - } - return NULL; -} -CXFA_FFWidget* CXFA_FFTabOrderPageWidgetIterator::FindWidgetByName( - const CFX_WideStringC& wsWidgetName, - CXFA_FFWidget* pRefWidget) { - return pRefWidget->GetDocView()->GetWidgetByName(wsWidgetName, pRefWidget); -} -void CXFA_FFTabOrderPageWidgetIterator::CreateTabOrderWidgetArray() { - m_TabOrderWidgetArray.RemoveAll(); - CXFA_WidgetArray SpaceOrderWidgetArray; - CreateSpaceOrderWidgetArray(SpaceOrderWidgetArray); - int32_t nWidgetCount = SpaceOrderWidgetArray.GetSize(); - if (nWidgetCount < 1) { - return; - } - CXFA_FFWidget* hWidget = SpaceOrderWidgetArray[0]; - for (; m_TabOrderWidgetArray.GetSize() < nWidgetCount;) { - if (m_TabOrderWidgetArray.Find(hWidget) < 0) { - m_TabOrderWidgetArray.Add(hWidget); - CXFA_WidgetAcc* pWidgetAcc = hWidget->GetDataAcc(); - if (pWidgetAcc->GetUIType() == XFA_ELEMENT_ExclGroup) { - int32_t iWidgetIndex = SpaceOrderWidgetArray.Find(hWidget) + 1; - while (TRUE) { - CXFA_FFWidget* pRadio = - SpaceOrderWidgetArray[(iWidgetIndex) % nWidgetCount]; - if (pRadio->GetDataAcc()->GetExclGroup() != pWidgetAcc) { - break; - } - if (m_TabOrderWidgetArray.Find(hWidget) < 0) { - m_TabOrderWidgetArray.Add(pRadio); - } - iWidgetIndex++; - } - } - if (CXFA_FFWidget* hTraverseWidget = GetTraverseWidget(hWidget)) { - hWidget = hTraverseWidget; - continue; - } - } - int32_t iWidgetIndex = SpaceOrderWidgetArray.Find(hWidget); - hWidget = SpaceOrderWidgetArray[(iWidgetIndex + 1) % nWidgetCount]; - } -} -static int32_t XFA_TabOrderWidgetComparator(const void* phWidget1, - const void* phWidget2) { - CXFA_FFWidget* pWidget1 = (*(CXFA_TabParam**)phWidget1)->m_pWidget; - CXFA_FFWidget* pWidget2 = (*(CXFA_TabParam**)phWidget2)->m_pWidget; - CFX_RectF rt1, rt2; - pWidget1->GetWidgetRect(rt1); - pWidget2->GetWidgetRect(rt2); - FX_FLOAT x1 = rt1.left, y1 = rt1.top, x2 = rt2.left, y2 = rt2.top; - if (y1 < y2 || (y1 - y2 < XFA_FLOAT_PERCISION && x1 < x2)) { - return -1; - } - return 1; -} -void CXFA_FFTabOrderPageWidgetIterator::OrderContainer( - CXFA_LayoutItemIterator* sIterator, - CXFA_LayoutItem* pContainerItem, - CXFA_TabParam* pContainer, - FX_BOOL& bCurrentItem, - FX_BOOL& bContentArea, - FX_BOOL bMarsterPage) { - CFX_PtrArray tabParams; - CXFA_LayoutItem* pSearchItem = sIterator->MoveToNext(); - while (pSearchItem) { - if (!pSearchItem->IsContentLayoutItem()) { - bContentArea = TRUE; - pSearchItem = sIterator->MoveToNext(); - continue; - } - if (bMarsterPage && bContentArea) { - break; - } - if (bMarsterPage || bContentArea) { - CXFA_FFWidget* hWidget = GetWidget(pSearchItem); - if (!hWidget) { - pSearchItem = sIterator->MoveToNext(); - continue; - } - if (pContainerItem && (pSearchItem->GetParent() != pContainerItem)) { - bCurrentItem = TRUE; - break; - } - CXFA_TabParam* pParam = new CXFA_TabParam; - pParam->m_pWidget = hWidget; - tabParams.Add(pParam); - if (XFA_IsLayoutElement(pSearchItem->GetFormNode()->GetClassID(), TRUE)) { - OrderContainer(sIterator, pSearchItem, pParam, bCurrentItem, - bContentArea, bMarsterPage); - } - } - if (bCurrentItem) { - pSearchItem = sIterator->GetCurrent(); - bCurrentItem = FALSE; - } else { - pSearchItem = sIterator->MoveToNext(); - } - } - int32_t iChildren = tabParams.GetSize(); - if (iChildren > 1) { - FXSYS_qsort(tabParams.GetData(), iChildren, sizeof(void*), - XFA_TabOrderWidgetComparator); - } - for (int32_t iStart = 0; iStart < iChildren; iStart++) { - CXFA_TabParam* pParam = (CXFA_TabParam*)tabParams[iStart]; - pContainer->m_Children.Add(pParam->m_pWidget); - if (pParam->m_Children.GetSize() > 0) { - pContainer->m_Children.Append(pParam->m_Children); - } - delete pParam; - } - tabParams.RemoveAll(); -} -void CXFA_FFTabOrderPageWidgetIterator::CreateSpaceOrderWidgetArray( - CXFA_WidgetArray& WidgetArray) { - CXFA_LayoutItemIterator sIterator; - sIterator.Init(m_pPageView); - CXFA_TabParam* pParam = new CXFA_TabParam; - FX_BOOL bCurrentItem = FALSE; - FX_BOOL bContentArea = FALSE; - OrderContainer(&sIterator, NULL, pParam, bCurrentItem, bContentArea); - if (pParam->m_Children.GetSize() > 0) { - WidgetArray.Append(pParam->m_Children); - } - sIterator.Reset(); - bCurrentItem = FALSE; - bContentArea = FALSE; - pParam->m_Children.RemoveAll(); - OrderContainer(&sIterator, NULL, pParam, bCurrentItem, bContentArea, TRUE); - if (pParam->m_Children.GetSize() > 0) { - WidgetArray.Append(pParam->m_Children); - } - delete pParam; -} -CXFA_FFWidget* CXFA_FFTabOrderPageWidgetIterator::GetWidget( - CXFA_LayoutItem* pLayoutItem) { - if (CXFA_FFWidget* pWidget = XFA_GetWidgetFromLayoutItem(pLayoutItem)) { - if (!pWidget->IsLoaded() && - (pWidget->GetStatus() & XFA_WIDGETSTATUS_Visible)) { - pWidget->LoadWidget(); - } - return pWidget; - } - return NULL; -} diff --git a/xfa/src/fxfa/app/xfa_ffpageview.h b/xfa/src/fxfa/app/xfa_ffpageview.h deleted file mode 100644 index 58e63774b8..0000000000 --- a/xfa/src/fxfa/app/xfa_ffpageview.h +++ /dev/null @@ -1,111 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXFA_APP_XFA_FFPAGEVIEW_H_ -#define XFA_SRC_FXFA_APP_XFA_FFPAGEVIEW_H_ - -#include "xfa/src/fxfa/parser/xfa_doclayout.h" - -class CXFA_FFWidget; -class CXFA_FFDocView; -class CXFA_FFPageView : public CXFA_ContainerLayoutItem, public IXFA_PageView { - public: - CXFA_FFPageView(CXFA_FFDocView* pDocView, CXFA_Node* pPageArea); - ~CXFA_FFPageView() override; - - // IFXA_PageView: - IXFA_DocView* GetDocView() override; - int32_t GetPageViewIndex() override; - void GetPageViewRect(CFX_RectF& rtPage) override; - void GetDisplayMatrix(CFX_Matrix& mt, - const CFX_Rect& rtDisp, - int32_t iRotate) override; - int32_t LoadPageView(IFX_Pause* pPause = NULL) override; - void UnloadPageView() override; - IXFA_Widget* GetWidgetByPos(FX_FLOAT fx, FX_FLOAT fy) override; - IXFA_WidgetIterator* CreateWidgetIterator( - FX_DWORD dwTraverseWay = XFA_TRAVERSEWAY_Form, - FX_DWORD dwWidgetFilter = XFA_WIDGETFILTER_Visible | - XFA_WIDGETFILTER_Viewable | - XFA_WIDGETFILTER_AllType) override; - - FX_BOOL IsPageViewLoaded(); - - protected: - CXFA_FFDocView* m_pDocView; - FX_BOOL m_bLoaded; -}; -typedef CXFA_NodeIteratorTemplate - CXFA_LayoutItemIterator; -class CXFA_FFPageWidgetIterator : public IXFA_WidgetIterator { - public: - CXFA_FFPageWidgetIterator(CXFA_FFPageView* pPageView, FX_DWORD dwFilter); - virtual ~CXFA_FFPageWidgetIterator(); - virtual void Release() { delete this; } - - virtual void Reset(); - virtual IXFA_Widget* MoveToFirst(); - virtual IXFA_Widget* MoveToLast(); - virtual IXFA_Widget* MoveToNext(); - virtual IXFA_Widget* MoveToPrevious(); - virtual IXFA_Widget* GetCurrentWidget(); - virtual FX_BOOL SetCurrentWidget(IXFA_Widget* hWidget); - - protected: - IXFA_Widget* GetWidget(CXFA_LayoutItem* pLayoutItem); - CXFA_FFPageView* m_pPageView; - IXFA_Widget* m_hCurWidget; - FX_DWORD m_dwFilter; - FX_BOOL m_bIgnorerelevant; - CXFA_LayoutItemIterator m_sIterator; -}; -typedef CFX_ArrayTemplate CXFA_WidgetArray; -class CXFA_TabParam { - public: - CXFA_TabParam() : m_pWidget(NULL) {} - ~CXFA_TabParam() {} - - CXFA_FFWidget* m_pWidget; - CXFA_WidgetArray m_Children; -}; -class CXFA_FFTabOrderPageWidgetIterator : public IXFA_WidgetIterator { - public: - CXFA_FFTabOrderPageWidgetIterator(CXFA_FFPageView* pPageView, - FX_DWORD dwFilter); - virtual ~CXFA_FFTabOrderPageWidgetIterator(); - - virtual void Release(); - - virtual void Reset(); - virtual IXFA_Widget* MoveToFirst(); - virtual IXFA_Widget* MoveToLast(); - virtual IXFA_Widget* MoveToNext(); - virtual IXFA_Widget* MoveToPrevious(); - virtual IXFA_Widget* GetCurrentWidget(); - virtual FX_BOOL SetCurrentWidget(IXFA_Widget* hWidget); - - protected: - CXFA_WidgetArray m_TabOrderWidgetArray; - CXFA_FFPageView* m_pPageView; - FX_DWORD m_dwFilter; - int32_t m_iCurWidget; - FX_BOOL m_bIgnorerelevant; - CXFA_FFWidget* GetTraverseWidget(CXFA_FFWidget* pWidget); - CXFA_FFWidget* FindWidgetByName(const CFX_WideStringC& wsWidgetName, - CXFA_FFWidget* pRefWidget); - void CreateTabOrderWidgetArray(); - void CreateSpaceOrderWidgetArray(CXFA_WidgetArray& WidgetArray); - CXFA_FFWidget* GetWidget(CXFA_LayoutItem* pLayoutItem); - void OrderContainer(CXFA_LayoutItemIterator* sIterator, - CXFA_LayoutItem* pContainerItem, - CXFA_TabParam* pContainer, - FX_BOOL& bCurrentItem, - FX_BOOL& bContentArea, - FX_BOOL bMarsterPage = FALSE); -}; - -#endif // XFA_SRC_FXFA_APP_XFA_FFPAGEVIEW_H_ diff --git a/xfa/src/fxfa/app/xfa_ffpath.cpp b/xfa/src/fxfa/app/xfa_ffpath.cpp deleted file mode 100644 index 6f744c9753..0000000000 --- a/xfa/src/fxfa/app/xfa_ffpath.cpp +++ /dev/null @@ -1,159 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fxfa/app/xfa_ffpath.h" - -#include "xfa/include/fxgraphics/fx_graphics.h" -#include "xfa/src/fxfa/app/xfa_ffapp.h" -#include "xfa/src/fxfa/app/xfa_ffdoc.h" -#include "xfa/src/fxfa/app/xfa_ffdraw.h" -#include "xfa/src/fxfa/app/xfa_ffpageview.h" -#include "xfa/src/fxfa/app/xfa_ffwidget.h" - -CXFA_FFLine::CXFA_FFLine(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc) - : CXFA_FFDraw(pPageView, pDataAcc) {} -CXFA_FFLine::~CXFA_FFLine() {} -void CXFA_FFLine::GetRectFromHand(CFX_RectF& rect, - int32_t iHand, - FX_FLOAT fLineWidth) { - FX_FLOAT fHalfWidth = fLineWidth / 2.0f; - if (rect.height < 1.0f) { - switch (iHand) { - case XFA_ATTRIBUTEENUM_Left: - rect.top -= fHalfWidth; - break; - case XFA_ATTRIBUTEENUM_Right: - rect.top += fHalfWidth; - } - } else if (rect.width < 1.0f) { - switch (iHand) { - case XFA_ATTRIBUTEENUM_Left: - rect.left += fHalfWidth; - break; - case XFA_ATTRIBUTEENUM_Right: - rect.left += fHalfWidth; - break; - } - } else { - switch (iHand) { - case XFA_ATTRIBUTEENUM_Left: - rect.Inflate(fHalfWidth, fHalfWidth); - break; - case XFA_ATTRIBUTEENUM_Right: - rect.Deflate(fHalfWidth, fHalfWidth); - break; - } - } -} -void CXFA_FFLine::RenderWidget(CFX_Graphics* pGS, - CFX_Matrix* pMatrix, - FX_DWORD dwStatus, - int32_t iRotate) { - if (!IsMatchVisibleStatus(dwStatus)) { - return; - } - CXFA_Value value = m_pDataAcc->GetFormValue(); - if (!value) { - return; - } - CXFA_Line lineObj = value.GetLine(); - FX_ARGB lineColor = 0xFF000000; - int32_t iStrokeType = 0; - FX_FLOAT fLineWidth = 1.0f; - FX_BOOL bSlope = lineObj.GetSlop(); - int32_t iCap = 0; - CXFA_Edge edge = lineObj.GetEdge(); - if (edge) { - if (edge.GetPresence() != XFA_ATTRIBUTEENUM_Visible) { - return; - } - lineColor = edge.GetColor(); - iStrokeType = edge.GetStrokeType(); - fLineWidth = edge.GetThickness(); - iCap = edge.GetCapType(); - } - CFX_Matrix mtRotate; - GetRotateMatrix(mtRotate); - if (pMatrix) { - mtRotate.Concat(*pMatrix); - } - CFX_RectF rtLine; - GetRectWithoutRotate(rtLine); - if (CXFA_Margin mgWidget = m_pDataAcc->GetMargin()) { - XFA_RectWidthoutMargin(rtLine, mgWidget); - } - GetRectFromHand(rtLine, lineObj.GetHand(), fLineWidth); - CFX_Path linePath; - linePath.Create(); - if (bSlope && rtLine.right() > 0.0f && rtLine.bottom() > 0.0f) { - linePath.AddLine(rtLine.right(), rtLine.top, rtLine.left, rtLine.bottom()); - } else { - linePath.AddLine(rtLine.left, rtLine.top, rtLine.right(), rtLine.bottom()); - } - CFX_Color color(lineColor); - pGS->SaveGraphState(); - pGS->SetLineWidth(fLineWidth, TRUE); - XFA_StrokeTypeSetLineDash(pGS, iStrokeType, iCap); - pGS->SetStrokeColor(&color); - pGS->SetLineCap(XFA_LineCapToFXGE(iCap)); - pGS->StrokePath(&linePath, &mtRotate); - pGS->RestoreGraphState(); -} -CXFA_FFArc::CXFA_FFArc(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc) - : CXFA_FFDraw(pPageView, pDataAcc) {} -CXFA_FFArc::~CXFA_FFArc() {} -void CXFA_FFArc::RenderWidget(CFX_Graphics* pGS, - CFX_Matrix* pMatrix, - FX_DWORD dwStatus, - int32_t iRotate) { - if (!IsMatchVisibleStatus(dwStatus)) { - return; - } - CXFA_Value value = m_pDataAcc->GetFormValue(); - if (!value) { - return; - } - CXFA_Arc arcObj = value.GetArc(); - CFX_Matrix mtRotate; - GetRotateMatrix(mtRotate); - if (pMatrix) { - mtRotate.Concat(*pMatrix); - } - CFX_RectF rtArc; - GetRectWithoutRotate(rtArc); - if (CXFA_Margin mgWidget = m_pDataAcc->GetMargin()) { - XFA_RectWidthoutMargin(rtArc, mgWidget); - } - DrawBorder(pGS, arcObj, rtArc, &mtRotate); -} -CXFA_FFRectangle::CXFA_FFRectangle(CXFA_FFPageView* pPageView, - CXFA_WidgetAcc* pDataAcc) - : CXFA_FFDraw(pPageView, pDataAcc) {} -CXFA_FFRectangle::~CXFA_FFRectangle() {} -void CXFA_FFRectangle::RenderWidget(CFX_Graphics* pGS, - CFX_Matrix* pMatrix, - FX_DWORD dwStatus, - int32_t iRotate) { - if (!IsMatchVisibleStatus(dwStatus)) { - return; - } - CXFA_Value value = m_pDataAcc->GetFormValue(); - if (!value) { - return; - } - CXFA_Rectangle rtObj = value.GetRectangle(); - CFX_RectF rect; - GetRectWithoutRotate(rect); - if (CXFA_Margin mgWidget = m_pDataAcc->GetMargin()) { - XFA_RectWidthoutMargin(rect, mgWidget); - } - CFX_Matrix mtRotate; - GetRotateMatrix(mtRotate); - if (pMatrix) { - mtRotate.Concat(*pMatrix); - } - DrawBorder(pGS, rtObj, rect, &mtRotate); -} diff --git a/xfa/src/fxfa/app/xfa_ffpath.h b/xfa/src/fxfa/app/xfa_ffpath.h deleted file mode 100644 index a215812b90..0000000000 --- a/xfa/src/fxfa/app/xfa_ffpath.h +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXFA_APP_XFA_FFPATH_H_ -#define XFA_SRC_FXFA_APP_XFA_FFPATH_H_ - -#include "xfa/src/fxfa/app/xfa_ffdraw.h" - -class CXFA_FFLine : public CXFA_FFDraw { - public: - CXFA_FFLine(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc); - virtual ~CXFA_FFLine(); - virtual void RenderWidget(CFX_Graphics* pGS, - CFX_Matrix* pMatrix = NULL, - FX_DWORD dwStatus = 0, - int32_t iRotate = 0); - - private: - void GetRectFromHand(CFX_RectF& rect, int32_t iHand, FX_FLOAT fLineWidth); -}; -class CXFA_FFArc : public CXFA_FFDraw { - public: - CXFA_FFArc(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc); - virtual ~CXFA_FFArc(); - virtual void RenderWidget(CFX_Graphics* pGS, - CFX_Matrix* pMatrix = NULL, - FX_DWORD dwStatus = 0, - int32_t iRotate = 0); -}; -class CXFA_FFRectangle : public CXFA_FFDraw { - public: - CXFA_FFRectangle(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc); - virtual ~CXFA_FFRectangle(); - virtual void RenderWidget(CFX_Graphics* pGS, - CFX_Matrix* pMatrix = NULL, - FX_DWORD dwStatus = 0, - int32_t iRotate = 0); -}; - -#endif // XFA_SRC_FXFA_APP_XFA_FFPATH_H_ diff --git a/xfa/src/fxfa/app/xfa_ffpushbutton.cpp b/xfa/src/fxfa/app/xfa_ffpushbutton.cpp deleted file mode 100644 index 492a13544c..0000000000 --- a/xfa/src/fxfa/app/xfa_ffpushbutton.cpp +++ /dev/null @@ -1,249 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fxfa/app/xfa_ffpushbutton.h" - -#include "xfa/include/fwl/core/fwl_widgetmgr.h" -#include "xfa/include/fwl/lightwidget/pushbutton.h" -#include "xfa/src/fxfa/app/xfa_ffapp.h" -#include "xfa/src/fxfa/app/xfa_fffield.h" -#include "xfa/src/fxfa/app/xfa_ffpageview.h" -#include "xfa/src/fxfa/app/xfa_ffwidget.h" -#include "xfa/src/fxfa/app/xfa_ffwidgetacc.h" -#include "xfa/src/fxfa/app/xfa_textlayout.h" - -CXFA_FFPushButton::CXFA_FFPushButton(CXFA_FFPageView* pPageView, - CXFA_WidgetAcc* pDataAcc) - : CXFA_FFField(pPageView, pDataAcc), - m_pRolloverTextLayout(NULL), - m_pDownTextLayout(NULL), - m_pDownProvider(NULL), - m_pRollProvider(NULL), - m_pOldDelegate(NULL) {} -CXFA_FFPushButton::~CXFA_FFPushButton() { - CXFA_FFPushButton::UnloadWidget(); -} -void CXFA_FFPushButton::RenderWidget(CFX_Graphics* pGS, - CFX_Matrix* pMatrix, - FX_DWORD dwStatus, - int32_t iRotate) { - if (!IsMatchVisibleStatus(dwStatus)) { - return; - } - CFX_Matrix mtRotate; - GetRotateMatrix(mtRotate); - if (pMatrix) { - mtRotate.Concat(*pMatrix); - } - CXFA_FFWidget::RenderWidget(pGS, &mtRotate, dwStatus); - RenderHighlightCaption(pGS, &mtRotate); - CFX_RectF rtWidget; - GetRectWithoutRotate(rtWidget); - CFX_Matrix mt; - mt.Set(1, 0, 0, 1, rtWidget.left, rtWidget.top); - mt.Concat(mtRotate); - GetApp()->GetWidgetMgrDelegate()->OnDrawWidget(m_pNormalWidget->GetWidget(), - pGS, &mt); -} -FX_BOOL CXFA_FFPushButton::LoadWidget() { - FXSYS_assert(m_pNormalWidget == NULL); - CFWL_PushButton* pPushButton = CFWL_PushButton::Create(); - if (pPushButton) { - pPushButton->Initialize(); - } - m_pOldDelegate = pPushButton->SetDelegate(this); - m_pNormalWidget = (CFWL_Widget*)pPushButton; - IFWL_Widget* pWidget = m_pNormalWidget->GetWidget(); - m_pNormalWidget->SetPrivateData(pWidget, this, NULL); - IFWL_NoteDriver* pNoteDriver = FWL_GetApp()->GetNoteDriver(); - pNoteDriver->RegisterEventTarget(pWidget, pWidget); - m_pNormalWidget->LockUpdate(); - UpdateWidgetProperty(); - LoadHighlightCaption(); - m_pNormalWidget->UnlockUpdate(); - return CXFA_FFField::LoadWidget(); -} -void CXFA_FFPushButton::UpdateWidgetProperty() { - FX_DWORD dwStyleEx = 0; - switch (m_pDataAcc->GetButtonHighlight()) { - case XFA_ATTRIBUTEENUM_Inverted: - dwStyleEx = XFA_FWL_PSBSTYLEEXT_HiliteInverted; - break; - case XFA_ATTRIBUTEENUM_Outline: - dwStyleEx = XFA_FWL_PSBSTYLEEXT_HiliteOutLine; - break; - case XFA_ATTRIBUTEENUM_Push: - dwStyleEx = XFA_FWL_PSBSTYLEEXT_HilitePush; - break; - default: - break; - } - m_pNormalWidget->ModifyStylesEx(dwStyleEx, 0xFFFFFFFF); -} -void CXFA_FFPushButton::UnloadWidget() { - if (m_pRolloverTextLayout) { - delete m_pRolloverTextLayout; - m_pRolloverTextLayout = NULL; - } - if (m_pDownTextLayout) { - delete m_pDownTextLayout; - m_pDownTextLayout = NULL; - } - if (m_pDownProvider) { - delete m_pDownProvider; - m_pDownProvider = NULL; - } - if (m_pRollProvider) { - delete m_pRollProvider; - m_pRollProvider = NULL; - } - CXFA_FFField::UnloadWidget(); -} -FX_BOOL CXFA_FFPushButton::PerformLayout() { - CXFA_FFWidget::PerformLayout(); - CFX_RectF rtWidget; - GetRectWithoutRotate(rtWidget); - m_rtUI = rtWidget; - if (CXFA_Margin mgWidget = m_pDataAcc->GetMargin()) { - XFA_RectWidthoutMargin(rtWidget, mgWidget); - } - CXFA_Caption caption = m_pDataAcc->GetCaption(); - m_rtCaption.Set(rtWidget.left, rtWidget.top, rtWidget.width, rtWidget.height); - if (CXFA_Margin mgCap = caption.GetMargin()) { - XFA_RectWidthoutMargin(m_rtCaption, mgCap); - } - LayoutHighlightCaption(); - SetFWLRect(); - if (m_pNormalWidget) { - m_pNormalWidget->Update(); - } - return TRUE; -} -FX_FLOAT CXFA_FFPushButton::GetLineWidth() { - CXFA_Border border = m_pDataAcc->GetBorder(); - if (border && border.GetPresence() == XFA_ATTRIBUTEENUM_Visible) { - CXFA_Edge edge = border.GetEdge(0); - return edge.GetThickness(); - } - return 0; -} -FX_ARGB CXFA_FFPushButton::GetLineColor() { - return 0xFF000000; -} -FX_ARGB CXFA_FFPushButton::GetFillColor() { - return 0xFFFFFFFF; -} -void CXFA_FFPushButton::LoadHighlightCaption() { - CXFA_Caption caption = m_pDataAcc->GetCaption(); - if (caption && caption.GetPresence() != XFA_ATTRIBUTEENUM_Hidden) { - { - CFX_WideString wsRollover; - FX_BOOL bRichText; - if (m_pDataAcc->GetButtonRollover(wsRollover, bRichText)) { - if (m_pRollProvider == NULL) { - m_pRollProvider = - new CXFA_TextProvider(m_pDataAcc, XFA_TEXTPROVIDERTYPE_Rollover); - } - m_pRolloverTextLayout = new CXFA_TextLayout(m_pRollProvider); - } - CFX_WideString wsDown; - if (m_pDataAcc->GetButtonDown(wsDown, bRichText)) { - if (m_pDownProvider == NULL) { - m_pDownProvider = - new CXFA_TextProvider(m_pDataAcc, XFA_TEXTPROVIDERTYPE_Down); - } - m_pDownTextLayout = new CXFA_TextLayout(m_pDownProvider); - } - } - } -} -void CXFA_FFPushButton::LayoutHighlightCaption() { - CFX_SizeF sz(m_rtCaption.width, m_rtCaption.height); - LayoutCaption(); - if (m_pRolloverTextLayout) { - m_pRolloverTextLayout->Layout(sz); - } - if (m_pDownTextLayout) { - m_pDownTextLayout->Layout(sz); - } -} -void CXFA_FFPushButton::RenderHighlightCaption(CFX_Graphics* pGS, - CFX_Matrix* pMatrix) { - CXFA_TextLayout* pCapTextLayout = m_pDataAcc->GetCaptionTextLayout(); - CXFA_Caption caption = m_pDataAcc->GetCaption(); - if (caption && caption.GetPresence() == XFA_ATTRIBUTEENUM_Visible) { - CFX_RenderDevice* pRenderDevice = pGS->GetRenderDevice(); - CFX_RectF rtWidget; - GetRectWithoutRotate(rtWidget); - CFX_RectF rtClip = m_rtCaption; - rtClip.Intersect(rtWidget); - CFX_Matrix mt; - mt.Set(1, 0, 0, 1, m_rtCaption.left, m_rtCaption.top); - if (pMatrix) { - pMatrix->TransformRect(rtClip); - mt.Concat(*pMatrix); - } - { - FX_DWORD dwState = m_pNormalWidget->GetStates(); - if (m_pDownTextLayout && (dwState & FWL_STATE_PSB_Pressed) && - (dwState & FWL_STATE_PSB_Hovered)) { - if (m_pDownTextLayout->DrawString(pRenderDevice, mt, rtClip)) { - return; - } - } else if (m_pRolloverTextLayout && (dwState & FWL_STATE_PSB_Hovered)) { - if (m_pRolloverTextLayout->DrawString(pRenderDevice, mt, rtClip)) { - return; - } - } - } - if (pCapTextLayout) { - pCapTextLayout->DrawString(pRenderDevice, mt, rtClip); - } - } -} -int32_t CXFA_FFPushButton::OnProcessMessage(CFWL_Message* pMessage) { - return m_pOldDelegate->OnProcessMessage(pMessage); -} -FWL_ERR CXFA_FFPushButton::OnProcessEvent(CFWL_Event* pEvent) { - m_pOldDelegate->OnProcessEvent(pEvent); - return CXFA_FFField::OnProcessEvent(pEvent); -} -FWL_ERR CXFA_FFPushButton::OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - if (m_pNormalWidget->GetStylesEx() & XFA_FWL_PSBSTYLEEXT_HiliteInverted) { - if ((m_pNormalWidget->GetStates() & FWL_STATE_PSB_Pressed) && - (m_pNormalWidget->GetStates() & FWL_STATE_PSB_Hovered)) { - CFX_RectF rtFill; - m_pNormalWidget->GetWidgetRect(rtFill); - rtFill.left = rtFill.top = 0; - FX_FLOAT fLineWith = GetLineWidth(); - rtFill.Deflate(fLineWith, fLineWith); - CFX_Color cr(FXARGB_MAKE(128, 128, 255, 255)); - pGraphics->SetFillColor(&cr); - CFX_Path path; - path.Create(); - path.AddRectangle(rtFill.left, rtFill.top, rtFill.width, rtFill.height); - pGraphics->FillPath(&path, FXFILL_WINDING, (CFX_Matrix*)pMatrix); - } - } else if (m_pNormalWidget->GetStylesEx() & - XFA_FWL_PSBSTYLEEXT_HiliteOutLine) { - if ((m_pNormalWidget->GetStates() & FWL_STATE_PSB_Pressed) && - (m_pNormalWidget->GetStates() & FWL_STATE_PSB_Hovered)) { - FX_FLOAT fLineWidth = GetLineWidth(); - CFX_Color cr(FXARGB_MAKE(255, 128, 255, 255)); - pGraphics->SetStrokeColor(&cr); - pGraphics->SetLineWidth(fLineWidth); - CFX_Path path; - path.Create(); - CFX_RectF rect; - m_pNormalWidget->GetWidgetRect(rect); - path.AddRectangle(0, 0, rect.width, rect.height); - pGraphics->StrokePath(&path, (CFX_Matrix*)pMatrix); - } - } else if (m_pNormalWidget->GetStylesEx() & XFA_FWL_PSBSTYLEEXT_HilitePush) { - } - return FWL_ERR_Succeeded; -} diff --git a/xfa/src/fxfa/app/xfa_ffpushbutton.h b/xfa/src/fxfa/app/xfa_ffpushbutton.h deleted file mode 100644 index 19e72a7796..0000000000 --- a/xfa/src/fxfa/app/xfa_ffpushbutton.h +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXFA_APP_XFA_FFPUSHBUTTON_H_ -#define XFA_SRC_FXFA_APP_XFA_FFPUSHBUTTON_H_ - -#include "xfa/src/fxfa/app/xfa_fffield.h" - -#define XFA_FWL_PSBSTYLEEXT_HiliteNone (0L << 0) -#define XFA_FWL_PSBSTYLEEXT_HiliteInverted (1L << 0) -#define XFA_FWL_PSBSTYLEEXT_HilitePush (2L << 0) -#define XFA_FWL_PSBSTYLEEXT_HiliteOutLine (4L << 0) - -class CXFA_TextProvider; - -class CXFA_FFPushButton : public CXFA_FFField { - public: - CXFA_FFPushButton(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc); - virtual ~CXFA_FFPushButton(); - virtual void RenderWidget(CFX_Graphics* pGS, - CFX_Matrix* pMatrix = NULL, - FX_DWORD dwStatus = 0, - int32_t iRotate = 0); - virtual FX_BOOL LoadWidget(); - virtual void UnloadWidget(); - virtual FX_BOOL PerformLayout(); - virtual void UpdateWidgetProperty(); - virtual int32_t OnProcessMessage(CFWL_Message* pMessage); - virtual FWL_ERR OnProcessEvent(CFWL_Event* pEvent); - virtual FWL_ERR OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL); - - protected: - void LoadHighlightCaption(); - void LayoutHighlightCaption(); - void RenderHighlightCaption(CFX_Graphics* pGS, CFX_Matrix* pMatrix = NULL); - FX_FLOAT GetLineWidth(); - FX_ARGB GetLineColor(); - FX_ARGB GetFillColor(); - CXFA_TextLayout* m_pRolloverTextLayout; - CXFA_TextLayout* m_pDownTextLayout; - CXFA_TextProvider* m_pDownProvider; - CXFA_TextProvider* m_pRollProvider; - IFWL_WidgetDelegate* m_pOldDelegate; -}; - -#endif // XFA_SRC_FXFA_APP_XFA_FFPUSHBUTTON_H_ diff --git a/xfa/src/fxfa/app/xfa_ffsignature.cpp b/xfa/src/fxfa/app/xfa_ffsignature.cpp deleted file mode 100644 index 9c4d31bbc4..0000000000 --- a/xfa/src/fxfa/app/xfa_ffsignature.cpp +++ /dev/null @@ -1,120 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fxfa/app/xfa_ffsignature.h" - -#include "xfa/src/fxfa/app/xfa_ffdoc.h" -#include "xfa/src/fxfa/app/xfa_fffield.h" -#include "xfa/src/fxfa/app/xfa_ffpageview.h" -#include "xfa/src/fxfa/app/xfa_ffwidget.h" - -CXFA_FFSignature::CXFA_FFSignature(CXFA_FFPageView* pPageView, - CXFA_WidgetAcc* pDataAcc) - : CXFA_FFField(pPageView, pDataAcc) {} -CXFA_FFSignature::~CXFA_FFSignature() {} -FX_BOOL CXFA_FFSignature::LoadWidget() { - return CXFA_FFField::LoadWidget(); -} -void CXFA_FFSignature::RenderWidget(CFX_Graphics* pGS, - CFX_Matrix* pMatrix, - FX_DWORD dwStatus, - int32_t iRotate) { - if (!IsMatchVisibleStatus(dwStatus)) { - return; - } - CFX_Matrix mtRotate; - GetRotateMatrix(mtRotate); - if (pMatrix) { - mtRotate.Concat(*pMatrix); - } - CXFA_FFWidget::RenderWidget(pGS, &mtRotate, dwStatus); - CXFA_Border borderUI = m_pDataAcc->GetUIBorder(); - DrawBorder(pGS, borderUI, m_rtUI, &mtRotate); - RenderCaption(pGS, &mtRotate); - DrawHighlight(pGS, &mtRotate, dwStatus, FALSE); - CFX_RectF rtWidget = m_rtUI; - IXFA_DocProvider* pDocProvider = m_pDataAcc->GetDoc()->GetDocProvider(); - FXSYS_assert(pDocProvider); - pDocProvider->RenderCustomWidget(this, pGS, &mtRotate, rtWidget); -} -FX_BOOL CXFA_FFSignature::OnMouseEnter() { - return FALSE; -} -FX_BOOL CXFA_FFSignature::OnMouseExit() { - return FALSE; -} -FX_BOOL CXFA_FFSignature::OnLButtonDown(FX_DWORD dwFlags, - FX_FLOAT fx, - FX_FLOAT fy) { - return FALSE; -} -FX_BOOL CXFA_FFSignature::OnLButtonUp(FX_DWORD dwFlags, - FX_FLOAT fx, - FX_FLOAT fy) { - return FALSE; -} -FX_BOOL CXFA_FFSignature::OnLButtonDblClk(FX_DWORD dwFlags, - FX_FLOAT fx, - FX_FLOAT fy) { - return FALSE; -} -FX_BOOL CXFA_FFSignature::OnMouseMove(FX_DWORD dwFlags, - FX_FLOAT fx, - FX_FLOAT fy) { - return FALSE; -} -FX_BOOL CXFA_FFSignature::OnMouseWheel(FX_DWORD dwFlags, - int16_t zDelta, - FX_FLOAT fx, - FX_FLOAT fy) { - return FALSE; -} -FX_BOOL CXFA_FFSignature::OnRButtonDown(FX_DWORD dwFlags, - FX_FLOAT fx, - FX_FLOAT fy) { - return FALSE; -} -FX_BOOL CXFA_FFSignature::OnRButtonUp(FX_DWORD dwFlags, - FX_FLOAT fx, - FX_FLOAT fy) { - return FALSE; -} -FX_BOOL CXFA_FFSignature::OnRButtonDblClk(FX_DWORD dwFlags, - FX_FLOAT fx, - FX_FLOAT fy) { - return FALSE; -} -FX_BOOL CXFA_FFSignature::OnKeyDown(FX_DWORD dwKeyCode, FX_DWORD dwFlags) { - return FALSE; -} -FX_BOOL CXFA_FFSignature::OnKeyUp(FX_DWORD dwKeyCode, FX_DWORD dwFlags) { - return FALSE; -} -FX_BOOL CXFA_FFSignature::OnChar(FX_DWORD dwChar, FX_DWORD dwFlags) { - return FALSE; -} -FX_DWORD CXFA_FFSignature::OnHitTest(FX_FLOAT fx, FX_FLOAT fy) { - if (m_pNormalWidget) { - FX_FLOAT ffx = fx, ffy = fy; - FWLToClient(ffx, ffy); - FX_DWORD dwWidgetHit = m_pNormalWidget->HitTest(ffx, ffy); - if (dwWidgetHit != FWL_WGTHITTEST_Unknown) { - return FWL_WGTHITTEST_Client; - } - } - CFX_RectF rtBox; - GetRectWithoutRotate(rtBox); - if (!rtBox.Contains(fx, fy)) { - return FWL_WGTHITTEST_Unknown; - } - if (m_rtCaption.Contains(fx, fy)) { - return FWL_WGTHITTEST_Titlebar; - } - return FWL_WGTHITTEST_Client; -} -FX_BOOL CXFA_FFSignature::OnSetCursor(FX_FLOAT fx, FX_FLOAT fy) { - return FALSE; -} diff --git a/xfa/src/fxfa/app/xfa_ffsignature.h b/xfa/src/fxfa/app/xfa_ffsignature.h deleted file mode 100644 index 6c7a614157..0000000000 --- a/xfa/src/fxfa/app/xfa_ffsignature.h +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXFA_APP_XFA_FFSIGNATURE_H_ -#define XFA_SRC_FXFA_APP_XFA_FFSIGNATURE_H_ - -#include "xfa/src/fxfa/app/xfa_fffield.h" - -class CXFA_FFSignature final : public CXFA_FFField { - public: - CXFA_FFSignature(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc); - virtual ~CXFA_FFSignature(); - - virtual void RenderWidget(CFX_Graphics* pGS, - CFX_Matrix* pMatrix = NULL, - FX_DWORD dwStatus = 0, - int32_t iRotate = 0); - virtual FX_BOOL LoadWidget(); - virtual FX_BOOL OnMouseEnter(); - virtual FX_BOOL OnMouseExit(); - virtual FX_BOOL OnLButtonDown(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy); - virtual FX_BOOL OnLButtonUp(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy); - virtual FX_BOOL OnLButtonDblClk(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy); - virtual FX_BOOL OnMouseMove(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy); - virtual FX_BOOL OnMouseWheel(FX_DWORD dwFlags, - int16_t zDelta, - FX_FLOAT fx, - FX_FLOAT fy); - virtual FX_BOOL OnRButtonDown(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy); - virtual FX_BOOL OnRButtonUp(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy); - virtual FX_BOOL OnRButtonDblClk(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy); - - virtual FX_BOOL OnKeyDown(FX_DWORD dwKeyCode, FX_DWORD dwFlags); - virtual FX_BOOL OnKeyUp(FX_DWORD dwKeyCode, FX_DWORD dwFlags); - virtual FX_BOOL OnChar(FX_DWORD dwChar, FX_DWORD dwFlags); - virtual FX_DWORD OnHitTest(FX_FLOAT fx, FX_FLOAT fy); - virtual FX_BOOL OnSetCursor(FX_FLOAT fx, FX_FLOAT fy); -}; - -#endif // XFA_SRC_FXFA_APP_XFA_FFSIGNATURE_H_ diff --git a/xfa/src/fxfa/app/xfa_ffsubform.cpp b/xfa/src/fxfa/app/xfa_ffsubform.cpp deleted file mode 100644 index 8845a36ed9..0000000000 --- a/xfa/src/fxfa/app/xfa_ffsubform.cpp +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fxfa/app/xfa_ffsubform.h" - -#include "xfa/src/fxfa/app/xfa_ffapp.h" -#include "xfa/src/fxfa/app/xfa_ffdoc.h" -#include "xfa/src/fxfa/app/xfa_ffpageview.h" -#include "xfa/src/fxfa/app/xfa_ffwidget.h" - -CXFA_FFSubForm::CXFA_FFSubForm(CXFA_FFPageView* pPageView, - CXFA_WidgetAcc* pDataAcc) - : CXFA_FFWidget(pPageView, pDataAcc) {} -CXFA_FFSubForm::~CXFA_FFSubForm() {} diff --git a/xfa/src/fxfa/app/xfa_ffsubform.h b/xfa/src/fxfa/app/xfa_ffsubform.h deleted file mode 100644 index cb82f91c64..0000000000 --- a/xfa/src/fxfa/app/xfa_ffsubform.h +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXFA_APP_XFA_FFSUBFORM_H_ -#define XFA_SRC_FXFA_APP_XFA_FFSUBFORM_H_ - -#include "xfa/src/fxfa/app/xfa_ffpageview.h" -#include "xfa/src/fxfa/app/xfa_ffwidget.h" - -class CXFA_FFSubForm : public CXFA_FFWidget { - public: - CXFA_FFSubForm(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc); - virtual ~CXFA_FFSubForm(); -}; - -#endif // XFA_SRC_FXFA_APP_XFA_FFSUBFORM_H_ diff --git a/xfa/src/fxfa/app/xfa_fftext.cpp b/xfa/src/fxfa/app/xfa_fftext.cpp deleted file mode 100644 index 95d408ce71..0000000000 --- a/xfa/src/fxfa/app/xfa_fftext.cpp +++ /dev/null @@ -1,179 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fxfa/app/xfa_fftext.h" - -#include "xfa/include/fwl/core/fwl_widgetdef.h" -#include "xfa/include/fxgraphics/fx_graphics.h" -#include "xfa/src/fxfa/app/xfa_ffapp.h" -#include "xfa/src/fxfa/app/xfa_ffdoc.h" -#include "xfa/src/fxfa/app/xfa_ffdraw.h" -#include "xfa/src/fxfa/app/xfa_ffpageview.h" -#include "xfa/src/fxfa/app/xfa_ffwidget.h" -#include "xfa/src/fxfa/app/xfa_textlayout.h" - -CXFA_FFText::CXFA_FFText(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc) - : CXFA_FFDraw(pPageView, pDataAcc) {} -CXFA_FFText::~CXFA_FFText() {} -void CXFA_FFText::RenderWidget(CFX_Graphics* pGS, - CFX_Matrix* pMatrix, - FX_DWORD dwStatus, - int32_t iRotate) { - if (!IsMatchVisibleStatus(dwStatus)) { - return; - } - { - CFX_Matrix mtRotate; - GetRotateMatrix(mtRotate); - if (pMatrix) { - mtRotate.Concat(*pMatrix); - } - CXFA_FFWidget::RenderWidget(pGS, &mtRotate, dwStatus); - CXFA_TextLayout* pTextLayout = m_pDataAcc->GetTextLayout(); - if (pTextLayout) { - CFX_RenderDevice* pRenderDevice = pGS->GetRenderDevice(); - CFX_RectF rtText; - GetRectWithoutRotate(rtText); - if (CXFA_Margin mgWidget = m_pDataAcc->GetMargin()) { - CXFA_LayoutItem* pItem = this; - if (pItem->GetPrev() == NULL && pItem->GetNext() == NULL) { - XFA_RectWidthoutMargin(rtText, mgWidget); - } else { - FX_FLOAT fLeftInset, fRightInset, fTopInset = 0, fBottomInset = 0; - mgWidget.GetLeftInset(fLeftInset); - mgWidget.GetRightInset(fRightInset); - if (pItem->GetPrev() == NULL) { - mgWidget.GetTopInset(fTopInset); - } else if (pItem->GetNext() == NULL) { - mgWidget.GetBottomInset(fBottomInset); - } - rtText.Deflate(fLeftInset, fTopInset, fRightInset, fBottomInset); - } - } - CFX_Matrix mt; - mt.Set(1, 0, 0, 1, rtText.left, rtText.top); - CFX_RectF rtClip = rtText; - mtRotate.TransformRect(rtClip); - mt.Concat(mtRotate); - pTextLayout->DrawString(pRenderDevice, mt, rtClip, GetIndex()); - } - } -} -FX_BOOL CXFA_FFText::IsLoaded() { - CXFA_TextLayout* pTextLayout = m_pDataAcc->GetTextLayout(); - return pTextLayout && !pTextLayout->m_bHasBlock; -} -FX_BOOL CXFA_FFText::PerformLayout() { - CXFA_FFDraw::PerformLayout(); - CXFA_TextLayout* pTextLayout = m_pDataAcc->GetTextLayout(); - if (!pTextLayout) { - return FALSE; - } - if (!pTextLayout->m_bHasBlock) { - return TRUE; - } - pTextLayout->m_Blocks.RemoveAll(); - CXFA_LayoutItem* pItem = this; - if (pItem->GetPrev() == NULL && pItem->GetNext() == NULL) { - return TRUE; - } - pItem = pItem->GetFirst(); - while (pItem) { - CFX_RectF rtText; - pItem->GetRect(rtText); - if (CXFA_Margin mgWidget = m_pDataAcc->GetMargin()) { - if (pItem->GetPrev() == NULL) { - FX_FLOAT fTopInset; - mgWidget.GetTopInset(fTopInset); - rtText.height -= fTopInset; - } else if (pItem->GetNext() == NULL) { - FX_FLOAT fBottomInset; - mgWidget.GetBottomInset(fBottomInset); - rtText.height -= fBottomInset; - } - } - pTextLayout->ItemBlocks(rtText, pItem->GetIndex()); - pItem = pItem->GetNext(); - } - pTextLayout->m_bHasBlock = FALSE; - return TRUE; -} -FX_BOOL CXFA_FFText::OnLButtonDown(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy) { - CFX_RectF rtBox; - GetRectWithoutRotate(rtBox); - if (!rtBox.Contains(fx, fy)) { - return FALSE; - } - const FX_WCHAR* wsURLContent = GetLinkURLAtPoint(fx, fy); - if (NULL == wsURLContent) { - return FALSE; - } - SetButtonDown(TRUE); - return TRUE; -} -FX_BOOL CXFA_FFText::OnMouseMove(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy) { - CFX_RectF rtBox; - GetRectWithoutRotate(rtBox); - if (!rtBox.Contains(fx, fy)) { - return FALSE; - } - const FX_WCHAR* wsURLContent = GetLinkURLAtPoint(fx, fy); - if (NULL == wsURLContent) { - return FALSE; - } - return TRUE; -} -FX_BOOL CXFA_FFText::OnLButtonUp(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy) { - if (!IsButtonDown()) { - return FALSE; - } - SetButtonDown(FALSE); - const FX_WCHAR* wsURLContent = GetLinkURLAtPoint(fx, fy); - if (NULL == wsURLContent) { - return FALSE; - } - CXFA_FFDoc* pDoc = GetDoc(); - pDoc->GetDocProvider()->GotoURL(pDoc, CFX_WideStringC(wsURLContent), FALSE); - return TRUE; -} -FX_DWORD CXFA_FFText::OnHitTest(FX_FLOAT fx, FX_FLOAT fy) { - CFX_RectF rtBox; - GetRectWithoutRotate(rtBox); - if (!rtBox.Contains(fx, fy)) { - return FWL_WGTHITTEST_Unknown; - } - if (!GetLinkURLAtPoint(fx, fy)) { - return FWL_WGTHITTEST_Unknown; - } - return FWL_WGTHITTEST_HyperLink; -} -const FX_WCHAR* CXFA_FFText::GetLinkURLAtPoint(FX_FLOAT fx, FX_FLOAT fy) { - CXFA_TextLayout* pTextLayout = m_pDataAcc->GetTextLayout(); - if (NULL == pTextLayout) { - return NULL; - } - FX_FLOAT x(fx), y(fy); - FWLToClient(x, y); - const CXFA_PieceLineArray* pPieceLines = pTextLayout->GetPieceLines(); - int32_t iCount = pPieceLines->GetSize(); - for (int32_t i = 0; i < iCount; i++) { - CXFA_PieceLine* pPieceLine = pPieceLines->GetAt(i); - int32_t iPieces = pPieceLine->m_textPieces.GetSize(); - for (int32_t j = 0; j < iPieces; j++) { - XFA_TextPiece* pPiece = pPieceLine->m_textPieces.GetAt(j); - if (pPiece->pLinkData && pPiece->rtPiece.Contains(x, y)) { - return pPiece->pLinkData->GetLinkURL(); - } - } - } - return NULL; -} -void CXFA_FFText::FWLToClient(FX_FLOAT& fx, FX_FLOAT& fy) { - CFX_RectF rtWidget; - GetRectWithoutRotate(rtWidget); - fx -= rtWidget.left; - fy -= rtWidget.top; -} diff --git a/xfa/src/fxfa/app/xfa_fftext.h b/xfa/src/fxfa/app/xfa_fftext.h deleted file mode 100644 index 673d157fd3..0000000000 --- a/xfa/src/fxfa/app/xfa_fftext.h +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXFA_APP_XFA_FFTEXT_H_ -#define XFA_SRC_FXFA_APP_XFA_FFTEXT_H_ - -#include "xfa/src/fxfa/app/xfa_ffdraw.h" - -class CXFA_FFText : public CXFA_FFDraw { - public: - CXFA_FFText(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc); - virtual ~CXFA_FFText(); - virtual FX_BOOL OnLButtonDown(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy); - virtual FX_BOOL OnLButtonUp(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy); - virtual FX_BOOL OnMouseMove(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy); - virtual FX_DWORD OnHitTest(FX_FLOAT fx, FX_FLOAT fy); - virtual void RenderWidget(CFX_Graphics* pGS, - CFX_Matrix* pMatrix = NULL, - FX_DWORD dwStatus = 0, - int32_t iRotate = 0); - virtual FX_BOOL IsLoaded(); - virtual FX_BOOL PerformLayout(); - - private: - virtual const FX_WCHAR* GetLinkURLAtPoint(FX_FLOAT fx, FX_FLOAT fy); - void FWLToClient(FX_FLOAT& fx, FX_FLOAT& fy); -}; - -#endif // XFA_SRC_FXFA_APP_XFA_FFTEXT_H_ diff --git a/xfa/src/fxfa/app/xfa_fftextedit.cpp b/xfa/src/fxfa/app/xfa_fftextedit.cpp deleted file mode 100644 index f828939327..0000000000 --- a/xfa/src/fxfa/app/xfa_fftextedit.cpp +++ /dev/null @@ -1,796 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fxfa/app/xfa_fftextedit.h" - -#include - -#include "xfa/include/fwl/basewidget/fwl_datetimepicker.h" -#include "xfa/include/fwl/basewidget/fwl_edit.h" -#include "xfa/include/fwl/lightwidget/datetimepicker.h" -#include "xfa/include/fwl/lightwidget/edit.h" -#include "xfa/src/fxfa/app/xfa_ffapp.h" -#include "xfa/src/fxfa/app/xfa_ffdoc.h" -#include "xfa/src/fxfa/app/xfa_ffdocview.h" -#include "xfa/src/fxfa/app/xfa_fffield.h" -#include "xfa/src/fxfa/app/xfa_ffpageview.h" -#include "xfa/src/fxfa/app/xfa_ffwidget.h" -#include "xfa/src/fxfa/app/xfa_fwladapter.h" -#include "xfa/src/fxfa/app/xfa_textlayout.h" -#include "xfa/src/fxfa/parser/xfa_localevalue.h" - -CXFA_FFTextEdit::CXFA_FFTextEdit(CXFA_FFPageView* pPageView, - CXFA_WidgetAcc* pDataAcc) - : CXFA_FFField(pPageView, pDataAcc), m_pOldDelegate(NULL) {} -CXFA_FFTextEdit::~CXFA_FFTextEdit() { - if (m_pNormalWidget) { - IFWL_Widget* pWidget = m_pNormalWidget->GetWidget(); - IFWL_NoteDriver* pNoteDriver = FWL_GetApp()->GetNoteDriver(); - pNoteDriver->UnregisterEventTarget(pWidget); - } -} -FX_BOOL CXFA_FFTextEdit::LoadWidget() { - CFWL_Edit* pFWLEdit = CFWL_Edit::Create(); - pFWLEdit->Initialize(); - m_pNormalWidget = pFWLEdit; - IFWL_Widget* pWidget = m_pNormalWidget->GetWidget(); - m_pNormalWidget->SetPrivateData(pWidget, this, NULL); - IFWL_NoteDriver* pNoteDriver = FWL_GetApp()->GetNoteDriver(); - pNoteDriver->RegisterEventTarget(pWidget, pWidget); - m_pOldDelegate = m_pNormalWidget->SetDelegate(this); - m_pNormalWidget->LockUpdate(); - UpdateWidgetProperty(); - CFX_WideString wsText; - m_pDataAcc->GetValue(wsText, XFA_VALUEPICTURE_Display); - pFWLEdit->SetText(wsText); - m_pNormalWidget->UnlockUpdate(); - return CXFA_FFField::LoadWidget(); -} -void CXFA_FFTextEdit::UpdateWidgetProperty() { - CFWL_Edit* pWidget = (CFWL_Edit*)m_pNormalWidget; - if (!pWidget) { - return; - } - FX_DWORD dwStyle = 0; - FX_DWORD dwExtendedStyle = FWL_STYLEEXT_EDT_ShowScrollbarFocus | - FWL_STYLEEXT_EDT_OuterScrollbar | - FWL_STYLEEXT_EDT_LastLineHeight; - dwExtendedStyle |= UpdateUIProperty(); - if (m_pDataAcc->IsMultiLine()) { - dwExtendedStyle |= FWL_STYLEEXT_EDT_MultiLine | FWL_STYLEEXT_EDT_WantReturn; - if (m_pDataAcc->GetVerticalScrollPolicy() != XFA_ATTRIBUTEENUM_Off) { - dwStyle |= FWL_WGTSTYLE_VScroll; - dwExtendedStyle |= FWL_STYLEEXT_EDT_AutoVScroll; - } - } else if (m_pDataAcc->GetHorizontalScrollPolicy() != XFA_ATTRIBUTEENUM_Off) { - dwExtendedStyle |= FWL_STYLEEXT_EDT_AutoHScroll; - } - if (m_pDataAcc->GetAccess() != XFA_ATTRIBUTEENUM_Open || - !m_pDataAcc->GetDoc()->GetXFADoc()->IsInteractive()) { - dwExtendedStyle |= FWL_STYLEEXT_EDT_ReadOnly; - dwExtendedStyle |= FWL_STYLEEXT_EDT_MultiLine; - } - XFA_ELEMENT eType = XFA_ELEMENT_UNKNOWN; - int32_t iMaxChars = m_pDataAcc->GetMaxChars(eType); - if (eType == XFA_ELEMENT_ExData) { - iMaxChars = 0; - } - int32_t iNumCells = m_pDataAcc->GetNumberOfCells(); - if (iNumCells == 0) { - dwExtendedStyle |= FWL_STYLEEXT_EDT_CombText; - pWidget->SetLimit(iMaxChars > 0 ? iMaxChars : 1); - } else if (iNumCells > 0) { - dwExtendedStyle |= FWL_STYLEEXT_EDT_CombText; - pWidget->SetLimit(iNumCells); - } else { - pWidget->SetLimit(iMaxChars); - } - dwExtendedStyle |= GetAlignment(); - m_pNormalWidget->ModifyStyles(dwStyle, 0xFFFFFFFF); - m_pNormalWidget->ModifyStylesEx(dwExtendedStyle, 0xFFFFFFFF); -} -FX_BOOL CXFA_FFTextEdit::OnLButtonDown(FX_DWORD dwFlags, - FX_FLOAT fx, - FX_FLOAT fy) { - if (!PtInActiveRect(fx, fy)) { - return FALSE; - } - if (!IsFocused()) { - m_dwStatus |= XFA_WIDGETSTATUS_Focused; - UpdateFWLData(); - AddInvalidateRect(); - } - SetButtonDown(TRUE); - CFWL_MsgMouse ms; - ms.m_dwCmd = FWL_MSGMOUSECMD_LButtonDown; - ms.m_dwFlags = dwFlags; - ms.m_fx = fx; - ms.m_fy = fy; - ms.m_pDstTarget = m_pNormalWidget->m_pIface; - FWLToClient(ms.m_fx, ms.m_fy); - TranslateFWLMessage(&ms); - return TRUE; -} -FX_BOOL CXFA_FFTextEdit::OnRButtonDown(FX_DWORD dwFlags, - FX_FLOAT fx, - FX_FLOAT fy) { - if (m_pDataAcc->GetAccess() != XFA_ATTRIBUTEENUM_Open) { - return FALSE; - } - if (!PtInActiveRect(fx, fy)) { - return FALSE; - } - if (!IsFocused()) { - m_dwStatus |= XFA_WIDGETSTATUS_Focused; - UpdateFWLData(); - AddInvalidateRect(); - } - SetButtonDown(TRUE); - CFWL_MsgMouse ms; - ms.m_dwCmd = FWL_MSGMOUSECMD_RButtonDown; - ms.m_dwFlags = dwFlags; - ms.m_fx = fx; - ms.m_fy = fy; - FWLToClient(ms.m_fx, ms.m_fy); - TranslateFWLMessage(&ms); - return TRUE; -} -FX_BOOL CXFA_FFTextEdit::OnRButtonUp(FX_DWORD dwFlags, - FX_FLOAT fx, - FX_FLOAT fy) { - if (!CXFA_FFField::OnRButtonUp(dwFlags, fx, fy)) - return FALSE; - - GetDoc()->GetDocProvider()->PopupMenu(this, CFX_PointF(fx, fy), nullptr); - return TRUE; -} -FX_BOOL CXFA_FFTextEdit::OnSetFocus(CXFA_FFWidget* pOldWidget) { - m_dwStatus &= ~XFA_WIDGETSTATUS_TextEditValueChanged; - if (!IsFocused()) { - m_dwStatus |= XFA_WIDGETSTATUS_Focused; - UpdateFWLData(); - AddInvalidateRect(); - } - CXFA_FFWidget::OnSetFocus(pOldWidget); - CFWL_MsgSetFocus ms; - ms.m_pDstTarget = m_pNormalWidget->m_pIface; - ms.m_pSrcTarget = NULL; - TranslateFWLMessage(&ms); - return TRUE; -} -FX_BOOL CXFA_FFTextEdit::OnKillFocus(CXFA_FFWidget* pNewWidget) { - CFWL_MsgKillFocus ms; - ms.m_pDstTarget = m_pNormalWidget->m_pIface; - ms.m_pSrcTarget = NULL; - TranslateFWLMessage(&ms); - m_dwStatus &= ~XFA_WIDGETSTATUS_Focused; - SetEditScrollOffset(); - ProcessCommittedData(); - UpdateFWLData(); - AddInvalidateRect(); - CXFA_FFWidget::OnKillFocus(pNewWidget); - m_dwStatus &= ~XFA_WIDGETSTATUS_TextEditValueChanged; - return TRUE; -} -FX_BOOL CXFA_FFTextEdit::CommitData() { - CFX_WideString wsText; - ((CFWL_Edit*)m_pNormalWidget)->GetText(wsText); - if (m_pDataAcc->SetValue(wsText, XFA_VALUEPICTURE_Edit)) { - m_pDataAcc->UpdateUIDisplay(this); - return TRUE; - } - ValidateNumberField(wsText); - return FALSE; -} -void CXFA_FFTextEdit::ValidateNumberField(const CFX_WideString& wsText) { - CXFA_WidgetAcc* pAcc = GetDataAcc(); - if (pAcc && pAcc->GetUIType() == XFA_ELEMENT_NumericEdit) { - IXFA_AppProvider* pAppProvider = GetApp()->GetAppProvider(); - if (pAppProvider) { - CFX_WideString wsTitle; - pAppProvider->LoadString(XFA_IDS_AppName, wsTitle); - CFX_WideString wsMessage; - CFX_WideString wsError; - pAppProvider->LoadString(XFA_IDS_ValidateNumberError, wsError); - CFX_WideString wsSomField; - pAcc->GetNode()->GetSOMExpression(wsSomField); - wsMessage.Format(wsError, (const FX_WCHAR*)wsText, - (const FX_WCHAR*)wsSomField); - pAppProvider->MsgBox(wsMessage, wsTitle, XFA_MBICON_Error, XFA_MB_OK); - } - } -} -FX_BOOL CXFA_FFTextEdit::IsDataChanged() { - return (m_dwStatus & XFA_WIDGETSTATUS_TextEditValueChanged) != 0; -} -FX_DWORD CXFA_FFTextEdit::GetAlignment() { - FX_DWORD dwExtendedStyle = 0; - if (CXFA_Para para = m_pDataAcc->GetPara()) { - int32_t iHorz = para.GetHorizontalAlign(); - switch (iHorz) { - case XFA_ATTRIBUTEENUM_Center: - dwExtendedStyle |= FWL_STYLEEXT_EDT_HCenter; - break; - case XFA_ATTRIBUTEENUM_Justify: - dwExtendedStyle |= FWL_STYLEEXT_EDT_Justified; - break; - case XFA_ATTRIBUTEENUM_JustifyAll: - break; - case XFA_ATTRIBUTEENUM_Radix: - break; - case XFA_ATTRIBUTEENUM_Right: - dwExtendedStyle |= FWL_STYLEEXT_EDT_HFar; - break; - default: - dwExtendedStyle |= FWL_STYLEEXT_EDT_HNear; - break; - } - int32_t iVert = para.GetVerticalAlign(); - switch (iVert) { - case XFA_ATTRIBUTEENUM_Middle: - dwExtendedStyle |= FWL_STYLEEXT_EDT_VCenter; - break; - case XFA_ATTRIBUTEENUM_Bottom: - dwExtendedStyle |= FWL_STYLEEXT_EDT_VFar; - break; - default: - dwExtendedStyle |= FWL_STYLEEXT_EDT_VNear; - break; - } - } - return dwExtendedStyle; -} -FX_BOOL CXFA_FFTextEdit::UpdateFWLData() { - if (!m_pNormalWidget) { - return FALSE; - } - XFA_VALUEPICTURE eType = XFA_VALUEPICTURE_Display; - if (IsFocused()) { - eType = XFA_VALUEPICTURE_Edit; - } - FX_BOOL bUpdate = FALSE; - if (m_pDataAcc->GetUIType() == XFA_ELEMENT_TextEdit && - m_pDataAcc->GetNumberOfCells() < 0) { - XFA_ELEMENT elementType = XFA_ELEMENT_UNKNOWN; - int32_t iMaxChars = m_pDataAcc->GetMaxChars(elementType); - if (elementType == XFA_ELEMENT_ExData) { - iMaxChars = eType == XFA_VALUEPICTURE_Edit ? iMaxChars : 0; - } - if (((CFWL_Edit*)m_pNormalWidget)->GetLimit() != iMaxChars) { - ((CFWL_Edit*)m_pNormalWidget)->SetLimit(iMaxChars); - bUpdate = TRUE; - } - } - if (m_pDataAcc->GetUIType() == XFA_ELEMENT_Barcode) { - int32_t nDataLen = 0; - if (eType == XFA_VALUEPICTURE_Edit) - m_pDataAcc->GetBarcodeAttribute_DataLength(nDataLen); - static_cast(m_pNormalWidget)->SetLimit(nDataLen); - bUpdate = TRUE; - } - CFX_WideString wsText; - m_pDataAcc->GetValue(wsText, eType); - CFX_WideString wsOldText; - ((CFWL_Edit*)m_pNormalWidget)->GetText(wsOldText); - if (wsText != wsOldText || (eType == XFA_VALUEPICTURE_Edit && bUpdate)) { - ((CFWL_Edit*)m_pNormalWidget)->SetText(wsText); - bUpdate = TRUE; - } - if (bUpdate) { - m_pNormalWidget->Update(); - } - return TRUE; -} -FX_BOOL CXFA_FFTextEdit::CanUndo() { - return ((CFWL_Edit*)m_pNormalWidget)->CanUndo(); -} -FX_BOOL CXFA_FFTextEdit::CanRedo() { - return ((CFWL_Edit*)m_pNormalWidget)->CanRedo(); -} -FX_BOOL CXFA_FFTextEdit::Undo() { - return ((CFWL_Edit*)m_pNormalWidget)->Undo(); -} -FX_BOOL CXFA_FFTextEdit::Redo() { - return ((CFWL_Edit*)m_pNormalWidget)->Redo(); -} -FX_BOOL CXFA_FFTextEdit::CanCopy() { - int32_t nCount = ((CFWL_Edit*)m_pNormalWidget)->CountSelRanges(); - return nCount > 0; -} -FX_BOOL CXFA_FFTextEdit::CanCut() { - if (m_pNormalWidget->GetStylesEx() & FWL_STYLEEXT_EDT_ReadOnly) { - return FALSE; - } - int32_t nCount = ((CFWL_Edit*)m_pNormalWidget)->CountSelRanges(); - return nCount > 0; -} -FX_BOOL CXFA_FFTextEdit::CanPaste() { - return m_pDataAcc->GetAccess() == XFA_ATTRIBUTEENUM_Open; -} -FX_BOOL CXFA_FFTextEdit::CanSelectAll() { - return ((CFWL_Edit*)m_pNormalWidget)->GetTextLength() > 0; -} -FX_BOOL CXFA_FFTextEdit::Copy(CFX_WideString& wsCopy) { - return ((CFWL_Edit*)m_pNormalWidget)->Copy(wsCopy); -} -FX_BOOL CXFA_FFTextEdit::Cut(CFX_WideString& wsCut) { - return ((CFWL_Edit*)m_pNormalWidget)->Cut(wsCut); -} -FX_BOOL CXFA_FFTextEdit::Paste(const CFX_WideString& wsPaste) { - return ((CFWL_Edit*)m_pNormalWidget)->Paste(wsPaste); -} -FX_BOOL CXFA_FFTextEdit::SelectAll() { - int32_t nCount = ((CFWL_Edit*)m_pNormalWidget)->GetTextLength(); - return ((CFWL_Edit*)m_pNormalWidget)->AddSelRange(0, nCount); -} -FX_BOOL CXFA_FFTextEdit::Delete() { - return ((CFWL_Edit*)m_pNormalWidget)->Delete(); -} -FX_BOOL CXFA_FFTextEdit::DeSelect() { - return ((CFWL_Edit*)m_pNormalWidget)->ClearSelections(); -} -FX_BOOL CXFA_FFTextEdit::GetSuggestWords( - CFX_PointF pointf, - std::vector& sSuggest) { - if (m_pDataAcc->GetUIType() != XFA_ELEMENT_TextEdit) { - return FALSE; - } - FWLToClient(pointf.x, pointf.y); - return ((CFWL_Edit*)m_pNormalWidget)->GetSuggestWords(pointf, sSuggest); -} -FX_BOOL CXFA_FFTextEdit::ReplaceSpellCheckWord( - CFX_PointF pointf, - const CFX_ByteStringC& bsReplace) { - if (m_pDataAcc->GetUIType() != XFA_ELEMENT_TextEdit) { - return FALSE; - } - FWLToClient(pointf.x, pointf.y); - return ((CFWL_Edit*)m_pNormalWidget) - ->ReplaceSpellCheckWord(pointf, bsReplace); -} -void CXFA_FFTextEdit::OnTextChanged(IFWL_Widget* pWidget, - const CFX_WideString& wsChanged, - const CFX_WideString& wsPrevText) { - m_dwStatus |= XFA_WIDGETSTATUS_TextEditValueChanged; - CXFA_EventParam eParam; - eParam.m_eType = XFA_EVENT_Change; - eParam.m_wsChange = wsChanged; - eParam.m_pTarget = m_pDataAcc; - eParam.m_wsPrevText = wsPrevText; - CFWL_Edit* pEdit = ((CFWL_Edit*)m_pNormalWidget); - if (m_pDataAcc->GetUIType() == XFA_ELEMENT_DateTimeEdit) { - CFWL_DateTimePicker* pDateTime = (CFWL_DateTimePicker*)pEdit; - pDateTime->GetEditText(eParam.m_wsNewText); - int32_t iSels = pDateTime->CountSelRanges(); - if (iSels) { - eParam.m_iSelEnd = pDateTime->GetSelRange(0, eParam.m_iSelStart); - } - } else { - pEdit->GetText(eParam.m_wsNewText); - int32_t iSels = pEdit->CountSelRanges(); - if (iSels) { - eParam.m_iSelEnd = pEdit->GetSelRange(0, eParam.m_iSelStart); - } - } - m_pDataAcc->ProcessEvent(XFA_ATTRIBUTEENUM_Change, &eParam); -} -void CXFA_FFTextEdit::OnTextFull(IFWL_Widget* pWidget) { - CXFA_EventParam eParam; - eParam.m_eType = XFA_EVENT_Full; - eParam.m_pTarget = m_pDataAcc; - m_pDataAcc->ProcessEvent(XFA_ATTRIBUTEENUM_Full, &eParam); -} - -FX_BOOL CXFA_FFTextEdit::CheckWord(const CFX_ByteStringC& sWord) { - if (sWord.IsEmpty() || m_pDataAcc->GetUIType() != XFA_ELEMENT_TextEdit) { - return TRUE; - } - return GetDoc()->GetDocProvider()->CheckWord(GetDoc(), sWord); -} -FX_BOOL CXFA_FFTextEdit::GetSuggestWords( - const CFX_ByteStringC& sWord, - std::vector& sSuggest) { - if (m_pDataAcc->GetUIType() != XFA_ELEMENT_TextEdit) { - return FALSE; - } - return GetDoc()->GetDocProvider()->GetSuggestWords(GetDoc(), sWord, sSuggest); -} -int32_t CXFA_FFTextEdit::OnProcessMessage(CFWL_Message* pMessage) { - return m_pOldDelegate->OnProcessMessage(pMessage); -} -FWL_ERR CXFA_FFTextEdit::OnProcessEvent(CFWL_Event* pEvent) { - CXFA_FFField::OnProcessEvent(pEvent); - FX_DWORD dwEventID = pEvent->GetClassID(); - switch (dwEventID) { - case FWL_EVTHASH_EDT_TextChanged: { - CFWL_EvtEdtTextChanged* event = (CFWL_EvtEdtTextChanged*)pEvent; - CFX_WideString wsChange; - OnTextChanged(m_pNormalWidget->GetWidget(), wsChange, event->wsPrevText); - break; - } - case FWL_EVTHASH_EDT_TextFull: { - OnTextFull(m_pNormalWidget->GetWidget()); - break; - } - case FWL_EVTHASH_EDT_CheckWord: { - CFX_WideString wstr(L"FWL_EVENT_DTP_SelectChanged"); - CFWL_EvtEdtCheckWord* event = (CFWL_EvtEdtCheckWord*)pEvent; - event->bCheckWord = CheckWord(event->bsWord); - break; - } - case FWL_EVTHASH_EDT_GetSuggestWords: { - CFWL_EvtEdtGetSuggestWords* event = (CFWL_EvtEdtGetSuggestWords*)pEvent; - event->bSuggestWords = - GetSuggestWords(event->bsWord, event->bsArraySuggestWords); - break; - } - default: {} - } - return m_pOldDelegate->OnProcessEvent(pEvent); -} -FWL_ERR CXFA_FFTextEdit::OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - return m_pOldDelegate->OnDrawWidget(pGraphics, pMatrix); -} -CXFA_FFNumericEdit::CXFA_FFNumericEdit(CXFA_FFPageView* pPageView, - CXFA_WidgetAcc* pDataAcc) - : CXFA_FFTextEdit(pPageView, pDataAcc) {} -CXFA_FFNumericEdit::~CXFA_FFNumericEdit() {} -FX_BOOL CXFA_FFNumericEdit::LoadWidget() { - CFWL_Edit* pWidget = CFWL_Edit::Create(); - pWidget->Initialize(); - m_pNormalWidget = (CFWL_Widget*)pWidget; - IFWL_Widget* pIWidget = m_pNormalWidget->GetWidget(); - m_pNormalWidget->SetPrivateData(pIWidget, this, NULL); - IFWL_NoteDriver* pNoteDriver = FWL_GetApp()->GetNoteDriver(); - pNoteDriver->RegisterEventTarget(pIWidget, pIWidget); - m_pOldDelegate = m_pNormalWidget->SetDelegate(this); - m_pNormalWidget->LockUpdate(); - CFX_WideString wsText; - m_pDataAcc->GetValue(wsText, XFA_VALUEPICTURE_Display); - pWidget->SetText(wsText); - UpdateWidgetProperty(); - m_pNormalWidget->UnlockUpdate(); - return CXFA_FFField::LoadWidget(); -} -void CXFA_FFNumericEdit::UpdateWidgetProperty() { - CFWL_Edit* pWidget = (CFWL_Edit*)m_pNormalWidget; - if (!pWidget) { - return; - } - FX_DWORD dwExtendedStyle = - FWL_STYLEEXT_EDT_ShowScrollbarFocus | FWL_STYLEEXT_EDT_OuterScrollbar | - FWL_STYLEEXT_EDT_Validate | FWL_STYLEEXT_EDT_Number | - FWL_STYLEEXT_EDT_LastLineHeight; - dwExtendedStyle |= UpdateUIProperty(); - if (m_pDataAcc->GetHorizontalScrollPolicy() != XFA_ATTRIBUTEENUM_Off) { - dwExtendedStyle |= FWL_STYLEEXT_EDT_AutoHScroll; - } - int32_t iNumCells = m_pDataAcc->GetNumberOfCells(); - if (iNumCells > 0) { - dwExtendedStyle |= FWL_STYLEEXT_EDT_CombText; - pWidget->SetLimit(iNumCells); - } - dwExtendedStyle |= GetAlignment(); - if (m_pDataAcc->GetAccess() != XFA_ATTRIBUTEENUM_Open || - !m_pDataAcc->GetDoc()->GetXFADoc()->IsInteractive()) { - dwExtendedStyle |= FWL_STYLEEXT_EDT_ReadOnly; - } - m_pNormalWidget->ModifyStylesEx(dwExtendedStyle, 0xFFFFFFFF); -} -FWL_ERR CXFA_FFNumericEdit::OnProcessEvent(CFWL_Event* pEvent) { - FX_DWORD dwEventID = pEvent->GetClassID(); - if (dwEventID == FWL_EVTHASH_EDT_Validate) { - CFWL_EvtEdtValidate* event = (CFWL_EvtEdtValidate*)pEvent; - CFX_WideString wsChange = event->wsInsert; - event->bValidate = OnValidate(m_pNormalWidget->GetWidget(), wsChange); - return event->bValidate; - } else { - return CXFA_FFTextEdit::OnProcessEvent(pEvent); - } -} -FX_BOOL CXFA_FFNumericEdit::OnValidate(IFWL_Widget* pWidget, - CFX_WideString& wsText) { - CFX_WideString wsPattern; - m_pDataAcc->GetPictureContent(wsPattern, XFA_VALUEPICTURE_Edit); - if (!wsPattern.IsEmpty()) { - return TRUE; - } - int32_t iLeads = 0; - m_pDataAcc->GetLeadDigits(iLeads); - int32_t iFracs = 0; - m_pDataAcc->GetFracDigits(iFracs); - CFX_WideString wsFormat; - CXFA_LocaleValue widgetValue = XFA_GetLocaleValue(m_pDataAcc); - widgetValue.GetNumbericFormat(wsFormat, iLeads, iFracs); - return widgetValue.ValidateNumericTemp(wsText, wsFormat, - m_pDataAcc->GetLocal()); -} -CXFA_FFPasswordEdit::CXFA_FFPasswordEdit(CXFA_FFPageView* pPageView, - CXFA_WidgetAcc* pDataAcc) - : CXFA_FFTextEdit(pPageView, pDataAcc) {} -CXFA_FFPasswordEdit::~CXFA_FFPasswordEdit() {} -FX_BOOL CXFA_FFPasswordEdit::LoadWidget() { - CFWL_Edit* pWidget = CFWL_Edit::Create(); - pWidget->Initialize(); - m_pNormalWidget = (CFWL_Widget*)pWidget; - IFWL_Widget* pIWidget = m_pNormalWidget->GetWidget(); - m_pNormalWidget->SetPrivateData(pIWidget, this, NULL); - IFWL_NoteDriver* pNoteDriver = FWL_GetApp()->GetNoteDriver(); - pNoteDriver->RegisterEventTarget(pIWidget, pIWidget); - m_pOldDelegate = m_pNormalWidget->SetDelegate(this); - m_pNormalWidget->LockUpdate(); - CFX_WideString wsText; - m_pDataAcc->GetValue(wsText, XFA_VALUEPICTURE_Display); - pWidget->SetText(wsText); - UpdateWidgetProperty(); - m_pNormalWidget->UnlockUpdate(); - return CXFA_FFField::LoadWidget(); -} -void CXFA_FFPasswordEdit::UpdateWidgetProperty() { - CFWL_Edit* pWidget = (CFWL_Edit*)m_pNormalWidget; - if (!pWidget) { - return; - } - FX_DWORD dwExtendedStyle = - FWL_STYLEEXT_EDT_ShowScrollbarFocus | FWL_STYLEEXT_EDT_OuterScrollbar | - FWL_STYLEEXT_EDT_Password | FWL_STYLEEXT_EDT_LastLineHeight; - dwExtendedStyle |= UpdateUIProperty(); - CFX_WideString wsPassWord; - m_pDataAcc->GetPasswordChar(wsPassWord); - if (!wsPassWord.IsEmpty()) { - pWidget->SetAliasChar(wsPassWord.GetAt(0)); - } - if (m_pDataAcc->GetHorizontalScrollPolicy() != XFA_ATTRIBUTEENUM_Off) { - dwExtendedStyle |= FWL_STYLEEXT_EDT_AutoHScroll; - } - if (m_pDataAcc->GetAccess() != XFA_ATTRIBUTEENUM_Open || - !m_pDataAcc->GetDoc()->GetXFADoc()->IsInteractive()) { - dwExtendedStyle |= FWL_STYLEEXT_EDT_ReadOnly; - } - dwExtendedStyle |= GetAlignment(); - m_pNormalWidget->ModifyStylesEx(dwExtendedStyle, 0xFFFFFFFF); -} -CXFA_FFDateTimeEdit::CXFA_FFDateTimeEdit(CXFA_FFPageView* pPageView, - CXFA_WidgetAcc* pDataAcc) - : CXFA_FFTextEdit(pPageView, pDataAcc) {} - -CXFA_FFDateTimeEdit::~CXFA_FFDateTimeEdit() {} - -FX_BOOL CXFA_FFDateTimeEdit::GetBBox(CFX_RectF& rtBox, - FX_DWORD dwStatus, - FX_BOOL bDrawFocus) { - if (bDrawFocus) - return FALSE; - return CXFA_FFWidget::GetBBox(rtBox, dwStatus); -} - -FX_BOOL CXFA_FFDateTimeEdit::PtInActiveRect(FX_FLOAT fx, FX_FLOAT fy) { - if (!m_pNormalWidget) { - return FALSE; - } - CFX_RectF rtWidget; - ((CFWL_DateTimePicker*)m_pNormalWidget)->GetBBox(rtWidget); - if (rtWidget.Contains(fx, fy)) { - return TRUE; - } - return FALSE; -} -FX_BOOL CXFA_FFDateTimeEdit::LoadWidget() { - CFWL_DateTimePicker* pWidget = CFWL_DateTimePicker::Create(); - pWidget->Initialize(); - m_pNormalWidget = (CFWL_Widget*)pWidget; - IFWL_Widget* pIWidget = m_pNormalWidget->GetWidget(); - m_pNormalWidget->SetPrivateData(pIWidget, this, NULL); - IFWL_NoteDriver* pNoteDriver = FWL_GetApp()->GetNoteDriver(); - pNoteDriver->RegisterEventTarget(pIWidget, pIWidget); - m_pOldDelegate = m_pNormalWidget->SetDelegate(this); - m_pNormalWidget->LockUpdate(); - CFX_WideString wsText; - m_pDataAcc->GetValue(wsText, XFA_VALUEPICTURE_Display); - pWidget->SetEditText(wsText); - if (CXFA_Value value = m_pDataAcc->GetFormValue()) { - switch (value.GetChildValueClassID()) { - case XFA_ELEMENT_Date: { - if (!wsText.IsEmpty()) { - CXFA_LocaleValue lcValue = XFA_GetLocaleValue(m_pDataAcc); - CFX_Unitime date = lcValue.GetDate(); - if ((FX_UNITIME)date != 0) { - pWidget->SetCurSel(date.GetYear(), date.GetMonth(), date.GetDay()); - } - } - } break; - default: - break; - } - } - UpdateWidgetProperty(); - m_pNormalWidget->UnlockUpdate(); - return CXFA_FFField::LoadWidget(); -} -void CXFA_FFDateTimeEdit::UpdateWidgetProperty() { - CFWL_DateTimePicker* pWidget = (CFWL_DateTimePicker*)m_pNormalWidget; - if (!pWidget) { - return; - } - FX_DWORD dwExtendedStyle = FWL_STYLEEXT_DTP_ShortDateFormat; - dwExtendedStyle |= UpdateUIProperty(); - dwExtendedStyle |= GetAlignment(); - m_pNormalWidget->ModifyStylesEx(dwExtendedStyle, 0xFFFFFFFF); - FX_DWORD dwEditStyles = FWL_STYLEEXT_EDT_LastLineHeight; - int32_t iNumCells = m_pDataAcc->GetNumberOfCells(); - if (iNumCells > 0) { - dwEditStyles |= FWL_STYLEEXT_EDT_CombText; - pWidget->SetEditLimit(iNumCells); - } - if (m_pDataAcc->GetAccess() != XFA_ATTRIBUTEENUM_Open || - !m_pDataAcc->GetDoc()->GetXFADoc()->IsInteractive()) { - dwEditStyles |= FWL_STYLEEXT_EDT_ReadOnly; - } - if (m_pDataAcc->GetHorizontalScrollPolicy() != XFA_ATTRIBUTEENUM_Off) { - dwEditStyles |= FWL_STYLEEXT_EDT_AutoHScroll; - } - pWidget->ModifyEditStylesEx(dwEditStyles, 0xFFFFFFFF); -} -FX_DWORD CXFA_FFDateTimeEdit::GetAlignment() { - FX_DWORD dwExtendedStyle = 0; - if (CXFA_Para para = m_pDataAcc->GetPara()) { - int32_t iHorz = para.GetHorizontalAlign(); - switch (iHorz) { - case XFA_ATTRIBUTEENUM_Center: - dwExtendedStyle |= FWL_STYLEEXT_DTP_EditHCenter; - break; - case XFA_ATTRIBUTEENUM_Justify: - dwExtendedStyle |= FWL_STYLEEXT_DTP_EditJustified; - break; - case XFA_ATTRIBUTEENUM_JustifyAll: - break; - case XFA_ATTRIBUTEENUM_Radix: - break; - case XFA_ATTRIBUTEENUM_Right: - dwExtendedStyle |= FWL_STYLEEXT_DTP_EditHFar; - break; - default: - dwExtendedStyle |= FWL_STYLEEXT_DTP_EditHNear; - break; - } - int32_t iVert = para.GetVerticalAlign(); - switch (iVert) { - case XFA_ATTRIBUTEENUM_Middle: - dwExtendedStyle |= FWL_STYLEEXT_DTP_EditVCenter; - break; - case XFA_ATTRIBUTEENUM_Bottom: - dwExtendedStyle |= FWL_STYLEEXT_DTP_EditVFar; - break; - default: - dwExtendedStyle |= FWL_STYLEEXT_DTP_EditVNear; - break; - } - } - return dwExtendedStyle; -} -FX_BOOL CXFA_FFDateTimeEdit::CommitData() { - CFX_WideString wsText; - ((CFWL_DateTimePicker*)m_pNormalWidget)->GetEditText(wsText); - if (m_pDataAcc->SetValue(wsText, XFA_VALUEPICTURE_Edit)) { - m_pDataAcc->UpdateUIDisplay(this); - return TRUE; - } - return FALSE; -} -FX_BOOL CXFA_FFDateTimeEdit::UpdateFWLData() { - if (!m_pNormalWidget) { - return FALSE; - } - XFA_VALUEPICTURE eType = XFA_VALUEPICTURE_Display; - if (IsFocused()) { - eType = XFA_VALUEPICTURE_Edit; - } - CFX_WideString wsText; - m_pDataAcc->GetValue(wsText, eType); - ((CFWL_DateTimePicker*)m_pNormalWidget)->SetEditText(wsText); - if (IsFocused() && !wsText.IsEmpty()) { - CXFA_LocaleValue lcValue = XFA_GetLocaleValue(m_pDataAcc); - CFX_Unitime date = lcValue.GetDate(); - if (lcValue.IsValid()) { - if ((FX_UNITIME)date != 0) { - ((CFWL_DateTimePicker*)m_pNormalWidget) - ->SetCurSel(date.GetYear(), date.GetMonth(), date.GetDay()); - } - } - } - m_pNormalWidget->Update(); - return TRUE; -} -FX_BOOL CXFA_FFDateTimeEdit::IsDataChanged() { - if (m_dwStatus & XFA_WIDGETSTATUS_TextEditValueChanged) { - return TRUE; - } - CFX_WideString wsText; - ((CFWL_DateTimePicker*)m_pNormalWidget)->GetEditText(wsText); - CFX_WideString wsOldValue; - m_pDataAcc->GetValue(wsOldValue, XFA_VALUEPICTURE_Edit); - return wsOldValue != wsText; -} -FX_BOOL CXFA_FFDateTimeEdit::CanUndo() { - return ((CFWL_DateTimePicker*)m_pNormalWidget)->CanUndo(); -} -FX_BOOL CXFA_FFDateTimeEdit::CanRedo() { - return ((CFWL_DateTimePicker*)m_pNormalWidget)->CanRedo(); -} -FX_BOOL CXFA_FFDateTimeEdit::Undo() { - return ((CFWL_DateTimePicker*)m_pNormalWidget)->Undo(); -} -FX_BOOL CXFA_FFDateTimeEdit::Redo() { - return ((CFWL_DateTimePicker*)m_pNormalWidget)->Redo(); -} -FX_BOOL CXFA_FFDateTimeEdit::CanCopy() { - return ((CFWL_DateTimePicker*)m_pNormalWidget)->CanCopy(); -} -FX_BOOL CXFA_FFDateTimeEdit::CanCut() { - if (m_pDataAcc->GetAccess() != XFA_ATTRIBUTEENUM_Open) { - return FALSE; - } - return ((CFWL_DateTimePicker*)m_pNormalWidget)->CanCut(); -} -FX_BOOL CXFA_FFDateTimeEdit::CanPaste() { - return m_pDataAcc->GetAccess() == XFA_ATTRIBUTEENUM_Open; -} -FX_BOOL CXFA_FFDateTimeEdit::CanSelectAll() { - return ((CFWL_DateTimePicker*)m_pNormalWidget)->CanSelectAll(); -} -FX_BOOL CXFA_FFDateTimeEdit::Copy(CFX_WideString& wsCopy) { - return ((CFWL_DateTimePicker*)m_pNormalWidget)->Copy(wsCopy); -} -FX_BOOL CXFA_FFDateTimeEdit::Cut(CFX_WideString& wsCut) { - return ((CFWL_DateTimePicker*)m_pNormalWidget)->Cut(wsCut); -} -FX_BOOL CXFA_FFDateTimeEdit::Paste(const CFX_WideString& wsPaste) { - return ((CFWL_DateTimePicker*)m_pNormalWidget)->Paste(wsPaste); -} -FX_BOOL CXFA_FFDateTimeEdit::SelectAll() { - return ((CFWL_DateTimePicker*)m_pNormalWidget)->SelectAll(); -} -FX_BOOL CXFA_FFDateTimeEdit::Delete() { - return ((CFWL_DateTimePicker*)m_pNormalWidget)->Delete(); -} -FX_BOOL CXFA_FFDateTimeEdit::DeSelect() { - return ((CFWL_DateTimePicker*)m_pNormalWidget)->DeSelect(); -} -void CXFA_FFDateTimeEdit::OnSelectChanged(IFWL_Widget* pWidget, - int32_t iYear, - int32_t iMonth, - int32_t iDay) { - CFX_WideString wsPicture; - m_pDataAcc->GetPictureContent(wsPicture, XFA_VALUEPICTURE_Edit); - CXFA_LocaleValue date(XFA_VT_DATE, GetDoc()->GetXFADoc()->GetLocalMgr()); - CFX_Unitime dt; - dt.Set(iYear, iMonth, iDay); - date.SetDate(dt); - CFX_WideString wsDate; - date.FormatPatterns(wsDate, wsPicture, m_pDataAcc->GetLocal(), - XFA_VALUEPICTURE_Edit); - CFWL_DateTimePicker* pDateTime = (CFWL_DateTimePicker*)m_pNormalWidget; - pDateTime->SetEditText(wsDate); - pDateTime->Update(); - GetDoc()->GetDocProvider()->SetFocusWidget(GetDoc(), NULL); - CXFA_EventParam eParam; - eParam.m_eType = XFA_EVENT_Change; - eParam.m_pTarget = m_pDataAcc; - m_pDataAcc->GetValue(eParam.m_wsNewText, XFA_VALUEPICTURE_Raw); - m_pDataAcc->ProcessEvent(XFA_ATTRIBUTEENUM_Change, &eParam); -} -FWL_ERR CXFA_FFDateTimeEdit::OnProcessEvent(CFWL_Event* pEvent) { - FX_DWORD dwEventID = pEvent->GetClassID(); - if (dwEventID == FWL_EVTHASH_DTP_SelectChanged) { - CFWL_Event_DtpSelectChanged* event = (CFWL_Event_DtpSelectChanged*)pEvent; - OnSelectChanged(m_pNormalWidget->GetWidget(), event->iYear, event->iMonth, - event->iDay); - return TRUE; - } else { - return CXFA_FFTextEdit::OnProcessEvent(pEvent); - } -} diff --git a/xfa/src/fxfa/app/xfa_fftextedit.h b/xfa/src/fxfa/app/xfa_fftextedit.h deleted file mode 100644 index a87300dec0..0000000000 --- a/xfa/src/fxfa/app/xfa_fftextedit.h +++ /dev/null @@ -1,138 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXFA_APP_XFA_FFTEXTEDIT_H_ -#define XFA_SRC_FXFA_APP_XFA_FFTEXTEDIT_H_ - -#include - -#include "xfa/src/fxfa/app/xfa_fffield.h" - -class CXFA_FFTextEdit : public CXFA_FFField { - public: - CXFA_FFTextEdit(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc); - ~CXFA_FFTextEdit() override; - - // CXFA_FFField: - FX_BOOL LoadWidget() override; - void UpdateWidgetProperty() override; - FX_BOOL OnLButtonDown(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy) override; - FX_BOOL OnRButtonDown(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy) override; - FX_BOOL OnRButtonUp(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy) override; - FX_BOOL OnSetFocus(CXFA_FFWidget* pOldWidget) override; - FX_BOOL OnKillFocus(CXFA_FFWidget* pNewWidget) override; - FX_BOOL CanUndo() override; - FX_BOOL CanRedo() override; - FX_BOOL Undo() override; - FX_BOOL Redo() override; - FX_BOOL CanCopy() override; - FX_BOOL CanCut() override; - FX_BOOL CanPaste() override; - FX_BOOL CanSelectAll() override; - FX_BOOL Copy(CFX_WideString& wsCopy) override; - FX_BOOL Cut(CFX_WideString& wsCut) override; - FX_BOOL Paste(const CFX_WideString& wsPaste) override; - FX_BOOL SelectAll() override; - FX_BOOL Delete() override; - FX_BOOL DeSelect() override; - FX_BOOL GetSuggestWords(CFX_PointF pointf, - std::vector& sSuggest) override; - FX_BOOL ReplaceSpellCheckWord(CFX_PointF pointf, - const CFX_ByteStringC& bsReplace) override; - - // IFWL_WidgetDelegate: - int32_t OnProcessMessage(CFWL_Message* pMessage) override; - FWL_ERR OnProcessEvent(CFWL_Event* pEvent) override; - FWL_ERR OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL) override; - - void OnTextChanged(IFWL_Widget* pWidget, - const CFX_WideString& wsChanged, - const CFX_WideString& wsPrevText); - void OnTextFull(IFWL_Widget* pWidget); - FX_BOOL CheckWord(const CFX_ByteStringC& sWord); - FX_BOOL GetSuggestWords(const CFX_ByteStringC& sWord, - std::vector& sSuggest); - - protected: - FX_DWORD GetAlignment(); - FX_BOOL CommitData() override; - FX_BOOL UpdateFWLData() override; - FX_BOOL IsDataChanged() override; - void ValidateNumberField(const CFX_WideString& wsText); - - IFWL_WidgetDelegate* m_pOldDelegate; -}; - -class CXFA_FFNumericEdit : public CXFA_FFTextEdit { - public: - CXFA_FFNumericEdit(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc); - virtual ~CXFA_FFNumericEdit(); - virtual FX_BOOL LoadWidget(); - virtual void UpdateWidgetProperty(); - virtual FWL_ERR OnProcessEvent(CFWL_Event* pEvent); - - public: - FX_BOOL OnValidate(IFWL_Widget* pWidget, CFX_WideString& wsText); -}; -class CXFA_FFPasswordEdit : public CXFA_FFTextEdit { - public: - CXFA_FFPasswordEdit(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc); - virtual ~CXFA_FFPasswordEdit(); - virtual FX_BOOL LoadWidget(); - virtual void UpdateWidgetProperty(); - - protected: -}; -enum XFA_DATETIMETYPE { - XFA_DATETIMETYPE_Date = 0, - XFA_DATETIMETYPE_Time, - XFA_DATETIMETYPE_DateAndTime -}; -class CXFA_FFDateTimeEdit : public CXFA_FFTextEdit { - public: - CXFA_FFDateTimeEdit(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc); - virtual ~CXFA_FFDateTimeEdit(); - - virtual FX_BOOL GetBBox(CFX_RectF& rtBox, - FX_DWORD dwStatus, - FX_BOOL bDrawFocus = FALSE); - virtual FX_BOOL LoadWidget(); - virtual void UpdateWidgetProperty(); - - virtual FX_BOOL CanUndo(); - virtual FX_BOOL CanRedo(); - virtual FX_BOOL Undo(); - virtual FX_BOOL Redo(); - - virtual FX_BOOL CanCopy(); - virtual FX_BOOL CanCut(); - virtual FX_BOOL CanPaste(); - virtual FX_BOOL CanSelectAll(); - virtual FX_BOOL Copy(CFX_WideString& wsCopy); - virtual FX_BOOL Cut(CFX_WideString& wsCut); - virtual FX_BOOL Paste(const CFX_WideString& wsPaste); - virtual FX_BOOL SelectAll(); - virtual FX_BOOL Delete(); - virtual FX_BOOL DeSelect(); - - protected: - FX_DWORD GetAlignment(); - - virtual FX_BOOL PtInActiveRect(FX_FLOAT fx, FX_FLOAT fy); - virtual FX_BOOL CommitData(); - virtual FX_BOOL UpdateFWLData(); - virtual FX_BOOL IsDataChanged(); - - public: - void OnSelectChanged(IFWL_Widget* pWidget, - int32_t iYear, - int32_t iMonth, - int32_t iDay); - virtual FWL_ERR OnProcessEvent(CFWL_Event* pEvent); -}; - -#endif // XFA_SRC_FXFA_APP_XFA_FFTEXTEDIT_H_ diff --git a/xfa/src/fxfa/app/xfa_ffwidget.cpp b/xfa/src/fxfa/app/xfa_ffwidget.cpp deleted file mode 100644 index cc947b0ad4..0000000000 --- a/xfa/src/fxfa/app/xfa_ffwidget.cpp +++ /dev/null @@ -1,1961 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fxfa/app/xfa_ffwidget.h" - -#include - -#include "core/include/fpdfapi/fpdf_page.h" -#include "core/include/fxcodec/fx_codec.h" -#include "xfa/include/fxgraphics/fx_graphics.h" -#include "xfa/src/fxfa/app/xfa_ffapp.h" -#include "xfa/src/fxfa/app/xfa_ffdoc.h" -#include "xfa/src/fxfa/app/xfa_ffdocview.h" -#include "xfa/src/fxfa/app/xfa_ffpageview.h" -#include "xfa/src/fxfa/app/xfa_textlayout.h" - -CXFA_FFWidget::CXFA_FFWidget(CXFA_FFPageView* pPageView, - CXFA_WidgetAcc* pDataAcc) - : CXFA_ContentLayoutItem(pDataAcc->GetNode()), - m_pPageView(pPageView), - m_pDataAcc(pDataAcc) { - m_rtWidget.Set(0, 0, 0, 0); -} -CXFA_FFWidget::~CXFA_FFWidget() {} -IXFA_PageView* CXFA_FFWidget::GetPageView() { - return m_pPageView; -} -void CXFA_FFWidget::SetPageView(IXFA_PageView* pPageView) { - m_pPageView = static_cast(pPageView); -} -void CXFA_FFWidget::GetWidgetRect(CFX_RectF& rtWidget) { - if ((m_dwStatus & XFA_WIDGETSTATUS_RectCached) == 0) { - m_dwStatus |= XFA_WIDGETSTATUS_RectCached; - GetRect(m_rtWidget); - } - rtWidget = m_rtWidget; -} -CFX_RectF CXFA_FFWidget::ReCacheWidgetRect() { - m_dwStatus |= XFA_WIDGETSTATUS_RectCached; - GetRect(m_rtWidget); - return m_rtWidget; -} -void CXFA_FFWidget::GetRectWithoutRotate(CFX_RectF& rtWidget) { - GetWidgetRect(rtWidget); - FX_FLOAT fValue = 0; - switch (m_pDataAcc->GetRotate()) { - case 90: - rtWidget.top = rtWidget.bottom(); - fValue = rtWidget.width; - rtWidget.width = rtWidget.height; - rtWidget.height = fValue; - break; - case 180: - rtWidget.left = rtWidget.right(); - rtWidget.top = rtWidget.bottom(); - break; - case 270: - rtWidget.left = rtWidget.right(); - fValue = rtWidget.width; - rtWidget.width = rtWidget.height; - rtWidget.height = fValue; - break; - } -} -FX_DWORD CXFA_FFWidget::GetStatus() { - return m_dwStatus; -} - -void CXFA_FFWidget::ModifyStatus(FX_DWORD dwAdded, FX_DWORD dwRemoved) { - m_dwStatus = (m_dwStatus & ~dwRemoved) | dwAdded; -} - -FX_BOOL CXFA_FFWidget::GetBBox(CFX_RectF& rtBox, - FX_DWORD dwStatus, - FX_BOOL bDrawFocus) { - if (bDrawFocus) - return FALSE; - if (m_pPageView) - m_pPageView->GetPageViewRect(rtBox); - return TRUE; -} - -CXFA_WidgetAcc* CXFA_FFWidget::GetDataAcc() { - return m_pDataAcc; -} -FX_BOOL CXFA_FFWidget::GetToolTip(CFX_WideString& wsToolTip) { - if (CXFA_Assist assist = m_pDataAcc->GetAssist()) { - if (CXFA_ToolTip toolTip = assist.GetToolTip()) { - return toolTip.GetTip(wsToolTip); - } - } - return GetCaptionText(wsToolTip); -} -void CXFA_FFWidget::RenderWidget(CFX_Graphics* pGS, - CFX_Matrix* pMatrix, - FX_DWORD dwStatus, - int32_t iRotate) { - if (!IsMatchVisibleStatus(dwStatus)) { - return; - } - CXFA_Border border = m_pDataAcc->GetBorder(); - if (border) { - CFX_RectF rtBorder; - GetRectWithoutRotate(rtBorder); - CXFA_Margin margin = border.GetMargin(); - if (margin) { - XFA_RectWidthoutMargin(rtBorder, margin); - } - rtBorder.Normalize(); - DrawBorder(pGS, border, rtBorder, pMatrix); - } -} -FX_BOOL CXFA_FFWidget::IsLoaded() { - return m_pPageView != NULL; -} -FX_BOOL CXFA_FFWidget::LoadWidget() { - PerformLayout(); - return TRUE; -} -void CXFA_FFWidget::UnloadWidget() {} -FX_BOOL CXFA_FFWidget::PerformLayout() { - ReCacheWidgetRect(); - return TRUE; -} -FX_BOOL CXFA_FFWidget::UpdateFWLData() { - return FALSE; -} -void CXFA_FFWidget::UpdateWidgetProperty() {} -void CXFA_FFWidget::DrawBorder(CFX_Graphics* pGS, - CXFA_Box box, - const CFX_RectF& rtBorder, - CFX_Matrix* pMatrix, - FX_DWORD dwFlags) { - XFA_DrawBox(box, pGS, rtBorder, pMatrix, dwFlags); -} -void CXFA_FFWidget::InvalidateWidget(const CFX_RectF* pRect) { - if (!pRect) { - CFX_RectF rtWidget; - GetBBox(rtWidget, XFA_WIDGETSTATUS_Focused); - rtWidget.Inflate(2, 2); - GetDoc()->GetDocProvider()->InvalidateRect(m_pPageView, rtWidget, - XFA_INVALIDATE_CurrentPage); - } else { - GetDoc()->GetDocProvider()->InvalidateRect(m_pPageView, *pRect, - XFA_INVALIDATE_CurrentPage); - } -} -void CXFA_FFWidget::AddInvalidateRect(const CFX_RectF* pRect) { - CFX_RectF rtWidget; - if (pRect) { - rtWidget = *pRect; - } else { - GetBBox(rtWidget, XFA_WIDGETSTATUS_Focused); - rtWidget.Inflate(2, 2); - } - m_pDocView->AddInvalidateRect(m_pPageView, rtWidget); -} -FX_BOOL CXFA_FFWidget::GetCaptionText(CFX_WideString& wsCap) { - CXFA_TextLayout* pCapTextlayout = m_pDataAcc->GetCaptionTextLayout(); - if (!pCapTextlayout) { - return FALSE; - } - pCapTextlayout->GetText(wsCap); - return TRUE; -} -FX_BOOL CXFA_FFWidget::IsFocused() { - return m_dwStatus & XFA_WIDGETSTATUS_Focused; -} -FX_BOOL CXFA_FFWidget::OnMouseEnter() { - return FALSE; -} -FX_BOOL CXFA_FFWidget::OnMouseExit() { - return FALSE; -} -FX_BOOL CXFA_FFWidget::OnLButtonDown(FX_DWORD dwFlags, - FX_FLOAT fx, - FX_FLOAT fy) { - return FALSE; -} -FX_BOOL CXFA_FFWidget::OnLButtonUp(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy) { - return FALSE; -} -FX_BOOL CXFA_FFWidget::OnLButtonDblClk(FX_DWORD dwFlags, - FX_FLOAT fx, - FX_FLOAT fy) { - return FALSE; -} -FX_BOOL CXFA_FFWidget::OnMouseMove(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy) { - return FALSE; -} -FX_BOOL CXFA_FFWidget::OnMouseWheel(FX_DWORD dwFlags, - int16_t zDelta, - FX_FLOAT fx, - FX_FLOAT fy) { - return FALSE; -} -FX_BOOL CXFA_FFWidget::OnRButtonDown(FX_DWORD dwFlags, - FX_FLOAT fx, - FX_FLOAT fy) { - return FALSE; -} -FX_BOOL CXFA_FFWidget::OnRButtonUp(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy) { - return FALSE; -} -FX_BOOL CXFA_FFWidget::OnRButtonDblClk(FX_DWORD dwFlags, - FX_FLOAT fx, - FX_FLOAT fy) { - return FALSE; -} - -FX_BOOL CXFA_FFWidget::OnSetFocus(CXFA_FFWidget* pOldWidget) { - CXFA_FFWidget* pParent = GetParent(); - if (pParent && !pParent->IsAncestorOf(pOldWidget)) { - pParent->OnSetFocus(pOldWidget); - } - m_dwStatus |= XFA_WIDGETSTATUS_Focused; - CXFA_EventParam eParam; - eParam.m_eType = XFA_EVENT_Enter; - eParam.m_pTarget = m_pDataAcc; - m_pDataAcc->ProcessEvent(XFA_ATTRIBUTEENUM_Enter, &eParam); - return TRUE; -} -FX_BOOL CXFA_FFWidget::OnKillFocus(CXFA_FFWidget* pNewWidget) { - m_dwStatus &= ~XFA_WIDGETSTATUS_Focused; - EventKillFocus(); - if (pNewWidget) { - CXFA_FFWidget* pParent = GetParent(); - if (pParent && !pParent->IsAncestorOf(pNewWidget)) { - pParent->OnKillFocus(pNewWidget); - } - } - return TRUE; -} -FX_BOOL CXFA_FFWidget::OnKeyDown(FX_DWORD dwKeyCode, FX_DWORD dwFlags) { - return FALSE; -} -FX_BOOL CXFA_FFWidget::OnKeyUp(FX_DWORD dwKeyCode, FX_DWORD dwFlags) { - return FALSE; -} -FX_BOOL CXFA_FFWidget::OnChar(FX_DWORD dwChar, FX_DWORD dwFlags) { - return FALSE; -} -FX_DWORD CXFA_FFWidget::OnHitTest(FX_FLOAT fx, FX_FLOAT fy) { - return FALSE; -} -FX_BOOL CXFA_FFWidget::OnSetCursor(FX_FLOAT fx, FX_FLOAT fy) { - return FALSE; -} -void CXFA_FFWidget::Rotate2Normal(FX_FLOAT& fx, FX_FLOAT& fy) { - CFX_Matrix mt; - GetRotateMatrix(mt); - if (mt.IsIdentity()) { - return; - } - CFX_Matrix mtReverse; - mtReverse.SetReverse(mt); - mtReverse.TransformPoint(fx, fy); -} -static void XFA_GetMatrix(CFX_Matrix& m, - int32_t iRotate, - int32_t at, - const CFX_RectF& rt) { - if (!iRotate) { - return; - } - FX_FLOAT fAnchorX, fAnchorY; - switch (at) { - case XFA_ATTRIBUTEENUM_TopLeft: - fAnchorX = rt.left, fAnchorY = rt.top; - break; - case XFA_ATTRIBUTEENUM_TopCenter: - fAnchorX = (rt.left + rt.right()) / 2, fAnchorY = rt.top; - break; - case XFA_ATTRIBUTEENUM_TopRight: - fAnchorX = rt.right(), fAnchorY = rt.top; - break; - case XFA_ATTRIBUTEENUM_MiddleLeft: - fAnchorX = rt.left, fAnchorY = (rt.top + rt.bottom()) / 2; - break; - case XFA_ATTRIBUTEENUM_MiddleCenter: - fAnchorX = (rt.left + rt.right()) / 2, - fAnchorY = (rt.top + rt.bottom()) / 2; - break; - case XFA_ATTRIBUTEENUM_MiddleRight: - fAnchorX = rt.right(), fAnchorY = (rt.top + rt.bottom()) / 2; - break; - case XFA_ATTRIBUTEENUM_BottomLeft: - fAnchorX = rt.left, fAnchorY = rt.bottom(); - break; - case XFA_ATTRIBUTEENUM_BottomCenter: - fAnchorX = (rt.left + rt.right()) / 2, fAnchorY = rt.bottom(); - break; - case XFA_ATTRIBUTEENUM_BottomRight: - fAnchorX = rt.right(), fAnchorY = rt.bottom(); - break; - } - switch (iRotate) { - case 90: - m.a = 0, m.b = -1, m.c = 1, m.d = 0, m.e = fAnchorX - fAnchorY, - m.f = fAnchorX + fAnchorY; - break; - case 180: - m.a = -1, m.b = 0, m.c = 0, m.d = -1, m.e = fAnchorX * 2, - m.f = fAnchorY * 2; - break; - case 270: - m.a = 0, m.b = 1, m.c = -1, m.d = 0, m.e = fAnchorX + fAnchorY, - m.f = fAnchorY - fAnchorX; - break; - } -} -void CXFA_FFWidget::GetRotateMatrix(CFX_Matrix& mt) { - mt.Set(1, 0, 0, 1, 0, 0); - int32_t iRotate = m_pDataAcc->GetRotate(); - if (!iRotate) { - return; - } - CFX_RectF rcWidget; - GetRectWithoutRotate(rcWidget); - XFA_ATTRIBUTEENUM at = XFA_ATTRIBUTEENUM_TopLeft; - XFA_GetMatrix(mt, iRotate, at, rcWidget); -} -FX_BOOL CXFA_FFWidget::IsLayoutRectEmpty() { - CFX_RectF rtLayout; - GetRectWithoutRotate(rtLayout); - return rtLayout.width < 0.1f && rtLayout.height < 0.1f; -} -CXFA_FFWidget* CXFA_FFWidget::GetParent() { - CXFA_Node* pParentNode = - m_pDataAcc->GetNode()->GetNodeItem(XFA_NODEITEM_Parent); - if (pParentNode) { - CXFA_WidgetAcc* pParentWidgetAcc = - (CXFA_WidgetAcc*)pParentNode->GetWidgetData(); - if (pParentWidgetAcc) { - return pParentWidgetAcc->GetNextWidget(NULL); - } - } - return NULL; -} -FX_BOOL CXFA_FFWidget::IsAncestorOf(CXFA_FFWidget* pWidget) { - if (!pWidget) { - return FALSE; - } - CXFA_Node* pNode = m_pDataAcc->GetNode(); - CXFA_Node* pChildNode = pWidget->GetDataAcc()->GetNode(); - while (pChildNode) { - if (pChildNode == pNode) { - return TRUE; - } - pChildNode = pChildNode->GetNodeItem(XFA_NODEITEM_Parent); - } - return FALSE; -} -FX_BOOL CXFA_FFWidget::PtInActiveRect(FX_FLOAT fx, FX_FLOAT fy) { - CFX_RectF rtWidget; - GetWidgetRect(rtWidget); - if (rtWidget.Contains(fx, fy)) { - return TRUE; - } - return FALSE; -} -CXFA_FFDocView* CXFA_FFWidget::GetDocView() { - return m_pDocView; -} -CXFA_FFDoc* CXFA_FFWidget::GetDoc() { - return (CXFA_FFDoc*)m_pDocView->GetDoc(); -} -CXFA_FFApp* CXFA_FFWidget::GetApp() { - return GetDoc()->GetApp(); -} -IXFA_AppProvider* CXFA_FFWidget::GetAppProvider() { - return GetApp()->GetAppProvider(); -} -void CXFA_FFWidget::GetMinMaxWidth(FX_FLOAT fMinWidth, FX_FLOAT fMaxWidth) { - fMinWidth = fMaxWidth = 0; - FX_FLOAT fWidth = 0; - if (m_pDataAcc->GetWidth(fWidth)) { - fMinWidth = fMaxWidth = fWidth; - } else { - m_pDataAcc->GetMinWidth(fMinWidth); - m_pDataAcc->GetMaxWidth(fMaxWidth); - } -} -void CXFA_FFWidget::GetMinMaxHeight(FX_FLOAT fMinHeight, FX_FLOAT fMaxHeight) { - fMinHeight = fMaxHeight = 0; - FX_FLOAT fHeight = 0; - if (m_pDataAcc->GetHeight(fHeight)) { - fMinHeight = fMaxHeight = fHeight; - } else { - m_pDataAcc->GetMinHeight(fMinHeight); - m_pDataAcc->GetMaxHeight(fMaxHeight); - } -} -FX_BOOL CXFA_FFWidget::IsMatchVisibleStatus(FX_DWORD dwStatus) { - return m_dwStatus & XFA_WIDGETSTATUS_Visible; -} -void CXFA_FFWidget::EventKillFocus() { - if (m_dwStatus & XFA_WIDGETSTATUS_Access) { - m_dwStatus &= ~XFA_WIDGETSTATUS_Access; - return; - } - CXFA_EventParam eParam; - eParam.m_eType = XFA_EVENT_Exit; - eParam.m_pTarget = m_pDataAcc; - m_pDataAcc->ProcessEvent(XFA_ATTRIBUTEENUM_Exit, &eParam); -} -FX_BOOL CXFA_FFWidget::IsButtonDown() { - return (m_dwStatus & XFA_WIDGETSTATUS_ButtonDown) != 0; -} -void CXFA_FFWidget::SetButtonDown(FX_BOOL bSet) { - bSet ? m_dwStatus |= XFA_WIDGETSTATUS_ButtonDown - : m_dwStatus &= ~XFA_WIDGETSTATUS_ButtonDown; -} -int32_t XFA_StrokeTypeSetLineDash(CFX_Graphics* pGraphics, - int32_t iStrokeType, - int32_t iCapType) { - switch (iStrokeType) { - case XFA_ATTRIBUTEENUM_DashDot: { - FX_FLOAT dashArray[] = {4, 1, 2, 1}; - if (iCapType != XFA_ATTRIBUTEENUM_Butt) { - dashArray[1] = 2; - dashArray[3] = 2; - } - pGraphics->SetLineDash(0, dashArray, 4); - return FX_DASHSTYLE_DashDot; - } - case XFA_ATTRIBUTEENUM_DashDotDot: { - FX_FLOAT dashArray[] = {4, 1, 2, 1, 2, 1}; - if (iCapType != XFA_ATTRIBUTEENUM_Butt) { - dashArray[1] = 2; - dashArray[3] = 2; - dashArray[5] = 2; - } - pGraphics->SetLineDash(0, dashArray, 6); - return FX_DASHSTYLE_DashDotDot; - } - case XFA_ATTRIBUTEENUM_Dashed: { - FX_FLOAT dashArray[] = {5, 1}; - if (iCapType != XFA_ATTRIBUTEENUM_Butt) { - dashArray[1] = 2; - } - pGraphics->SetLineDash(0, dashArray, 2); - return FX_DASHSTYLE_Dash; - } - case XFA_ATTRIBUTEENUM_Dotted: { - FX_FLOAT dashArray[] = {2, 1}; - if (iCapType != XFA_ATTRIBUTEENUM_Butt) { - dashArray[1] = 2; - } - pGraphics->SetLineDash(0, dashArray, 2); - return FX_DASHSTYLE_Dot; - } - default: - break; - } - pGraphics->SetLineDash(FX_DASHSTYLE_Solid); - return FX_DASHSTYLE_Solid; -} -CFX_GraphStateData::LineCap XFA_LineCapToFXGE(int32_t iLineCap) { - switch (iLineCap) { - case XFA_ATTRIBUTEENUM_Round: - return CFX_GraphStateData::LineCapRound; - case XFA_ATTRIBUTEENUM_Butt: - return CFX_GraphStateData::LineCapButt; - default: - break; - } - return CFX_GraphStateData::LineCapSquare; -} -class CXFA_ImageRenderer { - public: - CXFA_ImageRenderer(); - ~CXFA_ImageRenderer(); - FX_BOOL Start(CFX_RenderDevice* pDevice, - CFX_DIBSource* pDIBSource, - FX_ARGB bitmap_argb, - int bitmap_alpha, - const CFX_Matrix* pImage2Device, - FX_DWORD flags, - int blendType = FXDIB_BLEND_NORMAL); - FX_BOOL Continue(IFX_Pause* pPause); - - protected: - CFX_RenderDevice* m_pDevice; - int m_Status; - CFX_Matrix m_ImageMatrix; - CFX_DIBSource* m_pDIBSource; - CFX_DIBitmap* m_pCloneConvert; - int m_BitmapAlpha; - FX_ARGB m_FillArgb; - FX_DWORD m_Flags; - CFX_ImageTransformer* m_pTransformer; - void* m_DeviceHandle; - int32_t m_BlendType; - FX_BOOL m_Result; - FX_BOOL m_bPrint; - FX_BOOL StartDIBSource(); - void CompositeDIBitmap(CFX_DIBitmap* pDIBitmap, - int left, - int top, - FX_ARGB mask_argb, - int bitmap_alpha, - int blend_mode, - int Transparency); -}; -CXFA_ImageRenderer::CXFA_ImageRenderer() { - m_pDevice = NULL; - m_Status = 0; - m_pDIBSource = NULL; - m_pCloneConvert = NULL; - m_BitmapAlpha = 255; - m_FillArgb = 0; - m_Flags = 0; - m_pTransformer = NULL; - m_DeviceHandle = NULL; - m_BlendType = FXDIB_BLEND_NORMAL; - m_Result = TRUE; - m_bPrint = FALSE; -} -CXFA_ImageRenderer::~CXFA_ImageRenderer() { - if (m_pCloneConvert) { - delete m_pCloneConvert; - } - if (m_pTransformer) { - delete m_pTransformer; - } - if (m_DeviceHandle) { - m_pDevice->CancelDIBits(m_DeviceHandle); - } -} -FX_BOOL CXFA_ImageRenderer::Start(CFX_RenderDevice* pDevice, - CFX_DIBSource* pDIBSource, - FX_ARGB bitmap_argb, - int bitmap_alpha, - const CFX_Matrix* pImage2Device, - FX_DWORD flags, - int blendType) { - m_pDevice = pDevice; - m_pDIBSource = pDIBSource; - m_FillArgb = bitmap_argb; - m_BitmapAlpha = bitmap_alpha; - m_ImageMatrix = *pImage2Device; - m_Flags = flags; - m_BlendType = blendType; - return StartDIBSource(); -} -FX_BOOL CXFA_ImageRenderer::StartDIBSource() { - if (m_pDevice->StartDIBits(m_pDIBSource, m_BitmapAlpha, m_FillArgb, - &m_ImageMatrix, m_Flags, m_DeviceHandle, 0, NULL, - m_BlendType)) { - if (m_DeviceHandle) { - m_Status = 3; - return TRUE; - } - return FALSE; - } - CFX_FloatRect image_rect_f = m_ImageMatrix.GetUnitRect(); - FX_RECT image_rect = image_rect_f.GetOutterRect(); - int dest_width = image_rect.Width(); - int dest_height = image_rect.Height(); - if ((FXSYS_fabs(m_ImageMatrix.b) >= 0.5f || m_ImageMatrix.a == 0) || - (FXSYS_fabs(m_ImageMatrix.c) >= 0.5f || m_ImageMatrix.d == 0)) { - if (m_bPrint && !(m_pDevice->GetRenderCaps() & FXRC_BLEND_MODE)) { - m_Result = FALSE; - return FALSE; - } - CFX_DIBSource* pDib = m_pDIBSource; - if (m_pDIBSource->HasAlpha() && - !(m_pDevice->GetRenderCaps() & FXRC_ALPHA_IMAGE) && - !(m_pDevice->GetRenderCaps() & FXRC_GET_BITS)) { - m_pCloneConvert = m_pDIBSource->CloneConvert(FXDIB_Rgb); - if (!m_pCloneConvert) { - m_Result = FALSE; - return FALSE; - } - pDib = m_pCloneConvert; - } - FX_RECT clip_box = m_pDevice->GetClipBox(); - clip_box.Intersect(image_rect); - m_Status = 2; - m_pTransformer = new CFX_ImageTransformer; - m_pTransformer->Start(pDib, &m_ImageMatrix, m_Flags, &clip_box); - return TRUE; - } - if (m_ImageMatrix.a < 0) { - dest_width = -dest_width; - } - if (m_ImageMatrix.d > 0) { - dest_height = -dest_height; - } - int dest_left, dest_top; - dest_left = dest_width > 0 ? image_rect.left : image_rect.right; - dest_top = dest_height > 0 ? image_rect.top : image_rect.bottom; - if (m_pDIBSource->IsOpaqueImage() && m_BitmapAlpha == 255) { - if (m_pDevice->StretchDIBits(m_pDIBSource, dest_left, dest_top, dest_width, - dest_height, m_Flags, NULL, m_BlendType)) { - return FALSE; - } - } - if (m_pDIBSource->IsAlphaMask()) { - if (m_BitmapAlpha != 255) { - m_FillArgb = FXARGB_MUL_ALPHA(m_FillArgb, m_BitmapAlpha); - } - if (m_pDevice->StretchBitMask(m_pDIBSource, dest_left, dest_top, dest_width, - dest_height, m_FillArgb, m_Flags)) { - return FALSE; - } - } - if (m_bPrint && !(m_pDevice->GetRenderCaps() & FXRC_BLEND_MODE)) { - m_Result = FALSE; - return TRUE; - } - FX_RECT clip_box = m_pDevice->GetClipBox(); - FX_RECT dest_rect = clip_box; - dest_rect.Intersect(image_rect); - FX_RECT dest_clip( - dest_rect.left - image_rect.left, dest_rect.top - image_rect.top, - dest_rect.right - image_rect.left, dest_rect.bottom - image_rect.top); - CFX_DIBitmap* pStretched = - m_pDIBSource->StretchTo(dest_width, dest_height, m_Flags, &dest_clip); - if (pStretched) { - CompositeDIBitmap(pStretched, dest_rect.left, dest_rect.top, m_FillArgb, - m_BitmapAlpha, m_BlendType, FALSE); - delete pStretched; - pStretched = NULL; - } - return FALSE; -} -FX_BOOL CXFA_ImageRenderer::Continue(IFX_Pause* pPause) { - if (m_Status == 2) { - if (m_pTransformer->Continue(pPause)) { - return TRUE; - } - CFX_DIBitmap* pBitmap = m_pTransformer->m_Storer.Detach(); - if (pBitmap == NULL) { - return FALSE; - } - if (pBitmap->IsAlphaMask()) { - if (m_BitmapAlpha != 255) { - m_FillArgb = FXARGB_MUL_ALPHA(m_FillArgb, m_BitmapAlpha); - } - m_Result = m_pDevice->SetBitMask(pBitmap, m_pTransformer->m_ResultLeft, - m_pTransformer->m_ResultTop, m_FillArgb); - } else { - if (m_BitmapAlpha != 255) { - pBitmap->MultiplyAlpha(m_BitmapAlpha); - } - m_Result = m_pDevice->SetDIBits(pBitmap, m_pTransformer->m_ResultLeft, - m_pTransformer->m_ResultTop, m_BlendType); - } - delete pBitmap; - return FALSE; - } else if (m_Status == 3) { - return m_pDevice->ContinueDIBits(m_DeviceHandle, pPause); - } - return FALSE; -} -void CXFA_ImageRenderer::CompositeDIBitmap(CFX_DIBitmap* pDIBitmap, - int left, - int top, - FX_ARGB mask_argb, - int bitmap_alpha, - int blend_mode, - int Transparency) { - if (pDIBitmap == NULL) { - return; - } - FX_BOOL bIsolated = Transparency & PDFTRANS_ISOLATED; - FX_BOOL bGroup = Transparency & PDFTRANS_GROUP; - if (blend_mode == FXDIB_BLEND_NORMAL) { - if (!pDIBitmap->IsAlphaMask()) { - if (bitmap_alpha < 255) { - pDIBitmap->MultiplyAlpha(bitmap_alpha); - } - if (m_pDevice->SetDIBits(pDIBitmap, left, top)) { - return; - } - } else { - FX_DWORD fill_argb = (mask_argb); - if (bitmap_alpha < 255) { - ((uint8_t*)&fill_argb)[3] = - ((uint8_t*)&fill_argb)[3] * bitmap_alpha / 255; - } - if (m_pDevice->SetBitMask(pDIBitmap, left, top, fill_argb)) { - return; - } - } - } - FX_BOOL bBackAlphaRequired = blend_mode && bIsolated; - FX_BOOL bGetBackGround = - ((m_pDevice->GetRenderCaps() & FXRC_ALPHA_OUTPUT)) || - (!(m_pDevice->GetRenderCaps() & FXRC_ALPHA_OUTPUT) && - (m_pDevice->GetRenderCaps() & FXRC_GET_BITS) && !bBackAlphaRequired); - if (bGetBackGround) { - if (bIsolated || !bGroup) { - if (pDIBitmap->IsAlphaMask()) { - return; - } - m_pDevice->SetDIBits(pDIBitmap, left, top, blend_mode); - } else { - FX_RECT rect(left, top, left + pDIBitmap->GetWidth(), - top + pDIBitmap->GetHeight()); - rect.Intersect(m_pDevice->GetClipBox()); - CFX_DIBitmap* pClone = NULL; - FX_BOOL bClone = FALSE; - if (m_pDevice->GetBackDrop() && m_pDevice->GetBitmap()) { - bClone = TRUE; - pClone = m_pDevice->GetBackDrop()->Clone(&rect); - CFX_DIBitmap* pForeBitmap = m_pDevice->GetBitmap(); - pClone->CompositeBitmap(0, 0, pClone->GetWidth(), pClone->GetHeight(), - pForeBitmap, rect.left, rect.top); - left = left >= 0 ? 0 : left; - top = top >= 0 ? 0 : top; - if (!pDIBitmap->IsAlphaMask()) - pClone->CompositeBitmap(0, 0, pClone->GetWidth(), pClone->GetHeight(), - pDIBitmap, left, top, blend_mode); - else - pClone->CompositeMask(0, 0, pClone->GetWidth(), pClone->GetHeight(), - pDIBitmap, mask_argb, left, top, blend_mode); - } else { - pClone = pDIBitmap; - } - if (m_pDevice->GetBackDrop()) { - m_pDevice->SetDIBits(pClone, rect.left, rect.top); - } else { - if (pDIBitmap->IsAlphaMask()) { - return; - } - m_pDevice->SetDIBits(pDIBitmap, rect.left, rect.top, blend_mode); - } - if (bClone) { - delete pClone; - } - } - return; - } - if (pDIBitmap->HasAlpha() && - !(m_pDevice->GetRenderCaps() & FXRC_ALPHA_IMAGE)) { - CFX_DIBitmap* pCloneConvert = pDIBitmap->CloneConvert(FXDIB_Rgb); - if (!pCloneConvert) { - return; - } - CXFA_ImageRenderer imageRender; - FX_BOOL bRet = imageRender.Start(m_pDevice, pCloneConvert, m_FillArgb, - m_BitmapAlpha, &m_ImageMatrix, m_Flags); - while (bRet) { - bRet = imageRender.Continue(NULL); - } - delete pCloneConvert; - return; - } -} -void XFA_DrawImage(CFX_Graphics* pGS, - const CFX_RectF& rtImage, - CFX_Matrix* pMatrix, - CFX_DIBitmap* pDIBitmap, - int32_t iAspect, - int32_t iImageXDpi, - int32_t iImageYDpi, - int32_t iHorzAlign, - int32_t iVertAlign) { - if (rtImage.IsEmpty()) { - return; - } - if (!pDIBitmap || !pDIBitmap->GetBuffer()) { - return; - } - FX_FLOAT fWidth = - XFA_UnitPx2Pt((FX_FLOAT)pDIBitmap->GetWidth(), (FX_FLOAT)iImageXDpi); - FX_FLOAT fHeight = - XFA_UnitPx2Pt((FX_FLOAT)pDIBitmap->GetHeight(), (FX_FLOAT)iImageYDpi); - CFX_RectF rtFit; - rtFit.Set(rtImage.left, rtImage.top, fWidth, fHeight); - switch (iAspect) { - case XFA_ATTRIBUTEENUM_Fit: { - FX_FLOAT f1 = rtImage.height / rtFit.height; - FX_FLOAT f2 = rtImage.width / rtFit.width; - f1 = std::min(f1, f2); - rtFit.height = rtFit.height * f1; - rtFit.width = rtFit.width * f1; - } break; - case XFA_ATTRIBUTEENUM_Actual: - break; - case XFA_ATTRIBUTEENUM_Height: { - FX_FLOAT f1 = rtImage.height / rtFit.height; - rtFit.height = rtImage.height; - rtFit.width = f1 * rtFit.width; - } break; - case XFA_ATTRIBUTEENUM_None: - rtFit.height = rtImage.height; - rtFit.width = rtImage.width; - break; - case XFA_ATTRIBUTEENUM_Width: { - FX_FLOAT f1 = rtImage.width / rtFit.width; - rtFit.width = rtImage.width; - rtFit.height = rtFit.height * f1; - } break; - } - if (iHorzAlign == XFA_ATTRIBUTEENUM_Center) { - rtFit.left += (rtImage.width - rtFit.width) / 2; - } else if (iHorzAlign == XFA_ATTRIBUTEENUM_Right) { - rtFit.left = rtImage.right() - rtFit.width; - } - if (iVertAlign == XFA_ATTRIBUTEENUM_Middle) { - rtFit.top += (rtImage.height - rtFit.height) / 2; - } else if (iVertAlign == XFA_ATTRIBUTEENUM_Bottom) { - rtFit.top = rtImage.bottom() - rtImage.height; - } - CFX_RenderDevice* pRenderDevice = pGS->GetRenderDevice(); - pRenderDevice->SaveState(); - CFX_PathData path; - path.AppendRect(rtImage.left, rtImage.bottom(), rtImage.right(), rtImage.top); - pRenderDevice->SetClip_PathFill(&path, pMatrix, FXFILL_WINDING); - CFX_Matrix mtImage(1, 0, 0, -1, 0, 1); - mtImage.Concat(rtFit.width, 0, 0, rtFit.height, rtFit.left, rtFit.top); - mtImage.Concat(*pMatrix); - CXFA_ImageRenderer imageRender; - FX_BOOL bRet = imageRender.Start(pRenderDevice, pDIBitmap, 0, 255, &mtImage, - FXDIB_INTERPOL); - while (bRet) { - bRet = imageRender.Continue(NULL); - } - pRenderDevice->RestoreState(); -} - -static const uint8_t g_inv_base64[128] = { - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 62, 255, - 255, 255, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 255, 255, - 255, 255, 255, 255, 255, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, - 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, - 25, 255, 255, 255, 255, 255, 255, 26, 27, 28, 29, 30, 31, 32, 33, - 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, - 49, 50, 51, 255, 255, 255, 255, 255, -}; - -static uint8_t* XFA_RemoveBase64Whitespace(const uint8_t* pStr, int32_t iLen) { - uint8_t* pCP; - int32_t i = 0, j = 0; - if (iLen == 0) { - iLen = FXSYS_strlen((FX_CHAR*)pStr); - } - pCP = FX_Alloc(uint8_t, iLen + 1); - for (; i < iLen; i++) { - if ((pStr[i] & 128) == 0) { - if (g_inv_base64[pStr[i]] != 0xFF || pStr[i] == '=') { - pCP[j++] = pStr[i]; - } - } - } - pCP[j] = '\0'; - return pCP; -} -static int32_t XFA_Base64Decode(const FX_CHAR* pStr, uint8_t* pOutBuffer) { - if (pStr == NULL) { - return 0; - } - uint8_t* pBuffer = - XFA_RemoveBase64Whitespace((uint8_t*)pStr, FXSYS_strlen((FX_CHAR*)pStr)); - if (pBuffer == NULL) { - return 0; - } - int32_t iLen = FXSYS_strlen((FX_CHAR*)pBuffer); - int32_t i = 0, j = 0; - FX_DWORD dwLimb = 0; - for (; i + 3 < iLen; i += 4) { - if (pBuffer[i] == '=' || pBuffer[i + 1] == '=' || pBuffer[i + 2] == '=' || - pBuffer[i + 3] == '=') { - if (pBuffer[i] == '=' || pBuffer[i + 1] == '=') { - break; - } - if (pBuffer[i + 2] == '=') { - dwLimb = ((FX_DWORD)g_inv_base64[pBuffer[i]] << 6) | - ((FX_DWORD)g_inv_base64[pBuffer[i + 1]]); - pOutBuffer[j] = (uint8_t)(dwLimb >> 4) & 0xFF; - j++; - } else { - dwLimb = ((FX_DWORD)g_inv_base64[pBuffer[i]] << 12) | - ((FX_DWORD)g_inv_base64[pBuffer[i + 1]] << 6) | - ((FX_DWORD)g_inv_base64[pBuffer[i + 2]]); - pOutBuffer[j] = (uint8_t)(dwLimb >> 10) & 0xFF; - pOutBuffer[j + 1] = (uint8_t)(dwLimb >> 2) & 0xFF; - j += 2; - } - } else { - dwLimb = ((FX_DWORD)g_inv_base64[pBuffer[i]] << 18) | - ((FX_DWORD)g_inv_base64[pBuffer[i + 1]] << 12) | - ((FX_DWORD)g_inv_base64[pBuffer[i + 2]] << 6) | - ((FX_DWORD)g_inv_base64[pBuffer[i + 3]]); - pOutBuffer[j] = (uint8_t)(dwLimb >> 16) & 0xff; - pOutBuffer[j + 1] = (uint8_t)(dwLimb >> 8) & 0xff; - pOutBuffer[j + 2] = (uint8_t)(dwLimb)&0xff; - j += 3; - } - } - FX_Free(pBuffer); - return j; -} -static FX_CHAR g_base64_chars[] = - "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; -FX_CHAR* XFA_Base64Encode(const uint8_t* buf, int32_t buf_len) { - FX_CHAR* out = NULL; - int i, j; - FX_DWORD limb; - out = FX_Alloc(FX_CHAR, ((buf_len * 8 + 5) / 6) + 5); - for (i = 0, j = 0, limb = 0; i + 2 < buf_len; i += 3, j += 4) { - limb = ((FX_DWORD)buf[i] << 16) | ((FX_DWORD)buf[i + 1] << 8) | - ((FX_DWORD)buf[i + 2]); - out[j] = g_base64_chars[(limb >> 18) & 63]; - out[j + 1] = g_base64_chars[(limb >> 12) & 63]; - out[j + 2] = g_base64_chars[(limb >> 6) & 63]; - out[j + 3] = g_base64_chars[(limb)&63]; - } - switch (buf_len - i) { - case 0: - break; - case 1: - limb = ((FX_DWORD)buf[i]); - out[j++] = g_base64_chars[(limb >> 2) & 63]; - out[j++] = g_base64_chars[(limb << 4) & 63]; - out[j++] = '='; - out[j++] = '='; - break; - case 2: - limb = ((FX_DWORD)buf[i] << 8) | ((FX_DWORD)buf[i + 1]); - out[j++] = g_base64_chars[(limb >> 10) & 63]; - out[j++] = g_base64_chars[(limb >> 4) & 63]; - out[j++] = g_base64_chars[(limb << 2) & 63]; - out[j++] = '='; - break; - default: - break; - } - out[j] = '\0'; - return out; -} -FXCODEC_IMAGE_TYPE XFA_GetImageType(const CFX_WideStringC& wsType) { - CFX_WideString wsContentType(wsType); - wsContentType.MakeLower(); - if (wsContentType == FX_WSTRC(L"image/jpg")) { - return FXCODEC_IMAGE_JPG; - } - if (wsContentType == FX_WSTRC(L"image/png")) { - return FXCODEC_IMAGE_PNG; - } - if (wsContentType == FX_WSTRC(L"image/gif")) { - return FXCODEC_IMAGE_GIF; - } - if (wsContentType == FX_WSTRC(L"image/bmp")) { - return FXCODEC_IMAGE_BMP; - } - if (wsContentType == FX_WSTRC(L"image/tif")) { - return FXCODEC_IMAGE_TIF; - } - return FXCODEC_IMAGE_UNKNOWN; -} -CFX_DIBitmap* XFA_LoadImageData(CXFA_FFDoc* pDoc, - CXFA_Image* pImage, - FX_BOOL& bNameImage, - int32_t& iImageXDpi, - int32_t& iImageYDpi) { - CFX_WideString wsHref; - pImage->GetHref(wsHref); - CFX_WideString wsImage; - pImage->GetContent(wsImage); - if (wsHref.IsEmpty() && wsImage.IsEmpty()) { - return NULL; - } - CFX_WideString wsContentType; - pImage->GetContentType(wsContentType); - FXCODEC_IMAGE_TYPE type = XFA_GetImageType(wsContentType); - CFX_ByteString bsContent; - uint8_t* pImageBuffer = NULL; - IFX_FileRead* pImageFileRead = NULL; - if (wsImage.GetLength() > 0) { - XFA_ATTRIBUTEENUM iEncoding = - (XFA_ATTRIBUTEENUM)pImage->GetTransferEncoding(); - if (iEncoding == XFA_ATTRIBUTEENUM_Base64) { - CFX_ByteString bsData = wsImage.UTF8Encode(); - int32_t iLength = bsData.GetLength(); - pImageBuffer = FX_Alloc(uint8_t, iLength); - int32_t iRead = XFA_Base64Decode((const FX_CHAR*)bsData, pImageBuffer); - if (iRead > 0) { - pImageFileRead = FX_CreateMemoryStream(pImageBuffer, iRead); - } - } else { - bsContent = CFX_ByteString::FromUnicode(wsImage); - pImageFileRead = FX_CreateMemoryStream( - (uint8_t*)(const uint8_t*)bsContent, bsContent.GetLength()); - } - } else { - CFX_WideString wsURL = wsHref; - if (wsURL.Left(7) != FX_WSTRC(L"http://") && - wsURL.Left(6) != FX_WSTRC(L"ftp://")) { - CFX_DIBitmap* pBitmap = - pDoc->GetPDFNamedImage(wsURL, iImageXDpi, iImageYDpi); - if (pBitmap) { - bNameImage = TRUE; - return pBitmap; - } - } - pImageFileRead = pDoc->GetDocProvider()->OpenLinkedFile(pDoc, wsURL); - } - if (!pImageFileRead) { - FX_Free(pImageBuffer); - return NULL; - } - bNameImage = FALSE; - CFX_DIBitmap* pBitmap = - XFA_LoadImageFromBuffer(pImageFileRead, type, iImageXDpi, iImageYDpi); - FX_Free(pImageBuffer); - pImageFileRead->Release(); - return pBitmap; -} -static FXDIB_Format XFA_GetDIBFormat(FXCODEC_IMAGE_TYPE type, - int32_t iComponents, - int32_t iBitsPerComponent) { - FXDIB_Format dibFormat = FXDIB_Argb; - switch (type) { - case FXCODEC_IMAGE_BMP: - case FXCODEC_IMAGE_JPG: - case FXCODEC_IMAGE_TIF: { - dibFormat = FXDIB_Rgb32; - int32_t bpp = iComponents * iBitsPerComponent; - if (bpp <= 24) { - dibFormat = FXDIB_Rgb; - } - } break; - case FXCODEC_IMAGE_PNG: - default: - break; - } - return dibFormat; -} -CFX_DIBitmap* XFA_LoadImageFromBuffer(IFX_FileRead* pImageFileRead, - FXCODEC_IMAGE_TYPE type, - int32_t& iImageXDpi, - int32_t& iImageYDpi) { - CFX_GEModule* pGeModule = CFX_GEModule::Get(); - if (!pGeModule) { - return NULL; - } - CCodec_ModuleMgr* pCodecMgr = pGeModule->GetCodecModule(); - if (!pCodecMgr) { - return NULL; - } - CFX_DIBAttribute dibAttr; - CFX_DIBitmap* pBitmap = NULL; - ICodec_ProgressiveDecoder* pProgressiveDecoder = - pCodecMgr->CreateProgressiveDecoder(); - pProgressiveDecoder->LoadImageInfo(pImageFileRead, type, &dibAttr); - switch (dibAttr.m_wDPIUnit) { - case FXCODEC_RESUNIT_CENTIMETER: - dibAttr.m_nXDPI = (int32_t)(dibAttr.m_nXDPI * 2.54f); - dibAttr.m_nYDPI = (int32_t)(dibAttr.m_nYDPI * 2.54f); - break; - case FXCODEC_RESUNIT_METER: - dibAttr.m_nXDPI = (int32_t)(dibAttr.m_nXDPI / (FX_FLOAT)100 * 2.54f); - dibAttr.m_nYDPI = (int32_t)(dibAttr.m_nYDPI / (FX_FLOAT)100 * 2.54f); - break; - default: - break; - } - iImageXDpi = dibAttr.m_nXDPI > 1 ? dibAttr.m_nXDPI : (96); - iImageYDpi = dibAttr.m_nYDPI > 1 ? dibAttr.m_nYDPI : (96); - if (pProgressiveDecoder->GetWidth() > 0 && - pProgressiveDecoder->GetHeight() > 0) { - type = pProgressiveDecoder->GetType(); - int32_t iComponents = pProgressiveDecoder->GetNumComponents(); - int32_t iBpc = pProgressiveDecoder->GetBPC(); - FXDIB_Format dibFormat = XFA_GetDIBFormat(type, iComponents, iBpc); - pBitmap = new CFX_DIBitmap(); - pBitmap->Create(pProgressiveDecoder->GetWidth(), - pProgressiveDecoder->GetHeight(), dibFormat); - pBitmap->Clear(0xffffffff); - int32_t nFrames; - if ((pProgressiveDecoder->GetFrames(nFrames) == - FXCODEC_STATUS_DECODE_READY) && - (nFrames > 0)) { - pProgressiveDecoder->StartDecode(pBitmap, 0, 0, pBitmap->GetWidth(), - pBitmap->GetHeight()); - pProgressiveDecoder->ContinueDecode(); - } - } - delete pProgressiveDecoder; - return pBitmap; -} -void XFA_RectWidthoutMargin(CFX_RectF& rt, const CXFA_Margin& mg, FX_BOOL bUI) { - if (!mg) { - return; - } - FX_FLOAT fLeftInset, fTopInset, fRightInset, fBottomInset; - mg.GetLeftInset(fLeftInset); - mg.GetTopInset(fTopInset); - mg.GetRightInset(fRightInset); - mg.GetBottomInset(fBottomInset); - rt.Deflate(fLeftInset, fTopInset, fRightInset, fBottomInset); -} -CXFA_FFWidget* XFA_GetWidgetFromLayoutItem(CXFA_LayoutItem* pLayoutItem) { - XFA_ELEMENT iType = pLayoutItem->GetFormNode()->GetClassID(); - if (XFA_IsCreateWidget(iType)) { - return static_cast(pLayoutItem); - } - return nullptr; -} -FX_BOOL XFA_IsCreateWidget(XFA_ELEMENT iType) { - return iType == XFA_ELEMENT_Field || iType == XFA_ELEMENT_Draw || - iType == XFA_ELEMENT_Subform || iType == XFA_ELEMENT_ExclGroup; -} -static void XFA_BOX_GetPath_Arc(CXFA_Box box, - CFX_RectF rtDraw, - CFX_Path& fillPath, - FX_DWORD dwFlags) { - FX_FLOAT a, b; - a = rtDraw.width / 2.0f; - b = rtDraw.height / 2.0f; - if (box.IsCircular() || (dwFlags & XFA_DRAWBOX_ForceRound) != 0) { - a = b = std::min(a, b); - } - CFX_PointF center = rtDraw.Center(); - rtDraw.left = center.x - a; - rtDraw.top = center.y - b; - rtDraw.width = a + a; - rtDraw.height = b + b; - FX_FLOAT startAngle = 0, sweepAngle = 360; - FX_BOOL bStart = box.GetStartAngle(startAngle); - FX_BOOL bEnd = box.GetSweepAngle(sweepAngle); - if (!bStart && !bEnd) { - fillPath.AddEllipse(rtDraw); - return; - } - startAngle = -startAngle * FX_PI / 180.0f; - sweepAngle = -sweepAngle * FX_PI / 180.0f; - fillPath.AddArc(rtDraw.left, rtDraw.top, rtDraw.width, rtDraw.height, - startAngle, sweepAngle); -} -static void XFA_BOX_GetPath(CXFA_Box box, - const CXFA_StrokeArray& strokes, - CFX_RectF rtWidget, - CFX_Path& path, - int32_t nIndex, - FX_BOOL bStart, - FX_BOOL bCorner) { - FXSYS_assert(nIndex >= 0 && nIndex < 8); - FX_BOOL bInverted, bRound; - FX_FLOAT fRadius1, fRadius2, sx, sy, vx, vy, nx, ny, offsetY, offsetX, - offsetEX, offsetEY; - CFX_PointF cpStart, cp, cp1, cp2; - CFX_RectF rtRadius; - int32_t n = (nIndex & 1) ? nIndex - 1 : nIndex; - CXFA_Corner corner1(strokes[n].GetNode()); - CXFA_Corner corner2(strokes[(n + 2) % 8].GetNode()); - fRadius1 = bCorner ? corner1.GetRadius() : 0; - fRadius2 = bCorner ? corner2.GetRadius() : 0; - bInverted = corner1.IsInverted(); - offsetY = 0.0f; - offsetX = 0.0f; - bRound = corner1.GetJoinType() == XFA_ATTRIBUTEENUM_Round; - FX_FLOAT halfAfter = 0.0f; - FX_FLOAT halfBefore = 0.0f; - CXFA_Stroke stroke = strokes[nIndex]; - if (stroke.IsCorner()) { - CXFA_Stroke edgeBefore = strokes[(nIndex + 1 * 8 - 1) % 8]; - CXFA_Stroke edgeAfter = strokes[nIndex + 1]; - if (stroke.IsInverted()) { - if (!stroke.SameStyles(edgeBefore)) { - halfBefore = edgeBefore.GetThickness() / 2; - } - if (!stroke.SameStyles(edgeAfter)) { - halfAfter = edgeAfter.GetThickness() / 2; - } - } - } else { - CXFA_Stroke edgeBefore = strokes[(nIndex + 8 - 2) % 8]; - CXFA_Stroke edgeAfter = strokes[(nIndex + 2) % 8]; - if (!bRound && !bInverted) { - { halfBefore = edgeBefore.GetThickness() / 2; } - { halfAfter = edgeAfter.GetThickness() / 2; } - } - } - offsetEX = 0.0f; - offsetEY = 0.0f; - if (bRound) { - sy = FX_PI / 2; - } - switch (nIndex) { - case 0: - case 1: - cp1 = rtWidget.TopLeft(); - cp2 = rtWidget.TopRight(); - if (nIndex == 0) { - cpStart.x = cp1.x - halfBefore; - cpStart.y = cp1.y + fRadius1, offsetY = -halfAfter; - } else { - cpStart.x = cp1.x + fRadius1 - halfBefore, cpStart.y = cp1.y, - offsetEX = halfAfter; - } - vx = 1, vy = 1; - nx = -1, ny = 0; - if (bRound) { - sx = bInverted ? FX_PI / 2 : FX_PI; - } else { - sx = 1, sy = 0; - } - break; - case 2: - case 3: - cp1 = rtWidget.TopRight(); - cp2 = rtWidget.BottomRight(); - if (nIndex == 2) { - cpStart.x = cp1.x - fRadius1, cpStart.y = cp1.y - halfBefore, - offsetX = halfAfter; - } else { - cpStart.x = cp1.x, cpStart.y = cp1.y + fRadius1 - halfBefore, - offsetEY = halfAfter; - } - vx = -1, vy = 1; - nx = 0, ny = -1; - if (bRound) { - sx = bInverted ? FX_PI : FX_PI * 3 / 2; - } else { - sx = 0, sy = 1; - } - break; - case 4: - case 5: - cp1 = rtWidget.BottomRight(); - cp2 = rtWidget.BottomLeft(); - if (nIndex == 4) { - cpStart.x = cp1.x + halfBefore, cpStart.y = cp1.y - fRadius1, - offsetY = halfAfter; - } else { - cpStart.x = cp1.x - fRadius1 + halfBefore, cpStart.y = cp1.y, - offsetEX = -halfAfter; - } - vx = -1, vy = -1; - nx = 1, ny = 0; - if (bRound) { - sx = bInverted ? FX_PI * 3 / 2 : 0; - } else { - sx = -1, sy = 0; - } - break; - case 6: - case 7: - cp1 = rtWidget.BottomLeft(); - cp2 = rtWidget.TopLeft(); - if (nIndex == 6) { - cpStart.x = cp1.x + fRadius1, cpStart.y = cp1.y + halfBefore, - offsetX = -halfAfter; - } else { - cpStart.x = cp1.x, cpStart.y = cp1.y - fRadius1 + halfBefore, - offsetEY = -halfAfter; - } - vx = 1, vy = -1; - nx = 0, ny = 1; - if (bRound) { - sx = bInverted ? 0 : FX_PI / 2; - } else { - sx = 0, sy = -1; - } - break; - } - if (bStart) { - path.MoveTo(cpStart.x, cpStart.y); - } - if (nIndex & 1) { - path.LineTo(cp2.x + fRadius2 * nx + offsetEX, - cp2.y + fRadius2 * ny + offsetEY); - return; - } - if (bRound) { - if (fRadius1 < 0) { - sx -= FX_PI; - } - if (bInverted) { - sy *= -1; - } - rtRadius.Set(cp1.x + offsetX * 2, cp1.y + offsetY * 2, - fRadius1 * 2 * vx - offsetX * 2, - fRadius1 * 2 * vy - offsetY * 2); - rtRadius.Normalize(); - if (bInverted) { - rtRadius.Offset(-fRadius1 * vx, -fRadius1 * vy); - } - path.ArcTo(rtRadius.left, rtRadius.top, rtRadius.width, rtRadius.height, sx, - sy); - } else { - if (bInverted) { - cp.x = cp1.x + fRadius1 * vx, cp.y = cp1.y + fRadius1 * vy; - } else { - cp = cp1; - } - path.LineTo(cp.x, cp.y); - path.LineTo(cp1.x + fRadius1 * sx + offsetX, - cp1.y + fRadius1 * sy + offsetY); - } -} -static void XFA_BOX_GetFillPath(CXFA_Box box, - const CXFA_StrokeArray& strokes, - CFX_RectF rtWidget, - CFX_Path& fillPath, - FX_WORD dwFlags) { - if (box.IsArc() || (dwFlags & XFA_DRAWBOX_ForceRound) != 0) { - CXFA_Edge edge = box.GetEdge(0); - FX_FLOAT fThickness = edge.GetThickness(); - if (fThickness < 0) { - fThickness = 0; - } - FX_FLOAT fHalf = fThickness / 2; - int32_t iHand = box.GetHand(); - if (iHand == XFA_ATTRIBUTEENUM_Left) { - rtWidget.Inflate(fHalf, fHalf); - } else if (iHand == XFA_ATTRIBUTEENUM_Right) { - rtWidget.Deflate(fHalf, fHalf); - } - XFA_BOX_GetPath_Arc(box, rtWidget, fillPath, dwFlags); - return; - } - FX_BOOL bSameStyles = TRUE; - int32_t i; - CXFA_Stroke stroke1 = strokes[0]; - for (i = 1; i < 8; i++) { - CXFA_Stroke stroke2 = strokes[i]; - if (!stroke1.SameStyles(stroke2)) { - bSameStyles = FALSE; - break; - } - stroke1 = stroke2; - } - if (bSameStyles) { - stroke1 = strokes[0]; - for (i = 2; i < 8; i += 2) { - CXFA_Stroke stroke2 = strokes[i]; - if (!stroke1.SameStyles(stroke2, XFA_STROKE_SAMESTYLE_NoPresence | - XFA_STROKE_SAMESTYLE_Corner)) { - bSameStyles = FALSE; - break; - } - stroke1 = stroke2; - } - if (bSameStyles) { - stroke1 = strokes[0]; - if (stroke1.IsInverted()) { - bSameStyles = FALSE; - } - if (stroke1.GetJoinType() != XFA_ATTRIBUTEENUM_Square) { - bSameStyles = FALSE; - } - } - } - if (bSameStyles) { - fillPath.AddRectangle(rtWidget.left, rtWidget.top, rtWidget.width, - rtWidget.height); - return; - } - FX_BOOL bInverted, bRound; - FX_FLOAT fRadius1, fRadius2, sx, sy, vx, vy, nx, ny; - CFX_PointF cp, cp1, cp2; - CFX_RectF rtRadius; - for (int32_t i = 0; i < 8; i += 2) { - CXFA_Corner corner1(strokes[i].GetNode()); - CXFA_Corner corner2(strokes[(i + 2) % 8].GetNode()); - fRadius1 = corner1.GetRadius(); - fRadius2 = corner2.GetRadius(); - bInverted = corner1.IsInverted(); - bRound = corner1.GetJoinType() == XFA_ATTRIBUTEENUM_Round; - if (bRound) { - sy = FX_PI / 2; - } - switch (i) { - case 0: - cp1 = rtWidget.TopLeft(); - cp2 = rtWidget.TopRight(); - vx = 1, vy = 1; - nx = -1, ny = 0; - if (bRound) { - sx = bInverted ? FX_PI / 2 : FX_PI; - } else { - sx = 1, sy = 0; - } - break; - case 2: - cp1 = rtWidget.TopRight(); - cp2 = rtWidget.BottomRight(); - vx = -1, vy = 1; - nx = 0, ny = -1; - if (bRound) { - sx = bInverted ? FX_PI : FX_PI * 3 / 2; - } else { - sx = 0, sy = 1; - } - break; - case 4: - cp1 = rtWidget.BottomRight(); - cp2 = rtWidget.BottomLeft(); - vx = -1, vy = -1; - nx = 1, ny = 0; - if (bRound) { - sx = bInverted ? FX_PI * 3 / 2 : 0; - } else { - sx = -1, sy = 0; - } - break; - case 6: - cp1 = rtWidget.BottomLeft(); - cp2 = rtWidget.TopLeft(); - vx = 1, vy = -1; - nx = 0, ny = 1; - if (bRound) { - sx = bInverted ? 0 : FX_PI / 2; - } else { - sx = 0, sy = -1; - } - break; - } - if (i == 0) { - fillPath.MoveTo(cp1.x, cp1.y + fRadius1); - } - if (bRound) { - if (fRadius1 < 0) { - sx -= FX_PI; - } - if (bInverted) { - sy *= -1; - } - rtRadius.Set(cp1.x, cp1.y, fRadius1 * 2 * vx, fRadius1 * 2 * vy); - rtRadius.Normalize(); - if (bInverted) { - rtRadius.Offset(-fRadius1 * vx, -fRadius1 * vy); - } - fillPath.ArcTo(rtRadius.left, rtRadius.top, rtRadius.width, - rtRadius.height, sx, sy); - } else { - if (bInverted) { - cp.x = cp1.x + fRadius1 * vx, cp.y = cp1.y + fRadius1 * vy; - } else { - cp = cp1; - } - fillPath.LineTo(cp.x, cp.y); - fillPath.LineTo(cp1.x + fRadius1 * sx, cp1.y + fRadius1 * sy); - } - fillPath.LineTo(cp2.x + fRadius2 * nx, cp2.y + fRadius2 * ny); - } -} -static void XFA_BOX_Fill_Radial(CXFA_Box box, - CFX_Graphics* pGS, - CFX_Path& fillPath, - CFX_RectF rtFill, - CFX_Matrix* pMatrix) { - CXFA_Fill fill = box.GetFill(); - FX_ARGB crStart, crEnd; - crStart = fill.GetColor(); - int32_t iType = fill.GetRadial(crEnd); - CFX_Shading shading; - if (iType != XFA_ATTRIBUTEENUM_ToEdge) { - FX_ARGB temp = crEnd; - crEnd = crStart; - crStart = temp; - } - shading.CreateRadial(rtFill.Center(), rtFill.Center(), 0, - FXSYS_sqrt(rtFill.Width() * rtFill.Width() + - rtFill.Height() * rtFill.Height()) / - 2, - TRUE, TRUE, crStart, crEnd); - CFX_Color cr(&shading); - pGS->SetFillColor(&cr); - pGS->FillPath(&fillPath, FXFILL_WINDING, pMatrix); -} -static void XFA_BOX_Fill_Pattern(CXFA_Box box, - CFX_Graphics* pGS, - CFX_Path& fillPath, - CFX_RectF rtFill, - CFX_Matrix* pMatrix) { - CXFA_Fill fill = box.GetFill(); - FX_ARGB crStart, crEnd; - crStart = fill.GetColor(); - int32_t iType = fill.GetPattern(crEnd); - int32_t iHatch = FX_HATCHSTYLE_Cross; - switch (iType) { - case XFA_ATTRIBUTEENUM_CrossDiagonal: - iHatch = FX_HATCHSTYLE_DiagonalCross; - break; - case XFA_ATTRIBUTEENUM_DiagonalLeft: - iHatch = FX_HATCHSTYLE_ForwardDiagonal; - break; - case XFA_ATTRIBUTEENUM_DiagonalRight: - iHatch = FX_HATCHSTYLE_BackwardDiagonal; - break; - case XFA_ATTRIBUTEENUM_Horizontal: - iHatch = FX_HATCHSTYLE_Horizontal; - break; - case XFA_ATTRIBUTEENUM_Vertical: - iHatch = FX_HATCHSTYLE_Vertical; - break; - default: - break; - } - CFX_Pattern pattern; - pattern.Create(iHatch, crEnd, crStart); - CFX_Color cr(&pattern); - pGS->SetFillColor(&cr); - pGS->FillPath(&fillPath, FXFILL_WINDING, pMatrix); -} -static void XFA_BOX_Fill_Linear(CXFA_Box box, - CFX_Graphics* pGS, - CFX_Path& fillPath, - CFX_RectF rtFill, - CFX_Matrix* pMatrix) { - CXFA_Fill fill = box.GetFill(); - FX_ARGB crStart = fill.GetColor(); - FX_ARGB crEnd; - int32_t iType = fill.GetLinear(crEnd); - CFX_PointF ptStart; - CFX_PointF ptEnd; - switch (iType) { - case XFA_ATTRIBUTEENUM_ToRight: - ptStart = CFX_PointF(rtFill.left, rtFill.top); - ptEnd = CFX_PointF(rtFill.right(), rtFill.top); - break; - case XFA_ATTRIBUTEENUM_ToBottom: - ptStart = CFX_PointF(rtFill.left, rtFill.top); - ptEnd = CFX_PointF(rtFill.left, rtFill.bottom()); - break; - case XFA_ATTRIBUTEENUM_ToLeft: - ptStart = CFX_PointF(rtFill.right(), rtFill.top); - ptEnd = CFX_PointF(rtFill.left, rtFill.top); - break; - case XFA_ATTRIBUTEENUM_ToTop: - ptStart = CFX_PointF(rtFill.left, rtFill.bottom()); - ptEnd = CFX_PointF(rtFill.left, rtFill.top); - break; - default: - break; - } - CFX_Shading shading; - shading.CreateAxial(ptStart, ptEnd, FALSE, FALSE, crStart, crEnd); - CFX_Color cr(&shading); - pGS->SetFillColor(&cr); - pGS->FillPath(&fillPath, FXFILL_WINDING, pMatrix); -} -static void XFA_BOX_Fill(CXFA_Box box, - const CXFA_StrokeArray& strokes, - CFX_Graphics* pGS, - const CFX_RectF& rtWidget, - CFX_Matrix* pMatrix, - FX_DWORD dwFlags) { - CXFA_Fill fill = box.GetFill(); - if (!fill || fill.GetPresence() != XFA_ATTRIBUTEENUM_Visible) { - return; - } - pGS->SaveGraphState(); - CFX_Path fillPath; - fillPath.Create(); - XFA_BOX_GetFillPath(box, strokes, rtWidget, fillPath, - (dwFlags & XFA_DRAWBOX_ForceRound) != 0); - fillPath.Close(); - int32_t eType = fill.GetFillType(); - switch (eType) { - case XFA_ELEMENT_Radial: - XFA_BOX_Fill_Radial(box, pGS, fillPath, rtWidget, pMatrix); - break; - case XFA_ELEMENT_Pattern: - XFA_BOX_Fill_Pattern(box, pGS, fillPath, rtWidget, pMatrix); - break; - case XFA_ELEMENT_Linear: - XFA_BOX_Fill_Linear(box, pGS, fillPath, rtWidget, pMatrix); - break; - default: { - FX_ARGB cr; - if (eType == XFA_ELEMENT_Stipple) { - int32_t iRate = fill.GetStipple(cr); - if (iRate == 0) { - iRate = 100; - } - int32_t a = 0; - FX_COLORREF rgb; - ArgbDecode(cr, a, rgb); - cr = ArgbEncode(iRate * a / 100, rgb); - } else { - cr = fill.GetColor(); - } - CFX_Color fillColor(cr); - pGS->SetFillColor(&fillColor); - pGS->FillPath(&fillPath, FXFILL_WINDING, pMatrix); - } break; - } - pGS->RestoreGraphState(); -} -static void XFA_BOX_StrokePath(CXFA_Stroke stroke, - CFX_Path* pPath, - CFX_Graphics* pGS, - CFX_Matrix* pMatrix) { - if (!stroke || !stroke.IsVisible()) { - return; - } - FX_FLOAT fThickness = stroke.GetThickness(); - if (fThickness < 0.001f) { - return; - } - pGS->SaveGraphState(); - if (stroke.IsCorner() && fThickness > 2 * stroke.GetRadius()) { - fThickness = 2 * stroke.GetRadius(); - } - pGS->SetLineWidth(fThickness, TRUE); - pGS->SetLineCap(CFX_GraphStateData::LineCapButt); - XFA_StrokeTypeSetLineDash(pGS, stroke.GetStrokeType(), - XFA_ATTRIBUTEENUM_Butt); - CFX_Color fxColor(stroke.GetColor()); - pGS->SetStrokeColor(&fxColor); - pGS->StrokePath(pPath, pMatrix); - pGS->RestoreGraphState(); -} -static void XFA_BOX_StrokeArc(CXFA_Box box, - CFX_Graphics* pGS, - CFX_RectF rtWidget, - CFX_Matrix* pMatrix, - FX_DWORD dwFlags) { - CXFA_Edge edge = box.GetEdge(0); - if (!edge || !edge.IsVisible()) { - return; - } - FX_BOOL bVisible = FALSE; - FX_FLOAT fThickness = 0; - int32_t i3DType = box.Get3DStyle(bVisible, fThickness); - if (i3DType) { - if (bVisible && fThickness >= 0.001f) { - dwFlags |= XFA_DRAWBOX_Lowered3D; - } - } - FX_FLOAT fHalf = edge.GetThickness() / 2; - if (fHalf < 0) { - fHalf = 0; - } - int32_t iHand = box.GetHand(); - if (iHand == XFA_ATTRIBUTEENUM_Left) { - rtWidget.Inflate(fHalf, fHalf); - } else if (iHand == XFA_ATTRIBUTEENUM_Right) { - rtWidget.Deflate(fHalf, fHalf); - } - if ((dwFlags & XFA_DRAWBOX_ForceRound) == 0 || - (dwFlags & XFA_DRAWBOX_Lowered3D) == 0) { - if (fHalf < 0.001f) { - return; - } - CFX_Path arcPath; - arcPath.Create(); - XFA_BOX_GetPath_Arc(box, rtWidget, arcPath, dwFlags); - XFA_BOX_StrokePath(edge, &arcPath, pGS, pMatrix); - return; - } - pGS->SaveGraphState(); - pGS->SetLineWidth(fHalf); - FX_FLOAT a, b; - a = rtWidget.width / 2.0f; - b = rtWidget.height / 2.0f; - if (dwFlags & XFA_DRAWBOX_ForceRound) { - a = b = std::min(a, b); - } - CFX_PointF center = rtWidget.Center(); - rtWidget.left = center.x - a; - rtWidget.top = center.y - b; - rtWidget.width = a + a; - rtWidget.height = b + b; - FX_FLOAT startAngle = 0, sweepAngle = 360; - startAngle = startAngle * FX_PI / 180.0f; - sweepAngle = -sweepAngle * FX_PI / 180.0f; - CFX_Path arcPath; - arcPath.Create(); - arcPath.AddArc(rtWidget.left, rtWidget.top, rtWidget.width, rtWidget.height, - 3.0f * FX_PI / 4.0f, FX_PI); - CFX_Color cr(0xFF808080); - pGS->SetStrokeColor(&cr); - pGS->StrokePath(&arcPath, pMatrix); - arcPath.Clear(); - arcPath.AddArc(rtWidget.left, rtWidget.top, rtWidget.width, rtWidget.height, - -1.0f * FX_PI / 4.0f, FX_PI); - cr.Set(0xFFFFFFFF); - pGS->SetStrokeColor(&cr); - pGS->StrokePath(&arcPath, pMatrix); - rtWidget.Deflate(fHalf, fHalf); - arcPath.Clear(); - arcPath.AddArc(rtWidget.left, rtWidget.top, rtWidget.width, rtWidget.height, - 3.0f * FX_PI / 4.0f, FX_PI); - cr.Set(0xFF404040); - pGS->SetStrokeColor(&cr); - pGS->StrokePath(&arcPath, pMatrix); - arcPath.Clear(); - arcPath.AddArc(rtWidget.left, rtWidget.top, rtWidget.width, rtWidget.height, - -1.0f * FX_PI / 4.0f, FX_PI); - cr.Set(0xFFC0C0C0); - pGS->SetStrokeColor(&cr); - pGS->StrokePath(&arcPath, pMatrix); - pGS->RestoreGraphState(); -} -static void XFA_Draw3DRect(CFX_Graphics* pGraphic, - const CFX_RectF& rt, - FX_FLOAT fLineWidth, - CFX_Matrix* pMatrix, - FX_ARGB argbTopLeft, - FX_ARGB argbBottomRight) { - CFX_Color crLT(argbTopLeft); - pGraphic->SetFillColor(&crLT); - FX_FLOAT fBottom = rt.bottom(); - FX_FLOAT fRight = rt.right(); - CFX_Path pathLT; - pathLT.Create(); - pathLT.MoveTo(rt.left, fBottom); - pathLT.LineTo(rt.left, rt.top); - pathLT.LineTo(fRight, rt.top); - pathLT.LineTo(fRight - fLineWidth, rt.top + fLineWidth); - pathLT.LineTo(rt.left + fLineWidth, rt.top + fLineWidth); - pathLT.LineTo(rt.left + fLineWidth, fBottom - fLineWidth); - pathLT.LineTo(rt.left, fBottom); - pGraphic->FillPath(&pathLT, FXFILL_WINDING, pMatrix); - CFX_Color crRB(argbBottomRight); - pGraphic->SetFillColor(&crRB); - CFX_Path pathRB; - pathRB.Create(); - pathRB.MoveTo(fRight, rt.top); - pathRB.LineTo(fRight, fBottom); - pathRB.LineTo(rt.left, fBottom); - pathRB.LineTo(rt.left + fLineWidth, fBottom - fLineWidth); - pathRB.LineTo(fRight - fLineWidth, fBottom - fLineWidth); - pathRB.LineTo(fRight - fLineWidth, rt.top + fLineWidth); - pathRB.LineTo(fRight, rt.top); - pGraphic->FillPath(&pathRB, FXFILL_WINDING, pMatrix); -} -static void XFA_BOX_Stroke_3DRect_Lowered(CFX_Graphics* pGS, - CFX_RectF rt, - FX_FLOAT fThickness, - CFX_Matrix* pMatrix) { - FX_FLOAT fHalfWidth = fThickness / 2.0f; - CFX_RectF rtInner(rt); - rtInner.Deflate(fHalfWidth, fHalfWidth); - CFX_Color cr(0xFF000000); - pGS->SetFillColor(&cr); - CFX_Path path; - path.Create(); - path.AddRectangle(rt.left, rt.top, rt.width, rt.height); - path.AddRectangle(rtInner.left, rtInner.top, rtInner.width, rtInner.height); - pGS->FillPath(&path, FXFILL_ALTERNATE, pMatrix); - XFA_Draw3DRect(pGS, rtInner, fHalfWidth, pMatrix, 0xFF808080, 0xFFC0C0C0); -} -static void XFA_BOX_Stroke_3DRect_Raised(CFX_Graphics* pGS, - CFX_RectF rt, - FX_FLOAT fThickness, - CFX_Matrix* pMatrix) { - FX_FLOAT fHalfWidth = fThickness / 2.0f; - CFX_RectF rtInner(rt); - rtInner.Deflate(fHalfWidth, fHalfWidth); - CFX_Color cr(0xFF000000); - pGS->SetFillColor(&cr); - CFX_Path path; - path.Create(); - path.AddRectangle(rt.left, rt.top, rt.width, rt.height); - path.AddRectangle(rtInner.left, rtInner.top, rtInner.width, rtInner.height); - pGS->FillPath(&path, FXFILL_ALTERNATE, pMatrix); - XFA_Draw3DRect(pGS, rtInner, fHalfWidth, pMatrix, 0xFFFFFFFF, 0xFF808080); -} -static void XFA_BOX_Stroke_3DRect_Etched(CFX_Graphics* pGS, - CFX_RectF rt, - FX_FLOAT fThickness, - CFX_Matrix* pMatrix) { - FX_FLOAT fHalfWidth = fThickness / 2.0f; - XFA_Draw3DRect(pGS, rt, fThickness, pMatrix, 0xFF808080, 0xFFFFFFFF); - CFX_RectF rtInner(rt); - rtInner.Deflate(fHalfWidth, fHalfWidth); - XFA_Draw3DRect(pGS, rtInner, fHalfWidth, pMatrix, 0xFFFFFFFF, 0xFF808080); -} -static void XFA_BOX_Stroke_3DRect_Embossed(CFX_Graphics* pGS, - CFX_RectF rt, - FX_FLOAT fThickness, - CFX_Matrix* pMatrix) { - FX_FLOAT fHalfWidth = fThickness / 2.0f; - XFA_Draw3DRect(pGS, rt, fThickness, pMatrix, 0xFF808080, 0xFF000000); - CFX_RectF rtInner(rt); - rtInner.Deflate(fHalfWidth, fHalfWidth); - XFA_Draw3DRect(pGS, rtInner, fHalfWidth, pMatrix, 0xFF000000, 0xFF808080); -} -static void XFA_BOX_Stroke_Rect(CXFA_Box box, - const CXFA_StrokeArray& strokes, - CFX_Graphics* pGS, - CFX_RectF rtWidget, - CFX_Matrix* pMatrix) { - FX_BOOL bVisible = FALSE; - FX_FLOAT fThickness = 0; - int32_t i3DType = box.Get3DStyle(bVisible, fThickness); - if (i3DType) { - if (!bVisible || fThickness < 0.001f) { - return; - } - switch (i3DType) { - case XFA_ATTRIBUTEENUM_Lowered: - XFA_BOX_Stroke_3DRect_Lowered(pGS, rtWidget, fThickness, pMatrix); - break; - case XFA_ATTRIBUTEENUM_Raised: - XFA_BOX_Stroke_3DRect_Raised(pGS, rtWidget, fThickness, pMatrix); - break; - case XFA_ATTRIBUTEENUM_Etched: - XFA_BOX_Stroke_3DRect_Etched(pGS, rtWidget, fThickness, pMatrix); - break; - case XFA_ATTRIBUTEENUM_Embossed: - XFA_BOX_Stroke_3DRect_Embossed(pGS, rtWidget, fThickness, pMatrix); - break; - } - return; - } - FX_BOOL bClose = FALSE; - FX_BOOL bSameStyles = TRUE; - int32_t i; - CXFA_Stroke stroke1 = strokes[0]; - for (i = 1; i < 8; i++) { - CXFA_Stroke stroke2 = strokes[i]; - if (!stroke1.SameStyles(stroke2)) { - bSameStyles = FALSE; - break; - } - stroke1 = stroke2; - } - if (bSameStyles) { - stroke1 = strokes[0]; - bClose = TRUE; - for (i = 2; i < 8; i += 2) { - CXFA_Stroke stroke2 = strokes[i]; - if (!stroke1.SameStyles(stroke2, XFA_STROKE_SAMESTYLE_NoPresence | - XFA_STROKE_SAMESTYLE_Corner)) { - bSameStyles = FALSE; - break; - } - stroke1 = stroke2; - } - if (bSameStyles) { - stroke1 = strokes[0]; - if (stroke1.IsInverted()) { - bSameStyles = FALSE; - } - if (stroke1.GetJoinType() != XFA_ATTRIBUTEENUM_Square) { - bSameStyles = FALSE; - } - } - } - FX_BOOL bStart = TRUE; - CFX_Path path; - path.Create(); - for (i = 0; i < 8; i++) { - CXFA_Stroke stroke1 = strokes[i]; - if ((i % 1) == 0 && stroke1.GetRadius() < 0) { - FX_BOOL bEmpty = path.IsEmpty(); - if (!bEmpty) { - XFA_BOX_StrokePath(stroke1, &path, pGS, pMatrix); - path.Clear(); - } - bStart = TRUE; - continue; - } - XFA_BOX_GetPath(box, strokes, rtWidget, path, i, bStart, !bSameStyles); - CXFA_Stroke stroke2 = strokes[(i + 1) % 8]; - bStart = !stroke1.SameStyles(stroke2); - if (bStart) { - XFA_BOX_StrokePath(stroke1, &path, pGS, pMatrix); - path.Clear(); - } - } - FX_BOOL bEmpty = path.IsEmpty(); - if (!bEmpty) { - if (bClose) { - path.Close(); - } - XFA_BOX_StrokePath(strokes[7], &path, pGS, pMatrix); - } -} -static void XFA_BOX_Stroke(CXFA_Box box, - const CXFA_StrokeArray& strokes, - CFX_Graphics* pGS, - CFX_RectF rtWidget, - CFX_Matrix* pMatrix, - FX_DWORD dwFlags) { - if (box.IsArc() || (dwFlags & XFA_DRAWBOX_ForceRound) != 0) { - XFA_BOX_StrokeArc(box, pGS, rtWidget, pMatrix, dwFlags); - return; - } - bool bVisible = false; - for (int32_t j = 0; j < 4; j++) { - if (strokes[j * 2 + 1].IsVisible()) { - bVisible = true; - break; - } - } - if (!bVisible) { - return; - } - for (int32_t i = 1; i < 8; i += 2) { - CXFA_Edge edge(strokes[i].GetNode()); - FX_FLOAT fThickness = edge.GetThickness(); - if (fThickness < 0) { - fThickness = 0; - } - FX_FLOAT fHalf = fThickness / 2; - int32_t iHand = box.GetHand(); - switch (i) { - case 1: - if (iHand == XFA_ATTRIBUTEENUM_Left) { - rtWidget.top -= fHalf; - rtWidget.height += fHalf; - } else if (iHand == XFA_ATTRIBUTEENUM_Right) { - rtWidget.top += fHalf; - rtWidget.height -= fHalf; - } - break; - case 3: - if (iHand == XFA_ATTRIBUTEENUM_Left) { - rtWidget.width += fHalf; - } else if (iHand == XFA_ATTRIBUTEENUM_Right) { - rtWidget.width -= fHalf; - } - break; - case 5: - if (iHand == XFA_ATTRIBUTEENUM_Left) { - rtWidget.height += fHalf; - } else if (iHand == XFA_ATTRIBUTEENUM_Right) { - rtWidget.height -= fHalf; - } - break; - case 7: - if (iHand == XFA_ATTRIBUTEENUM_Left) { - rtWidget.left -= fHalf; - rtWidget.width += fHalf; - } else if (iHand == XFA_ATTRIBUTEENUM_Right) { - rtWidget.left += fHalf; - rtWidget.width -= fHalf; - } - break; - } - } - XFA_BOX_Stroke_Rect(box, strokes, pGS, rtWidget, pMatrix); -} -void XFA_DrawBox(CXFA_Box box, - CFX_Graphics* pGS, - const CFX_RectF& rtWidget, - CFX_Matrix* pMatrix, - FX_DWORD dwFlags) { - if (!box || box.GetPresence() != XFA_ATTRIBUTEENUM_Visible) { - return; - } - int32_t iType = box.GetClassID(); - if (iType != XFA_ELEMENT_Arc && iType != XFA_ELEMENT_Border && - iType != XFA_ELEMENT_Rectangle) { - return; - } - CXFA_StrokeArray strokes; - if (!(dwFlags & XFA_DRAWBOX_ForceRound) && iType != XFA_ELEMENT_Arc) { - box.GetStrokes(strokes); - } - XFA_BOX_Fill(box, strokes, pGS, rtWidget, pMatrix, dwFlags); - XFA_BOX_Stroke(box, strokes, pGS, rtWidget, pMatrix, dwFlags); -} diff --git a/xfa/src/fxfa/app/xfa_ffwidget.h b/xfa/src/fxfa/app/xfa_ffwidget.h deleted file mode 100644 index 5ff4295a52..0000000000 --- a/xfa/src/fxfa/app/xfa_ffwidget.h +++ /dev/null @@ -1,187 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXFA_APP_XFA_FFWIDGET_H_ -#define XFA_SRC_FXFA_APP_XFA_FFWIDGET_H_ - -#include - -#include "core/include/fxcodec/fx_codec_def.h" -#include "core/include/fxge/fx_ge.h" -#include "xfa/include/fxfa/fxfa.h" -#include "xfa/src/fxfa/parser/xfa_doclayout.h" - -class CXFA_FFPageView; -class CXFA_FFDocView; -class CXFA_FFDoc; -class CXFA_FFApp; - -inline FX_FLOAT XFA_UnitPx2Pt(FX_FLOAT fPx, FX_FLOAT fDpi) { - return fPx * 72.0f / fDpi; -} -#define XFA_FLOAT_PERCISION 0.001f -enum XFA_WIDGETITEM { - XFA_WIDGETITEM_Parent, - XFA_WIDGETITEM_FirstChild, - XFA_WIDGETITEM_NextSibling, - XFA_WIDGETITEM_PrevSibling, -}; -class CXFA_CalcData { - public: - CXFA_CalcData() : m_iRefCount(0) {} - ~CXFA_CalcData() { m_Globals.RemoveAll(); } - CFX_PtrArray m_Globals; - int32_t m_iRefCount; -}; -class CXFA_FFWidget : public IXFA_Widget, - public CFX_PrivateData, - public CXFA_ContentLayoutItem { - public: - CXFA_FFWidget(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc); - virtual ~CXFA_FFWidget(); - IXFA_PageView* GetPageView(); - void SetPageView(IXFA_PageView* pPageView); - void GetWidgetRect(CFX_RectF& rtWidget); - CFX_RectF ReCacheWidgetRect(); - FX_DWORD GetStatus(); - void ModifyStatus(FX_DWORD dwAdded, FX_DWORD dwRemoved); - virtual FX_BOOL GetBBox(CFX_RectF& rtBox, - FX_DWORD dwStatus, - FX_BOOL bDrawFocus = FALSE); - CXFA_WidgetAcc* GetDataAcc(); - FX_BOOL GetToolTip(CFX_WideString& wsToolTip); - virtual void RenderWidget(CFX_Graphics* pGS, - CFX_Matrix* pMatrix = NULL, - FX_DWORD dwStatus = 0, - int32_t iRotate = 0); - - virtual FX_BOOL IsLoaded(); - virtual FX_BOOL LoadWidget(); - virtual void UnloadWidget(); - virtual FX_BOOL PerformLayout(); - virtual FX_BOOL UpdateFWLData(); - virtual void UpdateWidgetProperty(); - virtual FX_BOOL OnMouseEnter(); - virtual FX_BOOL OnMouseExit(); - virtual FX_BOOL OnLButtonDown(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy); - virtual FX_BOOL OnLButtonUp(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy); - virtual FX_BOOL OnLButtonDblClk(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy); - virtual FX_BOOL OnMouseMove(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy); - virtual FX_BOOL OnMouseWheel(FX_DWORD dwFlags, - int16_t zDelta, - FX_FLOAT fx, - FX_FLOAT fy); - virtual FX_BOOL OnRButtonDown(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy); - virtual FX_BOOL OnRButtonUp(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy); - virtual FX_BOOL OnRButtonDblClk(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy); - - virtual FX_BOOL OnSetFocus(CXFA_FFWidget* pOldWidget); - virtual FX_BOOL OnKillFocus(CXFA_FFWidget* pNewWidget); - virtual FX_BOOL OnKeyDown(FX_DWORD dwKeyCode, FX_DWORD dwFlags); - virtual FX_BOOL OnKeyUp(FX_DWORD dwKeyCode, FX_DWORD dwFlags); - virtual FX_BOOL OnChar(FX_DWORD dwChar, FX_DWORD dwFlags); - virtual FX_DWORD OnHitTest(FX_FLOAT fx, FX_FLOAT fy); - virtual FX_BOOL OnSetCursor(FX_FLOAT fx, FX_FLOAT fy); - virtual FX_BOOL CanUndo() { return FALSE; } - virtual FX_BOOL CanRedo() { return FALSE; } - virtual FX_BOOL Undo() { return FALSE; } - virtual FX_BOOL Redo() { return FALSE; } - virtual FX_BOOL CanCopy() { return FALSE; } - virtual FX_BOOL CanCut() { return FALSE; } - virtual FX_BOOL CanPaste() { return FALSE; } - virtual FX_BOOL CanSelectAll() { return FALSE; } - virtual FX_BOOL CanDelete() { return CanCut(); } - virtual FX_BOOL CanDeSelect() { return CanCopy(); } - virtual FX_BOOL Copy(CFX_WideString& wsCopy) { return FALSE; } - virtual FX_BOOL Cut(CFX_WideString& wsCut) { return FALSE; } - virtual FX_BOOL Paste(const CFX_WideString& wsPaste) { return FALSE; } - virtual FX_BOOL SelectAll() { return FALSE; } - virtual FX_BOOL Delete() { return FALSE; } - virtual FX_BOOL DeSelect() { return FALSE; } - virtual FX_BOOL GetSuggestWords(CFX_PointF pointf, - std::vector& sSuggest) { - return FALSE; - } - virtual FX_BOOL ReplaceSpellCheckWord(CFX_PointF pointf, - const CFX_ByteStringC& bsReplace) { - return FALSE; - } - CXFA_FFDocView* GetDocView(); - void SetDocView(CXFA_FFDocView* pDocView) { m_pDocView = pDocView; } - CXFA_FFDoc* GetDoc(); - CXFA_FFApp* GetApp(); - IXFA_AppProvider* GetAppProvider(); - void InvalidateWidget(const CFX_RectF* pRect = NULL); - void AddInvalidateRect(const CFX_RectF* pRect = NULL); - FX_BOOL GetCaptionText(CFX_WideString& wsCap); - FX_BOOL IsFocused(); - void Rotate2Normal(FX_FLOAT& fx, FX_FLOAT& fy); - void GetRotateMatrix(CFX_Matrix& mt); - FX_BOOL IsLayoutRectEmpty(); - CXFA_FFWidget* GetParent(); - FX_BOOL IsAncestorOf(CXFA_FFWidget* pWidget); - - protected: - virtual FX_BOOL PtInActiveRect(FX_FLOAT fx, FX_FLOAT fy); - void DrawBorder(CFX_Graphics* pGS, - CXFA_Box box, - const CFX_RectF& rtBorder, - CFX_Matrix* pMatrix, - FX_DWORD dwFlags = 0); - void GetMinMaxWidth(FX_FLOAT fMinWidth, FX_FLOAT fMaxWidth); - void GetMinMaxHeight(FX_FLOAT fMinHeight, FX_FLOAT fMaxHeight); - void GetRectWithoutRotate(CFX_RectF& rtWidget); - FX_BOOL IsMatchVisibleStatus(FX_DWORD dwStatus); - - void EventKillFocus(); - FX_BOOL IsButtonDown(); - void SetButtonDown(FX_BOOL bSet); - CXFA_FFDocView* m_pDocView; - CXFA_FFPageView* m_pPageView; - CXFA_WidgetAcc* m_pDataAcc; - CFX_RectF m_rtWidget; -}; -int32_t XFA_StrokeTypeSetLineDash(CFX_Graphics* pGraphics, - int32_t iStrokeType, - int32_t iCapType); -CFX_GraphStateData::LineCap XFA_LineCapToFXGE(int32_t iLineCap); -void XFA_DrawImage(CFX_Graphics* pGS, - const CFX_RectF& rtImage, - CFX_Matrix* pMatrix, - CFX_DIBitmap* pDIBitmap, - int32_t iAspect, - int32_t iImageXDpi, - int32_t iImageYDpi, - int32_t iHorzAlign = XFA_ATTRIBUTEENUM_Left, - int32_t iVertAlign = XFA_ATTRIBUTEENUM_Top); -CFX_DIBitmap* XFA_LoadImageData(CXFA_FFDoc* pDoc, - CXFA_Image* pImage, - FX_BOOL& bNameImage, - int32_t& iImageXDpi, - int32_t& iImageYDpi); -CFX_DIBitmap* XFA_LoadImageFromBuffer(IFX_FileRead* pImageFileRead, - FXCODEC_IMAGE_TYPE type, - int32_t& iImageXDpi, - int32_t& iImageYDpi); -FXCODEC_IMAGE_TYPE XFA_GetImageType(const CFX_WideStringC& wsType); -FX_CHAR* XFA_Base64Encode(const uint8_t* buf, int32_t buf_len); -void XFA_RectWidthoutMargin(CFX_RectF& rt, - const CXFA_Margin& mg, - FX_BOOL bUI = FALSE); -FX_FLOAT XFA_GetEdgeThickness(const CXFA_StrokeArray& strokes, - FX_BOOL b3DStyle, - int32_t nIndex); -CXFA_FFWidget* XFA_GetWidgetFromLayoutItem(CXFA_LayoutItem* pLayoutItem); -FX_BOOL XFA_IsCreateWidget(XFA_ELEMENT iType); -#define XFA_DRAWBOX_ForceRound 1 -#define XFA_DRAWBOX_Lowered3D 2 -void XFA_DrawBox(CXFA_Box box, - CFX_Graphics* pGS, - const CFX_RectF& rtWidget, - CFX_Matrix* pMatrix, - FX_DWORD dwFlags = 0); - -#endif // XFA_SRC_FXFA_APP_XFA_FFWIDGET_H_ diff --git a/xfa/src/fxfa/app/xfa_ffwidgetacc.cpp b/xfa/src/fxfa/app/xfa_ffwidgetacc.cpp deleted file mode 100644 index 10aaad0dc5..0000000000 --- a/xfa/src/fxfa/app/xfa_ffwidgetacc.cpp +++ /dev/null @@ -1,1714 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fxfa/app/xfa_ffwidgetacc.h" - -#include - -#include "xfa/src/fde/tto/fde_textout.h" -#include "xfa/src/fxfa/app/xfa_ffapp.h" -#include "xfa/src/fxfa/app/xfa_ffcheckbutton.h" -#include "xfa/src/fxfa/app/xfa_ffchoicelist.h" -#include "xfa/src/fxfa/app/xfa_ffdoc.h" -#include "xfa/src/fxfa/app/xfa_ffdocview.h" -#include "xfa/src/fxfa/app/xfa_fffield.h" -#include "xfa/src/fxfa/app/xfa_ffpageview.h" -#include "xfa/src/fxfa/app/xfa_ffwidget.h" -#include "xfa/src/fxfa/app/xfa_fontmgr.h" -#include "xfa/src/fxfa/app/xfa_fwladapter.h" -#include "xfa/src/fxfa/app/xfa_textlayout.h" -#include "xfa/src/fxfa/parser/xfa_localevalue.h" -#include "xfa/src/fxfa/parser/xfa_script.h" - -static void XFA_FFDeleteCalcData(void* pData) { - if (pData) { - delete ((CXFA_CalcData*)pData); - } -} -static XFA_MAPDATABLOCKCALLBACKINFO gs_XFADeleteCalcData = { - XFA_FFDeleteCalcData, NULL}; -class CXFA_WidgetLayoutData { - public: - CXFA_WidgetLayoutData() : m_fWidgetHeight(-1) {} - virtual ~CXFA_WidgetLayoutData() {} - virtual void Release() { delete this; } - FX_FLOAT m_fWidgetHeight; -}; -class CXFA_TextLayoutData : public CXFA_WidgetLayoutData { - public: - CXFA_TextLayoutData() : m_pTextLayout(NULL), m_pTextProvider(NULL) {} - ~CXFA_TextLayoutData() { - if (m_pTextLayout) { - delete m_pTextLayout; - } - m_pTextLayout = NULL; - if (m_pTextProvider) { - delete m_pTextProvider; - } - m_pTextProvider = NULL; - } - void LoadText(CXFA_WidgetAcc* pAcc) { - if (m_pTextLayout) - return; - - m_pTextProvider = new CXFA_TextProvider(pAcc, XFA_TEXTPROVIDERTYPE_Text); - m_pTextLayout = new CXFA_TextLayout(m_pTextProvider); - } - CXFA_TextLayout* m_pTextLayout; - CXFA_TextProvider* m_pTextProvider; -}; -class CXFA_ImageLayoutData : public CXFA_WidgetLayoutData { - public: - CXFA_ImageLayoutData() - : m_pDIBitmap(NULL), - m_bNamedImage(FALSE), - m_iImageXDpi(0), - m_iImageYDpi(0) {} - - ~CXFA_ImageLayoutData() { - if (m_pDIBitmap && !m_bNamedImage) { - delete m_pDIBitmap; - } - m_pDIBitmap = NULL; - } - - FX_BOOL LoadImageData(CXFA_WidgetAcc* pAcc) { - if (m_pDIBitmap) { - return TRUE; - } - CXFA_Value value = pAcc->GetFormValue(); - if (!value) { - return FALSE; - } - CXFA_Image imageObj = value.GetImage(); - if (!imageObj) { - return FALSE; - } - CXFA_FFDoc* pFFDoc = pAcc->GetDoc(); - pAcc->SetImageImage(XFA_LoadImageData(pFFDoc, &imageObj, m_bNamedImage, - m_iImageXDpi, m_iImageYDpi)); - return m_pDIBitmap != NULL; - } - - CFX_DIBitmap* m_pDIBitmap; - FX_BOOL m_bNamedImage; - int32_t m_iImageXDpi; - int32_t m_iImageYDpi; -}; -class CXFA_FieldLayoutData : public CXFA_WidgetLayoutData { - public: - CXFA_FieldLayoutData() - : m_pCapTextLayout(NULL), - m_pCapTextProvider(NULL), - m_pTextOut(NULL), - m_pFieldSplitArray(NULL) {} - ~CXFA_FieldLayoutData() { - if (m_pCapTextLayout) { - delete m_pCapTextLayout; - } - m_pCapTextLayout = NULL; - if (m_pCapTextProvider) { - delete m_pCapTextProvider; - } - m_pCapTextProvider = NULL; - if (m_pTextOut) { - m_pTextOut->Release(); - } - m_pTextOut = NULL; - if (m_pFieldSplitArray) { - m_pFieldSplitArray->RemoveAll(); - delete m_pFieldSplitArray; - m_pFieldSplitArray = NULL; - } - } - FX_BOOL LoadCaption(CXFA_WidgetAcc* pAcc) { - if (m_pCapTextLayout) { - return TRUE; - } - CXFA_Caption caption = pAcc->GetCaption(); - if (caption && caption.GetPresence() != XFA_ATTRIBUTEENUM_Hidden) { - m_pCapTextProvider = - new CXFA_TextProvider(pAcc, XFA_TEXTPROVIDERTYPE_Caption); - m_pCapTextLayout = new CXFA_TextLayout(m_pCapTextProvider); - return TRUE; - } - return FALSE; - } - CXFA_TextLayout* m_pCapTextLayout; - CXFA_TextProvider* m_pCapTextProvider; - IFDE_TextOut* m_pTextOut; - CFX_FloatArray* m_pFieldSplitArray; -}; -class CXFA_TextEditData : public CXFA_FieldLayoutData { - public: -}; -class CXFA_ImageEditData : public CXFA_FieldLayoutData { - public: - CXFA_ImageEditData() - : m_pDIBitmap(NULL), - m_bNamedImage(FALSE), - m_iImageXDpi(0), - m_iImageYDpi(0) {} - - ~CXFA_ImageEditData() { - if (m_pDIBitmap && !m_bNamedImage) { - delete m_pDIBitmap; - } - m_pDIBitmap = NULL; - } - FX_BOOL LoadImageData(CXFA_WidgetAcc* pAcc) { - if (m_pDIBitmap) { - return TRUE; - } - CXFA_Value value = pAcc->GetFormValue(); - if (!value) { - return FALSE; - } - CXFA_Image imageObj = value.GetImage(); - CXFA_FFDoc* pFFDoc = pAcc->GetDoc(); - pAcc->SetImageEditImage(XFA_LoadImageData(pFFDoc, &imageObj, m_bNamedImage, - m_iImageXDpi, m_iImageYDpi)); - return m_pDIBitmap != NULL; - } - CFX_DIBitmap* m_pDIBitmap; - FX_BOOL m_bNamedImage; - int32_t m_iImageXDpi; - int32_t m_iImageYDpi; -}; -CXFA_WidgetAcc::CXFA_WidgetAcc(CXFA_FFDocView* pDocView, CXFA_Node* pNode) - : CXFA_WidgetData(pNode), - m_pDocView(pDocView), - m_pLayoutData(NULL), - m_nRecursionDepth(0) {} -CXFA_WidgetAcc::~CXFA_WidgetAcc() { - if (m_pLayoutData) { - m_pLayoutData->Release(); - m_pLayoutData = NULL; - } -} -FX_BOOL CXFA_WidgetAcc::GetName(CFX_WideString& wsName, int32_t iNameType) { - if (iNameType == 0) { - m_pNode->TryCData(XFA_ATTRIBUTE_Name, wsName); - return !wsName.IsEmpty(); - } - m_pNode->GetSOMExpression(wsName); - if (iNameType == 2 && wsName.GetLength() >= 15) { - CFX_WideStringC wsPre = FX_WSTRC(L"xfa[0].form[0]."); - if (wsPre == CFX_WideStringC(wsName, wsPre.GetLength())) { - wsName.Delete(0, wsPre.GetLength()); - } - } - return TRUE; -} -CXFA_Node* CXFA_WidgetAcc::GetDatasets() { - return m_pNode->GetBindData(); -} -FX_BOOL CXFA_WidgetAcc::ProcessValueChanged() { - m_pDocView->AddValidateWidget(this); - m_pDocView->AddCalculateWidgetAcc(this); - m_pDocView->RunCalculateWidgets(); - m_pDocView->RunValidate(); - return TRUE; -} -void CXFA_WidgetAcc::ResetData() { - CFX_WideString wsValue; - XFA_ELEMENT eUIType = (XFA_ELEMENT)GetUIType(); - switch (eUIType) { - case XFA_ELEMENT_ImageEdit: { - CXFA_Value imageValue = GetDefaultValue(); - CXFA_Image image = imageValue.GetImage(); - CFX_WideString wsContentType, wsHref; - if (image) { - image.GetContent(wsValue); - image.GetContentType(wsContentType); - image.GetHref(wsHref); - } - SetImageEdit(wsContentType, wsHref, wsValue); - } break; - case XFA_ELEMENT_ExclGroup: { - CXFA_Node* pNextChild = m_pNode->GetNodeItem( - XFA_NODEITEM_FirstChild, XFA_OBJECTTYPE_ContainerNode); - while (pNextChild) { - CXFA_Node* pChild = pNextChild; - CXFA_WidgetAcc* pAcc = (CXFA_WidgetAcc*)pChild->GetWidgetData(); - if (!pAcc) { - continue; - } - CXFA_Value defValue(NULL); - if (wsValue.IsEmpty() && (defValue = pAcc->GetDefaultValue())) { - defValue.GetChildValueContent(wsValue); - SetValue(wsValue, XFA_VALUEPICTURE_Raw); - pAcc->SetValue(wsValue, XFA_VALUEPICTURE_Raw); - } else { - CXFA_Node* pItems = pChild->GetChild(0, XFA_ELEMENT_Items); - if (!pItems) { - continue; - } - CFX_WideString itemText; - if (pItems->CountChildren(XFA_ELEMENT_UNKNOWN) > 1) { - itemText = pItems->GetChild(1, XFA_ELEMENT_UNKNOWN)->GetContent(); - } - pAcc->SetValue(itemText, XFA_VALUEPICTURE_Raw); - } - pNextChild = pChild->GetNodeItem(XFA_NODEITEM_NextSibling, - XFA_OBJECTTYPE_ContainerNode); - } - } break; - case XFA_ELEMENT_ChoiceList: - ClearAllSelections(); - default: - if (CXFA_Value defValue = GetDefaultValue()) { - defValue.GetChildValueContent(wsValue); - } - SetValue(wsValue, XFA_VALUEPICTURE_Raw); - break; - } -} -void CXFA_WidgetAcc::SetImageEdit(const CFX_WideStringC& wsContentType, - const CFX_WideStringC& wsHref, - const CFX_WideStringC& wsData) { - CXFA_Image image = GetFormValue().GetImage(); - if (image) { - image.SetContentType(wsContentType); - image.SetHref(wsHref); - } - CFX_WideString wsFormatValue(wsData); - GetFormatDataValue(wsData, wsFormatValue); - m_pNode->SetContent(wsData, wsFormatValue, TRUE); - CXFA_Node* pBind = GetDatasets(); - if (!pBind) { - image.SetTransferEncoding(XFA_ATTRIBUTEENUM_Base64); - return; - } - pBind->SetCData(XFA_ATTRIBUTE_ContentType, wsContentType); - CXFA_Node* pHrefNode = pBind->GetNodeItem(XFA_NODEITEM_FirstChild); - if (pHrefNode) { - pHrefNode->SetCData(XFA_ATTRIBUTE_Value, wsHref); - } else { - IFDE_XMLNode* pXMLNode = pBind->GetXMLMappingNode(); - FXSYS_assert(pXMLNode && pXMLNode->GetType() == FDE_XMLNODE_Element); - ((IFDE_XMLElement*)pXMLNode)->SetString(FX_WSTRC(L"href"), wsHref); - } -} - -CXFA_WidgetAcc* CXFA_WidgetAcc::GetExclGroup() { - CXFA_Node* pExcl = m_pNode->GetNodeItem(XFA_NODEITEM_Parent); - if (!pExcl || pExcl->GetClassID() != XFA_ELEMENT_ExclGroup) { - return NULL; - } - return (CXFA_WidgetAcc*)pExcl->GetWidgetData(); -} -CXFA_FFDocView* CXFA_WidgetAcc::GetDocView() { - return m_pDocView; -} -CXFA_FFDoc* CXFA_WidgetAcc::GetDoc() { - return (CXFA_FFDoc*)m_pDocView->GetDoc(); -} -CXFA_FFApp* CXFA_WidgetAcc::GetApp() { - return GetDoc()->GetApp(); -} -IXFA_AppProvider* CXFA_WidgetAcc::GetAppProvider() { - return GetApp()->GetAppProvider(); -} -int32_t CXFA_WidgetAcc::ProcessEvent(int32_t iActivity, - CXFA_EventParam* pEventParam) { - if (GetClassID() == XFA_ELEMENT_Draw) { - return XFA_EVENTERROR_NotExist; - } - int32_t iRet = XFA_EVENTERROR_NotExist; - CXFA_NodeArray eventArray; - int32_t iCounts = - GetEventByActivity(iActivity, eventArray, pEventParam->m_bIsFormReady); - for (int32_t i = 0; i < iCounts; i++) { - CXFA_Event event(eventArray[i]); - int32_t result = ProcessEvent(event, pEventParam); - if (i == 0) { - iRet = result; - } else if (result == XFA_EVENTERROR_Sucess) { - iRet = result; - } - } - return iRet; -} -int32_t CXFA_WidgetAcc::ProcessEvent(CXFA_Event& event, - CXFA_EventParam* pEventParam) { - if (!event) { - return XFA_EVENTERROR_NotExist; - } - switch (event.GetEventType()) { - case XFA_ELEMENT_Execute: - break; - case XFA_ELEMENT_Script: { - CXFA_Script script = event.GetScript(); - return ExecuteScript(script, pEventParam); - } break; - case XFA_ELEMENT_SignData: - break; - case XFA_ELEMENT_Submit: { - CXFA_Submit submit = event.GetSubmit(); - return GetDoc()->GetDocProvider()->SubmitData(GetDoc(), submit); - } - default: - break; - } - return XFA_EVENTERROR_NotExist; -} -int32_t CXFA_WidgetAcc::ProcessCalculate() { - if (GetClassID() == XFA_ELEMENT_Draw) { - return XFA_EVENTERROR_NotExist; - } - CXFA_Calculate calc = GetCalculate(); - if (!calc) { - return XFA_EVENTERROR_NotExist; - } - if (GetNode()->HasFlag(XFA_NODEFLAG_UserInteractive)) { - return XFA_EVENTERROR_Disabled; - } - CXFA_EventParam EventParam; - EventParam.m_eType = XFA_EVENT_Calculate; - CXFA_Script script = calc.GetScript(); - int32_t iRet = ExecuteScript(script, &EventParam); - if (iRet == XFA_EVENTERROR_Sucess) { - if (GetRawValue() != EventParam.m_wsResult) { - const bool bNotify = GetDoc()->GetDocType() == XFA_DOCTYPE_Static; - SetValue(EventParam.m_wsResult, XFA_VALUEPICTURE_Raw); - UpdateUIDisplay(); - if (bNotify) { - NotifyEvent(XFA_WIDGETEVENT_PostContentChanged, NULL, NULL, NULL); - } - iRet = XFA_EVENTERROR_Sucess; - } - } - return iRet; -} -void CXFA_WidgetAcc::ProcessScriptTestValidate(CXFA_Validate validate, - int32_t iRet, - FXJSE_HVALUE pRetValue, - FX_BOOL bVersionFlag) { - if (iRet == XFA_EVENTERROR_Sucess && pRetValue) { - if (FXJSE_Value_IsBoolean(pRetValue) && !FXJSE_Value_ToBoolean(pRetValue)) { - IXFA_AppProvider* pAppProvider = GetAppProvider(); - if (!pAppProvider) { - return; - } - CFX_WideString wsTitle; - pAppProvider->LoadString(XFA_IDS_AppName, wsTitle); - CFX_WideString wsScriptMsg; - validate.GetScriptMessageText(wsScriptMsg); - int32_t eScriptTest = validate.GetScriptTest(); - if (eScriptTest == XFA_ATTRIBUTEENUM_Warning) { - if (GetNode()->HasFlag(XFA_NODEFLAG_UserInteractive)) { - return; - } - if (wsScriptMsg.IsEmpty()) { - GetValidateMessage(pAppProvider, wsScriptMsg, FALSE, bVersionFlag); - } - if (bVersionFlag) { - pAppProvider->MsgBox(wsScriptMsg, wsTitle, XFA_MBICON_Warning, - XFA_MB_OK); - return; - } - if (pAppProvider->MsgBox(wsScriptMsg, wsTitle, XFA_MBICON_Warning, - XFA_MB_YesNo) == XFA_IDYes) { - GetNode()->SetFlag(XFA_NODEFLAG_UserInteractive, TRUE, FALSE); - } - } else { - if (wsScriptMsg.IsEmpty()) { - GetValidateMessage(pAppProvider, wsScriptMsg, TRUE, bVersionFlag); - } - pAppProvider->MsgBox(wsScriptMsg, wsTitle, XFA_MBICON_Error, XFA_MB_OK); - } - } - } -} -int32_t CXFA_WidgetAcc::ProcessFormatTestValidate(CXFA_Validate validate, - FX_BOOL bVersionFlag) { - CFX_WideString wsRawValue = GetRawValue(); - if (!wsRawValue.IsEmpty()) { - CFX_WideString wsPicture; - validate.GetPicture(wsPicture); - if (wsPicture.IsEmpty()) { - return XFA_EVENTERROR_NotExist; - } - IFX_Locale* pLocale = GetLocal(); - if (!pLocale) { - return XFA_EVENTERROR_NotExist; - } - CXFA_LocaleValue lcValue = XFA_GetLocaleValue(this); - if (!lcValue.ValidateValue(lcValue.GetValue(), wsPicture, pLocale)) { - IXFA_AppProvider* pAppProvider = GetAppProvider(); - if (!pAppProvider) { - return XFA_EVENTERROR_NotExist; - } - CFX_WideString wsFormatMsg; - validate.GetFormatMessageText(wsFormatMsg); - CFX_WideString wsTitle; - pAppProvider->LoadString(XFA_IDS_AppName, wsTitle); - int32_t eFormatTest = validate.GetFormatTest(); - if (eFormatTest == XFA_ATTRIBUTEENUM_Error) { - if (wsFormatMsg.IsEmpty()) { - GetValidateMessage(pAppProvider, wsFormatMsg, TRUE, bVersionFlag); - } - pAppProvider->MsgBox(wsFormatMsg, wsTitle, XFA_MBICON_Error, XFA_MB_OK); - return XFA_EVENTERROR_Sucess; - } - if (GetNode()->HasFlag(XFA_NODEFLAG_UserInteractive)) { - return XFA_EVENTERROR_NotExist; - } - if (wsFormatMsg.IsEmpty()) { - GetValidateMessage(pAppProvider, wsFormatMsg, FALSE, bVersionFlag); - } - if (bVersionFlag) { - pAppProvider->MsgBox(wsFormatMsg, wsTitle, XFA_MBICON_Warning, - XFA_MB_OK); - return XFA_EVENTERROR_Sucess; - } - if (pAppProvider->MsgBox(wsFormatMsg, wsTitle, XFA_MBICON_Warning, - XFA_MB_YesNo) == XFA_IDYes) { - GetNode()->SetFlag(XFA_NODEFLAG_UserInteractive, TRUE, FALSE); - } - return XFA_EVENTERROR_Sucess; - } - } - return XFA_EVENTERROR_NotExist; -} -int32_t CXFA_WidgetAcc::ProcessNullTestValidate(CXFA_Validate validate, - int32_t iFlags, - FX_BOOL bVersionFlag) { - CFX_WideString wsValue; - GetValue(wsValue, XFA_VALUEPICTURE_Raw); - if (!wsValue.IsEmpty()) { - return XFA_EVENTERROR_Sucess; - } - if (m_bIsNull && (m_bPreNull == m_bIsNull)) { - return XFA_EVENTERROR_Sucess; - } - int32_t eNullTest = validate.GetNullTest(); - CFX_WideString wsNullMsg; - validate.GetNullMessageText(wsNullMsg); - if (iFlags & 0x01) { - int32_t iRet = XFA_EVENTERROR_Sucess; - if (eNullTest != XFA_ATTRIBUTEENUM_Disabled) { - iRet = XFA_EVENTERROR_Error; - } - if (!wsNullMsg.IsEmpty()) { - if (eNullTest != XFA_ATTRIBUTEENUM_Disabled) { - m_pDocView->m_arrNullTestMsg.Add(wsNullMsg); - return XFA_EVENTERROR_Error; - } - return XFA_EVENTERROR_Sucess; - } - return iRet; - } - if (wsNullMsg.IsEmpty() && bVersionFlag && - eNullTest != XFA_ATTRIBUTEENUM_Disabled) { - return XFA_EVENTERROR_Error; - } - IXFA_AppProvider* pAppProvider = GetAppProvider(); - if (!pAppProvider) { - return XFA_EVENTERROR_NotExist; - } - CFX_WideString wsCaptionName; - CFX_WideString wsTitle; - pAppProvider->LoadString(XFA_IDS_AppName, wsTitle); - switch (eNullTest) { - case XFA_ATTRIBUTEENUM_Error: { - if (wsNullMsg.IsEmpty()) { - GetValidateCaptionName(wsCaptionName, bVersionFlag); - CFX_WideString wsError; - pAppProvider->LoadString(XFA_IDS_ValidateNullError, wsError); - wsNullMsg.Format(wsError, (const FX_WCHAR*)wsCaptionName); - } - pAppProvider->MsgBox(wsNullMsg, wsTitle, XFA_MBICON_Status, XFA_MB_OK); - return XFA_EVENTERROR_Error; - } - case XFA_ATTRIBUTEENUM_Warning: { - if (GetNode()->HasFlag(XFA_NODEFLAG_UserInteractive)) { - return TRUE; - } - if (wsNullMsg.IsEmpty()) { - GetValidateCaptionName(wsCaptionName, bVersionFlag); - CFX_WideString wsWarning; - pAppProvider->LoadString(XFA_IDS_ValidateNullWarning, wsWarning); - wsNullMsg.Format(wsWarning, (const FX_WCHAR*)wsCaptionName, - (const FX_WCHAR*)wsCaptionName); - } - if (pAppProvider->MsgBox(wsNullMsg, wsTitle, XFA_MBICON_Warning, - XFA_MB_YesNo) == XFA_IDYes) { - GetNode()->SetFlag(XFA_NODEFLAG_UserInteractive, TRUE, FALSE); - } - return XFA_EVENTERROR_Error; - } - case XFA_ATTRIBUTEENUM_Disabled: - default: - break; - } - return XFA_EVENTERROR_Sucess; -} -void CXFA_WidgetAcc::GetValidateCaptionName(CFX_WideString& wsCaptionName, - FX_BOOL bVersionFlag) { - if (!bVersionFlag) { - CXFA_Caption caption = GetCaption(); - if (caption) { - CXFA_Value capValue = caption.GetValue(); - if (capValue) { - CXFA_Text capText = capValue.GetText(); - if (capText) { - capText.GetContent(wsCaptionName); - } - } - } - } - if (wsCaptionName.IsEmpty()) { - GetName(wsCaptionName); - } -} -void CXFA_WidgetAcc::GetValidateMessage(IXFA_AppProvider* pAppProvider, - CFX_WideString& wsMessage, - FX_BOOL bError, - FX_BOOL bVersionFlag) { - CFX_WideString wsCaptionName; - GetValidateCaptionName(wsCaptionName, bVersionFlag); - CFX_WideString wsError; - if (bVersionFlag) { - pAppProvider->LoadString(XFA_IDS_ValidateFailed, wsError); - wsMessage.Format(wsError, (const FX_WCHAR*)wsCaptionName); - return; - } - if (bError) { - pAppProvider->LoadString(XFA_IDS_ValidateError, wsError); - wsMessage.Format(wsError, (const FX_WCHAR*)wsCaptionName); - return; - } - CFX_WideString wsWarning; - pAppProvider->LoadString(XFA_IDS_ValidateWarning, wsWarning); - wsMessage.Format(wsWarning, (const FX_WCHAR*)wsCaptionName, - (const FX_WCHAR*)wsCaptionName); -} -int32_t CXFA_WidgetAcc::ProcessValidate(int32_t iFlags) { - if (GetClassID() == XFA_ELEMENT_Draw) { - return XFA_EVENTERROR_NotExist; - } - CXFA_Validate validate = GetValidate(); - if (!validate) { - return XFA_EVENTERROR_NotExist; - } - FX_BOOL bInitDoc = validate.GetNode()->HasFlag(XFA_NODEFLAG_NeedsInitApp); - FX_BOOL bStatus = - m_pDocView->GetLayoutStatus() < XFA_DOCVIEW_LAYOUTSTATUS_End; - int32_t iFormat = 0; - FXJSE_HVALUE pRetValue = NULL; - int32_t iRet = XFA_EVENTERROR_NotExist; - CXFA_Script script = validate.GetScript(); - if (script) { - CXFA_EventParam eParam; - eParam.m_eType = XFA_EVENT_Validate; - eParam.m_pTarget = this; - iRet = ExecuteScript(script, &eParam, - ((bInitDoc || bStatus) && GetRawValue().IsEmpty()) - ? nullptr - : &pRetValue); - } - XFA_VERSION version = GetDoc()->GetXFADoc()->GetCurVersionMode(); - FX_BOOL bVersionFlag = FALSE; - if (version < XFA_VERSION_208) { - bVersionFlag = TRUE; - } - if (bInitDoc) { - validate.GetNode()->SetFlag(XFA_NODEFLAG_NeedsInitApp, FALSE, FALSE); - } else { - iFormat = ProcessFormatTestValidate(validate, bVersionFlag); - if (!bVersionFlag) { - bVersionFlag = GetDoc()->GetXFADoc()->HasFlag(XFA_DOCFLAG_Scripting); - } - iRet |= ProcessNullTestValidate(validate, iFlags, bVersionFlag); - } - if (iFormat != XFA_EVENTERROR_Sucess) { - ProcessScriptTestValidate(validate, iRet, pRetValue, bVersionFlag); - } - if (pRetValue) { - FXJSE_Value_Release(pRetValue); - } - return iRet | iFormat; -} -int32_t CXFA_WidgetAcc::ExecuteScript(CXFA_Script script, - CXFA_EventParam* pEventParam, - FXJSE_HVALUE* pRetValue) { - static const uint32_t MAX_RECURSION_DEPTH = 2; - if (m_nRecursionDepth > MAX_RECURSION_DEPTH) - return XFA_EVENTERROR_Sucess; - FXSYS_assert(pEventParam); - if (!script) { - return XFA_EVENTERROR_NotExist; - } - if (script.GetRunAt() == XFA_ATTRIBUTEENUM_Server) { - return XFA_EVENTERROR_Disabled; - } - CFX_WideString wsExpression; - script.GetExpression(wsExpression); - if (wsExpression.IsEmpty()) { - return XFA_EVENTERROR_NotExist; - } - XFA_SCRIPTTYPE eScriptType = script.GetContentType(); - if (eScriptType == XFA_SCRIPTTYPE_Unkown) { - return XFA_EVENTERROR_Sucess; - } - CXFA_FFDoc* pDoc = GetDoc(); - IXFA_ScriptContext* pContext = pDoc->GetXFADoc()->GetScriptContext(); - pContext->SetEventParam(*pEventParam); - pContext->SetRunAtType((XFA_ATTRIBUTEENUM)script.GetRunAt()); - CXFA_NodeArray refNodes; - if (pEventParam->m_eType == XFA_EVENT_InitCalculate || - pEventParam->m_eType == XFA_EVENT_Calculate) { - pContext->SetNodesOfRunScript(&refNodes); - } - FXJSE_HVALUE hRetValue = FXJSE_Value_Create(pContext->GetRuntime()); - ++m_nRecursionDepth; - FX_BOOL bRet = pContext->RunScript((XFA_SCRIPTLANGTYPE)eScriptType, - wsExpression, hRetValue, m_pNode); - --m_nRecursionDepth; - int32_t iRet = XFA_EVENTERROR_Error; - if (bRet) { - iRet = XFA_EVENTERROR_Sucess; - if (pEventParam->m_eType == XFA_EVENT_Calculate || - pEventParam->m_eType == XFA_EVENT_InitCalculate) { - if (!FXJSE_Value_IsUndefined(hRetValue)) { - if (!FXJSE_Value_IsNull(hRetValue)) { - CFX_ByteString bsString; - FXJSE_Value_ToUTF8String(hRetValue, bsString); - pEventParam->m_wsResult = - CFX_WideString::FromUTF8(bsString, bsString.GetLength()); - } - iRet = XFA_EVENTERROR_Sucess; - } else { - iRet = XFA_EVENTERROR_Error; - } - if (pEventParam->m_eType == XFA_EVENT_InitCalculate) { - if ((iRet == XFA_EVENTERROR_Sucess) && - (GetRawValue() != pEventParam->m_wsResult)) { - SetValue(pEventParam->m_wsResult, XFA_VALUEPICTURE_Raw); - m_pDocView->AddValidateWidget(this); - } - } - int32_t iRefs = refNodes.GetSize(); - for (int32_t r = 0; r < iRefs; r++) { - CXFA_WidgetAcc* pRefAcc = (CXFA_WidgetAcc*)refNodes[r]->GetWidgetData(); - if (pRefAcc && pRefAcc == this) { - continue; - } - CXFA_Node* pRefNode = refNodes[r]; - CXFA_CalcData* pGlobalData = - (CXFA_CalcData*)pRefNode->GetUserData(XFA_CalcData); - if (!pGlobalData) { - pGlobalData = new CXFA_CalcData; - pRefNode->SetUserData(XFA_CalcData, pGlobalData, - &gs_XFADeleteCalcData); - } - if (pGlobalData->m_Globals.Find(this) < 0) { - pGlobalData->m_Globals.Add(this); - } - } - } - } - if (pRetValue) { - *pRetValue = hRetValue; - } else { - FXJSE_Value_Release(hRetValue); - } - pContext->SetNodesOfRunScript(NULL); - return iRet; -} -CXFA_FFWidget* CXFA_WidgetAcc::GetNextWidget(CXFA_FFWidget* pWidget) { - CXFA_LayoutItem* pLayout = nullptr; - if (pWidget) { - pLayout = pWidget->GetNext(); - } else { - pLayout = m_pDocView->GetXFALayout()->GetLayoutItem(m_pNode); - } - return static_cast(pLayout); -} -void CXFA_WidgetAcc::UpdateUIDisplay(CXFA_FFWidget* pExcept) { - CXFA_FFWidget* pWidget = NULL; - while ((pWidget = GetNextWidget(pWidget))) { - if (pWidget == pExcept || !pWidget->IsLoaded() || - (GetUIType() != XFA_ELEMENT_CheckButton && pWidget->IsFocused())) { - continue; - } - pWidget->UpdateFWLData(); - pWidget->AddInvalidateRect(); - } -} -void CXFA_WidgetAcc::NotifyEvent(FX_DWORD dwEvent, - CXFA_FFWidget* pWidget, - void* pParam, - void* pAdditional) { - IXFA_DocProvider* pDocProvider = GetDoc()->GetDocProvider(); - if (pWidget) { - pDocProvider->WidgetEvent(pWidget, this, dwEvent, pParam, pAdditional); - } else { - pWidget = GetNextWidget(pWidget); - if (pWidget == NULL) { - pDocProvider->WidgetEvent(NULL, this, dwEvent, pParam, pAdditional); - return; - } - while (pWidget) { - pDocProvider->WidgetEvent(pWidget, this, dwEvent, pParam, pAdditional); - pWidget = GetNextWidget(pWidget); - } - } -} -void CXFA_WidgetAcc::CalcCaptionSize(CFX_SizeF& szCap) { - CXFA_Caption caption = GetCaption(); - if (!caption || caption.GetPresence() != XFA_ATTRIBUTEENUM_Visible) { - return; - } - LoadCaption(); - XFA_ELEMENT eUIType = (XFA_ELEMENT)GetUIType(); - int32_t iCapPlacement = caption.GetPlacementType(); - FX_FLOAT fCapReserve = caption.GetReserve(); - const bool bVert = iCapPlacement == XFA_ATTRIBUTEENUM_Top || - iCapPlacement == XFA_ATTRIBUTEENUM_Bottom; - const bool bReserveExit = fCapReserve > 0.01; - CXFA_TextLayout* pCapTextLayout = - ((CXFA_FieldLayoutData*)m_pLayoutData)->m_pCapTextLayout; - if (pCapTextLayout) { - if (!bVert && eUIType != XFA_ELEMENT_Button) { - szCap.x = fCapReserve; - } - CFX_SizeF minSize; - pCapTextLayout->CalcSize(minSize, szCap, szCap); - if (bReserveExit) { - bVert ? szCap.y = fCapReserve : szCap.x = fCapReserve; - } - } else { - FX_FLOAT fFontSize = 10.0f; - if (CXFA_Font font = caption.GetFont()) { - fFontSize = font.GetFontSize(); - } else if (CXFA_Font widgetfont = GetFont()) { - fFontSize = widgetfont.GetFontSize(); - } - if (bVert) { - szCap.y = fCapReserve > 0 ? fCapReserve : fFontSize; - } else { - szCap.x = fCapReserve > 0 ? fCapReserve : 0; - szCap.y = fFontSize; - } - } - if (CXFA_Margin mgCap = caption.GetMargin()) { - FX_FLOAT fLeftInset, fTopInset, fRightInset, fBottomInset; - mgCap.GetLeftInset(fLeftInset); - mgCap.GetTopInset(fTopInset); - mgCap.GetRightInset(fRightInset); - mgCap.GetBottomInset(fBottomInset); - if (bReserveExit) { - bVert ? (szCap.x += fLeftInset + fRightInset) - : (szCap.y += fTopInset + fBottomInset); - } else { - szCap.x += fLeftInset + fRightInset; - szCap.y += fTopInset + fBottomInset; - } - } -} -FX_BOOL CXFA_WidgetAcc::CalculateFieldAutoSize(CFX_SizeF& size) { - CFX_SizeF szCap; - CalcCaptionSize(szCap); - CFX_RectF rtUIMargin; - GetUIMargin(rtUIMargin); - size.x += rtUIMargin.left + rtUIMargin.width; - size.y += rtUIMargin.top + rtUIMargin.height; - if (szCap.x > 0 && szCap.y > 0) { - int32_t iCapPlacement = GetCaption().GetPlacementType(); - switch (iCapPlacement) { - case XFA_ATTRIBUTEENUM_Left: - case XFA_ATTRIBUTEENUM_Right: - case XFA_ATTRIBUTEENUM_Inline: { - size.x += szCap.x; - size.y = std::max(size.y, szCap.y); - } break; - case XFA_ATTRIBUTEENUM_Top: - case XFA_ATTRIBUTEENUM_Bottom: { - size.y += szCap.y; - size.x = std::max(size.x, szCap.x); - } - default: - break; - } - } - return CalculateWidgetAutoSize(size); -} -FX_BOOL CXFA_WidgetAcc::CalculateWidgetAutoSize(CFX_SizeF& size) { - CXFA_Margin mgWidget = GetMargin(); - if (mgWidget) { - FX_FLOAT fLeftInset, fTopInset, fRightInset, fBottomInset; - mgWidget.GetLeftInset(fLeftInset); - mgWidget.GetTopInset(fTopInset); - mgWidget.GetRightInset(fRightInset); - mgWidget.GetBottomInset(fBottomInset); - size.x += fLeftInset + fRightInset; - size.y += fTopInset + fBottomInset; - } - CXFA_Para para = GetPara(); - if (para) { - size.x += para.GetMarginLeft(); - size.x += para.GetTextIndent(); - } - FX_FLOAT fVal = 0, fMin = 0, fMax = 0; - if (GetWidth(fVal)) { - size.x = fVal; - } else { - if (GetMinWidth(fMin)) { - size.x = std::max(size.x, fMin); - } - if (GetMaxWidth(fMax) && fMax > 0) { - size.x = std::min(size.x, fMax); - } - } - fVal = 0, fMin = 0, fMax = 0; - if (GetHeight(fVal)) { - size.y = fVal; - } else { - if (GetMinHeight(fMin)) { - size.y = std::max(size.y, fMin); - } - if (GetMaxHeight(fMax) && fMax > 0) { - size.y = std::min(size.y, fMax); - } - } - return TRUE; -} -void CXFA_WidgetAcc::CalculateTextContentSize(CFX_SizeF& size) { - FX_FLOAT fFontSize = GetFontSize(); - CFX_WideString wsText; - GetValue(wsText, XFA_VALUEPICTURE_Display); - if (wsText.IsEmpty()) { - size.y += fFontSize; - return; - } - FX_WCHAR wcEnter = '\n'; - FX_WCHAR wsLast = wsText.GetAt(wsText.GetLength() - 1); - if (wsLast == wcEnter) { - wsText = wsText + wcEnter; - } - if (!((CXFA_FieldLayoutData*)m_pLayoutData)->m_pTextOut) { - ((CXFA_FieldLayoutData*)m_pLayoutData)->m_pTextOut = IFDE_TextOut::Create(); - IFDE_TextOut* pTextOut = ((CXFA_FieldLayoutData*)m_pLayoutData)->m_pTextOut; - pTextOut->SetFont(GetFDEFont()); - pTextOut->SetFontSize(fFontSize); - pTextOut->SetLineBreakTolerance(fFontSize * 0.2f); - pTextOut->SetLineSpace(GetLineHeight()); - FX_DWORD dwStyles = FDE_TTOSTYLE_LastLineHeight; - if (GetUIType() == XFA_ELEMENT_TextEdit && IsMultiLine()) { - dwStyles |= FDE_TTOSTYLE_LineWrap; - } - pTextOut->SetStyles(dwStyles); - } - ((CXFA_FieldLayoutData*)m_pLayoutData) - ->m_pTextOut->CalcLogicSize(wsText, wsText.GetLength(), size); -} -FX_BOOL CXFA_WidgetAcc::CalculateTextEditAutoSize(CFX_SizeF& size) { - if (size.x > 0) { - CFX_SizeF szOrz = size; - CFX_SizeF szCap; - CalcCaptionSize(szCap); - FX_BOOL bCapExit = szCap.x > 0.01 && szCap.y > 0.01; - int32_t iCapPlacement = XFA_ATTRIBUTEENUM_Unknown; - if (bCapExit) { - iCapPlacement = GetCaption().GetPlacementType(); - switch (iCapPlacement) { - case XFA_ATTRIBUTEENUM_Left: - case XFA_ATTRIBUTEENUM_Right: - case XFA_ATTRIBUTEENUM_Inline: { - size.x -= szCap.x; - } - default: - break; - } - } - CFX_RectF rtUIMargin; - GetUIMargin(rtUIMargin); - size.x -= rtUIMargin.left + rtUIMargin.width; - CXFA_Margin mgWidget = GetMargin(); - if (mgWidget) { - FX_FLOAT fLeftInset, fRightInset; - mgWidget.GetLeftInset(fLeftInset); - mgWidget.GetRightInset(fRightInset); - size.x -= fLeftInset + fRightInset; - } - CalculateTextContentSize(size); - size.y += rtUIMargin.top + rtUIMargin.height; - if (bCapExit) { - switch (iCapPlacement) { - case XFA_ATTRIBUTEENUM_Left: - case XFA_ATTRIBUTEENUM_Right: - case XFA_ATTRIBUTEENUM_Inline: { - size.y = std::max(size.y, szCap.y); - } break; - case XFA_ATTRIBUTEENUM_Top: - case XFA_ATTRIBUTEENUM_Bottom: { - size.y += szCap.y; - } - default: - break; - } - } - size.x = szOrz.x; - return CalculateWidgetAutoSize(size); - } - CalculateTextContentSize(size); - return CalculateFieldAutoSize(size); -} -FX_BOOL CXFA_WidgetAcc::CalculateCheckButtonAutoSize(CFX_SizeF& size) { - FX_FLOAT fCheckSize = GetCheckButtonSize(); - size.x = size.y = fCheckSize; - return CalculateFieldAutoSize(size); -} -FX_BOOL CXFA_WidgetAcc::CalculatePushButtonAutoSize(CFX_SizeF& size) { - CalcCaptionSize(size); - return CalculateWidgetAutoSize(size); -} -FX_BOOL CXFA_WidgetAcc::CalculateImageAutoSize(CFX_SizeF& size) { - if (!GetImageImage()) { - LoadImageImage(); - } - size.clear(); - if (CFX_DIBitmap* pBitmap = GetImageImage()) { - CFX_RectF rtImage, rtFit; - rtImage.Set(0, 0, 0, 0); - rtFit.Set(0, 0, 0, 0); - int32_t iImageXDpi = 0; - int32_t iImageYDpi = 0; - GetImageDpi(iImageXDpi, iImageYDpi); - rtImage.width = - XFA_UnitPx2Pt((FX_FLOAT)pBitmap->GetWidth(), (FX_FLOAT)iImageXDpi); - rtImage.height = - XFA_UnitPx2Pt((FX_FLOAT)pBitmap->GetHeight(), (FX_FLOAT)iImageYDpi); - if (GetWidth(rtFit.width)) { - GetWidthWithoutMargin(rtFit.width); - } else { - rtFit.width = rtImage.width; - } - if (GetHeight(rtFit.height)) { - GetHeightWithoutMargin(rtFit.height); - } else { - rtFit.height = rtImage.height; - } - size.x = rtFit.width; - size.y = rtFit.height; - } - return CalculateWidgetAutoSize(size); -} -FX_BOOL CXFA_WidgetAcc::CalculateImageEditAutoSize(CFX_SizeF& size) { - if (!GetImageEditImage()) { - LoadImageEditImage(); - } - size.clear(); - if (CFX_DIBitmap* pBitmap = GetImageEditImage()) { - CFX_RectF rtImage, rtFit; - rtImage.Set(0, 0, 0, 0); - rtFit.Set(0, 0, 0, 0); - int32_t iImageXDpi = 0; - int32_t iImageYDpi = 0; - GetImageEditDpi(iImageXDpi, iImageYDpi); - rtImage.width = - XFA_UnitPx2Pt((FX_FLOAT)pBitmap->GetWidth(), (FX_FLOAT)iImageXDpi); - rtImage.height = - XFA_UnitPx2Pt((FX_FLOAT)pBitmap->GetHeight(), (FX_FLOAT)iImageYDpi); - if (GetWidth(rtFit.width)) { - GetWidthWithoutMargin(rtFit.width); - } else { - rtFit.width = rtImage.width; - } - if (GetHeight(rtFit.height)) { - GetHeightWithoutMargin(rtFit.height); - } else { - rtFit.height = rtImage.height; - } - size.x = rtFit.width; - size.y = rtFit.height; - } - return CalculateFieldAutoSize(size); -} -FX_BOOL CXFA_WidgetAcc::LoadImageImage() { - InitLayoutData(); - return ((CXFA_ImageLayoutData*)m_pLayoutData)->LoadImageData(this); -} -FX_BOOL CXFA_WidgetAcc::LoadImageEditImage() { - InitLayoutData(); - return ((CXFA_ImageEditData*)m_pLayoutData)->LoadImageData(this); -} -void CXFA_WidgetAcc::GetImageDpi(int32_t& iImageXDpi, int32_t& iImageYDpi) { - iImageXDpi = ((CXFA_ImageLayoutData*)m_pLayoutData)->m_iImageXDpi; - iImageYDpi = ((CXFA_ImageLayoutData*)m_pLayoutData)->m_iImageYDpi; -} -void CXFA_WidgetAcc::GetImageEditDpi(int32_t& iImageXDpi, int32_t& iImageYDpi) { - iImageXDpi = ((CXFA_ImageEditData*)m_pLayoutData)->m_iImageXDpi; - iImageYDpi = ((CXFA_ImageEditData*)m_pLayoutData)->m_iImageYDpi; -} -FX_BOOL CXFA_WidgetAcc::CalculateTextAutoSize(CFX_SizeF& size) { - LoadText(); - CXFA_TextLayout* pTextLayout = - ((CXFA_TextLayoutData*)m_pLayoutData)->m_pTextLayout; - if (pTextLayout) { - size.x = pTextLayout->StartLayout(size.x); - size.y = pTextLayout->GetLayoutHeight(); - } - return CalculateWidgetAutoSize(size); -} -void CXFA_WidgetAcc::LoadText() { - InitLayoutData(); - ((CXFA_TextLayoutData*)m_pLayoutData)->LoadText(this); -} -FX_FLOAT CXFA_WidgetAcc::CalculateWidgetAutoWidth(FX_FLOAT fWidthCalc) { - CXFA_Margin mgWidget = GetMargin(); - if (mgWidget) { - FX_FLOAT fLeftInset, fRightInset; - mgWidget.GetLeftInset(fLeftInset); - mgWidget.GetRightInset(fRightInset); - fWidthCalc += fLeftInset + fRightInset; - } - FX_FLOAT fMin = 0, fMax = 0; - if (GetMinWidth(fMin)) { - fWidthCalc = std::max(fWidthCalc, fMin); - } - if (GetMaxWidth(fMax) && fMax > 0) { - fWidthCalc = std::min(fWidthCalc, fMax); - } - return fWidthCalc; -} -FX_FLOAT CXFA_WidgetAcc::GetWidthWithoutMargin(FX_FLOAT fWidthCalc) { - CXFA_Margin mgWidget = GetMargin(); - if (mgWidget) { - FX_FLOAT fLeftInset, fRightInset; - mgWidget.GetLeftInset(fLeftInset); - mgWidget.GetRightInset(fRightInset); - fWidthCalc -= fLeftInset + fRightInset; - } - return fWidthCalc; -} -FX_FLOAT CXFA_WidgetAcc::CalculateWidgetAutoHeight(FX_FLOAT fHeightCalc) { - CXFA_Margin mgWidget = GetMargin(); - if (mgWidget) { - FX_FLOAT fTopInset, fBottomInset; - mgWidget.GetTopInset(fTopInset); - mgWidget.GetBottomInset(fBottomInset); - fHeightCalc += fTopInset + fBottomInset; - } - FX_FLOAT fMin = 0, fMax = 0; - if (GetMinHeight(fMin)) { - fHeightCalc = std::max(fHeightCalc, fMin); - } - if (GetMaxHeight(fMax) && fMax > 0) { - fHeightCalc = std::min(fHeightCalc, fMax); - } - return fHeightCalc; -} -FX_FLOAT CXFA_WidgetAcc::GetHeightWithoutMargin(FX_FLOAT fHeightCalc) { - CXFA_Margin mgWidget = GetMargin(); - if (mgWidget) { - FX_FLOAT fTopInset, fBottomInset; - mgWidget.GetTopInset(fTopInset); - mgWidget.GetBottomInset(fBottomInset); - fHeightCalc -= fTopInset + fBottomInset; - } - return fHeightCalc; -} -void CXFA_WidgetAcc::StartWidgetLayout(FX_FLOAT& fCalcWidth, - FX_FLOAT& fCalcHeight) { - InitLayoutData(); - XFA_ELEMENT eUIType = GetUIType(); - if (eUIType == XFA_ELEMENT_Text) { - m_pLayoutData->m_fWidgetHeight = -1; - GetHeight(m_pLayoutData->m_fWidgetHeight); - StartTextLayout(fCalcWidth, fCalcHeight); - return; - } - if (fCalcWidth > 0 && fCalcHeight > 0) { - return; - } - m_pLayoutData->m_fWidgetHeight = -1; - FX_FLOAT fWidth = 0; - if (fCalcWidth > 0 && fCalcHeight < 0) { - if (!GetHeight(fCalcHeight)) { - CalculateAccWidthAndHeight(eUIType, fCalcWidth, fCalcHeight); - } - m_pLayoutData->m_fWidgetHeight = fCalcHeight; - return; - } - if (fCalcWidth < 0 && fCalcHeight < 0) { - if (!GetWidth(fWidth) || !GetHeight(fCalcHeight)) { - CalculateAccWidthAndHeight(eUIType, fWidth, fCalcHeight); - } - fCalcWidth = fWidth; - } - m_pLayoutData->m_fWidgetHeight = fCalcHeight; -} -void CXFA_WidgetAcc::CalculateAccWidthAndHeight(XFA_ELEMENT eUIType, - FX_FLOAT& fWidth, - FX_FLOAT& fCalcHeight) { - CFX_SizeF sz(fWidth, m_pLayoutData->m_fWidgetHeight); - switch (eUIType) { - case XFA_ELEMENT_Barcode: - case XFA_ELEMENT_ChoiceList: - case XFA_ELEMENT_Signature: - CalculateFieldAutoSize(sz); - break; - case XFA_ELEMENT_ImageEdit: - CalculateImageEditAutoSize(sz); - break; - case XFA_ELEMENT_Button: - CalculatePushButtonAutoSize(sz); - break; - case XFA_ELEMENT_CheckButton: - CalculateCheckButtonAutoSize(sz); - break; - case XFA_ELEMENT_DateTimeEdit: - case XFA_ELEMENT_NumericEdit: - case XFA_ELEMENT_PasswordEdit: - case XFA_ELEMENT_TextEdit: - CalculateTextEditAutoSize(sz); - break; - case XFA_ELEMENT_Image: - CalculateImageAutoSize(sz); - break; - case XFA_ELEMENT_Arc: - case XFA_ELEMENT_Line: - case XFA_ELEMENT_Rectangle: - case XFA_ELEMENT_Subform: - case XFA_ELEMENT_ExclGroup: - CalculateWidgetAutoSize(sz); - break; - default: - break; - } - fWidth = sz.x; - m_pLayoutData->m_fWidgetHeight = sz.y; - fCalcHeight = sz.y; -} -FX_BOOL CXFA_WidgetAcc::FindSplitPos(int32_t iBlockIndex, - FX_FLOAT& fCalcHeight) { - XFA_ELEMENT eUIType = (XFA_ELEMENT)GetUIType(); - if (eUIType == XFA_ELEMENT_Subform) { - return FALSE; - } - if (eUIType != XFA_ELEMENT_Text && eUIType != XFA_ELEMENT_TextEdit && - eUIType != XFA_ELEMENT_NumericEdit && - eUIType != XFA_ELEMENT_PasswordEdit) { - fCalcHeight = 0; - return TRUE; - } - FX_FLOAT fTopInset = 0; - FX_FLOAT fBottomInset = 0; - if (iBlockIndex == 0) { - CXFA_Margin mgWidget = GetMargin(); - if (mgWidget) { - mgWidget.GetTopInset(fTopInset); - mgWidget.GetBottomInset(fBottomInset); - } - CFX_RectF rtUIMargin; - GetUIMargin(rtUIMargin); - fTopInset += rtUIMargin.top; - fBottomInset += rtUIMargin.width; - } - if (eUIType == XFA_ELEMENT_Text) { - FX_FLOAT fHeight = fCalcHeight; - if (iBlockIndex == 0) { - fCalcHeight = fCalcHeight - fTopInset; - if (fCalcHeight < 0) { - fCalcHeight = 0; - } - } - CXFA_TextLayout* pTextLayout = - ((CXFA_TextLayoutData*)m_pLayoutData)->m_pTextLayout; - pTextLayout->DoLayout(iBlockIndex, fCalcHeight, fCalcHeight, - m_pLayoutData->m_fWidgetHeight - fTopInset); - if (fCalcHeight != 0) { - if (iBlockIndex == 0) { - fCalcHeight = fCalcHeight + fTopInset; - } - if (fabs(fHeight - fCalcHeight) < XFA_FLOAT_PERCISION) { - return FALSE; - } - } - return TRUE; - } - XFA_ATTRIBUTEENUM iCapPlacement = XFA_ATTRIBUTEENUM_Unknown; - FX_FLOAT fCapReserve = 0; - if (iBlockIndex == 0) { - CXFA_Caption caption = GetCaption(); - if (caption && caption.GetPresence() != XFA_ATTRIBUTEENUM_Hidden) { - iCapPlacement = (XFA_ATTRIBUTEENUM)caption.GetPlacementType(); - fCapReserve = caption.GetReserve(); - } - if (iCapPlacement == XFA_ATTRIBUTEENUM_Top && - fCalcHeight < fCapReserve + fTopInset) { - fCalcHeight = 0; - return TRUE; - } - if (iCapPlacement == XFA_ATTRIBUTEENUM_Bottom && - m_pLayoutData->m_fWidgetHeight - fCapReserve - fBottomInset) { - fCalcHeight = 0; - return TRUE; - } - if (iCapPlacement != XFA_ATTRIBUTEENUM_Top) { - fCapReserve = 0; - } - } - int32_t iLinesCount = 0; - FX_FLOAT fHeight = m_pLayoutData->m_fWidgetHeight; - CFX_WideString wsText; - GetValue(wsText, XFA_VALUEPICTURE_Display); - if (wsText.IsEmpty()) { - iLinesCount = 1; - } else { - if (!((CXFA_FieldLayoutData*)m_pLayoutData)->m_pTextOut) { - FX_FLOAT fWidth = 0; - GetWidth(fWidth); - CalculateAccWidthAndHeight(eUIType, fWidth, fHeight); - } - iLinesCount = - ((CXFA_FieldLayoutData*)m_pLayoutData)->m_pTextOut->GetTotalLines(); - } - if (!((CXFA_FieldLayoutData*)m_pLayoutData)->m_pFieldSplitArray) { - ((CXFA_FieldLayoutData*)m_pLayoutData)->m_pFieldSplitArray = - new CFX_FloatArray; - } - CFX_FloatArray* pFieldArray = - ((CXFA_FieldLayoutData*)m_pLayoutData)->m_pFieldSplitArray; - int32_t iFieldSplitCount = pFieldArray->GetSize(); - for (int32_t i = 0; i < iBlockIndex * 3; i += 3) { - iLinesCount -= (int32_t)pFieldArray->GetAt(i + 1); - fHeight -= pFieldArray->GetAt(i + 2); - } - if (iLinesCount == 0) { - return FALSE; - } - FX_FLOAT fLineHeight = GetLineHeight(); - FX_FLOAT fFontSize = GetFontSize(); - FX_FLOAT fTextHeight = iLinesCount * fLineHeight - fLineHeight + fFontSize; - FX_FLOAT fSpaceAbove = 0; - FX_FLOAT fStartOffset = 0; - if (fHeight > 0.1f && iBlockIndex == 0) { - fStartOffset = fTopInset; - fHeight -= (fTopInset + fBottomInset); - if (CXFA_Para para = GetPara()) { - fSpaceAbove = para.GetSpaceAbove(); - FX_FLOAT fSpaceBelow = para.GetSpaceBelow(); - fHeight -= (fSpaceAbove + fSpaceBelow); - switch (para.GetVerticalAlign()) { - case XFA_ATTRIBUTEENUM_Top: - fStartOffset += fSpaceAbove; - break; - case XFA_ATTRIBUTEENUM_Middle: - fStartOffset += ((fHeight - fTextHeight) / 2 + fSpaceAbove); - break; - case XFA_ATTRIBUTEENUM_Bottom: - fStartOffset += (fHeight - fTextHeight + fSpaceAbove); - break; - } - } - if (fStartOffset < 0.1f) { - fStartOffset = 0; - } - } - for (int32_t i = iBlockIndex - 1; iBlockIndex > 0 && i < iBlockIndex; i++) { - fStartOffset = pFieldArray->GetAt(i * 3) - pFieldArray->GetAt(i * 3 + 2); - if (fStartOffset < 0.1f) { - fStartOffset = 0; - } - } - if (iFieldSplitCount / 3 == (iBlockIndex + 1)) { - pFieldArray->SetAt(0, fStartOffset); - } else { - pFieldArray->Add(fStartOffset); - } - XFA_VERSION version = GetDoc()->GetXFADoc()->GetCurVersionMode(); - FX_BOOL bCanSplitNoContent = FALSE; - XFA_ATTRIBUTEENUM eLayoutMode; - GetNode() - ->GetNodeItem(XFA_NODEITEM_Parent) - ->TryEnum(XFA_ATTRIBUTE_Layout, eLayoutMode, TRUE); - if ((eLayoutMode == XFA_ATTRIBUTEENUM_Position || - eLayoutMode == XFA_ATTRIBUTEENUM_Tb || - eLayoutMode == XFA_ATTRIBUTEENUM_Row || - eLayoutMode == XFA_ATTRIBUTEENUM_Table) && - version > XFA_VERSION_208) { - bCanSplitNoContent = TRUE; - } - if ((eLayoutMode == XFA_ATTRIBUTEENUM_Tb || - eLayoutMode == XFA_ATTRIBUTEENUM_Row || - eLayoutMode == XFA_ATTRIBUTEENUM_Table) && - version <= XFA_VERSION_208) { - if (fStartOffset < fCalcHeight) { - bCanSplitNoContent = TRUE; - } else { - fCalcHeight = 0; - return TRUE; - } - } - if (bCanSplitNoContent) { - if ((fCalcHeight - fTopInset - fSpaceAbove < fLineHeight)) { - fCalcHeight = 0; - return TRUE; - } - if (fStartOffset + XFA_FLOAT_PERCISION >= fCalcHeight) { - if (iFieldSplitCount / 3 == (iBlockIndex + 1)) { - pFieldArray->SetAt(iBlockIndex * 3 + 1, 0); - pFieldArray->SetAt(iBlockIndex * 3 + 2, fCalcHeight); - } else { - pFieldArray->Add(0); - pFieldArray->Add(fCalcHeight); - } - return FALSE; - } - if (fCalcHeight - fStartOffset < fLineHeight) { - fCalcHeight = fStartOffset; - if (iFieldSplitCount / 3 == (iBlockIndex + 1)) { - pFieldArray->SetAt(iBlockIndex * 3 + 1, 0); - pFieldArray->SetAt(iBlockIndex * 3 + 2, fCalcHeight); - } else { - pFieldArray->Add(0); - pFieldArray->Add(fCalcHeight); - } - return TRUE; - } - FX_FLOAT fTextNum = - fCalcHeight + XFA_FLOAT_PERCISION - fCapReserve - fStartOffset; - int32_t iLineNum = - (int32_t)((fTextNum + (fLineHeight - fFontSize)) / fLineHeight); - if (iLineNum >= iLinesCount) { - if (fCalcHeight - fStartOffset - fTextHeight >= fFontSize) { - if (iFieldSplitCount / 3 == (iBlockIndex + 1)) { - pFieldArray->SetAt(iBlockIndex * 3 + 1, (FX_FLOAT)iLinesCount); - pFieldArray->SetAt(iBlockIndex * 3 + 2, fCalcHeight); - } else { - pFieldArray->Add((FX_FLOAT)iLinesCount); - pFieldArray->Add(fCalcHeight); - } - return FALSE; - } - if (fHeight - fStartOffset - fTextHeight < fFontSize) { - iLineNum -= 1; - if (iLineNum == 0) { - fCalcHeight = 0; - return TRUE; - } - } else { - iLineNum = (int32_t)(fTextNum / fLineHeight); - } - } - if (iLineNum > 0) { - FX_FLOAT fSplitHeight = - iLineNum * fLineHeight + fCapReserve + fStartOffset; - if (iFieldSplitCount / 3 == (iBlockIndex + 1)) { - pFieldArray->SetAt(iBlockIndex * 3 + 1, (FX_FLOAT)iLineNum); - pFieldArray->SetAt(iBlockIndex * 3 + 2, fSplitHeight); - } else { - pFieldArray->Add((FX_FLOAT)iLineNum); - pFieldArray->Add(fSplitHeight); - } - if (fabs(fSplitHeight - fCalcHeight) < XFA_FLOAT_PERCISION) { - return FALSE; - } - fCalcHeight = fSplitHeight; - return TRUE; - } - } - fCalcHeight = 0; - return TRUE; -} -void CXFA_WidgetAcc::InitLayoutData() { - if (m_pLayoutData) { - return; - } - switch (GetUIType()) { - case XFA_ELEMENT_Text: - m_pLayoutData = new CXFA_TextLayoutData; - return; - case XFA_ELEMENT_TextEdit: - m_pLayoutData = new CXFA_TextEditData; - return; - case XFA_ELEMENT_Image: - m_pLayoutData = new CXFA_ImageLayoutData; - return; - case XFA_ELEMENT_ImageEdit: - m_pLayoutData = new CXFA_ImageEditData; - return; - default: - break; - } - if (GetClassID() == XFA_ELEMENT_Field) { - m_pLayoutData = new CXFA_FieldLayoutData; - } else { - m_pLayoutData = new CXFA_WidgetLayoutData; - } -} -void CXFA_WidgetAcc::StartTextLayout(FX_FLOAT& fCalcWidth, - FX_FLOAT& fCalcHeight) { - LoadText(); - CXFA_TextLayout* pTextLayout = - ((CXFA_TextLayoutData*)m_pLayoutData)->m_pTextLayout; - FX_FLOAT fTextHeight = 0; - if (fCalcWidth > 0 && fCalcHeight > 0) { - FX_FLOAT fWidth = GetWidthWithoutMargin(fCalcWidth); - pTextLayout->StartLayout(fWidth); - fTextHeight = fCalcHeight; - fTextHeight = GetHeightWithoutMargin(fTextHeight); - pTextLayout->DoLayout(0, fTextHeight, -1, fTextHeight); - return; - } - if (fCalcWidth > 0 && fCalcHeight < 0) { - FX_FLOAT fWidth = GetWidthWithoutMargin(fCalcWidth); - pTextLayout->StartLayout(fWidth); - } - if (fCalcWidth < 0 && fCalcHeight < 0) { - FX_FLOAT fMaxWidth = -1; - FX_BOOL bRet = GetWidth(fMaxWidth); - if (bRet) { - FX_FLOAT fWidth = GetWidthWithoutMargin(fMaxWidth); - pTextLayout->StartLayout(fWidth); - } else { - FX_FLOAT fWidth = pTextLayout->StartLayout(fMaxWidth); - fMaxWidth = CalculateWidgetAutoWidth(fWidth); - fWidth = GetWidthWithoutMargin(fMaxWidth); - pTextLayout->StartLayout(fWidth); - } - fCalcWidth = fMaxWidth; - } - if (m_pLayoutData->m_fWidgetHeight < 0) { - m_pLayoutData->m_fWidgetHeight = pTextLayout->GetLayoutHeight(); - m_pLayoutData->m_fWidgetHeight = - CalculateWidgetAutoHeight(m_pLayoutData->m_fWidgetHeight); - } - fTextHeight = m_pLayoutData->m_fWidgetHeight; - fTextHeight = GetHeightWithoutMargin(fTextHeight); - pTextLayout->DoLayout(0, fTextHeight, -1, fTextHeight); - fCalcHeight = m_pLayoutData->m_fWidgetHeight; -} -FX_BOOL CXFA_WidgetAcc::LoadCaption() { - InitLayoutData(); - return ((CXFA_FieldLayoutData*)m_pLayoutData)->LoadCaption(this); -} -CXFA_TextLayout* CXFA_WidgetAcc::GetCaptionTextLayout() { - return m_pLayoutData - ? ((CXFA_FieldLayoutData*)m_pLayoutData)->m_pCapTextLayout - : NULL; -} -CXFA_TextLayout* CXFA_WidgetAcc::GetTextLayout() { - return m_pLayoutData ? ((CXFA_TextLayoutData*)m_pLayoutData)->m_pTextLayout - : NULL; -} -CFX_DIBitmap* CXFA_WidgetAcc::GetImageImage() { - return m_pLayoutData ? ((CXFA_ImageLayoutData*)m_pLayoutData)->m_pDIBitmap - : NULL; -} -CFX_DIBitmap* CXFA_WidgetAcc::GetImageEditImage() { - return m_pLayoutData ? ((CXFA_ImageEditData*)m_pLayoutData)->m_pDIBitmap - : NULL; -} -void CXFA_WidgetAcc::SetImageImage(CFX_DIBitmap* newImage) { - if (((CXFA_ImageLayoutData*)m_pLayoutData)->m_pDIBitmap == newImage) { - return; - } - if (((CXFA_ImageLayoutData*)m_pLayoutData)->m_pDIBitmap && - !((CXFA_ImageLayoutData*)m_pLayoutData)->m_bNamedImage) { - delete ((CXFA_ImageLayoutData*)m_pLayoutData)->m_pDIBitmap; - ((CXFA_ImageLayoutData*)m_pLayoutData)->m_pDIBitmap = NULL; - } - ((CXFA_ImageLayoutData*)m_pLayoutData)->m_pDIBitmap = newImage; -} -void CXFA_WidgetAcc::SetImageEditImage(CFX_DIBitmap* newImage) { - if (((CXFA_ImageEditData*)m_pLayoutData)->m_pDIBitmap == newImage) { - return; - } - if (((CXFA_ImageEditData*)m_pLayoutData)->m_pDIBitmap && - !((CXFA_ImageEditData*)m_pLayoutData)->m_bNamedImage) { - delete ((CXFA_ImageEditData*)m_pLayoutData)->m_pDIBitmap; - ((CXFA_ImageEditData*)m_pLayoutData)->m_pDIBitmap = NULL; - } - ((CXFA_ImageEditData*)m_pLayoutData)->m_pDIBitmap = newImage; -} -CXFA_WidgetLayoutData* CXFA_WidgetAcc::GetWidgetLayoutData() { - return m_pLayoutData; -} -IFX_Font* CXFA_WidgetAcc::GetFDEFont() { - CFX_WideStringC wsFontName = FX_WSTRC(L"Courier"); - FX_DWORD dwFontStyle = 0; - if (CXFA_Font font = GetFont()) { - if (font.IsBold()) { - dwFontStyle |= FX_FONTSTYLE_Bold; - } - if (font.IsItalic()) { - dwFontStyle |= FX_FONTSTYLE_Italic; - } - font.GetTypeface(wsFontName); - } - CXFA_FFDoc* pDoc = GetDoc(); - return pDoc->GetApp()->GetXFAFontMgr()->GetFont(pDoc, wsFontName, - dwFontStyle); -} -FX_FLOAT CXFA_WidgetAcc::GetFontSize() { - FX_FLOAT fFontSize = 10.0f; - if (CXFA_Font font = GetFont()) { - fFontSize = font.GetFontSize(); - } - return fFontSize < 0.1f ? 10.0f : fFontSize; -} -FX_FLOAT CXFA_WidgetAcc::GetLineHeight() { - FX_FLOAT fLineHeight = 0; - if (CXFA_Para para = GetPara()) { - fLineHeight = para.GetLineHeight(); - } - if (fLineHeight < 1) { - fLineHeight = GetFontSize() * 1.2f; - } - return fLineHeight; -} -FX_ARGB CXFA_WidgetAcc::GetTextColor() { - if (CXFA_Font font = GetFont()) { - return font.GetColor(); - } - return 0xFF000000; -} -CXFA_Node* CXFA_TextProvider::GetTextNode(FX_BOOL& bRichText) { - bRichText = FALSE; - if (m_pTextNode) { - if (m_pTextNode->GetClassID() == XFA_ELEMENT_ExData) { - CFX_WideString wsContentType; - m_pTextNode->GetAttribute(XFA_ATTRIBUTE_ContentType, wsContentType, - FALSE); - if (wsContentType.Equal(FX_WSTRC(L"text/html"))) { - bRichText = TRUE; - } - } - return m_pTextNode; - } - if (m_eType == XFA_TEXTPROVIDERTYPE_Text) { - CXFA_Node* pElementNode = m_pWidgetAcc->GetNode(); - CXFA_Node* pValueNode = pElementNode->GetChild(0, XFA_ELEMENT_Value); - if (!pValueNode) { - return NULL; - } - CXFA_Node* pChildNode = pValueNode->GetNodeItem(XFA_NODEITEM_FirstChild); - if (pChildNode && pChildNode->GetClassID() == XFA_ELEMENT_ExData) { - CFX_WideString wsContentType; - pChildNode->GetAttribute(XFA_ATTRIBUTE_ContentType, wsContentType, FALSE); - if (wsContentType.Equal(FX_WSTRC(L"text/html"))) { - bRichText = TRUE; - } - } - return pChildNode; - } else if (m_eType == XFA_TEXTPROVIDERTYPE_Datasets) { - CXFA_Node* pBind = m_pWidgetAcc->GetDatasets(); - IFDE_XMLNode* pXMLNode = pBind->GetXMLMappingNode(); - FXSYS_assert(pXMLNode); - for (IFDE_XMLNode* pXMLChild = - pXMLNode->GetNodeItem(IFDE_XMLNode::FirstChild); - pXMLChild; - pXMLChild = pXMLChild->GetNodeItem(IFDE_XMLNode::NextSibling)) { - if (pXMLChild->GetType() == FDE_XMLNODE_Element) { - IFDE_XMLElement* pElement = (IFDE_XMLElement*)pXMLChild; - if (XFA_RecognizeRichText(pElement)) { - bRichText = TRUE; - } - } - } - return pBind; - } else if (m_eType == XFA_TEXTPROVIDERTYPE_Caption) { - CXFA_Node* pCaptionNode = - m_pWidgetAcc->GetNode()->GetChild(0, XFA_ELEMENT_Caption); - if (pCaptionNode == NULL) { - return NULL; - } - CXFA_Node* pValueNode = pCaptionNode->GetChild(0, XFA_ELEMENT_Value); - if (pValueNode == NULL) { - return NULL; - } - CXFA_Node* pChildNode = pValueNode->GetNodeItem(XFA_NODEITEM_FirstChild); - if (pChildNode && pChildNode->GetClassID() == XFA_ELEMENT_ExData) { - CFX_WideString wsContentType; - pChildNode->GetAttribute(XFA_ATTRIBUTE_ContentType, wsContentType, FALSE); - if (wsContentType.Equal(FX_WSTRC(L"text/html"))) { - bRichText = TRUE; - } - } - return pChildNode; - } - CXFA_Node* pItemNode = - m_pWidgetAcc->GetNode()->GetChild(0, XFA_ELEMENT_Items); - if (pItemNode == NULL) { - return NULL; - } - CXFA_Node* pNode = pItemNode->GetNodeItem(XFA_NODEITEM_FirstChild); - while (pNode) { - CFX_WideStringC wsName; - pNode->TryCData(XFA_ATTRIBUTE_Name, wsName); - if (m_eType == XFA_TEXTPROVIDERTYPE_Rollover && - wsName == FX_WSTRC(L"rollover")) { - return pNode; - } - if (m_eType == XFA_TEXTPROVIDERTYPE_Down && wsName == FX_WSTRC(L"down")) { - return pNode; - } - pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling); - } - return NULL; -} -CXFA_Para CXFA_TextProvider::GetParaNode() { - if (m_eType == XFA_TEXTPROVIDERTYPE_Text) { - return m_pWidgetAcc->GetPara(); - } - CXFA_Node* pNode = m_pWidgetAcc->GetNode()->GetChild(0, XFA_ELEMENT_Caption); - return CXFA_Para(pNode->GetChild(0, XFA_ELEMENT_Para)); -} -CXFA_Font CXFA_TextProvider::GetFontNode() { - if (m_eType == XFA_TEXTPROVIDERTYPE_Text) { - return m_pWidgetAcc->GetFont(); - } - CXFA_Node* pNode = m_pWidgetAcc->GetNode()->GetChild(0, XFA_ELEMENT_Caption); - pNode = pNode->GetChild(0, XFA_ELEMENT_Font); - if (pNode) { - return CXFA_Font(pNode); - } - return m_pWidgetAcc->GetFont(); -} -FX_BOOL CXFA_TextProvider::IsCheckButtonAndAutoWidth() { - XFA_ELEMENT eType = m_pWidgetAcc->GetUIType(); - if (eType == XFA_ELEMENT_CheckButton) { - FX_FLOAT fWidth = 0; - return !m_pWidgetAcc->GetWidth(fWidth); - } - return FALSE; -} -FX_BOOL CXFA_TextProvider::GetEmbbedObj(FX_BOOL bURI, - FX_BOOL bRaw, - const CFX_WideString& wsAttr, - CFX_WideString& wsValue) { - if (m_eType != XFA_TEXTPROVIDERTYPE_Text) { - return FALSE; - } - if (bURI) { - CXFA_Node* pWidgetNode = m_pWidgetAcc->GetNode(); - CXFA_Node* pParent = pWidgetNode->GetNodeItem(XFA_NODEITEM_Parent); - CXFA_Document* pDocument = pWidgetNode->GetDocument(); - CXFA_Node* pIDNode = NULL; - CXFA_WidgetAcc* pEmbAcc = NULL; - if (pParent) { - pIDNode = pDocument->GetNodeByID(pParent, wsAttr); - } - if (!pIDNode) { - pIDNode = pDocument->GetNodeByID( - ToNode(pDocument->GetXFAObject(XFA_HASHCODE_Form)), wsAttr); - } - if (pIDNode) { - pEmbAcc = (CXFA_WidgetAcc*)pIDNode->GetWidgetData(); - } - if (pEmbAcc) { - pEmbAcc->GetValue(wsValue, XFA_VALUEPICTURE_Display); - return TRUE; - } - } - return FALSE; -} diff --git a/xfa/src/fxfa/app/xfa_ffwidgetacc.h b/xfa/src/fxfa/app/xfa_ffwidgetacc.h deleted file mode 100644 index 19bd28d393..0000000000 --- a/xfa/src/fxfa/app/xfa_ffwidgetacc.h +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXFA_APP_XFA_FFWIDGETACC_H_ -#define XFA_SRC_FXFA_APP_XFA_FFWIDGETACC_H_ - -#include "xfa/src/fxfa/app/xfa_textlayout.h" - -enum XFA_TEXTPROVIDERTYPE { - XFA_TEXTPROVIDERTYPE_Text, - XFA_TEXTPROVIDERTYPE_Datasets, - XFA_TEXTPROVIDERTYPE_Caption, - XFA_TEXTPROVIDERTYPE_Rollover, - XFA_TEXTPROVIDERTYPE_Down, -}; -class CXFA_TextProvider : public IXFA_TextProvider { - public: - CXFA_TextProvider(CXFA_WidgetAcc* pWidgetAcc, - XFA_TEXTPROVIDERTYPE eType, - CXFA_Node* pTextNode = NULL) - : m_pWidgetAcc(pWidgetAcc), m_eType(eType), m_pTextNode(pTextNode) { - FXSYS_assert(m_pWidgetAcc); - } - virtual ~CXFA_TextProvider() {} - virtual CXFA_Node* GetTextNode(FX_BOOL& bRichText); - virtual CXFA_Para GetParaNode(); - virtual CXFA_Font GetFontNode(); - virtual FX_BOOL IsCheckButtonAndAutoWidth(); - virtual CXFA_FFDoc* GetDocNode() { return m_pWidgetAcc->GetDoc(); } - virtual FX_BOOL GetEmbbedObj(FX_BOOL bURI, - FX_BOOL bRaw, - const CFX_WideString& wsAttr, - CFX_WideString& wsValue); - - protected: - CXFA_WidgetAcc* m_pWidgetAcc; - XFA_TEXTPROVIDERTYPE m_eType; - CXFA_Node* m_pTextNode; -}; - -#endif // XFA_SRC_FXFA_APP_XFA_FFWIDGETACC_H_ diff --git a/xfa/src/fxfa/app/xfa_ffwidgethandler.cpp b/xfa/src/fxfa/app/xfa_ffwidgethandler.cpp deleted file mode 100644 index bea7586180..0000000000 --- a/xfa/src/fxfa/app/xfa_ffwidgethandler.cpp +++ /dev/null @@ -1,634 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fxfa/app/xfa_ffwidgethandler.h" - -#include - -#include "xfa/src/fxfa/app/xfa_ffchoicelist.h" -#include "xfa/src/fxfa/app/xfa_ffdoc.h" -#include "xfa/src/fxfa/app/xfa_ffdocview.h" -#include "xfa/src/fxfa/app/xfa_fffield.h" -#include "xfa/src/fxfa/app/xfa_ffwidget.h" -#include "xfa/src/fxfa/app/xfa_fwladapter.h" -#include "xfa/src/fxfa/parser/xfa_parser.h" - -CXFA_FFWidgetHandler::CXFA_FFWidgetHandler(CXFA_FFDocView* pDocView) - : m_pDocView(pDocView) {} -CXFA_FFWidgetHandler::~CXFA_FFWidgetHandler() {} -IXFA_PageView* CXFA_FFWidgetHandler::GetPageView(IXFA_Widget* hWidget) { - return static_cast(hWidget)->GetPageView(); -} -void CXFA_FFWidgetHandler::GetRect(IXFA_Widget* hWidget, CFX_RectF& rt) { - static_cast(hWidget)->GetWidgetRect(rt); -} -FX_DWORD CXFA_FFWidgetHandler::GetStatus(IXFA_Widget* hWidget) { - return static_cast(hWidget)->GetStatus(); -} -FX_BOOL CXFA_FFWidgetHandler::GetBBox(IXFA_Widget* hWidget, - CFX_RectF& rtBox, - FX_DWORD dwStatus, - FX_BOOL bDrawFocus) { - return static_cast(hWidget) - ->GetBBox(rtBox, dwStatus, bDrawFocus); -} -CXFA_WidgetAcc* CXFA_FFWidgetHandler::GetDataAcc(IXFA_Widget* hWidget) { - return static_cast(hWidget)->GetDataAcc(); -} -void CXFA_FFWidgetHandler::GetName(IXFA_Widget* hWidget, - CFX_WideString& wsName, - int32_t iNameType) { - static_cast(hWidget)->GetDataAcc()->GetName(wsName, - iNameType); -} -FX_BOOL CXFA_FFWidgetHandler::GetToolTip(IXFA_Widget* hWidget, - CFX_WideString& wsToolTip) { - return static_cast(hWidget)->GetToolTip(wsToolTip); -} -void CXFA_FFWidgetHandler::SetPrivateData(IXFA_Widget* hWidget, - void* module_id, - void* pData, - PD_CALLBACK_FREEDATA callback) { - static_cast(hWidget) - ->SetPrivateData(module_id, pData, callback); -} -void* CXFA_FFWidgetHandler::GetPrivateData(IXFA_Widget* hWidget, - void* module_id) { - return static_cast(hWidget)->GetPrivateData(module_id); -} -FX_BOOL CXFA_FFWidgetHandler::OnMouseEnter(IXFA_Widget* hWidget) { - m_pDocView->LockUpdate(); - FX_BOOL bRet = static_cast(hWidget)->OnMouseEnter(); - m_pDocView->UnlockUpdate(); - m_pDocView->UpdateDocView(); - return bRet; -} -FX_BOOL CXFA_FFWidgetHandler::OnMouseExit(IXFA_Widget* hWidget) { - m_pDocView->LockUpdate(); - FX_BOOL bRet = static_cast(hWidget)->OnMouseExit(); - m_pDocView->UnlockUpdate(); - m_pDocView->UpdateDocView(); - return bRet; -} -FX_BOOL CXFA_FFWidgetHandler::OnLButtonDown(IXFA_Widget* hWidget, - FX_DWORD dwFlags, - FX_FLOAT fx, - FX_FLOAT fy) { - m_pDocView->LockUpdate(); - static_cast(hWidget)->Rotate2Normal(fx, fy); - FX_BOOL bRet = - static_cast(hWidget)->OnLButtonDown(dwFlags, fx, fy); - if (bRet && m_pDocView->SetFocus(hWidget)) { - ((CXFA_FFDoc*)m_pDocView->GetDoc()) - ->GetDocProvider() - ->SetFocusWidget(m_pDocView->GetDoc(), (IXFA_Widget*)hWidget); - } - m_pDocView->UnlockUpdate(); - m_pDocView->UpdateDocView(); - return bRet; -} -FX_BOOL CXFA_FFWidgetHandler::OnLButtonUp(IXFA_Widget* hWidget, - FX_DWORD dwFlags, - FX_FLOAT fx, - FX_FLOAT fy) { - m_pDocView->LockUpdate(); - static_cast(hWidget)->Rotate2Normal(fx, fy); - m_pDocView->m_bLayoutEvent = TRUE; - FX_BOOL bRet = - static_cast(hWidget)->OnLButtonUp(dwFlags, fx, fy); - m_pDocView->UnlockUpdate(); - m_pDocView->UpdateDocView(); - return bRet; -} -FX_BOOL CXFA_FFWidgetHandler::OnLButtonDblClk(IXFA_Widget* hWidget, - FX_DWORD dwFlags, - FX_FLOAT fx, - FX_FLOAT fy) { - static_cast(hWidget)->Rotate2Normal(fx, fy); - FX_BOOL bRet = - static_cast(hWidget)->OnLButtonDblClk(dwFlags, fx, fy); - m_pDocView->RunInvalidate(); - return bRet; -} -FX_BOOL CXFA_FFWidgetHandler::OnMouseMove(IXFA_Widget* hWidget, - FX_DWORD dwFlags, - FX_FLOAT fx, - FX_FLOAT fy) { - static_cast(hWidget)->Rotate2Normal(fx, fy); - FX_BOOL bRet = - static_cast(hWidget)->OnMouseMove(dwFlags, fx, fy); - m_pDocView->RunInvalidate(); - return bRet; -} -FX_BOOL CXFA_FFWidgetHandler::OnMouseWheel(IXFA_Widget* hWidget, - FX_DWORD dwFlags, - int16_t zDelta, - FX_FLOAT fx, - FX_FLOAT fy) { - static_cast(hWidget)->Rotate2Normal(fx, fy); - FX_BOOL bRet = static_cast(hWidget) - ->OnMouseWheel(dwFlags, zDelta, fx, fy); - m_pDocView->RunInvalidate(); - return bRet; -} -FX_BOOL CXFA_FFWidgetHandler::OnRButtonDown(IXFA_Widget* hWidget, - FX_DWORD dwFlags, - FX_FLOAT fx, - FX_FLOAT fy) { - static_cast(hWidget)->Rotate2Normal(fx, fy); - FX_BOOL bRet = - static_cast(hWidget)->OnRButtonDown(dwFlags, fx, fy); - if (bRet && m_pDocView->SetFocus(hWidget)) { - ((CXFA_FFDoc*)m_pDocView->GetDoc()) - ->GetDocProvider() - ->SetFocusWidget(m_pDocView->GetDoc(), (IXFA_Widget*)hWidget); - } - m_pDocView->RunInvalidate(); - return bRet; -} -FX_BOOL CXFA_FFWidgetHandler::OnRButtonUp(IXFA_Widget* hWidget, - FX_DWORD dwFlags, - FX_FLOAT fx, - FX_FLOAT fy) { - static_cast(hWidget)->Rotate2Normal(fx, fy); - FX_BOOL bRet = - static_cast(hWidget)->OnRButtonUp(dwFlags, fx, fy); - m_pDocView->RunInvalidate(); - return bRet; -} -FX_BOOL CXFA_FFWidgetHandler::OnRButtonDblClk(IXFA_Widget* hWidget, - FX_DWORD dwFlags, - FX_FLOAT fx, - FX_FLOAT fy) { - static_cast(hWidget)->Rotate2Normal(fx, fy); - FX_BOOL bRet = - static_cast(hWidget)->OnRButtonDblClk(dwFlags, fx, fy); - m_pDocView->RunInvalidate(); - return bRet; -} -FX_BOOL CXFA_FFWidgetHandler::OnKeyDown(IXFA_Widget* hWidget, - FX_DWORD dwKeyCode, - FX_DWORD dwFlags) { - FX_BOOL bRet = - static_cast(hWidget)->OnKeyDown(dwKeyCode, dwFlags); - m_pDocView->RunInvalidate(); - m_pDocView->UpdateDocView(); - return bRet; -} -FX_BOOL CXFA_FFWidgetHandler::OnKeyUp(IXFA_Widget* hWidget, - FX_DWORD dwKeyCode, - FX_DWORD dwFlags) { - FX_BOOL bRet = - static_cast(hWidget)->OnKeyUp(dwKeyCode, dwFlags); - m_pDocView->RunInvalidate(); - return bRet; -} -FX_BOOL CXFA_FFWidgetHandler::OnChar(IXFA_Widget* hWidget, - FX_DWORD dwChar, - FX_DWORD dwFlags) { - FX_BOOL bRet = static_cast(hWidget)->OnChar(dwChar, dwFlags); - m_pDocView->RunInvalidate(); - return bRet; -} -FX_DWORD CXFA_FFWidgetHandler::OnHitTest(IXFA_Widget* hWidget, - FX_FLOAT fx, - FX_FLOAT fy) { - if (!(static_cast(hWidget)->GetStatus() & - XFA_WIDGETSTATUS_Visible)) { - return FWL_WGTHITTEST_Unknown; - } - static_cast(hWidget)->Rotate2Normal(fx, fy); - return static_cast(hWidget)->OnHitTest(fx, fy); -} -FX_BOOL CXFA_FFWidgetHandler::OnSetCursor(IXFA_Widget* hWidget, - FX_FLOAT fx, - FX_FLOAT fy) { - static_cast(hWidget)->Rotate2Normal(fx, fy); - return static_cast(hWidget)->OnSetCursor(fx, fy); -} -void CXFA_FFWidgetHandler::RenderWidget(IXFA_Widget* hWidget, - CFX_Graphics* pGS, - CFX_Matrix* pMatrix, - FX_BOOL bHighlight) { - static_cast(hWidget)->RenderWidget( - pGS, pMatrix, bHighlight ? XFA_WIDGETSTATUS_Highlight : 0, 0); -} -FX_BOOL CXFA_FFWidgetHandler::HasEvent(CXFA_WidgetAcc* pWidgetAcc, - XFA_EVENTTYPE eEventType) { - if (!pWidgetAcc || eEventType == XFA_EVENT_Unknown) { - return FALSE; - } - if (pWidgetAcc->GetClassID() == XFA_ELEMENT_Draw) { - return FALSE; - } - switch (eEventType) { - case XFA_EVENT_Calculate: { - CXFA_Calculate calc = pWidgetAcc->GetCalculate(); - if (!calc) { - return FALSE; - } - if (calc.GetScript()) { - return TRUE; - } - return FALSE; - } - case XFA_EVENT_Validate: { - CXFA_Validate val = pWidgetAcc->GetValidate(); - if (!val) { - return FALSE; - } - if (val.GetScript()) { - return TRUE; - } - return FALSE; - } - default: - break; - } - CXFA_NodeArray eventArray; - return pWidgetAcc->GetEventByActivity(gs_EventActivity[eEventType], - eventArray); -} -int32_t CXFA_FFWidgetHandler::ProcessEvent(CXFA_WidgetAcc* pWidgetAcc, - CXFA_EventParam* pParam) { - if (!pParam || pParam->m_eType == XFA_EVENT_Unknown) { - return XFA_EVENTERROR_NotExist; - } - if (!pWidgetAcc || pWidgetAcc->GetClassID() == XFA_ELEMENT_Draw) { - return XFA_EVENTERROR_NotExist; - } - switch (pParam->m_eType) { - case XFA_EVENT_Calculate: - return pWidgetAcc->ProcessCalculate(); - case XFA_EVENT_Validate: - if (((CXFA_FFDoc*)m_pDocView->GetDoc()) - ->GetDocProvider() - ->IsValidationsEnabled(m_pDocView->GetDoc())) { - return pWidgetAcc->ProcessValidate(); - } - return XFA_EVENTERROR_Disabled; - case XFA_EVENT_InitCalculate: { - CXFA_Calculate calc = pWidgetAcc->GetCalculate(); - if (!calc) { - return XFA_EVENTERROR_NotExist; - } - if (pWidgetAcc->GetNode()->HasFlag(XFA_NODEFLAG_UserInteractive)) { - return XFA_EVENTERROR_Disabled; - } - CXFA_Script script = calc.GetScript(); - return pWidgetAcc->ExecuteScript(script, pParam); - } - default: - break; - } - int32_t iRet = - pWidgetAcc->ProcessEvent(gs_EventActivity[pParam->m_eType], pParam); - return iRet; -} -IXFA_Widget* CXFA_FFWidgetHandler::CreateWidget(IXFA_Widget* hParent, - XFA_WIDGETTYPE eType, - IXFA_Widget* hBefore) { - CXFA_Node* pParentFormItem = - hParent ? static_cast(hParent)->GetDataAcc()->GetNode() - : NULL; - CXFA_Node* pBeforeFormItem = - hBefore ? static_cast(hBefore)->GetDataAcc()->GetNode() - : NULL; - CXFA_Node* pNewFormItem = - CreateWidgetFormItem(eType, pParentFormItem, pBeforeFormItem); - if (pNewFormItem == NULL) { - return NULL; - } - pNewFormItem->GetTemplateNode()->SetFlag(XFA_NODEFLAG_Initialized); - pNewFormItem->SetFlag(XFA_NODEFLAG_Initialized); - m_pDocView->RunLayout(); - CXFA_LayoutItem* pLayout = - m_pDocView->GetXFALayout()->GetLayoutItem(pNewFormItem); - return (IXFA_Widget*)pLayout; -} -CXFA_Node* CXFA_FFWidgetHandler::CreateWidgetFormItem( - XFA_WIDGETTYPE eType, - CXFA_Node* pParent, - CXFA_Node* pBefore) const { - switch (eType) { - case XFA_WIDGETTYPE_Barcode: - return NULL; - case XFA_WIDGETTYPE_PushButton: - return CreatePushButton(pParent, pBefore); - case XFA_WIDGETTYPE_CheckButton: - return CreateCheckButton(pParent, pBefore); - case XFA_WIDGETTYPE_ExcludeGroup: - return CreateExclGroup(pParent, pBefore); - case XFA_WIDGETTYPE_RadioButton: - return CreateRadioButton(pParent, pBefore); - case XFA_WIDGETTYPE_Arc: - return CreateArc(pParent, pBefore); - case XFA_WIDGETTYPE_Rectangle: - return CreateRectangle(pParent, pBefore); - case XFA_WIDGETTYPE_Image: - return CreateImage(pParent, pBefore); - case XFA_WIDGETTYPE_Line: - return CreateLine(pParent, pBefore); - case XFA_WIDGETTYPE_Text: - return CreateText(pParent, pBefore); - case XFA_WIDGETTYPE_DatetimeEdit: - return CreateDatetimeEdit(pParent, pBefore); - case XFA_WIDGETTYPE_DecimalField: - return CreateDecimalField(pParent, pBefore); - case XFA_WIDGETTYPE_NumericField: - return CreateNumericField(pParent, pBefore); - case XFA_WIDGETTYPE_Signature: - return CreateSignature(pParent, pBefore); - case XFA_WIDGETTYPE_TextEdit: - return CreateTextEdit(pParent, pBefore); - case XFA_WIDGETTYPE_DropdownList: - return CreateDropdownList(pParent, pBefore); - case XFA_WIDGETTYPE_ListBox: - return CreateListBox(pParent, pBefore); - case XFA_WIDGETTYPE_ImageField: - return CreateImageField(pParent, pBefore); - case XFA_WIDGETTYPE_PasswordEdit: - return CreatePasswordEdit(pParent, pBefore); - case XFA_WIDGETTYPE_Subform: - return CreateSubform(pParent, pBefore); - default: - break; - } - return NULL; -} -CXFA_Node* CXFA_FFWidgetHandler::CreatePushButton(CXFA_Node* pParent, - CXFA_Node* pBefore) const { - CXFA_Node* pField = CreateField(XFA_ELEMENT_Button, pParent, pBefore); - CXFA_Node* pCaption = CreateCopyNode(XFA_ELEMENT_Caption, pField); - CXFA_Node* pValue = CreateCopyNode(XFA_ELEMENT_Value, pCaption); - CXFA_Node* pText = CreateCopyNode(XFA_ELEMENT_Text, pValue); - pText->SetContent(FX_WSTRC(L"Button"), FX_WSTRC(L"Button"), FALSE); - CXFA_Node* pPara = CreateCopyNode(XFA_ELEMENT_Para, pCaption); - pPara->SetEnum(XFA_ATTRIBUTE_VAlign, XFA_ATTRIBUTEENUM_Middle, FALSE); - pPara->SetEnum(XFA_ATTRIBUTE_HAlign, XFA_ATTRIBUTEENUM_Center, FALSE); - CreateFontNode(pCaption); - CXFA_Node* pBorder = CreateCopyNode(XFA_ELEMENT_Border, pField); - pBorder->SetEnum(XFA_ATTRIBUTE_Hand, XFA_ATTRIBUTEENUM_Right, FALSE); - CXFA_Node* pEdge = CreateCopyNode(XFA_ELEMENT_Edge, pBorder); - pEdge->SetEnum(XFA_ATTRIBUTE_Stroke, XFA_ATTRIBUTEENUM_Raised, FALSE); - CXFA_Node* pFill = CreateCopyNode(XFA_ELEMENT_Fill, pBorder); - CXFA_Node* pColor = CreateCopyNode(XFA_ELEMENT_Color, pFill); - pColor->SetCData(XFA_ATTRIBUTE_Value, FX_WSTRC(L"212, 208, 200"), FALSE); - CXFA_Node* pBind = CreateCopyNode(XFA_ELEMENT_Bind, pField); - pBind->SetEnum(XFA_ATTRIBUTE_Match, XFA_ATTRIBUTEENUM_None); - return pField; -} -CXFA_Node* CXFA_FFWidgetHandler::CreateCheckButton(CXFA_Node* pParent, - CXFA_Node* pBefore) const { - CXFA_Node* pField = CreateField(XFA_ELEMENT_CheckButton, pParent, pBefore); - return pField; -} -CXFA_Node* CXFA_FFWidgetHandler::CreateExclGroup(CXFA_Node* pParent, - CXFA_Node* pBefore) const { - return CreateFormItem(XFA_ELEMENT_ExclGroup, pParent, pBefore); -} -CXFA_Node* CXFA_FFWidgetHandler::CreateRadioButton(CXFA_Node* pParent, - CXFA_Node* pBefore) const { - CXFA_Node* pField = CreateField(XFA_ELEMENT_CheckButton, pParent, pBefore); - CXFA_Node* pUi = pField->GetFirstChildByClass(XFA_ELEMENT_Ui); - CXFA_Node* pWidget = pUi->GetFirstChildByClass(XFA_ELEMENT_CheckButton); - pWidget->SetEnum(XFA_ATTRIBUTE_Shape, XFA_ATTRIBUTEENUM_Round); - return pField; -} -CXFA_Node* CXFA_FFWidgetHandler::CreateDatetimeEdit(CXFA_Node* pParent, - CXFA_Node* pBefore) const { - CXFA_Node* pField = CreateField(XFA_ELEMENT_DateTimeEdit, pParent, pBefore); - CreateValueNode(XFA_ELEMENT_Date, pField); - return pField; -} -CXFA_Node* CXFA_FFWidgetHandler::CreateDecimalField(CXFA_Node* pParent, - CXFA_Node* pBefore) const { - CXFA_Node* pField = CreateNumericField(pParent, pBefore); - CreateValueNode(XFA_ELEMENT_Decimal, pField); - return pField; -} -CXFA_Node* CXFA_FFWidgetHandler::CreateNumericField(CXFA_Node* pParent, - CXFA_Node* pBefore) const { - CXFA_Node* pField = CreateField(XFA_ELEMENT_NumericEdit, pParent, pBefore); - return pField; -} -CXFA_Node* CXFA_FFWidgetHandler::CreateSignature(CXFA_Node* pParent, - CXFA_Node* pBefore) const { - CXFA_Node* pField = CreateField(XFA_ELEMENT_Signature, pParent, pBefore); - return pField; -} -CXFA_Node* CXFA_FFWidgetHandler::CreateTextEdit(CXFA_Node* pParent, - CXFA_Node* pBefore) const { - CXFA_Node* pField = CreateField(XFA_ELEMENT_TextEdit, pParent, pBefore); - return pField; -} -CXFA_Node* CXFA_FFWidgetHandler::CreateDropdownList(CXFA_Node* pParent, - CXFA_Node* pBefore) const { - CXFA_Node* pField = CreateField(XFA_ELEMENT_ChoiceList, pParent, pBefore); - return pField; -} -CXFA_Node* CXFA_FFWidgetHandler::CreateListBox(CXFA_Node* pParent, - CXFA_Node* pBefore) const { - CXFA_Node* pField = CreateDropdownList(pParent, pBefore); - CXFA_Node* pUi = pField->GetNodeItem(XFA_NODEITEM_FirstChild); - CXFA_Node* pListBox = pUi->GetNodeItem(XFA_NODEITEM_FirstChild); - pListBox->SetEnum(XFA_ATTRIBUTE_Open, XFA_ATTRIBUTEENUM_Always); - pListBox->SetEnum(XFA_ATTRIBUTE_CommitOn, XFA_ATTRIBUTEENUM_Exit); - return pField; -} -CXFA_Node* CXFA_FFWidgetHandler::CreateImageField(CXFA_Node* pParent, - CXFA_Node* pBefore) const { - CXFA_Node* pField = CreateField(XFA_ELEMENT_ImageEdit, pParent, pBefore); - return pField; -} -CXFA_Node* CXFA_FFWidgetHandler::CreatePasswordEdit(CXFA_Node* pParent, - CXFA_Node* pBefore) const { - CXFA_Node* pField = CreateField(XFA_ELEMENT_PasswordEdit, pParent, pBefore); - CXFA_Node* pBind = CreateCopyNode(XFA_ELEMENT_Bind, pField); - pBind->SetEnum(XFA_ATTRIBUTE_Match, XFA_ATTRIBUTEENUM_None, FALSE); - return pField; -} -CXFA_Node* CXFA_FFWidgetHandler::CreateField(XFA_ELEMENT eElement, - CXFA_Node* pParent, - CXFA_Node* pBefore) const { - CXFA_Node* pField = CreateFormItem(XFA_ELEMENT_Field, pParent, pBefore); - CreateCopyNode(eElement, CreateCopyNode(XFA_ELEMENT_Ui, pField)); - CreateFontNode(pField); - return pField; -} -CXFA_Node* CXFA_FFWidgetHandler::CreateArc(CXFA_Node* pParent, - CXFA_Node* pBefore) const { - return CreateDraw(XFA_ELEMENT_Arc, pParent, pBefore); -} -CXFA_Node* CXFA_FFWidgetHandler::CreateRectangle(CXFA_Node* pParent, - CXFA_Node* pBefore) const { - return CreateDraw(XFA_ELEMENT_Rectangle, pParent, pBefore); -} -CXFA_Node* CXFA_FFWidgetHandler::CreateImage(CXFA_Node* pParent, - CXFA_Node* pBefore) const { - CXFA_Node* pField = CreateDraw(XFA_ELEMENT_Image, pParent, pBefore); - CreateCopyNode(XFA_ELEMENT_ImageEdit, CreateCopyNode(XFA_ELEMENT_Ui, pField)); - return pField; -} -CXFA_Node* CXFA_FFWidgetHandler::CreateLine(CXFA_Node* pParent, - CXFA_Node* pBefore) const { - CXFA_Node* pField = CreateDraw(XFA_ELEMENT_Line, pParent, pBefore); - return pField; -} -CXFA_Node* CXFA_FFWidgetHandler::CreateText(CXFA_Node* pParent, - CXFA_Node* pBefore) const { - CXFA_Node* pField = CreateDraw(XFA_ELEMENT_Text, pParent, pBefore); - CreateCopyNode(XFA_ELEMENT_TextEdit, CreateCopyNode(XFA_ELEMENT_Ui, pField)); - CreateFontNode(pField); - return pField; -} -CXFA_Node* CXFA_FFWidgetHandler::CreateDraw(XFA_ELEMENT eElement, - CXFA_Node* pParent, - CXFA_Node* pBefore) const { - CXFA_Node* pDraw = CreateFormItem(XFA_ELEMENT_Draw, pParent, pBefore); - CreateValueNode(eElement, pDraw); - return pDraw; -} -CXFA_Node* CXFA_FFWidgetHandler::CreateSubform(CXFA_Node* pParent, - CXFA_Node* pBefore) const { - CXFA_Node* pSubform = CreateFormItem(XFA_ELEMENT_Subform, pParent, pBefore); - return pSubform; -} -CXFA_Node* CXFA_FFWidgetHandler::CreateFormItem(XFA_ELEMENT eElement, - CXFA_Node* pParent, - CXFA_Node* pBefore) const { - CXFA_Node* pTemplateParent = pParent ? pParent->GetTemplateNode() : NULL; - CXFA_Node* pNewFormItem = pTemplateParent->CloneTemplateToForm(FALSE); - if (pParent) - pParent->InsertChild(pNewFormItem, pBefore); - return pNewFormItem; -} -CXFA_Node* CXFA_FFWidgetHandler::CreateCopyNode(XFA_ELEMENT eElement, - CXFA_Node* pParent, - CXFA_Node* pBefore) const { - CXFA_Node* pTemplateParent = pParent ? pParent->GetTemplateNode() : NULL; - CXFA_Node* pNewNode = - CreateTemplateNode(eElement, pTemplateParent, - pBefore ? pBefore->GetTemplateNode() : NULL) - ->Clone(FALSE); - if (pParent) - pParent->InsertChild(pNewNode, pBefore); - return pNewNode; -} -CXFA_Node* CXFA_FFWidgetHandler::CreateTemplateNode(XFA_ELEMENT eElement, - CXFA_Node* pParent, - CXFA_Node* pBefore) const { - CXFA_Document* pXFADoc = GetXFADoc(); - CXFA_Node* pNewTemplateNode = pXFADoc->GetParser()->GetFactory()->CreateNode( - XFA_XDPPACKET_Template, eElement); - if (pParent) - pParent->InsertChild(pNewTemplateNode, pBefore); - return pNewTemplateNode; -} -CXFA_Node* CXFA_FFWidgetHandler::CreateFontNode(CXFA_Node* pParent) const { - CXFA_Node* pFont = CreateCopyNode(XFA_ELEMENT_Font, pParent); - pFont->SetCData(XFA_ATTRIBUTE_Typeface, FX_WSTRC(L"Myriad Pro"), FALSE); - return pFont; -} -CXFA_Node* CXFA_FFWidgetHandler::CreateMarginNode(CXFA_Node* pParent, - FX_DWORD dwFlags, - FX_FLOAT fInsets[4]) const { - CXFA_Node* pMargin = CreateCopyNode(XFA_ELEMENT_Margin, pParent); - if (dwFlags & 0x01) { - pMargin->SetMeasure(XFA_ATTRIBUTE_LeftInset, - CXFA_Measurement(fInsets[0], XFA_UNIT_Pt), FALSE); - } - if (dwFlags & 0x02) { - pMargin->SetMeasure(XFA_ATTRIBUTE_TopInset, - CXFA_Measurement(fInsets[1], XFA_UNIT_Pt), FALSE); - } - if (dwFlags & 0x04) { - pMargin->SetMeasure(XFA_ATTRIBUTE_RightInset, - CXFA_Measurement(fInsets[2], XFA_UNIT_Pt), FALSE); - } - if (dwFlags & 0x08) { - pMargin->SetMeasure(XFA_ATTRIBUTE_BottomInset, - CXFA_Measurement(fInsets[3], XFA_UNIT_Pt), FALSE); - } - return pMargin; -} -CXFA_Node* CXFA_FFWidgetHandler::CreateValueNode(XFA_ELEMENT eValue, - CXFA_Node* pParent) const { - CXFA_Node* pValue = CreateCopyNode(XFA_ELEMENT_Value, pParent); - CreateCopyNode(eValue, pValue); - return pValue; -} -IXFA_ObjFactory* CXFA_FFWidgetHandler::GetObjFactory() const { - return GetXFADoc()->GetParser()->GetFactory(); -} -CXFA_Document* CXFA_FFWidgetHandler::GetXFADoc() const { - return ((CXFA_FFDoc*)(m_pDocView->GetDoc()))->GetXFADoc(); -} -CXFA_FFMenuHandler::CXFA_FFMenuHandler() {} -CXFA_FFMenuHandler::~CXFA_FFMenuHandler() {} -FX_BOOL CXFA_FFMenuHandler::CanCopy(IXFA_Widget* hWidget) { - return static_cast(hWidget)->CanCopy(); -} -FX_BOOL CXFA_FFMenuHandler::CanCut(IXFA_Widget* hWidget) { - return static_cast(hWidget)->CanCut(); -} -FX_BOOL CXFA_FFMenuHandler::CanPaste(IXFA_Widget* hWidget) { - return static_cast(hWidget)->CanPaste(); -} -FX_BOOL CXFA_FFMenuHandler::CanSelectAll(IXFA_Widget* hWidget) { - return static_cast(hWidget)->CanSelectAll(); -} -FX_BOOL CXFA_FFMenuHandler::CanDelete(IXFA_Widget* hWidget) { - return static_cast(hWidget)->CanDelete(); -} -FX_BOOL CXFA_FFMenuHandler::CanDeSelect(IXFA_Widget* hWidget) { - return static_cast(hWidget)->CanDeSelect(); -} -FX_BOOL CXFA_FFMenuHandler::Copy(IXFA_Widget* hWidget, CFX_WideString& wsText) { - return static_cast(hWidget)->Copy(wsText); -} -FX_BOOL CXFA_FFMenuHandler::Cut(IXFA_Widget* hWidget, CFX_WideString& wsText) { - return static_cast(hWidget)->Cut(wsText); -} -FX_BOOL CXFA_FFMenuHandler::Paste(IXFA_Widget* hWidget, - const CFX_WideString& wsText) { - return static_cast(hWidget)->Paste(wsText); -} -FX_BOOL CXFA_FFMenuHandler::SelectAll(IXFA_Widget* hWidget) { - return static_cast(hWidget)->SelectAll(); -} -FX_BOOL CXFA_FFMenuHandler::Delete(IXFA_Widget* hWidget) { - return static_cast(hWidget)->Delete(); -} -FX_BOOL CXFA_FFMenuHandler::DeSelect(IXFA_Widget* hWidget) { - return static_cast(hWidget)->DeSelect(); -} -FX_BOOL CXFA_FFMenuHandler::CanUndo(IXFA_Widget* hWidget) { - return static_cast(hWidget)->CanUndo(); -} -FX_BOOL CXFA_FFMenuHandler::CanRedo(IXFA_Widget* hWidget) { - return static_cast(hWidget)->CanRedo(); -} -FX_BOOL CXFA_FFMenuHandler::Undo(IXFA_Widget* hWidget) { - return static_cast(hWidget)->Undo(); -} -FX_BOOL CXFA_FFMenuHandler::Redo(IXFA_Widget* hWidget) { - return static_cast(hWidget)->Redo(); -} -FX_BOOL CXFA_FFMenuHandler::GetSuggestWords( - IXFA_Widget* hWidget, - CFX_PointF pointf, - std::vector& sSuggest) { - return static_cast(hWidget) - ->GetSuggestWords(pointf, sSuggest); -} -FX_BOOL CXFA_FFMenuHandler::ReplaceSpellCheckWord( - IXFA_Widget* hWidget, - CFX_PointF pointf, - const CFX_ByteStringC& bsReplace) { - return static_cast(hWidget) - ->ReplaceSpellCheckWord(pointf, bsReplace); -} diff --git a/xfa/src/fxfa/app/xfa_ffwidgethandler.h b/xfa/src/fxfa/app/xfa_ffwidgethandler.h deleted file mode 100644 index 73de9e2c94..0000000000 --- a/xfa/src/fxfa/app/xfa_ffwidgethandler.h +++ /dev/null @@ -1,176 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXFA_APP_XFA_FFWIDGETHANDLER_H_ -#define XFA_SRC_FXFA_APP_XFA_FFWIDGETHANDLER_H_ - -#include - -#include "xfa/include/fxfa/fxfa.h" -#include "xfa/src/fxfa/parser/xfa_document.h" - -class CXFA_FFDocView; - -class CXFA_FFWidgetHandler : public IXFA_WidgetHandler { - public: - CXFA_FFWidgetHandler(CXFA_FFDocView* pDocView); - ~CXFA_FFWidgetHandler(); - virtual IXFA_Widget* CreateWidget(IXFA_Widget* hParent, - XFA_WIDGETTYPE eType, - IXFA_Widget* hBefore = NULL); - virtual IXFA_PageView* GetPageView(IXFA_Widget* hWidget); - virtual void GetRect(IXFA_Widget* hWidget, CFX_RectF& rt); - virtual FX_DWORD GetStatus(IXFA_Widget* hWidget); - virtual FX_BOOL GetBBox(IXFA_Widget* hWidget, - CFX_RectF& rtBox, - FX_DWORD dwStatus, - FX_BOOL bDrawFocus = FALSE); - virtual CXFA_WidgetAcc* GetDataAcc(IXFA_Widget* hWidget); - virtual void GetName(IXFA_Widget* hWidget, - CFX_WideString& wsName, - int32_t iNameType = 0); - virtual FX_BOOL GetToolTip(IXFA_Widget* hWidget, CFX_WideString& wsToolTip); - virtual void SetPrivateData(IXFA_Widget* hWidget, - void* module_id, - void* pData, - PD_CALLBACK_FREEDATA callback); - virtual void* GetPrivateData(IXFA_Widget* hWidget, void* module_id); - virtual FX_BOOL OnMouseEnter(IXFA_Widget* hWidget); - virtual FX_BOOL OnMouseExit(IXFA_Widget* hWidget); - virtual FX_BOOL OnLButtonDown(IXFA_Widget* hWidget, - FX_DWORD dwFlags, - FX_FLOAT fx, - FX_FLOAT fy); - virtual FX_BOOL OnLButtonUp(IXFA_Widget* hWidget, - FX_DWORD dwFlags, - FX_FLOAT fx, - FX_FLOAT fy); - virtual FX_BOOL OnLButtonDblClk(IXFA_Widget* hWidget, - FX_DWORD dwFlags, - FX_FLOAT fx, - FX_FLOAT fy); - virtual FX_BOOL OnMouseMove(IXFA_Widget* hWidget, - FX_DWORD dwFlags, - FX_FLOAT fx, - FX_FLOAT fy); - virtual FX_BOOL OnMouseWheel(IXFA_Widget* hWidget, - FX_DWORD dwFlags, - int16_t zDelta, - FX_FLOAT fx, - FX_FLOAT fy); - virtual FX_BOOL OnRButtonDown(IXFA_Widget* hWidget, - FX_DWORD dwFlags, - FX_FLOAT fx, - FX_FLOAT fy); - virtual FX_BOOL OnRButtonUp(IXFA_Widget* hWidget, - FX_DWORD dwFlags, - FX_FLOAT fx, - FX_FLOAT fy); - virtual FX_BOOL OnRButtonDblClk(IXFA_Widget* hWidget, - FX_DWORD dwFlags, - FX_FLOAT fx, - FX_FLOAT fy); - - virtual FX_BOOL OnKeyDown(IXFA_Widget* hWidget, - FX_DWORD dwKeyCode, - FX_DWORD dwFlags); - virtual FX_BOOL OnKeyUp(IXFA_Widget* hWidget, - FX_DWORD dwKeyCode, - FX_DWORD dwFlags); - virtual FX_BOOL OnChar(IXFA_Widget* hWidget, - FX_DWORD dwChar, - FX_DWORD dwFlags); - virtual FX_DWORD OnHitTest(IXFA_Widget* hWidget, FX_FLOAT fx, FX_FLOAT fy); - virtual FX_BOOL OnSetCursor(IXFA_Widget* hWidget, FX_FLOAT fx, FX_FLOAT fy); - virtual void RenderWidget(IXFA_Widget* hWidget, - CFX_Graphics* pGS, - CFX_Matrix* pMatrix = NULL, - FX_BOOL bHighlight = FALSE); - virtual FX_BOOL HasEvent(CXFA_WidgetAcc* pWidgetAcc, - XFA_EVENTTYPE eEventType); - virtual int32_t ProcessEvent(CXFA_WidgetAcc* pWidgetAcc, - CXFA_EventParam* pParam); - - protected: - CXFA_Node* CreateWidgetFormItem(XFA_WIDGETTYPE eType, - CXFA_Node* pParent, - CXFA_Node* pBefore) const; - - CXFA_Node* CreatePushButton(CXFA_Node* pParent, CXFA_Node* pBefore) const; - CXFA_Node* CreateCheckButton(CXFA_Node* pParent, CXFA_Node* pBefore) const; - CXFA_Node* CreateExclGroup(CXFA_Node* pParent, CXFA_Node* pBefore) const; - CXFA_Node* CreateRadioButton(CXFA_Node* pParent, CXFA_Node* pBefore) const; - CXFA_Node* CreateDatetimeEdit(CXFA_Node* pParent, CXFA_Node* pBefore) const; - CXFA_Node* CreateDecimalField(CXFA_Node* pParent, CXFA_Node* pBefore) const; - CXFA_Node* CreateNumericField(CXFA_Node* pParent, CXFA_Node* pBefore) const; - CXFA_Node* CreateSignature(CXFA_Node* pParent, CXFA_Node* pBefore) const; - CXFA_Node* CreateTextEdit(CXFA_Node* pParent, CXFA_Node* pBefore) const; - CXFA_Node* CreateDropdownList(CXFA_Node* pParent, CXFA_Node* pBefore) const; - CXFA_Node* CreateListBox(CXFA_Node* pParent, CXFA_Node* pBefore) const; - CXFA_Node* CreateImageField(CXFA_Node* pParent, CXFA_Node* pBefore) const; - CXFA_Node* CreatePasswordEdit(CXFA_Node* pParent, CXFA_Node* pBefore) const; - CXFA_Node* CreateField(XFA_ELEMENT eElement, - CXFA_Node* pParent, - CXFA_Node* pBefore) const; - CXFA_Node* CreateArc(CXFA_Node* pParent, CXFA_Node* pBefore) const; - CXFA_Node* CreateRectangle(CXFA_Node* pParent, CXFA_Node* pBefore) const; - CXFA_Node* CreateImage(CXFA_Node* pParent, CXFA_Node* pBefore) const; - CXFA_Node* CreateLine(CXFA_Node* pParent, CXFA_Node* pBefore) const; - CXFA_Node* CreateText(CXFA_Node* pParent, CXFA_Node* pBefore) const; - CXFA_Node* CreateDraw(XFA_ELEMENT eElement, - CXFA_Node* pParent, - CXFA_Node* pBefore) const; - - CXFA_Node* CreateSubform(CXFA_Node* pParent, CXFA_Node* pBefore) const; - CXFA_Node* CreateFormItem(XFA_ELEMENT eElement, - CXFA_Node* pParent, - CXFA_Node* pBefore) const; - CXFA_Node* CreateCopyNode(XFA_ELEMENT eElement, - CXFA_Node* pParent, - CXFA_Node* pBefore = NULL) const; - CXFA_Node* CreateTemplateNode(XFA_ELEMENT eElement, - CXFA_Node* pParent, - CXFA_Node* pBefore) const; - CXFA_Node* CreateFontNode(CXFA_Node* pParent) const; - CXFA_Node* CreateMarginNode(CXFA_Node* pParent, - FX_DWORD dwFlags, - FX_FLOAT fInsets[4]) const; - CXFA_Node* CreateValueNode(XFA_ELEMENT eValue, CXFA_Node* pParent) const; - IXFA_ObjFactory* GetObjFactory() const; - CXFA_Document* GetXFADoc() const; - - CXFA_FFDocView* m_pDocView; -}; - -class CXFA_FFMenuHandler : public IXFA_MenuHandler { - public: - CXFA_FFMenuHandler(); - ~CXFA_FFMenuHandler(); - virtual FX_BOOL CanCopy(IXFA_Widget* hWidget); - virtual FX_BOOL CanCut(IXFA_Widget* hWidget); - virtual FX_BOOL CanPaste(IXFA_Widget* hWidget); - virtual FX_BOOL CanSelectAll(IXFA_Widget* hWidget); - virtual FX_BOOL CanDelete(IXFA_Widget* hWidget); - virtual FX_BOOL CanDeSelect(IXFA_Widget* hWidget); - virtual FX_BOOL Copy(IXFA_Widget* hWidget, CFX_WideString& wsText); - virtual FX_BOOL Cut(IXFA_Widget* hWidget, CFX_WideString& wsText); - virtual FX_BOOL Paste(IXFA_Widget* hWidget, const CFX_WideString& wsText); - virtual FX_BOOL SelectAll(IXFA_Widget* hWidget); - virtual FX_BOOL Delete(IXFA_Widget* hWidget); - virtual FX_BOOL DeSelect(IXFA_Widget* hWidget); - virtual FX_BOOL CanUndo(IXFA_Widget* hWidget); - virtual FX_BOOL CanRedo(IXFA_Widget* hWidget); - virtual FX_BOOL Undo(IXFA_Widget* hWidget); - virtual FX_BOOL Redo(IXFA_Widget* hWidget); - virtual FX_BOOL GetSuggestWords(IXFA_Widget* hWidget, - CFX_PointF pointf, - std::vector& sSuggest); - virtual FX_BOOL ReplaceSpellCheckWord(IXFA_Widget* hWidget, - CFX_PointF pointf, - const CFX_ByteStringC& bsReplace); -}; - -#endif // XFA_SRC_FXFA_APP_XFA_FFWIDGETHANDLER_H_ diff --git a/xfa/src/fxfa/app/xfa_fontmgr.cpp b/xfa/src/fxfa/app/xfa_fontmgr.cpp deleted file mode 100644 index 3c7b1cba74..0000000000 --- a/xfa/src/fxfa/app/xfa_fontmgr.cpp +++ /dev/null @@ -1,2089 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fxfa/app/xfa_fontmgr.h" - -#include - -#include "core/include/fpdfapi/cpdf_dictionary.h" -#include "core/include/fpdfapi/cpdf_document.h" -#include "core/include/fpdfapi/fpdf_resource.h" -#include "xfa/src/fxfa/app/xfa_ffapp.h" -#include "xfa/src/fxfa/app/xfa_ffdoc.h" - -#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ -static const XFA_FONTINFO g_XFAFontsMap[] = { - {0x01d5d33e, L"SimSun", L"Arial", 0, 936}, - {0x01e4f102, L"YouYuan", L"Arial", 1, 936}, - {0x030549dc, L"LiSu", L"Arial", 1, 936}, - {0x032edd44, L"Simhei", L"Arial", 1, 936}, - {0x03eac6fc, L"PoorRichard-Regular", L"Arial", 2, 1252}, - {0x03ed90e6, L"Nina", L"Arial", 0, 1252}, - {0x077b56b3, L"KingsoftPhoneticPlain", L"Arial", 0, 1252}, - {0x078ed524, L"MicrosoftSansSerif", L"Arial", 0, 1252}, - {0x089b18a9, L"Arial", L"Arial", 0, 1252}, - {0x0b2cad72, L"MonotypeCorsiva", L"Arial", 8, 1252}, - {0x0bb003e7, L"Kartika", L"Arial", 2, 1252}, - {0x0bb469df, L"VinerHandITC", L"Arial", 8, 1252}, - {0x0bc1a851, L"SegoeUI", L"Arial", 0, 1252}, - {0x0c112ebd, L"KozukaGothicPro-VIM", L"Arial", 0, 1252}, - {0x0cfcb9c1, L"AdobeThai", L"Kokila,Arial Narrow", 0, 847}, - {0x0e7de0f9, L"Playbill", L"Arial", 0, 1252}, - {0x0eff47c3, L"STHupo", L"Arial", 0, 936}, - {0x107ad374, L"Constantia", L"Arial", 2, 1252}, - {0x12194c2d, L"KunstlerScript", L"Arial", 8, 1252}, - {0x135ef6a1, L"MinionProSmBd", - L"Bell MT,Corbel,Times New Roman,Cambria,Berlin Sans FB", 0, 1252}, - {0x158c4049, L"Garamond", L"Arial", 2, 1252}, - {0x160ecb24, L"STZhongsong", L"Arial", 0, 936}, - {0x161ed07e, L"MSGothic", L"Arial", 1, 1252}, - {0x171d1ed1, L"SnapITC-Regular", L"Arial", 0, 1252}, - {0x18d1188f, L"Cambria", L"Arial", 2, 1252}, - {0x18eaf350, L"ArialUnicodeMS", L"Arial", 0, 936}, - {0x1a92d115, L"MingLiU", L"Arial", 1, 1252}, - {0x1cc217c6, L"TrebuchetMS", L"Arial", 0, 1252}, - {0x1d649596, L"BasemicTimes", L"Arial", 0, 1252}, - {0x1e34ee60, L"BellMT", L"Arial", 2, 1252}, - {0x1eb36945, L"CooperBlack", L"Arial", 2, 1252}, - {0x1ef7787d, L"BatangChe", L"Arial", 1, 1252}, - {0x20b3bd3a, L"BrushScriptMT", L"Arial", 8, 1252}, - {0x220877aa, L"Candara", L"Arial", 0, 1252}, - {0x22135007, L"FreestyleScript-Regular", L"Arial", 8, 1252}, - {0x251059c3, L"Chiller", L"Arial", 0, 1252}, - {0x25bed6dd, L"MSReferenceSansSerif", L"Arial", 0, 1252}, - {0x28154c81, L"Parchment-Regular", L"Arial", 8, 1252}, - {0x29711eb9, L"STLiti", L"Arial", 0, 936}, - {0x2b1993b4, L"Basemic", L"Arial", 0, 1252}, - {0x2b316339, L"NiagaraSolid-Reg", L"Arial", 0, 1252}, - {0x2c147529, L"FootlightMTLight", L"Arial", 0, 1252}, - {0x2c198928, L"HarlowSolid", L"Arial", 0, 1252}, - {0x2c6ac6b2, L"LucidaBright", L"Arial", 2, 1252}, - {0x2c9f38e2, L"KozukaMinchoPro-VIR", L"Arial", 0, 1252}, - {0x2d5a47b0, L"STCaiyun", L"Arial", 0, 936}, - {0x2def26bf, L"BernardMT-Condensed", L"Arial", 0, 1252}, - {0x2fd8930b, L"KozukaMinchoPr6NR", L"Arial", 0, 1252}, - {0x3115525a, L"FangSong_GB2312", L"Arial", 0, 1252}, - {0x31327817, L"MyriadPro", - L"Calibri,Corbel,Candara,Cambria Math,Franklin Gothic Medium,Arial " - L"Narrow,Times New Roman", - 0, 1252}, - {0x32244975, L"Helvetica", L"Arial", 0, 1252}, - {0x32ac995c, L"Terminal", L"Arial", 0, 1252}, - {0x338d648a, L"NiagaraEngraved-Reg", L"Arial", 0, 1252}, - {0x33bb65f2, L"Sylfaen", L"Arial", 2, 1252}, - {0x3402c30e, L"MSPMincho", L"Arial", 2, 1252}, - {0x3412bf31, L"SimSun-PUA", L"Arial", 0, 936}, - {0x36eb39b9, L"BerlinSansFB", L"Arial", 0, 1252}, - {0x36f42055, L"UniversATT", L"Microsoft Sans Serif", 0, 1252}, - {0x3864c4f6, L"HighTowerText", L"Arial", 2, 1252}, - {0x3a257d03, L"FangSong_GB2312", L"Arial", 0, 1252}, - {0x3cdae668, L"FreestyleScript", L"Arial", 8, 1252}, - {0x3d55aed7, L"Jokerman", L"Arial", 0, 1252}, - {0x3d5b4385, L"PMingLiU", L"Arial", 2, 1252}, - {0x3d9b7669, L"EstrangeloEdessa", L"Arial", 0, 1252}, - {0x3e532d74, L"FranklinGothicMedium", L"Arial", 0, 1252}, - {0x3e6aa32d, L"NSimSun", L"Arial", 1, 936}, - {0x3f6c36a8, L"Gautami", L"Arial", 0, 1252}, - {0x3ff32662, L"Chiller-Regular", L"Arial", 0, 1252}, - {0x409de312, L"ModernNo.20", L"Arial", 2, 1252}, - {0x41443c5e, L"Georgia", L"Arial", 2, 1252}, - {0x4160ade5, L"BellGothicStdBlack", - L"Arial,Arial Unicode MS,Book Antiqua,Dotum,Georgia", 0, 1252}, - {0x421976c4, L"Modern-Regular", L"Arial", 2, 1252}, - {0x422a7252, L"Stencil", L"Arial", 0, 1252}, - {0x42c8554f, L"Fixedsys", L"Arial", 0, 1252}, - {0x435cb41d, L"Roman", L"Arial", 0, 1252}, - {0x47882383, L"CourierNew", L"Arial", 1, 1252}, - {0x480a2338, L"BerlinSansFBDemi", L"Arial", 0, 1252}, - {0x480bf7a4, L"CourierStd", L"Courier New,Verdana", 0, 1252}, - {0x481ad6ed, L"VladimirScript", L"Arial", 8, 1252}, - {0x4911577a, L"YouYuan", L"Arial", 1, 936}, - {0x4a788d72, L"STXingkai", L"Arial", 0, 936}, - {0x4bf88566, L"SegoeCondensed", L"Arial", 0, 1252}, - {0x4ccf51a4, L"BerlinSansFB-Reg", L"Arial", 0, 1252}, - {0x4ea967ce, L"GulimChe", L"Arial", 1, 1252}, - {0x4f68bd79, L"LetterGothicStd", L"Courier New,Verdana", 0, 1252}, - {0x51a0d0e6, L"KozukaGothicPr6NM", L"Arial", 0, 1252}, - {0x531b3dea, L"BasemicSymbol", L"Arial", 0, 1252}, - {0x5333fd39, L"CalifornianFB-Reg", L"Arial", 2, 1252}, - {0x53561a54, L"FZYTK--GBK1-0", L"Arial", 0, 936}, - {0x55e0dde6, L"LucidaSansTypewriter", L"Arial", 0, 1252}, - {0x574d4d3d, L"AdobeArabic", L"Arial Narrow", 0, 1252}, - {0x5792e759, L"STKaiti", L"Arial", 0, 936}, - {0x5921978e, L"LucidaSansUnicode", L"Arial", 0, 1252}, - {0x594e2da4, L"Vrinda", L"Arial", 0, 1252}, - {0x59baa9a2, L"KaiTi_GB2312", L"Arial", 0, 1252}, - {0x5cfedf4f, L"BaskOldFace", L"Arial", 0, 1252}, - {0x5f97921c, L"AdobeMyungjoStdM", - L"Batang,Bookman Old Style,Consolas,STZhongsong", 0, 936}, - {0x5fefbfad, L"Batang", L"Arial", 2, 1252}, - {0x605342b9, L"DotumChe", L"Arial", 1, 1252}, - {0x608c5f9a, L"KaiTi_GB2312", L"Arial", 0, 936}, - {0x61efd0d1, L"MaturaMTScriptCapitals", L"Arial", 0, 1252}, - {0x626608a9, L"MVBoli", L"Arial", 0, 1252}, - {0x630501a3, L"SmallFonts", L"Arial", 0, 1252}, - {0x65d0e2a9, L"FZYTK--GBK1-0", L"Arial", 0, 936}, - {0x669f29e1, L"FZSTK--GBK1-0", L"Arial", 0, 936}, - {0x673a9e5f, L"Tunga", L"Arial", 0, 1252}, - {0x691aa4ce, L"NiagaraSolid", L"Arial", 0, 1252}, - {0x696259b7, L"Corbel", L"Arial", 0, 1252}, - {0x696ee9be, L"STXihei", L"Arial", 0, 936}, - {0x6c59cf69, L"Dotum", L"Arial", 0, 1252}, - {0x707fa561, L"Gungsuh", L"Arial", 2, 1252}, - {0x71416bb2, L"ZWAdobeF", L"Arial", 0, 1252}, - {0x71b41801, L"Verdana", L"Arial", 0, 1252}, - {0x73f25e4c, L"PalatinoLinotype", L"Arial", 0, 1252}, - {0x73f4d19f, L"NiagaraEngraved", L"Arial", 0, 1252}, - {0x74001694, L"MyriadProBlack", L"Book Antiqua,Constantia,Dotum,Georgia", 0, - 1252}, - {0x74b14d8f, L"Haettenschweiler", L"Arial", 0, 1252}, - {0x74cb44ee, L"NSimSun", L"Arial", 1, 936}, - {0x76b4d7ff, L"Shruti", L"Arial", 0, 1252}, - {0x788b3533, L"Webdings", L"Arial", 6, 42}, - {0x797dde99, L"MSSerif", L"Arial", 0, 1252}, - {0x7a0f9e9e, L"MSMincho", L"Arial", 1, 1252}, - {0x7b439caf, L"OldEnglishTextMT", L"Arial", 0, 1252}, - {0x8213a433, L"LucidaSans-Typewriter", L"Arial", 0, 1252}, - {0x82fec929, L"AdobeSongStdL", - L"Centaur,Calibri,STSong,Bell MT,Garamond,Times New Roman", 0, 936}, - {0x83581825, L"Modern", L"Arial", 0, 1252}, - {0x835a2823, L"Algerian", L"Arial", 0, 1252}, - {0x83dab9f5, L"Script", L"Arial", 0, 1252}, - {0x847b56da, L"Tahoma", L"Arial", 0, 1252}, - {0x8a783cb2, L"SimSun-PUA", L"Arial", 0, 1252}, - {0x8b5cac0e, L"Onyx", L"Arial", 0, 1252}, - {0x8c6a499e, L"Gulim", L"Arial", 0, 1252}, - {0x8e0af790, L"JuiceITC", L"Arial", 0, 1252}, - {0x8e8d43b2, L"Centaur", L"Arial", 2, 1252}, - {0x8ee4dcca, L"BookshelfSymbol7", L"Arial", 0, 1252}, - {0x90794800, L"BellGothicStdLight", L"Bell MT,Calibri,Times New Roman", 0, - 1252}, - {0x909b516a, L"Century", L"Arial", 2, 1252}, - {0x92ae370d, L"MSOutlook", L"Arial", 4, 42}, - {0x93c9fbf1, L"LucidaFax", L"Arial", 2, 1252}, - {0x9565085e, L"BookAntiqua", L"Arial", 2, 1252}, - {0x9856d95d, L"AdobeMingStdL", L"Arial,Arial Unicode MS,Cambria,BatangChe", - 0, 949}, - {0x9bbadd6b, L"ColonnaMT", L"Arial", 0, 1252}, - {0x9cbd16a4, L"ShowcardGothic-Reg", L"Arial", 0, 1252}, - {0x9d73008e, L"MSSansSerif", L"Arial", 0, 1252}, - {0xa0607db1, L"GungsuhChe", L"Arial", 1, 1252}, - {0xa0bcf6a1, L"LatinWide", L"Arial", 2, 1252}, - {0xa1429b36, L"Symbol", L"Arial", 6, 42}, - {0xa1fa5abc, L"Wingdings2", L"Arial", 6, 42}, - {0xa1fa5abd, L"Wingdings3", L"Arial", 6, 42}, - {0xa427bad4, L"InformalRoman-Regular", L"Arial", 8, 1252}, - {0xa8b92ece, L"FZSTK--GBK1-0", L"Arial", 0, 936}, - {0xa8d83ece, L"CalifornianFB", L"Arial", 2, 1252}, - {0xaa3e082c, L"Kingsoft-Phonetic", L"Arial", 0, 1252}, - {0xaa6bcabe, L"HarlowSolidItalic", L"Arial", 0, 1252}, - {0xade5337c, L"MSUIGothic", L"Arial", 0, 1252}, - {0xb08dd941, L"WideLatin", L"Arial", 2, 1252}, - {0xb207f05d, L"PoorRichard", L"Arial", 2, 1252}, - {0xb3bc492f, L"JuiceITC-Regular", L"Arial", 0, 1252}, - {0xb5545399, L"Marlett", L"Arial", 4, 42}, - {0xb5dd1ebb, L"BritannicBold", L"Arial", 0, 1252}, - {0xb699c1c5, L"LucidaCalligraphy-Italic", L"Arial", 0, 1252}, - {0xb725d629, L"TimesNewRoman", L"Arial", 2, 1252}, - {0xb7eaebeb, L"AdobeHeitiStdR", L"Batang,Century,Dotum", 0, 936}, - {0xbd29c486, L"BerlinSansFBDemi-Bold", L"Arial", 0, 1252}, - {0xbe8a8db4, L"BookshelfSymbolSeven", L"Arial", 0, 1252}, - {0xc16c0118, L"AdobeHebrew", L"Bell MT,Berlin Sans FB,Calibri", 0, 1252}, - {0xc318b0af, L"MyriadProLight", L"Calibri,STFangsong,Times New Roman", 0, - 1252}, - {0xc65e5659, L"CambriaMath", L"Arial", 2, 1252}, - {0xc75c8f05, L"LucidaConsole", L"Arial", 1, 1252}, - {0xca7c35d6, L"Calibri", L"Arial", 0, 1252}, - {0xcb053f53, L"MicrosoftYaHei", L"Arial", 0, 936}, - {0xcb7190f9, L"Magneto-Bold", L"Arial", 0, 1252}, - {0xcca00cc5, L"System", L"Arial", 0, 1252}, - {0xccad6f76, L"Jokerman-Regular", L"Arial", 0, 1252}, - {0xccc5818c, L"EuroSign", L"Arial", 0, 1252}, - {0xcf3d7234, L"LucidaHandwriting-Italic", L"Arial", 0, 1252}, - {0xcf7b8fdb, L"MinionPro", - L"Bell MT,Corbel,Times New Roman,Cambria,Berlin Sans FB", 0, 1252}, - {0xcfe5755f, L"Simhei", L"Arial", 1, 936}, - {0xd011f4ee, L"MSPGothic", L"Arial", 0, 1252}, - {0xd060e7ef, L"Vivaldi", L"Arial", 8, 1252}, - {0xd07edec1, L"FranklinGothic-Medium", L"Arial", 0, 1252}, - {0xd107243f, L"SimSun", L"Arial", 0, 936}, - {0xd1881562, L"ArialNarrow", L"Arial Narrow", 0, 1252}, - {0xd22b7dce, L"BodoniMTPosterCompressed", L"Arial", 0, 1252}, - {0xd22bfa60, L"ComicSansMS", L"Arial", 8, 1252}, - {0xd3bd0e35, L"Bauhaus93", L"Arial", 0, 1252}, - {0xd429ee7a, L"STFangsong", L"Arial", 0, 936}, - {0xd6679c12, L"BernardMTCondensed", L"Arial", 0, 1252}, - {0xd8e8a027, L"LucidaSans", L"Arial", 0, 1252}, - {0xd9fe7761, L"HighTowerText-Reg", L"Arial", 2, 1252}, - {0xda7e551e, L"STSong", L"Arial", 0, 936}, - {0xdaa6842d, L"STZhongsong", L"Arial", 0, 936}, - {0xdaaab93f, L"STFangsong", L"Arial", 0, 936}, - {0xdaeb0713, L"STSong", L"Arial", 0, 936}, - {0xdafedbef, L"STCaiyun", L"Arial", 0, 936}, - {0xdb00a3d9, L"Broadway", L"Arial", 0, 1252}, - {0xdb1f5ad4, L"STXinwei", L"Arial", 0, 936}, - {0xdb326e7f, L"STKaiti", L"Arial", 0, 936}, - {0xdb69595a, L"STHupo", L"Arial", 0, 936}, - {0xdba0082c, L"STXihei", L"Arial", 0, 936}, - {0xdbd0ab18, L"STXingkai", L"Arial", 0, 936}, - {0xdc1a7db1, L"STLiti", L"Arial", 0, 936}, - {0xdc33075f, L"KristenITC-Regular", L"Arial", 8, 1252}, - {0xdcc7009c, L"Harrington", L"Arial", 0, 1252}, - {0xdd712466, L"ArialBlack", L"Arial", 0, 1252}, - {0xdde87b3e, L"Impact", L"Arial", 0, 1252}, - {0xdf69fb32, L"SnapITC", L"Arial", 0, 1252}, - {0xdf8b25e8, L"CenturyGothic", L"Arial", 0, 1252}, - {0xe0f705c0, L"KristenITC", L"Arial", 8, 1252}, - {0xe1427573, L"Raavi", L"Arial", 0, 1252}, - {0xe2cea0cb, L"Magneto", L"Arial", 0, 1252}, - {0xe36a9e17, L"Ravie", L"Arial", 0, 1252}, - {0xe433f8e2, L"Parchment", L"Arial", 8, 1252}, - {0xe43dff4a, L"Wingdings", L"Arial", 4, 42}, - {0xe4e2c405, L"MTExtra", L"Arial", 6, 42}, - {0xe618cc35, L"InformalRoman", L"Arial", 8, 1252}, - {0xe6c27ffc, L"Mistral", L"Arial", 8, 1252}, - {0xe7ebf4b9, L"Courier", L"Courier New", 0, 1252}, - {0xe8bc4a9d, L"MSReferenceSpecialty", L"Arial", 0, 1252}, - {0xe90fb013, L"TempusSansITC", L"Arial", 0, 1252}, - {0xec637b42, L"Consolas", L"Verdana", 1, 1252}, - {0xed3a683b, L"STXinwei", L"Arial", 0, 936}, - {0xef264cd1, L"LucidaHandwriting", L"Arial", 0, 1252}, - {0xf086bca2, L"BaskervilleOldFace", L"Arial", 0, 1252}, - {0xf1028030, L"Mangal", L"Arial", 2, 1252}, - {0xf1da7eb9, L"ShowcardGothic", L"Arial", 0, 1252}, - {0xf210f06a, L"ArialMT", L"Arial", 0, 1252}, - {0xf477f16a, L"Latha", L"Arial", 0, 1252}, - {0xf616f3dd, L"LiSu", L"Arial", 1, 936}, - {0xfa479aa6, L"MicrosoftYaHei", L"Arial", 0, 936}, - {0xfcd19697, L"BookmanOldStyle", L"Arial", 0, 1252}, - {0xfe209a82, L"LucidaCalligraphy", L"Arial", 0, 1252}, - {0xfef135f8, L"AdobeHeitiStd-Regular", L"Batang,Century,Dotum", 0, 936}, -}; -#elif _FXM_PLATFORM_ == _FXM_PLATFORM_LINUX_ -static const XFA_FONTINFO g_XFAFontsMap[] = { - {0x01d5d33e, L"SimSun", - L"WenQuanYi Zen Hei Mono,AR PL UMing CN,AR PL UMing HK,AR PL UMing TW,AR " - L"PL UMing TW MBE", - 0, 936}, - {0x01e4f102, L"YouYuan", - L"WenQuanYi Zen Hei Mono,AR PL UMing CN,AR PL UMing HK,AR PL UMing TW,AR " - L"PL UMing TW MBE", - 1, 936}, - {0x030549dc, L"LiSu", - L"WenQuanYi Zen Hei,WenQuanYi Zen Hei Sharp,WenQuanYi Zen Hei " - L"Mono,WenQuanYi Micro Hei", - 1, 936}, - {0x032edd44, L"Simhei", - L"WenQuanYi Zen Hei,WenQuanYi Zen Hei Sharp,WenQuanYi Zen Hei " - L"Mono,WenQuanYi Micro Hei", - 1, 936}, - {0x03eac6fc, L"PoorRichard-Regular", L"Droid Sans Japanese,FreeSerif", 2, - 1252}, - {0x03ed90e6, L"Nina", L"FreeSerif", 0, 1252}, - {0x077b56b3, L"KingsoftPhoneticPlain", - L"Tibetan Machine Uni,LKLUG,Samyak Gujarati,Droid Sans Thai,Droid Sans " - L"Armenian,Untitled1,utkal,Lohit Oriya", - 0, 1252}, - {0x078ed524, L"MicrosoftSansSerif", - L"Droid Sans Japanese,FreeSerif,WenQuanYi Micro Hei", 0, 1252}, - {0x089b18a9, L"Arial", - L"Droid Sans Japanese,DejaVu Sans Condensed,FreeSerif,WenQuanYi Micro Hei", - 0, 1252}, - {0x0b2cad72, L"MonotypeCorsiva", L"Droid Sans Japanese,FreeSerif", 8, 1252}, - {0x0bb003e7, L"Kartika", - L"FreeSans,Liberation Sans,Liberation Sans Narrow,Nimbus Sans " - L"L,Garuda,FreeSerif,WenQuanYi Micro Hei", - 2, 1252}, - {0x0bb469df, L"VinerHandITC", - L"Droid Sans Japanese,Ubuntu,Liberation Sans,Liberation Serif", 8, 1252}, - {0x0bc1a851, L"SegoeUI", L"Droid Sans Japanese,DejaVu Sans", 0, 1252}, - {0x0c112ebd, L"KozukaGothicPro-VIM", L"FreeSerif", 0, 1252}, - {0x0cfcb9c1, L"AdobeThai", L"Droid Sans Japanese,Waree", 0, 847}, - {0x0e7de0f9, L"Playbill", - L"KacstQurn,Droid Arabic Naskh,Droid Sans Ethiopic,mry_KacstQurn,Droid " - L"Sans Ethiopic,Droid Sans Japanese,FreeSerif", - 0, 1252}, - {0x0eff47c3, L"STHupo", L"AR PL UKai HK,AR PL UMing HK,AR PL UKai CN", 0, - 936}, - {0x107ad374, L"Constantia", - L"Droid Sans Japanese,FreeSerif,WenQuanYi Micro Hei,Ubuntu", 2, 1252}, - {0x12194c2d, L"KunstlerScript", L"Droid Sans Japanese,Liberation Serif", 8, - 1252}, - {0x135ef6a1, L"MinionProSmBd", L"Liberation Serif", 0, 1252}, - {0x158c4049, L"Garamond", - L"Droid Sans Japanese,Liberation Serif,Ubuntu,FreeSerif", 2, 1252}, - {0x160ecb24, L"STZhongsong", - L"WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei " - L"Sharp,WenQuanYi Micro Hei", - 0, 936}, - {0x161ed07e, L"MSGothic", - L"WenQuanYi Micro Hei Mono,WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,AR PL " - L"UMing CN,AR PL UMing HK,AR PL UMing TW", - 1, 1252}, - {0x171d1ed1, L"SnapITC-Regular", - L"Liberation Sans Narrow,Ubuntu Condensed,Nimbus Sans L,DejaVu Sans", 0, - 1252}, - {0x18d1188f, L"Cambria", L"Droid Sans Japanese,FreeSerif,FreeMono", 2, - 1252}, - {0x18eaf350, L"ArialUnicodeMS", - L"WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei " - L"Sharp,WenQuanYi Micro Hei", - 0, 936}, - {0x1a92d115, L"MingLiU", - L"WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei " - L"Sharp,WenQuanYi Micro Hei", - 1, 1252}, - {0x1cc217c6, L"TrebuchetMS", - L"Droid Sans Japanese,Liberation Serif,FreeSerif,Ubuntu", 0, 1252}, - {0x1d649596, L"BasemicTimes", - L"Liberation Serif,Times New Roman,Droid Sans Japanese,FreeSerif,Ubuntu", - 0, 1252}, - {0x1e34ee60, L"BellMT", - L"KacstQurn,Droid Sans Japanese,Ubuntu,Liberation Serif", 2, 1252}, - {0x1eb36945, L"CooperBlack", - L"KacstQurn,Droid Sans Japanese,FreeMono,Liberation Mono, WenQuanYi Micro " - L"Hei Mono", - 2, 1252}, - {0x1ef7787d, L"BatangChe", - L"WenQuanYi Zen Hei Mono,AR PL UMing CN,AR PL UMing HK,AR PL UMing " - L"TW,WenQuanYi Zen Hei,WenQuanYi Micro Hei", - 1, 1252}, - {0x20b3bd3a, L"BrushScriptMT", - L"KacstQurn,Droid Arabic Naskh,Droid Sans Ethiopic,Droid Sans " - L"Japanese,URW Chancery L,Liberation Sans", - 8, 1252}, - {0x220877aa, L"Candara", L"Droid Sans Japanese,DejaVu Sans", 0, 1252}, - {0x22135007, L"FreestyleScript-Regular", - L"KacstQurn,Droid Sans Japanese,Liberation Sans", 8, 1252}, - {0x251059c3, L"Chiller", - L"KacstQurn,Droid Arabic Naskh,Droid Sans Ethiopic,Droid Sans " - L"Japanese,Liberation Sans", - 0, 1252}, - {0x25bed6dd, L"MSReferenceSansSerif", - L"DejaVu Sans Condensed,Ubuntu Condensed,Droid Sans Japanese,AR PL UKai " - L"HK", - 0, 1252}, - {0x28154c81, L"Parchment-Regular", L"Droid Sans Japanese,Liberation Sans", - 8, 1252}, - {0x29711eb9, L"STLiti", L"AR PL UKai HK", 0, 936}, - {0x2b1993b4, L"Basemic", - L"Liberation Serif,Droid Sans Japanese,Liberation Sans", 0, 1252}, - {0x2b316339, L"NiagaraSolid-Reg", L"Droid Sans Japanese,Liberation Sans", 0, - 1252}, - {0x2c147529, L"FootlightMTLight", - L"KacstQurn,Droid Sans Japanese,Liberation Sans", 0, 1252}, - {0x2c198928, L"HarlowSolid", - L"KacstQurn,Droid Sans Japanese,Liberation Sans", 0, 1252}, - {0x2c6ac6b2, L"LucidaBright", - L"KacstQurn,Droid Arabic Naskh,Droid Sans Ethiopic,mry_KacstQurn,Droid " - L"Sans Japanese,Liberation Sans", - 2, 1252}, - {0x2c9f38e2, L"KozukaMinchoPro-VIR", L"DejaVu Sans", 0, 1252}, - {0x2d5a47b0, L"STCaiyun", L"AR PL UKai HK", 0, 936}, - {0x2def26bf, L"BernardMT-Condensed", - L"KacstQurn,Droid Sans Japanese,DejaVu Serif", 0, 1252}, - {0x2fd8930b, L"KozukaMinchoPr6NR", L"DejaVu Serif", 0, 1252}, - {0x3115525a, L"FangSong_GB2312", - L"WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei " - L"Sharp,WenQuanYi Micro Hei", - 0, 1252}, - {0x31327817, L"MyriadPro", - L"Ubuntu Condensed,Droid Sans Japanese, FreeSerif", 0, 1252}, - {0x32244975, L"Helvetica", - L"Ubuntu,DejaVu Sans Condensed,Liberation Sans,Liberation Sans " - L"Narrow,Nimbus Sans L", - 0, 1252}, - {0x32ac995c, L"Terminal", L"DejaVu Serif", 0, 1252}, - {0x338d648a, L"NiagaraEngraved-Reg", L"Droid Sans Japanese,DejaVu Serif", 0, - 1252}, - {0x33bb65f2, L"Sylfaen", L"Droid Sans Japanese,DejaVu Sans", 2, 1252}, - {0x3402c30e, L"MSPMincho", - L"WenQuanYi Zen Hei Mono,AR PL UMing CN,AR PL UMing HK,AR PL UMing TW", 2, - 1252}, - {0x3412bf31, L"SimSun-PUA", - L"WenQuanYi Zen Hei Mono,AR PL UMing CN,AR PL UMing CN,AR PL UMing HK", 0, - 936}, - {0x36eb39b9, L"BerlinSansFB", - L"Droid Sans Japanese,Liberation Serif,Ubuntu,FreeSerif", 0, 1252}, - {0x36f42055, L"UniversATT", L"Microsoft Sans Serif", 0, 1252}, - {0x3864c4f6, L"HighTowerText", L"Droid Sans Japanese,DejaVu Serif", 2, - 1252}, - {0x3a257d03, L"FangSong_GB2312", - L"WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei", 0, 1252}, - {0x3c7d1d07, L"Garamond3LTStd", - L"Droid Sans Japanese,Ubuntu Condensed,DejaVu Sans Condensed,Liberation " - L"Serif,Ubuntu,FreeSerif", - 2, 1252}, - {0x3cdae668, L"FreestyleScript", - L"KacstQurn,Droid Sans Japanese,DejaVu Sans", 8, 1252}, - {0x3d55aed7, L"Jokerman", L"Droid Sans Japanese,DejaVu Sans", 0, 1252}, - {0x3d5b4385, L"PMingLiU", - L"WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei " - L"Sharp,WenQuanYi Micro Hei", - 2, 1252}, - {0x3d9b7669, L"EstrangeloEdessa", L"Droid Sans Japanese,DejaVu Sans", 0, - 1252}, - {0x3e532d74, L"FranklinGothicMedium", L"Droid Sans Japanese,Ubuntu", 0, - 1252}, - {0x3e6aa32d, L"NSimSun", - L"WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei " - L"Sharp,WenQuanYi Micro Hei", - 1, 936}, - {0x3f6c36a8, L"Gautami", - L"Droid Arabic Naskh,Droid Sans Ethiopic, mry_KacstQurn,Droid Sans " - L"Japanese,FreeSans", - 0, 1252}, - {0x3ff32662, L"Chiller-Regular", - L"KacstQurn,Droid Arabic Naskh,Droid Sans Ethiopic,FreeSans", 0, 1252}, - {0x409de312, L"ModernNo.20", - L"KacstQurn,Droid Sans Japanese,Nimbus Sans L,Nimbus Sans L,FreeSans", 2, - 1252}, - {0x41443c5e, L"Georgia", L"Droid Sans Japanese,FreeSans", 2, 1252}, - {0x4160ade5, L"BellGothicStdBlack", L"FreeSans", 0, 1252}, - {0x421976c4, L"Modern-Regular", L"FreeSans", 2, 1252}, - {0x422a7252, L"Stencil", L"Droid Sans Japanese,FreeSans,Liberation Sans", 0, - 1252}, - {0x42c8554f, L"Fixedsys", L"FreeSerif", 0, 1252}, - {0x435cb41d, L"Roman", L"FreeSerif", 0, 1252}, - {0x47882383, L"CourierNew", - L"FreeMono,WenQuanYi Micro Hei Mono,AR PL UKai CN,AR PL UKai HK,AR PL " - L"UKai TW,AR PL UKai TW MBE,DejaVu Sans", - 1, 1252}, - {0x480a2338, L"BerlinSansFBDemi", L"Droid Sans Japanese,Liberation Serif", - 0, 1252}, - {0x480bf7a4, L"CourierStd", L"DejaVu Sans", 0, 1252}, - {0x481ad6ed, L"VladimirScript", L"Droid Sans Japanese,DejaVu Serif", 8, - 1252}, - {0x4911577a, L"YouYuan", - L"WenQuanYi Zen Hei Mono,AR PL UMing CN,AR PL UMing HK,AR PL UMing TW", 1, - 936}, - {0x4a788d72, L"STXingkai", L"AR PL UKai HK,AR PL UMing HK,AR PL UKai CN", 0, - 936}, - {0x4bf88566, L"SegoeCondensed", L"FreeSerif", 0, 1252}, - {0x4ccf51a4, L"BerlinSansFB-Reg", L"Droid Sans Japanese,Liberation Serif", - 0, 1252}, - {0x4ea967ce, L"GulimChe", - L"WenQuanYi Zen Hei Mono,AR PL UKai CN,AR PL UKai HK,AR PL UKai TW,AR PL " - L"UKai TW MBE", - 1, 1252}, - {0x4f68bd79, L"LetterGothicStd", - L"FreeMono,Liberation Mono,Andale Mono,WenQuanYi Micro Hei Mono", 0, 1252}, - {0x51a0d0e6, L"KozukaGothicPr6NM", L"FreeSerif", 0, 1252}, - {0x531b3dea, L"BasemicSymbol", L"FreeSerif", 0, 1252}, - {0x5333fd39, L"CalifornianFB-Reg", - L"Droid Sans Japanese,URW Chancery L,FreeSerif", 2, 1252}, - {0x53561a54, L"FZYTK--GBK1-0", - L"WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei " - L"Sharp,WenQuanYi Micro Hei", - 0, 936}, - {0x55e0dde6, L"LucidaSansTypewriter", - L"Ubuntu Mono,DejaVu Sans Mono,Nimbus Mono L,Liberation Mono,Courier 10 " - L"Pitch,FreeMono", - 0, 1252}, - {0x574d4d3d, L"AdobeArabic", L"Droid Sans Japanese,DejaVu Sans", 0, 1252}, - {0x5792e759, L"STKaiti", L"WenQuanYi Micro Hei Mono", 0, 936}, - {0x5921978e, L"LucidaSansUnicode", L"Droid Sans Japanese,DejaVu Sans", 0, - 1252}, - {0x594e2da4, L"Vrinda", - L"Droid Arabic Naskh,Droid Sans Ethiopic,Droid Arabic " - L"Naskh,mry_KacstQurn,Droid Sans Japanese,FreeSans,FreeSerif", - 0, 1252}, - {0x59baa9a2, L"KaiTi_GB2312", - L"WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei " - L"Sharp,WenQuanYi Micro Hei", - 0, 1252}, - {0x5cfedf4f, L"BaskOldFace", - L"KacstQurn,Droid Sans Japanese,Ubuntu,Liberation Serif", 0, 1252}, - {0x5e16ac91, L"TrajanPro", - L"Nimbus Sans L,AR PL UMing HK,AR PL UKai HK,AR PL UMing TW,AR PL UMing " - L"TW MBE,DejaVu Sans,DejaVu Serif", - 0, 1252}, - {0x5f388196, L"ITCLegacySansStdMedium", - L"Liberation Serif,FreeSerif,FreeSans,Ubuntu", 0, 1252}, - {0x5f97921c, L"AdobeMyungjoStdM", - L"WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei " - L"Sharp,WenQuanYi Micro Hei", - 0, 936}, - {0x5fefbfad, L"Batang", - L"WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei " - L"Sharp,WenQuanYi Micro Hei", - 2, 1252}, - {0x605342b9, L"DotumChe", - L"WenQuanYi Zen Hei Mono,AR PL UMing CN,AR PL UMing HK,AR PL UMing TW", 1, - 1252}, - {0x608c5f9a, L"KaiTi_GB2312", - L"WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei " - L"Sharp,WenQuanYi Micro Hei", - 0, 936}, - {0x61efd0d1, L"MaturaMTScriptCapitals", - L"KacstQurn,Droid Arabic Naskh,Droid Sans Ethiopic,mry_KacstQurn,Droid " - L"Sans Japanese,DejaVu Serif,DejaVu Sans", - 0, 1252}, - {0x626608a9, L"MVBoli", - L"Droid Arabic Naskh,Droid Sans Ethiopic,mry_KacstQurn,Droid Sans " - L"Ethiopic,Droid Sans Japanese,DejaVu Sans", - 0, 1252}, - {0x630501a3, L"SmallFonts", L"DejaVu Serif", 0, 1252}, - {0x65d0e2a9, L"FZYTK--GBK1-0", - L"WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei " - L"Sharp,WenQuanYi Micro Hei", - 0, 936}, - {0x669f29e1, L"FZSTK--GBK1-0", - L"AR PL UMing CN,AR PL UKai CN, AR PL UMing HK", 0, 936}, - {0x673a9e5f, L"Tunga", - L"Droid Arabic Naskh,Droid Sans Ethiopic,mry_KacstQurn,Droid Sans " - L"Japanese,DejaVu Serif", - 0, 1252}, - {0x691aa4ce, L"NiagaraSolid", L"Droid Sans Japanese,DejaVu Serif", 0, 1252}, - {0x696259b7, L"Corbel", L"Droid Sans Japanese,DejaVu Sans", 0, 1252}, - {0x696ee9be, L"STXihei", L"WenQuanYi Micro Hei Mono", 0, 936}, - {0x6c59cf69, L"Dotum", L"WenQuanYi Zen Hei Mono", 0, 1252}, - {0x707fa561, L"Gungsuh", L"WenQuanYi Zen Hei Mono", 2, 1252}, - {0x71416bb2, L"ZWAdobeF", - L"KacstArt,KacstBookm,KacstDecorative,KacstDigital,KacstFarsi,KacstLetter," - L"KacstOffice,Dingbats,FreeSerif", - 0, 1252}, - {0x71b41801, L"Verdana", - L"DejaVu Sans Condensed,Ubuntu Condensed,Droid Sans Japanese,DejaVu Sans", - 0, 1252}, - {0x73f25e4c, L"PalatinoLinotype", L"Droid Sans Japanese,FreeSerif", 0, - 1252}, - {0x73f4d19f, L"NiagaraEngraved", L"Droid Sans Japanese,FreeSerif", 0, 1252}, - {0x74001694, L"MyriadProBlack", L"Droid Sans Japanese,AR PL UKai HK", 0, - 1252}, - {0x74b14d8f, L"Haettenschweiler", L"Droid Sans Japanese,DejaVu Serif", 0, - 1252}, - {0x74cb44ee, L"NSimSun", L"WenQuanYi Zen Hei Mono", 1, 936}, - {0x76b4d7ff, L"Shruti", - L"Droid Arabic Naskh,Droid Sans Ethiopic,mry_KacstQurn,Droid Sans " - L"Japanese,FreeSans", - 0, 1252}, - {0x788b3533, L"Webdings", L"FreeSans", 6, 42}, - {0x797dde99, L"MSSerif", L"FreeSans", 0, 1252}, - {0x7a0f9e9e, L"MSMincho", - L"WenQuanYi Micro Hei Mono,AR PL UMing CN,AR PL UMing HK,AR PL UMing TW", - 1, 1252}, - {0x7b439caf, L"OldEnglishTextMT", - L"Droid Sans Japanese,Liberation Sans,Ubuntu", 0, 1252}, - {0x8213a433, L"LucidaSans-Typewriter", - L"Ubuntu Mono,Liberation Mono,DejaVu Sans Mono", 0, 1252}, - {0x82fec929, L"AdobeSongStdL", - L"WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei " - L"Sharp,WenQuanYi Micro Hei", - 0, 936}, - {0x83581825, L"Modern", L"FreeSans", 0, 1252}, - {0x835a2823, L"Algerian", - L"KacstQurn,Droid Sans Japanese,FreeSans,Liberation Sans,Ubuntu", 0, 1252}, - {0x83dab9f5, L"Script", L"FreeSans", 0, 1252}, - {0x847b56da, L"Tahoma", - L"Droid Sans Japanese,DejaVu Sans Condensed,FreeSerif", 0, 1252}, - {0x8a783cb2, L"SimSun-PUA", - L"WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei " - L"Sharp,WenQuanYi Micro Hei", - 0, 1252}, - {0x8b5cac0e, L"Onyx", L"Droid Sans Japanese,Liberation Sans", 0, 1252}, - {0x8c6a499e, L"Gulim", - L"WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei " - L"Sharp,WenQuanYi Micro Hei", - 0, 1252}, - {0x8e0af790, L"JuiceITC", L"Droid Sans Japanese,Liberation Sans", 0, 1252}, - {0x8e8d43b2, L"Centaur", - L"KacstQurn,Droid Sans Japanese,Khmer OS,Khmer OS System", 2, 1252}, - {0x8ee4dcca, L"BookshelfSymbol7", L"Liberation Sans", 0, 1252}, - {0x90794800, L"BellGothicStdLight", L"Liberation Sans", 0, 1252}, - {0x909b516a, L"Century", - L"Droid Sans Japanese,Liberation Sans,Liberation Mono,Liberation Serif", 2, - 1252}, - {0x92ae370d, L"MSOutlook", L"Liberation Sans", 4, 42}, - {0x93c9fbf1, L"LucidaFax", - L"KacstQurn,Droid Arabic Naskh,Droid Sans " - L"Ethiopic,mry_KacstQurn,Liberation Sans", - 2, 1252}, - {0x9565085e, L"BookAntiqua", - L"Droid Sans Japanese,Liberation Sans,Liberation Serif", 2, 1252}, - {0x9856d95d, L"AdobeMingStdL", L"AR PL UMing HK", 0, 949}, - {0x9bbadd6b, L"ColonnaMT", - L"KacstQurn,Droid Sans Japanese,Khmer OS,Khmer OS System", 0, 1252}, - {0x9cbd16a4, L"ShowcardGothic-Reg", - L"Droid Sans Japanese,Liberation Sans,Ubuntu", 0, 1252}, - {0x9d73008e, L"MSSansSerif", L"FreeSerif", 0, 1252}, - {0xa0607db1, L"GungsuhChe", - L"WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei " - L"Sharp,WenQuanYi Micro Hei", - 1, 1252}, - {0xa0bcf6a1, L"LatinWide", L"FreeSerif", 2, 1252}, - {0xa1429b36, L"Symbol", L"FreeSerif", 6, 42}, - {0xa1fa5abc, L"Wingdings2", L"FreeSerif", 6, 42}, - {0xa1fa5abd, L"Wingdings3", L"FreeSerif", 6, 42}, - {0xa427bad4, L"InformalRoman-Regular", - L"Droid Arabic Naskh,Droid Sans Ethiopic,mry_KacstQurn,Droid Sans " - L"Japanese,FreeSerif", - 8, 1252}, - {0xa8b92ece, L"FZSTK--GBK1-0", L"AR PL UMing CN", 0, 936}, - {0xa8d83ece, L"CalifornianFB", L"Droid Sans Japanese,FreeSerif", 2, 1252}, - {0xaa3e082c, L"Kingsoft-Phonetic", - L"Tibetan Machine Uni,LKLUG,Samyak Gujarati,Droid Sans " - L"Thai,utkal,Kedage,Mallige,AR PL UKai CN", - 0, 1252}, - {0xaa6bcabe, L"HarlowSolidItalic", - L"KacstQurn,Droid Sans Japanese,Liberation Serif", 0, 1252}, - {0xade5337c, L"MSUIGothic", - L"WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei " - L"Sharp,WenQuanYi Micro Hei", - 0, 1252}, - {0xb08dd941, L"WideLatin", - L"KacstQurn,Droid Arabic Naskh,Droid Sans Ethiopic,mry_KacstQurn,Droid " - L"Sans Japanese,Liberation Serif", - 2, 1252}, - {0xb12765e0, L"ITCLegacySansStdBook", - L"AR PL UMing HK,AR PL UKai HK,FreeSerif,Ubuntu,FreeSans", 0, 1252}, - {0xb207f05d, L"PoorRichard", L"Droid Sans Japanese,Liberation Serif", 2, - 1252}, - {0xb3bc492f, L"JuiceITC-Regular", L"Droid Sans Japanese,Liberation Serif", - 0, 1252}, - {0xb5545399, L"Marlett", L"Liberation Serif", 4, 42}, - {0xb5dd1ebb, L"BritannicBold", - L"KacstQurn,Droid Arabic Naskh,Droid Sans " - L"Ethiopic,mry_KacstQurn,Liberation Serif", - 0, 1252}, - {0xb699c1c5, L"LucidaCalligraphy-Italic", - L"KacstQurn,Droid Arabic Naskh,Droid Sans Ethiopic,mry_KacstQurn,Droid " - L"Sans Japanese,DejaVu Serif", - 0, 1252}, - {0xb725d629, L"TimesNewRoman", L"Droid Sans Japanese,Liberation Sans", 2, - 1252}, - {0xb7eaebeb, L"AdobeHeitiStdR", - L"WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei " - L"Sharp,WenQuanYi Micro Hei", - 0, 936}, - {0xbd29c486, L"BerlinSansFBDemi-Bold", L"Droid Sans Japanese,DejaVu Serif", - 0, 1252}, - {0xbe8a8db4, L"BookshelfSymbolSeven", L"DejaVu Sans", 0, 1252}, - {0xc16c0118, L"AdobeHebrew", L"Droid Sans Japanese,Ubuntu,Liberation Serif", - 0, 1252}, - {0xc318b0af, L"MyriadProLight", - L"Droid Sans Japanese,AR PL UKai HK,AR PL UMing HK,AR PL UKai CN", 0, - 1252}, - {0xc65e5659, L"CambriaMath", L"Droid Sans Japanese,FreeSerif,FreeMono", 2, - 1252}, - {0xc75c8f05, L"LucidaConsole", - L"Liberation Mono,DejaVu Sans Mono,FreeMono,WenQuanYi Micro Hei Mono", 1, - 1252}, - {0xca7c35d6, L"Calibri", L"Droid Sans Japanese,DejaVu Sans", 0, 1252}, - {0xcb053f53, L"MicrosoftYaHei", - L"WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei " - L"Sharp,WenQuanYi Micro Hei", - 0, 936}, - {0xcb7190f9, L"Magneto-Bold", - L"Droid Arabic Naskh,Droid Sans Ethiopic,mry_KacstQurn,Droid Sans " - L"Japanese,DejaVu Serif", - 0, 1252}, - {0xcca00cc5, L"System", L"DejaVu Sans", 0, 1252}, - {0xccad6f76, L"Jokerman-Regular", L"Droid Sans Japanese,DejaVu Sans", 0, - 1252}, - {0xccc5818c, L"EuroSign", L"DejaVu Serif", 0, 1252}, - {0xcf3d7234, L"LucidaHandwriting-Italic", - L"Liberation Sans Narrow,Ubuntu Condensed,Nimbus Sans L,DejaVu Serif", 0, - 1252}, - {0xcf7b8fdb, L"MinionPro", L"DejaVu Sans", 0, 1252}, - {0xcfe5755f, L"Simhei", - L"WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei " - L"Sharp,WenQuanYi Micro Hei", - 1, 936}, - {0xd011f4ee, L"MSPGothic", - L"WenQuanYi Zen Hei Mono,AR PL UMing CN,AR PL UMing HK,AR PL UMing TW", 0, - 1252}, - {0xd060e7ef, L"Vivaldi", - L"KacstQurn,Droid Sans Japanese,Liberation Sans,Ubuntu", 8, 1252}, - {0xd07edec1, L"FranklinGothic-Medium", L"Droid Sans Japanese,Ubuntu", 0, - 1252}, - {0xd107243f, L"SimSun", L"WenQuanYi Zen Hei Mono", 0, 936}, - {0xd1881562, L"ArialNarrow", - L"Liberation Sans Narrow,Droid Sans Japanese,FreeSerif", 0, 1252}, - {0xd22b7dce, L"BodoniMTPosterCompressed", - L"Droid Sans Japanese,DejaVu Serif", 0, 1252}, - {0xd22bfa60, L"ComicSansMS", - L"Droid Sans Japanese,FreeMono,Liberation Mono", 8, 1252}, - {0xd3bd0e35, L"Bauhaus93", - L"KacstQurn,Droid Sans Japanese,Liberation Sans,Ubuntu", 0, 1252}, - {0xd429ee7a, L"STFangsong", L"WenQuanYi Micro Hei Mono", 0, 936}, - {0xd6679c12, L"BernardMTCondensed", - L"KacstQurn,Droid Sans Japanese,Nimbus Sans L,URW Chancery " - L"L,KacstOne,Liberation Sans", - 0, 1252}, - {0xd8e8a027, L"LucidaSans", - L"Liberation Sans Narrow,Nimbus Sans L,KacstQurn,Droid Arabic Naskh,Droid " - L"Sans Ethiopic,DejaVu Serif Condensed,Liberation Mono,Ubuntu", - 0, 1252}, - {0xd9fe7761, L"HighTowerText-Reg", - L"Droid Sans Japanese,Ubuntu,Liberation Serif", 2, 1252}, - {0xda7e551e, L"STSong", L"WenQuanYi Micro Hei Mono", 0, 936}, - {0xdaa6842d, L"STZhongsong", - L"WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei " - L"Sharp,WenQuanYi Micro Hei", - 0, 936}, - {0xdaaab93f, L"STFangsong", - L"WenQuanYi Micro Hei Mono,WenQuanYi Zen Hei Mono,WenQuanYi Zen " - L"Hei,WenQuanYi Zen Hei Sharp", - 0, 936}, - {0xdaeb0713, L"STSong", - L"WenQuanYi Micro Hei Mono,WenQuanYi Zen Hei Mono,WenQuanYi Zen " - L"Hei,WenQuanYi Zen Hei Sharp", - 0, 936}, - {0xdafedbef, L"STCaiyun", L"AR PL UKai HK,AR PL UMing HK,AR PL UKai CN", 0, - 936}, - {0xdb00a3d9, L"Broadway", - L"KacstQurn,Droid Sans Japanese,DejaVu Sans,FreeMono,Liberation Mono", 0, - 1252}, - {0xdb1f5ad4, L"STXinwei", L"AR PL UKai HK,AR PL UMing HK,AR PL UKai CN", 0, - 936}, - {0xdb326e7f, L"STKaiti", - L"WenQuanYi Micro Hei Mono,WenQuanYi Zen Hei Mono,WenQuanYi Zen " - L"Hei,WenQuanYi Zen Hei Sharp", - 0, 936}, - {0xdb69595a, L"STHupo", - L"WenQuanYi Micro Hei Mono,WenQuanYi Zen Hei Mono,WenQuanYi Zen " - L"Hei,WenQuanYi Zen Hei Sharp", - 0, 936}, - {0xdba0082c, L"STXihei", - L" WenQuanYi Micro Hei Mono,WenQuanYi Zen Hei Mono,WenQuanYi Zen " - L"Hei,WenQuanYi Zen Hei Sharp", - 0, 936}, - {0xdbd0ab18, L"STXingkai", L"AR PL UKai HK,AR PL UMing HK,AR PL UKai CN", 0, - 936}, - {0xdc1a7db1, L"STLiti", L"AR PL UKai HK,AR PL UMing HK,AR PL UKai CN", 0, - 936}, - {0xdc33075f, L"KristenITC-Regular", - L"Droid Arabic Naskh,Droid Sans Ethiopic,mry_KacstQurn,DejaVu Sans " - L"Condensed,Ubuntu,Liberation Sans", - 8, 1252}, - {0xdcc7009c, L"Harrington", - L"KacstQurn,Droid Sans Japanese,Liberation Serif,FreeSerif,Ubuntu", 0, - 1252}, - {0xdd712466, L"ArialBlack", - L"Droid Sans Japanese,DejaVu Sans,DejaVu Serif,FreeMono", 0, 1252}, - {0xdde87b3e, L"Impact", L"Droid Sans Japanese,DejaVu Serif", 0, 1252}, - {0xdf69fb32, L"SnapITC", - L"Liberation Sans Narrow,Ubuntu Condensed,DejaVu Sans,DejaVu " - L"Serif,FreeMono", - 0, 1252}, - {0xdf8b25e8, L"CenturyGothic", - L"Droid Sans Japanese,Liberation Mono,Liberation Sans,Liberation Serif", 0, - 1252}, - {0xe0f705c0, L"KristenITC", - L"Droid Arabic Naskh,Droid Sans Ethiopic,mry_KacstQurn,DejaVu Sans " - L"Condensed,Ubuntu,Liberation Sans", - 8, 1252}, - {0xe1427573, L"Raavi", - L"Droid Arabic Naskh,Droid Sans " - L"Ethiopic,mry_KacstQurn,FreeSerif,Liberation Serif,Khmer OS", - 0, 1252}, - {0xe2cea0cb, L"Magneto", - L"Droid Arabic Naskh,Droid Sans Ethiopic,mry_KacstQurn,DejaVu " - L"Serif,DejaVu Serif Condensed,DejaVu Sans", - 0, 1252}, - {0xe36a9e17, L"Ravie", - L"Droid Arabic Naskh,Droid Sans Ethiopic,mry_KacstQurn,DejaVu " - L"Serif,DejaVu Sans,FreeMono", - 0, 1252}, - {0xe433f8e2, L"Parchment", L"Droid Sans Japanese,DejaVu Serif", 8, 1252}, - {0xe43dff4a, L"Wingdings", L"DejaVu Serif", 4, 42}, - {0xe4e2c405, L"MTExtra", L"DejaVu Serif", 6, 42}, - {0xe618cc35, L"InformalRoman", - L"Droid Arabic Naskh,Droid Sans Ethiopic,mry_KacstQurn,Droid Sans " - L"Japanese,Nimbus Sans L,DejaVu Sans Condensed,Ubuntu,Liberation Sans", - 8, 1252}, - {0xe6c27ffc, L"Mistral", L"Droid Sans Japanese,DejaVu Serif", 8, 1252}, - {0xe7ebf4b9, L"Courier", L"DejaVu Sans,DejaVu Sans Condensed,FreeSerif", 0, - 1252}, - {0xe8bc4a9d, L"MSReferenceSpecialty", L"DejaVu Serif", 0, 1252}, - {0xe90fb013, L"TempusSansITC", - L"Droid Sans Japanese,Ubuntu,Liberation Serif,FreeSerif", 0, 1252}, - {0xec637b42, L"Consolas", - L"DejaVu Sans Condensed,AR PL UKai CN,AR PL UKai HK,AR PL UKai " - L"TW,FreeSerif,FreeSans", - 1, 1252}, - {0xed3a683b, L"STXinwei", L"AR PL UKai HK,AR PL UMing HK,AR PL UKai CN", 0, - 936}, - {0xef264cd1, L"LucidaHandwriting", - L"Liberation Sans Narrow,Ubuntu Condensed,Nimbus Sans " - L"L,KacstQurn,Liberation Mono", - 0, 1252}, - {0xf086bca2, L"BaskervilleOldFace", - L"KacstQurn,Droid Sans Japanese,Liberation Serif,Ubuntu,FreeSerif", 0, - 1252}, - {0xf1028030, L"Mangal", - L"FreeSans,TSCu_Paranar,Garuda,Liberation Sans,Liberation Sans " - L"Narrow,Nimbus Sans L", - 2, 1252}, - {0xf1da7eb9, L"ShowcardGothic", - L"Droid Sans Japanese,DejaVu Serif Condensed,DejaVu Sans " - L"Condensed,Liberation Sans,Ubuntu", - 0, 1252}, - {0xf210f06a, L"ArialMT", - L"Liberation Sans,Liberation Sans Narrow,FreeSans,Nimbus Sans L,Khmer OS " - L"System,Khmer OS", - 0, 1252}, - {0xf477f16a, L"Latha", - L"Liberation Sans Narrow,Nimbus Sans L,Droid Arabic " - L"Naskh,mry_KacstQurn,FreeSerif,Nimbus Sans L", - 0, 1252}, - {0xf616f3dd, L"LiSu", - L"WenQuanYi Zen Hei Mono,AR PL UMing CN,AR PL UMing HK,AR PL UMing TW,AR " - L"PL UMing TW MBE", - 1, 936}, - {0xfa479aa6, L"MicrosoftYaHei", - L"WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei " - L"Sharp,WenQuanYi Micro Hei", - 0, 936}, - {0xfcd19697, L"BookmanOldStyle", - L"Droid Sans Japanese,Liberation Mono,Liberation Sans,Liberation Serif", 0, - 1252}, - {0xfe209a82, L"LucidaCalligraphy", - L"KacstQurn,Droid Arabic Naskh,Droid Sans Ethiopic,mry_KacstQurn,Droid " - L"Sans Japanese,DejaVu Serif,DejaVu Sans,FreeMono", - 0, 1252}, - {0xfef135f8, L"AdobeHeitiStd-Regular", - L"WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei " - L"Sharp,WenQuanYi Micro Hei", - 0, 936}, -}; -#elif _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ -static const XFA_FONTINFO g_XFAFontsMap[] = { - {0x01d5d33e, L"SimSun", L"STHeiti,Heiti TC,STFangsong", 0, 936}, - {0x01e4f102, L"YouYuan", L"STHeiti,Heiti TC,STFangsong", 1, 936}, - {0x030549dc, L"LiSu", L"STHeiti,Heiti TC,STFangsong", 1, 936}, - {0x032edd44, L"Simhei", L"STHeiti,Heiti TC,STFangsong", 1, 936}, - {0x03eac6fc, L"PoorRichard-Regular", - L"Noteworthy,Avenir Next Condensed,Impact", 2, 1252}, - {0x03ed90e6, L"Nina", L"Microsoft Sans Serif", 0, 1252}, - {0x077b56b3, L"KingsoftPhoneticPlain", - L"LastResort,Apple " - L"Chancery,STIXVariants,STIXSizeOneSym,STIXSizeOneSym,Apple Braille", - 0, 1252}, - {0x078ed524, L"MicrosoftSansSerif", L"Songti SC,Apple Symbols", 0, 1252}, - {0x089b18a9, L"Arial", - L"Arial Unicode MS,Microsoft Sans Serif,Apple Symbols", 0, 1252}, - {0x0b2cad72, L"MonotypeCorsiva", L"Arial Narrow,Impact", 8, 1252}, - {0x0bb003e7, L"Kartika", - L"Arial Unicode MS,Microsoft Sans Serif,Arial Narrow,Damascus", 2, 1252}, - {0x0bb469df, L"VinerHandITC", L"Comic Sans MS,Songti SC,STSong", 8, 1252}, - {0x0bc1a851, L"SegoeUI", L"Apple Symbols", 0, 1252}, - {0x0c112ebd, L"KozukaGothicPro-VIM", L"Microsoft Sans Serif,Apple Symbols", - 0, 1252}, - {0x0cfcb9c1, L"AdobeThai", L"Avenir Next Condensed Ultra Light", 0, 847}, - {0x0e7de0f9, L"Playbill", L"STIXNonUnicode", 0, 1252}, - {0x0eff47c3, L"STHupo", L"Kaiti SC,Songti SC,STHeiti", 0, 936}, - {0x107ad374, L"Constantia", L"Arial Unicode MS,Palatino,Baskerville", 2, - 1252}, - {0x12194c2d, L"KunstlerScript", - L"Avenir Next Condensed Demi Bold,Arial Narrow", 8, 1252}, - {0x135ef6a1, L"MinionProSmBd", L"Microsoft Sans Serif,Apple Symbols", 0, - 1252}, - {0x158c4049, L"Garamond", L"Impact,Arial Narrow", 2, 1252}, - {0x160ecb24, L"STZhongsong", L"STFangsong,Songti SC", 0, 936}, - {0x161ed07e, L"MSGothic", - L"WenQuanYi Zen Hei Mono,AR PL UMing CN,AR PL UMing HK,AR PL UMing " - L"TW,Microsoft Sans Serif,Apple Symbols", - 1, 1252}, - {0x171d1ed1, L"SnapITC-Regular", L"STHeiti,Arial Black", 0, 1252}, - {0x18d1188f, L"Cambria", L"Arial Unicode MS", 2, 1252}, - {0x18eaf350, L"ArialUnicodeMS", L"Microsoft Sans Serif,Apple Symbols", 0, - 936}, - {0x1a92d115, L"MingLiU", L"Heiti SC,STHeiti", 1, 1252}, - {0x1cc217c6, L"TrebuchetMS", L"Damascus,Impact,Arial Narrow", 0, 1252}, - {0x1d649596, L"BasemicTimes", L"Liberation Serif,Impact,Arial Narrow", 0, - 1252}, - {0x1e34ee60, L"BellMT", - L"Papyrus,STIXNonUnicode,Microsoft Sans Serif,Avenir Light", 2, 1252}, - {0x1eb36945, L"CooperBlack", - L"Marion,STIXNonUnicode,Arial Rounded MT Bold,Lucida Grande", 2, 1252}, - {0x1ef7787d, L"BatangChe", - L"WenQuanYi Zen Hei Mono,AR PL UMing CN,,AR PL UMing HK,AR PL UMing TW,AR " - L"PL UMing TW MBE,Arial Unicode MS,Heiti TC", - 1, 1252}, - {0x20b3bd3a, L"BrushScriptMT", - L"STIXNonUnicode,Damascus,Arial Narrow,Avenir Next Condensed,Cochin", 8, - 1252}, - {0x220877aa, L"Candara", L"Cochin,Baskerville,Marion", 0, 1252}, - {0x22135007, L"FreestyleScript-Regular", - L"STIXNonUnicode,Nadeem,Zapf Dingbats", 8, 1252}, - {0x251059c3, L"Chiller", - L"Zapf Dingbats,Damascus,STIXNonUnicode,Papyrus,KufiStandardGK,Baghdad", 0, - 1252}, - {0x25bed6dd, L"MSReferenceSansSerif", - L"Tahoma,Apple Symbols,Apple LiGothic,Arial Unicode MS,Lucida " - L"Grande,Microsoft Sans Serif", - 0, 1252}, - {0x28154c81, L"Parchment-Regular", L"Microsoft Sans Serif,Apple Symbols", 8, - 1252}, - {0x29711eb9, L"STLiti", L"Kaiti SC,Songti SC", 0, 936}, - {0x2b1993b4, L"Basemic", L"Impact,Arial Narrow", 0, 1252}, - {0x2b316339, L"NiagaraSolid-Reg", L"Microsoft Sans Serif,Apple Symbols", 0, - 1252}, - {0x2c147529, L"FootlightMTLight", - L"STIXNonUnicode,Avenir Next Condensed Heavy,PT Sans,Noteworthy", 0, 1252}, - {0x2c198928, L"HarlowSolid", - L"Avenir Medium,Avenir Next Medium,Arial Unicode MS", 0, 1252}, - {0x2c6ac6b2, L"LucidaBright", - L"PT Sans Narrow,Papyrus,Damascus,STIXNonUnicode,Arial Rounded MT " - L"Bold,Comic Sans MS,Avenir Next", - 2, 1252}, - {0x2c9f38e2, L"KozukaMinchoPro-VIR", L"Microsoft Sans Serif,Apple Symbols", - 0, 1252}, - {0x2d5a47b0, L"STCaiyun", L"Kaiti SC,Songti SC", 0, 936}, - {0x2def26bf, L"BernardMT-Condensed", - L"Impact,Avenir Next Condensed Demi Bold,American Typewriter", 0, 1252}, - {0x2fd8930b, L"KozukaMinchoPr6NR", L"Microsoft Sans Serif,Apple Symbols", 0, - 1252}, - {0x3115525a, L"FangSong_GB2312", L"Hiragino Sans GB,STHeiti", 0, 1252}, - {0x31327817, L"MyriadPro", L"Microsoft Sans Serif,Apple Symbols", 0, 1252}, - {0x32244975, L"Helvetica", - L"Arial Narrow,Arial Unicode MS,Damascus,STIXNonUnicode", 0, 1252}, - {0x32ac995c, L"Terminal", L"Microsoft Sans Serif,Apple Symbols", 0, 1252}, - {0x338d648a, L"NiagaraEngraved-Reg", L"Microsoft Sans Serif,Apple Symbols", - 0, 1252}, - {0x33bb65f2, L"Sylfaen", L"Arial Unicode MS,Marion", 2, 1252}, - {0x3402c30e, L"MSPMincho", L"Arial Unicode MS,Apple SD Gothic Neo", 2, - 1252}, - {0x3412bf31, L"SimSun-PUA", L"STHeiti,Heiti TC,STFangsong", 0, 936}, - {0x36eb39b9, L"BerlinSansFB", L"American Typewriter,Impact", 0, 1252}, - {0x36f42055, L"UniversATT", L"Microsoft Sans Serif", 0, 1252}, - {0x3864c4f6, L"HighTowerText", L"STIXGeneral,.Helvetica Neue Desk UI", 2, - 1252}, - {0x3a257d03, L"FangSong_GB2312", L"Hiragino Sans GB,STHeiti", 0, 1252}, - {0x3cdae668, L"FreestyleScript", L"Nadeem,Zapf Dingbats,STIXNonUnicode", 8, - 1252}, - {0x3d55aed7, L"Jokerman", - L"Papyrus,Lucida Grande,Heiti TC,American Typewriter", 0, 1252}, - {0x3d5b4385, L"PMingLiU", L"Heiti SC,STHeiti", 2, 1252}, - {0x3d9b7669, L"EstrangeloEdessa", L"American Typewriter,Marion", 0, 1252}, - {0x3e532d74, L"FranklinGothicMedium", L"Impact,Arial Narrow", 0, 1252}, - {0x3e6aa32d, L"NSimSun", L"STHeiti,STFangsong", 1, 936}, - {0x3f6c36a8, L"Gautami", - L"Damascus,STIXNonUnicode,STIXGeneral,American Typewriter", 0, 1252}, - {0x3ff32662, L"Chiller-Regular", L"Papyrus,KufiStandardGK,Baghdad", 0, - 1252}, - {0x409de312, L"ModernNo.20", L"Avenir Next Condensed,Impact", 2, 1252}, - {0x41443c5e, L"Georgia", L".Helvetica Neue Desk UI,Arial Unicode MS", 2, - 1252}, - {0x4160ade5, L"BellGothicStdBlack", L"Microsoft Sans Serif,Apple Symbols", - 0, 1252}, - {0x421976c4, L"Modern-Regular", L"Impact", 2, 1252}, - {0x422a7252, L"Stencil", L"STIXNonUnicode,Songti SC,Georgia,Baskerville", 0, - 1252}, - {0x42c8554f, L"Fixedsys", L"Microsoft Sans Serif,Apple Symbols", 0, 1252}, - {0x435cb41d, L"Roman", L"Arial Narrow", 0, 1252}, - {0x47882383, L"CourierNew", L"PCMyungjo,Osaka,Arial Unicode MS,Songti SC", - 1, 1252}, - {0x480a2338, L"BerlinSansFBDemi", - L"STIXNonUnicode,American Typewriter,Avenir Next Condensed Heavy", 0, - 1252}, - {0x480bf7a4, L"CourierStd", L"Courier New", 0, 1252}, - {0x481ad6ed, L"VladimirScript", - L"STIXNonUnicode,Avenir Next Condensed,Impact", 8, 1252}, - {0x4911577a, L"YouYuan", L"STHeiti,Heiti TC", 1, 936}, - {0x4a788d72, L"STXingkai", L"Kaiti SC,Songti SC", 0, 936}, - {0x4bf88566, L"SegoeCondensed", L"Microsoft Sans Serif,Apple Symbols", 0, - 1252}, - {0x4ccf51a4, L"BerlinSansFB-Reg", - L"STIXNonUnicode,American Typewriter,Impact", 0, 1252}, - {0x4ea967ce, L"GulimChe", L"Arial Unicode MS,Heiti TC,STFangsong", 1, 1252}, - {0x4f68bd79, L"LetterGothicStd", - L"Courier New,Andale Mono,Ayuthaya,PCMyungjo,Osaka", 0, 1252}, - {0x51a0d0e6, L"KozukaGothicPr6NM", L"Microsoft Sans Serif,Apple Symbols", 0, - 1252}, - {0x531b3dea, L"BasemicSymbol", L"Microsoft Sans Serif,Apple Symbols", 0, - 1252}, - {0x5333fd39, L"CalifornianFB-Reg", - L"American Typewriter,Avenir Next Condensed,Impact", 2, 1252}, - {0x53561a54, L"FZYTK--GBK1-0", L"STFangsong,Songti SC,STSong", 0, 936}, - {0x55e0dde6, L"LucidaSansTypewriter", L"Menlo,Courier New,Andale Mono", 0, - 1252}, - {0x574d4d3d, L"AdobeArabic", L"Arial Narrow", 0, 1252}, - {0x5792e759, L"STKaiti", L"Songti SC,Arial Unicode MS", 0, 936}, - {0x5921978e, L"LucidaSansUnicode", L"Lucida Grande,Arial Unicode MS,Menlo", - 0, 1252}, - {0x594e2da4, L"Vrinda", L"Geeza Pro,Damascus,STIXGeneral,Gill Sans", 0, - 1252}, - {0x59baa9a2, L"KaiTi_GB2312", L"Hiragino Sans GB,STHeiti", 0, 1252}, - {0x5cfedf4f, L"BaskOldFace", - L"Avenir Next Condensed Heavy,PT Sans,Avenir Next Condensed", 0, 1252}, - {0x5e16ac91, L"TrajanPro", L"Arial Narrow,PT Sans Narrow,Damascus", 0, - 1252}, - {0x5f97921c, L"AdobeMyungjoStdM", - L"AppleMyungjo,AppleGothic,Arial Unicode MS", 0, 936}, - {0x5fefbfad, L"Batang", L"Arial Unicode MS,Songti SC", 2, 1252}, - {0x605342b9, L"DotumChe", L"Arial Unicode MS,Heiti TC", 1, 1252}, - {0x608c5f9a, L"KaiTi_GB2312", L"Hiragino Sans GB,STHeiti,Heiti TC", 0, 936}, - {0x61efd0d1, L"MaturaMTScriptCapitals", - L"Kokonor,Damascus,STIXNonUnicode,STHeiti,Arial Black,Avenir Next Heavy", - 0, 1252}, - {0x626608a9, L"MVBoli", - L"Apple Braille,Geeza Pro,Microsoft Sans Serif,Apple Symbols", 0, 1252}, - {0x630501a3, L"SmallFonts", L"Microsoft Sans Serif,Apple Symbols", 0, 1252}, - {0x65d0e2a9, L"FZYTK--GBK1-0", L"STFangsong,Songti SC,STSong", 0, 936}, - {0x669f29e1, L"FZSTK--GBK1-0", L"STHeiti,Heiti TC", 0, 936}, - {0x673a9e5f, L"Tunga", - L"Damascus,STIXNonUnicode,Avenir Next Condensed,Avenir Next Condensed " - L"Ultra Light,Futura", - 0, 1252}, - {0x691aa4ce, L"NiagaraSolid", L"Microsoft Sans Serif,Apple Symbols", 0, - 1252}, - {0x696259b7, L"Corbel", L"Cochin,Baskerville,Marion", 0, 1252}, - {0x696ee9be, L"STXihei", L"STHeiti,Heiti TC,Songti SC,Arial Unicode MS", 0, - 936}, - {0x6c59cf69, L"Dotum", L"Arial Unicode MS,Songti SC", 0, 1252}, - {0x707fa561, L"Gungsuh", L"Arial Unicode MS,Heiti TC", 2, 1252}, - {0x71416bb2, L"ZWAdobeF", - L"STIXSizeFourSym,STIXSizeThreeSym,STIXSizeTwoSym,STIXSizeOneSym", 0, - 1252}, - {0x71b41801, L"Verdana", - L"Tahoma,Marion,Apple Symbols,.Helvetica Neue Desk UI,Lucida " - L"Grande,Courier New", - 0, 1252}, - {0x73f25e4c, L"PalatinoLinotype", L"Palatino,Arial Unicode MS", 0, 1252}, - {0x73f4d19f, L"NiagaraEngraved", L"Microsoft Sans Serif,Apple Symbols", 0, - 1252}, - {0x74001694, L"MyriadProBlack", L"Palatino,Baskerville,Marion,Cochin", 0, - 1252}, - {0x74b14d8f, L"Haettenschweiler", L"Microsoft Sans Serif,Apple Symbols", 0, - 1252}, - {0x74cb44ee, L"NSimSun", L"STHeiti,Heiti TC,STFangsong", 1, 936}, - {0x76b4d7ff, L"Shruti", - L"Damascus,STIXNonUnicode,Arial Unicode MS,American Typewriter", 0, 1252}, - {0x788b3533, L"Webdings", L"Microsoft Sans Serif,Apple Symbols", 6, 42}, - {0x797dde99, L"MSSerif", L"Microsoft Sans Serif,Apple Symbols", 0, 1252}, - {0x7a0f9e9e, L"MSMincho", - L"WenQuanYi Zen Hei Mono,AR PL UMing CN,AR PL UMing HK,AR PL UMing TW,AR " - L"PL UMing TW MBE,Arial Unicode MS,Apple SD Gothic Neo", - 1, 1252}, - {0x7b439caf, L"OldEnglishTextMT", - L"STIXNonUnicode,Arial Unicode MS,Baskerville,Avenir Next Medium", 0, - 1252}, - {0x8213a433, L"LucidaSans-Typewriter", - L"Comic Sans MS,Avenir Next,Arial Rounded MT Bold", 0, 1252}, - {0x82fec929, L"AdobeSongStdL", L"Heiti TC,STHeiti", 0, 936}, - {0x83581825, L"Modern", L"Avenir Next Condensed,Impact", 0, 1252}, - {0x835a2823, L"Algerian", - L"STIXNonUnicode,Baskerville,Avenir Next Medium,American Typewriter", 0, - 1252}, - {0x83dab9f5, L"Script", L"Arial Narrow", 0, 1252}, - {0x847b56da, L"Tahoma", L"Songti SC,Apple Symbols", 0, 1252}, - {0x8a783cb2, L"SimSun-PUA", L"STHeiti,Heiti TC,STFangsong", 0, 1252}, - {0x8b5cac0e, L"Onyx", L"Microsoft Sans Serif,Apple Symbols", 0, 1252}, - {0x8c6a499e, L"Gulim", L"Arial Unicode MS,Songti SC", 0, 1252}, - {0x8e0af790, L"JuiceITC", L"Nadeem,Al Bayan", 0, 1252}, - {0x8e8d43b2, L"Centaur", L"Avenir Next Condensed,Noteworthy,Impact", 2, - 1252}, - {0x8ee4dcca, L"BookshelfSymbol7", L"Microsoft Sans Serif,Apple Symbols", 0, - 1252}, - {0x90794800, L"BellGothicStdLight", L"Microsoft Sans Serif,Apple Symbols", - 0, 1252}, - {0x909b516a, L"Century", L"Damascus,Andale Mono,Songti SC,Arial Unicode MS", - 2, 1252}, - {0x92ae370d, L"MSOutlook", L"Microsoft Sans Serif,Apple Symbols", 4, 42}, - {0x93c9fbf1, L"LucidaFax", - L"PT Sans Narrow,Papyrus,Kokonor,Geeza Pro,Arial Rounded MT Bold,Lucida " - L"Grande,Futura", - 2, 1252}, - {0x9565085e, L"BookAntiqua", L"Palatino,Microsoft Sans Serif,Apple Symbols", - 2, 1252}, - {0x9856d95d, L"AdobeMingStdL", L"AHiragino Sans GB,Heiti TC,STHeiti", 0, - 949}, - {0x9bbadd6b, L"ColonnaMT", L"Noteworthy,Avenir Next Condensed,Impact", 0, - 1252}, - {0x9cbd16a4, L"ShowcardGothic-Reg", - L"Arial Unicode MS,Georgia,American Typewriter", 0, 1252}, - {0x9d73008e, L"MSSansSerif", L"Songti SC,Apple Symbols", 0, 1252}, - {0xa0607db1, L"GungsuhChe", - L"WenQuanYi Zen Hei Mono,AR PL UMing CN,AR PL UMing HK,AR PL UMing TW,AR " - L"PL UMing TW MBE,Arial Unicode MS,Heiti TC,STFangsong", - 1, 1252}, - {0xa0bcf6a1, L"LatinWide", L"Zapfino,Arial Black,STHeiti", 2, 1252}, - {0xa1429b36, L"Symbol", L"Microsoft Sans Serif,Apple Symbols", 6, 42}, - {0xa1fa5abc, L"Wingdings2", L"Microsoft Sans Serif,Apple Symbols", 6, 42}, - {0xa1fa5abd, L"Wingdings3", L"Microsoft Sans Serif,Apple Symbols", 6, 42}, - {0xa427bad4, L"InformalRoman-Regular", - L"STIXNonUnicode,Arial Narrow,Avenir Next Condensed Demi Bold", 8, 1252}, - {0xa8b92ece, L"FZSTK--GBK1-0", L"STHeiti,Heiti TC,STFangsong", 0, 936}, - {0xa8d83ece, L"CalifornianFB", - L"American Typewriter,Avenir Next Condensed,Impact", 2, 1252}, - {0xaa3e082c, L"Kingsoft-Phonetic", - L"STIXVariants,STIXSizeOneSym,Apple Braille", 0, 1252}, - {0xaa6bcabe, L"HarlowSolidItalic", - L"STIXNonUnicode,Avenir Medium,Avenir Next Medium,Arial Unicode MS", 0, - 1252}, - {0xade5337c, L"MSUIGothic", L"Arial Unicode MS,Apple SD Gothic Neo", 0, - 1252}, - {0xb08dd941, L"WideLatin", - L"Marion,Papyrus,Nanum Pen Script,Zapf Dingbats,Damascus,Zapfino,Arial " - L"Black,STHeiti", - 2, 1252}, - {0xb12765e0, L"ITCLegacySansStdBook", - L"LastResort,.Helvetica Neue Desk UI,Arial Unicode MS,Palatino", 0, 1252}, - {0xb207f05d, L"PoorRichard", L"Noteworthy,Avenir Next Condensed,Impact", 2, - 1252}, - {0xb3bc492f, L"JuiceITC-Regular", L"Nadeem,Al Bayan,STIXNonUnicode", 0, - 1252}, - {0xb5545399, L"Marlett", L"Microsoft Sans Serif,Apple Symbols", 4, 42}, - {0xb5dd1ebb, L"BritannicBold", - L"Damascus,STIXNonUnicode,Avenir Next Condensed Heavy,PT Sans", 0, 1252}, - {0xb699c1c5, L"LucidaCalligraphy-Italic", L"STHeiti,Arial Black", 0, 1252}, - {0xb725d629, L"TimesNewRoman", L"Microsoft Sans Serif,Apple Symbols", 2, - 1252}, - {0xb7eaebeb, L"AdobeHeitiStdR", L"Heiti TC,STHeiti", 0, 936}, - {0xbd29c486, L"BerlinSansFBDemi-Bold", - L"American Typewriter,Avenir Next Condensed Heavy", 0, 1252}, - {0xbe8a8db4, L"BookshelfSymbolSeven", L"Microsoft Sans Serif,Apple Symbols", - 0, 1252}, - {0xc16c0118, L"AdobeHebrew", - L".Helvetica Neue Desk UI,Palatino,American Typewriter", 0, 1252}, - {0xc318b0af, L"MyriadProLight", L"Palatino,Baskerville,Marion", 0, 1252}, - {0xc65e5659, L"CambriaMath", L"Arial Unicode MS", 2, 1252}, - {0xc75c8f05, L"LucidaConsole", L"Courier New,Menlo,Andale Mono", 1, 1252}, - {0xca7c35d6, L"Calibri", L"Apple Symbols,HeadLineA", 0, 1252}, - {0xcb053f53, L"MicrosoftYaHei", L"Arial Unicode MS", 0, 936}, - {0xcb7190f9, L"Magneto-Bold", L"Lucida Grande", 0, 1252}, - {0xcca00cc5, L"System", L"Microsoft Sans Serif,Apple Symbols", 0, 1252}, - {0xccad6f76, L"Jokerman-Regular", L"Lucida Grande", 0, 1252}, - {0xccc5818c, L"EuroSign", L"Microsoft Sans Serif,Apple Symbols", 0, 1252}, - {0xcf3d7234, L"LucidaHandwriting-Italic", - L"Microsoft Sans Serif,Apple Symbols", 0, 1252}, - {0xcf7b8fdb, L"MinionPro", - L"Bell MT,Corbel,Times New Roman,Cambria,Berlin Sans FB", 0, 1252}, - {0xcfe5755f, L"Simhei", L"STHeiti,Heiti TC,STFangsong", 1, 936}, - {0xd011f4ee, L"MSPGothic", L"Arial Unicode MS,Apple SD Gothic Neo", 0, - 1252}, - {0xd060e7ef, L"Vivaldi", - L"STIXNonUnicode,Arial Unicode MS,Avenir Medium,Avenir Next Medium", 8, - 1252}, - {0xd07edec1, L"FranklinGothic-Medium", L"Impact,Arial Narrow", 0, 1252}, - {0xd107243f, L"SimSun", L"STHeiti,Heiti TC,STFangsong", 0, 936}, - {0xd1881562, L"ArialNarrow", L"PT Sans Narrow,Apple Symbols", 0, 1252}, - {0xd22b7dce, L"BodoniMTPosterCompressed", - L"Microsoft Sans Serif,Apple Symbols", 0, 1252}, - {0xd22bfa60, L"ComicSansMS", - L"Damascus,Georgia,.Helvetica Neue Desk UI,Lucida Grande,Arial Unicode MS", - 8, 1252}, - {0xd3bd0e35, L"Bauhaus93", - L"STIXNonUnicode,Arial Unicode MS,Avenir Next,Avenir", 0, 1252}, - {0xd429ee7a, L"STFangsong", L"Songti SC,Arial Unicode MS", 0, 936}, - {0xd6679c12, L"BernardMTCondensed", - L"Impact,Avenir Next Condensed Demi Bold", 0, 1252}, - {0xd8e8a027, L"LucidaSans", - L"Arial Narrow,Khmer MN,Kokonor,Damascus,Microsoft Sans Serif,Apple " - L"Symbols", - 0, 1252}, - {0xd9fe7761, L"HighTowerText-Reg", - L"STIXGeneral,.Helvetica Neue Desk UI,Trebuchet MS", 2, 1252}, - {0xda7e551e, L"STSong", L"Arial Unicode MS", 0, 936}, - {0xdaa6842d, L"STZhongsong", L"STFangsong,Songti SC,STSong", 0, 936}, - {0xdaaab93f, L"STFangsong", L"Songti SC,Arial Unicode MS", 0, 936}, - {0xdaeb0713, L"STSong", L"Songti SC,Arial Unicode MS", 0, 936}, - {0xdafedbef, L"STCaiyun", L"Kaiti SC,Songti SC,STHeiti", 0, 936}, - {0xdb00a3d9, L"Broadway", - L"Papyrus,STIXNonUnicode,Arial Black,Avenir Next Heavy,Heiti TC", 0, 1252}, - {0xdb1f5ad4, L"STXinwei", L"Kaiti SC,Songti SC,STHeiti", 0, 936}, - {0xdb326e7f, L"STKaiti", L"Songti SC,Arial Unicode MS", 0, 936}, - {0xdb69595a, L"STHupo", L"Kaiti SC,Songti SC,STHeiti", 0, 936}, - {0xdba0082c, L"STXihei", L"Songti SC,Arial Unicode MS", 0, 936}, - {0xdbd0ab18, L"STXingkai", L"Kaiti SC,Songti SC", 0, 936}, - {0xdc1a7db1, L"STLiti", L"Kaiti SC,Songti SC", 0, 936}, - {0xdc33075f, L"KristenITC-Regular", - L"STIXNonUnicode,Damascus,Songti SC,STSong", 8, 1252}, - {0xdcc7009c, L"Harrington", - L"STIXNonUnicode,Avenir Next Condensed Heavy,Noteworthy", 0, 1252}, - {0xdd712466, L"ArialBlack", L"Geeza Pro,Damascus,Songti SC,STSong", 0, - 1252}, - {0xdde87b3e, L"Impact", L"Arial Narrow,Marion", 0, 1252}, - {0xdf69fb32, L"SnapITC", - L"Arial Narrow,PT Sans Narrow,Marion,STHeiti,Arial Black", 0, 1252}, - {0xdf8b25e8, L"CenturyGothic", - L"Damascus,Andale Mono,Songti SC,Arial Unicode MS", 0, 1252}, - {0xe0f705c0, L"KristenITC", L"Songti SC,STSong", 8, 1252}, - {0xe1427573, L"Raavi", - L"Damascus,STIXNonUnicode,Marion,Papyrus,Avenir Next Condensed " - L"Heavy,American Typewriter", - 0, 1252}, - {0xe2cea0cb, L"Magneto", - L"STIXNonUnicode,Damascus,Geeza Pro,Lucida Grande,Georgia,Heiti TC", 0, - 1252}, - {0xe36a9e17, L"Ravie", L"STHeiti,Arial Black", 0, 1252}, - {0xe433f8e2, L"Parchment", L"Microsoft Sans Serif,Apple Symbols", 8, 1252}, - {0xe43dff4a, L"Wingdings", L"Microsoft Sans Serif,Apple Symbols", 4, 42}, - {0xe4e2c405, L"MTExtra", L"Microsoft Sans Serif,Apple Symbols", 6, 42}, - {0xe618cc35, L"InformalRoman", L"Arial Narrow", 8, 1252}, - {0xe6c27ffc, L"Mistral", L"Apple Symbols", 8, 1252}, - {0xe7ebf4b9, L"Courier", L"Courier New", 0, 1252}, - {0xe8bc4a9d, L"MSReferenceSpecialty", L"Microsoft Sans Serif,Apple Symbols", - 0, 1252}, - {0xe90fb013, L"TempusSansITC", - L"STIXNonUnicode,Microsoft Sans Serif,Avenir Light", 0, 1252}, - {0xec637b42, L"Consolas", - L"AR PL UKai CN,AR PL UKai HK,AR PL UKai TW,AR PL UKai TW MBE,AR PL UMing " - L"CN,AR PL UMing HK,Microsoft Sans Serif,Tahoma", - 1, 1252}, - {0xed3a683b, L"STXinwei", L"Kaiti SC,Songti SC,", 0, 936}, - {0xef264cd1, L"LucidaHandwriting", - L"Arial Narrow,Avenir Next Condensed Demi Bold,Avenir Next " - L"Condensed,Avenir Next Condensed Medium,STHeiti,Arial Black", - 0, 1252}, - {0xf086bca2, L"BaskervilleOldFace", - L"STIXNonUnicode,Avenir Next Condensed Heavy,PT Sans", 0, 1252}, - {0xf1028030, L"Mangal", - L"Arial Unicode MS,Microsoft Sans Serif,Arial Narrow,Tahoma", 2, 1252}, - {0xf1da7eb9, L"ShowcardGothic", - L"Papyrus,Arial Unicode MS,Georgia,American Typewriter", 0, 1252}, - {0xf210f06a, L"ArialMT", - L"Arial Unicode MS,Arial Narrow,STIXNonUnicode,Damascus,Avenir Next " - L"Condensed Demi Bold,Avenir Next Condensed Medium,Avenir Next Condensed", - 0, 1252}, - {0xf477f16a, L"Latha", - L"Arial Narrow,Damascus,STIXNonUnicode,American Typewriter", 0, 1252}, - {0xf616f3dd, L"LiSu", L"STHeiti,Heiti TC,STFangsong", 1, 936}, - {0xfa479aa6, L"MicrosoftYaHei", L"Arial Unicode MS", 0, 936}, - {0xfcd19697, L"BookmanOldStyle", - L"Geeza Pro,Damascus,Andale Mono,Songti SC,Arial Unicode MS", 0, 1252}, - {0xfe209a82, L"LucidaCalligraphy", - L"Kokonor,Damascus,STIXNonUnicode,STHeiti,Arial Black", 0, 1252}, - {0xfef135f8, L"AdobeHeitiStd-Regular", L"Heiti TC,STHeiti", 0, 936}, -}; -#elif _FXM_PLATFORM_ == _FXM_PLATFORM_ANDROID_ -static const XFA_FONTINFO g_XFAFontsMap[] = { - {0x01d5d33e, L"SimSun", L"Droid Sans Fallback", 0, 936}, - {0x01e4f102, L"YouYuan", L"Droid Sans Fallback", 1, 936}, - {0x030549dc, L"LiSu", L"Droid Sans Fallback", 1, 936}, - {0x032edd44, L"Simhei", L"Droid Sans Fallback", 1, 936}, - {0x03eac6fc, L"PoorRichard-Regular", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback,Droid Arabic " - L"Naskh,Droid Sans Ethiopic", - 2, 1252}, - {0x03ed90e6, L"Nina", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252}, - {0x077b56b3, L"KingsoftPhoneticPlain", - L"Droid Sans Thai,Droid Sans Armenian,Droid Arabic Naskh,Droid Sans " - L"Ethiopic,Droid Sans Fallback", - 0, 1252}, - {0x078ed524, L"MicrosoftSansSerif", L"Droid Sans Fallback", 0, 1252}, - {0x089b18a9, L"Arial", L"Droid Sans Fallback", 0, 1252}, - {0x0b2cad72, L"MonotypeCorsiva", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 8, 1252}, - {0x0bb003e7, L"Kartika", - L"Droid Arabic Naskh,Droid Sans Ethiopic,Roboto,Droid Serif,Droid Sans " - L"Mono", - 2, 1252}, - {0x0bb469df, L"VinerHandITC", - L"Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallback", 8, 1252}, - {0x0bc1a851, L"SegoeUI", L"Droid Sans Fallback", 0, 1252}, - {0x0c112ebd, L"KozukaGothicPro-VIM", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252}, - {0x0cfcb9c1, L"AdobeThai", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 847}, - {0x0e7de0f9, L"Playbill", - L"Droid Arabic Naskh,Droid Sans Ethiopic,Roboto,Droid Serif,Droid Sans " - L"Mono", - 0, 1252}, - {0x0eff47c3, L"STHupo", L"Droid Sans Fallback", 0, 936}, - {0x107ad374, L"Constantia", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 2, 1252}, - {0x12194c2d, L"KunstlerScript", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 8, 1252}, - {0x135ef6a1, L"MinionProSmBd", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252}, - {0x158c4049, L"Garamond", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 2, 1252}, - {0x160ecb24, L"STZhongsong", L"Droid Sans Fallback", 0, 936}, - {0x161ed07e, L"MSGothic", L"Droid Sans Fallback", 1, 1252}, - {0x171d1ed1, L"SnapITC-Regular", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252}, - {0x18d1188f, L"Cambria", L"Droid Sans Fallback", 2, 1252}, - {0x18eaf350, L"ArialUnicodeMS", L"Droid Sans Fallback", 0, 936}, - {0x1a92d115, L"MingLiU", L"Droid Sans Fallback", 1, 1252}, - {0x1cc217c6, L"TrebuchetMS", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252}, - {0x1d649596, L"BasemicTimes", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252}, - {0x1e34ee60, L"BellMT", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 2, 1252}, - {0x1eb36945, L"CooperBlack", - L"Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallback", 2, 1252}, - {0x1ef7787d, L"BatangChe", L"Droid Sans Fallback", 1, 1252}, - {0x20b3bd3a, L"BrushScriptMT", L"Droid Arabic Naskh,Droid Sans Ethiopic", 8, - 1252}, - {0x220877aa, L"Candara", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252}, - {0x22135007, L"FreestyleScript-Regular", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 8, 1252}, - {0x251059c3, L"Chiller", - L"Droid Arabic Naskh,Droid Sans Ethiopic,Roboto,Droid Serif", 0, 1252}, - {0x25bed6dd, L"MSReferenceSansSerif", L"Droid Sans Fallback", 0, 1252}, - {0x28154c81, L"Parchment-Regular", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 8, 1252}, - {0x29711eb9, L"STLiti", L"Droid Sans Fallback", 0, 936}, - {0x2b1993b4, L"Basemic", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252}, - {0x2b316339, L"NiagaraSolid-Reg", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252}, - {0x2c147529, L"FootlightMTLight", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252}, - {0x2c198928, L"HarlowSolid", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252}, - {0x2c6ac6b2, L"LucidaBright", - L"Droid Arabic Naskh,Droid Sans Ethiopic,Droid Serif,Roboto", 2, 1252}, - {0x2c9f38e2, L"KozukaMinchoPro-VIR", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252}, - {0x2d5a47b0, L"STCaiyun", L"Droid Sans Fallback", 0, 936}, - {0x2def26bf, L"BernardMT-Condensed", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252}, - {0x2fd8930b, L"KozukaMinchoPr6NR", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252}, - {0x3115525a, L"FangSong_GB2312", L"Droid Sans Fallback", 0, 1252}, - {0x31327817, L"MyriadPro", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252}, - {0x32244975, L"Helvetica", - L"Droid Arabic Naskh,Droid Sans Ethiopic,Droid Serif,Roboto", 0, 1252}, - {0x32ac995c, L"Terminal", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252}, - {0x338d648a, L"NiagaraEngraved-Reg", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252}, - {0x33bb65f2, L"Sylfaen", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 2, 1252}, - {0x3402c30e, L"MSPMincho", L"Droid Sans Fallback", 2, 1252}, - {0x3412bf31, L"SimSun-PUA", L"Droid Sans Fallback", 0, 936}, - {0x36eb39b9, L"BerlinSansFB", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252}, - {0x36f42055, L"UniversATT", L"Microsoft Sans Serif", 0, 1252}, - {0x3864c4f6, L"HighTowerText", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 2, 1252}, - {0x3a257d03, L"FangSong_GB2312", L"Droid Sans Fallback", 0, 1252}, - {0x3cdae668, L"FreestyleScript", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 8, 1252}, - {0x3d55aed7, L"Jokerman", - L"Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallback", 0, 1252}, - {0x3d5b4385, L"PMingLiU", L"Droid Sans Fallback", 2, 1252}, - {0x3d9b7669, L"EstrangeloEdessa", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252}, - {0x3e532d74, L"FranklinGothicMedium", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252}, - {0x3e6aa32d, L"NSimSun", L"Droid Sans Fallback", 1, 936}, - {0x3f6c36a8, L"Gautami", - L"Droid Arabic Naskh,Droid Sans Ethiopic,Roboto,Droid Serif,Droid Sans " - L"Mono,Droid Sans Fallback", - 0, 1252}, - {0x3ff32662, L"Chiller-Regular", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252}, - {0x409de312, L"ModernNo.20", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 2, 1252}, - {0x41443c5e, L"Georgia", - L"Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallback", 2, 1252}, - {0x4160ade5, L"BellGothicStdBlack", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252}, - {0x421976c4, L"Modern-Regular", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 2, 1252}, - {0x422a7252, L"Stencil", - L"Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallback", 0, 1252}, - {0x42c8554f, L"Fixedsys", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252}, - {0x435cb41d, L"Roman", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252}, - {0x47882383, L"CourierNew", L"Droid Sans Fallback", 1, 1252}, - {0x480a2338, L"BerlinSansFBDemi", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252}, - {0x480bf7a4, L"CourierStd", L"Droid Sans Fallback", 0, 1252}, - {0x481ad6ed, L"VladimirScript", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 8, 1252}, - {0x4911577a, L"YouYuan", L"Droid Sans Fallback", 1, 936}, - {0x4a788d72, L"STXingkai", L"Droid Sans Fallback", 0, 936}, - {0x4bf88566, L"SegoeCondensed", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252}, - {0x4ccf51a4, L"BerlinSansFB-Reg", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252}, - {0x4ea967ce, L"GulimChe", L"Droid Sans Fallback", 1, 1252}, - {0x4f68bd79, L"LetterGothicStd", - L"Droid Sans Mono,Droid Arabic Naskh,Droid Sans Ethiopic,Droid Sans " - L"Mono,Droid Serif,Droid Sans Fallback", - 0, 1252}, - {0x51a0d0e6, L"KozukaGothicPr6NM", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252}, - {0x531b3dea, L"BasemicSymbol", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252}, - {0x5333fd39, L"CalifornianFB-Reg", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 2, 1252}, - {0x53561a54, L"FZYTK--GBK1-0", L"Droid Sans Fallback", 0, 936}, - {0x55e0dde6, L"LucidaSansTypewriter", - L"Droid Sans Mono,Droid Arabic Naskh,Droid Sans Ethiopic", 0, 1252}, - {0x574d4d3d, L"AdobeArabic", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252}, - {0x5792e759, L"STKaiti", L"Droid Sans Fallback", 0, 936}, - {0x5921978e, L"LucidaSansUnicode", L"Droid Sans Fallback", 0, 1252}, - {0x594e2da4, L"Vrinda", - L"Droid Arabic Naskh,Droid Sans Ethiopic,Roboto,Droid Serif,Droid Sans " - L"Mono", - 0, 1252}, - {0x59baa9a2, L"KaiTi_GB2312", L"Droid Sans Fallback", 0, 1252}, - {0x5cfedf4f, L"BaskOldFace", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252}, - {0x5f97921c, L"AdobeMyungjoStdM", L"Droid Sans Fallback", 0, 936}, - {0x5fefbfad, L"Batang", L"Droid Sans Fallback", 2, 1252}, - {0x605342b9, L"DotumChe", L"Droid Sans Fallback", 1, 1252}, - {0x608c5f9a, L"KaiTi_GB2312", L"Droid Sans Fallback", 0, 936}, - {0x61efd0d1, L"MaturaMTScriptCapitals", - L"Droid Arabic Naskh,Droid Sans Ethiopic,Droid Serif,Roboto,Droid Sans " - L"Mono", - 0, 1252}, - {0x626608a9, L"MVBoli", - L"Droid Arabic Naskh,Droid Sans Ethiopic,Droid Serif,Roboto,Droid Sans " - L"Mono", - 0, 1252}, - {0x630501a3, L"SmallFonts", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252}, - {0x65d0e2a9, L"FZYTK--GBK1-0", L"Droid Sans Fallback", 0, 936}, - {0x669f29e1, L"FZSTK--GBK1-0", L"Droid Sans Fallback", 0, 936}, - {0x673a9e5f, L"Tunga", - L"Droid Arabic Naskh,Droid Sans Ethiopic,Roboto,Droid Serif,Droid Sans " - L"Mono,Droid Sans Fallback", - 0, 1252}, - {0x691aa4ce, L"NiagaraSolid", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252}, - {0x696259b7, L"Corbel", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252}, - {0x696ee9be, L"STXihei", L"Droid Sans Fallback", 0, 936}, - {0x6c59cf69, L"Dotum", L"Droid Sans Fallback", 0, 1252}, - {0x707fa561, L"Gungsuh", L"Droid Sans Fallback", 2, 1252}, - {0x71416bb2, L"ZWAdobeF", - L"Droid Arabic Naskh,Droid Sans Armenian,Droid Sans Ethiopic,Droid Sans " - L"Georgian,Droid Sans Hebrew,Droid Sans Thai", - 0, 1252}, - {0x71b41801, L"Verdana", - L"Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallback", 0, 1252}, - {0x73f25e4c, L"PalatinoLinotype", L"Droid Sans Fallback", 0, 1252}, - {0x73f4d19f, L"NiagaraEngraved", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252}, - {0x74001694, L"MyriadProBlack", L"Book Antiqua,Constantia,Dotum,Georgia", 0, - 1252}, - {0x74b14d8f, L"Haettenschweiler", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252}, - {0x74cb44ee, L"NSimSun", L"Droid Sans Fallback", 1, 936}, - {0x76b4d7ff, L"Shruti", - L"Droid Arabic Naskh,Droid Sans Ethiopic,Roboto,Droid Serif,Droid Sans " - L"Mono", - 0, 1252}, - {0x788b3533, L"Webdings", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 6, 42}, - {0x797dde99, L"MSSerif", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252}, - {0x7a0f9e9e, L"MSMincho", L"Droid Sans Fallback", 1, 1252}, - {0x7b439caf, L"OldEnglishTextMT", - L"Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallback", 0, 1252}, - {0x8213a433, L"LucidaSans-Typewriter", - L"Droid Sans Mono,Droid Serif,Roboto,Droid Sans Fallback", 0, 1252}, - {0x82fec929, L"AdobeSongStdL", L"Droid Sans Fallback", 0, 936}, - {0x83581825, L"Modern", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252}, - {0x835a2823, L"Algerian", - L"Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallback", 0, 1252}, - {0x83dab9f5, L"Script", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252}, - {0x847b56da, L"Tahoma", L"Droid Sans Fallback", 0, 1252}, - {0x8a783cb2, L"SimSun-PUA", L"Droid Sans Fallback", 0, 1252}, - {0x8b5cac0e, L"Onyx", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252}, - {0x8c6a499e, L"Gulim", L"Droid Sans Fallback", 0, 1252}, - {0x8e0af790, L"JuiceITC", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252}, - {0x8e8d43b2, L"Centaur", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 2, 1252}, - {0x8ee4dcca, L"BookshelfSymbol7", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252}, - {0x90794800, L"BellGothicStdLight", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252}, - {0x909b516a, L"Century", - L"Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallback", 2, 1252}, - {0x92ae370d, L"MSOutlook", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 4, 42}, - {0x93c9fbf1, L"LucidaFax", - L"Droid Arabic Naskh,Droid Sans Ethiopic,Droid Serif,Roboto,Droid Sans " - L"Mono", - 2, 1252}, - {0x9565085e, L"BookAntiqua", - L"Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallback", 2, 1252}, - {0x9856d95d, L"AdobeMingStdL", L"Droid Sans Fallback", 0, 949}, - {0x9bbadd6b, L"ColonnaMT", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252}, - {0x9cbd16a4, L"ShowcardGothic-Reg", - L"Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallbac", 0, 1252}, - {0x9d73008e, L"MSSansSerif", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252}, - {0xa0607db1, L"GungsuhChe", L"Droid Sans Fallback", 1, 1252}, - {0xa0bcf6a1, L"LatinWide", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 2, 1252}, - {0xa1429b36, L"Symbol", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 6, 42}, - {0xa1fa5abc, L"Wingdings2", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 6, 42}, - {0xa1fa5abd, L"Wingdings3", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 6, 42}, - {0xa427bad4, L"InformalRoman-Regular", - L"Droid Arabic Naskh,Droid Sans Ethiopic", 8, 1252}, - {0xa8b92ece, L"FZSTK--GBK1-0", L"Droid Sans Fallback", 0, 936}, - {0xa8d83ece, L"CalifornianFB", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 2, 1252}, - {0xaa3e082c, L"Kingsoft-Phonetic", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252}, - {0xaa6bcabe, L"HarlowSolidItalic", - L"Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallback", 0, 1252}, - {0xade5337c, L"MSUIGothic", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252}, - {0xb08dd941, L"WideLatin", - L"Droid Arabic Naskh,Droid Sans Ethiopic,Droid Serif,Roboto,Droid Sans " - L"Mono", - 2, 1252}, - {0xb207f05d, L"PoorRichard", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 2, 1252}, - {0xb3bc492f, L"JuiceITC-Regular", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252}, - {0xb5545399, L"Marlett", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 4, 42}, - {0xb5dd1ebb, L"BritannicBold", L"Droid Arabic Naskh,Droid Sans Ethiopic", 0, - 1252}, - {0xb699c1c5, L"LucidaCalligraphy-Italic", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252}, - {0xb725d629, L"TimesNewRoman", L"Droid Sans Fallback", 2, 1252}, - {0xb7eaebeb, L"AdobeHeitiStdR", L"Droid Sans Fallback", 0, 936}, - {0xbd29c486, L"BerlinSansFBDemi-Bold", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252}, - {0xbe8a8db4, L"BookshelfSymbolSeven", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252}, - {0xc16c0118, L"AdobeHebrew", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback,Droid Arabic " - L"Naskh,Droid Sans Ethiopic", - 0, 1252}, - {0xc318b0af, L"MyriadProLight", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252}, - {0xc65e5659, L"CambriaMath", L"Droid Sans Fallback", 2, 1252}, - {0xc75c8f05, L"LucidaConsole", - L"Droid Sans Mono,Droid Serif,Roboto,Droid Sans Fallback", 1, 1252}, - {0xca7c35d6, L"Calibri", L"Droid Sans Fallback", 0, 1252}, - {0xcb053f53, L"MicrosoftYaHei", L"Droid Sans Fallback", 0, 936}, - {0xcb7190f9, L"Magneto-Bold", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252}, - {0xcca00cc5, L"System", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252}, - {0xccad6f76, L"Jokerman-Regular", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252}, - {0xccc5818c, L"EuroSign", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252}, - {0xcf3d7234, L"LucidaHandwriting-Italic", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252}, - {0xcf7b8fdb, L"MinionPro", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252}, - {0xcfe5755f, L"Simhei", L"Droid Sans Fallback", 1, 936}, - {0xd011f4ee, L"MSPGothic", L"Droid Sans Fallback", 0, 1252}, - {0xd060e7ef, L"Vivaldi", - L"Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallback", 8, 1252}, - {0xd07edec1, L"FranklinGothic-Medium", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252}, - {0xd107243f, L"SimSun", L"Droid Sans Fallback", 0, 936}, - {0xd1881562, L"ArialNarrow", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252}, - {0xd22b7dce, L"BodoniMTPosterCompressed", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252}, - {0xd22bfa60, L"ComicSansMS", L"Droid Serif,Roboto,Droid Sans Fallback", 8, - 1252}, - {0xd3bd0e35, L"Bauhaus93", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252}, - {0xd429ee7a, L"STFangsong", L"Droid Sans Fallback", 0, 936}, - {0xd6679c12, L"BernardMTCondensed", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252}, - {0xd8e8a027, L"LucidaSans", - L"Droid Arabic Naskh,Droid Sans Ethiopic,Droid Serif,Roboto", 0, 1252}, - {0xd9fe7761, L"HighTowerText-Reg", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 2, 1252}, - {0xda7e551e, L"STSong", L"Droid Sans Fallback", 0, 936}, - {0xdaa6842d, L"STZhongsong", L"Droid Sans Fallback", 0, 936}, - {0xdaaab93f, L"STFangsong", L"Droid Sans Fallback", 0, 936}, - {0xdaeb0713, L"STSong", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 936}, - {0xdafedbef, L"STCaiyun", L"Droid Sans Fallback", 0, 936}, - {0xdb00a3d9, L"Broadway", - L"Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallback", 0, 1252}, - {0xdb1f5ad4, L"STXinwei", L"Droid Sans Fallback", 0, 936}, - {0xdb326e7f, L"STKaiti", L"Droid Sans Fallback", 0, 936}, - {0xdb69595a, L"STHupo", L"Droid Sans Fallback", 0, 936}, - {0xdba0082c, L"STXihei", L"Droid Sans Fallback", 0, 936}, - {0xdbd0ab18, L"STXingkai", L"Droid Sans Fallback", 0, 936}, - {0xdc1a7db1, L"STLiti", L"Droid Sans Fallback", 0, 936}, - {0xdc33075f, L"KristenITC-Regular", - L"Droid Arabic Naskh,Droid Sans Ethiopic,Droid Serif,Roboto", 8, 1252}, - {0xdcc7009c, L"Harrington", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252}, - {0xdd712466, L"ArialBlack", - L"Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallback", 0, 1252}, - {0xdde87b3e, L"Impact", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252}, - {0xdf69fb32, L"SnapITC", - L"Droid Arabic Naskh,Droid Sans Ethiopic,Droid Serif,Roboto,Droid Sans " - L"Mono", - 0, 1252}, - {0xdf8b25e8, L"CenturyGothic", - L"Droid Serif,Roboto,Droid Serif,Droid Sans Mono", 0, 1252}, - {0xe0f705c0, L"KristenITC", - L"Droid Arabic Naskh,Droid Sans Ethiopic,Droid Serif,Roboto", 8, 1252}, - {0xe1427573, L"Raavi", - L"Droid Arabic Naskh,Droid Sans Ethiopic,Roboto,Droid Serif,Droid Sans " - L"Mono", - 0, 1252}, - {0xe2cea0cb, L"Magneto", - L"Droid Arabic Naskh,Droid Sans Ethiopic,Droid Serif,Roboto,Droid Sans " - L"Mono", - 0, 1252}, - {0xe36a9e17, L"Ravie", - L"Droid Arabic Naskh,Droid Sans Ethiopic,Roboto,Droid Serif,Droid Sans " - L"Mono", - 0, 1252}, - {0xe433f8e2, L"Parchment", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 8, 1252}, - {0xe43dff4a, L"Wingdings", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 4, 42}, - {0xe4e2c405, L"MTExtra", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 6, 42}, - {0xe618cc35, L"InformalRoman", - L"Droid Arabic Naskh,Droid Sans Ethiopic,Roboto,Droid Serif", 8, 1252}, - {0xe6c27ffc, L"Mistral", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 8, 1252}, - {0xe7ebf4b9, L"Courier", L"Droid Sans Fallback", 0, 1252}, - {0xe8bc4a9d, L"MSReferenceSpecialty", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252}, - {0xe90fb013, L"TempusSansITC", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252}, - {0xec637b42, L"Consolas", L"Droid Sans Fallback", 1, 1252}, - {0xed3a683b, L"STXinwei", L"Droid Sans Fallback", 0, 936}, - {0xef264cd1, L"LucidaHandwriting", - L"Droid Arabic Naskh,Droid Sans Ethiopic,Droid Serif,Roboto,Droid Sans " - L"Mono", - 0, 1252}, - {0xf086bca2, L"BaskervilleOldFace", - L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252}, - {0xf1028030, L"Mangal", - L"Droid Arabic Naskh,Droid Sans Ethiopic,Droid Serif,Roboto,Droid Sans " - L"Mono", - 2, 1252}, - {0xf1da7eb9, L"ShowcardGothic", - L"Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallbac", 0, 1252}, - {0xf210f06a, L"ArialMT", - L"Droid Arabic Naskh,Droid Sans Ethiopic,Roboto,Droid Serif", 0, 1252}, - {0xf477f16a, L"Latha", - L"Droid Arabic Naskh,Droid Sans Ethiopic,Roboto,Droid Serif,Droid Sans " - L"Mono", - 0, 1252}, - {0xf616f3dd, L"LiSu", L"Droid Sans Fallback", 1, 936}, - {0xfa479aa6, L"MicrosoftYaHei", L"Droid Sans Fallback", 0, 936}, - {0xfcd19697, L"BookmanOldStyle", - L"Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallback", 0, 1252}, - {0xfe209a82, L"LucidaCalligraphy", - L"Droid Arabic Naskh,Droid Sans Ethiopic,Droid Serif,Roboto,Droid Sans " - L"Mono", - 0, 1252}, - {0xfef135f8, L"AdobeHeitiStd-Regular", L"Droid Sans Fallback", 0, 936}, -}; -#endif -void XFA_LocalFontNameToEnglishName(const CFX_WideStringC& wsLocalName, - CFX_WideString& wsEnglishName) { - wsEnglishName = wsLocalName; -#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ || \ - _FXM_PLATFORM_ == _FXM_PLATFORM_LINUX_ || \ - _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ || \ - _FXM_PLATFORM_ == _FXM_PLATFORM_ANDROID_ - FX_DWORD dwLocalNameHash = FX_HashCode_String_GetW( - wsLocalName.GetPtr(), wsLocalName.GetLength(), TRUE); - int32_t iStart = 0; - int32_t iEnd = sizeof(g_XFAFontsMap) / sizeof(XFA_FONTINFO) - 1; - int32_t iMid = 0; - do { - iMid = (iStart + iEnd) / 2; - FX_DWORD dwFontNameHash = g_XFAFontsMap[iMid].dwFontNameHash; - if (dwFontNameHash == dwLocalNameHash) { - wsEnglishName = g_XFAFontsMap[iMid].pPsName; - break; - } else if (dwFontNameHash < dwLocalNameHash) { - iStart = iMid + 1; - } else { - iEnd = iMid - 1; - } - } while (iEnd >= iStart); -#endif -} -const XFA_FONTINFO* XFA_GetFontINFOByFontName( - const CFX_WideStringC& wsFontName) { -#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ || \ - _FXM_PLATFORM_ == _FXM_PLATFORM_LINUX_ || \ - _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ || \ - _FXM_PLATFORM_ == _FXM_PLATFORM_ANDROID_ - CFX_WideString wsFontNameTemp = wsFontName; - wsFontNameTemp.Remove(L' '); - FX_DWORD dwCurFontNameHash = - FX_HashCode_String_GetW(wsFontNameTemp, wsFontNameTemp.GetLength(), TRUE); - int32_t iStart = 0; - int32_t iEnd = sizeof(g_XFAFontsMap) / sizeof(XFA_FONTINFO) - 1; - int32_t iMid = 0; - const XFA_FONTINFO* pFontInfo = NULL; - do { - iMid = (iStart + iEnd) / 2; - FX_DWORD dwFontNameHash = g_XFAFontsMap[iMid].dwFontNameHash; - if (dwFontNameHash == dwCurFontNameHash) { - pFontInfo = &g_XFAFontsMap[iMid]; - break; - } else if (dwFontNameHash < dwCurFontNameHash) { - iStart = iMid + 1; - } else { - iEnd = iMid - 1; - } - } while (iEnd >= iStart); - return pFontInfo; -#else - return NULL; -#endif -} -// static -IXFA_FontMgr* IXFA_FontMgr::CreateDefault() { - return new CXFA_DefFontMgr; -} -// virtual -IXFA_FontMgr::~IXFA_FontMgr() {} -CXFA_DefFontMgr::~CXFA_DefFontMgr() { - int32_t iCounts = m_CacheFonts.GetSize(); - for (int32_t i = 0; i < iCounts; i++) { - ((IFX_Font*)m_CacheFonts[i])->Release(); - } - m_CacheFonts.RemoveAll(); -} - -IFX_Font* CXFA_DefFontMgr::GetFont(IXFA_Doc* hDoc, - const CFX_WideStringC& wsFontFamily, - FX_DWORD dwFontStyles, - FX_WORD wCodePage) { - CFX_WideString wsFontName = wsFontFamily; - IFX_FontMgr* pFDEFontMgr = - static_cast(hDoc)->GetApp()->GetFDEFontMgr(); - IFX_Font* pFont = pFDEFontMgr->LoadFont(wsFontName, dwFontStyles, wCodePage); - if (!pFont) { - const XFA_FONTINFO* pCurFont = XFA_GetFontINFOByFontName(wsFontName); - if (pCurFont && pCurFont->pReplaceFont) { - FX_DWORD dwStyle = 0; - if (dwFontStyles & FX_FONTSTYLE_Bold) { - dwStyle |= FX_FONTSTYLE_Bold; - } - if (dwFontStyles & FX_FONTSTYLE_Italic) { - dwStyle |= FX_FONTSTYLE_Italic; - } - const FX_WCHAR* pReplace = pCurFont->pReplaceFont; - int32_t iLength = FXSYS_wcslen(pReplace); - while (iLength > 0) { - const FX_WCHAR* pNameText = pReplace; - while (*pNameText != L',' && iLength > 0) { - pNameText++; - iLength--; - } - CFX_WideString wsReplace = - CFX_WideString(pReplace, pNameText - pReplace); - pFont = pFDEFontMgr->LoadFont(wsReplace, dwStyle, wCodePage); - if (pFont) { - break; - } - iLength--; - pNameText++; - pReplace = pNameText; - } - } - } - if (pFont) { - m_CacheFonts.Add(pFont); - } - return pFont; -} - -IFX_Font* CXFA_DefFontMgr::GetDefaultFont(IXFA_Doc* hDoc, - const CFX_WideStringC& wsFontFamily, - FX_DWORD dwFontStyles, - FX_WORD wCodePage) { - IFX_FontMgr* pFDEFontMgr = ((CXFA_FFDoc*)hDoc)->GetApp()->GetFDEFontMgr(); - IFX_Font* pFont = - pFDEFontMgr->LoadFont(L"Arial Narrow", dwFontStyles, wCodePage); - if (!pFont) - pFont = - pFDEFontMgr->LoadFont((const FX_WCHAR*)NULL, dwFontStyles, wCodePage); - FXSYS_assert(pFont); - if (pFont) { - m_CacheFonts.Add(pFont); - } - return pFont; -} -struct XFA_PDFFONTNAME { - const FX_CHAR* lpPsName; - const FX_CHAR* lpNormal; - const FX_CHAR* lpBold; - const FX_CHAR* lpItalic; - const FX_CHAR* lpBoldItalic; -}; -const XFA_PDFFONTNAME g_XFAPDFFontName[] = { - {"Adobe PI Std", "AdobePIStd", "AdobePIStd", "AdobePIStd", "AdobePIStd"}, - {"Myriad Pro Light", "MyriadPro-Light", "MyriadPro-Semibold", - "MyriadPro-LightIt", "MyriadPro-SemiboldIt"}, -}; -CXFA_PDFFontMgr::CXFA_PDFFontMgr(CXFA_FFDoc* pDoc) { - m_pDoc = pDoc; -} -CXFA_PDFFontMgr::~CXFA_PDFFontMgr() { - m_FDE2PDFFont.RemoveAll(); - for (const auto& pair : m_FontMap) { - if (pair.second) - pair.second->Release(); - } -} -IFX_Font* CXFA_PDFFontMgr::FindFont(CFX_ByteString strPsName, - FX_BOOL bBold, - FX_BOOL bItalic, - CPDF_Font** pDstPDFFont, - FX_BOOL bStrictMatch) { - CPDF_Document* pDoc = m_pDoc->GetPDFDoc(); - if (pDoc == NULL) { - return NULL; - } - CPDF_Dictionary* pFontSetDict = - pDoc->GetRoot()->GetDictBy("AcroForm")->GetDictBy("DR"); - if (!pFontSetDict) { - return NULL; - } - pFontSetDict = (CPDF_Dictionary*)pFontSetDict->GetDictBy("Font"); - if (!pFontSetDict) { - return NULL; - } - strPsName.Remove(' '); - IFX_FontMgr* pFDEFontMgr = m_pDoc->GetApp()->GetFDEFontMgr(); - for (const auto& it : *pFontSetDict) { - const CFX_ByteString& key = it.first; - CPDF_Object* pObj = it.second; - if (!PsNameMatchDRFontName(strPsName, bBold, bItalic, key, bStrictMatch)) { - continue; - } - CPDF_Object* pDirect = pObj->GetDirect(); - if (!pDirect || !pDirect->IsDictionary()) { - return NULL; - } - CPDF_Dictionary* pFontDict = (CPDF_Dictionary*)pDirect; - if (pFontDict->GetStringBy("Type") != "Font") { - return NULL; - } - CPDF_Font* pPDFFont = pDoc->LoadFont(pFontDict); - if (!pPDFFont) { - return NULL; - } - if (!pPDFFont->IsEmbedded()) { - *pDstPDFFont = pPDFFont; - return NULL; - } - return IFX_Font::LoadFont(&pPDFFont->m_Font, pFDEFontMgr); - } - return NULL; -} -IFX_Font* CXFA_PDFFontMgr::GetFont(const CFX_WideStringC& wsFontFamily, - FX_DWORD dwFontStyles, - CPDF_Font** pPDFFont, - FX_BOOL bStrictMatch) { - FX_DWORD dwHashCode = - FX_HashCode_String_GetW(wsFontFamily.GetPtr(), wsFontFamily.GetLength()); - CFX_ByteString strKey; - strKey.Format("%u%u", dwHashCode, dwFontStyles); - auto it = m_FontMap.find(strKey); - if (it != m_FontMap.end()) - return it->second; - CFX_ByteString bsPsName = CFX_ByteString::FromUnicode(wsFontFamily); - FX_BOOL bBold = (dwFontStyles & FX_FONTSTYLE_Bold) == FX_FONTSTYLE_Bold; - FX_BOOL bItalic = (dwFontStyles & FX_FONTSTYLE_Italic) == FX_FONTSTYLE_Italic; - CFX_ByteString strFontName = PsNameToFontName(bsPsName, bBold, bItalic); - IFX_Font* pFont = - FindFont(strFontName, bBold, bItalic, pPDFFont, bStrictMatch); - if (pFont) - m_FontMap[strKey] = pFont; - return pFont; -} -CFX_ByteString CXFA_PDFFontMgr::PsNameToFontName( - const CFX_ByteString& strPsName, - FX_BOOL bBold, - FX_BOOL bItalic) { - int32_t nCount = sizeof(g_XFAPDFFontName) / sizeof(XFA_PDFFONTNAME); - for (int32_t i = 0; i < nCount; i++) { - if (strPsName == g_XFAPDFFontName[i].lpPsName) { - int32_t index = 1 + ((bItalic << 1) | bBold); - return *(&g_XFAPDFFontName[i].lpPsName + index); - } - } - return strPsName; -} -FX_BOOL CXFA_PDFFontMgr::PsNameMatchDRFontName( - const CFX_ByteStringC& bsPsName, - FX_BOOL bBold, - FX_BOOL bItalic, - const CFX_ByteString& bsDRFontName, - FX_BOOL bStrictMatch) { - CFX_ByteString bsDRName = bsDRFontName; - bsDRName.Remove('-'); - int32_t iPsLen = bsPsName.GetLength(); - int32_t nIndex = bsDRName.Find(bsPsName); - if (nIndex != -1 && !bStrictMatch) { - return TRUE; - } - if (nIndex != 0) { - return FALSE; - } - int32_t iDifferLength = bsDRName.GetLength() - iPsLen; - if (iDifferLength > 1 || (bBold || bItalic)) { - int32_t iBoldIndex = bsDRName.Find("Bold"); - FX_BOOL bBoldFont = iBoldIndex > 0; - if (bBold ^ bBoldFont) { - return FALSE; - } - if (bBoldFont) { - iDifferLength = - std::min(iDifferLength - 4, bsDRName.GetLength() - iBoldIndex - 4); - } - FX_BOOL bItalicFont = TRUE; - if (bsDRName.Find("Italic") > 0) { - iDifferLength -= 6; - } else if (bsDRName.Find("It") > 0) { - iDifferLength -= 2; - } else if (bsDRName.Find("Oblique") > 0) { - iDifferLength -= 7; - } else { - bItalicFont = FALSE; - } - if (bItalic ^ bItalicFont) { - return FALSE; - } - if (iDifferLength > 1) { - CFX_ByteString bsDRTailer = bsDRName.Right(iDifferLength); - if (bsDRTailer.Equal("MT") || bsDRTailer.Equal("PSMT") || - bsDRTailer.Equal("Regular") || bsDRTailer.Equal("Reg")) { - return TRUE; - } - if (bBoldFont || bItalicFont) { - return FALSE; - } - FX_BOOL bMatch = FALSE; - switch (bsPsName.GetAt(iPsLen - 1)) { - case 'L': { - if (bsDRName.Right(5).Equal("Light")) { - bMatch = TRUE; - } - } break; - case 'R': { - if (bsDRName.Right(7).Equal("Regular") || - bsDRName.Right(3).Equal("Reg")) { - bMatch = TRUE; - } - } break; - case 'M': { - if (bsDRName.Right(5).Equal("Medium")) { - bMatch = TRUE; - } - } break; - default: - break; - } - return bMatch; - } - } - return TRUE; -} -FX_BOOL CXFA_PDFFontMgr::GetCharWidth(IFX_Font* pFont, - FX_WCHAR wUnicode, - int32_t& iWidth, - FX_BOOL bCharCode) { - if (wUnicode != 0x20 || bCharCode) { - return FALSE; - } - CPDF_Font* pPDFFont = (CPDF_Font*)m_FDE2PDFFont.GetValueAt(pFont); - if (!pPDFFont) { - return FALSE; - } - wUnicode = (FX_WCHAR)pPDFFont->CharCodeFromUnicode(wUnicode); - iWidth = pPDFFont->GetCharWidthF(wUnicode); - return TRUE; -} -CXFA_FontMgr::CXFA_FontMgr() : m_pDefFontMgr(NULL) {} -CXFA_FontMgr::~CXFA_FontMgr() { - DelAllMgrMap(); -} -IFX_Font* CXFA_FontMgr::GetFont(IXFA_Doc* hDoc, - const CFX_WideStringC& wsFontFamily, - FX_DWORD dwFontStyles, - FX_WORD wCodePage) { - FX_DWORD dwHash = FX_HashCode_String_GetW(wsFontFamily.GetPtr(), - wsFontFamily.GetLength(), FALSE); - CFX_ByteString bsKey; - bsKey.Format("%u%u%u", dwHash, dwFontStyles, wCodePage); - auto it = m_FontMap.find(bsKey); - if (it != m_FontMap.end()) - return it->second; - CFX_WideString wsEnglishName; - XFA_LocalFontNameToEnglishName(wsFontFamily, wsEnglishName); - CXFA_PDFFontMgr* pMgr = (CXFA_PDFFontMgr*)m_PDFFontMgrArray.GetValueAt(hDoc); - CPDF_Font* pPDFFont = NULL; - IFX_Font* pFont = NULL; - if (pMgr) { - pFont = pMgr->GetFont(wsEnglishName, dwFontStyles, &pPDFFont); - if (pFont) - return pFont; - } - if (!pFont && m_pDefFontMgr) { - pFont = m_pDefFontMgr->GetFont(hDoc, wsFontFamily, dwFontStyles, wCodePage); - } - if (!pFont && pMgr) { - pPDFFont = NULL; - pFont = pMgr->GetFont(wsEnglishName, dwFontStyles, &pPDFFont, FALSE); - if (pFont) - return pFont; - } - if (!pFont && m_pDefFontMgr) { - pFont = m_pDefFontMgr->GetDefaultFont(hDoc, wsFontFamily, dwFontStyles, - wCodePage); - } - if (pFont) { - if (pPDFFont) { - pMgr->m_FDE2PDFFont.SetAt(pFont, pPDFFont); - pFont->SetFontProvider(pMgr); - } - m_FontMap[bsKey] = pFont; - } - return pFont; -} -void CXFA_FontMgr::LoadDocFonts(IXFA_Doc* hDoc) { - if (!m_PDFFontMgrArray.GetValueAt(hDoc)) { - m_PDFFontMgrArray.SetAt(hDoc, new CXFA_PDFFontMgr((CXFA_FFDoc*)hDoc)); - } -} -void CXFA_FontMgr::ReleaseDocFonts(IXFA_Doc* hDoc) { - CXFA_PDFFontMgr* pMgr = NULL; - if (m_PDFFontMgrArray.Lookup(hDoc, (void*&)pMgr)) { - delete pMgr; - m_PDFFontMgrArray.RemoveKey(hDoc); - } -} -void CXFA_FontMgr::DelAllMgrMap() { - FX_POSITION ps = m_PDFFontMgrArray.GetStartPosition(); - while (ps) { - IXFA_Doc* hDoc = NULL; - CXFA_PDFFontMgr* pMgr = NULL; - m_PDFFontMgrArray.GetNextAssoc(ps, (void*&)hDoc, (void*&)pMgr); - delete pMgr; - } - m_PDFFontMgrArray.RemoveAll(); - m_FontMap.clear(); -} -void CXFA_FontMgr::SetDefFontMgr(IXFA_FontMgr* pFontMgr) { - m_pDefFontMgr = pFontMgr; -} diff --git a/xfa/src/fxfa/app/xfa_fontmgr.h b/xfa/src/fxfa/app/xfa_fontmgr.h deleted file mode 100644 index c77e96d329..0000000000 --- a/xfa/src/fxfa/app/xfa_fontmgr.h +++ /dev/null @@ -1,100 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXFA_APP_XFA_FONTMGR_H_ -#define XFA_SRC_FXFA_APP_XFA_FONTMGR_H_ - -#include - -#include "core/include/fxcrt/fx_ext.h" -#include "core/include/fxcrt/fx_system.h" -#include "xfa/include/fxfa/fxfa.h" -#include "xfa/src/fgas/font/fgas_font.h" - -class CPDF_Font; - -struct XFA_FONTINFO { - FX_DWORD dwFontNameHash; - const FX_WCHAR* pPsName; - const FX_WCHAR* pReplaceFont; - FX_WORD dwStyles; - FX_WORD wCodePage; -}; - -class CXFA_DefFontMgr : public IXFA_FontMgr { - public: - CXFA_DefFontMgr() {} - ~CXFA_DefFontMgr() override; - - // IXFA_FontMgr: - IFX_Font* GetFont(IXFA_Doc* hDoc, - const CFX_WideStringC& wsFontFamily, - FX_DWORD dwFontStyles, - FX_WORD wCodePage = 0xFFFF) override; - IFX_Font* GetDefaultFont(IXFA_Doc* hDoc, - const CFX_WideStringC& wsFontFamily, - FX_DWORD dwFontStyles, - FX_WORD wCodePage = 0xFFFF) override; - - protected: - CFX_PtrArray m_CacheFonts; -}; - -class CXFA_PDFFontMgr : public IFX_FontProvider { - public: - CXFA_PDFFontMgr(CXFA_FFDoc* pDoc); - ~CXFA_PDFFontMgr(); - IFX_Font* GetFont(const CFX_WideStringC& wsFontFamily, - FX_DWORD dwFontStyles, - CPDF_Font** pPDFFont, - FX_BOOL bStrictMatch = TRUE); - FX_BOOL GetCharWidth(IFX_Font* pFont, - FX_WCHAR wUnicode, - int32_t& iWidth, - FX_BOOL bCharCode); - CFX_MapPtrToPtr m_FDE2PDFFont; - - protected: - IFX_Font* FindFont(CFX_ByteString strFamilyName, - FX_BOOL bBold, - FX_BOOL bItalic, - CPDF_Font** pPDFFont, - FX_BOOL bStrictMatch = TRUE); - CFX_ByteString PsNameToFontName(const CFX_ByteString& strPsName, - FX_BOOL bBold, - FX_BOOL bItalic); - FX_BOOL PsNameMatchDRFontName(const CFX_ByteStringC& bsPsName, - FX_BOOL bBold, - FX_BOOL bItalic, - const CFX_ByteString& bsDRFontName, - FX_BOOL bStrictMatch = TRUE); - - CXFA_FFDoc* m_pDoc; - std::map m_FontMap; -}; - -class CXFA_FontMgr { - public: - CXFA_FontMgr(); - ~CXFA_FontMgr(); - IFX_Font* GetFont(IXFA_Doc* hDoc, - const CFX_WideStringC& wsFontFamily, - FX_DWORD dwFontStyles, - FX_WORD wCodePage = 0xFFFF); - void LoadDocFonts(IXFA_Doc* hDoc); - void ReleaseDocFonts(IXFA_Doc* hDoc); - - void SetDefFontMgr(IXFA_FontMgr* pFontMgr); - - protected: - void DelAllMgrMap(); - - CFX_MapPtrToPtr m_PDFFontMgrArray; - IXFA_FontMgr* m_pDefFontMgr; - std::map m_FontMap; -}; - -#endif // XFA_SRC_FXFA_APP_XFA_FONTMGR_H_ diff --git a/xfa/src/fxfa/app/xfa_fwladapter.cpp b/xfa/src/fxfa/app/xfa_fwladapter.cpp deleted file mode 100644 index a43cd9c084..0000000000 --- a/xfa/src/fxfa/app/xfa_fwladapter.cpp +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fxfa/app/xfa_fwladapter.h" - -#include "xfa/src/fxfa/app/xfa_ffdoc.h" -#include "xfa/src/fxfa/app/xfa_fffield.h" -#include "xfa/src/fxfa/app/xfa_ffwidget.h" - -void FWL_PostMessageToMainRoop(CFWL_Message* pMessage) {} -FX_BOOL FWL_ShowCaret(IFWL_Widget* pWidget, - FX_BOOL bVisible, - const CFX_RectF* pRtAnchor) { - CXFA_FFWidget* pXFAWidget = (CXFA_FFWidget*)pWidget->GetPrivateData(pWidget); - if (!pXFAWidget) { - return FALSE; - } - IXFA_DocProvider* pDocProvider = pXFAWidget->GetDoc()->GetDocProvider(); - if (!pDocProvider) { - return FALSE; - } - if (bVisible) { - CFX_Matrix mt; - pXFAWidget->GetRotateMatrix(mt); - CFX_RectF rt(*pRtAnchor); - mt.TransformRect(rt); - pDocProvider->DisplayCaret(pXFAWidget, bVisible, &rt); - return TRUE; - } - pDocProvider->DisplayCaret(pXFAWidget, bVisible, pRtAnchor); - return TRUE; -} - -FWL_ERR CXFA_FWLAdapterWidgetMgr::RepaintWidget(IFWL_Widget* pWidget, - const CFX_RectF* pRect) { - if (!pWidget) - return FWL_ERR_Indefinite; - CXFA_FFField* pField = (CXFA_FFField*)pWidget->GetPrivateData(pWidget); - if (!pField) - return FWL_ERR_Indefinite; - pField->AddInvalidateRect(nullptr); - return FWL_ERR_Succeeded; -} - -FX_BOOL CXFA_FWLAdapterWidgetMgr::GetPopupPos(IFWL_Widget* pWidget, - FX_FLOAT fMinHeight, - FX_FLOAT fMaxHeight, - const CFX_RectF& rtAnchor, - CFX_RectF& rtPopup) { - CXFA_FFWidget* pFFWidget = (CXFA_FFWidget*)(pWidget->GetPrivateData(pWidget)); - CFX_Matrix mt; - pFFWidget->GetRotateMatrix(mt); - CFX_RectF rtRotateAnchor(rtAnchor); - mt.TransformRect(rtRotateAnchor); - pFFWidget->GetDoc()->GetDocProvider()->GetPopupPos( - pFFWidget, fMinHeight, fMaxHeight, rtRotateAnchor, rtPopup); - return TRUE; -} diff --git a/xfa/src/fxfa/app/xfa_fwladapter.h b/xfa/src/fxfa/app/xfa_fwladapter.h deleted file mode 100644 index daa8413ea3..0000000000 --- a/xfa/src/fxfa/app/xfa_fwladapter.h +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXFA_APP_XFA_FWLADAPTER_H_ -#define XFA_SRC_FXFA_APP_XFA_FWLADAPTER_H_ - -#include "xfa/include/fwl/adapter/fwl_sdadapterimp.h" - -class CXFA_FWLAdapterWidgetMgr : public CFWL_SDAdapterWidgetMgr { - public: - virtual FWL_ERR RepaintWidget(IFWL_Widget* pWidget, const CFX_RectF* pRect); - virtual FX_BOOL GetPopupPos(IFWL_Widget* pWidget, - FX_FLOAT fMinHeight, - FX_FLOAT fMaxHeight, - const CFX_RectF& rtAnchor, - CFX_RectF& rtPopup); -}; - -#endif // XFA_SRC_FXFA_APP_XFA_FWLADAPTER_H_ diff --git a/xfa/src/fxfa/app/xfa_fwltheme.cpp b/xfa/src/fxfa/app/xfa_fwltheme.cpp deleted file mode 100644 index e13917bf7b..0000000000 --- a/xfa/src/fxfa/app/xfa_fwltheme.cpp +++ /dev/null @@ -1,424 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fxfa/app/xfa_fwltheme.h" - -#include "xfa/include/fwl/basewidget/fwl_barcode.h" -#include "xfa/include/fwl/basewidget/fwl_caret.h" -#include "xfa/include/fwl/basewidget/fwl_checkbox.h" -#include "xfa/include/fwl/basewidget/fwl_combobox.h" -#include "xfa/include/fwl/basewidget/fwl_datetimepicker.h" -#include "xfa/include/fwl/basewidget/fwl_edit.h" -#include "xfa/include/fwl/basewidget/fwl_listbox.h" -#include "xfa/include/fwl/basewidget/fwl_monthcalendar.h" -#include "xfa/include/fwl/basewidget/fwl_picturebox.h" -#include "xfa/include/fwl/basewidget/fwl_pushbutton.h" -#include "xfa/include/fwl/basewidget/fwl_scrollbar.h" -#include "xfa/src/fde/tto/fde_textout.h" -#include "xfa/src/fgas/crt/fgas_codepage.h" -#include "xfa/src/fxfa/app/xfa_ffapp.h" -#include "xfa/src/fxfa/app/xfa_ffwidget.h" - -CXFA_FFWidget* XFA_ThemeGetOuterWidget(IFWL_Widget* pWidget) { - IFWL_Widget* pOuter = pWidget; - while (pOuter->GetOuter()) { - pOuter = pOuter->GetOuter(); - } - if (pOuter) { - return (CXFA_FFWidget*)pOuter->GetPrivateData(pOuter); - } - return NULL; -} -CXFA_FWLTheme::CXFA_FWLTheme(CXFA_FFApp* pApp) : m_pApp(pApp) { - m_pTextOut = NULL; - m_dwCapacity = 0; - m_fCapacity = 0; - m_pCalendarFont = NULL; - m_Rect.Set(0, 0, 0, 0); - m_pCheckBoxTP = new CXFA_FWLCheckBoxTP; - m_pListBoxTP = new CFWL_ListBoxTP; - m_pPictureBoxTP = new CFWL_PictureBoxTP; - m_pSrollBarTP = new CFWL_ScrollBarTP; - m_pEditTP = new CXFA_FWLEditTP; - m_pComboBoxTP = new CFWL_ComboBoxTP; - m_pMonthCalendarTP = new CFWL_MonthCalendarTP; - m_pDateTimePickerTP = new CFWL_DateTimePickerTP; - m_pPushButtonTP = new CFWL_PushButtonTP; - m_pCaretTP = new CFWL_CaretTP; - m_pBarcodeTP = new CFWL_BarcodeTP; - Initialize(); -} -CXFA_FWLTheme::~CXFA_FWLTheme() { - Finalize(); - delete m_pCheckBoxTP; - delete m_pListBoxTP; - delete m_pPictureBoxTP; - delete m_pSrollBarTP; - delete m_pEditTP; - delete m_pComboBoxTP; - delete m_pMonthCalendarTP; - delete m_pDateTimePickerTP; - delete m_pPushButtonTP; - delete m_pCaretTP; - delete m_pBarcodeTP; -} -static const FX_WCHAR* g_FWLTheme_CalFonts[] = { - L"Arial", L"Courier New", L"DejaVu Sans", -}; -FWL_ERR CXFA_FWLTheme::Initialize() { - m_pTextOut = IFDE_TextOut::Create(); - for (size_t i = 0; !m_pCalendarFont && i < FX_ArraySize(g_FWLTheme_CalFonts); - ++i) { - m_pCalendarFont = IFX_Font::LoadFont(g_FWLTheme_CalFonts[i], 0, 0, - m_pApp->GetFDEFontMgr()); - } - if (!m_pCalendarFont) { -#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ - m_pCalendarFont = m_pApp->GetFDEFontMgr()->GetDefFontByCodePage( - FX_CODEPAGE_MSWin_WesternEuropean, 0, NULL); -#else - m_pCalendarFont = m_pApp->GetFDEFontMgr()->GetFontByCodePage( - FX_CODEPAGE_MSWin_WesternEuropean, 0, NULL); -#endif - } - - FXSYS_assert(NULL != m_pCalendarFont); - FWLTHEME_Init(); - return FWL_ERR_Succeeded; -} -FWL_ERR CXFA_FWLTheme::Finalize() { - if (m_pTextOut) { - m_pTextOut->Release(); - m_pTextOut = NULL; - } - if (m_pCalendarFont) { - m_pCalendarFont->Release(); - m_pCalendarFont = NULL; - } - FWLTHEME_Release(); - return FWL_ERR_Succeeded; -} -FX_BOOL CXFA_FWLTheme::IsValidWidget(IFWL_Widget* pWidget) { - return TRUE; -} -FX_DWORD CXFA_FWLTheme::GetThemeID(IFWL_Widget* pWidget) { - return 0; -} -FX_DWORD CXFA_FWLTheme::SetThemeID(IFWL_Widget* pWidget, - FX_DWORD dwThemeID, - FX_BOOL bChildren) { - return 0; -} -FX_BOOL CXFA_FWLTheme::DrawBackground(CFWL_ThemeBackground* pParams) { - return GetTheme(pParams->m_pWidget)->DrawBackground(pParams); -} -FX_BOOL CXFA_FWLTheme::DrawText(CFWL_ThemeText* pParams) { - if (pParams->m_wsText.IsEmpty()) { - return FWL_ERR_Indefinite; - } - if (pParams->m_pWidget->GetClassID() == FWL_CLASSHASH_MonthCalendar) { - CXFA_FFWidget* pWidget = XFA_ThemeGetOuterWidget(pParams->m_pWidget); - if (!pWidget) { - return FWL_ERR_Indefinite; - } - m_pTextOut->SetStyles(pParams->m_dwTTOStyles); - m_pTextOut->SetAlignment(pParams->m_iTTOAlign); - m_pTextOut->SetFont(m_pCalendarFont); - m_pTextOut->SetFontSize(FWLTHEME_CAPACITY_FontSize); - m_pTextOut->SetTextColor(FWLTHEME_CAPACITY_TextColor); - if ((pParams->m_iPart == FWL_PART_MCD_DatesIn) && - !(pParams->m_dwStates & FWL_ITEMSTATE_MCD_Flag) && - (pParams->m_dwStates & - (FWL_PARTSTATE_MCD_Hovered | FWL_PARTSTATE_MCD_Selected))) { - m_pTextOut->SetTextColor(0xFFFFFFFF); - } - if (pParams->m_iPart == FWL_PART_MCD_Caption) { - if (m_pMonthCalendarTP->GetThemeID(pParams->m_pWidget) == 0) { - m_pTextOut->SetTextColor(ArgbEncode(0xff, 0, 153, 255)); - } else { - m_pTextOut->SetTextColor(ArgbEncode(0xff, 128, 128, 0)); - } - } - CFX_Graphics* pGraphics = pParams->m_pGraphics; - CFX_RenderDevice* pRenderDevice = pGraphics->GetRenderDevice(); - if (!pRenderDevice) - return FALSE; - m_pTextOut->SetRenderDevice(pRenderDevice); - CFX_Matrix mtPart = pParams->m_matrix; - CFX_Matrix* pMatrix = pGraphics->GetMatrix(); - if (pMatrix) { - mtPart.Concat(*pMatrix); - } - m_pTextOut->SetMatrix(mtPart); - m_pTextOut->DrawLogicText(pParams->m_wsText, pParams->m_wsText.GetLength(), - pParams->m_rtPart); - return TRUE; - } - CXFA_FFWidget* pWidget = XFA_ThemeGetOuterWidget(pParams->m_pWidget); - if (!pWidget) { - return FWL_ERR_Indefinite; - } - CXFA_WidgetAcc* pAcc = pWidget->GetDataAcc(); - CFX_Graphics* pGraphics = pParams->m_pGraphics; - CFX_RenderDevice* pRenderDevice = pGraphics->GetRenderDevice(); - if (!pRenderDevice) - return FALSE; - m_pTextOut->SetRenderDevice(pRenderDevice); - m_pTextOut->SetStyles(pParams->m_dwTTOStyles); - m_pTextOut->SetAlignment(pParams->m_iTTOAlign); - m_pTextOut->SetFont(pAcc->GetFDEFont()); - m_pTextOut->SetFontSize(pAcc->GetFontSize()); - m_pTextOut->SetTextColor(pAcc->GetTextColor()); - CFX_Matrix mtPart = pParams->m_matrix; - CFX_Matrix* pMatrix = pGraphics->GetMatrix(); - if (pMatrix) { - mtPart.Concat(*pMatrix); - } - m_pTextOut->SetMatrix(mtPart); - m_pTextOut->DrawLogicText(pParams->m_wsText, pParams->m_wsText.GetLength(), - pParams->m_rtPart); - return TRUE; -} -void* CXFA_FWLTheme::GetCapacity(CFWL_ThemePart* pThemePart, - FX_DWORD dwCapacity) { - switch (dwCapacity) { - case FWL_WGTCAPACITY_Font: { - if (CXFA_FFWidget* pWidget = - XFA_ThemeGetOuterWidget(pThemePart->m_pWidget)) { - return pWidget->GetDataAcc()->GetFDEFont(); - } - } break; - case FWL_WGTCAPACITY_FontSize: { - if (CXFA_FFWidget* pWidget = - XFA_ThemeGetOuterWidget(pThemePart->m_pWidget)) { - m_fCapacity = pWidget->GetDataAcc()->GetFontSize(); - return &m_fCapacity; - } - } break; - case FWL_WGTCAPACITY_TextColor: { - if (CXFA_FFWidget* pWidget = - XFA_ThemeGetOuterWidget(pThemePart->m_pWidget)) { - m_dwCapacity = pWidget->GetDataAcc()->GetTextColor(); - return &m_dwCapacity; - } - } break; - case FWL_WGTCAPACITY_LineHeight: { - if (CXFA_FFWidget* pWidget = - XFA_ThemeGetOuterWidget(pThemePart->m_pWidget)) { - m_fCapacity = pWidget->GetDataAcc()->GetLineHeight(); - return &m_fCapacity; - } - } break; - case FWL_WGTCAPACITY_ScrollBarWidth: { - m_fCapacity = 9; - return &m_fCapacity; - } break; - case FWL_WGTCAPACITY_UIMargin: { - CXFA_FFWidget* pWidget = XFA_ThemeGetOuterWidget(pThemePart->m_pWidget); - if (pWidget) { - CXFA_LayoutItem* pItem = pWidget; - CXFA_WidgetAcc* pWidgetAcc = pWidget->GetDataAcc(); - pWidgetAcc->GetUIMargin(m_Rect); - if (CXFA_Para para = pWidgetAcc->GetPara()) { - m_Rect.left += para.GetMarginLeft(); - if (pWidgetAcc->IsMultiLine()) { - m_Rect.width += para.GetMarginRight(); - } - } - if (pItem->GetPrev() == NULL) { - if (pItem->GetNext()) { - m_Rect.height = 0; - } - } else if (pItem->GetNext() == NULL) { - m_Rect.top = 0; - } else { - m_Rect.top = 0; - m_Rect.height = 0; - } - } - return &m_Rect; - } break; - case FWL_WGTCAPACITY_SpaceAboveBelow: { - CXFA_FFWidget* pWidget = XFA_ThemeGetOuterWidget(pThemePart->m_pWidget); - if (pWidget) { - CXFA_WidgetAcc* pWidgetAcc = pWidget->GetDataAcc(); - if (CXFA_Para para = pWidgetAcc->GetPara()) { - m_SizeAboveBelow.x = para.GetSpaceAbove(); - m_SizeAboveBelow.y = para.GetSpaceBelow(); - } - } - return &m_SizeAboveBelow; - } break; - default: - break; - } - if (pThemePart->m_pWidget->GetClassID() == FWL_CLASSHASH_MonthCalendar && - dwCapacity >= FWL_MCCAPACITY_Sun && dwCapacity <= FWL_MCCAPACITY_Today) { - if (CXFA_FFWidget* pWidget = - XFA_ThemeGetOuterWidget(pThemePart->m_pWidget)) { - IXFA_AppProvider* pAppProvider = pWidget->GetAppProvider(); - m_wsResource.Empty(); - pAppProvider->LoadString( - XFA_IDS_StringWeekDay_Sun + dwCapacity - FWL_WGTCAPACITY_MAX - 5, - m_wsResource); - if (!m_wsResource.IsEmpty()) { - return &m_wsResource; - } - } - } - return GetTheme(pThemePart->m_pWidget)->GetCapacity(pThemePart, dwCapacity); -} -FX_BOOL CXFA_FWLTheme::IsCustomizedLayout(IFWL_Widget* pWidget) { - return GetTheme(pWidget)->IsCustomizedLayout(pWidget); -} -FWL_ERR CXFA_FWLTheme::GetPartRect(CFWL_ThemePart* pThemePart) { - CFX_RectF rect; - return GetTheme(pThemePart->m_pWidget)->GetPartRect(pThemePart, rect); -} -FX_BOOL CXFA_FWLTheme::IsInPart(CFWL_ThemePart* pThemePart, - FX_FLOAT fx, - FX_FLOAT fy) { - return GetTheme(pThemePart->m_pWidget)->IsInPart(pThemePart, fx, fy); -} -FX_BOOL CXFA_FWLTheme::CalcTextRect(CFWL_ThemeText* pParams, CFX_RectF& rect) { - if (pParams->m_pWidget->GetClassID() == FWL_CLASSHASH_MonthCalendar) { - CXFA_FFWidget* pWidget = XFA_ThemeGetOuterWidget(pParams->m_pWidget); - if (!pWidget) { - return FWL_ERR_Indefinite; - } - if (!pParams) - return FALSE; - if (!m_pTextOut) - return FALSE; - m_pTextOut->SetFont(m_pCalendarFont); - m_pTextOut->SetFontSize(FWLTHEME_CAPACITY_FontSize); - m_pTextOut->SetTextColor(FWLTHEME_CAPACITY_TextColor); - m_pTextOut->SetAlignment(pParams->m_iTTOAlign); - m_pTextOut->SetStyles(pParams->m_dwTTOStyles); - m_pTextOut->CalcLogicSize(pParams->m_wsText, pParams->m_wsText.GetLength(), - rect); - return TRUE; - } - CXFA_FFWidget* pWidget = XFA_ThemeGetOuterWidget(pParams->m_pWidget); - if (!pWidget) { - return FWL_ERR_Indefinite; - } - CXFA_WidgetAcc* pAcc = pWidget->GetDataAcc(); - m_pTextOut->SetFont(pAcc->GetFDEFont()); - m_pTextOut->SetFontSize(pAcc->GetFontSize()); - m_pTextOut->SetTextColor(pAcc->GetTextColor()); - if (!pParams) - return FALSE; - if (!m_pTextOut) - return FALSE; - m_pTextOut->SetAlignment(pParams->m_iTTOAlign); - m_pTextOut->SetStyles(pParams->m_dwTTOStyles); - m_pTextOut->CalcLogicSize(pParams->m_wsText, pParams->m_wsText.GetLength(), - rect); - return TRUE; -} -CFWL_WidgetTP* CXFA_FWLTheme::GetTheme(IFWL_Widget* pWidget) { - switch (pWidget->GetClassID()) { - case FWL_CLASSHASH_CheckBox: - return m_pCheckBoxTP; - case FWL_CLASSHASH_ListBox: - return m_pListBoxTP; - case FWL_CLASSHASH_PictureBox: - return m_pPictureBoxTP; - case FWL_CLASSHASH_ScrollBar: - return m_pSrollBarTP; - case FWL_CLASSHASH_Edit: - return m_pEditTP; - case FWL_CLASSHASH_ComboBox: - return m_pComboBoxTP; - case FWL_CLASSHASH_MonthCalendar: - return m_pMonthCalendarTP; - case FWL_CLASSHASH_DateTimePicker: - return m_pDateTimePickerTP; - case FWL_CLASSHASH_PushButton: - return m_pPushButtonTP; - case FWL_CLASSHASH_Caret: - return m_pCaretTP; - case FWL_CLASSHASH_Barcode: - return m_pBarcodeTP; - default: - break; - } - return NULL; -} -CXFA_FWLCheckBoxTP::CXFA_FWLCheckBoxTP() {} -FX_BOOL CXFA_FWLCheckBoxTP::DrawBackground(CFWL_ThemeBackground* pParams) { - if (pParams->m_iPart != FWL_PART_CKB_CheckBox) { - return TRUE; - } - if (((pParams->m_dwStates & FWL_PARTSTATE_CKB_Mask2) == - FWL_PARTSTATE_CKB_Checked) || - ((pParams->m_dwStates & FWL_PARTSTATE_CKB_Mask2) == - FWL_PARTSTATE_CKB_Neutral)) { - DrawCheckSign(pParams->m_pWidget, pParams->m_pGraphics, &pParams->m_rtPart, - pParams->m_dwStates, &pParams->m_matrix); - } - return TRUE; -} -void CXFA_FWLCheckBoxTP::DrawCheckSign(IFWL_Widget* pWidget, - CFX_Graphics* pGraphics, - const CFX_RectF* pRtBox, - int32_t iState, - CFX_Matrix* pMatrix) { - CFX_RectF rtSign(*pRtBox); - FX_DWORD dwColor = 0xFF000000; - if ((iState & FWL_PARTSTATE_CKB_Mask2) == FWL_PARTSTATE_CKB_Neutral) { - dwColor = 0xFFA9A9A9; - } - { - FX_DWORD dwStyle = pWidget->GetStylesEx(); - rtSign.Deflate(rtSign.width / 4, rtSign.height / 4); - switch (dwStyle & FWL_STYLEEXT_CKB_SignShapeMask) { - case FWL_STYLEEXT_CKB_SignShapeCheck: - DrawSignCheck(pGraphics, &rtSign, dwColor, pMatrix); - break; - case FWL_STYLEEXT_CKB_SignShapeCircle: - DrawSignCircle(pGraphics, &rtSign, dwColor, pMatrix); - break; - case FWL_STYLEEXT_CKB_SignShapeCross: - DrawSignCross(pGraphics, &rtSign, dwColor, pMatrix); - break; - case FWL_STYLEEXT_CKB_SignShapeDiamond: - DrawSignDiamond(pGraphics, &rtSign, dwColor, pMatrix); - break; - case FWL_STYLEEXT_CKB_SignShapeSquare: - DrawSignSquare(pGraphics, &rtSign, dwColor, pMatrix); - break; - case FWL_STYLEEXT_CKB_SignShapeStar: - DrawSignStar(pGraphics, &rtSign, dwColor, pMatrix); - break; - default: - break; - } - } -} -CXFA_FWLEditTP::CXFA_FWLEditTP() {} -CXFA_FWLEditTP::~CXFA_FWLEditTP() {} -FX_BOOL CXFA_FWLEditTP::DrawBackground(CFWL_ThemeBackground* pParams) { - if (FWL_PART_EDT_CombTextLine == pParams->m_iPart) { - CXFA_FFWidget* pWidget = XFA_ThemeGetOuterWidget(pParams->m_pWidget); - FX_ARGB cr = 0xFF000000; - FX_FLOAT fWidth = 1.0f; - if (CXFA_Border borderUI = pWidget->GetDataAcc()->GetUIBorder()) { - CXFA_Edge edge = borderUI.GetEdge(0); - if (edge) { - cr = edge.GetColor(); - fWidth = edge.GetThickness(); - } - } - CFX_Color crLine(cr); - pParams->m_pGraphics->SetStrokeColor(&crLine); - pParams->m_pGraphics->SetLineWidth(fWidth); - pParams->m_pGraphics->StrokePath(pParams->m_pPath, &pParams->m_matrix); - return TRUE; - } - return CFWL_EditTP::DrawBackground(pParams); -} diff --git a/xfa/src/fxfa/app/xfa_fwltheme.h b/xfa/src/fxfa/app/xfa_fwltheme.h deleted file mode 100644 index 1882311f86..0000000000 --- a/xfa/src/fxfa/app/xfa_fwltheme.h +++ /dev/null @@ -1,110 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXFA_APP_XFA_FWLTHEME_H_ -#define XFA_SRC_FXFA_APP_XFA_FWLTHEME_H_ - -#include "xfa/include/fwl/core/fwl_target.h" -#include "xfa/include/fwl/core/fwl_theme.h" -#include "xfa/include/fwl/theme/barcodetp.h" -#include "xfa/include/fwl/theme/carettp.h" -#include "xfa/include/fwl/theme/checkboxtp.h" -#include "xfa/include/fwl/theme/comboboxtp.h" -#include "xfa/include/fwl/theme/datetimepickertp.h" -#include "xfa/include/fwl/theme/edittp.h" -#include "xfa/include/fwl/theme/listboxtp.h" -#include "xfa/include/fwl/theme/monthcalendartp.h" -#include "xfa/include/fwl/theme/pictureboxtp.h" -#include "xfa/include/fwl/theme/pushbuttontp.h" -#include "xfa/include/fwl/theme/scrollbartp.h" -#include "xfa/include/fwl/theme/widgettp.h" -#include "xfa/src/fxfa/app/xfa_ffapp.h" - -class CXFA_FWLTheme : public IFWL_ThemeProvider { - public: - CXFA_FWLTheme(CXFA_FFApp* pApp); - virtual ~CXFA_FWLTheme(); - virtual FWL_ERR Release() { - delete this; - return FWL_ERR_Succeeded; - } - virtual IFWL_Target* Retain() { return NULL; } - virtual FWL_ERR GetClassName(CFX_WideString& wsClass) const { - return FWL_ERR_Succeeded; - } - virtual FX_DWORD GetHashCode() const { return 0; } - virtual FWL_ERR Initialize(); - virtual FWL_ERR Finalize(); - virtual FX_BOOL IsValidWidget(IFWL_Widget* pWidget); - virtual FX_DWORD GetThemeID(IFWL_Widget* pWidget); - virtual FX_DWORD SetThemeID(IFWL_Widget* pWidget, - FX_DWORD dwThemeID, - FX_BOOL bChildren = TRUE); - virtual FX_BOOL DrawBackground(CFWL_ThemeBackground* pParams); - virtual FX_BOOL DrawText(CFWL_ThemeText* pParams); - virtual void* GetCapacity(CFWL_ThemePart* pThemePart, FX_DWORD dwCapacity); - virtual FX_BOOL IsCustomizedLayout(IFWL_Widget* pWidget); - virtual FWL_ERR GetPartRect(CFWL_ThemePart* pThemePart); - virtual FX_BOOL IsInPart(CFWL_ThemePart* pThemePart, - FX_FLOAT fx, - FX_FLOAT fy); - - virtual FX_BOOL CalcTextRect(CFWL_ThemeText* pParams, CFX_RectF& rect); - virtual FWL_ERR GetThemeMatrix(IFWL_Widget* pWidget, CFX_Matrix& matrix) { - return FWL_ERR_Succeeded; - } - virtual FWL_ERR SetThemeMatrix(IFWL_Widget* pWidget, - const CFX_Matrix& matrix) { - return FWL_ERR_Succeeded; - } - virtual FWL_ERR GetPartRect(CFWL_ThemePart* pThemePart, CFX_RectF& rtPart) { - return FWL_ERR_Succeeded; - } - - protected: - CFWL_WidgetTP* GetTheme(IFWL_Widget* pWidget); - CFWL_CheckBoxTP* m_pCheckBoxTP; - CFWL_ListBoxTP* m_pListBoxTP; - CFWL_PictureBoxTP* m_pPictureBoxTP; - CFWL_ScrollBarTP* m_pSrollBarTP; - CFWL_EditTP* m_pEditTP; - CFWL_ComboBoxTP* m_pComboBoxTP; - CFWL_MonthCalendarTP* m_pMonthCalendarTP; - CFWL_DateTimePickerTP* m_pDateTimePickerTP; - CFWL_PushButtonTP* m_pPushButtonTP; - CFWL_CaretTP* m_pCaretTP; - CFWL_BarcodeTP* m_pBarcodeTP; - IFDE_TextOut* m_pTextOut; - FX_FLOAT m_fCapacity; - FX_DWORD m_dwCapacity; - IFX_Font* m_pCalendarFont; - CFX_WideString m_wsResource; - CXFA_FFApp* m_pApp; - CFX_RectF m_Rect; - CFX_SizeF m_SizeAboveBelow; -}; -class CXFA_FWLCheckBoxTP : public CFWL_CheckBoxTP { - public: - CXFA_FWLCheckBoxTP(); - virtual FX_BOOL DrawBackground(CFWL_ThemeBackground* pParams); - - protected: - void DrawCheckSign(IFWL_Widget* pWidget, - CFX_Graphics* pGraphics, - const CFX_RectF* pRtBox, - int32_t iState, - CFX_Matrix* pMatrix); -}; -class CXFA_FWLEditTP : public CFWL_EditTP { - public: - CXFA_FWLEditTP(); - virtual ~CXFA_FWLEditTP(); - - public: - virtual FX_BOOL DrawBackground(CFWL_ThemeBackground* pParams); -}; - -#endif // XFA_SRC_FXFA_APP_XFA_FWLTHEME_H_ diff --git a/xfa/src/fxfa/app/xfa_rendercontext.cpp b/xfa/src/fxfa/app/xfa_rendercontext.cpp deleted file mode 100644 index cc5402eb99..0000000000 --- a/xfa/src/fxfa/app/xfa_rendercontext.cpp +++ /dev/null @@ -1,77 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fxfa/app/xfa_rendercontext.h" - -#include "xfa/include/fxgraphics/fx_graphics.h" -#include "xfa/src/fxfa/app/xfa_ffwidget.h" - -#define XFA_RENDERCONTEXT_MaxCount 30 - -IXFA_RenderContext* XFA_RenderContext_Create() { - return new CXFA_RenderContext; -} -CXFA_RenderContext::CXFA_RenderContext() { - m_pWidgetIterator = NULL; - m_pWidget = NULL; - m_pPageView = NULL; - m_pGS = NULL; - m_dwStatus = 0; - m_matrix.SetIdentity(); - m_rtClipRect.Reset(); -} -CXFA_RenderContext::~CXFA_RenderContext() { - StopRender(); -} -int32_t CXFA_RenderContext::StartRender(IXFA_PageView* pPageView, - CFX_Graphics* pGS, - const CFX_Matrix& matrix, - const CXFA_RenderOptions& options) { - m_pPageView = pPageView; - m_pGS = pGS; - m_matrix = matrix; - m_options = options; - CFX_RectF rtPage; - pGS->GetClipRect(rtPage); - CFX_Matrix mtRes; - mtRes.SetReverse(matrix); - m_rtClipRect.Set(rtPage.left, rtPage.top, rtPage.width, rtPage.height); - mtRes.TransformRect(m_rtClipRect); - m_dwStatus = m_options.m_bHighlight ? XFA_WIDGETSTATUS_Highlight : 0; - FX_DWORD dwFilterType = XFA_WIDGETFILTER_Visible | XFA_WIDGETFILTER_AllType | - (m_options.m_bPrint ? XFA_WIDGETSTATUS_Printable - : XFA_WIDGETSTATUS_Viewable); - m_pWidgetIterator = - m_pPageView->CreateWidgetIterator(XFA_TRAVERSEWAY_Form, dwFilterType); - m_pWidget = m_pWidgetIterator->MoveToNext(); - return XFA_RENDERSTATUS_Ready; -} -int32_t CXFA_RenderContext::DoRender(IFX_Pause* pPause) { - int32_t iCount = 0; - while (m_pWidget) { - CXFA_FFWidget* pWidget = (CXFA_FFWidget*)m_pWidget; - CFX_RectF rtWidgetBox; - pWidget->GetBBox(rtWidgetBox, XFA_WIDGETSTATUS_Visible); - rtWidgetBox.width += 1; - rtWidgetBox.height += 1; - if (rtWidgetBox.IntersectWith(m_rtClipRect)) { - pWidget->RenderWidget(m_pGS, &m_matrix, m_dwStatus); - } - m_pWidget = m_pWidgetIterator->MoveToNext(); - iCount++; - if (iCount > XFA_RENDERCONTEXT_MaxCount && pPause && - pPause->NeedToPauseNow()) { - return XFA_RENDERSTATUS_ToBeContinued; - } - } - return XFA_RENDERSTATUS_Done; -} -void CXFA_RenderContext::StopRender() { - if (m_pWidgetIterator) { - m_pWidgetIterator->Release(); - m_pWidgetIterator = NULL; - } -} diff --git a/xfa/src/fxfa/app/xfa_rendercontext.h b/xfa/src/fxfa/app/xfa_rendercontext.h deleted file mode 100644 index 9ed975c1fa..0000000000 --- a/xfa/src/fxfa/app/xfa_rendercontext.h +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXFA_APP_XFA_RENDERCONTEXT_H_ -#define XFA_SRC_FXFA_APP_XFA_RENDERCONTEXT_H_ - -#include "xfa/include/fxfa/fxfa.h" - -class CXFA_RenderContext : public IXFA_RenderContext { - public: - CXFA_RenderContext(); - virtual ~CXFA_RenderContext(); - virtual void Release() { delete this; } - virtual int32_t StartRender(IXFA_PageView* pPageView, - CFX_Graphics* pGS, - const CFX_Matrix& matrix, - const CXFA_RenderOptions& options); - virtual int32_t DoRender(IFX_Pause* pPause = NULL); - virtual void StopRender(); - - protected: - IXFA_WidgetIterator* m_pWidgetIterator; - IXFA_Widget* m_pWidget; - IXFA_PageView* m_pPageView; - CFX_Graphics* m_pGS; - CFX_Matrix m_matrix; - CXFA_RenderOptions m_options; - FX_DWORD m_dwStatus; - CFX_RectF m_rtClipRect; -}; - -#endif // XFA_SRC_FXFA_APP_XFA_RENDERCONTEXT_H_ diff --git a/xfa/src/fxfa/app/xfa_textlayout.cpp b/xfa/src/fxfa/app/xfa_textlayout.cpp deleted file mode 100644 index b8a9ec433e..0000000000 --- a/xfa/src/fxfa/app/xfa_textlayout.cpp +++ /dev/null @@ -1,2001 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fxfa/app/xfa_textlayout.h" - -#include - -#include "core/include/fxcrt/fx_ext.h" -#include "xfa/src/fde/fde_pen.h" -#include "xfa/src/fgas/crt/fgas_algorithm.h" -#include "xfa/src/fgas/crt/fgas_codepage.h" -#include "xfa/src/fxfa/app/xfa_ffapp.h" -#include "xfa/src/fxfa/app/xfa_ffdoc.h" -#include "xfa/src/fxfa/app/xfa_fontmgr.h" - -CXFA_CSSTagProvider::~CXFA_CSSTagProvider() { - FX_POSITION pos = m_Attributes.GetStartPosition(); - while (pos) { - CFX_WideString *pName = NULL, *pValue = NULL; - m_Attributes.GetNextAssoc(pos, (void*&)pName, (void*&)pValue); - delete pName; - delete pValue; - } -} -void CXFA_CSSTagProvider::GetNextAttribute(FX_POSITION& pos, - CFX_WideStringC& wsAttr, - CFX_WideStringC& wsValue) { - if (pos == NULL) { - return; - } - CFX_WideString* pName = NULL; - CFX_WideString* pValue = NULL; - m_Attributes.GetNextAssoc(pos, (void*&)pName, (void*&)pValue); - wsAttr = *pName; - wsValue = *pValue; -} -void CXFA_CSSTagProvider::SetAttribute(const CFX_WideString& wsAttr, - const CFX_WideString& wsValue) { - CFX_WideString* pName = new CFX_WideString(); - CFX_WideString* pValue = new CFX_WideString(); - *pName = wsAttr; - *pValue = wsValue; - m_Attributes.SetAt(pName, pValue); -} -void CXFA_TextParseContext::SetDecls(const IFDE_CSSDeclaration** ppDeclArray, - int32_t iDeclCount) { - if (iDeclCount <= 0 || ppDeclArray == NULL) { - return; - } - m_dwMatchedDecls = iDeclCount; - m_ppMatchedDecls = FX_Alloc(IFDE_CSSDeclaration*, iDeclCount); - FXSYS_memcpy(m_ppMatchedDecls, ppDeclArray, - iDeclCount * sizeof(IFDE_CSSDeclaration*)); -} -CXFA_TextParser::~CXFA_TextParser() { - if (m_pUASheet) - m_pUASheet->Release(); - if (m_pSelector) - m_pSelector->Release(); - if (m_pAllocator) - m_pAllocator->Release(); - FX_POSITION ps = m_mapXMLNodeToParseContext.GetStartPosition(); - while (ps) { - IFDE_XMLNode* pXMLNode; - CXFA_TextParseContext* pParseContext; - m_mapXMLNodeToParseContext.GetNextAssoc(ps, pXMLNode, pParseContext); - if (pParseContext) - FXTARGET_DeleteWith(CXFA_TextParseContext, m_pAllocator, pParseContext); - } - m_mapXMLNodeToParseContext.RemoveAll(); -} -void CXFA_TextParser::Reset() { - FX_POSITION ps = m_mapXMLNodeToParseContext.GetStartPosition(); - while (ps) { - IFDE_XMLNode* pXMLNode; - CXFA_TextParseContext* pParseContext; - m_mapXMLNodeToParseContext.GetNextAssoc(ps, pXMLNode, pParseContext); - if (pParseContext) - FXTARGET_DeleteWith(CXFA_TextParseContext, m_pAllocator, pParseContext); - } - m_mapXMLNodeToParseContext.RemoveAll(); - if (m_pAllocator) { - m_pAllocator->Release(); - m_pAllocator = NULL; - } -} -void CXFA_TextParser::InitCSSData(IXFA_TextProvider* pTextProvider) { - if (pTextProvider == NULL) { - return; - } - if (m_pSelector == NULL) { - CXFA_FFDoc* pDoc = pTextProvider->GetDocNode(); - IFX_FontMgr* pFontMgr = pDoc->GetApp()->GetFDEFontMgr(); - FXSYS_assert(pFontMgr); - m_pSelector = IFDE_CSSStyleSelector::Create(); - m_pSelector->SetFontMgr(pFontMgr); - FX_FLOAT fFontSize = 10; - CXFA_Font font = pTextProvider->GetFontNode(); - if (font) { - fFontSize = font.GetFontSize(); - } - m_pSelector->SetDefFontSize(fFontSize); - } - if (m_pUASheet == NULL) { - m_pUASheet = LoadDefaultSheetStyle(); - m_pSelector->SetStyleSheet(FDE_CSSSTYLESHEETGROUP_UserAgent, m_pUASheet); - m_pSelector->UpdateStyleIndex(FDE_CSSMEDIATYPE_ALL); - } -} -IFDE_CSSStyleSheet* CXFA_TextParser::LoadDefaultSheetStyle() { - static const FX_WCHAR s_pStyle[] = - L"html,body,ol,p,ul{display:block}" - L"li{display:list-item}" - L"ol,ul{padding-left:33px}ol{list-style-type:decimal}ol,ul{margin-top:0;" - L"margin-bottom:0}ul,ol{margin:1.12em 0}" - L"a{color:#0000ff;text-decoration:underline}b{font-weight:bolder}i{font-" - L"style:italic}" - L"sup{vertical-align:+15em;font-size:.66em}sub{vertical-align:-15em;font-" - L"size:.66em}"; - return IFDE_CSSStyleSheet::LoadFromBuffer( - CFX_WideString(), s_pStyle, FXSYS_wcslen(s_pStyle), FX_CODEPAGE_UTF8); -} -IFDE_CSSComputedStyle* CXFA_TextParser::CreateRootStyle( - IXFA_TextProvider* pTextProvider) { - CXFA_Font font = pTextProvider->GetFontNode(); - CXFA_Para para = pTextProvider->GetParaNode(); - IFDE_CSSComputedStyle* pStyle = m_pSelector->CreateComputedStyle(NULL); - IFDE_CSSFontStyle* pFontStyle = pStyle->GetFontStyles(); - IFDE_CSSParagraphStyle* pParaStyle = pStyle->GetParagraphStyles(); - FX_FLOAT fLineHeight = 0, fFontSize = 10; - if (para) { - fLineHeight = para.GetLineHeight(); - FDE_CSSLENGTH indent; - indent.Set(FDE_CSSLENGTHUNIT_Point, para.GetTextIndent()); - pParaStyle->SetTextIndent(indent); - FDE_CSSTEXTALIGN hAlgin = FDE_CSSTEXTALIGN_Left; - switch (para.GetHorizontalAlign()) { - case XFA_ATTRIBUTEENUM_Center: - hAlgin = FDE_CSSTEXTALIGN_Center; - break; - case XFA_ATTRIBUTEENUM_Right: - hAlgin = FDE_CSSTEXTALIGN_Right; - break; - case XFA_ATTRIBUTEENUM_Justify: - hAlgin = FDE_CSSTEXTALIGN_Justify; - break; - case XFA_ATTRIBUTEENUM_JustifyAll: - hAlgin = FDE_CSSTEXTALIGN_JustifyAll; - break; - } - pParaStyle->SetTextAlign(hAlgin); - FDE_CSSRECT rtMarginWidth; - rtMarginWidth.left.Set(FDE_CSSLENGTHUNIT_Point, para.GetMarginLeft()); - rtMarginWidth.top.Set(FDE_CSSLENGTHUNIT_Point, para.GetSpaceAbove()); - rtMarginWidth.right.Set(FDE_CSSLENGTHUNIT_Point, para.GetMarginRight()); - rtMarginWidth.bottom.Set(FDE_CSSLENGTHUNIT_Point, para.GetSpaceBelow()); - pStyle->GetBoundaryStyles()->SetMarginWidth(rtMarginWidth); - } - if (font) { - pFontStyle->SetColor(font.GetColor()); - pFontStyle->SetFontStyle(font.IsItalic() ? FDE_CSSFONTSTYLE_Italic - : FDE_CSSFONTSTYLE_Normal); - pFontStyle->SetFontWeight(font.IsBold() ? FXFONT_FW_BOLD - : FXFONT_FW_NORMAL); - pParaStyle->SetNumberVerticalAlign(-font.GetBaselineShift()); - fFontSize = font.GetFontSize(); - FDE_CSSLENGTH letterSpacing; - letterSpacing.Set(FDE_CSSLENGTHUNIT_Point, font.GetLetterSpacing()); - pParaStyle->SetLetterSpacing(letterSpacing); - FX_DWORD dwDecoration = 0; - if (font.GetLineThrough() > 0) { - dwDecoration |= FDE_CSSTEXTDECORATION_LineThrough; - } - if (font.GetUnderline() > 1) { - dwDecoration |= FDE_CSSTEXTDECORATION_Double; - } else if (font.GetUnderline() > 0) { - dwDecoration |= FDE_CSSTEXTDECORATION_Underline; - } - pParaStyle->SetTextDecoration(dwDecoration); - } - pParaStyle->SetLineHeight(fLineHeight); - pFontStyle->SetFontSize(fFontSize); - return pStyle; -} -IFDE_CSSComputedStyle* CXFA_TextParser::CreateStyle( - IFDE_CSSComputedStyle* pParentStyle) { - IFDE_CSSComputedStyle* pNewStyle = - m_pSelector->CreateComputedStyle(pParentStyle); - FXSYS_assert(pNewStyle); - if (pParentStyle) { - IFDE_CSSParagraphStyle* pParaStyle = pParentStyle->GetParagraphStyles(); - FX_DWORD dwDecoration = pParaStyle->GetTextDecoration(); - FX_FLOAT fBaseLine = 0; - if (pParaStyle->GetVerticalAlign() == FDE_CSSVERTICALALIGN_Number) { - fBaseLine = pParaStyle->GetNumberVerticalAlign(); - } - pParaStyle = pNewStyle->GetParagraphStyles(); - pParaStyle->SetTextDecoration(dwDecoration); - pParaStyle->SetNumberVerticalAlign(fBaseLine); - IFDE_CSSBoundaryStyle* pBoundarytyle = pParentStyle->GetBoundaryStyles(); - const FDE_CSSRECT* pRect = pBoundarytyle->GetMarginWidth(); - if (pRect) { - pBoundarytyle = pNewStyle->GetBoundaryStyles(); - pBoundarytyle->SetMarginWidth(*pRect); - } - } - return pNewStyle; -} -IFDE_CSSComputedStyle* CXFA_TextParser::ComputeStyle( - IFDE_XMLNode* pXMLNode, - IFDE_CSSComputedStyle* pParentStyle) { - CXFA_TextParseContext* pContext = static_cast( - m_mapXMLNodeToParseContext.GetValueAt(pXMLNode)); - if (!pContext) - return nullptr; - pContext->m_pParentStyle = pParentStyle; - pParentStyle->AddRef(); - CXFA_CSSTagProvider tagProvider; - ParseTagInfo(pXMLNode, tagProvider); - if (tagProvider.m_bContent) - return nullptr; - IFDE_CSSComputedStyle* pStyle = CreateStyle(pParentStyle); - IFDE_CSSAccelerator* pCSSAccel = m_pSelector->InitAccelerator(); - pCSSAccel->OnEnterTag(&tagProvider); - m_pSelector->ComputeStyle(&tagProvider, pContext->GetDecls(), - pContext->CountDecls(), pStyle); - pCSSAccel->OnLeaveTag(&tagProvider); - return pStyle; -} -void CXFA_TextParser::DoParse(IFDE_XMLNode* pXMLContainer, - IXFA_TextProvider* pTextProvider) { - if (pXMLContainer == NULL || pTextProvider == NULL || m_pAllocator) { - return; - } - m_pAllocator = - FX_CreateAllocator(FX_ALLOCTYPE_Fixed, 32, sizeof(CXFA_CSSTagProvider)); - InitCSSData(pTextProvider); - IFDE_CSSComputedStyle* pRootStyle = CreateRootStyle(pTextProvider); - ParseRichText(pXMLContainer, pRootStyle); - pRootStyle->Release(); -} -void CXFA_TextParser::ParseRichText(IFDE_XMLNode* pXMLNode, - IFDE_CSSComputedStyle* pParentStyle) { - if (pXMLNode == NULL) { - return; - } - CXFA_CSSTagProvider tagProvider; - ParseTagInfo(pXMLNode, tagProvider); - if (!tagProvider.m_bTagAviliable) { - return; - } - IFDE_CSSComputedStyle* pNewStyle = NULL; - if ((tagProvider.GetTagName() != FX_WSTRC(L"body")) || - (tagProvider.GetTagName() != FX_WSTRC(L"html"))) { - CXFA_TextParseContext* pTextContext = - FXTARGET_NewWith(m_pAllocator) CXFA_TextParseContext; - FDE_CSSDISPLAY eDisplay = FDE_CSSDISPLAY_Inline; - if (!tagProvider.m_bContent) { - pNewStyle = CreateStyle(pParentStyle); - IFDE_CSSAccelerator* pCSSAccel = m_pSelector->InitAccelerator(); - pCSSAccel->OnEnterTag(&tagProvider); - CFDE_CSSDeclarationArray DeclArray; - int32_t iMatchedDecls = - m_pSelector->MatchDeclarations(&tagProvider, DeclArray); - const IFDE_CSSDeclaration** ppMatchDecls = - (const IFDE_CSSDeclaration**)DeclArray.GetData(); - m_pSelector->ComputeStyle(&tagProvider, ppMatchDecls, iMatchedDecls, - pNewStyle); - pCSSAccel->OnLeaveTag(&tagProvider); - if (iMatchedDecls > 0) { - pTextContext->SetDecls(ppMatchDecls, iMatchedDecls); - } - eDisplay = pNewStyle->GetPositionStyles()->GetDisplay(); - } - pTextContext->SetDisplay(eDisplay); - m_mapXMLNodeToParseContext.SetAt(pXMLNode, pTextContext); - } - for (IFDE_XMLNode* pXMLChild = - pXMLNode->GetNodeItem(IFDE_XMLNode::FirstChild); - pXMLChild; - pXMLChild = pXMLChild->GetNodeItem(IFDE_XMLNode::NextSibling)) { - ParseRichText(pXMLChild, pNewStyle); - } - if (pNewStyle) - pNewStyle->Release(); -} -void CXFA_TextParser::ParseTagInfo(IFDE_XMLNode* pXMLNode, - CXFA_CSSTagProvider& tagProvider) { - static const FX_DWORD s_XFATagName[] = { - 0x61, 0x62, 0x69, 0x70, 0x0001f714, - 0x00022a55, 0x000239bb, 0x00025881, 0x0bd37faa, 0x0bd37fb8, - 0xa73e3af2, 0xb182eaae, 0xdb8ac455, - }; - CFX_WideString wsName; - if (pXMLNode->GetType() == FDE_XMLNODE_Element) { - IFDE_XMLElement* pXMLElement = (IFDE_XMLElement*)pXMLNode; - pXMLElement->GetLocalTagName(wsName); - tagProvider.SetTagNameObj(wsName); - FX_DWORD dwHashCode = - FX_HashCode_String_GetW(wsName, wsName.GetLength(), TRUE); - static const int32_t s_iCount = sizeof(s_XFATagName) / sizeof(FX_DWORD); - CFX_DSPATemplate lookup; - tagProvider.m_bTagAviliable = - lookup.Lookup(dwHashCode, s_XFATagName, s_iCount) > -1; - CFX_WideString wsValue; - pXMLElement->GetString(FX_WSTRC(L"style").GetPtr(), wsValue); - if (!wsValue.IsEmpty()) { - tagProvider.SetAttribute(FX_WSTRC(L"style"), wsValue); - } - } else if (pXMLNode->GetType() == FDE_XMLNODE_Text) { - tagProvider.m_bTagAviliable = TRUE; - tagProvider.m_bContent = TRUE; - } -} -int32_t CXFA_TextParser::GetVAlgin(IXFA_TextProvider* pTextProvider) const { - int32_t iAlign = XFA_ATTRIBUTEENUM_Top; - CXFA_Para para = pTextProvider->GetParaNode(); - if (para) { - iAlign = para.GetVerticalAlign(); - } - return iAlign; -} -FX_FLOAT CXFA_TextParser::GetTabInterval(IFDE_CSSComputedStyle* pStyle) const { - CFX_WideString wsValue; - if (pStyle && pStyle->GetCustomStyle(FX_WSTRC(L"tab-interval"), wsValue)) { - CXFA_Measurement ms(wsValue); - return ms.ToUnit(XFA_UNIT_Pt); - } - return 36; -} -int32_t CXFA_TextParser::CountTabs(IFDE_CSSComputedStyle* pStyle) const { - CFX_WideString wsValue; - if (pStyle && pStyle->GetCustomStyle(FX_WSTRC(L"xfa-tab-count"), wsValue)) { - return wsValue.GetInteger(); - } - return 0; -} -FX_BOOL CXFA_TextParser::IsSpaceRun(IFDE_CSSComputedStyle* pStyle) const { - CFX_WideString wsValue; - if (pStyle && pStyle->GetCustomStyle(FX_WSTRC(L"xfa-spacerun"), wsValue)) { - wsValue.MakeLower(); - return wsValue == FX_WSTRC(L"yes"); - } - return FALSE; -} -IFX_Font* CXFA_TextParser::GetFont(IXFA_TextProvider* pTextProvider, - IFDE_CSSComputedStyle* pStyle) const { - CFX_WideStringC wsFamily = FX_WSTRC(L"Courier"); - FX_DWORD dwStyle = 0; - CXFA_Font font = pTextProvider->GetFontNode(); - if (font) { - font.GetTypeface(wsFamily); - if (font.IsBold()) { - dwStyle |= FX_FONTSTYLE_Bold; - } - if (font.IsItalic()) { - dwStyle |= FX_FONTSTYLE_Italic; - } - } - if (pStyle) { - IFDE_CSSFontStyle* pFontStyle = pStyle->GetFontStyles(); - int32_t iCount = pFontStyle->CountFontFamilies(); - if (iCount > 0) { - wsFamily = pFontStyle->GetFontFamily(iCount - 1); - } - dwStyle = 0; - if (pFontStyle->GetFontWeight() > FXFONT_FW_NORMAL) { - dwStyle |= FX_FONTSTYLE_Bold; - } - if (pFontStyle->GetFontStyle() == FDE_CSSFONTSTYLE_Italic) { - dwStyle |= FX_FONTSTYLE_Italic; - } - } - CXFA_FFDoc* pDoc = pTextProvider->GetDocNode(); - CXFA_FontMgr* pFontMgr = pDoc->GetApp()->GetXFAFontMgr(); - return pFontMgr->GetFont(pDoc, wsFamily, dwStyle); -} -FX_FLOAT CXFA_TextParser::GetFontSize(IXFA_TextProvider* pTextProvider, - IFDE_CSSComputedStyle* pStyle) const { - if (pStyle) - return pStyle->GetFontStyles()->GetFontSize(); - - CXFA_Font font = pTextProvider->GetFontNode(); - if (font) { - return font.GetFontSize(); - } - return 10; -} -int32_t CXFA_TextParser::GetHorScale(IXFA_TextProvider* pTextProvider, - IFDE_CSSComputedStyle* pStyle, - IFDE_XMLNode* pXMLNode) const { - if (pStyle) { - CFX_WideString wsValue; - if (pStyle->GetCustomStyle(FX_WSTRC(L"xfa-font-horizontal-scale"), - wsValue)) { - return wsValue.GetInteger(); - } - while (pXMLNode) { - CXFA_TextParseContext* pContext = static_cast( - m_mapXMLNodeToParseContext.GetValueAt(pXMLNode)); - if (pContext && pContext->m_pParentStyle && - pContext->m_pParentStyle->GetCustomStyle( - FX_WSTRC(L"xfa-font-horizontal-scale"), wsValue)) { - return wsValue.GetInteger(); - } - pXMLNode = pXMLNode->GetNodeItem(IFDE_XMLNode::Parent); - } - } - if (CXFA_Font font = pTextProvider->GetFontNode()) { - return static_cast(font.GetHorizontalScale()); - } - return 100; -} -int32_t CXFA_TextParser::GetVerScale(IXFA_TextProvider* pTextProvider, - IFDE_CSSComputedStyle* pStyle) const { - if (pStyle) { - CFX_WideString wsValue; - if (pStyle->GetCustomStyle(FX_WSTRC(L"xfa-font-vertical-scale"), wsValue)) { - return wsValue.GetInteger(); - } - } - if (CXFA_Font font = pTextProvider->GetFontNode()) { - return (int32_t)font.GetVerticalScale(); - } - return 100; -} -void CXFA_TextParser::GetUnderline(IXFA_TextProvider* pTextProvider, - IFDE_CSSComputedStyle* pStyle, - int32_t& iUnderline, - int32_t& iPeriod) const { - iUnderline = 0; - iPeriod = XFA_ATTRIBUTEENUM_All; - if (pStyle) { - FX_DWORD dwDecoration = pStyle->GetParagraphStyles()->GetTextDecoration(); - if (dwDecoration & FDE_CSSTEXTDECORATION_Double) { - iUnderline = 2; - } else if (dwDecoration & FDE_CSSTEXTDECORATION_Underline) { - iUnderline = 1; - } - CFX_WideString wsValue; - if (pStyle->GetCustomStyle(FX_WSTRC(L"underlinePeriod"), wsValue)) { - if (wsValue == FX_WSTRC(L"word")) { - iPeriod = XFA_ATTRIBUTEENUM_Word; - } - } else if (CXFA_Font font = pTextProvider->GetFontNode()) { - iPeriod = font.GetUnderlinePeriod(); - } - } else { - CXFA_Font font = pTextProvider->GetFontNode(); - if (font) { - iUnderline = font.GetUnderline(); - iPeriod = font.GetUnderlinePeriod(); - } - } -} -void CXFA_TextParser::GetLinethrough(IXFA_TextProvider* pTextProvider, - IFDE_CSSComputedStyle* pStyle, - int32_t& iLinethrough) const { - if (pStyle) { - FX_DWORD dwDecoration = pStyle->GetParagraphStyles()->GetTextDecoration(); - iLinethrough = (dwDecoration & FDE_CSSTEXTDECORATION_LineThrough) ? 1 : 0; - } else { - CXFA_Font font = pTextProvider->GetFontNode(); - if (font) { - iLinethrough = font.GetLineThrough(); - } - } -} -FX_ARGB CXFA_TextParser::GetColor(IXFA_TextProvider* pTextProvider, - IFDE_CSSComputedStyle* pStyle) const { - if (pStyle) - return pStyle->GetFontStyles()->GetColor(); - - if (CXFA_Font font = pTextProvider->GetFontNode()) - return font.GetColor(); - - return 0xFF000000; -} -FX_FLOAT CXFA_TextParser::GetBaseline(IXFA_TextProvider* pTextProvider, - IFDE_CSSComputedStyle* pStyle) const { - if (pStyle) { - IFDE_CSSParagraphStyle* pParaStyle = pStyle->GetParagraphStyles(); - if (pParaStyle->GetVerticalAlign() == FDE_CSSVERTICALALIGN_Number) { - return pParaStyle->GetNumberVerticalAlign(); - } - } else if (CXFA_Font font = pTextProvider->GetFontNode()) { - return font.GetBaselineShift(); - } - return 0; -} -FX_FLOAT CXFA_TextParser::GetLineHeight(IXFA_TextProvider* pTextProvider, - IFDE_CSSComputedStyle* pStyle, - FX_BOOL bFirst, - FX_FLOAT fVerScale) const { - FX_FLOAT fLineHeight = 0; - if (pStyle) { - fLineHeight = pStyle->GetParagraphStyles()->GetLineHeight(); - } else if (CXFA_Para para = pTextProvider->GetParaNode()) { - fLineHeight = para.GetLineHeight(); - } - if (bFirst) { - FX_FLOAT fFontSize = GetFontSize(pTextProvider, pStyle); - if (fLineHeight < 0.1f) { - fLineHeight = fFontSize; - } else { - fLineHeight = std::min(fLineHeight, fFontSize); - } - } else if (fLineHeight < 0.1f) { - fLineHeight = GetFontSize(pTextProvider, pStyle) * 1.2f; - } - fLineHeight *= fVerScale; - return fLineHeight; -} -FX_BOOL CXFA_TextParser::GetEmbbedObj(IXFA_TextProvider* pTextProvider, - IFDE_XMLNode* pXMLNode, - CFX_WideString& wsValue) { - wsValue.Empty(); - if (pXMLNode == NULL) { - return FALSE; - } - FX_BOOL bRet = FALSE; - if (pXMLNode->GetType() == FDE_XMLNODE_Element) { - IFDE_XMLElement* pElement = (IFDE_XMLElement*)pXMLNode; - CFX_WideString wsAttr; - pElement->GetString(FX_WSTRC(L"xfa:embed").GetPtr(), wsAttr); - if (wsAttr.IsEmpty()) { - return FALSE; - } - if (wsAttr.GetAt(0) == L'#') { - wsAttr.Delete(0); - } - CFX_WideString ws; - pElement->GetString(FX_WSTRC(L"xfa:embedType").GetPtr(), ws); - if (ws.IsEmpty()) { - ws = L"som"; - } else { - ws.MakeLower(); - } - FX_BOOL bURI = (ws == FX_WSTRC(L"uri")); - if (!bURI && ws != FX_WSTRC(L"som")) { - return FALSE; - } - ws.Empty(); - pElement->GetString(FX_WSTRC(L"xfa:embedMode").GetPtr(), ws); - if (ws.IsEmpty()) { - ws = L"formatted"; - } else { - ws.MakeLower(); - } - FX_BOOL bRaw = (ws == FX_WSTRC(L"raw")); - if (!bRaw && ws != FX_WSTRC(L"formatted")) { - return FALSE; - } - bRet = pTextProvider->GetEmbbedObj(bURI, bRaw, wsAttr, wsValue); - } - return bRet; -} -CXFA_TextParseContext* CXFA_TextParser::GetParseContextFromMap( - IFDE_XMLNode* pXMLNode) { - return (CXFA_TextParseContext*)m_mapXMLNodeToParseContext.GetValueAt( - pXMLNode); -} -enum XFA_TABSTOPSSTATUS { - XFA_TABSTOPSSTATUS_Error, - XFA_TABSTOPSSTATUS_EOS, - XFA_TABSTOPSSTATUS_None, - XFA_TABSTOPSSTATUS_Alignment, - XFA_TABSTOPSSTATUS_StartLeader, - XFA_TABSTOPSSTATUS_Leader, - XFA_TABSTOPSSTATUS_Location, -}; -FX_BOOL CXFA_TextParser::GetTabstops( - IFDE_CSSComputedStyle* pStyle, - CXFA_TextTabstopsContext* pTabstopContext) { - if (pStyle == NULL || pTabstopContext == NULL) { - return FALSE; - } - CFX_WideString wsValue; - if (!pStyle->GetCustomStyle(FX_WSTRC(L"xfa-tab-stops"), wsValue) && - !pStyle->GetCustomStyle(FX_WSTRC(L"tab-stops"), wsValue)) { - return FALSE; - } - int32_t iLength = wsValue.GetLength(); - const FX_WCHAR* pTabStops = wsValue; - int32_t iCur = 0; - int32_t iLast = 0; - CFX_WideString wsAlign; - XFA_TABSTOPSSTATUS eStatus = XFA_TABSTOPSSTATUS_None; - FX_WCHAR ch; - while (iCur < iLength) { - ch = pTabStops[iCur]; - switch (eStatus) { - case XFA_TABSTOPSSTATUS_None: - if (ch <= ' ') { - iCur++; - } else { - eStatus = XFA_TABSTOPSSTATUS_Alignment; - iLast = iCur; - } - break; - case XFA_TABSTOPSSTATUS_Alignment: - if (ch == ' ') { - wsAlign = CFX_WideStringC(pTabStops + iLast, iCur - iLast); - eStatus = XFA_TABSTOPSSTATUS_StartLeader; - iCur++; - while (iCur < iLength && pTabStops[iCur] <= ' ') { - iCur++; - } - iLast = iCur; - } else { - iCur++; - } - break; - case XFA_TABSTOPSSTATUS_StartLeader: - if (ch != 'l') { - eStatus = XFA_TABSTOPSSTATUS_Location; - } else { - int32_t iCount = 0; - while (iCur < iLength) { - ch = pTabStops[iCur]; - iCur++; - if (ch == '(') { - iCount++; - } else if (ch == ')') { - iCount--; - if (iCount == 0) { - break; - } - } - } - while (iCur < iLength && pTabStops[iCur] <= ' ') { - iCur++; - } - iLast = iCur; - eStatus = XFA_TABSTOPSSTATUS_Location; - } - break; - case XFA_TABSTOPSSTATUS_Location: - if (ch == ' ') { - FX_DWORD dwHashCode = - FX_HashCode_String_GetW(wsAlign, wsAlign.GetLength(), TRUE); - CXFA_Measurement ms(CFX_WideStringC(pTabStops + iLast, iCur - iLast)); - FX_FLOAT fPos = ms.ToUnit(XFA_UNIT_Pt); - pTabstopContext->Append(dwHashCode, fPos); - wsAlign.Empty(); - eStatus = XFA_TABSTOPSSTATUS_None; - } - iCur++; - break; - default: - break; - } - } - if (!wsAlign.IsEmpty()) { - FX_DWORD dwHashCode = - FX_HashCode_String_GetW(wsAlign, wsAlign.GetLength(), TRUE); - CXFA_Measurement ms(CFX_WideStringC(pTabStops + iLast, iCur - iLast)); - FX_FLOAT fPos = ms.ToUnit(XFA_UNIT_Pt); - pTabstopContext->Append(dwHashCode, fPos); - } - return TRUE; -} -CXFA_TextLayout::CXFA_TextLayout(IXFA_TextProvider* pTextProvider) - : m_bHasBlock(FALSE), - m_pTextProvider(pTextProvider), - m_pTextDataNode(nullptr), - m_bRichText(FALSE), - m_pAllocator(nullptr), - m_pBreak(nullptr), - m_pLoader(nullptr), - m_iLines(0), - m_fMaxWidth(0), - m_pTabstopContext(nullptr), - m_bBlockContinue(TRUE) { - FXSYS_assert(m_pTextProvider); -} -CXFA_TextLayout::~CXFA_TextLayout() { - m_textParser.Reset(); - delete m_pLoader; - delete m_pTabstopContext; - Unload(); -} -void CXFA_TextLayout::Unload() { - int32_t iCount = m_pieceLines.GetSize(); - for (int32_t i = 0; i < iCount; i++) { - CXFA_PieceLine* pLine = m_pieceLines.GetAt(i); - FXTARGET_DeleteWith(CXFA_PieceLine, m_pAllocator, pLine); - } - m_pieceLines.RemoveAll(); - if (m_pBreak) { - m_pBreak->Release(); - m_pBreak = NULL; - } - if (m_pAllocator) { - m_pAllocator->Release(); - m_pAllocator = NULL; - } -} -const CXFA_PieceLineArray* CXFA_TextLayout::GetPieceLines() { - return &m_pieceLines; -} -void CXFA_TextLayout::GetTextDataNode() { - if (m_pTextProvider == NULL) { - return; - } - CXFA_Node* pNode = m_pTextProvider->GetTextNode(m_bRichText); - if (pNode && m_bRichText) { - m_textParser.Reset(); - } - m_pTextDataNode = pNode; -} -IFDE_XMLNode* CXFA_TextLayout::GetXMLContainerNode() { - IFDE_XMLNode* pXMLContainer = NULL; - if (m_bRichText) { - IFDE_XMLNode* pXMLRoot = m_pTextDataNode->GetXMLMappingNode(); - if (!pXMLRoot) { - return pXMLContainer; - } - for (IFDE_XMLNode* pXMLChild = - pXMLRoot->GetNodeItem(IFDE_XMLNode::FirstChild); - pXMLChild; - pXMLChild = pXMLChild->GetNodeItem(IFDE_XMLNode::NextSibling)) { - if (pXMLChild->GetType() == FDE_XMLNODE_Element) { - IFDE_XMLElement* pXMLElement = (IFDE_XMLElement*)pXMLChild; - CFX_WideString wsTag; - pXMLElement->GetLocalTagName(wsTag); - if (wsTag.Equal(FX_WSTRC(L"body")) || wsTag.Equal(FX_WSTRC(L"html"))) { - pXMLContainer = pXMLChild; - break; - } - } - } - } - return pXMLContainer; -} -IFX_RTFBreak* CXFA_TextLayout::CreateBreak(FX_BOOL bDefault) { - FX_DWORD dwStyle = FX_RTFLAYOUTSTYLE_ExpandTab; - if (!bDefault) { - dwStyle |= FX_RTFLAYOUTSTYLE_Pagination; - } - IFX_RTFBreak* pBreak = IFX_RTFBreak::Create(0); - pBreak->SetLayoutStyles(dwStyle); - pBreak->SetLineBreakChar(L'\n'); - pBreak->SetLineBreakTolerance(1); - pBreak->SetFont(m_textParser.GetFont(m_pTextProvider, NULL)); - pBreak->SetFontSize(m_textParser.GetFontSize(m_pTextProvider, NULL)); - return pBreak; -} -void CXFA_TextLayout::InitBreak(FX_FLOAT fLineWidth) { - CXFA_Font font = m_pTextProvider->GetFontNode(); - CXFA_Para para = m_pTextProvider->GetParaNode(); - FX_FLOAT fStart = 0; - FX_FLOAT fStartPos = 0; - if (para) { - int32_t iAlign = FX_RTFLINEALIGNMENT_Left; - switch (para.GetHorizontalAlign()) { - case XFA_ATTRIBUTEENUM_Center: - iAlign = FX_RTFLINEALIGNMENT_Center; - break; - case XFA_ATTRIBUTEENUM_Right: - iAlign = FX_RTFLINEALIGNMENT_Right; - break; - case XFA_ATTRIBUTEENUM_Justify: - iAlign = FX_RTFLINEALIGNMENT_Justified; - break; - case XFA_ATTRIBUTEENUM_JustifyAll: - iAlign = FX_RTFLINEALIGNMENT_Distributed; - break; - } - m_pBreak->SetAlignment(iAlign); - fStart = para.GetMarginLeft(); - if (m_pTextProvider->IsCheckButtonAndAutoWidth()) { - if (iAlign != FX_RTFLINEALIGNMENT_Left) { - fLineWidth -= para.GetMarginRight(); - } - } else { - fLineWidth -= para.GetMarginRight(); - } - if (fLineWidth < 0) { - fLineWidth = fStart; - } - fStartPos = fStart; - FX_FLOAT fIndent = para.GetTextIndent(); - if (fIndent > 0) { - fStartPos += fIndent; - } - } - m_pBreak->SetLineBoundary(fStart, fLineWidth); - m_pBreak->SetLineStartPos(fStartPos); - if (font) { - m_pBreak->SetHorizontalScale((int32_t)font.GetHorizontalScale()); - m_pBreak->SetVerticalScale((int32_t)font.GetVerticalScale()); - m_pBreak->SetCharSpace(font.GetLetterSpacing()); - } - FX_FLOAT fFontSize = m_textParser.GetFontSize(m_pTextProvider, NULL); - m_pBreak->SetFontSize(fFontSize); - m_pBreak->SetFont(m_textParser.GetFont(m_pTextProvider, NULL)); - m_pBreak->SetLineBreakTolerance(fFontSize * 0.2f); -} -void CXFA_TextLayout::InitBreak(IFDE_CSSComputedStyle* pStyle, - FDE_CSSDISPLAY eDisplay, - FX_FLOAT fLineWidth, - IFDE_XMLNode* pXMLNode, - IFDE_CSSComputedStyle* pParentStyle) { - if (pStyle == NULL) { - InitBreak(fLineWidth); - return; - } - IFDE_CSSParagraphStyle* pParaStyle = pStyle->GetParagraphStyles(); - if (eDisplay == FDE_CSSDISPLAY_Block || eDisplay == FDE_CSSDISPLAY_ListItem) { - int32_t iAlign = FX_RTFLINEALIGNMENT_Left; - switch (pParaStyle->GetTextAlign()) { - case FDE_CSSTEXTALIGN_Right: - iAlign = FX_RTFLINEALIGNMENT_Right; - break; - case FDE_CSSTEXTALIGN_Center: - iAlign = FX_RTFLINEALIGNMENT_Center; - break; - case FDE_CSSTEXTALIGN_Justify: - iAlign = FX_RTFLINEALIGNMENT_Justified; - break; - case FDE_CSSTEXTALIGN_JustifyAll: - iAlign = FX_RTFLINEALIGNMENT_Distributed; - break; - default: - break; - } - m_pBreak->SetAlignment(iAlign); - FX_FLOAT fStart = 0; - const FDE_CSSRECT* pRect = pStyle->GetBoundaryStyles()->GetMarginWidth(); - const FDE_CSSRECT* pPaddingRect = - pStyle->GetBoundaryStyles()->GetPaddingWidth(); - if (pRect) { - fStart = pRect->left.GetValue(); - fLineWidth -= pRect->right.GetValue(); - if (pPaddingRect) { - fStart += pPaddingRect->left.GetValue(); - fLineWidth -= pPaddingRect->right.GetValue(); - } - if (eDisplay == FDE_CSSDISPLAY_ListItem) { - const FDE_CSSRECT* pParRect = - pParentStyle->GetBoundaryStyles()->GetMarginWidth(); - const FDE_CSSRECT* pParPaddingRect = - pParentStyle->GetBoundaryStyles()->GetPaddingWidth(); - if (pParRect) { - fStart += pParRect->left.GetValue(); - fLineWidth -= pParRect->right.GetValue(); - if (pParPaddingRect) { - fStart += pParPaddingRect->left.GetValue(); - fLineWidth -= pParPaddingRect->right.GetValue(); - } - } - FDE_CSSRECT pNewRect; - pNewRect.left.Set(FDE_CSSLENGTHUNIT_Point, fStart); - pNewRect.right.Set(FDE_CSSLENGTHUNIT_Point, pRect->right.GetValue()); - pNewRect.top.Set(FDE_CSSLENGTHUNIT_Point, pRect->top.GetValue()); - pNewRect.bottom.Set(FDE_CSSLENGTHUNIT_Point, pRect->bottom.GetValue()); - pStyle->GetBoundaryStyles()->SetMarginWidth(pNewRect); - } - } - m_pBreak->SetLineBoundary(fStart, fLineWidth); - FX_FLOAT fIndent = pParaStyle->GetTextIndent().GetValue(); - if (fIndent > 0) { - fStart += fIndent; - } - m_pBreak->SetLineStartPos(fStart); - m_pBreak->SetTabWidth(m_textParser.GetTabInterval(pStyle)); - if (m_pTabstopContext == NULL) { - m_pTabstopContext = new CXFA_TextTabstopsContext; - } - m_textParser.GetTabstops(pStyle, m_pTabstopContext); - for (int32_t i = 0; i < m_pTabstopContext->m_iTabCount; i++) { - XFA_TABSTOPS* pTab = m_pTabstopContext->m_tabstops.GetDataPtr(i); - m_pBreak->AddPositionedTab(pTab->fTabstops); - } - } - FX_FLOAT fFontSize = m_textParser.GetFontSize(m_pTextProvider, pStyle); - m_pBreak->SetFontSize(fFontSize); - m_pBreak->SetLineBreakTolerance(fFontSize * 0.2f); - m_pBreak->SetFont(m_textParser.GetFont(m_pTextProvider, pStyle)); - m_pBreak->SetHorizontalScale( - m_textParser.GetHorScale(m_pTextProvider, pStyle, pXMLNode)); - m_pBreak->SetVerticalScale(m_textParser.GetVerScale(m_pTextProvider, pStyle)); - m_pBreak->SetCharSpace(pParaStyle->GetLetterSpacing().GetValue()); -} -int32_t CXFA_TextLayout::GetText(CFX_WideString& wsText) { - GetTextDataNode(); - wsText.Empty(); - if (m_bRichText) { - } else { - wsText = m_pTextDataNode->GetContent(); - } - return wsText.GetLength(); -} -FX_FLOAT CXFA_TextLayout::GetLayoutHeight() { - if (m_pLoader == NULL) { - return 0; - } - int32_t iCount = m_pLoader->m_lineHeights.GetSize(); - if (iCount == 0 && m_pLoader->m_fWidth > 0) { - CFX_SizeF szMax(m_pLoader->m_fWidth, m_pLoader->m_fHeight); - CFX_SizeF szDef; - m_pLoader->m_bSaveLineHeight = TRUE; - m_pLoader->m_fLastPos = 0; - CalcSize(szMax, szMax, szDef); - m_pLoader->m_bSaveLineHeight = FALSE; - return szDef.y; - } - FX_FLOAT fHeight = m_pLoader->m_fHeight; - if (fHeight < 0.1f) { - fHeight = 0; - for (int32_t i = 0; i < iCount; i++) { - fHeight += m_pLoader->m_lineHeights.ElementAt(i); - } - } - return fHeight; -} -FX_FLOAT CXFA_TextLayout::StartLayout(FX_FLOAT fWidth) { - if (m_pLoader == NULL) { - m_pLoader = new CXFA_LoaderContext; - } - if (fWidth < 0 || (m_pLoader->m_fWidth > -1 && - FXSYS_fabs(fWidth - m_pLoader->m_fWidth) > 0)) { - m_pLoader->m_lineHeights.RemoveAll(); - m_Blocks.RemoveAll(); - Unload(); - m_pLoader->m_fStartLineOffset = 0; - } - m_pLoader->m_fWidth = fWidth; - if (fWidth < 0) { - CFX_SizeF szMax; - CFX_SizeF szDef; - m_pLoader->m_bSaveLineHeight = TRUE; - m_pLoader->m_fLastPos = 0; - CalcSize(szMax, szMax, szDef); - m_pLoader->m_bSaveLineHeight = FALSE; - fWidth = szDef.x; - } - return fWidth; -} -FX_BOOL CXFA_TextLayout::DoLayout(int32_t iBlockIndex, - FX_FLOAT& fCalcHeight, - FX_FLOAT fContentAreaHeight, - FX_FLOAT fTextHeight) { - if (m_pLoader == NULL) { - return FALSE; - } - int32_t iBlockCount = m_Blocks.GetSize(); - FX_FLOAT fHeight = fTextHeight; - if (fHeight < 0) { - fHeight = GetLayoutHeight(); - } - m_pLoader->m_fHeight = fHeight; - if (fContentAreaHeight < 0) { - return FALSE; - } - m_bHasBlock = TRUE; - if (iBlockCount == 0 && fHeight > 0) { - fHeight = fTextHeight - GetLayoutHeight(); - if (fHeight > 0) { - int32_t iAlign = m_textParser.GetVAlgin(m_pTextProvider); - if (iAlign == XFA_ATTRIBUTEENUM_Middle) { - fHeight /= 2.0f; - } else if (iAlign != XFA_ATTRIBUTEENUM_Bottom) { - fHeight = 0; - } - m_pLoader->m_fStartLineOffset = fHeight; - } - } - FX_FLOAT fLinePos = m_pLoader->m_fStartLineOffset; - int32_t iLineIndex = 0; - if (iBlockCount > 1) { - if (iBlockCount >= (iBlockIndex + 1) * 2) { - iLineIndex = m_Blocks.ElementAt(iBlockIndex * 2); - } else { - iLineIndex = m_Blocks.ElementAt(iBlockCount - 1) + - m_Blocks.ElementAt(iBlockCount - 2); - } - if (m_pLoader->m_BlocksHeight.GetSize() > 0) { - for (int32_t i = 0; i < iBlockIndex; i++) { - fLinePos -= m_pLoader->m_BlocksHeight.ElementAt(i * 2 + 1); - } - } - } - int32_t iCount = m_pLoader->m_lineHeights.GetSize(); - int32_t i = 0; - for (i = iLineIndex; i < iCount; i++) { - FX_FLOAT fLineHeight = m_pLoader->m_lineHeights.ElementAt(i); - if ((i == iLineIndex) && (fLineHeight - fContentAreaHeight > 0.001)) { - fCalcHeight = 0; - return TRUE; - } - if (fLinePos + fLineHeight - fContentAreaHeight > 0.001) { - if (iBlockCount >= (iBlockIndex + 1) * 2) { - m_Blocks.SetAt(iBlockIndex * 2, iLineIndex); - m_Blocks.SetAt(iBlockIndex * 2 + 1, i - iLineIndex); - } else { - m_Blocks.Add(iLineIndex); - m_Blocks.Add(i - iLineIndex); - } - if (i == iLineIndex) { - if (fCalcHeight <= fLinePos) { - if (m_pLoader->m_BlocksHeight.GetSize() > iBlockIndex * 2 && - (m_pLoader->m_BlocksHeight.GetAt(iBlockIndex * 2) == - iBlockIndex)) { - m_pLoader->m_BlocksHeight.SetAt(iBlockIndex * 2 + 1, fCalcHeight); - } else { - m_pLoader->m_BlocksHeight.Add((FX_FLOAT)iBlockIndex); - m_pLoader->m_BlocksHeight.Add(fCalcHeight); - } - } - return TRUE; - } - fCalcHeight = fLinePos; - return TRUE; - } - fLinePos += fLineHeight; - } - return FALSE; -} -int32_t CXFA_TextLayout::CountBlocks() const { - int32_t iCount = m_Blocks.GetSize() / 2; - return iCount > 0 ? iCount : 1; -} -FX_BOOL CXFA_TextLayout::CalcSize(const CFX_SizeF& minSize, - const CFX_SizeF& maxSize, - CFX_SizeF& defaultSize) { - defaultSize.x = maxSize.x; - if (defaultSize.x < 1) { - defaultSize.x = 0xFFFF; - } - if (m_pBreak) - m_pBreak->Release(); - - m_pBreak = CreateBreak(FALSE); - FX_FLOAT fLinePos = 0; - m_iLines = 0; - m_fMaxWidth = 0; - Loader(defaultSize, fLinePos, FALSE); - if (fLinePos < 0.1f) { - fLinePos = m_textParser.GetFontSize(m_pTextProvider, NULL); - } - if (m_pTabstopContext) { - delete m_pTabstopContext; - m_pTabstopContext = NULL; - } - defaultSize = CFX_SizeF(m_fMaxWidth, fLinePos); - return TRUE; -} -FX_BOOL CXFA_TextLayout::Layout(const CFX_SizeF& size, FX_FLOAT* fHeight) { - if (size.x < 1) { - return FALSE; - } - Unload(); - m_pBreak = CreateBreak(TRUE); - if (m_pLoader) { - m_pLoader->m_iTotalLines = -1; - m_pLoader->m_iChar = 0; - } - m_iLines = 0; - FX_FLOAT fLinePos = 0; - Loader(size, fLinePos, TRUE); - UpdateAlign(size.y, fLinePos); - if (m_pTabstopContext) { - delete m_pTabstopContext; - m_pTabstopContext = NULL; - } - if (fHeight) { - *fHeight = fLinePos; - } - return TRUE; -} -FX_BOOL CXFA_TextLayout::Layout(int32_t iBlock) { - if (m_pLoader == NULL || iBlock < 0 || iBlock >= CountBlocks()) { - return FALSE; - } - if (m_pLoader->m_fWidth < 1) { - return FALSE; - } - m_pLoader->m_iTotalLines = -1; - m_iLines = 0; - FX_FLOAT fLinePos = 0; - CXFA_Node* pNode = NULL; - CFX_SizeF szText(m_pLoader->m_fWidth, m_pLoader->m_fHeight); - int32_t iCount = m_Blocks.GetSize(); - int32_t iBlocksHeightCount = m_pLoader->m_BlocksHeight.GetSize(); - iBlocksHeightCount /= 2; - if (iBlock < iBlocksHeightCount) { - return TRUE; - } - if (iBlock == iBlocksHeightCount) { - Unload(); - m_pBreak = CreateBreak(TRUE); - fLinePos = m_pLoader->m_fStartLineOffset; - for (int32_t i = 0; i < iBlocksHeightCount; i++) { - fLinePos -= m_pLoader->m_BlocksHeight.ElementAt(i * 2 + 1); - } - m_pLoader->m_iChar = 0; - if (iCount > 1) { - m_pLoader->m_iTotalLines = m_Blocks.ElementAt(iBlock * 2 + 1); - } - Loader(szText, fLinePos, TRUE); - if (iCount == 0 && m_pLoader->m_fStartLineOffset < 0.1f) { - UpdateAlign(szText.y, fLinePos); - } - } else if (m_pTextDataNode) { - iBlock *= 2; - if (iBlock < iCount - 2) { - m_pLoader->m_iTotalLines = m_Blocks.ElementAt(iBlock + 1); - } - m_pBreak->Reset(); - if (m_bRichText) { - IFDE_XMLNode* pContainerNode = GetXMLContainerNode(); - if (!pContainerNode) { - return TRUE; - } - IFDE_XMLNode* pXMLNode = m_pLoader->m_pXMLNode; - if (pXMLNode == NULL) { - return TRUE; - } - IFDE_XMLNode* pSaveXMLNode = m_pLoader->m_pXMLNode; - for (; pXMLNode; - pXMLNode = pXMLNode->GetNodeItem(IFDE_XMLNode::NextSibling)) { - FX_BOOL bFlag = LoadRichText(pXMLNode, szText, fLinePos, - m_pLoader->m_pParentStyle, TRUE); - if (!bFlag) { - break; - } - } - while (pXMLNode == NULL) { - pXMLNode = pSaveXMLNode->GetNodeItem(IFDE_XMLNode::Parent); - if (pXMLNode == pContainerNode) { - break; - } - FX_BOOL bFlag = - LoadRichText(pXMLNode, szText, fLinePos, m_pLoader->m_pParentStyle, - TRUE, NULL, FALSE); - if (!bFlag) { - break; - } - pSaveXMLNode = pXMLNode; - pXMLNode = pXMLNode->GetNodeItem(IFDE_XMLNode::NextSibling); - if (!pXMLNode) { - continue; - } - for (; pXMLNode; - pXMLNode = pXMLNode->GetNodeItem(IFDE_XMLNode::NextSibling)) { - FX_BOOL bFlag = LoadRichText(pXMLNode, szText, fLinePos, - m_pLoader->m_pParentStyle, TRUE); - if (!bFlag) { - break; - } - } - } - } else { - pNode = m_pLoader->m_pNode; - if (pNode == NULL) { - return TRUE; - } - LoadText(pNode, szText, fLinePos, TRUE); - } - } - if (iBlock == iCount) { - delete m_pTabstopContext; - m_pTabstopContext = nullptr; - delete m_pLoader; - m_pLoader = nullptr; - } - return TRUE; -} -void CXFA_TextLayout::ItemBlocks(const CFX_RectF& rtText, int32_t iBlockIndex) { - if (!m_pLoader) { - return; - } - int32_t iCountHeight = m_pLoader->m_lineHeights.GetSize(); - if (iCountHeight == 0) { - return; - } - FX_BOOL bEndItem = TRUE; - int32_t iBlockCount = m_Blocks.GetSize(); - FX_FLOAT fLinePos = m_pLoader->m_fStartLineOffset; - int32_t iLineIndex = 0; - if (iBlockIndex > 0) { - int32_t iBlockHeightCount = m_pLoader->m_BlocksHeight.GetSize(); - iBlockHeightCount /= 2; - if (iBlockHeightCount >= iBlockIndex) { - for (int32_t i = 0; i < iBlockIndex; i++) { - fLinePos -= m_pLoader->m_BlocksHeight.ElementAt(i * 2 + 1); - } - } else { - fLinePos = 0; - } - iLineIndex = m_Blocks.ElementAt(iBlockCount - 1) + - m_Blocks.ElementAt(iBlockCount - 2); - } - int32_t i = 0; - for (i = iLineIndex; i < iCountHeight; i++) { - FX_FLOAT fLineHeight = m_pLoader->m_lineHeights.ElementAt(i); - if (fLinePos + fLineHeight - rtText.height > 0.001) { - m_Blocks.Add(iLineIndex); - m_Blocks.Add(i - iLineIndex); - bEndItem = FALSE; - break; - } - fLinePos += fLineHeight; - } - if (iCountHeight > 0 && (i - iLineIndex) > 0 && bEndItem) { - m_Blocks.Add(iLineIndex); - m_Blocks.Add(i - iLineIndex); - } -} -FX_BOOL CXFA_TextLayout::DrawString(CFX_RenderDevice* pFxDevice, - const CFX_Matrix& tmDoc2Device, - const CFX_RectF& rtClip, - int32_t iBlock) { - IFDE_RenderDevice* pDevice = IFDE_RenderDevice::Create(pFxDevice); - if (pDevice == NULL) { - return FALSE; - } - FDE_HDEVICESTATE state = pDevice->SaveState(); - pDevice->SetClipRect(rtClip); - IFDE_SolidBrush* pSolidBrush = - (IFDE_SolidBrush*)IFDE_Brush::Create(FDE_BRUSHTYPE_Solid); - IFDE_Pen* pPen = IFDE_Pen::Create(); - FXSYS_assert(pDevice); - FXSYS_assert(pSolidBrush); - FXSYS_assert(pPen); - if (m_pieceLines.GetSize() == 0) { - int32_t iBlockCount = CountBlocks(); - for (int32_t i = 0; i < iBlockCount; i++) { - Layout(i); - } - } - FXTEXT_CHARPOS* pCharPos = NULL; - int32_t iCharCount = 0; - int32_t iLineStart = 0; - int32_t iPieceLines = m_pieceLines.GetSize(); - int32_t iCount = m_Blocks.GetSize(); - if (iCount > 0) { - iBlock *= 2; - if (iBlock < iCount) { - iLineStart = m_Blocks.ElementAt(iBlock); - iPieceLines = m_Blocks.ElementAt(iBlock + 1); - } else { - iPieceLines = 0; - } - } - for (int32_t i = 0; i < iPieceLines; i++) { - if (i + iLineStart >= m_pieceLines.GetSize()) { - break; - } - CXFA_PieceLine* pPieceLine = m_pieceLines.GetAt(i + iLineStart); - int32_t iPieces = pPieceLine->m_textPieces.GetSize(); - int32_t j = 0; - for (j = 0; j < iPieces; j++) { - const XFA_TextPiece* pPiece = pPieceLine->m_textPieces.GetAt(j); - int32_t iChars = pPiece->iChars; - if (iCharCount < iChars) { - FX_Free(pCharPos); - pCharPos = FX_Alloc(FXTEXT_CHARPOS, iChars); - iCharCount = iChars; - } - FXSYS_memset(pCharPos, 0, iCharCount * sizeof(FXTEXT_CHARPOS)); - RenderString(pDevice, pSolidBrush, pPieceLine, j, pCharPos, tmDoc2Device); - } - for (j = 0; j < iPieces; j++) { - RenderPath(pDevice, pPen, pPieceLine, j, pCharPos, tmDoc2Device); - } - } - pDevice->RestoreState(state); - FX_Free(pCharPos); - pSolidBrush->Release(); - pPen->Release(); - pDevice->Release(); - return iPieceLines; -} -void CXFA_TextLayout::UpdateAlign(FX_FLOAT fHeight, FX_FLOAT fBottom) { - fHeight -= fBottom; - if (fHeight < 0.1f) { - return; - } - switch (m_textParser.GetVAlgin(m_pTextProvider)) { - case XFA_ATTRIBUTEENUM_Middle: - fHeight /= 2.0f; - break; - case XFA_ATTRIBUTEENUM_Bottom: - break; - default: - return; - } - int32_t iCount = m_pieceLines.GetSize(); - for (int32_t i = 0; i < iCount; i++) { - CXFA_PieceLine* pPieceLine = m_pieceLines.GetAt(i); - int32_t iPieces = pPieceLine->m_textPieces.GetSize(); - for (int32_t j = 0; j < iPieces; j++) { - XFA_TextPiece* pPiece = pPieceLine->m_textPieces.GetAt(j); - CFX_RectF& rect = pPiece->rtPiece; - rect.top += fHeight; - } - } -} -FX_BOOL CXFA_TextLayout::Loader(const CFX_SizeF& szText, - FX_FLOAT& fLinePos, - FX_BOOL bSavePieces) { - if (m_pAllocator == NULL) { - m_pAllocator = FX_CreateAllocator(FX_ALLOCTYPE_Static, 256, 0); - } - GetTextDataNode(); - if (m_pTextDataNode == NULL) { - return TRUE; - } - if (m_bRichText) { - IFDE_XMLNode* pXMLContainer = GetXMLContainerNode(); - if (pXMLContainer) { - if (!m_textParser.IsParsed()) { - m_textParser.DoParse(pXMLContainer, m_pTextProvider); - } - IFDE_CSSComputedStyle* pRootStyle = - m_textParser.CreateRootStyle(m_pTextProvider); - LoadRichText(pXMLContainer, szText, fLinePos, pRootStyle, bSavePieces); - pRootStyle->Release(); - } - } else { - LoadText(m_pTextDataNode, szText, fLinePos, bSavePieces); - } - return TRUE; -} -void CXFA_TextLayout::LoadText(CXFA_Node* pNode, - const CFX_SizeF& szText, - FX_FLOAT& fLinePos, - FX_BOOL bSavePieces) { - InitBreak(szText.x); - CXFA_Para para = m_pTextProvider->GetParaNode(); - FX_FLOAT fSpaceAbove = 0; - if (para) { - fSpaceAbove = para.GetSpaceAbove(); - if (fSpaceAbove < 0.1f) { - fSpaceAbove = 0; - } - int32_t verAlign = para.GetVerticalAlign(); - switch (verAlign) { - case XFA_ATTRIBUTEENUM_Top: - case XFA_ATTRIBUTEENUM_Middle: - case XFA_ATTRIBUTEENUM_Bottom: { - fLinePos += fSpaceAbove; - break; - } - } - } - CFX_WideString wsText = pNode->GetContent(); - wsText.TrimRight(L" "); - FX_BOOL bRet = AppendChar(wsText, fLinePos, fSpaceAbove, bSavePieces); - if (bRet && m_pLoader) { - m_pLoader->m_pNode = pNode; - } else { - EndBreak(FX_RTFBREAK_ParagraphBreak, fLinePos, bSavePieces); - } -} -FX_BOOL CXFA_TextLayout::LoadRichText(IFDE_XMLNode* pXMLNode, - const CFX_SizeF& szText, - FX_FLOAT& fLinePos, - IFDE_CSSComputedStyle* pParentStyle, - FX_BOOL bSavePieces, - CXFA_LinkUserData* pLinkData, - FX_BOOL bEndBreak, - FX_BOOL bIsOl, - int32_t iLiCount) { - if (pXMLNode == NULL) { - return FALSE; - } - CXFA_TextParseContext* pContext = - m_textParser.GetParseContextFromMap(pXMLNode); - FDE_CSSDISPLAY eDisplay = FDE_CSSDISPLAY_None; - FX_BOOL bContentNode = FALSE; - FX_FLOAT fSpaceBelow = 0; - IFDE_CSSComputedStyle* pStyle = NULL; - CFX_WideString wsName; - if (bEndBreak) { - FX_BOOL bCurOl = FALSE; - FX_BOOL bCurLi = FALSE; - IFDE_XMLElement* pElement = NULL; - if (pContext) { - if (m_bBlockContinue || - (m_pLoader && pXMLNode == m_pLoader->m_pXMLNode)) { - m_bBlockContinue = TRUE; - } - if (pXMLNode->GetType() == FDE_XMLNODE_Text) { - bContentNode = TRUE; - } else if (pXMLNode->GetType() == FDE_XMLNODE_Element) { - pElement = (IFDE_XMLElement*)pXMLNode; - pElement->GetLocalTagName(wsName); - } - if (wsName == FX_WSTRC(L"ol")) { - bIsOl = TRUE; - bCurOl = TRUE; - } - if (m_bBlockContinue || bContentNode == FALSE) { - eDisplay = pContext->GetDisplay(); - if (eDisplay != FDE_CSSDISPLAY_Block && - eDisplay != FDE_CSSDISPLAY_Inline && - eDisplay != FDE_CSSDISPLAY_ListItem) { - return TRUE; - } - pStyle = m_textParser.ComputeStyle(pXMLNode, pParentStyle); - InitBreak(bContentNode ? pParentStyle : pStyle, eDisplay, szText.x, - pXMLNode, pParentStyle); - if ((eDisplay == FDE_CSSDISPLAY_Block || - eDisplay == FDE_CSSDISPLAY_ListItem) && - pStyle && - (wsName.IsEmpty() || - (wsName != FX_WSTRC(L"body") && wsName != FX_WSTRC(L"html") && - wsName != FX_WSTRC(L"ol") && wsName != FX_WSTRC(L"ul")))) { - const FDE_CSSRECT* pRect = - pStyle->GetBoundaryStyles()->GetMarginWidth(); - if (pRect) { - fLinePos += pRect->top.GetValue(); - fSpaceBelow = pRect->bottom.GetValue(); - } - } - if (wsName == FX_WSTRC(L"a")) { - CFX_WideString wsLinkContent; - FXSYS_assert(pElement); - pElement->GetString(FX_WSTRC(L"href").GetPtr(), wsLinkContent); - if (!wsLinkContent.IsEmpty()) { - pLinkData = FXTARGET_NewWith(m_pAllocator) CXFA_LinkUserData( - m_pAllocator, - wsLinkContent.GetBuffer(wsLinkContent.GetLength())); - wsLinkContent.ReleaseBuffer(wsLinkContent.GetLength()); - } - } - int32_t iTabCount = - m_textParser.CountTabs(bContentNode ? pParentStyle : pStyle); - FX_BOOL bSpaceRun = - m_textParser.IsSpaceRun(bContentNode ? pParentStyle : pStyle); - CFX_WideString wsText; - if (bContentNode && iTabCount == 0) { - ((IFDE_XMLText*)pXMLNode)->GetText(wsText); - } else if (wsName == FX_WSTRC(L"br")) { - wsText = L'\n'; - } else if (wsName == FX_WSTRC(L"li")) { - bCurLi = TRUE; - if (bIsOl) { - wsText.Format(L"%d. ", iLiCount); - } else { - wsText = 0x00B7 + FX_WSTRC(L" "); - } - } else if (!bContentNode) { - if (iTabCount > 0) { - while (iTabCount-- > 0) - wsText += L'\t'; - } else { - m_textParser.GetEmbbedObj(m_pTextProvider, pXMLNode, wsText); - } - } - int32_t iLength = wsText.GetLength(); - if (iLength > 0 && bContentNode && !bSpaceRun) { - ProcessText(wsText); - } - if (m_pLoader) { - if (wsText.GetLength() > 0 && - (m_pLoader->m_dwFlags & XFA_LOADERCNTXTFLG_FILTERSPACE)) { - wsText.TrimLeft(0x20); - } - if (FDE_CSSDISPLAY_Block == eDisplay) { - m_pLoader->m_dwFlags |= XFA_LOADERCNTXTFLG_FILTERSPACE; - } else if (FDE_CSSDISPLAY_Inline == eDisplay && - (m_pLoader->m_dwFlags & XFA_LOADERCNTXTFLG_FILTERSPACE)) { - m_pLoader->m_dwFlags &= ~XFA_LOADERCNTXTFLG_FILTERSPACE; - } else if (wsText.GetLength() > 0 && - (0x20 == wsText.GetAt(wsText.GetLength() - 1))) { - m_pLoader->m_dwFlags |= XFA_LOADERCNTXTFLG_FILTERSPACE; - } else if (wsText.GetLength() != 0) { - m_pLoader->m_dwFlags &= ~XFA_LOADERCNTXTFLG_FILTERSPACE; - } - } - if (wsText.GetLength() > 0) { - if (m_pLoader == NULL || m_pLoader->m_iChar == 0) { - if (pLinkData) { - pLinkData->AddRef(); - } - CXFA_TextUserData* pUserData = FXTARGET_NewWith(m_pAllocator) - CXFA_TextUserData(m_pAllocator, - bContentNode ? pParentStyle : pStyle, - pLinkData); - m_pBreak->SetUserData(pUserData); - } - if (AppendChar(wsText, fLinePos, 0, bSavePieces)) { - if (m_pLoader) { - m_pLoader->m_dwFlags &= ~XFA_LOADERCNTXTFLG_FILTERSPACE; - } - if (IsEnd(bSavePieces)) { - if (m_pLoader && m_pLoader->m_iTotalLines > -1) { - m_pLoader->m_pXMLNode = pXMLNode; - m_pLoader->m_pParentStyle = pParentStyle; - } - if (pStyle) - pStyle->Release(); - return FALSE; - } - return TRUE; - } - } - } - } - FX_BOOL ret = TRUE; - for (IFDE_XMLNode* pChildNode = - pXMLNode->GetNodeItem(IFDE_XMLNode::FirstChild); - pChildNode; - pChildNode = pChildNode->GetNodeItem(IFDE_XMLNode::NextSibling)) { - if (bCurOl) { - iLiCount++; - } - ret = LoadRichText(pChildNode, szText, fLinePos, - pContext ? pStyle : pParentStyle, bSavePieces, - pLinkData, TRUE, bIsOl, iLiCount); - if (ret == FALSE) { - return FALSE; - } - } - if (m_pLoader) { - if (FDE_CSSDISPLAY_Block == eDisplay) { - m_pLoader->m_dwFlags |= XFA_LOADERCNTXTFLG_FILTERSPACE; - } - } - if (bCurLi) { - EndBreak(FX_RTFBREAK_LineBreak, fLinePos, bSavePieces); - } - } else { - if (pContext) { - eDisplay = pContext->GetDisplay(); - } - } - if (m_bBlockContinue) { - if (pContext && !bContentNode) { - FX_DWORD dwStatus = (eDisplay == FDE_CSSDISPLAY_Block) - ? FX_RTFBREAK_ParagraphBreak - : FX_RTFBREAK_PieceBreak; - EndBreak(dwStatus, fLinePos, bSavePieces); - if (eDisplay == FDE_CSSDISPLAY_Block) { - fLinePos += fSpaceBelow; - if (m_pTabstopContext) { - m_pTabstopContext->RemoveAll(); - } - } - if (wsName == FX_WSTRC(L"a")) { - if (pLinkData) { - pLinkData->Release(); - pLinkData = nullptr; - } - } - if (IsEnd(bSavePieces)) { - if (pStyle) { - pStyle->Release(); - } - if (m_pLoader && m_pLoader->m_iTotalLines > -1) { - m_pLoader->m_pXMLNode = - pXMLNode->GetNodeItem(IFDE_XMLNode::NextSibling); - m_pLoader->m_pParentStyle = pParentStyle; - } - return FALSE; - } - } - } - if (pStyle) - pStyle->Release(); - return TRUE; -} -FX_BOOL CXFA_TextLayout::AppendChar(const CFX_WideString& wsText, - FX_FLOAT& fLinePos, - FX_FLOAT fSpaceAbove, - FX_BOOL bSavePieces) { - FX_DWORD dwStatus = 0; - int32_t iChar = 0; - if (m_pLoader) { - iChar = m_pLoader->m_iChar; - } - int32_t iLength = wsText.GetLength(); - for (int32_t i = iChar; i < iLength; i++) { - FX_WCHAR wch = wsText.GetAt(i); - if (wch == 0xA0) { - wch = 0x20; - } - if ((dwStatus = m_pBreak->AppendChar(wch)) > FX_RTFBREAK_PieceBreak) { - AppendTextLine(dwStatus, fLinePos, bSavePieces); - if (IsEnd(bSavePieces)) { - if (m_pLoader) - m_pLoader->m_iChar = i; - return TRUE; - } - if (dwStatus == FX_RTFBREAK_ParagraphBreak && m_bRichText) { - fLinePos += fSpaceAbove; - } - } - } - if (m_pLoader) { - m_pLoader->m_iChar = 0; - } - return FALSE; -} -FX_BOOL CXFA_TextLayout::IsEnd(FX_BOOL bSavePieces) { - if (!bSavePieces) { - return FALSE; - } - if (m_pLoader && m_pLoader->m_iTotalLines > 0) { - return m_iLines >= m_pLoader->m_iTotalLines; - } - return FALSE; -} -void CXFA_TextLayout::ProcessText(CFX_WideString& wsText) { - int32_t iLen = wsText.GetLength(); - if (iLen == 0) { - return; - } - FX_WCHAR* psz = wsText.GetBuffer(iLen); - int32_t iTrimLeft = 0; - FX_WCHAR wch = 0, wPrev = 0; - for (int32_t i = 0; i < iLen; i++) { - wch = psz[i]; - if (wch < 0x20) { - wch = 0x20; - } - if (wch == 0x20 && wPrev == 0x20) { - continue; - } - wPrev = wch; - psz[iTrimLeft++] = wch; - } - wsText.ReleaseBuffer(iLen); - wsText = wsText.Left(iTrimLeft); -} -void CXFA_TextLayout::EndBreak(FX_DWORD dwStatus, - FX_FLOAT& fLinePos, - FX_BOOL bSavePieces) { - dwStatus = m_pBreak->EndBreak(dwStatus); - if (dwStatus > FX_RTFBREAK_PieceBreak) { - AppendTextLine(dwStatus, fLinePos, bSavePieces, TRUE); - } -} -void CXFA_TextLayout::DoTabstops(IFDE_CSSComputedStyle* pStyle, - CXFA_PieceLine* pPieceLine) { - if (m_pTabstopContext == NULL || m_pTabstopContext->m_iTabCount == 0) { - return; - } - if (pStyle == NULL || pPieceLine == NULL) { - return; - } - int32_t iPieces = pPieceLine->m_textPieces.GetSize(); - if (iPieces == 0) { - return; - } - XFA_TextPiece* pPiece = pPieceLine->m_textPieces.GetAt(iPieces - 1); - int32_t& iTabstopsIndex = m_pTabstopContext->m_iTabIndex; - int32_t iCount = m_textParser.CountTabs(pStyle); - if (iTabstopsIndex > m_pTabstopContext->m_iTabCount - 1) { - return; - } - if (iCount > 0) { - iTabstopsIndex++; - m_pTabstopContext->m_bTabstops = TRUE; - FX_FLOAT fRight = 0; - if (iPieces > 1) { - XFA_TextPiece* p = pPieceLine->m_textPieces.GetAt(iPieces - 2); - fRight = p->rtPiece.right(); - } - m_pTabstopContext->m_fTabWidth = - pPiece->rtPiece.width + pPiece->rtPiece.left - fRight; - } else if (iTabstopsIndex > -1) { - FX_FLOAT fLeft = 0; - if (m_pTabstopContext->m_bTabstops) { - XFA_TABSTOPS* pTabstops = - m_pTabstopContext->m_tabstops.GetDataPtr(iTabstopsIndex); - FX_DWORD dwAlgin = pTabstops->dwAlign; - if (dwAlgin == FX_HashCode_String_GetW(L"center", 6)) { - fLeft = pPiece->rtPiece.width / 2.0f; - } else if (dwAlgin == FX_HashCode_String_GetW(L"right", 5) || - dwAlgin == FX_HashCode_String_GetW(L"before", 6)) { - fLeft = pPiece->rtPiece.width; - } else if (dwAlgin == FX_HashCode_String_GetW(L"decimal", 7)) { - int32_t iChars = pPiece->iChars; - for (int32_t i = 0; i < iChars; i++) { - if (pPiece->pszText[i] == L'.') { - break; - } - fLeft += pPiece->pWidths[i] / 20000.0f; - } - } - m_pTabstopContext->m_fLeft = - std::min(fLeft, m_pTabstopContext->m_fTabWidth); - m_pTabstopContext->m_bTabstops = FALSE; - m_pTabstopContext->m_fTabWidth = 0; - } - pPiece->rtPiece.left -= m_pTabstopContext->m_fLeft; - } -} -void CXFA_TextLayout::AppendTextLine(FX_DWORD dwStatus, - FX_FLOAT& fLinePos, - FX_BOOL bSavePieces, - FX_BOOL bEndBreak) { - int32_t iPieces = m_pBreak->CountBreakPieces(); - if (iPieces < 1) { - return; - } - IFDE_CSSComputedStyle* pStyle = NULL; - if (bSavePieces) { - CXFA_PieceLine* pPieceLine = FXTARGET_NewWith(m_pAllocator) CXFA_PieceLine; - m_pieceLines.Add(pPieceLine); - if (m_pTabstopContext) { - m_pTabstopContext->Reset(); - } - FX_FLOAT fLineStep = 0, fBaseLine = 0; - int32_t i = 0; - for (i = 0; i < iPieces; i++) { - const CFX_RTFPiece* pPiece = m_pBreak->GetBreakPiece(i); - CXFA_TextUserData* pUserData = (CXFA_TextUserData*)pPiece->m_pUserData; - if (pUserData) - pStyle = pUserData->m_pStyle; - FX_FLOAT fVerScale = pPiece->m_iVerticalScale / 100.0f; - XFA_TextPiece* pTP = FXTARGET_NewWith(m_pAllocator) XFA_TextPiece(); - pTP->pszText = - (FX_WCHAR*)m_pAllocator->Alloc(pPiece->m_iChars * sizeof(FX_WCHAR)); - pTP->pWidths = - (int32_t*)m_pAllocator->Alloc(pPiece->m_iChars * sizeof(int32_t)); - pTP->iChars = pPiece->m_iChars; - pPiece->GetString(pTP->pszText); - pPiece->GetWidths(pTP->pWidths); - pTP->iBidiLevel = pPiece->m_iBidiLevel; - pTP->iHorScale = pPiece->m_iHorizontalScale; - pTP->iVerScale = pPiece->m_iVerticalScale; - m_textParser.GetUnderline(m_pTextProvider, pStyle, pTP->iUnderline, - pTP->iPeriod); - m_textParser.GetLinethrough(m_pTextProvider, pStyle, pTP->iLineThrough); - pTP->dwColor = m_textParser.GetColor(m_pTextProvider, pStyle); - pTP->pFont = m_textParser.GetFont(m_pTextProvider, pStyle); - pTP->fFontSize = m_textParser.GetFontSize(m_pTextProvider, pStyle); - pTP->rtPiece.left = pPiece->m_iStartPos / 20000.0f; - pTP->rtPiece.width = pPiece->m_iWidth / 20000.0f; - pTP->rtPiece.height = (FX_FLOAT)pPiece->m_iFontSize * fVerScale / 20.0f; - FX_FLOAT fBaseLineTemp = - m_textParser.GetBaseline(m_pTextProvider, pStyle); - pTP->rtPiece.top = fBaseLineTemp; - pPieceLine->m_textPieces.Add(pTP); - FX_FLOAT fLineHeight = m_textParser.GetLineHeight( - m_pTextProvider, pStyle, m_iLines == 0, fVerScale); - if (fBaseLineTemp > 0) { - FX_FLOAT fLineHeightTmp = fBaseLineTemp + pTP->rtPiece.height; - if (fLineHeight < fLineHeightTmp) { - fLineHeight = fLineHeightTmp; - } else { - fBaseLineTemp = 0; - } - } else if (fBaseLine < -fBaseLineTemp) { - fBaseLine = -fBaseLineTemp; - } - fLineStep = std::max(fLineStep, fLineHeight); - if (pUserData && pUserData->m_pLinkData) { - pUserData->m_pLinkData->AddRef(); - pTP->pLinkData = pUserData->m_pLinkData; - } else { - pTP->pLinkData = NULL; - } - DoTabstops(pStyle, pPieceLine); - } - for (i = 0; i < iPieces; i++) { - XFA_TextPiece* pTP = pPieceLine->m_textPieces.GetAt(i); - FX_FLOAT& fTop = pTP->rtPiece.top; - FX_FLOAT fBaseLineTemp = fTop; - fTop = fLinePos + fLineStep - pTP->rtPiece.height - fBaseLineTemp; - fTop = std::max(0.0f, fTop); - } - fLinePos += fLineStep + fBaseLine; - } else { - FX_FLOAT fLineStep = 0; - FX_FLOAT fLineWidth = 0; - for (int32_t i = 0; i < iPieces; i++) { - const CFX_RTFPiece* pPiece = m_pBreak->GetBreakPiece(i); - CXFA_TextUserData* pUserData = (CXFA_TextUserData*)pPiece->m_pUserData; - if (pUserData) - pStyle = pUserData->m_pStyle; - FX_FLOAT fVerScale = pPiece->m_iVerticalScale / 100.0f; - FX_FLOAT fBaseLine = m_textParser.GetBaseline(m_pTextProvider, pStyle); - FX_FLOAT fLineHeight = m_textParser.GetLineHeight( - m_pTextProvider, pStyle, m_iLines == 0, fVerScale); - if (fBaseLine > 0) { - FX_FLOAT fLineHeightTmp = - fBaseLine + (FX_FLOAT)pPiece->m_iFontSize * fVerScale / 20.0f; - if (fLineHeight < fLineHeightTmp) { - fLineHeight = fLineHeightTmp; - } - } - fLineStep = std::max(fLineStep, fLineHeight); - fLineWidth += pPiece->m_iWidth / 20000.0f; - } - fLinePos += fLineStep; - m_fMaxWidth = std::max(m_fMaxWidth, fLineWidth); - if (m_pLoader && m_pLoader->m_bSaveLineHeight) { - FX_FLOAT fHeight = fLinePos - m_pLoader->m_fLastPos; - m_pLoader->m_fLastPos = fLinePos; - m_pLoader->m_lineHeights.Add(fHeight); - } - } - if (pStyle) { - pStyle->AddRef(); - } - m_pBreak->ClearBreakPieces(); - if (dwStatus == FX_RTFBREAK_ParagraphBreak) { - m_pBreak->Reset(); - if (!pStyle && bEndBreak) { - CXFA_Para para = m_pTextProvider->GetParaNode(); - if (para) { - FX_FLOAT fStartPos = para.GetMarginLeft(); - FX_FLOAT fIndent = para.GetTextIndent(); - if (fIndent > 0) { - fStartPos += fIndent; - } - FX_FLOAT fSpaceBelow = para.GetSpaceBelow(); - if (fSpaceBelow < 0.1f) { - fSpaceBelow = 0; - } - m_pBreak->SetLineStartPos(fStartPos); - fLinePos += fSpaceBelow; - } - } - } - if (pStyle) { - FX_FLOAT fStart = 0; - const FDE_CSSRECT* pRect = pStyle->GetBoundaryStyles()->GetMarginWidth(); - if (pRect) { - fStart = pRect->left.GetValue(); - } - FX_FLOAT fTextIndent = - pStyle->GetParagraphStyles()->GetTextIndent().GetValue(); - if (fTextIndent < 0) { - fStart -= fTextIndent; - } - m_pBreak->SetLineStartPos(fStart); - pStyle->Release(); - } - m_iLines++; -} -void CXFA_TextLayout::RenderString(IFDE_RenderDevice* pDevice, - IFDE_SolidBrush* pBrush, - CXFA_PieceLine* pPieceLine, - int32_t iPiece, - FXTEXT_CHARPOS* pCharPos, - const CFX_Matrix& tmDoc2Device) { - const XFA_TextPiece* pPiece = pPieceLine->m_textPieces.GetAt(iPiece); - int32_t iCount = GetDisplayPos(pPiece, pCharPos); - if (iCount > 0) { - pBrush->SetColor(pPiece->dwColor); - pDevice->DrawString(pBrush, pPiece->pFont, pCharPos, iCount, - pPiece->fFontSize, &tmDoc2Device); - } - pPieceLine->m_charCounts.Add(iCount); -} -void CXFA_TextLayout::RenderPath(IFDE_RenderDevice* pDevice, - IFDE_Pen* pPen, - CXFA_PieceLine* pPieceLine, - int32_t iPiece, - FXTEXT_CHARPOS* pCharPos, - const CFX_Matrix& tmDoc2Device) { - XFA_TextPiece* pPiece = pPieceLine->m_textPieces.GetAt(iPiece); - FX_BOOL bNoUnderline = pPiece->iUnderline < 1 || pPiece->iUnderline > 2; - FX_BOOL bNoLineThrough = pPiece->iLineThrough < 1 || pPiece->iLineThrough > 2; - if (bNoUnderline && bNoLineThrough) { - return; - } - pPen->SetColor(pPiece->dwColor); - IFDE_Path* pPath = IFDE_Path::Create(); - int32_t iChars = GetDisplayPos(pPiece, pCharPos); - if (iChars > 0) { - CFX_PointF pt1, pt2; - FX_FLOAT fEndY = pCharPos[0].m_OriginY + 1.05f; - int32_t i = 0; - if (pPiece->iPeriod == XFA_ATTRIBUTEENUM_Word) { - for (int32_t i = 0; i < pPiece->iUnderline; i++) { - for (int32_t j = 0; j < iChars; j++) { - pt1.x = pCharPos[j].m_OriginX; - pt2.x = - pt1.x + pCharPos[j].m_FontCharWidth * pPiece->fFontSize / 1000.0f; - pt1.y = pt2.y = fEndY; - pPath->AddLine(pt1, pt2); - } - fEndY += 2.0f; - } - } else { - pt1.x = pCharPos[0].m_OriginX; - pt2.x = - pCharPos[iChars - 1].m_OriginX + - pCharPos[iChars - 1].m_FontCharWidth * pPiece->fFontSize / 1000.0f; - for (int32_t i = 0; i < pPiece->iUnderline; i++) { - pt1.y = pt2.y = fEndY; - pPath->AddLine(pt1, pt2); - fEndY += 2.0f; - } - } - fEndY = pCharPos[0].m_OriginY - pPiece->rtPiece.height * 0.25f; - pt1.x = pCharPos[0].m_OriginX; - pt2.x = pCharPos[iChars - 1].m_OriginX + - pCharPos[iChars - 1].m_FontCharWidth * pPiece->fFontSize / 1000.0f; - for (i = 0; i < pPiece->iLineThrough; i++) { - pt1.y = pt2.y = fEndY; - pPath->AddLine(pt1, pt2); - fEndY += 2.0f; - } - } else { - if (bNoLineThrough && - (bNoUnderline || pPiece->iPeriod != XFA_ATTRIBUTEENUM_All)) { - goto XFA_RenderPathRet; - } - int32_t iCharsTmp = 0; - int32_t iPiecePrev = iPiece, iPieceNext = iPiece; - while (iPiecePrev > 0) { - iPiecePrev--; - iCharsTmp = pPieceLine->m_charCounts.GetAt(iPiecePrev); - if (iCharsTmp > 0) { - break; - } - } - if (iCharsTmp == 0) { - goto XFA_RenderPathRet; - } - iCharsTmp = 0; - int32_t iPieces = pPieceLine->m_textPieces.GetSize(); - while (iPieceNext < iPieces - 1) { - iPieceNext++; - iCharsTmp = pPieceLine->m_charCounts.GetAt(iPieceNext); - if (iCharsTmp > 0) { - break; - } - } - if (iCharsTmp == 0) { - goto XFA_RenderPathRet; - } - FX_FLOAT fOrgX = 0.0f, fEndX = 0.0f; - pPiece = pPieceLine->m_textPieces.GetAt(iPiecePrev); - iChars = GetDisplayPos(pPiece, pCharPos); - if (iChars < 1) { - goto XFA_RenderPathRet; - } - fOrgX = pCharPos[iChars - 1].m_OriginX + - pCharPos[iChars - 1].m_FontCharWidth * pPiece->fFontSize / 1000.0f; - pPiece = pPieceLine->m_textPieces.GetAt(iPieceNext); - iChars = GetDisplayPos(pPiece, pCharPos); - if (iChars < 1) { - goto XFA_RenderPathRet; - } - fEndX = pCharPos[0].m_OriginX; - CFX_PointF pt1, pt2; - pt1.x = fOrgX, pt2.x = fEndX; - FX_FLOAT fEndY = pCharPos[0].m_OriginY + 1.05f; - int32_t i = 0; - for (i = 0; i < pPiece->iUnderline; i++) { - pt1.y = pt2.y = fEndY; - pPath->AddLine(pt1, pt2); - fEndY += 2.0f; - } - fEndY = pCharPos[0].m_OriginY - pPiece->rtPiece.height * 0.25f; - for (i = 0; i < pPiece->iLineThrough; i++) { - pt1.y = pt2.y = fEndY; - pPath->AddLine(pt1, pt2); - fEndY += 2.0f; - } - } - pDevice->DrawPath(pPen, 1, pPath, &tmDoc2Device); -XFA_RenderPathRet: - pPath->Release(); -} -int32_t CXFA_TextLayout::GetDisplayPos(const XFA_TextPiece* pPiece, - FXTEXT_CHARPOS* pCharPos, - FX_BOOL bCharCode) { - if (pPiece == NULL) { - return 0; - } - FX_RTFTEXTOBJ tr; - if (!ToRun(pPiece, tr)) { - return 0; - } - return m_pBreak->GetDisplayPos(&tr, pCharPos, bCharCode); -} -FX_BOOL CXFA_TextLayout::ToRun(const XFA_TextPiece* pPiece, FX_RTFTEXTOBJ& tr) { - int32_t iLength = pPiece->iChars; - if (iLength < 1) { - return FALSE; - } - tr.pStr = pPiece->pszText; - tr.pFont = pPiece->pFont; - tr.pRect = &pPiece->rtPiece; - tr.pWidths = pPiece->pWidths; - tr.iLength = iLength; - tr.fFontSize = pPiece->fFontSize; - tr.iBidiLevel = pPiece->iBidiLevel; - tr.iCharRotation = 0; - tr.wLineBreakChar = L'\n'; - tr.iVerticalScale = pPiece->iVerScale; - tr.dwLayoutStyles = FX_RTFLAYOUTSTYLE_ExpandTab; - tr.iHorizontalScale = pPiece->iHorScale; - return TRUE; -} diff --git a/xfa/src/fxfa/app/xfa_textlayout.h b/xfa/src/fxfa/app/xfa_textlayout.h deleted file mode 100644 index 2d8d1bf15e..0000000000 --- a/xfa/src/fxfa/app/xfa_textlayout.h +++ /dev/null @@ -1,425 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXFA_APP_XFA_TEXTLAYOUT_H_ -#define XFA_SRC_FXFA_APP_XFA_TEXTLAYOUT_H_ - -#include "xfa/src/fde/css/fde_css.h" -#include "xfa/src/fde/fde_brush.h" -#include "xfa/src/fde/fde_renderdevice.h" -#include "xfa/src/fgas/layout/fgas_rtfbreak.h" -#include "xfa/src/fxfa/app/xfa_ffdoc.h" -#include "xfa/src/fxfa/parser/xfa_object.h" - -#define XFA_LOADERCNTXTFLG_FILTERSPACE 0x001 - -class CXFA_Para; -class CXFA_Font; -class CXFA_TextTabstopsContext; - -class IXFA_TextProvider { - public: - virtual ~IXFA_TextProvider() {} - virtual CXFA_Node* GetTextNode(FX_BOOL& bRichText) = 0; - virtual CXFA_Para GetParaNode() = 0; - virtual CXFA_Font GetFontNode() = 0; - virtual FX_BOOL IsCheckButtonAndAutoWidth() = 0; - virtual CXFA_FFDoc* GetDocNode() = 0; - virtual FX_BOOL GetEmbbedObj(FX_BOOL bURI, - FX_BOOL bRaw, - const CFX_WideString& wsAttr, - CFX_WideString& wsValue) = 0; -}; - -class CXFA_CSSTagProvider : public IFDE_CSSTagProvider { - public: - CXFA_CSSTagProvider() : m_bTagAviliable(FALSE), m_bContent(FALSE) {} - virtual ~CXFA_CSSTagProvider(); - virtual CFX_WideStringC GetTagName() { return m_wsTagName; } - virtual FX_POSITION GetFirstAttribute() { - return m_Attributes.GetStartPosition(); - } - virtual void GetNextAttribute(FX_POSITION& pos, - CFX_WideStringC& wsAttr, - CFX_WideStringC& wsValue); - void SetTagNameObj(const CFX_WideString& wsName) { m_wsTagName = wsName; } - void SetAttribute(const CFX_WideString& wsAttr, - const CFX_WideString& wsValue); - FX_BOOL m_bTagAviliable; - FX_BOOL m_bContent; - - protected: - CFX_WideString m_wsTagName; - CFX_MapPtrToPtr m_Attributes; -}; - -class CXFA_TextParseContext : public CFX_Target { - public: - CXFA_TextParseContext() - : m_pParentStyle(nullptr), - m_ppMatchedDecls(nullptr), - m_dwMatchedDecls(0), - m_eDisplay(FDE_CSSDISPLAY_None) {} - ~CXFA_TextParseContext() { - if (m_pParentStyle) - m_pParentStyle->Release(); - FX_Free(m_ppMatchedDecls); - } - void SetDisplay(FDE_CSSDISPLAY eDisplay) { m_eDisplay = eDisplay; } - FDE_CSSDISPLAY GetDisplay() const { return m_eDisplay; } - void SetDecls(const IFDE_CSSDeclaration** ppDeclArray, int32_t iDeclCount); - const IFDE_CSSDeclaration** GetDecls() { - return (const IFDE_CSSDeclaration**)m_ppMatchedDecls; - } - FX_DWORD CountDecls() const { return m_dwMatchedDecls; } - IFDE_CSSComputedStyle* m_pParentStyle; - - protected: - IFDE_CSSDeclaration** m_ppMatchedDecls; - FX_DWORD m_dwMatchedDecls; - FDE_CSSDISPLAY m_eDisplay; -}; - -class CXFA_TextParser { - public: - CXFA_TextParser() : m_pAllocator(NULL), m_pSelector(NULL), m_pUASheet(NULL) {} - virtual ~CXFA_TextParser(); - void Reset(); - void DoParse(IFDE_XMLNode* pXMLContainer, IXFA_TextProvider* pTextProvider); - IFDE_CSSComputedStyle* CreateRootStyle(IXFA_TextProvider* pTextProvider); - IFDE_CSSComputedStyle* ComputeStyle(IFDE_XMLNode* pXMLNode, - IFDE_CSSComputedStyle* pParentStyle); - FX_BOOL IsParsed() const { return m_pAllocator != NULL; } - - int32_t GetVAlgin(IXFA_TextProvider* pTextProvider) const; - FX_FLOAT GetTabInterval(IFDE_CSSComputedStyle* pStyle) const; - int32_t CountTabs(IFDE_CSSComputedStyle* pStyle) const; - FX_BOOL IsSpaceRun(IFDE_CSSComputedStyle* pStyle) const; - FX_BOOL GetTabstops(IFDE_CSSComputedStyle* pStyle, - CXFA_TextTabstopsContext* pTabstopContext); - IFX_Font* GetFont(IXFA_TextProvider* pTextProvider, - IFDE_CSSComputedStyle* pStyle) const; - FX_FLOAT GetFontSize(IXFA_TextProvider* pTextProvider, - IFDE_CSSComputedStyle* pStyle) const; - int32_t GetHorScale(IXFA_TextProvider* pTextProvider, - IFDE_CSSComputedStyle* pStyle, - IFDE_XMLNode* pXMLNode) const; - int32_t GetVerScale(IXFA_TextProvider* pTextProvider, - IFDE_CSSComputedStyle* pStyle) const; - void GetUnderline(IXFA_TextProvider* pTextProvider, - IFDE_CSSComputedStyle* pStyle, - int32_t& iUnderline, - int32_t& iPeriod) const; - void GetLinethrough(IXFA_TextProvider* pTextProvider, - IFDE_CSSComputedStyle* pStyle, - int32_t& iLinethrough) const; - FX_ARGB GetColor(IXFA_TextProvider* pTextProvider, - IFDE_CSSComputedStyle* pStyle) const; - FX_FLOAT GetBaseline(IXFA_TextProvider* pTextProvider, - IFDE_CSSComputedStyle* pStyle) const; - FX_FLOAT GetLineHeight(IXFA_TextProvider* pTextProvider, - IFDE_CSSComputedStyle* pStyle, - FX_BOOL bFirst, - FX_FLOAT fVerScale) const; - FX_BOOL GetEmbbedObj(IXFA_TextProvider* pTextProvider, - IFDE_XMLNode* pXMLNode, - CFX_WideString& wsValue); - CXFA_TextParseContext* GetParseContextFromMap(IFDE_XMLNode* pXMLNode); - - private: - void InitCSSData(IXFA_TextProvider* pTextProvider); - void ParseRichText(IFDE_XMLNode* pXMLNode, - IFDE_CSSComputedStyle* pParentStyle); - void ParseTagInfo(IFDE_XMLNode* pXMLNode, CXFA_CSSTagProvider& tagProvider); - IFDE_CSSStyleSheet* LoadDefaultSheetStyle(); - IFDE_CSSComputedStyle* CreateStyle(IFDE_CSSComputedStyle* pParentStyle); - IFX_MEMAllocator* m_pAllocator; - IFDE_CSSStyleSelector* m_pSelector; - IFDE_CSSStyleSheet* m_pUASheet; - CFX_MapPtrTemplate - m_mapXMLNodeToParseContext; -}; - -class CXFA_LoaderContext { - public: - CXFA_LoaderContext() - : m_bSaveLineHeight(FALSE), - m_fWidth(0), - m_fHeight(0), - m_fLastPos(0), - m_fStartLineOffset(0), - m_iChar(0), - m_iTotalLines(-1), - m_pXMLNode(NULL), - m_pNode(NULL), - m_pParentStyle(NULL), - m_dwFlags(0) {} - FX_BOOL m_bSaveLineHeight; - FX_FLOAT m_fWidth; - FX_FLOAT m_fHeight; - FX_FLOAT m_fLastPos; - FX_FLOAT m_fStartLineOffset; - int32_t m_iChar; - int32_t m_iLines; - int32_t m_iTotalLines; - IFDE_XMLNode* m_pXMLNode; - CXFA_Node* m_pNode; - IFDE_CSSComputedStyle* m_pParentStyle; - CFX_ArrayTemplate m_lineHeights; - FX_DWORD m_dwFlags; - CFX_FloatArray m_BlocksHeight; -}; - -class CXFA_LinkUserData : public IFX_Unknown, public CFX_Target { - public: - CXFA_LinkUserData(IFX_MEMAllocator* pAllocator, FX_WCHAR* pszText) - : m_pAllocator(pAllocator), m_dwRefCount(1) { - m_pszURLContent = pszText; - } - ~CXFA_LinkUserData() {} - virtual FX_DWORD Release() { - FX_DWORD dwRefCount = --m_dwRefCount; - if (dwRefCount <= 0) { - FXTARGET_DeleteWith(CXFA_LinkUserData, m_pAllocator, this); - } - return dwRefCount; - } - virtual FX_DWORD AddRef() { return ++m_dwRefCount; } - - public: - const FX_WCHAR* GetLinkURL() { return m_pszURLContent; } - - protected: - IFX_MEMAllocator* m_pAllocator; - FX_DWORD m_dwRefCount; - CFX_WideString m_pszURLContent; -}; - -class CXFA_TextUserData : public IFX_Unknown, public CFX_Target { - public: - CXFA_TextUserData(IFX_MEMAllocator* pAllocator, IFDE_CSSComputedStyle* pStyle) - : m_pStyle(pStyle), - m_pLinkData(nullptr), - m_pAllocator(pAllocator), - m_dwRefCount(0) { - FXSYS_assert(m_pAllocator); - if (m_pStyle) - m_pStyle->AddRef(); - } - CXFA_TextUserData(IFX_MEMAllocator* pAllocator, - IFDE_CSSComputedStyle* pStyle, - CXFA_LinkUserData* pLinkData) - : m_pStyle(pStyle), - m_pLinkData(pLinkData), - m_pAllocator(pAllocator), - m_dwRefCount(0) { - FXSYS_assert(m_pAllocator); - if (m_pStyle) - m_pStyle->AddRef(); - } - ~CXFA_TextUserData() { - if (m_pStyle) - m_pStyle->Release(); - if (m_pLinkData) - m_pLinkData->Release(); - } - virtual FX_DWORD Release() { - FX_DWORD dwRefCount = --m_dwRefCount; - if (dwRefCount == 0) { - FXTARGET_DeleteWith(CXFA_TextUserData, m_pAllocator, this); - } - return dwRefCount; - } - virtual FX_DWORD AddRef() { return ++m_dwRefCount; } - - IFDE_CSSComputedStyle* m_pStyle; - CXFA_LinkUserData* m_pLinkData; - - protected: - IFX_MEMAllocator* m_pAllocator; - FX_DWORD m_dwRefCount; -}; - -class XFA_TextPiece : public CFX_Target { - public: - XFA_TextPiece() : pszText(nullptr), pFont(nullptr), pLinkData(nullptr) {} - ~XFA_TextPiece() { - if (pLinkData) - pLinkData->Release(); - } - - FX_WCHAR* pszText; - int32_t iChars; - int32_t* pWidths; - int32_t iHorScale; - int32_t iVerScale; - int32_t iBidiLevel; - int32_t iUnderline; - int32_t iPeriod; - int32_t iLineThrough; - IFX_Font* pFont; - FX_ARGB dwColor; - FX_FLOAT fFontSize; - CFX_RectF rtPiece; - CXFA_LinkUserData* pLinkData; -}; -typedef CFX_ArrayTemplate CXFA_PieceArray; - -class CXFA_PieceLine : public CFX_Target { - public: - CXFA_PieceLine() {} - CXFA_PieceArray m_textPieces; - CFX_Int32Array m_charCounts; -}; -typedef CFX_ArrayTemplate CXFA_PieceLineArray; - -struct XFA_TABSTOPS { - FX_DWORD dwAlign; - FX_FLOAT fTabstops; -}; - -class CXFA_TextTabstopsContext { - public: - CXFA_TextTabstopsContext() - : m_iTabCount(0), - m_iTabIndex(-1), - m_bTabstops(FALSE), - m_fTabWidth(0), - m_fLeft(0) {} - void Append(FX_DWORD dwAlign, FX_FLOAT fTabstops) { - int32_t i = 0; - for (i = 0; i < m_iTabCount; i++) { - XFA_TABSTOPS* pTabstop = m_tabstops.GetDataPtr(i); - if (fTabstops < pTabstop->fTabstops) { - break; - } - } - m_tabstops.InsertSpaceAt(i, 1); - XFA_TABSTOPS tabstop; - tabstop.dwAlign = dwAlign; - tabstop.fTabstops = fTabstops; - m_tabstops.SetAt(i, tabstop); - m_iTabCount++; - } - void RemoveAll() { - m_tabstops.RemoveAll(); - m_iTabCount = 0; - } - void Reset() { - m_iTabIndex = -1; - m_bTabstops = FALSE; - m_fTabWidth = 0; - m_fLeft = 0; - } - CFX_ArrayTemplate m_tabstops; - int32_t m_iTabCount; - int32_t m_iTabIndex; - FX_BOOL m_bTabstops; - FX_FLOAT m_fTabWidth; - FX_FLOAT m_fLeft; -}; - -class CXFA_TextLayout { - public: - CXFA_TextLayout(IXFA_TextProvider* pTextProvider); - virtual ~CXFA_TextLayout(); - int32_t GetText(CFX_WideString& wsText); - FX_FLOAT GetLayoutHeight(); - FX_FLOAT StartLayout(FX_FLOAT fWidth = -1); - FX_BOOL DoLayout(int32_t iBlockIndex, - FX_FLOAT& fCalcHeight, - FX_FLOAT fContentAreaHeight = -1, - FX_FLOAT fTextHeight = -1); - - FX_BOOL CalcSize(const CFX_SizeF& minSize, - const CFX_SizeF& maxSize, - CFX_SizeF& defaultSize); - FX_BOOL Layout(const CFX_SizeF& size, FX_FLOAT* fHeight = NULL); - void ItemBlocks(const CFX_RectF& rtText, int32_t iBlockIndex); - FX_BOOL DrawString(CFX_RenderDevice* pFxDevice, - const CFX_Matrix& tmDoc2Device, - const CFX_RectF& rtClip, - int32_t iBlock = 0); - FX_BOOL IsLoaded() const { return m_pieceLines.GetSize() > 0; } - void Unload(); - const CXFA_PieceLineArray* GetPieceLines(); - - FX_BOOL m_bHasBlock; - CFX_Int32Array m_Blocks; - - private: - void GetTextDataNode(); - IFDE_XMLNode* GetXMLContainerNode(); - IFX_RTFBreak* CreateBreak(FX_BOOL bDefault); - void InitBreak(FX_FLOAT fLineWidth); - void InitBreak(IFDE_CSSComputedStyle* pStyle, - FDE_CSSDISPLAY eDisplay, - FX_FLOAT fLineWidth, - IFDE_XMLNode* pXMLNode, - IFDE_CSSComputedStyle* pParentStyle = NULL); - FX_BOOL Loader(const CFX_SizeF& szText, - FX_FLOAT& fLinePos, - FX_BOOL bSavePieces = TRUE); - void LoadText(CXFA_Node* pNode, - const CFX_SizeF& szText, - FX_FLOAT& fLinePos, - FX_BOOL bSavePieces); - FX_BOOL LoadRichText(IFDE_XMLNode* pXMLNode, - const CFX_SizeF& szText, - FX_FLOAT& fLinePos, - IFDE_CSSComputedStyle* pParentStyle, - FX_BOOL bSavePieces, - CXFA_LinkUserData* pLinkData = NULL, - FX_BOOL bEndBreak = TRUE, - FX_BOOL bIsOl = FALSE, - int32_t iLiCount = 0); - FX_BOOL AppendChar(const CFX_WideString& wsText, - FX_FLOAT& fLinePos, - FX_FLOAT fSpaceAbove, - FX_BOOL bSavePieces); - void AppendTextLine(FX_DWORD dwStatus, - FX_FLOAT& fLinePos, - FX_BOOL bSavePieces, - FX_BOOL bEndBreak = FALSE); - void EndBreak(FX_DWORD dwStatus, FX_FLOAT& fLinePos, FX_BOOL bDefault); - FX_BOOL IsEnd(FX_BOOL bSavePieces); - void ProcessText(CFX_WideString& wsText); - void UpdateAlign(FX_FLOAT fHeight, FX_FLOAT fBottom); - void RenderString(IFDE_RenderDevice* pDevice, - IFDE_SolidBrush* pBrush, - CXFA_PieceLine* pPieceLine, - int32_t iPiece, - FXTEXT_CHARPOS* pCharPos, - const CFX_Matrix& tmDoc2Device); - void RenderPath(IFDE_RenderDevice* pDevice, - IFDE_Pen* pPen, - CXFA_PieceLine* pPieceLine, - int32_t iPiece, - FXTEXT_CHARPOS* pCharPos, - const CFX_Matrix& tmDoc2Device); - int32_t GetDisplayPos(const XFA_TextPiece* pPiece, - FXTEXT_CHARPOS* pCharPos, - FX_BOOL bCharCode = FALSE); - FX_BOOL ToRun(const XFA_TextPiece* pPiece, FX_RTFTEXTOBJ& tr); - void DoTabstops(IFDE_CSSComputedStyle* pStyle, CXFA_PieceLine* pPieceLine); - FX_BOOL Layout(int32_t iBlock); - int32_t CountBlocks() const; - - IXFA_TextProvider* m_pTextProvider; - CXFA_Node* m_pTextDataNode; - FX_BOOL m_bRichText; - IFX_MEMAllocator* m_pAllocator; - IFX_RTFBreak* m_pBreak; - CXFA_LoaderContext* m_pLoader; - int32_t m_iLines; - FX_FLOAT m_fMaxWidth; - CXFA_TextParser m_textParser; - CXFA_PieceLineArray m_pieceLines; - CXFA_TextTabstopsContext* m_pTabstopContext; - FX_BOOL m_bBlockContinue; -}; - -#endif // XFA_SRC_FXFA_APP_XFA_TEXTLAYOUT_H_ diff --git a/xfa/src/fxfa/fm2js/xfa_error.cpp b/xfa/src/fxfa/fm2js/xfa_error.cpp deleted file mode 100644 index 71706dff5d..0000000000 --- a/xfa/src/fxfa/fm2js/xfa_error.cpp +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fxfa/fm2js/xfa_error.h" - -static const FX_WCHAR* const gs_lpStrErrorMsgInfo[] = { - L"unsupported char '%c'", L"bad suffix on number", - L"invalidate char '%c'", L"expected identifier instead of '%s'", - L"expected '%s' instead of '%s'", L"expected 'endif' instead of '%s'", - L"unexpected expression '%s'", L"expected operator '%s' instead of '%s'", - L"expected non-empty expression", -}; - -const FX_WCHAR* XFA_FM_ErrorMsg(XFA_FM_ERRMSG msg) { - if (msg < FMERR_MAXIMUM) - return gs_lpStrErrorMsgInfo[msg]; - return L""; -} diff --git a/xfa/src/fxfa/fm2js/xfa_error.h b/xfa/src/fxfa/fm2js/xfa_error.h deleted file mode 100644 index 7c11080a09..0000000000 --- a/xfa/src/fxfa/fm2js/xfa_error.h +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXFA_FM2JS_XFA_ERROR_H_ -#define XFA_SRC_FXFA_FM2JS_XFA_ERROR_H_ - -#include "core/include/fxcrt/fx_string.h" -#include "core/include/fxcrt/fx_system.h" - -enum XFA_FM_ERRMSG { - FMERR_UNSUPPORTED_CHAR, - FMERR_BAD_SUFFIX_NUMBER, - FMERR_INVALIDATE_CHAR, - FMERR_EXPECTED_IDENTIFIER, - FMERR_EXPECTED_TOKEN, - FMERR_EXPECTED_IFEND, - FMERR_UNEXPECTED_EXPRESSION, - FMERR_EXPTECTED_OPERATOR, - FMERR_EXPECTED_NON_EMPTY_EXPRESSION, - FMERR_MAXIMUM -}; - -class CXFA_FMErrorInfo { - public: - CXFA_FMErrorInfo() : linenum(0) {} - ~CXFA_FMErrorInfo() {} - FX_DWORD linenum; - CFX_WideString message; -}; -const FX_WCHAR* XFA_FM_ErrorMsg(XFA_FM_ERRMSG msg); - -#endif // XFA_SRC_FXFA_FM2JS_XFA_ERROR_H_ diff --git a/xfa/src/fxfa/fm2js/xfa_expression.cpp b/xfa/src/fxfa/fm2js/xfa_expression.cpp deleted file mode 100644 index 25c5b4b63b..0000000000 --- a/xfa/src/fxfa/fm2js/xfa_expression.cpp +++ /dev/null @@ -1,627 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fxfa/fm2js/xfa_expression.h" - -#include "core/include/fxcrt/fx_basic.h" - -namespace { - -const CFX_WideStringC RUNTIMEBLOCKTEMPARRAY = - FX_WSTRC(L"foxit_xfa_formcalc_runtime_block_temp_array"); - -const CFX_WideStringC RUNTIMEBLOCKTEMPARRAYINDEX = - FX_WSTRC(L"foxit_xfa_formcalc_runtime_block_temp_array_index"); - -} // namespace - -CXFA_FMExpression::CXFA_FMExpression(FX_DWORD line) - : m_type(XFA_FM_EXPTYPE_UNKNOWN), m_line(line) {} - -CXFA_FMExpression::CXFA_FMExpression(FX_DWORD line, XFA_FM_EXPTYPE type) - : m_type(type), m_line(line) {} - -void CXFA_FMExpression::ToJavaScript(CFX_WideTextBuf& javascript) {} - -void CXFA_FMExpression::ToImpliedReturnJS(CFX_WideTextBuf& javascript) {} - -CXFA_FMFunctionDefinition::CXFA_FMFunctionDefinition( - FX_DWORD line, - FX_BOOL isGlobal, - const CFX_WideStringC& wsName, - CFX_WideStringCArray* pArguments, - CFX_PtrArray* pExpressions) - : CXFA_FMExpression(line, XFA_FM_EXPTYPE_FUNC), - m_wsName(wsName), - m_pArguments(pArguments), - m_pExpressions(pExpressions), - m_isGlobal(isGlobal) {} - -CXFA_FMFunctionDefinition::~CXFA_FMFunctionDefinition() { - if (m_pArguments) { - m_pArguments->RemoveAll(); - delete m_pArguments; - } - if (m_pExpressions) { - for (int i = 0; i < m_pExpressions->GetSize(); ++i) { - delete reinterpret_cast(m_pExpressions->GetAt(i)); - } - m_pExpressions->RemoveAll(); - delete m_pExpressions; - } -} - -void CXFA_FMFunctionDefinition::ToJavaScript(CFX_WideTextBuf& javascript) { - if (m_isGlobal && (!m_pExpressions || m_pExpressions->GetSize() == 0)) { - javascript << FX_WSTRC(L"// comments only"); - return; - } - if (m_isGlobal) { - javascript << FX_WSTRC(L"(\n"); - } - javascript << FX_WSTRC(L"function "); - if (m_wsName.GetAt(0) == L'!') { - CFX_WideString tempName = EXCLAMATION_IN_IDENTIFIER + m_wsName.Mid(1); - javascript << tempName; - } else { - javascript << m_wsName; - } - javascript << FX_WSTRC(L"("); - if (m_pArguments != 0) { - CFX_WideStringC identifier = 0; - for (int i = 0; i < m_pArguments->GetSize(); ++i) { - identifier = m_pArguments->GetAt(i); - if (identifier.GetAt(0) == L'!') { - CFX_WideString tempIdentifier = - EXCLAMATION_IN_IDENTIFIER + identifier.Mid(1); - javascript << tempIdentifier; - } else { - javascript << identifier; - } - if (i + 1 < m_pArguments->GetSize()) { - javascript << FX_WSTRC(L", "); - } - } - } - javascript << FX_WSTRC(L")\n{\n"); - javascript << FX_WSTRC(L"var "); - javascript << RUNTIMEFUNCTIONRETURNVALUE; - javascript << FX_WSTRC(L" = null;\n"); - if (m_pExpressions) { - for (int i = 0; i < m_pExpressions->GetSize(); ++i) { - CXFA_FMExpression* e = - reinterpret_cast(m_pExpressions->GetAt(i)); - if (i + 1 < m_pExpressions->GetSize()) { - e->ToJavaScript(javascript); - } else { - e->ToImpliedReturnJS(javascript); - } - } - } - javascript << FX_WSTRC(L"return "); - if (m_isGlobal) { - javascript << XFA_FM_EXPTypeToString(GETFMVALUE); - javascript << FX_WSTRC(L"("); - javascript << RUNTIMEFUNCTIONRETURNVALUE; - javascript << FX_WSTRC(L")"); - } else { - javascript << RUNTIMEFUNCTIONRETURNVALUE; - } - javascript << FX_WSTRC(L";\n}\n"); - if (m_isGlobal) { - javascript << FX_WSTRC(L").call(this);\n"); - } -} - -void CXFA_FMFunctionDefinition::ToImpliedReturnJS(CFX_WideTextBuf&) {} - -CXFA_FMVarExpression::CXFA_FMVarExpression(FX_DWORD line, - const CFX_WideStringC& wsName, - CXFA_FMExpression* pInit) - : CXFA_FMExpression(line, XFA_FM_EXPTYPE_VAR), - m_wsName(wsName), - m_pInit(pInit) {} - -void CXFA_FMVarExpression::ToJavaScript(CFX_WideTextBuf& javascript) { - javascript << FX_WSTRC(L"var "); - CFX_WideString tempName = m_wsName; - if (m_wsName.GetAt(0) == L'!') { - tempName = EXCLAMATION_IN_IDENTIFIER + m_wsName.Mid(1); - } - javascript << tempName; - javascript << FX_WSTRC(L" = "); - if (m_pInit) { - m_pInit->ToJavaScript(javascript); - javascript << tempName; - javascript << FX_WSTRC(L" = "); - javascript << XFA_FM_EXPTypeToString(VARFILTER); - javascript << FX_WSTRC(L"("); - javascript << tempName; - javascript << FX_WSTRC(L");\n"); - } else { - javascript << FX_WSTRC(L"\"\";\n"); - } -} - -void CXFA_FMVarExpression::ToImpliedReturnJS(CFX_WideTextBuf& javascript) { - javascript << FX_WSTRC(L"var "); - CFX_WideString tempName = m_wsName; - if (m_wsName.GetAt(0) == L'!') { - tempName = EXCLAMATION_IN_IDENTIFIER + m_wsName.Mid(1); - } - javascript << tempName; - javascript << FX_WSTRC(L" = "); - if (m_pInit) { - m_pInit->ToJavaScript(javascript); - javascript << tempName; - javascript << FX_WSTRC(L" = "); - javascript << XFA_FM_EXPTypeToString(VARFILTER); - javascript << FX_WSTRC(L"("); - javascript << tempName; - javascript << FX_WSTRC(L");\n"); - } else { - javascript << FX_WSTRC(L"\"\";\n"); - } - javascript << RUNTIMEFUNCTIONRETURNVALUE; - javascript << FX_WSTRC(L" = "); - javascript << tempName; - javascript << FX_WSTRC(L";\n"); -} - -CXFA_FMExpExpression::CXFA_FMExpExpression(FX_DWORD line, - CXFA_FMSimpleExpression* pExpression) - : CXFA_FMExpression(line, XFA_FM_EXPTYPE_EXP), m_pExpression(pExpression) {} - -void CXFA_FMExpExpression::ToJavaScript(CFX_WideTextBuf& javascript) { - if (m_pExpression->GetOperatorToken() == TOKassign) { - m_pExpression->ToJavaScript(javascript); - } else { - m_pExpression->ToJavaScript(javascript); - javascript << FX_WSTRC(L";\n"); - } -} - -void CXFA_FMExpExpression::ToImpliedReturnJS(CFX_WideTextBuf& javascript) { - if (m_pExpression->GetOperatorToken() == TOKassign) { - m_pExpression->ToImpliedReturnJS(javascript); - } else { - if (m_pExpression->GetOperatorToken() == TOKstar || - m_pExpression->GetOperatorToken() == TOKdotstar || - m_pExpression->GetOperatorToken() == TOKdotscream || - m_pExpression->GetOperatorToken() == TOKdotdot || - m_pExpression->GetOperatorToken() == TOKdot) { - javascript << RUNTIMEFUNCTIONRETURNVALUE; - javascript << FX_WSTRC(L" = "); - javascript << XFA_FM_EXPTypeToString(GETFMVALUE); - javascript << FX_WSTRC(L"("); - m_pExpression->ToJavaScript(javascript); - javascript << FX_WSTRC(L");\n"); - } else { - javascript << RUNTIMEFUNCTIONRETURNVALUE; - javascript << FX_WSTRC(L" = "); - m_pExpression->ToJavaScript(javascript); - javascript << FX_WSTRC(L";\n"); - } - } -} - -CXFA_FMBlockExpression::CXFA_FMBlockExpression(FX_DWORD line, - CFX_PtrArray* pExpressionList) - : CXFA_FMExpression(line, XFA_FM_EXPTYPE_BLOCK), - m_pExpressionList(pExpressionList) {} - -CXFA_FMBlockExpression::~CXFA_FMBlockExpression() { - if (m_pExpressionList) { - for (int i = 0; i < m_pExpressionList->GetSize(); ++i) { - delete reinterpret_cast(m_pExpressionList->GetAt(i)); - } - m_pExpressionList->RemoveAll(); - delete m_pExpressionList; - } -} - -void CXFA_FMBlockExpression::ToJavaScript(CFX_WideTextBuf& javascript) { - javascript << FX_WSTRC(L"{\n"); - if (m_pExpressionList) { - for (int i = 0; i < m_pExpressionList->GetSize(); ++i) { - CXFA_FMExpression* e = - reinterpret_cast(m_pExpressionList->GetAt(i)); - e->ToJavaScript(javascript); - } - } - javascript << FX_WSTRC(L"}\n"); -} - -void CXFA_FMBlockExpression::ToImpliedReturnJS(CFX_WideTextBuf& javascript) { - javascript << FX_WSTRC(L"{\n"); - if (m_pExpressionList) { - for (int i = 0; i < m_pExpressionList->GetSize(); ++i) { - CXFA_FMExpression* e = - reinterpret_cast(m_pExpressionList->GetAt(i)); - if (i + 1 == m_pExpressionList->GetSize()) { - e->ToImpliedReturnJS(javascript); - } else { - e->ToJavaScript(javascript); - } - } - } - javascript << FX_WSTRC(L"}\n"); -} - -CXFA_FMDoExpression::CXFA_FMDoExpression(FX_DWORD line, - CXFA_FMExpression* pList) - : CXFA_FMExpression(line), m_pList(pList) {} - -void CXFA_FMDoExpression::ToJavaScript(CFX_WideTextBuf& javascript) { - m_pList->ToJavaScript(javascript); -} - -void CXFA_FMDoExpression::ToImpliedReturnJS(CFX_WideTextBuf& javascript) { - m_pList->ToImpliedReturnJS(javascript); -} - -CXFA_FMIfExpression::CXFA_FMIfExpression(FX_DWORD line, - CXFA_FMSimpleExpression* pExpression, - CXFA_FMExpression* pIfExpression, - CXFA_FMExpression* pElseExpression) - : CXFA_FMExpression(line, XFA_FM_EXPTYPE_IF), - m_pExpression(pExpression), - m_pIfExpression(pIfExpression), - m_pElseExpression(pElseExpression) {} - -void CXFA_FMIfExpression::ToJavaScript(CFX_WideTextBuf& javascript) { - javascript << FX_WSTRC(L"if ("); - if (m_pExpression) { - javascript << XFA_FM_EXPTypeToString(GETFMVALUE); - javascript << FX_WSTRC(L"("); - m_pExpression->ToJavaScript(javascript); - javascript << FX_WSTRC(L")"); - } - javascript << FX_WSTRC(L")\n"); - if (m_pIfExpression) { - m_pIfExpression->ToJavaScript(javascript); - } - if (m_pElseExpression) { - if (m_pElseExpression->GetExpType() == XFA_FM_EXPTYPE_IF) { - javascript << FX_WSTRC(L"else\n"); - javascript << FX_WSTRC(L"{\n"); - m_pElseExpression->ToJavaScript(javascript); - javascript << FX_WSTRC(L"}\n"); - } else { - javascript << FX_WSTRC(L"else\n"); - m_pElseExpression->ToJavaScript(javascript); - } - } -} - -void CXFA_FMIfExpression::ToImpliedReturnJS(CFX_WideTextBuf& javascript) { - javascript << RUNTIMEFUNCTIONRETURNVALUE; - javascript << FX_WSTRC(L" = 0;\n"); - javascript << FX_WSTRC(L"if ("); - if (m_pExpression) { - javascript << XFA_FM_EXPTypeToString(GETFMVALUE); - javascript << FX_WSTRC(L"("); - m_pExpression->ToJavaScript(javascript); - javascript << FX_WSTRC(L")"); - } - javascript << FX_WSTRC(L")\n"); - if (m_pIfExpression) { - m_pIfExpression->ToImpliedReturnJS(javascript); - } - if (m_pElseExpression) { - if (m_pElseExpression->GetExpType() == XFA_FM_EXPTYPE_IF) { - javascript << FX_WSTRC(L"else\n"); - javascript << FX_WSTRC(L"{\n"); - m_pElseExpression->ToImpliedReturnJS(javascript); - javascript << FX_WSTRC(L"}\n"); - } else { - javascript << FX_WSTRC(L"else\n"); - m_pElseExpression->ToImpliedReturnJS(javascript); - } - } -} - -CXFA_FMLoopExpression::~CXFA_FMLoopExpression() {} - -void CXFA_FMLoopExpression::ToJavaScript(CFX_WideTextBuf& javascript) {} - -void CXFA_FMLoopExpression::ToImpliedReturnJS(CFX_WideTextBuf&) {} - -CXFA_FMWhileExpression::CXFA_FMWhileExpression( - FX_DWORD line, - CXFA_FMSimpleExpression* pCondition, - CXFA_FMExpression* pExpression) - : CXFA_FMLoopExpression(line), - m_pCondition(pCondition), - m_pExpression(pExpression) {} - -void CXFA_FMWhileExpression::ToJavaScript(CFX_WideTextBuf& javascript) { - javascript << FX_WSTRC(L"while ("); - m_pCondition->ToJavaScript(javascript); - javascript << FX_WSTRC(L")\n"); - m_pExpression->ToJavaScript(javascript); -} - -void CXFA_FMWhileExpression::ToImpliedReturnJS(CFX_WideTextBuf& javascript) { - javascript << RUNTIMEFUNCTIONRETURNVALUE; - javascript << FX_WSTRC(L" = 0;\n"); - javascript << FX_WSTRC(L"while ("); - m_pCondition->ToJavaScript(javascript); - javascript << FX_WSTRC(L")\n"); - m_pExpression->ToImpliedReturnJS(javascript); -} - -CXFA_FMBreakExpression::CXFA_FMBreakExpression(FX_DWORD line) - : CXFA_FMExpression(line, XFA_FM_EXPTYPE_BREAK) {} - -CXFA_FMBreakExpression::~CXFA_FMBreakExpression() {} - -void CXFA_FMBreakExpression::ToJavaScript(CFX_WideTextBuf& javascript) { - javascript << RUNTIMEFUNCTIONRETURNVALUE; - javascript << FX_WSTRC(L" = 0;\n"); - javascript << FX_WSTRC(L"break;\n"); -} - -void CXFA_FMBreakExpression::ToImpliedReturnJS(CFX_WideTextBuf& javascript) { - javascript << RUNTIMEFUNCTIONRETURNVALUE; - javascript << FX_WSTRC(L" = 0;\n"); - javascript << FX_WSTRC(L"break;\n"); -} - -CXFA_FMContinueExpression::CXFA_FMContinueExpression(FX_DWORD line) - : CXFA_FMExpression(line, XFA_FM_EXPTYPE_CONTINUE) {} - -CXFA_FMContinueExpression::~CXFA_FMContinueExpression() {} - -void CXFA_FMContinueExpression::ToJavaScript(CFX_WideTextBuf& javascript) { - javascript << RUNTIMEFUNCTIONRETURNVALUE; - javascript << FX_WSTRC(L" = 0;\n"); - javascript << FX_WSTRC(L"continue;\n"); -} - -void CXFA_FMContinueExpression::ToImpliedReturnJS(CFX_WideTextBuf& javascript) { - javascript << RUNTIMEFUNCTIONRETURNVALUE; - javascript << FX_WSTRC(L" = 0;\n"); - javascript << FX_WSTRC(L"continue;\n"); -} - -CXFA_FMForExpression::CXFA_FMForExpression(FX_DWORD line, - const CFX_WideStringC& wsVariant, - CXFA_FMSimpleExpression* pAssignment, - CXFA_FMSimpleExpression* pAccessor, - int32_t iDirection, - CXFA_FMSimpleExpression* pStep, - CXFA_FMExpression* pList) - : CXFA_FMLoopExpression(line), - m_wsVariant(wsVariant), - m_pAssignment(pAssignment), - m_pAccessor(pAccessor), - m_iDirection(iDirection), - m_pStep(pStep), - m_pList(pList) {} - -void CXFA_FMForExpression::ToJavaScript(CFX_WideTextBuf& javascript) { - javascript << FX_WSTRC(L"{\nvar "); - CFX_WideString tempVariant; - if (m_wsVariant.GetAt(0) == L'!') { - tempVariant = EXCLAMATION_IN_IDENTIFIER + m_wsVariant.Mid(1); - javascript << tempVariant; - } else { - tempVariant = m_wsVariant; - javascript << m_wsVariant; - } - javascript << FX_WSTRC(L" = null;\n"); - javascript << FX_WSTRC(L"for ("); - javascript << tempVariant; - javascript << FX_WSTRC(L" = "); - javascript << XFA_FM_EXPTypeToString(GETFMVALUE); - javascript << FX_WSTRC(L"("); - m_pAssignment->ToJavaScript(javascript); - javascript << FX_WSTRC(L"); "); - javascript << tempVariant; - if (m_iDirection == 1) { - javascript << FX_WSTRC(L" <= "); - javascript << XFA_FM_EXPTypeToString(GETFMVALUE); - javascript << FX_WSTRC(L"("); - m_pAccessor->ToJavaScript(javascript); - javascript << FX_WSTRC(L"); "); - javascript << tempVariant; - javascript << FX_WSTRC(L" += "); - } else { - javascript << FX_WSTRC(L" >= "); - javascript << XFA_FM_EXPTypeToString(GETFMVALUE); - javascript << FX_WSTRC(L"("); - m_pAccessor->ToJavaScript(javascript); - javascript << FX_WSTRC(L"); "); - javascript << tempVariant; - javascript << FX_WSTRC(L" -= "); - } - if (m_pStep) { - javascript << XFA_FM_EXPTypeToString(GETFMVALUE); - javascript << FX_WSTRC(L"("); - m_pStep->ToJavaScript(javascript); - javascript << FX_WSTRC(L")"); - } else { - javascript << FX_WSTRC(L"1"); - } - javascript << FX_WSTRC(L")\n"); - m_pList->ToJavaScript(javascript); - javascript << FX_WSTRC(L"}\n"); -} - -void CXFA_FMForExpression::ToImpliedReturnJS(CFX_WideTextBuf& javascript) { - javascript << RUNTIMEFUNCTIONRETURNVALUE; - javascript << FX_WSTRC(L" = 0;\n"); - javascript << FX_WSTRC(L"{\nvar "); - CFX_WideString tempVariant; - if (m_wsVariant.GetAt(0) == L'!') { - tempVariant = EXCLAMATION_IN_IDENTIFIER + m_wsVariant.Mid(1); - javascript << tempVariant; - } else { - tempVariant = m_wsVariant; - javascript << m_wsVariant; - } - javascript << FX_WSTRC(L" = null;\n"); - javascript << FX_WSTRC(L"for ("); - javascript << tempVariant; - javascript << FX_WSTRC(L" = "); - javascript << XFA_FM_EXPTypeToString(GETFMVALUE); - javascript << FX_WSTRC(L"("); - m_pAssignment->ToJavaScript(javascript); - javascript << FX_WSTRC(L"); "); - javascript << tempVariant; - if (m_iDirection == 1) { - javascript << FX_WSTRC(L" <= "); - javascript << XFA_FM_EXPTypeToString(GETFMVALUE); - javascript << FX_WSTRC(L"("); - m_pAccessor->ToJavaScript(javascript); - javascript << FX_WSTRC(L"); "); - javascript << tempVariant; - javascript << FX_WSTRC(L" += "); - } else { - javascript << FX_WSTRC(L" >= "); - javascript << XFA_FM_EXPTypeToString(GETFMVALUE); - javascript << FX_WSTRC(L"("); - m_pAccessor->ToJavaScript(javascript); - javascript << FX_WSTRC(L"); "); - javascript << tempVariant; - javascript << FX_WSTRC(L" -= "); - } - if (m_pStep) { - javascript << XFA_FM_EXPTypeToString(GETFMVALUE); - javascript << FX_WSTRC(L"("); - m_pStep->ToJavaScript(javascript); - javascript << FX_WSTRC(L")"); - } else { - javascript << FX_WSTRC(L"1"); - } - javascript << FX_WSTRC(L")\n"); - m_pList->ToImpliedReturnJS(javascript); - javascript << FX_WSTRC(L"}\n"); -} - -CXFA_FMForeachExpression::CXFA_FMForeachExpression( - FX_DWORD line, - const CFX_WideStringC& wsIdentifier, - CFX_PtrArray* pAccessors, - CXFA_FMExpression* pList) - : CXFA_FMLoopExpression(line), - m_wsIdentifier(wsIdentifier), - m_pAccessors(pAccessors), - m_pList(pList) {} - -CXFA_FMForeachExpression::~CXFA_FMForeachExpression() { - if (m_pAccessors) { - for (int i = 0; i < m_pAccessors->GetSize(); ++i) { - delete reinterpret_cast(m_pAccessors->GetAt(i)); - } - m_pAccessors->RemoveAll(); - delete m_pAccessors; - } -} - -void CXFA_FMForeachExpression::ToJavaScript(CFX_WideTextBuf& javascript) { - javascript << FX_WSTRC(L"{\n"); - javascript << FX_WSTRC(L"var "); - if (m_wsIdentifier.GetAt(0) == L'!') { - CFX_WideString tempIdentifier = - EXCLAMATION_IN_IDENTIFIER + m_wsIdentifier.Mid(1); - javascript << tempIdentifier; - } else { - javascript << m_wsIdentifier; - } - javascript << FX_WSTRC(L" = null;\n"); - javascript << FX_WSTRC(L"var "); - javascript << RUNTIMEBLOCKTEMPARRAY; - javascript << FX_WSTRC(L" = "); - javascript << XFA_FM_EXPTypeToString(CONCATFMOBJECT); - javascript << FX_WSTRC(L"("); - - for (int i = 0; i < m_pAccessors->GetSize(); ++i) { - CXFA_FMSimpleExpression* s = - reinterpret_cast(m_pAccessors->GetAt(i)); - s->ToJavaScript(javascript); - if (i + 1 < m_pAccessors->GetSize()) { - javascript << FX_WSTRC(L", "); - } - } - javascript << FX_WSTRC(L");\n"); - javascript << FX_WSTRC(L"var "); - javascript << RUNTIMEBLOCKTEMPARRAYINDEX; - javascript << FX_WSTRC(L" = 0;\n"); - javascript << FX_WSTRC(L"while("); - javascript << RUNTIMEBLOCKTEMPARRAYINDEX; - javascript << FX_WSTRC(L" < "); - javascript << RUNTIMEBLOCKTEMPARRAY; - javascript << FX_WSTRC(L".length)\n{\n"); - if (m_wsIdentifier.GetAt(0) == L'!') { - CFX_WideString tempIdentifier = - EXCLAMATION_IN_IDENTIFIER + m_wsIdentifier.Mid(1); - javascript << tempIdentifier; - } else { - javascript << m_wsIdentifier; - } - javascript << FX_WSTRC(L" = "); - javascript << RUNTIMEBLOCKTEMPARRAY; - javascript << FX_WSTRC(L"["); - javascript << RUNTIMEBLOCKTEMPARRAYINDEX; - javascript << FX_WSTRC(L"++];\n"); - m_pList->ToJavaScript(javascript); - javascript << FX_WSTRC(L"}\n"); - javascript << FX_WSTRC(L"}\n"); -} - -void CXFA_FMForeachExpression::ToImpliedReturnJS(CFX_WideTextBuf& javascript) { - javascript << RUNTIMEFUNCTIONRETURNVALUE; - javascript << FX_WSTRC(L" = 0;\n"); - javascript << FX_WSTRC(L"{\n"); - javascript << FX_WSTRC(L"var "); - if (m_wsIdentifier.GetAt(0) == L'!') { - CFX_WideString tempIdentifier = - EXCLAMATION_IN_IDENTIFIER + m_wsIdentifier.Mid(1); - javascript << tempIdentifier; - } else { - javascript << m_wsIdentifier; - } - javascript << FX_WSTRC(L" = null;\n"); - javascript << FX_WSTRC(L"var "); - javascript << RUNTIMEBLOCKTEMPARRAY; - javascript << FX_WSTRC(L" = "); - javascript << XFA_FM_EXPTypeToString(CONCATFMOBJECT); - javascript << FX_WSTRC(L"("); - for (int i = 0; i < m_pAccessors->GetSize(); ++i) { - CXFA_FMSimpleExpression* s = - reinterpret_cast(m_pAccessors->GetAt(i)); - s->ToJavaScript(javascript); - if (i + 1 < m_pAccessors->GetSize()) { - javascript << FX_WSTRC(L", "); - } - } - javascript << FX_WSTRC(L");\n"); - javascript << FX_WSTRC(L"var "); - javascript << RUNTIMEBLOCKTEMPARRAYINDEX; - javascript << FX_WSTRC(L" = 0;\n"); - javascript << FX_WSTRC(L"while("); - javascript << RUNTIMEBLOCKTEMPARRAYINDEX; - javascript << FX_WSTRC(L" < "); - javascript << RUNTIMEBLOCKTEMPARRAY; - javascript << FX_WSTRC(L".length)\n{\n"); - if (m_wsIdentifier.GetAt(0) == L'!') { - CFX_WideString tempIdentifier = - EXCLAMATION_IN_IDENTIFIER + m_wsIdentifier.Mid(1); - javascript << tempIdentifier; - } else { - javascript << m_wsIdentifier; - } - javascript << FX_WSTRC(L" = "); - javascript << RUNTIMEBLOCKTEMPARRAY; - javascript << FX_WSTRC(L"["); - javascript << RUNTIMEBLOCKTEMPARRAYINDEX; - javascript << FX_WSTRC(L"++];\n"); - m_pList->ToImpliedReturnJS(javascript); - javascript << FX_WSTRC(L"}\n"); - javascript << FX_WSTRC(L"}\n"); -} diff --git a/xfa/src/fxfa/fm2js/xfa_expression.h b/xfa/src/fxfa/fm2js/xfa_expression.h deleted file mode 100644 index ffcce1c4e0..0000000000 --- a/xfa/src/fxfa/fm2js/xfa_expression.h +++ /dev/null @@ -1,191 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXFA_FM2JS_XFA_EXPRESSION_H_ -#define XFA_SRC_FXFA_FM2JS_XFA_EXPRESSION_H_ - -#include - -#include "xfa/src/fxfa/fm2js/xfa_simpleexpression.h" - -enum XFA_FM_EXPTYPE { - XFA_FM_EXPTYPE_UNKNOWN, - XFA_FM_EXPTYPE_FUNC, - XFA_FM_EXPTYPE_VAR, - XFA_FM_EXPTYPE_EXP, - XFA_FM_EXPTYPE_BLOCK, - XFA_FM_EXPTYPE_IF, - XFA_FM_EXPTYPE_BREAK, - XFA_FM_EXPTYPE_CONTINUE, -}; - -class CXFA_FMExpression { - public: - explicit CXFA_FMExpression(FX_DWORD line); - CXFA_FMExpression(FX_DWORD line, XFA_FM_EXPTYPE type); - virtual ~CXFA_FMExpression() {} - virtual void ToJavaScript(CFX_WideTextBuf& javascript); - virtual void ToImpliedReturnJS(CFX_WideTextBuf&); - FX_DWORD GetLine() { return m_line; } - XFA_FM_EXPTYPE GetExpType() const { return m_type; } - - protected: - XFA_FM_EXPTYPE m_type; - FX_DWORD m_line; -}; - -class CXFA_FMFunctionDefinition : public CXFA_FMExpression { - public: - CXFA_FMFunctionDefinition(FX_DWORD line, - FX_BOOL isGlobal, - const CFX_WideStringC& wsName, - CFX_WideStringCArray* pArguments, - CFX_PtrArray* pExpressions); - ~CXFA_FMFunctionDefinition() override; - void ToJavaScript(CFX_WideTextBuf& javascript) override; - void ToImpliedReturnJS(CFX_WideTextBuf&) override; - - private: - CFX_WideStringC m_wsName; - CFX_WideStringCArray* m_pArguments; - CFX_PtrArray* m_pExpressions; - FX_BOOL m_isGlobal; -}; - -class CXFA_FMVarExpression : public CXFA_FMExpression { - public: - CXFA_FMVarExpression(FX_DWORD line, - const CFX_WideStringC& wsName, - CXFA_FMExpression* pInit); - void ToJavaScript(CFX_WideTextBuf& javascript) override; - void ToImpliedReturnJS(CFX_WideTextBuf&) override; - - private: - CFX_WideStringC m_wsName; - std::unique_ptr m_pInit; -}; - -class CXFA_FMExpExpression : public CXFA_FMExpression { - public: - CXFA_FMExpExpression(FX_DWORD line, CXFA_FMSimpleExpression* pExpression); - void ToJavaScript(CFX_WideTextBuf& javascript) override; - void ToImpliedReturnJS(CFX_WideTextBuf&) override; - - private: - std::unique_ptr m_pExpression; -}; - -class CXFA_FMBlockExpression : public CXFA_FMExpression { - public: - CXFA_FMBlockExpression(FX_DWORD line, CFX_PtrArray* pExpressionList); - ~CXFA_FMBlockExpression() override; - void ToJavaScript(CFX_WideTextBuf& javascript) override; - void ToImpliedReturnJS(CFX_WideTextBuf&) override; - - private: - CFX_PtrArray* m_pExpressionList; -}; - -class CXFA_FMDoExpression : public CXFA_FMExpression { - public: - CXFA_FMDoExpression(FX_DWORD line, CXFA_FMExpression* pList); - void ToJavaScript(CFX_WideTextBuf& javascript) override; - void ToImpliedReturnJS(CFX_WideTextBuf&) override; - - private: - std::unique_ptr m_pList; -}; - -class CXFA_FMIfExpression : public CXFA_FMExpression { - public: - CXFA_FMIfExpression(FX_DWORD line, - CXFA_FMSimpleExpression* pExpression, - CXFA_FMExpression* pIfExpression, - CXFA_FMExpression* pElseExpression); - void ToJavaScript(CFX_WideTextBuf& javascript) override; - void ToImpliedReturnJS(CFX_WideTextBuf&) override; - - private: - std::unique_ptr m_pExpression; - std::unique_ptr m_pIfExpression; - std::unique_ptr m_pElseExpression; -}; - -class CXFA_FMLoopExpression : public CXFA_FMExpression { - public: - explicit CXFA_FMLoopExpression(FX_DWORD line) : CXFA_FMExpression(line) {} - ~CXFA_FMLoopExpression() override; - void ToJavaScript(CFX_WideTextBuf& javascript) override; - void ToImpliedReturnJS(CFX_WideTextBuf&) override; -}; - -class CXFA_FMWhileExpression : public CXFA_FMLoopExpression { - public: - CXFA_FMWhileExpression(FX_DWORD line, - CXFA_FMSimpleExpression* pCodition, - CXFA_FMExpression* pExpression); - void ToJavaScript(CFX_WideTextBuf& javascript) override; - void ToImpliedReturnJS(CFX_WideTextBuf&) override; - - private: - std::unique_ptr m_pCondition; - std::unique_ptr m_pExpression; -}; - -class CXFA_FMBreakExpression : public CXFA_FMExpression { - public: - explicit CXFA_FMBreakExpression(FX_DWORD line); - ~CXFA_FMBreakExpression() override; - void ToJavaScript(CFX_WideTextBuf& javascript) override; - void ToImpliedReturnJS(CFX_WideTextBuf&) override; -}; - -class CXFA_FMContinueExpression : public CXFA_FMExpression { - public: - explicit CXFA_FMContinueExpression(FX_DWORD line); - ~CXFA_FMContinueExpression() override; - void ToJavaScript(CFX_WideTextBuf& javascript) override; - void ToImpliedReturnJS(CFX_WideTextBuf&) override; -}; - -class CXFA_FMForExpression : public CXFA_FMLoopExpression { - public: - CXFA_FMForExpression(FX_DWORD line, - const CFX_WideStringC& wsVariant, - CXFA_FMSimpleExpression* pAssignment, - CXFA_FMSimpleExpression* pAccessor, - int32_t iDirection, - CXFA_FMSimpleExpression* pStep, - CXFA_FMExpression* pList); - void ToJavaScript(CFX_WideTextBuf& javascript) override; - void ToImpliedReturnJS(CFX_WideTextBuf&) override; - - private: - CFX_WideStringC m_wsVariant; - std::unique_ptr m_pAssignment; - std::unique_ptr m_pAccessor; - int32_t m_iDirection; - std::unique_ptr m_pStep; - std::unique_ptr m_pList; -}; - -class CXFA_FMForeachExpression : public CXFA_FMLoopExpression { - public: - CXFA_FMForeachExpression(FX_DWORD line, - const CFX_WideStringC& wsIdentifier, - CFX_PtrArray* pAccessors, - CXFA_FMExpression* pList); - ~CXFA_FMForeachExpression() override; - void ToJavaScript(CFX_WideTextBuf& javascript) override; - void ToImpliedReturnJS(CFX_WideTextBuf&) override; - - private: - CFX_WideStringC m_wsIdentifier; - CFX_PtrArray* m_pAccessors; - std::unique_ptr m_pList; -}; - -#endif // XFA_SRC_FXFA_FM2JS_XFA_EXPRESSION_H_ diff --git a/xfa/src/fxfa/fm2js/xfa_fm2jsapi.cpp b/xfa/src/fxfa/fm2js/xfa_fm2jsapi.cpp deleted file mode 100644 index c59aedc6ac..0000000000 --- a/xfa/src/fxfa/fm2js/xfa_fm2jsapi.cpp +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fxfa/fm2js/xfa_fm2jsapi.h" - -#include "core/include/fxcrt/fx_basic.h" -#include "xfa/src/fxfa/fm2js/xfa_fm2jscontext.h" -#include "xfa/src/fxfa/fm2js/xfa_program.h" -#include "xfa/src/fxfa/parser/xfa_document.h" - -#ifdef __cplusplus -extern "C" { -#endif - -int32_t XFA_FM2JS_Translate(const CFX_WideStringC& wsFormcalc, - CFX_WideTextBuf& wsJavascript, - CFX_WideString& wsError) { - if (wsFormcalc.IsEmpty()) { - wsJavascript.Clear(); - wsError.Empty(); - return 0; - } - int32_t status = 0; - CXFA_FMProgram program; - status = program.Init(wsFormcalc); - if (status) { - wsError = program.GetError().message; - return status; - } - status = program.ParseProgram(); - if (status) { - wsError = program.GetError().message; - return status; - } - program.TranslateProgram(wsJavascript); - return 0; -} -XFA_HFM2JSCONTEXT XFA_FM2JS_ContextCreate() { - return (XFA_HFM2JSCONTEXT)CXFA_FM2JSContext::Create(); -} -void XFA_FM2JS_ContextInitialize(XFA_HFM2JSCONTEXT hFM2JSContext, - FXJSE_HRUNTIME hScriptRuntime, - FXJSE_HCONTEXT hScriptContext, - CXFA_Document* pDocument) { - CXFA_FM2JSContext* pContext = - reinterpret_cast(hFM2JSContext); - pContext->Initialize(hScriptRuntime, hScriptContext, pDocument); -} -void XFA_FM2JS_GlobalPropertyGetter(XFA_HFM2JSCONTEXT hFM2JSContext, - FXJSE_HVALUE hValue) { - CXFA_FM2JSContext* pContext = - reinterpret_cast(hFM2JSContext); - pContext->GlobalPropertyGetter(hValue); -} -void XFA_FM2JS_ContextRelease(XFA_HFM2JSCONTEXT hFM2JSContext) { - CXFA_FM2JSContext* pContext = - reinterpret_cast(hFM2JSContext); - pContext->Release(); -} -#ifdef __cplusplus -} -#endif diff --git a/xfa/src/fxfa/fm2js/xfa_fm2jsapi.h b/xfa/src/fxfa/fm2js/xfa_fm2jsapi.h deleted file mode 100644 index ce6d7c9a93..0000000000 --- a/xfa/src/fxfa/fm2js/xfa_fm2jsapi.h +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXFA_FM2JS_XFA_FM2JSAPI_H_ -#define XFA_SRC_FXFA_FM2JS_XFA_FM2JSAPI_H_ - -#include "core/include/fxcrt/fx_basic.h" -#include "xfa/include/fxjse/fxjse.h" -#include "xfa/src/fxfa/parser/xfa_document.h" - -#define FOXIT_XFA_FM2JS_FORMCALC_RUNTIME "foxit_xfa_formcalc_runtime" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct XFA_HFM2JSCONTEXT_ { void** pData; } * XFA_HFM2JSCONTEXT; -int32_t XFA_FM2JS_Translate(const CFX_WideStringC& wsFormcalc, - CFX_WideTextBuf& wsJavascript, - CFX_WideString& wsError); -XFA_HFM2JSCONTEXT XFA_FM2JS_ContextCreate(); -void XFA_FM2JS_ContextInitialize(XFA_HFM2JSCONTEXT hFM2JSContext, - FXJSE_HRUNTIME hScriptRuntime, - FXJSE_HCONTEXT hScriptContext, - CXFA_Document* pDocument); -void XFA_FM2JS_GlobalPropertyGetter(XFA_HFM2JSCONTEXT hFM2JSContext, - FXJSE_HVALUE hValue); -void XFA_FM2JS_ContextRelease(XFA_HFM2JSCONTEXT hFM2JSContext); - -#ifdef __cplusplus -} -#endif - -#endif // XFA_SRC_FXFA_FM2JS_XFA_FM2JSAPI_H_ diff --git a/xfa/src/fxfa/fm2js/xfa_fm2jscontext.cpp b/xfa/src/fxfa/fm2js/xfa_fm2jscontext.cpp deleted file mode 100644 index c27223ac5c..0000000000 --- a/xfa/src/fxfa/fm2js/xfa_fm2jscontext.cpp +++ /dev/null @@ -1,7223 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fxfa/fm2js/xfa_fm2jscontext.h" - -#include - -#include "core/include/fxcrt/fx_ext.h" -#include "xfa/src/fgas/localization/fgas_locale.h" -#include "xfa/src/fxfa/fm2js/xfa_fm2jsapi.h" -#include "xfa/src/fxfa/parser/xfa_document.h" -#include "xfa/src/fxfa/parser/xfa_localevalue.h" -#include "xfa/src/fxfa/parser/xfa_parser.h" - -#define FINANCIAL_PRECISION 0.00000001 - -namespace { - -struct XFA_FMHtmlReserveCode { - uint32_t m_uCode; - const FX_WCHAR* m_htmlReserve; -}; -struct XFA_FMHtmlHashedReserveCode { - uint32_t m_uHash; - const FX_WCHAR* m_htmlReserve; - uint32_t m_uCode; -}; - -const XFA_FMHtmlHashedReserveCode reservesForDecode[] = { - {0x00018b62, L"Mu", 924}, {0x00019083, L"Nu", 925}, - {0x00019ab9, L"Pi", 928}, {0x0001c3c1, L"Xi", 926}, - {0x000210ac, L"ge", 8805}, {0x000210bb, L"gt", 62}, - {0x00022a51, L"le", 8804}, {0x00022a60, L"lt", 60}, - {0x00022f82, L"mu", 956}, {0x00023493, L"ne", 8800}, - {0x00023497, L"ni", 8715}, {0x000234a3, L"nu", 957}, - {0x000239c1, L"or", 8744}, {0x00023ed9, L"pi", 960}, - {0x000267e1, L"xi", 958}, {0x00c41789, L"lceil", 8968}, - {0x00eef34f, L"thetasym", 977}, {0x012d7ead, L"lcirc", 206}, - {0x01637b56, L"agrave", 224}, {0x020856da, L"crarr", 8629}, - {0x022188c3, L"gamma", 947}, {0x033586d3, L"nbsp", 160}, - {0x04f4c358, L"nsub", 8836}, {0x0581466a, L"dagger", 8224}, - {0x06b1f790, L"oelig", 339}, {0x06e490d4, L"Chi", 935}, - {0x0718c6a1, L"ETH", 208}, {0x07196ada, L"Eta", 919}, - {0x07f667ca, L"Ugrave", 217}, {0x083a8a21, L"Phi", 934}, - {0x083ac28c, L"Psi", 936}, {0x086f26a9, L"Rho", 929}, - {0x089b5b51, L"aring", 229}, {0x08a39f4a, L"Tau", 932}, - {0x08b6188b, L"THORN", 222}, {0x09ce792a, L"icirc", 238}, - {0x09f9d61e, L"amp", 38}, {0x09f9db33, L"and", 8743}, - {0x09f9db36, L"ang", 8736}, {0x0a2e3514, L"cap", 8745}, - {0x0a2e58f4, L"chi", 967}, {0x0a2e9ba8, L"cup", 8746}, - {0x0a4897d0, L"deg", 176}, {0x0a6332fa, L"eta", 951}, - {0x0a633301, L"eth", 240}, {0x0acc4d4b, L"int", 8747}, - {0x0b1b3d35, L"loz", 9674}, {0x0b1b4c8b, L"lrm", 8206}, - {0x0b4fd9b1, L"not", 172}, {0x0b845241, L"phi", 966}, - {0x0b84576f, L"piv", 982}, {0x0b848aac, L"psi", 968}, - {0x0bb8df5e, L"reg", 174}, {0x0bb8eec9, L"rho", 961}, - {0x0bb9034b, L"rlm", 8207}, {0x0bd33d14, L"shy", 173}, - {0x0bd34229, L"sim", 8764}, {0x0bd37faa, L"sub", 8834}, - {0x0bd37fb5, L"sum", 8721}, {0x0bd37fb8, L"sup", 8835}, - {0x0bed676a, L"tau", 964}, {0x0c07f32e, L"uml", 168}, - {0x0c71032c, L"yen", 165}, {0x0c7f2889, L"szlig", 223}, - {0x0c8badbb, L"zwj", 8205}, {0x10ba4dba, L"Egrave", 200}, - {0x10f1ea24, L"para", 182}, {0x10f1ea37, L"part", 8706}, - {0x115b2337, L"perp", 8869}, {0x12b10d15, L"prod", 8719}, - {0x12b10d21, L"prop", 8733}, {0x12dfa9f4, L"rfloor", 8971}, - {0x12eb4736, L"Agrave", 192}, {0x12fff2b7, L"pund", 163}, - {0x13fda9f2, L"tilde", 732}, {0x1417fd62, L"times", 215}, - {0x154fc726, L"ecirc", 234}, {0x165aa451, L"sigma", 963}, - {0x1709124a, L"Dagger", 8225}, {0x192f78d5, L"iexcl", 161}, - {0x1b7ed8d7, L"rArr", 8658}, {0x1ec88c68, L"rang", 9002}, - {0x1ec8a0f7, L"rarr", 8594}, {0x1eda07f3, L"atilde", 227}, - {0x1f3182c4, L"real", 8476}, {0x1fc34f8b, L"yacute", 253}, - {0x20d11522, L"acirc", 226}, {0x21933a9b, L"rsaquo", 8250}, - {0x21f44907, L"uacute", 250}, {0x220cca72, L"acute", 180}, - {0x242cded1, L"alefsym", 8501}, {0x2655c66a, L"delta", 948}, - {0x269e4b4d, L"exist", 8707}, {0x273379fa, L"micro", 181}, - {0x27a37440, L"forall", 8704}, {0x2854e62c, L"minus", 8722}, - {0x28636f81, L"cedil", 184}, {0x2887357b, L"iacute", 237}, - {0x2994d5ff, L"frac12", 189}, {0x2994d601, L"frac14", 188}, - {0x2994e043, L"frac34", 190}, {0x2a1feb41, L"lambda", 955}, - {0x2ab215f3, L"apos", 39}, {0x2ab82ef7, L"eacute", 233}, - {0x2b3592ef, L"auml", 228}, {0x2ce92873, L"aacute", 225}, - {0x2daff48a, L"oslash", 248}, {0x2ef68882, L"aelig", 230}, - {0x3061d3d3, L"Atilde", 195}, {0x314b1b6b, L"Yacute", 221}, - {0x337c14e7, L"Uacute", 218}, {0x37676aca, L"cent", 162}, - {0x37d0b841, L"circ", 710}, {0x386e7947, L"cong", 8773}, - {0x386e839b, L"copy", 169}, {0x3a0e225a, L"Epsilon", 917}, - {0x3ba7b721, L"Lambda", 923}, {0x3bd9abe6, L"Alpha", 913}, - {0x3c3ffad7, L"Eacute", 201}, {0x3cfaf69f, L"brvbar", 166}, - {0x3d54a489, L"omega", 969}, {0x3e70f453, L"Aacute", 193}, - {0x3f37c06a, L"Oslash", 216}, {0x40e1b34e, L"diams", 9830}, - {0x416596df, L"plusmn", 177}, {0x4354ff16, L"Ucirc", 219}, - {0x454fce6a, L"Upsilon", 933}, {0x4610ad35, L"emsp", 8195}, - {0x462afb76, L"ensp", 8194}, {0x46e30073, L"euml", 235}, - {0x46e31a1b, L"euro", 8364}, {0x46f2eada, L"lowast", 8727}, - {0x4dca26cf, L"Auml", 196}, {0x4e2d6083, L"image", 8465}, - {0x4f964ee8, L"notin", 8713}, {0x50917a7a, L"epsilon", 949}, - {0x52f9a4cd, L"Kappa", 922}, {0x5496f410, L"Ocirc", 212}, - {0x568cbf34, L"zeta", 950}, {0x57badd20, L"ntilde", 241}, - {0x58662109, L"zwnj", 8204}, {0x5b39870f, L"empty", 8709}, - {0x5bd3268a, L"upsilon", 965}, {0x5e2bf8a3, L"Gamma", 915}, - {0x5f73c13a, L"rsquo", 8217}, {0x61f2bc4d, L"iota", 953}, - {0x625bbcf3, L"isin", 8712}, {0x62906df7, L"iuml", 239}, - {0x64a5cb31, L"Aring", 197}, {0x66f25c4a, L"sbquo", 8218}, - {0x6851ab60, L"spades", 9824}, {0x6942a900, L"Ntilde", 209}, - {0x69779453, L"Euml", 203}, {0x6cda6e23, L"current", 164}, - {0x70b5b634, L"lsquo", 8216}, {0x715a3706, L"Ecirc", 202}, - {0x71e8bf8d, L"tdquo", 8221}, {0x72651431, L"Sigma", 931}, - {0x7569813b, L"iquest", 191}, {0x776a436a, L"equiv", 8801}, - {0x79215314, L"Zeta", 918}, {0x79b81224, L"ograve", 242}, - {0x7c2f8b23, L"macr", 175}, {0x7cdb8502, L"Acirc", 194}, - {0x8185c62e, L"ndash", 8211}, {0x8260364a, L"Delta", 916}, - {0x846619ad, L"mdash", 8212}, {0x8550fb50, L"OElig", 338}, - {0x88eb5b85, L"ldquo", 8220}, {0x8b3fde04, L"Ograve", 210}, - {0x8bc5794b, L"ordf", 170}, {0x8bc57952, L"ordm", 186}, - {0x8c14923d, L"ouml", 246}, {0x8c5a7cd6, L"theta", 952}, - {0x8d61812b, L"thorn", 254}, {0x912b95aa, L"asymp", 8776}, - {0x947faf81, L"middot", 183}, {0x9629202e, L"lfloor", 8970}, - {0x972e9ec1, L"otilde", 245}, {0x9748f231, L"otimes", 8855}, - {0x995f1469, L"Omega", 937}, {0x99eb5349, L"quot", 34}, - {0x9aeb639e, L"hellip", 8230}, {0xa0ae2f86, L"Scaron", 352}, - {0xa4dcb0d5, L"lsaquo", 8249}, {0xa53dbf41, L"oacute", 243}, - {0xa5ae9e7b, L"bdquo", 8222}, {0xa602d7ba, L"sdot", 8901}, - {0xa61ce86f, L"sect", 167}, {0xa6e4c3d7, L"sigmaf", 962}, - {0xa7c1c74f, L"sube", 8838}, {0xa7c20ee9, L"sup1", 185}, - {0xa7c20eea, L"sup2", 178}, {0xa7c20eeb, L"sup3", 179}, - {0xa7c20f1d, L"supe", 8839}, {0xa8b66aa1, L"Otilde", 213}, - {0xad958c42, L"AElig", 198}, {0xaea9261d, L"Ouml", 214}, - {0xb040eafa, L"uArr", 8657}, {0xb07c2e1c, L"beta", 946}, - {0xb220e92f, L"bull", 8226}, {0xb22750c4, L"ccedil", 231}, - {0xb38ab31a, L"uarr", 8593}, {0xb598b683, L"uuml", 252}, - {0xb6c58b21, L"Oacute", 211}, {0xb6d2a617, L"oline", 8254}, - {0xba9fd989, L"dArr", 8659}, {0xbb5ccd41, L"lgrave", 204}, - {0xbd39b44c, L"weierp", 8472}, {0xbde9a1a9, L"darr", 8595}, - {0xc027e329, L"permil", 8240}, {0xc2451389, L"upsih", 978}, - {0xc3af1ca4, L"Ccedil", 199}, {0xcd164249, L"fnof", 402}, - {0xcf6c8467, L"hearts", 9829}, {0xd1228390, L"trade", 8482}, - {0xd1462407, L"yuml", 255}, {0xd2cf2253, L"oplus", 8853}, - {0xd310c1fc, L"Beta", 914}, {0xd59c4d74, L"infin", 8734}, - {0xd64d470d, L"hArr", 8660}, {0xd67d9c75, L"divide", 247}, - {0xd698dd37, L"Omicron", 927}, {0xd82d4a63, L"Uuml", 220}, - {0xd9970f2d, L"harr", 8596}, {0xda91fd99, L"clubs", 9827}, - {0xdbe5bdcc, L"there4", 8756}, {0xdd7671bd, L"prime", 8242}, - {0xdfcf3c06, L"alpha", 945}, {0xe0213063, L"saron", 353}, - {0xe1911d83, L"radic", 8730}, {0xe2e75468, L"raquo", 187}, - {0xe6e27a5e, L"lacute", 205}, {0xe74a8f36, L"ucirc", 251}, - {0xe864ecb6, L"Theta", 920}, {0xecddde5e, L"nabla", 8711}, - {0xed1c3557, L"omicron", 959}, {0xef82228f, L"rceil", 8969}, - {0xf1fab491, L"lArr", 8656}, {0xf3dab7e7, L"Yuml", 376}, - {0xf4294962, L"laquo", 171}, {0xf5446822, L"lang", 9001}, - {0xf5447cb1, L"larr", 8592}, {0xf66e9bea, L"ugrave", 249}, - {0xf6b4ce70, L"lota", 921}, {0xf6ef34ed, L"kappa", 954}, - {0xf72a3a56, L"thinsp", 8201}, {0xf752801a, L"luml", 207}, - {0xf88c8430, L"ocirc", 244}, {0xf9676178, L"frasl", 8260}, - {0xfd01885e, L"igrave", 236}, {0xff3281da, L"egrave", 232}, -}; - -const XFA_FMHtmlReserveCode reservesForEncode[] = { - {34, L"quot"}, {38, L"amp"}, {39, L"apos"}, - {60, L"lt"}, {62, L"gt"}, {160, L"nbsp"}, - {161, L"iexcl"}, {162, L"cent"}, {163, L"pund"}, - {164, L"current"}, {165, L"yen"}, {166, L"brvbar"}, - {167, L"sect"}, {168, L"uml"}, {169, L"copy"}, - {170, L"ordf"}, {171, L"laquo"}, {172, L"not"}, - {173, L"shy"}, {174, L"reg"}, {175, L"macr"}, - {176, L"deg"}, {177, L"plusmn"}, {178, L"sup2"}, - {179, L"sup3"}, {180, L"acute"}, {181, L"micro"}, - {182, L"para"}, {183, L"middot"}, {184, L"cedil"}, - {185, L"sup1"}, {186, L"ordm"}, {187, L"raquo"}, - {188, L"frac14"}, {189, L"frac12"}, {190, L"frac34"}, - {191, L"iquest"}, {192, L"Agrave"}, {193, L"Aacute"}, - {194, L"Acirc"}, {195, L"Atilde"}, {196, L"Auml"}, - {197, L"Aring"}, {198, L"AElig"}, {199, L"Ccedil"}, - {200, L"Egrave"}, {201, L"Eacute"}, {202, L"Ecirc"}, - {203, L"Euml"}, {204, L"lgrave"}, {205, L"lacute"}, - {206, L"lcirc"}, {207, L"luml"}, {208, L"ETH"}, - {209, L"Ntilde"}, {210, L"Ograve"}, {211, L"Oacute"}, - {212, L"Ocirc"}, {213, L"Otilde"}, {214, L"Ouml"}, - {215, L"times"}, {216, L"Oslash"}, {217, L"Ugrave"}, - {218, L"Uacute"}, {219, L"Ucirc"}, {220, L"Uuml"}, - {221, L"Yacute"}, {222, L"THORN"}, {223, L"szlig"}, - {224, L"agrave"}, {225, L"aacute"}, {226, L"acirc"}, - {227, L"atilde"}, {228, L"auml"}, {229, L"aring"}, - {230, L"aelig"}, {231, L"ccedil"}, {232, L"egrave"}, - {233, L"eacute"}, {234, L"ecirc"}, {235, L"euml"}, - {236, L"igrave"}, {237, L"iacute"}, {238, L"icirc"}, - {239, L"iuml"}, {240, L"eth"}, {241, L"ntilde"}, - {242, L"ograve"}, {243, L"oacute"}, {244, L"ocirc"}, - {245, L"otilde"}, {246, L"ouml"}, {247, L"divide"}, - {248, L"oslash"}, {249, L"ugrave"}, {250, L"uacute"}, - {251, L"ucirc"}, {252, L"uuml"}, {253, L"yacute"}, - {254, L"thorn"}, {255, L"yuml"}, {338, L"OElig"}, - {339, L"oelig"}, {352, L"Scaron"}, {353, L"saron"}, - {376, L"Yuml"}, {402, L"fnof"}, {710, L"circ"}, - {732, L"tilde"}, {913, L"Alpha"}, {914, L"Beta"}, - {915, L"Gamma"}, {916, L"Delta"}, {917, L"Epsilon"}, - {918, L"Zeta"}, {919, L"Eta"}, {920, L"Theta"}, - {921, L"lota"}, {922, L"Kappa"}, {923, L"Lambda"}, - {924, L"Mu"}, {925, L"Nu"}, {926, L"Xi"}, - {927, L"Omicron"}, {928, L"Pi"}, {929, L"Rho"}, - {931, L"Sigma"}, {932, L"Tau"}, {933, L"Upsilon"}, - {934, L"Phi"}, {935, L"Chi"}, {936, L"Psi"}, - {937, L"Omega"}, {945, L"alpha"}, {946, L"beta"}, - {947, L"gamma"}, {948, L"delta"}, {949, L"epsilon"}, - {950, L"zeta"}, {951, L"eta"}, {952, L"theta"}, - {953, L"iota"}, {954, L"kappa"}, {955, L"lambda"}, - {956, L"mu"}, {957, L"nu"}, {958, L"xi"}, - {959, L"omicron"}, {960, L"pi"}, {961, L"rho"}, - {962, L"sigmaf"}, {963, L"sigma"}, {964, L"tau"}, - {965, L"upsilon"}, {966, L"phi"}, {967, L"chi"}, - {968, L"psi"}, {969, L"omega"}, {977, L"thetasym"}, - {978, L"upsih"}, {982, L"piv"}, {8194, L"ensp"}, - {8195, L"emsp"}, {8201, L"thinsp"}, {8204, L"zwnj"}, - {8205, L"zwj"}, {8206, L"lrm"}, {8207, L"rlm"}, - {8211, L"ndash"}, {8212, L"mdash"}, {8216, L"lsquo"}, - {8217, L"rsquo"}, {8218, L"sbquo"}, {8220, L"ldquo"}, - {8221, L"tdquo"}, {8222, L"bdquo"}, {8224, L"dagger"}, - {8225, L"Dagger"}, {8226, L"bull"}, {8230, L"hellip"}, - {8240, L"permil"}, {8242, L"prime"}, {8249, L"lsaquo"}, - {8250, L"rsaquo"}, {8254, L"oline"}, {8260, L"frasl"}, - {8364, L"euro"}, {8465, L"image"}, {8472, L"weierp"}, - {8476, L"real"}, {8482, L"trade"}, {8501, L"alefsym"}, - {8592, L"larr"}, {8593, L"uarr"}, {8594, L"rarr"}, - {8595, L"darr"}, {8596, L"harr"}, {8629, L"crarr"}, - {8656, L"lArr"}, {8657, L"uArr"}, {8658, L"rArr"}, - {8659, L"dArr"}, {8660, L"hArr"}, {8704, L"forall"}, - {8706, L"part"}, {8707, L"exist"}, {8709, L"empty"}, - {8711, L"nabla"}, {8712, L"isin"}, {8713, L"notin"}, - {8715, L"ni"}, {8719, L"prod"}, {8721, L"sum"}, - {8722, L"minus"}, {8727, L"lowast"}, {8730, L"radic"}, - {8733, L"prop"}, {8734, L"infin"}, {8736, L"ang"}, - {8743, L"and"}, {8744, L"or"}, {8745, L"cap"}, - {8746, L"cup"}, {8747, L"int"}, {8756, L"there4"}, - {8764, L"sim"}, {8773, L"cong"}, {8776, L"asymp"}, - {8800, L"ne"}, {8801, L"equiv"}, {8804, L"le"}, - {8805, L"ge"}, {8834, L"sub"}, {8835, L"sup"}, - {8836, L"nsub"}, {8838, L"sube"}, {8839, L"supe"}, - {8853, L"oplus"}, {8855, L"otimes"}, {8869, L"perp"}, - {8901, L"sdot"}, {8968, L"lceil"}, {8969, L"rceil"}, - {8970, L"lfloor"}, {8971, L"rfloor"}, {9001, L"lang"}, - {9002, L"rang"}, {9674, L"loz"}, {9824, L"spades"}, - {9827, L"clubs"}, {9829, L"hearts"}, {9830, L"diams"}, -}; - -} // namespace - -void CXFA_FM2JSContext::Abs(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - if (args.GetLength() == 1) { - FXJSE_HVALUE argOne = args.GetValue(0); - if (HValueIsNull(hThis, argOne)) { - FXJSE_Value_SetNull(args.GetReturnValue()); - } else { - FX_DOUBLE dValue = HValueToDouble(hThis, argOne); - if (dValue < 0) { - dValue = -dValue; - } - FXJSE_Value_SetDouble(args.GetReturnValue(), dValue); - } - FXJSE_Value_Release(argOne); - } else { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"Abs"); - } -} -void CXFA_FM2JSContext::Avg(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - FXJSE_HRUNTIME hruntime = pContext->GetScriptRuntime(); - int32_t argc = args.GetLength(); - uint32_t uCount = 0; - FX_DOUBLE dSum = 0.0; - if (argc >= 1) { - FXJSE_HVALUE argValue = 0; - for (int32_t i = 0; i < argc; i++) { - argValue = args.GetValue(i); - if (FXJSE_Value_IsNull(argValue)) { - FXJSE_Value_Release(argValue); - continue; - } else if (FXJSE_Value_IsArray(argValue)) { - FXJSE_HVALUE lengthValue = FXJSE_Value_Create(hruntime); - FXJSE_Value_GetObjectProp(argValue, "length", lengthValue); - int32_t iLength = FXJSE_Value_ToInteger(lengthValue); - FXJSE_Value_Release(lengthValue); - if (iLength > 2) { - FXJSE_HVALUE propertyValue = FXJSE_Value_Create(hruntime); - FXJSE_Value_GetObjectPropByIdx(argValue, 1, propertyValue); - FXJSE_HVALUE jsObjectValue = FXJSE_Value_Create(hruntime); - if (FXJSE_Value_IsNull(propertyValue)) { - for (int32_t j = 2; j < iLength; j++) { - FXJSE_Value_GetObjectPropByIdx(argValue, j, jsObjectValue); - FXJSE_HVALUE defaultPropValue = FXJSE_Value_Create(hruntime); - GetObjectDefaultValue(jsObjectValue, defaultPropValue); - if (!FXJSE_Value_IsNull(defaultPropValue)) { - dSum += HValueToDouble(hThis, defaultPropValue); - uCount++; - } - FXJSE_Value_Release(defaultPropValue); - } - } else { - CFX_ByteString propertyStr; - FXJSE_Value_ToUTF8String(propertyValue, propertyStr); - FXJSE_HVALUE newPropertyValue = FXJSE_Value_Create(hruntime); - for (int32_t j = 2; j < iLength; j++) { - FXJSE_Value_GetObjectPropByIdx(argValue, j, jsObjectValue); - FXJSE_Value_GetObjectProp(jsObjectValue, propertyStr, - newPropertyValue); - if (!FXJSE_Value_IsNull(newPropertyValue)) { - dSum += HValueToDouble(hThis, newPropertyValue); - uCount++; - } - } - FXJSE_Value_Release(newPropertyValue); - } - FXJSE_Value_Release(jsObjectValue); - FXJSE_Value_Release(propertyValue); - } - } else { - dSum += HValueToDouble(hThis, argValue); - uCount++; - } - FXJSE_Value_Release(argValue); - } - argValue = 0; - } - if (0 == uCount) { - FXJSE_Value_SetNull(args.GetReturnValue()); - } else { - FXJSE_Value_SetDouble(args.GetReturnValue(), dSum / uCount); - } -} -void CXFA_FM2JSContext::Ceil(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - if (args.GetLength() == 1) { - FXJSE_HVALUE argValue = GetSimpleHValue(hThis, args, 0); - if (HValueIsNull(hThis, argValue)) { - FXJSE_Value_SetNull(args.GetReturnValue()); - } else { - FXJSE_Value_SetFloat(args.GetReturnValue(), - FXSYS_ceil(HValueToFloat(hThis, argValue))); - } - FXJSE_Value_Release(argValue); - } else { - pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"Ceil"); - } -} -void CXFA_FM2JSContext::Count(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - FXJSE_HRUNTIME hruntime = pContext->GetScriptRuntime(); - int32_t argc = args.GetLength(); - uint32_t uCount = 0; - FXJSE_HVALUE argValue = 0; - for (int32_t i = 0; i < argc; i++) { - argValue = args.GetValue(i); - if (FXJSE_Value_IsNull(argValue)) { - FXJSE_Value_Release(argValue); - continue; - } else if (FXJSE_Value_IsArray(argValue)) { - FXJSE_HVALUE lengthValue = FXJSE_Value_Create(hruntime); - FXJSE_Value_GetObjectProp(argValue, "length", lengthValue); - int32_t iLength = FXJSE_Value_ToInteger(lengthValue); - FXJSE_Value_Release(lengthValue); - if (iLength > 2) { - FXJSE_HVALUE propertyValue = FXJSE_Value_Create(hruntime); - FXJSE_HVALUE jsObjectValue = FXJSE_Value_Create(hruntime); - FXJSE_HVALUE newPropertyValue = FXJSE_Value_Create(hruntime); - FXJSE_Value_GetObjectPropByIdx(argValue, 1, propertyValue); - FXJSE_Value_GetObjectPropByIdx(argValue, 2, jsObjectValue); - if (FXJSE_Value_IsNull(propertyValue)) { - for (int32_t i = 2; i < iLength; i++) { - FXJSE_Value_GetObjectPropByIdx(argValue, i, jsObjectValue); - GetObjectDefaultValue(jsObjectValue, newPropertyValue); - if (!FXJSE_Value_IsNull(newPropertyValue)) { - uCount++; - } - } - } else { - CFX_ByteString propertyStr; - FXJSE_Value_ToUTF8String(propertyValue, propertyStr); - for (int32_t i = 2; i < iLength; i++) { - FXJSE_Value_GetObjectPropByIdx(argValue, i, jsObjectValue); - FXJSE_Value_GetObjectProp(jsObjectValue, propertyStr, - newPropertyValue); - uCount += (FXJSE_Value_IsNull(newPropertyValue) ? 0 : 1); - } - } - FXJSE_Value_Release(propertyValue); - FXJSE_Value_Release(jsObjectValue); - FXJSE_Value_Release(newPropertyValue); - } else { - pContext->ThrowScriptErrorMessage(XFA_IDS_ARGUMENT_MISMATCH); - } - } else if (FXJSE_Value_IsObject(argValue)) { - FXJSE_HVALUE newPropertyValue = FXJSE_Value_Create(hruntime); - GetObjectDefaultValue(argValue, newPropertyValue); - if (!FXJSE_Value_IsNull(newPropertyValue)) { - uCount++; - } - FXJSE_Value_Release(newPropertyValue); - } else { - uCount++; - } - FXJSE_Value_Release(argValue); - } - argValue = 0; - FXJSE_Value_SetInteger(args.GetReturnValue(), (int32_t)uCount); -} -void CXFA_FM2JSContext::Floor(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - if (args.GetLength() == 1) { - FXJSE_HVALUE argValue = GetSimpleHValue(hThis, args, 0); - if (HValueIsNull(hThis, argValue)) { - FXJSE_Value_SetNull(args.GetReturnValue()); - } else { - FXJSE_Value_SetFloat(args.GetReturnValue(), - FXSYS_floor(HValueToFloat(hThis, argValue))); - } - FXJSE_Value_Release(argValue); - } else { - pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"Floor"); - } -} -void CXFA_FM2JSContext::Max(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - FXJSE_HRUNTIME hruntime = pContext->GetScriptRuntime(); - int32_t argc = args.GetLength(); - uint32_t uCount = 0; - FX_DOUBLE dMaxValue = 0.0; - FXJSE_HVALUE argValue = 0; - for (int32_t i = 0; i < argc; i++) { - argValue = args.GetValue(i); - if (FXJSE_Value_IsNull(argValue)) { - FXJSE_Value_Release(argValue); - continue; - } else if (FXJSE_Value_IsArray(argValue)) { - FXJSE_HVALUE lengthValue = FXJSE_Value_Create(hruntime); - FXJSE_Value_GetObjectProp(argValue, "length", lengthValue); - int32_t iLength = FXJSE_Value_ToInteger(lengthValue); - FXJSE_Value_Release(lengthValue); - if (iLength > 2) { - FXJSE_HVALUE propertyValue = FXJSE_Value_Create(hruntime); - FXJSE_HVALUE jsObjectValue = FXJSE_Value_Create(hruntime); - FXJSE_HVALUE newPropertyValue = FXJSE_Value_Create(hruntime); - FXJSE_Value_GetObjectPropByIdx(argValue, 1, propertyValue); - FXJSE_Value_GetObjectPropByIdx(argValue, 2, jsObjectValue); - if (FXJSE_Value_IsNull(propertyValue)) { - for (int32_t i = 2; i < iLength; i++) { - FXJSE_Value_GetObjectPropByIdx(argValue, i, jsObjectValue); - GetObjectDefaultValue(jsObjectValue, newPropertyValue); - if (!FXJSE_Value_IsNull(newPropertyValue)) { - uCount++; - if (uCount == 1) { - dMaxValue = HValueToDouble(hThis, newPropertyValue); - } else { - FX_DOUBLE dValue = HValueToDouble(hThis, newPropertyValue); - if (dMaxValue < dValue) { - dMaxValue = dValue; - } - } - } - } - } else { - CFX_ByteString propertyStr; - FXJSE_Value_ToUTF8String(propertyValue, propertyStr); - for (int32_t i = 2; i < iLength; i++) { - FXJSE_Value_GetObjectPropByIdx(argValue, i, jsObjectValue); - FXJSE_Value_GetObjectProp(jsObjectValue, propertyStr, - newPropertyValue); - if (!FXJSE_Value_IsNull(newPropertyValue)) { - uCount++; - if (uCount == 1) { - dMaxValue = HValueToDouble(hThis, newPropertyValue); - } else { - FX_DOUBLE dValue = HValueToDouble(hThis, newPropertyValue); - if (dMaxValue < dValue) { - dMaxValue = dValue; - } - } - } - } - } - FXJSE_Value_Release(propertyValue); - FXJSE_Value_Release(jsObjectValue); - FXJSE_Value_Release(newPropertyValue); - } else { - pContext->ThrowScriptErrorMessage(XFA_IDS_ARGUMENT_MISMATCH); - } - } else if (FXJSE_Value_IsObject(argValue)) { - FXJSE_HVALUE newPropertyValue = FXJSE_Value_Create(hruntime); - GetObjectDefaultValue(argValue, newPropertyValue); - if (!FXJSE_Value_IsNull(newPropertyValue)) { - uCount++; - if (uCount == 1) { - dMaxValue = HValueToDouble(hThis, newPropertyValue); - } else { - FX_DOUBLE dValue = HValueToDouble(hThis, newPropertyValue); - if (dMaxValue < dValue) { - dMaxValue = dValue; - } - } - } - FXJSE_Value_Release(newPropertyValue); - } else { - uCount++; - if (uCount == 1) { - dMaxValue = HValueToDouble(hThis, argValue); - } else { - FX_DOUBLE dValue = HValueToDouble(hThis, argValue); - if (dMaxValue < dValue) { - dMaxValue = dValue; - } - } - } - FXJSE_Value_Release(argValue); - } - argValue = 0; - if (uCount) { - FXJSE_Value_SetDouble(args.GetReturnValue(), dMaxValue); - } else { - FXJSE_Value_SetNull(args.GetReturnValue()); - } -} -void CXFA_FM2JSContext::Min(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - FXJSE_HRUNTIME hruntime = pContext->GetScriptRuntime(); - int32_t argc = args.GetLength(); - uint32_t uCount = 0; - FX_DOUBLE dMinValue = 0.0; - FXJSE_HVALUE argValue = 0; - for (int32_t i = 0; i < argc; i++) { - argValue = args.GetValue(i); - if (FXJSE_Value_IsNull(argValue)) { - FXJSE_Value_Release(argValue); - continue; - } else if (FXJSE_Value_IsArray(argValue)) { - FXJSE_HVALUE lengthValue = FXJSE_Value_Create(hruntime); - FXJSE_Value_GetObjectProp(argValue, "length", lengthValue); - int32_t iLength = FXJSE_Value_ToInteger(lengthValue); - FXJSE_Value_Release(lengthValue); - if (iLength > 2) { - FXJSE_HVALUE propertyValue = FXJSE_Value_Create(hruntime); - FXJSE_HVALUE jsObjectValue = FXJSE_Value_Create(hruntime); - FXJSE_HVALUE newPropertyValue = FXJSE_Value_Create(hruntime); - FXJSE_Value_GetObjectPropByIdx(argValue, 1, propertyValue); - FXJSE_Value_GetObjectPropByIdx(argValue, 2, jsObjectValue); - if (FXJSE_Value_IsNull(propertyValue)) { - for (int32_t i = 2; i < iLength; i++) { - FXJSE_Value_GetObjectPropByIdx(argValue, i, jsObjectValue); - GetObjectDefaultValue(jsObjectValue, newPropertyValue); - if (!FXJSE_Value_IsNull(newPropertyValue)) { - uCount++; - if (uCount == 1) { - dMinValue = HValueToDouble(hThis, newPropertyValue); - } else { - FX_DOUBLE dValue = HValueToDouble(hThis, newPropertyValue); - if (dMinValue > dValue) { - dMinValue = dValue; - } - } - } - } - } else { - CFX_ByteString propertyStr; - FXJSE_Value_ToUTF8String(propertyValue, propertyStr); - for (int32_t i = 2; i < iLength; i++) { - FXJSE_Value_GetObjectPropByIdx(argValue, i, jsObjectValue); - FXJSE_Value_GetObjectProp(jsObjectValue, propertyStr, - newPropertyValue); - if (!FXJSE_Value_IsNull(newPropertyValue)) { - uCount++; - if (uCount == 1) { - dMinValue = HValueToDouble(hThis, newPropertyValue); - } else { - FX_DOUBLE dValue = HValueToDouble(hThis, newPropertyValue); - if (dMinValue > dValue) { - dMinValue = dValue; - } - } - } - } - } - FXJSE_Value_Release(propertyValue); - FXJSE_Value_Release(jsObjectValue); - FXJSE_Value_Release(newPropertyValue); - } else { - pContext->ThrowScriptErrorMessage(XFA_IDS_ARGUMENT_MISMATCH); - } - } else if (FXJSE_Value_IsObject(argValue)) { - FXJSE_HVALUE newPropertyValue = FXJSE_Value_Create(hruntime); - GetObjectDefaultValue(argValue, newPropertyValue); - if (!FXJSE_Value_IsNull(newPropertyValue)) { - uCount++; - if (uCount == 1) { - dMinValue = HValueToDouble(hThis, newPropertyValue); - } else { - FX_DOUBLE dValue = HValueToDouble(hThis, newPropertyValue); - if (dMinValue > dValue) { - dMinValue = dValue; - } - } - } - FXJSE_Value_Release(newPropertyValue); - } else { - uCount++; - if (uCount == 1) { - dMinValue = HValueToDouble(hThis, argValue); - } else { - FX_DOUBLE dValue = HValueToDouble(hThis, argValue); - if (dMinValue > dValue) { - dMinValue = dValue; - } - } - } - FXJSE_Value_Release(argValue); - } - argValue = 0; - if (uCount) { - FXJSE_Value_SetDouble(args.GetReturnValue(), dMinValue); - } else { - FXJSE_Value_SetNull(args.GetReturnValue()); - } -} -void CXFA_FM2JSContext::Mod(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - FXJSE_HRUNTIME hruntime = pContext->GetScriptRuntime(); - if (args.GetLength() == 2) { - FXJSE_HVALUE argOne = args.GetValue(0); - FXJSE_HVALUE argTwo = args.GetValue(1); - if (FXJSE_Value_IsNull(argOne) || FXJSE_Value_IsNull(argTwo)) { - FXJSE_Value_SetNull(args.GetReturnValue()); - } else { - FX_DOUBLE dDividend = 0.0; - FX_DOUBLE dDividor = 0.0; - if (FXJSE_Value_IsArray(argOne)) { - FXJSE_HVALUE lengthValue = FXJSE_Value_Create(hruntime); - FXJSE_Value_GetObjectProp(argOne, "length", lengthValue); - int32_t iLength = FXJSE_Value_ToInteger(lengthValue); - FXJSE_Value_Release(lengthValue); - if (iLength > 2) { - FXJSE_HVALUE propertyValue = FXJSE_Value_Create(hruntime); - FXJSE_HVALUE jsObjectValue = FXJSE_Value_Create(hruntime); - FXJSE_Value_GetObjectPropByIdx(argOne, 1, propertyValue); - FXJSE_Value_GetObjectPropByIdx(argOne, 2, jsObjectValue); - if (FXJSE_Value_IsNull(propertyValue)) { - dDividend = HValueToDouble(hThis, jsObjectValue); - } else { - CFX_ByteString propertyStr; - FXJSE_Value_ToUTF8String(propertyValue, propertyStr); - FXJSE_HVALUE newPropertyValue = FXJSE_Value_Create(hruntime); - FXJSE_Value_GetObjectProp(jsObjectValue, propertyStr, - newPropertyValue); - dDividend = HValueToDouble(hThis, newPropertyValue); - FXJSE_Value_Release(newPropertyValue); - } - FXJSE_Value_Release(propertyValue); - FXJSE_Value_Release(jsObjectValue); - } else { - pContext->ThrowScriptErrorMessage(XFA_IDS_ARGUMENT_MISMATCH); - } - } else { - dDividend = HValueToDouble(hThis, argOne); - } - if (FXJSE_Value_IsArray(argTwo)) { - FXJSE_HVALUE lengthValue = FXJSE_Value_Create(hruntime); - FXJSE_Value_GetObjectProp(argTwo, "length", lengthValue); - int32_t iLength = FXJSE_Value_ToInteger(lengthValue); - FXJSE_Value_Release(lengthValue); - if (iLength > 2) { - FXJSE_HVALUE propertyValue = FXJSE_Value_Create(hruntime); - FXJSE_HVALUE jsObjectValue = FXJSE_Value_Create(hruntime); - FXJSE_Value_GetObjectPropByIdx(argTwo, 1, propertyValue); - FXJSE_Value_GetObjectPropByIdx(argTwo, 2, jsObjectValue); - if (FXJSE_Value_IsNull(propertyValue)) { - dDividor = HValueToDouble(hThis, jsObjectValue); - } else { - CFX_ByteString propertyStr; - FXJSE_Value_ToUTF8String(propertyValue, propertyStr); - FXJSE_HVALUE newPropertyValue = FXJSE_Value_Create(hruntime); - FXJSE_Value_GetObjectProp(jsObjectValue, propertyStr, - newPropertyValue); - dDividor = HValueToDouble(hThis, newPropertyValue); - FXJSE_Value_Release(newPropertyValue); - } - FXJSE_Value_Release(propertyValue); - FXJSE_Value_Release(jsObjectValue); - } else { - pContext->ThrowScriptErrorMessage(XFA_IDS_ARGUMENT_MISMATCH); - } - } else { - dDividor = HValueToDouble(hThis, argTwo); - } - if (dDividor) { - FXJSE_Value_SetDouble( - args.GetReturnValue(), - dDividend - dDividor * (int32_t)(dDividend / dDividor)); - } else { - pContext->ThrowScriptErrorMessage(XFA_IDS_DIVIDE_ZERO); - } - } - FXJSE_Value_Release(argOne); - FXJSE_Value_Release(argTwo); - } else { - pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"Mod"); - } -} -void CXFA_FM2JSContext::Round(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - FXJSE_HRUNTIME hruntime = pContext->GetScriptRuntime(); - int32_t argc = args.GetLength(); - uint8_t uPrecision = 0; - if (argc == 1) { - FXJSE_HVALUE argOne = args.GetValue(0); - if (FXJSE_Value_IsNull(argOne)) { - FXJSE_Value_SetNull(args.GetReturnValue()); - } else { - FX_DOUBLE dValue = 0.0; - if (FXJSE_Value_IsArray(argOne)) { - FXJSE_HVALUE propertyValue = FXJSE_Value_Create(hruntime); - FXJSE_HVALUE jsObjectValue = FXJSE_Value_Create(hruntime); - FXJSE_Value_GetObjectPropByIdx(argOne, 1, propertyValue); - FXJSE_Value_GetObjectPropByIdx(argOne, 2, jsObjectValue); - if (FXJSE_Value_IsNull(propertyValue)) { - dValue = HValueToDouble(hThis, jsObjectValue); - } else { - CFX_ByteString propertyStr; - FXJSE_Value_ToUTF8String(propertyValue, propertyStr); - FXJSE_HVALUE newPropertyValue = FXJSE_Value_Create(hruntime); - FXJSE_Value_GetObjectProp(jsObjectValue, propertyStr, - newPropertyValue); - dValue = HValueToDouble(hThis, newPropertyValue); - FXJSE_Value_Release(newPropertyValue); - } - FXJSE_Value_Release(propertyValue); - FXJSE_Value_Release(jsObjectValue); - } else { - dValue = HValueToDouble(hThis, argOne); - } - CFX_Decimal decimalValue((FX_FLOAT)dValue, uPrecision); - CFX_WideString wsValue = decimalValue; - FXJSE_Value_SetUTF8String(args.GetReturnValue(), wsValue.UTF8Encode()); - } - FXJSE_Value_Release(argOne); - } else if (argc == 2) { - FXJSE_HVALUE argOne = args.GetValue(0); - FXJSE_HVALUE argTwo = args.GetValue(1); - if (FXJSE_Value_IsNull(argOne) || FXJSE_Value_IsNull(argTwo)) { - FXJSE_Value_SetNull(args.GetReturnValue()); - } else { - FX_DOUBLE dValue = 0.0; - if (FXJSE_Value_IsArray(argOne)) { - FXJSE_HVALUE propertyValue = FXJSE_Value_Create(hruntime); - FXJSE_HVALUE jsObjectValue = FXJSE_Value_Create(hruntime); - FXJSE_Value_GetObjectPropByIdx(argOne, 1, propertyValue); - FXJSE_Value_GetObjectPropByIdx(argOne, 2, jsObjectValue); - if (FXJSE_Value_IsNull(propertyValue)) { - dValue = HValueToDouble(hThis, jsObjectValue); - } else { - CFX_ByteString propertyStr; - FXJSE_Value_ToUTF8String(propertyValue, propertyStr); - FXJSE_HVALUE newPropertyValue = FXJSE_Value_Create(hruntime); - FXJSE_Value_GetObjectProp(jsObjectValue, propertyStr, - newPropertyValue); - dValue = HValueToDouble(hThis, newPropertyValue); - FXJSE_Value_Release(newPropertyValue); - } - FXJSE_Value_Release(propertyValue); - FXJSE_Value_Release(jsObjectValue); - } else { - dValue = HValueToDouble(hThis, argOne); - } - FX_DOUBLE dPrecision = 0.0; - if (FXJSE_Value_IsArray(argTwo)) { - FXJSE_HVALUE propertyValue = FXJSE_Value_Create(hruntime); - FXJSE_HVALUE jsObjectValue = FXJSE_Value_Create(hruntime); - FXJSE_Value_GetObjectPropByIdx(argTwo, 1, propertyValue); - FXJSE_Value_GetObjectPropByIdx(argTwo, 2, jsObjectValue); - if (FXJSE_Value_IsNull(propertyValue)) { - dPrecision = HValueToDouble(hThis, jsObjectValue); - } else { - CFX_ByteString propertyStr; - FXJSE_Value_ToUTF8String(propertyValue, propertyStr); - FXJSE_HVALUE newPropertyValue = FXJSE_Value_Create(hruntime); - FXJSE_Value_GetObjectProp(jsObjectValue, propertyStr, - newPropertyValue); - dPrecision = HValueToDouble(hThis, newPropertyValue); - FXJSE_Value_Release(newPropertyValue); - } - FXJSE_Value_Release(propertyValue); - FXJSE_Value_Release(jsObjectValue); - } else { - dPrecision = HValueToDouble(hThis, argTwo); - } - if (dPrecision < 0) { - uPrecision = 0; - } else if (dPrecision > 12.0) { - uPrecision = 12; - } else { - uPrecision = (uint8_t)dPrecision; - } - CFX_Decimal decimalValue((FX_FLOAT)dValue, uPrecision); - CFX_WideString wsValue = decimalValue; - FXJSE_Value_SetUTF8String(args.GetReturnValue(), wsValue.UTF8Encode()); - } - FXJSE_Value_Release(argOne); - FXJSE_Value_Release(argTwo); - } else { - pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"Round"); - } -} -void CXFA_FM2JSContext::Sum(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - FXJSE_HRUNTIME hruntime = pContext->GetScriptRuntime(); - int32_t argc = args.GetLength(); - uint32_t uCount = 0; - FX_DOUBLE dSum = 0.0; - if (argc) { - FXJSE_HVALUE argValue = 0; - for (int32_t i = 0; i < argc; i++) { - argValue = args.GetValue(i); - if (FXJSE_Value_IsNull(argValue)) { - FXJSE_Value_Release(argValue); - continue; - } else if (FXJSE_Value_IsArray(argValue)) { - FXJSE_HVALUE lengthValue = FXJSE_Value_Create(hruntime); - FXJSE_Value_GetObjectProp(argValue, "length", lengthValue); - int32_t iLength = FXJSE_Value_ToInteger(lengthValue); - FXJSE_Value_Release(lengthValue); - if (iLength > 2) { - FXJSE_HVALUE propertyValue = FXJSE_Value_Create(hruntime); - FXJSE_Value_GetObjectPropByIdx(argValue, 1, propertyValue); - FXJSE_HVALUE jsObjectValue = FXJSE_Value_Create(hruntime); - FXJSE_HVALUE newPropertyValue = FXJSE_Value_Create(hruntime); - if (FXJSE_Value_IsNull(propertyValue)) { - for (int32_t j = 2; j < iLength; j++) { - FXJSE_Value_GetObjectPropByIdx(argValue, j, jsObjectValue); - GetObjectDefaultValue(jsObjectValue, newPropertyValue); - if (!FXJSE_Value_IsNull(newPropertyValue)) { - dSum += HValueToDouble(hThis, jsObjectValue); - uCount++; - } - } - } else { - CFX_ByteString propertyStr; - FXJSE_Value_ToUTF8String(propertyValue, propertyStr); - for (int32_t j = 2; j < iLength; j++) { - FXJSE_Value_GetObjectPropByIdx(argValue, j, jsObjectValue); - FXJSE_Value_GetObjectProp(jsObjectValue, propertyStr, - newPropertyValue); - if (!FXJSE_Value_IsNull(newPropertyValue)) { - dSum += HValueToDouble(hThis, newPropertyValue); - uCount++; - } - } - } - FXJSE_Value_Release(newPropertyValue); - FXJSE_Value_Release(jsObjectValue); - FXJSE_Value_Release(propertyValue); - } else { - pContext->ThrowScriptErrorMessage(XFA_IDS_ARGUMENT_MISMATCH); - } - } else if (FXJSE_Value_IsObject(argValue)) { - FXJSE_HVALUE newPropertyValue = FXJSE_Value_Create(hruntime); - GetObjectDefaultValue(argValue, newPropertyValue); - if (!FXJSE_Value_IsNull(newPropertyValue)) { - dSum += HValueToDouble(hThis, argValue); - uCount++; - } - FXJSE_Value_Release(newPropertyValue); - } else { - dSum += HValueToDouble(hThis, argValue); - uCount++; - } - FXJSE_Value_Release(argValue); - } - argValue = 0; - } - if (uCount < 1) { - FXJSE_Value_SetNull(args.GetReturnValue()); - } else { - FXJSE_Value_SetDouble(args.GetReturnValue(), dSum); - } -} -void CXFA_FM2JSContext::Date(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - if (args.GetLength() == 0) { - struct tm* pTmStruct = 0; - time_t currentTime; - time(¤tTime); - pTmStruct = gmtime(¤tTime); - CFX_ByteString bufferYear; - CFX_ByteString bufferMon; - CFX_ByteString bufferDay; - bufferYear.Format("%d", pTmStruct->tm_year + 1900); - bufferMon.Format("%02d", pTmStruct->tm_mon + 1); - bufferDay.Format("%02d", pTmStruct->tm_mday); - CFX_ByteString bufferCurrent = bufferYear + bufferMon + bufferDay; - int32_t dDays = DateString2Num(bufferCurrent); - FXJSE_Value_SetInteger(args.GetReturnValue(), dDays); - } else { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"Date"); - } -} -void CXFA_FM2JSContext::Date2Num(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - int32_t argc = args.GetLength(); - if ((argc > 0) && (argc < 4)) { - FX_BOOL bFlags = FALSE; - CFX_ByteString dateString; - CFX_ByteString formatString; - CFX_ByteString localString; - FXJSE_HVALUE dateValue = GetSimpleHValue(hThis, args, 0); - FXJSE_HVALUE formatValue = 0; - FXJSE_HVALUE localValue = 0; - if (HValueIsNull(hThis, dateValue)) { - bFlags = TRUE; - } else { - HValueToUTF8String(dateValue, dateString); - } - if (argc > 1) { - formatValue = GetSimpleHValue(hThis, args, 1); - if (HValueIsNull(hThis, formatValue)) { - bFlags = TRUE; - } else { - HValueToUTF8String(formatValue, formatString); - } - } - if (argc == 3) { - localValue = GetSimpleHValue(hThis, args, 2); - if (HValueIsNull(hThis, localValue)) { - bFlags = TRUE; - } else { - HValueToUTF8String(localValue, localString); - } - } - if (!bFlags) { - CFX_ByteString szIsoDateString; - FX_BOOL bRet = Local2IsoDate(hThis, dateString, formatString, localString, - szIsoDateString); - if (bRet) { - FXJSE_Value_SetInteger(args.GetReturnValue(), - DateString2Num(szIsoDateString)); - } else { - FXJSE_Value_SetInteger(args.GetReturnValue(), 0); - } - } else { - FXJSE_Value_SetNull(args.GetReturnValue()); - } - FXJSE_Value_Release(dateValue); - if (argc > 1) { - FXJSE_Value_Release(formatValue); - if (argc == 3) { - FXJSE_Value_Release(localValue); - } - } - } else { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"Date2Num"); - } -} -void CXFA_FM2JSContext::DateFmt(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - int32_t argc = args.GetLength(); - if (argc < 3) { - FX_BOOL bFlags = FALSE; - int32_t iStyle = 0; - CFX_ByteString szLocal; - FXJSE_HVALUE argStyle = 0; - FXJSE_HVALUE argLocal = 0; - if (argc > 0) { - argStyle = GetSimpleHValue(hThis, args, 0); - if (FXJSE_Value_IsNull(argStyle)) { - bFlags = TRUE; - } - iStyle = (int32_t)HValueToFloat(hThis, argStyle); - if (iStyle > 4 || iStyle < 0) { - iStyle = 0; - } - } - if (argc == 2) { - argLocal = GetSimpleHValue(hThis, args, 1); - if (FXJSE_Value_IsNull(argLocal)) { - bFlags = TRUE; - } else { - HValueToUTF8String(argLocal, szLocal); - } - } - if (!bFlags) { - CFX_ByteString formatStr; - GetStandardDateFormat(hThis, iStyle, szLocal, formatStr); - if (formatStr.IsEmpty()) { - formatStr = ""; - } - FXJSE_Value_SetUTF8String(args.GetReturnValue(), formatStr); - } else { - FXJSE_Value_SetNull(args.GetReturnValue()); - } - if (argc > 0) { - FXJSE_Value_Release(argStyle); - if (argc == 2) { - FXJSE_Value_Release(argLocal); - } - } - } else { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"Date2Num"); - } -} -void CXFA_FM2JSContext::IsoDate2Num(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - if (args.GetLength() == 1) { - FXJSE_HVALUE argOne = GetSimpleHValue(hThis, args, 0); - if (FXJSE_Value_IsNull(argOne)) { - FXJSE_Value_SetNull(args.GetReturnValue()); - } else { - CFX_ByteString szArgString; - HValueToUTF8String(argOne, szArgString); - int32_t dDays = DateString2Num(szArgString); - FXJSE_Value_SetInteger(args.GetReturnValue(), (int32_t)dDays); - } - FXJSE_Value_Release(argOne); - } else { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"IsoDate2Num"); - } -} -void CXFA_FM2JSContext::IsoTime2Num(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - if (args.GetLength() == 1) { - FXJSE_HVALUE argOne = GetSimpleHValue(hThis, args, 0); - if (HValueIsNull(hThis, argOne)) { - FXJSE_Value_SetNull(args.GetReturnValue()); - } else { - CXFA_Document* pDoc = pContext->GetDocument(); - FXSYS_assert(pDoc); - IFX_LocaleMgr* pMgr = (IFX_LocaleMgr*)pDoc->GetLocalMgr(); - CFX_ByteString szArgString; - HValueToUTF8String(argOne, szArgString); - szArgString = szArgString.Mid(szArgString.Find('T', 0) + 1); - if (szArgString.IsEmpty()) { - FXJSE_Value_SetInteger(args.GetReturnValue(), 0); - FXJSE_Value_Release(argOne); - return; - } - CXFA_LocaleValue timeValue( - XFA_VT_TIME, - CFX_WideString::FromUTF8(szArgString, szArgString.GetLength()), - (CXFA_LocaleMgr*)pMgr); - if (timeValue.IsValid()) { - CFX_Unitime uniTime = timeValue.GetTime(); - int32_t hour = uniTime.GetHour(); - int32_t min = uniTime.GetMinute(); - int32_t second = uniTime.GetSecond(); - int32_t milSecond = uniTime.GetMillisecond(); - IFX_Locale* pDefLocale = pMgr->GetDefLocale(); - FXSYS_assert(pDefLocale); - FX_TIMEZONE tzLocale; - pDefLocale->GetTimeZone(tzLocale); - int32_t mins = hour * 60 + min; - mins -= (tzLocale.tzHour * 60); - while (mins > 1440) { - mins -= 1440; - } - while (mins < 0) { - mins += 1440; - } - hour = mins / 60; - min = mins % 60; - int32_t iResult = - hour * 3600000 + min * 60000 + second * 1000 + milSecond + 1; - FXJSE_Value_SetInteger(args.GetReturnValue(), iResult); - } else { - FXJSE_Value_SetInteger(args.GetReturnValue(), 0); - } - } - FXJSE_Value_Release(argOne); - } else { - pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"IsoTime2Num"); - } -} -void CXFA_FM2JSContext::LocalDateFmt(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - int32_t argc = args.GetLength(); - if (argc < 3) { - FX_BOOL bFlags = FALSE; - int32_t iStyle = 0; - CFX_ByteString szLocal; - FXJSE_HVALUE argStyle = 0; - FXJSE_HVALUE argLocal = 0; - if (argc > 0) { - argStyle = GetSimpleHValue(hThis, args, 0); - if (FXJSE_Value_IsNull(argStyle)) { - bFlags = TRUE; - } - iStyle = (int32_t)HValueToFloat(hThis, argStyle); - if (iStyle > 4 || iStyle < 0) { - iStyle = 0; - } - } - if (argc == 2) { - argLocal = GetSimpleHValue(hThis, args, 1); - if (FXJSE_Value_IsNull(argLocal)) { - bFlags = TRUE; - } else { - HValueToUTF8String(argLocal, szLocal); - } - } - if (!bFlags) { - CFX_ByteString formatStr; - GetLocalDateFormat(hThis, iStyle, szLocal, formatStr, FALSE); - if (formatStr.IsEmpty()) { - formatStr = ""; - } - FXJSE_Value_SetUTF8String(args.GetReturnValue(), formatStr); - } else { - FXJSE_Value_SetNull(args.GetReturnValue()); - } - if (argc > 0) { - FXJSE_Value_Release(argStyle); - if (argc == 2) { - FXJSE_Value_Release(argLocal); - } - } - } else { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"LocalDateFmt"); - } -} -void CXFA_FM2JSContext::LocalTimeFmt(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - int32_t argc = args.GetLength(); - if (argc < 3) { - FX_BOOL bFlags = FALSE; - int32_t iStyle = 0; - CFX_ByteString szLocal; - FXJSE_HVALUE argStyle = 0; - FXJSE_HVALUE argLocal = 0; - if (argc > 0) { - argStyle = GetSimpleHValue(hThis, args, 0); - if (FXJSE_Value_IsNull(argStyle)) { - bFlags = TRUE; - } - iStyle = (int32_t)HValueToFloat(hThis, argStyle); - if (iStyle > 4 || iStyle < 0) { - iStyle = 0; - } - } - if (argc == 2) { - argLocal = GetSimpleHValue(hThis, args, 1); - if (FXJSE_Value_IsNull(argLocal)) { - bFlags = TRUE; - } else { - HValueToUTF8String(argLocal, szLocal); - } - } - if (!bFlags) { - CFX_ByteString formatStr; - GetLocalTimeFormat(hThis, iStyle, szLocal, formatStr, FALSE); - if (formatStr.IsEmpty()) { - formatStr = ""; - } - FXJSE_Value_SetUTF8String(args.GetReturnValue(), formatStr); - } else { - FXJSE_Value_SetNull(args.GetReturnValue()); - } - if (argc > 0) { - FXJSE_Value_Release(argStyle); - if (argc == 2) { - FXJSE_Value_Release(argLocal); - } - } - } else { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"LocalTimeFmt"); - } -} -void CXFA_FM2JSContext::Num2Date(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - int32_t argc = args.GetLength(); - if ((argc > 0) && (argc < 4)) { - FX_BOOL bFlags = FALSE; - int32_t dDate; - CFX_ByteString formatString; - CFX_ByteString localString; - FXJSE_HVALUE dateValue = GetSimpleHValue(hThis, args, 0); - FXJSE_HVALUE formatValue = 0; - FXJSE_HVALUE localValue = 0; - if (HValueIsNull(hThis, dateValue)) { - bFlags = TRUE; - } else { - dDate = (int32_t)HValueToFloat(hThis, dateValue); - bFlags = dDate < 1; - } - if (argc > 1) { - formatValue = GetSimpleHValue(hThis, args, 1); - if (HValueIsNull(hThis, formatValue)) { - bFlags = TRUE; - } else { - HValueToUTF8String(formatValue, formatString); - } - } - if (argc == 3) { - localValue = GetSimpleHValue(hThis, args, 2); - if (HValueIsNull(hThis, localValue)) { - bFlags = TRUE; - } else { - HValueToUTF8String(localValue, localString); - } - } - if (!bFlags) { - int32_t iYear = 1900; - int32_t iMonth = 1; - int32_t iDay = 1; - int32_t i = 0; - while (dDate > 0) { - if (iMonth == 2) { - if ((!((iYear + i) % 4) && ((iYear + i) % 100)) || - !((iYear + i) % 400)) { - if (dDate > 29) { - ++iMonth; - if (iMonth > 12) { - iMonth = 1; - ++i; - } - iDay = 1; - dDate -= 29; - } else { - iDay += static_cast(dDate) - 1; - dDate = 0; - } - } else { - if (dDate > 28) { - ++iMonth; - if (iMonth > 12) { - iMonth = 1; - ++i; - } - iDay = 1; - dDate -= 28; - } else { - iDay += static_cast(dDate) - 1; - dDate = 0; - } - } - } else if (iMonth < 8) { - if ((iMonth % 2 == 0)) { - if (dDate > 30) { - ++iMonth; - if (iMonth > 12) { - iMonth = 1; - ++i; - } - iDay = 1; - dDate -= 30; - } else { - iDay += static_cast(dDate) - 1; - dDate = 0; - } - } else { - if (dDate > 31) { - ++iMonth; - if (iMonth > 12) { - iMonth = 1; - ++i; - } - iDay = 1; - dDate -= 31; - } else { - iDay += static_cast(dDate) - 1; - dDate = 0; - } - } - } else { - if (iMonth % 2 != 0) { - if (dDate > 30) { - ++iMonth; - if (iMonth > 12) { - iMonth = 1; - ++i; - } - iDay = 1; - dDate -= 30; - } else { - iDay += static_cast(dDate) - 1; - dDate = 0; - } - } else { - if (dDate > 31) { - ++iMonth; - if (iMonth > 12) { - iMonth = 1; - ++i; - } - iDay = 1; - dDate -= 31; - } else { - iDay += static_cast(dDate) - 1; - dDate = 0; - } - } - } - } - CFX_ByteString szIsoDateString; - szIsoDateString.Format("%d%02d%02d", iYear + i, iMonth, iDay); - CFX_ByteString szLocalDateString; - IsoDate2Local(hThis, szIsoDateString, formatString, localString, - szLocalDateString); - if (szLocalDateString.IsEmpty()) { - szLocalDateString = ""; - } - FXJSE_Value_SetUTF8String(args.GetReturnValue(), szLocalDateString); - } else { - FXJSE_Value_SetNull(args.GetReturnValue()); - } - FXJSE_Value_Release(dateValue); - if (argc > 1) { - FXJSE_Value_Release(formatValue); - if (argc == 3) { - FXJSE_Value_Release(localValue); - } - } - } else { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"Num2Date"); - } -} -void CXFA_FM2JSContext::Num2GMTime(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - int32_t argc = args.GetLength(); - if ((argc > 0) && (argc < 4)) { - FX_BOOL bFlags = FALSE; - int32_t iTime; - CFX_ByteString formatString; - CFX_ByteString localString; - FXJSE_HVALUE timeValue = GetSimpleHValue(hThis, args, 0); - FXJSE_HVALUE formatValue = 0; - FXJSE_HVALUE localValue = 0; - if (FXJSE_Value_IsNull(timeValue)) { - bFlags = TRUE; - } else { - iTime = (int32_t)HValueToFloat(hThis, timeValue); - if (FXSYS_abs(iTime) < 1.0) { - bFlags = TRUE; - } - } - if (argc > 1) { - formatValue = GetSimpleHValue(hThis, args, 1); - if (FXJSE_Value_IsNull(formatValue)) { - bFlags = TRUE; - } else { - HValueToUTF8String(formatValue, formatString); - } - } - if (argc == 3) { - localValue = GetSimpleHValue(hThis, args, 2); - if (FXJSE_Value_IsNull(localValue)) { - bFlags = TRUE; - } else { - HValueToUTF8String(localValue, localString); - } - } - if (!bFlags) { - CFX_ByteString szGMTTimeString; - Num2AllTime(hThis, iTime, formatString, localString, TRUE, - szGMTTimeString); - if (szGMTTimeString.IsEmpty()) { - szGMTTimeString = ""; - } - FXJSE_Value_SetUTF8String(args.GetReturnValue(), szGMTTimeString); - } else { - FXJSE_Value_SetNull(args.GetReturnValue()); - } - FXJSE_Value_Release(timeValue); - if (argc > 1) { - FXJSE_Value_Release(formatValue); - if (argc == 3) { - FXJSE_Value_Release(localValue); - } - } - } else { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"Num2GMTime"); - } -} -void CXFA_FM2JSContext::Num2Time(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - int32_t argc = args.GetLength(); - if ((argc > 0) && (argc < 4)) { - FX_BOOL bFlags = FALSE; - FX_FLOAT fTime; - CFX_ByteString formatString; - CFX_ByteString localString; - FXJSE_HVALUE timeValue = GetSimpleHValue(hThis, args, 0); - FXJSE_HVALUE formatValue = 0; - FXJSE_HVALUE localValue = 0; - if (FXJSE_Value_IsNull(timeValue)) { - bFlags = TRUE; - } else { - fTime = HValueToFloat(hThis, timeValue); - if (FXSYS_fabs(fTime) < 1.0) { - bFlags = TRUE; - } - } - if (argc > 1) { - formatValue = GetSimpleHValue(hThis, args, 1); - if (FXJSE_Value_IsNull(formatValue)) { - bFlags = TRUE; - } else { - HValueToUTF8String(formatValue, formatString); - } - } - if (argc == 3) { - localValue = GetSimpleHValue(hThis, args, 2); - if (FXJSE_Value_IsNull(localValue)) { - bFlags = TRUE; - } else { - HValueToUTF8String(localValue, localString); - } - } - if (!bFlags) { - CFX_ByteString szLocalTimeString; - Num2AllTime(hThis, (int32_t)fTime, formatString, localString, FALSE, - szLocalTimeString); - if (szLocalTimeString.IsEmpty()) { - szLocalTimeString = ""; - } - FXJSE_Value_SetUTF8String(args.GetReturnValue(), szLocalTimeString); - } else { - FXJSE_Value_SetNull(args.GetReturnValue()); - } - FXJSE_Value_Release(timeValue); - if (argc > 1) { - FXJSE_Value_Release(formatValue); - if (argc == 3) { - FXJSE_Value_Release(localValue); - } - } - } else { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"Num2Time"); - } -} -void CXFA_FM2JSContext::Time(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - if (args.GetLength() == 0) { - time_t now; - time(&now); - struct tm* pGmt = gmtime(&now); - int32_t iGMHour = pGmt->tm_hour; - int32_t iGMMin = pGmt->tm_min; - int32_t iGMSec = pGmt->tm_sec; - FXJSE_Value_SetInteger(args.GetReturnValue(), - ((iGMHour * 3600 + iGMMin * 60 + iGMSec) * 1000)); - } else { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"Time"); - } -} -void CXFA_FM2JSContext::Time2Num(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - int32_t argc = args.GetLength(); - if ((argc > 0) && (argc < 4)) { - FX_BOOL bFlags = FALSE; - CFX_ByteString timeString; - CFX_ByteString formatString; - CFX_ByteString localString; - FXJSE_HVALUE timeValue = GetSimpleHValue(hThis, args, 0); - FXJSE_HVALUE formatValue = 0; - FXJSE_HVALUE localValue = 0; - if (HValueIsNull(hThis, timeValue)) { - bFlags = TRUE; - } else { - HValueToUTF8String(timeValue, timeString); - } - if (argc > 1) { - formatValue = GetSimpleHValue(hThis, args, 1); - if (HValueIsNull(hThis, formatValue)) { - bFlags = TRUE; - } else { - HValueToUTF8String(formatValue, formatString); - } - } - if (argc == 3) { - localValue = GetSimpleHValue(hThis, args, 2); - if (HValueIsNull(hThis, localValue)) { - bFlags = TRUE; - } else { - HValueToUTF8String(localValue, localString); - } - } - if (!bFlags) { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - CXFA_Document* pDoc = pContext->GetDocument(); - IFX_LocaleMgr* pMgr = (IFX_LocaleMgr*)pDoc->GetLocalMgr(); - IFX_Locale* pLocale = NULL; - if (localString.IsEmpty()) { - CXFA_Node* pThisNode = - ToNode(pDoc->GetScriptContext()->GetThisObject()); - FXSYS_assert(pThisNode); - CXFA_WidgetData widgetData(pThisNode); - pLocale = widgetData.GetLocal(); - } else { - pLocale = pMgr->GetLocaleByName( - CFX_WideString::FromUTF8(localString, localString.GetLength())); - } - CFX_WideString wsFormat; - if (formatString.IsEmpty()) { - pLocale->GetTimePattern(FX_LOCALEDATETIMESUBCATEGORY_Default, wsFormat); - } else { - wsFormat = - CFX_WideString::FromUTF8(formatString, formatString.GetLength()); - } - wsFormat = FX_WSTRC(L"time{") + wsFormat; - wsFormat += FX_WSTRC(L"}"); - CXFA_LocaleValue timeValue( - XFA_VT_TIME, - CFX_WideString::FromUTF8(timeString, timeString.GetLength()), - wsFormat, pLocale, (CXFA_LocaleMgr*)pMgr); - if (timeValue.IsValid()) { - CFX_Unitime uniTime = timeValue.GetTime(); - int32_t hour = uniTime.GetHour(); - int32_t min = uniTime.GetMinute(); - int32_t second = uniTime.GetSecond(); - int32_t milSecond = uniTime.GetMillisecond(); - int32_t mins = hour * 60 + min; - IXFA_TimeZoneProvider* pProvider = IXFA_TimeZoneProvider::Get(); - if (pProvider) { - FX_TIMEZONE tz; - pProvider->GetTimeZone(tz); - mins -= (tz.tzHour * 60); - while (mins > 1440) { - mins -= 1440; - } - while (mins < 0) { - mins += 1440; - } - hour = mins / 60; - min = mins % 60; - } - int32_t iResult = - hour * 3600000 + min * 60000 + second * 1000 + milSecond + 1; - FXJSE_Value_SetInteger(args.GetReturnValue(), iResult); - } else { - FXJSE_Value_SetInteger(args.GetReturnValue(), 0); - } - } else { - FXJSE_Value_SetNull(args.GetReturnValue()); - } - FXJSE_Value_Release(timeValue); - if (argc > 1) { - FXJSE_Value_Release(formatValue); - if (argc == 3) { - FXJSE_Value_Release(localValue); - } - } - } else { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"Time2Num"); - } -} -void CXFA_FM2JSContext::TimeFmt(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - int32_t argc = args.GetLength(); - if (argc < 3) { - FX_BOOL bFlags = FALSE; - int32_t iStyle = 0; - CFX_ByteString szLocal; - FXJSE_HVALUE argStyle = 0; - FXJSE_HVALUE argLocal = 0; - if (argc > 0) { - argStyle = GetSimpleHValue(hThis, args, 0); - if (FXJSE_Value_IsNull(argStyle)) { - bFlags = TRUE; - } - iStyle = (int32_t)HValueToFloat(hThis, argStyle); - if (iStyle > 4 || iStyle < 0) { - iStyle = 0; - } - } - if (argc == 2) { - argLocal = GetSimpleHValue(hThis, args, 1); - if (FXJSE_Value_IsNull(argLocal)) { - bFlags = TRUE; - } else { - HValueToUTF8String(argLocal, szLocal); - } - } - if (!bFlags) { - CFX_ByteString formatStr; - GetStandardTimeFormat(hThis, iStyle, szLocal, formatStr); - if (formatStr.IsEmpty()) { - formatStr = ""; - } - FXJSE_Value_SetUTF8String(args.GetReturnValue(), formatStr); - } else { - FXJSE_Value_SetNull(args.GetReturnValue()); - } - if (argc > 0) { - FXJSE_Value_Release(argStyle); - if (argc == 2) { - FXJSE_Value_Release(argLocal); - } - } - } else { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"TimeFmt"); - } -} -FX_BOOL CXFA_FM2JSContext::IsIsoDateFormat(const FX_CHAR* pData, - int32_t iLength, - int32_t& iStyle, - int32_t& iYear, - int32_t& iMonth, - int32_t& iDay) { - iYear = 0; - iMonth = 1; - iDay = 1; - FX_BOOL iRet = FALSE; - if (iLength < 4) { - return iRet; - } - FX_CHAR strYear[5]; - strYear[4] = '\0'; - for (int32_t i = 0; i < 4; ++i) { - if (*(pData + i) <= '9' && *(pData + i) >= '0') { - strYear[i] = *(pData + i); - } else { - return iRet; - } - } - iYear = FXSYS_atoi(strYear); - iStyle = 0; - if (iLength > 4) { - if (*(pData + 4) == '-') { - iStyle = 1; - } else { - iStyle = 0; - } - } else { - iRet = TRUE; - return iRet; - } - FX_CHAR strTemp[3]; - strTemp[2] = '\0'; - int32_t iPosOff = 0; - if (iStyle == 0) { - iPosOff = 4; - if (iLength == 4) { - iRet = TRUE; - return iRet; - } - } else { - iPosOff = 5; - if (iLength == 4) { - iRet = TRUE; - return iRet; - } - } - if ((*(pData + iPosOff) > '9' || *(pData + iPosOff) < '0') || - (*(pData + iPosOff + 1) > '9' || *(pData + iPosOff + 1) < '0')) { - return iRet; - } - strTemp[0] = *(pData + iPosOff); - strTemp[1] = *(pData + iPosOff + 1); - iMonth = FXSYS_atoi(strTemp); - if (iMonth > 12 || iMonth < 1) { - return iRet; - } - if (iStyle == 0) { - iPosOff += 2; - if (iLength == 6) { - iRet = 1; - return iRet; - } - } else { - iPosOff += 3; - if (iLength == 7) { - iRet = 1; - return iRet; - } - } - if ((*(pData + iPosOff) > '9' || *(pData + iPosOff) < '0') || - (*(pData + iPosOff + 1) > '9' || *(pData + iPosOff + 1) < '0')) { - return iRet; - } - strTemp[0] = *(pData + iPosOff); - strTemp[1] = *(pData + iPosOff + 1); - iDay = FXSYS_atoi(strTemp); - if (iPosOff + 2 < iLength) { - return iRet; - } - if ((!(iYear % 4) && (iYear % 100)) || !(iYear % 400)) { - if (iMonth == 2) { - if (iDay > 29) { - return iRet; - } - } else { - if (iMonth < 8) { - if (iDay > (iMonth % 2 == 0 ? 30 : 31)) { - return iRet; - } - } else { - if (iDay > (iMonth % 2 == 0 ? 31 : 30)) { - return iRet; - } - } - } - } else { - if (iMonth == 2) { - if (iDay > 28) { - return iRet; - } - } else { - if (iMonth < 8) { - if (iDay > (iMonth % 2 == 0 ? 30 : 31)) { - return iRet; - } - } else { - if (iDay > (iMonth % 2 == 0 ? 31 : 30)) { - return iRet; - } - } - } - } - iRet = TRUE; - return iRet; -} -FX_BOOL CXFA_FM2JSContext::IsIsoTimeFormat(const FX_CHAR* pData, - int32_t iLength, - int32_t& iHour, - int32_t& iMinute, - int32_t& iSecond, - int32_t& iMilliSecond, - int32_t& iZoneHour, - int32_t& iZoneMinute) { - iHour = 0; - iMinute = 0; - iSecond = 0; - iMilliSecond = 0; - iZoneHour = 0; - iZoneMinute = 0; - if (!pData) { - return FALSE; - } - int32_t iRet = FALSE; - FX_CHAR strTemp[3]; - strTemp[2] = '\0'; - int32_t iIndex = 0; - int32_t iZone = 0; - int32_t i = iIndex; - while (i < iLength) { - if ((*(pData + i) > '9' || *(pData + i) < '0') && *(pData + i) != ':') { - iZone = i; - break; - } - ++i; - } - if (i == iLength) { - iZone = iLength; - } - int32_t iPos = 0; - while (iIndex < iZone) { - if (iIndex >= iZone) { - break; - } - if (*(pData + iIndex) > '9' || *(pData + iIndex) < '0') { - return iRet; - } - strTemp[0] = *(pData + iIndex); - if (*(pData + iIndex + 1) > '9' || *(pData + iIndex + 1) < '0') { - return iRet; - } - strTemp[1] = *(pData + iIndex + 1); - if (FXSYS_atoi(strTemp) > 60) { - return iRet; - } - if (*(pData + 2) == ':') { - if (iPos == 0) { - iHour = FXSYS_atoi(strTemp); - ++iPos; - } else if (iPos == 1) { - iMinute = FXSYS_atoi(strTemp); - ++iPos; - } else { - iSecond = FXSYS_atoi(strTemp); - } - iIndex += 3; - } else { - if (iPos == 0) { - iHour = FXSYS_atoi(strTemp); - ++iPos; - } else if (iPos == 1) { - iMinute = FXSYS_atoi(strTemp); - ++iPos; - } else if (iPos == 2) { - iSecond = FXSYS_atoi(strTemp); - ++iPos; - } - iIndex += 2; - } - } - if (*(pData + iIndex) == '.') { - ++iIndex; - FX_CHAR strTemp[4]; - strTemp[3] = '\0'; - if (*(pData + iIndex) > '9' || *(pData + iIndex) < '0') { - return iRet; - } - strTemp[0] = *(pData + iIndex); - if (*(pData + iIndex + 1) > '9' || *(pData + iIndex + 1) < '0') { - return iRet; - } - strTemp[1] = *(pData + iIndex + 1); - if (*(pData + iIndex + 2) > '9' || *(pData + iIndex + 2) < '0') { - return iRet; - } - strTemp[2] = *(pData + iIndex + 2); - iMilliSecond = FXSYS_atoi(strTemp); - if (iMilliSecond > 100) { - iMilliSecond = 0; - return iRet; - } - iIndex += 3; - } - int32_t iSign = 1; - if (*(pData + iIndex) == 'z' || *(pData + iIndex) == 'Z') { - iRet = 1; - return iRet; - } else if (*(pData + iIndex) == '+') { - ++iIndex; - } else if (*(pData + iIndex) == '-') { - iSign = -1; - ++iIndex; - } - iPos = 0; - while (iIndex < iLength) { - if (iIndex >= iLength) { - return iRet; - } - if (*(pData + iIndex) > '9' || *(pData + iIndex) < '0') { - return iRet; - } - strTemp[0] = *(pData + iIndex); - if (*(pData + iIndex + 1) > '9' || *(pData + iIndex + 1) < '0') { - return iRet; - } - strTemp[1] = *(pData + iIndex + 1); - if (FXSYS_atoi(strTemp) > 60) { - return iRet; - } - if (*(pData + 2) == ':') { - if (iPos == 0) { - iZoneHour = FXSYS_atoi(strTemp); - } else if (iPos == 1) { - iZoneMinute = FXSYS_atoi(strTemp); - } - iIndex += 3; - } else { - if (!iPos) { - iZoneHour = FXSYS_atoi(strTemp); - ++iPos; - } else if (iPos == 1) { - iZoneMinute = FXSYS_atoi(strTemp); - ++iPos; - } - iIndex += 2; - } - } - if (iIndex < iLength) { - return iRet; - } - iZoneHour *= iSign; - iRet = TRUE; - return iRet; -} -FX_BOOL CXFA_FM2JSContext::IsIsoDateTimeFormat(const FX_CHAR* pData, - int32_t iLength, - int32_t& iYear, - int32_t& iMonth, - int32_t& iDay, - int32_t& iHour, - int32_t& iMinute, - int32_t& iSecond, - int32_t& iMillionSecond, - int32_t& iZoneHour, - int32_t& iZoneMinute) { - iYear = 0; - iMonth = 0; - iDay = 0; - iHour = 0; - iMinute = 0; - iSecond = 0; - if (!pData) { - return FALSE; - } - int32_t iRet = FALSE; - int32_t iIndex = 0; - while (*(pData + iIndex) != 'T' && *(pData + iIndex) != 't') { - if (iIndex >= iLength) { - return iRet; - } - ++iIndex; - } - if (iIndex != 8 && iIndex != 10) { - return iRet; - } - int32_t iStyle = -1; - iRet = IsIsoDateFormat(pData, iIndex, iStyle, iYear, iMonth, iDay); - if (!iRet) { - return iRet; - } - if (*(pData + iIndex) != 'T' && *(pData + iIndex) != 't') { - return iRet; - } - ++iIndex; - if (((iLength - iIndex > 13) && (iLength - iIndex < 6)) && - (iLength - iIndex != 15)) { - return iRet; - } - iRet = IsIsoTimeFormat(pData + iIndex, iLength - iIndex, iHour, iMinute, - iSecond, iMillionSecond, iZoneHour, iZoneMinute); - if (!iRet) { - return iRet; - } - iRet = TRUE; - return iRet; -} -FX_BOOL CXFA_FM2JSContext::Local2IsoDate(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szDate, - const CFX_ByteStringC& szFormat, - const CFX_ByteStringC& szLocale, - CFX_ByteString& strIsoDate) { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - CXFA_Document* pDoc = pContext->GetDocument(); - if (!pDoc) { - return FALSE; - } - IFX_LocaleMgr* pMgr = (IFX_LocaleMgr*)pDoc->GetLocalMgr(); - IFX_Locale* pLocale = NULL; - if (szLocale.IsEmpty()) { - CXFA_Node* pThisNode = ToNode(pDoc->GetScriptContext()->GetThisObject()); - FXSYS_assert(pThisNode); - CXFA_WidgetData widgetData(pThisNode); - pLocale = widgetData.GetLocal(); - } else { - pLocale = pMgr->GetLocaleByName( - CFX_WideString::FromUTF8(szLocale.GetCStr(), szLocale.GetLength())); - } - if (!pLocale) { - return FALSE; - } - CFX_WideString wsFormat; - if (szFormat.IsEmpty()) { - pLocale->GetDatePattern(FX_LOCALEDATETIMESUBCATEGORY_Default, wsFormat); - } else { - wsFormat = - CFX_WideString::FromUTF8(szFormat.GetCStr(), szFormat.GetLength()); - } - CXFA_LocaleValue widgetValue( - XFA_VT_DATE, - CFX_WideString::FromUTF8(szDate.GetCStr(), szDate.GetLength()), wsFormat, - pLocale, (CXFA_LocaleMgr*)pMgr); - CFX_Unitime dt = widgetValue.GetDate(); - strIsoDate.Format("%4d-%02d-%02d", dt.GetYear(), dt.GetMonth(), dt.GetDay()); - return TRUE; -} -FX_BOOL CXFA_FM2JSContext::Local2IsoTime(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szTime, - const CFX_ByteStringC& szFormat, - const CFX_ByteStringC& szLocale, - CFX_ByteString& strIsoTime) { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - CXFA_Document* pDoc = pContext->GetDocument(); - if (!pDoc) { - return FALSE; - } - IFX_LocaleMgr* pMgr = (IFX_LocaleMgr*)pDoc->GetLocalMgr(); - IFX_Locale* pLocale = NULL; - if (szLocale.IsEmpty()) { - CXFA_Node* pThisNode = ToNode(pDoc->GetScriptContext()->GetThisObject()); - FXSYS_assert(pThisNode); - CXFA_WidgetData widgetData(pThisNode); - pLocale = widgetData.GetLocal(); - } else { - pLocale = pMgr->GetLocaleByName( - CFX_WideString::FromUTF8(szLocale.GetCStr(), szLocale.GetLength())); - } - if (!pLocale) { - return FALSE; - } - CFX_WideString wsFormat; - if (szFormat.IsEmpty()) { - pLocale->GetTimePattern(FX_LOCALEDATETIMESUBCATEGORY_Default, wsFormat); - } else { - wsFormat = - CFX_WideString::FromUTF8(szFormat.GetCStr(), szFormat.GetLength()); - } - wsFormat = FX_WSTRC(L"time{") + wsFormat; - wsFormat += FX_WSTRC(L"}"); - CXFA_LocaleValue widgetValue( - XFA_VT_TIME, - CFX_WideString::FromUTF8(szTime.GetCStr(), szTime.GetLength()), wsFormat, - pLocale, (CXFA_LocaleMgr*)pMgr); - CFX_Unitime utime = widgetValue.GetTime(); - strIsoTime.Format("%02d:%02d:%02d.%03d", utime.GetHour(), utime.GetMinute(), - utime.GetSecond(), utime.GetMillisecond()); - return TRUE; -} -FX_BOOL CXFA_FM2JSContext::IsoDate2Local(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szDate, - const CFX_ByteStringC& szFormat, - const CFX_ByteStringC& szLocale, - CFX_ByteString& strLocalDate) { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - CXFA_Document* pDoc = pContext->GetDocument(); - if (!pDoc) { - return FALSE; - } - IFX_LocaleMgr* pMgr = (IFX_LocaleMgr*)pDoc->GetLocalMgr(); - IFX_Locale* pLocale = NULL; - if (szLocale.IsEmpty()) { - CXFA_Node* pThisNode = ToNode(pDoc->GetScriptContext()->GetThisObject()); - FXSYS_assert(pThisNode); - CXFA_WidgetData widgetData(pThisNode); - pLocale = widgetData.GetLocal(); - } else { - pLocale = pMgr->GetLocaleByName( - CFX_WideString::FromUTF8(szLocale.GetCStr(), szLocale.GetLength())); - } - if (!pLocale) { - return FALSE; - } - CFX_WideString wsFormat; - if (szFormat.IsEmpty()) { - pLocale->GetDatePattern(FX_LOCALEDATETIMESUBCATEGORY_Default, wsFormat); - } else { - wsFormat = - CFX_WideString::FromUTF8(szFormat.GetCStr(), szFormat.GetLength()); - } - CXFA_LocaleValue widgetValue( - XFA_VT_DATE, - CFX_WideString::FromUTF8(szDate.GetCStr(), szDate.GetLength()), - (CXFA_LocaleMgr*)pMgr); - CFX_WideString wsRet; - widgetValue.FormatPatterns(wsRet, wsFormat, pLocale, - XFA_VALUEPICTURE_Display); - strLocalDate = FX_UTF8Encode(wsRet, wsRet.GetLength()); - return TRUE; -} -FX_BOOL CXFA_FM2JSContext::IsoTime2Local(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szTime, - const CFX_ByteStringC& szFormat, - const CFX_ByteStringC& szLocale, - CFX_ByteString& strLocalTime) { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - CXFA_Document* pDoc = pContext->GetDocument(); - if (!pDoc) { - return FALSE; - } - IFX_LocaleMgr* pMgr = (IFX_LocaleMgr*)pDoc->GetLocalMgr(); - IFX_Locale* pLocale = NULL; - if (szLocale.IsEmpty()) { - CXFA_Node* pThisNode = ToNode(pDoc->GetScriptContext()->GetThisObject()); - FXSYS_assert(pThisNode); - CXFA_WidgetData widgetData(pThisNode); - pLocale = widgetData.GetLocal(); - } else { - pLocale = pMgr->GetLocaleByName( - CFX_WideString::FromUTF8(szLocale.GetCStr(), szLocale.GetLength())); - } - if (!pLocale) { - return FALSE; - } - CFX_WideString wsFormat; - if (szFormat.IsEmpty()) { - pLocale->GetTimePattern(FX_LOCALEDATETIMESUBCATEGORY_Default, wsFormat); - } else { - wsFormat = - CFX_WideString::FromUTF8(szFormat.GetCStr(), szFormat.GetLength()); - } - wsFormat = FX_WSTRC(L"time{") + wsFormat; - wsFormat += FX_WSTRC(L"}"); - CXFA_LocaleValue widgetValue( - XFA_VT_TIME, - CFX_WideString::FromUTF8(szTime.GetCStr(), szTime.GetLength()), - (CXFA_LocaleMgr*)pMgr); - CFX_WideString wsRet; - widgetValue.FormatPatterns(wsRet, wsFormat, pLocale, - XFA_VALUEPICTURE_Display); - strLocalTime = FX_UTF8Encode(wsRet, wsRet.GetLength()); - return TRUE; -} -FX_BOOL CXFA_FM2JSContext::GetGMTTime(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szTime, - const CFX_ByteStringC& szFormat, - const CFX_ByteStringC& szLocale, - CFX_ByteString& strGMTTime) { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - CXFA_Document* pDoc = pContext->GetDocument(); - if (!pDoc) { - return FALSE; - } - IFX_LocaleMgr* pMgr = (IFX_LocaleMgr*)pDoc->GetLocalMgr(); - IFX_Locale* pLocale = NULL; - if (szLocale.IsEmpty()) { - CXFA_Node* pThisNode = ToNode(pDoc->GetScriptContext()->GetThisObject()); - FXSYS_assert(pThisNode); - CXFA_WidgetData widgetData(pThisNode); - pLocale = widgetData.GetLocal(); - } else { - pLocale = pMgr->GetLocaleByName( - CFX_WideString::FromUTF8(szLocale.GetCStr(), szLocale.GetLength())); - } - if (!pLocale) { - return FALSE; - } - CFX_WideString wsFormat; - if (szFormat.IsEmpty()) { - pLocale->GetTimePattern(FX_LOCALEDATETIMESUBCATEGORY_Default, wsFormat); - } else { - wsFormat = - CFX_WideString::FromUTF8(szFormat.GetCStr(), szFormat.GetLength()); - } - wsFormat = FX_WSTRC(L"time{") + wsFormat; - wsFormat += FX_WSTRC(L"}"); - CXFA_LocaleValue widgetValue( - XFA_VT_TIME, - CFX_WideString::FromUTF8(szTime.GetCStr(), szTime.GetLength()), - (CXFA_LocaleMgr*)pMgr); - CFX_WideString wsRet; - widgetValue.FormatPatterns(wsRet, wsFormat, pLocale, - XFA_VALUEPICTURE_Display); - strGMTTime = FX_UTF8Encode(wsRet, wsRet.GetLength()); - return TRUE; -} -int32_t CXFA_FM2JSContext::DateString2Num(const CFX_ByteStringC& szDateString) { - FX_BOOL bFlags = FALSE; - int32_t iLength = szDateString.GetLength(); - FX_BOOL iRet = FALSE; - int32_t iStyle = -1; - int32_t iYear = 0; - int32_t iMonth = 0; - int32_t iDay = 0; - int32_t iHour = 0; - int32_t iMinute = 0; - int32_t iSecond = 0; - int32_t iMillionSecond = 0; - int32_t iZoneHour = 0; - int32_t iZoneMinute = 0; - if (iLength <= 10) { - iRet = IsIsoDateFormat(szDateString.GetCStr(), iLength, iStyle, iYear, - iMonth, iDay); - } else { - iRet = IsIsoDateTimeFormat(szDateString.GetCStr(), iLength, iYear, iMonth, - iDay, iHour, iMinute, iSecond, iMillionSecond, - iZoneHour, iZoneMinute); - } - if (!iRet) { - bFlags = TRUE; - } - FX_FLOAT dDays = 0; - int32_t i = 1; - if (iYear < 1900) { - bFlags = TRUE; - } - if (!bFlags) { - while (iYear - i >= 1900) { - if ((!((iYear - i) % 4) && ((iYear - i) % 100)) || !((iYear - i) % 400)) { - dDays += 366; - } else { - dDays += 365; - } - ++i; - } - i = 1; - while (i < iMonth) { - if (i == 2) { - if ((!(iYear % 4) && (iYear % 100)) || !(iYear % 400)) { - dDays += 29; - } else { - dDays += 28; - } - } else if (i <= 7) { - if (i % 2 == 0) { - dDays += 30; - } else { - dDays += 31; - } - } else { - if (i % 2 == 0) { - dDays += 31; - } else { - dDays += 30; - } - } - ++i; - } - i = 0; - while (iDay - i > 0) { - dDays += 1; - ++i; - } - } else { - dDays = 0; - } - return (int32_t)dDays; -} -#define XFA_N 19 -static uint8_t g_sAltTable_Date[] = { - XFA_N, XFA_N, XFA_N, 3, 9, XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, - XFA_N, 2, XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, - XFA_N, XFA_N, 1, XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, - XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, - XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, - XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, -}; -static uint8_t g_sAltTable_Time[] = { - 14, XFA_N, XFA_N, 3, 9, XFA_N, XFA_N, 15, XFA_N, XFA_N, XFA_N, - XFA_N, 6, XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, 7, XFA_N, XFA_N, XFA_N, - XFA_N, XFA_N, 1, 17, XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, - XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, 15, XFA_N, XFA_N, XFA_N, XFA_N, - XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, - XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, XFA_N, -}; -static void XFA_FM_AlternateDateTimeSymbols(CFX_WideString& wsPattern, - const CFX_WideString& wsAltSymbols, - uint8_t* pAltTable) { - int32_t nLength = wsPattern.GetLength(); - FX_BOOL bInConstRange = FALSE; - FX_BOOL bEscape = FALSE; - int32_t i = 0, n = 0; - while (i < nLength) { - FX_WCHAR wc = wsPattern[i]; - if (wc == L'\'') { - bInConstRange = !bInConstRange; - if (bEscape) { - i++; - } else { - wsPattern.Delete(i); - nLength--; - } - bEscape = !bEscape; - continue; - } - if (!bInConstRange && (n = wc - L'A') >= 0 && n <= (L'a' - L'A')) { - int32_t nAlt = (int32_t)pAltTable[n]; - if (nAlt != XFA_N) { - wsPattern.SetAt(i, wsAltSymbols[nAlt]); - } - } - i++; - bEscape = FALSE; - } -} -#undef XFA_N -void CXFA_FM2JSContext::GetLocalDateFormat(FXJSE_HOBJECT hThis, - int32_t iStyle, - const CFX_ByteStringC& szLocalStr, - CFX_ByteString& strFormat, - FX_BOOL bStandard) { - FX_LOCALEDATETIMESUBCATEGORY strStyle; - switch (iStyle) { - case 0: - strStyle = FX_LOCALEDATETIMESUBCATEGORY_Medium; - break; - case 1: - strStyle = FX_LOCALEDATETIMESUBCATEGORY_Short; - break; - case 2: - strStyle = FX_LOCALEDATETIMESUBCATEGORY_Medium; - break; - case 3: - strStyle = FX_LOCALEDATETIMESUBCATEGORY_Long; - break; - case 4: - strStyle = FX_LOCALEDATETIMESUBCATEGORY_Full; - break; - default: - strStyle = FX_LOCALEDATETIMESUBCATEGORY_Medium; - break; - } - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - CXFA_Document* pDoc = pContext->GetDocument(); - if (!pDoc) { - return; - } - IFX_LocaleMgr* pMgr = (IFX_LocaleMgr*)pDoc->GetLocalMgr(); - IFX_Locale* pLocale = NULL; - if (szLocalStr.IsEmpty()) { - CXFA_Node* pThisNode = ToNode(pDoc->GetScriptContext()->GetThisObject()); - FXSYS_assert(pThisNode); - CXFA_WidgetData widgetData(pThisNode); - pLocale = widgetData.GetLocal(); - } else { - pLocale = pMgr->GetLocaleByName( - CFX_WideString::FromUTF8(szLocalStr.GetCStr(), szLocalStr.GetLength())); - } - if (!pLocale) { - return; - } - CFX_WideString strRet; - pLocale->GetDatePattern(strStyle, strRet); - if (!bStandard) { - CFX_WideString wsSymbols; - pLocale->GetDateTimeSymbols(wsSymbols); - XFA_FM_AlternateDateTimeSymbols(strRet, wsSymbols, g_sAltTable_Date); - } - strFormat = FX_UTF8Encode(strRet, strRet.GetLength()); -} -void CXFA_FM2JSContext::GetLocalTimeFormat(FXJSE_HOBJECT hThis, - int32_t iStyle, - const CFX_ByteStringC& szLocalStr, - CFX_ByteString& strFormat, - FX_BOOL bStandard) { - FX_LOCALEDATETIMESUBCATEGORY strStyle; - switch (iStyle) { - case 0: - strStyle = FX_LOCALEDATETIMESUBCATEGORY_Medium; - break; - case 1: - strStyle = FX_LOCALEDATETIMESUBCATEGORY_Short; - break; - case 2: - strStyle = FX_LOCALEDATETIMESUBCATEGORY_Medium; - break; - case 3: - strStyle = FX_LOCALEDATETIMESUBCATEGORY_Long; - break; - case 4: - strStyle = FX_LOCALEDATETIMESUBCATEGORY_Full; - break; - default: - strStyle = FX_LOCALEDATETIMESUBCATEGORY_Medium; - break; - } - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - CXFA_Document* pDoc = pContext->GetDocument(); - if (!pDoc) { - return; - } - IFX_LocaleMgr* pMgr = (IFX_LocaleMgr*)pDoc->GetLocalMgr(); - IFX_Locale* pLocale = NULL; - if (szLocalStr.IsEmpty()) { - CXFA_Node* pThisNode = ToNode(pDoc->GetScriptContext()->GetThisObject()); - FXSYS_assert(pThisNode); - CXFA_WidgetData widgetData(pThisNode); - pLocale = widgetData.GetLocal(); - } else { - pLocale = pMgr->GetLocaleByName( - CFX_WideString::FromUTF8(szLocalStr.GetCStr(), szLocalStr.GetLength())); - } - if (!pLocale) { - return; - } - CFX_WideString strRet; - pLocale->GetTimePattern(strStyle, strRet); - if (!bStandard) { - CFX_WideString wsSymbols; - pLocale->GetDateTimeSymbols(wsSymbols); - XFA_FM_AlternateDateTimeSymbols(strRet, wsSymbols, g_sAltTable_Time); - } - strFormat = FX_UTF8Encode(strRet, strRet.GetLength()); -} -void CXFA_FM2JSContext::GetStandardDateFormat(FXJSE_HOBJECT hThis, - int32_t iStyle, - const CFX_ByteStringC& szLocalStr, - CFX_ByteString& strFormat) { - GetLocalDateFormat(hThis, iStyle, szLocalStr, strFormat, TRUE); -} -void CXFA_FM2JSContext::GetStandardTimeFormat(FXJSE_HOBJECT hThis, - int32_t iStyle, - const CFX_ByteStringC& szLocalStr, - CFX_ByteString& strFormat) { - GetLocalTimeFormat(hThis, iStyle, szLocalStr, strFormat, TRUE); -} -void CXFA_FM2JSContext::Num2AllTime(FXJSE_HOBJECT hThis, - int32_t iTime, - const CFX_ByteStringC& szFormat, - const CFX_ByteStringC& szLocale, - FX_BOOL bGM, - CFX_ByteString& strTime) { - int32_t iHour = 0; - int32_t iMin = 0; - int32_t iSec = 0; - int32_t iZoneHour = 0; - int32_t iZoneMin = 0; - int32_t iZoneSec = 0; - iHour = static_cast(iTime) / 3600000; - iMin = (static_cast(iTime) - iHour * 3600000) / 60000; - iSec = (static_cast(iTime) - iHour * 3600000 - iMin * 60000) / 1000; - if (!bGM) { - GetLocalTimeZone(iZoneHour, iZoneMin, iZoneSec); - iHour += iZoneHour; - iMin += iZoneMin; - iSec += iZoneSec; - } - int32_t iRet = 0; - CFX_ByteString strIsoTime; - strIsoTime.Format("%02d:%02d:%02d", iHour, iMin, iSec); - if (bGM) { - iRet = GetGMTTime(hThis, strIsoTime, szFormat, szLocale, strTime); - } else { - iRet = IsoTime2Local(hThis, strIsoTime, szFormat, szLocale, strTime); - } - if (!iRet) { - strTime = ""; - } -} - -void CXFA_FM2JSContext::GetLocalTimeZone(int32_t& iHour, - int32_t& iMin, - int32_t& iSec) { - time_t now; - time(&now); - struct tm* pGmt = gmtime(&now); - int32_t iGMHour = pGmt->tm_hour; - int32_t iGMMin = pGmt->tm_min; - int32_t iGMSec = pGmt->tm_sec; - struct tm* pLocal = localtime(&now); - int32_t iLocalHour = pLocal->tm_hour; - int32_t iLocalMin = pLocal->tm_min; - int32_t iLocalSec = pLocal->tm_sec; - iHour = iLocalHour - iGMHour; - iMin = iLocalMin - iGMMin; - iSec = iLocalSec - iGMSec; -} -void CXFA_FM2JSContext::Apr(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - if (args.GetLength() == 3) { - FX_BOOL bFlags = FALSE; - FX_DOUBLE nPrincipal = 0; - FX_DOUBLE nPayment = 0; - FX_DOUBLE nPeriods = 0; - FXJSE_HVALUE argOne = GetSimpleHValue(hThis, args, 0); - FXJSE_HVALUE argTwo = GetSimpleHValue(hThis, args, 1); - FXJSE_HVALUE argThree = GetSimpleHValue(hThis, args, 2); - bFlags = (HValueIsNull(hThis, argOne) || HValueIsNull(hThis, argTwo) || - HValueIsNull(hThis, argThree)); - if (bFlags) { - FXJSE_Value_SetNull(args.GetReturnValue()); - } else { - nPrincipal = HValueToDouble(hThis, argOne); - nPayment = HValueToDouble(hThis, argTwo); - nPeriods = HValueToDouble(hThis, argThree); - bFlags = ((nPrincipal <= 0) || (nPayment <= 0) || (nPeriods <= 0)); - if (bFlags) { - pContext->ThrowScriptErrorMessage(XFA_IDS_ARGUMENT_MISMATCH); - } else { - FX_DOUBLE r = - 2 * (nPeriods * nPayment - nPrincipal) / (nPeriods * nPrincipal); - FX_DOUBLE nTemp = 1; - for (int32_t i = 0; i < nPeriods; ++i) { - nTemp *= (1 + r); - } - FX_DOUBLE nRet = r * nTemp / (nTemp - 1) - nPayment / nPrincipal; - while ((nRet > FINANCIAL_PRECISION || nRet < -FINANCIAL_PRECISION) && - (!bFlags)) { - FX_DOUBLE nDerivative = 0; - nDerivative = - ((nTemp + r * nPeriods * (nTemp / (1 + r))) * (nTemp - 1) - - (r * nTemp * nPeriods * (nTemp / (1 + r)))) / - ((nTemp - 1) * (nTemp - 1)); - if (nDerivative == 0) { - bFlags = TRUE; - continue; - } - r = r - nRet / nDerivative; - nTemp = 1; - for (int32_t i = 0; i < nPeriods; ++i) { - nTemp *= (1 + r); - } - nRet = r * nTemp / (nTemp - 1) - nPayment / nPrincipal; - } - if (bFlags) { - FXJSE_Value_SetNull(args.GetReturnValue()); - } else { - r = r * 12; - FXJSE_Value_SetDouble(args.GetReturnValue(), r); - } - } - } - FXJSE_Value_Release(argOne); - FXJSE_Value_Release(argTwo); - FXJSE_Value_Release(argThree); - } else { - pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"Apr"); - } -} -void CXFA_FM2JSContext::CTerm(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - if (args.GetLength() == 3) { - FX_BOOL bFlags = FALSE; - FX_FLOAT nRate = 0; - FX_FLOAT nFutureValue = 0; - FX_FLOAT nInitAmount = 0; - FXJSE_HVALUE argOne = GetSimpleHValue(hThis, args, 0); - FXJSE_HVALUE argTwo = GetSimpleHValue(hThis, args, 1); - FXJSE_HVALUE argThree = GetSimpleHValue(hThis, args, 2); - bFlags = (HValueIsNull(hThis, argOne) || HValueIsNull(hThis, argTwo) || - HValueIsNull(hThis, argThree)); - if (bFlags) { - FXJSE_Value_SetNull(args.GetReturnValue()); - } else { - nRate = HValueToFloat(hThis, argOne); - nFutureValue = HValueToFloat(hThis, argTwo); - nInitAmount = HValueToFloat(hThis, argThree); - bFlags = ((nRate <= 0) || (nFutureValue <= 0) || (nInitAmount <= 0)); - if (bFlags) { - pContext->ThrowScriptErrorMessage(XFA_IDS_ARGUMENT_MISMATCH); - } else { - FXJSE_Value_SetFloat(args.GetReturnValue(), - FXSYS_log((FX_FLOAT)(nFutureValue / nInitAmount)) / - FXSYS_log((FX_FLOAT)(1 + nRate))); - } - } - FXJSE_Value_Release(argOne); - FXJSE_Value_Release(argTwo); - FXJSE_Value_Release(argThree); - } else { - pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"CTerm"); - } -} -void CXFA_FM2JSContext::FV(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - if (args.GetLength() == 3) { - FX_BOOL bFlags = FALSE; - FX_DOUBLE nAmount = 0; - FX_DOUBLE nRate = 0; - FX_DOUBLE nPeriod = 0; - FXJSE_HVALUE argOne = GetSimpleHValue(hThis, args, 0); - FXJSE_HVALUE argTwo = GetSimpleHValue(hThis, args, 1); - FXJSE_HVALUE argThree = GetSimpleHValue(hThis, args, 2); - bFlags = (HValueIsNull(hThis, argOne) || HValueIsNull(hThis, argTwo) || - HValueIsNull(hThis, argThree)); - if (bFlags) { - FXJSE_Value_SetNull(args.GetReturnValue()); - } else { - nAmount = HValueToDouble(hThis, argOne); - nRate = HValueToDouble(hThis, argTwo); - nPeriod = HValueToDouble(hThis, argThree); - bFlags = ((nRate < 0) || (nPeriod <= 0) || (nAmount <= 0)); - if (bFlags) { - pContext->ThrowScriptErrorMessage(XFA_IDS_ARGUMENT_MISMATCH); - } else { - FX_DOUBLE dResult = 0; - if (!nRate) { - dResult = nAmount * nPeriod; - } else { - FX_DOUBLE nTemp = 1; - for (int i = 0; i < nPeriod; ++i) { - nTemp *= 1 + nRate; - } - dResult = nAmount * (nTemp - 1) / nRate; - } - FXJSE_Value_SetDouble(args.GetReturnValue(), dResult); - } - } - FXJSE_Value_Release(argOne); - FXJSE_Value_Release(argTwo); - FXJSE_Value_Release(argThree); - } else { - pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"FV"); - } -} -void CXFA_FM2JSContext::IPmt(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - if (args.GetLength() == 5) { - FX_BOOL bFlags = FALSE; - FX_FLOAT nPrincpalAmount = 0; - FX_FLOAT nRate = 0; - FX_FLOAT nPayment = 0; - FX_FLOAT nFirstMonth = 0; - FX_FLOAT nNumberOfMonths = 0; - FXJSE_HVALUE argOne = GetSimpleHValue(hThis, args, 0); - FXJSE_HVALUE argTwo = GetSimpleHValue(hThis, args, 1); - FXJSE_HVALUE argThree = GetSimpleHValue(hThis, args, 2); - FXJSE_HVALUE argFour = GetSimpleHValue(hThis, args, 3); - FXJSE_HVALUE argFive = GetSimpleHValue(hThis, args, 4); - bFlags = (HValueIsNull(hThis, argOne) || HValueIsNull(hThis, argTwo) || - HValueIsNull(hThis, argThree) || HValueIsNull(hThis, argFour) || - HValueIsNull(hThis, argFive)); - if (bFlags) { - FXJSE_Value_SetNull(args.GetReturnValue()); - } else { - nPrincpalAmount = HValueToFloat(hThis, argOne); - nRate = HValueToFloat(hThis, argTwo); - nPayment = HValueToFloat(hThis, argThree); - nFirstMonth = HValueToFloat(hThis, argFour); - nNumberOfMonths = HValueToFloat(hThis, argFive); - bFlags = ((nPrincpalAmount <= 0) || (nRate <= 0) || (nPayment <= 0) || - (nFirstMonth < 0) || (nNumberOfMonths < 0)); - if (bFlags) { - pContext->ThrowScriptErrorMessage(XFA_IDS_ARGUMENT_MISMATCH); - } else { - FX_FLOAT fResult = 0; - FX_FLOAT nRateOfMonth = nRate / 12; - int32_t iNums = - (int32_t)((FXSYS_log10((FX_FLOAT)(nPayment / nPrincpalAmount)) - - FXSYS_log10((FX_FLOAT)(nPayment / nPrincpalAmount - - nRateOfMonth))) / - FXSYS_log10((FX_FLOAT)(1 + nRateOfMonth))); - int32_t iEnd = (int32_t)(nFirstMonth + nNumberOfMonths - 1); - if (iEnd > iNums) { - iEnd = iNums; - } - FX_FLOAT nSum = 0; - if (nPayment < nPrincpalAmount * nRateOfMonth) { - bFlags = TRUE; - fResult = 0; - } - if (!bFlags) { - int32_t i = 0; - for (i = 0; i < nFirstMonth - 1; ++i) { - nPrincpalAmount -= nPayment - nPrincpalAmount * nRateOfMonth; - } - for (; i < iEnd; ++i) { - nSum += nPrincpalAmount * nRateOfMonth; - nPrincpalAmount -= nPayment - nPrincpalAmount * nRateOfMonth; - } - fResult = nSum; - } - FXJSE_Value_SetFloat(args.GetReturnValue(), fResult); - } - } - FXJSE_Value_Release(argOne); - FXJSE_Value_Release(argTwo); - FXJSE_Value_Release(argThree); - FXJSE_Value_Release(argFour); - FXJSE_Value_Release(argFive); - } else { - pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"IPmt"); - } -} -void CXFA_FM2JSContext::NPV(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - int32_t argc = args.GetLength(); - if (argc > 2) { - FX_BOOL bFlags = FALSE; - FXJSE_HVALUE* argValues = FX_Alloc(FXJSE_HVALUE, argc); - for (int32_t i = 0; i < argc; i++) { - argValues[i] = GetSimpleHValue(hThis, args, i); - if (HValueIsNull(hThis, argValues[i])) { - bFlags = TRUE; - } - } - if (!bFlags) { - FX_DOUBLE nRate = 0; - nRate = HValueToDouble(hThis, argValues[0]); - if (nRate <= 0) { - pContext->ThrowScriptErrorMessage(XFA_IDS_ARGUMENT_MISMATCH); - } else { - FX_DOUBLE* pData = FX_Alloc(FX_DOUBLE, argc - 1); - for (int32_t i = 1; i < argc; i++) { - pData[i - 1] = HValueToDouble(hThis, argValues[i]); - } - FX_DOUBLE nSum = 0; - int32_t iIndex = 0; - for (int32_t i = 0; i < argc - 1; i++) { - FX_DOUBLE nTemp = 1; - for (int32_t j = 0; j <= i; j++) { - nTemp *= 1 + nRate; - } - FX_DOUBLE nNum = *(pData + iIndex++); - nSum += nNum / nTemp; - } - FXJSE_Value_SetDouble(args.GetReturnValue(), nSum); - FX_Free(pData); - pData = 0; - } - } else { - FXJSE_Value_SetNull(args.GetReturnValue()); - } - for (int32_t i = 0; i < argc; i++) { - FXJSE_Value_Release(argValues[i]); - } - FX_Free(argValues); - } else { - pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"NPV"); - } -} -void CXFA_FM2JSContext::Pmt(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - if (args.GetLength() == 3) { - FX_BOOL bFlags = FALSE; - FX_FLOAT nPrincipal = 0; - FX_FLOAT nRate = 0; - FX_FLOAT nPeriods = 0; - FXJSE_HVALUE argOne = GetSimpleHValue(hThis, args, 0); - FXJSE_HVALUE argTwo = GetSimpleHValue(hThis, args, 1); - FXJSE_HVALUE argThree = GetSimpleHValue(hThis, args, 2); - bFlags = (HValueIsNull(hThis, argOne) || HValueIsNull(hThis, argTwo) || - HValueIsNull(hThis, argThree)); - if (bFlags) { - FXJSE_Value_SetNull(args.GetReturnValue()); - } else { - nPrincipal = HValueToFloat(hThis, argOne); - nRate = HValueToFloat(hThis, argTwo); - nPeriods = HValueToFloat(hThis, argThree); - bFlags = ((nPrincipal <= 0) || (nRate <= 0) || (nPeriods <= 0)); - if (bFlags) { - pContext->ThrowScriptErrorMessage(XFA_IDS_ARGUMENT_MISMATCH); - } else { - FX_FLOAT nSum = 0; - FX_FLOAT nTmp = 1 + nRate; - nSum = nTmp; - for (int32_t i = 0; i < nPeriods - 1; ++i) { - nSum *= nTmp; - } - FXJSE_Value_SetFloat(args.GetReturnValue(), - (nPrincipal * nRate * nSum) / (nSum - 1)); - } - } - FXJSE_Value_Release(argOne); - FXJSE_Value_Release(argTwo); - FXJSE_Value_Release(argThree); - } else { - pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"Pmt"); - } -} -void CXFA_FM2JSContext::PPmt(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - if (args.GetLength() == 5) { - FX_BOOL bFlags = FALSE; - FX_FLOAT nPrincpalAmount = 0; - FX_FLOAT nRate = 0; - FX_FLOAT nPayment = 0; - FX_FLOAT nFirstMonth = 0; - FX_FLOAT nNumberOfMonths = 0; - FXJSE_HVALUE argOne = GetSimpleHValue(hThis, args, 0); - FXJSE_HVALUE argTwo = GetSimpleHValue(hThis, args, 1); - FXJSE_HVALUE argThree = GetSimpleHValue(hThis, args, 2); - FXJSE_HVALUE argFour = GetSimpleHValue(hThis, args, 3); - FXJSE_HVALUE argFive = GetSimpleHValue(hThis, args, 4); - bFlags = (HValueIsNull(hThis, argOne) || HValueIsNull(hThis, argTwo) || - HValueIsNull(hThis, argThree) || HValueIsNull(hThis, argFour) || - HValueIsNull(hThis, argFive)); - if (bFlags) { - FXJSE_Value_SetNull(args.GetReturnValue()); - } else { - nPrincpalAmount = HValueToFloat(hThis, argOne); - nRate = HValueToFloat(hThis, argTwo); - nPayment = HValueToFloat(hThis, argThree); - nFirstMonth = HValueToFloat(hThis, argFour); - nNumberOfMonths = HValueToFloat(hThis, argFive); - bFlags = ((nPrincpalAmount <= 0) || (nRate <= 0) || (nPayment <= 0) || - (nFirstMonth < 0) || (nNumberOfMonths < 0)); - if (bFlags) { - pContext->ThrowScriptErrorMessage(XFA_IDS_ARGUMENT_MISMATCH); - } else { - int32_t iEnd = (int32_t)(nFirstMonth + nNumberOfMonths - 1); - FX_FLOAT nSum = 0; - FX_FLOAT nRateOfMonth = nRate / 12; - int32_t iNums = - (int32_t)((FXSYS_log10((FX_FLOAT)(nPayment / nPrincpalAmount)) - - FXSYS_log10((FX_FLOAT)(nPayment / nPrincpalAmount - - nRateOfMonth))) / - FXSYS_log10((FX_FLOAT)(1 + nRateOfMonth))); - if (iEnd > iNums) { - iEnd = iNums; - } - if (nPayment < nPrincpalAmount * nRateOfMonth) { - bFlags = TRUE; - } - if (!bFlags) { - int32_t i = 0; - for (i = 0; i < nFirstMonth - 1; ++i) { - nPrincpalAmount -= nPayment - nPrincpalAmount * nRateOfMonth; - } - FX_FLOAT nTemp = 0; - for (; i < iEnd; ++i) { - nTemp = nPayment - nPrincpalAmount * nRateOfMonth; - nSum += nTemp; - nPrincpalAmount -= nTemp; - } - FXJSE_Value_SetFloat(args.GetReturnValue(), nSum); - } else { - pContext->ThrowScriptErrorMessage(XFA_IDS_ARGUMENT_MISMATCH); - } - } - } - FXJSE_Value_Release(argOne); - FXJSE_Value_Release(argTwo); - FXJSE_Value_Release(argThree); - FXJSE_Value_Release(argFour); - FXJSE_Value_Release(argFive); - } else { - pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"PPmt"); - } -} -void CXFA_FM2JSContext::PV(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - if (args.GetLength() == 3) { - FX_BOOL bFlags = FALSE; - FX_DOUBLE nAmount = 0; - FX_DOUBLE nRate = 0; - FX_DOUBLE nPeriod = 0; - FXJSE_HVALUE argOne = GetSimpleHValue(hThis, args, 0); - FXJSE_HVALUE argTwo = GetSimpleHValue(hThis, args, 1); - FXJSE_HVALUE argThree = GetSimpleHValue(hThis, args, 2); - bFlags = (HValueIsNull(hThis, argOne) || HValueIsNull(hThis, argTwo) || - HValueIsNull(hThis, argThree)); - if (bFlags) { - FXJSE_Value_SetNull(args.GetReturnValue()); - } else { - nAmount = HValueToDouble(hThis, argOne); - nRate = HValueToDouble(hThis, argTwo); - nPeriod = HValueToDouble(hThis, argThree); - bFlags = ((nAmount <= 0) || (nRate < 0) || (nPeriod <= 0)); - if (bFlags) { - pContext->ThrowScriptErrorMessage(XFA_IDS_ARGUMENT_MISMATCH); - } else { - FX_DOUBLE nTemp = 1; - for (int32_t i = 0; i < nPeriod; ++i) { - nTemp *= 1 + nRate; - } - nTemp = 1 / nTemp; - FXJSE_Value_SetDouble(args.GetReturnValue(), - nAmount * ((1 - nTemp) / nRate)); - } - } - FXJSE_Value_Release(argOne); - FXJSE_Value_Release(argTwo); - FXJSE_Value_Release(argThree); - } else { - pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"PV"); - } -} -void CXFA_FM2JSContext::Rate(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - if (args.GetLength() == 3) { - FX_BOOL bFlags = FALSE; - FX_FLOAT nFuture = 0; - FX_FLOAT nPresent = 0; - FX_FLOAT nTotalNumber = 0; - FXJSE_HVALUE argOne = GetSimpleHValue(hThis, args, 0); - FXJSE_HVALUE argTwo = GetSimpleHValue(hThis, args, 1); - FXJSE_HVALUE argThree = GetSimpleHValue(hThis, args, 2); - bFlags = (HValueIsNull(hThis, argOne) || HValueIsNull(hThis, argTwo) || - HValueIsNull(hThis, argThree)); - if (bFlags) { - FXJSE_Value_SetNull(args.GetReturnValue()); - } else { - nFuture = HValueToFloat(hThis, argOne); - nPresent = HValueToFloat(hThis, argTwo); - nTotalNumber = HValueToFloat(hThis, argThree); - bFlags = ((nFuture <= 0) || (nPresent < 0) || (nTotalNumber <= 0)); - if (bFlags) { - pContext->ThrowScriptErrorMessage(XFA_IDS_ARGUMENT_MISMATCH); - } else { - FXJSE_Value_SetFloat(args.GetReturnValue(), - (FXSYS_pow((FX_FLOAT)(nFuture / nPresent), - (FX_FLOAT)(1 / nTotalNumber)) - - 1)); - } - } - FXJSE_Value_Release(argOne); - FXJSE_Value_Release(argTwo); - FXJSE_Value_Release(argThree); - } else { - pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"Rate"); - } -} -void CXFA_FM2JSContext::Term(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - if (args.GetLength() == 3) { - FX_BOOL bFlags = FALSE; - FX_FLOAT nMount = 0; - FX_FLOAT nRate = 0; - FX_FLOAT nFuture = 0; - FXJSE_HVALUE argOne = GetSimpleHValue(hThis, args, 0); - FXJSE_HVALUE argTwo = GetSimpleHValue(hThis, args, 1); - FXJSE_HVALUE argThree = GetSimpleHValue(hThis, args, 2); - bFlags = (FXJSE_Value_IsNull(argOne) || FXJSE_Value_IsNull(argTwo) || - FXJSE_Value_IsNull(argThree)); - if (bFlags) { - FXJSE_Value_SetNull(args.GetReturnValue()); - } else { - nMount = HValueToFloat(hThis, argOne); - nRate = HValueToFloat(hThis, argTwo); - nFuture = HValueToFloat(hThis, argThree); - bFlags = ((nMount <= 0) || (nRate <= 0) || (nFuture <= 0)); - if (bFlags) { - pContext->ThrowScriptErrorMessage(XFA_IDS_ARGUMENT_MISMATCH); - } else { - FXJSE_Value_SetFloat( - args.GetReturnValue(), - (FXSYS_log((FX_FLOAT)(nFuture / nMount * nRate) + 1) / - FXSYS_log((FX_FLOAT)(1 + nRate)))); - } - } - FXJSE_Value_Release(argOne); - FXJSE_Value_Release(argTwo); - FXJSE_Value_Release(argThree); - } else { - pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"Term"); - } -} -void CXFA_FM2JSContext::Choose(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - FXJSE_HRUNTIME hruntime = pContext->GetScriptRuntime(); - int32_t argc = args.GetLength(); - if (argc > 1) { - FXJSE_HVALUE argOne = args.GetValue(0); - FX_BOOL argOneIsNull = FALSE; - int32_t iIndex = 0; - argOneIsNull = HValueIsNull(hThis, argOne); - if (!argOneIsNull) { - iIndex = (int32_t)HValueToFloat(hThis, argOne); - } - FXJSE_Value_Release(argOne); - if (argOneIsNull) { - FXJSE_Value_SetNull(args.GetReturnValue()); - } else if (iIndex < 1) { - FXJSE_Value_SetUTF8String(args.GetReturnValue(), ""); - } else { - FX_BOOL bFound = FALSE; - FX_BOOL bStopCounterFlags = FALSE; - int32_t iArgIndex = 1; - int32_t iValueIndex = 0; - while (!bFound && !bStopCounterFlags && (iArgIndex < argc)) { - FXJSE_HVALUE argIndexValue = args.GetValue(iArgIndex); - if (FXJSE_Value_IsArray(argIndexValue)) { - FXJSE_HVALUE lengthValue = FXJSE_Value_Create(hruntime); - FXJSE_Value_GetObjectProp(argIndexValue, "length", lengthValue); - int32_t iLength = FXJSE_Value_ToInteger(lengthValue); - FXJSE_Value_Release(lengthValue); - if (iLength > 3) { - bStopCounterFlags = TRUE; - } - iValueIndex += (iLength - 2); - if (iValueIndex >= iIndex) { - FXJSE_HVALUE propertyValue = FXJSE_Value_Create(hruntime); - FXJSE_HVALUE jsobjectValue = FXJSE_Value_Create(hruntime); - FXJSE_HVALUE newProperty = FXJSE_Value_Create(hruntime); - FXJSE_Value_GetObjectPropByIdx(argIndexValue, 1, propertyValue); - FXJSE_Value_GetObjectPropByIdx( - argIndexValue, ((iLength - 1) - (iValueIndex - iIndex)), - jsobjectValue); - if (FXJSE_Value_IsNull(propertyValue)) { - GetObjectDefaultValue(jsobjectValue, newProperty); - } else { - CFX_ByteString propStr; - FXJSE_Value_ToUTF8String(propertyValue, propStr); - FXJSE_Value_GetObjectProp(jsobjectValue, propStr, newProperty); - } - CFX_ByteString bsChoosed; - HValueToUTF8String(newProperty, bsChoosed); - FXJSE_Value_SetUTF8String(args.GetReturnValue(), bsChoosed); - FXJSE_Value_Release(newProperty); - FXJSE_Value_Release(jsobjectValue); - FXJSE_Value_Release(propertyValue); - bFound = TRUE; - } - } else { - iValueIndex++; - if (iValueIndex == iIndex) { - CFX_ByteString bsChoosed; - HValueToUTF8String(argIndexValue, bsChoosed); - FXJSE_Value_SetUTF8String(args.GetReturnValue(), bsChoosed); - bFound = TRUE; - } - } - FXJSE_Value_Release(argIndexValue); - iArgIndex++; - } - if (!bFound) { - FXJSE_Value_SetUTF8String(args.GetReturnValue(), ""); - } - } - } else { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"Choose"); - } -} -void CXFA_FM2JSContext::Exists(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - if (args.GetLength() == 1) { - FXJSE_HVALUE argOne = args.GetValue(0); - FXJSE_Value_SetInteger(args.GetReturnValue(), FXJSE_Value_IsObject(argOne)); - FXJSE_Value_Release(argOne); - } else { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"Exists"); - } -} -void CXFA_FM2JSContext::HasValue(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - if (args.GetLength() == 1) { - FXJSE_HVALUE argOne = GetSimpleHValue(hThis, args, 0); - if (FXJSE_Value_IsUTF8String(argOne)) { - CFX_ByteString valueStr; - FXJSE_Value_ToUTF8String(argOne, valueStr); - valueStr.TrimLeft(); - FXJSE_Value_SetInteger(args.GetReturnValue(), (!valueStr.IsEmpty())); - } else if (FXJSE_Value_IsNumber(argOne) || FXJSE_Value_IsBoolean(argOne)) { - FXJSE_Value_SetInteger(args.GetReturnValue(), TRUE); - } else { - FXJSE_Value_SetInteger(args.GetReturnValue(), FALSE); - } - FXJSE_Value_Release(argOne); - } else { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"HasValue"); - } -} -void CXFA_FM2JSContext::Oneof(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - int32_t argc = args.GetLength(); - if (argc > 1) { - FX_BOOL bFlags = FALSE; - FXJSE_HVALUE argOne = GetSimpleHValue(hThis, args, 0); - FXJSE_HVALUE* parametersValue = 0; - int32_t iCount = 0; - unfoldArgs(hThis, args, parametersValue, iCount, 1); - for (int32_t i = 0; i < iCount; i++) { - if (simpleValueCompare(hThis, argOne, parametersValue[i])) { - bFlags = TRUE; - break; - } - } - FXJSE_Value_SetInteger(args.GetReturnValue(), bFlags); - FXJSE_Value_Release(argOne); - for (int32_t i = 0; i < iCount; i++) { - FXJSE_Value_Release(parametersValue[i]); - } - FX_Free(parametersValue); - parametersValue = 0; - } else { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"Oneof"); - } -} -void CXFA_FM2JSContext::Within(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - int32_t argc = args.GetLength(); - if (argc == 3) { - FXJSE_HVALUE argOne = GetSimpleHValue(hThis, args, 0); - if (FXJSE_Value_IsNull(argOne)) { - FXJSE_Value_SetUndefined(args.GetReturnValue()); - } else { - FXJSE_HVALUE argLow = GetSimpleHValue(hThis, args, 1); - FXJSE_HVALUE argHeight = GetSimpleHValue(hThis, args, 2); - if (FXJSE_Value_IsNumber(argOne)) { - FX_FLOAT oneNumber = HValueToFloat(hThis, argOne); - FX_FLOAT lowNumber = HValueToFloat(hThis, argLow); - FX_FLOAT heightNumber = HValueToFloat(hThis, argHeight); - FXJSE_Value_SetInteger( - args.GetReturnValue(), - ((oneNumber >= lowNumber) && (oneNumber <= heightNumber))); - } else { - CFX_ByteString oneString; - CFX_ByteString lowString; - CFX_ByteString heightString; - HValueToUTF8String(argOne, oneString); - HValueToUTF8String(argLow, lowString); - HValueToUTF8String(argHeight, heightString); - FXJSE_Value_SetInteger(args.GetReturnValue(), - ((oneString.Compare(lowString) >= 0) && - (oneString.Compare(heightString) <= 0))); - } - FXJSE_Value_Release(argLow); - FXJSE_Value_Release(argHeight); - } - FXJSE_Value_Release(argOne); - } else { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"Within"); - } -} -void CXFA_FM2JSContext::If(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - if (args.GetLength() == 3) { - FXJSE_HVALUE argCondition = GetSimpleHValue(hThis, args, 0); - FXJSE_HVALUE argFirstValue = GetSimpleHValue(hThis, args, 1); - FXJSE_HVALUE argSecondValue = GetSimpleHValue(hThis, args, 2); - FX_BOOL bCondition = FXJSE_Value_ToBoolean(argCondition); - FXJSE_Value_Set(args.GetReturnValue(), - bCondition ? argFirstValue : argSecondValue); - FXJSE_Value_Release(argSecondValue); - FXJSE_Value_Release(argFirstValue); - FXJSE_Value_Release(argCondition); - } else { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"If"); - } -} -void CXFA_FM2JSContext::Eval(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - FXJSE_HRUNTIME hruntime = pContext->GetScriptRuntime(); - if (args.GetLength() == 1) { - FXJSE_HVALUE scriptValue = GetSimpleHValue(hThis, args, 0); - CFX_ByteString utf8ScriptString; - HValueToUTF8String(scriptValue, utf8ScriptString); - if (utf8ScriptString.IsEmpty()) { - FXJSE_Value_SetNull(args.GetReturnValue()); - } else { - CFX_WideTextBuf wsJavaScriptBuf; - CFX_WideString javaScript; - CFX_WideString wsError; - XFA_FM2JS_Translate(CFX_WideString::FromUTF8( - utf8ScriptString, utf8ScriptString.GetLength()), - wsJavaScriptBuf, wsError); - FXJSE_HCONTEXT hContext = FXJSE_Context_Create(hruntime); - FXJSE_HVALUE returnValue = FXJSE_Value_Create(hruntime); - javaScript = wsJavaScriptBuf.GetWideString(); - FXJSE_ExecuteScript(hContext, - FX_UTF8Encode(javaScript, javaScript.GetLength()), - returnValue); - FXJSE_Value_Set(args.GetReturnValue(), returnValue); - FXJSE_Value_Release(returnValue); - FXJSE_Context_Release(hContext); - } - FXJSE_Value_Release(scriptValue); - } else { - pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"Eval"); - } -} -void CXFA_FM2JSContext::Ref(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - FXJSE_HRUNTIME hruntime = pContext->GetScriptRuntime(); - if (args.GetLength() == 1) { - FXJSE_HVALUE argOne = args.GetValue(0); - if (FXJSE_Value_IsNull(argOne)) { - FXJSE_HVALUE rgValues[3]; - for (int32_t i = 0; i < 3; i++) { - rgValues[i] = FXJSE_Value_Create(hruntime); - } - FXJSE_Value_SetInteger(rgValues[0], 4); - FXJSE_Value_SetNull(rgValues[1]); - FXJSE_Value_SetNull(rgValues[2]); - FXJSE_Value_SetArray(args.GetReturnValue(), 3, rgValues); - for (int32_t i = 0; i < 3; i++) { - FXJSE_Value_Release(rgValues[i]); - } - } else if (FXJSE_Value_IsArray(argOne)) { -#ifndef NDEBUG - FXJSE_HVALUE lengthValue = FXJSE_Value_Create(hruntime); - FXJSE_Value_GetObjectProp(argOne, "length", lengthValue); - FXSYS_assert(FXJSE_Value_ToInteger(lengthValue) >= 3); - FXJSE_Value_Release(lengthValue); -#endif - FXJSE_HVALUE propertyValue = FXJSE_Value_Create(hruntime); - FXJSE_HVALUE jsObjectValue = FXJSE_Value_Create(hruntime); - FXJSE_Value_GetObjectPropByIdx(argOne, 1, propertyValue); - FXJSE_Value_GetObjectPropByIdx(argOne, 2, jsObjectValue); - if (FXJSE_Value_IsNull(jsObjectValue)) { - pContext->ThrowScriptErrorMessage(XFA_IDS_ARGUMENT_MISMATCH); - } else if (FXJSE_Value_IsNull(propertyValue) && - (!FXJSE_Value_IsNull(jsObjectValue))) { - FXJSE_HVALUE rgValues[3]; - for (int32_t i = 0; i < 3; i++) { - rgValues[i] = FXJSE_Value_Create(hruntime); - } - FXJSE_Value_SetInteger(rgValues[0], 3); - FXJSE_Value_SetNull(rgValues[1]); - FXJSE_Value_Set(rgValues[2], jsObjectValue); - FXJSE_Value_SetArray(args.GetReturnValue(), 3, rgValues); - for (int32_t i = 0; i < 3; i++) { - FXJSE_Value_Release(rgValues[i]); - } - } else { - pContext->ThrowScriptErrorMessage(XFA_IDS_ARGUMENT_MISMATCH); - } - FXJSE_Value_Release(jsObjectValue); - FXJSE_Value_Release(propertyValue); - } else if (FXJSE_Value_IsObject(argOne)) { - FXJSE_HVALUE rgValues[3]; - for (int32_t i = 0; i < 3; i++) { - rgValues[i] = FXJSE_Value_Create(hruntime); - } - FXJSE_Value_SetInteger(rgValues[0], 3); - FXJSE_Value_SetNull(rgValues[1]); - FXJSE_Value_Set(rgValues[2], argOne); - FXJSE_Value_SetArray(args.GetReturnValue(), 3, rgValues); - for (int32_t i = 0; i < 3; i++) { - FXJSE_Value_Release(rgValues[i]); - } - } else if (FXJSE_Value_IsBoolean(argOne) || - FXJSE_Value_IsUTF8String(argOne) || - FXJSE_Value_IsNumber(argOne)) { - FXJSE_Value_Set(args.GetReturnValue(), argOne); - } else { - pContext->ThrowScriptErrorMessage(XFA_IDS_ARGUMENT_MISMATCH); - } - FXJSE_Value_Release(argOne); - } else { - pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"Ref"); - } -} -void CXFA_FM2JSContext::UnitType(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - if (args.GetLength() == 1) { - FXJSE_HVALUE unitspanValue = GetSimpleHValue(hThis, args, 0); - if (FXJSE_Value_IsNull(unitspanValue)) { - FXJSE_Value_SetNull(args.GetReturnValue()); - FXJSE_Value_Release(unitspanValue); - return; - } - CFX_ByteString unitspanString; - HValueToUTF8String(unitspanValue, unitspanString); - if (unitspanString.IsEmpty()) { - FXJSE_Value_SetUTF8String(args.GetReturnValue(), "in"); - } else { - enum XFA_FM2JS_VALUETYPE_ParserStatus { - VALUETYPE_START, - VALUETYPE_HAVEINVALIDCHAR, - VALUETYPE_HAVEDIGIT, - VALUETYPE_HAVEDIGITWHITE, - VALUETYPE_ISCM, - VALUETYPE_ISMM, - VALUETYPE_ISPT, - VALUETYPE_ISMP, - VALUETYPE_ISIN, - }; - unitspanString.MakeLower(); - CFX_WideString wsTypeString = - CFX_WideString::FromUTF8(unitspanString, unitspanString.GetLength()); - const FX_WCHAR* pData = wsTypeString; - int32_t u = 0; - int32_t uLen = wsTypeString.GetLength(); - while (*(pData + u) == 0x20 || *(pData + u) == 0x09 || - *(pData + u) == 0x0B || *(pData + u) == 0x0C || - *(pData + u) == 0x0A || *(pData + u) == 0x0D) { - u++; - } - XFA_FM2JS_VALUETYPE_ParserStatus eParserStatus = VALUETYPE_START; - FX_WCHAR typeChar; - while (u < uLen) { - typeChar = *(pData + u); - if (typeChar == 0x20 || typeChar == 0x09 || typeChar == 0x0B || - typeChar == 0x0C || typeChar == 0x0A || typeChar == 0x0D) { - if (eParserStatus == VALUETYPE_HAVEDIGIT || - eParserStatus == VALUETYPE_HAVEDIGITWHITE) { - eParserStatus = VALUETYPE_HAVEDIGITWHITE; - } else { - eParserStatus = VALUETYPE_ISIN; - break; - } - } else if ((typeChar >= '0' && typeChar <= '9') || typeChar == '-' || - typeChar == '.') { - if (eParserStatus == VALUETYPE_HAVEDIGITWHITE) { - eParserStatus = VALUETYPE_ISIN; - break; - } else { - eParserStatus = VALUETYPE_HAVEDIGIT; - } - } else if ((typeChar == 'c' || typeChar == 'p') && (u + 1 < uLen)) { - FX_WCHAR nextChar = *(pData + u + 1); - if ((eParserStatus == VALUETYPE_START || - eParserStatus == VALUETYPE_HAVEDIGIT || - eParserStatus == VALUETYPE_HAVEDIGITWHITE) && - (nextChar > '9' || nextChar < '0') && nextChar != '.' && - nextChar != '-') { - eParserStatus = (typeChar == 'c') ? VALUETYPE_ISCM : VALUETYPE_ISPT; - break; - } else { - eParserStatus = VALUETYPE_HAVEINVALIDCHAR; - } - } else if (typeChar == 'm' && (u + 1 < uLen)) { - FX_WCHAR nextChar = *(pData + u + 1); - if ((eParserStatus == VALUETYPE_START || - eParserStatus == VALUETYPE_HAVEDIGIT || - eParserStatus == VALUETYPE_HAVEDIGITWHITE) && - (nextChar > '9' || nextChar < '0') && nextChar != '.' && - nextChar != '-') { - eParserStatus = VALUETYPE_ISMM; - if (nextChar == 'p' || - ((u + 5 < uLen) && *(pData + u + 1) == 'i' && - *(pData + u + 2) == 'l' && *(pData + u + 3) == 'l' && - *(pData + u + 4) == 'i' && *(pData + u + 5) == 'p')) { - eParserStatus = VALUETYPE_ISMP; - } - break; - } - } else { - eParserStatus = VALUETYPE_HAVEINVALIDCHAR; - } - u++; - } - switch (eParserStatus) { - case VALUETYPE_ISCM: - FXJSE_Value_SetUTF8String(args.GetReturnValue(), "cm"); - break; - case VALUETYPE_ISMM: - FXJSE_Value_SetUTF8String(args.GetReturnValue(), "mm"); - break; - case VALUETYPE_ISPT: - FXJSE_Value_SetUTF8String(args.GetReturnValue(), "pt"); - break; - case VALUETYPE_ISMP: - FXJSE_Value_SetUTF8String(args.GetReturnValue(), "mp"); - break; - default: - FXJSE_Value_SetUTF8String(args.GetReturnValue(), "in"); - break; - } - } - FXJSE_Value_Release(unitspanValue); - } else { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"UnitType"); - } -} -void CXFA_FM2JSContext::UnitValue(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - int32_t argc = args.GetLength(); - if ((argc == 1) || (argc == 2)) { - FXJSE_HVALUE unitspanValue = GetSimpleHValue(hThis, args, 0); - FXJSE_HVALUE unitValue = 0; - CFX_ByteString unitspanString; - FX_DOUBLE dFirstNumber = 0; - CFX_ByteString strFirstUnit; - CFX_ByteString strUnit; - if (FXJSE_Value_IsNull(unitspanValue)) { - FXJSE_Value_SetNull(args.GetReturnValue()); - } else { - HValueToUTF8String(unitspanValue, unitspanString); - const FX_CHAR* pData = unitspanString; - if (pData) { - int32_t u = 0; - while (*(pData + u) == 0x20 || *(pData + u) == 0x09 || - *(pData + u) == 0x0B || *(pData + u) == 0x0C || - *(pData + u) == 0x0A || *(pData + u) == 0x0D) { - ++u; - } - while (u < unitspanString.GetLength()) { - if ((*(pData + u) > '9' || *(pData + u) < '0') && - *(pData + u) != '.' && *(pData + u) != '-') { - break; - } - ++u; - } - FX_CHAR* pTemp = NULL; - dFirstNumber = strtod(pData, &pTemp); - while (*(pData + u) == ' ' || *(pData + u) == 0x09 || - *(pData + u) == 0x0B || *(pData + u) == 0x0C || - *(pData + u) == 0x0A || *(pData + u) == 0x0D) { - ++u; - } - int32_t uLen = unitspanString.GetLength(); - while (u < uLen) { - if (*(pData + u) == ' ') { - break; - } - strFirstUnit += (*(pData + u)); - ++u; - } - strFirstUnit.MakeLower(); - if (argc == 2) { - unitValue = GetSimpleHValue(hThis, args, 1); - CFX_ByteString unitTempString; - HValueToUTF8String(unitValue, unitTempString); - const FX_CHAR* pData = unitTempString; - int32_t u = 0; - while (*(pData + u) == ' ' || *(pData + u) == 0x09 || - *(pData + u) == 0x0B || *(pData + u) == 0x0C || - *(pData + u) == 0x0A || *(pData + u) == 0x0D) { - ++u; - } - while (u < unitTempString.GetLength()) { - if ((*(pData + u) > '9' || *(pData + u) < '0') && - *(pData + u) != '.') { - break; - } - ++u; - } - while (*(pData + u) == ' ' || *(pData + u) == 0x09 || - *(pData + u) == 0x0B || *(pData + u) == 0x0C || - *(pData + u) == 0x0A || *(pData + u) == 0x0D) { - ++u; - } - int32_t uLen = unitTempString.GetLength(); - while (u < uLen) { - if (*(pData + u) == ' ') { - break; - } - strUnit += (*(pData + u)); - ++u; - } - strUnit.MakeLower(); - } else { - strUnit = strFirstUnit; - } - FX_DOUBLE dResult = 0; - if (strFirstUnit.Equal("in") || strFirstUnit.Equal("inches")) { - if (strUnit.Equal("mm") || strUnit.Equal("millimeters")) { - dResult = dFirstNumber * 25.4; - } else if (strUnit.Equal("cm") || strUnit.Equal("centimeters")) { - dResult = dFirstNumber * 2.54; - } else if (strUnit.Equal("pt") || strUnit.Equal("points")) { - dResult = dFirstNumber / 72; - } else if (strUnit.Equal("mp") || strUnit.Equal("millipoints")) { - dResult = dFirstNumber / 72000; - } else { - dResult = dFirstNumber; - } - } else if (strFirstUnit.Equal("mm") || - strFirstUnit.Equal("millimeters")) { - if (strUnit.Equal("mm") || strUnit.Equal("millimeters")) { - dResult = dFirstNumber; - } else if (strUnit.Equal("cm") || strUnit.Equal("centimeters")) { - dResult = dFirstNumber / 10; - } else if (strUnit.Equal("pt") || strUnit.Equal("points")) { - dResult = dFirstNumber / 25.4 / 72; - } else if (strUnit.Equal("mp") || strUnit.Equal("millipoints")) { - dResult = dFirstNumber / 25.4 / 72000; - } else { - dResult = dFirstNumber / 25.4; - } - } else if (strFirstUnit.Equal("cm") || - strFirstUnit.Equal("centimeters")) { - if (strUnit.Equal("mm") || strUnit.Equal("millimeters")) { - dResult = dFirstNumber * 10; - } else if (strUnit.Equal("cm") || strUnit.Equal("centimeters")) { - dResult = dFirstNumber; - } else if (strUnit.Equal("pt") || strUnit.Equal("points")) { - dResult = dFirstNumber / 2.54 / 72; - } else if (strUnit.Equal("mp") || strUnit.Equal("millipoints")) { - dResult = dFirstNumber / 2.54 / 72000; - } else { - dResult = dFirstNumber / 2.54; - } - } else if (strFirstUnit.Equal("pt") || strFirstUnit.Equal("points")) { - if (strUnit.Equal("mm") || strUnit.Equal("millimeters")) { - dResult = dFirstNumber / 72 * 25.4; - } else if (strUnit.Equal("cm") || strUnit.Equal("centimeters")) { - dResult = dFirstNumber / 72 * 2.54; - } else if (strUnit.Equal("pt") || strUnit.Equal("points")) { - dResult = dFirstNumber; - } else if (strUnit.Equal("mp") || strUnit.Equal("millipoints")) { - dResult = dFirstNumber * 1000; - } else { - dResult = dFirstNumber / 72; - } - } else if (strFirstUnit.Equal("mp") || - strFirstUnit.Equal("millipoints")) { - if (strUnit.Equal("mm") || strUnit.Equal("millimeters")) { - dResult = dFirstNumber / 72000 * 25.4; - } else if (strUnit.Equal("cm") || strUnit.Equal("centimeters")) { - dResult = dFirstNumber / 72000 * 2.54; - } else if (strUnit.Equal("pt") || strUnit.Equal("points")) { - dResult = dFirstNumber / 1000; - } else if (strUnit.Equal("mp") || strUnit.Equal("millipoints")) { - dResult = dFirstNumber; - } else { - dResult = dFirstNumber / 72000; - } - } - FXJSE_Value_SetDouble(args.GetReturnValue(), dResult); - } else { - FXJSE_Value_SetInteger(args.GetReturnValue(), 0); - } - } - FXJSE_Value_Release(unitspanValue); - if (argc == 2) { - FXJSE_Value_Release(unitValue); - } - } else { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"UnitValue"); - } -} -void CXFA_FM2JSContext::At(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - if (args.GetLength() == 2) { - FXJSE_HVALUE argOne = GetSimpleHValue(hThis, args, 0); - FXJSE_HVALUE argTwo = GetSimpleHValue(hThis, args, 1); - if (HValueIsNull(hThis, argOne) || HValueIsNull(hThis, argTwo)) { - FXJSE_Value_SetNull(args.GetReturnValue()); - } else { - CFX_ByteString stringTwo; - HValueToUTF8String(argTwo, stringTwo); - if (stringTwo.IsEmpty()) { - FXJSE_Value_SetInteger(args.GetReturnValue(), 1); - } else { - CFX_ByteString stringOne; - HValueToUTF8String(argOne, stringOne); - FX_STRSIZE iPosition = stringOne.Find(stringTwo); - FXJSE_Value_SetInteger(args.GetReturnValue(), iPosition + 1); - } - } - FXJSE_Value_Release(argOne); - FXJSE_Value_Release(argTwo); - } else { - pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"At"); - } -} -void CXFA_FM2JSContext::Concat(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - int32_t argc = args.GetLength(); - if (argc >= 1) { - CFX_ByteString resultString; - FX_BOOL bAllNull = TRUE; - FXJSE_HVALUE* argValues = FX_Alloc(FXJSE_HVALUE, argc); - for (int32_t i = 0; i < argc; i++) { - argValues[i] = GetSimpleHValue(hThis, args, i); - if (!HValueIsNull(hThis, argValues[i])) { - CFX_ByteString valueStr; - HValueToUTF8String(argValues[i], valueStr); - resultString += valueStr; - bAllNull = FALSE; - } - } - for (int32_t i = 0; i < argc; i++) { - FXJSE_Value_Release(argValues[i]); - } - FX_Free(argValues); - if (bAllNull) { - FXJSE_Value_SetNull(args.GetReturnValue()); - } else { - FXJSE_Value_SetUTF8String(args.GetReturnValue(), resultString); - } - } else { - pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"Concat"); - } -} -void CXFA_FM2JSContext::Decode(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - int32_t argc = args.GetLength(); - if (argc == 1) { - FXJSE_HVALUE argOne = GetSimpleHValue(hThis, args, 0); - if (HValueIsNull(hThis, argOne)) { - FXJSE_Value_SetNull(args.GetReturnValue()); - } else { - CFX_ByteString toDecodeString; - HValueToUTF8String(argOne, toDecodeString); - CFX_ByteTextBuf resultBuf; - DecodeURL(toDecodeString, resultBuf); - FXJSE_Value_SetUTF8String(args.GetReturnValue(), - resultBuf.GetByteString()); - } - FXJSE_Value_Release(argOne); - } else if (argc == 2) { - FXJSE_HVALUE argOne = GetSimpleHValue(hThis, args, 0); - FXJSE_HVALUE argTwo = GetSimpleHValue(hThis, args, 1); - if (HValueIsNull(hThis, argOne) || HValueIsNull(hThis, argTwo)) { - FXJSE_Value_SetNull(args.GetReturnValue()); - } else { - CFX_ByteString toDecodeString; - HValueToUTF8String(argOne, toDecodeString); - CFX_ByteString identifyString; - HValueToUTF8String(argTwo, identifyString); - CFX_ByteTextBuf resultBuf; - if (identifyString.EqualNoCase("html")) { - DecodeHTML(toDecodeString, resultBuf); - } else if (identifyString.EqualNoCase("xml")) { - DecodeXML(toDecodeString, resultBuf); - } else { - DecodeURL(toDecodeString, resultBuf); - } - FXJSE_Value_SetUTF8String(args.GetReturnValue(), - resultBuf.GetByteString()); - } - FXJSE_Value_Release(argOne); - FXJSE_Value_Release(argTwo); - } else { - pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"Decode"); - } -} -void CXFA_FM2JSContext::DecodeURL(const CFX_ByteStringC& szURLString, - CFX_ByteTextBuf& szResultString) { - CFX_WideString wsURLString = - CFX_WideString::FromUTF8(szURLString.GetCStr(), szURLString.GetLength()); - const FX_WCHAR* pData = wsURLString; - int32_t iLen = wsURLString.GetLength(); - int32_t i = 0; - FX_WCHAR ch = 0; - FX_WCHAR chTemp = 0; - CFX_WideTextBuf wsResultBuf; - while (i < iLen) { - ch = *(pData + i); - if ('%' == ch) { - chTemp = 0; - int32_t iCount = 0; - while (iCount < 2) { - ++i; - ch = *(pData + i); - if (ch <= '9' && ch >= '0') { - if (!iCount) { - chTemp += (ch - '0') * 16; - } else { - chTemp += (ch - '0'); - } - } else { - if (ch <= 'F' && ch >= 'A') { - if (!iCount) { - chTemp += (ch - 'A' + 10) * 16; - } else { - chTemp += (ch - 'A' + 10); - } - } else if (ch <= 'f' && ch >= 'a') { - if (!iCount) { - chTemp += (ch - 'a' + 10) * 16; - } else { - chTemp += (ch - 'a' + 10); - } - } else { - wsResultBuf.Clear(); - return; - } - } - ++iCount; - } - wsResultBuf.AppendChar(chTemp); - } else { - wsResultBuf.AppendChar(ch); - } - ++i; - } - wsResultBuf.AppendChar(0); - szResultString.Clear(); - szResultString << FX_UTF8Encode(wsResultBuf.GetBuffer(), - wsResultBuf.GetLength()); -} -void CXFA_FM2JSContext::DecodeHTML(const CFX_ByteStringC& szHTMLString, - CFX_ByteTextBuf& szResultString) { - CFX_WideString wsHTMLString = CFX_WideString::FromUTF8( - szHTMLString.GetCStr(), szHTMLString.GetLength()); - FX_WCHAR strString[9]; - int32_t iStrIndex = 0; - int32_t iLen = wsHTMLString.GetLength(); - int32_t i = 0; - int32_t iCode = 0; - FX_WCHAR ch = 0; - const FX_WCHAR* pData = wsHTMLString; - CFX_WideTextBuf wsResultBuf; - while (i < iLen) { - ch = *(pData + i); - if (ch == '&') { - ++i; - ch = *(pData + i); - if (ch == '#') { - ++i; - ch = *(pData + i); - if (ch == 'x' || ch == 'X') { - ++i; - ch = *(pData + i); - if ((ch >= '0' && ch <= '9') || (ch <= 'f' && ch >= 'a') || - (ch <= 'F' && ch >= 'A')) { - while (ch != ';' && i < iLen) { - if (ch >= '0' && ch <= '9') { - iCode += ch - '0'; - } else if (ch <= 'f' && ch >= 'a') { - iCode += ch - 'a' + 10; - } else if (ch <= 'F' && ch >= 'A') { - iCode += ch - 'A' + 10; - } else { - wsResultBuf.Clear(); - return; - } - ++i; - iCode *= 16; - ch = *(pData + i); - } - iCode /= 16; - } - } else { - wsResultBuf.Clear(); - return; - } - } else { - while (ch != ';' && i < iLen) { - strString[iStrIndex++] = ch; - ++i; - ch = *(pData + i); - } - strString[iStrIndex] = 0; - } - } else { - wsResultBuf.AppendChar(ch); - ++i; - continue; - } - uint32_t iData = 0; - if (HTMLSTR2Code(strString, iData)) { - wsResultBuf.AppendChar((FX_WCHAR)iData); - } else { - wsResultBuf.AppendChar(iCode); - } - iStrIndex = 0; - strString[iStrIndex] = 0; - ++i; - } - wsResultBuf.AppendChar(0); - szResultString.Clear(); - szResultString << FX_UTF8Encode(wsResultBuf.GetBuffer(), - wsResultBuf.GetLength()); -} -void CXFA_FM2JSContext::DecodeXML(const CFX_ByteStringC& szXMLString, - CFX_ByteTextBuf& szResultString) { - CFX_WideString wsXMLString = - CFX_WideString::FromUTF8(szXMLString.GetCStr(), szXMLString.GetLength()); - FX_WCHAR strString[9]; - int32_t iStrIndex = 0; - int32_t iLen = wsXMLString.GetLength(); - int32_t i = 0; - int32_t iCode = 0; - FX_WCHAR ch = 0; - const FX_WCHAR* pData = wsXMLString; - CFX_WideTextBuf wsXMLBuf; - while (i < iLen) { - ch = *(pData + i); - if (ch == '&') { - ++i; - ch = *(pData + i); - if (ch == '#') { - ++i; - ch = *(pData + i); - if (ch == 'x' || ch == 'X') { - ++i; - ch = *(pData + i); - if ((ch >= '0' && ch <= '9') || (ch <= 'f' && ch >= 'a') || - (ch <= 'F' && ch >= 'A')) { - while (ch != ';') { - if (ch >= '0' && ch <= '9') { - iCode += ch - '0'; - } else if (ch <= 'f' && ch >= 'a') { - iCode += ch - 'a' + 10; - } else if (ch <= 'F' && ch >= 'A') { - iCode += ch - 'A' + 10; - } else { - wsXMLBuf.Clear(); - return; - } - ++i; - iCode *= 16; - ch = *(pData + i); - } - iCode /= 16; - } - } else { - wsXMLBuf.Clear(); - return; - } - } else { - while (ch != ';' && i < iLen) { - strString[iStrIndex++] = ch; - ++i; - ch = *(pData + i); - } - strString[iStrIndex] = 0; - } - } else { - wsXMLBuf.AppendChar(ch); - ++i; - continue; - } - const FX_WCHAR* const strName[] = {L"quot", L"amp", L"apos", L"lt", L"gt"}; - int32_t iIndex = 0; - while (iIndex < 5) { - if (FXSYS_memcmp(strString, strName[iIndex], - FXSYS_wcslen(strName[iIndex])) == 0) { - break; - } - ++iIndex; - } - switch (iIndex) { - case 0: - wsXMLBuf.AppendChar('"'); - break; - case 1: - wsXMLBuf.AppendChar('&'); - break; - case 2: - wsXMLBuf.AppendChar('\''); - break; - case 3: - wsXMLBuf.AppendChar('<'); - break; - case 4: - wsXMLBuf.AppendChar('>'); - break; - default: - wsXMLBuf.AppendChar(iCode); - break; - } - iStrIndex = 0; - strString[iStrIndex] = 0; - ++i; - iCode = 0; - } - wsXMLBuf.AppendChar(0); - szResultString.Clear(); - szResultString << FX_UTF8Encode(wsXMLBuf.GetBuffer(), wsXMLBuf.GetLength()); -} -void CXFA_FM2JSContext::Encode(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - int32_t argc = args.GetLength(); - if (argc == 1) { - FXJSE_HVALUE argOne = GetSimpleHValue(hThis, args, 0); - if (HValueIsNull(hThis, argOne)) { - FXJSE_Value_SetNull(args.GetReturnValue()); - } else { - CFX_ByteString toEncodeString; - HValueToUTF8String(argOne, toEncodeString); - CFX_ByteTextBuf resultBuf; - EncodeURL(toEncodeString, resultBuf); - FXJSE_Value_SetUTF8String(args.GetReturnValue(), - resultBuf.GetByteString()); - } - FXJSE_Value_Release(argOne); - } else if (argc == 2) { - FXJSE_HVALUE argOne = GetSimpleHValue(hThis, args, 0); - FXJSE_HVALUE argTwo = GetSimpleHValue(hThis, args, 1); - if (HValueIsNull(hThis, argOne) || HValueIsNull(hThis, argTwo)) { - FXJSE_Value_SetNull(args.GetReturnValue()); - } else { - CFX_ByteString toEncodeString; - HValueToUTF8String(argOne, toEncodeString); - CFX_ByteString identifyString; - HValueToUTF8String(argTwo, identifyString); - CFX_ByteTextBuf resultBuf; - if (identifyString.EqualNoCase("html")) { - EncodeHTML(toEncodeString, resultBuf); - } else if (identifyString.EqualNoCase("xml")) { - EncodeXML(toEncodeString, resultBuf); - } else { - EncodeURL(toEncodeString, resultBuf); - } - FXJSE_Value_SetUTF8String(args.GetReturnValue(), - resultBuf.GetByteString()); - } - FXJSE_Value_Release(argOne); - FXJSE_Value_Release(argTwo); - } else { - pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"Encode"); - } -} -void CXFA_FM2JSContext::EncodeURL(const CFX_ByteStringC& szURLString, - CFX_ByteTextBuf& szResultBuf) { - CFX_WideString wsURLString = - CFX_WideString::FromUTF8(szURLString.GetCStr(), szURLString.GetLength()); - CFX_WideTextBuf wsResultBuf; - FX_WCHAR ch = 0; - int32_t iLength = wsURLString.GetLength(); - FX_WCHAR strEncode[4]; - strEncode[0] = '%'; - strEncode[3] = 0; - FX_WCHAR strUnsafe[] = {' ', '<', '>', '"', '#', '%', '{', '}', - '|', '\\', '^', '~', '[', ']', '`'}; - FX_WCHAR strReserved[] = {';', '/', '?', ':', '@', '=', '&'}; - FX_WCHAR strSpecial[] = {'$', '-', '+', '!', '*', '\'', '(', ')', ','}; - const FX_WCHAR* strCode = L"0123456789abcdef"; - for (int32_t u = 0; u < iLength; ++u) { - ch = wsURLString.GetAt(u); - int32_t i = 0; - int32_t iCount = sizeof(strUnsafe) / sizeof(strUnsafe[0]); - while (i < iCount) { - if (ch == strUnsafe[i]) { - int32_t iIndex = ch / 16; - strEncode[1] = strCode[iIndex]; - strEncode[2] = strCode[ch - iIndex * 16]; - wsResultBuf << FX_WSTRC(strEncode); - break; - } - ++i; - } - if (i < iCount) { - continue; - } - i = 0; - iCount = sizeof(strReserved) / sizeof(strReserved[0]); - while (i < iCount) { - if (ch == strReserved[i]) { - int32_t iIndex = ch / 16; - strEncode[1] = strCode[iIndex]; - strEncode[2] = strCode[ch - iIndex * 16]; - wsResultBuf << FX_WSTRC(strEncode); - break; - } - ++i; - } - if (i < iCount) { - continue; - } - i = 0; - iCount = sizeof(strSpecial) / sizeof(strSpecial[0]); - while (i < iCount) { - if (ch == strSpecial[i]) { - wsResultBuf.AppendChar(ch); - break; - } - ++i; - } - if (i < iCount) { - continue; - } - if (ch >= 0x80 && ch <= 0xff) { - int32_t iIndex = ch / 16; - strEncode[1] = strCode[iIndex]; - strEncode[2] = strCode[ch - iIndex * 16]; - wsResultBuf << FX_WSTRC(strEncode); - } else if (ch <= 0x1f || ch == 0x7f) { - int32_t iIndex = ch / 16; - strEncode[1] = strCode[iIndex]; - strEncode[2] = strCode[ch - iIndex * 16]; - wsResultBuf << FX_WSTRC(strEncode); - } else if (ch >= 0x20 && ch <= 0x7e) { - wsResultBuf.AppendChar(ch); - } else { - int32_t iRadix = 16; - CFX_WideString strTmp; - while (ch >= iRadix) { - FX_WCHAR tmp = strCode[ch % iRadix]; - ch /= iRadix; - strTmp += tmp; - } - strTmp += strCode[ch]; - int32_t iLen = strTmp.GetLength(); - if (iLen < 2) { - break; - } - int32_t iIndex = 0; - if (iLen % 2 != 0) { - strEncode[1] = '0'; - strEncode[2] = strTmp.GetAt(iLen - 1); - iIndex = iLen - 2; - } else { - strEncode[1] = strTmp.GetAt(iLen - 1); - strEncode[2] = strTmp.GetAt(iLen - 2); - iIndex = iLen - 3; - } - wsResultBuf << FX_WSTRC(strEncode); - while (iIndex > 0) { - strEncode[1] = strTmp.GetAt(iIndex); - strEncode[2] = strTmp.GetAt(iIndex - 1); - iIndex -= 2; - wsResultBuf << FX_WSTRC(strEncode); - } - } - } - wsResultBuf.AppendChar(0); - szResultBuf.Clear(); - szResultBuf << FX_UTF8Encode(wsResultBuf.GetBuffer(), - wsResultBuf.GetLength()); -} -void CXFA_FM2JSContext::EncodeHTML(const CFX_ByteStringC& szHTMLString, - CFX_ByteTextBuf& szResultBuf) { - CFX_ByteString str = szHTMLString.GetCStr(); - CFX_WideString wsHTMLString = CFX_WideString::FromUTF8(str, str.GetLength()); - const FX_WCHAR* strCode = L"0123456789abcdef"; - FX_WCHAR strEncode[9]; - strEncode[0] = '&'; - strEncode[1] = '#'; - strEncode[2] = 'x'; - strEncode[5] = ';'; - strEncode[6] = 0; - strEncode[7] = ';'; - strEncode[8] = 0; - CFX_WideTextBuf wsResultBuf; - uint32_t ch = 0; - int32_t iLen = wsHTMLString.GetLength(); - int32_t i = 0; - const FX_WCHAR* pData = wsHTMLString; - int32_t iIndex = 0; - CFX_WideString htmlReserve; - while (i < iLen) { - ch = *(pData + i); - htmlReserve.Empty(); - if (HTMLCode2STR(ch, htmlReserve)) { - wsResultBuf.AppendChar(L'&'); - wsResultBuf << htmlReserve; - wsResultBuf.AppendChar(L';'); - } else { - if (ch >= 32 && ch <= 126) { - wsResultBuf.AppendChar((FX_WCHAR)ch); - } else if (ch < 256) { - iIndex = ch / 16; - strEncode[3] = strCode[iIndex]; - strEncode[4] = strCode[ch - iIndex * 16]; - strEncode[5] = ';'; - strEncode[6] = 0; - wsResultBuf << FX_WSTRC(strEncode); - } else { - int32_t iBigByte = ch / 256; - int32_t iLittleByte = ch % 256; - strEncode[3] = strCode[iBigByte / 16]; - strEncode[4] = strCode[iBigByte % 16]; - strEncode[5] = strCode[iLittleByte / 16]; - strEncode[6] = strCode[iLittleByte % 16]; - wsResultBuf << FX_WSTRC(strEncode); - } - } - ++i; - } - wsResultBuf.AppendChar(0); - szResultBuf.Clear(); - szResultBuf << FX_UTF8Encode(wsResultBuf.GetBuffer(), - wsResultBuf.GetLength()); -} -void CXFA_FM2JSContext::EncodeXML(const CFX_ByteStringC& szXMLString, - CFX_ByteTextBuf& szResultBuf) { - CFX_WideString wsXMLString = - CFX_WideString::FromUTF8(szXMLString.GetCStr(), szXMLString.GetLength()); - CFX_WideTextBuf wsResultBuf; - enum { - QUOT, - AMP, - APOS, - LT, - GT, - }; - FX_WCHAR strEncode[9]; - strEncode[0] = '&'; - strEncode[1] = '#'; - strEncode[2] = 'x'; - strEncode[5] = ';'; - strEncode[6] = 0; - strEncode[7] = ';'; - strEncode[8] = 0; - const FX_WCHAR* const strName[] = {L"quot", L"amp", L"apos", L"lt", L"gt"}; - const FX_WCHAR* strCode = L"0123456789abcdef"; - FX_WCHAR ch = 0; - int32_t iLength = wsXMLString.GetLength(); - int32_t iIndex = 0; - int32_t u = 0; - const FX_WCHAR* pData = wsXMLString; - for (u = 0; u < iLength; ++u) { - ch = *(pData + u); - switch (ch) { - case '"': - wsResultBuf.AppendChar('&'); - wsResultBuf << CFX_WideStringC(strName[QUOT]); - wsResultBuf.AppendChar(';'); - break; - case '&': - wsResultBuf.AppendChar('&'); - wsResultBuf << CFX_WideStringC(strName[AMP]); - wsResultBuf.AppendChar(';'); - break; - case '\'': - wsResultBuf.AppendChar('&'); - wsResultBuf << CFX_WideStringC(strName[APOS]); - wsResultBuf.AppendChar(';'); - break; - case '<': - wsResultBuf.AppendChar('&'); - wsResultBuf << CFX_WideStringC(strName[LT]); - wsResultBuf.AppendChar(';'); - break; - case '>': - wsResultBuf.AppendChar('&'); - wsResultBuf << CFX_WideStringC(strName[GT]); - wsResultBuf.AppendChar(';'); - break; - default: { - if (ch >= 32 && ch <= 126) { - wsResultBuf.AppendChar(ch); - } else if (ch < 256) { - iIndex = ch / 16; - strEncode[3] = strCode[iIndex]; - strEncode[4] = strCode[ch - iIndex * 16]; - strEncode[5] = ';'; - strEncode[6] = 0; - wsResultBuf << FX_WSTRC(strEncode); - } else { - int32_t iBigByte = ch / 256; - int32_t iLittleByte = ch % 256; - strEncode[3] = strCode[iBigByte / 16]; - strEncode[4] = strCode[iBigByte % 16]; - strEncode[5] = strCode[iLittleByte / 16]; - strEncode[6] = strCode[iLittleByte % 16]; - wsResultBuf << FX_WSTRC(strEncode); - } - } break; - } - } - wsResultBuf.AppendChar(0); - szResultBuf.Clear(); - szResultBuf << FX_UTF8Encode(wsResultBuf.GetBuffer(), - wsResultBuf.GetLength()); -} -FX_BOOL CXFA_FM2JSContext::HTMLSTR2Code(const CFX_WideStringC& pData, - uint32_t& iCode) { - int32_t iLength = pData.GetLength(); - uint32_t uHash = FX_HashCode_String_GetW(pData.GetPtr(), iLength); - XFA_FMHtmlHashedReserveCode htmlhashedreservecode; - int32_t iStart = 0, - iEnd = (sizeof(reservesForDecode) / sizeof(reservesForDecode[0])) - 1; - int32_t iMid = (iStart + iEnd) / 2; - do { - iMid = (iStart + iEnd) / 2; - htmlhashedreservecode = reservesForDecode[iMid]; - if (uHash == htmlhashedreservecode.m_uHash) { - iCode = htmlhashedreservecode.m_uCode; - return TRUE; - } else if (uHash < htmlhashedreservecode.m_uHash) { - iEnd = iMid - 1; - } else { - iStart = iMid + 1; - } - } while (iStart <= iEnd); - return FALSE; -} -FX_BOOL CXFA_FM2JSContext::HTMLCode2STR(uint32_t iCode, - CFX_WideString& wsHTMLReserve) { - XFA_FMHtmlReserveCode htmlreservecode; - int32_t iStart = 0, - iEnd = (sizeof(reservesForEncode) / sizeof(reservesForEncode[0])) - 1; - int32_t iMid = (iStart + iEnd) / 2; - do { - iMid = (iStart + iEnd) / 2; - htmlreservecode = reservesForEncode[iMid]; - if (iCode == htmlreservecode.m_uCode) { - wsHTMLReserve = htmlreservecode.m_htmlReserve; - return TRUE; - } else if (iCode < htmlreservecode.m_uCode) { - iEnd = iMid - 1; - } else { - iStart = iMid + 1; - } - } while (iStart <= iEnd); - return FALSE; -} -static FX_BOOL XFA_PATTERN_STRING_Type(const CFX_ByteStringC& szPattern, - FX_DWORD& patternType) { - CFX_WideString wsPattern = - CFX_WideString::FromUTF8(szPattern.GetCStr(), szPattern.GetLength()); - if (FX_WSTRC(L"datetime") == wsPattern.Left(8)) { - patternType = XFA_VT_DATETIME; - return TRUE; - } else if (FX_WSTRC(L"date") == wsPattern.Left(4)) { - patternType = wsPattern.Find(L"time") > 0 ? XFA_VT_DATETIME : XFA_VT_DATE; - return TRUE; - } else if (FX_WSTRC(L"time") == wsPattern.Left(4)) { - patternType = XFA_VT_TIME; - return TRUE; - } else if (FX_WSTRC(L"text") == wsPattern.Left(4)) { - patternType = XFA_VT_TEXT; - return TRUE; - } else if (FX_WSTRC(L"num") == wsPattern.Left(3)) { - if (FX_WSTRC(L"integer") == wsPattern.Mid(4, 7)) { - patternType = XFA_VT_INTEGER; - } else if (FX_WSTRC(L"decimal") == wsPattern.Mid(4, 7)) { - patternType = XFA_VT_DECIMAL; - } else if (FX_WSTRC(L"currency") == wsPattern.Mid(4, 8)) { - patternType = XFA_VT_FLOAT; - } else if (FX_WSTRC(L"percent") == wsPattern.Mid(4, 7)) { - patternType = XFA_VT_FLOAT; - } else { - patternType = XFA_VT_FLOAT; - } - return TRUE; - } - patternType = XFA_VT_NULL; - wsPattern.MakeLower(); - const FX_WCHAR* pData = wsPattern; - int32_t iLength = wsPattern.GetLength(); - int32_t iIndex = 0; - FX_BOOL bSingleQuotation = FALSE; - FX_WCHAR patternChar; - while (iIndex < iLength) { - patternChar = *(pData + iIndex); - if (patternChar == 0x27) { - bSingleQuotation = !bSingleQuotation; - } else if (!bSingleQuotation && - (patternChar == 'y' || patternChar == 'j')) { - patternType = XFA_VT_DATE; - iIndex++; - FX_WCHAR timePatternChar; - while (iIndex < iLength) { - timePatternChar = *(pData + iIndex); - if (timePatternChar == 0x27) { - bSingleQuotation = !bSingleQuotation; - } else if (!bSingleQuotation && timePatternChar == 't') { - patternType = XFA_VT_DATETIME; - break; - } - iIndex++; - } - break; - } else if (!bSingleQuotation && - (patternChar == 'h' || patternChar == 'k')) { - patternType = XFA_VT_TIME; - break; - } else if (!bSingleQuotation && - (patternChar == 'a' || patternChar == 'x' || - patternChar == 'o' || patternChar == '0')) { - patternType = XFA_VT_TEXT; - if (patternChar == 'x' || patternChar == 'o' || patternChar == '0') { - break; - } - } else if (!bSingleQuotation && - (patternChar == 'z' || patternChar == 's' || - patternChar == 'e' || patternChar == 'v' || - patternChar == '8' || patternChar == ',' || - patternChar == '.' || patternChar == '$')) { - patternType = XFA_VT_FLOAT; - if (patternChar == 'v' || patternChar == '8' || patternChar == '$') { - break; - } - } - iIndex++; - } - if (patternType == XFA_VT_NULL) { - patternType = XFA_VT_TEXT | XFA_VT_FLOAT; - } - return FALSE; -} -void CXFA_FM2JSContext::Format(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - int32_t argc = args.GetLength(); - if (argc >= 2) { - FXJSE_HVALUE argOne = GetSimpleHValue(hThis, args, 0); - FXJSE_HVALUE argTwo = GetSimpleHValue(hThis, args, 1); - CFX_ByteString szPattern; - HValueToUTF8String(argOne, szPattern); - CFX_ByteString szValue; - HValueToUTF8String(argTwo, szValue); - CXFA_Document* pDoc = pContext->GetDocument(); - IFX_LocaleMgr* pMgr = (IFX_LocaleMgr*)pDoc->GetLocalMgr(); - CXFA_Node* pThisNode = ToNode(pDoc->GetScriptContext()->GetThisObject()); - FXSYS_assert(pThisNode); - CXFA_WidgetData widgetData(pThisNode); - IFX_Locale* pLocale = widgetData.GetLocal(); - FX_DWORD patternType; - FX_BOOL bCompelte = XFA_PATTERN_STRING_Type(szPattern, patternType); - CFX_WideString wsPattern = - CFX_WideString::FromUTF8(szPattern, szPattern.GetLength()); - CFX_WideString wsValue = - CFX_WideString::FromUTF8(szValue, szValue.GetLength()); - if (!bCompelte) { - switch (patternType) { - case XFA_VT_DATETIME: { - FX_STRSIZE iTChar = wsPattern.Find(L'T'); - CFX_WideString wsDatePattern = FX_WSTRC(L"date{"); - wsDatePattern += wsPattern.Left(iTChar); - wsDatePattern += FX_WSTRC(L"} "); - CFX_WideString wsTimePattern = FX_WSTRC(L"time{"); - wsTimePattern += wsPattern.Mid(iTChar + 1); - wsTimePattern += FX_WSTRC(L"}"); - wsPattern = wsDatePattern + wsTimePattern; - } break; - case XFA_VT_DATE: { - wsPattern = FX_WSTRC(L"date{") + wsPattern; - wsPattern += FX_WSTRC(L"}"); - } break; - case XFA_VT_TIME: { - wsPattern = FX_WSTRC(L"time{") + wsPattern; - wsPattern += FX_WSTRC(L"}"); - } break; - case XFA_VT_TEXT: { - wsPattern = FX_WSTRC(L"text{") + wsPattern; - wsPattern += FX_WSTRC(L"}"); - } break; - case XFA_VT_FLOAT: { - wsPattern = FX_WSTRC(L"num{") + wsPattern; - wsPattern += FX_WSTRC(L"}"); - } break; - default: { - CFX_WideString wsTestPattern; - wsTestPattern = FX_WSTRC(L"num{") + wsPattern; - wsTestPattern += FX_WSTRC(L"}"); - CXFA_LocaleValue tempLocaleValue(XFA_VT_FLOAT, wsValue, wsTestPattern, - pLocale, (CXFA_LocaleMgr*)pMgr); - if (tempLocaleValue.IsValid()) { - wsPattern = wsTestPattern; - patternType = XFA_VT_FLOAT; - } else { - wsTestPattern = FX_WSTRC(L"text{") + wsPattern; - wsTestPattern += FX_WSTRC(L"}"); - wsPattern = wsTestPattern; - patternType = XFA_VT_TEXT; - } - } break; - } - } - CXFA_LocaleValue localeValue(patternType, wsValue, wsPattern, pLocale, - (CXFA_LocaleMgr*)pMgr); - CFX_WideString wsRet; - if (localeValue.FormatPatterns(wsRet, wsPattern, pLocale, - XFA_VALUEPICTURE_Display)) { - FXJSE_Value_SetUTF8String(args.GetReturnValue(), - FX_UTF8Encode(wsRet, wsRet.GetLength())); - } else { - FXJSE_Value_SetUTF8String(args.GetReturnValue(), ""); - } - FXJSE_Value_Release(argOne); - FXJSE_Value_Release(argTwo); - } else { - pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"Format"); - } -} -void CXFA_FM2JSContext::Left(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - if (args.GetLength() == 2) { - FXJSE_HVALUE argOne = GetSimpleHValue(hThis, args, 0); - FXJSE_HVALUE argTwo = GetSimpleHValue(hThis, args, 1); - FX_BOOL argIsNull = FALSE; - if ((HValueIsNull(hThis, argOne)) || (HValueIsNull(hThis, argTwo))) { - argIsNull = TRUE; - } - if (argIsNull) { - FXJSE_Value_SetNull(args.GetReturnValue()); - } else { - CFX_ByteString sourceString; - HValueToUTF8String(argOne, sourceString); - int32_t count = HValueToInteger(hThis, argTwo); - if (count < 0) { - count = 0; - } - FXJSE_Value_SetUTF8String(args.GetReturnValue(), - sourceString.Left(count)); - } - FXJSE_Value_Release(argOne); - FXJSE_Value_Release(argTwo); - } else { - pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"Left"); - } -} -void CXFA_FM2JSContext::Len(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - if (args.GetLength() == 1) { - FXJSE_HVALUE argOne = GetSimpleHValue(hThis, args, 0); - if (HValueIsNull(hThis, argOne)) { - FXJSE_Value_SetNull(args.GetReturnValue()); - } else { - CFX_ByteString sourceString; - HValueToUTF8String(argOne, sourceString); - FXJSE_Value_SetInteger(args.GetReturnValue(), sourceString.GetLength()); - } - FXJSE_Value_Release(argOne); - } else { - pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"Len"); - } -} -void CXFA_FM2JSContext::Lower(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - int32_t argc = args.GetLength(); - if ((argc > 0) && (argc < 3)) { - CFX_ByteString argString; - FXJSE_HVALUE argOne = GetSimpleHValue(hThis, args, 0); - FXJSE_HVALUE localeValue = 0; - if (HValueIsNull(hThis, argOne)) { - FXJSE_Value_SetNull(args.GetReturnValue()); - } else { - if (argc == 2) { - localeValue = GetSimpleHValue(hThis, args, 1); - } - HValueToUTF8String(argOne, argString); - CFX_WideTextBuf lowStringBuf; - CFX_WideString wsArgString = - CFX_WideString::FromUTF8(argString, argString.GetLength()); - const FX_WCHAR* pData = wsArgString; - int32_t iLen = argString.GetLength(); - int32_t i = 0; - int32_t ch = 0; - while (i < iLen) { - ch = *(pData + i); - if (ch >= 0x41 && ch <= 0x5A) { - ch += 32; - } else if (ch >= 0xC0 && ch <= 0xDE) { - ch += 32; - } else if (ch == 0x100 || ch == 0x102 || ch == 0x104) { - ch += 1; - } - lowStringBuf.AppendChar(ch); - ++i; - } - lowStringBuf.AppendChar(0); - FXJSE_Value_SetUTF8String( - args.GetReturnValue(), - FX_UTF8Encode(lowStringBuf.GetBuffer(), lowStringBuf.GetLength())); - if (argc == 2) { - FXJSE_Value_Release(localeValue); - } - } - FXJSE_Value_Release(argOne); - } else { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"Lower"); - } -} -void CXFA_FM2JSContext::Ltrim(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - if (args.GetLength() == 1) { - FXJSE_HVALUE argOne = GetSimpleHValue(hThis, args, 0); - if (HValueIsNull(hThis, argOne)) { - FXJSE_Value_SetNull(args.GetReturnValue()); - } else { - CFX_ByteString sourceString; - HValueToUTF8String(argOne, sourceString); - sourceString.TrimLeft(); - FXJSE_Value_SetUTF8String(args.GetReturnValue(), sourceString); - } - FXJSE_Value_Release(argOne); - } else { - pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"Ltrim"); - } -} -void CXFA_FM2JSContext::Parse(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - if (args.GetLength() == 2) { - FXJSE_HVALUE argOne = GetSimpleHValue(hThis, args, 0); - FXJSE_HVALUE argTwo = GetSimpleHValue(hThis, args, 1); - if (HValueIsNull(hThis, argTwo)) { - FXJSE_Value_SetNull(args.GetReturnValue()); - } else { - CFX_ByteString szPattern; - HValueToUTF8String(argOne, szPattern); - CFX_ByteString szValue; - HValueToUTF8String(argTwo, szValue); - CXFA_Document* pDoc = pContext->GetDocument(); - IFX_LocaleMgr* pMgr = (IFX_LocaleMgr*)pDoc->GetLocalMgr(); - CXFA_Node* pThisNode = ToNode(pDoc->GetScriptContext()->GetThisObject()); - FXSYS_assert(pThisNode); - CXFA_WidgetData widgetData(pThisNode); - IFX_Locale* pLocale = widgetData.GetLocal(); - FX_DWORD patternType; - FX_BOOL bCompletePattern = - XFA_PATTERN_STRING_Type(szPattern, patternType); - CFX_WideString wsPattern = - CFX_WideString::FromUTF8(szPattern, szPattern.GetLength()); - CFX_WideString wsValue = - CFX_WideString::FromUTF8(szValue, szValue.GetLength()); - CFX_ByteString szParsedValue; - if (bCompletePattern) { - CXFA_LocaleValue localeValue(patternType, wsValue, wsPattern, pLocale, - (CXFA_LocaleMgr*)pMgr); - if (localeValue.IsValid()) { - szParsedValue = FX_UTF8Encode(localeValue.GetValue()); - FXJSE_Value_SetUTF8String(args.GetReturnValue(), szParsedValue); - } else { - FXJSE_Value_SetUTF8String(args.GetReturnValue(), ""); - } - } else { - switch (patternType) { - case XFA_VT_DATETIME: { - FX_STRSIZE iTChar = wsPattern.Find(L'T'); - CFX_WideString wsDatePattern = FX_WSTRC(L"date{"); - wsDatePattern += wsPattern.Left(iTChar); - wsDatePattern += FX_WSTRC(L"} "); - CFX_WideString wsTimePattern = FX_WSTRC(L"time{"); - wsTimePattern += wsPattern.Mid(iTChar + 1); - wsTimePattern += FX_WSTRC(L"}"); - wsPattern = wsDatePattern + wsTimePattern; - CXFA_LocaleValue localeValue(patternType, wsValue, wsPattern, - pLocale, (CXFA_LocaleMgr*)pMgr); - if (localeValue.IsValid()) { - szParsedValue = FX_UTF8Encode(localeValue.GetValue()); - FXJSE_Value_SetUTF8String(args.GetReturnValue(), szParsedValue); - } else { - FXJSE_Value_SetUTF8String(args.GetReturnValue(), ""); - } - } break; - case XFA_VT_DATE: { - wsPattern = FX_WSTRC(L"date{") + wsPattern; - wsPattern += FX_WSTRC(L"}"); - CXFA_LocaleValue localeValue(patternType, wsValue, wsPattern, - pLocale, (CXFA_LocaleMgr*)pMgr); - if (localeValue.IsValid()) { - szParsedValue = FX_UTF8Encode(localeValue.GetValue()); - FXJSE_Value_SetUTF8String(args.GetReturnValue(), szParsedValue); - } else { - FXJSE_Value_SetUTF8String(args.GetReturnValue(), ""); - } - } break; - case XFA_VT_TIME: { - wsPattern = FX_WSTRC(L"time{") + wsPattern; - wsPattern += FX_WSTRC(L"}"); - CXFA_LocaleValue localeValue(patternType, wsValue, wsPattern, - pLocale, (CXFA_LocaleMgr*)pMgr); - if (localeValue.IsValid()) { - szParsedValue = FX_UTF8Encode(localeValue.GetValue()); - FXJSE_Value_SetUTF8String(args.GetReturnValue(), szParsedValue); - } else { - FXJSE_Value_SetUTF8String(args.GetReturnValue(), ""); - } - } break; - case XFA_VT_TEXT: { - wsPattern = FX_WSTRC(L"text{") + wsPattern; - wsPattern += FX_WSTRC(L"}"); - CXFA_LocaleValue localeValue(XFA_VT_TEXT, wsValue, wsPattern, - pLocale, (CXFA_LocaleMgr*)pMgr); - if (localeValue.IsValid()) { - szParsedValue = FX_UTF8Encode(localeValue.GetValue()); - FXJSE_Value_SetUTF8String(args.GetReturnValue(), szParsedValue); - } else { - FXJSE_Value_SetUTF8String(args.GetReturnValue(), ""); - } - } break; - case XFA_VT_FLOAT: { - wsPattern = FX_WSTRC(L"num{") + wsPattern; - wsPattern += FX_WSTRC(L"}"); - CXFA_LocaleValue localeValue(XFA_VT_FLOAT, wsValue, wsPattern, - pLocale, (CXFA_LocaleMgr*)pMgr); - if (localeValue.IsValid()) { - FXJSE_Value_SetDouble(args.GetReturnValue(), - localeValue.GetDoubleNum()); - } else { - FXJSE_Value_SetUTF8String(args.GetReturnValue(), ""); - } - } break; - default: { - CFX_WideString wsTestPattern; - wsTestPattern = FX_WSTRC(L"num{") + wsPattern; - wsTestPattern += FX_WSTRC(L"}"); - CXFA_LocaleValue localeValue(XFA_VT_FLOAT, wsValue, wsTestPattern, - pLocale, (CXFA_LocaleMgr*)pMgr); - if (localeValue.IsValid()) { - FXJSE_Value_SetDouble(args.GetReturnValue(), - localeValue.GetDoubleNum()); - } else { - wsTestPattern = FX_WSTRC(L"text{") + wsPattern; - wsTestPattern += FX_WSTRC(L"}"); - CXFA_LocaleValue localeValue(XFA_VT_TEXT, wsValue, wsTestPattern, - pLocale, (CXFA_LocaleMgr*)pMgr); - if (localeValue.IsValid()) { - szParsedValue = FX_UTF8Encode(localeValue.GetValue()); - FXJSE_Value_SetUTF8String(args.GetReturnValue(), szParsedValue); - } else { - FXJSE_Value_SetUTF8String(args.GetReturnValue(), ""); - } - } - } break; - } - } - } - FXJSE_Value_Release(argOne); - FXJSE_Value_Release(argTwo); - } else { - pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"Parse"); - } -} -void CXFA_FM2JSContext::Replace(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - int32_t argc = args.GetLength(); - if ((argc == 2) || (argc == 3)) { - FXJSE_HVALUE argOne = GetSimpleHValue(hThis, args, 0); - FXJSE_HVALUE argTwo = GetSimpleHValue(hThis, args, 1); - FXJSE_HVALUE argThree = 0; - CFX_ByteString oneString; - CFX_ByteString twoString; - CFX_ByteString threeString; - if (!HValueIsNull(hThis, argOne) && !HValueIsNull(hThis, argTwo)) { - HValueToUTF8String(argOne, oneString); - HValueToUTF8String(argTwo, twoString); - } - if (argc == 3) { - argThree = GetSimpleHValue(hThis, args, 2); - HValueToUTF8String(argThree, threeString); - } - int32_t iSrcLen = oneString.GetLength(); - int32_t iFindLen = twoString.GetLength(); - CFX_ByteTextBuf resultString; - int32_t iFindIndex = 0; - uint8_t ch = 0; - for (int32_t u = 0; u < iSrcLen; ++u) { - ch = oneString.GetAt(u); - if (ch == twoString.GetAt(iFindIndex)) { - int32_t iTemp = u + 1; - ++iFindIndex; - uint8_t chTemp = 0; - while (iFindIndex < iFindLen) { - chTemp = oneString.GetAt(iTemp); - if (chTemp == twoString.GetAt(iFindIndex)) { - ++iTemp; - ++iFindIndex; - } else { - iFindIndex = 0; - break; - } - } - if (iFindIndex == iFindLen) { - resultString << threeString; - u += iFindLen - 1; - iFindIndex = 0; - } else { - resultString.AppendChar(ch); - } - } else { - resultString.AppendChar(ch); - } - } - resultString.AppendChar(0); - FXJSE_Value_SetUTF8String(args.GetReturnValue(), - resultString.GetByteString()); - FXJSE_Value_Release(argOne); - FXJSE_Value_Release(argTwo); - if (argc == 3) { - FXJSE_Value_Release(argThree); - } - } else { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"Replace"); - } -} -void CXFA_FM2JSContext::Right(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - if (args.GetLength() == 2) { - FXJSE_HVALUE argOne = GetSimpleHValue(hThis, args, 0); - FXJSE_HVALUE argTwo = GetSimpleHValue(hThis, args, 1); - FX_BOOL argIsNull = FALSE; - if ((HValueIsNull(hThis, argOne)) || (HValueIsNull(hThis, argTwo))) { - argIsNull = TRUE; - } - if (argIsNull) { - FXJSE_Value_SetNull(args.GetReturnValue()); - } else { - CFX_ByteString sourceString; - HValueToUTF8String(argOne, sourceString); - int32_t count = HValueToInteger(hThis, argTwo); - if (count < 0) { - count = 0; - } - FXJSE_Value_SetUTF8String(args.GetReturnValue(), - sourceString.Right(count)); - } - FXJSE_Value_Release(argOne); - FXJSE_Value_Release(argTwo); - } else { - pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"Right"); - } -} -void CXFA_FM2JSContext::Rtrim(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - if (args.GetLength() == 1) { - FXJSE_HVALUE argOne = GetSimpleHValue(hThis, args, 0); - if (HValueIsNull(hThis, argOne)) { - FXJSE_Value_SetNull(args.GetReturnValue()); - } else { - CFX_ByteString sourceString; - HValueToUTF8String(argOne, sourceString); - sourceString.TrimRight(); - FXJSE_Value_SetUTF8String(args.GetReturnValue(), sourceString); - } - FXJSE_Value_Release(argOne); - } else { - pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"Rtrim"); - } -} -void CXFA_FM2JSContext::Space(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - if (args.GetLength() == 1) { - FXJSE_HVALUE argOne = GetSimpleHValue(hThis, args, 0); - if (FXJSE_Value_IsNull(argOne)) { - FXJSE_Value_SetNull(args.GetReturnValue()); - } else { - int32_t count = 0; - count = HValueToInteger(hThis, argOne); - count = (count < 0) ? 0 : count; - CFX_ByteTextBuf spaceString; - int32_t index = 0; - while (index < count) { - spaceString.AppendByte(' '); - index++; - } - spaceString.AppendByte(0); - FXJSE_Value_SetUTF8String(args.GetReturnValue(), - spaceString.GetByteString()); - } - FXJSE_Value_Release(argOne); - } else { - pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"Space"); - } -} -void CXFA_FM2JSContext::Str(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - int32_t argc = args.GetLength(); - if ((argc > 0) && (argc < 4)) { - FX_BOOL bFlags = FALSE; - FX_FLOAT fNumber; - int32_t iWidth = 10; - int32_t iPrecision = 0; - FXJSE_HVALUE numberValue = GetSimpleHValue(hThis, args, 0); - FXJSE_HVALUE widthValue = 0; - FXJSE_HVALUE precisionValue = 0; - if (FXJSE_Value_IsNull(numberValue)) { - bFlags = TRUE; - } else { - fNumber = HValueToFloat(hThis, numberValue); - } - if (argc > 1) { - widthValue = GetSimpleHValue(hThis, args, 1); - iWidth = (int32_t)HValueToFloat(hThis, widthValue); - } - if (argc == 3) { - precisionValue = GetSimpleHValue(hThis, args, 2); - iPrecision = (int32_t)HValueToFloat(hThis, precisionValue); - if (iPrecision < 0) { - iPrecision = 0; - } - } - if (!bFlags) { - CFX_ByteString numberString; - CFX_ByteString formatStr = "%"; - if (iPrecision) { - formatStr += "."; - formatStr += CFX_ByteString::FormatInteger(iPrecision); - } - formatStr += "f"; - numberString.Format(formatStr, fNumber); - const FX_CHAR* pData = numberString; - int32_t iLength = numberString.GetLength(); - int32_t u = 0; - while (u < iLength) { - if (*(pData + u) == '.') { - break; - } - ++u; - } - CFX_ByteTextBuf resultBuf; - if (u > iWidth || (iPrecision + u) >= iWidth) { - int32_t i = 0; - while (i < iWidth) { - resultBuf.AppendChar('*'); - ++i; - } - resultBuf.AppendChar(0); - } else { - if (u == iLength) { - if (iLength > iWidth) { - int32_t i = 0; - while (i < iWidth) { - resultBuf.AppendChar('*'); - ++i; - } - } else { - int32_t i = 0; - int32_t iSpace = iWidth - iLength; - while (i < iSpace) { - resultBuf.AppendChar(' '); - ++i; - } - resultBuf << pData; - } - } else { - int32_t iLeavingSpace = 0; - if (iPrecision == 0) { - iLeavingSpace = iWidth - (u + iPrecision); - } else { - iLeavingSpace = iWidth - (u + iPrecision + 1); - } - int32_t i = 0; - while (i < iLeavingSpace) { - resultBuf.AppendChar(' '); - ++i; - } - i = 0; - while (i < u) { - resultBuf.AppendChar(*(pData + i)); - ++i; - } - if (iPrecision != 0) { - resultBuf.AppendChar('.'); - } - u++; - i = 0; - while (u < iLength) { - if (i >= iPrecision) { - break; - } - resultBuf.AppendChar(*(pData + u)); - ++i; - ++u; - } - while (i < iPrecision) { - resultBuf.AppendChar('0'); - ++i; - } - resultBuf.AppendChar(0); - } - } - FXJSE_Value_SetUTF8String(args.GetReturnValue(), - resultBuf.GetByteString()); - } else { - FXJSE_Value_SetNull(args.GetReturnValue()); - } - FXJSE_Value_Release(numberValue); - if (argc > 1) { - FXJSE_Value_Release(widthValue); - if (argc == 3) { - FXJSE_Value_Release(precisionValue); - } - } - } else { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"Str"); - } -} -void CXFA_FM2JSContext::Stuff(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - int32_t argc = args.GetLength(); - if ((argc == 3) || (argc == 4)) { - CFX_ByteString sourceString; - CFX_ByteString insertString; - int32_t iLength = 0; - int32_t iStart = 0; - int32_t iDelete = 0; - FXJSE_HVALUE sourceValue = GetSimpleHValue(hThis, args, 0); - FXJSE_HVALUE startValue = GetSimpleHValue(hThis, args, 1); - FXJSE_HVALUE deleteValue = GetSimpleHValue(hThis, args, 2); - FXJSE_HVALUE insertValue = 0; - if (!FXJSE_Value_IsNull(sourceValue) && !FXJSE_Value_IsNull(startValue) && - !FXJSE_Value_IsNull(deleteValue)) { - HValueToUTF8String(sourceValue, sourceString); - iLength = sourceString.GetLength(); - iStart = (int32_t)HValueToFloat(hThis, startValue); - if (iStart < 1) { - iStart = 1; - } - if (iStart > iLength) { - iStart = iLength; - } - iDelete = (int32_t)HValueToFloat(hThis, deleteValue); - if (iDelete <= 0) { - iDelete = 0; - } - } - if (argc == 4) { - insertValue = GetSimpleHValue(hThis, args, 3); - HValueToUTF8String(insertValue, insertString); - } - iStart -= 1; - CFX_ByteTextBuf resultString; - int32_t i = 0; - while (i < iStart) { - resultString.AppendChar(sourceString.GetAt(i)); - ++i; - } - resultString << insertString; - i = iStart + iDelete; - while (i < iLength) { - resultString.AppendChar(sourceString.GetAt(i)); - ++i; - } - resultString.AppendChar(0); - FXJSE_Value_SetUTF8String(args.GetReturnValue(), - resultString.GetByteString()); - FXJSE_Value_Release(sourceValue); - FXJSE_Value_Release(startValue); - FXJSE_Value_Release(deleteValue); - if (argc == 4) { - FXJSE_Value_Release(insertValue); - } - } else { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"Stuff"); - } -} -void CXFA_FM2JSContext::Substr(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - int32_t argc = args.GetLength(); - if (argc == 3) { - FXJSE_HVALUE stringValue = GetSimpleHValue(hThis, args, 0); - FXJSE_HVALUE startValue = GetSimpleHValue(hThis, args, 1); - FXJSE_HVALUE endValue = GetSimpleHValue(hThis, args, 2); - if (HValueIsNull(hThis, stringValue) || (HValueIsNull(hThis, startValue)) || - (HValueIsNull(hThis, endValue))) { - FXJSE_Value_SetNull(args.GetReturnValue()); - } else { - CFX_ByteString szSourceStr; - int32_t iStart = 0; - int32_t iCount = 0; - HValueToUTF8String(stringValue, szSourceStr); - int32_t iLength = szSourceStr.GetLength(); - if (iLength == 0) { - FXJSE_Value_SetUTF8String(args.GetReturnValue(), ""); - } else { - iStart = (int32_t)HValueToFloat(hThis, startValue); - iCount = (int32_t)HValueToFloat(hThis, endValue); - if (iStart < 1) { - iStart = 1; - } - if (iStart > iLength) { - iStart = iLength; - } - if (iCount <= 0) { - iCount = 0; - } - iStart -= 1; - FXJSE_Value_SetUTF8String(args.GetReturnValue(), - szSourceStr.Mid(iStart, iCount)); - } - } - FXJSE_Value_Release(stringValue); - FXJSE_Value_Release(startValue); - FXJSE_Value_Release(endValue); - } else { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"Substr"); - } -} -void CXFA_FM2JSContext::Uuid(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - int32_t argc = args.GetLength(); - if ((argc == 0) || (argc == 1)) { - int32_t iNum = 0; - FXJSE_HVALUE argOne = 0; - if (argc == 1) { - argOne = GetSimpleHValue(hThis, args, 0); - iNum = (int32_t)HValueToFloat(hThis, argOne); - } - FX_GUID guid; - FX_GUID_CreateV4(&guid); - CFX_ByteString bsUId; - FX_GUID_ToString(&guid, bsUId, iNum); - FXJSE_Value_SetUTF8String(args.GetReturnValue(), bsUId); - if (argc == 1) { - FXJSE_Value_Release(argOne); - } - } else { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"Uuid"); - } -} -void CXFA_FM2JSContext::Upper(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - int32_t argc = args.GetLength(); - if ((argc > 0) && (argc < 3)) { - CFX_ByteString argString; - FXJSE_HVALUE argOne = GetSimpleHValue(hThis, args, 0); - FXJSE_HVALUE localeValue = 0; - if (HValueIsNull(hThis, argOne)) { - FXJSE_Value_SetNull(args.GetReturnValue()); - } else { - if (argc == 2) { - localeValue = GetSimpleHValue(hThis, args, 1); - } - HValueToUTF8String(argOne, argString); - CFX_WideTextBuf upperStringBuf; - CFX_WideString wsArgString = - CFX_WideString::FromUTF8(argString, argString.GetLength()); - const FX_WCHAR* pData = wsArgString; - int32_t iLen = wsArgString.GetLength(); - int32_t i = 0; - int32_t ch = 0; - while (i < iLen) { - ch = *(pData + i); - if (ch >= 0x61 && ch <= 0x7A) { - ch -= 32; - } else if (ch >= 0xE0 && ch <= 0xFE) { - ch -= 32; - } else if (ch == 0x101 || ch == 0x103 || ch == 0x105) { - ch -= 1; - } - upperStringBuf.AppendChar(ch); - ++i; - } - upperStringBuf.AppendChar(0); - FXJSE_Value_SetUTF8String(args.GetReturnValue(), - FX_UTF8Encode(upperStringBuf.GetBuffer(), - upperStringBuf.GetLength())); - if (argc == 2) { - FXJSE_Value_Release(localeValue); - } - } - FXJSE_Value_Release(argOne); - } else { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"Upper"); - } -} -void CXFA_FM2JSContext::WordNum(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - int32_t argc = args.GetLength(); - if ((argc > 0) && (argc < 4)) { - FX_BOOL bFlags = FALSE; - FX_FLOAT fNumber; - int32_t iIdentifier = 0; - CFX_ByteString localeString; - FXJSE_HVALUE numberValue = GetSimpleHValue(hThis, args, 0); - FXJSE_HVALUE identifierValue = 0; - FXJSE_HVALUE localeValue = 0; - if (FXJSE_Value_IsNull(numberValue)) { - bFlags = TRUE; - } else { - fNumber = HValueToFloat(hThis, numberValue); - } - if (argc > 1) { - identifierValue = GetSimpleHValue(hThis, args, 1); - if (FXJSE_Value_IsNull(identifierValue)) { - bFlags = TRUE; - } else { - iIdentifier = (int32_t)HValueToFloat(hThis, identifierValue); - } - } - if (argc == 3) { - localeValue = GetSimpleHValue(hThis, args, 2); - if (FXJSE_Value_IsNull(localeValue)) { - bFlags = TRUE; - } else { - HValueToUTF8String(localeValue, localeString); - } - } - if (!bFlags) { - if ((fNumber < 0) || (fNumber > 922337203685477550)) { - FXJSE_Value_SetUTF8String(args.GetReturnValue(), "*"); - } else { - CFX_ByteTextBuf resultBuf; - CFX_ByteString numberString; - numberString.Format("%.2f", fNumber); - WordUS(numberString, iIdentifier, resultBuf); - FXJSE_Value_SetUTF8String(args.GetReturnValue(), - resultBuf.GetByteString()); - } - } else { - FXJSE_Value_SetNull(args.GetReturnValue()); - } - FXJSE_Value_Release(numberValue); - if (argc > 1) { - FXJSE_Value_Release(identifierValue); - if (argc == 3) { - FXJSE_Value_Release(localeValue); - } - } - } else { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"WordNum"); - } -} -void CXFA_FM2JSContext::TrillionUS(const CFX_ByteStringC& szData, - CFX_ByteTextBuf& strBuf) { - CFX_ByteStringC pUnits[] = {"zero", "one", "two", "three", "four", - "five", "six", "seven", "eight", "nine"}; - CFX_ByteStringC pCapUnits[] = {"Zero", "One", "Two", "Three", "Four", - "Five", "Six", "Seven", "Eight", "Nine"}; - CFX_ByteStringC pTens[] = {"Ten", "Eleven", "Twelve", "Thirteen", - "Fourteen", "Fifteen", "Sixteen", "Seventeen", - "Eighteen", "Nineteen"}; - CFX_ByteStringC pLastTens[] = {"Twenty", "Thirty", "Forty", "Fifty", - "Sixty", "Seventy", "Eighty", "Ninety"}; - CFX_ByteStringC pComm[] = {" Hundred ", " Thousand ", " Million ", - " Billion ", "Trillion"}; - int32_t iComm = 0; - const FX_CHAR* pData = szData.GetCStr(); - int32_t iLength = szData.GetLength(); - if (iLength > 12) { - iComm = 4; - } else if (iLength > 9) { - iComm = 3; - } else if (iLength > 6) { - iComm = 2; - } else if (iLength > 3) { - iComm = 1; - } - int32_t iIndex = 0; - int32_t iFirstCount = iLength % 3; - if (iFirstCount == 0) { - iFirstCount = 3; - } - if (iFirstCount == 3) { - if (*(pData + iIndex) != '0') { - strBuf << pCapUnits[*(pData + iIndex) - '0']; - strBuf << pComm[0]; - } - if (*(pData + iIndex + 1) == '0') { - strBuf << pCapUnits[*(pData + iIndex + 2) - '0']; - } else { - if (*(pData + iIndex + 1) > '1') { - strBuf << pLastTens[*(pData + iIndex + 1) - '2']; - strBuf << "-"; - strBuf << pUnits[*(pData + iIndex + 2) - '0']; - } else if (*(pData + iIndex + 1) == '1') { - strBuf << pTens[*(pData + iIndex + 2) - '0']; - } else if (*(pData + iIndex + 1) == '0') { - strBuf << pCapUnits[*(pData + iIndex + 2) - '0']; - } - } - iIndex += 3; - } else if (iFirstCount == 2) { - if (*(pData + iIndex) == '0') { - strBuf << pCapUnits[*(pData + iIndex + 1) - '0']; - } else { - if (*(pData + iIndex) > '1') { - strBuf << pLastTens[*(pData + iIndex) - '2']; - strBuf << "-"; - strBuf << pUnits[*(pData + iIndex + 1) - '0']; - } else if (*(pData + iIndex) == '1') { - strBuf << pTens[*(pData + iIndex + 1) - '0']; - } else if (*(pData + iIndex) == '0') { - strBuf << pCapUnits[*(pData + iIndex + 1) - '0']; - } - } - iIndex += 2; - } else if (iFirstCount == 1) { - strBuf << pCapUnits[*(pData + iIndex) - '0']; - iIndex += 1; - } - if (iLength > 3 && iFirstCount > 0) { - strBuf << pComm[iComm]; - --iComm; - } - while (iIndex < iLength) { - if (*(pData + iIndex) != '0') { - strBuf << pCapUnits[*(pData + iIndex) - '0']; - strBuf << pComm[0]; - } - if (*(pData + iIndex + 1) == '0') { - strBuf << pCapUnits[*(pData + iIndex + 2) - '0']; - } else { - if (*(pData + iIndex + 1) > '1') { - strBuf << pLastTens[*(pData + iIndex + 1) - '2']; - strBuf << "-"; - strBuf << pUnits[*(pData + iIndex + 2) - '0']; - } else if (*(pData + iIndex + 1) == '1') { - strBuf << pTens[*(pData + iIndex + 2) - '0']; - } else if (*(pData + iIndex + 1) == '0') { - strBuf << pCapUnits[*(pData + iIndex + 2) - '0']; - } - } - if (iIndex < iLength - 3) { - strBuf << pComm[iComm]; - --iComm; - } - iIndex += 3; - } -} -void CXFA_FM2JSContext::WordUS(const CFX_ByteStringC& szData, - int32_t iStyle, - CFX_ByteTextBuf& strBuf) { - const FX_CHAR* pData = szData.GetCStr(); - int32_t iLength = szData.GetLength(); - switch (iStyle) { - case 0: { - int32_t iIndex = 0; - while (iIndex < iLength) { - if (*(pData + iIndex) == '.') { - break; - } - ++iIndex; - } - iLength = iIndex; - iIndex = 0; - int32_t iCount = 0; - while (iIndex < iLength) { - iCount = (iLength - iIndex) % 12; - if (!iCount && iLength - iIndex > 0) { - iCount = 12; - } - TrillionUS(CFX_ByteStringC(pData + iIndex, iCount), strBuf); - iIndex += iCount; - if (iIndex < iLength) { - strBuf << " Trillion "; - } - } - } break; - case 1: { - int32_t iIndex = 0; - while (iIndex < iLength) { - if (*(pData + iIndex) == '.') { - break; - } - ++iIndex; - } - iLength = iIndex; - iIndex = 0; - int32_t iCount = 0; - while (iIndex < iLength) { - iCount = (iLength - iIndex) % 12; - if (!iCount && iLength - iIndex > 0) { - iCount = 12; - } - TrillionUS(CFX_ByteStringC(pData + iIndex, iCount), strBuf); - iIndex += iCount; - if (iIndex < iLength) { - strBuf << " Trillion "; - } - } - strBuf << " Dollars"; - } break; - case 2: { - int32_t iIndex = 0; - while (iIndex < iLength) { - if (*(pData + iIndex) == '.') { - break; - } - ++iIndex; - } - int32_t iInteger = iIndex; - iIndex = 0; - int32_t iCount = 0; - while (iIndex < iInteger) { - iCount = (iInteger - iIndex) % 12; - if (!iCount && iLength - iIndex > 0) { - iCount = 12; - } - TrillionUS(CFX_ByteStringC(pData + iIndex, iCount), strBuf); - iIndex += iCount; - if (iIndex < iInteger) { - strBuf << " Trillion "; - } - } - strBuf << " Dollars"; - if (iInteger < iLength) { - strBuf << " And "; - iIndex = iInteger + 1; - int32_t iCount = 0; - while (iIndex < iLength) { - iCount = (iLength - iIndex) % 12; - if (!iCount && iLength - iIndex > 0) { - iCount = 12; - } - TrillionUS(CFX_ByteStringC(pData + iIndex, iCount), strBuf); - iIndex += iCount; - if (iIndex < iLength) { - strBuf << " Trillion "; - } - } - strBuf << " Cents"; - } - } break; - default: - break; - } -} -void CXFA_FM2JSContext::Get(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - int32_t argc = args.GetLength(); - if (argc == 1) { - CXFA_Document* pDoc = pContext->GetDocument(); - if (!pDoc) { - return; - } - IXFA_AppProvider* pAppProvider = - pDoc->GetParser()->GetNotify()->GetAppProvider(); - if (!pAppProvider) { - return; - } - FXJSE_HVALUE argOne = GetSimpleHValue(hThis, args, 0); - CFX_ByteString urlString; - HValueToUTF8String(argOne, urlString); - IFX_FileRead* pFile = pAppProvider->DownloadURL( - CFX_WideString::FromUTF8(urlString, urlString.GetLength())); - if (pFile) { - int32_t size = pFile->GetSize(); - uint8_t* pData = FX_Alloc(uint8_t, size); - pFile->ReadBlock(pData, size); - FXJSE_Value_SetUTF8String(args.GetReturnValue(), - CFX_ByteStringC(pData, size)); - FX_Free(pData); - pFile->Release(); - } - FXJSE_Value_Release(argOne); - } else { - pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"Get"); - } -} -void CXFA_FM2JSContext::Post(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - int32_t argc = args.GetLength(); - if ((argc >= 2) && (argc <= 5)) { - CXFA_Document* pDoc = pContext->GetDocument(); - if (!pDoc) { - return; - } - IXFA_AppProvider* pAppProvider = - pDoc->GetParser()->GetNotify()->GetAppProvider(); - if (!pAppProvider) { - return; - } - CFX_ByteString bsURL; - CFX_ByteString bsData; - CFX_ByteString bsContentType; - CFX_ByteString bsEncode; - CFX_ByteString bsHeader; - FXJSE_HVALUE argOne; - FXJSE_HVALUE argTwo; - FXJSE_HVALUE argThree; - FXJSE_HVALUE argFour; - FXJSE_HVALUE argFive; - argOne = GetSimpleHValue(hThis, args, 0); - HValueToUTF8String(argOne, bsURL); - argTwo = GetSimpleHValue(hThis, args, 1); - HValueToUTF8String(argTwo, bsData); - if (argc > 2) { - argThree = GetSimpleHValue(hThis, args, 2); - HValueToUTF8String(argThree, bsContentType); - } - if (argc > 3) { - argFour = GetSimpleHValue(hThis, args, 3); - HValueToUTF8String(argFour, bsEncode); - } - if (argc > 4) { - argFive = GetSimpleHValue(hThis, args, 4); - HValueToUTF8String(argFive, bsHeader); - } - CFX_WideString decodedResponse; - FX_BOOL bFlags = pAppProvider->PostRequestURL( - CFX_WideString::FromUTF8(bsURL, bsURL.GetLength()), - CFX_WideString::FromUTF8(bsData, bsData.GetLength()), - CFX_WideString::FromUTF8(bsContentType, bsContentType.GetLength()), - CFX_WideString::FromUTF8(bsEncode, bsEncode.GetLength()), - CFX_WideString::FromUTF8(bsHeader, bsHeader.GetLength()), - decodedResponse); - FXJSE_Value_Release(argOne); - FXJSE_Value_Release(argTwo); - if (argc > 2) { - FXJSE_Value_Release(argThree); - } - if (argc > 3) { - FXJSE_Value_Release(argFour); - } - if (argc > 4) { - FXJSE_Value_Release(argFive); - } - if (bFlags) { - FXJSE_Value_SetUTF8String( - args.GetReturnValue(), - FX_UTF8Encode(decodedResponse, decodedResponse.GetLength())); - } else { - pContext->ThrowScriptErrorMessage(XFA_IDS_SERVER_DENY); - } - } else { - pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"Post"); - } -} -void CXFA_FM2JSContext::Put(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - int32_t argc = args.GetLength(); - if ((argc == 2) || (argc == 3)) { - CXFA_Document* pDoc = pContext->GetDocument(); - if (!pDoc) { - return; - } - IXFA_AppProvider* pAppProvider = - pDoc->GetParser()->GetNotify()->GetAppProvider(); - if (!pAppProvider) { - return; - } - CFX_ByteString bsURL; - CFX_ByteString bsData; - CFX_ByteString bsEncode; - FXJSE_HVALUE argOne; - FXJSE_HVALUE argTwo; - FXJSE_HVALUE argThree; - argOne = GetSimpleHValue(hThis, args, 0); - HValueToUTF8String(argOne, bsURL); - argTwo = GetSimpleHValue(hThis, args, 1); - HValueToUTF8String(argTwo, bsData); - if (argc > 2) { - argThree = GetSimpleHValue(hThis, args, 2); - HValueToUTF8String(argThree, bsEncode); - } - FX_BOOL bFlags = pAppProvider->PutRequestURL( - CFX_WideString::FromUTF8(bsURL, bsURL.GetLength()), - CFX_WideString::FromUTF8(bsData, bsData.GetLength()), - CFX_WideString::FromUTF8(bsEncode, bsEncode.GetLength())); - FXJSE_Value_Release(argOne); - FXJSE_Value_Release(argTwo); - if (argc > 2) { - FXJSE_Value_Release(argThree); - } - if (bFlags) { - FXJSE_Value_SetUTF8String(args.GetReturnValue(), ""); - } else { - pContext->ThrowScriptErrorMessage(XFA_IDS_SERVER_DENY); - } - } else { - pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"Put"); - } -} -void CXFA_FM2JSContext::assign_value_operator(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - FXJSE_HRUNTIME hruntime = pContext->GetScriptRuntime(); - if (args.GetLength() == 2) { - FXJSE_HVALUE lValue = args.GetValue(0); - FXJSE_HVALUE rValue = GetSimpleHValue(hThis, args, 1); - FX_BOOL bSetStatus = TRUE; - if (FXJSE_Value_IsArray(lValue)) { - FXJSE_HVALUE leftLengthValue = FXJSE_Value_Create(hruntime); - FXJSE_Value_GetObjectProp(lValue, "length", leftLengthValue); - int32_t iLeftLength = FXJSE_Value_ToInteger(leftLengthValue); - FXJSE_Value_Release(leftLengthValue); - FXJSE_HVALUE jsObjectValue = FXJSE_Value_Create(hruntime); - FXJSE_HVALUE propertyValue = FXJSE_Value_Create(hruntime); - FXJSE_Value_GetObjectPropByIdx(lValue, 1, propertyValue); - if (FXJSE_Value_IsNull(propertyValue)) { - for (int32_t i = 2; i < iLeftLength; i++) { - FXJSE_Value_GetObjectPropByIdx(lValue, i, jsObjectValue); - bSetStatus = SetObjectDefaultValue(jsObjectValue, rValue); - if (!bSetStatus) { - pContext->ThrowScriptErrorMessage(XFA_IDS_NOT_DEFAUL_VALUE); - break; - } - } - } else { - CFX_ByteString propertyStr; - FXJSE_Value_ToUTF8String(propertyValue, propertyStr); - for (int32_t i = 2; i < iLeftLength; i++) { - FXJSE_Value_GetObjectPropByIdx(lValue, i, jsObjectValue); - FXJSE_Value_SetObjectProp(jsObjectValue, propertyStr, rValue); - } - } - FXJSE_Value_Release(jsObjectValue); - FXJSE_Value_Release(propertyValue); - } else if (FXJSE_Value_IsObject(lValue)) { - bSetStatus = SetObjectDefaultValue(lValue, rValue); - if (!bSetStatus) { - pContext->ThrowScriptErrorMessage(XFA_IDS_NOT_DEFAUL_VALUE); - } - } - FXJSE_Value_Set(args.GetReturnValue(), rValue); - FXJSE_Value_Release(lValue); - FXJSE_Value_Release(rValue); - } else { - pContext->ThrowScriptErrorMessage(XFA_IDS_COMPILER_ERROR); - } -} -void CXFA_FM2JSContext::logical_or_operator(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - if (args.GetLength() == 2) { - FXJSE_HVALUE argFirst = GetSimpleHValue(hThis, args, 0); - FXJSE_HVALUE argSecond = GetSimpleHValue(hThis, args, 1); - if (FXJSE_Value_IsNull(argFirst) && FXJSE_Value_IsNull(argSecond)) { - FXJSE_Value_SetNull(args.GetReturnValue()); - } else { - FX_FLOAT first = HValueToFloat(hThis, argFirst); - FX_FLOAT second = HValueToFloat(hThis, argSecond); - FXJSE_Value_SetInteger(args.GetReturnValue(), (first || second) ? 1 : 0); - } - FXJSE_Value_Release(argFirst); - FXJSE_Value_Release(argSecond); - } else { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - pContext->ThrowScriptErrorMessage(XFA_IDS_COMPILER_ERROR); - } -} -void CXFA_FM2JSContext::logical_and_operator(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - if (args.GetLength() == 2) { - FXJSE_HVALUE argFirst = GetSimpleHValue(hThis, args, 0); - FXJSE_HVALUE argSecond = GetSimpleHValue(hThis, args, 1); - if (FXJSE_Value_IsNull(argFirst) && FXJSE_Value_IsNull(argSecond)) { - FXJSE_Value_SetNull(args.GetReturnValue()); - } else { - FX_FLOAT first = HValueToFloat(hThis, argFirst); - FX_FLOAT second = HValueToFloat(hThis, argSecond); - FXJSE_Value_SetInteger(args.GetReturnValue(), (first && second) ? 1 : 0); - } - FXJSE_Value_Release(argFirst); - FXJSE_Value_Release(argSecond); - } else { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - pContext->ThrowScriptErrorMessage(XFA_IDS_COMPILER_ERROR); - } -} -void CXFA_FM2JSContext::equality_operator(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - if (args.GetLength() == 2) { - if (fm_ref_equal(hThis, args)) { - FXJSE_Value_SetInteger(args.GetReturnValue(), 1); - } else { - FXJSE_HVALUE argFirst = GetSimpleHValue(hThis, args, 0); - FXJSE_HVALUE argSecond = GetSimpleHValue(hThis, args, 1); - if (FXJSE_Value_IsNull(argFirst) || FXJSE_Value_IsNull(argSecond)) { - FXJSE_Value_SetInteger( - args.GetReturnValue(), - (FXJSE_Value_IsNull(argFirst) && FXJSE_Value_IsNull(argSecond)) - ? 1 - : 0); - } else if (FXJSE_Value_IsUTF8String(argFirst) && - FXJSE_Value_IsUTF8String(argSecond)) { - CFX_ByteString firstOutput; - CFX_ByteString secondOutput; - FXJSE_Value_ToUTF8String(argFirst, firstOutput); - FXJSE_Value_ToUTF8String(argSecond, secondOutput); - FXJSE_Value_SetInteger(args.GetReturnValue(), - firstOutput.Equal(secondOutput) ? 1 : 0); - } else { - FX_DOUBLE first = HValueToDouble(hThis, argFirst); - FX_DOUBLE second = HValueToDouble(hThis, argSecond); - FXJSE_Value_SetInteger(args.GetReturnValue(), - (first == second) ? 1 : 0); - } - FXJSE_Value_Release(argFirst); - FXJSE_Value_Release(argSecond); - } - } else { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - pContext->ThrowScriptErrorMessage(XFA_IDS_COMPILER_ERROR); - } -} -void CXFA_FM2JSContext::notequality_operator(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - if (args.GetLength() == 2) { - if (fm_ref_equal(hThis, args)) { - FXJSE_Value_SetInteger(args.GetReturnValue(), 0); - } else { - FXJSE_HVALUE argFirst = GetSimpleHValue(hThis, args, 0); - FXJSE_HVALUE argSecond = GetSimpleHValue(hThis, args, 1); - if (FXJSE_Value_IsNull(argFirst) || FXJSE_Value_IsNull(argSecond)) { - FXJSE_Value_SetInteger( - args.GetReturnValue(), - (FXJSE_Value_IsNull(argFirst) && FXJSE_Value_IsNull(argSecond)) - ? 0 - : 1); - } else if (FXJSE_Value_IsUTF8String(argFirst) && - FXJSE_Value_IsUTF8String(argSecond)) { - CFX_ByteString firstOutput; - CFX_ByteString secondOutput; - FXJSE_Value_ToUTF8String(argFirst, firstOutput); - FXJSE_Value_ToUTF8String(argSecond, secondOutput); - FXJSE_Value_SetInteger(args.GetReturnValue(), - firstOutput.Equal(secondOutput) ? 0 : 1); - } else { - FX_DOUBLE first = HValueToDouble(hThis, argFirst); - FX_DOUBLE second = HValueToDouble(hThis, argSecond); - FXJSE_Value_SetInteger(args.GetReturnValue(), - (first == second) ? 0 : 1); - } - FXJSE_Value_Release(argFirst); - FXJSE_Value_Release(argSecond); - } - } else { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - pContext->ThrowScriptErrorMessage(XFA_IDS_COMPILER_ERROR); - } -} -FX_BOOL CXFA_FM2JSContext::fm_ref_equal(FXJSE_HOBJECT hThis, - CFXJSE_Arguments& args) { - FX_BOOL bRet = FALSE; - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - FXJSE_HRUNTIME hruntime = pContext->GetScriptRuntime(); - FXJSE_HVALUE argFirst = args.GetValue(0); - FXJSE_HVALUE argSecond = args.GetValue(0); - if (FXJSE_Value_IsArray(argFirst) && FXJSE_Value_IsArray(argSecond)) { - FXJSE_HVALUE firstFlagValue = FXJSE_Value_Create(hruntime); - FXJSE_HVALUE secondFlagValue = FXJSE_Value_Create(hruntime); - FXJSE_Value_GetObjectPropByIdx(argFirst, 0, firstFlagValue); - FXJSE_Value_GetObjectPropByIdx(argSecond, 0, secondFlagValue); - if ((FXJSE_Value_ToInteger(firstFlagValue) == 3) && - (FXJSE_Value_ToInteger(secondFlagValue) == 3)) { - FXJSE_HVALUE firstJSObject = FXJSE_Value_Create(hruntime); - FXJSE_HVALUE secondJSObject = FXJSE_Value_Create(hruntime); - FXJSE_Value_GetObjectPropByIdx(argFirst, 2, firstJSObject); - FXJSE_Value_GetObjectPropByIdx(argSecond, 2, secondJSObject); - if (!FXJSE_Value_IsNull(firstJSObject) && - !FXJSE_Value_IsNull(secondJSObject)) { - bRet = (FXJSE_Value_ToObject(firstJSObject, NULL) == - FXJSE_Value_ToObject(secondJSObject, NULL)); - } - FXJSE_Value_Release(firstJSObject); - FXJSE_Value_Release(secondJSObject); - } - FXJSE_Value_Release(firstFlagValue); - FXJSE_Value_Release(secondFlagValue); - } - FXJSE_Value_Release(argFirst); - FXJSE_Value_Release(argSecond); - return bRet; -} -void CXFA_FM2JSContext::less_operator(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - if (args.GetLength() == 2) { - FXJSE_HVALUE argFirst = GetSimpleHValue(hThis, args, 0); - FXJSE_HVALUE argSecond = GetSimpleHValue(hThis, args, 1); - if (FXJSE_Value_IsNull(argFirst) || FXJSE_Value_IsNull(argSecond)) { - FXJSE_Value_SetInteger(args.GetReturnValue(), 0); - } else if (FXJSE_Value_IsUTF8String(argFirst) && - FXJSE_Value_IsUTF8String(argSecond)) { - CFX_ByteString firstOutput; - CFX_ByteString secondOutput; - FXJSE_Value_ToUTF8String(argFirst, firstOutput); - FXJSE_Value_ToUTF8String(argSecond, secondOutput); - FXJSE_Value_SetInteger(args.GetReturnValue(), - (firstOutput.Compare(secondOutput) == -1) ? 1 : 0); - } else { - FX_DOUBLE first = HValueToDouble(hThis, argFirst); - FX_DOUBLE second = HValueToDouble(hThis, argSecond); - FXJSE_Value_SetInteger(args.GetReturnValue(), (first < second) ? 1 : 0); - } - FXJSE_Value_Release(argFirst); - FXJSE_Value_Release(argSecond); - } else { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - pContext->ThrowScriptErrorMessage(XFA_IDS_COMPILER_ERROR); - } -} -void CXFA_FM2JSContext::lessequal_operator(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - if (args.GetLength() == 2) { - FXJSE_HVALUE argFirst = GetSimpleHValue(hThis, args, 0); - FXJSE_HVALUE argSecond = GetSimpleHValue(hThis, args, 1); - if (FXJSE_Value_IsNull(argFirst) || FXJSE_Value_IsNull(argSecond)) { - FXJSE_Value_SetInteger( - args.GetReturnValue(), - (FXJSE_Value_IsNull(argFirst) && FXJSE_Value_IsNull(argSecond)) ? 1 - : 0); - } else if (FXJSE_Value_IsUTF8String(argFirst) && - FXJSE_Value_IsUTF8String(argSecond)) { - CFX_ByteString firstOutput; - CFX_ByteString secondOutput; - FXJSE_Value_ToUTF8String(argFirst, firstOutput); - FXJSE_Value_ToUTF8String(argSecond, secondOutput); - FXJSE_Value_SetInteger(args.GetReturnValue(), - (firstOutput.Compare(secondOutput) != 1) ? 1 : 0); - } else { - FX_DOUBLE first = HValueToDouble(hThis, argFirst); - FX_DOUBLE second = HValueToDouble(hThis, argSecond); - FXJSE_Value_SetInteger(args.GetReturnValue(), (first <= second) ? 1 : 0); - } - FXJSE_Value_Release(argFirst); - FXJSE_Value_Release(argSecond); - } else { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - pContext->ThrowScriptErrorMessage(XFA_IDS_COMPILER_ERROR); - } -} -void CXFA_FM2JSContext::greater_operator(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - if (args.GetLength() == 2) { - FXJSE_HVALUE argFirst = GetSimpleHValue(hThis, args, 0); - FXJSE_HVALUE argSecond = GetSimpleHValue(hThis, args, 1); - if (FXJSE_Value_IsNull(argFirst) || FXJSE_Value_IsNull(argSecond)) { - FXJSE_Value_SetInteger(args.GetReturnValue(), 0); - } else if (FXJSE_Value_IsUTF8String(argFirst) && - FXJSE_Value_IsUTF8String(argSecond)) { - CFX_ByteString firstOutput; - CFX_ByteString secondOutput; - FXJSE_Value_ToUTF8String(argFirst, firstOutput); - FXJSE_Value_ToUTF8String(argSecond, secondOutput); - FXJSE_Value_SetInteger(args.GetReturnValue(), - (firstOutput.Compare(secondOutput) == 1) ? 1 : 0); - } else { - FX_DOUBLE first = HValueToDouble(hThis, argFirst); - FX_DOUBLE second = HValueToDouble(hThis, argSecond); - FXJSE_Value_SetInteger(args.GetReturnValue(), (first > second) ? 1 : 0); - } - FXJSE_Value_Release(argFirst); - FXJSE_Value_Release(argSecond); - } else { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - pContext->ThrowScriptErrorMessage(XFA_IDS_COMPILER_ERROR); - } -} -void CXFA_FM2JSContext::greaterequal_operator(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - if (args.GetLength() == 2) { - FXJSE_HVALUE argFirst = GetSimpleHValue(hThis, args, 0); - FXJSE_HVALUE argSecond = GetSimpleHValue(hThis, args, 1); - if (FXJSE_Value_IsNull(argFirst) || FXJSE_Value_IsNull(argSecond)) { - FXJSE_Value_SetInteger( - args.GetReturnValue(), - (FXJSE_Value_IsNull(argFirst) && FXJSE_Value_IsNull(argSecond)) ? 1 - : 0); - } else if (FXJSE_Value_IsUTF8String(argFirst) && - FXJSE_Value_IsUTF8String(argSecond)) { - CFX_ByteString firstOutput; - CFX_ByteString secondOutput; - FXJSE_Value_ToUTF8String(argFirst, firstOutput); - FXJSE_Value_ToUTF8String(argSecond, secondOutput); - FXJSE_Value_SetInteger(args.GetReturnValue(), - (firstOutput.Compare(secondOutput) != -1) ? 1 : 0); - } else { - FX_DOUBLE first = HValueToDouble(hThis, argFirst); - FX_DOUBLE second = HValueToDouble(hThis, argSecond); - FXJSE_Value_SetInteger(args.GetReturnValue(), (first >= second) ? 1 : 0); - } - FXJSE_Value_Release(argFirst); - FXJSE_Value_Release(argSecond); - } else { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - pContext->ThrowScriptErrorMessage(XFA_IDS_COMPILER_ERROR); - } -} -void CXFA_FM2JSContext::plus_operator(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - if (args.GetLength() == 2) { - FXJSE_HVALUE argFirst = args.GetValue(0); - FXJSE_HVALUE argSecond = args.GetValue(1); - if (HValueIsNull(hThis, argFirst) && HValueIsNull(hThis, argSecond)) { - FXJSE_Value_SetNull(args.GetReturnValue()); - } else { - FX_DOUBLE first = HValueToDouble(hThis, argFirst); - FX_DOUBLE second = HValueToDouble(hThis, argSecond); - FXJSE_Value_SetDouble(args.GetReturnValue(), first + second); - } - FXJSE_Value_Release(argFirst); - FXJSE_Value_Release(argSecond); - } else { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - pContext->ThrowScriptErrorMessage(XFA_IDS_COMPILER_ERROR); - } -} -void CXFA_FM2JSContext::minus_operator(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - if (args.GetLength() == 2) { - FXJSE_HVALUE argFirst = GetSimpleHValue(hThis, args, 0); - FXJSE_HVALUE argSecond = GetSimpleHValue(hThis, args, 1); - if (FXJSE_Value_IsNull(argFirst) && FXJSE_Value_IsNull(argSecond)) { - FXJSE_Value_SetNull(args.GetReturnValue()); - } else { - FX_DOUBLE first = HValueToDouble(hThis, argFirst); - FX_DOUBLE second = HValueToDouble(hThis, argSecond); - FXJSE_Value_SetDouble(args.GetReturnValue(), first - second); - } - FXJSE_Value_Release(argFirst); - FXJSE_Value_Release(argSecond); - } else { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - pContext->ThrowScriptErrorMessage(XFA_IDS_COMPILER_ERROR); - } -} -void CXFA_FM2JSContext::multiple_operator(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - if (args.GetLength() == 2) { - FXJSE_HVALUE argFirst = GetSimpleHValue(hThis, args, 0); - FXJSE_HVALUE argSecond = GetSimpleHValue(hThis, args, 1); - if (FXJSE_Value_IsNull(argFirst) && FXJSE_Value_IsNull(argSecond)) { - FXJSE_Value_SetNull(args.GetReturnValue()); - } else { - FX_DOUBLE first = HValueToDouble(hThis, argFirst); - FX_DOUBLE second = HValueToDouble(hThis, argSecond); - FXJSE_Value_SetDouble(args.GetReturnValue(), first * second); - } - FXJSE_Value_Release(argFirst); - FXJSE_Value_Release(argSecond); - } else { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - pContext->ThrowScriptErrorMessage(XFA_IDS_COMPILER_ERROR); - } -} -void CXFA_FM2JSContext::divide_operator(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - if (args.GetLength() == 2) { - FXJSE_HVALUE argFirst = GetSimpleHValue(hThis, args, 0); - FXJSE_HVALUE argSecond = GetSimpleHValue(hThis, args, 1); - if (FXJSE_Value_IsNull(argFirst) && FXJSE_Value_IsNull(argSecond)) { - FXJSE_Value_SetNull(args.GetReturnValue()); - } else { - FX_DOUBLE first = HValueToDouble(hThis, argFirst); - FX_DOUBLE second = HValueToDouble(hThis, argSecond); - if (second == 0.0) { - pContext->ThrowScriptErrorMessage(XFA_IDS_DIVIDE_ZERO); - } else { - FXJSE_Value_SetDouble(args.GetReturnValue(), first / second); - } - } - FXJSE_Value_Release(argFirst); - FXJSE_Value_Release(argSecond); - } else { - pContext->ThrowScriptErrorMessage(XFA_IDS_COMPILER_ERROR); - } -} -void CXFA_FM2JSContext::positive_operator(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - int32_t iLength = args.GetLength(); - if (iLength == 1) { - FXJSE_HVALUE argOne = GetSimpleHValue(hThis, args, 0); - if (FXJSE_Value_IsNull(argOne)) { - FXJSE_Value_SetNull(args.GetReturnValue()); - } else { - FXJSE_Value_SetDouble(args.GetReturnValue(), - 0.0 + HValueToDouble(hThis, argOne)); - } - FXJSE_Value_Release(argOne); - } else { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - pContext->ThrowScriptErrorMessage(XFA_IDS_COMPILER_ERROR); - } -} -void CXFA_FM2JSContext::negative_operator(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - int32_t iLength = args.GetLength(); - if (iLength == 1) { - FXJSE_HVALUE argOne = GetSimpleHValue(hThis, args, 0); - if (FXJSE_Value_IsNull(argOne)) { - FXJSE_Value_SetNull(args.GetReturnValue()); - } else { - FXJSE_Value_SetDouble(args.GetReturnValue(), - 0.0 - HValueToDouble(hThis, argOne)); - } - FXJSE_Value_Release(argOne); - } else { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - pContext->ThrowScriptErrorMessage(XFA_IDS_COMPILER_ERROR); - } -} -void CXFA_FM2JSContext::logical_not_operator(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - int32_t iLength = args.GetLength(); - if (iLength == 1) { - FXJSE_HVALUE argOne = GetSimpleHValue(hThis, args, 0); - if (FXJSE_Value_IsNull(argOne)) { - FXJSE_Value_SetNull(args.GetReturnValue()); - } else { - FX_DOUBLE first = HValueToDouble(hThis, argOne); - FXJSE_Value_SetInteger(args.GetReturnValue(), (first == 0.0) ? 1 : 0); - } - FXJSE_Value_Release(argOne); - } else { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - pContext->ThrowScriptErrorMessage(XFA_IDS_COMPILER_ERROR); - } -} -void CXFA_FM2JSContext::dot_accessor(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - FXJSE_HRUNTIME hruntime = pContext->GetScriptRuntime(); - int32_t argc = args.GetLength(); - if ((argc == 4) || (argc == 5)) { - FX_BOOL bIsStar = TRUE; - FXJSE_HVALUE argAccessor = args.GetValue(0); - CFX_ByteString bsAccessorName = args.GetUTF8String(1); - CFX_ByteString szName = args.GetUTF8String(2); - int32_t iIndexFlags = args.GetInt32(3); - int32_t iIndexValue = 0; - FXJSE_HVALUE argIndex = NULL; - if (argc == 5) { - bIsStar = FALSE; - argIndex = args.GetValue(4); - iIndexValue = HValueToInteger(hThis, argIndex); - } - CFX_ByteString szSomExp; - GenerateSomExpression(szName, iIndexFlags, iIndexValue, bIsStar, szSomExp); - if (FXJSE_Value_IsArray(argAccessor)) { - FXJSE_HVALUE hLengthValue = FXJSE_Value_Create(hruntime); - FXJSE_Value_GetObjectProp(argAccessor, "length", hLengthValue); - int32_t iLength = FXJSE_Value_ToInteger(hLengthValue); - FXJSE_Value_Release(hLengthValue); - int32_t iCounter = 0; - FXJSE_HVALUE** hResolveValues = FX_Alloc(FXJSE_HVALUE*, iLength - 2); - int32_t* iSizes = FX_Alloc(int32_t, iLength - 2); - for (int32_t i = 0; i < (iLength - 2); i++) { - iSizes[i] = 0; - } - FXJSE_HVALUE hJSObjValue = FXJSE_Value_Create(hruntime); - FX_BOOL bAttribute = FALSE; - for (int32_t i = 2; i < iLength; i++) { - FXJSE_Value_GetObjectPropByIdx(argAccessor, i, hJSObjValue); - XFA_RESOLVENODE_RS resoveNodeRS; - int32_t iRet = ResolveObjects(hThis, hJSObjValue, szSomExp, - resoveNodeRS, TRUE, szName.IsEmpty()); - if (iRet > 0) { - ParseResolveResult(hThis, resoveNodeRS, hJSObjValue, - hResolveValues[i - 2], iSizes[i - 2], bAttribute); - iCounter += iSizes[i - 2]; - } - } - FXJSE_Value_Release(hJSObjValue); - if (iCounter > 0) { - FXJSE_HVALUE* rgValues = FX_Alloc(FXJSE_HVALUE, iCounter + 2); - for (int32_t i = 0; i < (iCounter + 2); i++) { - rgValues[i] = FXJSE_Value_Create(hruntime); - } - FXJSE_Value_SetInteger(rgValues[0], 1); - if (bAttribute) { - FXJSE_Value_SetUTF8String(rgValues[1], szName); - } else { - FXJSE_Value_SetNull(rgValues[1]); - } - int32_t iIndex = 2; - for (int32_t i = 0; i < iLength - 2; i++) { - for (int32_t j = 0; j < iSizes[i]; j++) { - FXJSE_Value_Set(rgValues[iIndex], hResolveValues[i][j]); - iIndex++; - } - } - FXJSE_Value_SetArray(args.GetReturnValue(), (iCounter + 2), rgValues); - for (int32_t i = 0; i < (iCounter + 2); i++) { - FXJSE_Value_Release(rgValues[i]); - } - FX_Free(rgValues); - } else { - CFX_WideString wsPropertyName = - CFX_WideString::FromUTF8(szName, szName.GetLength()); - CFX_WideString wsSomExpression = - CFX_WideString::FromUTF8(szSomExp, szSomExp.GetLength()); - pContext->ThrowScriptErrorMessage(XFA_IDS_ACCESS_PROPERTY_IN_NOT_OBJECT, - (const FX_WCHAR*)wsPropertyName, - (const FX_WCHAR*)wsSomExpression); - } - for (int32_t i = 0; i < iLength - 2; i++) { - for (int32_t j = 0; j < iSizes[i]; j++) { - FXJSE_Value_Release(hResolveValues[i][j]); - } - if (iSizes[i] > 0) { - FX_Free(hResolveValues[i]); - } - } - FX_Free(hResolveValues); - FX_Free(iSizes); - } else { - XFA_RESOLVENODE_RS resoveNodeRS; - int32_t iRet = 0; - if (FXJSE_Value_IsObject(argAccessor) || - (FXJSE_Value_IsNull(argAccessor) && bsAccessorName.IsEmpty())) { - iRet = ResolveObjects(hThis, argAccessor, szSomExp, resoveNodeRS, TRUE, - szName.IsEmpty()); - } else if (!FXJSE_Value_IsObject(argAccessor) && - !bsAccessorName.IsEmpty()) { - FX_BOOL bGetObject = - GetObjectByName(hThis, argAccessor, bsAccessorName); - if (bGetObject) { - iRet = ResolveObjects(hThis, argAccessor, szSomExp, resoveNodeRS, - TRUE, szName.IsEmpty()); - } - } - if (iRet > 0) { - FXJSE_HVALUE* hResolveValues; - int32_t iSize = 0; - FX_BOOL bAttribute = FALSE; - ParseResolveResult(hThis, resoveNodeRS, argAccessor, hResolveValues, - iSize, bAttribute); - FXJSE_HVALUE* rgValues = FX_Alloc(FXJSE_HVALUE, iSize + 2); - for (int32_t i = 0; i < (iSize + 2); i++) { - rgValues[i] = FXJSE_Value_Create(hruntime); - } - FXJSE_Value_SetInteger(rgValues[0], 1); - if (bAttribute) { - FXJSE_Value_SetUTF8String(rgValues[1], szName); - } else { - FXJSE_Value_SetNull(rgValues[1]); - } - for (int32_t i = 0; i < iSize; i++) { - FXJSE_Value_Set(rgValues[i + 2], hResolveValues[i]); - } - FXJSE_Value_SetArray(args.GetReturnValue(), (iSize + 2), rgValues); - for (int32_t i = 0; i < (iSize + 2); i++) { - FXJSE_Value_Release(rgValues[i]); - } - FX_Free(rgValues); - for (int32_t i = 0; i < iSize; i++) { - FXJSE_Value_Release(hResolveValues[i]); - } - FX_Free(hResolveValues); - } else { - CFX_WideString wsPropertyName = - CFX_WideString::FromUTF8(szName, szName.GetLength()); - CFX_WideString wsSomExpression = - CFX_WideString::FromUTF8(szSomExp, szSomExp.GetLength()); - pContext->ThrowScriptErrorMessage(XFA_IDS_ACCESS_PROPERTY_IN_NOT_OBJECT, - (const FX_WCHAR*)wsPropertyName, - (const FX_WCHAR*)wsSomExpression); - } - } - if (argc == 5) { - FXJSE_Value_Release(argIndex); - } - FXJSE_Value_Release(argAccessor); - } else { - pContext->ThrowScriptErrorMessage(XFA_IDS_COMPILER_ERROR); - } -} -void CXFA_FM2JSContext::dotdot_accessor(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - FXJSE_HRUNTIME hruntime = pContext->GetScriptRuntime(); - int32_t argc = args.GetLength(); - if ((argc == 4) || (argc == 5)) { - FX_BOOL bIsStar = TRUE; - FXJSE_HVALUE argAccessor = args.GetValue(0); - CFX_ByteString bsAccessorName = args.GetUTF8String(1); - CFX_ByteString szName = args.GetUTF8String(2); - int32_t iIndexFlags = args.GetInt32(3); - int32_t iIndexValue = 0; - FXJSE_HVALUE argIndex = NULL; - if (argc == 5) { - bIsStar = FALSE; - argIndex = args.GetValue(4); - iIndexValue = HValueToInteger(hThis, argIndex); - } - CFX_ByteString szSomExp; - GenerateSomExpression(szName, iIndexFlags, iIndexValue, bIsStar, szSomExp); - if (FXJSE_Value_IsArray(argAccessor)) { - FXJSE_HVALUE hLengthValue = FXJSE_Value_Create(hruntime); - FXJSE_Value_GetObjectProp(argAccessor, "length", hLengthValue); - int32_t iLength = FXJSE_Value_ToInteger(hLengthValue); - int32_t iCounter = 0; - FXJSE_HVALUE** hResolveValues = FX_Alloc(FXJSE_HVALUE*, iLength - 2); - int32_t* iSizes = FX_Alloc(int32_t, iLength - 2); - FXJSE_HVALUE hJSObjValue = FXJSE_Value_Create(hruntime); - FX_BOOL bAttribute = FALSE; - for (int32_t i = 2; i < iLength; i++) { - FXJSE_Value_GetObjectPropByIdx(argAccessor, i, hJSObjValue); - XFA_RESOLVENODE_RS resoveNodeRS; - int32_t iRet = - ResolveObjects(hThis, hJSObjValue, szSomExp, resoveNodeRS, FALSE); - if (iRet > 0) { - ParseResolveResult(hThis, resoveNodeRS, hJSObjValue, - hResolveValues[i - 2], iSizes[i - 2], bAttribute); - iCounter += iSizes[i - 2]; - } - } - FXJSE_Value_Release(hJSObjValue); - if (iCounter > 0) { - FXJSE_HVALUE* rgValues = FX_Alloc(FXJSE_HVALUE, iCounter + 2); - for (int32_t i = 0; i < (iCounter + 2); i++) { - rgValues[i] = FXJSE_Value_Create(hruntime); - } - FXJSE_Value_SetInteger(rgValues[0], 1); - if (bAttribute) { - FXJSE_Value_SetUTF8String(rgValues[1], szName); - } else { - FXJSE_Value_SetNull(rgValues[1]); - } - int32_t iIndex = 2; - for (int32_t i = 0; i < iLength - 2; i++) { - for (int32_t j = 0; j < iSizes[i]; j++) { - FXJSE_Value_Set(rgValues[iIndex], hResolveValues[i][j]); - iIndex++; - } - } - FXJSE_Value_SetArray(args.GetReturnValue(), (iCounter + 2), rgValues); - for (int32_t i = 0; i < (iCounter + 2); i++) { - FXJSE_Value_Release(rgValues[i]); - } - FX_Free(rgValues); - } else { - CFX_WideString wsPropertyName = - CFX_WideString::FromUTF8(szName, szName.GetLength()); - CFX_WideString wsSomExpression = - CFX_WideString::FromUTF8(szSomExp, szSomExp.GetLength()); - pContext->ThrowScriptErrorMessage(XFA_IDS_ACCESS_PROPERTY_IN_NOT_OBJECT, - (const FX_WCHAR*)wsPropertyName, - (const FX_WCHAR*)wsSomExpression); - } - for (int32_t i = 0; i < iLength - 2; i++) { - for (int32_t j = 0; j < iSizes[i]; j++) { - FXJSE_Value_Release(hResolveValues[i][j]); - } - FX_Free(hResolveValues[i]); - } - FX_Free(hResolveValues); - FX_Free(iSizes); - FXJSE_Value_Release(hLengthValue); - } else { - XFA_RESOLVENODE_RS resoveNodeRS; - int32_t iRet = 0; - if (FXJSE_Value_IsObject(argAccessor) || - (FXJSE_Value_IsNull(argAccessor) && bsAccessorName.IsEmpty())) { - iRet = - ResolveObjects(hThis, argAccessor, szSomExp, resoveNodeRS, FALSE); - } else if (!FXJSE_Value_IsObject(argAccessor) && - !bsAccessorName.IsEmpty()) { - FX_BOOL bGetObject = - GetObjectByName(hThis, argAccessor, bsAccessorName); - if (bGetObject) { - iRet = - ResolveObjects(hThis, argAccessor, szSomExp, resoveNodeRS, FALSE); - } - } - if (iRet > 0) { - FXJSE_HVALUE* hResolveValues; - int32_t iSize = 0; - FX_BOOL bAttribute = FALSE; - ParseResolveResult(hThis, resoveNodeRS, argAccessor, hResolveValues, - iSize, bAttribute); - FXJSE_HVALUE* rgValues = FX_Alloc(FXJSE_HVALUE, iSize + 2); - for (int32_t i = 0; i < (iSize + 2); i++) { - rgValues[i] = FXJSE_Value_Create(hruntime); - } - FXJSE_Value_SetInteger(rgValues[0], 1); - if (bAttribute) { - FXJSE_Value_SetUTF8String(rgValues[1], szName); - } else { - FXJSE_Value_SetNull(rgValues[1]); - } - for (int32_t i = 0; i < iSize; i++) { - FXJSE_Value_Set(rgValues[i + 2], hResolveValues[i]); - } - FXJSE_Value_SetArray(args.GetReturnValue(), (iSize + 2), rgValues); - for (int32_t i = 0; i < (iSize + 2); i++) { - FXJSE_Value_Release(rgValues[i]); - } - FX_Free(rgValues); - for (int32_t i = 0; i < iSize; i++) { - FXJSE_Value_Release(hResolveValues[i]); - } - FX_Free(hResolveValues); - } else { - CFX_WideString wsPropertyName = - CFX_WideString::FromUTF8(szName, szName.GetLength()); - CFX_WideString wsSomExpression = - CFX_WideString::FromUTF8(szSomExp, szSomExp.GetLength()); - pContext->ThrowScriptErrorMessage(XFA_IDS_ACCESS_PROPERTY_IN_NOT_OBJECT, - (const FX_WCHAR*)wsPropertyName, - (const FX_WCHAR*)wsSomExpression); - } - } - if (argc == 5) { - FXJSE_Value_Release(argIndex); - } - FXJSE_Value_Release(argAccessor); - } else { - pContext->ThrowScriptErrorMessage(XFA_IDS_COMPILER_ERROR); - } -} -void CXFA_FM2JSContext::eval_translation(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - int32_t argc = args.GetLength(); - if (argc == 1) { - FXJSE_HVALUE argOne = GetSimpleHValue(hThis, args, 0); - CFX_ByteString argString; - HValueToUTF8String(argOne, argString); - if (argString.IsEmpty()) { - pContext->ThrowScriptErrorMessage(XFA_IDS_ARGUMENT_MISMATCH); - } else { - CFX_WideString scriptString = - CFX_WideString::FromUTF8(argString, argString.GetLength()); - CFX_WideTextBuf wsJavaScriptBuf; - CFX_WideString wsError; - XFA_FM2JS_Translate(scriptString, wsJavaScriptBuf, wsError); - if (wsError.IsEmpty()) { - CFX_WideString javaScript = wsJavaScriptBuf.GetWideString(); - FXJSE_Value_SetUTF8String( - args.GetReturnValue(), - FX_UTF8Encode(javaScript, javaScript.GetLength())); - } else { - pContext->ThrowScriptErrorMessage(XFA_IDS_COMPILER_ERROR); - } - } - FXJSE_Value_Release(argOne); - } else { - pContext->ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"Eval"); - } -} -void CXFA_FM2JSContext::is_fm_object(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - int32_t iLength = args.GetLength(); - if (iLength == 1) { - FXJSE_HVALUE argOne = args.GetValue(0); - FXJSE_Value_SetBoolean(args.GetReturnValue(), FXJSE_Value_IsObject(argOne)); - FXJSE_Value_Release(argOne); - } else { - FXJSE_Value_SetBoolean(args.GetReturnValue(), FALSE); - } -} -void CXFA_FM2JSContext::is_fm_array(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - int32_t iLength = args.GetLength(); - if (iLength == 1) { - FXJSE_HVALUE argOne = args.GetValue(0); - FX_BOOL bIsArray = FXJSE_Value_IsArray(argOne); - FXJSE_Value_SetBoolean(args.GetReturnValue(), bIsArray); - FXJSE_Value_Release(argOne); - } else { - FXJSE_Value_SetBoolean(args.GetReturnValue(), FALSE); - } -} -void CXFA_FM2JSContext::get_fm_value(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - FXJSE_HRUNTIME hruntime = pContext->GetScriptRuntime(); - int32_t iLength = args.GetLength(); - if (iLength == 1) { - FXJSE_HVALUE argOne = args.GetValue(0); - if (FXJSE_Value_IsArray(argOne)) { - FXJSE_HVALUE propertyValue = FXJSE_Value_Create(hruntime); - FXJSE_HVALUE jsobjectValue = FXJSE_Value_Create(hruntime); - FXJSE_Value_GetObjectPropByIdx(argOne, 1, propertyValue); - FXJSE_Value_GetObjectPropByIdx(argOne, 2, jsobjectValue); - if (FXJSE_Value_IsNull(propertyValue)) { - GetObjectDefaultValue(jsobjectValue, args.GetReturnValue()); - } else { - CFX_ByteString propertyStr; - FXJSE_Value_ToUTF8String(propertyValue, propertyStr); - FXJSE_Value_GetObjectProp(jsobjectValue, propertyStr, - args.GetReturnValue()); - } - FXJSE_Value_Release(propertyValue); - FXJSE_Value_Release(jsobjectValue); - } else if (FXJSE_Value_IsObject(argOne)) { - GetObjectDefaultValue(argOne, args.GetReturnValue()); - } else { - FXJSE_Value_Set(args.GetReturnValue(), argOne); - } - FXJSE_Value_Release(argOne); - } else { - pContext->ThrowScriptErrorMessage(XFA_IDS_COMPILER_ERROR); - } -} -void CXFA_FM2JSContext::get_fm_jsobj(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - CXFA_FM2JSContext* pContext = - static_cast(FXJSE_Value_ToObject(hThis, nullptr)); - int32_t argc = args.GetLength(); - if (argc == 1) { - FXJSE_HVALUE argOne = args.GetValue(0); - if (FXJSE_Value_IsArray(argOne)) { -#ifndef NDEBUG - FXJSE_HRUNTIME hruntime = pContext->GetScriptRuntime(); - FXJSE_HVALUE lengthValue = FXJSE_Value_Create(hruntime); - FXJSE_Value_GetObjectProp(argOne, "length", lengthValue); - FXSYS_assert(FXJSE_Value_ToInteger(lengthValue) >= 3); - FXJSE_Value_Release(lengthValue); -#endif - FXJSE_Value_GetObjectPropByIdx(argOne, 2, args.GetReturnValue()); - } else { - FXJSE_Value_Set(args.GetReturnValue(), argOne); - } - FXJSE_Value_Release(argOne); - } else { - pContext->ThrowScriptErrorMessage(XFA_IDS_COMPILER_ERROR); - } -} -void CXFA_FM2JSContext::fm_var_filter(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - FXJSE_HRUNTIME hruntime = pContext->GetScriptRuntime(); - int32_t argc = args.GetLength(); - if (argc == 1) { - FXJSE_HVALUE argOne = args.GetValue(0); - if (FXJSE_Value_IsArray(argOne)) { -#ifndef NDEBUG - FXJSE_HVALUE lengthValue = FXJSE_Value_Create(hruntime); - FXJSE_Value_GetObjectProp(argOne, "length", lengthValue); - FXSYS_assert(FXJSE_Value_ToInteger(lengthValue) >= 3); - FXJSE_Value_Release(lengthValue); -#endif - FXJSE_HVALUE flagsValue = FXJSE_Value_Create(hruntime); - FXJSE_Value_GetObjectPropByIdx(argOne, 0, flagsValue); - int32_t iFlags = FXJSE_Value_ToInteger(flagsValue); - FXJSE_Value_Release(flagsValue); - if (iFlags == 4) { - FXJSE_HVALUE rgValues[3]; - for (int32_t i = 0; i < 3; i++) { - rgValues[i] = FXJSE_Value_Create(hruntime); - } - FXJSE_Value_SetInteger(rgValues[0], 3); - FXJSE_Value_SetNull(rgValues[1]); - FXJSE_Value_SetNull(rgValues[2]); - FXJSE_Value_SetArray(args.GetReturnValue(), 3, rgValues); - for (int32_t i = 0; i < 3; i++) { - FXJSE_Value_Release(rgValues[i]); - } - } else if (iFlags == 3) { - FXJSE_HVALUE objectValue = FXJSE_Value_Create(hruntime); - FXJSE_Value_GetObjectPropByIdx(argOne, 2, objectValue); - if (!FXJSE_Value_IsNull(objectValue)) { - FXJSE_Value_Set(args.GetReturnValue(), argOne); - } else { - pContext->ThrowScriptErrorMessage(XFA_IDS_COMPILER_ERROR); - } - FXJSE_Value_Release(objectValue); - } else { - FXJSE_HVALUE simpleValue = GetSimpleHValue(hThis, args, 0); - FXJSE_Value_Set(args.GetReturnValue(), simpleValue); - FXJSE_Value_Release(simpleValue); - } - } else { - FXJSE_HVALUE simpleValue = GetSimpleHValue(hThis, args, 0); - FXJSE_Value_Set(args.GetReturnValue(), simpleValue); - FXJSE_Value_Release(simpleValue); - } - FXJSE_Value_Release(argOne); - } else { - pContext->ThrowScriptErrorMessage(XFA_IDS_COMPILER_ERROR); - } -} -void CXFA_FM2JSContext::concat_fm_object(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - FXJSE_HRUNTIME hruntime = pContext->GetScriptRuntime(); - uint32_t iLength = 0; - int32_t argCount = args.GetLength(); - FXJSE_HVALUE* argValues = FX_Alloc(FXJSE_HVALUE, argCount); - for (int32_t i = 0; i < argCount; i++) { - argValues[i] = args.GetValue(i); - if (FXJSE_Value_IsArray(argValues[i])) { - FXJSE_HVALUE lengthValue = FXJSE_Value_Create(hruntime); - FXJSE_Value_GetObjectProp(argValues[i], "length", lengthValue); - int32_t length = FXJSE_Value_ToInteger(lengthValue); - iLength = iLength + ((length > 2) ? (length - 2) : 0); - FXJSE_Value_Release(lengthValue); - } - iLength += 1; - } - FXJSE_HVALUE* returnValues = FX_Alloc(FXJSE_HVALUE, iLength); - for (int32_t i = 0; i < (int32_t)iLength; i++) { - returnValues[i] = FXJSE_Value_Create(hruntime); - } - int32_t index = 0; - for (int32_t i = 0; i < argCount; i++) { - if (FXJSE_Value_IsArray(argValues[i])) { - FXJSE_HVALUE lengthValue = FXJSE_Value_Create(hruntime); - FXJSE_Value_GetObjectProp(argValues[i], "length", lengthValue); - int32_t length = FXJSE_Value_ToInteger(lengthValue); - for (int32_t j = 2; j < length; j++) { - FXJSE_Value_GetObjectPropByIdx(argValues[i], j, returnValues[index]); - index++; - } - FXJSE_Value_Release(lengthValue); - } - FXJSE_Value_Set(returnValues[index], argValues[i]); - index++; - } - FXJSE_Value_SetArray(args.GetReturnValue(), iLength, returnValues); - for (int32_t i = 0; i < argCount; i++) { - FXJSE_Value_Release(argValues[i]); - } - FX_Free(argValues); - for (int32_t i = 0; i < (int32_t)iLength; i++) { - FXJSE_Value_Release(returnValues[i]); - } - FX_Free(returnValues); -} -FXJSE_HVALUE CXFA_FM2JSContext::GetSimpleHValue(FXJSE_HOBJECT hThis, - CFXJSE_Arguments& args, - uint32_t index) { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - FXJSE_HRUNTIME hruntime = pContext->GetScriptRuntime(); - FXSYS_assert(index < (uint32_t)args.GetLength()); - FXJSE_HVALUE argIndex = args.GetValue(index); - if (FXJSE_Value_IsArray(argIndex)) { - FXJSE_HVALUE lengthValue = FXJSE_Value_Create(hruntime); - FXJSE_Value_GetObjectProp(argIndex, "length", lengthValue); - int32_t iLength = FXJSE_Value_ToInteger(lengthValue); - FXJSE_Value_Release(lengthValue); - FXJSE_HVALUE simpleValue = FXJSE_Value_Create(hruntime); - if (iLength > 2) { - FXJSE_HVALUE propertyValue = FXJSE_Value_Create(hruntime); - FXJSE_HVALUE jsobjectValue = FXJSE_Value_Create(hruntime); - FXJSE_Value_GetObjectPropByIdx(argIndex, 1, propertyValue); - FXJSE_Value_GetObjectPropByIdx(argIndex, 2, jsobjectValue); - if (FXJSE_Value_IsNull(propertyValue)) { - GetObjectDefaultValue(jsobjectValue, simpleValue); - } else { - CFX_ByteString propertyStr; - FXJSE_Value_ToUTF8String(propertyValue, propertyStr); - FXJSE_Value_GetObjectProp(jsobjectValue, propertyStr, simpleValue); - } - FXJSE_Value_Release(propertyValue); - FXJSE_Value_Release(jsobjectValue); - } else { - FXJSE_Value_SetUndefined(simpleValue); - } - FXJSE_Value_Release(argIndex); - return simpleValue; - } else if (FXJSE_Value_IsObject(argIndex)) { - FXJSE_HVALUE defaultValue = FXJSE_Value_Create(hruntime); - GetObjectDefaultValue(argIndex, defaultValue); - FXJSE_Value_Release(argIndex); - return defaultValue; - } else { - return argIndex; - } -} -FX_BOOL CXFA_FM2JSContext::HValueIsNull(FXJSE_HOBJECT hThis, FXJSE_HVALUE arg) { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - FXJSE_HRUNTIME hruntime = pContext->GetScriptRuntime(); - FX_BOOL isNull = FALSE; - if (FXJSE_Value_IsNull(arg)) { - isNull = TRUE; - } else if (FXJSE_Value_IsArray(arg)) { - int32_t iLength = hvalue_get_array_length(hThis, arg); - if (iLength > 2) { - FXJSE_HVALUE propertyValue = FXJSE_Value_Create(hruntime); - FXJSE_HVALUE jsObjectValue = FXJSE_Value_Create(hruntime); - FXJSE_Value_GetObjectPropByIdx(arg, 1, propertyValue); - FXJSE_Value_GetObjectPropByIdx(arg, 2, jsObjectValue); - if (FXJSE_Value_IsNull(propertyValue)) { - FXJSE_HVALUE defaultValue = FXJSE_Value_Create(hruntime); - GetObjectDefaultValue(jsObjectValue, defaultValue); - if (FXJSE_Value_IsNull(defaultValue)) { - isNull = TRUE; - } - FXJSE_Value_Release(defaultValue); - } else { - CFX_ByteString propertyStr; - FXJSE_Value_ToUTF8String(propertyValue, propertyStr); - FXJSE_HVALUE newPropertyValue = FXJSE_Value_Create(hruntime); - FXJSE_Value_GetObjectProp(jsObjectValue, propertyStr, newPropertyValue); - if (FXJSE_Value_IsNull(newPropertyValue)) { - isNull = TRUE; - } - FXJSE_Value_Release(newPropertyValue); - } - FXJSE_Value_Release(propertyValue); - FXJSE_Value_Release(jsObjectValue); - } else { - isNull = TRUE; - } - } else if (FXJSE_Value_IsObject(arg)) { - FXJSE_HVALUE defaultValue = FXJSE_Value_Create(hruntime); - GetObjectDefaultValue(arg, defaultValue); - if (FXJSE_Value_IsNull(defaultValue)) { - isNull = TRUE; - } - FXJSE_Value_Release(defaultValue); - } - return isNull; -} -int32_t CXFA_FM2JSContext::hvalue_get_array_length(FXJSE_HOBJECT hThis, - FXJSE_HVALUE arg) { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - FXJSE_HRUNTIME hruntime = pContext->GetScriptRuntime(); - int32_t iLength = 0; - if (FXJSE_Value_IsArray(arg)) { - FXJSE_HVALUE lengthValue = FXJSE_Value_Create(hruntime); - FXJSE_Value_GetObjectProp(arg, "length", lengthValue); - iLength = FXJSE_Value_ToInteger(lengthValue); - FXJSE_Value_Release(lengthValue); - } - return iLength; -} -FX_BOOL CXFA_FM2JSContext::simpleValueCompare(FXJSE_HOBJECT hThis, - FXJSE_HVALUE firstValue, - FXJSE_HVALUE secondValue) { - FX_BOOL bReturn = FALSE; - if (FXJSE_Value_IsUTF8String(firstValue)) { - CFX_ByteString firstString, secondString; - HValueToUTF8String(firstValue, firstString); - HValueToUTF8String(secondValue, secondString); - bReturn = firstString.Equal(secondString); - } else if (FXJSE_Value_IsNumber(firstValue)) { - FX_FLOAT first = HValueToFloat(hThis, firstValue); - FX_FLOAT second = HValueToFloat(hThis, secondValue); - bReturn = (first == second); - } else if (FXJSE_Value_IsBoolean(firstValue)) { - bReturn = (FXJSE_Value_ToBoolean(firstValue) == - FXJSE_Value_ToBoolean(secondValue)); - } else if (FXJSE_Value_IsNull(firstValue) && - FXJSE_Value_IsNull(secondValue)) { - bReturn = TRUE; - } - return bReturn; -} -void CXFA_FM2JSContext::unfoldArgs(FXJSE_HOBJECT hThis, - CFXJSE_Arguments& args, - FXJSE_HVALUE*& resultValues, - int32_t& iCount, - int32_t iStart) { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - FXJSE_HRUNTIME hruntime = pContext->GetScriptRuntime(); - iCount = 0; - int32_t argc = args.GetLength(); - FXJSE_HVALUE* argsValue = FX_Alloc(FXJSE_HVALUE, argc); - for (int32_t i = iStart; i < argc; i++) { - argsValue[i] = args.GetValue(i); - if (FXJSE_Value_IsArray(argsValue[i])) { - FXJSE_HVALUE lengthValue = FXJSE_Value_Create(hruntime); - FXJSE_Value_GetObjectProp(argsValue[i], "length", lengthValue); - int32_t iLength = FXJSE_Value_ToInteger(lengthValue); - FXJSE_Value_Release(lengthValue); - iCount += ((iLength > 2) ? (iLength - 2) : 0); - } else { - iCount += 1; - } - } - resultValues = FX_Alloc(FXJSE_HVALUE, iCount); - for (int32_t i = 0; i < iCount; i++) { - resultValues[i] = FXJSE_Value_Create(hruntime); - } - int32_t index = 0; - for (int32_t i = iStart; i < argc; i++) { - if (FXJSE_Value_IsArray(argsValue[i])) { - FXJSE_HVALUE lengthValue = FXJSE_Value_Create(hruntime); - FXJSE_Value_GetObjectProp(argsValue[i], "length", lengthValue); - int32_t iLength = FXJSE_Value_ToInteger(lengthValue); - FXJSE_Value_Release(lengthValue); - if (iLength > 2) { - FXJSE_HVALUE propertyValue = FXJSE_Value_Create(hruntime); - FXJSE_HVALUE jsObjectValue = FXJSE_Value_Create(hruntime); - FXJSE_Value_GetObjectPropByIdx(argsValue[i], 1, propertyValue); - if (FXJSE_Value_IsNull(propertyValue)) { - for (int32_t j = 2; j < iLength; j++) { - FXJSE_Value_GetObjectPropByIdx(argsValue[i], j, jsObjectValue); - GetObjectDefaultValue(jsObjectValue, resultValues[index]); - index++; - } - } else { - CFX_ByteString propertyString; - FXJSE_Value_ToUTF8String(propertyValue, propertyString); - for (int32_t j = 2; j < iLength; j++) { - FXJSE_Value_GetObjectPropByIdx(argsValue[i], j, jsObjectValue); - FXJSE_Value_GetObjectProp(jsObjectValue, propertyString, - resultValues[index]); - index++; - } - } - FXJSE_Value_Release(propertyValue); - FXJSE_Value_Release(jsObjectValue); - } - } else if (FXJSE_Value_IsObject(argsValue[i])) { - GetObjectDefaultValue(argsValue[i], resultValues[index]); - index++; - } else { - FXJSE_Value_Set(resultValues[index], argsValue[i]); - index++; - } - } - for (int32_t i = iStart; i < argc; i++) { - FXJSE_Value_Release(argsValue[i]); - } - FX_Free(argsValue); -} -void CXFA_FM2JSContext::GetObjectDefaultValue(FXJSE_HVALUE hObjectValue, - FXJSE_HVALUE hDefaultValue) { - CXFA_Node* pNode = - ToNode((CXFA_Object*)FXJSE_Value_ToObject(hObjectValue, NULL)); - if (pNode) { - pNode->Script_Som_DefaultValue(hDefaultValue, FALSE, (XFA_ATTRIBUTE)-1); - } else { - FXJSE_Value_SetNull(hDefaultValue); - } -} -FX_BOOL CXFA_FM2JSContext::SetObjectDefaultValue(FXJSE_HVALUE hObjectValue, - FXJSE_HVALUE hNewValue) { - CXFA_Node* pNode = - ToNode((CXFA_Object*)FXJSE_Value_ToObject(hObjectValue, NULL)); - if (pNode) { - pNode->Script_Som_DefaultValue(hNewValue, TRUE, (XFA_ATTRIBUTE)-1); - return TRUE; - } - return FALSE; -} -void CXFA_FM2JSContext::GenerateSomExpression(const CFX_ByteStringC& szName, - int32_t iIndexFlags, - int32_t iIndexValue, - FX_BOOL bIsStar, - CFX_ByteString& szSomExp) { - if (bIsStar) { - szSomExp = szName + "[*]"; - return; - } - if (iIndexFlags == 0) { - szSomExp = szName; - return; - } - if (iIndexFlags == 1 || iIndexValue == 0) { - szSomExp = szName + "[" + - CFX_ByteString::FormatInteger(iIndexValue, FXFORMAT_SIGNED) + - "]"; - } else if (iIndexFlags == 2) { - szSomExp = (iIndexValue < 0) ? (szName + "[-") : (szName + "[+"); - iIndexValue = (iIndexValue < 0) ? (0 - iIndexValue) : iIndexValue; - szSomExp += CFX_ByteString::FormatInteger(iIndexValue); - szSomExp += "]"; - } else { - szSomExp = (iIndexValue < 0) ? (szName + "[") : (szName + "[-"); - iIndexValue = (iIndexValue < 0) ? (0 - iIndexValue) : iIndexValue; - szSomExp += CFX_ByteString::FormatInteger(iIndexValue); - szSomExp += "]"; - } -} -FX_BOOL CXFA_FM2JSContext::GetObjectByName( - FXJSE_HOBJECT hThis, - FXJSE_HVALUE accessorValue, - const CFX_ByteStringC& szAccessorName) { - FX_BOOL bFlags = FALSE; - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - CXFA_Document* pDoc = pContext->GetDocument(); - if (!pDoc) { - return bFlags; - } - IXFA_ScriptContext* pScriptContext = pDoc->GetScriptContext(); - XFA_RESOLVENODE_RS resoveNodeRS; - FX_DWORD dwFlags = XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Properties | - XFA_RESOLVENODE_Siblings | XFA_RESOLVENODE_Parent; - int32_t iRet = pScriptContext->ResolveObjects( - pScriptContext->GetThisObject(), - CFX_WideString::FromUTF8(szAccessorName.GetCStr(), - szAccessorName.GetLength()), - resoveNodeRS, dwFlags); - if (iRet >= 1 && resoveNodeRS.dwFlags == XFA_RESOVENODE_RSTYPE_Nodes) { - FXJSE_Value_Set(accessorValue, pScriptContext->GetJSValueFromMap( - resoveNodeRS.nodes.GetAt(0))); - bFlags = TRUE; - } - return bFlags; -} -int32_t CXFA_FM2JSContext::ResolveObjects(FXJSE_HOBJECT hThis, - FXJSE_HVALUE hRefValue, - const CFX_ByteStringC& bsSomExp, - XFA_RESOLVENODE_RS& resoveNodeRS, - FX_BOOL bdotAccessor, - FX_BOOL bHasNoResolveName) { - CFX_WideString wsSomExpression = - CFX_WideString::FromUTF8(bsSomExp.GetCStr(), bsSomExp.GetLength()); - int32_t iRet = -1; - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - CXFA_Document* pDoc = pContext->GetDocument(); - if (!pDoc) { - return iRet; - } - IXFA_ScriptContext* pScriptContext = pDoc->GetScriptContext(); - CXFA_Object* pNode = NULL; - FX_DWORD dFlags = 0UL; - if (bdotAccessor) { - if (FXJSE_Value_IsNull(hRefValue)) { - pNode = pScriptContext->GetThisObject(); - dFlags = XFA_RESOLVENODE_Siblings | XFA_RESOLVENODE_Parent; - } else { - pNode = (CXFA_Object*)FXJSE_Value_ToObject(hRefValue, NULL); - FXSYS_assert(pNode); - if (bHasNoResolveName) { - CFX_WideString wsName; - if (CXFA_Node* pXFANode = pNode->AsNode()) { - pXFANode->GetAttribute(XFA_ATTRIBUTE_Name, wsName, FALSE); - } - if (wsName.IsEmpty()) { - CFX_WideStringC className; - pNode->GetClassName(className); - wsName = FX_WSTRC(L"#") + className; - } - wsSomExpression = wsName + wsSomExpression; - dFlags = XFA_RESOLVENODE_Siblings; - } else { - dFlags = (bsSomExp == "*") - ? (XFA_RESOLVENODE_Children) - : (XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Attributes | - XFA_RESOLVENODE_Properties); - } - } - } else { - pNode = (CXFA_Object*)FXJSE_Value_ToObject(hRefValue, NULL); - dFlags = XFA_RESOLVENODE_AnyChild; - } - iRet = pScriptContext->ResolveObjects(pNode, wsSomExpression, resoveNodeRS, - dFlags); - return iRet; -} -void CXFA_FM2JSContext::ParseResolveResult( - FXJSE_HOBJECT hThis, - const XFA_RESOLVENODE_RS& resoveNodeRS, - FXJSE_HVALUE hParentValue, - FXJSE_HVALUE*& resultValues, - int32_t& iSize, - FX_BOOL& bAttribute) { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - FXJSE_HRUNTIME hRuntime = pContext->GetScriptRuntime(); - iSize = 0; - resultValues = NULL; - if (resoveNodeRS.dwFlags == XFA_RESOVENODE_RSTYPE_Nodes) { - bAttribute = FALSE; - iSize = resoveNodeRS.nodes.GetSize(); - resultValues = FX_Alloc(FXJSE_HVALUE, iSize); - for (int32_t i = 0; i < iSize; i++) { - resultValues[i] = FXJSE_Value_Create(hRuntime); - FXJSE_Value_Set( - resultValues[i], - pContext->GetDocument()->GetScriptContext()->GetJSValueFromMap( - resoveNodeRS.nodes.GetAt(i))); - } - } else { - CXFA_HVALUEArray objectProperties(hRuntime); - int32_t iRet = resoveNodeRS.GetAttributeResult(objectProperties); - bAttribute = (iRet == 0); - if (bAttribute) { - if (FXJSE_Value_IsObject(hParentValue)) { - iSize = 1; - resultValues = FX_Alloc(FXJSE_HVALUE, 1); - resultValues[0] = FXJSE_Value_Create(hRuntime); - FXJSE_Value_Set(resultValues[0], hParentValue); - } - } else { - iSize = iRet; - resultValues = FX_Alloc(FXJSE_HVALUE, iSize); - for (int32_t i = 0; i < iSize; i++) { - resultValues[i] = FXJSE_Value_Create(hRuntime); - FXJSE_Value_Set(resultValues[i], objectProperties[i]); - } - } - } -} -int32_t CXFA_FM2JSContext::HValueToInteger(FXJSE_HOBJECT hThis, - FXJSE_HVALUE hValue) { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - FXJSE_HRUNTIME hruntime = pContext->GetScriptRuntime(); - int32_t iValue = 0; - if (FXJSE_Value_IsArray(hValue)) { - FXJSE_HVALUE propertyValue = FXJSE_Value_Create(hruntime); - FXJSE_HVALUE jsobjectValue = FXJSE_Value_Create(hruntime); - FXJSE_HVALUE newProperty = FXJSE_Value_Create(hruntime); - FXJSE_Value_GetObjectPropByIdx(hValue, 1, propertyValue); - FXJSE_Value_GetObjectPropByIdx(hValue, 2, jsobjectValue); - if (FXJSE_Value_IsNull(propertyValue)) { - GetObjectDefaultValue(jsobjectValue, newProperty); - } else { - CFX_ByteString propertyStr; - FXJSE_Value_ToUTF8String(propertyValue, propertyStr); - FXJSE_Value_GetObjectProp(jsobjectValue, propertyStr, newProperty); - } - iValue = HValueToInteger(hThis, newProperty); - FXJSE_Value_Release(newProperty); - FXJSE_Value_Release(jsobjectValue); - FXJSE_Value_Release(propertyValue); - return iValue; - } else if (FXJSE_Value_IsObject(hValue)) { - FXJSE_HVALUE newProperty = FXJSE_Value_Create(hruntime); - GetObjectDefaultValue(hValue, newProperty); - iValue = HValueToInteger(hThis, newProperty); - FXJSE_Value_Release(newProperty); - return iValue; - } else if (FXJSE_Value_IsUTF8String(hValue)) { - CFX_ByteString szValue; - FXJSE_Value_ToUTF8String(hValue, szValue); - iValue = FXSYS_atoi(szValue); - } else { - iValue = FXJSE_Value_ToInteger(hValue); - } - return iValue; -} -FX_DOUBLE CXFA_FM2JSContext::StringToDouble( - const CFX_ByteStringC& szStringVal) { - return XFA_ByteStringToDouble(szStringVal); -} -FX_FLOAT CXFA_FM2JSContext::HValueToFloat(FXJSE_HOBJECT hThis, - FXJSE_HVALUE arg) { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - FXJSE_HRUNTIME hruntime = pContext->GetScriptRuntime(); - FX_FLOAT fRet = 0.0f; - if (FXJSE_Value_IsArray(arg)) { - FXJSE_HVALUE propertyValue = FXJSE_Value_Create(hruntime); - FXJSE_HVALUE jsobjectValue = FXJSE_Value_Create(hruntime); - FXJSE_HVALUE newProperty = FXJSE_Value_Create(hruntime); - FXJSE_Value_GetObjectPropByIdx(arg, 1, propertyValue); - FXJSE_Value_GetObjectPropByIdx(arg, 2, jsobjectValue); - if (FXJSE_Value_IsNull(propertyValue)) { - GetObjectDefaultValue(jsobjectValue, newProperty); - } else { - CFX_ByteString propertyStr; - FXJSE_Value_ToUTF8String(propertyValue, propertyStr); - FXJSE_Value_GetObjectProp(jsobjectValue, propertyStr, newProperty); - } - fRet = HValueToFloat(hThis, newProperty); - FXJSE_Value_Release(newProperty); - FXJSE_Value_Release(jsobjectValue); - FXJSE_Value_Release(propertyValue); - } else if (FXJSE_Value_IsObject(arg)) { - FXJSE_HVALUE newProperty = FXJSE_Value_Create(hruntime); - GetObjectDefaultValue(arg, newProperty); - fRet = HValueToFloat(hThis, newProperty); - FXJSE_Value_Release(newProperty); - } else if (FXJSE_Value_IsUTF8String(arg)) { - CFX_ByteString bsOutput; - FXJSE_Value_ToUTF8String(arg, bsOutput); - fRet = (FX_FLOAT)StringToDouble(bsOutput); - } else if (FXJSE_Value_IsUndefined(arg)) { - fRet = 0; - } else { - fRet = FXJSE_Value_ToFloat(arg); - } - return fRet; -} -FX_DOUBLE CXFA_FM2JSContext::HValueToDouble(FXJSE_HOBJECT hThis, - FXJSE_HVALUE arg) { - CXFA_FM2JSContext* pContext = - (CXFA_FM2JSContext*)FXJSE_Value_ToObject(hThis, NULL); - FXJSE_HRUNTIME hruntime = pContext->GetScriptRuntime(); - FX_DOUBLE dRet = 0; - if (FXJSE_Value_IsArray(arg)) { - FXJSE_HVALUE propertyValue = FXJSE_Value_Create(hruntime); - FXJSE_HVALUE jsobjectValue = FXJSE_Value_Create(hruntime); - FXJSE_HVALUE newProperty = FXJSE_Value_Create(hruntime); - FXJSE_Value_GetObjectPropByIdx(arg, 1, propertyValue); - FXJSE_Value_GetObjectPropByIdx(arg, 2, jsobjectValue); - if (FXJSE_Value_IsNull(propertyValue)) { - GetObjectDefaultValue(jsobjectValue, newProperty); - } else { - CFX_ByteString propertyStr; - FXJSE_Value_ToUTF8String(propertyValue, propertyStr); - FXJSE_Value_GetObjectProp(jsobjectValue, propertyStr, newProperty); - } - dRet = HValueToDouble(hThis, newProperty); - FXJSE_Value_Release(newProperty); - FXJSE_Value_Release(jsobjectValue); - FXJSE_Value_Release(propertyValue); - } else if (FXJSE_Value_IsObject(arg)) { - FXJSE_HVALUE newProperty = FXJSE_Value_Create(hruntime); - GetObjectDefaultValue(arg, newProperty); - dRet = HValueToDouble(hThis, newProperty); - FXJSE_Value_Release(newProperty); - } else if (FXJSE_Value_IsUTF8String(arg)) { - CFX_ByteString bsOutput; - FXJSE_Value_ToUTF8String(arg, bsOutput); - dRet = StringToDouble(bsOutput); - } else if (FXJSE_Value_IsUndefined(arg)) { - dRet = 0; - } else { - dRet = FXJSE_Value_ToDouble(arg); - } - return dRet; -} -void CXFA_FM2JSContext::HValueToUTF8String(FXJSE_HVALUE arg, - CFX_ByteString& szOutputString) { - if (FXJSE_Value_IsNull(arg) || FXJSE_Value_IsUndefined(arg)) { - szOutputString = ""; - } else if (FXJSE_Value_IsBoolean(arg)) { - szOutputString = FXJSE_Value_ToBoolean(arg) ? "1" : "0"; - } else { - szOutputString = ""; - FXJSE_Value_ToUTF8String(arg, szOutputString); - } -} -static FXJSE_FUNCTION formcalc_fm2js_functions[] = { - {"Abs", CXFA_FM2JSContext::Abs}, - {"Avg", CXFA_FM2JSContext::Avg}, - {"Ceil", CXFA_FM2JSContext::Ceil}, - {"Count", CXFA_FM2JSContext::Count}, - {"Floor", CXFA_FM2JSContext::Floor}, - {"Max", CXFA_FM2JSContext::Max}, - {"Min", CXFA_FM2JSContext::Min}, - {"Mod", CXFA_FM2JSContext::Mod}, - {"Round", CXFA_FM2JSContext::Round}, - {"Sum", CXFA_FM2JSContext::Sum}, - {"Date", CXFA_FM2JSContext::Date}, - {"Date2Num", CXFA_FM2JSContext::Date2Num}, - {"DateFmt", CXFA_FM2JSContext::DateFmt}, - {"IsoDate2Num", CXFA_FM2JSContext::IsoDate2Num}, - {"IsoTime2Num", CXFA_FM2JSContext::IsoTime2Num}, - {"LocalDateFmt", CXFA_FM2JSContext::LocalDateFmt}, - {"LocalTimeFmt", CXFA_FM2JSContext::LocalTimeFmt}, - {"Num2Date", CXFA_FM2JSContext::Num2Date}, - {"Num2GMTime", CXFA_FM2JSContext::Num2GMTime}, - {"Num2Time", CXFA_FM2JSContext::Num2Time}, - {"Time", CXFA_FM2JSContext::Time}, - {"Time2Num", CXFA_FM2JSContext::Time2Num}, - {"TimeFmt", CXFA_FM2JSContext::TimeFmt}, - {"Apr", CXFA_FM2JSContext::Apr}, - {"Cterm", CXFA_FM2JSContext::CTerm}, - {"FV", CXFA_FM2JSContext::FV}, - {"Ipmt", CXFA_FM2JSContext::IPmt}, - {"NPV", CXFA_FM2JSContext::NPV}, - {"Pmt", CXFA_FM2JSContext::Pmt}, - {"PPmt", CXFA_FM2JSContext::PPmt}, - {"PV", CXFA_FM2JSContext::PV}, - {"Rate", CXFA_FM2JSContext::Rate}, - {"Term", CXFA_FM2JSContext::Term}, - {"Choose", CXFA_FM2JSContext::Choose}, - {"Exists", CXFA_FM2JSContext::Exists}, - {"HasValue", CXFA_FM2JSContext::HasValue}, - {"Oneof", CXFA_FM2JSContext::Oneof}, - {"Within", CXFA_FM2JSContext::Within}, - {"If", CXFA_FM2JSContext::If}, - {"Eval", CXFA_FM2JSContext::Eval}, - {"Translate", CXFA_FM2JSContext::eval_translation}, - {"Ref", CXFA_FM2JSContext::Ref}, - {"UnitType", CXFA_FM2JSContext::UnitType}, - {"UnitValue", CXFA_FM2JSContext::UnitValue}, - {"At", CXFA_FM2JSContext::At}, - {"Concat", CXFA_FM2JSContext::Concat}, - {"Decode", CXFA_FM2JSContext::Decode}, - {"Encode", CXFA_FM2JSContext::Encode}, - {"Format", CXFA_FM2JSContext::Format}, - {"Left", CXFA_FM2JSContext::Left}, - {"Len", CXFA_FM2JSContext::Len}, - {"Lower", CXFA_FM2JSContext::Lower}, - {"Ltrim", CXFA_FM2JSContext::Ltrim}, - {"Parse", CXFA_FM2JSContext::Parse}, - {"Replace", CXFA_FM2JSContext::Replace}, - {"Right", CXFA_FM2JSContext::Right}, - {"Rtrim", CXFA_FM2JSContext::Rtrim}, - {"Space", CXFA_FM2JSContext::Space}, - {"Str", CXFA_FM2JSContext::Str}, - {"Stuff", CXFA_FM2JSContext::Stuff}, - {"Substr", CXFA_FM2JSContext::Substr}, - {"Uuid", CXFA_FM2JSContext::Uuid}, - {"Upper", CXFA_FM2JSContext::Upper}, - {"WordNum", CXFA_FM2JSContext::WordNum}, - {"Get", CXFA_FM2JSContext::Get}, - {"Post", CXFA_FM2JSContext::Post}, - {"Put", CXFA_FM2JSContext::Put}, - {"positive_operator", CXFA_FM2JSContext::positive_operator}, - {"negative_operator", CXFA_FM2JSContext::negative_operator}, - {"logical_or_operator", CXFA_FM2JSContext::logical_or_operator}, - {"logical_and_operator", CXFA_FM2JSContext::logical_and_operator}, - {"logical_not_operator", CXFA_FM2JSContext::logical_not_operator}, - {"equality_operator", CXFA_FM2JSContext::equality_operator}, - {"notequality_operator", CXFA_FM2JSContext::notequality_operator}, - {"less_operator", CXFA_FM2JSContext::less_operator}, - {"lessequal_operator", CXFA_FM2JSContext::lessequal_operator}, - {"greater_operator", CXFA_FM2JSContext::greater_operator}, - {"greaterequal_operator", CXFA_FM2JSContext::greaterequal_operator}, - {"plus_operator", CXFA_FM2JSContext::plus_operator}, - {"minus_operator", CXFA_FM2JSContext::minus_operator}, - {"multiple_operator", CXFA_FM2JSContext::multiple_operator}, - {"divide_operator", CXFA_FM2JSContext::divide_operator}, - {"assign_value_operator", CXFA_FM2JSContext::assign_value_operator}, - {"dot_accessor", CXFA_FM2JSContext::dot_accessor}, - {"dotdot_accessor", CXFA_FM2JSContext::dotdot_accessor}, - {"concat_fm_object", CXFA_FM2JSContext::concat_fm_object}, - {"is_fm_object", CXFA_FM2JSContext::is_fm_object}, - {"is_fm_array", CXFA_FM2JSContext::is_fm_array}, - {"get_fm_value", CXFA_FM2JSContext::get_fm_value}, - {"get_fm_jsobj", CXFA_FM2JSContext::get_fm_jsobj}, - {"fm_var_filter", CXFA_FM2JSContext::fm_var_filter}, -}; -CXFA_FM2JSContext::CXFA_FM2JSContext() - : m_hFMClass(nullptr), m_pDocument(nullptr) { - FXSYS_memset(&m_fmClass, 0, sizeof(FXJSE_CLASS)); -} -CXFA_FM2JSContext::~CXFA_FM2JSContext() { - m_pDocument = NULL; - if (m_hValue) { - FXJSE_Value_Release(m_hValue); - m_hValue = NULL; - } - m_hScriptRuntime = NULL; -} -CXFA_FM2JSContext* CXFA_FM2JSContext::Create() { - return new CXFA_FM2JSContext; -} -void CXFA_FM2JSContext::Initialize(FXJSE_HRUNTIME hScriptRuntime, - FXJSE_HCONTEXT hScriptContext, - CXFA_Document* pDoc) { - m_pDocument = pDoc; - m_hScriptRuntime = hScriptRuntime; - m_fmClass.name = "XFA_FM2JS_FormCalcClass"; - m_fmClass.constructor = NULL; - m_fmClass.properties = NULL; - m_fmClass.methods = formcalc_fm2js_functions; - m_fmClass.propNum = 0; - m_fmClass.methNum = - sizeof(formcalc_fm2js_functions) / sizeof(formcalc_fm2js_functions[0]); - m_hFMClass = FXJSE_DefineClass(hScriptContext, &m_fmClass); - m_hValue = FXJSE_Value_Create(hScriptRuntime); - FXJSE_Value_SetNull(m_hValue); - FXJSE_Value_SetObject(m_hValue, this, m_hFMClass); -} -void CXFA_FM2JSContext::GlobalPropertyGetter(FXJSE_HVALUE hValue) { - FXJSE_Value_Set(hValue, m_hValue); -} -void CXFA_FM2JSContext::Release() { - delete this; -} -void CXFA_FM2JSContext::ThrowScriptErrorMessage(int32_t iStringID, ...) { - IXFA_AppProvider* pAppProvider = m_pDocument->GetNotify()->GetAppProvider(); - FXSYS_assert(pAppProvider); - CFX_WideString wsFormat; - pAppProvider->LoadString(iStringID, wsFormat); - CFX_WideString wsMessage; - va_list arg_ptr; - va_start(arg_ptr, iStringID); - wsMessage.FormatV((const FX_WCHAR*)wsFormat, arg_ptr); - va_end(arg_ptr); - FXJSE_ThrowMessage("", FX_UTF8Encode(wsMessage, wsMessage.GetLength())); -} diff --git a/xfa/src/fxfa/fm2js/xfa_fm2jscontext.h b/xfa/src/fxfa/fm2js/xfa_fm2jscontext.h deleted file mode 100644 index 62c2a1e895..0000000000 --- a/xfa/src/fxfa/fm2js/xfa_fm2jscontext.h +++ /dev/null @@ -1,453 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXFA_FM2JS_XFA_FM2JSCONTEXT_H_ -#define XFA_SRC_FXFA_FM2JS_XFA_FM2JSCONTEXT_H_ - -#include "xfa/src/fxfa/parser/xfa_script.h" - -class CXFA_FM2JSContext { - public: - static void Abs(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void Avg(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void Ceil(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void Count(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void Floor(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void Max(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void Min(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void Mod(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void Round(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void Sum(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void Date(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void Date2Num(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void DateFmt(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void IsoDate2Num(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void IsoTime2Num(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void LocalDateFmt(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void LocalTimeFmt(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void Num2Date(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void Num2GMTime(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void Num2Time(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void Time(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void Time2Num(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void TimeFmt(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - - static FX_BOOL IsIsoDateFormat(const FX_CHAR* pData, - int32_t iLength, - int32_t& iStyle, - int32_t& iYear, - int32_t& iMonth, - int32_t& iDay); - static FX_BOOL IsIsoTimeFormat(const FX_CHAR* pData, - int32_t iLength, - int32_t& iHour, - int32_t& iMinute, - int32_t& iSecond, - int32_t& iMilliSecond, - int32_t& iZoneHour, - int32_t& iZoneMinute); - static FX_BOOL IsIsoDateTimeFormat(const FX_CHAR* pData, - int32_t iLength, - int32_t& iYear, - int32_t& iMonth, - int32_t& iDay, - int32_t& iHour, - int32_t& iMinute, - int32_t& iSecond, - int32_t& iMillionSecond, - int32_t& iZoneHour, - int32_t& iZoneMinute); - static FX_BOOL Local2IsoDate(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szDate, - const CFX_ByteStringC& szFormat, - const CFX_ByteStringC& szLocale, - CFX_ByteString& strIsoDate); - static FX_BOOL Local2IsoTime(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szTime, - const CFX_ByteStringC& szFormat, - const CFX_ByteStringC& szLocale, - CFX_ByteString& strIsoTime); - static FX_BOOL IsoDate2Local(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szDate, - const CFX_ByteStringC& szFormat, - const CFX_ByteStringC& szLocale, - CFX_ByteString& strLocalDate); - static FX_BOOL IsoTime2Local(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szTime, - const CFX_ByteStringC& szFormat, - const CFX_ByteStringC& szLocale, - CFX_ByteString& strLocalTime); - static FX_BOOL GetGMTTime(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szTime, - const CFX_ByteStringC& szFormat, - const CFX_ByteStringC& szLocale, - CFX_ByteString& strGMTTime); - static int32_t DateString2Num(const CFX_ByteStringC& szDateString); - static void GetLocalDateFormat(FXJSE_HOBJECT hThis, - int32_t iStyle, - const CFX_ByteStringC& szLocalStr, - CFX_ByteString& strFormat, - FX_BOOL bStandard); - static void GetLocalTimeFormat(FXJSE_HOBJECT hThis, - int32_t iStyle, - const CFX_ByteStringC& szLocalStr, - CFX_ByteString& strFormat, - FX_BOOL bStandard); - static void GetStandardDateFormat(FXJSE_HOBJECT hThis, - int32_t iStyle, - const CFX_ByteStringC& szLocalStr, - CFX_ByteString& strFormat); - static void GetStandardTimeFormat(FXJSE_HOBJECT hThis, - int32_t iStyle, - const CFX_ByteStringC& szLocalStr, - CFX_ByteString& strFormat); - - static void Num2AllTime(FXJSE_HOBJECT hThis, - int32_t iTime, - const CFX_ByteStringC& szFormat, - const CFX_ByteStringC& szLocale, - FX_BOOL bGM, - CFX_ByteString& strTime); - static void GetLocalTimeZone(int32_t& iHour, int32_t& iMin, int32_t& iSec); - - static void Apr(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void CTerm(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void FV(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void IPmt(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void NPV(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void Pmt(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void PPmt(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void PV(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void Rate(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void Term(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void Choose(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void Exists(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void HasValue(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void Oneof(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void Within(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void If(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void Eval(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void Ref(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void UnitType(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void UnitValue(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - - static void At(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void Concat(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void Decode(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void DecodeURL(const CFX_ByteStringC& szURLString, - CFX_ByteTextBuf& szResultBuf); - static void DecodeHTML(const CFX_ByteStringC& szHTMLString, - CFX_ByteTextBuf& szResultBuf); - static void DecodeXML(const CFX_ByteStringC& szXMLString, - CFX_ByteTextBuf& szResultBuf); - static void Encode(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void EncodeURL(const CFX_ByteStringC& szURLString, - CFX_ByteTextBuf& szResultBuf); - static void EncodeHTML(const CFX_ByteStringC& szHTMLString, - CFX_ByteTextBuf& szResultBuf); - static void EncodeXML(const CFX_ByteStringC& szXMLString, - CFX_ByteTextBuf& szResultBuf); - static FX_BOOL HTMLSTR2Code(const CFX_WideStringC& pData, uint32_t& iCode); - static FX_BOOL HTMLCode2STR(uint32_t iCode, CFX_WideString& wsHTMLReserve); - static void Format(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void Left(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void Len(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void Lower(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void Ltrim(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void Parse(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void Replace(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void Right(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void Rtrim(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void Space(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void Str(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void Stuff(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void Substr(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void Uuid(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void Upper(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void WordNum(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void TrillionUS(const CFX_ByteStringC& szData, - CFX_ByteTextBuf& strBuf); - static void WordUS(const CFX_ByteStringC& szData, - int32_t iStyle, - CFX_ByteTextBuf& strBuf); - - static void Get(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void Post(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void Put(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void assign_value_operator(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void logical_or_operator(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void logical_and_operator(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void equality_operator(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void notequality_operator(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static FX_BOOL fm_ref_equal(FXJSE_HOBJECT hThis, CFXJSE_Arguments& args); - static void less_operator(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void lessequal_operator(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void greater_operator(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void greaterequal_operator(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void plus_operator(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void minus_operator(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void multiple_operator(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void divide_operator(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void positive_operator(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void negative_operator(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void logical_not_operator(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void dot_accessor(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void dotdot_accessor(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void eval_translation(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void is_fm_object(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void is_fm_array(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void get_fm_value(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void get_fm_jsobj(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void fm_var_filter(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static void concat_fm_object(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - - static int32_t hvalue_get_array_length(FXJSE_HOBJECT hThis, FXJSE_HVALUE arg); - static FX_BOOL simpleValueCompare(FXJSE_HOBJECT hThis, - FXJSE_HVALUE firstValue, - FXJSE_HVALUE secondValue); - static void unfoldArgs(FXJSE_HOBJECT hThis, - CFXJSE_Arguments& args, - FXJSE_HVALUE*& resultValues, - int32_t& iCount, - int32_t iStart = 0); - static void GetObjectDefaultValue(FXJSE_HVALUE hObjectValue, - FXJSE_HVALUE hDefaultValue); - static FX_BOOL SetObjectDefaultValue(FXJSE_HVALUE hObjectValue, - FXJSE_HVALUE hNewValue); - static void GenerateSomExpression(const CFX_ByteStringC& szName, - int32_t iIndexFlags, - int32_t iIndexValue, - FX_BOOL bIsStar, - CFX_ByteString& szSomExp); - static FX_BOOL GetObjectByName(FXJSE_HOBJECT hThis, - FXJSE_HVALUE accessorValue, - const CFX_ByteStringC& szAccessorName); - static int32_t ResolveObjects(FXJSE_HOBJECT hThis, - FXJSE_HVALUE hParentValue, - const CFX_ByteStringC& bsSomExp, - XFA_RESOLVENODE_RS& resoveNodeRS, - FX_BOOL bdotAccessor = TRUE, - FX_BOOL bHasNoResolveName = FALSE); - static void ParseResolveResult(FXJSE_HOBJECT hThis, - const XFA_RESOLVENODE_RS& resoveNodeRS, - FXJSE_HVALUE hParentValue, - FXJSE_HVALUE*& resultValues, - int32_t& iSize, - FX_BOOL& bAttribute); - - static FXJSE_HVALUE GetSimpleHValue(FXJSE_HOBJECT hThis, - CFXJSE_Arguments& args, - uint32_t index); - static FX_BOOL HValueIsNull(FXJSE_HOBJECT hThis, FXJSE_HVALUE hValue); - static int32_t HValueToInteger(FXJSE_HOBJECT hThis, FXJSE_HVALUE hValue); - static FX_DOUBLE StringToDouble(const CFX_ByteStringC& szStringVal); - static FX_FLOAT HValueToFloat(FXJSE_HOBJECT hThis, FXJSE_HVALUE hValue); - static FX_DOUBLE HValueToDouble(FXJSE_HOBJECT hThis, FXJSE_HVALUE hValue); - static void HValueToUTF8String(FXJSE_HVALUE hValue, - CFX_ByteString& outputValue); - CXFA_FM2JSContext(); - ~CXFA_FM2JSContext(); - static CXFA_FM2JSContext* Create(); - void Initialize(FXJSE_HRUNTIME hScriptRuntime, - FXJSE_HCONTEXT hScriptContext, - CXFA_Document* pDoc); - void GlobalPropertyGetter(FXJSE_HVALUE hValue); - void Release(); - FXJSE_HRUNTIME GetScriptRuntime() const { return m_hScriptRuntime; } - CXFA_Document* GetDocument() const { return m_pDocument; } - void ThrowScriptErrorMessage(int32_t iStringID, ...); - - private: - FXJSE_HRUNTIME m_hScriptRuntime; - FXJSE_CLASS m_fmClass; - FXJSE_HCLASS m_hFMClass; - FXJSE_HVALUE m_hValue; - CXFA_Document* m_pDocument; -}; - -#endif // XFA_SRC_FXFA_FM2JS_XFA_FM2JSCONTEXT_H_ diff --git a/xfa/src/fxfa/fm2js/xfa_fmparse.cpp b/xfa/src/fxfa/fm2js/xfa_fmparse.cpp deleted file mode 100644 index 7950abbd16..0000000000 --- a/xfa/src/fxfa/fm2js/xfa_fmparse.cpp +++ /dev/null @@ -1,1051 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fxfa/fm2js/xfa_fmparse.h" - -#include - -CXFA_FMParse::CXFA_FMParse() : m_pToken(nullptr), m_pErrorInfo(0) {} - -int32_t CXFA_FMParse::Init(const CFX_WideStringC& wsFormcalc, - CXFA_FMErrorInfo* pErrorInfo) { - m_pErrorInfo = pErrorInfo; - m_lexer.reset(new CXFA_FMLexer(wsFormcalc, m_pErrorInfo)); - return 0; -} - -void CXFA_FMParse::NextToken() { - m_pToken = m_lexer->NextToken(); - while (m_pToken->m_type == TOKreserver) { - if (m_lexer->HasError()) { - break; - } - m_pToken = m_lexer->NextToken(); - } -} - -void CXFA_FMParse::Check(XFA_FM_TOKEN op) { - if (m_pToken->m_type != op) { - CFX_WideString ws_TempString = m_pToken->m_wstring; - Error(m_pToken->m_uLinenum, FMERR_EXPECTED_TOKEN, - XFA_FM_KeywordToString(op), ws_TempString.c_str()); - } - NextToken(); -} - -void CXFA_FMParse::Error(FX_DWORD lineNum, XFA_FM_ERRMSG msg, ...) { - m_pErrorInfo->linenum = lineNum; - const FX_WCHAR* lpMessageInfo = XFA_FM_ErrorMsg(msg); - va_list ap; - va_start(ap, msg); - m_pErrorInfo->message.FormatV(lpMessageInfo, ap); - va_end(ap); -} - -CFX_PtrArray* CXFA_FMParse::ParseTopExpression() { - std::unique_ptr e; - CFX_PtrArray* expression = new CFX_PtrArray(); - while (1) { - if (m_pToken->m_type == TOKeof || m_pToken->m_type == TOKendfunc || - m_pToken->m_type == TOKendif || m_pToken->m_type == TOKelseif || - m_pToken->m_type == TOKelse || m_pToken->m_type == TOKreserver) { - return expression; - } - - if (m_pToken->m_type == TOKfunc) { - e.reset(ParseFunction()); - if (e) { - expression->Add(e.release()); - } else { - break; - } - } else { - e.reset(ParseExpression()); - if (e) { - expression->Add(e.release()); - } else { - break; - } - } - } - return expression; -} - -CXFA_FMExpression* CXFA_FMParse::ParseFunction() { - std::unique_ptr e; - CFX_WideStringC ident; - std::unique_ptr pArguments; - std::unique_ptr pExpressions; - FX_DWORD line = m_pToken->m_uLinenum; - NextToken(); - if (m_pToken->m_type != TOKidentifier) { - CFX_WideString ws_TempString = m_pToken->m_wstring; - Error(m_pToken->m_uLinenum, FMERR_EXPECTED_IDENTIFIER, - ws_TempString.c_str()); - } else { - ident = m_pToken->m_wstring; - NextToken(); - } - Check(TOKlparen); - if (m_pToken->m_type == TOKrparen) { - NextToken(); - } else { - pArguments.reset(new CFX_WideStringCArray()); - CFX_WideStringC p; - while (1) { - if (m_pToken->m_type == TOKidentifier) { - p = m_pToken->m_wstring; - pArguments->Add(p); - NextToken(); - if (m_pToken->m_type == TOKcomma) { - NextToken(); - continue; - } else if (m_pToken->m_type == TOKrparen) { - NextToken(); - break; - } else { - Check(TOKrparen); - break; - } - } else { - CFX_WideString ws_TempString = m_pToken->m_wstring; - Error(m_pToken->m_uLinenum, FMERR_EXPECTED_IDENTIFIER, - ws_TempString.c_str()); - NextToken(); - break; - } - } - } - Check(TOKdo); - if (m_pToken->m_type == TOKendfunc) { - NextToken(); - } else { - pExpressions.reset(ParseTopExpression()); - Check(TOKendfunc); - } - if (m_pErrorInfo->message.IsEmpty()) { - e.reset(new CXFA_FMFunctionDefinition(line, 0, ident, pArguments.release(), - pExpressions.release())); - } else { - if (pArguments) - pArguments->RemoveAll(); - if (pExpressions) { - for (int i = 0; i < pExpressions->GetSize(); ++i) - delete static_cast(pExpressions->GetAt(i)); - } - } - return e.release(); -} - -CXFA_FMExpression* CXFA_FMParse::ParseExpression() { - std::unique_ptr e; - FX_DWORD line = m_pToken->m_uLinenum; - switch (m_pToken->m_type) { - case TOKvar: - e.reset(ParseVarExpression()); - break; - case TOKnull: - case TOKnumber: - case TOKstring: - case TOKplus: - case TOKminus: - case TOKksnot: - case TOKidentifier: - case TOKlparen: - e.reset(ParseExpExpression()); - break; - case TOKif: - e.reset(ParseIfExpression()); - break; - case TOKwhile: - e.reset(ParseWhileExpression()); - break; - case TOKfor: - e.reset(ParseForExpression()); - break; - case TOKforeach: - e.reset(ParseForeachExpression()); - break; - case TOKdo: - e.reset(ParseDoExpression()); - break; - case TOKbreak: - e.reset(new CXFA_FMBreakExpression(line)); - NextToken(); - break; - case TOKcontinue: - e.reset(new CXFA_FMContinueExpression(line)); - NextToken(); - break; - default: - CFX_WideString ws_TempString = m_pToken->m_wstring; - Error(m_pToken->m_uLinenum, FMERR_UNEXPECTED_EXPRESSION, - ws_TempString.c_str()); - NextToken(); - break; - } - return e.release(); -} - -CXFA_FMExpression* CXFA_FMParse::ParseVarExpression() { - std::unique_ptr e; - CFX_WideStringC ident; - FX_DWORD line = m_pToken->m_uLinenum; - NextToken(); - if (m_pToken->m_type != TOKidentifier) { - CFX_WideString ws_TempString = m_pToken->m_wstring; - Error(m_pToken->m_uLinenum, FMERR_EXPECTED_IDENTIFIER, - ws_TempString.c_str()); - } else { - ident = m_pToken->m_wstring; - NextToken(); - } - if (m_pToken->m_type == TOKassign) { - NextToken(); - e.reset(ParseExpExpression()); - } - if (m_pErrorInfo->message.IsEmpty()) { - e.reset(new CXFA_FMVarExpression(line, ident, e.release())); - } else { - e.reset(); - } - return e.release(); -} - -CXFA_FMSimpleExpression* CXFA_FMParse::ParseSimpleExpression() { - FX_DWORD line = m_pToken->m_uLinenum; - std::unique_ptr pExp1(ParseLogicalOrExpression()); - while (m_pToken->m_type == TOKassign) { - NextToken(); - std::unique_ptr pExp2(ParseLogicalOrExpression()); - if (m_pErrorInfo->message.IsEmpty()) { - pExp1.reset(new CXFA_FMAssignExpression(line, TOKassign, pExp1.release(), - pExp2.release())); - } else { - pExp1.reset(); - } - } - return pExp1.release(); -} - -CXFA_FMExpression* CXFA_FMParse::ParseExpExpression() { - FX_DWORD line = m_pToken->m_uLinenum; - std::unique_ptr pExp1(ParseSimpleExpression()); - std::unique_ptr e; - if (m_pErrorInfo->message.IsEmpty()) { - e.reset(new CXFA_FMExpExpression(line, pExp1.release())); - } else { - e.reset(); - } - return e.release(); -} - -CXFA_FMSimpleExpression* CXFA_FMParse::ParseLogicalOrExpression() { - FX_DWORD line = m_pToken->m_uLinenum; - std::unique_ptr e1(ParseLogicalAndExpression()); - for (;;) { - switch (m_pToken->m_type) { - case TOKor: - case TOKksor: { - NextToken(); - std::unique_ptr e2( - ParseLogicalAndExpression()); - if (m_pErrorInfo->message.IsEmpty()) { - e1.reset(new CXFA_FMLogicalOrExpression(line, TOKor, e1.release(), - e2.release())); - } else { - e1.reset(); - } - continue; - } - default: - break; - } - break; - } - return e1.release(); -} - -CXFA_FMSimpleExpression* CXFA_FMParse::ParseLogicalAndExpression() { - FX_DWORD line = m_pToken->m_uLinenum; - std::unique_ptr e1(ParseEqualityExpression()); - for (;;) { - switch (m_pToken->m_type) { - case TOKand: - case TOKksand: { - NextToken(); - std::unique_ptr e2(ParseEqualityExpression()); - if (m_pErrorInfo->message.IsEmpty()) { - e1.reset(new CXFA_FMLogicalAndExpression(line, TOKand, e1.release(), - e2.release())); - } else { - e1.reset(); - } - continue; - } - default: - break; - } - break; - } - return e1.release(); -} - -CXFA_FMSimpleExpression* CXFA_FMParse::ParseEqualityExpression() { - FX_DWORD line = m_pToken->m_uLinenum; - std::unique_ptr e1(ParseRelationalExpression()); - for (;;) { - std::unique_ptr e2; - switch (m_pToken->m_type) { - case TOKeq: - case TOKkseq: - NextToken(); - e2.reset(ParseRelationalExpression()); - if (m_pErrorInfo->message.IsEmpty()) { - e1.reset(new CXFA_FMEqualityExpression(line, TOKeq, e1.release(), - e2.release())); - } else { - e1.reset(); - } - continue; - case TOKne: - case TOKksne: - NextToken(); - e2.reset(ParseRelationalExpression()); - if (m_pErrorInfo->message.IsEmpty()) { - e1.reset(new CXFA_FMEqualityExpression(line, TOKne, e1.release(), - e2.release())); - } else { - e1.reset(); - } - continue; - default: - break; - } - break; - } - return e1.release(); -} - -CXFA_FMSimpleExpression* CXFA_FMParse::ParseRelationalExpression() { - FX_DWORD line = m_pToken->m_uLinenum; - std::unique_ptr e1(ParseAddtiveExpression()); - for (;;) { - std::unique_ptr e2; - switch (m_pToken->m_type) { - case TOKlt: - case TOKkslt: - NextToken(); - e2.reset(ParseAddtiveExpression()); - if (m_pErrorInfo->message.IsEmpty()) { - e1.reset(new CXFA_FMRelationalExpression(line, TOKlt, e1.release(), - e2.release())); - } else { - e1.reset(); - } - continue; - case TOKgt: - case TOKksgt: - NextToken(); - e2.reset(ParseAddtiveExpression()); - if (m_pErrorInfo->message.IsEmpty()) { - e1.reset(new CXFA_FMRelationalExpression(line, TOKgt, e1.release(), - e2.release())); - } else { - e1.reset(); - } - continue; - case TOKle: - case TOKksle: - NextToken(); - e2.reset(ParseAddtiveExpression()); - if (m_pErrorInfo->message.IsEmpty()) { - e1.reset(new CXFA_FMRelationalExpression(line, TOKle, e1.release(), - e2.release())); - } else { - e1.reset(); - } - continue; - case TOKge: - case TOKksge: - NextToken(); - e2.reset(ParseAddtiveExpression()); - if (m_pErrorInfo->message.IsEmpty()) { - e1.reset(new CXFA_FMRelationalExpression(line, TOKge, e1.release(), - e2.release())); - } else { - e1.reset(); - } - continue; - default: - break; - } - break; - } - return e1.release(); -} - -CXFA_FMSimpleExpression* CXFA_FMParse::ParseAddtiveExpression() { - FX_DWORD line = m_pToken->m_uLinenum; - std::unique_ptr e1(ParseMultiplicativeExpression()); - for (;;) { - std::unique_ptr e2; - switch (m_pToken->m_type) { - case TOKplus: - NextToken(); - e2.reset(ParseMultiplicativeExpression()); - if (m_pErrorInfo->message.IsEmpty()) { - e1.reset(new CXFA_FMAdditiveExpression(line, TOKplus, e1.release(), - e2.release())); - } else { - e1.reset(); - } - continue; - case TOKminus: - NextToken(); - e2.reset(ParseMultiplicativeExpression()); - if (m_pErrorInfo->message.IsEmpty()) { - e1.reset(new CXFA_FMAdditiveExpression(line, TOKminus, e1.release(), - e2.release())); - } else { - e1.reset(); - } - continue; - default: - break; - } - break; - } - return e1.release(); -} - -CXFA_FMSimpleExpression* CXFA_FMParse::ParseMultiplicativeExpression() { - FX_DWORD line = m_pToken->m_uLinenum; - std::unique_ptr e1(ParseUnaryExpression()); - for (;;) { - std::unique_ptr e2; - switch (m_pToken->m_type) { - case TOKmul: - NextToken(); - e2.reset(ParseUnaryExpression()); - if (m_pErrorInfo->message.IsEmpty()) { - e1.reset(new CXFA_FMMultiplicativeExpression( - line, TOKmul, e1.release(), e2.release())); - } else { - e1.reset(); - } - continue; - case TOKdiv: - NextToken(); - e2.reset(ParseUnaryExpression()); - if (m_pErrorInfo->message.IsEmpty()) { - e1.reset(new CXFA_FMMultiplicativeExpression( - line, TOKdiv, e1.release(), e2.release())); - } else { - e1.reset(); - } - continue; - default: - break; - } - break; - } - return e1.release(); -} - -CXFA_FMSimpleExpression* CXFA_FMParse::ParseUnaryExpression() { - std::unique_ptr e; - FX_DWORD line = m_pToken->m_uLinenum; - switch (m_pToken->m_type) { - case TOKplus: - NextToken(); - e.reset(ParseUnaryExpression()); - if (m_pErrorInfo->message.IsEmpty()) { - e.reset(new CXFA_FMPosExpression(line, e.release())); - } else { - e.reset(); - } - break; - case TOKminus: - NextToken(); - e.reset(ParseUnaryExpression()); - if (m_pErrorInfo->message.IsEmpty()) { - e.reset(new CXFA_FMNegExpression(line, e.release())); - } else { - e.reset(); - } - break; - case TOKksnot: - NextToken(); - e.reset(ParseUnaryExpression()); - if (m_pErrorInfo->message.IsEmpty()) { - e.reset(new CXFA_FMNotExpression(line, e.release())); - } else { - e.reset(); - } - break; - default: - e.reset(ParsePrimaryExpression()); - break; - } - return e.release(); -} - -CXFA_FMSimpleExpression* CXFA_FMParse::ParsePrimaryExpression() { - std::unique_ptr e; - FX_DWORD line = m_pToken->m_uLinenum; - switch (m_pToken->m_type) { - case TOKnumber: - e.reset(new CXFA_FMNumberExpression(line, m_pToken->m_wstring)); - NextToken(); - break; - case TOKstring: - e.reset(new CXFA_FMStringExpression(line, m_pToken->m_wstring)); - NextToken(); - break; - case TOKidentifier: { - CFX_WideStringC wsIdentifier(m_pToken->m_wstring); - NextToken(); - if (m_pToken->m_type == TOKlbracket) { - CXFA_FMSimpleExpression* s = ParseIndexExpression(); - if (s) { - e.reset(new CXFA_FMDotAccessorExpression(line, NULL, TOKdot, - wsIdentifier, s)); - } - NextToken(); - } else { - e.reset(new CXFA_FMIdentifierExpressionn(line, wsIdentifier)); - } - } break; - case TOKif: - e.reset(new CXFA_FMIdentifierExpressionn(line, m_pToken->m_wstring)); - NextToken(); - break; - case TOKnull: - e.reset(new CXFA_FMNullExpression(line)); - NextToken(); - break; - case TOKlparen: - e.reset(ParseParenExpression()); - break; - default: - CFX_WideString ws_TempString = m_pToken->m_wstring; - Error(m_pToken->m_uLinenum, FMERR_UNEXPECTED_EXPRESSION, - ws_TempString.c_str()); - NextToken(); - break; - } - e.reset(ParsePostExpression(e.release())); - if (!(m_pErrorInfo->message.IsEmpty())) - e.reset(); - return e.release(); -} - -CXFA_FMSimpleExpression* CXFA_FMParse::ParsePostExpression( - CXFA_FMSimpleExpression* e) { - FX_DWORD line = m_pToken->m_uLinenum; - while (1) { - switch (m_pToken->m_type) { - case TOKlparen: { - NextToken(); - std::unique_ptr pArray; - if (m_pToken->m_type != TOKrparen) { - pArray.reset(new CFX_PtrArray()); - while (m_pToken->m_type != TOKrparen) { - CXFA_FMSimpleExpression* e = ParseSimpleExpression(); - if (e) { - pArray->Add(e); - } - if (m_pToken->m_type == TOKcomma) { - NextToken(); - } else if (m_pToken->m_type == TOKeof || - m_pToken->m_type == TOKreserver) { - break; - } - } - if (m_pToken->m_type != TOKrparen) { - CFX_WideString ws_TempString = m_pToken->m_wstring; - Error(m_pToken->m_uLinenum, FMERR_EXPECTED_TOKEN, - XFA_FM_KeywordToString(TOKrparen), ws_TempString.c_str()); - } - } - if (m_pErrorInfo->message.IsEmpty()) { - e = new CXFA_FMCallExpression(line, e, pArray.release(), FALSE); - NextToken(); - if (m_pToken->m_type != TOKlbracket) { - continue; - } - CXFA_FMSimpleExpression* s = ParseIndexExpression(); - if (s) { - e = new CXFA_FMDotAccessorExpression(line, e, TOKcall, - FX_WSTRC(L""), s); - } else { - delete e; - e = nullptr; - } - } else { - if (pArray) { - for (int32_t i = 0; i < pArray->GetSize(); ++i) - delete static_cast(pArray->GetAt(i)); - } - delete e; - e = nullptr; - } - } break; - case TOKdot: - NextToken(); - if (m_pToken->m_type == TOKidentifier) { - CFX_WideStringC tempStr = m_pToken->m_wstring; - FX_DWORD tempLine = m_pToken->m_uLinenum; - NextToken(); - if (m_pToken->m_type == TOKlparen) { - CXFA_FMSimpleExpression* pExpAccessor; - CXFA_FMSimpleExpression* pExpCall; - pExpAccessor = e; - NextToken(); - std::unique_ptr pArray; - if (m_pToken->m_type != TOKrparen) { - pArray.reset(new CFX_PtrArray()); - while (m_pToken->m_type != TOKrparen) { - CXFA_FMSimpleExpression* exp = ParseSimpleExpression(); - pArray->Add(exp); - if (m_pToken->m_type == TOKcomma) { - NextToken(); - } else if (m_pToken->m_type == TOKeof || - m_pToken->m_type == TOKreserver) { - break; - } - } - if (m_pToken->m_type != TOKrparen) { - CFX_WideString ws_TempString = m_pToken->m_wstring; - Error(m_pToken->m_uLinenum, FMERR_EXPECTED_TOKEN, - XFA_FM_KeywordToString(TOKrparen), ws_TempString.c_str()); - } - } - if (m_pErrorInfo->message.IsEmpty()) { - CXFA_FMSimpleExpression* pIdentifier = - new CXFA_FMIdentifierExpressionn(tempLine, tempStr); - pExpCall = new CXFA_FMCallExpression(line, pIdentifier, - pArray.release(), TRUE); - e = new CXFA_FMMethodCallExpression(line, pExpAccessor, pExpCall); - NextToken(); - if (m_pToken->m_type != TOKlbracket) { - continue; - } - CXFA_FMSimpleExpression* s = ParseIndexExpression(); - if (s) { - e = new CXFA_FMDotAccessorExpression(line, e, TOKcall, - FX_WSTRC(L""), s); - } else { - delete e; - e = nullptr; - } - } else { - if (pArray) { - for (int32_t i = 0; i < pArray->GetSize(); ++i) { - delete static_cast( - pArray->GetAt(i)); - } - } - delete e; - e = nullptr; - } - } else if (m_pToken->m_type == TOKlbracket) { - std::unique_ptr s(ParseIndexExpression()); - if (!(m_pErrorInfo->message.IsEmpty())) { - delete e; - return nullptr; - } - e = new CXFA_FMDotAccessorExpression(tempLine, e, TOKdot, tempStr, - s.release()); - } else { - CXFA_FMSimpleExpression* s = new CXFA_FMIndexExpression( - tempLine, ACCESSOR_NO_INDEX, NULL, FALSE); - e = new CXFA_FMDotAccessorExpression(line, e, TOKdot, tempStr, s); - continue; - } - } else { - CFX_WideString ws_TempString = m_pToken->m_wstring; - Error(m_pToken->m_uLinenum, FMERR_EXPECTED_IDENTIFIER, - ws_TempString.c_str()); - return e; - } - break; - case TOKdotdot: - NextToken(); - if (m_pToken->m_type == TOKidentifier) { - CFX_WideStringC tempStr = m_pToken->m_wstring; - FX_DWORD tempLine = m_pToken->m_uLinenum; - NextToken(); - if (m_pToken->m_type == TOKlbracket) { - std::unique_ptr s(ParseIndexExpression()); - if (!(m_pErrorInfo->message.IsEmpty())) { - delete e; - return nullptr; - } - e = new CXFA_FMDotDotAccessorExpression(tempLine, e, TOKdotdot, - tempStr, s.release()); - } else { - CXFA_FMSimpleExpression* s = new CXFA_FMIndexExpression( - tempLine, ACCESSOR_NO_INDEX, NULL, FALSE); - e = new CXFA_FMDotDotAccessorExpression(line, e, TOKdotdot, tempStr, - s); - continue; - } - } else { - CFX_WideString ws_TempString = m_pToken->m_wstring; - Error(m_pToken->m_uLinenum, FMERR_EXPECTED_IDENTIFIER, - ws_TempString.c_str()); - return e; - } - break; - case TOKdotscream: - NextToken(); - if (m_pToken->m_type == TOKidentifier) { - CFX_WideStringC tempStr = m_pToken->m_wstring; - FX_DWORD tempLine = m_pToken->m_uLinenum; - NextToken(); - if (m_pToken->m_type == TOKlbracket) { - std::unique_ptr s(ParseIndexExpression()); - if (!(m_pErrorInfo->message.IsEmpty())) { - delete e; - return nullptr; - } - e = new CXFA_FMDotAccessorExpression(tempLine, e, TOKdotscream, - tempStr, s.release()); - } else { - CXFA_FMSimpleExpression* s = new CXFA_FMIndexExpression( - tempLine, ACCESSOR_NO_INDEX, NULL, FALSE); - e = new CXFA_FMDotAccessorExpression(line, e, TOKdotscream, tempStr, - s); - continue; - } - } else { - CFX_WideString ws_TempString = m_pToken->m_wstring; - Error(m_pToken->m_uLinenum, FMERR_EXPECTED_IDENTIFIER, - ws_TempString.c_str()); - return e; - } - break; - case TOKdotstar: { - CXFA_FMSimpleExpression* s = - new CXFA_FMIndexExpression(line, ACCESSOR_NO_INDEX, NULL, FALSE); - e = new CXFA_FMDotAccessorExpression(line, e, TOKdotstar, - FX_WSTRC(L"*"), s); - } break; - default: - return e; - } - NextToken(); - } - return e; -} - -CXFA_FMSimpleExpression* CXFA_FMParse::ParseIndexExpression() { - std::unique_ptr pExp; - FX_DWORD line = m_pToken->m_uLinenum; - NextToken(); - std::unique_ptr s; - XFA_FM_AccessorIndex accessorIndex = ACCESSOR_NO_RELATIVEINDEX; - if (m_pToken->m_type == TOKmul) { - pExp.reset( - new CXFA_FMIndexExpression(line, accessorIndex, s.release(), TRUE)); - NextToken(); - if (m_pToken->m_type != TOKrbracket) { - CFX_WideString ws_TempString = m_pToken->m_wstring; - Error(m_pToken->m_uLinenum, FMERR_EXPECTED_TOKEN, - XFA_FM_KeywordToString(TOKrparen), ws_TempString.c_str()); - pExp.reset(); - } - return pExp.release(); - } - if (m_pToken->m_type == TOKplus) { - accessorIndex = ACCESSOR_POSITIVE_INDEX; - NextToken(); - } else if (m_pToken->m_type == TOKminus) { - accessorIndex = ACCESSOR_NEGATIVE_INDEX; - NextToken(); - } - s.reset(ParseSimpleExpression()); - if (m_pToken->m_type != TOKrbracket) { - CFX_WideString ws_TempString = m_pToken->m_wstring; - Error(m_pToken->m_uLinenum, FMERR_EXPECTED_TOKEN, - XFA_FM_KeywordToString(TOKrparen), ws_TempString.c_str()); - } else { - pExp.reset( - new CXFA_FMIndexExpression(line, accessorIndex, s.release(), FALSE)); - } - return pExp.release(); -} - -CXFA_FMSimpleExpression* CXFA_FMParse::ParseParenExpression() { - Check(TOKlparen); - - if (m_pToken->m_type == TOKrparen) { - Error(m_pToken->m_uLinenum, FMERR_EXPECTED_NON_EMPTY_EXPRESSION); - NextToken(); - return nullptr; - } - - FX_DWORD line = m_pToken->m_uLinenum; - std::unique_ptr pExp1(ParseLogicalOrExpression()); - - while (m_pToken->m_type == TOKassign) { - NextToken(); - std::unique_ptr pExp2(ParseLogicalOrExpression()); - if (m_pErrorInfo->message.IsEmpty()) { - pExp1.reset(new CXFA_FMAssignExpression(line, TOKassign, pExp1.release(), - pExp2.release())); - } else { - pExp1.reset(); - } - } - Check(TOKrparen); - return pExp1.release(); -} - -CXFA_FMExpression* CXFA_FMParse::ParseBlockExpression() { - FX_DWORD line = m_pToken->m_uLinenum; - CXFA_FMExpression* e = nullptr; - std::unique_ptr expression(new CFX_PtrArray()); - while (1) { - switch (m_pToken->m_type) { - case TOKeof: - case TOKendif: - case TOKelseif: - case TOKelse: - case TOKendwhile: - case TOKendfor: - case TOKend: - case TOKendfunc: - case TOKreserver: - break; - case TOKfunc: - e = ParseFunction(); - if (e) { - expression->Add(e); - } - continue; - default: - e = ParseExpression(); - if (e) { - expression->Add(e); - } - continue; - } - break; - } - std::unique_ptr pExp; - if (m_pErrorInfo->message.IsEmpty()) { - pExp.reset(new CXFA_FMBlockExpression(line, expression.release())); - } else { - for (int i = 0; i < expression->GetSize(); ++i) - delete static_cast(expression->GetAt(i)); - } - return pExp.release(); -} - -CXFA_FMExpression* CXFA_FMParse::ParseIfExpression() { - FX_DWORD line = m_pToken->m_uLinenum; - const FX_WCHAR* pStartPos = m_lexer->SavePos(); - NextToken(); - Check(TOKlparen); - std::unique_ptr pExpression; - while (m_pToken->m_type != TOKrparen) { - pExpression.reset(ParseSimpleExpression()); - if (m_pToken->m_type != TOKcomma) - break; - NextToken(); - } - Check(TOKrparen); - if (m_pToken->m_type != TOKthen) { - m_lexer->SetCurrentLine(line); - m_pToken = new CXFA_FMToken(line); - m_pToken->m_type = TOKidentifier; - m_pToken->m_wstring = FX_WSTRC(L"if"); - m_lexer->SetToken(m_pToken); - m_lexer->RestorePos(pStartPos); - return ParseExpExpression(); - } - Check(TOKthen); - std::unique_ptr pIfExpression(ParseBlockExpression()); - std::unique_ptr pElseExpression; - switch (m_pToken->m_type) { - case TOKeof: - case TOKendif: - Check(TOKendif); - break; - case TOKif: - pElseExpression.reset(ParseIfExpression()); - Check(TOKendif); - break; - case TOKelseif: - pElseExpression.reset(ParseIfExpression()); - break; - case TOKelse: - NextToken(); - pElseExpression.reset(ParseBlockExpression()); - Check(TOKendif); - break; - default: - CFX_WideString ws_TempString = m_pToken->m_wstring; - Error(m_pToken->m_uLinenum, FMERR_EXPECTED_IFEND, ws_TempString.c_str()); - NextToken(); - break; - } - std::unique_ptr pExp; - if (m_pErrorInfo->message.IsEmpty()) { - pExp.reset(new CXFA_FMIfExpression(line, pExpression.release(), - pIfExpression.release(), - pElseExpression.release())); - } - return pExp.release(); -} - -CXFA_FMExpression* CXFA_FMParse::ParseWhileExpression() { - FX_DWORD line = m_pToken->m_uLinenum; - NextToken(); - std::unique_ptr pCondition(ParseParenExpression()); - Check(TOKdo); - std::unique_ptr pExpression(ParseBlockExpression()); - Check(TOKendwhile); - std::unique_ptr e; - if (m_pErrorInfo->message.IsEmpty()) { - e.reset(new CXFA_FMWhileExpression(line, pCondition.release(), - pExpression.release())); - } - return e.release(); -} - -CXFA_FMSimpleExpression* CXFA_FMParse::ParseSubassignmentInForExpression() { - std::unique_ptr e; - switch (m_pToken->m_type) { - case TOKidentifier: - e.reset(ParseSimpleExpression()); - break; - default: - CFX_WideString ws_TempString = m_pToken->m_wstring; - Error(m_pToken->m_uLinenum, FMERR_UNEXPECTED_EXPRESSION, - ws_TempString.c_str()); - NextToken(); - break; - } - return e.release(); -} - -CXFA_FMExpression* CXFA_FMParse::ParseForExpression() { - CFX_WideStringC wsVariant; - FX_DWORD line = m_pToken->m_uLinenum; - NextToken(); - if (m_pToken->m_type != TOKidentifier) { - CFX_WideString ws_TempString = m_pToken->m_wstring; - Error(m_pToken->m_uLinenum, FMERR_EXPECTED_TOKEN, - XFA_FM_KeywordToString(m_pToken->m_type), ws_TempString.c_str()); - } - wsVariant = m_pToken->m_wstring; - NextToken(); - std::unique_ptr pAssignment; - if (m_pToken->m_type == TOKassign) { - NextToken(); - pAssignment.reset(ParseSimpleExpression()); - } else { - CFX_WideString ws_TempString = m_pToken->m_wstring; - Error(m_pToken->m_uLinenum, FMERR_EXPECTED_TOKEN, - XFA_FM_KeywordToString(m_pToken->m_type), ws_TempString.c_str()); - } - int32_t iDirection = 0; - if (m_pToken->m_type == TOKupto) { - iDirection = 1; - } else if (m_pToken->m_type == TOKdownto) { - iDirection = -1; - } else { - CFX_WideString ws_TempString = m_pToken->m_wstring; - Error(m_pToken->m_uLinenum, FMERR_EXPECTED_TOKEN, L"upto or downto", - (const FX_WCHAR*)ws_TempString); - } - NextToken(); - std::unique_ptr pAccessor(ParseSimpleExpression()); - std::unique_ptr pStep; - if (m_pToken->m_type == TOKstep) { - NextToken(); - pStep.reset(ParseSimpleExpression()); - } - Check(TOKdo); - std::unique_ptr pList(ParseBlockExpression()); - Check(TOKendfor); - std::unique_ptr e; - if (m_pErrorInfo->message.IsEmpty()) { - e.reset(new CXFA_FMForExpression(line, wsVariant, pAssignment.release(), - pAccessor.release(), iDirection, - pStep.release(), pList.release())); - } - return e.release(); -} - -CXFA_FMExpression* CXFA_FMParse::ParseForeachExpression() { - std::unique_ptr e; - CFX_WideStringC wsIdentifier; - std::unique_ptr pAccessors; - std::unique_ptr pList; - FX_DWORD line = m_pToken->m_uLinenum; - NextToken(); - if (m_pToken->m_type != TOKidentifier) { - CFX_WideString ws_TempString = m_pToken->m_wstring; - Error(m_pToken->m_uLinenum, FMERR_EXPECTED_TOKEN, - XFA_FM_KeywordToString(m_pToken->m_type), ws_TempString.c_str()); - } - wsIdentifier = m_pToken->m_wstring; - NextToken(); - Check(TOKin); - Check(TOKlparen); - if (m_pToken->m_type == TOKrparen) { - CFX_WideString ws_TempString = m_pToken->m_wstring; - Error(m_pToken->m_uLinenum, FMERR_UNEXPECTED_EXPRESSION, - ws_TempString.c_str()); - NextToken(); - } else { - pAccessors.reset(new CFX_PtrArray()); - while (m_pToken->m_type != TOKrparen) { - CXFA_FMSimpleExpression* s = ParseSimpleExpression(); - if (s) { - pAccessors->Add(s); - } - if (m_pToken->m_type == TOKcomma) { - NextToken(); - } else { - break; - } - } - Check(TOKrparen); - } - Check(TOKdo); - pList.reset(ParseBlockExpression()); - Check(TOKendfor); - if (m_pErrorInfo->message.IsEmpty()) { - e.reset(new CXFA_FMForeachExpression( - line, wsIdentifier, pAccessors.release(), pList.release())); - } else { - if (pAccessors) { - for (int i = 0; i < pAccessors->GetSize(); ++i) - delete static_cast(pAccessors->GetAt(i)); - } - } - return e.release(); -} - -CXFA_FMExpression* CXFA_FMParse::ParseDoExpression() { - std::unique_ptr e; - FX_DWORD line = m_pToken->m_uLinenum; - NextToken(); - e.reset(ParseBlockExpression()); - Check(TOKend); - if (m_pErrorInfo->message.IsEmpty()) { - e.reset(new CXFA_FMDoExpression(line, e.release())); - } else { - e.reset(); - } - return e.release(); -} diff --git a/xfa/src/fxfa/fm2js/xfa_fmparse.h b/xfa/src/fxfa/fm2js/xfa_fmparse.h deleted file mode 100644 index 7494cd0b83..0000000000 --- a/xfa/src/fxfa/fm2js/xfa_fmparse.h +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXFA_FM2JS_XFA_FMPARSE_H_ -#define XFA_SRC_FXFA_FM2JS_XFA_FMPARSE_H_ - -#include - -#include "xfa/src/fxfa/fm2js/xfa_expression.h" -#include "xfa/src/fxfa/fm2js/xfa_lexer.h" - -class CXFA_FMParse { - public: - CXFA_FMParse(); - int32_t Init(const CFX_WideStringC& wsFormcalc, CXFA_FMErrorInfo* pErrorInfo); - void NextToken(); - void Check(XFA_FM_TOKEN op); - void Error(FX_DWORD lineNum, XFA_FM_ERRMSG msg, ...); - CFX_PtrArray* ParseTopExpression(); - CXFA_FMExpression* ParseFunction(); - CXFA_FMExpression* ParseExpression(); - CXFA_FMExpression* ParseVarExpression(); - CXFA_FMExpression* ParseExpExpression(); - CXFA_FMExpression* ParseBlockExpression(); - CXFA_FMExpression* ParseIfExpression(); - CXFA_FMExpression* ParseWhileExpression(); - CXFA_FMExpression* ParseForExpression(); - CXFA_FMExpression* ParseForeachExpression(); - CXFA_FMExpression* ParseDoExpression(); - CXFA_FMSimpleExpression* ParseParenExpression(); - CXFA_FMSimpleExpression* ParseSimpleExpression(); - CXFA_FMSimpleExpression* ParseSubassignmentInForExpression(); - CXFA_FMSimpleExpression* ParseLogicalOrExpression(); - CXFA_FMSimpleExpression* ParseLogicalAndExpression(); - CXFA_FMSimpleExpression* ParseEqualityExpression(); - CXFA_FMSimpleExpression* ParseRelationalExpression(); - CXFA_FMSimpleExpression* ParseAddtiveExpression(); - CXFA_FMSimpleExpression* ParseMultiplicativeExpression(); - CXFA_FMSimpleExpression* ParseUnaryExpression(); - CXFA_FMSimpleExpression* ParsePrimaryExpression(); - CXFA_FMSimpleExpression* ParsePostExpression(CXFA_FMSimpleExpression* e); - CXFA_FMSimpleExpression* ParseIndexExpression(); - - private: - std::unique_ptr m_lexer; - CXFA_FMToken* m_pToken; - CXFA_FMErrorInfo* m_pErrorInfo; -}; - -#endif // XFA_SRC_FXFA_FM2JS_XFA_FMPARSE_H_ diff --git a/xfa/src/fxfa/fm2js/xfa_lexer.cpp b/xfa/src/fxfa/fm2js/xfa_lexer.cpp deleted file mode 100644 index f93fa839d3..0000000000 --- a/xfa/src/fxfa/fm2js/xfa_lexer.cpp +++ /dev/null @@ -1,552 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fxfa/fm2js/xfa_lexer.h" - -#include "core/include/fxcrt/fx_ext.h" - -namespace { - -struct XFA_FMDChar { - static const FX_WCHAR* inc(const FX_WCHAR*& p) { - ++p; - return p; - } - static const FX_WCHAR* dec(const FX_WCHAR*& p) { - --p; - return p; - } - static uint16_t get(const FX_WCHAR* p) { return *p; } - static FX_BOOL isWhiteSpace(const FX_WCHAR* p) { - return (*p) == 0x09 || (*p) == 0x0b || (*p) == 0x0c || (*p) == 0x20; - } - static FX_BOOL isLineTerminator(const FX_WCHAR* p) { - return *p == 0x0A || *p == 0x0D; - } - static FX_BOOL isBinary(const FX_WCHAR* p) { - return (*p) >= '0' && (*p) <= '1'; - } - static FX_BOOL isOctal(const FX_WCHAR* p) { - return (*p) >= '0' && (*p) <= '7'; - } - static FX_BOOL isDigital(const FX_WCHAR* p) { - return (*p) >= '0' && (*p) <= '9'; - } - static FX_BOOL isHex(const FX_WCHAR* p) { - return isDigital(p) || ((*p) >= 'a' && (*p) <= 'f') || - ((*p) >= 'A' && (*p) <= 'F'); - } - static FX_BOOL isAlpha(const FX_WCHAR* p) { - return ((*p) <= 'z' && (*p) >= 'a') || ((*p) <= 'Z' && (*p) >= 'A'); - } - static FX_BOOL isAvalid(const FX_WCHAR* p, FX_BOOL flag = 0); - static FX_BOOL string2number(const FX_WCHAR* s, - FX_DOUBLE* pValue, - const FX_WCHAR*& pEnd); - static FX_BOOL isUnicodeAlpha(uint16_t ch); -}; - -inline FX_BOOL XFA_FMDChar::isAvalid(const FX_WCHAR* p, FX_BOOL flag) { - if (*p == 0) { - return 1; - } - if ((*p <= 0x0A && *p >= 0x09) || *p == 0x0D || - (*p <= 0xd7ff && *p >= 0x20) || (*p <= 0xfffd && *p >= 0xe000)) { - return 1; - } - if (!flag) { - if (*p == 0x0B || *p == 0x0C) { - return 1; - } - } - return 0; -} - -inline FX_BOOL XFA_FMDChar::string2number(const FX_WCHAR* s, - FX_DOUBLE* pValue, - const FX_WCHAR*& pEnd) { - if (s) { - *pValue = wcstod((wchar_t*)s, (wchar_t**)&pEnd); - } - return 0; -} - -inline FX_BOOL XFA_FMDChar::isUnicodeAlpha(uint16_t ch) { - if (ch == 0 || ch == 0x0A || ch == 0x0D || ch == 0x09 || ch == 0x0B || - ch == 0x0C || ch == 0x20 || ch == '.' || ch == ';' || ch == '"' || - ch == '=' || ch == '<' || ch == '>' || ch == ',' || ch == '(' || - ch == ')' || ch == ']' || ch == '[' || ch == '&' || ch == '|' || - ch == '+' || ch == '-' || ch == '*' || ch == '/') { - return FALSE; - } - return TRUE; -} - -const XFA_FMKeyword keyWords[] = { - {TOKand, 0x00000026, L"&"}, - {TOKlparen, 0x00000028, L"("}, - {TOKrparen, 0x00000029, L")"}, - {TOKmul, 0x0000002a, L"*"}, - {TOKplus, 0x0000002b, L"+"}, - {TOKcomma, 0x0000002c, L","}, - {TOKminus, 0x0000002d, L"-"}, - {TOKdot, 0x0000002e, L"."}, - {TOKdiv, 0x0000002f, L"/"}, - {TOKlt, 0x0000003c, L"<"}, - {TOKassign, 0x0000003d, L"="}, - {TOKgt, 0x0000003e, L">"}, - {TOKlbracket, 0x0000005b, L"["}, - {TOKrbracket, 0x0000005d, L"]"}, - {TOKor, 0x0000007c, L"|"}, - {TOKdotscream, 0x0000ec11, L".#"}, - {TOKdotstar, 0x0000ec18, L".*"}, - {TOKdotdot, 0x0000ec1c, L".."}, - {TOKle, 0x000133f9, L"<="}, - {TOKne, 0x000133fa, L"<>"}, - {TOKeq, 0x0001391a, L"=="}, - {TOKge, 0x00013e3b, L">="}, - {TOKdo, 0x00020153, L"do"}, - {TOKkseq, 0x00020676, L"eq"}, - {TOKksge, 0x000210ac, L"ge"}, - {TOKksgt, 0x000210bb, L"gt"}, - {TOKif, 0x00021aef, L"if"}, - {TOKin, 0x00021af7, L"in"}, - {TOKksle, 0x00022a51, L"le"}, - {TOKkslt, 0x00022a60, L"lt"}, - {TOKksne, 0x00023493, L"ne"}, - {TOKksor, 0x000239c1, L"or"}, - {TOKnull, 0x052931bb, L"null"}, - {TOKbreak, 0x05518c25, L"break"}, - {TOKksand, 0x09f9db33, L"and"}, - {TOKend, 0x0a631437, L"end"}, - {TOKeof, 0x0a63195a, L"eof"}, - {TOKfor, 0x0a7d67a7, L"for"}, - {TOKnan, 0x0b4f91dd, L"nan"}, - {TOKksnot, 0x0b4fd9b1, L"not"}, - {TOKvar, 0x0c2203e9, L"var"}, - {TOKthen, 0x2d5738cf, L"then"}, - {TOKelse, 0x45f65ee9, L"else"}, - {TOKexit, 0x4731d6ba, L"exit"}, - {TOKdownto, 0x4caadc3b, L"downto"}, - {TOKreturn, 0x4db8bd60, L"return"}, - {TOKinfinity, 0x5c0a010a, L"infinity"}, - {TOKendwhile, 0x5c64bff0, L"endwhile"}, - {TOKforeach, 0x67e31f38, L"foreach"}, - {TOKendfunc, 0x68f984a3, L"endfunc"}, - {TOKelseif, 0x78253218, L"elseif"}, - {TOKwhile, 0x84229259, L"while"}, - {TOKendfor, 0x8ab49d7e, L"endfor"}, - {TOKthrow, 0x8db05c94, L"throw"}, - {TOKstep, 0xa7a7887c, L"step"}, - {TOKupto, 0xb5155328, L"upto"}, - {TOKcontinue, 0xc0340685, L"continue"}, - {TOKfunc, 0xcdce60ec, L"func"}, - {TOKendif, 0xe0e8fee6, L"endif"}, -}; - -const XFA_FM_TOKEN KEYWORD_START = TOKdo; -const XFA_FM_TOKEN KEYWORD_END = TOKendif; - -} // namespace - -const FX_WCHAR* XFA_FM_KeywordToString(XFA_FM_TOKEN op) { - if (op < KEYWORD_START || op > KEYWORD_END) - return L""; - return keyWords[op].m_keyword; -} - -CXFA_FMToken::CXFA_FMToken() : m_type(TOKreserver), m_uLinenum(1) {} - -CXFA_FMToken::CXFA_FMToken(FX_DWORD uLineNum) - : m_type(TOKreserver), m_uLinenum(uLineNum) {} - -CXFA_FMLexer::CXFA_FMLexer(const CFX_WideStringC& wsFormCalc, - CXFA_FMErrorInfo* pErrorInfo) - : m_ptr(wsFormCalc.GetPtr()), m_uCurrentLine(1), m_pErrorInfo(pErrorInfo) {} - -CXFA_FMToken* CXFA_FMLexer::NextToken() { - m_pToken.reset(Scan()); - return m_pToken.get(); -} - -CXFA_FMToken* CXFA_FMLexer::Scan() { - uint16_t ch = 0; - CXFA_FMToken* p = new CXFA_FMToken(m_uCurrentLine); - if (!XFA_FMDChar::isAvalid(m_ptr)) { - ch = XFA_FMDChar::get(m_ptr); - Error(FMERR_UNSUPPORTED_CHAR, ch); - return p; - } - int iRet = 0; - while (1) { - if (!XFA_FMDChar::isAvalid(m_ptr)) { - ch = XFA_FMDChar::get(m_ptr); - Error(FMERR_UNSUPPORTED_CHAR, ch); - return p; - } - ch = XFA_FMDChar::get(m_ptr); - switch (ch) { - case 0: - p->m_type = TOKeof; - return p; - case 0x0A: - ++m_uCurrentLine; - p->m_uLinenum = m_uCurrentLine; - XFA_FMDChar::inc(m_ptr); - break; - case 0x0D: - XFA_FMDChar::inc(m_ptr); - break; - case ';': { - const FX_WCHAR* pTemp = 0; - Comment(m_ptr, pTemp); - m_ptr = pTemp; - } break; - case '"': { - const FX_WCHAR* pTemp = 0; - p->m_type = TOKstring; - iRet = String(p, m_ptr, pTemp); - m_ptr = pTemp; - } - return p; - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': { - p->m_type = TOKnumber; - const FX_WCHAR* pTemp = 0; - iRet = Number(p, m_ptr, pTemp); - m_ptr = pTemp; - if (iRet) { - Error(FMERR_BAD_SUFFIX_NUMBER); - return p; - } - } - return p; - case '=': - XFA_FMDChar::inc(m_ptr); - if (XFA_FMDChar::isAvalid(m_ptr)) { - ch = XFA_FMDChar::get(m_ptr); - if (ch == '=') { - p->m_type = TOKeq; - XFA_FMDChar::inc(m_ptr); - return p; - } else { - p->m_type = TOKassign; - return p; - } - } else { - ch = XFA_FMDChar::get(m_ptr); - Error(FMERR_UNSUPPORTED_CHAR, ch); - return p; - } - break; - case '<': - XFA_FMDChar::inc(m_ptr); - if (XFA_FMDChar::isAvalid(m_ptr)) { - ch = XFA_FMDChar::get(m_ptr); - if (ch == '=') { - p->m_type = TOKle; - XFA_FMDChar::inc(m_ptr); - return p; - } else if (ch == '>') { - p->m_type = TOKne; - XFA_FMDChar::inc(m_ptr); - return p; - } else { - p->m_type = TOKlt; - return p; - } - } else { - ch = XFA_FMDChar::get(m_ptr); - Error(FMERR_UNSUPPORTED_CHAR, ch); - return p; - } - break; - case '>': - XFA_FMDChar::inc(m_ptr); - if (XFA_FMDChar::isAvalid(m_ptr)) { - ch = XFA_FMDChar::get(m_ptr); - if (ch == '=') { - p->m_type = TOKge; - XFA_FMDChar::inc(m_ptr); - return p; - } else { - p->m_type = TOKgt; - return p; - } - } else { - ch = XFA_FMDChar::get(m_ptr); - Error(FMERR_UNSUPPORTED_CHAR, ch); - return p; - } - break; - case ',': - p->m_type = TOKcomma; - XFA_FMDChar::inc(m_ptr); - return p; - case '(': - p->m_type = TOKlparen; - XFA_FMDChar::inc(m_ptr); - return p; - case ')': - p->m_type = TOKrparen; - XFA_FMDChar::inc(m_ptr); - return p; - case '[': - p->m_type = TOKlbracket; - XFA_FMDChar::inc(m_ptr); - return p; - case ']': - p->m_type = TOKrbracket; - XFA_FMDChar::inc(m_ptr); - return p; - case '&': - XFA_FMDChar::inc(m_ptr); - p->m_type = TOKand; - return p; - case '|': - XFA_FMDChar::inc(m_ptr); - p->m_type = TOKor; - return p; - case '+': - XFA_FMDChar::inc(m_ptr); - p->m_type = TOKplus; - return p; - case '-': - XFA_FMDChar::inc(m_ptr); - p->m_type = TOKminus; - return p; - case '*': - XFA_FMDChar::inc(m_ptr); - p->m_type = TOKmul; - return p; - case '/': - XFA_FMDChar::inc(m_ptr); - if (XFA_FMDChar::isAvalid(m_ptr)) { - ch = XFA_FMDChar::get(m_ptr); - if (ch == '/') { - const FX_WCHAR* pTemp = 0; - Comment(m_ptr, pTemp); - m_ptr = pTemp; - break; - } else { - p->m_type = TOKdiv; - return p; - } - } else { - ch = XFA_FMDChar::get(m_ptr); - Error(FMERR_UNSUPPORTED_CHAR, ch); - return p; - } - break; - case '.': - XFA_FMDChar::inc(m_ptr); - if (XFA_FMDChar::isAvalid(m_ptr)) { - ch = XFA_FMDChar::get(m_ptr); - if (ch == '.') { - p->m_type = TOKdotdot; - XFA_FMDChar::inc(m_ptr); - return p; - } else if (ch == '*') { - p->m_type = TOKdotstar; - XFA_FMDChar::inc(m_ptr); - return p; - } else if (ch == '#') { - p->m_type = TOKdotscream; - XFA_FMDChar::inc(m_ptr); - return p; - } else if (ch <= '9' && ch >= '0') { - p->m_type = TOKnumber; - const FX_WCHAR* pTemp = 0; - XFA_FMDChar::dec(m_ptr); - iRet = Number(p, m_ptr, pTemp); - m_ptr = pTemp; - if (iRet) { - Error(FMERR_BAD_SUFFIX_NUMBER); - } - return p; - } else { - p->m_type = TOKdot; - return p; - } - } else { - ch = XFA_FMDChar::get(m_ptr); - Error(FMERR_UNSUPPORTED_CHAR, ch); - return p; - } - case 0x09: - case 0x0B: - case 0x0C: - case 0x20: - XFA_FMDChar::inc(m_ptr); - break; - default: { - const FX_WCHAR* pTemp = 0; - iRet = Identifiers(p, m_ptr, pTemp); - m_ptr = pTemp; - if (iRet) { - return p; - } - p->m_type = IsKeyword(p->m_wstring); - } - return p; - } - } -} - -FX_DWORD CXFA_FMLexer::Number(CXFA_FMToken* t, - const FX_WCHAR* p, - const FX_WCHAR*& pEnd) { - FX_DOUBLE number = 0; - if (XFA_FMDChar::string2number(p, &number, pEnd)) { - return 1; - } - if (pEnd && XFA_FMDChar::isAlpha(pEnd)) { - return 1; - } - t->m_wstring = CFX_WideStringC(p, (pEnd - p)); - return 0; -} - -FX_DWORD CXFA_FMLexer::String(CXFA_FMToken* t, - const FX_WCHAR* p, - const FX_WCHAR*& pEnd) { - const FX_WCHAR* pStart = p; - uint16_t ch = 0; - XFA_FMDChar::inc(p); - ch = XFA_FMDChar::get(p); - while (ch) { - if (!XFA_FMDChar::isAvalid(p)) { - ch = XFA_FMDChar::get(p); - pEnd = p; - t->m_wstring = CFX_WideStringC(pStart, (pEnd - pStart)); - Error(FMERR_UNSUPPORTED_CHAR, ch); - return 1; - } - if (ch == '"') { - XFA_FMDChar::inc(p); - if (!XFA_FMDChar::isAvalid(p)) { - ch = XFA_FMDChar::get(p); - pEnd = p; - t->m_wstring = CFX_WideStringC(pStart, (pEnd - pStart)); - Error(FMERR_UNSUPPORTED_CHAR, ch); - return 1; - } - ch = XFA_FMDChar::get(p); - if (ch == '"') { - goto NEXT; - } else { - break; - } - } - NEXT: - XFA_FMDChar::inc(p); - ch = XFA_FMDChar::get(p); - } - pEnd = p; - t->m_wstring = CFX_WideStringC(pStart, (pEnd - pStart)); - return 0; -} - -FX_DWORD CXFA_FMLexer::Identifiers(CXFA_FMToken* t, - const FX_WCHAR* p, - const FX_WCHAR*& pEnd) { - const FX_WCHAR* pStart = p; - uint16_t ch = 0; - ch = XFA_FMDChar::get(p); - XFA_FMDChar::inc(p); - if (!XFA_FMDChar::isAvalid(p)) { - pEnd = p; - t->m_wstring = CFX_WideStringC(pStart, (pEnd - pStart)); - Error(FMERR_UNSUPPORTED_CHAR, ch); - return 1; - } - ch = XFA_FMDChar::get(p); - while (ch) { - if (!XFA_FMDChar::isAvalid(p)) { - pEnd = p; - t->m_wstring = CFX_WideStringC(pStart, (pEnd - pStart)); - Error(FMERR_UNSUPPORTED_CHAR, ch); - return 1; - } - ch = XFA_FMDChar::get(p); - if (XFA_FMDChar::isUnicodeAlpha(ch)) { - XFA_FMDChar::inc(p); - } else { - pEnd = p; - t->m_wstring = CFX_WideStringC(pStart, (pEnd - pStart)); - return 0; - } - } - pEnd = p; - t->m_wstring = CFX_WideStringC(pStart, (pEnd - pStart)); - return 0; -} - -void CXFA_FMLexer::Comment(const FX_WCHAR* p, const FX_WCHAR*& pEnd) { - unsigned ch = 0; - XFA_FMDChar::inc(p); - ch = XFA_FMDChar::get(p); - while (ch) { - if (ch == 0x0D) { - XFA_FMDChar::inc(p); - pEnd = p; - return; - } - if (ch == 0x0A) { - ++m_uCurrentLine; - XFA_FMDChar::inc(p); - pEnd = p; - return; - } - XFA_FMDChar::inc(p); - ch = XFA_FMDChar::get(p); - } - pEnd = p; -} - -XFA_FM_TOKEN CXFA_FMLexer::IsKeyword(const CFX_WideStringC& str) { - int32_t iLength = str.GetLength(); - uint32_t uHash = FX_HashCode_String_GetW(str.GetPtr(), iLength, TRUE); - int32_t iStart = KEYWORD_START, iEnd = KEYWORD_END; - int32_t iMid = (iStart + iEnd) / 2; - XFA_FMKeyword keyword; - do { - iMid = (iStart + iEnd) / 2; - keyword = keyWords[iMid]; - if (uHash == keyword.m_uHash) { - return keyword.m_type; - } else if (uHash < keyword.m_uHash) { - iEnd = iMid - 1; - } else { - iStart = iMid + 1; - } - } while (iStart <= iEnd); - return TOKidentifier; -} - -void CXFA_FMLexer::Error(XFA_FM_ERRMSG msg, ...) { - m_pErrorInfo->linenum = m_uCurrentLine; - const FX_WCHAR* lpMessageInfo = XFA_FM_ErrorMsg(msg); - va_list ap; - va_start(ap, msg); - m_pErrorInfo->message.FormatV(lpMessageInfo, ap); - va_end(ap); -} - -FX_BOOL CXFA_FMLexer::HasError() const { - if (m_pErrorInfo->message.IsEmpty()) { - return FALSE; - } - return TRUE; -} diff --git a/xfa/src/fxfa/fm2js/xfa_lexer.h b/xfa/src/fxfa/fm2js/xfa_lexer.h deleted file mode 100644 index f45f639e38..0000000000 --- a/xfa/src/fxfa/fm2js/xfa_lexer.h +++ /dev/null @@ -1,134 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXFA_FM2JS_XFA_LEXER_H_ -#define XFA_SRC_FXFA_FM2JS_XFA_LEXER_H_ - -#include - -#include "core/include/fxcrt/fx_string.h" -#include "xfa/src/fxfa/fm2js/xfa_error.h" - -enum XFA_FM_TOKEN { - TOKand, - TOKlparen, - TOKrparen, - TOKmul, - TOKplus, - TOKcomma, - TOKminus, - TOKdot, - TOKdiv, - TOKlt, - TOKassign, - TOKgt, - TOKlbracket, - TOKrbracket, - TOKor, - TOKdotscream, - TOKdotstar, - TOKdotdot, - TOKle, - TOKne, - TOKeq, - TOKge, - TOKdo, - TOKkseq, - TOKksge, - TOKksgt, - TOKif, - TOKin, - TOKksle, - TOKkslt, - TOKksne, - TOKksor, - TOKnull, - TOKbreak, - TOKksand, - TOKend, - TOKeof, - TOKfor, - TOKnan, - TOKksnot, - TOKvar, - TOKthen, - TOKelse, - TOKexit, - TOKdownto, - TOKreturn, - TOKinfinity, - TOKendwhile, - TOKforeach, - TOKendfunc, - TOKelseif, - TOKwhile, - TOKendfor, - TOKthrow, - TOKstep, - TOKupto, - TOKcontinue, - TOKfunc, - TOKendif, - TOKstar, - TOKidentifier, - TOKunderscore, - TOKdollar, - TOKexclamation, - TOKcall, - TOKstring, - TOKnumber, - TOKreserver -}; - -struct XFA_FMKeyword { - XFA_FM_TOKEN m_type; - uint32_t m_uHash; - const FX_WCHAR* m_keyword; -}; - -const FX_WCHAR* XFA_FM_KeywordToString(XFA_FM_TOKEN op); - -class CXFA_FMToken { - public: - CXFA_FMToken(); - explicit CXFA_FMToken(FX_DWORD uLineNum); - - CFX_WideStringC m_wstring; - XFA_FM_TOKEN m_type; - FX_DWORD m_uLinenum; -}; - -class CXFA_FMLexer { - public: - CXFA_FMLexer(const CFX_WideStringC& wsFormcalc, CXFA_FMErrorInfo* pErrorInfo); - CXFA_FMToken* NextToken(); - FX_DWORD Number(CXFA_FMToken* t, const FX_WCHAR* p, const FX_WCHAR*& pEnd); - FX_DWORD String(CXFA_FMToken* t, const FX_WCHAR* p, const FX_WCHAR*& pEnd); - FX_DWORD Identifiers(CXFA_FMToken* t, - const FX_WCHAR* p, - const FX_WCHAR*& pEnd); - void Comment(const FX_WCHAR* p, const FX_WCHAR*& pEnd); - XFA_FM_TOKEN IsKeyword(const CFX_WideStringC& p); - void SetCurrentLine(FX_DWORD line) { m_uCurrentLine = line; } - void SetToken(CXFA_FMToken* pToken) { - if (m_pToken.get() != pToken) - m_pToken.reset(pToken); - } - const FX_WCHAR* SavePos() { return m_ptr; } - void RestorePos(const FX_WCHAR* pPos) { m_ptr = pPos; } - void Error(XFA_FM_ERRMSG msg, ...); - FX_BOOL HasError() const; - - protected: - CXFA_FMToken* Scan(); - - const FX_WCHAR* m_ptr; - FX_DWORD m_uCurrentLine; - std::unique_ptr m_pToken; - CXFA_FMErrorInfo* m_pErrorInfo; -}; - -#endif // XFA_SRC_FXFA_FM2JS_XFA_LEXER_H_ diff --git a/xfa/src/fxfa/fm2js/xfa_program.cpp b/xfa/src/fxfa/fm2js/xfa_program.cpp deleted file mode 100644 index ce06c4d99d..0000000000 --- a/xfa/src/fxfa/fm2js/xfa_program.cpp +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fxfa/fm2js/xfa_program.h" - -CXFA_FMProgram::CXFA_FMProgram() : m_globalFunction(0) {} -CXFA_FMProgram::~CXFA_FMProgram() { - if (m_globalFunction != 0) { - delete m_globalFunction; - m_globalFunction = 0; - } -} -int32_t CXFA_FMProgram::Init(const CFX_WideStringC& wsFormcalc) { - return m_parse.Init(wsFormcalc, &m_pErrorInfo); -} -int32_t CXFA_FMProgram::ParseProgram() { - CFX_PtrArray* expressions = 0; - m_parse.NextToken(); - if (!m_pErrorInfo.message.IsEmpty()) { - return -1; - } - expressions = m_parse.ParseTopExpression(); - if (!m_pErrorInfo.message.IsEmpty()) { - CXFA_FMExpression* e = 0; - for (int32_t u = 0; u < expressions->GetSize(); ++u) { - e = (CXFA_FMExpression*)expressions->GetAt(u); - if (e) { - delete e; - } - } - delete expressions; - return -1; - } - m_globalFunction = - new CXFA_FMFunctionDefinition(1, 1, FX_WSTRC(L""), 0, expressions); - return 0; -} -int32_t CXFA_FMProgram::TranslateProgram(CFX_WideTextBuf& wsJavaScript) { - m_globalFunction->ToJavaScript(wsJavaScript); - wsJavaScript.AppendChar(0); - return 0; -} diff --git a/xfa/src/fxfa/fm2js/xfa_program.h b/xfa/src/fxfa/fm2js/xfa_program.h deleted file mode 100644 index 3cd7cc4d0b..0000000000 --- a/xfa/src/fxfa/fm2js/xfa_program.h +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXFA_FM2JS_XFA_PROGRAM_H_ -#define XFA_SRC_FXFA_FM2JS_XFA_PROGRAM_H_ - -#include "xfa/src/fxfa/fm2js/xfa_error.h" -#include "xfa/src/fxfa/fm2js/xfa_fmparse.h" - -class CXFA_FMProgram { - public: - CXFA_FMProgram(); - ~CXFA_FMProgram(); - int32_t Init(const CFX_WideStringC& wsFormcalc); - int32_t ParseProgram(); - int32_t TranslateProgram(CFX_WideTextBuf& wsJavaScript); - CXFA_FMErrorInfo& GetError() { return m_pErrorInfo; } - - private: - CXFA_FMErrorInfo m_pErrorInfo; - CXFA_FMParse m_parse; - CXFA_FMFunctionDefinition* m_globalFunction; -}; - -#endif // XFA_SRC_FXFA_FM2JS_XFA_PROGRAM_H_ diff --git a/xfa/src/fxfa/fm2js/xfa_simpleexpression.cpp b/xfa/src/fxfa/fm2js/xfa_simpleexpression.cpp deleted file mode 100644 index 376a8f7a32..0000000000 --- a/xfa/src/fxfa/fm2js/xfa_simpleexpression.cpp +++ /dev/null @@ -1,745 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fxfa/fm2js/xfa_simpleexpression.h" - -#include "core/include/fxcrt/fx_ext.h" - -namespace { - -const CFX_WideStringC gs_lpStrExpFuncName[] = { - FX_WSTRC(L"foxit_xfa_formcalc_runtime.assign_value_operator"), - FX_WSTRC(L"foxit_xfa_formcalc_runtime.logical_or_operator"), - FX_WSTRC(L"foxit_xfa_formcalc_runtime.logical_and_operator"), - FX_WSTRC(L"foxit_xfa_formcalc_runtime.equality_operator"), - FX_WSTRC(L"foxit_xfa_formcalc_runtime.notequality_operator"), - FX_WSTRC(L"foxit_xfa_formcalc_runtime.less_operator"), - FX_WSTRC(L"foxit_xfa_formcalc_runtime.lessequal_operator"), - FX_WSTRC(L"foxit_xfa_formcalc_runtime.greater_operator"), - FX_WSTRC(L"foxit_xfa_formcalc_runtime.greaterequal_operator"), - FX_WSTRC(L"foxit_xfa_formcalc_runtime.plus_operator"), - FX_WSTRC(L"foxit_xfa_formcalc_runtime.minus_operator"), - FX_WSTRC(L"foxit_xfa_formcalc_runtime.multiple_operator"), - FX_WSTRC(L"foxit_xfa_formcalc_runtime.divide_operator"), - FX_WSTRC(L"foxit_xfa_formcalc_runtime.positive_operator"), - FX_WSTRC(L"foxit_xfa_formcalc_runtime.negative_operator"), - FX_WSTRC(L"foxit_xfa_formcalc_runtime.logical_not_operator"), - FX_WSTRC(L"foxit_xfa_formcalc_runtime."), - FX_WSTRC(L"foxit_xfa_formcalc_runtime.dot_accessor"), - FX_WSTRC(L"foxit_xfa_formcalc_runtime.dotdot_accessor"), - FX_WSTRC(L"foxit_xfa_formcalc_runtime.concat_fm_object"), - FX_WSTRC(L"foxit_xfa_formcalc_runtime.is_fm_object"), - FX_WSTRC(L"foxit_xfa_formcalc_runtime.is_fm_array"), - FX_WSTRC(L"foxit_xfa_formcalc_runtime.get_fm_value"), - FX_WSTRC(L"foxit_xfa_formcalc_runtime.get_fm_jsobj"), - FX_WSTRC(L"foxit_xfa_formcalc_runtime.fm_var_filter"), -}; - -struct XFA_FMBuildInFunc { - uint32_t m_uHash; - const FX_WCHAR* m_buildinfunc; -}; -const XFA_FMBuildInFunc g_BuildInFuncs[] = { - {0x0001f1f5, L"At"}, {0x00020b9c, L"FV"}, - {0x00021aef, L"If"}, {0x00023ee6, L"PV"}, - {0x04b5c9ee, L"Encode"}, {0x08e96685, L"DateFmt"}, - {0x09f99db6, L"Abs"}, {0x09f9e583, L"Apr"}, - {0x09fa043e, L"Avg"}, {0x0a9782a0, L"Get"}, - {0x0b1b09df, L"Len"}, {0x0b3543a6, L"Max"}, - {0x0b356ca4, L"Min"}, {0x0b358b60, L"Mod"}, - {0x0b4fded4, L"NPV"}, {0x0b846bf1, L"Pmt"}, - {0x0b8494f9, L"Put"}, {0x0bb8df5d, L"Ref"}, - {0x0bd37a99, L"Str"}, {0x0bd37fb5, L"Sum"}, - {0x1048469b, L"Cterm"}, {0x11e03660, L"Exists"}, - {0x126236e6, L"Post"}, {0x127c6661, L"PPmt"}, - {0x193ade3e, L"Right"}, {0x1ec8ab2c, L"Rate"}, - {0x20e476dc, L"IsoTime2Num"}, {0x23eb6816, L"TimeFmt"}, - {0x24fb17b0, L"LocalDateFmt"}, {0x28dee6e9, L"Format"}, - {0x2d0890b8, L"Term"}, {0x2d71b00f, L"Time"}, - {0x2f890fb1, L"Num2Time"}, {0x3767511d, L"Ceil"}, - {0x3ffd1941, L"LocalTimeFmt"}, {0x442f68c8, L"Round"}, - {0x46fd1128, L"Eval"}, {0x4d629440, L"Date2Num"}, - {0x4dcf25f8, L"Concat"}, {0x4e00255d, L"UnitValue"}, - {0x55a5cc29, L"Lower"}, {0x5e43e04c, L"WordNum"}, - {0x620ce6ba, L"Ipmt"}, {0x6f544d49, L"Count"}, - {0x7e241013, L"Within"}, {0x9b9a6e2b, L"IsoDate2Num"}, - {0xb2c941c2, L"UnitType"}, {0xb598a1f7, L"Uuid"}, - {0xbde9abde, L"Date"}, {0xc0010b80, L"Num2Date"}, - {0xc1f6144c, L"Upper"}, {0xc44028f7, L"Oneof"}, - {0xc62c1b2c, L"Space"}, {0xd0ff50f9, L"HasValue"}, - {0xd1537042, L"Floor"}, {0xd2ac9cf1, L"Time2Num"}, - {0xd907aee5, L"Num2GMTime"}, {0xdf24f7c4, L"Decode"}, - {0xe2664803, L"Substr"}, {0xe3e7b528, L"Stuff"}, - {0xe6792d4e, L"Rtrim"}, {0xe8c23f5b, L"Parse"}, - {0xea18d121, L"Choose"}, {0xebfef69c, L"Replace"}, - {0xf5ad782b, L"Left"}, {0xf7bb2248, L"Ltrim"}, -}; - -struct XFA_FMSOMMethod { - uint32_t m_uHash; - const FX_WCHAR* m_wsSomMethodName; - FX_DWORD m_dParameters; -}; -const XFA_FMSOMMethod gs_FMSomMethods[] = { - {0x00000068, L"h", 0x01}, - {0x00000077, L"w", 0x01}, - {0x00000078, L"x", 0x01}, - {0x00000079, L"y", 0x01}, - {0x05eb5b0f, L"pageSpan", 0x01}, - {0x10f1b1bd, L"page", 0x01}, - {0x3bf1c2a5, L"absPageSpan", 0x01}, - {0x3c752495, L"verify", 0x0d}, - {0x44c352ad, L"formNodes", 0x01}, - {0x5775c2cc, L"absPageInBatch", 0x01}, - {0x5ee00996, L"setElement", 0x01}, - {0x7033bfd5, L"insert", 0x03}, - {0x8c5feb32, L"sheetInBatch", 0x01}, - {0x8f3a8379, L"sheet", 0x01}, - {0x92dada4f, L"saveFilteredXML", 0x01}, - {0x9cab7cae, L"remove", 0x01}, - {0xa68635f1, L"sign", 0x61}, - {0xaac241c8, L"isRecordGroup", 0x01}, - {0xd8ed1467, L"clear", 0x01}, - {0xda12e518, L"append", 0x01}, - {0xe74f0653, L"absPage", 0x01}, -}; - -} // namespace - -CFX_WideStringC XFA_FM_EXPTypeToString( - XFA_FM_SimpleExpressionType simpleExpType) { - return gs_lpStrExpFuncName[simpleExpType]; -} - -CXFA_FMSimpleExpression::CXFA_FMSimpleExpression(FX_DWORD line, XFA_FM_TOKEN op) - : m_line(line), m_op(op) {} - -void CXFA_FMSimpleExpression::ToJavaScript(CFX_WideTextBuf& javascript) {} - -void CXFA_FMSimpleExpression::ToImpliedReturnJS(CFX_WideTextBuf& javascript) {} - -XFA_FM_TOKEN CXFA_FMSimpleExpression::GetOperatorToken() const { - return m_op; -} - -CXFA_FMNullExpression::CXFA_FMNullExpression(FX_DWORD line) - : CXFA_FMSimpleExpression(line, TOKnull) {} - -void CXFA_FMNullExpression::ToJavaScript(CFX_WideTextBuf& javascript) { - javascript << FX_WSTRC(L"null"); -} - -CXFA_FMNumberExpression::CXFA_FMNumberExpression(FX_DWORD line, - CFX_WideStringC wsNumber) - : CXFA_FMSimpleExpression(line, TOKnumber), m_wsNumber(wsNumber) {} - -void CXFA_FMNumberExpression::ToJavaScript(CFX_WideTextBuf& javascript) { - javascript << m_wsNumber; -} - -CXFA_FMStringExpression::CXFA_FMStringExpression(FX_DWORD line, - CFX_WideStringC wsString) - : CXFA_FMSimpleExpression(line, TOKstring), m_wsString(wsString) {} - -void CXFA_FMStringExpression::ToJavaScript(CFX_WideTextBuf& javascript) { - CFX_WideString tempStr = m_wsString; - if (tempStr.GetLength() > 2) { - javascript.AppendChar(L'\"'); - FX_WCHAR oneChar; - for (int16_t i = 1; i < tempStr.GetLength() - 1; i++) { - oneChar = tempStr[i]; - switch (oneChar) { - case L'\"': { - i++; - javascript << FX_WSTRC(L"\\\""); - } break; - case 0x0d: - break; - case 0x0a: { - javascript << FX_WSTRC(L"\\n"); - } break; - default: { javascript.AppendChar(oneChar); } break; - } - } - javascript.AppendChar(L'\"'); - } else { - javascript << tempStr; - } -} - -CXFA_FMIdentifierExpressionn::CXFA_FMIdentifierExpressionn( - FX_DWORD line, - CFX_WideStringC wsIdentifier) - : CXFA_FMSimpleExpression(line, TOKidentifier), - m_wsIdentifier(wsIdentifier) {} - -void CXFA_FMIdentifierExpressionn::ToJavaScript(CFX_WideTextBuf& javascript) { - CFX_WideString tempStr = m_wsIdentifier; - if (tempStr.Equal(FX_WSTRC(L"$"))) { - tempStr = FX_WSTRC(L"this"); - } else if (tempStr.Equal(FX_WSTRC(L"!"))) { - tempStr = FX_WSTRC(L"xfa.datasets"); - } else if (tempStr.Equal(FX_WSTRC(L"$data"))) { - tempStr = FX_WSTRC(L"xfa.datasets.data"); - } else if (tempStr.Equal(FX_WSTRC(L"$event"))) { - tempStr = FX_WSTRC(L"xfa.event"); - } else if (tempStr.Equal(FX_WSTRC(L"$form"))) { - tempStr = FX_WSTRC(L"xfa.form"); - } else if (tempStr.Equal(FX_WSTRC(L"$host"))) { - tempStr = FX_WSTRC(L"xfa.host"); - } else if (tempStr.Equal(FX_WSTRC(L"$layout"))) { - tempStr = FX_WSTRC(L"xfa.layout"); - } else if (tempStr.Equal(FX_WSTRC(L"$template"))) { - tempStr = FX_WSTRC(L"xfa.template"); - } else if (tempStr[0] == L'!') { - tempStr = EXCLAMATION_IN_IDENTIFIER + tempStr.Mid(1); - } - javascript << tempStr; -} - -CXFA_FMUnaryExpression::CXFA_FMUnaryExpression(FX_DWORD line, - XFA_FM_TOKEN op, - CXFA_FMSimpleExpression* pExp) - : CXFA_FMSimpleExpression(line, op), m_pExp(pExp) {} - -void CXFA_FMUnaryExpression::ToJavaScript(CFX_WideTextBuf& javascript) {} - -CXFA_FMBinExpression::CXFA_FMBinExpression(FX_DWORD line, - XFA_FM_TOKEN op, - CXFA_FMSimpleExpression* pExp1, - CXFA_FMSimpleExpression* pExp2) - : CXFA_FMSimpleExpression(line, op), m_pExp1(pExp1), m_pExp2(pExp2) {} - -void CXFA_FMBinExpression::ToJavaScript(CFX_WideTextBuf& javascript) {} - -CXFA_FMAssignExpression::CXFA_FMAssignExpression(FX_DWORD line, - XFA_FM_TOKEN op, - CXFA_FMSimpleExpression* pExp1, - CXFA_FMSimpleExpression* pExp2) - : CXFA_FMBinExpression(line, op, pExp1, pExp2) {} - -void CXFA_FMAssignExpression::ToJavaScript(CFX_WideTextBuf& javascript) { - javascript << FX_WSTRC(L"if ("); - javascript << gs_lpStrExpFuncName[ISFMOBJECT]; - javascript << FX_WSTRC(L"("); - m_pExp1->ToJavaScript(javascript); - javascript << FX_WSTRC(L"))\n{\n"); - javascript << gs_lpStrExpFuncName[ASSIGN]; - javascript << FX_WSTRC(L"("); - m_pExp1->ToJavaScript(javascript); - javascript << FX_WSTRC(L", "); - m_pExp2->ToJavaScript(javascript); - javascript << FX_WSTRC(L");\n}\n"); - CFX_WideTextBuf tempExp1; - m_pExp1->ToJavaScript(tempExp1); - if (m_pExp1->GetOperatorToken() == TOKidentifier && - tempExp1.GetWideString() != FX_WSTRC(L"this")) { - javascript << FX_WSTRC(L"else\n{\n"); - javascript << tempExp1; - javascript << FX_WSTRC(L" = "); - javascript << gs_lpStrExpFuncName[ASSIGN]; - javascript << FX_WSTRC(L"("); - m_pExp1->ToJavaScript(javascript); - javascript << FX_WSTRC(L", "); - m_pExp2->ToJavaScript(javascript); - javascript << FX_WSTRC(L");\n}\n"); - } -} - -void CXFA_FMAssignExpression::ToImpliedReturnJS(CFX_WideTextBuf& javascript) { - javascript << FX_WSTRC(L"if ("); - javascript << gs_lpStrExpFuncName[ISFMOBJECT]; - javascript << FX_WSTRC(L"("); - m_pExp1->ToJavaScript(javascript); - javascript << FX_WSTRC(L"))\n{\n"); - javascript << RUNTIMEFUNCTIONRETURNVALUE; - javascript << FX_WSTRC(L" = "); - javascript << gs_lpStrExpFuncName[ASSIGN]; - javascript << FX_WSTRC(L"("); - m_pExp1->ToJavaScript(javascript); - javascript << FX_WSTRC(L", "); - m_pExp2->ToJavaScript(javascript); - javascript << FX_WSTRC(L");\n}\n"); - CFX_WideTextBuf tempExp1; - m_pExp1->ToJavaScript(tempExp1); - if (m_pExp1->GetOperatorToken() == TOKidentifier && - tempExp1.GetWideString() != FX_WSTRC(L"this")) { - javascript << FX_WSTRC(L"else\n{\n"); - javascript << RUNTIMEFUNCTIONRETURNVALUE; - javascript << FX_WSTRC(L" = "); - javascript << tempExp1; - javascript << FX_WSTRC(L" = "); - javascript << gs_lpStrExpFuncName[ASSIGN]; - javascript << FX_WSTRC(L"("); - m_pExp1->ToJavaScript(javascript); - javascript << FX_WSTRC(L", "); - m_pExp2->ToJavaScript(javascript); - javascript << FX_WSTRC(L");\n}\n"); - } -} - -CXFA_FMLogicalOrExpression::CXFA_FMLogicalOrExpression( - FX_DWORD line, - XFA_FM_TOKEN op, - CXFA_FMSimpleExpression* pExp1, - CXFA_FMSimpleExpression* pExp2) - : CXFA_FMBinExpression(line, op, pExp1, pExp2) {} - -void CXFA_FMLogicalOrExpression::ToJavaScript(CFX_WideTextBuf& javascript) { - javascript << gs_lpStrExpFuncName[LOGICALOR]; - javascript << FX_WSTRC(L"("); - m_pExp1->ToJavaScript(javascript); - javascript << FX_WSTRC(L", "); - m_pExp2->ToJavaScript(javascript); - javascript << FX_WSTRC(L")"); -} - -CXFA_FMLogicalAndExpression::CXFA_FMLogicalAndExpression( - FX_DWORD line, - XFA_FM_TOKEN op, - CXFA_FMSimpleExpression* pExp1, - CXFA_FMSimpleExpression* pExp2) - : CXFA_FMBinExpression(line, op, pExp1, pExp2) {} - -void CXFA_FMLogicalAndExpression::ToJavaScript(CFX_WideTextBuf& javascript) { - javascript << gs_lpStrExpFuncName[LOGICALAND]; - javascript << FX_WSTRC(L"("); - m_pExp1->ToJavaScript(javascript); - javascript << FX_WSTRC(L", "); - m_pExp2->ToJavaScript(javascript); - javascript << FX_WSTRC(L")"); -} - -CXFA_FMEqualityExpression::CXFA_FMEqualityExpression( - FX_DWORD line, - XFA_FM_TOKEN op, - CXFA_FMSimpleExpression* pExp1, - CXFA_FMSimpleExpression* pExp2) - : CXFA_FMBinExpression(line, op, pExp1, pExp2) {} - -void CXFA_FMEqualityExpression::ToJavaScript(CFX_WideTextBuf& javascript) { - switch (m_op) { - case TOKeq: - case TOKkseq: - javascript << gs_lpStrExpFuncName[EQUALITY]; - break; - case TOKne: - case TOKksne: - javascript << gs_lpStrExpFuncName[NOTEQUALITY]; - break; - default: - FXSYS_assert(FALSE); - break; - } - javascript << FX_WSTRC(L"("); - m_pExp1->ToJavaScript(javascript); - javascript << FX_WSTRC(L", "); - m_pExp2->ToJavaScript(javascript); - javascript << FX_WSTRC(L")"); -} - -CXFA_FMRelationalExpression::CXFA_FMRelationalExpression( - FX_DWORD line, - XFA_FM_TOKEN op, - CXFA_FMSimpleExpression* pExp1, - CXFA_FMSimpleExpression* pExp2) - : CXFA_FMBinExpression(line, op, pExp1, pExp2) {} - -void CXFA_FMRelationalExpression::ToJavaScript(CFX_WideTextBuf& javascript) { - switch (m_op) { - case TOKlt: - case TOKkslt: - javascript << gs_lpStrExpFuncName[LESS]; - break; - case TOKgt: - case TOKksgt: - javascript << gs_lpStrExpFuncName[GREATER]; - break; - case TOKle: - case TOKksle: - javascript << gs_lpStrExpFuncName[LESSEQUAL]; - break; - case TOKge: - case TOKksge: - javascript << gs_lpStrExpFuncName[GREATEREQUAL]; - break; - default: - FXSYS_assert(FALSE); - break; - } - javascript << FX_WSTRC(L"("); - m_pExp1->ToJavaScript(javascript); - javascript << FX_WSTRC(L", "); - m_pExp2->ToJavaScript(javascript); - javascript << FX_WSTRC(L")"); -} - -CXFA_FMAdditiveExpression::CXFA_FMAdditiveExpression( - FX_DWORD line, - XFA_FM_TOKEN op, - CXFA_FMSimpleExpression* pExp1, - CXFA_FMSimpleExpression* pExp2) - : CXFA_FMBinExpression(line, op, pExp1, pExp2) {} - -void CXFA_FMAdditiveExpression::ToJavaScript(CFX_WideTextBuf& javascript) { - switch (m_op) { - case TOKplus: - javascript << gs_lpStrExpFuncName[PLUS]; - break; - case TOKminus: - javascript << gs_lpStrExpFuncName[MINUS]; - break; - default: - FXSYS_assert(FALSE); - break; - } - javascript << FX_WSTRC(L"("); - m_pExp1->ToJavaScript(javascript); - javascript << FX_WSTRC(L", "); - m_pExp2->ToJavaScript(javascript); - javascript << FX_WSTRC(L")"); -} - -CXFA_FMMultiplicativeExpression::CXFA_FMMultiplicativeExpression( - FX_DWORD line, - XFA_FM_TOKEN op, - CXFA_FMSimpleExpression* pExp1, - CXFA_FMSimpleExpression* pExp2) - : CXFA_FMBinExpression(line, op, pExp1, pExp2) {} - -void CXFA_FMMultiplicativeExpression::ToJavaScript( - CFX_WideTextBuf& javascript) { - switch (m_op) { - case TOKmul: - javascript << gs_lpStrExpFuncName[MULTIPLE]; - break; - case TOKdiv: - javascript << gs_lpStrExpFuncName[DIVIDE]; - break; - default: - FXSYS_assert(FALSE); - break; - } - javascript << FX_WSTRC(L"("); - m_pExp1->ToJavaScript(javascript); - javascript << FX_WSTRC(L", "); - m_pExp2->ToJavaScript(javascript); - javascript << FX_WSTRC(L")"); -} - -CXFA_FMPosExpression::CXFA_FMPosExpression(FX_DWORD line, - CXFA_FMSimpleExpression* pExp) - : CXFA_FMUnaryExpression(line, TOKplus, pExp) {} - -void CXFA_FMPosExpression::ToJavaScript(CFX_WideTextBuf& javascript) { - javascript << gs_lpStrExpFuncName[POSITIVE]; - javascript << FX_WSTRC(L"("); - m_pExp->ToJavaScript(javascript); - javascript << FX_WSTRC(L")"); -} - -CXFA_FMNegExpression::CXFA_FMNegExpression(FX_DWORD line, - CXFA_FMSimpleExpression* pExp) - : CXFA_FMUnaryExpression(line, TOKminus, pExp) {} - -void CXFA_FMNegExpression::ToJavaScript(CFX_WideTextBuf& javascript) { - javascript << gs_lpStrExpFuncName[NEGATIVE]; - javascript << FX_WSTRC(L"("); - m_pExp->ToJavaScript(javascript); - javascript << FX_WSTRC(L")"); -} - -CXFA_FMNotExpression::CXFA_FMNotExpression(FX_DWORD line, - CXFA_FMSimpleExpression* pExp) - : CXFA_FMUnaryExpression(line, TOKksnot, pExp) {} - -void CXFA_FMNotExpression::ToJavaScript(CFX_WideTextBuf& javascript) { - javascript << gs_lpStrExpFuncName[NOT]; - javascript << FX_WSTRC(L"("); - m_pExp->ToJavaScript(javascript); - javascript << FX_WSTRC(L")"); -} - -CXFA_FMCallExpression::CXFA_FMCallExpression(FX_DWORD line, - CXFA_FMSimpleExpression* pExp, - CFX_PtrArray* pArguments, - FX_BOOL bIsSomMethod) - : CXFA_FMUnaryExpression(line, TOKcall, pExp), - m_bIsSomMethod(bIsSomMethod), - m_pArguments(pArguments) {} - -CXFA_FMCallExpression::~CXFA_FMCallExpression() { - if (m_pArguments) { - for (int i = 0; i < m_pArguments->GetSize(); ++i) { - delete reinterpret_cast(m_pArguments->GetAt(i)); - } - m_pArguments->RemoveAll(); - delete m_pArguments; - } -} - -bool CXFA_FMCallExpression::IsBuildInFunc(CFX_WideTextBuf* funcName) { - uint32_t uHash = FX_HashCode_String_GetW(funcName->GetBuffer(), - funcName->GetLength(), TRUE); - const XFA_FMBuildInFunc* pEnd = g_BuildInFuncs + FX_ArraySize(g_BuildInFuncs); - const XFA_FMBuildInFunc* pFunc = - std::lower_bound(g_BuildInFuncs, pEnd, uHash, - [](const XFA_FMBuildInFunc& func, uint32_t hash) { - return func.m_uHash < hash; - }); - if (pFunc < pEnd && uHash == pFunc->m_uHash) { - funcName->Clear(); - *funcName << pFunc->m_buildinfunc; - return true; - } - return false; -} - -FX_DWORD CXFA_FMCallExpression::IsMethodWithObjParam( - const CFX_WideStringC& methodName) { - int32_t iLength = methodName.GetLength(); - uint32_t uHash = FX_HashCode_String_GetW(methodName.GetPtr(), iLength); - XFA_FMSOMMethod somMethodWithObjPara; - FX_DWORD parameters = 0x00; - int32_t iStart = 0, - iEnd = (sizeof(gs_FMSomMethods) / sizeof(gs_FMSomMethods[0])) - 1; - int32_t iMid = (iStart + iEnd) / 2; - do { - iMid = (iStart + iEnd) / 2; - somMethodWithObjPara = gs_FMSomMethods[iMid]; - if (uHash == somMethodWithObjPara.m_uHash) { - parameters = somMethodWithObjPara.m_dParameters; - break; - } else if (uHash < somMethodWithObjPara.m_uHash) { - iEnd = iMid - 1; - } else { - iStart = iMid + 1; - } - } while (iStart <= iEnd); - return parameters; -} - -void CXFA_FMCallExpression::ToJavaScript(CFX_WideTextBuf& javascript) { - CFX_WideTextBuf funcName; - m_pExp->ToJavaScript(funcName); - if (m_bIsSomMethod) { - javascript << funcName; - javascript << FX_WSTRC(L"("); - if (m_pArguments) { - FX_DWORD methodPara = IsMethodWithObjParam(funcName.GetWideString()); - if (methodPara > 0) { - for (int i = 0; i < m_pArguments->GetSize(); ++i) { - if ((methodPara & (0x01 << i)) > 0) { - javascript << gs_lpStrExpFuncName[GETFMJSOBJ]; - } else { - javascript << gs_lpStrExpFuncName[GETFMVALUE]; - } - javascript << FX_WSTRC(L"("); - CXFA_FMSimpleExpression* e = - reinterpret_cast( - m_pArguments->GetAt(i)); - e->ToJavaScript(javascript); - javascript << FX_WSTRC(L")"); - if (i + 1 < m_pArguments->GetSize()) { - javascript << FX_WSTRC(L", "); - } - } - } else { - for (int i = 0; i < m_pArguments->GetSize(); ++i) { - javascript << gs_lpStrExpFuncName[GETFMVALUE]; - javascript << FX_WSTRC(L"("); - CXFA_FMSimpleExpression* e = - reinterpret_cast( - m_pArguments->GetAt(i)); - e->ToJavaScript(javascript); - javascript << FX_WSTRC(L")"); - if (i + 1 < m_pArguments->GetSize()) { - javascript << FX_WSTRC(L", "); - } - } - } - } - javascript << FX_WSTRC(L")"); - } else { - bool isEvalFunc = false; - bool isExistsFunc = false; - if (IsBuildInFunc(&funcName)) { - if (funcName.GetWideString() == FX_WSTRC(L"Eval")) { - isEvalFunc = true; - javascript << FX_WSTRC(L"eval.call(this, "); - javascript << gs_lpStrExpFuncName[CALL]; - javascript << FX_WSTRC(L"Translate"); - } else if (funcName.GetWideString() == FX_WSTRC(L"Exists")) { - isExistsFunc = true; - javascript << gs_lpStrExpFuncName[CALL]; - javascript << funcName; - } else { - javascript << gs_lpStrExpFuncName[CALL]; - javascript << funcName; - } - } else { - javascript << funcName; - } - javascript << FX_WSTRC(L"("); - if (isExistsFunc) { - javascript << FX_WSTRC(L"\n(\nfunction ()\n{\ntry\n{\n"); - if (m_pArguments && m_pArguments->GetSize() > 0) { - CXFA_FMSimpleExpression* e = - reinterpret_cast(m_pArguments->GetAt(0)); - javascript << FX_WSTRC(L"return "); - e->ToJavaScript(javascript); - javascript << FX_WSTRC(L";\n}\n"); - } else { - javascript << FX_WSTRC(L"return 0;\n}\n"); - } - javascript << FX_WSTRC( - L"catch(accessExceptions)\n{\nreturn 0;\n}\n}\n).call(this)\n"); - } else if (m_pArguments) { - for (int i = 0; i < m_pArguments->GetSize(); ++i) { - CXFA_FMSimpleExpression* e = - reinterpret_cast(m_pArguments->GetAt(i)); - e->ToJavaScript(javascript); - if (i + 1 < m_pArguments->GetSize()) { - javascript << FX_WSTRC(L", "); - } - } - } - javascript << FX_WSTRC(L")"); - if (isEvalFunc) { - javascript << FX_WSTRC(L")"); - } - } -} - -CXFA_FMDotAccessorExpression::CXFA_FMDotAccessorExpression( - FX_DWORD line, - CXFA_FMSimpleExpression* pAccessor, - XFA_FM_TOKEN op, - CFX_WideStringC wsIdentifier, - CXFA_FMSimpleExpression* pIndexExp) - : CXFA_FMBinExpression(line, op, pAccessor, pIndexExp), - m_wsIdentifier(wsIdentifier) {} - -void CXFA_FMDotAccessorExpression::ToJavaScript(CFX_WideTextBuf& javascript) { - javascript << gs_lpStrExpFuncName[DOT]; - javascript << FX_WSTRC(L"("); - if (m_pExp1) { - m_pExp1->ToJavaScript(javascript); - } else { - javascript << FX_WSTRC(L"null"); - } - javascript << FX_WSTRC(L", "); - javascript << FX_WSTRC(L"\""); - if (m_pExp1 && m_pExp1->GetOperatorToken() == TOKidentifier) { - m_pExp1->ToJavaScript(javascript); - } - javascript << FX_WSTRC(L"\", "); - if (m_op == TOKdotscream) { - javascript << FX_WSTRC(L"\"#"); - javascript << m_wsIdentifier; - javascript << FX_WSTRC(L"\", "); - } else if (m_op == TOKdotstar) { - javascript << FX_WSTRC(L"\"*\", "); - } else if (m_op == TOKcall) { - javascript << FX_WSTRC(L"\"\", "); - } else { - javascript << FX_WSTRC(L"\""); - javascript << m_wsIdentifier; - javascript << FX_WSTRC(L"\", "); - } - m_pExp2->ToJavaScript(javascript); - javascript << FX_WSTRC(L")"); -} - -CXFA_FMIndexExpression::CXFA_FMIndexExpression( - FX_DWORD line, - XFA_FM_AccessorIndex accessorIndex, - CXFA_FMSimpleExpression* pIndexExp, - FX_BOOL bIsStarIndex) - : CXFA_FMUnaryExpression(line, TOKlbracket, pIndexExp), - m_accessorIndex(accessorIndex), - m_bIsStarIndex(bIsStarIndex) {} - -void CXFA_FMIndexExpression::ToJavaScript(CFX_WideTextBuf& javascript) { - switch (m_accessorIndex) { - case ACCESSOR_NO_INDEX: - javascript << FX_WSTRC(L"0"); - break; - case ACCESSOR_NO_RELATIVEINDEX: - javascript << FX_WSTRC(L"1"); - break; - case ACCESSOR_POSITIVE_INDEX: - javascript << FX_WSTRC(L"2"); - break; - case ACCESSOR_NEGATIVE_INDEX: - javascript << FX_WSTRC(L"3"); - break; - default: - javascript << FX_WSTRC(L"0"); - } - if (!m_bIsStarIndex) { - javascript << FX_WSTRC(L", "); - if (m_pExp) { - m_pExp->ToJavaScript(javascript); - } else { - javascript << FX_WSTRC(L"0"); - } - } -} - -CXFA_FMDotDotAccessorExpression::CXFA_FMDotDotAccessorExpression( - FX_DWORD line, - CXFA_FMSimpleExpression* pAccessor, - XFA_FM_TOKEN op, - CFX_WideStringC wsIdentifier, - CXFA_FMSimpleExpression* pIndexExp) - : CXFA_FMBinExpression(line, op, pAccessor, pIndexExp), - m_wsIdentifier(wsIdentifier) {} - -void CXFA_FMDotDotAccessorExpression::ToJavaScript( - CFX_WideTextBuf& javascript) { - javascript << gs_lpStrExpFuncName[DOTDOT]; - javascript << FX_WSTRC(L"("); - m_pExp1->ToJavaScript(javascript); - javascript << FX_WSTRC(L", "); - javascript << FX_WSTRC(L"\""); - if (m_pExp1 && m_pExp1->GetOperatorToken() == TOKidentifier) { - m_pExp1->ToJavaScript(javascript); - } - javascript << FX_WSTRC(L"\", "); - javascript << FX_WSTRC(L"\""); - javascript << m_wsIdentifier; - javascript << FX_WSTRC(L"\", "); - m_pExp2->ToJavaScript(javascript); - javascript << FX_WSTRC(L")"); -} - -CXFA_FMMethodCallExpression::CXFA_FMMethodCallExpression( - FX_DWORD line, - CXFA_FMSimpleExpression* pAccessorExp1, - CXFA_FMSimpleExpression* pCallExp) - : CXFA_FMBinExpression(line, TOKdot, pAccessorExp1, pCallExp) {} - -void CXFA_FMMethodCallExpression::ToJavaScript(CFX_WideTextBuf& javascript) { - javascript << FX_WSTRC(L"(\nfunction ()\n{\n"); - javascript << FX_WSTRC(L"var method_return_value = null;\n"); - javascript << FX_WSTRC(L"var accessor_object = "); - m_pExp1->ToJavaScript(javascript); - javascript << FX_WSTRC(L";\n"); - javascript << FX_WSTRC(L"if ("); - javascript << gs_lpStrExpFuncName[ISFMARRAY]; - javascript << FX_WSTRC(L"(accessor_object))\n{\n"); - javascript << FX_WSTRC( - L"for(var index = accessor_object.length - 1; index > 1; index--)\n{\n"); - javascript << FX_WSTRC(L"method_return_value = accessor_object[index]."); - m_pExp2->ToJavaScript(javascript); - javascript << FX_WSTRC(L";\n}\n}\n"); - javascript << FX_WSTRC(L"else\n{\nmethod_return_value = accessor_object."); - m_pExp2->ToJavaScript(javascript); - javascript << FX_WSTRC(L";\n}\n"); - javascript << FX_WSTRC(L"return method_return_value;\n"); - javascript << FX_WSTRC(L"}\n).call(this)"); -} diff --git a/xfa/src/fxfa/fm2js/xfa_simpleexpression.h b/xfa/src/fxfa/fm2js/xfa_simpleexpression.h deleted file mode 100644 index 152fe3d5e7..0000000000 --- a/xfa/src/fxfa/fm2js/xfa_simpleexpression.h +++ /dev/null @@ -1,292 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXFA_FM2JS_XFA_SIMPLEEXPRESSION_H_ -#define XFA_SRC_FXFA_FM2JS_XFA_SIMPLEEXPRESSION_H_ - -#include - -#include "core/include/fxcrt/fx_basic.h" -#include "xfa/src/fxfa/fm2js/xfa_lexer.h" - -#define RUNTIMEFUNCTIONRETURNVALUE \ - (FX_WSTRC(L"foxit_xfa_formcalc_runtime_func_return_value")) -#define EXCLAMATION_IN_IDENTIFIER \ - (FX_WSTRC(L"foxit_xfa_formcalc__exclamation__")) - -enum XFA_FM_SimpleExpressionType { - ASSIGN, - LOGICALOR, - LOGICALAND, - EQUALITY, - NOTEQUALITY, - LESS, - LESSEQUAL, - GREATER, - GREATEREQUAL, - PLUS, - MINUS, - MULTIPLE, - DIVIDE, - POSITIVE, - NEGATIVE, - NOT, - CALL, - DOT, - DOTDOT, - CONCATFMOBJECT, - ISFMOBJECT, - ISFMARRAY, - GETFMVALUE, - GETFMJSOBJ, - VARFILTER -}; - -CFX_WideStringC XFA_FM_EXPTypeToString( - XFA_FM_SimpleExpressionType simpleExpType); - -enum XFA_FM_AccessorIndex { - ACCESSOR_NO_INDEX, - ACCESSOR_NO_RELATIVEINDEX, - ACCESSOR_POSITIVE_INDEX, - ACCESSOR_NEGATIVE_INDEX -}; - -class CXFA_FMSimpleExpression { - public: - CXFA_FMSimpleExpression(FX_DWORD line, XFA_FM_TOKEN op); - virtual ~CXFA_FMSimpleExpression() {} - virtual void ToJavaScript(CFX_WideTextBuf& javascript); - virtual void ToImpliedReturnJS(CFX_WideTextBuf& javascript); - - XFA_FM_TOKEN GetOperatorToken() const; - - protected: - FX_DWORD m_line; - XFA_FM_TOKEN m_op; -}; - -class CXFA_FMNullExpression : public CXFA_FMSimpleExpression { - public: - explicit CXFA_FMNullExpression(FX_DWORD line); - ~CXFA_FMNullExpression() override {} - void ToJavaScript(CFX_WideTextBuf& javascript) override; -}; - -class CXFA_FMNumberExpression : public CXFA_FMSimpleExpression { - public: - CXFA_FMNumberExpression(FX_DWORD line, CFX_WideStringC wsNumber); - ~CXFA_FMNumberExpression() override {} - void ToJavaScript(CFX_WideTextBuf& javascript) override; - - private: - CFX_WideStringC m_wsNumber; -}; - -class CXFA_FMStringExpression : public CXFA_FMSimpleExpression { - public: - CXFA_FMStringExpression(FX_DWORD line, CFX_WideStringC wsString); - ~CXFA_FMStringExpression() override {} - void ToJavaScript(CFX_WideTextBuf& javascript) override; - - private: - CFX_WideStringC m_wsString; -}; - -class CXFA_FMIdentifierExpressionn : public CXFA_FMSimpleExpression { - public: - CXFA_FMIdentifierExpressionn(FX_DWORD line, CFX_WideStringC wsIdentifier); - ~CXFA_FMIdentifierExpressionn() override {} - void ToJavaScript(CFX_WideTextBuf& javascript) override; - - private: - CFX_WideStringC m_wsIdentifier; -}; - -class CXFA_FMUnaryExpression : public CXFA_FMSimpleExpression { - public: - CXFA_FMUnaryExpression(FX_DWORD line, - XFA_FM_TOKEN op, - CXFA_FMSimpleExpression* pExp); - void ToJavaScript(CFX_WideTextBuf& javascript) override; - - protected: - std::unique_ptr m_pExp; -}; - -class CXFA_FMBinExpression : public CXFA_FMSimpleExpression { - public: - CXFA_FMBinExpression(FX_DWORD line, - XFA_FM_TOKEN op, - CXFA_FMSimpleExpression* pExp1, - CXFA_FMSimpleExpression* pExp2); - void ToJavaScript(CFX_WideTextBuf& javascript) override; - - protected: - std::unique_ptr m_pExp1; - std::unique_ptr m_pExp2; -}; - -class CXFA_FMAssignExpression : public CXFA_FMBinExpression { - public: - CXFA_FMAssignExpression(FX_DWORD line, - XFA_FM_TOKEN op, - CXFA_FMSimpleExpression* pExp1, - CXFA_FMSimpleExpression* pExp2); - ~CXFA_FMAssignExpression() override {} - void ToJavaScript(CFX_WideTextBuf& javascript) override; - void ToImpliedReturnJS(CFX_WideTextBuf& javascript) override; -}; - -class CXFA_FMLogicalOrExpression : public CXFA_FMBinExpression { - public: - CXFA_FMLogicalOrExpression(FX_DWORD line, - XFA_FM_TOKEN op, - CXFA_FMSimpleExpression* pExp1, - CXFA_FMSimpleExpression* pExp2); - ~CXFA_FMLogicalOrExpression() override {} - void ToJavaScript(CFX_WideTextBuf& javascript) override; -}; - -class CXFA_FMLogicalAndExpression : public CXFA_FMBinExpression { - public: - CXFA_FMLogicalAndExpression(FX_DWORD line, - XFA_FM_TOKEN op, - CXFA_FMSimpleExpression* pExp1, - CXFA_FMSimpleExpression* pExp2); - ~CXFA_FMLogicalAndExpression() override {} - void ToJavaScript(CFX_WideTextBuf& javascript) override; -}; - -class CXFA_FMEqualityExpression : public CXFA_FMBinExpression { - public: - CXFA_FMEqualityExpression(FX_DWORD line, - XFA_FM_TOKEN op, - CXFA_FMSimpleExpression* pExp1, - CXFA_FMSimpleExpression* pExp2); - ~CXFA_FMEqualityExpression() override {} - void ToJavaScript(CFX_WideTextBuf& javascript) override; -}; - -class CXFA_FMRelationalExpression : public CXFA_FMBinExpression { - public: - CXFA_FMRelationalExpression(FX_DWORD line, - XFA_FM_TOKEN op, - CXFA_FMSimpleExpression* pExp1, - CXFA_FMSimpleExpression* pExp2); - ~CXFA_FMRelationalExpression() override {} - void ToJavaScript(CFX_WideTextBuf& javascript) override; -}; - -class CXFA_FMAdditiveExpression : public CXFA_FMBinExpression { - public: - CXFA_FMAdditiveExpression(FX_DWORD line, - XFA_FM_TOKEN op, - CXFA_FMSimpleExpression* pExp1, - CXFA_FMSimpleExpression* pExp2); - ~CXFA_FMAdditiveExpression() override {} - void ToJavaScript(CFX_WideTextBuf& javascript) override; -}; - -class CXFA_FMMultiplicativeExpression : public CXFA_FMBinExpression { - public: - CXFA_FMMultiplicativeExpression(FX_DWORD line, - XFA_FM_TOKEN op, - CXFA_FMSimpleExpression* pExp1, - CXFA_FMSimpleExpression* pExp2); - ~CXFA_FMMultiplicativeExpression() override {} - void ToJavaScript(CFX_WideTextBuf& javascript) override; -}; - -class CXFA_FMPosExpression : public CXFA_FMUnaryExpression { - public: - CXFA_FMPosExpression(FX_DWORD line, CXFA_FMSimpleExpression* pExp); - ~CXFA_FMPosExpression() override {} - void ToJavaScript(CFX_WideTextBuf& javascript) override; -}; - -class CXFA_FMNegExpression : public CXFA_FMUnaryExpression { - public: - CXFA_FMNegExpression(FX_DWORD line, CXFA_FMSimpleExpression* pExp); - ~CXFA_FMNegExpression() override {} - void ToJavaScript(CFX_WideTextBuf& javascript) override; -}; - -class CXFA_FMNotExpression : public CXFA_FMUnaryExpression { - public: - CXFA_FMNotExpression(FX_DWORD line, CXFA_FMSimpleExpression* pExp); - ~CXFA_FMNotExpression() override {} - void ToJavaScript(CFX_WideTextBuf& javascript) override; -}; - -class CXFA_FMCallExpression : public CXFA_FMUnaryExpression { - public: - CXFA_FMCallExpression(FX_DWORD line, - CXFA_FMSimpleExpression* pExp, - CFX_PtrArray* pArguments, - FX_BOOL bIsSomMethod); - ~CXFA_FMCallExpression() override; - bool IsBuildInFunc(CFX_WideTextBuf* funcName); - FX_DWORD IsMethodWithObjParam(const CFX_WideStringC& methodName); - void ToJavaScript(CFX_WideTextBuf& javascript) override; - - private: - FX_BOOL m_bIsSomMethod; - CFX_PtrArray* m_pArguments; -}; - -class CXFA_FMDotAccessorExpression : public CXFA_FMBinExpression { - public: - CXFA_FMDotAccessorExpression(FX_DWORD line, - CXFA_FMSimpleExpression* pAccessor, - XFA_FM_TOKEN op, - CFX_WideStringC wsIdentifier, - CXFA_FMSimpleExpression* pIndexExp); - ~CXFA_FMDotAccessorExpression() override {} - void ToJavaScript(CFX_WideTextBuf& javascript) override; - - private: - CFX_WideStringC m_wsIdentifier; -}; - -class CXFA_FMIndexExpression : public CXFA_FMUnaryExpression { - public: - CXFA_FMIndexExpression(FX_DWORD line, - XFA_FM_AccessorIndex accessorIndex, - CXFA_FMSimpleExpression* pIndexExp, - FX_BOOL bIsStarIndex); - ~CXFA_FMIndexExpression() override {} - void ToJavaScript(CFX_WideTextBuf& javascript) override; - - private: - XFA_FM_AccessorIndex m_accessorIndex; - FX_BOOL m_bIsStarIndex; -}; - -class CXFA_FMDotDotAccessorExpression : public CXFA_FMBinExpression { - public: - CXFA_FMDotDotAccessorExpression(FX_DWORD line, - CXFA_FMSimpleExpression* pAccessor, - XFA_FM_TOKEN op, - CFX_WideStringC wsIdentifier, - CXFA_FMSimpleExpression* pIndexExp); - ~CXFA_FMDotDotAccessorExpression() override {} - void ToJavaScript(CFX_WideTextBuf& javascript) override; - - private: - CFX_WideStringC m_wsIdentifier; -}; - -class CXFA_FMMethodCallExpression : public CXFA_FMBinExpression { - public: - CXFA_FMMethodCallExpression(FX_DWORD line, - CXFA_FMSimpleExpression* pAccessorExp1, - CXFA_FMSimpleExpression* pCallExp); - ~CXFA_FMMethodCallExpression() override {} - void ToJavaScript(CFX_WideTextBuf& javascript) override; -}; - -#endif // XFA_SRC_FXFA_FM2JS_XFA_SIMPLEEXPRESSION_H_ diff --git a/xfa/src/fxfa/parser/xfa_basic_data.cpp b/xfa/src/fxfa/parser/xfa_basic_data.cpp deleted file mode 100644 index 418ebf374b..0000000000 --- a/xfa/src/fxfa/parser/xfa_basic_data.cpp +++ /dev/null @@ -1,7333 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fxfa/parser/xfa_basic_data.h" - -#include "xfa/src/fxfa/fm2js/xfa_fm2jsapi.h" -#include "xfa/src/fxfa/parser/xfa_basic_imp.h" -#include "xfa/src/fxfa/parser/xfa_docdata.h" -#include "xfa/src/fxfa/parser/xfa_doclayout.h" -#include "xfa/src/fxfa/parser/xfa_document.h" -#include "xfa/src/fxfa/parser/xfa_localemgr.h" -#include "xfa/src/fxfa/parser/xfa_object.h" -#include "xfa/src/fxfa/parser/xfa_parser.h" -#include "xfa/src/fxfa/parser/xfa_script.h" -#include "xfa/src/fxfa/parser/xfa_script_datawindow.h" -#include "xfa/src/fxfa/parser/xfa_script_eventpseudomodel.h" -#include "xfa/src/fxfa/parser/xfa_script_hostpseudomodel.h" -#include "xfa/src/fxfa/parser/xfa_script_layoutpseudomodel.h" -#include "xfa/src/fxfa/parser/xfa_script_logpseudomodel.h" -#include "xfa/src/fxfa/parser/xfa_script_signaturepseudomodel.h" -#include "xfa/src/fxfa/parser/xfa_utils.h" - -const XFA_ATTRIBUTEENUMINFO g_XFAEnumData[] = { - {0x2a, L"*", XFA_ATTRIBUTEENUM_Asterisk}, - {0x2f, L"/", XFA_ATTRIBUTEENUM_Slash}, - {0x5c, L"\\", XFA_ATTRIBUTEENUM_Backslash}, - {0x239bd, L"on", XFA_ATTRIBUTEENUM_On}, - {0x25356, L"tb", XFA_ATTRIBUTEENUM_Tb}, - {0x25885, L"up", XFA_ATTRIBUTEENUM_Up}, - {0x91b281, L"metaData", XFA_ATTRIBUTEENUM_MetaData}, - {0x1f8dedb, L"delegate", XFA_ATTRIBUTEENUM_Delegate}, - {0x2a6c55a, L"postSubmit", XFA_ATTRIBUTEENUM_PostSubmit}, - {0x31b19c1, L"name", XFA_ATTRIBUTEENUM_Name}, - {0x378a38a, L"cross", XFA_ATTRIBUTEENUM_Cross}, - {0x3848b3f, L"next", XFA_ATTRIBUTEENUM_Next}, - {0x48b6670, L"none", XFA_ATTRIBUTEENUM_None}, - {0x51aafe5, L"shortEdge", XFA_ATTRIBUTEENUM_ShortEdge}, - {0x55264c4, L"1mod10_1mod11", XFA_ATTRIBUTEENUM_1mod10_1mod11}, - {0x5a5c519, L"height", XFA_ATTRIBUTEENUM_Height}, - {0x89ce549, L"crossDiagonal", XFA_ATTRIBUTEENUM_CrossDiagonal}, - {0x9f9d0f9, L"all", XFA_ATTRIBUTEENUM_All}, - {0x9f9db48, L"any", XFA_ATTRIBUTEENUM_Any}, - {0xa126261, L"toRight", XFA_ATTRIBUTEENUM_ToRight}, - {0xa36de29, L"matchTemplate", XFA_ATTRIBUTEENUM_MatchTemplate}, - {0xa48d040, L"dpl", XFA_ATTRIBUTEENUM_Dpl}, - {0xa559c05, L"invisible", XFA_ATTRIBUTEENUM_Invisible}, - {0xa7d48e3, L"fit", XFA_ATTRIBUTEENUM_Fit}, - {0xa8a8f80, L"width", XFA_ATTRIBUTEENUM_Width}, - {0xab466bb, L"preSubmit", XFA_ATTRIBUTEENUM_PreSubmit}, - {0xacc5785, L"ipl", XFA_ATTRIBUTEENUM_Ipl}, - {0xafab0f8, L"flateCompress", XFA_ATTRIBUTEENUM_FlateCompress}, - {0xb355816, L"med", XFA_ATTRIBUTEENUM_Med}, - {0xb69ef77, L"odd", XFA_ATTRIBUTEENUM_Odd}, - {0xb69f9bb, L"off", XFA_ATTRIBUTEENUM_Off}, - {0xb843dba, L"pdf", XFA_ATTRIBUTEENUM_Pdf}, - {0xbb912b8, L"row", XFA_ATTRIBUTEENUM_Row}, - {0xbedaf33, L"top", XFA_ATTRIBUTEENUM_Top}, - {0xc56afcc, L"xdp", XFA_ATTRIBUTEENUM_Xdp}, - {0xc56ba02, L"xfd", XFA_ATTRIBUTEENUM_Xfd}, - {0xc56ddf1, L"xml", XFA_ATTRIBUTEENUM_Xml}, - {0xc8b65f3, L"zip", XFA_ATTRIBUTEENUM_Zip}, - {0xc8b89d6, L"zpl", XFA_ATTRIBUTEENUM_Zpl}, - {0xf55d7ee, L"visible", XFA_ATTRIBUTEENUM_Visible}, - {0xfe3596a, L"exclude", XFA_ATTRIBUTEENUM_Exclude}, - {0x109d7ce7, L"mouseEnter", XFA_ATTRIBUTEENUM_MouseEnter}, - {0x10f1bc0c, L"pair", XFA_ATTRIBUTEENUM_Pair}, - {0x1154efe6, L"filter", XFA_ATTRIBUTEENUM_Filter}, - {0x125bc94b, L"moveLast", XFA_ATTRIBUTEENUM_MoveLast}, - {0x12e1f1f0, L"exportAndImport", XFA_ATTRIBUTEENUM_ExportAndImport}, - {0x13000c60, L"push", XFA_ATTRIBUTEENUM_Push}, - {0x138ee315, L"portrait", XFA_ATTRIBUTEENUM_Portrait}, - {0x14da2125, L"default", XFA_ATTRIBUTEENUM_Default}, - {0x157749a5, L"storedProc", XFA_ATTRIBUTEENUM_StoredProc}, - {0x16641198, L"stayBOF", XFA_ATTRIBUTEENUM_StayBOF}, - {0x16b2fc5b, L"stayEOF", XFA_ATTRIBUTEENUM_StayEOF}, - {0x17fad373, L"postPrint", XFA_ATTRIBUTEENUM_PostPrint}, - {0x193207d0, L"usCarrier", XFA_ATTRIBUTEENUM_UsCarrier}, - {0x193ade3e, L"right", XFA_ATTRIBUTEENUM_Right}, - {0x1bfc72d9, L"preOpen", XFA_ATTRIBUTEENUM_PreOpen}, - {0x1cc9317a, L"actual", XFA_ATTRIBUTEENUM_Actual}, - {0x1f31df1e, L"rest", XFA_ATTRIBUTEENUM_Rest}, - {0x1fb1bf14, L"topCenter", XFA_ATTRIBUTEENUM_TopCenter}, - {0x207de667, L"standardSymbol", XFA_ATTRIBUTEENUM_StandardSymbol}, - {0x2196a452, L"initialize", XFA_ATTRIBUTEENUM_Initialize}, - {0x23bd40c7, L"justifyAll", XFA_ATTRIBUTEENUM_JustifyAll}, - {0x247cf3e9, L"normal", XFA_ATTRIBUTEENUM_Normal}, - {0x25aa946b, L"landscape", XFA_ATTRIBUTEENUM_Landscape}, - {0x2739b5c9, L"nonInteractive", XFA_ATTRIBUTEENUM_NonInteractive}, - {0x27410f03, L"mouseExit", XFA_ATTRIBUTEENUM_MouseExit}, - {0x2854e62c, L"minus", XFA_ATTRIBUTEENUM_Minus}, - {0x287e936a, L"diagonalLeft", XFA_ATTRIBUTEENUM_DiagonalLeft}, - {0x2972a98f, L"simplexPaginated", XFA_ATTRIBUTEENUM_SimplexPaginated}, - {0x29d8225f, L"document", XFA_ATTRIBUTEENUM_Document}, - {0x2a9d3016, L"warning", XFA_ATTRIBUTEENUM_Warning}, - {0x2b35b6d9, L"auto", XFA_ATTRIBUTEENUM_Auto}, - {0x2c1653d9, L"below", XFA_ATTRIBUTEENUM_Below}, - {0x2c1f0540, L"bottomLeft", XFA_ATTRIBUTEENUM_BottomLeft}, - {0x2c44e816, L"bottomCenter", XFA_ATTRIBUTEENUM_BottomCenter}, - {0x2cd3e9f3, L"tcpl", XFA_ATTRIBUTEENUM_Tcpl}, - {0x2d08af85, L"text", XFA_ATTRIBUTEENUM_Text}, - {0x2dc478eb, L"grouping", XFA_ATTRIBUTEENUM_Grouping}, - {0x2ef3afdd, L"secureSymbol", XFA_ATTRIBUTEENUM_SecureSymbol}, - {0x2f2dd29a, L"preExecute", XFA_ATTRIBUTEENUM_PreExecute}, - {0x33c43dec, L"docClose", XFA_ATTRIBUTEENUM_DocClose}, - {0x33f25bb5, L"keyset", XFA_ATTRIBUTEENUM_Keyset}, - {0x34e363da, L"vertical", XFA_ATTRIBUTEENUM_Vertical}, - {0x361fa1b6, L"preSave", XFA_ATTRIBUTEENUM_PreSave}, - {0x36f1c6d8, L"preSign", XFA_ATTRIBUTEENUM_PreSign}, - {0x399f02b5, L"bottom", XFA_ATTRIBUTEENUM_Bottom}, - {0x3b0ab096, L"toTop", XFA_ATTRIBUTEENUM_ToTop}, - {0x3c752495, L"verify", XFA_ATTRIBUTEENUM_Verify}, - {0x3ce05d68, L"first", XFA_ATTRIBUTEENUM_First}, - {0x3ecead94, L"contentArea", XFA_ATTRIBUTEENUM_ContentArea}, - {0x40623b5b, L"solid", XFA_ATTRIBUTEENUM_Solid}, - {0x42c6cd8d, L"pessimistic", XFA_ATTRIBUTEENUM_Pessimistic}, - {0x43ddc6bf, L"duplexPaginated", XFA_ATTRIBUTEENUM_DuplexPaginated}, - {0x442f68c8, L"round", XFA_ATTRIBUTEENUM_Round}, - {0x45efb847, L"remerge", XFA_ATTRIBUTEENUM_Remerge}, - {0x46972265, L"ordered", XFA_ATTRIBUTEENUM_Ordered}, - {0x46f95531, L"percent", XFA_ATTRIBUTEENUM_Percent}, - {0x46fd25ae, L"even", XFA_ATTRIBUTEENUM_Even}, - {0x4731d6ba, L"exit", XFA_ATTRIBUTEENUM_Exit}, - {0x4977356b, L"toolTip", XFA_ATTRIBUTEENUM_ToolTip}, - {0x49b980ee, L"orderedOccurrence", XFA_ATTRIBUTEENUM_OrderedOccurrence}, - {0x4a7e2dfe, L"readOnly", XFA_ATTRIBUTEENUM_ReadOnly}, - {0x4c4e8acb, L"currency", XFA_ATTRIBUTEENUM_Currency}, - {0x4dcf25f8, L"concat", XFA_ATTRIBUTEENUM_Concat}, - {0x4febb826, L"Thai", XFA_ATTRIBUTEENUM_Thai}, - {0x50ef95b2, L"embossed", XFA_ATTRIBUTEENUM_Embossed}, - {0x516e35ce, L"formdata", XFA_ATTRIBUTEENUM_Formdata}, - {0x52fa6f0e, L"Greek", XFA_ATTRIBUTEENUM_Greek}, - {0x54034c2f, L"decimal", XFA_ATTRIBUTEENUM_Decimal}, - {0x542c7300, L"select", XFA_ATTRIBUTEENUM_Select}, - {0x551f0ae5, L"longEdge", XFA_ATTRIBUTEENUM_LongEdge}, - {0x55520a8a, L"protected", XFA_ATTRIBUTEENUM_Protected}, - {0x559f76f3, L"bottomRight", XFA_ATTRIBUTEENUM_BottomRight}, - {0x568cb500, L"zero", XFA_ATTRIBUTEENUM_Zero}, - {0x56bcecb7, L"forwardOnly", XFA_ATTRIBUTEENUM_ForwardOnly}, - {0x56bf456b, L"docReady", XFA_ATTRIBUTEENUM_DocReady}, - {0x573cb40c, L"hidden", XFA_ATTRIBUTEENUM_Hidden}, - {0x582e3424, L"include", XFA_ATTRIBUTEENUM_Include}, - {0x58a3dd29, L"dashed", XFA_ATTRIBUTEENUM_Dashed}, - {0x5955b22b, L"multiSelect", XFA_ATTRIBUTEENUM_MultiSelect}, - {0x598d5c53, L"inactive", XFA_ATTRIBUTEENUM_Inactive}, - {0x59c8f27d, L"embed", XFA_ATTRIBUTEENUM_Embed}, - {0x5e7555e8, L"static", XFA_ATTRIBUTEENUM_Static}, - {0x606d4def, L"onEntry", XFA_ATTRIBUTEENUM_OnEntry}, - {0x6195eafb, L"Cyrillic", XFA_ATTRIBUTEENUM_Cyrillic}, - {0x6491b0f3, L"nonBlank", XFA_ATTRIBUTEENUM_NonBlank}, - {0x67bef031, L"topRight", XFA_ATTRIBUTEENUM_TopRight}, - {0x67df5ebd, L"Hebrew", XFA_ATTRIBUTEENUM_Hebrew}, - {0x6aea98be, L"topLeft", XFA_ATTRIBUTEENUM_TopLeft}, - {0x6c51afc1, L"center", XFA_ATTRIBUTEENUM_Center}, - {0x7145e6bf, L"moveFirst", XFA_ATTRIBUTEENUM_MoveFirst}, - {0x7375465c, L"diamond", XFA_ATTRIBUTEENUM_Diamond}, - {0x7461aef4, L"pageOdd", XFA_ATTRIBUTEENUM_PageOdd}, - {0x75f8aeb2, L"1mod10", XFA_ATTRIBUTEENUM_1mod10}, - {0x76d708e0, L"Korean", XFA_ATTRIBUTEENUM_Korean}, - {0x789f14d7, L"aboveEmbedded", XFA_ATTRIBUTEENUM_AboveEmbedded}, - {0x792ea39f, L"zipCompress", XFA_ATTRIBUTEENUM_ZipCompress}, - {0x7a5b7193, L"numeric", XFA_ATTRIBUTEENUM_Numeric}, - {0x7abec0d2, L"circle", XFA_ATTRIBUTEENUM_Circle}, - {0x7afbba38, L"toBottom", XFA_ATTRIBUTEENUM_ToBottom}, - {0x7b95e661, L"inverted", XFA_ATTRIBUTEENUM_Inverted}, - {0x7baca2e3, L"update", XFA_ATTRIBUTEENUM_Update}, - {0x7eb5da2c, L"isoname", XFA_ATTRIBUTEENUM_Isoname}, - {0x7f6fd3d7, L"server", XFA_ATTRIBUTEENUM_Server}, - {0x814f82b5, L"position", XFA_ATTRIBUTEENUM_Position}, - {0x82deacf0, L"middleCenter", XFA_ATTRIBUTEENUM_MiddleCenter}, - {0x83a49dc6, L"optional", XFA_ATTRIBUTEENUM_Optional}, - {0x861a116f, L"usePrinterSetting", XFA_ATTRIBUTEENUM_UsePrinterSetting}, - {0x86701ce0, L"outline", XFA_ATTRIBUTEENUM_Outline}, - {0x8808385e, L"indexChange", XFA_ATTRIBUTEENUM_IndexChange}, - {0x891f4606, L"change", XFA_ATTRIBUTEENUM_Change}, - {0x89939f36, L"pageArea", XFA_ATTRIBUTEENUM_PageArea}, - {0x8b5c3b25, L"once", XFA_ATTRIBUTEENUM_Once}, - {0x8b5c6962, L"only", XFA_ATTRIBUTEENUM_Only}, - {0x8b90e1f2, L"open", XFA_ATTRIBUTEENUM_Open}, - {0x8bcfe96e, L"caption", XFA_ATTRIBUTEENUM_Caption}, - {0x8ce83ef8, L"raised", XFA_ATTRIBUTEENUM_Raised}, - {0x8d269cae, L"justify", XFA_ATTRIBUTEENUM_Justify}, - {0x8fd520dc, L"refAndDescendants", XFA_ATTRIBUTEENUM_RefAndDescendants}, - {0x9041d4b0, L"short", XFA_ATTRIBUTEENUM_Short}, - {0x90c94426, L"pageFront", XFA_ATTRIBUTEENUM_PageFront}, - {0x936beee5, L"monospace", XFA_ATTRIBUTEENUM_Monospace}, - {0x947fa00f, L"middle", XFA_ATTRIBUTEENUM_Middle}, - {0x9528a7b4, L"prePrint", XFA_ATTRIBUTEENUM_PrePrint}, - {0x959ab231, L"always", XFA_ATTRIBUTEENUM_Always}, - {0x96d61bf0, L"unknown", XFA_ATTRIBUTEENUM_Unknown}, - {0x997194ee, L"toLeft", XFA_ATTRIBUTEENUM_ToLeft}, - {0x9a83a3cd, L"above", XFA_ATTRIBUTEENUM_Above}, - {0x9d0d71c7, L"dashDot", XFA_ATTRIBUTEENUM_DashDot}, - {0x9df56f3e, L"gregorian", XFA_ATTRIBUTEENUM_Gregorian}, - {0x9f6723fd, L"Roman", XFA_ATTRIBUTEENUM_Roman}, - {0x9f693b21, L"mouseDown", XFA_ATTRIBUTEENUM_MouseDown}, - {0xa1429b36, L"symbol", XFA_ATTRIBUTEENUM_Symbol}, - {0xa5aa45cb, L"pageEven", XFA_ATTRIBUTEENUM_PageEven}, - {0xa68635f1, L"sign", XFA_ATTRIBUTEENUM_Sign}, - {0xa7315093, L"addNew", XFA_ATTRIBUTEENUM_AddNew}, - {0xa7a773fa, L"star", XFA_ATTRIBUTEENUM_Star}, - {0xa7d57b45, L"optimistic", XFA_ATTRIBUTEENUM_Optimistic}, - {0xa8077321, L"rl-tb", XFA_ATTRIBUTEENUM_Rl_tb}, - {0xa8f1468d, L"middleRight", XFA_ATTRIBUTEENUM_MiddleRight}, - {0xaa84a1f1, L"maintain", XFA_ATTRIBUTEENUM_Maintain}, - {0xab40b12c, L"package", XFA_ATTRIBUTEENUM_Package}, - {0xac8b4d85, L"SimplifiedChinese", XFA_ATTRIBUTEENUM_SimplifiedChinese}, - {0xadae6744, L"toCenter", XFA_ATTRIBUTEENUM_ToCenter}, - {0xb0129df1, L"back", XFA_ATTRIBUTEENUM_Back}, - {0xb0f088cf, L"unspecified", XFA_ATTRIBUTEENUM_Unspecified}, - {0xb1271067, L"batchOptimistic", XFA_ATTRIBUTEENUM_BatchOptimistic}, - {0xb18313a1, L"bold", XFA_ATTRIBUTEENUM_Bold}, - {0xb1833cad, L"both", XFA_ATTRIBUTEENUM_Both}, - {0xb221123f, L"butt", XFA_ATTRIBUTEENUM_Butt}, - {0xb40c36bf, L"client", XFA_ATTRIBUTEENUM_Client}, - {0xb56c7053, L"2mod10", XFA_ATTRIBUTEENUM_2mod10}, - {0xb683a345, L"imageOnly", XFA_ATTRIBUTEENUM_ImageOnly}, - {0xb7732dea, L"horizontal", XFA_ATTRIBUTEENUM_Horizontal}, - {0xb88652a4, L"dotted", XFA_ATTRIBUTEENUM_Dotted}, - {0xbb2f2880, L"userControl", XFA_ATTRIBUTEENUM_UserControl}, - {0xbbb79c5d, L"diagonalRight", XFA_ATTRIBUTEENUM_DiagonalRight}, - {0xbd077154, L"consumeData", XFA_ATTRIBUTEENUM_ConsumeData}, - {0xbd3fb11e, L"check", XFA_ATTRIBUTEENUM_Check}, - {0xbde9abda, L"data", XFA_ATTRIBUTEENUM_Data}, - {0xbf5a02d8, L"down", XFA_ATTRIBUTEENUM_Down}, - {0xbf7450ee, L"sansSerif", XFA_ATTRIBUTEENUM_SansSerif}, - {0xc02d649f, L"inline", XFA_ATTRIBUTEENUM_Inline}, - {0xc11a9e3a, L"TraditionalChinese", XFA_ATTRIBUTEENUM_TraditionalChinese}, - {0xc16169d8, L"warn", XFA_ATTRIBUTEENUM_Warn}, - {0xc16f071f, L"refOnly", XFA_ATTRIBUTEENUM_RefOnly}, - {0xc27c8ba5, L"interactiveForms", XFA_ATTRIBUTEENUM_InteractiveForms}, - {0xc2d1b15c, L"word", XFA_ATTRIBUTEENUM_Word}, - {0xc3621288, L"unordered", XFA_ATTRIBUTEENUM_Unordered}, - {0xc5251981, L"required", XFA_ATTRIBUTEENUM_Required}, - {0xc7088e7d, L"importOnly", XFA_ATTRIBUTEENUM_ImportOnly}, - {0xc72cf0e3, L"belowEmbedded", XFA_ATTRIBUTEENUM_BelowEmbedded}, - {0xc819cf07, L"Japanese", XFA_ATTRIBUTEENUM_Japanese}, - {0xcdce56b3, L"full", XFA_ATTRIBUTEENUM_Full}, - {0xce0122e3, L"rl-row", XFA_ATTRIBUTEENUM_Rl_row}, - {0xcf7d71f1, L"Vietnamese", XFA_ATTRIBUTEENUM_Vietnamese}, - {0xcfde3e09, L"EastEuropeanRoman", XFA_ATTRIBUTEENUM_EastEuropeanRoman}, - {0xd576d08e, L"mouseUp", XFA_ATTRIBUTEENUM_MouseUp}, - {0xd7a92904, L"exportOnly", XFA_ATTRIBUTEENUM_ExportOnly}, - {0xd8ed1467, L"clear", XFA_ATTRIBUTEENUM_Clear}, - {0xd95657a6, L"click", XFA_ATTRIBUTEENUM_Click}, - {0xd96c7de5, L"base64", XFA_ATTRIBUTEENUM_Base64}, - {0xd9f47f36, L"close", XFA_ATTRIBUTEENUM_Close}, - {0xdb075bde, L"host", XFA_ATTRIBUTEENUM_Host}, - {0xdb103411, L"global", XFA_ATTRIBUTEENUM_Global}, - {0xdb647188, L"blank", XFA_ATTRIBUTEENUM_Blank}, - {0xdb9be968, L"table", XFA_ATTRIBUTEENUM_Table}, - {0xdf590fbb, L"import", XFA_ATTRIBUTEENUM_Import}, - {0xe0e573fb, L"custom", XFA_ATTRIBUTEENUM_Custom}, - {0xe0ecc79a, L"middleLeft", XFA_ATTRIBUTEENUM_MiddleLeft}, - {0xe1452019, L"postExecute", XFA_ATTRIBUTEENUM_PostExecute}, - {0xe1911d98, L"radix", XFA_ATTRIBUTEENUM_Radix}, - {0xe25fa7b8, L"postOpen", XFA_ATTRIBUTEENUM_PostOpen}, - {0xe28dce7e, L"enter", XFA_ATTRIBUTEENUM_Enter}, - {0xe2c44de4, L"ignore", XFA_ATTRIBUTEENUM_Ignore}, - {0xe2cd8c61, L"lr-tb", XFA_ATTRIBUTEENUM_Lr_tb}, - {0xe2da8336, L"fantasy", XFA_ATTRIBUTEENUM_Fantasy}, - {0xe31d5396, L"italic", XFA_ATTRIBUTEENUM_Italic}, - {0xe7ada113, L"author", XFA_ATTRIBUTEENUM_Author}, - {0xe8e7cc18, L"toEdge", XFA_ATTRIBUTEENUM_ToEdge}, - {0xe97aa98b, L"choice", XFA_ATTRIBUTEENUM_Choice}, - {0xeafd2a38, L"disabled", XFA_ATTRIBUTEENUM_Disabled}, - {0xeb2b7972, L"crossHatch", XFA_ATTRIBUTEENUM_CrossHatch}, - {0xeb2db2d7, L"dataRef", XFA_ATTRIBUTEENUM_DataRef}, - {0xec35dc6e, L"dashDotDot", XFA_ATTRIBUTEENUM_DashDotDot}, - {0xef85d351, L"square", XFA_ATTRIBUTEENUM_Square}, - {0xf2102445, L"dynamic", XFA_ATTRIBUTEENUM_Dynamic}, - {0xf272c7be, L"manual", XFA_ATTRIBUTEENUM_Manual}, - {0xf2bbb64d, L"etched", XFA_ATTRIBUTEENUM_Etched}, - {0xf3b8fc6c, L"validationState", XFA_ATTRIBUTEENUM_ValidationState}, - {0xf42f2b81, L"cursive", XFA_ATTRIBUTEENUM_Cursive}, - {0xf54481d4, L"last", XFA_ATTRIBUTEENUM_Last}, - {0xf5ad782b, L"left", XFA_ATTRIBUTEENUM_Left}, - {0xf616da2e, L"link", XFA_ATTRIBUTEENUM_Link}, - {0xf6b4afb0, L"long", XFA_ATTRIBUTEENUM_Long}, - {0xf8636460, L"internationalCarrier", - XFA_ATTRIBUTEENUM_InternationalCarrier}, - {0xf9fb37ac, L"PDF1.3", XFA_ATTRIBUTEENUM_PDF1_3}, - {0xf9fb37af, L"PDF1.6", XFA_ATTRIBUTEENUM_PDF1_6}, - {0xfbce7f19, L"serif", XFA_ATTRIBUTEENUM_Serif}, - {0xfc82d695, L"postSave", XFA_ATTRIBUTEENUM_PostSave}, - {0xfcef86b5, L"ready", XFA_ATTRIBUTEENUM_Ready}, - {0xfd54fbb7, L"postSign", XFA_ATTRIBUTEENUM_PostSign}, - {0xfdc0aae2, L"Arabic", XFA_ATTRIBUTEENUM_Arabic}, - {0xfe06d2ca, L"error", XFA_ATTRIBUTEENUM_Error}, - {0xfefc4885, L"urlencoded", XFA_ATTRIBUTEENUM_Urlencoded}, - {0xff795ad2, L"lowered", XFA_ATTRIBUTEENUM_Lowered}, -}; -const int32_t g_iXFAEnumCount = - sizeof(g_XFAEnumData) / sizeof(XFA_ATTRIBUTEENUMINFO); -static const CXFA_Measurement g_XFAMeasurementData[] = { - CXFA_Measurement(0, XFA_UNIT_In), - CXFA_Measurement(0, XFA_UNIT_Pt), - CXFA_Measurement(5, XFA_UNIT_Mm), - CXFA_Measurement(0.25, XFA_UNIT_Mm), - CXFA_Measurement(-1, XFA_UNIT_Unknown), - CXFA_Measurement(0, XFA_UNIT_Angle), - CXFA_Measurement(10, XFA_UNIT_Pt), - CXFA_Measurement(360, XFA_UNIT_Angle), - CXFA_Measurement(0.5, XFA_UNIT_Pt), -}; -const XFA_ATTRIBUTEINFO g_XFAAttributeData[] = { - {0x68, L"h", XFA_ATTRIBUTE_H, XFA_ATTRIBUTETYPE_Measure, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)(g_XFAMeasurementData + 0)}, - {0x77, L"w", XFA_ATTRIBUTE_W, XFA_ATTRIBUTETYPE_Measure, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)(g_XFAMeasurementData + 0)}, - {0x78, L"x", XFA_ATTRIBUTE_X, XFA_ATTRIBUTETYPE_Measure, - XFA_XDPPACKET_Config | XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)(g_XFAMeasurementData + 0)}, - {0x79, L"y", XFA_ATTRIBUTE_Y, XFA_ATTRIBUTETYPE_Measure, - XFA_XDPPACKET_Config | XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)(g_XFAMeasurementData + 0)}, - {0x21aed, L"id", XFA_ATTRIBUTE_Id, XFA_ATTRIBUTETYPE_Cdata, - XFA_XDPPACKET_SourceSet | XFA_XDPPACKET_Template | - XFA_XDPPACKET_ConnectionSet | XFA_XDPPACKET_Form, - (void*)NULL}, - {0x25363, L"to", XFA_ATTRIBUTE_To, XFA_ATTRIBUTETYPE_Cdata, - XFA_XDPPACKET_Config, (void*)NULL}, - {0xcb0ac9, L"lineThrough", XFA_ATTRIBUTE_LineThrough, - XFA_ATTRIBUTETYPE_Integer, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)0}, - {0x2282c73, L"hAlign", XFA_ATTRIBUTE_HAlign, XFA_ATTRIBUTETYPE_Enum, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)XFA_ATTRIBUTEENUM_Left}, - {0x2c1c7f1, L"typeface", XFA_ATTRIBUTE_Typeface, XFA_ATTRIBUTETYPE_Cdata, - XFA_XDPPACKET_Config | XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)L"Courier"}, - {0x3106c3a, L"beforeTarget", XFA_ATTRIBUTE_BeforeTarget, - XFA_ATTRIBUTETYPE_Cdata, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)NULL}, - {0x31b19c1, L"name", XFA_ATTRIBUTE_Name, XFA_ATTRIBUTETYPE_NOTSURE, - XFA_XDPPACKET_SourceSet | XFA_XDPPACKET_Config | XFA_XDPPACKET_LocaleSet | - XFA_XDPPACKET_Template | XFA_XDPPACKET_Datasets | XFA_XDPPACKET_Form | - XFA_XDPPACKET_ConnectionSet | XFA_XDPPACKET_Form, - (void*)NULL}, - {0x3848b3f, L"next", XFA_ATTRIBUTE_Next, XFA_ATTRIBUTETYPE_Enum, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)XFA_ATTRIBUTEENUM_None}, - {0x43e349b, L"dataRowCount", XFA_ATTRIBUTE_DataRowCount, - XFA_ATTRIBUTETYPE_Cdata, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)NULL}, - {0x5518c25, L"break", XFA_ATTRIBUTE_Break, XFA_ATTRIBUTETYPE_Enum, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)XFA_ATTRIBUTEENUM_Close}, - {0x5ce6195, L"vScrollPolicy", XFA_ATTRIBUTE_VScrollPolicy, - XFA_ATTRIBUTETYPE_Enum, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)XFA_ATTRIBUTEENUM_Auto}, - {0x8c74ae9, L"fontHorizontalScale", XFA_ATTRIBUTE_FontHorizontalScale, - XFA_ATTRIBUTETYPE_Cdata, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)L"100%"}, - {0x8d4f1c7, L"textIndent", XFA_ATTRIBUTE_TextIndent, - XFA_ATTRIBUTETYPE_Measure, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)(g_XFAMeasurementData + 0)}, - {0x97c1c65, L"context", XFA_ATTRIBUTE_Context, XFA_ATTRIBUTETYPE_Integer, - XFA_XDPPACKET_UNKNOWN, (void*)0}, - {0x9876578, L"trayOut", XFA_ATTRIBUTE_TrayOut, XFA_ATTRIBUTETYPE_Enum, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)XFA_ATTRIBUTEENUM_Auto}, - {0xa2e3514, L"cap", XFA_ATTRIBUTE_Cap, XFA_ATTRIBUTETYPE_Enum, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)XFA_ATTRIBUTEENUM_Square}, - {0xb3543a6, L"max", XFA_ATTRIBUTE_Max, XFA_ATTRIBUTETYPE_NOTSURE, - XFA_XDPPACKET_SourceSet | XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)NULL}, - {0xb356ca4, L"min", XFA_ATTRIBUTE_Min, XFA_ATTRIBUTETYPE_Integer, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, (void*)1}, - {0xbb8df5d, L"ref", XFA_ATTRIBUTE_Ref, XFA_ATTRIBUTETYPE_Cdata, - XFA_XDPPACKET_SourceSet | XFA_XDPPACKET_Config | XFA_XDPPACKET_Template | - XFA_XDPPACKET_Form, - (void*)NULL}, - {0xbb8f3df, L"rid", XFA_ATTRIBUTE_Rid, XFA_ATTRIBUTETYPE_Cdata, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, (void*)NULL}, - {0xc080cd3, L"url", XFA_ATTRIBUTE_Url, XFA_ATTRIBUTETYPE_Cdata, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, (void*)NULL}, - {0xc0811ed, L"use", XFA_ATTRIBUTE_Use, XFA_ATTRIBUTETYPE_Cdata, - XFA_XDPPACKET_SourceSet | XFA_XDPPACKET_Template | - XFA_XDPPACKET_ConnectionSet | XFA_XDPPACKET_Form, - (void*)NULL}, - {0xcfea02e, L"leftInset", XFA_ATTRIBUTE_LeftInset, - XFA_ATTRIBUTETYPE_Measure, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)(g_XFAMeasurementData + 0)}, - {0x1026c59d, L"widows", XFA_ATTRIBUTE_Widows, XFA_ATTRIBUTETYPE_Integer, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, (void*)0}, - {0x1059ec18, L"level", XFA_ATTRIBUTE_Level, XFA_ATTRIBUTETYPE_Integer, - XFA_XDPPACKET_Config, (void*)0}, - {0x1356caf8, L"bottomInset", XFA_ATTRIBUTE_BottomInset, - XFA_ATTRIBUTETYPE_Measure, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)(g_XFAMeasurementData + 0)}, - {0x13a08bdb, L"overflowTarget", XFA_ATTRIBUTE_OverflowTarget, - XFA_ATTRIBUTETYPE_Cdata, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)NULL}, - {0x1414d431, L"allowMacro", XFA_ATTRIBUTE_AllowMacro, - XFA_ATTRIBUTETYPE_Boolean, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)0}, - {0x14a32d52, L"pagePosition", XFA_ATTRIBUTE_PagePosition, - XFA_ATTRIBUTETYPE_Enum, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)XFA_ATTRIBUTEENUM_Any}, - {0x1517dfa1, L"columnWidths", XFA_ATTRIBUTE_ColumnWidths, - XFA_ATTRIBUTETYPE_Cdata, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)NULL}, - {0x169134a1, L"overflowLeader", XFA_ATTRIBUTE_OverflowLeader, - XFA_ATTRIBUTETYPE_Cdata, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)NULL}, - {0x1b8dce3e, L"action", XFA_ATTRIBUTE_Action, XFA_ATTRIBUTETYPE_Enum, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)XFA_ATTRIBUTEENUM_Include}, - {0x1e459b8f, L"nonRepudiation", XFA_ATTRIBUTE_NonRepudiation, - XFA_ATTRIBUTETYPE_Cdata, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)NULL}, - {0x1ec8ab2c, L"rate", XFA_ATTRIBUTE_Rate, XFA_ATTRIBUTETYPE_Integer, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, (void*)50}, - {0x1ef3a64a, L"allowRichText", XFA_ATTRIBUTE_AllowRichText, - XFA_ATTRIBUTETYPE_Boolean, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)0}, - {0x2038c9b2, L"role", XFA_ATTRIBUTE_Role, XFA_ATTRIBUTETYPE_Cdata, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, (void*)NULL}, - {0x20914367, L"overflowTrailer", XFA_ATTRIBUTE_OverflowTrailer, - XFA_ATTRIBUTETYPE_Cdata, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)NULL}, - {0x226ca8f1, L"operation", XFA_ATTRIBUTE_Operation, - XFA_ATTRIBUTETYPE_NOTSURE, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)NULL}, - {0x24d85167, L"timeout", XFA_ATTRIBUTE_Timeout, XFA_ATTRIBUTETYPE_NOTSURE, - XFA_XDPPACKET_SourceSet, (void*)NULL}, - {0x25764436, L"topInset", XFA_ATTRIBUTE_TopInset, XFA_ATTRIBUTETYPE_Measure, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)(g_XFAMeasurementData + 0)}, - {0x25839852, L"access", XFA_ATTRIBUTE_Access, XFA_ATTRIBUTETYPE_Enum, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)XFA_ATTRIBUTEENUM_Open}, - {0x268b7ec1, L"commandType", XFA_ATTRIBUTE_CommandType, - XFA_ATTRIBUTETYPE_Enum, XFA_XDPPACKET_SourceSet, - (void*)XFA_ATTRIBUTEENUM_Unknown}, - {0x28dee6e9, L"format", XFA_ATTRIBUTE_Format, XFA_ATTRIBUTETYPE_NOTSURE, - XFA_XDPPACKET_Config | XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)NULL}, - {0x28e17e91, L"dataPrep", XFA_ATTRIBUTE_DataPrep, XFA_ATTRIBUTETYPE_Enum, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)XFA_ATTRIBUTEENUM_None}, - {0x292b88fe, L"widgetData", XFA_ATTRIBUTE_WidgetData, - XFA_ATTRIBUTETYPE_Integer, XFA_XDPPACKET_UNKNOWN, (void*)0}, - {0x29418bb7, L"abbr", XFA_ATTRIBUTE_Abbr, XFA_ATTRIBUTETYPE_Boolean, - XFA_XDPPACKET_LocaleSet, (void*)0}, - {0x2a82d99c, L"marginRight", XFA_ATTRIBUTE_MarginRight, - XFA_ATTRIBUTETYPE_Measure, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)(g_XFAMeasurementData + 0)}, - {0x2b5df51e, L"dataDescription", XFA_ATTRIBUTE_DataDescription, - XFA_ATTRIBUTETYPE_Cdata, XFA_XDPPACKET_ConnectionSet, (void*)NULL}, - {0x2bb3f470, L"encipherOnly", XFA_ATTRIBUTE_EncipherOnly, - XFA_ATTRIBUTETYPE_Cdata, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)NULL}, - {0x2cd79033, L"kerningMode", XFA_ATTRIBUTE_KerningMode, - XFA_ATTRIBUTETYPE_Enum, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)XFA_ATTRIBUTEENUM_None}, - {0x2ee7678f, L"rotate", XFA_ATTRIBUTE_Rotate, XFA_ATTRIBUTETYPE_Measure, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)(g_XFAMeasurementData + 5)}, - {0x2f105f72, L"wordCharacterCount", XFA_ATTRIBUTE_WordCharacterCount, - XFA_ATTRIBUTETYPE_Integer, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)7}, - {0x2f16a382, L"type", XFA_ATTRIBUTE_Type, XFA_ATTRIBUTETYPE_NOTSURE, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, (void*)NULL}, - {0x34ae103c, L"reserve", XFA_ATTRIBUTE_Reserve, XFA_ATTRIBUTETYPE_Measure, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)(g_XFAMeasurementData + 4)}, - {0x3650557e, L"textLocation", XFA_ATTRIBUTE_TextLocation, - XFA_ATTRIBUTETYPE_Enum, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)XFA_ATTRIBUTEENUM_Below}, - {0x39cdb0a2, L"priority", XFA_ATTRIBUTE_Priority, XFA_ATTRIBUTETYPE_Enum, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)XFA_ATTRIBUTEENUM_Custom}, - {0x3a0273a6, L"underline", XFA_ATTRIBUTE_Underline, - XFA_ATTRIBUTETYPE_Integer, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)0}, - {0x3b582286, L"moduleWidth", XFA_ATTRIBUTE_ModuleWidth, - XFA_ATTRIBUTETYPE_Measure, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)(g_XFAMeasurementData + 3)}, - {0x3d123c26, L"hyphenate", XFA_ATTRIBUTE_Hyphenate, - XFA_ATTRIBUTETYPE_Boolean, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)0}, - {0x3e7af94f, L"listen", XFA_ATTRIBUTE_Listen, XFA_ATTRIBUTETYPE_Enum, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)XFA_ATTRIBUTEENUM_RefOnly}, - {0x4156ee3f, L"delimiter", XFA_ATTRIBUTE_Delimiter, XFA_ATTRIBUTETYPE_Cdata, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, (void*)NULL}, - {0x42fed1fd, L"contentType", XFA_ATTRIBUTE_ContentType, - XFA_ATTRIBUTETYPE_Cdata, XFA_XDPPACKET_SourceSet | XFA_XDPPACKET_Template | - XFA_XDPPACKET_Datasets | XFA_XDPPACKET_Form, - (void*)NULL}, - {0x453eaf38, L"startNew", XFA_ATTRIBUTE_StartNew, XFA_ATTRIBUTETYPE_Boolean, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, (void*)0}, - {0x45a6daf8, L"eofAction", XFA_ATTRIBUTE_EofAction, XFA_ATTRIBUTETYPE_Enum, - XFA_XDPPACKET_SourceSet, (void*)XFA_ATTRIBUTEENUM_MoveLast}, - {0x47cfa43a, L"allowNeutral", XFA_ATTRIBUTE_AllowNeutral, - XFA_ATTRIBUTETYPE_Boolean, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)0}, - {0x47d03490, L"connection", XFA_ATTRIBUTE_Connection, - XFA_ATTRIBUTETYPE_Cdata, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)NULL}, - {0x4873c601, L"baselineShift", XFA_ATTRIBUTE_BaselineShift, - XFA_ATTRIBUTETYPE_Measure, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)(g_XFAMeasurementData + 0)}, - {0x4b319767, L"overlinePeriod", XFA_ATTRIBUTE_OverlinePeriod, - XFA_ATTRIBUTETYPE_Enum, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)XFA_ATTRIBUTEENUM_All}, - {0x4b8bc840, L"fracDigits", XFA_ATTRIBUTE_FracDigits, - XFA_ATTRIBUTETYPE_Integer, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)2}, - {0x4ef3d02c, L"orientation", XFA_ATTRIBUTE_Orientation, - XFA_ATTRIBUTETYPE_Enum, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)XFA_ATTRIBUTEENUM_Portrait}, - {0x4fdc3454, L"timeStamp", XFA_ATTRIBUTE_TimeStamp, XFA_ATTRIBUTETYPE_Cdata, - XFA_XDPPACKET_XDP, (void*)NULL}, - {0x52666f1c, L"printCheckDigit", XFA_ATTRIBUTE_PrintCheckDigit, - XFA_ATTRIBUTETYPE_Boolean, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)0}, - {0x534729c9, L"marginLeft", XFA_ATTRIBUTE_MarginLeft, - XFA_ATTRIBUTETYPE_Measure, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)(g_XFAMeasurementData + 0)}, - {0x5392ea58, L"stroke", XFA_ATTRIBUTE_Stroke, XFA_ATTRIBUTETYPE_Enum, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)XFA_ATTRIBUTEENUM_Solid}, - {0x5404d6df, L"moduleHeight", XFA_ATTRIBUTE_ModuleHeight, - XFA_ATTRIBUTETYPE_Measure, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)(g_XFAMeasurementData + 2)}, - {0x54fa722c, L"transferEncoding", XFA_ATTRIBUTE_TransferEncoding, - XFA_ATTRIBUTETYPE_NOTSURE, - XFA_XDPPACKET_SourceSet | XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)NULL}, - {0x552d9ad5, L"usage", XFA_ATTRIBUTE_Usage, XFA_ATTRIBUTETYPE_Enum, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)XFA_ATTRIBUTEENUM_ExportAndImport}, - {0x570ce835, L"presence", XFA_ATTRIBUTE_Presence, XFA_ATTRIBUTETYPE_Enum, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)XFA_ATTRIBUTEENUM_Visible}, - {0x5739d1ff, L"radixOffset", XFA_ATTRIBUTE_RadixOffset, - XFA_ATTRIBUTETYPE_Measure, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)(g_XFAMeasurementData + 0)}, - {0x577682ac, L"preserve", XFA_ATTRIBUTE_Preserve, XFA_ATTRIBUTETYPE_Cdata, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, (void*)NULL}, - {0x58be2870, L"aliasNode", XFA_ATTRIBUTE_AliasNode, - XFA_ATTRIBUTETYPE_Integer, XFA_XDPPACKET_UNKNOWN, (void*)0}, - {0x5a32e493, L"multiLine", XFA_ATTRIBUTE_MultiLine, - XFA_ATTRIBUTETYPE_Boolean, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)0}, - {0x5a50e9e6, L"version", XFA_ATTRIBUTE_Version, XFA_ATTRIBUTETYPE_Cdata, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, (void*)NULL}, - {0x5ab23b6c, L"startChar", XFA_ATTRIBUTE_StartChar, XFA_ATTRIBUTETYPE_Cdata, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, (void*)NULL}, - {0x5b707a35, L"scriptTest", XFA_ATTRIBUTE_ScriptTest, - XFA_ATTRIBUTETYPE_Enum, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)XFA_ATTRIBUTEENUM_Error}, - {0x5c054755, L"startAngle", XFA_ATTRIBUTE_StartAngle, - XFA_ATTRIBUTETYPE_Measure, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)(g_XFAMeasurementData + 5)}, - {0x5ec958c0, L"cursorType", XFA_ATTRIBUTE_CursorType, - XFA_ATTRIBUTETYPE_Enum, XFA_XDPPACKET_SourceSet, - (void*)XFA_ATTRIBUTEENUM_ForwardOnly}, - {0x5f760b50, L"digitalSignature", XFA_ATTRIBUTE_DigitalSignature, - XFA_ATTRIBUTETYPE_Cdata, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)NULL}, - {0x60a61edd, L"codeType", XFA_ATTRIBUTE_CodeType, XFA_ATTRIBUTETYPE_Cdata, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, (void*)NULL}, - {0x60d4c8b1, L"output", XFA_ATTRIBUTE_Output, XFA_ATTRIBUTETYPE_Cdata, - XFA_XDPPACKET_ConnectionSet, (void*)NULL}, - {0x64110ab5, L"bookendTrailer", XFA_ATTRIBUTE_BookendTrailer, - XFA_ATTRIBUTETYPE_Cdata, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)NULL}, - {0x65e30c67, L"imagingBBox", XFA_ATTRIBUTE_ImagingBBox, - XFA_ATTRIBUTETYPE_Cdata, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)L"none"}, - {0x66539c48, L"excludeInitialCap", XFA_ATTRIBUTE_ExcludeInitialCap, - XFA_ATTRIBUTETYPE_Boolean, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)0}, - {0x66642f8f, L"force", XFA_ATTRIBUTE_Force, XFA_ATTRIBUTETYPE_Boolean, - XFA_XDPPACKET_Config, (void*)NULL}, - {0x69aa2292, L"crlSign", XFA_ATTRIBUTE_CrlSign, XFA_ATTRIBUTETYPE_Cdata, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, (void*)NULL}, - {0x6a3405dd, L"previous", XFA_ATTRIBUTE_Previous, XFA_ATTRIBUTETYPE_Enum, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)XFA_ATTRIBUTEENUM_None}, - {0x6a95c976, L"pushCharacterCount", XFA_ATTRIBUTE_PushCharacterCount, - XFA_ATTRIBUTETYPE_Integer, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)3}, - {0x6b6ddcfb, L"nullTest", XFA_ATTRIBUTE_NullTest, XFA_ATTRIBUTETYPE_Enum, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)XFA_ATTRIBUTEENUM_Disabled}, - {0x6cfa828a, L"runAt", XFA_ATTRIBUTE_RunAt, XFA_ATTRIBUTETYPE_Enum, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)XFA_ATTRIBUTEENUM_Client}, - {0x731e0665, L"spaceBelow", XFA_ATTRIBUTE_SpaceBelow, - XFA_ATTRIBUTETYPE_Measure, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)(g_XFAMeasurementData + 0)}, - {0x74788f8b, L"sweepAngle", XFA_ATTRIBUTE_SweepAngle, - XFA_ATTRIBUTETYPE_Measure, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)(g_XFAMeasurementData + 7)}, - {0x78bff531, L"numberOfCells", XFA_ATTRIBUTE_NumberOfCells, - XFA_ATTRIBUTETYPE_Integer, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)0}, - {0x79543055, L"letterSpacing", XFA_ATTRIBUTE_LetterSpacing, - XFA_ATTRIBUTETYPE_Cdata, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)NULL}, - {0x79975f2b, L"lockType", XFA_ATTRIBUTE_LockType, XFA_ATTRIBUTETYPE_Enum, - XFA_XDPPACKET_SourceSet, (void*)XFA_ATTRIBUTEENUM_ReadOnly}, - {0x7a0cc471, L"passwordChar", XFA_ATTRIBUTE_PasswordChar, - XFA_ATTRIBUTETYPE_Cdata, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)L"*"}, - {0x7a7cc341, L"vAlign", XFA_ATTRIBUTE_VAlign, XFA_ATTRIBUTETYPE_Enum, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, (void*)XFA_ATTRIBUTEENUM_Top}, - {0x7b29630a, L"sourceBelow", XFA_ATTRIBUTE_SourceBelow, - XFA_ATTRIBUTETYPE_Enum, XFA_XDPPACKET_Config, - (void*)XFA_ATTRIBUTEENUM_Update}, - {0x7b95e661, L"inverted", XFA_ATTRIBUTE_Inverted, XFA_ATTRIBUTETYPE_Boolean, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, (void*)0}, - {0x7c2fd80b, L"mark", XFA_ATTRIBUTE_Mark, XFA_ATTRIBUTETYPE_Enum, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)XFA_ATTRIBUTEENUM_Default}, - {0x7c2ff6ae, L"maxH", XFA_ATTRIBUTE_MaxH, XFA_ATTRIBUTETYPE_Measure, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)(g_XFAMeasurementData + 0)}, - {0x7c2ff6bd, L"maxW", XFA_ATTRIBUTE_MaxW, XFA_ATTRIBUTETYPE_Measure, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)(g_XFAMeasurementData + 0)}, - {0x7c732a66, L"truncate", XFA_ATTRIBUTE_Truncate, XFA_ATTRIBUTETYPE_Boolean, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, (void*)0}, - {0x7d02356c, L"minH", XFA_ATTRIBUTE_MinH, XFA_ATTRIBUTETYPE_Measure, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)(g_XFAMeasurementData + 0)}, - {0x7d02357b, L"minW", XFA_ATTRIBUTE_MinW, XFA_ATTRIBUTETYPE_Measure, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)(g_XFAMeasurementData + 0)}, - {0x7d0b5fca, L"initial", XFA_ATTRIBUTE_Initial, XFA_ATTRIBUTETYPE_Integer, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, (void*)1}, - {0x7d9fd7c5, L"mode", XFA_ATTRIBUTE_Mode, XFA_ATTRIBUTETYPE_Enum, - XFA_XDPPACKET_Config, (void*)XFA_ATTRIBUTEENUM_UsePrinterSetting}, - {0x7e7e845e, L"layout", XFA_ATTRIBUTE_Layout, XFA_ATTRIBUTETYPE_Enum, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)XFA_ATTRIBUTEENUM_Position}, - {0x7f6fd3d7, L"server", XFA_ATTRIBUTE_Server, XFA_ATTRIBUTETYPE_Cdata, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, (void*)NULL}, - {0x824f21b7, L"embedPDF", XFA_ATTRIBUTE_EmbedPDF, XFA_ATTRIBUTETYPE_Boolean, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, (void*)0}, - {0x8340ea66, L"oddOrEven", XFA_ATTRIBUTE_OddOrEven, XFA_ATTRIBUTETYPE_Enum, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, (void*)XFA_ATTRIBUTEENUM_Any}, - {0x836d4d7c, L"tabDefault", XFA_ATTRIBUTE_TabDefault, - XFA_ATTRIBUTETYPE_Cdata, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)NULL}, - {0x8855805f, L"contains", XFA_ATTRIBUTE_Contains, XFA_ATTRIBUTETYPE_Enum, - XFA_XDPPACKET_Datasets, (void*)XFA_ATTRIBUTEENUM_Data}, - {0x8a692521, L"rightInset", XFA_ATTRIBUTE_RightInset, - XFA_ATTRIBUTETYPE_Measure, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)(g_XFAMeasurementData + 0)}, - {0x8af2e657, L"maxChars", XFA_ATTRIBUTE_MaxChars, XFA_ATTRIBUTETYPE_Integer, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, (void*)0}, - {0x8b90e1f2, L"open", XFA_ATTRIBUTE_Open, XFA_ATTRIBUTETYPE_Enum, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)XFA_ATTRIBUTEENUM_UserControl}, - {0x8c99377e, L"relation", XFA_ATTRIBUTE_Relation, XFA_ATTRIBUTETYPE_NOTSURE, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, (void*)NULL}, - {0x8d181d61, L"wideNarrowRatio", XFA_ATTRIBUTE_WideNarrowRatio, - XFA_ATTRIBUTETYPE_Cdata, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)L"3:1"}, - {0x8e1c2921, L"relevant", XFA_ATTRIBUTE_Relevant, XFA_ATTRIBUTETYPE_Cdata, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, (void*)NULL}, - {0x8e29d794, L"signatureType", XFA_ATTRIBUTE_SignatureType, - XFA_ATTRIBUTETYPE_Enum, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)XFA_ATTRIBUTEENUM_Filter}, - {0x8ec6204c, L"lineThroughPeriod", XFA_ATTRIBUTE_LineThroughPeriod, - XFA_ATTRIBUTETYPE_Enum, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)XFA_ATTRIBUTEENUM_All}, - {0x8ed182d1, L"shape", XFA_ATTRIBUTE_Shape, XFA_ATTRIBUTETYPE_Enum, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)XFA_ATTRIBUTEENUM_Square}, - {0x8fa01790, L"tabStops", XFA_ATTRIBUTE_TabStops, XFA_ATTRIBUTETYPE_Cdata, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, (void*)NULL}, - {0x8fc36c0a, L"outputBelow", XFA_ATTRIBUTE_OutputBelow, - XFA_ATTRIBUTETYPE_Enum, XFA_XDPPACKET_Config, - (void*)XFA_ATTRIBUTEENUM_Warn}, - {0x9041d4b0, L"short", XFA_ATTRIBUTE_Short, XFA_ATTRIBUTETYPE_Measure, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)(g_XFAMeasurementData + 0)}, - {0x907c7719, L"fontVerticalScale", XFA_ATTRIBUTE_FontVerticalScale, - XFA_ATTRIBUTETYPE_Cdata, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)L"100%"}, - {0x94446dcc, L"thickness", XFA_ATTRIBUTE_Thickness, - XFA_ATTRIBUTETYPE_Measure, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)(g_XFAMeasurementData + 8)}, - {0x957fa006, L"commitOn", XFA_ATTRIBUTE_CommitOn, XFA_ATTRIBUTETYPE_Enum, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)XFA_ATTRIBUTEENUM_Select}, - {0x982bd892, L"remainCharacterCount", XFA_ATTRIBUTE_RemainCharacterCount, - XFA_ATTRIBUTETYPE_Integer, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)3}, - {0x98fd4d81, L"keyAgreement", XFA_ATTRIBUTE_KeyAgreement, - XFA_ATTRIBUTETYPE_Cdata, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)NULL}, - {0x99800d7a, L"errorCorrectionLevel", XFA_ATTRIBUTE_ErrorCorrectionLevel, - XFA_ATTRIBUTETYPE_Cdata, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)NULL}, - {0x9a63da3d, L"upsMode", XFA_ATTRIBUTE_UpsMode, XFA_ATTRIBUTETYPE_Enum, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)XFA_ATTRIBUTEENUM_UsCarrier}, - {0x9cc17d75, L"mergeMode", XFA_ATTRIBUTE_MergeMode, XFA_ATTRIBUTETYPE_Enum, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)XFA_ATTRIBUTEENUM_ConsumeData}, - {0x9d833d75, L"circular", XFA_ATTRIBUTE_Circular, XFA_ATTRIBUTETYPE_Boolean, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, (void*)0}, - {0x9d8ee204, L"psName", XFA_ATTRIBUTE_PsName, XFA_ATTRIBUTETYPE_Cdata, - XFA_XDPPACKET_Config, (void*)NULL}, - {0x9dcc3ab3, L"trailer", XFA_ATTRIBUTE_Trailer, XFA_ATTRIBUTETYPE_Cdata, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, (void*)NULL}, - {0xa0933954, L"unicodeRange", XFA_ATTRIBUTE_UnicodeRange, - XFA_ATTRIBUTETYPE_Cdata, XFA_XDPPACKET_Config, (void*)NULL}, - {0xa1b0d2f5, L"executeType", XFA_ATTRIBUTE_ExecuteType, - XFA_ATTRIBUTETYPE_Enum, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)XFA_ATTRIBUTEENUM_Import}, - {0xa25a883d, L"duplexImposition", XFA_ATTRIBUTE_DuplexImposition, - XFA_ATTRIBUTETYPE_Enum, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)XFA_ATTRIBUTEENUM_LongEdge}, - {0xa42ca1b7, L"trayIn", XFA_ATTRIBUTE_TrayIn, XFA_ATTRIBUTETYPE_Enum, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)XFA_ATTRIBUTEENUM_Auto}, - {0xa433f001, L"bindingNode", XFA_ATTRIBUTE_BindingNode, - XFA_ATTRIBUTETYPE_Integer, XFA_XDPPACKET_UNKNOWN, (void*)0}, - {0xa5340ff5, L"bofAction", XFA_ATTRIBUTE_BofAction, XFA_ATTRIBUTETYPE_Enum, - XFA_XDPPACKET_SourceSet, (void*)XFA_ATTRIBUTEENUM_MoveFirst}, - {0xa5b410cf, L"save", XFA_ATTRIBUTE_Save, XFA_ATTRIBUTETYPE_Boolean, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, (void*)0}, - {0xa6118c89, L"targetType", XFA_ATTRIBUTE_TargetType, - XFA_ATTRIBUTETYPE_Enum, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)XFA_ATTRIBUTEENUM_Auto}, - {0xa66404cb, L"keyEncipherment", XFA_ATTRIBUTE_KeyEncipherment, - XFA_ATTRIBUTETYPE_Cdata, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)NULL}, - {0xa6710262, L"credentialServerPolicy", - XFA_ATTRIBUTE_CredentialServerPolicy, XFA_ATTRIBUTETYPE_Enum, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)XFA_ATTRIBUTEENUM_Optional}, - {0xa686975b, L"size", XFA_ATTRIBUTE_Size, XFA_ATTRIBUTETYPE_Measure, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)(g_XFAMeasurementData + 6)}, - {0xa85e74f3, L"initialNumber", XFA_ATTRIBUTE_InitialNumber, - XFA_ATTRIBUTETYPE_Integer, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)1}, - {0xabef37e3, L"slope", XFA_ATTRIBUTE_Slope, XFA_ATTRIBUTETYPE_Enum, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)XFA_ATTRIBUTEENUM_Backslash}, - {0xabfa6c4f, L"cSpace", XFA_ATTRIBUTE_CSpace, XFA_ATTRIBUTETYPE_Cdata, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, (void*)L"SRGB"}, - {0xac06e2b0, L"colSpan", XFA_ATTRIBUTE_ColSpan, XFA_ATTRIBUTETYPE_Integer, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, (void*)1}, - {0xadc4c77b, L"binding", XFA_ATTRIBUTE_Binding, XFA_ATTRIBUTETYPE_Cdata, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, (void*)NULL}, - {0xaf754613, L"checksum", XFA_ATTRIBUTE_Checksum, XFA_ATTRIBUTETYPE_NOTSURE, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form | XFA_XDPPACKET_Form, - (void*)NULL}, - {0xb045fbc5, L"charEncoding", XFA_ATTRIBUTE_CharEncoding, - XFA_ATTRIBUTETYPE_Cdata, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)L"UTF-8"}, - {0xb0e5485d, L"bind", XFA_ATTRIBUTE_Bind, XFA_ATTRIBUTETYPE_Cdata, - XFA_XDPPACKET_SourceSet, (void*)NULL}, - {0xb12128b7, L"textEntry", XFA_ATTRIBUTE_TextEntry, - XFA_ATTRIBUTETYPE_Boolean, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)0}, - {0xb373a862, L"archive", XFA_ATTRIBUTE_Archive, XFA_ATTRIBUTETYPE_Cdata, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, (void*)NULL}, - {0xb598a1f7, L"uuid", XFA_ATTRIBUTE_Uuid, XFA_ATTRIBUTETYPE_Cdata, - XFA_XDPPACKET_XDP, (void*)NULL}, - {0xb5e49bf2, L"posture", XFA_ATTRIBUTE_Posture, XFA_ATTRIBUTETYPE_Enum, - XFA_XDPPACKET_Config | XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)XFA_ATTRIBUTEENUM_Normal}, - {0xb6b44172, L"after", XFA_ATTRIBUTE_After, XFA_ATTRIBUTETYPE_Enum, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)XFA_ATTRIBUTEENUM_Auto}, - {0xb716467b, L"orphans", XFA_ATTRIBUTE_Orphans, XFA_ATTRIBUTETYPE_Integer, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, (void*)0}, - {0xbc0c4695, L"qualifiedName", XFA_ATTRIBUTE_QualifiedName, - XFA_ATTRIBUTETYPE_Cdata, XFA_XDPPACKET_UNKNOWN, (void*)NULL}, - {0xbc254332, L"usehref", XFA_ATTRIBUTE_Usehref, XFA_ATTRIBUTETYPE_Cdata, - XFA_XDPPACKET_SourceSet | XFA_XDPPACKET_Template | - XFA_XDPPACKET_ConnectionSet | XFA_XDPPACKET_Form, - (void*)NULL}, - {0xbc8fa350, L"locale", XFA_ATTRIBUTE_Locale, XFA_ATTRIBUTETYPE_Cdata, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, (void*)NULL}, - {0xbd6e1d88, L"weight", XFA_ATTRIBUTE_Weight, XFA_ATTRIBUTETYPE_Enum, - XFA_XDPPACKET_Config | XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)XFA_ATTRIBUTEENUM_Normal}, - {0xbd96a0e9, L"underlinePeriod", XFA_ATTRIBUTE_UnderlinePeriod, - XFA_ATTRIBUTETYPE_Enum, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)XFA_ATTRIBUTEENUM_All}, - {0xbde9abda, L"data", XFA_ATTRIBUTE_Data, XFA_ATTRIBUTETYPE_Enum, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)XFA_ATTRIBUTEENUM_Link}, - {0xbe52dfbf, L"desc", XFA_ATTRIBUTE_Desc, XFA_ATTRIBUTETYPE_Cdata, - XFA_XDPPACKET_Config | XFA_XDPPACKET_LocaleSet, (void*)NULL}, - {0xbe9ba472, L"numbered", XFA_ATTRIBUTE_Numbered, XFA_ATTRIBUTETYPE_Integer, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, (void*)1}, - {0xc035c6b1, L"dataColumnCount", XFA_ATTRIBUTE_DataColumnCount, - XFA_ATTRIBUTETYPE_Cdata, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)NULL}, - {0xc0ec9fa4, L"overline", XFA_ATTRIBUTE_Overline, XFA_ATTRIBUTETYPE_Integer, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, (void*)0}, - {0xc2ba0923, L"urlPolicy", XFA_ATTRIBUTE_UrlPolicy, XFA_ATTRIBUTETYPE_Cdata, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, (void*)NULL}, - {0xc2bd40fd, L"anchorType", XFA_ATTRIBUTE_AnchorType, - XFA_ATTRIBUTETYPE_Enum, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)XFA_ATTRIBUTEENUM_TopLeft}, - {0xc39a88bd, L"labelRef", XFA_ATTRIBUTE_LabelRef, XFA_ATTRIBUTETYPE_Cdata, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, (void*)NULL}, - {0xc3c1442f, L"bookendLeader", XFA_ATTRIBUTE_BookendLeader, - XFA_ATTRIBUTETYPE_Cdata, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)NULL}, - {0xc4547a08, L"maxLength", XFA_ATTRIBUTE_MaxLength, - XFA_ATTRIBUTETYPE_Integer, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*) - 1}, - {0xc4fed09b, L"accessKey", XFA_ATTRIBUTE_AccessKey, XFA_ATTRIBUTETYPE_Cdata, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, (void*)NULL}, - {0xc5762157, L"cursorLocation", XFA_ATTRIBUTE_CursorLocation, - XFA_ATTRIBUTETYPE_Enum, XFA_XDPPACKET_SourceSet, - (void*)XFA_ATTRIBUTEENUM_Client}, - {0xc860f30a, L"delayedOpen", XFA_ATTRIBUTE_DelayedOpen, - XFA_ATTRIBUTETYPE_Cdata, XFA_XDPPACKET_SourceSet, (void*)NULL}, - {0xc8da4da7, L"target", XFA_ATTRIBUTE_Target, XFA_ATTRIBUTETYPE_Cdata, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, (void*)NULL}, - {0xca5dc27c, L"dataEncipherment", XFA_ATTRIBUTE_DataEncipherment, - XFA_ATTRIBUTETYPE_Cdata, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)NULL}, - {0xcb150479, L"afterTarget", XFA_ATTRIBUTE_AfterTarget, - XFA_ATTRIBUTETYPE_Cdata, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)NULL}, - {0xcbcaf66d, L"leader", XFA_ATTRIBUTE_Leader, XFA_ATTRIBUTETYPE_Cdata, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, (void*)NULL}, - {0xcca7897e, L"picker", XFA_ATTRIBUTE_Picker, XFA_ATTRIBUTETYPE_Enum, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)XFA_ATTRIBUTEENUM_Host}, - {0xcd7f7b54, L"from", XFA_ATTRIBUTE_From, XFA_ATTRIBUTETYPE_Cdata, - XFA_XDPPACKET_SourceSet | XFA_XDPPACKET_Config, (void*)NULL}, - {0xcea5e62c, L"baseProfile", XFA_ATTRIBUTE_BaseProfile, - XFA_ATTRIBUTETYPE_Enum, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)XFA_ATTRIBUTEENUM_Full}, - {0xd171b240, L"aspect", XFA_ATTRIBUTE_Aspect, XFA_ATTRIBUTETYPE_Enum, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, (void*)XFA_ATTRIBUTEENUM_Fit}, - {0xd3c84d25, L"rowColumnRatio", XFA_ATTRIBUTE_RowColumnRatio, - XFA_ATTRIBUTETYPE_Cdata, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)NULL}, - {0xd4b01921, L"lineHeight", XFA_ATTRIBUTE_LineHeight, - XFA_ATTRIBUTETYPE_Measure, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)(g_XFAMeasurementData + 1)}, - {0xd4cc53f8, L"highlight", XFA_ATTRIBUTE_Highlight, XFA_ATTRIBUTETYPE_Enum, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)XFA_ATTRIBUTEENUM_Inverted}, - {0xd50f903a, L"valueRef", XFA_ATTRIBUTE_ValueRef, XFA_ATTRIBUTETYPE_Cdata, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, (void*)NULL}, - {0xd52482e0, L"maxEntries", XFA_ATTRIBUTE_MaxEntries, - XFA_ATTRIBUTETYPE_Integer, XFA_XDPPACKET_Config, (void*)5}, - {0xd57c513c, L"dataLength", XFA_ATTRIBUTE_DataLength, - XFA_ATTRIBUTETYPE_Cdata, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)NULL}, - {0xd6128d8d, L"activity", XFA_ATTRIBUTE_Activity, XFA_ATTRIBUTETYPE_Enum, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)XFA_ATTRIBUTEENUM_Click}, - {0xd6a39990, L"input", XFA_ATTRIBUTE_Input, XFA_ATTRIBUTETYPE_Cdata, - XFA_XDPPACKET_ConnectionSet, (void*)NULL}, - {0xd6e27f1d, L"value", XFA_ATTRIBUTE_Value, XFA_ATTRIBUTETYPE_Cdata, - XFA_XDPPACKET_SourceSet | XFA_XDPPACKET_Config | XFA_XDPPACKET_LocaleSet | - XFA_XDPPACKET_Template | XFA_XDPPACKET_Datasets | - XFA_XDPPACKET_ConnectionSet | XFA_XDPPACKET_Form, - (void*)NULL}, - {0xd70798c2, L"blankOrNotBlank", XFA_ATTRIBUTE_BlankOrNotBlank, - XFA_ATTRIBUTETYPE_Enum, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)XFA_ATTRIBUTEENUM_Any}, - {0xd861f8af, L"addRevocationInfo", XFA_ATTRIBUTE_AddRevocationInfo, - XFA_ATTRIBUTETYPE_Cdata, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)NULL}, - {0xd8f982bf, L"genericFamily", XFA_ATTRIBUTE_GenericFamily, - XFA_ATTRIBUTETYPE_Enum, XFA_XDPPACKET_Config, - (void*)XFA_ATTRIBUTEENUM_Serif}, - {0xd996fa9b, L"hand", XFA_ATTRIBUTE_Hand, XFA_ATTRIBUTETYPE_Enum, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)XFA_ATTRIBUTEENUM_Even}, - {0xdb55fec5, L"href", XFA_ATTRIBUTE_Href, XFA_ATTRIBUTETYPE_Cdata, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, (void*)NULL}, - {0xdc75676c, L"textEncoding", XFA_ATTRIBUTE_TextEncoding, - XFA_ATTRIBUTETYPE_Cdata, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)NULL}, - {0xde7f92ba, L"leadDigits", XFA_ATTRIBUTE_LeadDigits, - XFA_ATTRIBUTETYPE_Integer, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*) - 1}, - {0xe11a2cbc, L"permissions", XFA_ATTRIBUTE_Permissions, - XFA_ATTRIBUTETYPE_Integer, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)2}, - {0xe18b5659, L"spaceAbove", XFA_ATTRIBUTE_SpaceAbove, - XFA_ATTRIBUTETYPE_Measure, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)(g_XFAMeasurementData + 0)}, - {0xe1a26b56, L"codeBase", XFA_ATTRIBUTE_CodeBase, XFA_ATTRIBUTETYPE_Cdata, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, (void*)NULL}, - {0xe349d044, L"stock", XFA_ATTRIBUTE_Stock, XFA_ATTRIBUTETYPE_Cdata, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, (void*)NULL}, - {0xe372ae97, L"isNull", XFA_ATTRIBUTE_IsNull, XFA_ATTRIBUTETYPE_Boolean, - XFA_XDPPACKET_Datasets, (void*)0}, - {0xe4c3a5e5, L"restoreState", XFA_ATTRIBUTE_RestoreState, - XFA_ATTRIBUTETYPE_Enum, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)XFA_ATTRIBUTEENUM_Manual}, - {0xe5c96d6a, L"excludeAllCaps", XFA_ATTRIBUTE_ExcludeAllCaps, - XFA_ATTRIBUTETYPE_Boolean, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)0}, - {0xe64b1129, L"formatTest", XFA_ATTRIBUTE_FormatTest, - XFA_ATTRIBUTETYPE_Enum, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)XFA_ATTRIBUTEENUM_Warning}, - {0xe6f99487, L"hScrollPolicy", XFA_ATTRIBUTE_HScrollPolicy, - XFA_ATTRIBUTETYPE_Enum, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)XFA_ATTRIBUTEENUM_Auto}, - {0xe8dddf50, L"join", XFA_ATTRIBUTE_Join, XFA_ATTRIBUTETYPE_Enum, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)XFA_ATTRIBUTEENUM_Square}, - {0xe8f118a8, L"keyCertSign", XFA_ATTRIBUTE_KeyCertSign, - XFA_ATTRIBUTETYPE_Cdata, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)NULL}, - {0xe948b9a8, L"radius", XFA_ATTRIBUTE_Radius, XFA_ATTRIBUTETYPE_Measure, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)(g_XFAMeasurementData + 0)}, - {0xe996b2fe, L"sourceAbove", XFA_ATTRIBUTE_SourceAbove, - XFA_ATTRIBUTETYPE_Enum, XFA_XDPPACKET_Config, - (void*)XFA_ATTRIBUTEENUM_Warn}, - {0xea7090a0, L"override", XFA_ATTRIBUTE_Override, XFA_ATTRIBUTETYPE_NOTSURE, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, (void*)NULL}, - {0xeb091003, L"classId", XFA_ATTRIBUTE_ClassId, XFA_ATTRIBUTETYPE_Cdata, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, (void*)NULL}, - {0xeb511b54, L"disable", XFA_ATTRIBUTE_Disable, XFA_ATTRIBUTETYPE_Boolean, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, (void*)0}, - {0xeda9017a, L"scope", XFA_ATTRIBUTE_Scope, XFA_ATTRIBUTETYPE_NOTSURE, - XFA_XDPPACKET_Config | XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)NULL}, - {0xf197844d, L"match", XFA_ATTRIBUTE_Match, XFA_ATTRIBUTETYPE_Enum, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)XFA_ATTRIBUTEENUM_Once}, - {0xf2009339, L"placement", XFA_ATTRIBUTE_Placement, XFA_ATTRIBUTETYPE_Enum, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)XFA_ATTRIBUTEENUM_Left}, - {0xf4ffce73, L"before", XFA_ATTRIBUTE_Before, XFA_ATTRIBUTETYPE_Enum, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)XFA_ATTRIBUTEENUM_Auto}, - {0xf531b059, L"writingScript", XFA_ATTRIBUTE_WritingScript, - XFA_ATTRIBUTETYPE_Enum, XFA_XDPPACKET_Config, - (void*)XFA_ATTRIBUTEENUM_Asterisk}, - {0xf575ca75, L"endChar", XFA_ATTRIBUTE_EndChar, XFA_ATTRIBUTETYPE_Cdata, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, (void*)NULL}, - {0xf6b47749, L"lock", XFA_ATTRIBUTE_Lock, XFA_ATTRIBUTETYPE_Integer, - XFA_XDPPACKET_Config, (void*)0}, - {0xf6b4afb0, L"long", XFA_ATTRIBUTE_Long, XFA_ATTRIBUTETYPE_Measure, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)(g_XFAMeasurementData + 0)}, - {0xf6b59543, L"intact", XFA_ATTRIBUTE_Intact, XFA_ATTRIBUTETYPE_Enum, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)XFA_ATTRIBUTEENUM_None}, - {0xf889e747, L"xdpContent", XFA_ATTRIBUTE_XdpContent, - XFA_ATTRIBUTETYPE_Cdata, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)NULL}, - {0xfea53ec6, L"decipherOnly", XFA_ATTRIBUTE_DecipherOnly, - XFA_ATTRIBUTETYPE_Cdata, XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - (void*)NULL}, -}; -const int32_t g_iXFAAttributeCount = - sizeof(g_XFAAttributeData) / sizeof(XFA_ATTRIBUTEINFO); -const XFA_NOTSUREATTRIBUTE g_XFANotsureAttributes[] = { - {XFA_ELEMENT_SubformSet, XFA_ATTRIBUTE_Relation, XFA_ATTRIBUTETYPE_Enum, - (void*)XFA_ATTRIBUTEENUM_Ordered}, - {XFA_ELEMENT_NumberPattern, XFA_ATTRIBUTE_Name, XFA_ATTRIBUTETYPE_Enum, - (void*)XFA_ATTRIBUTEENUM_Numeric}, - {XFA_ELEMENT_KeyUsage, XFA_ATTRIBUTE_Type, XFA_ATTRIBUTETYPE_Enum, - (void*)XFA_ATTRIBUTEENUM_Optional}, - {XFA_ELEMENT_LabelPrinter, XFA_ATTRIBUTE_Name, XFA_ATTRIBUTETYPE_Enum, - (void*)XFA_ATTRIBUTEENUM_Zpl}, - {XFA_ELEMENT_CalendarSymbols, XFA_ATTRIBUTE_Name, XFA_ATTRIBUTETYPE_Enum, - (void*)XFA_ATTRIBUTEENUM_Gregorian}, - {XFA_ELEMENT_Barcode, XFA_ATTRIBUTE_Type, XFA_ATTRIBUTETYPE_Cdata, - (void*)NULL}, - {XFA_ELEMENT_Barcode, XFA_ATTRIBUTE_Checksum, XFA_ATTRIBUTETYPE_Enum, - (void*)XFA_ATTRIBUTEENUM_None}, - {XFA_ELEMENT_TimePattern, XFA_ATTRIBUTE_Name, XFA_ATTRIBUTETYPE_Enum, - (void*)XFA_ATTRIBUTEENUM_Med}, - {XFA_ELEMENT_BatchOutput, XFA_ATTRIBUTE_Format, XFA_ATTRIBUTETYPE_Enum, - (void*)XFA_ATTRIBUTEENUM_None}, - {XFA_ELEMENT_SubjectDNs, XFA_ATTRIBUTE_Type, XFA_ATTRIBUTETYPE_Enum, - (void*)XFA_ATTRIBUTEENUM_Optional}, - {XFA_ELEMENT_Issuers, XFA_ATTRIBUTE_Type, XFA_ATTRIBUTETYPE_Enum, - (void*)XFA_ATTRIBUTEENUM_Optional}, - {XFA_ELEMENT_EncryptionMethods, XFA_ATTRIBUTE_Type, XFA_ATTRIBUTETYPE_Enum, - (void*)XFA_ATTRIBUTEENUM_Optional}, - {XFA_ELEMENT_Pattern, XFA_ATTRIBUTE_Type, XFA_ATTRIBUTETYPE_Enum, - (void*)XFA_ATTRIBUTEENUM_CrossHatch}, - {XFA_ELEMENT_Compress, XFA_ATTRIBUTE_Scope, XFA_ATTRIBUTETYPE_Enum, - (void*)XFA_ATTRIBUTEENUM_ImageOnly}, - {XFA_ELEMENT_Image, XFA_ATTRIBUTE_TransferEncoding, XFA_ATTRIBUTETYPE_Enum, - (void*)XFA_ATTRIBUTEENUM_Base64}, - {XFA_ELEMENT_TimeStamp, XFA_ATTRIBUTE_Type, XFA_ATTRIBUTETYPE_Enum, - (void*)XFA_ATTRIBUTEENUM_Optional}, - {XFA_ELEMENT_Subform, XFA_ATTRIBUTE_Scope, XFA_ATTRIBUTETYPE_Enum, - (void*)XFA_ATTRIBUTEENUM_Name}, - {XFA_ELEMENT_Handler, XFA_ATTRIBUTE_Type, XFA_ATTRIBUTETYPE_Enum, - (void*)XFA_ATTRIBUTEENUM_Optional}, - {XFA_ELEMENT_Record, XFA_ATTRIBUTE_Max, XFA_ATTRIBUTETYPE_Integer, - (void*)0}, - {XFA_ELEMENT_Command, XFA_ATTRIBUTE_Timeout, XFA_ATTRIBUTETYPE_Integer, - (void*)30}, - {XFA_ELEMENT_DigestMethods, XFA_ATTRIBUTE_Type, XFA_ATTRIBUTETYPE_Enum, - (void*)XFA_ATTRIBUTEENUM_Optional}, - {XFA_ELEMENT_PageSet, XFA_ATTRIBUTE_Relation, XFA_ATTRIBUTETYPE_Enum, - (void*)XFA_ATTRIBUTEENUM_OrderedOccurrence}, - {XFA_ELEMENT_Equate, XFA_ATTRIBUTE_From, XFA_ATTRIBUTETYPE_Cdata, - (void*)NULL}, - {XFA_ELEMENT_Equate, XFA_ATTRIBUTE_To, XFA_ATTRIBUTETYPE_Cdata, - (void*)NULL}, - {XFA_ELEMENT_Traverse, XFA_ATTRIBUTE_Operation, XFA_ATTRIBUTETYPE_Enum, - (void*)XFA_ATTRIBUTEENUM_Next}, - {XFA_ELEMENT_Encodings, XFA_ATTRIBUTE_Type, XFA_ATTRIBUTETYPE_Enum, - (void*)XFA_ATTRIBUTEENUM_Optional}, - {XFA_ELEMENT_Signing, XFA_ATTRIBUTE_Type, XFA_ATTRIBUTETYPE_Enum, - (void*)XFA_ATTRIBUTEENUM_Optional}, - {XFA_ELEMENT_Oids, XFA_ATTRIBUTE_Type, XFA_ATTRIBUTETYPE_Enum, - (void*)XFA_ATTRIBUTEENUM_Optional}, - {XFA_ELEMENT_Signature, XFA_ATTRIBUTE_Type, XFA_ATTRIBUTETYPE_Enum, - (void*)XFA_ATTRIBUTEENUM_PDF1_3}, - {XFA_ELEMENT_ExData, XFA_ATTRIBUTE_TransferEncoding, XFA_ATTRIBUTETYPE_Enum, - (void*)XFA_ATTRIBUTEENUM_None}, - {XFA_ELEMENT_Linear, XFA_ATTRIBUTE_Type, XFA_ATTRIBUTETYPE_Enum, - (void*)XFA_ATTRIBUTEENUM_ToRight}, - {XFA_ELEMENT_CurrencySymbol, XFA_ATTRIBUTE_Name, XFA_ATTRIBUTETYPE_Enum, - (void*)XFA_ATTRIBUTEENUM_Symbol}, - {XFA_ELEMENT_EquateRange, XFA_ATTRIBUTE_From, XFA_ATTRIBUTETYPE_Cdata, - (void*)NULL}, - {XFA_ELEMENT_EquateRange, XFA_ATTRIBUTE_To, XFA_ATTRIBUTETYPE_Cdata, - (void*)NULL}, - {XFA_ELEMENT_SignData, XFA_ATTRIBUTE_Operation, XFA_ATTRIBUTETYPE_Enum, - (void*)XFA_ATTRIBUTEENUM_Sign}, - {XFA_ELEMENT_DatePattern, XFA_ATTRIBUTE_Name, XFA_ATTRIBUTETYPE_Enum, - (void*)XFA_ATTRIBUTEENUM_Med}, - {XFA_ELEMENT_Bind, XFA_ATTRIBUTE_TransferEncoding, XFA_ATTRIBUTETYPE_Enum, - (void*)XFA_ATTRIBUTEENUM_None}, - {XFA_ELEMENT_Reasons, XFA_ATTRIBUTE_Type, XFA_ATTRIBUTETYPE_Enum, - (void*)XFA_ATTRIBUTEENUM_Optional}, - {XFA_ELEMENT_AppearanceFilter, XFA_ATTRIBUTE_Type, XFA_ATTRIBUTETYPE_Enum, - (void*)XFA_ATTRIBUTEENUM_Optional}, - {XFA_ELEMENT_Form, XFA_ATTRIBUTE_Checksum, XFA_ATTRIBUTETYPE_Cdata, - (void*)NULL}, - {XFA_ELEMENT_Value, XFA_ATTRIBUTE_Override, XFA_ATTRIBUTETYPE_Boolean, - (void*)0}, - {XFA_ELEMENT_Calculate, XFA_ATTRIBUTE_Override, XFA_ATTRIBUTETYPE_Enum, - (void*)XFA_ATTRIBUTEENUM_Error}, - {XFA_ELEMENT_Connect, XFA_ATTRIBUTE_Timeout, XFA_ATTRIBUTETYPE_Integer, - (void*)15}, - {XFA_ELEMENT_Submit, XFA_ATTRIBUTE_Format, XFA_ATTRIBUTETYPE_Enum, - (void*)XFA_ATTRIBUTEENUM_Xdp}, - {XFA_ELEMENT_Radial, XFA_ATTRIBUTE_Type, XFA_ATTRIBUTETYPE_Enum, - (void*)XFA_ATTRIBUTEENUM_ToEdge}, - {XFA_ELEMENT_LockDocument, XFA_ATTRIBUTE_Type, XFA_ATTRIBUTETYPE_Enum, - (void*)XFA_ATTRIBUTEENUM_Optional}, - {XFA_ELEMENT_Occur, XFA_ATTRIBUTE_Max, XFA_ATTRIBUTETYPE_Integer, (void*)1}, - {XFA_ELEMENT_NumberSymbol, XFA_ATTRIBUTE_Name, XFA_ATTRIBUTETYPE_Enum, - (void*)XFA_ATTRIBUTEENUM_Decimal}, -}; -const int32_t g_iXFANotsureCount = - sizeof(g_XFANotsureAttributes) / sizeof(XFA_NOTSUREATTRIBUTE); -const XFA_ELEMENTINFO g_XFAElementData[] = { - {0x23ee3, L"ps", XFA_ELEMENT_Ps, XFA_XDPPACKET_Config, XFA_OBJECTTYPE_Node}, - {0x25363, L"to", XFA_ELEMENT_To, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_ContentNode}, - {0x2587e, L"ui", XFA_ELEMENT_Ui, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_Node}, - {0x1c648b, L"recordSet", XFA_ELEMENT_RecordSet, XFA_XDPPACKET_SourceSet, - XFA_OBJECTTYPE_Node}, - {0x171428f, L"subsetBelow", XFA_ELEMENT_SubsetBelow, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_ContentNode}, - {0x1a0776a, L"subformSet", XFA_ELEMENT_SubformSet, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_ContainerNode}, - {0x2340d70, L"adobeExtensionLevel", XFA_ELEMENT_AdobeExtensionLevel, - XFA_XDPPACKET_Config, XFA_OBJECTTYPE_ContentNode}, - {0x2c1c7f1, L"typeface", XFA_ELEMENT_Typeface, XFA_XDPPACKET_LocaleSet, - XFA_OBJECTTYPE_Node}, - {0x5518c25, L"break", XFA_ELEMENT_Break, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_Node}, - {0x5fff523, L"fontInfo", XFA_ELEMENT_FontInfo, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_Node}, - {0x653a227, L"numberPattern", XFA_ELEMENT_NumberPattern, - XFA_XDPPACKET_LocaleSet, XFA_OBJECTTYPE_ContentNode}, - {0x65b4a05, L"dynamicRender", XFA_ELEMENT_DynamicRender, - XFA_XDPPACKET_Config, XFA_OBJECTTYPE_ContentNode}, - {0x7e4362e, L"printScaling", XFA_ELEMENT_PrintScaling, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_ContentNode}, - {0x7fe6d3a, L"checkButton", XFA_ELEMENT_CheckButton, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_Node}, - {0x80cf58f, L"datePatterns", XFA_ELEMENT_DatePatterns, - XFA_XDPPACKET_LocaleSet, XFA_OBJECTTYPE_Node}, - {0x811929d, L"sourceSet", XFA_ELEMENT_SourceSet, XFA_XDPPACKET_SourceSet, - XFA_OBJECTTYPE_ModelNode}, - {0x9f9d612, L"amd", XFA_ELEMENT_Amd, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_ContentNode}, - {0x9f9efb6, L"arc", XFA_ELEMENT_Arc, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_Node}, - {0xa48835e, L"day", XFA_ELEMENT_Day, XFA_XDPPACKET_LocaleSet, - XFA_OBJECTTYPE_ContentNode}, - {0xa6328b8, L"era", XFA_ELEMENT_Era, XFA_XDPPACKET_LocaleSet, - XFA_OBJECTTYPE_ContentNode}, - {0xae6a0a0, L"jog", XFA_ELEMENT_Jog, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_ContentNode}, - {0xb1b3d22, L"log", XFA_ELEMENT_Log, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_Node}, - {0xb35439e, L"map", XFA_ELEMENT_Map, - XFA_XDPPACKET_Config | XFA_XDPPACKET_SourceSet, XFA_OBJECTTYPE_Node}, - {0xb355301, L"mdp", XFA_ELEMENT_Mdp, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_Node}, - {0xb420438, L"breakBefore", XFA_ELEMENT_BreakBefore, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_Node}, - {0xb6a091c, L"oid", XFA_ELEMENT_Oid, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_TextNode}, - {0xb84389f, L"pcl", XFA_ELEMENT_Pcl, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_Node}, - {0xb843dba, L"pdf", XFA_ELEMENT_Pdf, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_Node}, - {0xbb8df5d, L"ref", XFA_ELEMENT_Ref, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_TextNode}, - {0xc080cd0, L"uri", XFA_ELEMENT_Uri, - XFA_XDPPACKET_Config | XFA_XDPPACKET_ConnectionSet, - XFA_OBJECTTYPE_TextNode}, - {0xc56afbf, L"xdc", XFA_ELEMENT_Xdc, - XFA_XDPPACKET_Config | XFA_XDPPACKET_Xdc, XFA_OBJECTTYPE_ModelNode}, - {0xc56afcc, L"xdp", XFA_ELEMENT_Xdp, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_Node}, - {0xc56b9ff, L"xfa", XFA_ELEMENT_Xfa, XFA_XDPPACKET_XDP, - XFA_OBJECTTYPE_ModelNode}, - {0xc56fcb7, L"xsl", XFA_ELEMENT_Xsl, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_Node}, - {0xc8b89d6, L"zpl", XFA_ELEMENT_Zpl, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_Node}, - {0xc9bae94, L"cache", XFA_ELEMENT_Cache, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_Node}, - {0xcb016be, L"margin", XFA_ELEMENT_Margin, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_Node}, - {0xe1378fe, L"keyUsage", XFA_ELEMENT_KeyUsage, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_Node}, - {0xfe3596a, L"exclude", XFA_ELEMENT_Exclude, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_ContentNode}, - {0x10395ac7, L"choiceList", XFA_ELEMENT_ChoiceList, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_Node}, - {0x1059ec18, L"level", XFA_ELEMENT_Level, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_ContentNode}, - {0x10874804, L"labelPrinter", XFA_ELEMENT_LabelPrinter, - XFA_XDPPACKET_Config, XFA_OBJECTTYPE_Node}, - {0x10c40e03, L"calendarSymbols", XFA_ELEMENT_CalendarSymbols, - XFA_XDPPACKET_LocaleSet, XFA_OBJECTTYPE_Node}, - {0x10f1ea24, L"para", XFA_ELEMENT_Para, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_Node}, - {0x10f1ea37, L"part", XFA_ELEMENT_Part, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_ContentNode}, - {0x1140975b, L"pdfa", XFA_ELEMENT_Pdfa, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_Node}, - {0x1154efe6, L"filter", XFA_ELEMENT_Filter, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_Node}, - {0x13f41de1, L"present", XFA_ELEMENT_Present, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_Node}, - {0x1827e6ea, L"pagination", XFA_ELEMENT_Pagination, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_ContentNode}, - {0x18463707, L"encoding", XFA_ELEMENT_Encoding, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_NodeC}, - {0x185e41e2, L"event", XFA_ELEMENT_Event, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_Node}, - {0x1adb142d, L"whitespace", XFA_ELEMENT_Whitespace, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_NodeV}, - {0x1f3f64c3, L"defaultUi", XFA_ELEMENT_DefaultUi, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_Node}, - {0x204e87cb, L"dataModel", XFA_ELEMENT_DataModel, XFA_XDPPACKET_Datasets, - XFA_OBJECTTYPE_ModelNode}, - {0x2057b350, L"barcode", XFA_ELEMENT_Barcode, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_Node}, - {0x20596bad, L"timePattern", XFA_ELEMENT_TimePattern, - XFA_XDPPACKET_LocaleSet, XFA_OBJECTTYPE_ContentNode}, - {0x210b74d3, L"batchOutput", XFA_ELEMENT_BatchOutput, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_Node}, - {0x212ff0e2, L"enforce", XFA_ELEMENT_Enforce, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_ContentNode}, - {0x21d351b4, L"currencySymbols", XFA_ELEMENT_CurrencySymbols, - XFA_XDPPACKET_LocaleSet, XFA_OBJECTTYPE_Node}, - {0x21db83c5, L"addSilentPrint", XFA_ELEMENT_AddSilentPrint, - XFA_XDPPACKET_Config, XFA_OBJECTTYPE_ContentNode}, - {0x22266258, L"rename", XFA_ELEMENT_Rename, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_NodeV}, - {0x226ca8f1, L"operation", XFA_ELEMENT_Operation, - XFA_XDPPACKET_ConnectionSet, XFA_OBJECTTYPE_TextNode}, - {0x23e27b84, L"typefaces", XFA_ELEMENT_Typefaces, XFA_XDPPACKET_LocaleSet, - XFA_OBJECTTYPE_Node}, - {0x23f4aa75, L"subjectDNs", XFA_ELEMENT_SubjectDNs, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_Node}, - {0x240d5e8e, L"issuers", XFA_ELEMENT_Issuers, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_Node}, - {0x2457a033, L"signaturePseudoModel", XFA_ELEMENT_SignaturePseudoModel, - XFA_XDPPACKET_XDP, XFA_OBJECTTYPE_OrdinaryObject}, - {0x24a52f8a, L"wsdlConnection", XFA_ELEMENT_WsdlConnection, - XFA_XDPPACKET_ConnectionSet, XFA_OBJECTTYPE_Node}, - {0x254ebd07, L"debug", XFA_ELEMENT_Debug, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_Node}, - {0x2655c66a, L"delta", XFA_ELEMENT_Delta, XFA_XDPPACKET_Form, - XFA_OBJECTTYPE_OrdinaryObject}, - {0x26c0daec, L"eraNames", XFA_ELEMENT_EraNames, XFA_XDPPACKET_LocaleSet, - XFA_OBJECTTYPE_Node}, - {0x273ab03b, L"modifyAnnots", XFA_ELEMENT_ModifyAnnots, - XFA_XDPPACKET_Config, XFA_OBJECTTYPE_ContentNode}, - {0x27875bb4, L"startNode", XFA_ELEMENT_StartNode, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_NodeV}, - {0x285d0dbc, L"button", XFA_ELEMENT_Button, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_Node}, - {0x28dee6e9, L"format", XFA_ELEMENT_Format, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_Node}, - {0x2a23349e, L"border", XFA_ELEMENT_Border, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_Node}, - {0x2ae67f19, L"area", XFA_ELEMENT_Area, - XFA_XDPPACKET_Config | XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - XFA_OBJECTTYPE_ContainerNode}, - {0x2c3c4c67, L"hyphenation", XFA_ELEMENT_Hyphenation, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_Node}, - {0x2d08af85, L"text", XFA_ELEMENT_Text, - XFA_XDPPACKET_SourceSet | XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - XFA_OBJECTTYPE_ContentNode}, - {0x2d71b00f, L"time", XFA_ELEMENT_Time, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_ContentNode}, - {0x2f16a382, L"type", XFA_ELEMENT_Type, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_ContentNode}, - {0x2fe057e9, L"overprint", XFA_ELEMENT_Overprint, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_ContentNode}, - {0x302aee16, L"certificates", XFA_ELEMENT_Certificates, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_Node}, - {0x30b227df, L"encryptionMethods", XFA_ELEMENT_EncryptionMethods, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_Node}, - {0x32b900d1, L"setProperty", XFA_ELEMENT_SetProperty, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_Node}, - {0x337d9e45, L"printerName", XFA_ELEMENT_PrinterName, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_ContentNode}, - {0x33edda4b, L"startPage", XFA_ELEMENT_StartPage, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_NodeV}, - {0x381943e4, L"pageOffset", XFA_ELEMENT_PageOffset, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_Node}, - {0x382106cd, L"dateTime", XFA_ELEMENT_DateTime, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_ContentNode}, - {0x386e7421, L"comb", XFA_ELEMENT_Comb, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_Node}, - {0x390acd9e, L"pattern", XFA_ELEMENT_Pattern, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_Node}, - {0x3942163e, L"ifEmpty", XFA_ELEMENT_IfEmpty, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_NodeV}, - {0x39944a7b, L"suppressBanner", XFA_ELEMENT_SuppressBanner, - XFA_XDPPACKET_Config, XFA_OBJECTTYPE_ContentNode}, - {0x3b3c3dca, L"outputBin", XFA_ELEMENT_OutputBin, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_ContentNode}, - {0x3b8a4024, L"field", XFA_ELEMENT_Field, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_ContainerNode}, - {0x3c15352f, L"agent", XFA_ELEMENT_Agent, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_Node}, - {0x3d7e8668, L"outputXSL", XFA_ELEMENT_OutputXSL, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_Node}, - {0x3e1c91c5, L"adjustData", XFA_ELEMENT_AdjustData, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_NodeV}, - {0x3e7a9408, L"autoSave", XFA_ELEMENT_AutoSave, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_NodeV}, - {0x3ecead94, L"contentArea", XFA_ELEMENT_ContentArea, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_ContainerNode}, - {0x3ef334e3, L"eventPseudoModel", XFA_ELEMENT_EventPseudoModel, - XFA_XDPPACKET_XDP, XFA_OBJECTTYPE_OrdinaryObject}, - {0x3fadaec0, L"wsdlAddress", XFA_ELEMENT_WsdlAddress, - XFA_XDPPACKET_ConnectionSet, XFA_OBJECTTYPE_TextNode}, - {0x40623b5b, L"solid", XFA_ELEMENT_Solid, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_Node}, - {0x41f0bd76, L"dateTimeSymbols", XFA_ELEMENT_DateTimeSymbols, - XFA_XDPPACKET_LocaleSet, XFA_OBJECTTYPE_ContentNode}, - {0x444e7523, L"encryptionLevel", XFA_ELEMENT_EncryptionLevel, - XFA_XDPPACKET_Config, XFA_OBJECTTYPE_ContentNode}, - {0x4523af55, L"edge", XFA_ELEMENT_Edge, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_Node}, - {0x45d5e3c1, L"stipple", XFA_ELEMENT_Stipple, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_Node}, - {0x475e4e87, L"attributes", XFA_ELEMENT_Attributes, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_NodeV}, - {0x487a8c87, L"versionControl", XFA_ELEMENT_VersionControl, - XFA_XDPPACKET_Config, XFA_OBJECTTYPE_Node}, - {0x48e5248c, L"meridiem", XFA_ELEMENT_Meridiem, XFA_XDPPACKET_LocaleSet, - XFA_OBJECTTYPE_ContentNode}, - {0x48f36719, L"exclGroup", XFA_ELEMENT_ExclGroup, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_ContainerNode}, - {0x4977356b, L"toolTip", XFA_ELEMENT_ToolTip, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_TextNode}, - {0x499afecc, L"compress", XFA_ELEMENT_Compress, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_Node}, - {0x4a0c4948, L"reason", XFA_ELEMENT_Reason, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_TextNode}, - {0x4bdcce13, L"execute", XFA_ELEMENT_Execute, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_Node}, - {0x4c56b216, L"contentCopy", XFA_ELEMENT_ContentCopy, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_ContentNode}, - {0x4cc176d3, L"dateTimeEdit", XFA_ELEMENT_DateTimeEdit, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_Node}, - {0x4e1e39b6, L"config", XFA_ELEMENT_Config, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_ModelNode}, - {0x4e2d6083, L"image", XFA_ELEMENT_Image, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_ContentNode}, - {0x4e814150, L"#xHTML", XFA_ELEMENT_SharpxHTML, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Config | XFA_XDPPACKET_LocaleSet | - XFA_XDPPACKET_ConnectionSet | XFA_XDPPACKET_SourceSet | - XFA_XDPPACKET_Form, - XFA_OBJECTTYPE_NodeV}, - {0x4f2388c1, L"numberOfCopies", XFA_ELEMENT_NumberOfCopies, - XFA_XDPPACKET_Config, XFA_OBJECTTYPE_ContentNode}, - {0x4f512e30, L"behaviorOverride", XFA_ELEMENT_BehaviorOverride, - XFA_XDPPACKET_Config, XFA_OBJECTTYPE_ContentNode}, - {0x4fdc3454, L"timeStamp", XFA_ELEMENT_TimeStamp, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_Node}, - {0x51d90546, L"month", XFA_ELEMENT_Month, XFA_XDPPACKET_LocaleSet, - XFA_OBJECTTYPE_ContentNode}, - {0x523437e4, L"viewerPreferences", XFA_ELEMENT_ViewerPreferences, - XFA_XDPPACKET_Config, XFA_OBJECTTYPE_Node}, - {0x53abc1c6, L"scriptModel", XFA_ELEMENT_ScriptModel, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_ContentNode}, - {0x54034c2f, L"decimal", XFA_ELEMENT_Decimal, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_ContentNode}, - {0x54202c9e, L"subform", XFA_ELEMENT_Subform, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_ContainerNode}, - {0x542c7300, L"select", XFA_ELEMENT_Select, XFA_XDPPACKET_SourceSet, - XFA_OBJECTTYPE_TextNode}, - {0x5436d198, L"window", XFA_ELEMENT_Window, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_NodeV}, - {0x5473b6dc, L"localeSet", XFA_ELEMENT_LocaleSet, - XFA_XDPPACKET_Config | XFA_XDPPACKET_LocaleSet, XFA_OBJECTTYPE_ModelNode}, - {0x56ae179e, L"handler", XFA_ELEMENT_Handler, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_TextNode}, - {0x5700bd5f, L"hostPseudoModel", XFA_ELEMENT_HostPseudoModel, - XFA_XDPPACKET_XDP, XFA_OBJECTTYPE_OrdinaryObject}, - {0x570ce835, L"presence", XFA_ELEMENT_Presence, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_NodeV}, - {0x5779d65f, L"record", XFA_ELEMENT_Record, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_NodeV}, - {0x59c8f27d, L"embed", XFA_ELEMENT_Embed, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_ContentNode}, - {0x5a50e9e6, L"version", XFA_ELEMENT_Version, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_ContentNode}, - {0x5b8383df, L"command", XFA_ELEMENT_Command, XFA_XDPPACKET_SourceSet, - XFA_OBJECTTYPE_Node}, - {0x5c43c6c3, L"copies", XFA_ELEMENT_Copies, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_ContentNode}, - {0x5e0c2c49, L"staple", XFA_ELEMENT_Staple, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_Node}, - {0x5e5083dd, L"submitFormat", XFA_ELEMENT_SubmitFormat, - XFA_XDPPACKET_Config, XFA_OBJECTTYPE_ContentNode}, - {0x5e8c5d20, L"boolean", XFA_ELEMENT_Boolean, - XFA_XDPPACKET_SourceSet | XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - XFA_OBJECTTYPE_ContentNode}, - {0x60490a85, L"message", XFA_ELEMENT_Message, - XFA_XDPPACKET_Config | XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - XFA_OBJECTTYPE_Node}, - {0x60d4c8b1, L"output", XFA_ELEMENT_Output, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_Node}, - {0x61810081, L"psMap", XFA_ELEMENT_PsMap, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_Node}, - {0x62bd904b, L"excludeNS", XFA_ELEMENT_ExcludeNS, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_NodeV}, - {0x669d4f77, L"assist", XFA_ELEMENT_Assist, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_Node}, - {0x67334a1c, L"picture", XFA_ELEMENT_Picture, - XFA_XDPPACKET_Config | XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - XFA_OBJECTTYPE_ContentNode}, - {0x67fe7334, L"traversal", XFA_ELEMENT_Traversal, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_Node}, - {0x6894589c, L"silentPrint", XFA_ELEMENT_SilentPrint, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_Node}, - {0x68a16bbd, L"webClient", XFA_ELEMENT_WebClient, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_Node}, - {0x69f115df, L"layoutPseudoModel", XFA_ELEMENT_LayoutPseudoModel, - XFA_XDPPACKET_XDP, XFA_OBJECTTYPE_OrdinaryObject}, - {0x6a4bc084, L"producer", XFA_ELEMENT_Producer, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_ContentNode}, - {0x6a9e04c9, L"corner", XFA_ELEMENT_Corner, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_Node}, - {0x6ccd7274, L"msgId", XFA_ELEMENT_MsgId, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_NodeV}, - {0x6e67921f, L"color", XFA_ELEMENT_Color, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_Node}, - {0x6ec217a5, L"keep", XFA_ELEMENT_Keep, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_Node}, - {0x6eef1116, L"query", XFA_ELEMENT_Query, XFA_XDPPACKET_SourceSet, - XFA_OBJECTTYPE_Node}, - {0x7033bfd5, L"insert", XFA_ELEMENT_Insert, XFA_XDPPACKET_SourceSet, - XFA_OBJECTTYPE_TextNode}, - {0x704af389, L"imageEdit", XFA_ELEMENT_ImageEdit, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_Node}, - {0x7233018a, L"validate", XFA_ELEMENT_Validate, - XFA_XDPPACKET_Config | XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - XFA_OBJECTTYPE_ContentNode}, - {0x72ba47b4, L"digestMethods", XFA_ELEMENT_DigestMethods, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_Node}, - {0x72f2aa7a, L"numberPatterns", XFA_ELEMENT_NumberPatterns, - XFA_XDPPACKET_LocaleSet, XFA_OBJECTTYPE_Node}, - {0x74caed29, L"pageSet", XFA_ELEMENT_PageSet, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_ContainerNode}, - {0x7568e6ae, L"integer", XFA_ELEMENT_Integer, - XFA_XDPPACKET_SourceSet | XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - XFA_OBJECTTYPE_ContentNode}, - {0x76182db9, L"soapAddress", XFA_ELEMENT_SoapAddress, - XFA_XDPPACKET_ConnectionSet, XFA_OBJECTTYPE_TextNode}, - {0x773146c5, L"equate", XFA_ELEMENT_Equate, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_NodeV}, - {0x77d449dd, L"formFieldFilling", XFA_ELEMENT_FormFieldFilling, - XFA_XDPPACKET_Config, XFA_OBJECTTYPE_ContentNode}, - {0x7889d68a, L"pageRange", XFA_ELEMENT_PageRange, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_ContentNode}, - {0x7baca2e3, L"update", XFA_ELEMENT_Update, XFA_XDPPACKET_SourceSet, - XFA_OBJECTTYPE_TextNode}, - {0x7ce89001, L"connectString", XFA_ELEMENT_ConnectString, - XFA_XDPPACKET_SourceSet, XFA_OBJECTTYPE_TextNode}, - {0x7d9fd7c5, L"mode", XFA_ELEMENT_Mode, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_ContentNode}, - {0x7e7e845e, L"layout", XFA_ELEMENT_Layout, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_ContentNode}, - {0x7e845c34, L"#xml", XFA_ELEMENT_Sharpxml, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_NodeV}, - {0x7fb341df, L"xsdConnection", XFA_ELEMENT_XsdConnection, - XFA_XDPPACKET_ConnectionSet, XFA_OBJECTTYPE_Node}, - {0x7ffb51cc, L"traverse", XFA_ELEMENT_Traverse, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_Node}, - {0x80203b5a, L"encodings", XFA_ELEMENT_Encodings, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_Node}, - {0x803550fc, L"template", XFA_ELEMENT_Template, - XFA_XDPPACKET_Config | XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - XFA_OBJECTTYPE_ModelNode}, - {0x803d5bbc, L"acrobat", XFA_ELEMENT_Acrobat, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_Node}, - {0x821d6569, L"validationMessaging", XFA_ELEMENT_ValidationMessaging, - XFA_XDPPACKET_Config, XFA_OBJECTTYPE_NodeV}, - {0x830e688f, L"signing", XFA_ELEMENT_Signing, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_Node}, - {0x83a550d2, L"dataWindow", XFA_ELEMENT_DataWindow, XFA_XDPPACKET_Datasets, - XFA_OBJECTTYPE_OrdinaryObject}, - {0x83dab9f5, L"script", XFA_ELEMENT_Script, - XFA_XDPPACKET_Config | XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - XFA_OBJECTTYPE_ContentNode}, - {0x8411ebcd, L"addViewerPreferences", XFA_ELEMENT_AddViewerPreferences, - XFA_XDPPACKET_Config, XFA_OBJECTTYPE_ContentNode}, - {0x8777642e, L"alwaysEmbed", XFA_ELEMENT_AlwaysEmbed, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_NodeV}, - {0x877a6b39, L"passwordEdit", XFA_ELEMENT_PasswordEdit, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_Node}, - {0x87e84c99, L"numericEdit", XFA_ELEMENT_NumericEdit, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_Node}, - {0x8852cdec, L"encryptionMethod", XFA_ELEMENT_EncryptionMethod, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_NodeC}, - {0x891f4606, L"change", XFA_ELEMENT_Change, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_ContentNode}, - {0x89939f36, L"pageArea", XFA_ELEMENT_PageArea, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_ContainerNode}, - {0x8a9d6247, L"submitUrl", XFA_ELEMENT_SubmitUrl, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_ContentNode}, - {0x8ad8b90f, L"oids", XFA_ELEMENT_Oids, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_Node}, - {0x8b036f32, L"signature", XFA_ELEMENT_Signature, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_Node}, - {0x8b128efb, L"ADBE_JSConsole", XFA_ELEMENT_ADBE_JSConsole, - XFA_XDPPACKET_Config, XFA_OBJECTTYPE_ContentNode}, - {0x8bcfe96e, L"caption", XFA_ELEMENT_Caption, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_Node}, - {0x8e1c2921, L"relevant", XFA_ELEMENT_Relevant, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_NodeV}, - {0x8e3f0a4b, L"flipLabel", XFA_ELEMENT_FlipLabel, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_NodeV}, - {0x900280b7, L"exData", XFA_ELEMENT_ExData, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_ContentNode}, - {0x91e80352, L"dayNames", XFA_ELEMENT_DayNames, XFA_XDPPACKET_LocaleSet, - XFA_OBJECTTYPE_Node}, - {0x93113b11, L"soapAction", XFA_ELEMENT_SoapAction, - XFA_XDPPACKET_ConnectionSet, XFA_OBJECTTYPE_TextNode}, - {0x938b09f6, L"defaultTypeface", XFA_ELEMENT_DefaultTypeface, - XFA_XDPPACKET_Config, XFA_OBJECTTYPE_NodeV}, - {0x95b37897, L"manifest", XFA_ELEMENT_Manifest, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_Node}, - {0x97b76b54, L"overflow", XFA_ELEMENT_Overflow, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_Node}, - {0x9a57861b, L"linear", XFA_ELEMENT_Linear, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_Node}, - {0x9ad5a821, L"currencySymbol", XFA_ELEMENT_CurrencySymbol, - XFA_XDPPACKET_LocaleSet, XFA_OBJECTTYPE_ContentNode}, - {0x9c6471b3, L"delete", XFA_ELEMENT_Delete, XFA_XDPPACKET_SourceSet, - XFA_OBJECTTYPE_TextNode}, - {0x9deea61d, L"deltas", XFA_ELEMENT_Deltas, XFA_XDPPACKET_Form, - XFA_OBJECTTYPE_OrdinaryObject}, - {0x9e67de21, L"digestMethod", XFA_ELEMENT_DigestMethod, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_NodeC}, - {0x9f3e9510, L"instanceManager", XFA_ELEMENT_InstanceManager, - XFA_XDPPACKET_Form, XFA_OBJECTTYPE_Node}, - {0xa0799892, L"equateRange", XFA_ELEMENT_EquateRange, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_NodeV}, - {0xa084a381, L"medium", XFA_ELEMENT_Medium, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_Node}, - {0xa1211b8b, L"textEdit", XFA_ELEMENT_TextEdit, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_Node}, - {0xa17008f0, L"templateCache", XFA_ELEMENT_TemplateCache, - XFA_XDPPACKET_Config, XFA_OBJECTTYPE_Node}, - {0xa4f7b88f, L"compressObjectStream", XFA_ELEMENT_CompressObjectStream, - XFA_XDPPACKET_Config, XFA_OBJECTTYPE_ContentNode}, - {0xa65f5d17, L"dataValue", XFA_ELEMENT_DataValue, XFA_XDPPACKET_Datasets, - XFA_OBJECTTYPE_Node}, - {0xa6caaa89, L"accessibleContent", XFA_ELEMENT_AccessibleContent, - XFA_XDPPACKET_Config, XFA_OBJECTTYPE_ContentNode}, - {0xa8c7d5e2, L"nodeList", XFA_ELEMENT_NodeList, XFA_XDPPACKET_XDP, - XFA_OBJECTTYPE_NodeList}, - {0xa94cc00b, L"includeXDPContent", XFA_ELEMENT_IncludeXDPContent, - XFA_XDPPACKET_Config, XFA_OBJECTTYPE_ContentNode}, - {0xa9b081a1, L"xmlConnection", XFA_ELEMENT_XmlConnection, - XFA_XDPPACKET_ConnectionSet, XFA_OBJECTTYPE_Node}, - {0xab2a3b74, L"validateApprovalSignatures", - XFA_ELEMENT_ValidateApprovalSignatures, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_NodeV}, - {0xab8c5a2b, L"signData", XFA_ELEMENT_SignData, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_Node}, - {0xabaa2ceb, L"packets", XFA_ELEMENT_Packets, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_ContentNode}, - {0xadba359c, L"datePattern", XFA_ELEMENT_DatePattern, - XFA_XDPPACKET_LocaleSet, XFA_OBJECTTYPE_ContentNode}, - {0xae222b2b, L"duplexOption", XFA_ELEMENT_DuplexOption, - XFA_XDPPACKET_Config, XFA_OBJECTTYPE_ContentNode}, - {0xb012effb, L"base", XFA_ELEMENT_Base, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_ContentNode}, - {0xb0e5485d, L"bind", XFA_ELEMENT_Bind, - XFA_XDPPACKET_SourceSet | XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - XFA_OBJECTTYPE_Node}, - {0xb45d61b2, L"compression", XFA_ELEMENT_Compression, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_Node}, - {0xb563f0ff, L"user", XFA_ELEMENT_User, XFA_XDPPACKET_SourceSet, - XFA_OBJECTTYPE_TextNode}, - {0xb5848ad5, L"rectangle", XFA_ELEMENT_Rectangle, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_Node}, - {0xb6dacb72, L"effectiveOutputPolicy", XFA_ELEMENT_EffectiveOutputPolicy, - XFA_XDPPACKET_ConnectionSet, XFA_OBJECTTYPE_Node}, - {0xb7d7654d, L"ADBE_JSDebugger", XFA_ELEMENT_ADBE_JSDebugger, - XFA_XDPPACKET_Config, XFA_OBJECTTYPE_ContentNode}, - {0xbab37f73, L"acrobat7", XFA_ELEMENT_Acrobat7, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_Node}, - {0xbc70081e, L"interactive", XFA_ELEMENT_Interactive, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_ContentNode}, - {0xbc8fa350, L"locale", XFA_ELEMENT_Locale, - XFA_XDPPACKET_Config | XFA_XDPPACKET_LocaleSet, XFA_OBJECTTYPE_Node}, - {0xbcd44940, L"currentPage", XFA_ELEMENT_CurrentPage, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_ContentNode}, - {0xbde9abda, L"data", XFA_ELEMENT_Data, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_Node}, - {0xbde9abde, L"date", XFA_ELEMENT_Date, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_ContentNode}, - {0xbe52dfbf, L"desc", XFA_ELEMENT_Desc, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_Node}, - {0xbf4b6405, L"encrypt", XFA_ELEMENT_Encrypt, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Config | XFA_XDPPACKET_Form, - XFA_OBJECTTYPE_ContentNode}, - {0xbfa87cce, L"draw", XFA_ELEMENT_Draw, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_ContainerNode}, - {0xc181ff4b, L"encryption", XFA_ELEMENT_Encryption, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_Node}, - {0xc1970f40, L"meridiemNames", XFA_ELEMENT_MeridiemNames, - XFA_XDPPACKET_LocaleSet, XFA_OBJECTTYPE_Node}, - {0xc5ad9f5e, L"messaging", XFA_ELEMENT_Messaging, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_Node}, - {0xc69549f4, L"speak", XFA_ELEMENT_Speak, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_TextNode}, - {0xc7743dc7, L"dataGroup", XFA_ELEMENT_DataGroup, XFA_XDPPACKET_Datasets, - XFA_OBJECTTYPE_Node}, - {0xc7eb20e9, L"common", XFA_ELEMENT_Common, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_Node}, - {0xc85d4528, L"#text", XFA_ELEMENT_Sharptext, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Config | XFA_XDPPACKET_LocaleSet | - XFA_XDPPACKET_ConnectionSet | XFA_XDPPACKET_SourceSet | - XFA_XDPPACKET_Form, - XFA_OBJECTTYPE_NodeV}, - {0xc861556a, L"paginationOverride", XFA_ELEMENT_PaginationOverride, - XFA_XDPPACKET_Config, XFA_OBJECTTYPE_ContentNode}, - {0xc903dabb, L"reasons", XFA_ELEMENT_Reasons, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_Node}, - {0xc9a8127f, L"signatureProperties", XFA_ELEMENT_SignatureProperties, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_Node}, - {0xca010c2d, L"threshold", XFA_ELEMENT_Threshold, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_NodeV}, - {0xcb4c5e96, L"appearanceFilter", XFA_ELEMENT_AppearanceFilter, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_NodeC}, - {0xcc92aba7, L"fill", XFA_ELEMENT_Fill, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_Node}, - {0xcd308b77, L"font", XFA_ELEMENT_Font, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Config | XFA_XDPPACKET_Form, - XFA_OBJECTTYPE_Node}, - {0xcd309ff4, L"form", XFA_ELEMENT_Form, XFA_XDPPACKET_Form, - XFA_OBJECTTYPE_ModelNode}, - {0xcebcca2d, L"mediumInfo", XFA_ELEMENT_MediumInfo, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_Node}, - {0xcfe0d643, L"certificate", XFA_ELEMENT_Certificate, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_TextNode}, - {0xd012c033, L"password", XFA_ELEMENT_Password, XFA_XDPPACKET_SourceSet, - XFA_OBJECTTYPE_TextNode}, - {0xd01604bd, L"runScripts", XFA_ELEMENT_RunScripts, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_ContentNode}, - {0xd1227e6f, L"trace", XFA_ELEMENT_Trace, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_Node}, - {0xd1532876, L"float", XFA_ELEMENT_Float, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_ContentNode}, - {0xd17a6c30, L"renderPolicy", XFA_ELEMENT_RenderPolicy, - XFA_XDPPACKET_Config, XFA_OBJECTTYPE_ContentNode}, - {0xd4bf6823, L"logPseudoModel", XFA_ELEMENT_LogPseudoModel, - XFA_XDPPACKET_XDP, XFA_OBJECTTYPE_OrdinaryObject}, - {0xd58aa962, L"destination", XFA_ELEMENT_Destination, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_ContentNode}, - {0xd6e27f1d, L"value", XFA_ELEMENT_Value, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_Node}, - {0xd7a14462, L"bookend", XFA_ELEMENT_Bookend, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_Node}, - {0xd8c31254, L"exObject", XFA_ELEMENT_ExObject, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_Node}, - {0xda6a8590, L"openAction", XFA_ELEMENT_OpenAction, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_Node}, - {0xdab4fb7d, L"neverEmbed", XFA_ELEMENT_NeverEmbed, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_NodeV}, - {0xdb98475f, L"bindItems", XFA_ELEMENT_BindItems, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_Node}, - {0xdbfbe02e, L"calculate", XFA_ELEMENT_Calculate, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_Node}, - {0xdd7676ed, L"print", XFA_ELEMENT_Print, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_ContentNode}, - {0xdde273d7, L"extras", XFA_ELEMENT_Extras, - XFA_XDPPACKET_SourceSet | XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - XFA_OBJECTTYPE_Node}, - {0xde146b34, L"proto", XFA_ELEMENT_Proto, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_Node}, - {0xdf059321, L"dSigData", XFA_ELEMENT_DSigData, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_Node}, - {0xdfccf030, L"creator", XFA_ELEMENT_Creator, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_ContentNode}, - {0xdff78c6a, L"connect", XFA_ELEMENT_Connect, - XFA_XDPPACKET_SourceSet | XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, - XFA_OBJECTTYPE_Node}, - {0xe11a2cbc, L"permissions", XFA_ELEMENT_Permissions, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_Node}, - {0xe14c801c, L"connectionSet", XFA_ELEMENT_ConnectionSet, - XFA_XDPPACKET_ConnectionSet, XFA_OBJECTTYPE_ModelNode}, - {0xe1c83a14, L"submit", XFA_ELEMENT_Submit, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_Node}, - {0xe29821cd, L"range", XFA_ELEMENT_Range, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_NodeV}, - {0xe38d83c7, L"linearized", XFA_ELEMENT_Linearized, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_ContentNode}, - {0xe3aa2578, L"packet", XFA_ELEMENT_Packet, XFA_XDPPACKET_XDP, - XFA_OBJECTTYPE_NodeC}, - {0xe3aa860e, L"rootElement", XFA_ELEMENT_RootElement, - XFA_XDPPACKET_ConnectionSet, XFA_OBJECTTYPE_TextNode}, - {0xe3e553fa, L"plaintextMetadata", XFA_ELEMENT_PlaintextMetadata, - XFA_XDPPACKET_Config, XFA_OBJECTTYPE_ContentNode}, - {0xe3e6e4f2, L"numberSymbols", XFA_ELEMENT_NumberSymbols, - XFA_XDPPACKET_LocaleSet, XFA_OBJECTTYPE_Node}, - {0xe3f067f6, L"printHighQuality", XFA_ELEMENT_PrintHighQuality, - XFA_XDPPACKET_Config, XFA_OBJECTTYPE_ContentNode}, - {0xe3fd078c, L"driver", XFA_ELEMENT_Driver, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_Node}, - {0xe48b34f2, L"incrementalLoad", XFA_ELEMENT_IncrementalLoad, - XFA_XDPPACKET_Config, XFA_OBJECTTYPE_NodeV}, - {0xe550e7c2, L"subjectDN", XFA_ELEMENT_SubjectDN, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_NodeC}, - {0xe6669a78, L"compressLogicalStructure", - XFA_ELEMENT_CompressLogicalStructure, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_ContentNode}, - {0xe7a7ea02, L"incrementalMerge", XFA_ELEMENT_IncrementalMerge, - XFA_XDPPACKET_Config, XFA_OBJECTTYPE_ContentNode}, - {0xe948530d, L"radial", XFA_ELEMENT_Radial, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_Node}, - {0xea8d6999, L"variables", XFA_ELEMENT_Variables, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_ContainerNode}, - {0xeaa142c0, L"timePatterns", XFA_ELEMENT_TimePatterns, - XFA_XDPPACKET_LocaleSet, XFA_OBJECTTYPE_Node}, - {0xeb943a71, L"effectiveInputPolicy", XFA_ELEMENT_EffectiveInputPolicy, - XFA_XDPPACKET_ConnectionSet, XFA_OBJECTTYPE_Node}, - {0xef04a2bc, L"nameAttr", XFA_ELEMENT_NameAttr, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_NodeV}, - {0xf07222ab, L"conformance", XFA_ELEMENT_Conformance, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_ContentNode}, - {0xf0aaaadc, L"transform", XFA_ELEMENT_Transform, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_Node}, - {0xf1433e88, L"lockDocument", XFA_ELEMENT_LockDocument, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_ContentNode}, - {0xf54eb997, L"breakAfter", XFA_ELEMENT_BreakAfter, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_Node}, - {0xf616da28, L"line", XFA_ELEMENT_Line, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_Node}, - {0xf616f3dc, L"list", XFA_ELEMENT_List, XFA_XDPPACKET_XDP, - XFA_OBJECTTYPE_OrdinaryList}, - {0xf7055fb1, L"source", XFA_ELEMENT_Source, XFA_XDPPACKET_SourceSet, - XFA_OBJECTTYPE_Node}, - {0xf7eebe1c, L"occur", XFA_ELEMENT_Occur, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_Node}, - {0xf8d10d97, L"pickTrayByPDFSize", XFA_ELEMENT_PickTrayByPDFSize, - XFA_XDPPACKET_Config, XFA_OBJECTTYPE_ContentNode}, - {0xf8f19e3a, L"monthNames", XFA_ELEMENT_MonthNames, XFA_XDPPACKET_LocaleSet, - XFA_OBJECTTYPE_Node}, - {0xf984149b, L"severity", XFA_ELEMENT_Severity, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_NodeV}, - {0xf9bcb037, L"groupParent", XFA_ELEMENT_GroupParent, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_NodeV}, - {0xfbc42fff, L"documentAssembly", XFA_ELEMENT_DocumentAssembly, - XFA_XDPPACKET_Config, XFA_OBJECTTYPE_ContentNode}, - {0xfc78159f, L"numberSymbol", XFA_ELEMENT_NumberSymbol, - XFA_XDPPACKET_LocaleSet, XFA_OBJECTTYPE_ContentNode}, - {0xfcbd606c, L"tagged", XFA_ELEMENT_Tagged, XFA_XDPPACKET_Config, - XFA_OBJECTTYPE_ContentNode}, - {0xff063802, L"items", XFA_ELEMENT_Items, - XFA_XDPPACKET_Template | XFA_XDPPACKET_Form, XFA_OBJECTTYPE_Node}, -}; -const int32_t g_iXFAElementCount = - sizeof(g_XFAElementData) / sizeof(XFA_ELEMENTINFO); -const XFA_ELEMENTHIERARCHY g_XFAElementPropertyIndex[] = { - {0, 8}, {8, 0}, {8, 14}, {22, 0}, {22, 0}, {22, 6}, {28, 0}, - {28, 0}, {28, 1}, {29, 3}, {32, 0}, {32, 0}, {32, 0}, {32, 3}, - {35, 1}, {36, 0}, {36, 0}, {36, 2}, {38, 0}, {38, 0}, {38, 0}, - {38, 4}, {42, 0}, {42, 0}, {42, 1}, {43, 0}, {43, 8}, {51, 19}, - {70, 0}, {70, 0}, {70, 2}, {72, 1}, {73, 0}, {73, 2}, {75, 4}, - {79, 1}, {80, 1}, {81, 0}, {81, 0}, {81, 3}, {84, 0}, {84, 4}, - {88, 4}, {92, 1}, {93, 0}, {93, 4}, {97, 9}, {106, 14}, {120, 0}, - {120, 0}, {120, 5}, {125, 0}, {125, 1}, {126, 0}, {126, 0}, {126, 0}, - {126, 0}, {126, 0}, {126, 1}, {127, 0}, {127, 0}, {127, 0}, {127, 0}, - {127, 0}, {127, 0}, {127, 0}, {127, 6}, {133, 1}, {134, 0}, {134, 1}, - {135, 0}, {135, 0}, {135, 1}, {136, 2}, {138, 5}, {143, 2}, {145, 0}, - {145, 0}, {145, 0}, {145, 0}, {145, 0}, {145, 5}, {150, 0}, {150, 0}, - {150, 0}, {150, 0}, {150, 0}, {150, 0}, {150, 0}, {150, 2}, {152, 0}, - {152, 0}, {152, 0}, {152, 17}, {169, 0}, {169, 1}, {170, 0}, {170, 0}, - {170, 2}, {172, 0}, {172, 0}, {172, 1}, {173, 0}, {173, 0}, {173, 2}, - {175, 2}, {177, 0}, {177, 0}, {177, 0}, {177, 11}, {188, 0}, {188, 0}, - {188, 0}, {188, 0}, {188, 0}, {188, 4}, {192, 3}, {195, 0}, {195, 0}, - {195, 0}, {195, 0}, {195, 0}, {195, 0}, {195, 9}, {204, 0}, {204, 0}, - {204, 17}, {221, 0}, {221, 0}, {221, 0}, {221, 0}, {221, 0}, {221, 0}, - {221, 0}, {221, 0}, {221, 0}, {221, 4}, {225, 0}, {225, 0}, {225, 0}, - {225, 0}, {225, 2}, {227, 3}, {230, 0}, {230, 0}, {230, 2}, {232, 0}, - {232, 1}, {233, 2}, {235, 2}, {237, 0}, {237, 0}, {237, 2}, {239, 0}, - {239, 1}, {240, 1}, {241, 2}, {243, 0}, {243, 3}, {246, 4}, {250, 0}, - {250, 1}, {251, 2}, {253, 0}, {253, 0}, {253, 0}, {253, 0}, {253, 0}, - {253, 0}, {253, 0}, {253, 0}, {253, 0}, {253, 0}, {253, 2}, {255, 2}, - {257, 0}, {257, 6}, {263, 5}, {268, 0}, {268, 0}, {268, 0}, {268, 3}, - {271, 0}, {271, 0}, {271, 3}, {274, 4}, {278, 0}, {278, 0}, {278, 4}, - {282, 0}, {282, 0}, {282, 5}, {287, 0}, {287, 5}, {292, 0}, {292, 0}, - {292, 0}, {292, 1}, {293, 0}, {293, 0}, {293, 1}, {294, 0}, {294, 2}, - {296, 0}, {296, 0}, {296, 0}, {296, 0}, {296, 1}, {297, 0}, {297, 0}, - {297, 4}, {301, 0}, {301, 0}, {301, 0}, {301, 0}, {301, 0}, {301, 0}, - {301, 1}, {302, 0}, {302, 2}, {304, 0}, {304, 0}, {304, 0}, {304, 0}, - {304, 1}, {305, 4}, {309, 0}, {309, 3}, {312, 0}, {312, 0}, {312, 1}, - {313, 0}, {313, 8}, {321, 0}, {321, 10}, {331, 0}, {331, 10}, {341, 1}, - {342, 12}, {354, 3}, {357, 1}, {358, 0}, {358, 0}, {358, 0}, {358, 8}, - {366, 0}, {366, 0}, {366, 0}, {366, 0}, {366, 0}, {366, 0}, {366, 7}, - {373, 2}, {375, 0}, {375, 1}, {376, 0}, {376, 0}, {376, 0}, {376, 0}, - {376, 0}, {376, 0}, {376, 0}, {376, 0}, {376, 13}, {389, 0}, {389, 1}, - {390, 1}, {391, 0}, {391, 0}, {391, 3}, {394, 0}, {394, 0}, {394, 0}, - {394, 0}, {394, 0}, {394, 4}, {398, 9}, {407, 0}, {407, 1}, {408, 0}, - {408, 0}, {408, 0}, {408, 0}, {408, 0}, {408, 1}, {409, 0}, {409, 2}, - {411, 0}, {411, 0}, {411, 0}, {411, 0}, {411, 2}, {413, 0}, {413, 1}, - {414, 0}, {414, 0}, {414, 0}, {414, 7}, {421, 0}, {421, 1}, {422, 1}, - {423, 0}, {423, 1}, {424, 1}, {425, 0}, {425, 1}, {426, 0}, {426, 0}, - {426, 0}, {426, 0}, {426, 0}, {426, 0}, -}; -const XFA_PROPERTY g_XFAElementPropertyData[] = { - {XFA_ELEMENT_FontInfo, 1, 0}, - {XFA_ELEMENT_Jog, 1, 0}, - {XFA_ELEMENT_Xdc, 1, 0}, - {XFA_ELEMENT_BatchOutput, 1, 0}, - {XFA_ELEMENT_OutputBin, 1, 0}, - {XFA_ELEMENT_Compress, 1, 0}, - {XFA_ELEMENT_Staple, 1, 0}, - {XFA_ELEMENT_MediumInfo, 1, 0}, - {XFA_ELEMENT_CheckButton, 1, XFA_PROPERTYFLAG_OneOf}, - {XFA_ELEMENT_ChoiceList, 1, XFA_PROPERTYFLAG_OneOf}, - {XFA_ELEMENT_DefaultUi, 1, XFA_PROPERTYFLAG_OneOf}, - {XFA_ELEMENT_Barcode, 1, XFA_PROPERTYFLAG_OneOf}, - {XFA_ELEMENT_Button, 1, XFA_PROPERTYFLAG_OneOf}, - {XFA_ELEMENT_DateTimeEdit, 1, XFA_PROPERTYFLAG_OneOf}, - {XFA_ELEMENT_Picture, 1, 0}, - {XFA_ELEMENT_ImageEdit, 1, XFA_PROPERTYFLAG_OneOf}, - {XFA_ELEMENT_PasswordEdit, 1, XFA_PROPERTYFLAG_OneOf}, - {XFA_ELEMENT_NumericEdit, 1, XFA_PROPERTYFLAG_OneOf}, - {XFA_ELEMENT_Signature, 1, XFA_PROPERTYFLAG_OneOf}, - {XFA_ELEMENT_TextEdit, 1, XFA_PROPERTYFLAG_OneOf}, - {XFA_ELEMENT_ExObject, 1, XFA_PROPERTYFLAG_OneOf}, - {XFA_ELEMENT_Extras, 1, 0}, - {XFA_ELEMENT_Break, 1, 0}, - {XFA_ELEMENT_Overflow, 1, 0}, - {XFA_ELEMENT_Desc, 1, 0}, - {XFA_ELEMENT_Bookend, 1, 0}, - {XFA_ELEMENT_Extras, 1, 0}, - {XFA_ELEMENT_Occur, 1, 0}, - {XFA_ELEMENT_Extras, 1, 0}, - {XFA_ELEMENT_SubsetBelow, 1, 0}, - {XFA_ELEMENT_Map, 1, 0}, - {XFA_ELEMENT_Embed, 1, 0}, - {XFA_ELEMENT_Margin, 1, 0}, - {XFA_ELEMENT_Border, 1, 0}, - {XFA_ELEMENT_Extras, 1, 0}, - {XFA_ELEMENT_DatePattern, 4, 0}, - {XFA_ELEMENT_Edge, 1, 0}, - {XFA_ELEMENT_Fill, 1, 0}, - {XFA_ELEMENT_To, 1, 0}, - {XFA_ELEMENT_Uri, 1, 0}, - {XFA_ELEMENT_Mode, 1, 0}, - {XFA_ELEMENT_Threshold, 1, 0}, - {XFA_ELEMENT_Script, 1, 0}, - {XFA_ELEMENT_FontInfo, 1, 0}, - {XFA_ELEMENT_Jog, 1, 0}, - {XFA_ELEMENT_Xdc, 1, 0}, - {XFA_ELEMENT_BatchOutput, 1, 0}, - {XFA_ELEMENT_PageOffset, 1, 0}, - {XFA_ELEMENT_OutputBin, 1, 0}, - {XFA_ELEMENT_Staple, 1, 0}, - {XFA_ELEMENT_MediumInfo, 1, 0}, - {XFA_ELEMENT_AdobeExtensionLevel, 1, 0}, - {XFA_ELEMENT_FontInfo, 1, 0}, - {XFA_ELEMENT_Xdc, 1, 0}, - {XFA_ELEMENT_Pdfa, 1, 0}, - {XFA_ELEMENT_BatchOutput, 1, 0}, - {XFA_ELEMENT_ViewerPreferences, 1, 0}, - {XFA_ELEMENT_ScriptModel, 1, 0}, - {XFA_ELEMENT_Version, 1, 0}, - {XFA_ELEMENT_SubmitFormat, 1, 0}, - {XFA_ELEMENT_SilentPrint, 1, 0}, - {XFA_ELEMENT_Producer, 1, 0}, - {XFA_ELEMENT_Compression, 1, 0}, - {XFA_ELEMENT_Interactive, 1, 0}, - {XFA_ELEMENT_Encryption, 1, 0}, - {XFA_ELEMENT_RenderPolicy, 1, 0}, - {XFA_ELEMENT_OpenAction, 1, 0}, - {XFA_ELEMENT_Creator, 1, 0}, - {XFA_ELEMENT_Linearized, 1, 0}, - {XFA_ELEMENT_Tagged, 1, 0}, - {XFA_ELEMENT_Uri, 1, 0}, - {XFA_ELEMENT_Xsl, 1, 0}, - {XFA_ELEMENT_Packets, 1, 0}, - {XFA_ELEMENT_Uri, 1, 0}, - {XFA_ELEMENT_Debug, 1, 0}, - {XFA_ELEMENT_FontInfo, 1, 0}, - {XFA_ELEMENT_Xdc, 1, 0}, - {XFA_ELEMENT_BatchOutput, 1, 0}, - {XFA_ELEMENT_FlipLabel, 1, 0}, - {XFA_ELEMENT_TemplateCache, 1, 0}, - {XFA_ELEMENT_Extras, 1, 0}, - {XFA_ELEMENT_Margin, 1, 0}, - {XFA_ELEMENT_Border, 1, 0}, - {XFA_ELEMENT_Extras, 1, 0}, - {XFA_ELEMENT_FontInfo, 1, 0}, - {XFA_ELEMENT_Xdc, 1, 0}, - {XFA_ELEMENT_BatchOutput, 1, 0}, - {XFA_ELEMENT_FlipLabel, 1, 0}, - {XFA_ELEMENT_EraNames, 1, 0}, - {XFA_ELEMENT_DayNames, 2, 0}, - {XFA_ELEMENT_MeridiemNames, 1, 0}, - {XFA_ELEMENT_MonthNames, 2, 0}, - {XFA_ELEMENT_Hyphenation, 1, 0}, - {XFA_ELEMENT_Amd, 1, 0}, - {XFA_ELEMENT_Part, 1, 0}, - {XFA_ELEMENT_IncludeXDPContent, 1, 0}, - {XFA_ELEMENT_Conformance, 1, 0}, - {XFA_ELEMENT_Mdp, 1, 0}, - {XFA_ELEMENT_Certificates, 1, 0}, - {XFA_ELEMENT_TimeStamp, 1, 0}, - {XFA_ELEMENT_Handler, 1, 0}, - {XFA_ELEMENT_DigestMethods, 1, 0}, - {XFA_ELEMENT_Encodings, 1, 0}, - {XFA_ELEMENT_Reasons, 1, 0}, - {XFA_ELEMENT_AppearanceFilter, 1, 0}, - {XFA_ELEMENT_LockDocument, 1, 0}, - {XFA_ELEMENT_Xdp, 1, 0}, - {XFA_ELEMENT_Cache, 1, 0}, - {XFA_ELEMENT_Pagination, 1, 0}, - {XFA_ELEMENT_Overprint, 1, 0}, - {XFA_ELEMENT_BehaviorOverride, 1, 0}, - {XFA_ELEMENT_Copies, 1, 0}, - {XFA_ELEMENT_Output, 1, 0}, - {XFA_ELEMENT_Validate, 1, 0}, - {XFA_ELEMENT_Layout, 1, 0}, - {XFA_ELEMENT_Script, 1, 0}, - {XFA_ELEMENT_Common, 1, 0}, - {XFA_ELEMENT_PaginationOverride, 1, 0}, - {XFA_ELEMENT_Destination, 1, 0}, - {XFA_ELEMENT_IncrementalMerge, 1, 0}, - {XFA_ELEMENT_Execute, 1, XFA_PROPERTYFLAG_OneOf}, - {XFA_ELEMENT_Script, 1, XFA_PROPERTYFLAG_OneOf}, - {XFA_ELEMENT_SignData, 1, XFA_PROPERTYFLAG_OneOf}, - {XFA_ELEMENT_Extras, 1, 0}, - {XFA_ELEMENT_Submit, 1, XFA_PROPERTYFLAG_OneOf}, - {XFA_ELEMENT_Extras, 1, 0}, - {XFA_ELEMENT_CurrencySymbol, 3, 0}, - {XFA_ELEMENT_Operation, 1, 0}, - {XFA_ELEMENT_WsdlAddress, 1, 0}, - {XFA_ELEMENT_SoapAddress, 1, 0}, - {XFA_ELEMENT_SoapAction, 1, 0}, - {XFA_ELEMENT_EffectiveOutputPolicy, 1, 0}, - {XFA_ELEMENT_EffectiveInputPolicy, 1, 0}, - {XFA_ELEMENT_Uri, 1, 0}, - {XFA_ELEMENT_Era, 2, 0}, - {XFA_ELEMENT_Extras, 1, 0}, - {XFA_ELEMENT_Picture, 1, 0}, - {XFA_ELEMENT_Extras, 1, 0}, - {XFA_ELEMENT_Margin, 1, 0}, - {XFA_ELEMENT_Edge, 4, 0}, - {XFA_ELEMENT_Corner, 4, 0}, - {XFA_ELEMENT_Fill, 1, 0}, - {XFA_ELEMENT_Extras, 1, 0}, - {XFA_ELEMENT_Desc, 1, 0}, - {XFA_ELEMENT_Extras, 1, 0}, - {XFA_ELEMENT_KeyUsage, 1, 0}, - {XFA_ELEMENT_SubjectDNs, 1, 0}, - {XFA_ELEMENT_Issuers, 1, 0}, - {XFA_ELEMENT_Signing, 1, 0}, - {XFA_ELEMENT_Oids, 1, 0}, - {XFA_ELEMENT_Color, 1, 0}, - {XFA_ELEMENT_Extras, 1, 0}, - {XFA_ELEMENT_Ui, 1, 0}, - {XFA_ELEMENT_Margin, 1, 0}, - {XFA_ELEMENT_Para, 1, 0}, - {XFA_ELEMENT_Format, 1, 0}, - {XFA_ELEMENT_Border, 1, 0}, - {XFA_ELEMENT_Assist, 1, 0}, - {XFA_ELEMENT_Traversal, 1, 0}, - {XFA_ELEMENT_Keep, 1, 0}, - {XFA_ELEMENT_Validate, 1, 0}, - {XFA_ELEMENT_Caption, 1, 0}, - {XFA_ELEMENT_Bind, 1, 0}, - {XFA_ELEMENT_Desc, 1, 0}, - {XFA_ELEMENT_Font, 1, 0}, - {XFA_ELEMENT_Value, 1, 0}, - {XFA_ELEMENT_Calculate, 1, 0}, - {XFA_ELEMENT_Extras, 1, 0}, - {XFA_ELEMENT_Items, 2, 0}, - {XFA_ELEMENT_Uri, 1, 0}, - {XFA_ELEMENT_Desc, 1, 0}, - {XFA_ELEMENT_Extras, 1, 0}, - {XFA_ELEMENT_Extras, 1, 0}, - {XFA_ELEMENT_Color, 1, 0}, - {XFA_ELEMENT_Extras, 1, 0}, - {XFA_ELEMENT_Color, 1, 0}, - {XFA_ELEMENT_Extras, 1, 0}, - {XFA_ELEMENT_Margin, 1, 0}, - {XFA_ELEMENT_Para, 1, 0}, - {XFA_ELEMENT_Border, 1, 0}, - {XFA_ELEMENT_Assist, 1, 0}, - {XFA_ELEMENT_Traversal, 1, 0}, - {XFA_ELEMENT_Validate, 1, 0}, - {XFA_ELEMENT_Caption, 1, 0}, - {XFA_ELEMENT_Bind, 1, 0}, - {XFA_ELEMENT_Desc, 1, 0}, - {XFA_ELEMENT_Calculate, 1, 0}, - {XFA_ELEMENT_Extras, 1, 0}, - {XFA_ELEMENT_Margin, 1, 0}, - {XFA_ELEMENT_Border, 1, 0}, - {XFA_ELEMENT_Comb, 1, 0}, - {XFA_ELEMENT_Extras, 1, 0}, - {XFA_ELEMENT_Present, 1, 0}, - {XFA_ELEMENT_Acrobat, 1, 0}, - {XFA_ELEMENT_Trace, 1, 0}, - {XFA_ELEMENT_PrintScaling, 1, 0}, - {XFA_ELEMENT_Enforce, 1, 0}, - {XFA_ELEMENT_NumberOfCopies, 1, 0}, - {XFA_ELEMENT_PageRange, 1, 0}, - {XFA_ELEMENT_AddViewerPreferences, 1, 0}, - {XFA_ELEMENT_ADBE_JSConsole, 1, 0}, - {XFA_ELEMENT_DuplexOption, 1, 0}, - {XFA_ELEMENT_ADBE_JSDebugger, 1, 0}, - {XFA_ELEMENT_PickTrayByPDFSize, 1, 0}, - {XFA_ELEMENT_Break, 1, 0}, - {XFA_ELEMENT_Margin, 1, 0}, - {XFA_ELEMENT_Para, 1, 0}, - {XFA_ELEMENT_Border, 1, 0}, - {XFA_ELEMENT_Assist, 1, 0}, - {XFA_ELEMENT_Traversal, 1, 0}, - {XFA_ELEMENT_Keep, 1, 0}, - {XFA_ELEMENT_Validate, 1, 0}, - {XFA_ELEMENT_PageSet, 1, 0}, - {XFA_ELEMENT_Overflow, 1, 0}, - {XFA_ELEMENT_Bind, 1, 0}, - {XFA_ELEMENT_Desc, 1, 0}, - {XFA_ELEMENT_Bookend, 1, 0}, - {XFA_ELEMENT_Calculate, 1, 0}, - {XFA_ELEMENT_Extras, 1, 0}, - {XFA_ELEMENT_Variables, 1, 0}, - {XFA_ELEMENT_Occur, 1, 0}, - {XFA_ELEMENT_Query, 1, 0}, - {XFA_ELEMENT_Insert, 1, 0}, - {XFA_ELEMENT_Update, 1, 0}, - {XFA_ELEMENT_Delete, 1, 0}, - {XFA_ELEMENT_MsgId, 1, 0}, - {XFA_ELEMENT_Severity, 1, 0}, - {XFA_ELEMENT_To, 1, 0}, - {XFA_ELEMENT_Uri, 1, 0}, - {XFA_ELEMENT_Type, 1, 0}, - {XFA_ELEMENT_ToolTip, 1, 0}, - {XFA_ELEMENT_Speak, 1, 0}, - {XFA_ELEMENT_Extras, 1, 0}, - {XFA_ELEMENT_AddSilentPrint, 1, 0}, - {XFA_ELEMENT_PrinterName, 1, 0}, - {XFA_ELEMENT_FontInfo, 1, 0}, - {XFA_ELEMENT_Xdc, 1, 0}, - {XFA_ELEMENT_Color, 1, 0}, - {XFA_ELEMENT_Extras, 1, 0}, - {XFA_ELEMENT_Extras, 1, 0}, - {XFA_ELEMENT_Extras, 1, 0}, - {XFA_ELEMENT_RecordSet, 1, 0}, - {XFA_ELEMENT_Select, 1, 0}, - {XFA_ELEMENT_Margin, 1, 0}, - {XFA_ELEMENT_Border, 1, 0}, - {XFA_ELEMENT_Extras, 1, 0}, - {XFA_ELEMENT_Message, 1, 0}, - {XFA_ELEMENT_Picture, 1, 0}, - {XFA_ELEMENT_Script, 1, 0}, - {XFA_ELEMENT_Extras, 1, 0}, - {XFA_ELEMENT_NumberPattern, 4, 0}, - {XFA_ELEMENT_Extras, 1, 0}, - {XFA_ELEMENT_Occur, 1, 0}, - {XFA_ELEMENT_Uri, 1, 0}, - {XFA_ELEMENT_RootElement, 1, 0}, - {XFA_ELEMENT_Script, 1, 0}, - {XFA_ELEMENT_Extras, 1, 0}, - {XFA_ELEMENT_Uri, 1, 0}, - {XFA_ELEMENT_Xsl, 1, 0}, - {XFA_ELEMENT_StartPage, 1, 0}, - {XFA_ELEMENT_Relevant, 1, 0}, - {XFA_ELEMENT_Base, 1, 0}, - {XFA_ELEMENT_Extras, 1, 0}, - {XFA_ELEMENT_AutoSave, 1, 0}, - {XFA_ELEMENT_Validate, 1, 0}, - {XFA_ELEMENT_ValidateApprovalSignatures, 1, 0}, - {XFA_ELEMENT_Acrobat7, 1, 0}, - {XFA_ELEMENT_Common, 1, 0}, - {XFA_ELEMENT_Exclude, 1, 0}, - {XFA_ELEMENT_CurrentPage, 1, 0}, - {XFA_ELEMENT_RunScripts, 1, 0}, - {XFA_ELEMENT_Margin, 1, 0}, - {XFA_ELEMENT_Border, 1, 0}, - {XFA_ELEMENT_Extras, 1, 0}, - {XFA_ELEMENT_Margin, 1, 0}, - {XFA_ELEMENT_Border, 1, 0}, - {XFA_ELEMENT_Comb, 1, 0}, - {XFA_ELEMENT_Extras, 1, 0}, - {XFA_ELEMENT_Medium, 1, 0}, - {XFA_ELEMENT_Desc, 1, 0}, - {XFA_ELEMENT_Extras, 1, 0}, - {XFA_ELEMENT_Occur, 1, 0}, - {XFA_ELEMENT_Margin, 1, 0}, - {XFA_ELEMENT_Filter, 1, 0}, - {XFA_ELEMENT_Border, 1, 0}, - {XFA_ELEMENT_Manifest, 1, 0}, - {XFA_ELEMENT_Extras, 1, 0}, - {XFA_ELEMENT_Margin, 1, 0}, - {XFA_ELEMENT_Para, 1, 0}, - {XFA_ELEMENT_Font, 1, 0}, - {XFA_ELEMENT_Value, 1, 0}, - {XFA_ELEMENT_Extras, 1, 0}, - {XFA_ELEMENT_Day, 7, 0}, - {XFA_ELEMENT_Extras, 1, 0}, - {XFA_ELEMENT_Color, 1, 0}, - {XFA_ELEMENT_Extras, 1, 0}, - {XFA_ELEMENT_Occur, 1, 0}, - {XFA_ELEMENT_Margin, 1, 0}, - {XFA_ELEMENT_Border, 1, 0}, - {XFA_ELEMENT_Comb, 1, 0}, - {XFA_ELEMENT_Extras, 1, 0}, - {XFA_ELEMENT_Uri, 1, 0}, - {XFA_ELEMENT_Filter, 1, 0}, - {XFA_ELEMENT_Manifest, 1, 0}, - {XFA_ELEMENT_Picture, 1, 0}, - {XFA_ELEMENT_Level, 1, 0}, - {XFA_ELEMENT_Type, 1, 0}, - {XFA_ELEMENT_CompressObjectStream, 1, 0}, - {XFA_ELEMENT_CompressLogicalStructure, 1, 0}, - {XFA_ELEMENT_Edge, 4, 0}, - {XFA_ELEMENT_Corner, 4, 0}, - {XFA_ELEMENT_Fill, 1, 0}, - {XFA_ELEMENT_DynamicRender, 1, 0}, - {XFA_ELEMENT_DatePatterns, 1, 0}, - {XFA_ELEMENT_CalendarSymbols, 1, 0}, - {XFA_ELEMENT_CurrencySymbols, 1, 0}, - {XFA_ELEMENT_Typefaces, 1, 0}, - {XFA_ELEMENT_DateTimeSymbols, 1, 0}, - {XFA_ELEMENT_NumberPatterns, 1, 0}, - {XFA_ELEMENT_NumberSymbols, 1, 0}, - {XFA_ELEMENT_TimePatterns, 1, 0}, - {XFA_ELEMENT_Uri, 1, 0}, - {XFA_ELEMENT_Xsl, 1, 0}, - {XFA_ELEMENT_StartNode, 1, 0}, - {XFA_ELEMENT_OutputXSL, 1, 0}, - {XFA_ELEMENT_AdjustData, 1, 0}, - {XFA_ELEMENT_Attributes, 1, 0}, - {XFA_ELEMENT_Window, 1, 0}, - {XFA_ELEMENT_Record, 1, 0}, - {XFA_ELEMENT_Range, 1, 0}, - {XFA_ELEMENT_IncrementalLoad, 1, 0}, - {XFA_ELEMENT_Text, 1, 0}, - {XFA_ELEMENT_Time, 1, 0}, - {XFA_ELEMENT_DateTime, 1, 0}, - {XFA_ELEMENT_Image, 1, 0}, - {XFA_ELEMENT_Decimal, 1, 0}, - {XFA_ELEMENT_Boolean, 1, 0}, - {XFA_ELEMENT_Integer, 1, 0}, - {XFA_ELEMENT_ExData, 1, 0}, - {XFA_ELEMENT_Date, 1, 0}, - {XFA_ELEMENT_Float, 1, 0}, - {XFA_ELEMENT_Certificate, 1, 0}, - {XFA_ELEMENT_Ui, 1, 0}, - {XFA_ELEMENT_Margin, 1, 0}, - {XFA_ELEMENT_Para, 1, 0}, - {XFA_ELEMENT_Border, 1, 0}, - {XFA_ELEMENT_Assist, 1, 0}, - {XFA_ELEMENT_Traversal, 1, 0}, - {XFA_ELEMENT_Keep, 1, 0}, - {XFA_ELEMENT_Caption, 1, 0}, - {XFA_ELEMENT_Desc, 1, 0}, - {XFA_ELEMENT_Font, 1, 0}, - {XFA_ELEMENT_Value, 1, 0}, - {XFA_ELEMENT_Extras, 1, 0}, - {XFA_ELEMENT_EncryptionLevel, 1, 0}, - {XFA_ELEMENT_Encrypt, 1, 0}, - {XFA_ELEMENT_Permissions, 1, 0}, - {XFA_ELEMENT_Meridiem, 2, 0}, - {XFA_ELEMENT_SuppressBanner, 1, 0}, - {XFA_ELEMENT_VersionControl, 1, 0}, - {XFA_ELEMENT_LocaleSet, 1, 0}, - {XFA_ELEMENT_Template, 1, 0}, - {XFA_ELEMENT_ValidationMessaging, 1, 0}, - {XFA_ELEMENT_Locale, 1, 0}, - {XFA_ELEMENT_Data, 1, 0}, - {XFA_ELEMENT_Messaging, 1, 0}, - {XFA_ELEMENT_Pattern, 1, XFA_PROPERTYFLAG_OneOf}, - {XFA_ELEMENT_Solid, 1, - XFA_PROPERTYFLAG_OneOf | XFA_PROPERTYFLAG_DefaultOneOf}, - {XFA_ELEMENT_Stipple, 1, XFA_PROPERTYFLAG_OneOf}, - {XFA_ELEMENT_Color, 1, 0}, - {XFA_ELEMENT_Linear, 1, XFA_PROPERTYFLAG_OneOf}, - {XFA_ELEMENT_Extras, 1, 0}, - {XFA_ELEMENT_Radial, 1, XFA_PROPERTYFLAG_OneOf}, - {XFA_ELEMENT_Fill, 1, 0}, - {XFA_ELEMENT_Extras, 1, 0}, - {XFA_ELEMENT_Map, 1, 0}, - {XFA_ELEMENT_Arc, 1, XFA_PROPERTYFLAG_OneOf}, - {XFA_ELEMENT_Text, 1, XFA_PROPERTYFLAG_OneOf}, - {XFA_ELEMENT_Time, 1, XFA_PROPERTYFLAG_OneOf}, - {XFA_ELEMENT_DateTime, 1, XFA_PROPERTYFLAG_OneOf}, - {XFA_ELEMENT_Image, 1, XFA_PROPERTYFLAG_OneOf}, - {XFA_ELEMENT_Decimal, 1, XFA_PROPERTYFLAG_OneOf}, - {XFA_ELEMENT_Boolean, 1, XFA_PROPERTYFLAG_OneOf}, - {XFA_ELEMENT_Integer, 1, XFA_PROPERTYFLAG_OneOf}, - {XFA_ELEMENT_ExData, 1, XFA_PROPERTYFLAG_OneOf}, - {XFA_ELEMENT_Rectangle, 1, XFA_PROPERTYFLAG_OneOf}, - {XFA_ELEMENT_Date, 1, XFA_PROPERTYFLAG_OneOf}, - {XFA_ELEMENT_Float, 1, XFA_PROPERTYFLAG_OneOf}, - {XFA_ELEMENT_Line, 1, XFA_PROPERTYFLAG_OneOf}, - {XFA_ELEMENT_Extras, 1, 0}, - {XFA_ELEMENT_Destination, 1, 0}, - {XFA_ELEMENT_Message, 1, 0}, - {XFA_ELEMENT_Script, 1, 0}, - {XFA_ELEMENT_Extras, 1, 0}, - {XFA_ELEMENT_Picture, 1, 0}, - {XFA_ELEMENT_ConnectString, 1, 0}, - {XFA_ELEMENT_User, 1, 0}, - {XFA_ELEMENT_Password, 1, 0}, - {XFA_ELEMENT_ModifyAnnots, 1, 0}, - {XFA_ELEMENT_ContentCopy, 1, 0}, - {XFA_ELEMENT_FormFieldFilling, 1, 0}, - {XFA_ELEMENT_Change, 1, 0}, - {XFA_ELEMENT_AccessibleContent, 1, 0}, - {XFA_ELEMENT_Print, 1, 0}, - {XFA_ELEMENT_PlaintextMetadata, 1, 0}, - {XFA_ELEMENT_PrintHighQuality, 1, 0}, - {XFA_ELEMENT_DocumentAssembly, 1, 0}, - {XFA_ELEMENT_Encrypt, 1, 0}, - {XFA_ELEMENT_NumberSymbol, 5, 0}, - {XFA_ELEMENT_FontInfo, 1, 0}, - {XFA_ELEMENT_Xdc, 1, 0}, - {XFA_ELEMENT_Color, 1, 0}, - {XFA_ELEMENT_Extras, 1, 0}, - {XFA_ELEMENT_TimePattern, 4, 0}, - {XFA_ELEMENT_Whitespace, 1, 0}, - {XFA_ELEMENT_Rename, 1, 0}, - {XFA_ELEMENT_IfEmpty, 1, 0}, - {XFA_ELEMENT_Presence, 1, 0}, - {XFA_ELEMENT_Picture, 1, 0}, - {XFA_ELEMENT_NameAttr, 1, 0}, - {XFA_ELEMENT_GroupParent, 1, 0}, - {XFA_ELEMENT_Script, 1, 0}, - {XFA_ELEMENT_Edge, 1, 0}, - {XFA_ELEMENT_Connect, 1, 0}, - {XFA_ELEMENT_Extras, 1, 0}, - {XFA_ELEMENT_Month, 12, 0}, -}; -const XFA_ELEMENTHIERARCHY g_XFAElementChildrenIndex[] = { - {0, 0}, {0, 0}, {0, 0}, {0, 1}, {1, 0}, {1, 4}, {5, 0}, - {5, 0}, {5, 0}, {5, 3}, {8, 0}, {8, 0}, {8, 0}, {8, 0}, - {8, 0}, {8, 1}, {9, 0}, {9, 0}, {9, 0}, {9, 0}, {9, 0}, - {9, 0}, {9, 2}, {11, 0}, {11, 0}, {11, 0}, {11, 0}, {11, 0}, - {11, 0}, {11, 0}, {11, 0}, {11, 0}, {11, 0}, {11, 0}, {11, 0}, - {11, 0}, {11, 0}, {11, 0}, {11, 0}, {11, 0}, {11, 0}, {11, 0}, - {11, 0}, {11, 0}, {11, 0}, {11, 0}, {11, 0}, {11, 8}, {19, 0}, - {19, 0}, {19, 0}, {19, 0}, {19, 0}, {19, 0}, {19, 0}, {19, 0}, - {19, 0}, {19, 0}, {19, 0}, {19, 0}, {19, 0}, {19, 0}, {19, 1}, - {20, 1}, {21, 1}, {22, 0}, {22, 0}, {22, 0}, {22, 0}, {22, 0}, - {22, 0}, {22, 0}, {22, 0}, {22, 0}, {22, 0}, {22, 7}, {29, 0}, - {29, 0}, {29, 0}, {29, 0}, {29, 0}, {29, 0}, {29, 1}, {30, 1}, - {31, 0}, {31, 0}, {31, 0}, {31, 0}, {31, 0}, {31, 0}, {31, 0}, - {31, 0}, {31, 0}, {31, 4}, {35, 2}, {37, 0}, {37, 0}, {37, 0}, - {37, 0}, {37, 0}, {37, 0}, {37, 0}, {37, 0}, {37, 0}, {37, 0}, - {37, 0}, {37, 0}, {37, 0}, {37, 0}, {37, 4}, {41, 0}, {41, 0}, - {41, 0}, {41, 0}, {41, 0}, {41, 0}, {41, 2}, {43, 0}, {43, 0}, - {43, 0}, {43, 0}, {43, 0}, {43, 0}, {43, 0}, {43, 0}, {43, 0}, - {43, 13}, {56, 0}, {56, 0}, {56, 1}, {57, 0}, {57, 0}, {57, 0}, - {57, 0}, {57, 0}, {57, 0}, {57, 0}, {57, 0}, {57, 0}, {57, 0}, - {57, 0}, {57, 1}, {58, 0}, {58, 1}, {59, 0}, {59, 0}, {59, 0}, - {59, 1}, {60, 0}, {60, 0}, {60, 0}, {60, 0}, {60, 0}, {60, 0}, - {60, 0}, {60, 0}, {60, 1}, {61, 0}, {61, 0}, {61, 0}, {61, 1}, - {62, 0}, {62, 2}, {64, 0}, {64, 0}, {64, 0}, {64, 0}, {64, 0}, - {64, 0}, {64, 0}, {64, 0}, {64, 0}, {64, 0}, {64, 0}, {64, 0}, - {64, 1}, {65, 1}, {66, 1}, {67, 0}, {67, 1}, {68, 0}, {68, 0}, - {68, 0}, {68, 0}, {68, 0}, {68, 0}, {68, 0}, {68, 0}, {68, 6}, - {74, 0}, {74, 1}, {75, 0}, {75, 0}, {75, 0}, {75, 0}, {75, 0}, - {75, 0}, {75, 0}, {75, 0}, {75, 0}, {75, 1}, {76, 0}, {76, 0}, - {76, 0}, {76, 0}, {76, 0}, {76, 0}, {76, 0}, {76, 0}, {76, 0}, - {76, 0}, {76, 0}, {76, 0}, {76, 0}, {76, 0}, {76, 0}, {76, 0}, - {76, 0}, {76, 0}, {76, 0}, {76, 0}, {76, 0}, {76, 0}, {76, 0}, - {76, 0}, {76, 0}, {76, 0}, {76, 0}, {76, 0}, {76, 0}, {76, 0}, - {76, 0}, {76, 0}, {76, 0}, {76, 2}, {78, 0}, {78, 0}, {78, 0}, - {78, 1}, {79, 0}, {79, 0}, {79, 1}, {80, 0}, {80, 0}, {80, 1}, - {81, 0}, {81, 0}, {81, 1}, {82, 0}, {82, 0}, {82, 0}, {82, 0}, - {82, 0}, {82, 0}, {82, 0}, {82, 0}, {82, 0}, {82, 0}, {82, 1}, - {83, 0}, {83, 0}, {83, 0}, {83, 0}, {83, 0}, {83, 0}, {83, 11}, - {94, 0}, {94, 0}, {94, 0}, {94, 0}, {94, 0}, {94, 11}, {105, 106}, - {211, 0}, {211, 0}, {211, 1}, {212, 0}, {212, 3}, {215, 1}, {216, 0}, - {216, 0}, {216, 0}, {216, 0}, {216, 0}, {216, 0}, {216, 0}, {216, 0}, - {216, 0}, {216, 0}, {216, 0}, {216, 0}, {216, 0}, {216, 12}, {228, 0}, - {228, 0}, {228, 0}, {228, 0}, {228, 0}, {228, 0}, {228, 0}, {228, 0}, - {228, 0}, {228, 2}, {230, 0}, {230, 0}, {230, 0}, {230, 0}, {230, 0}, - {230, 0}, {230, 0}, {230, 0}, {230, 10}, -}; -const FX_WORD g_XFAElementChildrenData[] = { - XFA_ELEMENT_Extras, - XFA_ELEMENT_SubformSet, - XFA_ELEMENT_BreakBefore, - XFA_ELEMENT_Subform, - XFA_ELEMENT_BreakAfter, - XFA_ELEMENT_AlwaysEmbed, - XFA_ELEMENT_DefaultTypeface, - XFA_ELEMENT_NeverEmbed, - XFA_ELEMENT_Source, - XFA_ELEMENT_Equate, - XFA_ELEMENT_EquateRange, - XFA_ELEMENT_Ps, - XFA_ELEMENT_Pcl, - XFA_ELEMENT_Pdf, - XFA_ELEMENT_Zpl, - XFA_ELEMENT_LabelPrinter, - XFA_ELEMENT_WebClient, - XFA_ELEMENT_SubmitUrl, - XFA_ELEMENT_Driver, - XFA_ELEMENT_Typeface, - XFA_ELEMENT_SubjectDN, - XFA_ELEMENT_Certificate, - XFA_ELEMENT_SubformSet, - XFA_ELEMENT_Area, - XFA_ELEMENT_Field, - XFA_ELEMENT_ExclGroup, - XFA_ELEMENT_Subform, - XFA_ELEMENT_Draw, - XFA_ELEMENT_ExObject, - XFA_ELEMENT_EncryptionMethod, - XFA_ELEMENT_Ref, - XFA_ELEMENT_Event, - XFA_ELEMENT_SetProperty, - XFA_ELEMENT_BindItems, - XFA_ELEMENT_Connect, - XFA_ELEMENT_Pdf, - XFA_ELEMENT_Destination, - XFA_ELEMENT_Event, - XFA_ELEMENT_SetProperty, - XFA_ELEMENT_Field, - XFA_ELEMENT_Connect, - XFA_ELEMENT_Agent, - XFA_ELEMENT_PsMap, - XFA_ELEMENT_SubformSet, - XFA_ELEMENT_BreakBefore, - XFA_ELEMENT_Event, - XFA_ELEMENT_Area, - XFA_ELEMENT_SetProperty, - XFA_ELEMENT_Field, - XFA_ELEMENT_ExclGroup, - XFA_ELEMENT_Subform, - XFA_ELEMENT_Draw, - XFA_ELEMENT_ExObject, - XFA_ELEMENT_Proto, - XFA_ELEMENT_Connect, - XFA_ELEMENT_BreakAfter, - XFA_ELEMENT_Locale, - XFA_ELEMENT_Text, - XFA_ELEMENT_Font, - XFA_ELEMENT_Traverse, - XFA_ELEMENT_Map, - XFA_ELEMENT_DigestMethod, - XFA_ELEMENT_PageSet, - XFA_ELEMENT_PageArea, - XFA_ELEMENT_Encoding, - XFA_ELEMENT_Subform, - XFA_ELEMENT_SubmitUrl, - XFA_ELEMENT_Certificate, - XFA_ELEMENT_Area, - XFA_ELEMENT_Field, - XFA_ELEMENT_ContentArea, - XFA_ELEMENT_ExclGroup, - XFA_ELEMENT_Subform, - XFA_ELEMENT_Draw, - XFA_ELEMENT_Oid, - XFA_ELEMENT_Ref, - XFA_ELEMENT_ExcludeNS, - XFA_ELEMENT_Transform, - XFA_ELEMENT_SetProperty, - XFA_ELEMENT_Message, - XFA_ELEMENT_Log, - XFA_ELEMENT_Reason, - XFA_ELEMENT_Area, - XFA_ELEMENT_Text, - XFA_ELEMENT_Time, - XFA_ELEMENT_DateTime, - XFA_ELEMENT_Image, - XFA_ELEMENT_Decimal, - XFA_ELEMENT_Boolean, - XFA_ELEMENT_Integer, - XFA_ELEMENT_ExData, - XFA_ELEMENT_Date, - XFA_ELEMENT_Float, - XFA_ELEMENT_ExObject, - XFA_ELEMENT_Text, - XFA_ELEMENT_Time, - XFA_ELEMENT_DateTime, - XFA_ELEMENT_Image, - XFA_ELEMENT_Decimal, - XFA_ELEMENT_Boolean, - XFA_ELEMENT_Integer, - XFA_ELEMENT_ExData, - XFA_ELEMENT_Date, - XFA_ELEMENT_Float, - XFA_ELEMENT_Extras, - XFA_ELEMENT_Ui, - XFA_ELEMENT_SubformSet, - XFA_ELEMENT_Break, - XFA_ELEMENT_CheckButton, - XFA_ELEMENT_Arc, - XFA_ELEMENT_Mdp, - XFA_ELEMENT_BreakBefore, - XFA_ELEMENT_Oid, - XFA_ELEMENT_Ref, - XFA_ELEMENT_Margin, - XFA_ELEMENT_KeyUsage, - XFA_ELEMENT_ChoiceList, - XFA_ELEMENT_Para, - XFA_ELEMENT_Filter, - XFA_ELEMENT_Encoding, - XFA_ELEMENT_Event, - XFA_ELEMENT_DefaultUi, - XFA_ELEMENT_Barcode, - XFA_ELEMENT_SubjectDNs, - XFA_ELEMENT_Issuers, - XFA_ELEMENT_Button, - XFA_ELEMENT_Format, - XFA_ELEMENT_Border, - XFA_ELEMENT_Area, - XFA_ELEMENT_Hyphenation, - XFA_ELEMENT_Text, - XFA_ELEMENT_Time, - XFA_ELEMENT_Certificates, - XFA_ELEMENT_SetProperty, - XFA_ELEMENT_DateTime, - XFA_ELEMENT_Comb, - XFA_ELEMENT_Pattern, - XFA_ELEMENT_Field, - XFA_ELEMENT_ContentArea, - XFA_ELEMENT_Solid, - XFA_ELEMENT_Edge, - XFA_ELEMENT_Stipple, - XFA_ELEMENT_ExclGroup, - XFA_ELEMENT_ToolTip, - XFA_ELEMENT_Reason, - XFA_ELEMENT_Execute, - XFA_ELEMENT_DateTimeEdit, - XFA_ELEMENT_Image, - XFA_ELEMENT_TimeStamp, - XFA_ELEMENT_Decimal, - XFA_ELEMENT_Subform, - XFA_ELEMENT_Handler, - XFA_ELEMENT_Boolean, - XFA_ELEMENT_Message, - XFA_ELEMENT_Assist, - XFA_ELEMENT_Picture, - XFA_ELEMENT_Traversal, - XFA_ELEMENT_Corner, - XFA_ELEMENT_Color, - XFA_ELEMENT_Keep, - XFA_ELEMENT_ImageEdit, - XFA_ELEMENT_Validate, - XFA_ELEMENT_DigestMethods, - XFA_ELEMENT_PageSet, - XFA_ELEMENT_Integer, - XFA_ELEMENT_Traverse, - XFA_ELEMENT_Encodings, - XFA_ELEMENT_Signing, - XFA_ELEMENT_Script, - XFA_ELEMENT_PasswordEdit, - XFA_ELEMENT_NumericEdit, - XFA_ELEMENT_PageArea, - XFA_ELEMENT_Oids, - XFA_ELEMENT_Signature, - XFA_ELEMENT_Caption, - XFA_ELEMENT_ExData, - XFA_ELEMENT_Manifest, - XFA_ELEMENT_Overflow, - XFA_ELEMENT_Linear, - XFA_ELEMENT_DigestMethod, - XFA_ELEMENT_Medium, - XFA_ELEMENT_TextEdit, - XFA_ELEMENT_SignData, - XFA_ELEMENT_Rectangle, - XFA_ELEMENT_Date, - XFA_ELEMENT_Desc, - XFA_ELEMENT_Encrypt, - XFA_ELEMENT_Draw, - XFA_ELEMENT_Speak, - XFA_ELEMENT_Reasons, - XFA_ELEMENT_AppearanceFilter, - XFA_ELEMENT_Fill, - XFA_ELEMENT_Font, - XFA_ELEMENT_Certificate, - XFA_ELEMENT_Float, - XFA_ELEMENT_Value, - XFA_ELEMENT_Bookend, - XFA_ELEMENT_ExObject, - XFA_ELEMENT_BindItems, - XFA_ELEMENT_Calculate, - XFA_ELEMENT_Extras, - XFA_ELEMENT_Connect, - XFA_ELEMENT_Submit, - XFA_ELEMENT_SubjectDN, - XFA_ELEMENT_Radial, - XFA_ELEMENT_Variables, - XFA_ELEMENT_LockDocument, - XFA_ELEMENT_BreakAfter, - XFA_ELEMENT_Line, - XFA_ELEMENT_Occur, - XFA_ELEMENT_Items, - XFA_ELEMENT_Extras, - XFA_ELEMENT_WsdlConnection, - XFA_ELEMENT_XsdConnection, - XFA_ELEMENT_XmlConnection, - XFA_ELEMENT_SignData, - XFA_ELEMENT_Text, - XFA_ELEMENT_Time, - XFA_ELEMENT_DateTime, - XFA_ELEMENT_Image, - XFA_ELEMENT_Decimal, - XFA_ELEMENT_Boolean, - XFA_ELEMENT_Integer, - XFA_ELEMENT_Script, - XFA_ELEMENT_ExData, - XFA_ELEMENT_Manifest, - XFA_ELEMENT_Date, - XFA_ELEMENT_Float, - XFA_ELEMENT_Command, - XFA_ELEMENT_Bind, - XFA_ELEMENT_Text, - XFA_ELEMENT_Time, - XFA_ELEMENT_DateTime, - XFA_ELEMENT_Image, - XFA_ELEMENT_Decimal, - XFA_ELEMENT_Boolean, - XFA_ELEMENT_Integer, - XFA_ELEMENT_ExData, - XFA_ELEMENT_Date, - XFA_ELEMENT_Float, -}; -const XFA_ELEMENTHIERARCHY g_XFAElementAttributeIndex[] = { - {0, 3}, {3, 2}, {5, 3}, {8, 10}, {18, 2}, {20, 6}, {26, 2}, - {28, 1}, {29, 13}, {42, 2}, {44, 1}, {45, 2}, {47, 2}, {49, 7}, - {56, 0}, {56, 4}, {60, 2}, {62, 7}, {69, 0}, {69, 0}, {69, 2}, - {71, 2}, {73, 8}, {81, 5}, {86, 8}, {94, 4}, {98, 3}, {101, 3}, - {104, 3}, {107, 6}, {113, 2}, {115, 2}, {117, 2}, {119, 2}, {121, 3}, - {124, 2}, {126, 7}, {133, 13}, {146, 2}, {148, 6}, {154, 2}, {156, 3}, - {159, 1}, {160, 17}, {177, 2}, {179, 2}, {181, 6}, {187, 2}, {189, 2}, - {191, 3}, {194, 7}, {201, 2}, {203, 3}, {206, 0}, {206, 21}, {227, 1}, - {228, 3}, {231, 2}, {233, 0}, {233, 2}, {235, 2}, {237, 6}, {243, 0}, - {243, 4}, {247, 4}, {251, 0}, {251, 2}, {253, 2}, {255, 0}, {255, 0}, - {255, 2}, {257, 2}, {259, 4}, {263, 3}, {266, 7}, {273, 10}, {283, 9}, - {292, 6}, {298, 4}, {302, 2}, {304, 2}, {306, 6}, {312, 4}, {316, 3}, - {319, 2}, {321, 2}, {323, 4}, {327, 4}, {331, 4}, {335, 4}, {339, 2}, - {341, 2}, {343, 2}, {345, 22}, {367, 3}, {370, 2}, {372, 2}, {374, 2}, - {376, 9}, {385, 0}, {385, 4}, {389, 3}, {392, 0}, {392, 2}, {394, 7}, - {401, 4}, {405, 2}, {407, 4}, {411, 0}, {411, 21}, {432, 4}, {436, 3}, - {439, 4}, {443, 6}, {449, 2}, {451, 5}, {456, 2}, {458, 8}, {466, 1}, - {467, 2}, {469, 2}, {471, 5}, {476, 0}, {476, 2}, {478, 2}, {480, 6}, - {486, 26}, {512, 4}, {516, 2}, {518, 2}, {520, 4}, {524, 0}, {524, 2}, - {526, 2}, {528, 2}, {530, 2}, {532, 5}, {537, 2}, {539, 3}, {542, 2}, - {544, 4}, {548, 5}, {553, 2}, {555, 0}, {555, 2}, {557, 4}, {561, 5}, - {566, 3}, {569, 2}, {571, 3}, {574, 0}, {574, 2}, {576, 9}, {585, 2}, - {587, 5}, {592, 6}, {598, 5}, {603, 4}, {607, 4}, {611, 8}, {619, 4}, - {623, 0}, {623, 7}, {630, 4}, {634, 4}, {638, 5}, {643, 2}, {645, 2}, - {647, 4}, {651, 4}, {655, 2}, {657, 2}, {659, 1}, {660, 2}, {662, 5}, - {667, 4}, {671, 3}, {674, 2}, {676, 2}, {678, 4}, {682, 0}, {682, 9}, - {691, 2}, {693, 2}, {695, 5}, {700, 4}, {704, 3}, {707, 2}, {709, 10}, - {719, 2}, {721, 4}, {725, 4}, {729, 2}, {731, 6}, {737, 2}, {739, 2}, - {741, 9}, {750, 1}, {751, 4}, {755, 3}, {758, 5}, {763, 6}, {769, 4}, - {773, 1}, {774, 4}, {778, 0}, {778, 3}, {781, 1}, {782, 5}, {787, 10}, - {797, 7}, {804, 3}, {807, 2}, {809, 5}, {814, 2}, {816, 0}, {816, 2}, - {818, 2}, {820, 2}, {822, 6}, {828, 2}, {830, 1}, {831, 2}, {833, 2}, - {835, 8}, {843, 2}, {845, 4}, {849, 4}, {853, 4}, {857, 2}, {859, 2}, - {861, 2}, {863, 3}, {866, 2}, {868, 2}, {870, 4}, {874, 3}, {877, 5}, - {882, 20}, {902, 2}, {904, 0}, {904, 2}, {906, 6}, {912, 1}, {913, 2}, - {915, 1}, {916, 2}, {918, 4}, {922, 2}, {924, 2}, {926, 4}, {930, 4}, - {934, 20}, {954, 1}, {955, 2}, {957, 4}, {961, 4}, {965, 2}, {967, 2}, - {969, 4}, {973, 2}, {975, 0}, {975, 2}, {977, 5}, {982, 5}, {987, 8}, - {995, 2}, {997, 2}, {999, 4}, {1003, 4}, {1007, 2}, {1009, 4}, {1013, 0}, - {1013, 1}, {1014, 2}, {1016, 9}, {1025, 2}, {1027, 0}, {1027, 8}, {1035, 2}, - {1037, 2}, {1039, 0}, {1039, 4}, {1043, 2}, {1045, 0}, {1045, 2}, {1047, 3}, - {1050, 2}, {1052, 5}, {1057, 2}, {1059, 2}, {1061, 4}, {1065, 3}, {1068, 0}, - {1068, 4}, {1072, 2}, {1074, 2}, {1076, 3}, {1079, 4}, {1083, 8}, {1091, 5}, - {1096, 0}, {1096, 4}, {1100, 6}, {1106, 2}, {1108, 1}, {1109, 2}, {1111, 2}, - {1113, 2}, {1115, 1}, {1116, 2}, {1118, 7}, -}; -const uint8_t g_XFAElementAttributeData[] = { - XFA_ATTRIBUTE_Name, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Name, - XFA_ATTRIBUTE_Max, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_EofAction, - XFA_ATTRIBUTE_CursorType, - XFA_ATTRIBUTE_LockType, - XFA_ATTRIBUTE_BofAction, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_CursorLocation, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Name, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Relation, - XFA_ATTRIBUTE_Relevant, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Name, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_BeforeTarget, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_OverflowTarget, - XFA_ATTRIBUTE_OverflowLeader, - XFA_ATTRIBUTE_OverflowTrailer, - XFA_ATTRIBUTE_StartNew, - XFA_ATTRIBUTE_BookendTrailer, - XFA_ATTRIBUTE_After, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_BookendLeader, - XFA_ATTRIBUTE_AfterTarget, - XFA_ATTRIBUTE_Before, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Name, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_AllowNeutral, - XFA_ATTRIBUTE_Mark, - XFA_ATTRIBUTE_Shape, - XFA_ATTRIBUTE_Size, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Name, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_StartAngle, - XFA_ATTRIBUTE_SweepAngle, - XFA_ATTRIBUTE_Circular, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Hand, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Name, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Bind, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_From, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_SignatureType, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Permissions, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_StartNew, - XFA_ATTRIBUTE_Trailer, - XFA_ATTRIBUTE_TargetType, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Target, - XFA_ATTRIBUTE_Leader, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Name, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Name, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Name, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Name, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_TimeStamp, - XFA_ATTRIBUTE_Uuid, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Name, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_LeftInset, - XFA_ATTRIBUTE_BottomInset, - XFA_ATTRIBUTE_TopInset, - XFA_ATTRIBUTE_RightInset, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_NonRepudiation, - XFA_ATTRIBUTE_EncipherOnly, - XFA_ATTRIBUTE_Type, - XFA_ATTRIBUTE_DigitalSignature, - XFA_ATTRIBUTE_CrlSign, - XFA_ATTRIBUTE_KeyAgreement, - XFA_ATTRIBUTE_KeyEncipherment, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_DataEncipherment, - XFA_ATTRIBUTE_KeyCertSign, - XFA_ATTRIBUTE_DecipherOnly, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Open, - XFA_ATTRIBUTE_CommitOn, - XFA_ATTRIBUTE_TextEntry, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Name, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Name, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_HAlign, - XFA_ATTRIBUTE_TextIndent, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Widows, - XFA_ATTRIBUTE_MarginRight, - XFA_ATTRIBUTE_MarginLeft, - XFA_ATTRIBUTE_RadixOffset, - XFA_ATTRIBUTE_Preserve, - XFA_ATTRIBUTE_SpaceBelow, - XFA_ATTRIBUTE_VAlign, - XFA_ATTRIBUTE_TabDefault, - XFA_ATTRIBUTE_TabStops, - XFA_ATTRIBUTE_Orphans, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_LineHeight, - XFA_ATTRIBUTE_SpaceAbove, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Name, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Version, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_AddRevocationInfo, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Name, - XFA_ATTRIBUTE_Ref, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Listen, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Activity, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_DataRowCount, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_DataPrep, - XFA_ATTRIBUTE_Type, - XFA_ATTRIBUTE_TextLocation, - XFA_ATTRIBUTE_ModuleWidth, - XFA_ATTRIBUTE_PrintCheckDigit, - XFA_ATTRIBUTE_ModuleHeight, - XFA_ATTRIBUTE_StartChar, - XFA_ATTRIBUTE_Truncate, - XFA_ATTRIBUTE_WideNarrowRatio, - XFA_ATTRIBUTE_ErrorCorrectionLevel, - XFA_ATTRIBUTE_UpsMode, - XFA_ATTRIBUTE_Checksum, - XFA_ATTRIBUTE_CharEncoding, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_DataColumnCount, - XFA_ATTRIBUTE_RowColumnRatio, - XFA_ATTRIBUTE_DataLength, - XFA_ATTRIBUTE_EndChar, - XFA_ATTRIBUTE_Name, - XFA_ATTRIBUTE_Format, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Name, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Output, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Input, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Type, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Type, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Name, - XFA_ATTRIBUTE_DataDescription, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Highlight, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Break, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Presence, - XFA_ATTRIBUTE_Relevant, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Hand, - XFA_ATTRIBUTE_X, - XFA_ATTRIBUTE_Y, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Name, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Level, - XFA_ATTRIBUTE_Relevant, - XFA_ATTRIBUTE_ColSpan, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_WordCharacterCount, - XFA_ATTRIBUTE_Hyphenate, - XFA_ATTRIBUTE_ExcludeInitialCap, - XFA_ATTRIBUTE_PushCharacterCount, - XFA_ATTRIBUTE_RemainCharacterCount, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_ExcludeAllCaps, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Name, - XFA_ATTRIBUTE_Rid, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_MaxChars, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Name, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Url, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_CredentialServerPolicy, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_UrlPolicy, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Type, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Ref, - XFA_ATTRIBUTE_Connection, - XFA_ATTRIBUTE_Target, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_X, - XFA_ATTRIBUTE_Y, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Name, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_NumberOfCells, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Type, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_H, - XFA_ATTRIBUTE_W, - XFA_ATTRIBUTE_X, - XFA_ATTRIBUTE_Y, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_HAlign, - XFA_ATTRIBUTE_Name, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Access, - XFA_ATTRIBUTE_Rotate, - XFA_ATTRIBUTE_Presence, - XFA_ATTRIBUTE_VAlign, - XFA_ATTRIBUTE_MaxH, - XFA_ATTRIBUTE_MaxW, - XFA_ATTRIBUTE_MinH, - XFA_ATTRIBUTE_MinW, - XFA_ATTRIBUTE_Relevant, - XFA_ATTRIBUTE_ColSpan, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Locale, - XFA_ATTRIBUTE_AnchorType, - XFA_ATTRIBUTE_AccessKey, - XFA_ATTRIBUTE_Name, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_H, - XFA_ATTRIBUTE_W, - XFA_ATTRIBUTE_X, - XFA_ATTRIBUTE_Y, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Name, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Relevant, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Name, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Cap, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Stroke, - XFA_ATTRIBUTE_Presence, - XFA_ATTRIBUTE_Thickness, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Rate, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_SourceBelow, - XFA_ATTRIBUTE_OutputBelow, - XFA_ATTRIBUTE_SourceAbove, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_H, - XFA_ATTRIBUTE_W, - XFA_ATTRIBUTE_X, - XFA_ATTRIBUTE_Y, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_HAlign, - XFA_ATTRIBUTE_Name, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Access, - XFA_ATTRIBUTE_Presence, - XFA_ATTRIBUTE_VAlign, - XFA_ATTRIBUTE_MaxH, - XFA_ATTRIBUTE_MaxW, - XFA_ATTRIBUTE_MinH, - XFA_ATTRIBUTE_MinW, - XFA_ATTRIBUTE_Layout, - XFA_ATTRIBUTE_Relevant, - XFA_ATTRIBUTE_ColSpan, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_AnchorType, - XFA_ATTRIBUTE_AccessKey, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Rid, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Scope, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Name, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Connection, - XFA_ATTRIBUTE_RunAt, - XFA_ATTRIBUTE_ExecuteType, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Picker, - XFA_ATTRIBUTE_HScrollPolicy, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Name, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_ContentType, - XFA_ATTRIBUTE_TransferEncoding, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Aspect, - XFA_ATTRIBUTE_Href, - XFA_ATTRIBUTE_Value, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Type, - XFA_ATTRIBUTE_Server, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Name, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_FracDigits, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_LeadDigits, - XFA_ATTRIBUTE_H, - XFA_ATTRIBUTE_W, - XFA_ATTRIBUTE_X, - XFA_ATTRIBUTE_Y, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_HAlign, - XFA_ATTRIBUTE_Name, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_AllowMacro, - XFA_ATTRIBUTE_ColumnWidths, - XFA_ATTRIBUTE_Access, - XFA_ATTRIBUTE_Presence, - XFA_ATTRIBUTE_VAlign, - XFA_ATTRIBUTE_MaxH, - XFA_ATTRIBUTE_MaxW, - XFA_ATTRIBUTE_MinH, - XFA_ATTRIBUTE_MinW, - XFA_ATTRIBUTE_Layout, - XFA_ATTRIBUTE_Relevant, - XFA_ATTRIBUTE_MergeMode, - XFA_ATTRIBUTE_ColSpan, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Locale, - XFA_ATTRIBUTE_AnchorType, - XFA_ATTRIBUTE_RestoreState, - XFA_ATTRIBUTE_Scope, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Name, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Type, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Name, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Timeout, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Mode, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Name, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Role, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Name, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Stroke, - XFA_ATTRIBUTE_Presence, - XFA_ATTRIBUTE_Inverted, - XFA_ATTRIBUTE_Thickness, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Join, - XFA_ATTRIBUTE_Radius, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_CSpace, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Value, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Next, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Previous, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Intact, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Name, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_CommandType, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Name, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Data, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_ScriptTest, - XFA_ATTRIBUTE_NullTest, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_FormatTest, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Type, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Name, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Relation, - XFA_ATTRIBUTE_Relevant, - XFA_ATTRIBUTE_DuplexImposition, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Name, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Name, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_To, - XFA_ATTRIBUTE_Force, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_From, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Name, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Name, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Value, - XFA_ATTRIBUTE_Name, - XFA_ATTRIBUTE_DataDescription, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Ref, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Operation, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Type, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_BaseProfile, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Type, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Name, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_ContentType, - XFA_ATTRIBUTE_RunAt, - XFA_ATTRIBUTE_Binding, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_PasswordChar, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_HScrollPolicy, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_HScrollPolicy, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Name, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_PagePosition, - XFA_ATTRIBUTE_OddOrEven, - XFA_ATTRIBUTE_Relevant, - XFA_ATTRIBUTE_InitialNumber, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Numbered, - XFA_ATTRIBUTE_BlankOrNotBlank, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Type, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Type, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Reserve, - XFA_ATTRIBUTE_Presence, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Placement, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Name, - XFA_ATTRIBUTE_Rid, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_ContentType, - XFA_ATTRIBUTE_TransferEncoding, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_MaxLength, - XFA_ATTRIBUTE_Href, - XFA_ATTRIBUTE_Abbr, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Name, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_WritingScript, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Name, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Action, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Trailer, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Target, - XFA_ATTRIBUTE_Leader, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Type, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Name, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Name, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Name, - XFA_ATTRIBUTE_To, - XFA_ATTRIBUTE_UnicodeRange, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_From, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_TrayOut, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Orientation, - XFA_ATTRIBUTE_ImagingBBox, - XFA_ATTRIBUTE_Short, - XFA_ATTRIBUTE_TrayIn, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Stock, - XFA_ATTRIBUTE_Long, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_VScrollPolicy, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_AllowRichText, - XFA_ATTRIBUTE_MultiLine, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_HScrollPolicy, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_MaxEntries, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Name, - XFA_ATTRIBUTE_ContentType, - XFA_ATTRIBUTE_Contains, - XFA_ATTRIBUTE_Value, - XFA_ATTRIBUTE_IsNull, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Name, - XFA_ATTRIBUTE_DataDescription, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Ref, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Operation, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Target, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Name, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Name, - XFA_ATTRIBUTE_Ref, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_ContentType, - XFA_ATTRIBUTE_TransferEncoding, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Match, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Name, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Hand, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Name, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Name, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Name, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_H, - XFA_ATTRIBUTE_W, - XFA_ATTRIBUTE_X, - XFA_ATTRIBUTE_Y, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_HAlign, - XFA_ATTRIBUTE_Name, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Rotate, - XFA_ATTRIBUTE_Presence, - XFA_ATTRIBUTE_VAlign, - XFA_ATTRIBUTE_MaxH, - XFA_ATTRIBUTE_MaxW, - XFA_ATTRIBUTE_MinH, - XFA_ATTRIBUTE_MinW, - XFA_ATTRIBUTE_Relevant, - XFA_ATTRIBUTE_ColSpan, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Locale, - XFA_ATTRIBUTE_AnchorType, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Rid, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Priority, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Disable, - XFA_ATTRIBUTE_Name, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Value, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Type, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Type, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Presence, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_LineThrough, - XFA_ATTRIBUTE_Typeface, - XFA_ATTRIBUTE_FontHorizontalScale, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_KerningMode, - XFA_ATTRIBUTE_Underline, - XFA_ATTRIBUTE_BaselineShift, - XFA_ATTRIBUTE_OverlinePeriod, - XFA_ATTRIBUTE_LetterSpacing, - XFA_ATTRIBUTE_LineThroughPeriod, - XFA_ATTRIBUTE_FontVerticalScale, - XFA_ATTRIBUTE_PsName, - XFA_ATTRIBUTE_Size, - XFA_ATTRIBUTE_Posture, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Weight, - XFA_ATTRIBUTE_UnderlinePeriod, - XFA_ATTRIBUTE_Overline, - XFA_ATTRIBUTE_GenericFamily, - XFA_ATTRIBUTE_Checksum, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Name, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Name, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Name, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Relevant, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Override, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Trailer, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Leader, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Name, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_CodeType, - XFA_ATTRIBUTE_Archive, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_CodeBase, - XFA_ATTRIBUTE_ClassId, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Ref, - XFA_ATTRIBUTE_Connection, - XFA_ATTRIBUTE_LabelRef, - XFA_ATTRIBUTE_ValueRef, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Override, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Name, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Value, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Name, - XFA_ATTRIBUTE_Ref, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Timeout, - XFA_ATTRIBUTE_Connection, - XFA_ATTRIBUTE_Usage, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_DelayedOpen, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Format, - XFA_ATTRIBUTE_EmbedPDF, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Target, - XFA_ATTRIBUTE_TextEncoding, - XFA_ATTRIBUTE_XdpContent, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Name, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Name, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Name, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Delimiter, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Type, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Name, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Ref, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Type, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_StartNew, - XFA_ATTRIBUTE_Trailer, - XFA_ATTRIBUTE_TargetType, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Target, - XFA_ATTRIBUTE_Leader, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Slope, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Hand, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Name, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Max, - XFA_ATTRIBUTE_Min, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Initial, - XFA_ATTRIBUTE_Usehref, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Abbr, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Name, - XFA_ATTRIBUTE_Desc, - XFA_ATTRIBUTE_Lock, - XFA_ATTRIBUTE_Id, - XFA_ATTRIBUTE_Name, - XFA_ATTRIBUTE_Ref, - XFA_ATTRIBUTE_Use, - XFA_ATTRIBUTE_Presence, - XFA_ATTRIBUTE_Save, - XFA_ATTRIBUTE_Usehref, -}; -const XFA_PACKETINFO g_XFAPacketData[] = { - {0x0, NULL, XFA_XDPPACKET_USER, NULL, - XFA_XDPPACKET_FLAGS_NOMATCH | XFA_XDPPACKET_FLAGS_SUPPORTMANY}, - {0x811929d, L"sourceSet", XFA_XDPPACKET_SourceSet, - L"http://www.xfa.org/schema/xfa-source-set/", - XFA_XDPPACKET_FLAGS_NOMATCH | XFA_XDPPACKET_FLAGS_SUPPORTONE}, - {0xb843dba, L"pdf", XFA_XDPPACKET_Pdf, L"http://ns.adobe.com/xdp/pdf/", - XFA_XDPPACKET_FLAGS_COMPLETEMATCH | XFA_XDPPACKET_FLAGS_SUPPORTONE}, - {0xc56afbf, L"xdc", XFA_XDPPACKET_Xdc, L"http://www.xfa.org/schema/xdc/", - XFA_XDPPACKET_FLAGS_NOMATCH | XFA_XDPPACKET_FLAGS_SUPPORTONE}, - {0xc56afcc, L"xdp", XFA_XDPPACKET_XDP, L"http://ns.adobe.com/xdp/", - XFA_XDPPACKET_FLAGS_COMPLETEMATCH | XFA_XDPPACKET_FLAGS_SUPPORTONE}, - {0x132a8fbc, L"xmpmeta", XFA_XDPPACKET_Xmpmeta, - L"http://ns.adobe.com/xmpmeta/", - XFA_XDPPACKET_FLAGS_NOMATCH | XFA_XDPPACKET_FLAGS_SUPPORTMANY}, - {0x48d004a8, L"xfdf", XFA_XDPPACKET_Xfdf, L"http://ns.adobe.com/xfdf/", - XFA_XDPPACKET_FLAGS_NOMATCH | XFA_XDPPACKET_FLAGS_SUPPORTONE}, - {0x4e1e39b6, L"config", XFA_XDPPACKET_Config, - L"http://www.xfa.org/schema/xci/", - XFA_XDPPACKET_FLAGS_NOMATCH | XFA_XDPPACKET_FLAGS_SUPPORTONE}, - {0x5473b6dc, L"localeSet", XFA_XDPPACKET_LocaleSet, - L"http://www.xfa.org/schema/xfa-locale-set/", - XFA_XDPPACKET_FLAGS_NOMATCH | XFA_XDPPACKET_FLAGS_SUPPORTONE}, - {0x6038580a, L"stylesheet", XFA_XDPPACKET_Stylesheet, - L"http://www.w3.org/1999/XSL/Transform", - XFA_XDPPACKET_FLAGS_NOMATCH | XFA_XDPPACKET_FLAGS_SUPPORTMANY}, - {0x803550fc, L"template", XFA_XDPPACKET_Template, - L"http://www.xfa.org/schema/xfa-template/", - XFA_XDPPACKET_FLAGS_NOMATCH | XFA_XDPPACKET_FLAGS_SUPPORTONE}, - {0x8b036f32, L"signature", XFA_XDPPACKET_Signature, - L"http://www.w3.org/2000/09/xmldsig#", - XFA_XDPPACKET_FLAGS_NOMATCH | XFA_XDPPACKET_FLAGS_SUPPORTONE}, - {0x99b95079, L"datasets", XFA_XDPPACKET_Datasets, - L"http://www.xfa.org/schema/xfa-data/", - XFA_XDPPACKET_FLAGS_PREFIXMATCH | XFA_XDPPACKET_FLAGS_SUPPORTONE}, - {0xcd309ff4, L"form", XFA_XDPPACKET_Form, - L"http://www.xfa.org/schema/xfa-form/", - XFA_XDPPACKET_FLAGS_NOMATCH | XFA_XDPPACKET_FLAGS_SUPPORTONE}, - {0xe14c801c, L"connectionSet", XFA_XDPPACKET_ConnectionSet, - L"http://www.xfa.org/schema/xfa-connection-set/", - XFA_XDPPACKET_FLAGS_NOMATCH | XFA_XDPPACKET_FLAGS_SUPPORTONE}, -}; -const int32_t g_iXFAPacketCount = - sizeof(g_XFAPacketData) / sizeof(XFA_PACKETINFO); -const XFA_SCRIPTHIERARCHY g_XFAScriptIndex[] = { - {0, 0, 0, 2, 316}, {0, 0, 2, 2, 316}, {0, 0, 4, 2, 316}, - {0, 0, 6, 8, 316}, {0, 0, 14, 4, 316}, {0, 0, 18, 5, 317}, - {0, 0, 23, 2, 316}, {0, 0, 25, 1, 316}, {0, 0, 26, 12, 316}, - {0, 0, 38, 2, 316}, {0, 0, 40, 1, 316}, {0, 0, 41, 3, 316}, - {0, 0, 44, 2, 316}, {0, 0, 46, 6, 316}, {0, 0, 52, 0, 316}, - {0, 0, 52, 2, 319}, {0, 0, 54, 2, 316}, {0, 0, 56, 6, 316}, - {0, 0, 62, 0, 316}, {0, 0, 62, 0, 316}, {0, 0, 62, 2, 316}, - {0, 0, 64, 2, 316}, {0, 0, 66, 6, 316}, {0, 0, 72, 4, 316}, - {0, 0, 76, 7, 316}, {0, 0, 83, 2, 320}, {0, 0, 85, 3, 316}, - {0, 0, 88, 3, 316}, {0, 0, 91, 2, 320}, {0, 0, 93, 6, 320}, - {0, 0, 99, 4, 316}, {0, 0, 103, 2, 316}, {0, 0, 105, 3, 319}, - {0, 0, 108, 4, 316}, {0, 0, 112, 3, 316}, {0, 0, 115, 2, 316}, - {0, 0, 117, 6, 316}, {0, 0, 123, 12, 316}, {0, 0, 135, 2, 316}, - {0, 0, 137, 5, 316}, {0, 0, 142, 2, 316}, {0, 0, 144, 3, 316}, - {0, 0, 147, 1, 316}, {0, 0, 148, 14, 316}, {0, 0, 162, 2, 316}, - {0, 0, 164, 2, 316}, {0, 0, 166, 3, 316}, {0, 0, 169, 2, 316}, - {0, 0, 171, 2, 316}, {0, 0, 173, 2, 316}, {0, 0, 175, 4, 316}, - {0, 0, 179, 2, 316}, {0, 0, 181, 2, 316}, {0, 0, 183, 0, 319}, - {0, 0, 183, 20, 316}, {0, 0, 203, 1, 316}, {0, 0, 204, 3, 316}, - {0, 0, 207, 2, 316}, {0, 0, 209, 0, 316}, {0, 0, 209, 2, 316}, - {0, 0, 211, 2, 316}, {0, 0, 213, 4, 320}, {0, 0, 217, 0, 316}, - {0, 0, 217, 1, 316}, {0, 0, 218, 3, 316}, {0, 4, 221, 0, 312}, - {4, 1, 221, 1, 316}, {5, 0, 222, 2, 316}, {5, 1, 224, 3, -1}, - {6, 0, 227, 0, 316}, {6, 0, 227, 2, 316}, {6, 0, 229, 2, 316}, - {6, 0, 231, 3, 316}, {6, 0, 234, 2, 316}, {6, 0, 236, 6, 316}, - {6, 0, 242, 10, 317}, {6, 0, 252, 9, 316}, {6, 0, 261, 5, 318}, - {6, 0, 266, 4, 318}, {6, 0, 270, 2, 316}, {6, 0, 272, 2, 316}, - {6, 0, 274, 5, 316}, {6, 0, 279, 3, 316}, {6, 0, 282, 2, 316}, - {6, 0, 284, 2, 316}, {6, 0, 286, 2, 316}, {6, 0, 288, 2, 316}, - {6, 0, 290, 4, 316}, {6, 0, 294, 3, 316}, {6, 0, 297, 3, 316}, - {6, 0, 300, 2, 316}, {6, 0, 302, 2, 316}, {6, 0, 304, 2, 316}, - {6, 13, 306, 36, 317}, {19, 0, 342, 3, 316}, {19, 0, 345, 2, 316}, - {19, 0, 347, 2, 316}, {19, 0, 349, 2, 316}, {19, 0, 351, 7, 317}, - {19, 2, 358, 16, 312}, {21, 0, 374, 2, 320}, {21, 0, 376, 2, 316}, - {21, 0, 378, 0, 316}, {21, 0, 378, 2, 316}, {21, 0, 380, 6, 316}, - {21, 0, 386, 3, 316}, {21, 0, 389, 2, 316}, {21, 0, 391, 4, 316}, - {21, 0, 395, 0, 316}, {21, 5, 395, 30, 316}, {26, 0, 425, 2, 320}, - {26, 0, 427, 3, 316}, {26, 0, 430, 2, 320}, {26, 0, 432, 5, 316}, - {26, 0, 437, 2, 316}, {26, 0, 439, 3, 316}, {26, 0, 442, 2, 316}, - {26, 0, 444, 8, 316}, {26, 0, 452, 1, 316}, {26, 0, 453, 2, 316}, - {26, 0, 455, 2, 316}, {26, 0, 457, 4, 316}, {26, 0, 461, 0, 316}, - {26, 0, 461, 2, 316}, {26, 0, 463, 2, 316}, {26, 0, 465, 6, 318}, - {26, 5, 471, 31, 317}, {31, 0, 502, 2, 320}, {31, 0, 504, 2, 316}, - {31, 0, 506, 2, 316}, {31, 0, 508, 4, 320}, {31, 16, 512, 14, 312}, - {47, 0, 526, 2, 316}, {47, 0, 528, 2, 316}, {47, 0, 530, 2, 316}, - {47, 0, 532, 2, 316}, {47, 0, 534, 3, 316}, {47, 0, 537, 2, 316}, - {47, 0, 539, 3, 316}, {47, 0, 542, 3, 316}, {47, 0, 545, 4, 318}, - {47, 0, 549, 4, 316}, {47, 0, 553, 2, 316}, {47, 0, 555, 0, 316}, - {47, 0, 555, 2, 316}, {47, 0, 557, 3, 316}, {47, 0, 560, 6, 316}, - {47, 0, 566, 2, 316}, {47, 0, 568, 2, 316}, {47, 0, 570, 3, 316}, - {47, 19, 573, 1, 312}, {66, 0, 574, 2, 316}, {66, 0, 576, 8, 316}, - {66, 0, 584, 2, 316}, {66, 0, 586, 4, 316}, {66, 0, 590, 5, 316}, - {66, 0, 595, 3, 316}, {66, 0, 598, 2, 320}, {66, 0, 600, 3, 316}, - {66, 0, 603, 7, 316}, {66, 0, 610, 3, 316}, {66, 0, 613, 0, 316}, - {66, 0, 613, 4, 317}, {66, 0, 617, 4, 318}, {66, 0, 621, 2, 320}, - {66, 0, 623, 5, 316}, {66, 0, 628, 2, 316}, {66, 0, 630, 2, 316}, - {66, 0, 632, 2, 320}, {66, 0, 634, 2, 320}, {66, 0, 636, 4, 316}, - {66, 0, 640, 2, 316}, {66, 0, 642, 1, 316}, {66, 0, 643, 1, 316}, - {66, 0, 644, 4, 316}, {66, 0, 648, 3, 316}, {66, 7, 651, 2, 319}, - {73, 0, 653, 2, 316}, {73, 0, 655, 2, 316}, {73, 0, 657, 3, 316}, - {73, 4, 660, 4, 312}, {77, 0, 664, 10, 316}, {77, 0, 674, 2, 316}, - {77, 0, 676, 4, 316}, {77, 0, 680, 4, 316}, {77, 0, 684, 3, 316}, - {77, 0, 687, 2, 316}, {77, 0, 689, 2, 316}, {77, 0, 691, 8, 317}, - {77, 0, 699, 3, 316}, {77, 0, 702, 3, 316}, {77, 0, 705, 2, 316}, - {77, 0, 707, 2, 316}, {77, 0, 709, 5, 316}, {77, 0, 714, 4, 316}, - {77, 0, 718, 2, 316}, {77, 0, 720, 8, 318}, {77, 0, 728, 1, 316}, - {77, 0, 729, 2, 320}, {77, 0, 731, 3, 316}, {77, 1, 734, 4, 316}, - {78, 0, 738, 5, 316}, {78, 0, 743, 3, 316}, {78, 0, 746, 1, 316}, - {78, 0, 747, 2, 320}, {78, 0, 749, 0, 313}, {78, 0, 749, 2, 316}, - {78, 5, 751, 3, 316}, {83, 0, 754, 5, 316}, {83, 0, 759, 7, 316}, - {83, 0, 766, 6, 316}, {83, 0, 772, 3, 316}, {83, 0, 775, 2, 316}, - {83, 0, 777, 5, 316}, {83, 0, 782, 2, 316}, {83, 0, 784, 0, 314}, - {83, 0, 784, 2, 316}, {83, 0, 786, 1, 316}, {83, 0, 787, 2, 316}, - {83, 0, 789, 5, 316}, {83, 0, 794, 2, 316}, {83, 0, 796, 1, 316}, - {83, 0, 797, 2, 316}, {83, 0, 799, 2, 316}, {83, 0, 801, 6, 316}, - {83, 0, 807, 2, 316}, {83, 0, 809, 2, 320}, {83, 0, 811, 3, 316}, - {83, 0, 814, 4, 316}, {83, 0, 818, 2, 316}, {83, 0, 820, 2, 316}, - {83, 0, 822, 2, 316}, {83, 0, 824, 2, 316}, {83, 0, 826, 2, 316}, - {83, 0, 828, 2, 316}, {83, 0, 830, 4, 318}, {83, 1, 834, 2, 316}, - {84, 0, 836, 5, 316}, {84, 0, 841, 20, 317}, {84, 0, 861, 2, 316}, - {84, 0, 863, 0, 316}, {84, 0, 863, 2, 316}, {84, 0, 865, 4, 320}, - {84, 0, 869, 0, 316}, {84, 0, 869, 2, 316}, {84, 0, 871, 1, 316}, - {84, 0, 872, 2, 316}, {84, 0, 874, 3, 316}, {84, 0, 877, 2, 316}, - {84, 0, 879, 2, 316}, {84, 0, 881, 4, 316}, {84, 0, 885, 3, 316}, - {84, 0, 888, 17, 316}, {84, 6, 905, 1, 319}, {90, 0, 906, 2, 316}, - {90, 0, 908, 2, 320}, {90, 0, 910, 2, 320}, {90, 0, 912, 2, 316}, - {90, 0, 914, 2, 316}, {90, 0, 916, 4, 318}, {90, 0, 920, 2, 316}, - {90, 5, 922, 0, 312}, {95, 0, 922, 2, 316}, {95, 0, 924, 4, 316}, - {95, 0, 928, 4, 316}, {95, 0, 932, 6, 316}, {95, 0, 938, 2, 316}, - {95, 0, 940, 4, 316}, {95, 0, 944, 3, 316}, {95, 0, 947, 3, 316}, - {95, 0, 950, 2, 316}, {95, 0, 952, 3, 316}, {95, 0, 955, 0, 316}, - {95, 0, 955, 0, 316}, {95, 0, 955, 2, 316}, {95, 0, 957, 7, 316}, - {95, 0, 964, 2, 316}, {95, 0, 966, 0, 319}, {95, 0, 966, 7, 316}, - {95, 0, 973, 2, 316}, {95, 0, 975, 2, 316}, {95, 3, 977, 1, 316}, - {98, 0, 978, 2, 320}, {98, 0, 980, 4, 316}, {98, 0, 984, 0, 316}, - {98, 0, 984, 2, 316}, {98, 0, 986, 2, 316}, {98, 0, 988, 4, 316}, - {98, 0, 992, 1, 316}, {98, 0, 993, 2, 316}, {98, 0, 995, 2, 316}, - {98, 0, 997, 3, 316}, {98, 0, 1000, 2, 317}, {98, 0, 1002, 0, 316}, - {98, 0, 1002, 4, 316}, {98, 0, 1006, 4, 316}, {98, 0, 1010, 2, 316}, - {98, 0, 1012, 3, 316}, {98, 0, 1015, 4, 316}, {98, 0, 1019, 7, 316}, - {98, 0, 1026, 4, 316}, {98, 0, 1030, 1, 313}, {98, 17, 1031, 3, 316}, - {115, 0, 1034, 5, 316}, {115, 0, 1039, 2, 316}, {115, 0, 1041, 1, 316}, - {115, 0, 1042, 4, 316}, {115, 0, 1046, 2, 316}, {115, 0, 1048, 2, 316}, - {115, 0, 1050, 1, 316}, {115, 0, 1051, 2, 316}, {115, 0, 1053, 5, 316}, - {115, 0, 1058, 1, -1}, {115, 4, 1059, 1, 312}, {119, 1, 1060, 0, 313}, - {120, 2, 1060, 8, 312}, {122, 11, 1068, 6, 315}, {133, 2, 1074, 0, 316}, - {135, 0, 1074, 0, 316}, {135, 3, 1074, 2, 316}, {138, 0, 1076, 2, 316}, -}; -const XFA_METHODINFO g_SomMethodData[] = { - {0x3c752495, L"verify", (XFA_METHOD_CALLBACK)&CScript_SignaturePseudoModel:: - Script_SignaturePseudoModel_Verify}, - {0xa68635f1, L"sign", (XFA_METHOD_CALLBACK)&CScript_SignaturePseudoModel:: - Script_SignaturePseudoModel_Sign}, - {0xa7f2c5e6, L"enumerate", - (XFA_METHOD_CALLBACK)&CScript_SignaturePseudoModel:: - Script_SignaturePseudoModel_Enumerate}, - {0xd8ed1467, L"clear", (XFA_METHOD_CALLBACK)&CScript_SignaturePseudoModel:: - Script_SignaturePseudoModel_Clear}, - {0x4bdcce13, L"execute", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_WsdlConnection_Execute}, - {0x1c296ba4, L"restore", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_Delta_Restore}, - {0x7d123a9, L"clearItems", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_Field_ClearItems}, - {0xfb0b007, L"execEvent", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_Field_ExecEvent}, - {0x6716ce97, L"execInitialize", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_Field_ExecInitialize}, - {0x7bb919c2, L"deleteItem", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_Field_DeleteItem}, - {0x9f053d5e, L"getSaveItem", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_Field_GetSaveItem}, - {0xbbd32747, L"boundItem", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_Field_BoundItem}, - {0xc492d950, L"getItemState", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_Field_GetItemState}, - {0xc6013cd3, L"execCalculate", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_Field_ExecCalculate}, - {0xd8930d0e, L"setItems", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_Field_SetItems}, - {0xe0f15045, L"getDisplayItem", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_Field_GetDisplayItem}, - {0xe23acddc, L"setItemState", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_Field_SetItemState}, - {0xe2dfb2f8, L"addItem", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_Field_AddItem}, - {0xef8ce48f, L"execValidate", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_Field_ExecValidate}, - {0x461079ef, L"emit", (XFA_METHOD_CALLBACK)&CScript_EventPseudoModel:: - Script_EventPseudoModel_Emit}, - {0xfec90c63, L"reset", (XFA_METHOD_CALLBACK)&CScript_EventPseudoModel:: - Script_EventPseudoModel_Reset}, - {0xfb0b007, L"execEvent", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_ExclGroup_ExecEvent}, - {0x3d832221, L"selectedMember", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_ExclGroup_SelectedMember}, - {0x6716ce97, L"execInitialize", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_ExclGroup_ExecInitialize}, - {0xc6013cd3, L"execCalculate", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_ExclGroup_ExecCalculate}, - {0xef8ce48f, L"execValidate", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_ExclGroup_ExecValidate}, - {0xfb0b007, L"execEvent", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_Subform_ExecEvent}, - {0x6716ce97, L"execInitialize", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_Subform_ExecInitialize}, - {0xc6013cd3, L"execCalculate", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_Subform_ExecCalculate}, - {0xd9b9b1f1, L"getInvalidObjects", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_Subform_GetInvalidObjects}, - {0xef8ce48f, L"execValidate", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_Subform_ExecValidate}, - {0xa366b7c, L"exportData", (XFA_METHOD_CALLBACK)&CScript_HostPseudoModel:: - Script_HostPseudoModel_ExportData}, - {0x16cc226c, L"gotoURL", (XFA_METHOD_CALLBACK)&CScript_HostPseudoModel:: - Script_HostPseudoModel_GotoURL}, - {0x1e0722f5, L"pageDown", (XFA_METHOD_CALLBACK)&CScript_HostPseudoModel:: - Script_HostPseudoModel_PageDown}, - {0x3e66cb2c, L"setFocus", (XFA_METHOD_CALLBACK)&CScript_HostPseudoModel:: - Script_HostPseudoModel_SetFocus}, - {0x4ac9faae, L"openList", (XFA_METHOD_CALLBACK)&CScript_HostPseudoModel:: - Script_HostPseudoModel_OpenList}, - {0x7b89714f, L"response", (XFA_METHOD_CALLBACK)&CScript_HostPseudoModel:: - Script_HostPseudoModel_Response}, - {0x7fd9fd58, L"documentInBatch", - (XFA_METHOD_CALLBACK)&CScript_HostPseudoModel:: - Script_HostPseudoModel_DocumentInBatch}, - {0xaf1d019d, L"resetData", (XFA_METHOD_CALLBACK)&CScript_HostPseudoModel:: - Script_HostPseudoModel_ResetData}, - {0xb07be13c, L"beep", (XFA_METHOD_CALLBACK)&CScript_HostPseudoModel:: - Script_HostPseudoModel_Beep}, - {0xb1882ca0, L"getFocus", (XFA_METHOD_CALLBACK)&CScript_HostPseudoModel:: - Script_HostPseudoModel_GetFocus}, - {0xbf4ba9ee, L"messageBox", (XFA_METHOD_CALLBACK)&CScript_HostPseudoModel:: - Script_HostPseudoModel_MessageBox}, - {0xd6d4dbc1, L"documentCountInBatch", - (XFA_METHOD_CALLBACK)&CScript_HostPseudoModel:: - Script_HostPseudoModel_DocumentCountInBatch}, - {0xdd7676ed, L"print", (XFA_METHOD_CALLBACK)&CScript_HostPseudoModel:: - Script_HostPseudoModel_Print}, - {0xe2f863d0, L"currentDateTime", - (XFA_METHOD_CALLBACK)&CScript_HostPseudoModel:: - Script_HostPseudoModel_CurrentDateTime}, - {0xf995d0f5, L"importData", (XFA_METHOD_CALLBACK)&CScript_HostPseudoModel:: - Script_HostPseudoModel_ImportData}, - {0xfeb96b62, L"pageUp", (XFA_METHOD_CALLBACK)&CScript_HostPseudoModel:: - Script_HostPseudoModel_PageUp}, - {0x68, L"h", (XFA_METHOD_CALLBACK)&CScript_LayoutPseudoModel:: - Script_LayoutPseudoModel_H}, - {0x77, L"w", (XFA_METHOD_CALLBACK)&CScript_LayoutPseudoModel:: - Script_LayoutPseudoModel_W}, - {0x78, L"x", (XFA_METHOD_CALLBACK)&CScript_LayoutPseudoModel:: - Script_LayoutPseudoModel_X}, - {0x79, L"y", (XFA_METHOD_CALLBACK)&CScript_LayoutPseudoModel:: - Script_LayoutPseudoModel_Y}, - {0x5460206, L"pageCount", (XFA_METHOD_CALLBACK)&CScript_LayoutPseudoModel:: - Script_LayoutPseudoModel_PageCount}, - {0x5eb5b0f, L"pageSpan", (XFA_METHOD_CALLBACK)&CScript_LayoutPseudoModel:: - Script_LayoutPseudoModel_PageSpan}, - {0x10f1b1bd, L"page", (XFA_METHOD_CALLBACK)&CScript_LayoutPseudoModel:: - Script_LayoutPseudoModel_Page}, - {0x1c1e6318, L"pageContent", - (XFA_METHOD_CALLBACK)&CScript_LayoutPseudoModel:: - Script_LayoutPseudoModel_PageContent}, - {0x1c1f4a5c, L"absPageCount", - (XFA_METHOD_CALLBACK)&CScript_LayoutPseudoModel:: - Script_LayoutPseudoModel_AbsPageCount}, - {0x1ec47db5, L"absPageCountInBatch", - (XFA_METHOD_CALLBACK)&CScript_LayoutPseudoModel:: - Script_LayoutPseudoModel_AbsPageCountInBatch}, - {0x2e4ecbdb, L"sheetCountInBatch", - (XFA_METHOD_CALLBACK)&CScript_LayoutPseudoModel:: - Script_LayoutPseudoModel_SheetCountInBatch}, - {0x2fcff4b5, L"relayout", (XFA_METHOD_CALLBACK)&CScript_LayoutPseudoModel:: - Script_LayoutPseudoModel_Relayout}, - {0x3bf1c2a5, L"absPageSpan", - (XFA_METHOD_CALLBACK)&CScript_LayoutPseudoModel:: - Script_LayoutPseudoModel_AbsPageSpan}, - {0x5775c2cc, L"absPageInBatch", - (XFA_METHOD_CALLBACK)&CScript_LayoutPseudoModel:: - Script_LayoutPseudoModel_AbsPageInBatch}, - {0x8c5feb32, L"sheetInBatch", - (XFA_METHOD_CALLBACK)&CScript_LayoutPseudoModel:: - Script_LayoutPseudoModel_SheetInBatch}, - {0x8f3a8379, L"sheet", (XFA_METHOD_CALLBACK)&CScript_LayoutPseudoModel:: - Script_LayoutPseudoModel_Sheet}, - {0x96f3c4cb, L"relayoutPageArea", - (XFA_METHOD_CALLBACK)&CScript_LayoutPseudoModel:: - Script_LayoutPseudoModel_RelayoutPageArea}, - {0xd2a4a542, L"sheetCount", - (XFA_METHOD_CALLBACK)&CScript_LayoutPseudoModel:: - Script_LayoutPseudoModel_SheetCount}, - {0xe74f0653, L"absPage", (XFA_METHOD_CALLBACK)&CScript_LayoutPseudoModel:: - Script_LayoutPseudoModel_AbsPage}, - {0x44c352ad, L"formNodes", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_Template_FormNodes}, - {0x45efb847, L"remerge", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_Template_Remerge}, - {0x6716ce97, L"execInitialize", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_Template_ExecInitialize}, - {0x712c6afa, L"createNode", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_Template_CreateNode}, - {0xa8a35e25, L"recalculate", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_Template_Recalculate}, - {0xc6013cd3, L"execCalculate", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_Template_ExecCalculate}, - {0xef8ce48f, L"execValidate", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_Template_ExecValidate}, - {0x4cc1c0f9, L"moveCurrentRecord", - (XFA_METHOD_CALLBACK)&CScript_DataWindow:: - Script_DataWindow_MoveCurrentRecord}, - {0x5779d65f, L"record", - (XFA_METHOD_CALLBACK)&CScript_DataWindow::Script_DataWindow_Record}, - {0x8a476498, L"gotoRecord", - (XFA_METHOD_CALLBACK)&CScript_DataWindow::Script_DataWindow_GotoRecord}, - {0xaac241c8, L"isRecordGroup", - (XFA_METHOD_CALLBACK)&CScript_DataWindow::Script_DataWindow_IsRecordGroup}, - {0x1c6f4277, L"evaluate", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_Manifest_Evaluate}, - {0x2afec2cc, L"moveInstance", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_InstanceManager_MoveInstance}, - {0x2bf94a63, L"removeInstance", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_InstanceManager_RemoveInstance}, - {0x303adaf4, L"setInstances", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_InstanceManager_SetInstances}, - {0x4d76b89e, L"addInstance", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_InstanceManager_AddInstance}, - {0xc660dc8a, L"insertInstance", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_InstanceManager_InsertInstance}, - {0xddfd1ea1, L"metadata", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_Desc_Metadata}, - {0x44c352ad, L"formNodes", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_Form_FormNodes}, - {0x45efb847, L"remerge", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_Form_Remerge}, - {0x6716ce97, L"execInitialize", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_Form_ExecInitialize}, - {0xa8a35e25, L"recalculate", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_Form_Recalculate}, - {0xc6013cd3, L"execCalculate", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_Form_ExecCalculate}, - {0xef8ce48f, L"execValidate", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_Form_ExecValidate}, - {0x60490a85, L"message", (XFA_METHOD_CALLBACK)&CScript_LogPseudoModel:: - Script_LogPseudoModel_Message}, - {0x60ecfcc9, L"traceDeactivate", - (XFA_METHOD_CALLBACK)&CScript_LogPseudoModel:: - Script_LogPseudoModel_TraceDeactivate}, - {0x86a0f4c0, L"traceActivate", - (XFA_METHOD_CALLBACK)&CScript_LogPseudoModel:: - Script_LogPseudoModel_TraceActivate}, - {0x93eac39a, L"traceEnabled", (XFA_METHOD_CALLBACK)&CScript_LogPseudoModel:: - Script_LogPseudoModel_TraceEnabled}, - {0xd1227e6f, L"trace", - (XFA_METHOD_CALLBACK)&CScript_LogPseudoModel::Script_LogPseudoModel_Trace}, - {0x36c0ee14, L"getAttribute", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_Packet_GetAttribute}, - {0x5468e2a0, L"setAttribute", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_Packet_SetAttribute}, - {0xadc48de2, L"removeAttribute", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_Packet_RemoveAttribute}, - {0x3848b3f, L"next", (XFA_METHOD_CALLBACK)&CXFA_Node::Script_Source_Next}, - {0x14e25bc8, L"cancelBatch", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_Source_CancelBatch}, - {0x3ce05d68, L"first", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_Source_First}, - {0x649e1e65, L"updateBatch", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_Source_UpdateBatch}, - {0x6a3405dd, L"previous", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_Source_Previous}, - {0x74818fb3, L"isBOF", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_Source_IsBOF}, - {0x74d07a76, L"isEOF", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_Source_IsEOF}, - {0x7613cb66, L"cancel", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_Source_Cancel}, - {0x7baca2e3, L"update", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_Source_Update}, - {0x8b90e1f2, L"open", (XFA_METHOD_CALLBACK)&CXFA_Node::Script_Source_Open}, - {0x9c6471b3, L"delete", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_Source_Delete}, - {0xa7315093, L"addNew", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_Source_AddNew}, - {0xa7ce5f8d, L"requery", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_Source_Requery}, - {0xc7368674, L"resync", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_Source_Resync}, - {0xd9f47f36, L"close", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_Source_Close}, - {0xf54481d4, L"last", (XFA_METHOD_CALLBACK)&CXFA_Node::Script_Source_Last}, - {0xf7965460, L"hasDataChanged", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_Source_HasDataChanged}, - {0x6275f6af, L"item", - (XFA_METHOD_CALLBACK)&CXFA_NodeList::Script_ListClass_Item}, - {0x7033bfd5, L"insert", - (XFA_METHOD_CALLBACK)&CXFA_NodeList::Script_ListClass_Insert}, - {0x9cab7cae, L"remove", - (XFA_METHOD_CALLBACK)&CXFA_NodeList::Script_ListClass_Remove}, - {0xda12e518, L"append", - (XFA_METHOD_CALLBACK)&CXFA_NodeList::Script_ListClass_Append}, - {0xd892a054, L"namedItem", - (XFA_METHOD_CALLBACK)&CXFA_NodeList::Script_TreelistClass_NamedItem}, - {0xba2dd386, L"resolveNode", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_TreeClass_ResolveNode}, - {0xe509e2b9, L"resolveNodes", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_TreeClass_ResolveNodes}, - {0x1bca1ebd, L"applyXSL", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_NodeClass_ApplyXSL}, - {0x36c0ee14, L"getAttribute", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_NodeClass_GetAttribute}, - {0x5468e2a0, L"setAttribute", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_NodeClass_SetAttribute}, - {0x5ee00996, L"setElement", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_NodeClass_SetElement}, - {0x92dada4f, L"saveFilteredXML", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_NodeClass_SaveFilteredXML}, - {0x9c456500, L"saveXML", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_NodeClass_SaveXML}, - {0xabd3200a, L"getElement", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_NodeClass_GetElement}, - {0xb269c60d, L"isPropertySpecified", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_NodeClass_IsPropertySpecified}, - {0xb528be91, L"loadXML", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_NodeClass_LoadXML}, - {0xd9f46591, L"clone", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_NodeClass_Clone}, - {0xe006a76b, L"assignNode", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_NodeClass_AssignNode}, - {0x7303fcea, L"getDelta", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_ContainerClass_GetDelta}, - {0xe7742c9d, L"getDeltas", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_ContainerClass_GetDeltas}, - {0x30ff6aad, L"clearErrorList", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_ModelClass_ClearErrorList}, - {0x712c6afa, L"createNode", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_ModelClass_CreateNode}, - {0x83a6411d, L"isCompatibleNS", - (XFA_METHOD_CALLBACK)&CXFA_Node::Script_ModelClass_IsCompatibleNS}, -}; -const int32_t g_iSomMethodCount = - sizeof(g_SomMethodData) / sizeof(XFA_METHODINFO); -const XFA_SCRIPTATTRIBUTEINFO g_SomAttributeData[] = { - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xb3543a6, L"max", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Max, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0x45a6daf8, L"eofAction", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_EofAction, XFA_SCRIPT_Basic}, - {0x5ec958c0, L"cursorType", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_CursorType, XFA_SCRIPT_Basic}, - {0x79975f2b, L"lockType", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_LockType, XFA_SCRIPT_Basic}, - {0xa5340ff5, L"bofAction", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_BofAction, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xc5762157, L"cursorLocation", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_CursorLocation, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0x1ee2d24d, L"instanceIndex", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Som_InstanceIndex, -1, - XFA_SCRIPT_Basic}, - {0x8c99377e, L"relation", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Relation, XFA_SCRIPT_Basic}, - {0x8e1c2921, L"relevant", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Relevant, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0x31b19c1, L"name", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Name, XFA_SCRIPT_Basic}, - {0x3106c3a, L"beforeTarget", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_BeforeTarget, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0x13a08bdb, L"overflowTarget", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_OverflowTarget, XFA_SCRIPT_Basic}, - {0x169134a1, L"overflowLeader", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_OverflowLeader, XFA_SCRIPT_Basic}, - {0x20914367, L"overflowTrailer", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_OverflowTrailer, XFA_SCRIPT_Basic}, - {0x453eaf38, L"startNew", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_StartNew, XFA_SCRIPT_Basic}, - {0x64110ab5, L"bookendTrailer", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_BookendTrailer, XFA_SCRIPT_Basic}, - {0xb6b44172, L"after", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_After, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xc3c1442f, L"bookendLeader", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_BookendLeader, XFA_SCRIPT_Basic}, - {0xcb150479, L"afterTarget", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_AfterTarget, XFA_SCRIPT_Basic}, - {0xf4ffce73, L"before", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Before, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0x31b19c1, L"name", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Name, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xd6e27f1d, L"value", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Som_DefaultValue_Read, -1, - XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0x47cfa43a, L"allowNeutral", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_AllowNeutral, XFA_SCRIPT_Basic}, - {0x7c2fd80b, L"mark", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Mark, XFA_SCRIPT_Basic}, - {0x8ed182d1, L"shape", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Shape, XFA_SCRIPT_Basic}, - {0xa686975b, L"size", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Size, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0x5c054755, L"startAngle", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_StartAngle, XFA_SCRIPT_Basic}, - {0x74788f8b, L"sweepAngle", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_SweepAngle, XFA_SCRIPT_Basic}, - {0x9d833d75, L"circular", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Circular, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xd996fa9b, L"hand", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Hand, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0xb0e5485d, L"bind", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Bind, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xcd7f7b54, L"from", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_From, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0x8e29d794, L"signatureType", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_SignatureType, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xe11a2cbc, L"permissions", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Permissions, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0x453eaf38, L"startNew", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_StartNew, XFA_SCRIPT_Basic}, - {0x9dcc3ab3, L"trailer", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Trailer, XFA_SCRIPT_Basic}, - {0xa6118c89, L"targetType", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_TargetType, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xc8da4da7, L"target", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Target, XFA_SCRIPT_Basic}, - {0xcbcaf66d, L"leader", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Leader, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0x31b19c1, L"name", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Name, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0x31b19c1, L"name", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Name, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0x2d574d58, L"this", (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Xfa_This, - -1, XFA_SCRIPT_Object}, - {0x4fdc3454, L"timeStamp", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_TimeStamp, XFA_SCRIPT_Basic}, - {0xb598a1f7, L"uuid", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Uuid, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0x31b19c1, L"name", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Name, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0xcfea02e, L"leftInset", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_LeftInset, XFA_SCRIPT_Basic}, - {0x1356caf8, L"bottomInset", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_BottomInset, XFA_SCRIPT_Basic}, - {0x25764436, L"topInset", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_TopInset, XFA_SCRIPT_Basic}, - {0x8a692521, L"rightInset", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_RightInset, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0x1e459b8f, L"nonRepudiation", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_NonRepudiation, XFA_SCRIPT_Basic}, - {0x2bb3f470, L"encipherOnly", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_EncipherOnly, XFA_SCRIPT_Basic}, - {0x2f16a382, L"type", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Type, XFA_SCRIPT_Basic}, - {0x5f760b50, L"digitalSignature", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_DigitalSignature, XFA_SCRIPT_Basic}, - {0x69aa2292, L"crlSign", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_CrlSign, XFA_SCRIPT_Basic}, - {0x98fd4d81, L"keyAgreement", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_KeyAgreement, XFA_SCRIPT_Basic}, - {0xa66404cb, L"keyEncipherment", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_KeyEncipherment, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xca5dc27c, L"dataEncipherment", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_DataEncipherment, XFA_SCRIPT_Basic}, - {0xe8f118a8, L"keyCertSign", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_KeyCertSign, XFA_SCRIPT_Basic}, - {0xfea53ec6, L"decipherOnly", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_DecipherOnly, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0x8b90e1f2, L"open", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Open, XFA_SCRIPT_Basic}, - {0x957fa006, L"commitOn", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_CommitOn, XFA_SCRIPT_Basic}, - {0xb12128b7, L"textEntry", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_TextEntry, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0x31b19c1, L"name", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Name, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0x31b19c1, L"name", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Name, XFA_SCRIPT_Basic}, - {0x2282c73, L"hAlign", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_HAlign, XFA_SCRIPT_Basic}, - {0x8d4f1c7, L"textIndent", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_TextIndent, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0x2a82d99c, L"marginRight", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_MarginRight, XFA_SCRIPT_Basic}, - {0x534729c9, L"marginLeft", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_MarginLeft, XFA_SCRIPT_Basic}, - {0x5739d1ff, L"radixOffset", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_RadixOffset, XFA_SCRIPT_Basic}, - {0x577682ac, L"preserve", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Preserve, XFA_SCRIPT_Basic}, - {0x731e0665, L"spaceBelow", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_SpaceBelow, XFA_SCRIPT_Basic}, - {0x7a7cc341, L"vAlign", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_VAlign, XFA_SCRIPT_Basic}, - {0x836d4d7c, L"tabDefault", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_TabDefault, XFA_SCRIPT_Basic}, - {0x8fa01790, L"tabStops", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_TabStops, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xd4b01921, L"lineHeight", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_LineHeight, XFA_SCRIPT_Basic}, - {0xe18b5659, L"spaceAbove", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_SpaceAbove, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xd861f8af, L"addRevocationInfo", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_AddRevocationInfo, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xbb8df5d, L"ref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Ref, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xd6128d8d, L"activity", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Activity, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0x43e349b, L"dataRowCount", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_DataRowCount, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0x28e17e91, L"dataPrep", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_DataPrep, XFA_SCRIPT_Basic}, - {0x2f16a382, L"type", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Type, XFA_SCRIPT_Basic}, - {0x3650557e, L"textLocation", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_TextLocation, XFA_SCRIPT_Basic}, - {0x3b582286, L"moduleWidth", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_ModuleWidth, XFA_SCRIPT_Basic}, - {0x52666f1c, L"printCheckDigit", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_PrintCheckDigit, XFA_SCRIPT_Basic}, - {0x5404d6df, L"moduleHeight", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_ModuleHeight, XFA_SCRIPT_Basic}, - {0x5ab23b6c, L"startChar", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_StartChar, XFA_SCRIPT_Basic}, - {0x7c732a66, L"truncate", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Truncate, XFA_SCRIPT_Basic}, - {0x8d181d61, L"wideNarrowRatio", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_WideNarrowRatio, XFA_SCRIPT_Basic}, - {0x99800d7a, L"errorCorrectionLevel", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_ErrorCorrectionLevel, XFA_SCRIPT_Basic}, - {0x9a63da3d, L"upsMode", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_UpsMode, XFA_SCRIPT_Basic}, - {0xaf754613, L"checksum", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Checksum, XFA_SCRIPT_Basic}, - {0xb045fbc5, L"charEncoding", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_CharEncoding, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xc035c6b1, L"dataColumnCount", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_DataColumnCount, XFA_SCRIPT_Basic}, - {0xd3c84d25, L"rowColumnRatio", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_RowColumnRatio, XFA_SCRIPT_Basic}, - {0xd57c513c, L"dataLength", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_DataLength, XFA_SCRIPT_Basic}, - {0xf575ca75, L"endChar", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_EndChar, XFA_SCRIPT_Basic}, - {0x31b19c1, L"name", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Name, XFA_SCRIPT_Basic}, - {0x28dee6e9, L"format", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Format, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0x60d4c8b1, L"output", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Output, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xd6a39990, L"input", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Input, XFA_SCRIPT_Basic}, - {0x2f16a382, L"type", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Type, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0x2f16a382, L"type", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Type, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0x2b5df51e, L"dataDescription", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_DataDescription, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0x6c0d9600, L"currentValue", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Delta_CurrentValue, -1, - XFA_SCRIPT_Basic}, - {0x942643f0, L"savedValue", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Delta_SavedValue, -1, - XFA_SCRIPT_Basic}, - {0xc8da4da7, L"target", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Delta_Target, -1, - XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xd4cc53f8, L"highlight", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Highlight, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0x5518c25, L"break", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Break, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0x570ce835, L"presence", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Presence, XFA_SCRIPT_Basic}, - {0x8e1c2921, L"relevant", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Relevant, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xd996fa9b, L"hand", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Hand, XFA_SCRIPT_Basic}, - {0x78, L"x", (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_X, XFA_SCRIPT_Basic}, - {0x79, L"y", (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Y, XFA_SCRIPT_Basic}, - {0x31b19c1, L"name", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Name, XFA_SCRIPT_Basic}, - {0x31b19c1, L"name", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Name, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0x1059ec18, L"level", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_Integer, - XFA_ATTRIBUTE_Level, XFA_SCRIPT_Basic}, - {0x8e1c2921, L"relevant", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Relevant, XFA_SCRIPT_Basic}, - {0xac06e2b0, L"colSpan", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_ColSpan, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0x21aed, L"id", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Id, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0x2f105f72, L"wordCharacterCount", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_WordCharacterCount, XFA_SCRIPT_Basic}, - {0x3d123c26, L"hyphenate", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Hyphenate, XFA_SCRIPT_Basic}, - {0x66539c48, L"excludeInitialCap", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_ExcludeInitialCap, XFA_SCRIPT_Basic}, - {0x6a95c976, L"pushCharacterCount", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_PushCharacterCount, XFA_SCRIPT_Basic}, - {0x982bd892, L"remainCharacterCount", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_RemainCharacterCount, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xe5c96d6a, L"excludeAllCaps", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_ExcludeAllCaps, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0x8af2e657, L"maxChars", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_MaxChars, XFA_SCRIPT_Basic}, - {0xa52682bd, L"{default}", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Som_DefaultValue, -1, - XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xd6e27f1d, L"value", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Som_DefaultValue, -1, - XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0xa52682bd, L"{default}", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Som_DefaultValue, -1, - XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xd6e27f1d, L"value", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Som_DefaultValue, -1, - XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xc080cd3, L"url", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Url, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0xa6710262, L"credentialServerPolicy", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_CredentialServerPolicy, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xc2ba0923, L"urlPolicy", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_UrlPolicy, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0x2f16a382, L"type", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Type, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0x47d03490, L"connection", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Connection, XFA_SCRIPT_Basic}, - {0xc8da4da7, L"target", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Target, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0xa52682bd, L"{default}", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Som_DefaultValue, -1, - XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xd6e27f1d, L"value", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Som_DefaultValue, -1, - XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0x78bff531, L"numberOfCells", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_Integer, - XFA_ATTRIBUTE_NumberOfCells, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0x2f16a382, L"type", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Type, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0x68, L"h", (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_H, XFA_SCRIPT_Basic}, - {0x77, L"w", (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_W, XFA_SCRIPT_Basic}, - {0x78, L"x", (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_X, XFA_SCRIPT_Basic}, - {0x79, L"y", (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Y, XFA_SCRIPT_Basic}, - {0x2282c73, L"hAlign", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_HAlign, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0x1abbd7e0, L"dataNode", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Som_DataNode, -1, - XFA_SCRIPT_Object}, - {0x25839852, L"access", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Access, XFA_SCRIPT_Basic}, - {0x2ee7678f, L"rotate", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Rotate, XFA_SCRIPT_Basic}, - {0x3b1ddd06, L"fillColor", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Som_FillColor, -1, - XFA_SCRIPT_Basic}, - {0x54c399e3, L"formattedValue", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Field_FormattedValue, -1, - XFA_SCRIPT_Basic}, - {0x570ce835, L"presence", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Presence, XFA_SCRIPT_Basic}, - {0x5a3b375d, L"borderColor", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Som_BorderColor, -1, - XFA_SCRIPT_Basic}, - {0x5e936ed6, L"fontColor", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Som_FontColor, -1, - XFA_SCRIPT_Basic}, - {0x6826c408, L"parentSubform", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Field_ParentSubform, -1, - XFA_SCRIPT_Basic}, - {0x79b67434, L"mandatoryMessage", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Som_MandatoryMessage, -1, - XFA_SCRIPT_Basic}, - {0x7a7cc341, L"vAlign", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_VAlign, XFA_SCRIPT_Basic}, - {0x7c2ff6ae, L"maxH", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_MaxH, XFA_SCRIPT_Basic}, - {0x7c2ff6bd, L"maxW", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_MaxW, XFA_SCRIPT_Basic}, - {0x7d02356c, L"minH", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_MinH, XFA_SCRIPT_Basic}, - {0x7d02357b, L"minW", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_MinW, XFA_SCRIPT_Basic}, - {0x85fd6faf, L"mandatory", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Som_Mandatory, -1, - XFA_SCRIPT_Basic}, - {0x8e1c2921, L"relevant", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Relevant, XFA_SCRIPT_Basic}, - {0x964fb42e, L"formatMessage", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Field_FormatMessage, -1, - XFA_SCRIPT_Basic}, - {0xa03cf627, L"rawValue", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Som_DefaultValue, -1, - XFA_SCRIPT_Basic}, - {0xa52682bd, L"{default}", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Som_DefaultValue, -1, - XFA_SCRIPT_Basic}, - {0xa60dd202, L"length", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Field_Length, -1, - XFA_SCRIPT_Basic}, - {0xac06e2b0, L"colSpan", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_ColSpan, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xbc8fa350, L"locale", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Locale, XFA_SCRIPT_Basic}, - {0xc2bd40fd, L"anchorType", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_AnchorType, XFA_SCRIPT_Basic}, - {0xc4fed09b, L"accessKey", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_AccessKey, XFA_SCRIPT_Basic}, - {0xcabfa3d0, L"validationMessage", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Som_ValidationMessage, -1, - XFA_SCRIPT_Basic}, - {0xdcecd663, L"editValue", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Field_EditValue, -1, - XFA_SCRIPT_Basic}, - {0xe07e5061, L"selectedIndex", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Field_SelectedIndex, -1, - XFA_SCRIPT_Basic}, - {0xf65e34be, L"borderWidth", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Som_BorderWidth, -1, - XFA_SCRIPT_Basic}, - {0x31b19c1, L"name", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Name, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0x68, L"h", (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_H, XFA_SCRIPT_Basic}, - {0x77, L"w", (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_W, XFA_SCRIPT_Basic}, - {0x78, L"x", (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_X, XFA_SCRIPT_Basic}, - {0x79, L"y", (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Y, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0x8e1c2921, L"relevant", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Relevant, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xd843798, L"fullText", (XFA_ATTRIBUTE_CALLBACK)&CScript_EventPseudoModel:: - Script_EventPseudoModel_FullText, - -1, XFA_SCRIPT_Basic}, - {0x1b6d1cf5, L"reenter", (XFA_ATTRIBUTE_CALLBACK)&CScript_EventPseudoModel:: - Script_EventPseudoModel_Reenter, - -1, XFA_SCRIPT_Basic}, - {0x1e6ffa9a, L"prevContentType", - (XFA_ATTRIBUTE_CALLBACK)&CScript_EventPseudoModel:: - Script_EventPseudoModel_PrevContentType, - -1, XFA_SCRIPT_Basic}, - {0x25a3c206, L"soapFaultString", - (XFA_ATTRIBUTE_CALLBACK)&CScript_EventPseudoModel:: - Script_EventPseudoModel_SoapFaultString, - -1, XFA_SCRIPT_Basic}, - {0x2e00c007, L"newContentType", - (XFA_ATTRIBUTE_CALLBACK)&CScript_EventPseudoModel:: - Script_EventPseudoModel_NewContentType, - -1, XFA_SCRIPT_Basic}, - {0x4570500f, L"modifier", - (XFA_ATTRIBUTE_CALLBACK)&CScript_EventPseudoModel:: - Script_EventPseudoModel_Modifier, - -1, XFA_SCRIPT_Basic}, - {0x50e2e33b, L"selEnd", (XFA_ATTRIBUTE_CALLBACK)&CScript_EventPseudoModel:: - Script_EventPseudoModel_SelEnd, - -1, XFA_SCRIPT_Basic}, - {0x57de87c2, L"prevText", - (XFA_ATTRIBUTE_CALLBACK)&CScript_EventPseudoModel:: - Script_EventPseudoModel_PrevText, - -1, XFA_SCRIPT_Basic}, - {0x6ea04e0a, L"soapFaultCode", - (XFA_ATTRIBUTE_CALLBACK)&CScript_EventPseudoModel:: - Script_EventPseudoModel_SoapFaultCode, - -1, XFA_SCRIPT_Basic}, - {0x6f6556cf, L"newText", (XFA_ATTRIBUTE_CALLBACK)&CScript_EventPseudoModel:: - Script_EventPseudoModel_NewText, - -1, XFA_SCRIPT_Basic}, - {0x891f4606, L"change", (XFA_ATTRIBUTE_CALLBACK)&CScript_EventPseudoModel:: - Script_EventPseudoModel_Change, - -1, XFA_SCRIPT_Basic}, - {0x8fa3c19e, L"shift", (XFA_ATTRIBUTE_CALLBACK)&CScript_EventPseudoModel:: - Script_EventPseudoModel_Shift, - -1, XFA_SCRIPT_Basic}, - {0xa9d9b2e1, L"keyDown", (XFA_ATTRIBUTE_CALLBACK)&CScript_EventPseudoModel:: - Script_EventPseudoModel_KeyDown, - -1, XFA_SCRIPT_Basic}, - {0xbfc89db2, L"selStart", - (XFA_ATTRIBUTE_CALLBACK)&CScript_EventPseudoModel:: - Script_EventPseudoModel_SelStart, - -1, XFA_SCRIPT_Basic}, - {0xc32a5812, L"commitKey", - (XFA_ATTRIBUTE_CALLBACK)&CScript_EventPseudoModel:: - Script_EventPseudoModel_CommitKey, - -1, XFA_SCRIPT_Basic}, - {0xc8da4da7, L"target", (XFA_ATTRIBUTE_CALLBACK)&CScript_EventPseudoModel:: - Script_EventPseudoModel_Target, - -1, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xa2e3514, L"cap", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Cap, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0x5392ea58, L"stroke", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Stroke, XFA_SCRIPT_Basic}, - {0x570ce835, L"presence", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Presence, XFA_SCRIPT_Basic}, - {0x94446dcc, L"thickness", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Thickness, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0x1ec8ab2c, L"rate", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Rate, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0x7b29630a, L"sourceBelow", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_SourceBelow, XFA_SCRIPT_Basic}, - {0x8fc36c0a, L"outputBelow", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_OutputBelow, XFA_SCRIPT_Basic}, - {0xe996b2fe, L"sourceAbove", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_SourceAbove, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0x68, L"h", (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_H, XFA_SCRIPT_Basic}, - {0x77, L"w", (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_W, XFA_SCRIPT_Basic}, - {0x78, L"x", (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_X, XFA_SCRIPT_Basic}, - {0x79, L"y", (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Y, XFA_SCRIPT_Basic}, - {0x2282c73, L"hAlign", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_HAlign, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0xf23332f, L"errorText", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_ExclGroup_ErrorText, -1, - XFA_SCRIPT_Basic}, - {0x1abbd7e0, L"dataNode", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Som_DataNode, -1, - XFA_SCRIPT_Object}, - {0x25839852, L"access", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Access, XFA_SCRIPT_Basic}, - {0x3b1ddd06, L"fillColor", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Som_FillColor, -1, - XFA_SCRIPT_Basic}, - {0x570ce835, L"presence", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Presence, XFA_SCRIPT_Basic}, - {0x5a3b375d, L"borderColor", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Som_BorderColor, -1, - XFA_SCRIPT_Basic}, - {0x79b67434, L"mandatoryMessage", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Som_MandatoryMessage, -1, - XFA_SCRIPT_Basic}, - {0x7a7cc341, L"vAlign", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_VAlign, XFA_SCRIPT_Basic}, - {0x7c2ff6ae, L"maxH", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_MaxH, XFA_SCRIPT_Basic}, - {0x7c2ff6bd, L"maxW", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_MaxW, XFA_SCRIPT_Basic}, - {0x7d02356c, L"minH", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_MinH, XFA_SCRIPT_Basic}, - {0x7d02357b, L"minW", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_MinW, XFA_SCRIPT_Basic}, - {0x7e7e845e, L"layout", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Layout, XFA_SCRIPT_Basic}, - {0x846599f8, L"transient", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_ExclGroup_Transient, -1, - XFA_SCRIPT_Basic}, - {0x85fd6faf, L"mandatory", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Som_Mandatory, -1, - XFA_SCRIPT_Basic}, - {0x8e1c2921, L"relevant", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Relevant, XFA_SCRIPT_Basic}, - {0xa03cf627, L"rawValue", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_ExclGroup_DefaultAndRawValue, - -1, XFA_SCRIPT_Basic}, - {0xa52682bd, L"{default}", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_ExclGroup_DefaultAndRawValue, - -1, XFA_SCRIPT_Basic}, - {0xac06e2b0, L"colSpan", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_ColSpan, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xc2bd40fd, L"anchorType", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_AnchorType, XFA_SCRIPT_Basic}, - {0xc4fed09b, L"accessKey", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_AccessKey, XFA_SCRIPT_Basic}, - {0xcabfa3d0, L"validationMessage", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Som_ValidationMessage, -1, - XFA_SCRIPT_Basic}, - {0xf65e34be, L"borderWidth", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Som_BorderWidth, -1, - XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xeda9017a, L"scope", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Scope, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0x47d03490, L"connection", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Connection, XFA_SCRIPT_Basic}, - {0x6cfa828a, L"runAt", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_RunAt, XFA_SCRIPT_Basic}, - {0xa1b0d2f5, L"executeType", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_ExecuteType, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xe6f99487, L"hScrollPolicy", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_HScrollPolicy, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0x42fed1fd, L"contentType", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_ContentType, XFA_SCRIPT_Basic}, - {0x54fa722c, L"transferEncoding", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_TransferEncoding, XFA_SCRIPT_Basic}, - {0xa52682bd, L"{default}", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Som_DefaultValue_Read, -1, - XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xd171b240, L"aspect", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Aspect, XFA_SCRIPT_Basic}, - {0xd6e27f1d, L"value", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Som_DefaultValue_Read, -1, - XFA_SCRIPT_Basic}, - {0xdb55fec5, L"href", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Href, XFA_SCRIPT_Basic}, - {0xd6e27f1d, L"value", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Value, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0x2f16a382, L"type", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Type, XFA_SCRIPT_Basic}, - {0x7f6fd3d7, L"server", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Server, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0x4b8bc840, L"fracDigits", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_FracDigits, XFA_SCRIPT_Basic}, - {0xa52682bd, L"{default}", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Som_DefaultValue, -1, - XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xd6e27f1d, L"value", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Som_DefaultValue, -1, - XFA_SCRIPT_Basic}, - {0xde7f92ba, L"leadDigits", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_LeadDigits, XFA_SCRIPT_Basic}, - {0x68, L"h", (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_H, XFA_SCRIPT_Basic}, - {0x77, L"w", (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_W, XFA_SCRIPT_Basic}, - {0x78, L"x", (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_X, XFA_SCRIPT_Basic}, - {0x79, L"y", (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Y, XFA_SCRIPT_Basic}, - {0x2282c73, L"hAlign", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_HAlign, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0x1414d431, L"allowMacro", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_AllowMacro, XFA_SCRIPT_Basic}, - {0x1517dfa1, L"columnWidths", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_ColumnWidths, XFA_SCRIPT_Basic}, - {0x1abbd7e0, L"dataNode", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Som_DataNode, -1, - XFA_SCRIPT_Object}, - {0x1ee2d24d, L"instanceIndex", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Som_InstanceIndex, -1, - XFA_SCRIPT_Basic}, - {0x25839852, L"access", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Access, XFA_SCRIPT_Basic}, - {0x3b1ddd06, L"fillColor", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Som_FillColor, -1, - XFA_SCRIPT_Basic}, - {0x570ce835, L"presence", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Presence, XFA_SCRIPT_Basic}, - {0x5a3b375d, L"borderColor", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Som_BorderColor, -1, - XFA_SCRIPT_Basic}, - {0x7a7cc341, L"vAlign", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_VAlign, XFA_SCRIPT_Basic}, - {0x7c2ff6ae, L"maxH", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_MaxH, XFA_SCRIPT_Basic}, - {0x7c2ff6bd, L"maxW", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_MaxW, XFA_SCRIPT_Basic}, - {0x7d02356c, L"minH", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_MinH, XFA_SCRIPT_Basic}, - {0x7d02357b, L"minW", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_MinW, XFA_SCRIPT_Basic}, - {0x7e7e845e, L"layout", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Layout, XFA_SCRIPT_Basic}, - {0x8e1c2921, L"relevant", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Relevant, XFA_SCRIPT_Basic}, - {0x9cc17d75, L"mergeMode", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_MergeMode, XFA_SCRIPT_Basic}, - {0x9f3e9510, L"instanceManager", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Subform_InstanceManager, -1, - XFA_SCRIPT_Object}, - {0xac06e2b0, L"colSpan", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_ColSpan, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xbc8fa350, L"locale", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Subform_Locale, -1, - XFA_SCRIPT_Basic}, - {0xc2bd40fd, L"anchorType", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_AnchorType, XFA_SCRIPT_Basic}, - {0xcabfa3d0, L"validationMessage", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Som_ValidationMessage, -1, - XFA_SCRIPT_Basic}, - {0xe4c3a5e5, L"restoreState", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_RestoreState, XFA_SCRIPT_Basic}, - {0xeda9017a, L"scope", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Scope, XFA_SCRIPT_Basic}, - {0xf65e34be, L"borderWidth", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Som_BorderWidth, -1, - XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0x2f16a382, L"type", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Type, XFA_SCRIPT_Basic}, - {0x5a50e9e6, L"version", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Handler_Version, -1, - XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0x4107ed, L"foxitAppType", - (XFA_ATTRIBUTE_CALLBACK)&CScript_HostPseudoModel:: - Script_HostPseudoModel_FoxitAppType, - -1, XFA_SCRIPT_Basic}, - {0x31b19c1, L"name", (XFA_ATTRIBUTE_CALLBACK)&CScript_HostPseudoModel:: - Script_HostPseudoModel_Name, - -1, XFA_SCRIPT_Basic}, - {0x66c1ae9, L"validationsEnabled", - (XFA_ATTRIBUTE_CALLBACK)&CScript_HostPseudoModel:: - Script_HostPseudoModel_ValidationsEnabled, - -1, XFA_SCRIPT_Basic}, - {0x14d04502, L"title", (XFA_ATTRIBUTE_CALLBACK)&CScript_HostPseudoModel:: - Script_HostPseudoModel_Title, - -1, XFA_SCRIPT_Basic}, - {0x193afe8b, L"foxitName", - (XFA_ATTRIBUTE_CALLBACK)&CScript_HostPseudoModel:: - Script_HostPseudoModel_FoxitName, - -1, XFA_SCRIPT_Basic}, - {0x392ae445, L"platform", (XFA_ATTRIBUTE_CALLBACK)&CScript_HostPseudoModel:: - Script_HostPseudoModel_Platform, - -1, XFA_SCRIPT_Basic}, - {0x5a50e9e6, L"version", (XFA_ATTRIBUTE_CALLBACK)&CScript_HostPseudoModel:: - Script_HostPseudoModel_Version, - -1, XFA_SCRIPT_Basic}, - {0x66cb1eed, L"variation", - (XFA_ATTRIBUTE_CALLBACK)&CScript_HostPseudoModel:: - Script_HostPseudoModel_Variation, - -1, XFA_SCRIPT_Basic}, - {0x7717cbc4, L"language", (XFA_ATTRIBUTE_CALLBACK)&CScript_HostPseudoModel:: - Script_HostPseudoModel_Language, - -1, XFA_SCRIPT_Basic}, - {0x86698963, L"appType", (XFA_ATTRIBUTE_CALLBACK)&CScript_HostPseudoModel:: - Script_HostPseudoModel_AppType, - -1, XFA_SCRIPT_Basic}, - {0x94ff9e8d, L"calculationsEnabled", - (XFA_ATTRIBUTE_CALLBACK)&CScript_HostPseudoModel:: - Script_HostPseudoModel_CalculationsEnabled, - -1, XFA_SCRIPT_Basic}, - {0xbcd44940, L"currentPage", - (XFA_ATTRIBUTE_CALLBACK)&CScript_HostPseudoModel:: - Script_HostPseudoModel_CurrentPage, - -1, XFA_SCRIPT_Basic}, - {0xd4286870, L"foxitVersion", - (XFA_ATTRIBUTE_CALLBACK)&CScript_HostPseudoModel:: - Script_HostPseudoModel_FoxitVersion, - -1, XFA_SCRIPT_Basic}, - {0xd592b920, L"numPages", (XFA_ATTRIBUTE_CALLBACK)&CScript_HostPseudoModel:: - Script_HostPseudoModel_NumPages, - -1, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0x24d85167, L"timeout", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Timeout, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0x7d9fd7c5, L"mode", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Mode, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0x7d9fd7c5, L"mode", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_SubmitFormat_Mode, -1, - XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0xa52682bd, L"{default}", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Som_DefaultValue, -1, - XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xd6e27f1d, L"value", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Som_DefaultValue, -1, - XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0x2038c9b2, L"role", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Role, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0xa52682bd, L"{default}", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Som_DefaultValue, -1, - XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xd6e27f1d, L"value", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Som_DefaultValue, -1, - XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0x31b19c1, L"name", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Name, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xfcef86b5, L"ready", (XFA_ATTRIBUTE_CALLBACK)&CScript_LayoutPseudoModel:: - Script_LayoutPseudoModel_Ready, - -1, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0x5392ea58, L"stroke", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Stroke, XFA_SCRIPT_Basic}, - {0x570ce835, L"presence", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Presence, XFA_SCRIPT_Basic}, - {0x7b95e661, L"inverted", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Inverted, XFA_SCRIPT_Basic}, - {0x94446dcc, L"thickness", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Thickness, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xe8dddf50, L"join", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Join, XFA_SCRIPT_Basic}, - {0xe948b9a8, L"radius", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Radius, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0xabfa6c4f, L"cSpace", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_CSpace, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xd6e27f1d, L"value", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Value, XFA_SCRIPT_Basic}, - {0x3848b3f, L"next", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Next, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0x6a3405dd, L"previous", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Previous, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xf6b59543, L"intact", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Intact, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0x268b7ec1, L"commandType", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_CommandType, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xbde9abda, L"data", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Data, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0x5b707a35, L"scriptTest", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_ScriptTest, XFA_SCRIPT_Basic}, - {0x6b6ddcfb, L"nullTest", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_NullTest, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xe64b1129, L"formatTest", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_FormatTest, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0x2f16a382, L"type", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Type, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0x8c99377e, L"relation", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Relation, XFA_SCRIPT_Basic}, - {0x8e1c2921, L"relevant", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Relevant, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0xa52682bd, L"{default}", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Som_DefaultValue, -1, - XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xd6e27f1d, L"value", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Som_DefaultValue, -1, - XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0x25363, L"to", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_To, XFA_SCRIPT_Basic}, - {0x66642f8f, L"force", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Force, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xcd7f7b54, L"from", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_From, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xd6e27f1d, L"value", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Value, XFA_SCRIPT_Basic}, - {0x2b5df51e, L"dataDescription", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_DataDescription, XFA_SCRIPT_Basic}, - {0xbb8df5d, L"ref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Ref, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0x226ca8f1, L"operation", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Operation, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0x2f16a382, L"type", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Type, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0x2f16a382, L"type", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Type, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xfb67185, L"recordsBefore", (XFA_ATTRIBUTE_CALLBACK)&CScript_DataWindow:: - Script_DataWindow_RecordsBefore, - -1, XFA_SCRIPT_Basic}, - {0x21d5dfcb, L"currentRecordNumber", - (XFA_ATTRIBUTE_CALLBACK)&CScript_DataWindow:: - Script_DataWindow_CurrentRecordNumber, - -1, XFA_SCRIPT_Basic}, - {0x312af044, L"recordsAfter", (XFA_ATTRIBUTE_CALLBACK)&CScript_DataWindow:: - Script_DataWindow_RecordsAfter, - -1, XFA_SCRIPT_Basic}, - {0x6aab37cb, L"isDefined", - (XFA_ATTRIBUTE_CALLBACK)&CScript_DataWindow::Script_DataWindow_IsDefined, - -1, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0x42fed1fd, L"contentType", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_ContentType, XFA_SCRIPT_Basic}, - {0x6cfa828a, L"runAt", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_RunAt, XFA_SCRIPT_Basic}, - {0xa021b738, L"stateless", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Script_Stateless, -1, - XFA_SCRIPT_Basic}, - {0xa52682bd, L"{default}", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Som_DefaultValue, -1, - XFA_SCRIPT_Basic}, - {0xadc4c77b, L"binding", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Binding, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xd6e27f1d, L"value", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Som_DefaultValue, -1, - XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0x7a0cc471, L"passwordChar", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_PasswordChar, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xe6f99487, L"hScrollPolicy", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_HScrollPolicy, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xe6f99487, L"hScrollPolicy", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_HScrollPolicy, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0x14a32d52, L"pagePosition", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_PagePosition, XFA_SCRIPT_Basic}, - {0x8340ea66, L"oddOrEven", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_OddOrEven, XFA_SCRIPT_Basic}, - {0x8e1c2921, L"relevant", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Relevant, XFA_SCRIPT_Basic}, - {0xa85e74f3, L"initialNumber", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_InitialNumber, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xbe9ba472, L"numbered", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Numbered, XFA_SCRIPT_Basic}, - {0xd70798c2, L"blankOrNotBlank", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_BlankOrNotBlank, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xd6e27f1d, L"value", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Som_DefaultValue, -1, - XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0x2f16a382, L"type", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Type, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0x34ae103c, L"reserve", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Reserve, XFA_SCRIPT_Basic}, - {0x570ce835, L"presence", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Presence, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xf2009339, L"placement", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Placement, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0x42fed1fd, L"contentType", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_ContentType, XFA_SCRIPT_Basic}, - {0x54fa722c, L"transferEncoding", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_TransferEncoding, XFA_SCRIPT_Basic}, - {0xa52682bd, L"{default}", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Som_DefaultValue, -1, - XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xc4547a08, L"maxLength", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_MaxLength, XFA_SCRIPT_Basic}, - {0xd6e27f1d, L"value", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Som_DefaultValue, -1, - XFA_SCRIPT_Basic}, - {0xdb55fec5, L"href", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Href, XFA_SCRIPT_Basic}, - {0x29418bb7, L"abbr", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Abbr, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf531b059, L"writingScript", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_WritingScript, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0x1b8dce3e, L"action", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Action, XFA_SCRIPT_Basic}, - {0xa52682bd, L"{default}", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Som_DefaultValue, -1, - XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0x9dcc3ab3, L"trailer", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Trailer, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xc8da4da7, L"target", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Target, XFA_SCRIPT_Basic}, - {0xcbcaf66d, L"leader", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Leader, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0x2f16a382, L"type", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Type, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0x31b19c1, L"name", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Name, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xb3543a6, L"max", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_InstanceManager_Max, -1, - XFA_SCRIPT_Basic}, - {0xb356ca4, L"min", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_InstanceManager_Min, -1, - XFA_SCRIPT_Basic}, - {0x6f544d49, L"count", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_InstanceManager_Count, -1, - XFA_SCRIPT_Basic}, - {0x25363, L"to", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_To, XFA_SCRIPT_Basic}, - {0xa0933954, L"unicodeRange", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_UnicodeRange, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xcd7f7b54, L"from", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_From, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0x4ef3d02c, L"orientation", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Orientation, XFA_SCRIPT_Basic}, - {0x65e30c67, L"imagingBBox", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_ImagingBBox, XFA_SCRIPT_Basic}, - {0x9041d4b0, L"short", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Short, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xe349d044, L"stock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Stock, XFA_SCRIPT_Basic}, - {0xf6b4afb0, L"long", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Long, XFA_SCRIPT_Basic}, - {0x5ce6195, L"vScrollPolicy", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_VScrollPolicy, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0x1ef3a64a, L"allowRichText", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_AllowRichText, XFA_SCRIPT_Basic}, - {0x5a32e493, L"multiLine", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_MultiLine, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xe6f99487, L"hScrollPolicy", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_HScrollPolicy, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xd52482e0, L"maxEntries", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_MaxEntries, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0x42fed1fd, L"contentType", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_ContentType, XFA_SCRIPT_Basic}, - {0x8855805f, L"contains", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Contains, XFA_SCRIPT_Basic}, - {0xa52682bd, L"{default}", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Som_DefaultValue, -1, - XFA_SCRIPT_Basic}, - {0xd6e27f1d, L"value", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Som_DefaultValue, -1, - XFA_SCRIPT_Basic}, - {0xe372ae97, L"isNull", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_IsNull, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0x2b5df51e, L"dataDescription", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_DataDescription, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xbb8df5d, L"ref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Ref, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0x226ca8f1, L"operation", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Operation, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xc8da4da7, L"target", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Target, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0x31b19c1, L"name", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Name, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xbb8df5d, L"ref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Ref, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0x42fed1fd, L"contentType", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_ContentType, XFA_SCRIPT_Basic}, - {0x54fa722c, L"transferEncoding", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_TransferEncoding, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xf197844d, L"match", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Match, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xd996fa9b, L"hand", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Hand, XFA_SCRIPT_Basic}, - {0x21aed, L"id", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Id, XFA_SCRIPT_Basic}, - {0x31b19c1, L"name", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Name, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0xa52682bd, L"{default}", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Som_DefaultValue, -1, - XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xd6e27f1d, L"value", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Som_DefaultValue, -1, - XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0x28dee6e9, L"format", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Encrypt_Format, -1, - XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0x68, L"h", (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_H, XFA_SCRIPT_Basic}, - {0x77, L"w", (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_W, XFA_SCRIPT_Basic}, - {0x78, L"x", (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_X, XFA_SCRIPT_Basic}, - {0x79, L"y", (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Y, XFA_SCRIPT_Basic}, - {0x2282c73, L"hAlign", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_HAlign, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0x2ee7678f, L"rotate", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Rotate, XFA_SCRIPT_Basic}, - {0x570ce835, L"presence", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Presence, XFA_SCRIPT_Basic}, - {0x7a7cc341, L"vAlign", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_VAlign, XFA_SCRIPT_Basic}, - {0x7c2ff6ae, L"maxH", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_MaxH, XFA_SCRIPT_Basic}, - {0x7c2ff6bd, L"maxW", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_MaxW, XFA_SCRIPT_Basic}, - {0x7d02356c, L"minH", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_MinH, XFA_SCRIPT_Basic}, - {0x7d02357b, L"minW", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_MinW, XFA_SCRIPT_Basic}, - {0x8e1c2921, L"relevant", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Relevant, XFA_SCRIPT_Basic}, - {0xa03cf627, L"rawValue", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Som_DefaultValue, -1, - XFA_SCRIPT_Basic}, - {0xa52682bd, L"{default}", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Som_DefaultValue, -1, - XFA_SCRIPT_Basic}, - {0xac06e2b0, L"colSpan", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_ColSpan, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xbc8fa350, L"locale", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Locale, XFA_SCRIPT_Basic}, - {0xc2bd40fd, L"anchorType", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_AnchorType, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0x39cdb0a2, L"priority", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Priority, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xeb511b54, L"disable", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Disable, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xd6e27f1d, L"value", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Value, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0x2f16a382, L"type", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Type, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0x21aed, L"id", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Id, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0x2f16a382, L"type", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Type, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0x570ce835, L"presence", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Presence, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xcb0ac9, L"lineThrough", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_LineThrough, XFA_SCRIPT_Basic}, - {0x2c1c7f1, L"typeface", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Typeface, XFA_SCRIPT_Basic}, - {0x8c74ae9, L"fontHorizontalScale", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_FontHorizontalScale, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0x2cd79033, L"kerningMode", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_KerningMode, XFA_SCRIPT_Basic}, - {0x3a0273a6, L"underline", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Underline, XFA_SCRIPT_Basic}, - {0x4873c601, L"baselineShift", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_BaselineShift, XFA_SCRIPT_Basic}, - {0x4b319767, L"overlinePeriod", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_OverlinePeriod, XFA_SCRIPT_Basic}, - {0x79543055, L"letterSpacing", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_LetterSpacing, XFA_SCRIPT_Basic}, - {0x8ec6204c, L"lineThroughPeriod", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_LineThroughPeriod, XFA_SCRIPT_Basic}, - {0x907c7719, L"fontVerticalScale", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_FontVerticalScale, XFA_SCRIPT_Basic}, - {0xa686975b, L"size", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Size, XFA_SCRIPT_Basic}, - {0xb5e49bf2, L"posture", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Posture, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xbd6e1d88, L"weight", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Weight, XFA_SCRIPT_Basic}, - {0xbd96a0e9, L"underlinePeriod", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_UnderlinePeriod, XFA_SCRIPT_Basic}, - {0xc0ec9fa4, L"overline", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Overline, XFA_SCRIPT_Basic}, - {0xaf754613, L"checksum", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Form_Checksum, -1, - XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0xa52682bd, L"{default}", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Som_DefaultValue, -1, - XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xd6e27f1d, L"value", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Som_DefaultValue, -1, - XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0x8e1c2921, L"relevant", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Relevant, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xea7090a0, L"override", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Override, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0x9dcc3ab3, L"trailer", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Trailer, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xcbcaf66d, L"leader", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Leader, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0x60a61edd, L"codeType", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_CodeType, XFA_SCRIPT_Basic}, - {0xb373a862, L"archive", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Archive, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xe1a26b56, L"codeBase", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_CodeBase, XFA_SCRIPT_Basic}, - {0xeb091003, L"classId", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_ClassId, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0x47d03490, L"connection", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Connection, XFA_SCRIPT_Basic}, - {0xc39a88bd, L"labelRef", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_LabelRef, XFA_SCRIPT_Basic}, - {0xd50f903a, L"valueRef", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_ValueRef, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xea7090a0, L"override", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Override, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0x2f16a382, L"type", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Extras_Type, -1, - XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xbb8df5d, L"ref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Ref, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0x24d85167, L"timeout", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Timeout, XFA_SCRIPT_Basic}, - {0x47d03490, L"connection", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Connection, XFA_SCRIPT_Basic}, - {0x552d9ad5, L"usage", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usage, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xc860f30a, L"delayedOpen", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_DelayedOpen, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0x28dee6e9, L"format", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Format, XFA_SCRIPT_Basic}, - {0x824f21b7, L"embedPDF", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_EmbedPDF, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xc8da4da7, L"target", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Target, XFA_SCRIPT_Basic}, - {0xdc75676c, L"textEncoding", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_TextEncoding, XFA_SCRIPT_Basic}, - {0xf889e747, L"xdpContent", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_XdpContent, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0x97be91b, L"content", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Packet_Content, -1, - XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0x4156ee3f, L"delimiter", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Delimiter, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0x2f16a382, L"type", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Type, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0x21aed, L"id", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Id, XFA_SCRIPT_Basic}, - {0x31b19c1, L"name", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Name, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xbb8df5d, L"ref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Ref, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0x21aed, L"id", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Id, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0x2f16a382, L"type", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Type, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0x453eaf38, L"startNew", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_StartNew, XFA_SCRIPT_Basic}, - {0x9dcc3ab3, L"trailer", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Trailer, XFA_SCRIPT_Basic}, - {0xa6118c89, L"targetType", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_TargetType, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xc8da4da7, L"target", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Target, XFA_SCRIPT_Basic}, - {0xcbcaf66d, L"leader", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Leader, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0xabef37e3, L"slope", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Slope, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xd996fa9b, L"hand", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Hand, XFA_SCRIPT_Basic}, - {0xa60dd202, L"length", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_NodeList::Script_ListClass_Length, -1, - XFA_SCRIPT_Basic}, - {0x20146, L"db", (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Source_Db, -1, - XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xb3543a6, L"max", (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Occur_Max, - -1, XFA_SCRIPT_Basic}, - {0xb356ca4, L"min", (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Occur_Min, - -1, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0x7d0b5fca, L"initial", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Initial, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0x29418bb7, L"abbr", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Abbr, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0x31b19c1, L"name", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Name, XFA_SCRIPT_Basic}, - {0xbe52dfbf, L"desc", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Desc, XFA_SCRIPT_Basic}, - {0xf6b47749, L"lock", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_BOOL, - XFA_ATTRIBUTE_Lock, XFA_SCRIPT_Basic}, - {0xbb8df5d, L"ref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Ref, XFA_SCRIPT_Basic}, - {0xc0811ed, L"use", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Use, XFA_SCRIPT_Basic}, - {0x570ce835, L"presence", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Presence, XFA_SCRIPT_Basic}, - {0xa5b410cf, L"save", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Save, XFA_SCRIPT_Basic}, - {0xbc254332, L"usehref", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Usehref, XFA_SCRIPT_Basic}, - {0xb2c80857, L"className", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Object::Script_ObjectClass_ClassName, -1, - XFA_SCRIPT_Basic}, - {0xa60dd202, L"length", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_NodeList::Script_ListClass_Length, -1, - XFA_SCRIPT_Basic}, - {0x31b19c1, L"name", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Name, XFA_SCRIPT_Basic}, - {0x9f9d0f9, L"all", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_TreeClass_All, -1, - XFA_SCRIPT_Object}, - {0x4df15659, L"nodes", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_TreeClass_Nodes, -1, - XFA_SCRIPT_Object}, - {0x78a8d6cf, L"classAll", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_TreeClass_ClassAll, -1, - XFA_SCRIPT_Object}, - {0xcad6d8ca, L"parent", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_TreeClass_Parent, -1, - XFA_SCRIPT_Object}, - {0xd5679c78, L"index", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_TreeClass_Index, -1, - XFA_SCRIPT_Basic}, - {0xdb5b4bce, L"classIndex", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_TreeClass_ClassIndex, -1, - XFA_SCRIPT_Basic}, - {0xe4989adf, L"somExpression", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_TreeClass_SomExpression, -1, - XFA_SCRIPT_Basic}, - {0x21aed, L"id", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Attribute_String, - XFA_ATTRIBUTE_Id, XFA_SCRIPT_Basic}, - {0x234a1, L"ns", (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_NodeClass_Ns, - -1, XFA_SCRIPT_Basic}, - {0x50d1a9d1, L"model", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_NodeClass_Model, -1, - XFA_SCRIPT_Object}, - {0xacb4823f, L"isContainer", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_NodeClass_IsContainer, -1, - XFA_SCRIPT_Basic}, - {0xe372ae97, L"isNull", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_NodeClass_IsNull, -1, - XFA_SCRIPT_Basic}, - {0xfe612a5b, L"oneOfChild", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_NodeClass_OneOfChild, -1, - XFA_SCRIPT_Object}, - {0x97c1c65, L"context", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_ModelClass_Context, -1, - XFA_SCRIPT_Object}, - {0x58be2870, L"aliasNode", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_ModelClass_AliasNode, -1, - XFA_SCRIPT_Object}, - {0xa52682bd, L"{default}", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Som_DefaultValue, -1, - XFA_SCRIPT_Basic}, - {0xd6e27f1d, L"value", - (XFA_ATTRIBUTE_CALLBACK)&CXFA_Node::Script_Som_DefaultValue, -1, - XFA_SCRIPT_Basic}, -}; -const int32_t g_iSomAttributeCount = - sizeof(g_SomAttributeData) / sizeof(XFA_ATTRIBUTEINFO); diff --git a/xfa/src/fxfa/parser/xfa_basic_data.h b/xfa/src/fxfa/parser/xfa_basic_data.h deleted file mode 100644 index 4ccdd1c7c8..0000000000 --- a/xfa/src/fxfa/parser/xfa_basic_data.h +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright 2016 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXFA_PARSER_XFA_BASIC_DATA_H_ -#define XFA_SRC_FXFA_PARSER_XFA_BASIC_DATA_H_ - -#include "xfa/include/fxfa/fxfa_basic.h" -#include "xfa/src/fxfa/parser/xfa_basic_imp.h" - -extern const XFA_PACKETINFO g_XFAPacketData[]; -extern const int32_t g_iXFAPacketCount; - -extern const XFA_ATTRIBUTEENUMINFO g_XFAEnumData[]; -extern const int32_t g_iXFAEnumCount; - -extern const XFA_ATTRIBUTEINFO g_XFAAttributeData[]; -extern const int32_t g_iXFAAttributeCount; - -extern const XFA_NOTSUREATTRIBUTE g_XFANotsureAttributes[]; -extern const int32_t g_iXFANotsureCount; - -extern const XFA_ELEMENTINFO g_XFAElementData[]; -extern const int32_t g_iXFAElementCount; - -extern const XFA_ELEMENTHIERARCHY g_XFAElementChildrenIndex[]; -extern const FX_WORD g_XFAElementChildrenData[]; - -extern const XFA_ELEMENTHIERARCHY g_XFAElementAttributeIndex[]; -extern const uint8_t g_XFAElementAttributeData[]; - -extern const XFA_ELEMENTHIERARCHY g_XFAElementPropertyIndex[]; -extern const XFA_PROPERTY g_XFAElementPropertyData[]; - -extern const XFA_SCRIPTHIERARCHY g_XFAScriptIndex[]; - -extern const XFA_NOTSUREATTRIBUTE g_XFANotsureAttributes[]; -extern const int32_t g_iXFANotsureCount; - -extern const XFA_METHODINFO g_SomMethodData[]; -extern const int32_t g_iSomMethodCount; - -extern const XFA_SCRIPTATTRIBUTEINFO g_SomAttributeData[]; -extern const int32_t g_iSomAttributeCount; - -#endif // XFA_SRC_FXFA_PARSER_XFA_BASIC_DATA_H_ diff --git a/xfa/src/fxfa/parser/xfa_basic_imp.cpp b/xfa/src/fxfa/parser/xfa_basic_imp.cpp deleted file mode 100644 index a0aa56d8be..0000000000 --- a/xfa/src/fxfa/parser/xfa_basic_imp.cpp +++ /dev/null @@ -1,612 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fxfa/parser/xfa_basic_imp.h" - -#include "core/include/fxcrt/fx_ext.h" -#include "xfa/src/fgas/crt/fgas_algorithm.h" -#include "xfa/src/fgas/crt/fgas_codepage.h" -#include "xfa/src/fgas/crt/fgas_system.h" -#include "xfa/src/fxfa/fm2js/xfa_fm2jsapi.h" -#include "xfa/src/fxfa/parser/xfa_basic_data.h" -#include "xfa/src/fxfa/parser/xfa_docdata.h" -#include "xfa/src/fxfa/parser/xfa_doclayout.h" -#include "xfa/src/fxfa/parser/xfa_document.h" -#include "xfa/src/fxfa/parser/xfa_localemgr.h" -#include "xfa/src/fxfa/parser/xfa_object.h" -#include "xfa/src/fxfa/parser/xfa_parser.h" -#include "xfa/src/fxfa/parser/xfa_script.h" -#include "xfa/src/fxfa/parser/xfa_utils.h" - -const XFA_PACKETINFO* XFA_GetPacketByName(const CFX_WideStringC& wsName) { - int32_t iLength = wsName.GetLength(); - if (iLength == 0) { - return NULL; - } - uint32_t uHash = FX_HashCode_String_GetW(wsName.GetPtr(), iLength); - int32_t iStart = 0, iEnd = g_iXFAPacketCount - 1; - do { - int32_t iMid = (iStart + iEnd) / 2; - const XFA_PACKETINFO* pInfo = g_XFAPacketData + iMid; - if (uHash == pInfo->uHash) { - return pInfo; - } else if (uHash < pInfo->uHash) { - iEnd = iMid - 1; - } else { - iStart = iMid + 1; - } - } while (iStart <= iEnd); - return NULL; -} - -const XFA_PACKETINFO* XFA_GetPacketByID(FX_DWORD dwPacket) { - int32_t iStart = 0, iEnd = g_iXFAPacketCount - 1; - do { - int32_t iMid = (iStart + iEnd) / 2; - FX_DWORD dwFind = (g_XFAPacketData + iMid)->eName; - if (dwPacket == dwFind) { - return g_XFAPacketData + iMid; - } else if (dwPacket < dwFind) { - iEnd = iMid - 1; - } else { - iStart = iMid + 1; - } - } while (iStart <= iEnd); - return NULL; -} - -const XFA_PACKETINFO* XFA_GetPacketByIndex(XFA_PACKET ePacket) { - return g_XFAPacketData + ePacket; -} - -const XFA_ATTRIBUTEENUMINFO* XFA_GetAttributeEnumByName( - const CFX_WideStringC& wsName) { - int32_t iLength = wsName.GetLength(); - if (iLength == 0) { - return NULL; - } - uint32_t uHash = FX_HashCode_String_GetW(wsName.GetPtr(), iLength); - int32_t iStart = 0, iEnd = g_iXFAEnumCount - 1; - do { - int32_t iMid = (iStart + iEnd) / 2; - const XFA_ATTRIBUTEENUMINFO* pInfo = g_XFAEnumData + iMid; - if (uHash == pInfo->uHash) { - return pInfo; - } else if (uHash < pInfo->uHash) { - iEnd = iMid - 1; - } else { - iStart = iMid + 1; - } - } while (iStart <= iEnd); - return NULL; -} -const XFA_ATTRIBUTEENUMINFO* XFA_GetAttributeEnumByID(XFA_ATTRIBUTEENUM eName) { - return g_XFAEnumData + eName; -} -int32_t XFA_GetAttributeCount() { - return g_iXFAAttributeCount; -} -const XFA_ATTRIBUTEINFO* XFA_GetAttributeByName(const CFX_WideStringC& wsName) { - int32_t iLength = wsName.GetLength(); - if (iLength == 0) { - return NULL; - } - uint32_t uHash = FX_HashCode_String_GetW(wsName.GetPtr(), iLength); - int32_t iStart = 0, iEnd = g_iXFAAttributeCount - 1; - do { - int32_t iMid = (iStart + iEnd) / 2; - const XFA_ATTRIBUTEINFO* pInfo = g_XFAAttributeData + iMid; - if (uHash == pInfo->uHash) { - return pInfo; - } else if (uHash < pInfo->uHash) { - iEnd = iMid - 1; - } else { - iStart = iMid + 1; - } - } while (iStart <= iEnd); - return NULL; -} -const XFA_ATTRIBUTEINFO* XFA_GetAttributeByID(XFA_ATTRIBUTE eName) { - return (eName < g_iXFAAttributeCount) ? (g_XFAAttributeData + eName) : NULL; -} -FX_BOOL XFA_GetAttributeDefaultValue(void*& pValue, - XFA_ELEMENT eElement, - XFA_ATTRIBUTE eAttribute, - XFA_ATTRIBUTETYPE eType, - FX_DWORD dwPacket) { - const XFA_ATTRIBUTEINFO* pInfo = XFA_GetAttributeByID(eAttribute); - if (pInfo == NULL) { - return FALSE; - } - if (dwPacket && (dwPacket & pInfo->dwPackets) == 0) { - return FALSE; - } - if (pInfo->eType == eType) { - pValue = pInfo->pDefValue; - return TRUE; - } else if (pInfo->eType == XFA_ATTRIBUTETYPE_NOTSURE) { - const XFA_NOTSUREATTRIBUTE* pAttr = - XFA_GetNotsureAttribute(eElement, eAttribute, eType); - if (pAttr) { - pValue = pAttr->pValue; - return TRUE; - } - } - return FALSE; -} -XFA_ATTRIBUTEENUM XFA_GetAttributeDefaultValue_Enum(XFA_ELEMENT eElement, - XFA_ATTRIBUTE eAttribute, - FX_DWORD dwPacket) { - void* pValue; - if (XFA_GetAttributeDefaultValue(pValue, eElement, eAttribute, - XFA_ATTRIBUTETYPE_Enum, dwPacket)) { - return (XFA_ATTRIBUTEENUM)(uintptr_t)pValue; - } - return XFA_ATTRIBUTEENUM_Unknown; -} -CFX_WideStringC XFA_GetAttributeDefaultValue_Cdata(XFA_ELEMENT eElement, - XFA_ATTRIBUTE eAttribute, - FX_DWORD dwPacket) { - void* pValue; - if (XFA_GetAttributeDefaultValue(pValue, eElement, eAttribute, - XFA_ATTRIBUTETYPE_Cdata, dwPacket)) { - return (const FX_WCHAR*)pValue; - } - return NULL; -} -FX_BOOL XFA_GetAttributeDefaultValue_Boolean(XFA_ELEMENT eElement, - XFA_ATTRIBUTE eAttribute, - FX_DWORD dwPacket) { - void* pValue; - if (XFA_GetAttributeDefaultValue(pValue, eElement, eAttribute, - XFA_ATTRIBUTETYPE_Boolean, dwPacket)) { - return (FX_BOOL)(uintptr_t)pValue; - } - return FALSE; -} -int32_t XFA_GetAttributeDefaultValue_Integer(XFA_ELEMENT eElement, - XFA_ATTRIBUTE eAttribute, - FX_DWORD dwPacket) { - void* pValue; - if (XFA_GetAttributeDefaultValue(pValue, eElement, eAttribute, - XFA_ATTRIBUTETYPE_Integer, dwPacket)) { - return (int32_t)(uintptr_t)pValue; - } - return 0; -} -CXFA_Measurement XFA_GetAttributeDefaultValue_Measure(XFA_ELEMENT eElement, - XFA_ATTRIBUTE eAttribute, - FX_DWORD dwPacket) { - void* pValue; - if (XFA_GetAttributeDefaultValue(pValue, eElement, eAttribute, - XFA_ATTRIBUTETYPE_Measure, dwPacket)) { - return *(CXFA_Measurement*)pValue; - } - return CXFA_Measurement(); -} -int32_t XFA_GetElementCount() { - return g_iXFAElementCount; -} -const XFA_ELEMENTINFO* XFA_GetElementByName(const CFX_WideStringC& wsName) { - int32_t iLength = wsName.GetLength(); - if (iLength == 0) { - return NULL; - } - uint32_t uHash = FX_HashCode_String_GetW(wsName.GetPtr(), iLength); - int32_t iStart = 0, iEnd = g_iXFAElementCount - 1; - do { - int32_t iMid = (iStart + iEnd) / 2; - const XFA_ELEMENTINFO* pInfo = g_XFAElementData + iMid; - if (uHash == pInfo->uHash) { - return pInfo; - } else if (uHash < pInfo->uHash) { - iEnd = iMid - 1; - } else { - iStart = iMid + 1; - } - } while (iStart <= iEnd); - return NULL; -} -const XFA_ELEMENTINFO* XFA_GetElementByID(XFA_ELEMENT eName) { - return (eName < g_iXFAElementCount) ? (g_XFAElementData + eName) : NULL; -} -const FX_WORD* XFA_GetElementChildren(XFA_ELEMENT eElement, int32_t& iCount) { - if (eElement >= g_iXFAElementCount) { - return NULL; - } - const XFA_ELEMENTHIERARCHY* pElement = g_XFAElementChildrenIndex + eElement; - iCount = pElement->wCount; - return g_XFAElementChildrenData + pElement->wStart; -} -const uint8_t* XFA_GetElementAttributes(XFA_ELEMENT eElement, int32_t& iCount) { - if (eElement >= g_iXFAElementCount) { - return NULL; - } - const XFA_ELEMENTHIERARCHY* pElement = g_XFAElementAttributeIndex + eElement; - iCount = pElement->wCount; - return g_XFAElementAttributeData + pElement->wStart; -} -const XFA_ATTRIBUTEINFO* XFA_GetAttributeOfElement(XFA_ELEMENT eElement, - XFA_ATTRIBUTE eAttribute, - FX_DWORD dwPacket) { - int32_t iCount = 0; - const uint8_t* pAttr = XFA_GetElementAttributes(eElement, iCount); - if (pAttr == NULL || iCount < 1) { - return NULL; - } - CFX_DSPATemplate search; - int32_t index = search.Lookup(eAttribute, pAttr, iCount); - if (index < 0) { - return NULL; - } - const XFA_ATTRIBUTEINFO* pInfo = XFA_GetAttributeByID(eAttribute); - ASSERT(pInfo); - if (dwPacket == XFA_XDPPACKET_UNKNOWN) - return pInfo; - return (dwPacket & pInfo->dwPackets) ? pInfo : NULL; -} -const XFA_ELEMENTINFO* XFA_GetChildOfElement(XFA_ELEMENT eElement, - XFA_ELEMENT eChild, - FX_DWORD dwPacket) { - int32_t iCount = 0; - const FX_WORD* pChild = XFA_GetElementChildren(eElement, iCount); - if (pChild == NULL || iCount < 1) { - return NULL; - } - CFX_DSPATemplate search; - int32_t index = search.Lookup(eChild, pChild, iCount); - if (index < 0) { - return NULL; - } - const XFA_ELEMENTINFO* pInfo = XFA_GetElementByID(eChild); - ASSERT(pInfo); - if (dwPacket == XFA_XDPPACKET_UNKNOWN) - return pInfo; - return (dwPacket & pInfo->dwPackets) ? pInfo : NULL; -} -const XFA_PROPERTY* XFA_GetElementProperties(XFA_ELEMENT eElement, - int32_t& iCount) { - if (eElement >= g_iXFAElementCount) { - return NULL; - } - const XFA_ELEMENTHIERARCHY* pElement = g_XFAElementPropertyIndex + eElement; - iCount = pElement->wCount; - return g_XFAElementPropertyData + pElement->wStart; -} -const XFA_PROPERTY* XFA_GetPropertyOfElement(XFA_ELEMENT eElement, - XFA_ELEMENT eProperty, - FX_DWORD dwPacket) { - int32_t iCount = 0; - const XFA_PROPERTY* pProperty = XFA_GetElementProperties(eElement, iCount); - if (pProperty == NULL || iCount < 1) { - return NULL; - } - int32_t iStart = 0, iEnd = iCount - 1, iMid; - do { - iMid = (iStart + iEnd) / 2; - XFA_ELEMENT eName = (XFA_ELEMENT)pProperty[iMid].eName; - if (eProperty == eName) { - break; - } else if (eProperty < eName) { - iEnd = iMid - 1; - } else { - iStart = iMid + 1; - } - } while (iStart <= iEnd); - if (iStart > iEnd) { - return NULL; - } - const XFA_ELEMENTINFO* pInfo = XFA_GetElementByID(eProperty); - ASSERT(pInfo); - if (dwPacket == XFA_XDPPACKET_UNKNOWN) - return pProperty + iMid; - return (dwPacket & pInfo->dwPackets) ? (pProperty + iMid) : NULL; -} -const XFA_NOTSUREATTRIBUTE* XFA_GetNotsureAttribute(XFA_ELEMENT eElement, - XFA_ATTRIBUTE eAttribute, - XFA_ATTRIBUTETYPE eType) { - int32_t iStart = 0, iEnd = g_iXFANotsureCount - 1; - do { - int32_t iMid = (iStart + iEnd) / 2; - const XFA_NOTSUREATTRIBUTE* pAttr = g_XFANotsureAttributes + iMid; - if (eElement == pAttr->eElement) { - if (pAttr->eAttribute == eAttribute) { - if (eType == XFA_ATTRIBUTETYPE_NOTSURE || eType == pAttr->eType) { - return pAttr; - } - return NULL; - } else { - int32_t iBefore = iMid - 1; - if (iBefore >= 0) { - pAttr = g_XFANotsureAttributes + iBefore; - while (eElement == pAttr->eElement) { - if (pAttr->eAttribute == eAttribute) { - if (eType == XFA_ATTRIBUTETYPE_NOTSURE || eType == pAttr->eType) { - return pAttr; - } - return NULL; - } - iBefore--; - if (iBefore < 0) { - break; - } - pAttr = g_XFANotsureAttributes + iBefore; - } - } - int32_t iAfter = iMid + 1; - if (iAfter <= g_iXFANotsureCount - 1) { - pAttr = g_XFANotsureAttributes + iAfter; - while (eElement == pAttr->eElement) { - if (pAttr->eAttribute == eAttribute) { - if (eType == XFA_ATTRIBUTETYPE_NOTSURE || eType == pAttr->eType) { - return pAttr; - } - return NULL; - } - iAfter++; - if (iAfter > g_iXFANotsureCount - 1) { - break; - } - pAttr = g_XFANotsureAttributes + iAfter; - } - } - return NULL; - } - } else if (eElement < pAttr->eElement) { - iEnd = iMid - 1; - } else { - iStart = iMid + 1; - } - } while (iStart <= iEnd); - return NULL; -} -int32_t XFA_GetMethodCount() { - return g_iSomMethodCount; -} -const XFA_METHODINFO* XFA_GetMethodByName(XFA_ELEMENT eElement, - const CFX_WideStringC& wsMethodName) { - int32_t iLength = wsMethodName.GetLength(); - if (iLength == 0) { - return NULL; - } - int32_t iElementIndex = eElement; - while (iElementIndex != -1) { - XFA_LPCSCRIPTHIERARCHY scriptIndex = g_XFAScriptIndex + iElementIndex; - int32_t icount = scriptIndex->wMethodCount; - if (icount == 0) { - iElementIndex = scriptIndex->wParentIndex; - continue; - } - uint32_t uHash = FX_HashCode_String_GetW(wsMethodName.GetPtr(), iLength); - int32_t iStart = scriptIndex->wMethodStart, iEnd = iStart + icount - 1; - do { - int32_t iMid = (iStart + iEnd) / 2; - const XFA_METHODINFO* pInfo = g_SomMethodData + iMid; - if (uHash == pInfo->uHash) { - return pInfo; - } else if (uHash < pInfo->uHash) { - iEnd = iMid - 1; - } else { - iStart = iMid + 1; - } - } while (iStart <= iEnd); - iElementIndex = scriptIndex->wParentIndex; - } - return NULL; -} -const XFA_SCRIPTATTRIBUTEINFO* XFA_GetScriptAttributeByName( - XFA_ELEMENT eElement, - const CFX_WideStringC& wsAttributeName) { - int32_t iLength = wsAttributeName.GetLength(); - if (iLength == 0) { - return NULL; - } - int32_t iElementIndex = eElement; - while (iElementIndex != -1) { - XFA_LPCSCRIPTHIERARCHY scriptIndex = g_XFAScriptIndex + iElementIndex; - int32_t icount = scriptIndex->wAttributeCount; - if (icount == 0) { - iElementIndex = scriptIndex->wParentIndex; - continue; - } - uint32_t uHash = FX_HashCode_String_GetW(wsAttributeName.GetPtr(), iLength); - int32_t iStart = scriptIndex->wAttributeStart, iEnd = iStart + icount - 1; - do { - int32_t iMid = (iStart + iEnd) / 2; - const XFA_SCRIPTATTRIBUTEINFO* pInfo = g_SomAttributeData + iMid; - if (uHash == pInfo->uHash) { - return pInfo; - } else if (uHash < pInfo->uHash) { - iEnd = iMid - 1; - } else { - iStart = iMid + 1; - } - } while (iStart <= iEnd); - iElementIndex = scriptIndex->wParentIndex; - } - return NULL; -} -void CXFA_Measurement::Set(const CFX_WideStringC& wsMeasure) { - if (wsMeasure.IsEmpty()) { - m_fValue = 0; - m_eUnit = XFA_UNIT_Unknown; - return; - } - int32_t iUsedLen = 0; - int32_t iOffset = (wsMeasure.GetAt(0) == L'=') ? 1 : 0; - FX_FLOAT fValue = FX_wcstof(wsMeasure.GetPtr() + iOffset, - wsMeasure.GetLength() - iOffset, &iUsedLen); - XFA_UNIT eUnit = GetUnit(wsMeasure.Mid(iOffset + iUsedLen)); - Set(fValue, eUnit); -} -FX_BOOL CXFA_Measurement::ToString(CFX_WideString& wsMeasure) const { - switch (GetUnit()) { - case XFA_UNIT_Mm: - wsMeasure.Format(L"%.8gmm", GetValue()); - return TRUE; - case XFA_UNIT_Pt: - wsMeasure.Format(L"%.8gpt", GetValue()); - return TRUE; - case XFA_UNIT_In: - wsMeasure.Format(L"%.8gin", GetValue()); - return TRUE; - case XFA_UNIT_Cm: - wsMeasure.Format(L"%.8gcm", GetValue()); - return TRUE; - case XFA_UNIT_Mp: - wsMeasure.Format(L"%.8gmp", GetValue()); - return TRUE; - case XFA_UNIT_Pc: - wsMeasure.Format(L"%.8gpc", GetValue()); - return TRUE; - case XFA_UNIT_Em: - wsMeasure.Format(L"%.8gem", GetValue()); - return TRUE; - case XFA_UNIT_Percent: - wsMeasure.Format(L"%.8g%%", GetValue()); - return TRUE; - default: - wsMeasure.Format(L"%.8g", GetValue()); - return FALSE; - } -} -FX_BOOL CXFA_Measurement::ToUnit(XFA_UNIT eUnit, FX_FLOAT& fValue) const { - fValue = GetValue(); - XFA_UNIT eFrom = GetUnit(); - if (eFrom == eUnit) { - return TRUE; - } - switch (eFrom) { - case XFA_UNIT_Pt: - break; - case XFA_UNIT_Mm: - fValue *= 72 / 2.54f / 10; - break; - case XFA_UNIT_In: - fValue *= 72; - break; - case XFA_UNIT_Cm: - fValue *= 72 / 2.54f; - break; - case XFA_UNIT_Mp: - fValue *= 0.001f; - break; - case XFA_UNIT_Pc: - fValue *= 12.0f; - break; - default: - fValue = 0; - return FALSE; - } - switch (eUnit) { - case XFA_UNIT_Pt: - return TRUE; - case XFA_UNIT_Mm: - fValue /= 72 / 2.54f / 10; - return TRUE; - case XFA_UNIT_In: - fValue /= 72; - return TRUE; - case XFA_UNIT_Cm: - fValue /= 72 / 2.54f; - return TRUE; - case XFA_UNIT_Mp: - fValue /= 0.001f; - return TRUE; - case XFA_UNIT_Pc: - fValue /= 12.0f; - return TRUE; - default: - fValue = 0; - return FALSE; - } - return FALSE; -} -XFA_UNIT CXFA_Measurement::GetUnit(const CFX_WideStringC& wsUnit) { - if (wsUnit == FX_WSTRC(L"mm")) { - return XFA_UNIT_Mm; - } else if (wsUnit == FX_WSTRC(L"pt")) { - return XFA_UNIT_Pt; - } else if (wsUnit == FX_WSTRC(L"in")) { - return XFA_UNIT_In; - } else if (wsUnit == FX_WSTRC(L"cm")) { - return XFA_UNIT_Cm; - } else if (wsUnit == FX_WSTRC(L"pc")) { - return XFA_UNIT_Pc; - } else if (wsUnit == FX_WSTRC(L"mp")) { - return XFA_UNIT_Mp; - } else if (wsUnit == FX_WSTRC(L"em")) { - return XFA_UNIT_Em; - } else if (wsUnit == FX_WSTRC(L"%")) { - return XFA_UNIT_Percent; - } else { - return XFA_UNIT_Unknown; - } -} -IFX_Stream* XFA_CreateWideTextRead(const CFX_WideString& wsBuffer) { - return new CXFA_WideTextRead(wsBuffer); -} -CXFA_WideTextRead::CXFA_WideTextRead(const CFX_WideString& wsBuffer) - : m_wsBuffer(wsBuffer), m_iPosition(0), m_iRefCount(1) {} -void CXFA_WideTextRead::Release() { - if (--m_iRefCount < 1) { - delete this; - } -} -IFX_Stream* CXFA_WideTextRead::Retain() { - m_iRefCount++; - return this; -} -FX_DWORD CXFA_WideTextRead::GetAccessModes() const { - return FX_STREAMACCESS_Read | FX_STREAMACCESS_Text; -} -int32_t CXFA_WideTextRead::GetLength() const { - return m_wsBuffer.GetLength() * sizeof(FX_WCHAR); -} -int32_t CXFA_WideTextRead::Seek(FX_STREAMSEEK eSeek, int32_t iOffset) { - switch (eSeek) { - case FX_STREAMSEEK_Begin: - m_iPosition = iOffset; - break; - case FX_STREAMSEEK_Current: - m_iPosition += iOffset; - break; - case FX_STREAMSEEK_End: - m_iPosition = m_wsBuffer.GetLength() + iOffset; - break; - } - if (m_iPosition < 0) { - m_iPosition = 0; - } - if (m_iPosition > m_wsBuffer.GetLength()) { - m_iPosition = m_wsBuffer.GetLength(); - } - return GetPosition(); -} -int32_t CXFA_WideTextRead::GetPosition() { - return m_iPosition * sizeof(FX_WCHAR); -} -FX_BOOL CXFA_WideTextRead::IsEOF() const { - return m_iPosition >= m_wsBuffer.GetLength(); -} -int32_t CXFA_WideTextRead::ReadString(FX_WCHAR* pStr, - int32_t iMaxLength, - FX_BOOL& bEOS, - int32_t const* pByteSize) { - if (iMaxLength > m_wsBuffer.GetLength() - m_iPosition) { - iMaxLength = m_wsBuffer.GetLength() - m_iPosition; - } - FXSYS_wcsncpy(pStr, (const FX_WCHAR*)m_wsBuffer + m_iPosition, iMaxLength); - m_iPosition += iMaxLength; - bEOS = IsEOF(); - return iMaxLength; -} -FX_WORD CXFA_WideTextRead::GetCodePage() const { - return (sizeof(FX_WCHAR) == 2) ? FX_CODEPAGE_UTF16LE : FX_CODEPAGE_UTF32LE; -} -FX_WORD CXFA_WideTextRead::SetCodePage(FX_WORD wCodePage) { - return GetCodePage(); -} diff --git a/xfa/src/fxfa/parser/xfa_basic_imp.h b/xfa/src/fxfa/parser/xfa_basic_imp.h deleted file mode 100644 index 562cf15909..0000000000 --- a/xfa/src/fxfa/parser/xfa_basic_imp.h +++ /dev/null @@ -1,71 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXFA_PARSER_XFA_BASIC_IMP_H_ -#define XFA_SRC_FXFA_PARSER_XFA_BASIC_IMP_H_ - -#include "xfa/include/fxfa/fxfa_basic.h" -#include "xfa/src/fgas/crt/fgas_stream.h" - -struct XFA_NOTSUREATTRIBUTE { - XFA_ELEMENT eElement; - XFA_ATTRIBUTE eAttribute; - XFA_ATTRIBUTETYPE eType; - void* pValue; -}; -const XFA_NOTSUREATTRIBUTE* XFA_GetNotsureAttribute( - XFA_ELEMENT eElement, - XFA_ATTRIBUTE eAttribute, - XFA_ATTRIBUTETYPE eType = XFA_ATTRIBUTETYPE_NOTSURE); - -class CXFA_WideTextRead : public IFX_Stream { - public: - CXFA_WideTextRead(const CFX_WideString& wsBuffer); - virtual void Release(); - virtual IFX_Stream* Retain(); - - virtual FX_DWORD GetAccessModes() const; - virtual int32_t GetLength() const; - virtual int32_t Seek(FX_STREAMSEEK eSeek, int32_t iOffset); - virtual int32_t GetPosition(); - virtual FX_BOOL IsEOF() const; - - virtual int32_t ReadData(uint8_t* pBuffer, int32_t iBufferSize) { return 0; } - virtual int32_t ReadString(FX_WCHAR* pStr, - int32_t iMaxLength, - FX_BOOL& bEOS, - int32_t const* pByteSize = NULL); - virtual int32_t WriteData(const uint8_t* pBuffer, int32_t iBufferSize) { - return 0; - } - virtual int32_t WriteString(const FX_WCHAR* pStr, int32_t iLength) { - return 0; - } - virtual void Flush() {} - virtual FX_BOOL SetLength(int32_t iLength) { return FALSE; } - - virtual int32_t GetBOM(uint8_t bom[4]) const { return 0; } - virtual FX_WORD GetCodePage() const; - virtual FX_WORD SetCodePage(FX_WORD wCodePage); - - virtual void Lock() {} - virtual void Unlock() {} - - virtual IFX_Stream* CreateSharedStream(FX_DWORD dwAccess, - int32_t iOffset, - int32_t iLength) { - return NULL; - } - - CFX_WideString GetSrcText() const { return m_wsBuffer; } - - protected: - CFX_WideString m_wsBuffer; - int32_t m_iPosition; - int32_t m_iRefCount; -}; - -#endif // XFA_SRC_FXFA_PARSER_XFA_BASIC_IMP_H_ diff --git a/xfa/src/fxfa/parser/xfa_docdata.h b/xfa/src/fxfa/parser/xfa_docdata.h deleted file mode 100644 index 5c6cf13dfe..0000000000 --- a/xfa/src/fxfa/parser/xfa_docdata.h +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXFA_PARSER_XFA_DOCDATA_H_ -#define XFA_SRC_FXFA_PARSER_XFA_DOCDATA_H_ - -#include "xfa/src/fxfa/parser/xfa_document.h" - -enum XFA_DATAFORMAT { - XFA_DATAFORMAT_XDP, -}; - -class IXFA_PacketExport { - public: - static IXFA_PacketExport* Create(CXFA_Document* pDocument, - XFA_DATAFORMAT eFormat = XFA_DATAFORMAT_XDP); - virtual ~IXFA_PacketExport() {} - virtual void Release() = 0; - virtual FX_BOOL Export(IFX_FileWrite* pWrite) = 0; - virtual FX_BOOL Export(IFX_FileWrite* pWrite, - CXFA_Node* pNode, - FX_DWORD dwFlag = 0, - const FX_CHAR* pChecksum = NULL) = 0; -}; -class IXFA_PacketImport { - public: - static IXFA_PacketImport* Create(CXFA_Document* pDstDoc); - virtual ~IXFA_PacketImport() {} - virtual void Release() = 0; - virtual FX_BOOL ImportData(IFX_FileRead* pDataDocument) = 0; -}; - -#endif // XFA_SRC_FXFA_PARSER_XFA_DOCDATA_H_ diff --git a/xfa/src/fxfa/parser/xfa_doclayout.h b/xfa/src/fxfa/parser/xfa_doclayout.h deleted file mode 100644 index 1ebe412078..0000000000 --- a/xfa/src/fxfa/parser/xfa_doclayout.h +++ /dev/null @@ -1,136 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXFA_PARSER_XFA_DOCLAYOUT_H_ -#define XFA_SRC_FXFA_PARSER_XFA_DOCLAYOUT_H_ - -#include "xfa/src/fxfa/parser/xfa_document.h" - -class CXFA_ContainerLayoutItem; -class CXFA_ContentLayoutItem; -class IXFA_DocLayout; - -class IXFA_LayoutPage { - public: - virtual ~IXFA_LayoutPage() {} - virtual IXFA_DocLayout* GetLayout() const = 0; - virtual int32_t GetPageIndex() const = 0; - virtual void GetPageSize(CFX_SizeF& size) = 0; - virtual CXFA_Node* GetMasterPage() const = 0; -}; - -class CXFA_LayoutItem { - public: - virtual ~CXFA_LayoutItem(); - - FX_BOOL IsContainerLayoutItem() const { return !m_bIsContentLayoutItem; } - FX_BOOL IsContentLayoutItem() const { return m_bIsContentLayoutItem; } - inline CXFA_ContainerLayoutItem* AsContainerLayoutItem(); - inline CXFA_ContentLayoutItem* AsContentLayoutItem(); - - IXFA_LayoutPage* GetPage() const; - CXFA_Node* GetFormNode() const; - void GetRect(CFX_RectF& rtLayout, FX_BOOL bRelative = FALSE) const; - int32_t GetIndex() const; - int32_t GetCount() const; - CXFA_LayoutItem* GetParent() const; - const CXFA_LayoutItem* GetFirst() const; - CXFA_LayoutItem* GetFirst(); - const CXFA_LayoutItem* GetLast() const; - CXFA_LayoutItem* GetLast(); - CXFA_LayoutItem* GetPrev() const; - CXFA_LayoutItem* GetNext() const; - - void AddChild(CXFA_LayoutItem* pChildItem); - void AddHeadChild(CXFA_LayoutItem* pChildItem); - void RemoveChild(CXFA_LayoutItem* pChildItem); - void InsertChild(CXFA_LayoutItem* pBeforeItem, CXFA_LayoutItem* pChildItem); - - CXFA_Node* m_pFormNode; - CXFA_LayoutItem* m_pParent; - CXFA_LayoutItem* m_pNextSibling; - CXFA_LayoutItem* m_pFirstChild; - - protected: - CXFA_LayoutItem(CXFA_Node* pNode, FX_BOOL bIsContentLayoutItem); - - FX_BOOL m_bIsContentLayoutItem; -}; - -class CXFA_ContainerLayoutItem : public CXFA_LayoutItem, - public IXFA_LayoutPage { - public: - CXFA_ContainerLayoutItem(CXFA_Node* pNode); - - // IXFA_LayoutPage: - IXFA_DocLayout* GetLayout() const override; - int32_t GetPageIndex() const override; - void GetPageSize(CFX_SizeF& size) override; - CXFA_Node* GetMasterPage() const override; - - CXFA_Node* m_pOldSubform; -}; - -#define XFA_WIDGETSTATUS_Access 0x80000000 -#define XFA_WIDGETSTATUS_Disabled 0x40000000 -#define XFA_WIDGETSTATUS_RectCached 0x20000000 -#define XFA_WIDGETSTATUS_ButtonDown 0x10000000 -#define XFA_WIDGETSTATUS_Highlight 0x08000000 -#define XFA_WIDGETSTATUS_TextEditValueChanged 0x04000000 - -class CXFA_ContentLayoutItem : public CXFA_LayoutItem { - public: - CXFA_ContentLayoutItem(CXFA_Node* pNode); - virtual ~CXFA_ContentLayoutItem(); - - CXFA_ContentLayoutItem* m_pPrev; - CXFA_ContentLayoutItem* m_pNext; - CFX_PointF m_sPos; - CFX_SizeF m_sSize; - FX_DWORD m_dwStatus; -}; - -CXFA_ContainerLayoutItem* CXFA_LayoutItem::AsContainerLayoutItem() { - return IsContainerLayoutItem() ? static_cast(this) - : nullptr; -} -CXFA_ContentLayoutItem* CXFA_LayoutItem::AsContentLayoutItem() { - return IsContentLayoutItem() ? static_cast(this) - : nullptr; -} -inline CXFA_ContainerLayoutItem* ToContainerLayoutItem(CXFA_LayoutItem* pItem) { - return pItem ? pItem->AsContainerLayoutItem() : nullptr; -} -inline CXFA_ContentLayoutItem* ToContentLayoutItem(CXFA_LayoutItem* pItem) { - return pItem ? pItem->AsContentLayoutItem() : nullptr; -} - -class CXFA_TraverseStrategy_LayoutItem { - public: - static inline CXFA_LayoutItem* GetFirstChild(CXFA_LayoutItem* pLayoutItem) { - return pLayoutItem->m_pFirstChild; - } - static inline CXFA_LayoutItem* GetNextSibling(CXFA_LayoutItem* pLayoutItem) { - return pLayoutItem->m_pNextSibling; - } - static inline CXFA_LayoutItem* GetParent(CXFA_LayoutItem* pLayoutItem) { - return pLayoutItem->m_pParent; - } -}; - -class IXFA_DocLayout { - public: - virtual ~IXFA_DocLayout() {} - virtual CXFA_Document* GetDocument() const = 0; - virtual int32_t StartLayout(FX_BOOL bForceRestart = FALSE) = 0; - virtual int32_t DoLayout(IFX_Pause* pPause = NULL) = 0; - virtual FX_BOOL IncrementLayout() = 0; - virtual int32_t CountPages() const = 0; - virtual IXFA_LayoutPage* GetPage(int32_t index) const = 0; - virtual CXFA_LayoutItem* GetLayoutItem(CXFA_Node* pFormItem) = 0; -}; - -#endif // XFA_SRC_FXFA_PARSER_XFA_DOCLAYOUT_H_ diff --git a/xfa/src/fxfa/parser/xfa_document.h b/xfa/src/fxfa/parser/xfa_document.h deleted file mode 100644 index d17c9883c9..0000000000 --- a/xfa/src/fxfa/parser/xfa_document.h +++ /dev/null @@ -1,201 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXFA_PARSER_XFA_DOCUMENT_H_ -#define XFA_SRC_FXFA_PARSER_XFA_DOCUMENT_H_ - -#include "xfa/include/fxfa/fxfa.h" -#include "xfa/src/fxfa/parser/xfa_localemgr.h" -#include "xfa/src/fxfa/parser/xfa_object.h" - -class CXFA_Document; -class CXFA_LayoutItem; -class CXFA_LayoutProcessor; -class CXFA_Node; -class IXFA_DocLayout; -class IXFA_DocParser; -class IXFA_LayoutPage; -class IXFA_Notify; -class IXFA_ObjFactory; -class IXFA_ScriptContext; - -enum XFA_VERSION { - XFA_VERSION_UNKNOWN = 0, - XFA_VERSION_200 = 200, - XFA_VERSION_202 = 202, - XFA_VERSION_204 = 204, - XFA_VERSION_205 = 205, - XFA_VERSION_206 = 206, - XFA_VERSION_207 = 207, - XFA_VERSION_208 = 208, - XFA_VERSION_300 = 300, - XFA_VERSION_301 = 301, - XFA_VERSION_303 = 303, - XFA_VERSION_306 = 306, - XFA_VERSION_DEFAULT = XFA_VERSION_303, - XFA_VERSION_MIN = 200, - XFA_VERSION_MAX = 400, -}; - -#define XFA_LAYOUTSTATUS_Visible 0x0001 -#define XFA_LAYOUTSTATUS_Viewable 0x0010 -#define XFA_LAYOUTSTATUS_Printable 0x0020 -enum XFA_NODEEVENT { - XFA_NODEEVENT_Ready, - XFA_NODEEVENT_ValueChanging, - XFA_NODEEVENT_ValueChanged, - XFA_NODEEVENT_ChildAdded, - XFA_NODEEVENT_ChildRemoved, -}; -enum XFA_PAGEEVENT { - XFA_PAGEEVENT_PageAdded, - XFA_PAGEEVENT_PageRemoved, -}; -enum XFA_LAYOUTEVENT { - XFA_LAYOUTEVENT_ItemAdded, - XFA_LAYOUTEVENT_ItemRemoving, - XFA_LAYOUTEVENT_RectChanged, - XFA_LAYOUTEVENT_StatusChanged, -}; -enum XFA_LAYOUTRESULT { - XFA_LAYOUTRESULT_Continue, - XFA_LAYOUTRESULT_Done, - XFA_LAYOUTRESULT_NextContent, -}; -#define XFA_LAYOUTNOTIFY_StrictHeight 0x0001 -#define XFA_LAYOUTNOTIFY_NoParentBreak 0x0002 - -class IXFA_Notify { - public: - virtual ~IXFA_Notify() {} - virtual void OnPageEvent(IXFA_LayoutPage* pSender, - XFA_PAGEEVENT eEvent, - void* pParam = NULL) = 0; - - virtual void OnNodeEvent(CXFA_Node* pSender, - XFA_NODEEVENT eEvent, - void* pParam = NULL, - void* pParam2 = NULL, - void* pParam3 = NULL, - void* pParam4 = NULL) = 0; - virtual void OnWidgetDataEvent(CXFA_WidgetData* pSender, - FX_DWORD dwEvent, - void* pParam = NULL, - void* pAdditional = NULL, - void* pAdditional2 = NULL) = 0; - - virtual CXFA_LayoutItem* OnCreateLayoutItem(CXFA_Node* pNode) = 0; - virtual void OnLayoutEvent(IXFA_DocLayout* pLayout, - CXFA_LayoutItem* pSender, - XFA_LAYOUTEVENT eEvent, - void* pParam = NULL, - void* pParam2 = NULL) = 0; - virtual void StartFieldDrawLayout(CXFA_Node* pItem, - FX_FLOAT& fCalcWidth, - FX_FLOAT& fCalcHeight) = 0; - virtual FX_BOOL FindSplitPos(CXFA_Node* pItem, - int32_t iBlockIndex, - FX_FLOAT& fCalcHeightPos) = 0; - virtual FX_BOOL RunScript(CXFA_Node* pScript, CXFA_Node* pFormItem) = 0; - virtual int32_t ExecEventByDeepFirst(CXFA_Node* pFormNode, - XFA_EVENTTYPE eEventType, - FX_BOOL bIsFormReady = FALSE, - FX_BOOL bRecursive = TRUE, - CXFA_WidgetAcc* pExclude = NULL) = 0; - virtual void AddCalcValidate(CXFA_Node* pNode) = 0; - virtual IXFA_Doc* GetHDOC() = 0; - virtual IXFA_DocProvider* GetDocProvider() = 0; - virtual IXFA_AppProvider* GetAppProvider() = 0; - virtual IXFA_WidgetHandler* GetWidgetHandler() = 0; - virtual IXFA_Widget* GetHWidget(CXFA_LayoutItem* pLayoutItem) = 0; - virtual void OpenDropDownList(IXFA_Widget* hWidget) = 0; - virtual CFX_WideString GetCurrentDateTime() = 0; - virtual void ResetData(CXFA_WidgetData* pWidgetData = NULL) = 0; - virtual int32_t GetLayoutStatus() = 0; - virtual void RunNodeInitialize(CXFA_Node* pNode) = 0; - virtual void RunSubformIndexChange(CXFA_Node* pSubformNode) = 0; - virtual CXFA_Node* GetFocusWidgetNode() = 0; - virtual void SetFocusWidgetNode(CXFA_Node* pNode) = 0; -}; -class IXFA_ObjFactory { - public: - virtual ~IXFA_ObjFactory() {} - virtual CXFA_Node* CreateNode(FX_DWORD dwPacket, XFA_ELEMENT eElement) = 0; - virtual CXFA_Node* CreateNode(const XFA_PACKETINFO* pPacket, - XFA_ELEMENT eElement) = 0; -}; -#define XFA_DOCFLAG_StrictScoping 0x0001 -#define XFA_DOCFLAG_HasInteractive 0x0002 -#define XFA_DOCFLAG_Interactive 0x0004 -#define XFA_DOCFLAG_Scripting 0x0008 -class CScript_DataWindow; -class CScript_EventPseudoModel; -class CScript_HostPseudoModel; -class CScript_LogPseudoModel; -class CScript_LayoutPseudoModel; -class CScript_SignaturePseudoModel; -class CXFA_Document : public IXFA_ObjFactory { - public: - CXFA_Document(IXFA_DocParser* pParser); - ~CXFA_Document(); - CXFA_Node* GetRoot() const { return m_pRootNode; } - IXFA_DocParser* GetParser() const { return m_pParser; } - IXFA_Notify* GetNotify() const; - void SetRoot(CXFA_Node* pNewRoot); - CXFA_Object* GetXFAObject(const CFX_WideStringC& wsNodeName); - CXFA_Object* GetXFAObject(FX_DWORD wsNodeNameHash); - void AddPurgeNode(CXFA_Node* pNode); - FX_BOOL RemovePurgeNode(CXFA_Node* pNode); - void PurgeNodes(); - bool HasFlag(FX_DWORD dwFlag) { return (m_dwDocFlags & dwFlag) == dwFlag; } - void SetFlag(FX_DWORD dwFlag, FX_BOOL bOn = TRUE); - FX_BOOL IsInteractive(); - XFA_VERSION GetCurVersionMode() { return m_eCurVersionMode; } - XFA_VERSION RecognizeXFAVersionNumber(CFX_WideString& wsTemplateNS); - CXFA_LocaleMgr* GetLocalMgr(); - virtual CXFA_Node* CreateNode(FX_DWORD dwPacket, XFA_ELEMENT eElement); - virtual CXFA_Node* CreateNode(const XFA_PACKETINFO* pPacket, - XFA_ELEMENT eElement); - void DoProtoMerge(); - CXFA_Node* GetNodeByID(CXFA_Node* pRoot, const CFX_WideStringC& wsID); - void DoDataMerge(); - void DoDataRemerge(FX_BOOL bDoDataMerge); - CXFA_Node* DataMerge_CopyContainer(CXFA_Node* pTemplateNode, - CXFA_Node* pFormNode, - CXFA_Node* pDataScope, - FX_BOOL bOneInstance = FALSE, - FX_BOOL bDataMerge = TRUE, - FX_BOOL bUpLevel = TRUE); - void DataMerge_UpdateBindingRelations(CXFA_Node* pFormUpdateRoot); - CXFA_Node* GetNotBindNode(CXFA_ObjArray& arrayNodes); - CXFA_LayoutProcessor* GetLayoutProcessor(); - IXFA_DocLayout* GetDocLayout(); - IXFA_ScriptContext* InitScriptContext(FXJSE_HRUNTIME hRuntime); - IXFA_ScriptContext* GetScriptContext(); - void ClearLayoutData(); - - CFX_MapPtrTemplate m_rgGlobalBinding; - CXFA_NodeArray m_pPendingPageSet; - - protected: - IXFA_DocParser* m_pParser; - IXFA_ScriptContext* m_pScriptContext; - CXFA_LayoutProcessor* m_pLayoutProcessor; - CXFA_Node* m_pRootNode; - CXFA_LocaleMgr* m_pLocalMgr; - CScript_DataWindow* m_pScriptDataWindow; - CScript_EventPseudoModel* m_pScriptEvent; - CScript_HostPseudoModel* m_pScriptHost; - CScript_LogPseudoModel* m_pScriptLog; - CScript_LayoutPseudoModel* m_pScriptLayout; - CScript_SignaturePseudoModel* m_pScriptSignature; - CXFA_NodeSet m_rgPurgeNodes; - XFA_VERSION m_eCurVersionMode; - FX_DWORD m_dwDocFlags; - friend class CXFA_SimpleParser; -}; - -#endif // XFA_SRC_FXFA_PARSER_XFA_DOCUMENT_H_ diff --git a/xfa/src/fxfa/parser/xfa_document_datadescription_imp.cpp b/xfa/src/fxfa/parser/xfa_document_datadescription_imp.cpp deleted file mode 100644 index 321fbbd466..0000000000 --- a/xfa/src/fxfa/parser/xfa_document_datadescription_imp.cpp +++ /dev/null @@ -1,126 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fxfa/fm2js/xfa_fm2jsapi.h" -#include "xfa/src/fxfa/parser/xfa_docdata.h" -#include "xfa/src/fxfa/parser/xfa_doclayout.h" -#include "xfa/src/fxfa/parser/xfa_document.h" -#include "xfa/src/fxfa/parser/xfa_localemgr.h" -#include "xfa/src/fxfa/parser/xfa_object.h" -#include "xfa/src/fxfa/parser/xfa_parser.h" -#include "xfa/src/fxfa/parser/xfa_script.h" -#include "xfa/src/fxfa/parser/xfa_utils.h" - -#define XFA_HASHCODE_Group 0xf7f75fcd - -class CXFA_TraverseStrategy_DDGroup { - public: - static inline CXFA_Node* GetFirstChild(CXFA_Node* pDDGroupNode) { - return pDDGroupNode->GetFirstChildByName(XFA_HASHCODE_Group); - } - static inline CXFA_Node* GetNextSibling(CXFA_Node* pDDGroupNode) { - return pDDGroupNode->GetNextSameNameSibling(XFA_HASHCODE_Group); - } - static inline CXFA_Node* GetParent(CXFA_Node* pDDGroupNode) { - return pDDGroupNode->GetNodeItem(XFA_NODEITEM_Parent); - } -}; -void XFA_DataDescription_UpdateDataRelation(CXFA_Node* pDataNode, - CXFA_Node* pDataDescriptionNode) { - FXSYS_assert(pDataDescriptionNode); - for (CXFA_Node* pDataChild = pDataNode->GetNodeItem(XFA_NODEITEM_FirstChild); - pDataChild; - pDataChild = pDataChild->GetNodeItem(XFA_NODEITEM_NextSibling)) { - FX_DWORD dwNameHash = pDataChild->GetNameHash(); - XFA_ELEMENT eType = pDataChild->GetClassID(); - if (!dwNameHash) { - continue; - } - CXFA_NodeIteratorTemplate - sIterator(pDataDescriptionNode); - for (CXFA_Node* pDDGroupNode = sIterator.GetCurrent(); pDDGroupNode; - pDDGroupNode = sIterator.MoveToNext()) { - if (pDDGroupNode != pDataDescriptionNode) { - if (pDDGroupNode->GetClassID() != XFA_ELEMENT_DataGroup) { - continue; - } - CFX_WideString wsNamespace; - if (!pDDGroupNode->TryNamespace(wsNamespace) || - wsNamespace != FX_WSTRC(L"http://ns.adobe.com/data-description/")) { - continue; - } - } - CXFA_Node* pDDNode = pDDGroupNode->GetFirstChildByName(dwNameHash); - if (!pDDNode) { - continue; - } - if (pDDNode->GetClassID() != eType) { - break; - } - pDataChild->SetDataDescriptionNode(pDDNode); - XFA_DataDescription_UpdateDataRelation(pDataChild, pDDNode); - break; - } - } -} -CXFA_Node* XFA_DataDescription_MaybeCreateDataNode( - CXFA_Document* pDocument, - CXFA_Node* pDataParent, - XFA_ELEMENT eNodeType, - const CFX_WideStringC& wsName) { - if (!pDataParent) { - return NULL; - } - CXFA_Node* pParentDDNode = pDataParent->GetDataDescriptionNode(); - if (!pParentDDNode) { - CXFA_Node* pDataNode = - pDocument->CreateNode(XFA_XDPPACKET_Datasets, eNodeType); - FXSYS_assert(pDataNode); - pDataNode->SetCData(XFA_ATTRIBUTE_Name, wsName); - pDataNode->CreateXMLMappingNode(); - pDataParent->InsertChild(pDataNode); - pDataNode->SetFlag(XFA_NODEFLAG_Initialized, TRUE, FALSE); - return pDataNode; - } else { - CXFA_NodeIteratorTemplate - sIterator(pParentDDNode); - for (CXFA_Node* pDDGroupNode = sIterator.GetCurrent(); pDDGroupNode; - pDDGroupNode = sIterator.MoveToNext()) { - if (pDDGroupNode != pParentDDNode) { - if (pDDGroupNode->GetClassID() != XFA_ELEMENT_DataGroup) { - continue; - } - CFX_WideString wsNamespace; - if (!pDDGroupNode->TryNamespace(wsNamespace) || - wsNamespace != FX_WSTRC(L"http://ns.adobe.com/data-description/")) { - continue; - } - } - CXFA_Node* pDDNode = pDDGroupNode->GetFirstChildByName(wsName); - if (!pDDNode) { - continue; - } - if (pDDNode->GetClassID() != eNodeType) { - break; - } - CXFA_Node* pDataNode = - pDocument->CreateNode(XFA_XDPPACKET_Datasets, eNodeType); - FXSYS_assert(pDataNode); - pDataNode->SetCData(XFA_ATTRIBUTE_Name, wsName); - pDataNode->CreateXMLMappingNode(); - if (eNodeType == XFA_ELEMENT_DataValue && - pDDNode->GetEnum(XFA_ATTRIBUTE_Contains) == - XFA_ATTRIBUTEENUM_MetaData) { - pDataNode->SetEnum(XFA_ATTRIBUTE_Contains, XFA_ATTRIBUTEENUM_MetaData); - } - pDataParent->InsertChild(pDataNode); - pDataNode->SetDataDescriptionNode(pDDNode); - pDataNode->SetFlag(XFA_NODEFLAG_Initialized, TRUE, FALSE); - return pDataNode; - } - return NULL; - } -} diff --git a/xfa/src/fxfa/parser/xfa_document_datadescription_imp.h b/xfa/src/fxfa/parser/xfa_document_datadescription_imp.h deleted file mode 100644 index bf0b1a45c7..0000000000 --- a/xfa/src/fxfa/parser/xfa_document_datadescription_imp.h +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXFA_PARSER_XFA_DOCUMENT_DATADESCRIPTION_IMP_H_ -#define XFA_SRC_FXFA_PARSER_XFA_DOCUMENT_DATADESCRIPTION_IMP_H_ - -void XFA_DataDescription_UpdateDataRelation(CXFA_Node* pDataNode, - CXFA_Node* pDataDescriptionNode); -CXFA_Node* XFA_DataDescription_MaybeCreateDataNode( - CXFA_Document* pDocument, - CXFA_Node* pDataParent, - XFA_ELEMENT eNodeType, - const CFX_WideStringC& wsName); - -#endif // XFA_SRC_FXFA_PARSER_XFA_DOCUMENT_DATADESCRIPTION_IMP_H_ diff --git a/xfa/src/fxfa/parser/xfa_document_datamerger_imp.cpp b/xfa/src/fxfa/parser/xfa_document_datamerger_imp.cpp deleted file mode 100644 index ecbbba7579..0000000000 --- a/xfa/src/fxfa/parser/xfa_document_datamerger_imp.cpp +++ /dev/null @@ -1,1429 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fxfa/parser/xfa_document_datamerger_imp.h" - -#include "core/include/fxcrt/fx_ext.h" -#include "xfa/src/fxfa/fm2js/xfa_fm2jsapi.h" -#include "xfa/src/fxfa/parser/xfa_basic_imp.h" -#include "xfa/src/fxfa/parser/xfa_docdata.h" -#include "xfa/src/fxfa/parser/xfa_doclayout.h" -#include "xfa/src/fxfa/parser/xfa_document.h" -#include "xfa/src/fxfa/parser/xfa_document_datadescription_imp.h" -#include "xfa/src/fxfa/parser/xfa_document_layout_imp.h" -#include "xfa/src/fxfa/parser/xfa_localemgr.h" -#include "xfa/src/fxfa/parser/xfa_object.h" -#include "xfa/src/fxfa/parser/xfa_parser.h" -#include "xfa/src/fxfa/parser/xfa_script.h" -#include "xfa/src/fxfa/parser/xfa_utils.h" - -static FX_BOOL XFA_GetOccurInfo(CXFA_Node* pOccurNode, - int32_t& iMin, - int32_t& iMax, - int32_t& iInit) { - if (!pOccurNode) { - return FALSE; - } - CXFA_Occur occur(pOccurNode); - return occur.GetOccurInfo(iMin, iMax, iInit); -} -struct XFA_DataMerge_RecurseRecord { - CXFA_Node* pTemplateChild; - CXFA_Node* pDataChild; -}; -static CXFA_Node* XFA_DataMerge_FormValueNode_CreateChild( - CXFA_Node* pValueNode, - XFA_ELEMENT iType = XFA_ELEMENT_UNKNOWN) { - CXFA_Node* pChildNode = pValueNode->GetNodeItem(XFA_NODEITEM_FirstChild); - if (!pChildNode) { - if (iType == XFA_ELEMENT_UNKNOWN) { - return FALSE; - } - pChildNode = pValueNode->GetProperty(0, iType); - } - return pChildNode; -} -static void XFA_DataMerge_FormValueNode_MatchNoneCreateChild( - CXFA_Node* pFormNode) { - CXFA_WidgetData* pWidgetData = pFormNode->GetWidgetData(); - FXSYS_assert(pWidgetData); - pWidgetData->GetUIType(); -} -static FX_BOOL XFA_DataMerge_FormValueNode_SetChildContent( - CXFA_Node* pValueNode, - const CFX_WideString& wsContent, - XFA_ELEMENT iType = XFA_ELEMENT_UNKNOWN) { - if (!pValueNode) { - return FALSE; - } - FXSYS_assert(pValueNode->GetPacketID() == XFA_XDPPACKET_Form); - CXFA_Node* pChildNode = - XFA_DataMerge_FormValueNode_CreateChild(pValueNode, iType); - if (!pChildNode) { - return FALSE; - } - XFA_OBJECTTYPE objectType = pChildNode->GetObjectType(); - switch (objectType) { - case XFA_OBJECTTYPE_ContentNode: { - CXFA_Node* pContentRawDataNode = - pChildNode->GetNodeItem(XFA_NODEITEM_FirstChild); - if (!pContentRawDataNode) { - XFA_ELEMENT element = XFA_ELEMENT_Sharptext; - if (pChildNode->GetClassID() == XFA_ELEMENT_ExData) { - CFX_WideString wsContentType; - pChildNode->GetAttribute(XFA_ATTRIBUTE_ContentType, wsContentType, - FALSE); - if (wsContentType.Equal(FX_WSTRC(L"text/html"))) { - element = XFA_ELEMENT_SharpxHTML; - } else if (wsContentType.Equal(FX_WSTRC(L"text/xml"))) { - element = XFA_ELEMENT_Sharpxml; - } - } - pContentRawDataNode = pChildNode->CreateSamePacketNode(element); - pChildNode->InsertChild(pContentRawDataNode); - } - pContentRawDataNode->SetCData(XFA_ATTRIBUTE_Value, wsContent); - } break; - case XFA_OBJECTTYPE_NodeC: - case XFA_OBJECTTYPE_TextNode: - case XFA_OBJECTTYPE_NodeV: { - pChildNode->SetCData(XFA_ATTRIBUTE_Value, wsContent); - } break; - default: - FXSYS_assert(FALSE); - break; - } - return TRUE; -} -static void XFA_DataMerge_CreateDataBinding(CXFA_Node* pFormNode, - CXFA_Node* pDataNode, - FX_BOOL bDataToForm = TRUE) { - pFormNode->SetObject(XFA_ATTRIBUTE_BindingNode, pDataNode); - pDataNode->AddBindItem(pFormNode); - XFA_ELEMENT eClass = pFormNode->GetClassID(); - if (eClass != XFA_ELEMENT_Field && eClass != XFA_ELEMENT_ExclGroup) { - return; - } - CXFA_WidgetData* pWidgetData = pFormNode->GetWidgetData(); - FXSYS_assert(pWidgetData); - FX_BOOL bNotify = FALSE; - XFA_ELEMENT eUIType = pWidgetData->GetUIType(); - CXFA_Value defValue(pFormNode->GetProperty(0, XFA_ELEMENT_Value)); - if (!bDataToForm) { - CFX_WideString wsValue; - CFX_WideString wsFormatedValue; - switch (eUIType) { - case XFA_ELEMENT_ImageEdit: { - CXFA_Image image = defValue.GetImage(); - CFX_WideString wsContentType; - CFX_WideString wsHref; - if (image) { - image.GetContent(wsValue); - image.GetContentType(wsContentType); - image.GetHref(wsHref); - } - IFDE_XMLElement* pXMLDataElement = - (IFDE_XMLElement*)(pDataNode->GetXMLMappingNode()); - FXSYS_assert(pXMLDataElement); - pWidgetData->GetFormatDataValue(wsValue, wsFormatedValue); - pDataNode->SetAttributeValue(wsValue, wsFormatedValue); - pDataNode->SetCData(XFA_ATTRIBUTE_ContentType, wsContentType); - if (!wsHref.IsEmpty()) { - pXMLDataElement->SetString(FX_WSTRC(L"href"), wsHref); - } - } break; - case XFA_ELEMENT_ChoiceList: - defValue.GetChildValueContent(wsValue); - if (pWidgetData->GetChoiceListOpen() == XFA_ATTRIBUTEENUM_MultiSelect) { - CFX_WideStringArray wsSelTextArray; - pWidgetData->GetSelectedItemsValue(wsSelTextArray); - int32_t iSize = wsSelTextArray.GetSize(); - if (iSize >= 1) { - CXFA_Node* pValue = NULL; - for (int32_t i = 0; i < iSize; i++) { - pValue = pDataNode->CreateSamePacketNode(XFA_ELEMENT_DataValue); - pValue->SetCData(XFA_ATTRIBUTE_Name, FX_WSTRC(L"value")); - pValue->CreateXMLMappingNode(); - pDataNode->InsertChild(pValue); - pValue->SetCData(XFA_ATTRIBUTE_Value, wsSelTextArray[i]); - } - } else { - IFDE_XMLNode* pXMLNode = pDataNode->GetXMLMappingNode(); - FXSYS_assert(pXMLNode->GetType() == FDE_XMLNODE_Element); - ((IFDE_XMLElement*)pXMLNode) - ->SetString(FX_WSTRC(L"xfa:dataNode"), FX_WSTRC(L"dataGroup")); - } - } else if (!wsValue.IsEmpty()) { - pWidgetData->GetFormatDataValue(wsValue, wsFormatedValue); - pDataNode->SetAttributeValue(wsValue, wsFormatedValue); - } - break; - case XFA_ELEMENT_CheckButton: - defValue.GetChildValueContent(wsValue); - if (wsValue.IsEmpty()) { - break; - } - pWidgetData->GetFormatDataValue(wsValue, wsFormatedValue); - pDataNode->SetAttributeValue(wsValue, wsFormatedValue); - break; - case XFA_ELEMENT_ExclGroup: { - CXFA_Node* pChecked = NULL; - CXFA_Node* pChild = pFormNode->GetNodeItem(XFA_NODEITEM_FirstChild); - for (; pChild; pChild = pChild->GetNodeItem(XFA_NODEITEM_NextSibling)) { - if (pChild->GetClassID() != XFA_ELEMENT_Field) { - continue; - } - CXFA_Node* pValue = pChild->GetChild(0, XFA_ELEMENT_Value); - if (!pValue) { - continue; - } - CXFA_Value valueChild(pValue); - valueChild.GetChildValueContent(wsValue); - if (wsValue.IsEmpty()) { - continue; - } - CXFA_Node* pItems = pChild->GetChild(0, XFA_ELEMENT_Items); - if (!pItems) { - continue; - } - CXFA_Node* pText = pItems->GetNodeItem(XFA_NODEITEM_FirstChild); - if (!pText) { - continue; - } - CFX_WideString wsContent; - if (pText->TryContent(wsContent) && (wsContent == wsValue)) { - pChecked = pChild; - wsFormatedValue = wsValue; - pDataNode->SetAttributeValue(wsValue, wsFormatedValue); - pFormNode->SetCData(XFA_ATTRIBUTE_Value, wsContent); - break; - } - } - if (!pChecked) { - break; - } - pChild = pFormNode->GetNodeItem(XFA_NODEITEM_FirstChild); - for (; pChild; pChild = pChild->GetNodeItem(XFA_NODEITEM_NextSibling)) { - if (pChild == pChecked) { - continue; - } - if (pChild->GetClassID() != XFA_ELEMENT_Field) { - continue; - } - CXFA_Node* pValue = pChild->GetProperty(0, XFA_ELEMENT_Value); - CXFA_Node* pItems = pChild->GetChild(0, XFA_ELEMENT_Items); - CXFA_Node* pText = - pItems ? pItems->GetNodeItem(XFA_NODEITEM_FirstChild) : NULL; - if (pText) { - pText = pText->GetNodeItem(XFA_NODEITEM_NextSibling); - } - CFX_WideString wsContent; - if (pText) { - pText->TryContent(wsContent); - } - XFA_DataMerge_FormValueNode_SetChildContent(pValue, wsContent, - XFA_ELEMENT_Text); - } - } break; - case XFA_ELEMENT_NumericEdit: { - defValue.GetChildValueContent(wsValue); - if (wsValue.IsEmpty()) { - break; - } - CFX_WideString wsOutput; - pWidgetData->NormalizeNumStr(wsValue, wsOutput); - wsValue = wsOutput; - pWidgetData->GetFormatDataValue(wsValue, wsFormatedValue); - pDataNode->SetAttributeValue(wsValue, wsFormatedValue); - CXFA_Node* pValue = pFormNode->GetProperty(0, XFA_ELEMENT_Value); - XFA_DataMerge_FormValueNode_SetChildContent(pValue, wsValue, - XFA_ELEMENT_Float); - } break; - default: - defValue.GetChildValueContent(wsValue); - if (wsValue.IsEmpty()) { - break; - } - pWidgetData->GetFormatDataValue(wsValue, wsFormatedValue); - pDataNode->SetAttributeValue(wsValue, wsFormatedValue); - break; - } - } else { - CFX_WideString wsXMLValue; - pDataNode->TryContent(wsXMLValue); - CFX_WideString wsNormailizeValue; - pWidgetData->GetNormalizeDataValue(wsXMLValue, wsNormailizeValue); - pDataNode->SetAttributeValue(wsNormailizeValue, wsXMLValue); - switch (eUIType) { - case XFA_ELEMENT_ImageEdit: { - XFA_DataMerge_FormValueNode_SetChildContent( - defValue.GetNode(), wsNormailizeValue, XFA_ELEMENT_Image); - CXFA_Image image = defValue.GetImage(); - if (image) { - IFDE_XMLElement* pXMLDataElement = - (IFDE_XMLElement*)(pDataNode->GetXMLMappingNode()); - FXSYS_assert(pXMLDataElement); - CFX_WideString wsContentType; - CFX_WideString wsHref; - pXMLDataElement->GetString(L"xfa:contentType", wsContentType); - if (!wsContentType.IsEmpty()) { - pDataNode->SetCData(XFA_ATTRIBUTE_ContentType, wsContentType); - image.SetContentType(wsContentType); - } - pXMLDataElement->GetString(L"href", wsHref); - if (!wsHref.IsEmpty()) { - image.SetHref(wsHref); - } - } - } break; - case XFA_ELEMENT_ChoiceList: - if (pWidgetData->GetChoiceListOpen() == XFA_ATTRIBUTEENUM_MultiSelect) { - CXFA_NodeArray items; - pDataNode->GetNodeList(items); - int32_t iCounts = items.GetSize(); - if (iCounts > 0) { - wsNormailizeValue.Empty(); - CFX_WideString wsItem; - for (int32_t i = 0; i < iCounts; i++) { - items[i]->TryContent(wsItem); - wsItem = (iCounts == 1) ? wsItem : wsItem + FX_WSTRC(L"\n"); - wsNormailizeValue += wsItem; - } - CXFA_ExData exData = defValue.GetExData(); - FXSYS_assert(exData); - exData.SetContentType((iCounts == 1) ? FX_WSTRC(L"text/plain") - : FX_WSTRC(L"text/xml")); - } - XFA_DataMerge_FormValueNode_SetChildContent( - defValue.GetNode(), wsNormailizeValue, XFA_ELEMENT_ExData); - } else { - XFA_DataMerge_FormValueNode_SetChildContent( - defValue.GetNode(), wsNormailizeValue, XFA_ELEMENT_Text); - } - break; - case XFA_ELEMENT_CheckButton: - XFA_DataMerge_FormValueNode_SetChildContent( - defValue.GetNode(), wsNormailizeValue, XFA_ELEMENT_Text); - break; - case XFA_ELEMENT_ExclGroup: { - pWidgetData->SetSelectedMemberByValue(wsNormailizeValue, bNotify, FALSE, - FALSE); - } break; - case XFA_ELEMENT_DateTimeEdit: - XFA_DataMerge_FormValueNode_SetChildContent( - defValue.GetNode(), wsNormailizeValue, XFA_ELEMENT_DateTime); - break; - case XFA_ELEMENT_NumericEdit: { - CFX_WideString wsPicture; - pWidgetData->GetPictureContent(wsPicture, XFA_VALUEPICTURE_DataBind); - if (wsPicture.IsEmpty()) { - CFX_WideString wsOutput; - pWidgetData->NormalizeNumStr(wsNormailizeValue, wsOutput); - wsNormailizeValue = wsOutput; - } - XFA_DataMerge_FormValueNode_SetChildContent( - defValue.GetNode(), wsNormailizeValue, XFA_ELEMENT_Float); - } break; - case XFA_ELEMENT_Barcode: - case XFA_ELEMENT_Button: - case XFA_ELEMENT_PasswordEdit: - case XFA_ELEMENT_Signature: - case XFA_ELEMENT_TextEdit: - default: - XFA_DataMerge_FormValueNode_SetChildContent( - defValue.GetNode(), wsNormailizeValue, XFA_ELEMENT_Text); - break; - } - } -} -static CXFA_Node* XFA_DataMerge_GetGlobalBinding(CXFA_Document* pDocument, - FX_DWORD dwNameHash) { - CXFA_Node* pNode = NULL; - pDocument->m_rgGlobalBinding.Lookup(dwNameHash, pNode); - return pNode; -} -static void XFA_DataMerge_RegisterGlobalBinding(CXFA_Document* pDocument, - FX_DWORD dwNameHash, - CXFA_Node* pDataNode) { - pDocument->m_rgGlobalBinding.SetAt(dwNameHash, pDataNode); -} -static void XFA_DataMerge_ClearGlobalBinding(CXFA_Document* pDocument) { - pDocument->m_rgGlobalBinding.RemoveAll(); -} -static CXFA_Node* XFA_DataMerge_ScopeMatchGlobalBinding( - CXFA_Node* pDataScope, - FX_DWORD dwNameHash, - XFA_ELEMENT eMatchDataNodeType, - FX_BOOL bUpLevel = TRUE) { - for (CXFA_Node *pCurDataScope = pDataScope, *pLastDataScope = NULL; - pCurDataScope && pCurDataScope->GetPacketID() == XFA_XDPPACKET_Datasets; - pLastDataScope = pCurDataScope, - pCurDataScope = - pCurDataScope->GetNodeItem(XFA_NODEITEM_Parent)) { - for (CXFA_Node* pDataChild = pCurDataScope->GetFirstChildByName(dwNameHash); - pDataChild; - pDataChild = pDataChild->GetNextSameNameSibling(dwNameHash)) { - if (pDataChild == pLastDataScope || - (eMatchDataNodeType != XFA_ELEMENT_DataModel && - pDataChild->GetClassID() != eMatchDataNodeType) || - pDataChild->HasBindItem()) { - continue; - } - return pDataChild; - } - for (CXFA_Node* pDataChild = - pCurDataScope->GetFirstChildByClass(XFA_ELEMENT_DataGroup); - pDataChild; pDataChild = pDataChild->GetNextSameClassSibling( - XFA_ELEMENT_DataGroup)) { - CXFA_Node* pDataNode = XFA_DataMerge_ScopeMatchGlobalBinding( - pDataChild, dwNameHash, eMatchDataNodeType, FALSE); - if (pDataNode) { - return pDataNode; - } - } - if (!bUpLevel) { - break; - } - } - return NULL; -} -static CXFA_Node* XFA_DataMerge_FindGlobalDataNode(CXFA_Document* pDocument, - CFX_WideStringC wsName, - CXFA_Node* pDataScope, - XFA_ELEMENT eMatchNodeType) { - FX_DWORD dwNameHash = - wsName.IsEmpty() ? 0 : FX_HashCode_String_GetW(wsName.GetPtr(), - wsName.GetLength()); - if (dwNameHash != 0) { - CXFA_Node* pBounded = XFA_DataMerge_GetGlobalBinding(pDocument, dwNameHash); - if (!pBounded) { - pBounded = XFA_DataMerge_ScopeMatchGlobalBinding(pDataScope, dwNameHash, - eMatchNodeType); - if (pBounded) { - XFA_DataMerge_RegisterGlobalBinding(pDocument, dwNameHash, pBounded); - } - } - return pBounded; - } - return NULL; -} -static CXFA_Node* XFA_DataMerge_FindOnceDataNode(CXFA_Document* pDocument, - CFX_WideStringC wsName, - CXFA_Node* pDataScope, - XFA_ELEMENT eMatchNodeType) { - FX_DWORD dwNameHash = - wsName.IsEmpty() ? 0 : FX_HashCode_String_GetW(wsName.GetPtr(), - wsName.GetLength()); - if (dwNameHash != 0) { - for (CXFA_Node *pCurDataScope = pDataScope, *pLastDataScope = NULL; - pCurDataScope && - pCurDataScope->GetPacketID() == XFA_XDPPACKET_Datasets; - pLastDataScope = pCurDataScope, - pCurDataScope = - pCurDataScope->GetNodeItem(XFA_NODEITEM_Parent)) { - for (CXFA_Node* pDataChild = - pCurDataScope->GetFirstChildByName(dwNameHash); - pDataChild; - pDataChild = pDataChild->GetNextSameNameSibling(dwNameHash)) { - if (pDataChild == pLastDataScope || - (eMatchNodeType != XFA_ELEMENT_DataModel && - pDataChild->GetClassID() != eMatchNodeType) || - pDataChild->HasBindItem()) { - continue; - } - return pDataChild; - } - } - } - return NULL; -} -static CXFA_Node* XFA_DataMerge_FindDataRefDataNode(CXFA_Document* pDocument, - CFX_WideStringC wsRef, - CXFA_Node* pDataScope, - XFA_ELEMENT eMatchNodeType, - CXFA_Node* pTemplateNode, - FX_BOOL bForceBind, - FX_BOOL bUpLevel = TRUE) { - FX_DWORD dFlags = XFA_RESOLVENODE_Children | XFA_RESOLVENODE_BindNew; - if (bUpLevel || wsRef != FX_WSTRC(L"name")) { - dFlags |= (XFA_RESOLVENODE_Parent | XFA_RESOLVENODE_Siblings); - } - XFA_RESOLVENODE_RS rs; - pDocument->GetScriptContext()->ResolveObjects(pDataScope, wsRef, rs, dFlags, - pTemplateNode); - if (rs.dwFlags == XFA_RESOLVENODE_RSTYPE_CreateNodeAll || - rs.dwFlags == XFA_RESOLVENODE_RSTYPE_CreateNodeMidAll || - rs.nodes.GetSize() > 1) { - return pDocument->GetNotBindNode(rs.nodes); - } - if (rs.dwFlags == XFA_RESOLVENODE_RSTYPE_CreateNodeOne) { - CXFA_Object* pObject = (rs.nodes.GetSize() > 0) ? rs.nodes[0] : NULL; - CXFA_Node* pNode = ToNode(pObject); - if (!bForceBind && pNode && pNode->HasBindItem()) { - pNode = NULL; - } - return pNode; - } - return NULL; -} -CXFA_Node* XFA_DataMerge_FindFormDOMInstance(CXFA_Document* pDocument, - XFA_ELEMENT eClassID, - FX_DWORD dwNameHash, - CXFA_Node* pFormParent) { - CXFA_Node* pFormChild = pFormParent->GetNodeItem(XFA_NODEITEM_FirstChild); - for (; pFormChild; - pFormChild = pFormChild->GetNodeItem(XFA_NODEITEM_NextSibling)) { - if (pFormChild->GetClassID() == eClassID && - pFormChild->GetNameHash() == dwNameHash && - pFormChild->HasFlag(XFA_NODEFLAG_UnusedNode)) { - return pFormChild; - } - } - return NULL; -} -static FX_BOOL XFA_NeedGenerateForm(CXFA_Node* pTemplateChild, - FX_BOOL bUseInstanceManager = TRUE) { - XFA_ELEMENT eType = pTemplateChild->GetClassID(); - if (eType == XFA_ELEMENT_Variables) { - return TRUE; - } - if (pTemplateChild->GetObjectType() == XFA_OBJECTTYPE_ContainerNode) { - return FALSE; - } - if (eType == XFA_ELEMENT_Proto || - (bUseInstanceManager && eType == XFA_ELEMENT_Occur)) { - return FALSE; - } - return TRUE; -} -CXFA_Node* XFA_NodeMerge_CloneOrMergeContainer(CXFA_Document* pDocument, - CXFA_Node* pFormParent, - CXFA_Node* pTemplateNode, - FX_BOOL bRecursive, - CXFA_NodeArray* pSubformArray) { - CXFA_Node* pExistingNode = NULL; - if (pSubformArray == NULL) { - pExistingNode = XFA_DataMerge_FindFormDOMInstance( - pDocument, pTemplateNode->GetClassID(), pTemplateNode->GetNameHash(), - pFormParent); - } else if (pSubformArray->GetSize() > 0) { - pExistingNode = pSubformArray->GetAt(0); - pSubformArray->RemoveAt(0); - } - if (pExistingNode) { - if (pSubformArray) { - pFormParent->InsertChild(pExistingNode); - } else if (pExistingNode->IsContainerNode()) { - pFormParent->RemoveChild(pExistingNode); - pFormParent->InsertChild(pExistingNode); - } - pExistingNode->SetFlag(XFA_NODEFLAG_UnusedNode, FALSE); - pExistingNode->SetTemplateNode(pTemplateNode); - if (bRecursive && pExistingNode->GetClassID() != XFA_ELEMENT_Items) { - for (CXFA_Node* pTemplateChild = - pTemplateNode->GetNodeItem(XFA_NODEITEM_FirstChild); - pTemplateChild; pTemplateChild = pTemplateChild->GetNodeItem( - XFA_NODEITEM_NextSibling)) { - if (XFA_NeedGenerateForm(pTemplateChild)) { - XFA_NodeMerge_CloneOrMergeContainer(pDocument, pExistingNode, - pTemplateChild, bRecursive); - } - } - } - pExistingNode->SetFlag(XFA_NODEFLAG_Initialized); - return pExistingNode; - } - CXFA_Node* pNewNode = pTemplateNode->CloneTemplateToForm(FALSE); - pFormParent->InsertChild(pNewNode, NULL); - if (bRecursive) { - for (CXFA_Node* pTemplateChild = - pTemplateNode->GetNodeItem(XFA_NODEITEM_FirstChild); - pTemplateChild; pTemplateChild = pTemplateChild->GetNodeItem( - XFA_NODEITEM_NextSibling)) { - if (XFA_NeedGenerateForm(pTemplateChild)) { - CXFA_Node* pNewChild = pTemplateChild->CloneTemplateToForm(TRUE); - pNewNode->InsertChild(pNewChild, NULL); - } - } - } - return pNewNode; -} -static CXFA_Node* XFA_NodeMerge_CloneOrMergeInstanceManager( - CXFA_Document* pDocument, - CXFA_Node* pFormParent, - CXFA_Node* pTemplateNode, - CXFA_NodeArray& subforms) { - CFX_WideStringC wsSubformName = pTemplateNode->GetCData(XFA_ATTRIBUTE_Name); - CFX_WideString wsInstMgrNodeName = FX_WSTRC(L"_") + wsSubformName; - FX_DWORD dwInstNameHash = - FX_HashCode_String_GetW(wsInstMgrNodeName, wsInstMgrNodeName.GetLength()); - CXFA_Node* pExistingNode = XFA_DataMerge_FindFormDOMInstance( - pDocument, XFA_ELEMENT_InstanceManager, dwInstNameHash, pFormParent); - if (pExistingNode) { - FX_DWORD dwNameHash = pTemplateNode->GetNameHash(); - for (CXFA_Node* pNode = - pExistingNode->GetNodeItem(XFA_NODEITEM_NextSibling); - pNode;) { - XFA_ELEMENT eCurType = pNode->GetClassID(); - if (eCurType == XFA_ELEMENT_InstanceManager) { - break; - } - if ((eCurType != XFA_ELEMENT_Subform) && - (eCurType != XFA_ELEMENT_SubformSet)) { - pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling); - continue; - } - if (dwNameHash != pNode->GetNameHash()) { - break; - } - CXFA_Node* pNextNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling); - pFormParent->RemoveChild(pNode); - subforms.Add(pNode); - pNode = pNextNode; - } - pFormParent->RemoveChild(pExistingNode); - pFormParent->InsertChild(pExistingNode); - pExistingNode->SetFlag(XFA_NODEFLAG_UnusedNode, FALSE); - pExistingNode->SetTemplateNode(pTemplateNode); - return pExistingNode; - } - CXFA_Node* pNewNode = pDocument->GetParser()->GetFactory()->CreateNode( - XFA_XDPPACKET_Form, XFA_ELEMENT_InstanceManager); - FXSYS_assert(pNewNode); - wsInstMgrNodeName = - FX_WSTRC(L"_") + pTemplateNode->GetCData(XFA_ATTRIBUTE_Name); - pNewNode->SetCData(XFA_ATTRIBUTE_Name, wsInstMgrNodeName); - pFormParent->InsertChild(pNewNode, NULL); - pNewNode->SetTemplateNode(pTemplateNode); - return pNewNode; -} -static CXFA_Node* XFA_DataMerge_FindMatchingDataNode( - CXFA_Document* pDocument, - CXFA_Node* pTemplateNode, - CXFA_Node* pDataScope, - FX_BOOL& bAccessedDataDOM, - FX_BOOL bForceBind, - CXFA_NodeIteratorTemplate* - pIterator, - FX_BOOL& bSelfMatch, - XFA_ATTRIBUTEENUM& eBindMatch, - FX_BOOL bUpLevel = TRUE) { - FX_BOOL bOwnIterator = FALSE; - if (!pIterator) { - bOwnIterator = TRUE; - pIterator = new CXFA_NodeIteratorTemplate< - CXFA_Node, CXFA_TraverseStrategy_XFAContainerNode>(pTemplateNode); - } - CXFA_Node* pResult = NULL; - for (CXFA_Node* pCurTemplateNode = pIterator->GetCurrent(); - pCurTemplateNode;) { - XFA_ELEMENT eMatchNodeType; - switch (pCurTemplateNode->GetClassID()) { - case XFA_ELEMENT_Subform: - eMatchNodeType = XFA_ELEMENT_DataGroup; - break; - case XFA_ELEMENT_Field: { - eMatchNodeType = XFA_FieldIsMultiListBox(pCurTemplateNode) - ? XFA_ELEMENT_DataGroup - : XFA_ELEMENT_DataValue; - } break; - case XFA_ELEMENT_ExclGroup: - eMatchNodeType = XFA_ELEMENT_DataValue; - break; - default: - pCurTemplateNode = pIterator->MoveToNext(); - continue; - } - CXFA_Node* pTemplateNodeOccur = - pCurTemplateNode->GetFirstChildByClass(XFA_ELEMENT_Occur); - int32_t iMin, iMax, iInit; - if (pTemplateNodeOccur && - XFA_GetOccurInfo(pTemplateNodeOccur, iMin, iMax, iInit) && iMax == 0) { - pCurTemplateNode = pIterator->MoveToNext(); - continue; - } - CXFA_Node* pTemplateNodeBind = - pCurTemplateNode->GetFirstChildByClass(XFA_ELEMENT_Bind); - XFA_ATTRIBUTEENUM eMatch = - pTemplateNodeBind ? pTemplateNodeBind->GetEnum(XFA_ATTRIBUTE_Match) - : XFA_ATTRIBUTEENUM_Once; - eBindMatch = eMatch; - switch (eMatch) { - case XFA_ATTRIBUTEENUM_None: - pCurTemplateNode = pIterator->MoveToNext(); - continue; - case XFA_ATTRIBUTEENUM_Global: - bAccessedDataDOM = TRUE; - if (!bForceBind) { - pCurTemplateNode = pIterator->MoveToNext(); - continue; - } - if (eMatchNodeType == XFA_ELEMENT_DataValue || - (eMatchNodeType == XFA_ELEMENT_DataGroup && - XFA_FieldIsMultiListBox(pTemplateNodeBind))) { - CXFA_Node* pGlobalBindNode = XFA_DataMerge_FindGlobalDataNode( - pDocument, pCurTemplateNode->GetCData(XFA_ATTRIBUTE_Name), - pDataScope, eMatchNodeType); - if (!pGlobalBindNode) { - pCurTemplateNode = pIterator->MoveToNext(); - continue; - } - pResult = pGlobalBindNode; - break; - } - case XFA_ATTRIBUTEENUM_Once: { - bAccessedDataDOM = TRUE; - CXFA_Node* pOnceBindNode = XFA_DataMerge_FindOnceDataNode( - pDocument, pCurTemplateNode->GetCData(XFA_ATTRIBUTE_Name), - pDataScope, eMatchNodeType); - if (!pOnceBindNode) { - pCurTemplateNode = pIterator->MoveToNext(); - continue; - } - pResult = pOnceBindNode; - } break; - case XFA_ATTRIBUTEENUM_DataRef: { - bAccessedDataDOM = TRUE; - CXFA_Node* pDataRefBindNode = XFA_DataMerge_FindDataRefDataNode( - pDocument, pTemplateNodeBind->GetCData(XFA_ATTRIBUTE_Ref), - pDataScope, eMatchNodeType, pTemplateNode, bForceBind, bUpLevel); - if (pDataRefBindNode && - pDataRefBindNode->GetClassID() == eMatchNodeType) { - pResult = pDataRefBindNode; - } - if (!pResult) { - pCurTemplateNode = pIterator->SkipChildrenAndMoveToNext(); - continue; - } - } break; - default: - break; - } - if (pCurTemplateNode == pTemplateNode && pResult) { - bSelfMatch = TRUE; - } - break; - } - if (bOwnIterator) { - delete pIterator; - } - return pResult; -} -static void XFA_DataMerge_SortRecurseRecord( - CFX_ArrayTemplate& rgRecords, - CXFA_Node* pDataScope, - FX_BOOL bChoiceMode = FALSE) { - int32_t iCount = rgRecords.GetSize(); - CFX_ArrayTemplate rgResultRecord; - for (CXFA_Node* pChildNode = pDataScope->GetNodeItem(XFA_NODEITEM_FirstChild); - pChildNode; - pChildNode = pChildNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { - for (int32_t i = 0; i < iCount; i++) { - CXFA_Node* pNode = rgRecords[i].pDataChild; - if (pChildNode == pNode) { - XFA_DataMerge_RecurseRecord sNewRecord = {rgRecords[i].pTemplateChild, - pNode}; - rgResultRecord.Add(sNewRecord); - rgRecords.RemoveAt(i); - iCount--; - break; - } - } - if (bChoiceMode && rgResultRecord.GetSize() > 0) { - break; - } - } - if (rgResultRecord.GetSize() > 0) { - if (!bChoiceMode) { - for (int32_t i = 0; i < iCount; i++) { - XFA_DataMerge_RecurseRecord sNewRecord = {rgRecords[i].pTemplateChild, - rgRecords[i].pDataChild}; - rgResultRecord.Add(sNewRecord); - } - } - rgRecords.RemoveAll(); - rgRecords.Copy(rgResultRecord); - } -} -static CXFA_Node* XFA_DataMerge_CopyContainer_SubformSet( - CXFA_Document* pDocument, - CXFA_Node* pTemplateNode, - CXFA_Node* pFormParentNode, - CXFA_Node* pDataScope, - FX_BOOL bOneInstance, - FX_BOOL bDataMerge) { - XFA_ELEMENT eElement = pTemplateNode->GetClassID(); - CXFA_Node* pOccurNode = NULL; - CXFA_Node* pFirstInstance = NULL; - FX_BOOL bUseInstanceManager = - pFormParentNode->GetClassID() != XFA_ELEMENT_Area; - CXFA_Node* pInstMgrNode = NULL; - CXFA_NodeArray subformArray; - CXFA_NodeArray* pSearchArray = NULL; - if (!bOneInstance && - (eElement == XFA_ELEMENT_SubformSet || eElement == XFA_ELEMENT_Subform)) { - pInstMgrNode = - bUseInstanceManager - ? XFA_NodeMerge_CloneOrMergeInstanceManager( - pDocument, pFormParentNode, pTemplateNode, subformArray) - : NULL; - if (CXFA_Node* pOccurTemplateNode = - pTemplateNode->GetFirstChildByClass(XFA_ELEMENT_Occur)) { - pOccurNode = pInstMgrNode - ? XFA_NodeMerge_CloneOrMergeContainer( - pDocument, pInstMgrNode, pOccurTemplateNode, FALSE) - : pOccurTemplateNode; - } else if (pInstMgrNode) { - pOccurNode = pInstMgrNode->GetFirstChildByClass(XFA_ELEMENT_Occur); - if (pOccurNode) { - pOccurNode->SetFlag(XFA_NODEFLAG_UnusedNode, FALSE); - } - } - if (pInstMgrNode) { - pInstMgrNode->SetFlag(XFA_NODEFLAG_Initialized); - pSearchArray = &subformArray; - if (pFormParentNode->GetClassID() == XFA_ELEMENT_PageArea) { - bOneInstance = TRUE; - if (subformArray.GetSize() < 1) { - pSearchArray = NULL; - } - } else if ((pTemplateNode->GetNameHash() == 0) && - (subformArray.GetSize() < 1)) { - pSearchArray = NULL; - } - } - } - int32_t iMax = 1, iInit = 1, iMin = 1; - if (!bOneInstance) { - XFA_GetOccurInfo(pOccurNode, iMin, iMax, iInit); - } - XFA_ATTRIBUTEENUM eRelation = - eElement == XFA_ELEMENT_SubformSet - ? pTemplateNode->GetEnum(XFA_ATTRIBUTE_Relation) - : XFA_ATTRIBUTEENUM_Ordered; - int32_t iCurRepeatIndex = 0; - XFA_ATTRIBUTEENUM eParentBindMatch = XFA_ATTRIBUTEENUM_None; - if (bDataMerge) { - CXFA_NodeIteratorTemplate - sNodeIterator(pTemplateNode); - FX_BOOL bAccessedDataDOM = FALSE; - if (eElement == XFA_ELEMENT_SubformSet || eElement == XFA_ELEMENT_Area) { - sNodeIterator.MoveToNext(); - } else { - CFX_MapPtrTemplate subformMapArray; - CXFA_NodeArray subformArray; - for (; iMax < 0 || iCurRepeatIndex < iMax; iCurRepeatIndex++) { - FX_BOOL bSelfMatch = FALSE; - XFA_ATTRIBUTEENUM eBindMatch = XFA_ATTRIBUTEENUM_None; - CXFA_Node* pDataNode = XFA_DataMerge_FindMatchingDataNode( - pDocument, pTemplateNode, pDataScope, bAccessedDataDOM, FALSE, - &sNodeIterator, bSelfMatch, eBindMatch); - if (!pDataNode || sNodeIterator.GetCurrent() != pTemplateNode) { - break; - } - eParentBindMatch = eBindMatch; - CXFA_Node* pSubformNode = XFA_NodeMerge_CloneOrMergeContainer( - pDocument, pFormParentNode, pTemplateNode, FALSE, pSearchArray); - if (!pFirstInstance) { - pFirstInstance = pSubformNode; - } - XFA_DataMerge_CreateDataBinding(pSubformNode, pDataNode); - FXSYS_assert(pSubformNode); - subformMapArray.SetAt(pSubformNode, pDataNode); - subformArray.Add(pSubformNode); - } - subformMapArray.GetStartPosition(); - for (int32_t iIndex = 0; iIndex < subformArray.GetSize(); iIndex++) { - CXFA_Node* pSubform = subformArray[iIndex]; - CXFA_Node* pDataNode = - reinterpret_cast(subformMapArray.GetValueAt(pSubform)); - for (CXFA_Node* pTemplateChild = - pTemplateNode->GetNodeItem(XFA_NODEITEM_FirstChild); - pTemplateChild; pTemplateChild = pTemplateChild->GetNodeItem( - XFA_NODEITEM_NextSibling)) { - if (XFA_NeedGenerateForm(pTemplateChild, bUseInstanceManager)) { - XFA_NodeMerge_CloneOrMergeContainer(pDocument, pSubform, - pTemplateChild, TRUE); - } else if (pTemplateChild->GetObjectType() == - XFA_OBJECTTYPE_ContainerNode) { - pDocument->DataMerge_CopyContainer(pTemplateChild, pSubform, - pDataNode, FALSE, TRUE, FALSE); - } - } - } - subformMapArray.RemoveAll(); - } - for (; iMax < 0 || iCurRepeatIndex < iMax; iCurRepeatIndex++) { - FX_BOOL bSelfMatch = FALSE; - XFA_ATTRIBUTEENUM eBindMatch = XFA_ATTRIBUTEENUM_None; - if (!XFA_DataMerge_FindMatchingDataNode( - pDocument, pTemplateNode, pDataScope, bAccessedDataDOM, FALSE, - &sNodeIterator, bSelfMatch, eBindMatch)) { - break; - } - if (eBindMatch == XFA_ATTRIBUTEENUM_DataRef && - eParentBindMatch == XFA_ATTRIBUTEENUM_DataRef) { - break; - } - if (eRelation == XFA_ATTRIBUTEENUM_Choice || - eRelation == XFA_ATTRIBUTEENUM_Unordered) { - CXFA_Node* pSubformSetNode = XFA_NodeMerge_CloneOrMergeContainer( - pDocument, pFormParentNode, pTemplateNode, FALSE, pSearchArray); - FXSYS_assert(pSubformSetNode); - if (!pFirstInstance) { - pFirstInstance = pSubformSetNode; - } - CFX_ArrayTemplate rgItemMatchList; - CFX_ArrayTemplate rgItemUnmatchList; - for (CXFA_Node* pTemplateChild = - pTemplateNode->GetNodeItem(XFA_NODEITEM_FirstChild); - pTemplateChild; pTemplateChild = pTemplateChild->GetNodeItem( - XFA_NODEITEM_NextSibling)) { - if (XFA_NeedGenerateForm(pTemplateChild, bUseInstanceManager)) { - XFA_NodeMerge_CloneOrMergeContainer(pDocument, pSubformSetNode, - pTemplateChild, TRUE); - } else if (pTemplateChild->GetObjectType() == - XFA_OBJECTTYPE_ContainerNode) { - CXFA_Node* pDataMatch; - bSelfMatch = FALSE; - eBindMatch = XFA_ATTRIBUTEENUM_None; - if (eRelation != XFA_ATTRIBUTEENUM_Ordered && - (pDataMatch = XFA_DataMerge_FindMatchingDataNode( - pDocument, pTemplateChild, pDataScope, bAccessedDataDOM, - FALSE, NULL, bSelfMatch, eBindMatch))) { - XFA_DataMerge_RecurseRecord sNewRecord = {pTemplateChild, - pDataMatch}; - if (bSelfMatch) { - rgItemMatchList.InsertAt(0, sNewRecord); - } else { - rgItemMatchList.Add(sNewRecord); - } - } else { - rgItemUnmatchList.Add(pTemplateChild); - } - } - } - switch (eRelation) { - case XFA_ATTRIBUTEENUM_Choice: { - FXSYS_assert(rgItemMatchList.GetSize()); - XFA_DataMerge_SortRecurseRecord(rgItemMatchList, pDataScope, TRUE); - pDocument->DataMerge_CopyContainer( - rgItemMatchList[0].pTemplateChild, pSubformSetNode, pDataScope); - } break; - case XFA_ATTRIBUTEENUM_Unordered: { - if (rgItemMatchList.GetSize()) { - XFA_DataMerge_SortRecurseRecord(rgItemMatchList, pDataScope); - for (int32_t i = 0, count = rgItemMatchList.GetSize(); i < count; - i++) { - pDocument->DataMerge_CopyContainer( - rgItemMatchList[i].pTemplateChild, pSubformSetNode, - pDataScope); - } - } - for (int32_t i = 0, count = rgItemUnmatchList.GetSize(); i < count; - i++) { - pDocument->DataMerge_CopyContainer(rgItemUnmatchList[i], - pSubformSetNode, pDataScope); - } - } break; - default: - break; - } - } else { - CXFA_Node* pSubformSetNode = XFA_NodeMerge_CloneOrMergeContainer( - pDocument, pFormParentNode, pTemplateNode, FALSE, pSearchArray); - FXSYS_assert(pSubformSetNode); - if (!pFirstInstance) { - pFirstInstance = pSubformSetNode; - } - for (CXFA_Node* pTemplateChild = - pTemplateNode->GetNodeItem(XFA_NODEITEM_FirstChild); - pTemplateChild; pTemplateChild = pTemplateChild->GetNodeItem( - XFA_NODEITEM_NextSibling)) { - if (XFA_NeedGenerateForm(pTemplateChild, bUseInstanceManager)) { - XFA_NodeMerge_CloneOrMergeContainer(pDocument, pSubformSetNode, - pTemplateChild, TRUE); - } else if (pTemplateChild->GetObjectType() == - XFA_OBJECTTYPE_ContainerNode) { - pDocument->DataMerge_CopyContainer(pTemplateChild, pSubformSetNode, - pDataScope); - } - } - } - } - if (iCurRepeatIndex == 0 && bAccessedDataDOM == FALSE) { - int32_t iLimit = iMax; - if (pInstMgrNode && pTemplateNode->GetNameHash() == 0) { - iLimit = subformArray.GetSize(); - if (iLimit < iMin) { - iLimit = iInit; - } - } - for (; (iLimit < 0 || iCurRepeatIndex < iLimit); iCurRepeatIndex++) { - if (pInstMgrNode) { - if (pSearchArray && pSearchArray->GetSize() < 1) { - if (pTemplateNode->GetNameHash() != 0) { - break; - } - pSearchArray = NULL; - } - } else if (!XFA_DataMerge_FindFormDOMInstance( - pDocument, pTemplateNode->GetClassID(), - pTemplateNode->GetNameHash(), pFormParentNode)) { - break; - } - CXFA_Node* pSubformNode = XFA_NodeMerge_CloneOrMergeContainer( - pDocument, pFormParentNode, pTemplateNode, FALSE, pSearchArray); - FXSYS_assert(pSubformNode); - if (!pFirstInstance) { - pFirstInstance = pSubformNode; - } - for (CXFA_Node* pTemplateChild = - pTemplateNode->GetNodeItem(XFA_NODEITEM_FirstChild); - pTemplateChild; pTemplateChild = pTemplateChild->GetNodeItem( - XFA_NODEITEM_NextSibling)) { - if (XFA_NeedGenerateForm(pTemplateChild, bUseInstanceManager)) { - XFA_NodeMerge_CloneOrMergeContainer(pDocument, pSubformNode, - pTemplateChild, TRUE); - } else if (pTemplateChild->GetObjectType() == - XFA_OBJECTTYPE_ContainerNode) { - pDocument->DataMerge_CopyContainer(pTemplateChild, pSubformNode, - pDataScope); - } - } - } - } - } - int32_t iMinimalLimit = iCurRepeatIndex == 0 ? iInit : iMin; - for (; iCurRepeatIndex < iMinimalLimit; iCurRepeatIndex++) { - CXFA_Node* pSubformSetNode = XFA_NodeMerge_CloneOrMergeContainer( - pDocument, pFormParentNode, pTemplateNode, FALSE, pSearchArray); - FXSYS_assert(pSubformSetNode); - if (!pFirstInstance) { - pFirstInstance = pSubformSetNode; - } - FX_BOOL bFound = FALSE; - for (CXFA_Node* pTemplateChild = - pTemplateNode->GetNodeItem(XFA_NODEITEM_FirstChild); - pTemplateChild; pTemplateChild = pTemplateChild->GetNodeItem( - XFA_NODEITEM_NextSibling)) { - if (XFA_NeedGenerateForm(pTemplateChild, bUseInstanceManager)) { - XFA_NodeMerge_CloneOrMergeContainer(pDocument, pSubformSetNode, - pTemplateChild, TRUE); - } else if (pTemplateChild->GetObjectType() == - XFA_OBJECTTYPE_ContainerNode) { - if (bFound && eRelation == XFA_ATTRIBUTEENUM_Choice) { - continue; - } - pDocument->DataMerge_CopyContainer(pTemplateChild, pSubformSetNode, - pDataScope, FALSE, bDataMerge); - bFound = TRUE; - } - } - } - return pFirstInstance; -} -static CXFA_Node* XFA_DataMerge_CopyContainer_Field(CXFA_Document* pDocument, - CXFA_Node* pTemplateNode, - CXFA_Node* pFormNode, - CXFA_Node* pDataScope, - FX_BOOL bDataMerge, - FX_BOOL bUpLevel = TRUE) { - CXFA_Node* pFieldNode = XFA_NodeMerge_CloneOrMergeContainer( - pDocument, pFormNode, pTemplateNode, FALSE); - FXSYS_assert(pFieldNode); - for (CXFA_Node* pTemplateChildNode = - pTemplateNode->GetNodeItem(XFA_NODEITEM_FirstChild); - pTemplateChildNode; pTemplateChildNode = pTemplateChildNode->GetNodeItem( - XFA_NODEITEM_NextSibling)) { - if (XFA_NeedGenerateForm(pTemplateChildNode)) { - XFA_NodeMerge_CloneOrMergeContainer(pDocument, pFieldNode, - pTemplateChildNode, TRUE); - } else if (pTemplateNode->GetClassID() == XFA_ELEMENT_ExclGroup && - pTemplateChildNode->IsContainerNode()) { - if (pTemplateChildNode->GetClassID() == XFA_ELEMENT_Field) { - XFA_DataMerge_CopyContainer_Field(pDocument, pTemplateChildNode, - pFieldNode, NULL, FALSE); - } - } - } - if (bDataMerge) { - FX_BOOL bAccessedDataDOM = FALSE; - FX_BOOL bSelfMatch = FALSE; - XFA_ATTRIBUTEENUM eBindMatch; - CXFA_Node* pDataNode = XFA_DataMerge_FindMatchingDataNode( - pDocument, pTemplateNode, pDataScope, bAccessedDataDOM, TRUE, NULL, - bSelfMatch, eBindMatch, bUpLevel); - if (pDataNode) { - XFA_DataMerge_CreateDataBinding(pFieldNode, pDataNode); - } - } else { - XFA_DataMerge_FormValueNode_MatchNoneCreateChild(pFieldNode); - } - return pFieldNode; -} -CXFA_Node* CXFA_Document::DataMerge_CopyContainer(CXFA_Node* pTemplateNode, - CXFA_Node* pFormNode, - CXFA_Node* pDataScope, - FX_BOOL bOneInstance, - FX_BOOL bDataMerge, - FX_BOOL bUpLevel) { - switch (pTemplateNode->GetClassID()) { - case XFA_ELEMENT_SubformSet: - case XFA_ELEMENT_Subform: - case XFA_ELEMENT_Area: - case XFA_ELEMENT_PageArea: - return XFA_DataMerge_CopyContainer_SubformSet( - this, pTemplateNode, pFormNode, pDataScope, bOneInstance, bDataMerge); - case XFA_ELEMENT_ExclGroup: - case XFA_ELEMENT_Field: - case XFA_ELEMENT_Draw: - case XFA_ELEMENT_ContentArea: - return XFA_DataMerge_CopyContainer_Field( - this, pTemplateNode, pFormNode, pDataScope, bDataMerge, bUpLevel); - case XFA_ELEMENT_PageSet: - break; - case XFA_ELEMENT_Variables: - break; - default: - FXSYS_assert(FALSE); - break; - } - return NULL; -} - -static void XFA_DataMerge_UpdateBindingRelations(CXFA_Document* pDocument, - CXFA_Node* pFormNode, - CXFA_Node* pDataScope, - FX_BOOL bDataRef, - FX_BOOL bParentDataRef) { - FX_BOOL bMatchRef = TRUE; - XFA_ELEMENT eClassID = pFormNode->GetClassID(); - CXFA_Node* pDataNode = pFormNode->GetBindData(); - if (eClassID == XFA_ELEMENT_Subform || eClassID == XFA_ELEMENT_ExclGroup || - eClassID == XFA_ELEMENT_Field) { - CXFA_Node* pTemplateNode = pFormNode->GetTemplateNode(); - CXFA_Node* pTemplateNodeBind = - pTemplateNode ? pTemplateNode->GetFirstChildByClass(XFA_ELEMENT_Bind) - : NULL; - XFA_ATTRIBUTEENUM eMatch = - pTemplateNodeBind ? pTemplateNodeBind->GetEnum(XFA_ATTRIBUTE_Match) - : XFA_ATTRIBUTEENUM_Once; - switch (eMatch) { - case XFA_ATTRIBUTEENUM_None: - if (!bDataRef || bParentDataRef) { - XFA_DataMerge_FormValueNode_MatchNoneCreateChild(pFormNode); - } - break; - case XFA_ATTRIBUTEENUM_Once: - if (!bDataRef || bParentDataRef) { - if (!pDataNode) { - if (pFormNode->GetNameHash() != 0 && - pFormNode->GetEnum(XFA_ATTRIBUTE_Scope) != - XFA_ATTRIBUTEENUM_None) { - XFA_ELEMENT eDataNodeType = (eClassID == XFA_ELEMENT_Subform || - XFA_FieldIsMultiListBox(pFormNode)) - ? XFA_ELEMENT_DataGroup - : XFA_ELEMENT_DataValue; - pDataNode = XFA_DataDescription_MaybeCreateDataNode( - pDocument, pDataScope, eDataNodeType, - pFormNode->GetCData(XFA_ATTRIBUTE_Name)); - if (pDataNode) { - XFA_DataMerge_CreateDataBinding(pFormNode, pDataNode, FALSE); - } - } - if (!pDataNode) { - XFA_DataMerge_FormValueNode_MatchNoneCreateChild(pFormNode); - } - } else { - CXFA_Node* pDataParent = - pDataNode->GetNodeItem(XFA_NODEITEM_Parent); - if (pDataParent != pDataScope) { - FXSYS_assert(pDataParent); - pDataParent->RemoveChild(pDataNode); - pDataScope->InsertChild(pDataNode); - } - } - } - break; - case XFA_ATTRIBUTEENUM_Global: - if (!bDataRef || bParentDataRef) { - FX_DWORD dwNameHash = pFormNode->GetNameHash(); - if (dwNameHash != 0 && !pDataNode) { - pDataNode = XFA_DataMerge_GetGlobalBinding(pDocument, dwNameHash); - if (!pDataNode) { - XFA_ELEMENT eDataNodeType = (eClassID == XFA_ELEMENT_Subform || - XFA_FieldIsMultiListBox(pFormNode)) - ? XFA_ELEMENT_DataGroup - : XFA_ELEMENT_DataValue; - CXFA_Node* pRecordNode = - ToNode(pDocument->GetXFAObject(XFA_HASHCODE_Record)); - pDataNode = XFA_DataDescription_MaybeCreateDataNode( - pDocument, pRecordNode, eDataNodeType, - pFormNode->GetCData(XFA_ATTRIBUTE_Name)); - if (pDataNode) { - XFA_DataMerge_CreateDataBinding(pFormNode, pDataNode, FALSE); - XFA_DataMerge_RegisterGlobalBinding( - pDocument, pFormNode->GetNameHash(), pDataNode); - } - } else { - XFA_DataMerge_CreateDataBinding(pFormNode, pDataNode); - } - } - if (!pDataNode) { - XFA_DataMerge_FormValueNode_MatchNoneCreateChild(pFormNode); - } - } - break; - case XFA_ATTRIBUTEENUM_DataRef: { - bMatchRef = bDataRef; - bParentDataRef = TRUE; - if (!pDataNode && bDataRef) { - CFX_WideStringC wsRef = - pTemplateNodeBind->GetCData(XFA_ATTRIBUTE_Ref); - FX_DWORD dFlags = - XFA_RESOLVENODE_Children | XFA_RESOLVENODE_CreateNode; - XFA_RESOLVENODE_RS rs; - pDocument->GetScriptContext()->ResolveObjects(pDataScope, wsRef, rs, - dFlags, pTemplateNode); - CXFA_Object* pObject = (rs.nodes.GetSize() > 0) ? rs.nodes[0] : NULL; - pDataNode = ToNode(pObject); - if (pDataNode) { - XFA_DataMerge_CreateDataBinding( - pFormNode, pDataNode, - rs.dwFlags == XFA_RESOVENODE_RSTYPE_ExistNodes); - } else { - XFA_DataMerge_FormValueNode_MatchNoneCreateChild(pFormNode); - } - } - } break; - default: - break; - } - } - if (bMatchRef && - (eClassID == XFA_ELEMENT_Subform || eClassID == XFA_ELEMENT_SubformSet || - eClassID == XFA_ELEMENT_Area || eClassID == XFA_ELEMENT_PageArea || - eClassID == XFA_ELEMENT_PageSet)) { - for (CXFA_Node* pFormChild = - pFormNode->GetNodeItem(XFA_NODEITEM_FirstChild); - pFormChild; - pFormChild = pFormChild->GetNodeItem(XFA_NODEITEM_NextSibling)) { - if (pFormChild->GetObjectType() != XFA_OBJECTTYPE_ContainerNode) { - continue; - } - if (pFormChild->HasFlag(XFA_NODEFLAG_UnusedNode)) { - continue; - } - XFA_DataMerge_UpdateBindingRelations(pDocument, pFormChild, - pDataNode ? pDataNode : pDataScope, - bDataRef, bParentDataRef); - } - } -} -CXFA_Node* XFA_DataMerge_FindDataScope(CXFA_Node* pParentFormNode) { - for (CXFA_Node* pRootBoundNode = pParentFormNode; - pRootBoundNode && - pRootBoundNode->GetObjectType() == XFA_OBJECTTYPE_ContainerNode; - pRootBoundNode = pRootBoundNode->GetNodeItem(XFA_NODEITEM_Parent)) { - CXFA_Node* pDataScope = pRootBoundNode->GetBindData(); - if (pDataScope) { - return pDataScope; - } - } - return ToNode( - pParentFormNode->GetDocument()->GetXFAObject(XFA_HASHCODE_Data)); -} -void CXFA_Document::DataMerge_UpdateBindingRelations( - CXFA_Node* pFormUpdateRoot) { - CXFA_Node* pDataScope = XFA_DataMerge_FindDataScope( - pFormUpdateRoot->GetNodeItem(XFA_NODEITEM_Parent)); - if (!pDataScope) { - return; - } - XFA_DataMerge_UpdateBindingRelations(this, pFormUpdateRoot, pDataScope, FALSE, - FALSE); - XFA_DataMerge_UpdateBindingRelations(this, pFormUpdateRoot, pDataScope, TRUE, - FALSE); -} -CXFA_Node* CXFA_Document::GetNotBindNode(CXFA_ObjArray& arrayNodes) { - for (int32_t i = 0; i < arrayNodes.GetSize(); i++) { - CXFA_Node* pNode = arrayNodes[i]->AsNode(); - if (pNode && !pNode->HasBindItem()) - return pNode; - } - return nullptr; -} -void CXFA_Document::DoDataMerge() { - CXFA_Node* pDatasetsRoot = ToNode(GetXFAObject(XFA_HASHCODE_Datasets)); - if (!pDatasetsRoot) { - IFDE_XMLElement* pDatasetsXMLNode = - IFDE_XMLElement::Create(FX_WSTRC(L"xfa:datasets")); - FXSYS_assert(pDatasetsXMLNode); - pDatasetsXMLNode->SetString( - FX_WSTRC(L"xmlns:xfa"), - FX_WSTRC(L"http://www.xfa.org/schema/xfa-data/1.0/")); - pDatasetsRoot = CreateNode(XFA_XDPPACKET_Datasets, XFA_ELEMENT_DataModel); - pDatasetsRoot->SetCData(XFA_ATTRIBUTE_Name, FX_WSTRC(L"datasets")); - m_pRootNode->GetXMLMappingNode()->InsertChildNode(pDatasetsXMLNode); - m_pRootNode->InsertChild(pDatasetsRoot); - pDatasetsRoot->SetXMLMappingNode(pDatasetsXMLNode); - } - CXFA_Node *pDataRoot = NULL, *pDDRoot = NULL; - CFX_WideString wsDatasetsURI; - pDatasetsRoot->TryNamespace(wsDatasetsURI); - for (CXFA_Node* pChildNode = - pDatasetsRoot->GetNodeItem(XFA_NODEITEM_FirstChild); - pChildNode; - pChildNode = pChildNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { - if (pChildNode->GetClassID() != XFA_ELEMENT_DataGroup) { - continue; - } - CFX_WideString wsNamespaceURI; - if (!pDDRoot && pChildNode->GetNameHash() == XFA_HASHCODE_DataDescription) { - if (!pChildNode->TryNamespace(wsNamespaceURI)) { - continue; - } - if (wsNamespaceURI == - FX_WSTRC(L"http://ns.adobe.com/data-description/")) { - pDDRoot = pChildNode; - } - } else if (!pDataRoot && pChildNode->GetNameHash() == XFA_HASHCODE_Data) { - if (!pChildNode->TryNamespace(wsNamespaceURI)) { - continue; - } - if (wsNamespaceURI == wsDatasetsURI) { - pDataRoot = pChildNode; - } - } - if (pDataRoot && pDDRoot) { - break; - } - } - if (!pDataRoot) { - IFDE_XMLElement* pDataRootXMLNode = - IFDE_XMLElement::Create(FX_WSTRC(L"xfa:data")); - FXSYS_assert(pDataRootXMLNode); - pDataRoot = CreateNode(XFA_XDPPACKET_Datasets, XFA_ELEMENT_DataGroup); - pDataRoot->SetCData(XFA_ATTRIBUTE_Name, FX_WSTRC(L"data")); - pDataRoot->SetXMLMappingNode(pDataRootXMLNode); - pDatasetsRoot->InsertChild(pDataRoot); - } - CXFA_Node* pDataTopLevel = - pDataRoot->GetFirstChildByClass(XFA_ELEMENT_DataGroup); - FX_DWORD dwNameHash = pDataTopLevel ? pDataTopLevel->GetNameHash() : 0; - CXFA_Node* pTemplateRoot = - m_pRootNode->GetFirstChildByClass(XFA_ELEMENT_Template); - if (!pTemplateRoot) { - return; - } - CXFA_Node* pTemplateChosen = - dwNameHash != 0 ? pTemplateRoot->GetFirstChildByName(dwNameHash) : NULL; - if (!pTemplateChosen || - pTemplateChosen->GetClassID() != XFA_ELEMENT_Subform) { - pTemplateChosen = pTemplateRoot->GetFirstChildByClass(XFA_ELEMENT_Subform); - } - if (!pTemplateChosen) { - return; - } - CXFA_Node* pFormRoot = m_pRootNode->GetFirstChildByClass(XFA_ELEMENT_Form); - FX_BOOL bEmptyForm = FALSE; - if (!pFormRoot) { - bEmptyForm = TRUE; - pFormRoot = CreateNode(XFA_XDPPACKET_Form, XFA_ELEMENT_Form); - FXSYS_assert(pFormRoot); - pFormRoot->SetCData(XFA_ATTRIBUTE_Name, FX_WSTRC(L"form")); - m_pRootNode->InsertChild(pFormRoot, NULL); - } else { - CXFA_NodeIteratorTemplate - sIterator(pFormRoot); - for (CXFA_Node* pNode = sIterator.MoveToNext(); pNode; - pNode = sIterator.MoveToNext()) { - pNode->SetFlag(XFA_NODEFLAG_UnusedNode); - } - } - CXFA_Node* pSubformSetNode = XFA_NodeMerge_CloneOrMergeContainer( - this, pFormRoot, pTemplateChosen, FALSE); - FXSYS_assert(pSubformSetNode); - if (!pDataTopLevel) { - CFX_WideStringC wsFormName = pSubformSetNode->GetCData(XFA_ATTRIBUTE_Name); - CFX_WideString wsDataTopLevelName = - wsFormName.IsEmpty() ? FX_WSTRC(L"form") : wsFormName; - IFDE_XMLElement* pDataTopLevelXMLNode = - IFDE_XMLElement::Create(wsDataTopLevelName); - FXSYS_assert(pDataTopLevelXMLNode); - pDataTopLevel = CreateNode(XFA_XDPPACKET_Datasets, XFA_ELEMENT_DataGroup); - pDataTopLevel->SetCData(XFA_ATTRIBUTE_Name, wsDataTopLevelName); - pDataTopLevel->SetXMLMappingNode(pDataTopLevelXMLNode); - CXFA_Node* pBeforeNode = pDataRoot->GetNodeItem(XFA_NODEITEM_FirstChild); - pDataRoot->InsertChild(pDataTopLevel, pBeforeNode); - } - FXSYS_assert(pDataTopLevel); - XFA_DataMerge_CreateDataBinding(pSubformSetNode, pDataTopLevel); - for (CXFA_Node* pTemplateChild = - pTemplateChosen->GetNodeItem(XFA_NODEITEM_FirstChild); - pTemplateChild; - pTemplateChild = pTemplateChild->GetNodeItem(XFA_NODEITEM_NextSibling)) { - if (XFA_NeedGenerateForm(pTemplateChild)) { - XFA_NodeMerge_CloneOrMergeContainer(this, pSubformSetNode, pTemplateChild, - TRUE); - } else if (pTemplateChild->GetObjectType() == - XFA_OBJECTTYPE_ContainerNode) { - DataMerge_CopyContainer(pTemplateChild, pSubformSetNode, pDataTopLevel); - } - } - if (pDDRoot) { - XFA_DataDescription_UpdateDataRelation(pDataRoot, pDDRoot); - } - DataMerge_UpdateBindingRelations(pSubformSetNode); - CXFA_Node* pPageSetNode = - pSubformSetNode->GetFirstChildByClass(XFA_ELEMENT_PageSet); - while (pPageSetNode) { - m_pPendingPageSet.Add(pPageSetNode); - CXFA_Node* pNextPageSetNode = - pPageSetNode->GetNextSameClassSibling(XFA_ELEMENT_PageSet); - pSubformSetNode->RemoveChild(pPageSetNode); - pPageSetNode = pNextPageSetNode; - } - if (!bEmptyForm) { - CXFA_NodeIteratorTemplate - sIterator(pFormRoot); - CXFA_Node* pNode = sIterator.MoveToNext(); - while (pNode) { - if (pNode->HasFlag(XFA_NODEFLAG_UnusedNode)) { - if (pNode->GetObjectType() == XFA_OBJECTTYPE_ContainerNode || - pNode->GetClassID() == XFA_ELEMENT_InstanceManager) { - CXFA_Node* pNext = sIterator.SkipChildrenAndMoveToNext(); - pNode->GetNodeItem(XFA_NODEITEM_Parent)->RemoveChild(pNode); - pNode = pNext; - } else { - pNode->SetFlag(XFA_NODEFLAG_UnusedNode, FALSE); - pNode->SetFlag(XFA_NODEFLAG_Initialized); - pNode = sIterator.MoveToNext(); - } - } else { - pNode->SetFlag(XFA_NODEFLAG_Initialized); - pNode = sIterator.MoveToNext(); - } - } - } -} -void CXFA_Document::DoDataRemerge(FX_BOOL bDoDataMerge) { - CXFA_Node* pFormRoot = ToNode(GetXFAObject(XFA_HASHCODE_Form)); - if (pFormRoot) { - while (CXFA_Node* pNode = pFormRoot->GetNodeItem(XFA_NODEITEM_FirstChild)) { - pFormRoot->RemoveChild(pNode); - } - pFormRoot->SetObject(XFA_ATTRIBUTE_BindingNode, NULL); - } - XFA_DataMerge_ClearGlobalBinding(this); - if (bDoDataMerge) { - DoDataMerge(); - } - CXFA_LayoutProcessor* pLayoutProcessor = GetLayoutProcessor(); - pLayoutProcessor->SetForceReLayout(TRUE); -} diff --git a/xfa/src/fxfa/parser/xfa_document_datamerger_imp.h b/xfa/src/fxfa/parser/xfa_document_datamerger_imp.h deleted file mode 100644 index 57ac6385b1..0000000000 --- a/xfa/src/fxfa/parser/xfa_document_datamerger_imp.h +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXFA_PARSER_XFA_DOCUMENT_DATAMERGER_IMP_H_ -#define XFA_SRC_FXFA_PARSER_XFA_DOCUMENT_DATAMERGER_IMP_H_ - -#include "xfa/src/fxfa/parser/xfa_object.h" - -CXFA_Node* XFA_NodeMerge_CloneOrMergeContainer( - CXFA_Document* pDocument, - CXFA_Node* pFormParent, - CXFA_Node* pTemplateNode, - FX_BOOL bRecursive, - CXFA_NodeArray* pSubformArray = NULL); -CXFA_Node* XFA_DataMerge_FindDataScope(CXFA_Node* pParentFormNode); -CXFA_Node* XFA_DataMerge_FindFormDOMInstance(CXFA_Document* pDocument, - XFA_ELEMENT eClassID, - FX_DWORD dwNameHash, - CXFA_Node* pFormParent); - -#endif // XFA_SRC_FXFA_PARSER_XFA_DOCUMENT_DATAMERGER_IMP_H_ diff --git a/xfa/src/fxfa/parser/xfa_document_imp.cpp b/xfa/src/fxfa/parser/xfa_document_imp.cpp deleted file mode 100644 index 980b4e4a3e..0000000000 --- a/xfa/src/fxfa/parser/xfa_document_imp.cpp +++ /dev/null @@ -1,441 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "core/include/fxcrt/fx_ext.h" -#include "xfa/src/fxfa/fm2js/xfa_fm2jsapi.h" -#include "xfa/src/fxfa/parser/xfa_basic_imp.h" -#include "xfa/src/fxfa/parser/xfa_docdata.h" -#include "xfa/src/fxfa/parser/xfa_doclayout.h" -#include "xfa/src/fxfa/parser/xfa_document.h" -#include "xfa/src/fxfa/parser/xfa_document_layout_imp.h" -#include "xfa/src/fxfa/parser/xfa_localemgr.h" -#include "xfa/src/fxfa/parser/xfa_object.h" -#include "xfa/src/fxfa/parser/xfa_parser.h" -#include "xfa/src/fxfa/parser/xfa_script.h" -#include "xfa/src/fxfa/parser/xfa_script_datawindow.h" -#include "xfa/src/fxfa/parser/xfa_script_eventpseudomodel.h" -#include "xfa/src/fxfa/parser/xfa_script_hostpseudomodel.h" -#include "xfa/src/fxfa/parser/xfa_script_layoutpseudomodel.h" -#include "xfa/src/fxfa/parser/xfa_script_logpseudomodel.h" -#include "xfa/src/fxfa/parser/xfa_script_signaturepseudomodel.h" -#include "xfa/src/fxfa/parser/xfa_utils.h" - -CXFA_Document::CXFA_Document(IXFA_DocParser* pParser) - : m_pParser(pParser), - m_pScriptContext(nullptr), - m_pLayoutProcessor(nullptr), - m_pRootNode(nullptr), - m_pLocalMgr(nullptr), - m_pScriptDataWindow(nullptr), - m_pScriptEvent(nullptr), - m_pScriptHost(nullptr), - m_pScriptLog(nullptr), - m_pScriptLayout(nullptr), - m_pScriptSignature(nullptr), - m_eCurVersionMode(XFA_VERSION_DEFAULT), - m_dwDocFlags(0) { - ASSERT(m_pParser); -} -CXFA_Document::~CXFA_Document() { - delete m_pRootNode; - PurgeNodes(); -} -void CXFA_Document::ClearLayoutData() { - if (m_pLayoutProcessor) { - delete m_pLayoutProcessor; - m_pLayoutProcessor = NULL; - } - if (m_pScriptContext) { - m_pScriptContext->Release(); - m_pScriptContext = NULL; - } - if (m_pLocalMgr) { - delete m_pLocalMgr; - m_pLocalMgr = NULL; - } - if (m_pScriptDataWindow) { - delete m_pScriptDataWindow; - m_pScriptDataWindow = NULL; - } - if (m_pScriptEvent) { - delete m_pScriptEvent; - m_pScriptEvent = NULL; - } - if (m_pScriptHost) { - delete m_pScriptHost; - m_pScriptHost = NULL; - } - if (m_pScriptLog) { - delete m_pScriptLog; - m_pScriptLog = NULL; - } - if (m_pScriptLayout) { - delete m_pScriptLayout; - m_pScriptLayout = NULL; - } - if (m_pScriptSignature) { - delete m_pScriptSignature; - m_pScriptSignature = NULL; - } -} -void CXFA_Document::SetRoot(CXFA_Node* pNewRoot) { - if (m_pRootNode) { - AddPurgeNode(m_pRootNode); - } - m_pRootNode = pNewRoot; - RemovePurgeNode(pNewRoot); -} -IXFA_Notify* CXFA_Document::GetNotify() const { - return m_pParser->GetNotify(); -} -CXFA_Object* CXFA_Document::GetXFAObject(const CFX_WideStringC& wsNodeName) { - return GetXFAObject( - FX_HashCode_String_GetW(wsNodeName.GetPtr(), wsNodeName.GetLength())); -} -CXFA_Object* CXFA_Document::GetXFAObject(FX_DWORD dwNodeNameHash) { - switch (dwNodeNameHash) { - case XFA_HASHCODE_Data: { - CXFA_Node* pDatasetsNode = ToNode(GetXFAObject(XFA_HASHCODE_Datasets)); - if (!pDatasetsNode) { - return NULL; - } - for (CXFA_Node* pDatasetsChild = - pDatasetsNode->GetFirstChildByClass(XFA_ELEMENT_DataGroup); - pDatasetsChild; - pDatasetsChild = - pDatasetsChild->GetNextSameClassSibling(XFA_ELEMENT_DataGroup)) { - if (pDatasetsChild->GetNameHash() != XFA_HASHCODE_Data) { - continue; - } - CFX_WideString wsNamespaceURI; - if (!pDatasetsChild->TryNamespace(wsNamespaceURI)) { - continue; - } - CFX_WideString wsDatasetsURI; - if (!pDatasetsNode->TryNamespace(wsDatasetsURI)) { - continue; - } - if (wsNamespaceURI == wsDatasetsURI) { - return pDatasetsChild; - } - } - } - return NULL; - case XFA_HASHCODE_Record: { - CXFA_Node* pData = ToNode(GetXFAObject(XFA_HASHCODE_Data)); - return pData ? pData->GetFirstChildByClass(XFA_ELEMENT_DataGroup) : NULL; - } - case XFA_HASHCODE_DataWindow: { - if (m_pScriptDataWindow == NULL) { - m_pScriptDataWindow = new CScript_DataWindow(this); - } - return m_pScriptDataWindow; - } - case XFA_HASHCODE_Event: { - if (m_pScriptEvent == NULL) { - m_pScriptEvent = new CScript_EventPseudoModel(this); - } - return m_pScriptEvent; - } - case XFA_HASHCODE_Host: { - if (m_pScriptHost == NULL) { - m_pScriptHost = new CScript_HostPseudoModel(this); - } - return m_pScriptHost; - } - case XFA_HASHCODE_Log: { - if (m_pScriptLog == NULL) { - m_pScriptLog = new CScript_LogPseudoModel(this); - } - return m_pScriptLog; - } - case XFA_HASHCODE_Signature: { - if (m_pScriptSignature == NULL) { - m_pScriptSignature = new CScript_SignaturePseudoModel(this); - } - return m_pScriptSignature; - } - case XFA_HASHCODE_Layout: { - if (m_pScriptLayout == NULL) { - m_pScriptLayout = new CScript_LayoutPseudoModel(this); - } - return m_pScriptLayout; - } - default: - return m_pRootNode->GetFirstChildByName(dwNodeNameHash); - } -} -CXFA_Node* CXFA_Document::CreateNode(FX_DWORD dwPacket, XFA_ELEMENT eElement) { - return CreateNode(XFA_GetPacketByID(dwPacket), eElement); -} -CXFA_Node* CXFA_Document::CreateNode(const XFA_PACKETINFO* pPacket, - XFA_ELEMENT eElement) { - if (pPacket == NULL) { - return NULL; - } - const XFA_ELEMENTINFO* pElement = XFA_GetElementByID(eElement); - if (pElement && (pElement->dwPackets & pPacket->eName)) { - CXFA_Node* pNode = new CXFA_Node(this, pPacket->eName, pElement->eName); - if (pNode) { - AddPurgeNode(pNode); - } - return pNode; - } - return NULL; -} -void CXFA_Document::AddPurgeNode(CXFA_Node* pNode) { - m_rgPurgeNodes.Add(pNode); -} -FX_BOOL CXFA_Document::RemovePurgeNode(CXFA_Node* pNode) { - return m_rgPurgeNodes.RemoveKey(pNode); -} -void CXFA_Document::PurgeNodes() { - FX_POSITION psNode = m_rgPurgeNodes.GetStartPosition(); - while (psNode) { - CXFA_Node* pNode; - m_rgPurgeNodes.GetNextAssoc(psNode, pNode); - delete pNode; - } - m_rgPurgeNodes.RemoveAll(); -} -void CXFA_Document::SetFlag(FX_DWORD dwFlag, FX_BOOL bOn) { - if (bOn) { - m_dwDocFlags |= dwFlag; - } else { - m_dwDocFlags &= ~dwFlag; - } -} -FX_BOOL CXFA_Document::IsInteractive() { - if (m_dwDocFlags & XFA_DOCFLAG_HasInteractive) { - return m_dwDocFlags & XFA_DOCFLAG_Interactive; - } - CXFA_Node* pConfig = ToNode(GetXFAObject(XFA_HASHCODE_Config)); - if (!pConfig) { - return FALSE; - } - CFX_WideString wsInteractive; - CXFA_Node* pPresent = pConfig->GetFirstChildByClass(XFA_ELEMENT_Present); - if (!pPresent) { - return FALSE; - } - CXFA_Node* pPDF = pPresent->GetFirstChildByClass(XFA_ELEMENT_Pdf); - if (!pPDF) { - return FALSE; - } - CXFA_Node* pInteractive = pPDF->GetChild(0, XFA_ELEMENT_Interactive); - if (pInteractive) { - m_dwDocFlags |= XFA_DOCFLAG_HasInteractive; - if (pInteractive->TryContent(wsInteractive) && - wsInteractive == FX_WSTRC(L"1")) { - m_dwDocFlags |= XFA_DOCFLAG_Interactive; - return TRUE; - } - } - return FALSE; -} -CXFA_LocaleMgr* CXFA_Document::GetLocalMgr() { - if (!m_pLocalMgr) { - CFX_WideString wsLanguage; - GetParser()->GetNotify()->GetAppProvider()->GetLanguage(wsLanguage); - m_pLocalMgr = new CXFA_LocaleMgr( - ToNode(GetXFAObject(XFA_HASHCODE_LocaleSet)), wsLanguage); - } - return m_pLocalMgr; -} -IXFA_ScriptContext* CXFA_Document::InitScriptContext(FXJSE_HRUNTIME hRuntime) { - if (!m_pScriptContext) { - m_pScriptContext = XFA_ScriptContext_Create(this); - } - m_pScriptContext->Initialize(hRuntime); - return m_pScriptContext; -} -IXFA_ScriptContext* CXFA_Document::GetScriptContext() { - if (!m_pScriptContext) { - m_pScriptContext = XFA_ScriptContext_Create(this); - } - return m_pScriptContext; -} -XFA_VERSION CXFA_Document::RecognizeXFAVersionNumber( - CFX_WideString& wsTemplateNS) { - CFX_WideStringC wsTemplateURIPrefix = - XFA_GetPacketByIndex(XFA_PACKET_Template)->pURI; - FX_STRSIZE nPrefixLength = wsTemplateURIPrefix.GetLength(); - if (CFX_WideStringC(wsTemplateNS, wsTemplateNS.GetLength()) != - wsTemplateURIPrefix) { - return XFA_VERSION_UNKNOWN; - } - FX_STRSIZE nDotPos = wsTemplateNS.Find('.', nPrefixLength); - if (nDotPos == (FX_STRSIZE)-1) { - return XFA_VERSION_UNKNOWN; - } - int8_t iMajor = - FXSYS_wtoi(wsTemplateNS.Mid(nPrefixLength, nDotPos - nPrefixLength)); - int8_t iMinor = FXSYS_wtoi( - wsTemplateNS.Mid(nDotPos + 1, wsTemplateNS.GetLength() - nDotPos - 2)); - XFA_VERSION eVersion = (XFA_VERSION)((int32_t)iMajor * 100 + iMinor); - if (eVersion < XFA_VERSION_MIN || eVersion > XFA_VERSION_MAX) { - return XFA_VERSION_UNKNOWN; - } - m_eCurVersionMode = eVersion; - return eVersion; -} -CXFA_Node* CXFA_Document::GetNodeByID(CXFA_Node* pRoot, - const CFX_WideStringC& wsID) { - if (!pRoot || wsID.IsEmpty()) { - return NULL; - } - CXFA_NodeIterator sIterator(pRoot); - for (CXFA_Node* pNode = sIterator.GetCurrent(); pNode; - pNode = sIterator.MoveToNext()) { - CFX_WideStringC wsIDVal; - if (pNode->TryCData(XFA_ATTRIBUTE_Id, wsIDVal) && !wsIDVal.IsEmpty()) { - if (wsIDVal == wsID) { - return pNode; - } - } - } - return NULL; -} -static void XFA_ProtoMerge_MergeNodeRecurse(CXFA_Document* pDocument, - CXFA_Node* pDestNodeParent, - CXFA_Node* pProtoNode) { - CXFA_Node* pExistingNode = NULL; - for (CXFA_Node* pFormChild = - pDestNodeParent->GetNodeItem(XFA_NODEITEM_FirstChild); - pFormChild; - pFormChild = pFormChild->GetNodeItem(XFA_NODEITEM_NextSibling)) { - if (pFormChild->GetClassID() == pProtoNode->GetClassID() && - pFormChild->GetNameHash() == pProtoNode->GetNameHash() && - pFormChild->HasFlag(XFA_NODEFLAG_UnusedNode)) { - pFormChild->SetFlag(XFA_NODEFLAG_UnusedNode, FALSE); - pExistingNode = pFormChild; - break; - } - } - if (pExistingNode) { - pExistingNode->SetTemplateNode(pProtoNode); - for (CXFA_Node* pTemplateChild = - pProtoNode->GetNodeItem(XFA_NODEITEM_FirstChild); - pTemplateChild; pTemplateChild = pTemplateChild->GetNodeItem( - XFA_NODEITEM_NextSibling)) { - XFA_ProtoMerge_MergeNodeRecurse(pDocument, pExistingNode, pTemplateChild); - } - return; - } - CXFA_Node* pNewNode = pProtoNode->Clone(TRUE); - pNewNode->SetTemplateNode(pProtoNode); - pDestNodeParent->InsertChild(pNewNode, NULL); -} -static void XFA_ProtoMerge_MergeNode(CXFA_Document* pDocument, - CXFA_Node* pDestNode, - CXFA_Node* pProtoNode) { - { - CXFA_NodeIterator sIterator(pDestNode); - for (CXFA_Node* pNode = sIterator.GetCurrent(); pNode; - pNode = sIterator.MoveToNext()) { - pNode->SetFlag(XFA_NODEFLAG_UnusedNode); - } - } - pDestNode->SetTemplateNode(pProtoNode); - for (CXFA_Node* pTemplateChild = - pProtoNode->GetNodeItem(XFA_NODEITEM_FirstChild); - pTemplateChild; - pTemplateChild = pTemplateChild->GetNodeItem(XFA_NODEITEM_NextSibling)) { - XFA_ProtoMerge_MergeNodeRecurse(pDocument, pDestNode, pTemplateChild); - } - { - CXFA_NodeIterator sIterator(pDestNode); - for (CXFA_Node* pNode = sIterator.GetCurrent(); pNode; - pNode = sIterator.MoveToNext()) { - pNode->SetFlag(XFA_NODEFLAG_UnusedNode, FALSE); - } - } -} -void CXFA_Document::DoProtoMerge() { - CXFA_Node* pTemplateRoot = ToNode(GetXFAObject(XFA_HASHCODE_Template)); - if (!pTemplateRoot) { - return; - } - CFX_MapPtrTemplate mIDMap; - CXFA_NodeSet sUseNodes; - CXFA_NodeIterator sIterator(pTemplateRoot); - for (CXFA_Node* pNode = sIterator.GetCurrent(); pNode; - pNode = sIterator.MoveToNext()) { - CFX_WideStringC wsIDVal; - if (pNode->TryCData(XFA_ATTRIBUTE_Id, wsIDVal) && !wsIDVal.IsEmpty()) { - mIDMap[FX_HashCode_String_GetW(wsIDVal.GetPtr(), wsIDVal.GetLength())] = - pNode; - } - CFX_WideStringC wsUseVal; - if (pNode->TryCData(XFA_ATTRIBUTE_Use, wsUseVal) && !wsUseVal.IsEmpty()) { - sUseNodes.Add(pNode); - } else if (pNode->TryCData(XFA_ATTRIBUTE_Usehref, wsUseVal) && - !wsUseVal.IsEmpty()) { - sUseNodes.Add(pNode); - } - } - FX_POSITION pos = sUseNodes.GetStartPosition(); - while (pos) { - CXFA_Node* pUseHrefNode = NULL; - sUseNodes.GetNextAssoc(pos, pUseHrefNode); - CFX_WideString wsUseVal; - CFX_WideStringC wsURI, wsID, wsSOM; - if (pUseHrefNode->TryCData(XFA_ATTRIBUTE_Usehref, wsUseVal) && - !wsUseVal.IsEmpty()) { - FX_STRSIZE uSharpPos = wsUseVal.Find('#'); - if (uSharpPos < 0) { - wsURI = wsUseVal; - } else { - wsURI = CFX_WideStringC((const FX_WCHAR*)wsUseVal, uSharpPos); - FX_STRSIZE uLen = wsUseVal.GetLength(); - if (uLen >= uSharpPos + 5 && - CFX_WideStringC((const FX_WCHAR*)wsUseVal + uSharpPos, 5) == - FX_WSTRC(L"#som(") && - wsUseVal[uLen - 1] == ')') { - wsSOM = CFX_WideStringC((const FX_WCHAR*)wsUseVal + uSharpPos + 5, - uLen - 1 - uSharpPos - 5); - } else { - wsID = CFX_WideStringC((const FX_WCHAR*)wsUseVal + uSharpPos + 1, - uLen - uSharpPos - 1); - } - } - } else if (pUseHrefNode->TryCData(XFA_ATTRIBUTE_Use, wsUseVal) && - !wsUseVal.IsEmpty()) { - if (wsUseVal[0] == '#') { - wsID = CFX_WideStringC((const FX_WCHAR*)wsUseVal + 1, - wsUseVal.GetLength() - 1); - } else { - wsSOM = - CFX_WideStringC((const FX_WCHAR*)wsUseVal, wsUseVal.GetLength()); - } - } - if (!wsURI.IsEmpty() && wsURI != FX_WSTRC(L".")) { - continue; - } - CXFA_Node* pProtoNode = NULL; - if (!wsSOM.IsEmpty()) { - FX_DWORD dwFlag = XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Attributes | - XFA_RESOLVENODE_Properties | XFA_RESOLVENODE_Parent | - XFA_RESOLVENODE_Siblings; - XFA_RESOLVENODE_RS resoveNodeRS; - int32_t iRet = m_pScriptContext->ResolveObjects(pUseHrefNode, wsSOM, - resoveNodeRS, dwFlag); - if (iRet > 0 && resoveNodeRS.nodes[0]->IsNode()) { - pProtoNode = resoveNodeRS.nodes[0]->AsNode(); - } - } else if (!wsID.IsEmpty()) { - if (!mIDMap.Lookup( - FX_HashCode_String_GetW(wsID.GetPtr(), wsID.GetLength()), - pProtoNode)) { - continue; - } - } - if (!pProtoNode) { - continue; - } - XFA_ProtoMerge_MergeNode(this, pUseHrefNode, pProtoNode); - } -} diff --git a/xfa/src/fxfa/parser/xfa_document_layout_imp.cpp b/xfa/src/fxfa/parser/xfa_document_layout_imp.cpp deleted file mode 100644 index 2ac2bd6164..0000000000 --- a/xfa/src/fxfa/parser/xfa_document_layout_imp.cpp +++ /dev/null @@ -1,208 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fxfa/parser/xfa_document_layout_imp.h" - -#include "xfa/src/fxfa/fm2js/xfa_fm2jsapi.h" -#include "xfa/src/fxfa/parser/xfa_basic_imp.h" -#include "xfa/src/fxfa/parser/xfa_docdata.h" -#include "xfa/src/fxfa/parser/xfa_doclayout.h" -#include "xfa/src/fxfa/parser/xfa_document.h" -#include "xfa/src/fxfa/parser/xfa_document_datamerger_imp.h" -#include "xfa/src/fxfa/parser/xfa_layout_appadapter.h" -#include "xfa/src/fxfa/parser/xfa_layout_itemlayout.h" -#include "xfa/src/fxfa/parser/xfa_layout_pagemgr_new.h" -#include "xfa/src/fxfa/parser/xfa_localemgr.h" -#include "xfa/src/fxfa/parser/xfa_object.h" -#include "xfa/src/fxfa/parser/xfa_parser.h" -#include "xfa/src/fxfa/parser/xfa_script.h" -#include "xfa/src/fxfa/parser/xfa_utils.h" - -CXFA_LayoutProcessor* CXFA_Document::GetLayoutProcessor() { - if (!m_pLayoutProcessor) { - m_pLayoutProcessor = new CXFA_LayoutProcessor(this); - ASSERT(m_pLayoutProcessor); - } - return m_pLayoutProcessor; -} -IXFA_DocLayout* CXFA_Document::GetDocLayout() { - return GetLayoutProcessor(); -} -CXFA_LayoutProcessor::CXFA_LayoutProcessor(CXFA_Document* pDocument) - : m_pDocument(pDocument), - m_pRootItemLayoutProcessor(NULL), - m_pLayoutPageMgr(NULL), - m_nProgressCounter(0), - m_bNeeLayout(TRUE) {} -CXFA_LayoutProcessor::~CXFA_LayoutProcessor() { - ClearLayoutData(); -} -CXFA_Document* CXFA_LayoutProcessor::GetDocument() const { - return m_pDocument; -} -int32_t CXFA_LayoutProcessor::StartLayout(FX_BOOL bForceRestart) { - if (!bForceRestart && !IsNeedLayout()) { - return 100; - } - if (m_pRootItemLayoutProcessor) { - delete m_pRootItemLayoutProcessor; - m_pRootItemLayoutProcessor = NULL; - } - m_nProgressCounter = 0; - CXFA_Node* pFormPacketNode = - ToNode(m_pDocument->GetXFAObject(XFA_HASHCODE_Form)); - if (!pFormPacketNode) { - return -1; - } - CXFA_Node* pFormRoot = - pFormPacketNode->GetFirstChildByClass(XFA_ELEMENT_Subform); - if (!pFormRoot) { - return -1; - } - if (!m_pLayoutPageMgr) { - m_pLayoutPageMgr = new CXFA_LayoutPageMgr(this); - } - if (!m_pLayoutPageMgr->InitLayoutPage(pFormRoot)) { - return -1; - } - if (!m_pLayoutPageMgr->PrepareFirstPage(pFormRoot)) { - return -1; - } - m_pRootItemLayoutProcessor = - new CXFA_ItemLayoutProcessor(pFormRoot, m_pLayoutPageMgr); - m_nProgressCounter = 1; - return 0; -} -int32_t CXFA_LayoutProcessor::DoLayout(IFX_Pause* pPause) { - if (m_nProgressCounter < 1) { - return -1; - } - XFA_ItemLayoutProcessorResult eStatus; - CXFA_Node* pFormNode = m_pRootItemLayoutProcessor->GetFormNode(); - FX_FLOAT fPosX = pFormNode->GetMeasure(XFA_ATTRIBUTE_X).ToUnit(XFA_UNIT_Pt); - FX_FLOAT fPosY = pFormNode->GetMeasure(XFA_ATTRIBUTE_Y).ToUnit(XFA_UNIT_Pt); - do { - FX_FLOAT fAvailHeight = m_pLayoutPageMgr->GetAvailHeight(); - eStatus = - m_pRootItemLayoutProcessor->DoLayout(TRUE, fAvailHeight, fAvailHeight); - if (eStatus != XFA_ItemLayoutProcessorResult_Done) { - m_nProgressCounter++; - } - CXFA_ContentLayoutItem* pLayoutItem = - m_pRootItemLayoutProcessor->ExtractLayoutItem(); - if (pLayoutItem) { - pLayoutItem->m_sPos = CFX_PointF(fPosX, fPosY); - } - m_pLayoutPageMgr->SubmitContentItem(pLayoutItem, eStatus); - } while (eStatus != XFA_ItemLayoutProcessorResult_Done && - (!pPause || !pPause->NeedToPauseNow())); - if (eStatus == XFA_ItemLayoutProcessorResult_Done) { - m_pLayoutPageMgr->FinishPaginatedPageSets(); - m_pLayoutPageMgr->SyncLayoutData(); - m_bNeeLayout = FALSE; - m_rgChangedContainers.RemoveAll(); - } - return 100 * (eStatus == XFA_ItemLayoutProcessorResult_Done - ? m_nProgressCounter - : m_nProgressCounter - 1) / - m_nProgressCounter; -} -FX_BOOL CXFA_LayoutProcessor::IncrementLayout() { - if (m_bNeeLayout) { - StartLayout(TRUE); - return DoLayout(NULL) == 100; - } - for (int32_t i = 0, c = m_rgChangedContainers.GetSize(); i < c; i++) { - CXFA_Node* pNode = m_rgChangedContainers[i]; - CXFA_Node* pParentNode = - pNode->GetNodeItem(XFA_NODEITEM_Parent, XFA_OBJECTTYPE_ContainerNode); - if (!pParentNode) { - return FALSE; - } - if (!CXFA_ItemLayoutProcessor::IncrementRelayoutNode(this, pNode, - pParentNode)) { - return FALSE; - } - } - m_rgChangedContainers.RemoveAll(); - return TRUE; -} -int32_t CXFA_LayoutProcessor::CountPages() const { - return m_pLayoutPageMgr ? m_pLayoutPageMgr->GetPageCount() : 0; -} -IXFA_LayoutPage* CXFA_LayoutProcessor::GetPage(int32_t index) const { - return m_pLayoutPageMgr ? m_pLayoutPageMgr->GetPage(index) : NULL; -} -CXFA_LayoutItem* CXFA_LayoutProcessor::GetLayoutItem(CXFA_Node* pFormItem) { - return static_cast( - pFormItem->GetUserData(XFA_LAYOUTITEMKEY)); -} -void CXFA_LayoutProcessor::AddChangedContainer(CXFA_Node* pContainer) { - if (m_rgChangedContainers.Find(pContainer) < 0) { - m_rgChangedContainers.Add(pContainer); - } -} -CXFA_ContainerLayoutItem* CXFA_LayoutProcessor::GetRootLayoutItem() const { - return m_pLayoutPageMgr ? m_pLayoutPageMgr->GetRootLayoutItem() : NULL; -} -void CXFA_LayoutProcessor::ClearLayoutData() { - if (m_pLayoutPageMgr) { - delete m_pLayoutPageMgr; - m_pLayoutPageMgr = NULL; - } - if (m_pRootItemLayoutProcessor) { - delete m_pRootItemLayoutProcessor; - m_pRootItemLayoutProcessor = NULL; - } - m_nProgressCounter = 0; -} -FX_BOOL CXFA_LayoutProcessor::IsNeedLayout() { - return m_bNeeLayout || m_rgChangedContainers.GetSize() > 0; -} -CXFA_LayoutItem::CXFA_LayoutItem(CXFA_Node* pNode, FX_BOOL bIsContentLayoutItem) - : m_pFormNode(pNode), - m_pParent(NULL), - m_pNextSibling(NULL), - m_pFirstChild(NULL), - m_bIsContentLayoutItem(bIsContentLayoutItem) {} -CXFA_LayoutItem::~CXFA_LayoutItem() {} -CXFA_ContainerLayoutItem::CXFA_ContainerLayoutItem(CXFA_Node* pNode) - : CXFA_LayoutItem(pNode, FALSE), m_pOldSubform(NULL) {} -IXFA_DocLayout* CXFA_ContainerLayoutItem::GetLayout() const { - return m_pFormNode->GetDocument()->GetLayoutProcessor(); -} -int32_t CXFA_ContainerLayoutItem::GetPageIndex() const { - return m_pFormNode->GetDocument() - ->GetLayoutProcessor() - ->GetLayoutPageMgr() - ->GetPageIndex(this); -} -void CXFA_ContainerLayoutItem::GetPageSize(CFX_SizeF& size) { - size.clear(); - CXFA_Node* pMedium = m_pFormNode->GetFirstChildByClass(XFA_ELEMENT_Medium); - if (!pMedium) - return; - - size = CFX_SizeF(pMedium->GetMeasure(XFA_ATTRIBUTE_Short).ToUnit(XFA_UNIT_Pt), - pMedium->GetMeasure(XFA_ATTRIBUTE_Long).ToUnit(XFA_UNIT_Pt)); - if (pMedium->GetEnum(XFA_ATTRIBUTE_Orientation) == - XFA_ATTRIBUTEENUM_Landscape) { - size = CFX_SizeF(size.y, size.x); - } -} -CXFA_Node* CXFA_ContainerLayoutItem::GetMasterPage() const { - return m_pFormNode; -} -CXFA_ContentLayoutItem::CXFA_ContentLayoutItem(CXFA_Node* pNode) - : CXFA_LayoutItem(pNode, TRUE), - m_pPrev(NULL), - m_pNext(NULL), - m_dwStatus(0) {} -CXFA_ContentLayoutItem::~CXFA_ContentLayoutItem() { - if (m_pFormNode->GetUserData(XFA_LAYOUTITEMKEY) == this) { - m_pFormNode->SetUserData(XFA_LAYOUTITEMKEY, NULL); - } -} diff --git a/xfa/src/fxfa/parser/xfa_document_layout_imp.h b/xfa/src/fxfa/parser/xfa_document_layout_imp.h deleted file mode 100644 index c471588c97..0000000000 --- a/xfa/src/fxfa/parser/xfa_document_layout_imp.h +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXFA_PARSER_XFA_DOCUMENT_LAYOUT_IMP_H_ -#define XFA_SRC_FXFA_PARSER_XFA_DOCUMENT_LAYOUT_IMP_H_ - -#include "xfa/src/fxfa/parser/xfa_doclayout.h" - -class CXFA_ItemLayoutProcessor; -class CXFA_LayoutPageMgr; -class CXFA_ContainerLayoutItem; - -class CXFA_LayoutProcessor : public IXFA_DocLayout { - public: - CXFA_LayoutProcessor(CXFA_Document* pDocument); - ~CXFA_LayoutProcessor(); - virtual CXFA_Document* GetDocument() const; - virtual int32_t StartLayout(FX_BOOL bForceRestart = FALSE); - virtual int32_t DoLayout(IFX_Pause* pPause = NULL); - virtual FX_BOOL IncrementLayout(); - virtual int32_t CountPages() const; - virtual IXFA_LayoutPage* GetPage(int32_t index) const; - virtual CXFA_LayoutItem* GetLayoutItem(CXFA_Node* pFormItem); - - void AddChangedContainer(CXFA_Node* pContainer); - void SetForceReLayout(FX_BOOL bForceRestart) { m_bNeeLayout = bForceRestart; } - CXFA_ContainerLayoutItem* GetRootLayoutItem() const; - CXFA_ItemLayoutProcessor* GetRootRootItemLayoutProcessor() { - return m_pRootItemLayoutProcessor; - } - CXFA_LayoutPageMgr* GetLayoutPageMgr() { return m_pLayoutPageMgr; } - - protected: - void ClearLayoutData(); - - FX_BOOL IsNeedLayout(); - - CXFA_Document* m_pDocument; - CXFA_ItemLayoutProcessor* m_pRootItemLayoutProcessor; - CXFA_LayoutPageMgr* m_pLayoutPageMgr; - CXFA_NodeArray m_rgChangedContainers; - uint32_t m_nProgressCounter; - FX_BOOL m_bNeeLayout; -}; - -#endif // XFA_SRC_FXFA_PARSER_XFA_DOCUMENT_LAYOUT_IMP_H_ diff --git a/xfa/src/fxfa/parser/xfa_document_serialize.cpp b/xfa/src/fxfa/parser/xfa_document_serialize.cpp deleted file mode 100644 index 66a9b75e0c..0000000000 --- a/xfa/src/fxfa/parser/xfa_document_serialize.cpp +++ /dev/null @@ -1,590 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fxfa/parser/xfa_document_serialize.h" - -#include "xfa/src/fgas/crt/fgas_codepage.h" -#include "xfa/src/fxfa/fm2js/xfa_fm2jsapi.h" -#include "xfa/src/fxfa/parser/xfa_docdata.h" -#include "xfa/src/fxfa/parser/xfa_doclayout.h" -#include "xfa/src/fxfa/parser/xfa_document.h" -#include "xfa/src/fxfa/parser/xfa_localemgr.h" -#include "xfa/src/fxfa/parser/xfa_object.h" -#include "xfa/src/fxfa/parser/xfa_parser.h" -#include "xfa/src/fxfa/parser/xfa_script.h" -#include "xfa/src/fxfa/parser/xfa_utils.h" - -IXFA_PacketImport* IXFA_PacketImport::Create(CXFA_Document* pDocument) { - return new CXFA_DataImporter(pDocument); -} -CXFA_DataImporter::CXFA_DataImporter(CXFA_Document* pDocument) - : m_pDocument(pDocument) { - ASSERT(m_pDocument); -} -FX_BOOL CXFA_DataImporter::ImportData(IFX_FileRead* pDataDocument) { - IXFA_Parser* pDataDocumentParser = IXFA_Parser::Create(m_pDocument); - if (!pDataDocumentParser) { - return FALSE; - } - if (pDataDocumentParser->StartParse(pDataDocument, XFA_XDPPACKET_Datasets) != - XFA_PARSESTATUS_Ready) { - pDataDocumentParser->Release(); - return FALSE; - } - if (pDataDocumentParser->DoParse(NULL) < XFA_PARSESTATUS_Done) { - pDataDocumentParser->Release(); - return FALSE; - } - CXFA_Node* pImportDataRoot = pDataDocumentParser->GetRootNode(); - if (!pImportDataRoot) { - pDataDocumentParser->Release(); - return FALSE; - } - CXFA_Node* pDataModel = - ToNode(m_pDocument->GetXFAObject(XFA_HASHCODE_Datasets)); - if (!pDataModel) { - pDataDocumentParser->Release(); - return FALSE; - } - CXFA_Node* pDataNode = ToNode(m_pDocument->GetXFAObject(XFA_HASHCODE_Data)); - if (pDataNode) { - pDataModel->RemoveChild(pDataNode); - } - if (pImportDataRoot->GetClassID() == XFA_ELEMENT_DataModel) { - while (CXFA_Node* pChildNode = - pImportDataRoot->GetNodeItem(XFA_NODEITEM_FirstChild)) { - pImportDataRoot->RemoveChild(pChildNode); - pDataModel->InsertChild(pChildNode); - } - } else { - IFDE_XMLNode* pXMLNode = pImportDataRoot->GetXMLMappingNode(); - IFDE_XMLNode* pParentXMLNode = pXMLNode->GetNodeItem(IFDE_XMLNode::Parent); - if (pParentXMLNode) { - pParentXMLNode->RemoveChildNode(pXMLNode); - } - pDataModel->InsertChild(pImportDataRoot); - } - m_pDocument->DoDataRemerge(FALSE); - pDataDocumentParser->Release(); - return TRUE; -} -CFX_WideString XFA_ExportEncodeAttribute(const CFX_WideString& str) { - CFX_WideTextBuf textBuf; - int32_t iLen = str.GetLength(); - for (int32_t i = 0; i < iLen; i++) { - switch (str[i]) { - case '&': - textBuf << FX_WSTRC(L"&"); - break; - case '<': - textBuf << FX_WSTRC(L"<"); - break; - case '>': - textBuf << FX_WSTRC(L">"); - break; - case '\'': - textBuf << FX_WSTRC(L"'"); - break; - case '\"': - textBuf << FX_WSTRC(L"""); - break; - default: - textBuf.AppendChar(str[i]); - } - } - return textBuf.GetWideString(); -} -CFX_WideString XFA_ExportEncodeContent(const CFX_WideStringC& str) { - CFX_WideTextBuf textBuf; - int32_t iLen = str.GetLength(); - for (int32_t i = 0; i < iLen; i++) { - FX_WCHAR ch = str.GetAt(i); - if (!FDE_IsXMLValidChar(ch)) { - continue; - } - if (ch == '&') { - textBuf << FX_WSTRC(L"&"); - } else if (ch == '<') { - textBuf << FX_WSTRC(L"<"); - } else if (ch == '>') { - textBuf << FX_WSTRC(L">"); - } else if (ch == '\'') { - textBuf << FX_WSTRC(L"'"); - } else if (ch == '\"') { - textBuf << FX_WSTRC(L"""); - } else if (ch == ' ') { - if (i && str.GetAt(i - 1) != ' ') { - textBuf.AppendChar(' '); - } else { - textBuf << FX_WSTRC(L" "); - } - } else { - textBuf.AppendChar(str.GetAt(i)); - } - } - return textBuf.GetWideString(); -} -static void XFA_SaveAttribute(CXFA_Node* pNode, - XFA_ATTRIBUTE eName, - const CFX_WideStringC& wsName, - FX_BOOL bProto, - CFX_WideString& wsOutput) { - CFX_WideString wsValue; - if ((!bProto && !pNode->HasAttribute((XFA_ATTRIBUTE)eName, bProto)) || - !pNode->GetAttribute((XFA_ATTRIBUTE)eName, wsValue, FALSE)) { - return; - } - wsValue = XFA_ExportEncodeAttribute(wsValue); - wsOutput += FX_WSTRC(L" "); - wsOutput += wsName; - wsOutput += FX_WSTRC(L"=\""); - wsOutput += wsValue; - wsOutput += FX_WSTRC(L"\""); -} -static FX_BOOL XFA_DataExporter_AttributeSaveInDataModel( - CXFA_Node* pNode, - XFA_ATTRIBUTE eAttribute) { - FX_BOOL bSaveInDataModel = FALSE; - if (pNode->GetClassID() != XFA_ELEMENT_Image) { - return bSaveInDataModel; - } - CXFA_Node* pValueNode = pNode->GetNodeItem(XFA_NODEITEM_Parent); - if (!pValueNode || pValueNode->GetClassID() != XFA_ELEMENT_Value) { - return bSaveInDataModel; - } - CXFA_Node* pFieldNode = pValueNode->GetNodeItem(XFA_NODEITEM_Parent); - if (pFieldNode && pFieldNode->GetBindData() && - eAttribute == XFA_ATTRIBUTE_Href) { - bSaveInDataModel = TRUE; - } - return bSaveInDataModel; -} -FX_BOOL XFA_DataExporter_ContentNodeNeedtoExport(CXFA_Node* pContentNode) { - CFX_WideString wsContent; - if (!pContentNode->TryContent(wsContent, FALSE, FALSE)) { - return FALSE; - } - FXSYS_assert(pContentNode->GetObjectType() == XFA_OBJECTTYPE_ContentNode); - CXFA_Node* pParentNode = pContentNode->GetNodeItem(XFA_NODEITEM_Parent); - if (!pParentNode || pParentNode->GetClassID() != XFA_ELEMENT_Value) { - return TRUE; - } - CXFA_Node* pGrandParentNode = pParentNode->GetNodeItem(XFA_NODEITEM_Parent); - if (!pGrandParentNode || - pGrandParentNode->GetObjectType() != XFA_OBJECTTYPE_ContainerNode) { - return TRUE; - } - if (pGrandParentNode->GetBindData()) { - return FALSE; - } - CXFA_WidgetData* pWidgetData = pGrandParentNode->GetWidgetData(); - XFA_ELEMENT eUIType = pWidgetData->GetUIType(); - if (eUIType == XFA_ELEMENT_PasswordEdit) { - return FALSE; - } - return TRUE; -} -static void XFA_DataExporter_RecognizeXFAVersionNumber( - CXFA_Node* pTemplateRoot, - CFX_WideString& wsVersionNumber) { - wsVersionNumber.Empty(); - if (!pTemplateRoot) { - return; - } - CFX_WideString wsTemplateNS; - if (!pTemplateRoot->TryNamespace(wsTemplateNS)) { - return; - } - XFA_VERSION eVersion = - pTemplateRoot->GetDocument()->RecognizeXFAVersionNumber(wsTemplateNS); - if (eVersion == XFA_VERSION_UNKNOWN) { - eVersion = XFA_VERSION_DEFAULT; - } - wsVersionNumber.Format(L"%i.%i", eVersion / 100, eVersion % 100); -} -static void XFA_DataExporter_RegenerateFormFile_Changed( - CXFA_Node* pNode, - CFX_WideTextBuf& buf, - FX_BOOL bSaveXML = FALSE) { - CFX_WideString wsAttrs; - int32_t iAttrs = 0; - const uint8_t* pAttrs = XFA_GetElementAttributes(pNode->GetClassID(), iAttrs); - while (iAttrs--) { - const XFA_ATTRIBUTEINFO* pAttr = - XFA_GetAttributeByID((XFA_ATTRIBUTE)pAttrs[iAttrs]); - if (pAttr->eName == XFA_ATTRIBUTE_Name || - (XFA_DataExporter_AttributeSaveInDataModel(pNode, pAttr->eName) && - !bSaveXML)) { - continue; - } - CFX_WideString wsAttr; - XFA_SaveAttribute(pNode, pAttr->eName, pAttr->pName, bSaveXML, wsAttr); - wsAttrs += wsAttr; - } - CFX_WideString wsChildren; - switch (pNode->GetObjectType()) { - case XFA_OBJECTTYPE_ContentNode: { - if (!bSaveXML && !XFA_DataExporter_ContentNodeNeedtoExport(pNode)) { - break; - } - CXFA_Node* pRawValueNode = pNode->GetNodeItem(XFA_NODEITEM_FirstChild); - while (pRawValueNode && - pRawValueNode->GetClassID() != XFA_ELEMENT_SharpxHTML && - pRawValueNode->GetClassID() != XFA_ELEMENT_Sharptext && - pRawValueNode->GetClassID() != XFA_ELEMENT_Sharpxml) { - pRawValueNode = pRawValueNode->GetNodeItem(XFA_NODEITEM_NextSibling); - } - if (!pRawValueNode) { - break; - } - CFX_WideString wsContentType; - pNode->GetAttribute(XFA_ATTRIBUTE_ContentType, wsContentType, FALSE); - if (pRawValueNode->GetClassID() == XFA_ELEMENT_SharpxHTML && - wsContentType.Equal(FX_WSTRC(L"text/html"))) { - IFDE_XMLNode* pExDataXML = pNode->GetXMLMappingNode(); - if (!pExDataXML) { - break; - } - IFDE_XMLNode* pRichTextXML = - pExDataXML->GetNodeItem(IFDE_XMLNode::FirstChild); - if (!pRichTextXML) { - break; - } - IFX_MemoryStream* pMemStream = FX_CreateMemoryStream(TRUE); - IFX_Stream* pTempStream = IFX_Stream::CreateStream( - (IFX_FileWrite*)pMemStream, FX_STREAMACCESS_Text | - FX_STREAMACCESS_Write | - FX_STREAMACCESS_Append); - pTempStream->SetCodePage(FX_CODEPAGE_UTF8); - pRichTextXML->SaveXMLNode(pTempStream); - wsChildren += CFX_WideString::FromUTF8( - (const FX_CHAR*)pMemStream->GetBuffer(), pMemStream->GetSize()); - pTempStream->Release(); - pMemStream->Release(); - } else if (pRawValueNode->GetClassID() == XFA_ELEMENT_Sharpxml && - wsContentType.Equal(FX_WSTRC(L"text/xml"))) { - CFX_WideString wsRawValue; - pRawValueNode->GetAttribute(XFA_ATTRIBUTE_Value, wsRawValue, FALSE); - if (wsRawValue.IsEmpty()) { - break; - } - CFX_WideStringArray wsSelTextArray; - int32_t iStart = 0; - int32_t iEnd = wsRawValue.Find(L'\n', iStart); - iEnd = (iEnd == -1) ? wsRawValue.GetLength() : iEnd; - while (iEnd >= iStart) { - wsSelTextArray.Add(wsRawValue.Mid(iStart, iEnd - iStart)); - iStart = iEnd + 1; - if (iStart >= wsRawValue.GetLength()) { - break; - } - iEnd = wsRawValue.Find(L'\n', iStart); - } - CXFA_Node* pParentNode = pNode->GetNodeItem(XFA_NODEITEM_Parent); - FXSYS_assert(pParentNode); - CXFA_Node* pGrandparentNode = - pParentNode->GetNodeItem(XFA_NODEITEM_Parent); - FXSYS_assert(pGrandparentNode); - CFX_WideString bodyTagName; - bodyTagName = pGrandparentNode->GetCData(XFA_ATTRIBUTE_Name); - if (bodyTagName.IsEmpty()) { - bodyTagName = FX_WSTRC(L"ListBox1"); - } - buf << FX_WSTRC(L"<"); - buf << bodyTagName; - buf << FX_WSTRC(L" xmlns=\"\"\n>"); - for (int32_t i = 0; i < wsSelTextArray.GetSize(); i++) { - buf << FX_WSTRC(L""); - buf << XFA_ExportEncodeContent(wsSelTextArray[i]); - buf << FX_WSTRC(L""); - } - buf << FX_WSTRC(L""); - wsChildren += buf.GetWideString(); - buf.Clear(); - } else { - CFX_WideStringC wsValue = pRawValueNode->GetCData(XFA_ATTRIBUTE_Value); - wsChildren += XFA_ExportEncodeContent(wsValue); - } - } break; - case XFA_OBJECTTYPE_TextNode: - case XFA_OBJECTTYPE_NodeC: - case XFA_OBJECTTYPE_NodeV: { - CFX_WideStringC wsValue = pNode->GetCData(XFA_ATTRIBUTE_Value); - wsChildren += XFA_ExportEncodeContent(wsValue); - } break; - default: - if (pNode->GetClassID() == XFA_ELEMENT_Items) { - CXFA_Node* pTemplateNode = pNode->GetTemplateNode(); - if (!pTemplateNode || - pTemplateNode->CountChildren(XFA_ELEMENT_UNKNOWN) != - pNode->CountChildren(XFA_ELEMENT_UNKNOWN)) { - bSaveXML = TRUE; - } - } - CFX_WideTextBuf newBuf; - CXFA_Node* pChildNode = pNode->GetNodeItem(XFA_NODEITEM_FirstChild); - while (pChildNode) { - XFA_DataExporter_RegenerateFormFile_Changed(pChildNode, newBuf, - bSaveXML); - wsChildren += newBuf.GetWideString(); - newBuf.Clear(); - pChildNode = pChildNode->GetNodeItem(XFA_NODEITEM_NextSibling); - } - if (!bSaveXML && !wsChildren.IsEmpty() && - pNode->GetClassID() == XFA_ELEMENT_Items) { - wsChildren.Empty(); - bSaveXML = TRUE; - CXFA_Node* pChildNode = pNode->GetNodeItem(XFA_NODEITEM_FirstChild); - while (pChildNode) { - XFA_DataExporter_RegenerateFormFile_Changed(pChildNode, newBuf, - bSaveXML); - wsChildren += newBuf.GetWideString(); - newBuf.Clear(); - pChildNode = pChildNode->GetNodeItem(XFA_NODEITEM_NextSibling); - } - } - break; - } - if (!wsChildren.IsEmpty() || !wsAttrs.IsEmpty() || - pNode->HasAttribute(XFA_ATTRIBUTE_Name)) { - CFX_WideStringC wsElement; - pNode->GetClassName(wsElement); - CFX_WideString wsName; - XFA_SaveAttribute(pNode, XFA_ATTRIBUTE_Name, FX_WSTRC(L"name"), TRUE, - wsName); - buf << FX_WSTRC(L"<"); - buf << wsElement; - buf << wsName; - buf << wsAttrs; - if (wsChildren.IsEmpty()) { - buf << FX_WSTRC(L"\n/>"); - } else { - buf << FX_WSTRC(L"\n>"); - buf << wsChildren; - buf << FX_WSTRC(L""); - } - } -} -static void XFA_DataExporter_RegenerateFormFile_Container( - CXFA_Node* pNode, - IFX_Stream* pStream, - FX_BOOL bSaveXML = FALSE) { - XFA_ELEMENT eElement = pNode->GetClassID(); - if (eElement == XFA_ELEMENT_Field || eElement == XFA_ELEMENT_Draw || - !pNode->IsContainerNode()) { - CFX_WideTextBuf buf; - XFA_DataExporter_RegenerateFormFile_Changed(pNode, buf, bSaveXML); - FX_STRSIZE nLen = buf.GetLength(); - if (nLen > 0) { - pStream->WriteString((const FX_WCHAR*)buf.GetBuffer(), nLen); - } - return; - } - CFX_WideStringC wsElement; - pNode->GetClassName(wsElement); - pStream->WriteString(L"<", 1); - pStream->WriteString(wsElement.GetPtr(), wsElement.GetLength()); - CFX_WideString wsOutput; - XFA_SaveAttribute(pNode, XFA_ATTRIBUTE_Name, FX_WSTRC(L"name"), TRUE, - wsOutput); - CFX_WideString wsAttrs; - int32_t iAttrs = 0; - const uint8_t* pAttrs = XFA_GetElementAttributes(pNode->GetClassID(), iAttrs); - while (iAttrs--) { - const XFA_ATTRIBUTEINFO* pAttr = - XFA_GetAttributeByID((XFA_ATTRIBUTE)pAttrs[iAttrs]); - if (pAttr->eName == XFA_ATTRIBUTE_Name) { - continue; - } - CFX_WideString wsAttr; - XFA_SaveAttribute(pNode, pAttr->eName, pAttr->pName, FALSE, wsAttr); - wsOutput += wsAttr; - } - if (!wsOutput.IsEmpty()) { - pStream->WriteString((const FX_WCHAR*)wsOutput, wsOutput.GetLength()); - } - CXFA_Node* pChildNode = pNode->GetNodeItem(XFA_NODEITEM_FirstChild); - if (pChildNode) { - pStream->WriteString(L"\n>", 2); - while (pChildNode) { - XFA_DataExporter_RegenerateFormFile_Container(pChildNode, pStream, - bSaveXML); - pChildNode = pChildNode->GetNodeItem(XFA_NODEITEM_NextSibling); - } - pStream->WriteString(L"WriteString(wsElement.GetPtr(), wsElement.GetLength()); - pStream->WriteString(L"\n>", 2); - } else { - pStream->WriteString(L"\n/>", 3); - } -} -void XFA_DataExporter_RegenerateFormFile(CXFA_Node* pNode, - IFX_Stream* pStream, - const FX_CHAR* pChecksum, - FX_BOOL bSaveXML) { - if (pNode->GetObjectType() == XFA_OBJECTTYPE_ModelNode) { - static const FX_WCHAR* s_pwsTagName = L""; - pStream->WriteString(s_pwsTagName, FXSYS_wcslen(s_pwsTagName)); - if (pChecksum) { - static const FX_WCHAR* s_pwChecksum = L" checksum=\""; - CFX_WideString wsChecksum = - CFX_WideString::FromUTF8(pChecksum, FXSYS_strlen(pChecksum)); - pStream->WriteString(s_pwChecksum, FXSYS_wcslen(s_pwChecksum)); - pStream->WriteString((const FX_WCHAR*)wsChecksum, wsChecksum.GetLength()); - pStream->WriteString(L"\"", 1); - } - pStream->WriteString(L" xmlns=\"", FXSYS_wcslen(L" xmlns=\"")); - const FX_WCHAR* pURI = XFA_GetPacketByIndex(XFA_PACKET_Form)->pURI; - pStream->WriteString(pURI, FXSYS_wcslen(pURI)); - CFX_WideString wsVersionNumber; - XFA_DataExporter_RecognizeXFAVersionNumber( - ToNode(pNode->GetDocument()->GetXFAObject(XFA_XDPPACKET_Template)), - wsVersionNumber); - if (wsVersionNumber.IsEmpty()) { - wsVersionNumber = FX_WSTRC(L"2.8"); - } - wsVersionNumber += FX_WSTRC(L"/\"\n>"); - pStream->WriteString((const FX_WCHAR*)wsVersionNumber, - wsVersionNumber.GetLength()); - CXFA_Node* pChildNode = pNode->GetNodeItem(XFA_NODEITEM_FirstChild); - while (pChildNode) { - XFA_DataExporter_RegenerateFormFile_Container(pChildNode, pStream); - pChildNode = pChildNode->GetNodeItem(XFA_NODEITEM_NextSibling); - } - pStream->WriteString(s_pwsClose, FXSYS_wcslen(s_pwsClose)); - } else { - XFA_DataExporter_RegenerateFormFile_Container(pNode, pStream, bSaveXML); - } -} -IXFA_PacketExport* IXFA_PacketExport::Create(CXFA_Document* pDocument, - XFA_DATAFORMAT eFormat) { - return new CXFA_DataExporter(pDocument); -} -CXFA_DataExporter::CXFA_DataExporter(CXFA_Document* pDocument) - : m_pDocument(pDocument) { - ASSERT(m_pDocument); -} -FX_BOOL CXFA_DataExporter::Export(IFX_FileWrite* pWrite) { - return Export(pWrite, m_pDocument->GetRoot()); -} -FX_BOOL CXFA_DataExporter::Export(IFX_FileWrite* pWrite, - CXFA_Node* pNode, - FX_DWORD dwFlag, - const FX_CHAR* pChecksum) { - if (!pWrite) { - ASSERT(false); - return FALSE; - } - IFX_Stream* pStream = IFX_Stream::CreateStream( - pWrite, - FX_STREAMACCESS_Text | FX_STREAMACCESS_Write | FX_STREAMACCESS_Append); - if (pStream == NULL) { - return FALSE; - } - pStream->SetCodePage(FX_CODEPAGE_UTF8); - FX_BOOL bRet = Export(pStream, pNode, dwFlag, pChecksum); - pStream->Release(); - return bRet; -} -FX_BOOL CXFA_DataExporter::Export(IFX_Stream* pStream, - CXFA_Node* pNode, - FX_DWORD dwFlag, - const FX_CHAR* pChecksum) { - IFDE_XMLDoc* pXMLDoc = m_pDocument->GetParser()->GetXMLDoc(); - if (pNode->GetObjectType() == XFA_OBJECTTYPE_ModelNode) { - switch (pNode->GetPacketID()) { - case XFA_XDPPACKET_XDP: { - static const FX_WCHAR* s_pwsPreamble = - L""; - pStream->WriteString(s_pwsPreamble, FXSYS_wcslen(s_pwsPreamble)); - for (CXFA_Node* pChild = pNode->GetNodeItem(XFA_NODEITEM_FirstChild); - pChild; pChild = pChild->GetNodeItem(XFA_NODEITEM_NextSibling)) { - Export(pStream, pChild, dwFlag, pChecksum); - } - static const FX_WCHAR* s_pwsPostamble = L""; - pStream->WriteString(s_pwsPostamble, FXSYS_wcslen(s_pwsPostamble)); - } break; - case XFA_XDPPACKET_Datasets: { - IFDE_XMLElement* pElement = - (IFDE_XMLElement*)pNode->GetXMLMappingNode(); - if (!pElement || pElement->GetType() != FDE_XMLNODE_Element) { - return FALSE; - } - CXFA_Node* pDataNode = pNode->GetNodeItem(XFA_NODEITEM_FirstChild); - FXSYS_assert(pDataNode); - XFA_DataExporter_DealWithDataGroupNode(pDataNode); - pXMLDoc->SaveXMLNode(pStream, pElement); - } break; - case XFA_XDPPACKET_Form: { - XFA_DataExporter_RegenerateFormFile(pNode, pStream, pChecksum); - } break; - case XFA_XDPPACKET_Template: - default: { - IFDE_XMLElement* pElement = - (IFDE_XMLElement*)pNode->GetXMLMappingNode(); - if (!pElement || pElement->GetType() != FDE_XMLNODE_Element) { - return FALSE; - } - pXMLDoc->SaveXMLNode(pStream, pElement); - } break; - } - } else { - CXFA_Node* pDataNode = pNode->GetNodeItem(XFA_NODEITEM_Parent); - CXFA_Node* pExportNode = pNode; - for (CXFA_Node* pChildNode = - pDataNode->GetNodeItem(XFA_NODEITEM_FirstChild); - pChildNode; - pChildNode = pChildNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { - if (pChildNode != pNode) { - pExportNode = pDataNode; - break; - } - } - IFDE_XMLElement* pElement = - (IFDE_XMLElement*)pExportNode->GetXMLMappingNode(); - if (!pElement || pElement->GetType() != FDE_XMLNODE_Element) { - return FALSE; - } - XFA_DataExporter_DealWithDataGroupNode(pExportNode); - pElement->SetString(FX_WSTRC(L"xmlns:xfa"), - FX_WSTRC(L"http://www.xfa.org/schema/xfa-data/1.0/")); - pXMLDoc->SaveXMLNode(pStream, pElement); - pElement->RemoveAttribute(L"xmlns:xfa"); - } - return TRUE; -} -void XFA_DataExporter_DealWithDataGroupNode(CXFA_Node* pDataNode) { - if (!pDataNode || pDataNode->GetClassID() == XFA_ELEMENT_DataValue) { - return; - } - int32_t iChildNum = 0; - for (CXFA_Node* pChildNode = pDataNode->GetNodeItem(XFA_NODEITEM_FirstChild); - pChildNode; - pChildNode = pChildNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { - iChildNum++; - XFA_DataExporter_DealWithDataGroupNode(pChildNode); - } - if (pDataNode->GetClassID() == XFA_ELEMENT_DataGroup) { - if (iChildNum > 0) { - IFDE_XMLNode* pXMLNode = pDataNode->GetXMLMappingNode(); - FXSYS_assert(pXMLNode->GetType() == FDE_XMLNODE_Element); - IFDE_XMLElement* pXMLElement = (IFDE_XMLElement*)pXMLNode; - if (pXMLElement->HasAttribute(L"xfa:dataNode")) { - pXMLElement->RemoveAttribute(L"xfa:dataNode"); - } - } else { - IFDE_XMLNode* pXMLNode = pDataNode->GetXMLMappingNode(); - FXSYS_assert(pXMLNode->GetType() == FDE_XMLNODE_Element); - ((IFDE_XMLElement*)pXMLNode) - ->SetString(FX_WSTRC(L"xfa:dataNode"), FX_WSTRC(L"dataGroup")); - } - } -} diff --git a/xfa/src/fxfa/parser/xfa_document_serialize.h b/xfa/src/fxfa/parser/xfa_document_serialize.h deleted file mode 100644 index 37dbb9a03b..0000000000 --- a/xfa/src/fxfa/parser/xfa_document_serialize.h +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXFA_PARSER_XFA_DOCUMENT_SERIALIZE_H_ -#define XFA_SRC_FXFA_PARSER_XFA_DOCUMENT_SERIALIZE_H_ - -#include "xfa/src/fxfa/parser/xfa_docdata.h" - -class CXFA_DataImporter : public IXFA_PacketImport { - public: - CXFA_DataImporter(CXFA_Document* pDocument); - virtual void Release() { delete this; } - virtual FX_BOOL ImportData(IFX_FileRead* pDataDocument); - - protected: - CXFA_Document* m_pDocument; -}; - -class CXFA_DataExporter : public IXFA_PacketExport { - public: - CXFA_DataExporter(CXFA_Document* pDocument); - virtual void Release() { delete this; } - virtual FX_BOOL Export(IFX_FileWrite* pWrite); - virtual FX_BOOL Export(IFX_FileWrite* pWrite, - CXFA_Node* pNode, - FX_DWORD dwFlag = 0, - const FX_CHAR* pChecksum = NULL); - - protected: - FX_BOOL Export(IFX_Stream* pStream, - CXFA_Node* pNode, - FX_DWORD dwFlag, - const FX_CHAR* pChecksum); - CXFA_Document* m_pDocument; -}; - -#endif // XFA_SRC_FXFA_PARSER_XFA_DOCUMENT_SERIALIZE_H_ diff --git a/xfa/src/fxfa/parser/xfa_layout_appadapter.cpp b/xfa/src/fxfa/parser/xfa_layout_appadapter.cpp deleted file mode 100644 index bf79c83a38..0000000000 --- a/xfa/src/fxfa/parser/xfa_layout_appadapter.cpp +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fxfa/parser/xfa_layout_appadapter.h" - -#include "xfa/src/fxfa/fm2js/xfa_fm2jsapi.h" -#include "xfa/src/fxfa/parser/xfa_docdata.h" -#include "xfa/src/fxfa/parser/xfa_doclayout.h" -#include "xfa/src/fxfa/parser/xfa_document.h" -#include "xfa/src/fxfa/parser/xfa_document_layout_imp.h" -#include "xfa/src/fxfa/parser/xfa_layout_itemlayout.h" -#include "xfa/src/fxfa/parser/xfa_layout_pagemgr_new.h" -#include "xfa/src/fxfa/parser/xfa_localemgr.h" -#include "xfa/src/fxfa/parser/xfa_object.h" -#include "xfa/src/fxfa/parser/xfa_parser.h" -#include "xfa/src/fxfa/parser/xfa_script.h" -#include "xfa/src/fxfa/parser/xfa_utils.h" - -FX_DWORD XFA_GetRelevant(CXFA_Node* pFormItem, FX_DWORD dwParentRelvant) { - FX_DWORD dwRelevant = XFA_LAYOUTSTATUS_Viewable | XFA_LAYOUTSTATUS_Printable; - CFX_WideStringC wsRelevant; - if (pFormItem->TryCData(XFA_ATTRIBUTE_Relevant, wsRelevant)) { - if (wsRelevant == FX_WSTRC(L"+print") || wsRelevant == FX_WSTRC(L"print")) { - dwRelevant &= ~XFA_LAYOUTSTATUS_Viewable; - } else if (wsRelevant == FX_WSTRC(L"-print")) { - dwRelevant &= ~XFA_LAYOUTSTATUS_Printable; - } - } - if (!(dwParentRelvant & XFA_LAYOUTSTATUS_Viewable) && - (dwRelevant != XFA_LAYOUTSTATUS_Viewable)) { - dwRelevant &= ~XFA_LAYOUTSTATUS_Viewable; - } - if (!(dwParentRelvant & XFA_LAYOUTSTATUS_Printable) && - (dwRelevant != XFA_LAYOUTSTATUS_Printable)) { - dwRelevant &= ~XFA_LAYOUTSTATUS_Printable; - } - return dwRelevant; -} -void XFA_ReleaseLayoutItem(CXFA_LayoutItem* pLayoutItem) { - CXFA_LayoutItem* pNode = pLayoutItem->m_pFirstChild; - IXFA_Notify* pNotify = - pLayoutItem->m_pFormNode->GetDocument()->GetParser()->GetNotify(); - IXFA_DocLayout* pDocLayout = - pLayoutItem->m_pFormNode->GetDocument()->GetDocLayout(); - while (pNode) { - CXFA_LayoutItem* pNext = pNode->m_pNextSibling; - pNode->m_pParent = nullptr; - pNotify->OnLayoutEvent(pDocLayout, static_cast(pNode), - XFA_LAYOUTEVENT_ItemRemoving); - XFA_ReleaseLayoutItem(pNode); - pNode = pNext; - } - pNotify->OnLayoutEvent(pDocLayout, pLayoutItem, XFA_LAYOUTEVENT_ItemRemoving); - if (pLayoutItem->m_pFormNode->GetClassID() == XFA_ELEMENT_PageArea) { - pNotify->OnPageEvent(static_cast(pLayoutItem), - XFA_PAGEEVENT_PageRemoved); - } - delete pLayoutItem; -} diff --git a/xfa/src/fxfa/parser/xfa_layout_appadapter.h b/xfa/src/fxfa/parser/xfa_layout_appadapter.h deleted file mode 100644 index 94012fae0e..0000000000 --- a/xfa/src/fxfa/parser/xfa_layout_appadapter.h +++ /dev/null @@ -1,77 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXFA_PARSER_XFA_LAYOUT_APPADAPTER_H_ -#define XFA_SRC_FXFA_PARSER_XFA_LAYOUT_APPADAPTER_H_ - -#include "xfa/src/fxfa/parser/xfa_doclayout.h" - -class CXFA_TraverseStrategy_PageAreaContainerLayoutItem { - public: - static inline CXFA_ContainerLayoutItem* GetFirstChild( - CXFA_ContainerLayoutItem* pLayoutItem) { - if (pLayoutItem->m_pFormNode->GetClassID() == XFA_ELEMENT_PageSet) { - return (CXFA_ContainerLayoutItem*)pLayoutItem->m_pFirstChild; - } - return NULL; - } - static inline CXFA_ContainerLayoutItem* GetNextSibling( - CXFA_ContainerLayoutItem* pLayoutItem) { - return (CXFA_ContainerLayoutItem*)pLayoutItem->m_pNextSibling; - } - static inline CXFA_ContainerLayoutItem* GetParent( - CXFA_ContainerLayoutItem* pLayoutItem) { - return (CXFA_ContainerLayoutItem*)pLayoutItem->m_pParent; - } -}; -class CXFA_TraverseStrategy_ContentAreaContainerLayoutItem { - public: - static inline CXFA_ContainerLayoutItem* GetFirstChild( - CXFA_ContainerLayoutItem* pLayoutItem) { - for (CXFA_LayoutItem* pChildItem = pLayoutItem->m_pFirstChild; pChildItem; - pChildItem = pChildItem->m_pNextSibling) { - if (CXFA_ContainerLayoutItem* pContainer = - pChildItem->AsContainerLayoutItem()) { - return pContainer; - } - } - return nullptr; - } - static inline CXFA_ContainerLayoutItem* GetNextSibling( - CXFA_ContainerLayoutItem* pLayoutItem) { - for (CXFA_LayoutItem* pChildItem = pLayoutItem->m_pNextSibling; pChildItem; - pChildItem = pChildItem->m_pNextSibling) { - if (CXFA_ContainerLayoutItem* pContainer = - pChildItem->AsContainerLayoutItem()) { - return pContainer; - } - } - return nullptr; - } - static inline CXFA_ContainerLayoutItem* GetParent( - CXFA_ContainerLayoutItem* pLayoutItem) { - return (CXFA_ContainerLayoutItem*)pLayoutItem->m_pParent; - } -}; -class CXFA_TraverseStrategy_ContentLayoutItem { - public: - static inline CXFA_ContentLayoutItem* GetFirstChild( - CXFA_ContentLayoutItem* pLayoutItem) { - return (CXFA_ContentLayoutItem*)pLayoutItem->m_pFirstChild; - } - static inline CXFA_ContentLayoutItem* GetNextSibling( - CXFA_ContentLayoutItem* pLayoutItem) { - return (CXFA_ContentLayoutItem*)pLayoutItem->m_pNextSibling; - } - static inline CXFA_ContentLayoutItem* GetParent( - CXFA_ContentLayoutItem* pLayoutItem) { - return (CXFA_ContentLayoutItem*)pLayoutItem->m_pParent; - } -}; -FX_DWORD XFA_GetRelevant(CXFA_Node* pFormItem, FX_DWORD dwParentRelvant); -void XFA_ReleaseLayoutItem(CXFA_LayoutItem* pLayoutItem); - -#endif // XFA_SRC_FXFA_PARSER_XFA_LAYOUT_APPADAPTER_H_ diff --git a/xfa/src/fxfa/parser/xfa_layout_itemlayout.cpp b/xfa/src/fxfa/parser/xfa_layout_itemlayout.cpp deleted file mode 100644 index cdf327826b..0000000000 --- a/xfa/src/fxfa/parser/xfa_layout_itemlayout.cpp +++ /dev/null @@ -1,2968 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fxfa/parser/xfa_layout_itemlayout.h" - -#include -#include - -#include "xfa/src/fgas/crt/fgas_algorithm.h" -#include "xfa/src/fxfa/fm2js/xfa_fm2jsapi.h" -#include "xfa/src/fxfa/parser/xfa_docdata.h" -#include "xfa/src/fxfa/parser/xfa_doclayout.h" -#include "xfa/src/fxfa/parser/xfa_document.h" -#include "xfa/src/fxfa/parser/xfa_document_layout_imp.h" -#include "xfa/src/fxfa/parser/xfa_layout_appadapter.h" -#include "xfa/src/fxfa/parser/xfa_layout_pagemgr_new.h" -#include "xfa/src/fxfa/parser/xfa_localemgr.h" -#include "xfa/src/fxfa/parser/xfa_object.h" -#include "xfa/src/fxfa/parser/xfa_parser.h" -#include "xfa/src/fxfa/parser/xfa_script.h" -#include "xfa/src/fxfa/parser/xfa_utils.h" - -CXFA_ItemLayoutProcessor::CXFA_ItemLayoutProcessor(CXFA_Node* pNode, - CXFA_LayoutPageMgr* pPageMgr) - : m_bKeepBreakFinish(FALSE), - m_bIsProcessKeep(FALSE), - m_pKeepHeadNode(nullptr), - m_pKeepTailNode(nullptr), - m_pFormNode(pNode), - m_pLayoutItem(nullptr), - m_pOldLayoutItem(nullptr), - m_pCurChildNode(XFA_LAYOUT_INVALIDNODE), - m_pCurChildPreprocessor(nullptr), - m_nCurChildNodeStage(XFA_ItemLayoutProcessorStages_None), - m_fUsedSize(0), - m_pPageMgr(pPageMgr), - m_bBreakPending(TRUE), - m_fLastRowWidth(0), - m_fLastRowY(0), - m_fWidthLimite(0), - m_bUseInheriated(FALSE), - m_ePreProcessRs(XFA_ItemLayoutProcessorResult_Done), - m_bHasAvailHeight(TRUE) { - FXSYS_assert(m_pFormNode && (m_pFormNode->IsContainerNode() || - m_pFormNode->GetClassID() == XFA_ELEMENT_Form)); - m_pOldLayoutItem = - (CXFA_ContentLayoutItem*)m_pFormNode->GetUserData(XFA_LAYOUTITEMKEY); -} -CXFA_ContentLayoutItem* CXFA_ItemLayoutProcessor::CreateContentLayoutItem( - CXFA_Node* pFormNode) { - if (!pFormNode) { - return NULL; - } - CXFA_ContentLayoutItem* pLayoutItem = NULL; - if (m_pOldLayoutItem) { - pLayoutItem = m_pOldLayoutItem; - m_pOldLayoutItem = m_pOldLayoutItem->m_pNext; - return pLayoutItem; - } - pLayoutItem = (CXFA_ContentLayoutItem*)pFormNode->GetDocument() - ->GetParser() - ->GetNotify() - ->OnCreateLayoutItem(pFormNode); - CXFA_ContentLayoutItem* pPrevLayoutItem = - (CXFA_ContentLayoutItem*)pFormNode->GetUserData(XFA_LAYOUTITEMKEY); - if (pPrevLayoutItem) { - while (pPrevLayoutItem->m_pNext) { - pPrevLayoutItem = pPrevLayoutItem->m_pNext; - } - pPrevLayoutItem->m_pNext = pLayoutItem; - pLayoutItem->m_pPrev = pPrevLayoutItem; - } else { - pFormNode->SetUserData(XFA_LAYOUTITEMKEY, pLayoutItem); - } - return pLayoutItem; -} -FX_BOOL CXFA_ItemLayoutProcessor::FindLayoutItemSplitPos( - CXFA_ContentLayoutItem* pLayoutItem, - FX_FLOAT fCurVerticalOffset, - FX_FLOAT& fProposedSplitPos, - FX_BOOL& bAppChange, - FX_BOOL bCalculateMargin) { - CXFA_Node* pFormNode = pLayoutItem->m_pFormNode; - if (fProposedSplitPos > fCurVerticalOffset + XFA_LAYOUT_FLOAT_PERCISION && - fProposedSplitPos <= fCurVerticalOffset + pLayoutItem->m_sSize.y - - XFA_LAYOUT_FLOAT_PERCISION) { - switch (pFormNode->GetIntact()) { - case XFA_ATTRIBUTEENUM_None: { - FX_BOOL bAnyChanged = FALSE; - CXFA_Document* pDocument = pFormNode->GetDocument(); - IXFA_Notify* pNotify = pDocument->GetParser()->GetNotify(); - FX_FLOAT fCurTopMargin = 0, fCurBottomMargin = 0; - CXFA_Node* pMarginNode = - pFormNode->GetFirstChildByClass(XFA_ELEMENT_Margin); - if (pMarginNode && bCalculateMargin) { - fCurTopMargin = pMarginNode->GetMeasure(XFA_ATTRIBUTE_TopInset) - .ToUnit(XFA_UNIT_Pt); - fCurBottomMargin = pMarginNode->GetMeasure(XFA_ATTRIBUTE_BottomInset) - .ToUnit(XFA_UNIT_Pt); - } - FX_BOOL bChanged = TRUE; - while (bChanged) { - bChanged = FALSE; - { - FX_FLOAT fRelSplitPos = fProposedSplitPos - fCurVerticalOffset; - if (pNotify->FindSplitPos(pFormNode, pLayoutItem->GetIndex(), - fRelSplitPos)) { - bAnyChanged = TRUE; - bChanged = TRUE; - fProposedSplitPos = fCurVerticalOffset + fRelSplitPos; - bAppChange = TRUE; - if (fProposedSplitPos <= - fCurVerticalOffset + XFA_LAYOUT_FLOAT_PERCISION) { - return TRUE; - } - } - } - FX_FLOAT fRelSplitPos = fProposedSplitPos - fCurBottomMargin; - for (CXFA_ContentLayoutItem* pChildItem = - (CXFA_ContentLayoutItem*)pLayoutItem->m_pFirstChild; - pChildItem; - pChildItem = - (CXFA_ContentLayoutItem*)pChildItem->m_pNextSibling) { - FX_FLOAT fChildOffset = - fCurVerticalOffset + fCurTopMargin + pChildItem->m_sPos.y; - FX_BOOL bAppChange = FALSE; - if (FindLayoutItemSplitPos(pChildItem, fChildOffset, fRelSplitPos, - bAppChange, bCalculateMargin)) { - if (fRelSplitPos - fChildOffset < XFA_LAYOUT_FLOAT_PERCISION && - bAppChange) { - fProposedSplitPos = fRelSplitPos - fCurTopMargin; - } else { - fProposedSplitPos = fRelSplitPos + fCurBottomMargin; - } - bAnyChanged = TRUE; - bChanged = TRUE; - if (fProposedSplitPos <= - fCurVerticalOffset + XFA_LAYOUT_FLOAT_PERCISION) { - return TRUE; - } - if (bAnyChanged) { - break; - } - } - } - } - return bAnyChanged; - } break; - case XFA_ATTRIBUTEENUM_ContentArea: - case XFA_ATTRIBUTEENUM_PageArea: { - fProposedSplitPos = fCurVerticalOffset; - return TRUE; - } - default: - return FALSE; - } - } - return FALSE; -} -static XFA_ATTRIBUTEENUM XFA_ItemLayoutProcessor_GetLayout( - CXFA_Node* pFormNode, - FX_BOOL& bRootForceTb) { - bRootForceTb = FALSE; - XFA_ATTRIBUTEENUM eLayoutMode; - if (pFormNode->TryEnum(XFA_ATTRIBUTE_Layout, eLayoutMode, FALSE)) { - return eLayoutMode; - } - CXFA_Node* pParentNode = pFormNode->GetNodeItem(XFA_NODEITEM_Parent); - if (pParentNode && pParentNode->GetClassID() == XFA_ELEMENT_Form) { - bRootForceTb = TRUE; - return XFA_ATTRIBUTEENUM_Tb; - } - return XFA_ATTRIBUTEENUM_Position; -} -static FX_BOOL XFA_ExistContainerKeep(CXFA_Node* pCurNode, FX_BOOL bPreFind) { - if (pCurNode == NULL || !XFA_ItemLayoutProcessor_IsTakingSpace(pCurNode)) { - return FALSE; - } - XFA_NODEITEM eItemType = XFA_NODEITEM_PrevSibling; - if (!bPreFind) { - eItemType = XFA_NODEITEM_NextSibling; - } - CXFA_Node* pPreContainer = - pCurNode->GetNodeItem(eItemType, XFA_OBJECTTYPE_ContainerNode); - if (pPreContainer == NULL) { - return FALSE; - } - CXFA_Node* pKeep = pCurNode->GetFirstChildByClass(XFA_ELEMENT_Keep); - if (pKeep) { - XFA_ATTRIBUTEENUM ePrevious; - XFA_ATTRIBUTE eKeepType = XFA_ATTRIBUTE_Previous; - if (!bPreFind) { - eKeepType = XFA_ATTRIBUTE_Next; - } - if (pKeep->TryEnum(eKeepType, ePrevious, FALSE)) { - if (ePrevious == XFA_ATTRIBUTEENUM_ContentArea || - ePrevious == XFA_ATTRIBUTEENUM_PageArea) { - return TRUE; - } - } - } - pKeep = pPreContainer->GetFirstChildByClass(XFA_ELEMENT_Keep); - if (!pKeep) { - return FALSE; - } - XFA_ATTRIBUTEENUM eNext; - XFA_ATTRIBUTE eKeepType = XFA_ATTRIBUTE_Next; - if (!bPreFind) { - eKeepType = XFA_ATTRIBUTE_Previous; - } - if (!pKeep->TryEnum(eKeepType, eNext, FALSE)) { - return FALSE; - } - if (eNext == XFA_ATTRIBUTEENUM_ContentArea || - eNext == XFA_ATTRIBUTEENUM_PageArea) { - return TRUE; - } - return FALSE; -} -FX_FLOAT CXFA_ItemLayoutProcessor::FindSplitPos(FX_FLOAT fProposedSplitPos) { - ASSERT(m_pLayoutItem); - XFA_ATTRIBUTEENUM eLayout = m_pFormNode->GetEnum(XFA_ATTRIBUTE_Layout); - FX_BOOL bCalculateMargin = TRUE; - if (eLayout == XFA_ATTRIBUTEENUM_Position) { - bCalculateMargin = FALSE; - } - while (fProposedSplitPos > XFA_LAYOUT_FLOAT_PERCISION) { - FX_BOOL bAppChange = FALSE; - if (!FindLayoutItemSplitPos(m_pLayoutItem, 0, fProposedSplitPos, bAppChange, - bCalculateMargin)) { - break; - } - } - return fProposedSplitPos; -} -void CXFA_ItemLayoutProcessor::SplitLayoutItem( - CXFA_ContentLayoutItem* pLayoutItem, - CXFA_ContentLayoutItem* pSecondParent, - FX_FLOAT fSplitPos) { - FX_FLOAT fCurTopMargin = 0, fCurBottomMargin = 0; - XFA_ATTRIBUTEENUM eLayout = m_pFormNode->GetEnum(XFA_ATTRIBUTE_Layout); - FX_BOOL bCalculateMargin = TRUE; - if (eLayout == XFA_ATTRIBUTEENUM_Position) { - bCalculateMargin = FALSE; - } - CXFA_Node* pMarginNode = - pLayoutItem->m_pFormNode->GetFirstChildByClass(XFA_ELEMENT_Margin); - if (pMarginNode && bCalculateMargin) { - fCurTopMargin = - pMarginNode->GetMeasure(XFA_ATTRIBUTE_TopInset).ToUnit(XFA_UNIT_Pt); - fCurBottomMargin = - pMarginNode->GetMeasure(XFA_ATTRIBUTE_BottomInset).ToUnit(XFA_UNIT_Pt); - } - CXFA_ContentLayoutItem* pSecondLayoutItem = NULL; - if (m_pCurChildPreprocessor && - m_pCurChildPreprocessor->m_pFormNode == pLayoutItem->m_pFormNode) { - pSecondLayoutItem = m_pCurChildPreprocessor->CreateContentLayoutItem( - pLayoutItem->m_pFormNode); - } else { - pSecondLayoutItem = CreateContentLayoutItem(pLayoutItem->m_pFormNode); - } - pSecondLayoutItem->m_sPos.x = pLayoutItem->m_sPos.x; - pSecondLayoutItem->m_sSize.x = pLayoutItem->m_sSize.x; - pSecondLayoutItem->m_sPos.y = 0; - pSecondLayoutItem->m_sSize.y = pLayoutItem->m_sSize.y - fSplitPos; - pLayoutItem->m_sSize.y -= pSecondLayoutItem->m_sSize.y; - if (pLayoutItem->m_pFirstChild) { - pSecondLayoutItem->m_sSize.y += fCurTopMargin; - } - if (pSecondParent) { - pSecondParent->AddChild(pSecondLayoutItem); - if (fCurTopMargin > 0 && pLayoutItem->m_pFirstChild) { - pSecondParent->m_sSize.y += fCurTopMargin; - CXFA_ContentLayoutItem* pParentItem = - (CXFA_ContentLayoutItem*)pSecondParent->m_pParent; - while (pParentItem) { - pParentItem->m_sSize.y += fCurTopMargin; - pParentItem = (CXFA_ContentLayoutItem*)pParentItem->m_pParent; - } - } - } else { - pSecondLayoutItem->m_pParent = pLayoutItem->m_pParent; - pSecondLayoutItem->m_pNextSibling = pLayoutItem->m_pNextSibling; - pLayoutItem->m_pNextSibling = pSecondLayoutItem; - } - CXFA_ContentLayoutItem* pChildren = - (CXFA_ContentLayoutItem*)pLayoutItem->m_pFirstChild; - pLayoutItem->m_pFirstChild = NULL; - FX_FLOAT lHeightForKeep = 0; - CFX_ArrayTemplate keepLayoutItems; - FX_FLOAT fAddMarginHeight = 0; - for (CXFA_ContentLayoutItem *pChildItem = pChildren, *pChildNext = NULL; - pChildItem; pChildItem = pChildNext) { - pChildNext = (CXFA_ContentLayoutItem*)pChildItem->m_pNextSibling; - pChildItem->m_pNextSibling = NULL; - if (fSplitPos <= fCurTopMargin + pChildItem->m_sPos.y + fCurBottomMargin + - XFA_LAYOUT_FLOAT_PERCISION) { - if (!XFA_ExistContainerKeep(pChildItem->m_pFormNode, TRUE)) { - pChildItem->m_sPos.y -= fSplitPos - fCurBottomMargin; - pChildItem->m_sPos.y += lHeightForKeep; - pChildItem->m_sPos.y += fAddMarginHeight; - pSecondLayoutItem->AddChild(pChildItem); - } else { - if (lHeightForKeep < XFA_LAYOUT_FLOAT_PERCISION) { - for (int32_t iIndex = 0; iIndex < keepLayoutItems.GetSize(); - iIndex++) { - CXFA_ContentLayoutItem* pPreItem = keepLayoutItems[iIndex]; - pLayoutItem->RemoveChild(pPreItem); - pPreItem->m_sPos.y -= fSplitPos; - if (pPreItem->m_sPos.y < 0) { - pPreItem->m_sPos.y = 0; - } - if (pPreItem->m_sPos.y + pPreItem->m_sSize.y > lHeightForKeep) { - pPreItem->m_sPos.y = lHeightForKeep; - lHeightForKeep += pPreItem->m_sSize.y; - pSecondLayoutItem->m_sSize.y += pPreItem->m_sSize.y; - if (pSecondParent) { - pSecondParent->m_sSize.y += pPreItem->m_sSize.y; - } - } - pSecondLayoutItem->AddChild(pPreItem); - } - } - pChildItem->m_sPos.y -= fSplitPos; - pChildItem->m_sPos.y += lHeightForKeep; - pChildItem->m_sPos.y += fAddMarginHeight; - pSecondLayoutItem->AddChild(pChildItem); - } - } else if (fSplitPos + XFA_LAYOUT_FLOAT_PERCISION >= - fCurTopMargin + fCurBottomMargin + pChildItem->m_sPos.y + - pChildItem->m_sSize.y) { - pLayoutItem->AddChild(pChildItem); - if (XFA_ExistContainerKeep(pChildItem->m_pFormNode, FALSE)) { - keepLayoutItems.Add(pChildItem); - } else { - keepLayoutItems.RemoveAll(); - } - } else { - FX_FLOAT fOldHeight = pSecondLayoutItem->m_sSize.y; - SplitLayoutItem( - pChildItem, pSecondLayoutItem, - fSplitPos - fCurTopMargin - fCurBottomMargin - pChildItem->m_sPos.y); - fAddMarginHeight = pSecondLayoutItem->m_sSize.y - fOldHeight; - pLayoutItem->AddChild(pChildItem); - } - } -} -void CXFA_ItemLayoutProcessor::SplitLayoutItem(FX_FLOAT fSplitPos) { - ASSERT(m_pLayoutItem); - SplitLayoutItem(m_pLayoutItem, NULL, fSplitPos); -} - -IXFA_LayoutPage* CXFA_LayoutItem::GetPage() const { - for (CXFA_LayoutItem* pCurNode = const_cast(this); pCurNode; - pCurNode = pCurNode->m_pParent) { - if (pCurNode->m_pFormNode->GetClassID() == XFA_ELEMENT_PageArea) - return static_cast(pCurNode); - } - return nullptr; -} - -CXFA_Node* CXFA_LayoutItem::GetFormNode() const { - return m_pFormNode; -} - -void CXFA_LayoutItem::GetRect(CFX_RectF& rtLayout, FX_BOOL bRelative) const { - ASSERT(m_bIsContentLayoutItem); - const CXFA_ContentLayoutItem* pThis = - static_cast(this); - CFX_PointF sPos = pThis->m_sPos; - CFX_SizeF sSize = pThis->m_sSize; - if (!bRelative) { - for (CXFA_LayoutItem* pLayoutItem = pThis->m_pParent; pLayoutItem; - pLayoutItem = pLayoutItem->m_pParent) { - if (CXFA_ContentLayoutItem* pContent = - pLayoutItem->AsContentLayoutItem()) { - sPos += pContent->m_sPos; - if (CXFA_Node* pMarginNode = - pLayoutItem->m_pFormNode->GetFirstChildByClass( - XFA_ELEMENT_Margin)) { - sPos += CFX_PointF(pMarginNode->GetMeasure(XFA_ATTRIBUTE_LeftInset) - .ToUnit(XFA_UNIT_Pt), - pMarginNode->GetMeasure(XFA_ATTRIBUTE_TopInset) - .ToUnit(XFA_UNIT_Pt)); - } - } else { - if (pLayoutItem->m_pFormNode->GetClassID() == XFA_ELEMENT_ContentArea) { - sPos += - CFX_PointF(pLayoutItem->m_pFormNode->GetMeasure(XFA_ATTRIBUTE_X) - .ToUnit(XFA_UNIT_Pt), - pLayoutItem->m_pFormNode->GetMeasure(XFA_ATTRIBUTE_Y) - .ToUnit(XFA_UNIT_Pt)); - break; - } else if (pLayoutItem->m_pFormNode->GetClassID() == - XFA_ELEMENT_PageArea) { - break; - } - } - } - } - rtLayout.Set(sPos.x, sPos.y, sSize.x, sSize.y); -} - -CXFA_LayoutItem* CXFA_LayoutItem::GetParent() const { - return m_pParent; -} - -const CXFA_LayoutItem* CXFA_LayoutItem::GetFirst() const { - ASSERT(m_bIsContentLayoutItem); - const CXFA_ContentLayoutItem* pCurNode = - static_cast(this); - while (pCurNode->m_pPrev) { - pCurNode = pCurNode->m_pPrev; - } - return pCurNode; -} - -CXFA_LayoutItem* CXFA_LayoutItem::GetFirst() { - ASSERT(m_bIsContentLayoutItem); - CXFA_ContentLayoutItem* pCurNode = static_cast(this); - while (pCurNode->m_pPrev) { - pCurNode = pCurNode->m_pPrev; - } - return pCurNode; -} - -CXFA_LayoutItem* CXFA_LayoutItem::GetLast() { - ASSERT(m_bIsContentLayoutItem); - CXFA_ContentLayoutItem* pCurNode = static_cast(this); - while (pCurNode->m_pNext) { - pCurNode = pCurNode->m_pNext; - } - return pCurNode; -} - -const CXFA_LayoutItem* CXFA_LayoutItem::GetLast() const { - ASSERT(m_bIsContentLayoutItem); - const CXFA_ContentLayoutItem* pCurNode = - static_cast(this); - while (pCurNode->m_pNext) { - pCurNode = pCurNode->m_pNext; - } - return pCurNode; -} - -CXFA_LayoutItem* CXFA_LayoutItem::GetPrev() const { - ASSERT(m_bIsContentLayoutItem); - return static_cast(this)->m_pPrev; -} - -CXFA_LayoutItem* CXFA_LayoutItem::GetNext() const { - ASSERT(m_bIsContentLayoutItem); - return static_cast(this)->m_pNext; -} - -int32_t CXFA_LayoutItem::GetIndex() const { - ASSERT(m_bIsContentLayoutItem); - int32_t iIndex = 0; - const CXFA_ContentLayoutItem* pCurNode = - static_cast(this); - while (pCurNode->m_pPrev) { - pCurNode = pCurNode->m_pPrev; - ++iIndex; - } - return iIndex; -} - -int32_t CXFA_LayoutItem::GetCount() const { - ASSERT(m_bIsContentLayoutItem); - int32_t iCount = GetIndex() + 1; - const CXFA_ContentLayoutItem* pCurNode = - static_cast(this); - while (pCurNode->m_pNext) { - pCurNode = pCurNode->m_pNext; - iCount++; - } - return iCount; -} - -void CXFA_LayoutItem::AddChild(CXFA_LayoutItem* pChildItem) { - if (pChildItem->m_pParent) { - pChildItem->m_pParent->RemoveChild(pChildItem); - } - pChildItem->m_pParent = this; - if (m_pFirstChild == NULL) { - m_pFirstChild = pChildItem; - } else { - CXFA_LayoutItem* pExistingChildItem = m_pFirstChild; - while (pExistingChildItem->m_pNextSibling) { - pExistingChildItem = pExistingChildItem->m_pNextSibling; - } - pExistingChildItem->m_pNextSibling = pChildItem; - } -} -void CXFA_LayoutItem::AddHeadChild(CXFA_LayoutItem* pChildItem) { - if (pChildItem->m_pParent) { - pChildItem->m_pParent->RemoveChild(pChildItem); - } - pChildItem->m_pParent = this; - if (m_pFirstChild == NULL) { - m_pFirstChild = pChildItem; - } else { - CXFA_LayoutItem* pExistingChildItem = m_pFirstChild; - m_pFirstChild = pChildItem; - m_pFirstChild->m_pNextSibling = pExistingChildItem; - } -} -void CXFA_LayoutItem::InsertChild(CXFA_LayoutItem* pBeforeItem, - CXFA_LayoutItem* pChildItem) { - if (pBeforeItem->m_pParent != this) { - return; - } - if (pChildItem->m_pParent) { - pChildItem->m_pParent = NULL; - } - pChildItem->m_pParent = this; - CXFA_LayoutItem* pExistingChildItem = pBeforeItem->m_pNextSibling; - pBeforeItem->m_pNextSibling = pChildItem; - pChildItem->m_pNextSibling = pExistingChildItem; -} -void CXFA_LayoutItem::RemoveChild(CXFA_LayoutItem* pChildItem) { - if (pChildItem->m_pParent != this) { - return; - } - if (m_pFirstChild == pChildItem) { - m_pFirstChild = pChildItem->m_pNextSibling; - } else { - CXFA_LayoutItem* pExistingChildItem = m_pFirstChild; - while (pExistingChildItem && - pExistingChildItem->m_pNextSibling != pChildItem) { - pExistingChildItem = pExistingChildItem->m_pNextSibling; - } - if (pExistingChildItem) { - pExistingChildItem->m_pNextSibling = pChildItem->m_pNextSibling; - } - } - pChildItem->m_pNextSibling = NULL; - pChildItem->m_pParent = NULL; -} -CXFA_ContentLayoutItem* CXFA_ItemLayoutProcessor::ExtractLayoutItem() { - CXFA_ContentLayoutItem* pLayoutItem = m_pLayoutItem; - if (pLayoutItem) { - m_pLayoutItem = (CXFA_ContentLayoutItem*)pLayoutItem->m_pNextSibling; - pLayoutItem->m_pNextSibling = NULL; - } - if (m_nCurChildNodeStage == XFA_ItemLayoutProcessorStages_Done && - ToContentLayoutItem(m_pOldLayoutItem)) { - if (m_pOldLayoutItem->m_pPrev) { - m_pOldLayoutItem->m_pPrev->m_pNext = NULL; - } - IXFA_Notify* pNotify = - m_pOldLayoutItem->m_pFormNode->GetDocument()->GetParser()->GetNotify(); - IXFA_DocLayout* pDocLayout = - m_pOldLayoutItem->m_pFormNode->GetDocument()->GetDocLayout(); - CXFA_ContentLayoutItem* pOldLayoutItem = m_pOldLayoutItem; - while (pOldLayoutItem) { - CXFA_ContentLayoutItem* pNextOldLayoutItem = pOldLayoutItem->m_pNext; - pNotify->OnLayoutEvent(pDocLayout, pOldLayoutItem, - XFA_LAYOUTEVENT_ItemRemoving); - delete pOldLayoutItem; - pOldLayoutItem = pNextOldLayoutItem; - } - m_pOldLayoutItem = NULL; - } - return pLayoutItem; -} -static FX_BOOL XFA_ItemLayoutProcessor_FindBreakNode( - CXFA_Node* pContainerNode, - CXFA_Node*& pCurActionNode, - XFA_ItemLayoutProcessorStages& nCurStage, - FX_BOOL bBreakBefore) { - FX_BOOL bFindRs = FALSE; - for (CXFA_Node* pBreakNode = pContainerNode; pBreakNode; - pBreakNode = pBreakNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { - XFA_ATTRIBUTE eAttributeType = XFA_ATTRIBUTE_Before; - if (!bBreakBefore) { - eAttributeType = XFA_ATTRIBUTE_After; - } - switch (pBreakNode->GetClassID()) { - case XFA_ELEMENT_BreakBefore: { - if (bBreakBefore) { - pCurActionNode = pBreakNode; - nCurStage = XFA_ItemLayoutProcessorStages_BreakBefore; - bFindRs = TRUE; - } - } break; - case XFA_ELEMENT_BreakAfter: { - if (!bBreakBefore) { - pCurActionNode = pBreakNode; - nCurStage = XFA_ItemLayoutProcessorStages_BreakAfter; - bFindRs = TRUE; - } - } break; - case XFA_ELEMENT_Break: - if (pBreakNode->GetEnum(eAttributeType) != XFA_ATTRIBUTEENUM_Auto) { - pCurActionNode = pBreakNode; - nCurStage = XFA_ItemLayoutProcessorStages_BreakBefore; - if (!bBreakBefore) { - nCurStage = XFA_ItemLayoutProcessorStages_BreakAfter; - } - bFindRs = TRUE; - break; - } - default: - break; - } - if (bFindRs) { - break; - } - } - return bFindRs; -} -static void XFA_DeleteLayoutGeneratedNode(CXFA_Node* pGenerateNode) { - IXFA_Notify* pNotify = pGenerateNode->GetDocument()->GetParser()->GetNotify(); - IXFA_DocLayout* pDocLayout = pGenerateNode->GetDocument()->GetDocLayout(); - CXFA_NodeIteratorTemplate sIterator( - pGenerateNode); - for (CXFA_Node* pNode = sIterator.GetCurrent(); pNode; - pNode = sIterator.MoveToNext()) { - CXFA_ContentLayoutItem* pCurLayoutItem = - (CXFA_ContentLayoutItem*)pNode->GetUserData(XFA_LAYOUTITEMKEY); - CXFA_ContentLayoutItem* pNextLayoutItem = NULL; - while (pCurLayoutItem) { - pNextLayoutItem = pCurLayoutItem->m_pNext; - pNotify->OnLayoutEvent(pDocLayout, pCurLayoutItem, - XFA_LAYOUTEVENT_ItemRemoving); - delete pCurLayoutItem; - pCurLayoutItem = pNextLayoutItem; - } - } - pGenerateNode->GetNodeItem(XFA_NODEITEM_Parent)->RemoveChild(pGenerateNode); -} -void CXFA_ItemLayoutProcessor::XFA_ItemLayoutProcessor_GotoNextContainerNode( - CXFA_Node*& pCurActionNode, - XFA_ItemLayoutProcessorStages& nCurStage, - CXFA_Node* pParentContainer, - FX_BOOL bUsePageBreak) { - CXFA_Node* pEntireContainer = pParentContainer; - CXFA_Node* pChildContainer = XFA_LAYOUT_INVALIDNODE; - switch (nCurStage) { - case XFA_ItemLayoutProcessorStages_BreakBefore: - case XFA_ItemLayoutProcessorStages_BreakAfter: { - pChildContainer = pCurActionNode->GetNodeItem(XFA_NODEITEM_Parent); - } break; - case XFA_ItemLayoutProcessorStages_Keep: - case XFA_ItemLayoutProcessorStages_Container: - pChildContainer = pCurActionNode; - break; - default: - pChildContainer = XFA_LAYOUT_INVALIDNODE; - break; - } - switch (nCurStage) { - case XFA_ItemLayoutProcessorStages_Keep: { - CXFA_Node* pBreakAfterNode = - pChildContainer->GetNodeItem(XFA_NODEITEM_FirstChild); - if (!m_bKeepBreakFinish && - XFA_ItemLayoutProcessor_FindBreakNode(pBreakAfterNode, pCurActionNode, - nCurStage, FALSE)) { - return; - } - goto CheckNextChildContainer; - } - case XFA_ItemLayoutProcessorStages_None: { - pCurActionNode = XFA_LAYOUT_INVALIDNODE; - case XFA_ItemLayoutProcessorStages_BookendLeader: - for (CXFA_Node* pBookendNode = - pCurActionNode == XFA_LAYOUT_INVALIDNODE - ? pEntireContainer->GetNodeItem(XFA_NODEITEM_FirstChild) - : pCurActionNode->GetNodeItem(XFA_NODEITEM_NextSibling); - pBookendNode; pBookendNode = pBookendNode->GetNodeItem( - XFA_NODEITEM_NextSibling)) { - switch (pBookendNode->GetClassID()) { - case XFA_ELEMENT_Bookend: - case XFA_ELEMENT_Break: - pCurActionNode = pBookendNode; - nCurStage = XFA_ItemLayoutProcessorStages_BookendLeader; - return; - default: - break; - } - } - } - { - pCurActionNode = XFA_LAYOUT_INVALIDNODE; - case XFA_ItemLayoutProcessorStages_BreakBefore: - if (pCurActionNode != XFA_LAYOUT_INVALIDNODE) { - CXFA_Node* pBreakBeforeNode = - pCurActionNode->GetNodeItem(XFA_NODEITEM_NextSibling); - if (!m_bKeepBreakFinish && - XFA_ItemLayoutProcessor_FindBreakNode( - pBreakBeforeNode, pCurActionNode, nCurStage, TRUE)) { - return; - } - if (m_bIsProcessKeep) { - if (ProcessKeepNodesForBreakBefore(pCurActionNode, nCurStage, - pChildContainer)) { - return; - } - goto CheckNextChildContainer; - } - pCurActionNode = pChildContainer; - nCurStage = XFA_ItemLayoutProcessorStages_Container; - return; - } - goto CheckNextChildContainer; - } - case XFA_ItemLayoutProcessorStages_Container: { - pCurActionNode = XFA_LAYOUT_INVALIDNODE; - case XFA_ItemLayoutProcessorStages_BreakAfter: { - if (pCurActionNode == XFA_LAYOUT_INVALIDNODE) { - CXFA_Node* pBreakAfterNode = - pChildContainer->GetNodeItem(XFA_NODEITEM_FirstChild); - if (!m_bKeepBreakFinish && - XFA_ItemLayoutProcessor_FindBreakNode( - pBreakAfterNode, pCurActionNode, nCurStage, FALSE)) { - return; - } - } else { - CXFA_Node* pBreakAfterNode = - pCurActionNode->GetNodeItem(XFA_NODEITEM_NextSibling); - if (XFA_ItemLayoutProcessor_FindBreakNode( - pBreakAfterNode, pCurActionNode, nCurStage, FALSE)) { - return; - } - } - goto CheckNextChildContainer; - } - } - CheckNextChildContainer : { - CXFA_Node* pNextChildContainer = - pChildContainer == XFA_LAYOUT_INVALIDNODE - ? pEntireContainer->GetNodeItem(XFA_NODEITEM_FirstChild, - XFA_OBJECTTYPE_ContainerNode) - : pChildContainer->GetNodeItem(XFA_NODEITEM_NextSibling, - XFA_OBJECTTYPE_ContainerNode); - while (pNextChildContainer && - pNextChildContainer->HasFlag(XFA_NODEFLAG_LayoutGeneratedNode)) { - CXFA_Node* pSaveNode = pNextChildContainer; - pNextChildContainer = pNextChildContainer->GetNodeItem( - XFA_NODEITEM_NextSibling, XFA_OBJECTTYPE_ContainerNode); - if (pSaveNode->HasFlag(XFA_NODEFLAG_UnusedNode)) { - XFA_DeleteLayoutGeneratedNode(pSaveNode); - } - } - if (!pNextChildContainer) { - goto NoMoreChildContainer; - } - FX_BOOL bLastKeep = FALSE; - if (ProcessKeepNodesForCheckNext(pCurActionNode, nCurStage, - pNextChildContainer, bLastKeep)) { - return; - } - if (!m_bKeepBreakFinish && !bLastKeep && - XFA_ItemLayoutProcessor_FindBreakNode( - pNextChildContainer->GetNodeItem(XFA_NODEITEM_FirstChild), - pCurActionNode, nCurStage, TRUE)) { - return; - } - pCurActionNode = pNextChildContainer; - if (m_bIsProcessKeep) { - nCurStage = XFA_ItemLayoutProcessorStages_Keep; - } else { - nCurStage = XFA_ItemLayoutProcessorStages_Container; - } - return; - } - NoMoreChildContainer : { - pCurActionNode = XFA_LAYOUT_INVALIDNODE; - case XFA_ItemLayoutProcessorStages_BookendTrailer: - for (CXFA_Node* pBookendNode = - pCurActionNode == XFA_LAYOUT_INVALIDNODE - ? pEntireContainer->GetNodeItem(XFA_NODEITEM_FirstChild) - : pCurActionNode->GetNodeItem(XFA_NODEITEM_NextSibling); - pBookendNode; pBookendNode = pBookendNode->GetNodeItem( - XFA_NODEITEM_NextSibling)) { - switch (pBookendNode->GetClassID()) { - case XFA_ELEMENT_Bookend: - case XFA_ELEMENT_Break: - pCurActionNode = pBookendNode; - nCurStage = XFA_ItemLayoutProcessorStages_BookendTrailer; - return; - default: - break; - } - } - } - default: - pCurActionNode = NULL; - nCurStage = XFA_ItemLayoutProcessorStages_Done; - } -} -FX_BOOL CXFA_ItemLayoutProcessor::ProcessKeepNodesForCheckNext( - CXFA_Node*& pCurActionNode, - XFA_ItemLayoutProcessorStages& nCurStage, - CXFA_Node*& pNextContainer, - FX_BOOL& bLastKeepNode) { - const bool bCanSplit = pNextContainer->GetIntact() == XFA_ATTRIBUTEENUM_None; - FX_BOOL bNextKeep = FALSE; - if (XFA_ExistContainerKeep(pNextContainer, FALSE)) { - bNextKeep = TRUE; - } - if (bNextKeep && !bCanSplit) { - if (!m_bIsProcessKeep && !m_bKeepBreakFinish) { - m_pKeepHeadNode = pNextContainer; - m_bIsProcessKeep = TRUE; - } - } else { - if (m_bIsProcessKeep && m_pKeepHeadNode) { - m_pKeepTailNode = pNextContainer; - if (!m_bKeepBreakFinish && - XFA_ItemLayoutProcessor_FindBreakNode( - pNextContainer->GetNodeItem(XFA_NODEITEM_FirstChild), - pCurActionNode, nCurStage, TRUE)) { - return TRUE; - } else { - pNextContainer = m_pKeepHeadNode; - m_bKeepBreakFinish = TRUE; - m_pKeepHeadNode = NULL; - m_pKeepTailNode = NULL; - m_bIsProcessKeep = FALSE; - } - } else { - if (m_bKeepBreakFinish) { - bLastKeepNode = TRUE; - } - m_bKeepBreakFinish = FALSE; - } - } - return FALSE; -} -FX_BOOL CXFA_ItemLayoutProcessor::ProcessKeepNodesForBreakBefore( - CXFA_Node*& pCurActionNode, - XFA_ItemLayoutProcessorStages& nCurStage, - CXFA_Node* pContainerNode) { - if (m_pKeepTailNode == pContainerNode) { - pCurActionNode = m_pKeepHeadNode; - m_bKeepBreakFinish = TRUE; - m_pKeepHeadNode = NULL; - m_pKeepTailNode = NULL; - m_bIsProcessKeep = FALSE; - nCurStage = XFA_ItemLayoutProcessorStages_Container; - return TRUE; - } - CXFA_Node* pBreakAfterNode = - pContainerNode->GetNodeItem(XFA_NODEITEM_FirstChild); - if (XFA_ItemLayoutProcessor_FindBreakNode(pBreakAfterNode, pCurActionNode, - nCurStage, FALSE)) { - return TRUE; - } - return FALSE; -} -FX_BOOL XFA_ItemLayoutProcessor_IsTakingSpace(CXFA_Node* pNode) { - XFA_ATTRIBUTEENUM ePresence = pNode->GetEnum(XFA_ATTRIBUTE_Presence); - return ePresence == XFA_ATTRIBUTEENUM_Visible || - ePresence == XFA_ATTRIBUTEENUM_Invisible; -} -static inline void XFA_ItemLayoutProcessor_CalculateContainerSpecfiedSize( - CXFA_Node* pFormNode, - FX_FLOAT& fContainerWidth, - FX_FLOAT& fContainerHeight, - FX_BOOL& bContainerWidthAutoSize, - FX_BOOL& bContainerHeightAutoSize) { - fContainerWidth = 0; - fContainerHeight = 0; - bContainerWidthAutoSize = TRUE; - bContainerHeightAutoSize = TRUE; - XFA_ELEMENT eClassID = pFormNode->GetClassID(); - CXFA_Measurement mTmpValue; - if (bContainerWidthAutoSize && - (eClassID == XFA_ELEMENT_Subform || eClassID == XFA_ELEMENT_ExclGroup) && - pFormNode->TryMeasure(XFA_ATTRIBUTE_W, mTmpValue, FALSE) && - mTmpValue.GetValue() > XFA_LAYOUT_FLOAT_PERCISION) { - fContainerWidth = mTmpValue.ToUnit(XFA_UNIT_Pt); - bContainerWidthAutoSize = FALSE; - } - if (bContainerHeightAutoSize && - (eClassID == XFA_ELEMENT_Subform || eClassID == XFA_ELEMENT_ExclGroup) && - pFormNode->TryMeasure(XFA_ATTRIBUTE_H, mTmpValue, FALSE) && - mTmpValue.GetValue() > XFA_LAYOUT_FLOAT_PERCISION) { - fContainerHeight = mTmpValue.ToUnit(XFA_UNIT_Pt); - bContainerHeightAutoSize = FALSE; - } - if (bContainerWidthAutoSize && eClassID == XFA_ELEMENT_Subform && - pFormNode->TryMeasure(XFA_ATTRIBUTE_MaxW, mTmpValue, FALSE) && - mTmpValue.GetValue() > XFA_LAYOUT_FLOAT_PERCISION) { - fContainerWidth = mTmpValue.ToUnit(XFA_UNIT_Pt); - bContainerWidthAutoSize = FALSE; - } - if (bContainerHeightAutoSize && eClassID == XFA_ELEMENT_Subform && - pFormNode->TryMeasure(XFA_ATTRIBUTE_MaxH, mTmpValue, FALSE) && - mTmpValue.GetValue() > XFA_LAYOUT_FLOAT_PERCISION) { - fContainerHeight = mTmpValue.ToUnit(XFA_UNIT_Pt); - bContainerHeightAutoSize = FALSE; - } -} -static inline void -XFA_ItemLayoutProcessor_CalculateContainerComponentSizeFromContentSize( - CXFA_Node* pFormNode, - FX_BOOL bContainerWidthAutoSize, - FX_FLOAT fContentCalculatedWidth, - FX_FLOAT& fContainerWidth, - FX_BOOL bContainerHeightAutoSize, - FX_FLOAT fContentCalculatedHeight, - FX_FLOAT& fContainerHeight) { - CXFA_Node* pMarginNode = pFormNode->GetFirstChildByClass(XFA_ELEMENT_Margin); - CXFA_Measurement mTmpValue; - if (bContainerWidthAutoSize) { - fContainerWidth = fContentCalculatedWidth; - if (pMarginNode) { - if (pMarginNode->TryMeasure(XFA_ATTRIBUTE_LeftInset, mTmpValue, FALSE)) { - fContainerWidth += mTmpValue.ToUnit(XFA_UNIT_Pt); - } - if (pMarginNode->TryMeasure(XFA_ATTRIBUTE_RightInset, mTmpValue, FALSE)) { - fContainerWidth += mTmpValue.ToUnit(XFA_UNIT_Pt); - } - } - } - if (bContainerHeightAutoSize) { - fContainerHeight = fContentCalculatedHeight; - if (pMarginNode) { - if (pMarginNode->TryMeasure(XFA_ATTRIBUTE_TopInset, mTmpValue, FALSE)) { - fContainerHeight += mTmpValue.ToUnit(XFA_UNIT_Pt); - } - if (pMarginNode->TryMeasure(XFA_ATTRIBUTE_BottomInset, mTmpValue, - FALSE)) { - fContainerHeight += mTmpValue.ToUnit(XFA_UNIT_Pt); - } - } - } -} -void CXFA_ItemLayoutProcessor::CalculatePositionedContainerPos( - CXFA_Node* pNode, - FX_FLOAT fWidth, - FX_FLOAT fHeight, - FX_FLOAT& fAbsoluteX, - FX_FLOAT& fAbsoluteY) { - XFA_ATTRIBUTEENUM eAnchorType = pNode->GetEnum(XFA_ATTRIBUTE_AnchorType); - int32_t nAnchorType = 0; - switch (eAnchorType) { - case XFA_ATTRIBUTEENUM_TopLeft: - nAnchorType = 0; - break; - case XFA_ATTRIBUTEENUM_TopCenter: - nAnchorType = 1; - break; - case XFA_ATTRIBUTEENUM_TopRight: - nAnchorType = 2; - break; - case XFA_ATTRIBUTEENUM_MiddleLeft: - nAnchorType = 3; - break; - case XFA_ATTRIBUTEENUM_MiddleCenter: - nAnchorType = 4; - break; - case XFA_ATTRIBUTEENUM_MiddleRight: - nAnchorType = 5; - break; - case XFA_ATTRIBUTEENUM_BottomLeft: - nAnchorType = 6; - break; - case XFA_ATTRIBUTEENUM_BottomCenter: - nAnchorType = 7; - break; - case XFA_ATTRIBUTEENUM_BottomRight: - nAnchorType = 8; - break; - default: - break; - } - static const uint8_t nNextPos[4][9] = {{0, 1, 2, 3, 4, 5, 6, 7, 8}, - {6, 3, 0, 7, 4, 1, 8, 5, 2}, - {8, 7, 6, 5, 4, 3, 2, 1, 0}, - {2, 5, 8, 1, 4, 7, 0, 3, 6}}; - - FX_FLOAT fAnchorX = pNode->GetMeasure(XFA_ATTRIBUTE_X).ToUnit(XFA_UNIT_Pt); - FX_FLOAT fAnchorY = pNode->GetMeasure(XFA_ATTRIBUTE_Y).ToUnit(XFA_UNIT_Pt); - int32_t nRotate = - FXSYS_round(pNode->GetMeasure(XFA_ATTRIBUTE_Rotate).GetValue()); - nRotate = XFA_MapRotation(nRotate) / 90; - int32_t nAbsoluteAnchorType = nNextPos[nRotate][nAnchorType]; - fAbsoluteX = fAnchorX; - fAbsoluteY = fAnchorY; - switch (nAbsoluteAnchorType / 3) { - case 1: - fAbsoluteY -= fHeight / 2; - break; - case 2: - fAbsoluteY -= fHeight; - break; - default: - break; - } - switch (nAbsoluteAnchorType % 3) { - case 1: - fAbsoluteX -= fWidth / 2; - break; - case 2: - fAbsoluteX -= fWidth; - break; - default: - break; - } -} -FX_BOOL CXFA_ItemLayoutProcessor::IncrementRelayoutNode( - CXFA_LayoutProcessor* pLayoutProcessor, - CXFA_Node* pNode, - CXFA_Node* pParentNode) { - return FALSE; -} -void CXFA_ItemLayoutProcessor::DoLayoutPageArea( - CXFA_ContainerLayoutItem* pPageAreaLayoutItem) { - CXFA_Node* pFormNode = pPageAreaLayoutItem->m_pFormNode; - CXFA_Node* pCurChildNode = XFA_LAYOUT_INVALIDNODE; - XFA_ItemLayoutProcessorStages nCurChildNodeStage = - XFA_ItemLayoutProcessorStages_None; - CXFA_LayoutItem* pBeforeItem = NULL; - for (XFA_ItemLayoutProcessor_GotoNextContainerNode( - pCurChildNode, nCurChildNodeStage, pFormNode, FALSE); - pCurChildNode; XFA_ItemLayoutProcessor_GotoNextContainerNode( - pCurChildNode, nCurChildNodeStage, pFormNode, FALSE)) { - if (nCurChildNodeStage != XFA_ItemLayoutProcessorStages_Container) { - continue; - } - if (pCurChildNode->GetClassID() == XFA_ELEMENT_Variables) { - continue; - } - CXFA_ItemLayoutProcessor* pProcessor = - new CXFA_ItemLayoutProcessor(pCurChildNode, NULL); - pProcessor->DoLayout(FALSE, XFA_LAYOUT_FLOAT_MAX); - if (!pProcessor->HasLayoutItem()) { - delete pProcessor; - continue; - } - FX_FLOAT fWidth, fHeight; - pProcessor->GetCurrentComponentSize(fWidth, fHeight); - FX_FLOAT fAbsoluteX = 0, fAbsoluteY = 0; - CalculatePositionedContainerPos(pCurChildNode, fWidth, fHeight, fAbsoluteX, - fAbsoluteY); - pProcessor->SetCurrentComponentPos(fAbsoluteX, fAbsoluteY); - CXFA_LayoutItem* pProcessItem = pProcessor->ExtractLayoutItem(); - if (pBeforeItem == NULL) { - pPageAreaLayoutItem->AddHeadChild(pProcessItem); - } else { - pPageAreaLayoutItem->InsertChild(pBeforeItem, pProcessItem); - } - pBeforeItem = pProcessItem; - delete pProcessor; - } - pBeforeItem = NULL; - CXFA_LayoutItem* pLayoutItem = pPageAreaLayoutItem->m_pFirstChild; - while (pLayoutItem) { - if (!pLayoutItem->IsContentLayoutItem() || - pLayoutItem->m_pFormNode->GetClassID() != XFA_ELEMENT_Draw) { - pLayoutItem = pLayoutItem->m_pNextSibling; - continue; - } - if (pLayoutItem->m_pFormNode->GetClassID() == XFA_ELEMENT_Draw) { - CXFA_LayoutItem* pNextLayoutItem = pLayoutItem->m_pNextSibling; - pPageAreaLayoutItem->RemoveChild(pLayoutItem); - if (pBeforeItem == NULL) { - pPageAreaLayoutItem->AddHeadChild(pLayoutItem); - } else { - pPageAreaLayoutItem->InsertChild(pBeforeItem, pLayoutItem); - } - pBeforeItem = pLayoutItem; - pLayoutItem = pNextLayoutItem; - } - } -} -void CXFA_ItemLayoutProcessor::DoLayoutPositionedContainer( - CXFA_LayoutContext* pContext) { - if (m_pLayoutItem) - return; - - m_pLayoutItem = CreateContentLayoutItem(m_pFormNode); - FX_BOOL bIgnoreXY = (m_pFormNode->GetEnum(XFA_ATTRIBUTE_Layout) != - XFA_ATTRIBUTEENUM_Position); - FX_FLOAT fContainerWidth = 0, fContainerHeight = 0; - FX_BOOL bContainerWidthAutoSize = TRUE, bContainerHeightAutoSize = TRUE; - XFA_ItemLayoutProcessor_CalculateContainerSpecfiedSize( - m_pFormNode, fContainerWidth, fContainerHeight, bContainerWidthAutoSize, - bContainerHeightAutoSize); - FX_FLOAT fContentCalculatedWidth = 0, fContentCalculatedHeight = 0; - FX_FLOAT fHiddenContentCalculatedWidth = 0, - fHiddenContentCalculatedHeight = 0; - if (m_pCurChildNode == XFA_LAYOUT_INVALIDNODE) { - XFA_ItemLayoutProcessor_GotoNextContainerNode( - m_pCurChildNode, m_nCurChildNodeStage, m_pFormNode, FALSE); - } - int32_t iColIndex = 0; - for (; m_pCurChildNode; XFA_ItemLayoutProcessor_GotoNextContainerNode( - m_pCurChildNode, m_nCurChildNodeStage, m_pFormNode, FALSE)) { - if (m_nCurChildNodeStage != XFA_ItemLayoutProcessorStages_Container) { - continue; - } - if (m_pCurChildNode->GetClassID() == XFA_ELEMENT_Variables) { - continue; - } - CXFA_ItemLayoutProcessor* pProcessor = - new CXFA_ItemLayoutProcessor(m_pCurChildNode, m_pPageMgr); - if (pContext && pContext->m_prgSpecifiedColumnWidths) { - int32_t iColSpan = m_pCurChildNode->GetInteger(XFA_ATTRIBUTE_ColSpan); - if (iColSpan <= - pContext->m_prgSpecifiedColumnWidths->GetSize() - iColIndex) { - pContext->m_fCurColumnWidth = 0; - pContext->m_bCurColumnWidthAvaiable = TRUE; - if (iColSpan == -1) - iColSpan = pContext->m_prgSpecifiedColumnWidths->GetSize(); - for (int32_t i = 0; iColIndex + i < iColSpan; ++i) { - pContext->m_fCurColumnWidth += - pContext->m_prgSpecifiedColumnWidths->GetAt(iColIndex + i); - } - if (pContext->m_fCurColumnWidth == 0) - pContext->m_bCurColumnWidthAvaiable = FALSE; - iColIndex += iColSpan >= 0 ? iColSpan : 0; - } - } - pProcessor->DoLayout(FALSE, XFA_LAYOUT_FLOAT_MAX, XFA_LAYOUT_FLOAT_MAX, - pContext); - if (!pProcessor->HasLayoutItem()) { - delete pProcessor; - continue; - } - FX_FLOAT fWidth, fHeight; - pProcessor->GetCurrentComponentSize(fWidth, fHeight); - FX_BOOL bChangeParentSize = FALSE; - if (XFA_ItemLayoutProcessor_IsTakingSpace(m_pCurChildNode)) { - bChangeParentSize = TRUE; - } - FX_FLOAT fAbsoluteX = 0, fAbsoluteY = 0; - if (!bIgnoreXY) { - CalculatePositionedContainerPos(m_pCurChildNode, fWidth, fHeight, - fAbsoluteX, fAbsoluteY); - } - pProcessor->SetCurrentComponentPos(fAbsoluteX, fAbsoluteY); - if (bContainerWidthAutoSize) { - FX_FLOAT fChildSuppliedWidth = fAbsoluteX + fWidth; - if (bChangeParentSize) { - if (fContentCalculatedWidth < fChildSuppliedWidth) { - fContentCalculatedWidth = fChildSuppliedWidth; - } - } else { - if (fHiddenContentCalculatedWidth < fChildSuppliedWidth && - m_pCurChildNode->GetClassID() != XFA_ELEMENT_Subform) { - fHiddenContentCalculatedWidth = fChildSuppliedWidth; - } - } - } - if (bContainerHeightAutoSize) { - FX_FLOAT fChildSuppliedHeight = fAbsoluteY + fHeight; - if (bChangeParentSize) { - if (fContentCalculatedHeight < fChildSuppliedHeight) { - fContentCalculatedHeight = fChildSuppliedHeight; - } - } else { - if (fHiddenContentCalculatedHeight < fChildSuppliedHeight && - m_pCurChildNode->GetClassID() != XFA_ELEMENT_Subform) { - fHiddenContentCalculatedHeight = fChildSuppliedHeight; - } - } - } - m_pLayoutItem->AddChild(pProcessor->ExtractLayoutItem()); - delete pProcessor; - } - XFA_VERSION eVersion = m_pFormNode->GetDocument()->GetCurVersionMode(); - if (fContentCalculatedWidth == 0 && eVersion < XFA_VERSION_207) { - fContentCalculatedWidth = fHiddenContentCalculatedWidth; - } - if (fContentCalculatedHeight == 0 && eVersion < XFA_VERSION_207) { - fContentCalculatedHeight = fHiddenContentCalculatedHeight; - } - XFA_ItemLayoutProcessor_CalculateContainerComponentSizeFromContentSize( - m_pFormNode, bContainerWidthAutoSize, fContentCalculatedWidth, - fContainerWidth, bContainerHeightAutoSize, fContentCalculatedHeight, - fContainerHeight); - SetCurrentComponentSize(fContainerWidth, fContainerHeight); -} -static inline void XFA_ItemLayoutProcessor_UpdateWidgetSize( - CXFA_ContentLayoutItem* pLayoutItem, - FX_FLOAT& fWidth, - FX_FLOAT& fHeight) { - CXFA_Node* pNode = pLayoutItem->m_pFormNode; - ASSERT(pNode); - XFA_ELEMENT eClassID = pNode->GetClassID(); - switch (eClassID) { - case XFA_ELEMENT_Subform: - case XFA_ELEMENT_Area: - case XFA_ELEMENT_ExclGroup: - case XFA_ELEMENT_SubformSet: { - if (fWidth < -XFA_LAYOUT_FLOAT_PERCISION) { - fWidth = pLayoutItem->m_sSize.x; - } - if (fHeight < -XFA_LAYOUT_FLOAT_PERCISION) { - fHeight = pLayoutItem->m_sSize.y; - } - break; - } - case XFA_ELEMENT_Draw: - case XFA_ELEMENT_Field: { - pNode->GetDocument()->GetParser()->GetNotify()->StartFieldDrawLayout( - pNode, fWidth, fHeight); - break; - } - default: - ASSERT(FALSE); - } -} -static inline void XFA_ItemLayoutProcessor_RelocateTableRowCells( - CXFA_ContentLayoutItem* pLayoutRow, - const CFX_ArrayTemplate& rgSpecifiedColumnWidths, - XFA_ATTRIBUTEENUM eLayout) { - FX_FLOAT fContainerWidth = 0, fContainerHeight = 0; - FX_BOOL bContainerWidthAutoSize = TRUE, bContainerHeightAutoSize = TRUE; - XFA_ItemLayoutProcessor_CalculateContainerSpecfiedSize( - pLayoutRow->m_pFormNode, fContainerWidth, fContainerHeight, - bContainerWidthAutoSize, bContainerHeightAutoSize); - CXFA_Node* pMarginNode = - pLayoutRow->m_pFormNode->GetFirstChildByClass(XFA_ELEMENT_Margin); - FX_FLOAT fLeftInset = 0, fTopInset = 0, fRightInset = 0, fBottomInset = 0; - if (pMarginNode) { - fLeftInset = - pMarginNode->GetMeasure(XFA_ATTRIBUTE_LeftInset).ToUnit(XFA_UNIT_Pt); - fTopInset = - pMarginNode->GetMeasure(XFA_ATTRIBUTE_TopInset).ToUnit(XFA_UNIT_Pt); - fRightInset = - pMarginNode->GetMeasure(XFA_ATTRIBUTE_RightInset).ToUnit(XFA_UNIT_Pt); - fBottomInset = - pMarginNode->GetMeasure(XFA_ATTRIBUTE_BottomInset).ToUnit(XFA_UNIT_Pt); - } - FX_FLOAT fContentWidthLimit = - bContainerWidthAutoSize ? XFA_LAYOUT_FLOAT_MAX - : fContainerWidth - fLeftInset - fRightInset; - FX_FLOAT fContentCurrentHeight = - pLayoutRow->m_sSize.y - fTopInset - fBottomInset; - FX_FLOAT fContentCalculatedWidth = 0, fContentCalculatedHeight = 0; - FX_FLOAT fCurrentColX = 0; - int32_t nCurrentColIdx = 0; - FX_BOOL bMetWholeRowCell = FALSE; - for (CXFA_ContentLayoutItem* pLayoutChild = - (CXFA_ContentLayoutItem*)pLayoutRow->m_pFirstChild; - pLayoutChild; - pLayoutChild = (CXFA_ContentLayoutItem*)pLayoutChild->m_pNextSibling) { - int32_t nOriginalColSpan = - pLayoutChild->m_pFormNode->GetInteger(XFA_ATTRIBUTE_ColSpan); - int32_t nColSpan = nOriginalColSpan; - FX_FLOAT fColSpanWidth = 0; - if (nColSpan == -1 || - nCurrentColIdx + nColSpan > rgSpecifiedColumnWidths.GetSize()) { - nColSpan = rgSpecifiedColumnWidths.GetSize() - nCurrentColIdx; - } - for (int32_t i = 0; i < nColSpan; i++) { - fColSpanWidth += rgSpecifiedColumnWidths[nCurrentColIdx + i]; - } - if (nColSpan != nOriginalColSpan) { - fColSpanWidth = bMetWholeRowCell ? 0 : std::max(fColSpanWidth, - pLayoutChild->m_sSize.y); - } - if (nOriginalColSpan == -1) { - bMetWholeRowCell = TRUE; - } - pLayoutChild->m_sPos = CFX_PointF(fCurrentColX, 0); - pLayoutChild->m_sSize.x = fColSpanWidth; - if (XFA_ItemLayoutProcessor_IsTakingSpace(pLayoutChild->m_pFormNode)) { - fCurrentColX += fColSpanWidth; - nCurrentColIdx += nColSpan; - FX_FLOAT fNewHeight = - bContainerHeightAutoSize ? -1 : fContentCurrentHeight; - XFA_ItemLayoutProcessor_UpdateWidgetSize(pLayoutChild, fColSpanWidth, - fNewHeight); - pLayoutChild->m_sSize.y = fNewHeight; - if (bContainerHeightAutoSize) { - FX_FLOAT fChildSuppliedHeight = pLayoutChild->m_sSize.y; - if (fContentCalculatedHeight < fChildSuppliedHeight) { - fContentCalculatedHeight = fChildSuppliedHeight; - } - } - } - } - if (bContainerHeightAutoSize) { - for (CXFA_ContentLayoutItem* pLayoutChild = - (CXFA_ContentLayoutItem*)pLayoutRow->m_pFirstChild; - pLayoutChild; - pLayoutChild = (CXFA_ContentLayoutItem*)pLayoutChild->m_pNextSibling) { - XFA_ItemLayoutProcessor_UpdateWidgetSize( - pLayoutChild, pLayoutChild->m_sSize.x, fContentCalculatedHeight); - FX_FLOAT fOldChildHeight = pLayoutChild->m_sSize.y; - pLayoutChild->m_sSize.y = fContentCalculatedHeight; - CXFA_Node* pParaNode = - pLayoutChild->m_pFormNode->GetFirstChildByClass(XFA_ELEMENT_Para); - if (pParaNode && pLayoutChild->m_pFirstChild) { - FX_FLOAT fOffHeight = fContentCalculatedHeight - fOldChildHeight; - XFA_ATTRIBUTEENUM eVType = pParaNode->GetEnum(XFA_ATTRIBUTE_VAlign); - switch (eVType) { - case XFA_ATTRIBUTEENUM_Middle: - fOffHeight = fOffHeight / 2; - break; - case XFA_ATTRIBUTEENUM_Bottom: - break; - case XFA_ATTRIBUTEENUM_Top: - default: - fOffHeight = 0; - break; - } - if (fOffHeight > 0) { - for (CXFA_ContentLayoutItem* pInnerLayoutChild = - (CXFA_ContentLayoutItem*)pLayoutChild->m_pFirstChild; - pInnerLayoutChild; - pInnerLayoutChild = - (CXFA_ContentLayoutItem*)pInnerLayoutChild->m_pNextSibling) { - pInnerLayoutChild->m_sPos.y += fOffHeight; - } - } - } - } - } - if (bContainerWidthAutoSize) { - FX_FLOAT fChildSuppliedWidth = fCurrentColX; - if (fContentWidthLimit < XFA_LAYOUT_FLOAT_MAX && - fContentWidthLimit > fChildSuppliedWidth) { - fChildSuppliedWidth = fContentWidthLimit; - } - if (fContentCalculatedWidth < fChildSuppliedWidth) { - fContentCalculatedWidth = fChildSuppliedWidth; - } - } else { - fContentCalculatedWidth = fContainerWidth - fLeftInset - fRightInset; - } - if (pLayoutRow->m_pFormNode->GetEnum(XFA_ATTRIBUTE_Layout) == - XFA_ATTRIBUTEENUM_Rl_row) { - for (CXFA_ContentLayoutItem* pLayoutChild = - (CXFA_ContentLayoutItem*)pLayoutRow->m_pFirstChild; - pLayoutChild; - pLayoutChild = (CXFA_ContentLayoutItem*)pLayoutChild->m_pNextSibling) { - pLayoutChild->m_sPos.x = fContentCalculatedWidth - - pLayoutChild->m_sPos.x - pLayoutChild->m_sSize.x; - } - } - XFA_ItemLayoutProcessor_CalculateContainerComponentSizeFromContentSize( - pLayoutRow->m_pFormNode, bContainerWidthAutoSize, fContentCalculatedWidth, - fContainerWidth, bContainerHeightAutoSize, fContentCalculatedHeight, - fContainerHeight); - pLayoutRow->m_sSize = CFX_SizeF(fContainerWidth, fContainerHeight); -} -void CXFA_ItemLayoutProcessor::DoLayoutTableContainer(CXFA_Node* pLayoutNode) { - if (m_pLayoutItem) - return; - - if (pLayoutNode == NULL) { - pLayoutNode = m_pFormNode; - } - ASSERT(m_pCurChildNode == XFA_LAYOUT_INVALIDNODE); - m_pLayoutItem = CreateContentLayoutItem(m_pFormNode); - FX_FLOAT fContainerWidth = 0, fContainerHeight = 0; - FX_BOOL bContainerWidthAutoSize = TRUE, bContainerHeightAutoSize = TRUE; - XFA_ItemLayoutProcessor_CalculateContainerSpecfiedSize( - m_pFormNode, fContainerWidth, fContainerHeight, bContainerWidthAutoSize, - bContainerHeightAutoSize); - FX_FLOAT fContentCalculatedWidth = 0, fContentCalculatedHeight = 0; - CXFA_Node* pMarginNode = - m_pFormNode->GetFirstChildByClass(XFA_ELEMENT_Margin); - FX_FLOAT fLeftInset = 0; - FX_FLOAT fRightInset = 0; - if (pMarginNode) { - fLeftInset = - pMarginNode->GetMeasure(XFA_ATTRIBUTE_LeftInset).ToUnit(XFA_UNIT_Pt); - fRightInset = - pMarginNode->GetMeasure(XFA_ATTRIBUTE_RightInset).ToUnit(XFA_UNIT_Pt); - } - FX_FLOAT fContentWidthLimit = - bContainerWidthAutoSize ? XFA_LAYOUT_FLOAT_MAX - : fContainerWidth - fLeftInset - fRightInset; - CFX_WideStringC wsColumnWidths; - if (pLayoutNode->TryCData(XFA_ATTRIBUTE_ColumnWidths, wsColumnWidths)) { - CFX_WideStringArray widths; - if (FX_SeparateStringW(wsColumnWidths.GetPtr(), wsColumnWidths.GetLength(), - L' ', widths) > 0) { - int32_t iCols = widths.GetSize(); - CFX_WideString wsWidth; - for (int32_t i = 0; i < iCols; i++) { - wsWidth = widths[i]; - wsWidth.TrimLeft(L' '); - if (!wsWidth.IsEmpty()) { - CXFA_Measurement measure(wsWidth); - m_rgSpecifiedColumnWidths.Add(measure.ToUnit(XFA_UNIT_Pt)); - } - } - } - } - int32_t iSpecifiedColumnCount = m_rgSpecifiedColumnWidths.GetSize(); - CXFA_LayoutContext layoutContext; - layoutContext.m_prgSpecifiedColumnWidths = &m_rgSpecifiedColumnWidths; - CXFA_LayoutContext* pLayoutContext = - iSpecifiedColumnCount > 0 ? &layoutContext : NULL; - if (m_pCurChildNode == XFA_LAYOUT_INVALIDNODE) { - XFA_ItemLayoutProcessor_GotoNextContainerNode( - m_pCurChildNode, m_nCurChildNodeStage, m_pFormNode, FALSE); - } - for (; m_pCurChildNode; XFA_ItemLayoutProcessor_GotoNextContainerNode( - m_pCurChildNode, m_nCurChildNodeStage, m_pFormNode, FALSE)) { - layoutContext.m_bCurColumnWidthAvaiable = FALSE; - layoutContext.m_fCurColumnWidth = 0; - if (m_nCurChildNodeStage != XFA_ItemLayoutProcessorStages_Container) { - continue; - } - CXFA_ItemLayoutProcessor* pProcessor = - new CXFA_ItemLayoutProcessor(m_pCurChildNode, m_pPageMgr); - pProcessor->DoLayout(FALSE, XFA_LAYOUT_FLOAT_MAX, XFA_LAYOUT_FLOAT_MAX, - pLayoutContext); - if (!pProcessor->HasLayoutItem()) { - delete pProcessor; - continue; - } - m_pLayoutItem->AddChild(pProcessor->ExtractLayoutItem()); - delete pProcessor; - } - int32_t iRowCount = 0, iColCount = 0; - { - CFX_ArrayTemplate rgRowItems; - CFX_ArrayTemplate rgRowItemsSpan; - CFX_ArrayTemplate rgRowItemsWidth; - for (CXFA_ContentLayoutItem* pLayoutChild = - (CXFA_ContentLayoutItem*)m_pLayoutItem->m_pFirstChild; - pLayoutChild; - pLayoutChild = (CXFA_ContentLayoutItem*)pLayoutChild->m_pNextSibling) { - if (pLayoutChild->m_pFormNode->GetClassID() != XFA_ELEMENT_Subform) { - continue; - } - if (!XFA_ItemLayoutProcessor_IsTakingSpace(pLayoutChild->m_pFormNode)) { - continue; - } - XFA_ATTRIBUTEENUM eLayout = - pLayoutChild->m_pFormNode->GetEnum(XFA_ATTRIBUTE_Layout); - if (eLayout != XFA_ATTRIBUTEENUM_Row && - eLayout != XFA_ATTRIBUTEENUM_Rl_row) { - continue; - } - if (CXFA_ContentLayoutItem* pRowLayoutCell = - (CXFA_ContentLayoutItem*)pLayoutChild->m_pFirstChild) { - rgRowItems.Add(pRowLayoutCell); - int32_t iColSpan = - pRowLayoutCell->m_pFormNode->GetInteger(XFA_ATTRIBUTE_ColSpan); - rgRowItemsSpan.Add(iColSpan); - rgRowItemsWidth.Add(pRowLayoutCell->m_sSize.x); - } - } - iRowCount = rgRowItems.GetSize(); - iColCount = 0; - FX_BOOL bMoreColumns = TRUE; - while (bMoreColumns) { - bMoreColumns = FALSE; - FX_BOOL bAutoCol = FALSE; - for (int32_t i = 0; i < iRowCount; i++) { - while (rgRowItems[i] && (rgRowItemsSpan[i] <= 0 || - !XFA_ItemLayoutProcessor_IsTakingSpace( - rgRowItems[i]->m_pFormNode))) { - CXFA_ContentLayoutItem* pNewCell = - (CXFA_ContentLayoutItem*)rgRowItems[i]->m_pNextSibling; - if (rgRowItemsSpan[i] < 0 && XFA_ItemLayoutProcessor_IsTakingSpace( - rgRowItems[i]->m_pFormNode)) { - pNewCell = NULL; - } - rgRowItems[i] = pNewCell; - rgRowItemsSpan[i] = - pNewCell - ? pNewCell->m_pFormNode->GetInteger(XFA_ATTRIBUTE_ColSpan) - : 0; - rgRowItemsWidth[i] = pNewCell ? pNewCell->m_sSize.x : 0; - } - CXFA_ContentLayoutItem* pCell = rgRowItems[i]; - if (!pCell) { - continue; - } - bMoreColumns = TRUE; - if (rgRowItemsSpan[i] == 1) { - if (iColCount >= iSpecifiedColumnCount) { - for (int32_t j = 0, c = iColCount + 1 - - m_rgSpecifiedColumnWidths.GetSize(); - j < c; j++) { - m_rgSpecifiedColumnWidths.Add(0); - } - } - if (m_rgSpecifiedColumnWidths[iColCount] < - XFA_LAYOUT_FLOAT_PERCISION) { - bAutoCol = TRUE; - } - if (bAutoCol && - m_rgSpecifiedColumnWidths[iColCount] < rgRowItemsWidth[i]) { - m_rgSpecifiedColumnWidths[iColCount] = rgRowItemsWidth[i]; - } - } - } - if (bMoreColumns) { - FX_FLOAT fFinalColumnWidth = 0.0f; - if (iColCount < m_rgSpecifiedColumnWidths.GetSize()) - fFinalColumnWidth = m_rgSpecifiedColumnWidths[iColCount]; - for (int32_t i = 0; i < iRowCount; ++i) { - if (!rgRowItems[i]) - continue; - --rgRowItemsSpan[i]; - rgRowItemsWidth[i] -= fFinalColumnWidth; - } - ++iColCount; - } - } - } - FX_FLOAT fCurrentRowY = 0; - for (CXFA_ContentLayoutItem* pLayoutChild = - (CXFA_ContentLayoutItem*)m_pLayoutItem->m_pFirstChild; - pLayoutChild; - pLayoutChild = (CXFA_ContentLayoutItem*)pLayoutChild->m_pNextSibling) { - if (!XFA_ItemLayoutProcessor_IsTakingSpace(pLayoutChild->m_pFormNode)) { - continue; - } - if (pLayoutChild->m_pFormNode->GetClassID() == XFA_ELEMENT_Subform) { - XFA_ATTRIBUTEENUM eSubformLayout = - pLayoutChild->m_pFormNode->GetEnum(XFA_ATTRIBUTE_Layout); - if (eSubformLayout == XFA_ATTRIBUTEENUM_Row || - eSubformLayout == XFA_ATTRIBUTEENUM_Rl_row) { - XFA_ItemLayoutProcessor_RelocateTableRowCells( - pLayoutChild, m_rgSpecifiedColumnWidths, eSubformLayout); - } - } - pLayoutChild->m_sPos.y = fCurrentRowY; - if (bContainerWidthAutoSize) { - pLayoutChild->m_sPos.x = 0; - } else { - switch (pLayoutChild->m_pFormNode->GetEnum(XFA_ATTRIBUTE_HAlign)) { - case XFA_ATTRIBUTEENUM_Left: - default: - pLayoutChild->m_sPos.x = 0; - break; - case XFA_ATTRIBUTEENUM_Center: - pLayoutChild->m_sPos.x = - (fContentWidthLimit - pLayoutChild->m_sSize.x) / 2; - break; - case XFA_ATTRIBUTEENUM_Right: - pLayoutChild->m_sPos.x = fContentWidthLimit - pLayoutChild->m_sSize.x; - break; - } - } - if (bContainerWidthAutoSize) { - FX_FLOAT fChildSuppliedWidth = - pLayoutChild->m_sPos.x + pLayoutChild->m_sSize.x; - if (fContentWidthLimit < XFA_LAYOUT_FLOAT_MAX && - fContentWidthLimit > fChildSuppliedWidth) { - fChildSuppliedWidth = fContentWidthLimit; - } - if (fContentCalculatedWidth < fChildSuppliedWidth) { - fContentCalculatedWidth = fChildSuppliedWidth; - } - } - fCurrentRowY += pLayoutChild->m_sSize.y; - } - if (bContainerHeightAutoSize) { - FX_FLOAT fChildSuppliedHeight = fCurrentRowY; - if (fContentCalculatedHeight < fChildSuppliedHeight) { - fContentCalculatedHeight = fChildSuppliedHeight; - } - } - XFA_ItemLayoutProcessor_CalculateContainerComponentSizeFromContentSize( - m_pFormNode, bContainerWidthAutoSize, fContentCalculatedWidth, - fContainerWidth, bContainerHeightAutoSize, fContentCalculatedHeight, - fContainerHeight); - SetCurrentComponentSize(fContainerWidth, fContainerHeight); -} -static uint8_t XFA_ItemLayoutProcessor_HAlignEnumToInt( - XFA_ATTRIBUTEENUM eHAlign) { - switch (eHAlign) { - case XFA_ATTRIBUTEENUM_Center: - return 1; - case XFA_ATTRIBUTEENUM_Right: - return 2; - case XFA_ATTRIBUTEENUM_Left: - default: - return 0; - } -} -static void XFA_ItemLayoutProcessor_UpdatePendedItemLayout( - CXFA_ItemLayoutProcessor* pProcessor, - CXFA_ContentLayoutItem* pLayoutItem) { - XFA_ATTRIBUTEENUM eLayout = - pLayoutItem->m_pFormNode->GetEnum(XFA_ATTRIBUTE_Layout); - switch (eLayout) { - case XFA_ATTRIBUTEENUM_Row: - case XFA_ATTRIBUTEENUM_Rl_row: - XFA_ItemLayoutProcessor_RelocateTableRowCells( - pLayoutItem, pProcessor->m_rgSpecifiedColumnWidths, eLayout); - break; - default: - break; - } -} -FX_BOOL CXFA_ItemLayoutProcessor::IsAddNewRowForTrailer( - CXFA_ContentLayoutItem* pTrailerItem) { - if (!pTrailerItem) { - return FALSE; - } - FX_FLOAT fWidth = pTrailerItem->m_sSize.x; - XFA_ATTRIBUTEENUM eLayout = m_pFormNode->GetEnum(XFA_ATTRIBUTE_Layout); - if (eLayout != XFA_ATTRIBUTEENUM_Tb && m_fWidthLimite > fWidth) { - return FALSE; - } - return TRUE; -} -static void XFA_ItemLayoutProcessor_AddTrailerBeforeSplit( - CXFA_ItemLayoutProcessor* pProcessor, - FX_FLOAT fSplitPos, - CXFA_ContentLayoutItem* pTrailerLayoutItem, - FX_BOOL bUseInherited = FALSE) { - if (!pTrailerLayoutItem) { - return; - } - FX_FLOAT fHeight = pTrailerLayoutItem->m_sSize.y; - if (bUseInherited) { - FX_FLOAT fNewSplitPos = 0; - if (fSplitPos - fHeight > XFA_LAYOUT_FLOAT_PERCISION) { - fNewSplitPos = pProcessor->FindSplitPos(fSplitPos - fHeight); - } - if (fNewSplitPos > XFA_LAYOUT_FLOAT_PERCISION) { - pProcessor->SplitLayoutItem(fNewSplitPos); - } - return; - } - XFA_ItemLayoutProcessor_UpdatePendedItemLayout(pProcessor, - pTrailerLayoutItem); - CXFA_Node* pMarginNode = - pProcessor->m_pFormNode->GetFirstChildByClass(XFA_ELEMENT_Margin); - FX_FLOAT fLeftInset = 0, fTopInset = 0, fRightInset = 0, fBottomInset = 0; - if (pMarginNode) { - fLeftInset = - pMarginNode->GetMeasure(XFA_ATTRIBUTE_LeftInset).ToUnit(XFA_UNIT_Pt); - fTopInset = - pMarginNode->GetMeasure(XFA_ATTRIBUTE_TopInset).ToUnit(XFA_UNIT_Pt); - fRightInset = - pMarginNode->GetMeasure(XFA_ATTRIBUTE_RightInset).ToUnit(XFA_UNIT_Pt); - fBottomInset = - pMarginNode->GetMeasure(XFA_ATTRIBUTE_BottomInset).ToUnit(XFA_UNIT_Pt); - } - if (!pProcessor->IsAddNewRowForTrailer(pTrailerLayoutItem)) { - pTrailerLayoutItem->m_sPos.y = pProcessor->m_fLastRowY; - pTrailerLayoutItem->m_sPos.x = pProcessor->m_fLastRowWidth; - pProcessor->m_pLayoutItem->m_sSize.x += pTrailerLayoutItem->m_sSize.x; - pProcessor->m_pLayoutItem->AddChild(pTrailerLayoutItem); - return; - } - FX_FLOAT fNewSplitPos = 0; - if (fSplitPos - fHeight > XFA_LAYOUT_FLOAT_PERCISION) { - fNewSplitPos = pProcessor->FindSplitPos(fSplitPos - fHeight); - } - if (fNewSplitPos > XFA_LAYOUT_FLOAT_PERCISION) { - pProcessor->SplitLayoutItem(fNewSplitPos); - pTrailerLayoutItem->m_sPos.y = fNewSplitPos - fTopInset - fBottomInset; - } else { - pTrailerLayoutItem->m_sPos.y = fSplitPos - fTopInset - fBottomInset; - } - switch (pTrailerLayoutItem->m_pFormNode->GetEnum(XFA_ATTRIBUTE_HAlign)) { - case XFA_ATTRIBUTEENUM_Left: - default: - pTrailerLayoutItem->m_sPos.x = fLeftInset; - break; - case XFA_ATTRIBUTEENUM_Right: - pTrailerLayoutItem->m_sPos.x = pProcessor->m_pLayoutItem->m_sSize.x - - fRightInset - - pTrailerLayoutItem->m_sSize.x; - break; - case XFA_ATTRIBUTEENUM_Center: - pTrailerLayoutItem->m_sPos.x = - (pProcessor->m_pLayoutItem->m_sSize.x - fLeftInset - fRightInset - - pTrailerLayoutItem->m_sSize.x) / - 2; - break; - } - pProcessor->m_pLayoutItem->m_sSize.y += fHeight; - pProcessor->m_pLayoutItem->AddChild(pTrailerLayoutItem); -} -static void XFA_ItemLayoutProcessor_AddLeaderAfterSplit( - CXFA_ItemLayoutProcessor* pProcessor, - CXFA_ContentLayoutItem* pLeaderLayoutItem) { - XFA_ItemLayoutProcessor_UpdatePendedItemLayout(pProcessor, pLeaderLayoutItem); - CXFA_Node* pMarginNode = - pProcessor->m_pFormNode->GetFirstChildByClass(XFA_ELEMENT_Margin); - FX_FLOAT fLeftInset = 0; - FX_FLOAT fRightInset = 0; - if (pMarginNode) { - fLeftInset = - pMarginNode->GetMeasure(XFA_ATTRIBUTE_LeftInset).ToUnit(XFA_UNIT_Pt); - fRightInset = - pMarginNode->GetMeasure(XFA_ATTRIBUTE_RightInset).ToUnit(XFA_UNIT_Pt); - } - FX_FLOAT fHeight = pLeaderLayoutItem->m_sSize.y; - for (CXFA_ContentLayoutItem* pChildItem = - (CXFA_ContentLayoutItem*)pProcessor->m_pLayoutItem->m_pFirstChild; - pChildItem; - pChildItem = (CXFA_ContentLayoutItem*)pChildItem->m_pNextSibling) { - pChildItem->m_sPos.y += fHeight; - } - pLeaderLayoutItem->m_sPos.y = 0; - switch (pLeaderLayoutItem->m_pFormNode->GetEnum(XFA_ATTRIBUTE_HAlign)) { - case XFA_ATTRIBUTEENUM_Left: - default: - pLeaderLayoutItem->m_sPos.x = fLeftInset; - break; - case XFA_ATTRIBUTEENUM_Right: - pLeaderLayoutItem->m_sPos.x = pProcessor->m_pLayoutItem->m_sSize.x - - fRightInset - pLeaderLayoutItem->m_sSize.x; - break; - case XFA_ATTRIBUTEENUM_Center: - pLeaderLayoutItem->m_sPos.x = - (pProcessor->m_pLayoutItem->m_sSize.x - fLeftInset - fRightInset - - pLeaderLayoutItem->m_sSize.x) / - 2; - break; - } - pProcessor->m_pLayoutItem->m_sSize.y += fHeight; - pProcessor->m_pLayoutItem->AddChild(pLeaderLayoutItem); -} -static void XFA_ItemLayoutProcessor_AddPendingNode( - CXFA_ItemLayoutProcessor* pProcessor, - CXFA_Node* pPendingNode, - FX_BOOL bBreakPending) { - pProcessor->m_PendingNodes.push_back(pPendingNode); - pProcessor->m_bBreakPending = bBreakPending; -} -static FX_FLOAT XFA_ItemLayoutProcessor_InsertPendingItems( - CXFA_ItemLayoutProcessor* pProcessor, - CXFA_Node* pCurChildNode) { - FX_FLOAT fTotalHeight = 0; - if (pProcessor->m_PendingNodes.empty()) { - return fTotalHeight; - } - if (!pProcessor->m_pLayoutItem) { - pProcessor->m_pLayoutItem = - pProcessor->CreateContentLayoutItem(pCurChildNode); - pProcessor->m_pLayoutItem->m_sSize.clear(); - } - while (!pProcessor->m_PendingNodes.empty()) { - std::unique_ptr pPendingProcessor( - new CXFA_ItemLayoutProcessor(pProcessor->m_PendingNodes.front(), - nullptr)); - pProcessor->m_PendingNodes.pop_front(); - pPendingProcessor->DoLayout(FALSE, XFA_LAYOUT_FLOAT_MAX); - CXFA_ContentLayoutItem* pPendingLayoutItem = - pPendingProcessor->HasLayoutItem() - ? pPendingProcessor->ExtractLayoutItem() - : nullptr; - if (pPendingLayoutItem) { - XFA_ItemLayoutProcessor_AddLeaderAfterSplit(pProcessor, - pPendingLayoutItem); - if (pProcessor->m_bBreakPending) { - fTotalHeight += pPendingLayoutItem->m_sSize.y; - } - } - } - return fTotalHeight; -} -FX_FLOAT CXFA_ItemLayoutProcessor::InsertKeepLayoutItems() { - FX_FLOAT fTotalHeight = 0; - if (m_arrayKeepItems.GetSize()) { - if (!m_pLayoutItem) { - m_pLayoutItem = CreateContentLayoutItem(m_pFormNode); - m_pLayoutItem->m_sSize.clear(); - } - for (int32_t iIndex = m_arrayKeepItems.GetSize() - 1; iIndex >= 0; - iIndex--) { - XFA_ItemLayoutProcessor_AddLeaderAfterSplit(this, - m_arrayKeepItems[iIndex]); - fTotalHeight += m_arrayKeepItems[iIndex]->m_sSize.y; - } - m_arrayKeepItems.RemoveAll(); - } - return fTotalHeight; -} -FX_BOOL CXFA_ItemLayoutProcessor::ProcessKeepForSplite( - CXFA_ItemLayoutProcessor* pParentProcessor, - CXFA_ItemLayoutProcessor* pChildProcessor, - XFA_ItemLayoutProcessorResult eRetValue, - CFX_ArrayTemplate& rgCurLineLayoutItem, - FX_FLOAT& fContentCurRowAvailWidth, - FX_FLOAT& fContentCurRowHeight, - FX_FLOAT& fContentCurRowY, - FX_BOOL& bAddedItemInRow, - FX_BOOL& bForceEndPage, - XFA_ItemLayoutProcessorResult& result) { - if (pParentProcessor == NULL || pChildProcessor == NULL) { - return FALSE; - } - if (pParentProcessor->m_pCurChildNode->GetIntact() != - XFA_ATTRIBUTEENUM_None || - !pChildProcessor->m_bHasAvailHeight) { - if (XFA_ExistContainerKeep(pParentProcessor->m_pCurChildNode, TRUE)) { - FX_FLOAT fChildWidth, fChildHeight; - pChildProcessor->GetCurrentComponentSize(fChildWidth, fChildHeight); - CFX_ArrayTemplate keepLayoutItems; - if (pParentProcessor->JudgePutNextPage(pParentProcessor->m_pLayoutItem, - fChildHeight, keepLayoutItems)) { - m_arrayKeepItems.RemoveAll(); - for (int32_t iIndex = 0; iIndex < keepLayoutItems.GetSize(); iIndex++) { - CXFA_ContentLayoutItem* pItem = keepLayoutItems.GetAt(iIndex); - pParentProcessor->m_pLayoutItem->RemoveChild(pItem); - fContentCurRowY -= pItem->m_sSize.y; - m_arrayKeepItems.Add(pItem); - } - bAddedItemInRow = TRUE; - bForceEndPage = TRUE; - result = XFA_ItemLayoutProcessorResult_PageFullBreak; - return TRUE; - } - rgCurLineLayoutItem.Add(pChildProcessor->ExtractLayoutItem()); - bAddedItemInRow = TRUE; - fContentCurRowAvailWidth -= fChildWidth; - if (fContentCurRowHeight < fChildHeight) { - fContentCurRowHeight = fChildHeight; - } - result = eRetValue; - return TRUE; - } - } - return FALSE; -} -FX_BOOL CXFA_ItemLayoutProcessor::JudgePutNextPage( - CXFA_ContentLayoutItem* pParentLayoutItem, - FX_FLOAT fChildHeight, - CFX_ArrayTemplate& pKeepItems) { - if (pParentLayoutItem == NULL) { - return FALSE; - } - FX_FLOAT fItemsHeight = 0; - for (CXFA_ContentLayoutItem* pChildLayoutItem = - (CXFA_ContentLayoutItem*)pParentLayoutItem->m_pFirstChild; - pChildLayoutItem; - pChildLayoutItem = - (CXFA_ContentLayoutItem*)pChildLayoutItem->m_pNextSibling) { - if (XFA_ExistContainerKeep(pChildLayoutItem->m_pFormNode, FALSE)) { - pKeepItems.Add(pChildLayoutItem); - fItemsHeight += pChildLayoutItem->m_sSize.y; - } else { - pKeepItems.RemoveAll(); - fItemsHeight = 0; - } - } - fItemsHeight += fChildHeight; - if (m_pPageMgr->GetNextAvailContentHeight(fItemsHeight)) { - return TRUE; - } - return FALSE; -} -void CXFA_ItemLayoutProcessor::ProcessUnUseBinds(CXFA_Node* pFormNode) { - if (!pFormNode) { - return; - } - CXFA_NodeIteratorTemplate sIterator( - pFormNode); - for (CXFA_Node* pNode = sIterator.MoveToNext(); pNode; - pNode = sIterator.MoveToNext()) { - if (pNode->IsContainerNode()) { - CXFA_Node* pBindNode = pNode->GetBindData(); - if (pBindNode) { - pBindNode->RemoveBindItem(pNode); - pNode->SetObject(XFA_ATTRIBUTE_BindingNode, NULL); - } - } - pNode->SetFlag(XFA_NODEFLAG_UnusedNode); - } -} -void CXFA_ItemLayoutProcessor::ProcessUnUseOverFlow( - CXFA_Node* pLeaderNode, - CXFA_Node* pTrailerNode, - CXFA_ContentLayoutItem* pTrailerItem, - CXFA_Node* pFormNode) { - ProcessUnUseBinds(pLeaderNode); - ProcessUnUseBinds(pTrailerNode); - if (pFormNode == NULL) { - return; - } - if (pFormNode->GetClassID() == XFA_ELEMENT_Overflow || - pFormNode->GetClassID() == XFA_ELEMENT_Break) { - pFormNode = pFormNode->GetNodeItem(XFA_NODEITEM_Parent); - } - if (pLeaderNode && pFormNode) { - pFormNode->RemoveChild(pLeaderNode); - } - if (pTrailerNode && pFormNode) { - pFormNode->RemoveChild(pTrailerNode); - } - if (pTrailerItem) { - XFA_ReleaseLayoutItem(pTrailerItem); - } -} -static XFA_ItemLayoutProcessorResult XFA_ItemLayoutProcessor_InsertFlowedItem( - CXFA_ItemLayoutProcessor* pThis, - CXFA_ItemLayoutProcessor*& pProcessor, - FX_BOOL bContainerWidthAutoSize, - FX_BOOL bContainerHeightAutoSize, - FX_FLOAT fContainerHeight, - XFA_ATTRIBUTEENUM eFlowStrategy, - uint8_t& uCurHAlignState, - CFX_ArrayTemplate(&rgCurLineLayoutItems)[3], - FX_BOOL bUseBreakControl, - FX_FLOAT fAvailHeight, - FX_FLOAT fRealHeight, - FX_FLOAT& fContentCurRowY, - FX_FLOAT& fContentWidthLimit, - FX_FLOAT& fContentCurRowAvailWidth, - FX_FLOAT& fContentCurRowHeight, - FX_BOOL& bAddedItemInRow, - FX_BOOL& bForceEndPage, - CXFA_LayoutContext* pLayoutContext = NULL, - FX_BOOL bNewRow = FALSE) { - FX_BOOL bTakeSpace = - XFA_ItemLayoutProcessor_IsTakingSpace(pProcessor->m_pFormNode); - uint8_t uHAlign = XFA_ItemLayoutProcessor_HAlignEnumToInt( - pThis->m_pCurChildNode->GetEnum(XFA_ATTRIBUTE_HAlign)); - if (bContainerWidthAutoSize) { - uHAlign = 0; - } - if ((eFlowStrategy != XFA_ATTRIBUTEENUM_Rl_tb && uHAlign < uCurHAlignState) || - (eFlowStrategy == XFA_ATTRIBUTEENUM_Rl_tb && uHAlign > uCurHAlignState)) { - return XFA_ItemLayoutProcessorResult_RowFullBreak; - } - uCurHAlignState = uHAlign; - FX_BOOL bIsOwnSplite = - pProcessor->m_pFormNode->GetIntact() == XFA_ATTRIBUTEENUM_None; - FX_BOOL bUseRealHeight = - bTakeSpace && bContainerHeightAutoSize && bIsOwnSplite && - pProcessor->m_pFormNode->GetNodeItem(XFA_NODEITEM_Parent)->GetIntact() == - XFA_ATTRIBUTEENUM_None; - FX_BOOL bIsTransHeight = bTakeSpace; - if (bIsTransHeight && !bIsOwnSplite) { - FX_BOOL bRootForceTb = FALSE; - XFA_ATTRIBUTEENUM eLayoutStrategy = XFA_ItemLayoutProcessor_GetLayout( - pProcessor->m_pFormNode, bRootForceTb); - if (eLayoutStrategy == XFA_ATTRIBUTEENUM_Lr_tb || - eLayoutStrategy == XFA_ATTRIBUTEENUM_Rl_tb) { - bIsTransHeight = FALSE; - } - } - FX_BOOL bUseInherited = FALSE; - CXFA_LayoutContext layoutContext; - if (pThis->m_pPageMgr) { - CXFA_Node* pOverflowNode = - pThis->m_pPageMgr->QueryOverflow(pThis->m_pFormNode); - if (pOverflowNode) { - layoutContext.m_pOverflowNode = pOverflowNode; - layoutContext.m_pOverflowProcessor = pThis; - pLayoutContext = &layoutContext; - } - } - XFA_ItemLayoutProcessorResult eRetValue = XFA_ItemLayoutProcessorResult_Done; - if (!bNewRow || - pProcessor->m_ePreProcessRs == XFA_ItemLayoutProcessorResult_Done) { - eRetValue = pProcessor->DoLayout( - bTakeSpace ? bUseBreakControl : FALSE, - bUseRealHeight ? fRealHeight - fContentCurRowY : XFA_LAYOUT_FLOAT_MAX, - bIsTransHeight ? fRealHeight - fContentCurRowY : XFA_LAYOUT_FLOAT_MAX, - pLayoutContext); - pProcessor->m_ePreProcessRs = eRetValue; - } else { - eRetValue = pProcessor->m_ePreProcessRs; - pProcessor->m_ePreProcessRs = XFA_ItemLayoutProcessorResult_Done; - } - if (pProcessor->HasLayoutItem() == FALSE) { - return eRetValue; - } - FX_FLOAT fChildWidth, fChildHeight; - pProcessor->GetCurrentComponentSize(fChildWidth, fChildHeight); - if (bUseRealHeight && fRealHeight < XFA_LAYOUT_FLOAT_PERCISION) { - fRealHeight = XFA_LAYOUT_FLOAT_MAX; - fAvailHeight = XFA_LAYOUT_FLOAT_MAX; - } - if (!bTakeSpace || - (fChildWidth <= fContentCurRowAvailWidth + XFA_LAYOUT_FLOAT_PERCISION) || - (fContentWidthLimit - fContentCurRowAvailWidth <= - XFA_LAYOUT_FLOAT_PERCISION)) { - CXFA_Node *pOverflowLeaderNode = NULL, *pOverflowTrailerNode = NULL, - *pFormNode = NULL; - CXFA_ContentLayoutItem* pTrailerLayoutItem = NULL; - FX_BOOL bIsAddTrailerHeight = FALSE; - if (pThis->m_pPageMgr && - pProcessor->m_pFormNode->GetIntact() == XFA_ATTRIBUTEENUM_None) { - pFormNode = pThis->m_pPageMgr->QueryOverflow(pProcessor->m_pFormNode); - if (pFormNode == NULL && pLayoutContext && - pLayoutContext->m_pOverflowProcessor) { - pFormNode = pLayoutContext->m_pOverflowNode; - bUseInherited = TRUE; - } - if (pThis->m_pPageMgr->ProcessOverflow(pFormNode, pOverflowLeaderNode, - pOverflowTrailerNode, FALSE, - FALSE)) { - if (pProcessor->JudgeLeaderOrTrailerForOccur(pOverflowTrailerNode)) { - if (pOverflowTrailerNode) { - CXFA_ItemLayoutProcessor* pOverflowLeaderProcessor = - new CXFA_ItemLayoutProcessor(pOverflowTrailerNode, NULL); - pOverflowLeaderProcessor->DoLayout(FALSE, XFA_LAYOUT_FLOAT_MAX); - pTrailerLayoutItem = - pOverflowLeaderProcessor->HasLayoutItem() - ? pOverflowLeaderProcessor->ExtractLayoutItem() - : NULL; - delete pOverflowLeaderProcessor; - } - if (bUseInherited) { - bIsAddTrailerHeight = - pThis->IsAddNewRowForTrailer(pTrailerLayoutItem); - } else { - bIsAddTrailerHeight = - pProcessor->IsAddNewRowForTrailer(pTrailerLayoutItem); - } - if (bIsAddTrailerHeight) { - FX_FLOAT fTrailerHeight = pTrailerLayoutItem->m_sSize.y; - fChildHeight += fTrailerHeight; - bIsAddTrailerHeight = TRUE; - } - } - } - } - if (!bTakeSpace || - fContentCurRowY + fChildHeight <= - fAvailHeight + XFA_LAYOUT_FLOAT_PERCISION || - (!bContainerHeightAutoSize && - pThis->m_fUsedSize + fAvailHeight + XFA_LAYOUT_FLOAT_PERCISION >= - fContainerHeight)) { - if (!bTakeSpace || eRetValue == XFA_ItemLayoutProcessorResult_Done) { - if (pProcessor->m_bUseInheriated) { - if (pTrailerLayoutItem) { - XFA_ItemLayoutProcessor_AddTrailerBeforeSplit( - pProcessor, fChildHeight, pTrailerLayoutItem); - } - if (pProcessor->JudgeLeaderOrTrailerForOccur(pOverflowLeaderNode)) { - XFA_ItemLayoutProcessor_AddPendingNode(pProcessor, - pOverflowLeaderNode, FALSE); - } - pProcessor->m_bUseInheriated = FALSE; - } else { - if (bIsAddTrailerHeight) { - fChildHeight -= pTrailerLayoutItem->m_sSize.y; - } - pProcessor->ProcessUnUseOverFlow(pOverflowLeaderNode, - pOverflowTrailerNode, - pTrailerLayoutItem, pFormNode); - } - CXFA_ContentLayoutItem* pChildLayoutItem = - pProcessor->ExtractLayoutItem(); - if (XFA_ExistContainerKeep(pProcessor->m_pFormNode, FALSE) && - pProcessor->m_pFormNode->GetIntact() == XFA_ATTRIBUTEENUM_None) { - pThis->m_arrayKeepItems.Add(pChildLayoutItem); - } else { - pThis->m_arrayKeepItems.RemoveAll(); - } - rgCurLineLayoutItems[uHAlign].Add(pChildLayoutItem); - bAddedItemInRow = TRUE; - if (bTakeSpace) { - fContentCurRowAvailWidth -= fChildWidth; - if (fContentCurRowHeight < fChildHeight) { - fContentCurRowHeight = fChildHeight; - } - } - return XFA_ItemLayoutProcessorResult_Done; - } else { - if (eRetValue == XFA_ItemLayoutProcessorResult_PageFullBreak) { - if (pProcessor->m_bUseInheriated) { - if (pTrailerLayoutItem) { - XFA_ItemLayoutProcessor_AddTrailerBeforeSplit( - pProcessor, fChildHeight, pTrailerLayoutItem); - } - if (pProcessor->JudgeLeaderOrTrailerForOccur(pOverflowLeaderNode)) { - XFA_ItemLayoutProcessor_AddPendingNode( - pProcessor, pOverflowLeaderNode, FALSE); - } - pProcessor->m_bUseInheriated = FALSE; - } else { - if (bIsAddTrailerHeight) { - fChildHeight -= pTrailerLayoutItem->m_sSize.y; - } - pProcessor->ProcessUnUseOverFlow(pOverflowLeaderNode, - pOverflowTrailerNode, - pTrailerLayoutItem, pFormNode); - } - } - rgCurLineLayoutItems[uHAlign].Add(pProcessor->ExtractLayoutItem()); - bAddedItemInRow = TRUE; - fContentCurRowAvailWidth -= fChildWidth; - if (fContentCurRowHeight < fChildHeight) { - fContentCurRowHeight = fChildHeight; - } - return eRetValue; - } - } else { - XFA_ItemLayoutProcessorResult eResult; - if (pThis->ProcessKeepForSplite( - pThis, pProcessor, eRetValue, rgCurLineLayoutItems[uHAlign], - fContentCurRowAvailWidth, fContentCurRowHeight, fContentCurRowY, - bAddedItemInRow, bForceEndPage, eResult)) { - return eResult; - } - bForceEndPage = TRUE; - FX_FLOAT fSplitPos = - pProcessor->FindSplitPos(fAvailHeight - fContentCurRowY); - if (fSplitPos > XFA_LAYOUT_FLOAT_PERCISION) { - XFA_ATTRIBUTEENUM eLayout = - pProcessor->m_pFormNode->GetEnum(XFA_ATTRIBUTE_Layout); - if (eLayout == XFA_ATTRIBUTEENUM_Tb && - eRetValue == XFA_ItemLayoutProcessorResult_Done) { - pProcessor->ProcessUnUseOverFlow(pOverflowLeaderNode, - pOverflowTrailerNode, - pTrailerLayoutItem, pFormNode); - rgCurLineLayoutItems[uHAlign].Add(pProcessor->ExtractLayoutItem()); - bAddedItemInRow = TRUE; - if (bTakeSpace) { - fContentCurRowAvailWidth -= fChildWidth; - if (fContentCurRowHeight < fChildHeight) { - fContentCurRowHeight = fChildHeight; - } - } - return XFA_ItemLayoutProcessorResult_PageFullBreak; - } - CXFA_Node *pTempLeaderNode = NULL, *pTempTrailerNode = NULL; - if (pThis->m_pPageMgr && !pProcessor->m_bUseInheriated && - eRetValue != XFA_ItemLayoutProcessorResult_PageFullBreak) { - pThis->m_pPageMgr->ProcessOverflow(pFormNode, pTempLeaderNode, - pTempTrailerNode, FALSE, TRUE); - } - if (pTrailerLayoutItem && bIsAddTrailerHeight) { - XFA_ItemLayoutProcessor_AddTrailerBeforeSplit( - pProcessor, fSplitPos, pTrailerLayoutItem, bUseInherited); - } else { - pProcessor->SplitLayoutItem(fSplitPos); - } - if (bUseInherited) { - pProcessor->ProcessUnUseOverFlow(pOverflowLeaderNode, - pOverflowTrailerNode, - pTrailerLayoutItem, pFormNode); - pThis->m_bUseInheriated = TRUE; - } else { - if (pProcessor->m_pLayoutItem->m_pFirstChild && - pProcessor->m_pLayoutItem->m_pFirstChild->m_pNextSibling == - NULL && - pProcessor->m_pLayoutItem->m_pFirstChild->m_pFormNode->HasFlag( - XFA_NODEFLAG_LayoutGeneratedNode)) { - pProcessor->ProcessUnUseOverFlow(pOverflowLeaderNode, - pOverflowTrailerNode, - pTrailerLayoutItem, pFormNode); - } else { - if (pProcessor->JudgeLeaderOrTrailerForOccur(pOverflowLeaderNode)) { - XFA_ItemLayoutProcessor_AddPendingNode( - pProcessor, pOverflowLeaderNode, FALSE); - } - } - } - if (pProcessor->m_pLayoutItem->m_pNextSibling) { - pProcessor->GetCurrentComponentSize(fChildWidth, fChildHeight); - rgCurLineLayoutItems[uHAlign].Add(pProcessor->ExtractLayoutItem()); - bAddedItemInRow = TRUE; - if (bTakeSpace) { - fContentCurRowAvailWidth -= fChildWidth; - if (fContentCurRowHeight < fChildHeight) { - fContentCurRowHeight = fChildHeight; - } - } - } - return XFA_ItemLayoutProcessorResult_PageFullBreak; - } else if (fContentCurRowY <= XFA_LAYOUT_FLOAT_PERCISION) { - pProcessor->GetCurrentComponentSize(fChildWidth, fChildHeight); - if (pProcessor->m_pPageMgr->GetNextAvailContentHeight(fChildHeight)) { - CXFA_Node *pTempLeaderNode = NULL, *pTempTrailerNode = NULL; - if (pThis->m_pPageMgr) { - if (pFormNode == NULL && pLayoutContext) { - pFormNode = pLayoutContext->m_pOverflowProcessor->m_pFormNode; - } - pThis->m_pPageMgr->ProcessOverflow(pFormNode, pTempLeaderNode, - pTempTrailerNode, FALSE, TRUE); - } - if (bUseInherited) { - pProcessor->ProcessUnUseOverFlow(pOverflowLeaderNode, - pOverflowTrailerNode, - pTrailerLayoutItem, pFormNode); - pThis->m_bUseInheriated = TRUE; - } - return XFA_ItemLayoutProcessorResult_PageFullBreak; - } - rgCurLineLayoutItems[uHAlign].Add(pProcessor->ExtractLayoutItem()); - bAddedItemInRow = TRUE; - if (bTakeSpace) { - fContentCurRowAvailWidth -= fChildWidth; - if (fContentCurRowHeight < fChildHeight) { - fContentCurRowHeight = fChildHeight; - } - } - if (eRetValue == XFA_ItemLayoutProcessorResult_Done) { - bForceEndPage = FALSE; - } - return eRetValue; - } else { - XFA_ATTRIBUTEENUM eLayout = - pProcessor->m_pFormNode->GetEnum(XFA_ATTRIBUTE_Layout); - if (pProcessor->m_pFormNode->GetIntact() == XFA_ATTRIBUTEENUM_None && - eLayout == XFA_ATTRIBUTEENUM_Tb) { - if (pThis->m_pPageMgr) { - pThis->m_pPageMgr->ProcessOverflow(pFormNode, pOverflowLeaderNode, - pOverflowTrailerNode, FALSE, - TRUE); - } - if (pTrailerLayoutItem) { - XFA_ItemLayoutProcessor_AddTrailerBeforeSplit(pProcessor, fSplitPos, - pTrailerLayoutItem); - } - if (pProcessor->JudgeLeaderOrTrailerForOccur(pOverflowLeaderNode)) { - XFA_ItemLayoutProcessor_AddPendingNode(pProcessor, - pOverflowLeaderNode, FALSE); - } - } else { - if (eRetValue == XFA_ItemLayoutProcessorResult_Done) { - if (pFormNode == NULL && pLayoutContext) { - pFormNode = pLayoutContext->m_pOverflowProcessor->m_pFormNode; - } - if (pThis->m_pPageMgr) { - pThis->m_pPageMgr->ProcessOverflow(pFormNode, pOverflowLeaderNode, - pOverflowTrailerNode, FALSE, - TRUE); - } - if (bUseInherited) { - pProcessor->ProcessUnUseOverFlow(pOverflowLeaderNode, - pOverflowTrailerNode, - pTrailerLayoutItem, pFormNode); - pThis->m_bUseInheriated = TRUE; - } - } - } - return XFA_ItemLayoutProcessorResult_PageFullBreak; - } - } - } else { - return XFA_ItemLayoutProcessorResult_RowFullBreak; - } - return XFA_ItemLayoutProcessorResult_Done; -} -XFA_ItemLayoutProcessorResult CXFA_ItemLayoutProcessor::DoLayoutFlowedContainer( - FX_BOOL bUseBreakControl, - XFA_ATTRIBUTEENUM eFlowStrategy, - FX_FLOAT fHeightLimit, - FX_FLOAT fRealHeight, - CXFA_LayoutContext* pContext, - FX_BOOL bRootForceTb) { - m_bHasAvailHeight = TRUE; - FX_FLOAT fContainerWidth = 0, fContainerHeight = 0; - FX_BOOL bBreakDone = FALSE; - FX_BOOL bContainerWidthAutoSize = TRUE, bContainerHeightAutoSize = TRUE; - FX_BOOL bForceEndPage = FALSE; - FX_BOOL bIsManualBreak = FALSE; - if (m_pCurChildPreprocessor) { - m_pCurChildPreprocessor->m_ePreProcessRs = - XFA_ItemLayoutProcessorResult_Done; - } - XFA_ItemLayoutProcessor_CalculateContainerSpecfiedSize( - m_pFormNode, fContainerWidth, fContainerHeight, bContainerWidthAutoSize, - bContainerHeightAutoSize); - if (pContext && pContext->m_bCurColumnWidthAvaiable) { - bContainerWidthAutoSize = FALSE; - fContainerWidth = pContext->m_fCurColumnWidth; - } - if (!bContainerHeightAutoSize) { - fContainerHeight -= m_fUsedSize; - } - if (!bContainerHeightAutoSize) { - CXFA_Node* pParentNode = m_pFormNode->GetNodeItem(XFA_NODEITEM_Parent); - FX_BOOL bFocrTb = FALSE; - if (pParentNode && - XFA_ItemLayoutProcessor_GetLayout(pParentNode, bFocrTb) == - XFA_ATTRIBUTEENUM_Row) { - CXFA_Node* pChildContainer = m_pFormNode->GetNodeItem( - XFA_NODEITEM_FirstChild, XFA_OBJECTTYPE_ContainerNode); - if (pChildContainer && - pChildContainer->GetNodeItem(XFA_NODEITEM_NextSibling, - XFA_OBJECTTYPE_ContainerNode)) { - fContainerHeight = 0; - bContainerHeightAutoSize = TRUE; - } - } - } - CXFA_Node* pMarginNode = - m_pFormNode->GetFirstChildByClass(XFA_ELEMENT_Margin); - FX_FLOAT fLeftInset = 0, fTopInset = 0, fRightInset = 0, fBottomInset = 0; - if (pMarginNode) { - fLeftInset = - pMarginNode->GetMeasure(XFA_ATTRIBUTE_LeftInset).ToUnit(XFA_UNIT_Pt); - fTopInset = - pMarginNode->GetMeasure(XFA_ATTRIBUTE_TopInset).ToUnit(XFA_UNIT_Pt); - fRightInset = - pMarginNode->GetMeasure(XFA_ATTRIBUTE_RightInset).ToUnit(XFA_UNIT_Pt); - fBottomInset = - pMarginNode->GetMeasure(XFA_ATTRIBUTE_BottomInset).ToUnit(XFA_UNIT_Pt); - } - FX_FLOAT fContentWidthLimit = - bContainerWidthAutoSize ? XFA_LAYOUT_FLOAT_MAX - : fContainerWidth - fLeftInset - fRightInset; - FX_FLOAT fContentCalculatedWidth = 0, fContentCalculatedHeight = 0; - FX_FLOAT fAvailHeight = fHeightLimit - fTopInset - fBottomInset; - if (fAvailHeight < 0) { - m_bHasAvailHeight = FALSE; - } - fRealHeight = fRealHeight - fTopInset - fBottomInset; - FX_FLOAT fContentCurRowY = 0; - CXFA_ContentLayoutItem* pLayoutChild = NULL; - if (m_pLayoutItem) { - if (m_nCurChildNodeStage != XFA_ItemLayoutProcessorStages_Done && - eFlowStrategy != XFA_ATTRIBUTEENUM_Tb) { - pLayoutChild = (CXFA_ContentLayoutItem*)m_pLayoutItem->m_pFirstChild; - for (CXFA_ContentLayoutItem* pLayoutNext = pLayoutChild; pLayoutNext; - pLayoutNext = (CXFA_ContentLayoutItem*)pLayoutNext->m_pNextSibling) { - if (pLayoutNext->m_sPos.y != pLayoutChild->m_sPos.y) { - pLayoutChild = pLayoutNext; - } - } - } - for (CXFA_ContentLayoutItem* pLayoutTempChild = - (CXFA_ContentLayoutItem*)m_pLayoutItem->m_pFirstChild; - pLayoutTempChild != pLayoutChild; - pLayoutTempChild = - (CXFA_ContentLayoutItem*)pLayoutTempChild->m_pNextSibling) { - if (XFA_ItemLayoutProcessor_IsTakingSpace( - pLayoutTempChild->m_pFormNode)) { - FX_FLOAT fChildContentWidth = - pLayoutTempChild->m_sPos.x + pLayoutTempChild->m_sSize.x; - FX_FLOAT fChildContentHeight = - pLayoutTempChild->m_sPos.y + pLayoutTempChild->m_sSize.y; - if (fContentCalculatedWidth < fChildContentWidth) { - fContentCalculatedWidth = fChildContentWidth; - } - if (fContentCalculatedHeight < fChildContentHeight) { - fContentCalculatedHeight = fChildContentHeight; - } - } - } - if (pLayoutChild) { - fContentCurRowY = pLayoutChild->m_sPos.y; - } else { - fContentCurRowY = fContentCalculatedHeight; - } - } - fContentCurRowY += InsertKeepLayoutItems(); - if (m_nCurChildNodeStage == XFA_ItemLayoutProcessorStages_None) { - XFA_ItemLayoutProcessor_GotoNextContainerNode( - m_pCurChildNode, m_nCurChildNodeStage, m_pFormNode, TRUE); - } - fContentCurRowY += - XFA_ItemLayoutProcessor_InsertPendingItems(this, m_pFormNode); - if (m_pCurChildPreprocessor && - m_nCurChildNodeStage == XFA_ItemLayoutProcessorStages_Container) { - if (XFA_ExistContainerKeep(m_pCurChildPreprocessor->GetFormNode(), FALSE)) { - m_pKeepHeadNode = m_pCurChildNode; - m_bIsProcessKeep = TRUE; - m_nCurChildNodeStage = XFA_ItemLayoutProcessorStages_Keep; - } - } - while (m_nCurChildNodeStage != XFA_ItemLayoutProcessorStages_Done) { - FX_FLOAT fContentCurRowHeight = 0; - FX_FLOAT fContentCurRowAvailWidth = fContentWidthLimit; - m_fWidthLimite = fContentCurRowAvailWidth; - CFX_ArrayTemplate rgCurLineLayoutItems[3]; - uint8_t uCurHAlignState = - (eFlowStrategy != XFA_ATTRIBUTEENUM_Rl_tb ? 0 : 2); - if (pLayoutChild) { - for (CXFA_ContentLayoutItem* pLayoutNext = pLayoutChild; pLayoutNext; - pLayoutNext = (CXFA_ContentLayoutItem*)pLayoutNext->m_pNextSibling) { - if (pLayoutNext->m_pNextSibling == NULL && m_pCurChildPreprocessor && - m_pCurChildPreprocessor->m_pFormNode == pLayoutNext->m_pFormNode) { - pLayoutNext->m_pNext = m_pCurChildPreprocessor->m_pLayoutItem; - m_pCurChildPreprocessor->m_pLayoutItem = pLayoutNext; - break; - } - uint8_t uHAlign = XFA_ItemLayoutProcessor_HAlignEnumToInt( - pLayoutNext->m_pFormNode->GetEnum(XFA_ATTRIBUTE_HAlign)); - rgCurLineLayoutItems[uHAlign].Add(pLayoutNext); - if (eFlowStrategy == XFA_ATTRIBUTEENUM_Lr_tb) { - if (uHAlign > uCurHAlignState) { - uCurHAlignState = uHAlign; - } - } else if (uHAlign < uCurHAlignState) { - uCurHAlignState = uHAlign; - } - if (XFA_ItemLayoutProcessor_IsTakingSpace(pLayoutNext->m_pFormNode)) { - if (pLayoutNext->m_sSize.y > fContentCurRowHeight) { - fContentCurRowHeight = pLayoutNext->m_sSize.y; - } - fContentCurRowAvailWidth -= pLayoutNext->m_sSize.x; - } - } - if ((CXFA_ContentLayoutItem*)m_pLayoutItem->m_pFirstChild == - pLayoutChild) { - m_pLayoutItem->m_pFirstChild = NULL; - } else { - CXFA_ContentLayoutItem* pLayoutNext = - (CXFA_ContentLayoutItem*)m_pLayoutItem->m_pFirstChild; - for (; pLayoutNext; - pLayoutNext = - (CXFA_ContentLayoutItem*)pLayoutNext->m_pNextSibling) { - if ((CXFA_ContentLayoutItem*)pLayoutNext->m_pNextSibling == - pLayoutChild) { - pLayoutNext->m_pNextSibling = NULL; - break; - } - } - } - CXFA_ContentLayoutItem* pLayoutNextTemp = - (CXFA_ContentLayoutItem*)pLayoutChild; - while (pLayoutNextTemp) { - pLayoutNextTemp->m_pParent = NULL; - CXFA_ContentLayoutItem* pSaveLayoutNext = - (CXFA_ContentLayoutItem*)pLayoutNextTemp->m_pNextSibling; - pLayoutNextTemp->m_pNextSibling = NULL; - pLayoutNextTemp = pSaveLayoutNext; - } - pLayoutChild = NULL; - } - while (m_pCurChildNode) { - CXFA_ItemLayoutProcessor* pProcessor = NULL; - FX_BOOL bAddedItemInRow = FALSE; - fContentCurRowY += - XFA_ItemLayoutProcessor_InsertPendingItems(this, m_pFormNode); - switch (m_nCurChildNodeStage) { - case XFA_ItemLayoutProcessorStages_Keep: - case XFA_ItemLayoutProcessorStages_None: - break; - case XFA_ItemLayoutProcessorStages_BreakBefore: { - for (int32_t iIndex = 0; iIndex < m_arrayKeepItems.GetSize(); - iIndex++) { - CXFA_ContentLayoutItem* pItem = m_arrayKeepItems.GetAt(iIndex); - m_pLayoutItem->RemoveChild(pItem); - fContentCalculatedHeight -= pItem->m_sSize.y; - } - CXFA_Node *pLeaderNode = NULL, *pTrailerNode = NULL; - FX_BOOL bCreatePage = FALSE; - if (bUseBreakControl && m_pPageMgr && - m_pPageMgr->ProcessBreakBeforeOrAfter(m_pCurChildNode, TRUE, - pLeaderNode, pTrailerNode, - bCreatePage) && - m_pFormNode->GetClassID() != XFA_ELEMENT_Form && bCreatePage) { - if (JudgeLeaderOrTrailerForOccur(pLeaderNode)) { - XFA_ItemLayoutProcessor_AddPendingNode(this, pLeaderNode, TRUE); - } - if (JudgeLeaderOrTrailerForOccur(pTrailerNode)) { - if (m_pFormNode->GetNodeItem(XFA_NODEITEM_Parent)->GetClassID() == - XFA_ELEMENT_Form && - m_pLayoutItem == NULL) { - XFA_ItemLayoutProcessor_AddPendingNode(this, pTrailerNode, - TRUE); - } else { - CXFA_ItemLayoutProcessor* pProcessor = - new CXFA_ItemLayoutProcessor(pTrailerNode, NULL); - XFA_ItemLayoutProcessor_InsertFlowedItem( - this, pProcessor, bContainerWidthAutoSize, - bContainerHeightAutoSize, fContainerHeight, eFlowStrategy, - uCurHAlignState, rgCurLineLayoutItems, FALSE, - XFA_LAYOUT_FLOAT_MAX, XFA_LAYOUT_FLOAT_MAX, fContentCurRowY, - fContentWidthLimit, fContentCurRowAvailWidth, - fContentCurRowHeight, bAddedItemInRow, bForceEndPage, - pContext); - delete pProcessor; - pProcessor = NULL; - } - } - XFA_ItemLayoutProcessor_GotoNextContainerNode( - m_pCurChildNode, m_nCurChildNodeStage, m_pFormNode, TRUE); - bForceEndPage = TRUE; - bIsManualBreak = TRUE; - goto SuspendAndCreateNewRow; - } - } break; - case XFA_ItemLayoutProcessorStages_BreakAfter: { - CXFA_Node *pLeaderNode = NULL, *pTrailerNode = NULL; - FX_BOOL bCreatePage = FALSE; - if (bUseBreakControl && m_pPageMgr && - m_pPageMgr->ProcessBreakBeforeOrAfter(m_pCurChildNode, FALSE, - pLeaderNode, pTrailerNode, - bCreatePage) && - m_pFormNode->GetClassID() != XFA_ELEMENT_Form) { - if (JudgeLeaderOrTrailerForOccur(pTrailerNode)) { - CXFA_ItemLayoutProcessor* pProcessor = - new CXFA_ItemLayoutProcessor(pTrailerNode, NULL); - XFA_ItemLayoutProcessor_InsertFlowedItem( - this, pProcessor, bContainerWidthAutoSize, - bContainerHeightAutoSize, fContainerHeight, eFlowStrategy, - uCurHAlignState, rgCurLineLayoutItems, FALSE, - XFA_LAYOUT_FLOAT_MAX, XFA_LAYOUT_FLOAT_MAX, fContentCurRowY, - fContentWidthLimit, fContentCurRowAvailWidth, - fContentCurRowHeight, bAddedItemInRow, bForceEndPage, - pContext); - delete pProcessor; - pProcessor = NULL; - } - if (!bCreatePage) { - if (JudgeLeaderOrTrailerForOccur(pLeaderNode)) { - CalculateRowChildPosition( - rgCurLineLayoutItems, eFlowStrategy, - bContainerHeightAutoSize, bContainerWidthAutoSize, - fContentCalculatedWidth, fContentCalculatedHeight, - fContentCurRowY, fContentCurRowHeight, fContentWidthLimit); - rgCurLineLayoutItems->RemoveAll(); - CXFA_ItemLayoutProcessor* pProcessor = - new CXFA_ItemLayoutProcessor(pLeaderNode, NULL); - XFA_ItemLayoutProcessor_InsertFlowedItem( - this, pProcessor, bContainerWidthAutoSize, - bContainerHeightAutoSize, fContainerHeight, eFlowStrategy, - uCurHAlignState, rgCurLineLayoutItems, FALSE, - XFA_LAYOUT_FLOAT_MAX, XFA_LAYOUT_FLOAT_MAX, fContentCurRowY, - fContentWidthLimit, fContentCurRowAvailWidth, - fContentCurRowHeight, bAddedItemInRow, bForceEndPage, - pContext); - delete pProcessor; - pProcessor = NULL; - } - } else { - if (JudgeLeaderOrTrailerForOccur(pLeaderNode)) { - XFA_ItemLayoutProcessor_AddPendingNode(this, pLeaderNode, TRUE); - } - } - XFA_ItemLayoutProcessor_GotoNextContainerNode( - m_pCurChildNode, m_nCurChildNodeStage, m_pFormNode, TRUE); - if (bCreatePage) { - bForceEndPage = TRUE; - bIsManualBreak = TRUE; - if (m_nCurChildNodeStage == XFA_ItemLayoutProcessorStages_Done) { - bBreakDone = TRUE; - } - } - goto SuspendAndCreateNewRow; - } - } break; - case XFA_ItemLayoutProcessorStages_BookendLeader: { - CXFA_Node* pLeaderNode = NULL; - if (m_pCurChildPreprocessor) { - pProcessor = m_pCurChildPreprocessor; - m_pCurChildPreprocessor = NULL; - } else if (m_pPageMgr && - m_pPageMgr->ProcessBookendLeaderOrTrailer( - m_pCurChildNode, TRUE, pLeaderNode)) { - pProcessor = new CXFA_ItemLayoutProcessor(pLeaderNode, m_pPageMgr); - } - if (pProcessor) { - if (XFA_ItemLayoutProcessor_InsertFlowedItem( - this, pProcessor, bContainerWidthAutoSize, - bContainerHeightAutoSize, fContainerHeight, eFlowStrategy, - uCurHAlignState, rgCurLineLayoutItems, bUseBreakControl, - fAvailHeight, fRealHeight, fContentCurRowY, - fContentWidthLimit, fContentCurRowAvailWidth, - fContentCurRowHeight, bAddedItemInRow, bForceEndPage, - pContext) != XFA_ItemLayoutProcessorResult_Done) { - goto SuspendAndCreateNewRow; - } else { - delete pProcessor; - pProcessor = NULL; - } - } - } break; - case XFA_ItemLayoutProcessorStages_BookendTrailer: { - CXFA_Node* pTrailerNode = NULL; - if (m_pCurChildPreprocessor) { - pProcessor = m_pCurChildPreprocessor; - m_pCurChildPreprocessor = NULL; - } else if (m_pPageMgr && - m_pPageMgr->ProcessBookendLeaderOrTrailer( - m_pCurChildNode, FALSE, pTrailerNode)) { - pProcessor = new CXFA_ItemLayoutProcessor(pTrailerNode, m_pPageMgr); - } - if (pProcessor) { - if (XFA_ItemLayoutProcessor_InsertFlowedItem( - this, pProcessor, bContainerWidthAutoSize, - bContainerHeightAutoSize, fContainerHeight, eFlowStrategy, - uCurHAlignState, rgCurLineLayoutItems, bUseBreakControl, - fAvailHeight, fRealHeight, fContentCurRowY, - fContentWidthLimit, fContentCurRowAvailWidth, - fContentCurRowHeight, bAddedItemInRow, bForceEndPage, - pContext) != XFA_ItemLayoutProcessorResult_Done) { - goto SuspendAndCreateNewRow; - } else { - delete pProcessor; - pProcessor = NULL; - } - } - } break; - case XFA_ItemLayoutProcessorStages_Container: - ASSERT(m_pCurChildNode->IsContainerNode()); - if (m_pCurChildNode->GetClassID() == XFA_ELEMENT_Variables) { - break; - } - if (fContentCurRowY >= fHeightLimit + XFA_LAYOUT_FLOAT_PERCISION && - XFA_ItemLayoutProcessor_IsTakingSpace(m_pCurChildNode)) { - bForceEndPage = TRUE; - goto SuspendAndCreateNewRow; - } - if (m_pCurChildNode->IsContainerNode()) { - FX_BOOL bNewRow = FALSE; - if (m_pCurChildPreprocessor) { - pProcessor = m_pCurChildPreprocessor; - m_pCurChildPreprocessor = NULL; - bNewRow = TRUE; - } else { - pProcessor = - new CXFA_ItemLayoutProcessor(m_pCurChildNode, m_pPageMgr); - } - XFA_ItemLayoutProcessor_InsertPendingItems(pProcessor, - m_pCurChildNode); - XFA_ItemLayoutProcessorResult rs = - XFA_ItemLayoutProcessor_InsertFlowedItem( - this, pProcessor, bContainerWidthAutoSize, - bContainerHeightAutoSize, fContainerHeight, eFlowStrategy, - uCurHAlignState, rgCurLineLayoutItems, bUseBreakControl, - fAvailHeight, fRealHeight, fContentCurRowY, - fContentWidthLimit, fContentCurRowAvailWidth, - fContentCurRowHeight, bAddedItemInRow, bForceEndPage, - pContext, bNewRow); - switch (rs) { - case XFA_ItemLayoutProcessorResult_ManualBreak: - bIsManualBreak = TRUE; - case XFA_ItemLayoutProcessorResult_PageFullBreak: - bForceEndPage = TRUE; - case XFA_ItemLayoutProcessorResult_RowFullBreak: - goto SuspendAndCreateNewRow; - case XFA_ItemLayoutProcessorResult_Done: - default: - fContentCurRowY += XFA_ItemLayoutProcessor_InsertPendingItems( - pProcessor, m_pCurChildNode); - delete pProcessor; - pProcessor = NULL; - } - } - break; - case XFA_ItemLayoutProcessorStages_Done: - break; - default: - break; - } - XFA_ItemLayoutProcessor_GotoNextContainerNode( - m_pCurChildNode, m_nCurChildNodeStage, m_pFormNode, TRUE); - if (bAddedItemInRow && eFlowStrategy == XFA_ATTRIBUTEENUM_Tb) { - break; - } else { - continue; - } - SuspendAndCreateNewRow: - if (pProcessor) { - m_pCurChildPreprocessor = pProcessor; - } - break; - } - CalculateRowChildPosition(rgCurLineLayoutItems, eFlowStrategy, - bContainerHeightAutoSize, bContainerWidthAutoSize, - fContentCalculatedWidth, fContentCalculatedHeight, - fContentCurRowY, fContentCurRowHeight, - fContentWidthLimit, bRootForceTb); - m_fWidthLimite = fContentCurRowAvailWidth; - if (bForceEndPage) { - break; - } - } - FX_BOOL bRetValue = - m_nCurChildNodeStage == XFA_ItemLayoutProcessorStages_Done && - m_PendingNodes.empty(); - if (bBreakDone) { - bRetValue = FALSE; - } - XFA_ItemLayoutProcessor_CalculateContainerComponentSizeFromContentSize( - m_pFormNode, bContainerWidthAutoSize, fContentCalculatedWidth, - fContainerWidth, bContainerHeightAutoSize, fContentCalculatedHeight, - fContainerHeight); - if (fContainerHeight >= XFA_LAYOUT_FLOAT_PERCISION || m_pLayoutItem || - bRetValue) { - if (m_pLayoutItem == NULL) { - m_pLayoutItem = CreateContentLayoutItem(m_pFormNode); - } - if (fContainerHeight < 0) { - fContainerHeight = 0; - } - SetCurrentComponentSize(fContainerWidth, fContainerHeight); - if (bForceEndPage) { - m_fUsedSize = 0; - } else { - m_fUsedSize += m_pLayoutItem->m_sSize.y; - } - } - return bRetValue - ? XFA_ItemLayoutProcessorResult_Done - : (bIsManualBreak ? XFA_ItemLayoutProcessorResult_ManualBreak - : XFA_ItemLayoutProcessorResult_PageFullBreak); -} -FX_BOOL CXFA_ItemLayoutProcessor::CalculateRowChildPosition( - CFX_ArrayTemplate(&rgCurLineLayoutItems)[3], - XFA_ATTRIBUTEENUM eFlowStrategy, - FX_BOOL bContainerHeightAutoSize, - FX_BOOL bContainerWidthAutoSize, - FX_FLOAT& fContentCalculatedWidth, - FX_FLOAT& fContentCalculatedHeight, - FX_FLOAT& fContentCurRowY, - FX_FLOAT fContentCurRowHeight, - FX_FLOAT fContentWidthLimit, - FX_BOOL bRootForceTb) { - int32_t nGroupLengths[3] = {0, 0, 0}; - FX_FLOAT fGroupWidths[3] = {0, 0, 0}; - int32_t nTotalLength = 0; - for (int32_t i = 0; i < 3; i++) { - nGroupLengths[i] = rgCurLineLayoutItems[i].GetSize(); - for (int32_t c = nGroupLengths[i], j = 0; j < c; j++) { - nTotalLength++; - if (XFA_ItemLayoutProcessor_IsTakingSpace( - rgCurLineLayoutItems[i][j]->m_pFormNode)) { - fGroupWidths[i] += rgCurLineLayoutItems[i][j]->m_sSize.x; - } - } - } - if (!nTotalLength) { - if (bContainerHeightAutoSize) { - FX_FLOAT fNewHeight = fContentCurRowY; - if (fContentCalculatedHeight > fNewHeight) { - fContentCalculatedHeight = fNewHeight; - } - } - return FALSE; - } - if (m_pLayoutItem == NULL) { - m_pLayoutItem = CreateContentLayoutItem(m_pFormNode); - } - if (eFlowStrategy != XFA_ATTRIBUTEENUM_Rl_tb) { - FX_FLOAT fCurPos; - fCurPos = 0; - for (int32_t c = nGroupLengths[0], j = 0; j < c; j++) { - if (bRootForceTb) { - FX_FLOAT fAbsoluteX, fAbsoluteY; - CalculatePositionedContainerPos(rgCurLineLayoutItems[0][j]->m_pFormNode, - rgCurLineLayoutItems[0][j]->m_sSize.x, - rgCurLineLayoutItems[0][j]->m_sSize.y, - fAbsoluteX, fAbsoluteY); - rgCurLineLayoutItems[0][j]->m_sPos = CFX_PointF(fAbsoluteX, fAbsoluteY); - } else { - rgCurLineLayoutItems[0][j]->m_sPos = - CFX_PointF(fCurPos, fContentCurRowY); - if (XFA_ItemLayoutProcessor_IsTakingSpace( - rgCurLineLayoutItems[0][j]->m_pFormNode)) { - fCurPos += rgCurLineLayoutItems[0][j]->m_sSize.x; - } - } - m_pLayoutItem->AddChild(rgCurLineLayoutItems[0][j]); - m_fLastRowWidth = fCurPos; - } - fCurPos = (fContentWidthLimit + fGroupWidths[0] - fGroupWidths[1] - - fGroupWidths[2]) / - 2; - for (int32_t c = nGroupLengths[1], j = 0; j < c; j++) { - if (bRootForceTb) { - FX_FLOAT fAbsoluteX, fAbsoluteY; - CalculatePositionedContainerPos(rgCurLineLayoutItems[1][j]->m_pFormNode, - rgCurLineLayoutItems[1][j]->m_sSize.x, - rgCurLineLayoutItems[1][j]->m_sSize.y, - fAbsoluteX, fAbsoluteY); - rgCurLineLayoutItems[1][j]->m_sPos = CFX_PointF(fAbsoluteX, fAbsoluteY); - } else { - rgCurLineLayoutItems[1][j]->m_sPos = - CFX_PointF(fCurPos, fContentCurRowY); - if (XFA_ItemLayoutProcessor_IsTakingSpace( - rgCurLineLayoutItems[1][j]->m_pFormNode)) { - fCurPos += rgCurLineLayoutItems[1][j]->m_sSize.x; - } - } - m_pLayoutItem->AddChild(rgCurLineLayoutItems[1][j]); - m_fLastRowWidth = fCurPos; - } - fCurPos = fContentWidthLimit - fGroupWidths[2]; - for (int32_t c = nGroupLengths[2], j = 0; j < c; j++) { - if (bRootForceTb) { - FX_FLOAT fAbsoluteX, fAbsoluteY; - CalculatePositionedContainerPos(rgCurLineLayoutItems[2][j]->m_pFormNode, - rgCurLineLayoutItems[2][j]->m_sSize.x, - rgCurLineLayoutItems[2][j]->m_sSize.y, - fAbsoluteX, fAbsoluteY); - rgCurLineLayoutItems[2][j]->m_sPos = CFX_PointF(fAbsoluteX, fAbsoluteY); - } else { - rgCurLineLayoutItems[2][j]->m_sPos = - CFX_PointF(fCurPos, fContentCurRowY); - if (XFA_ItemLayoutProcessor_IsTakingSpace( - rgCurLineLayoutItems[2][j]->m_pFormNode)) { - fCurPos += rgCurLineLayoutItems[2][j]->m_sSize.x; - } - } - m_pLayoutItem->AddChild(rgCurLineLayoutItems[2][j]); - m_fLastRowWidth = fCurPos; - } - } else { - FX_FLOAT fCurPos; - fCurPos = fGroupWidths[0]; - for (int32_t c = nGroupLengths[0], j = 0; j < c; j++) { - if (XFA_ItemLayoutProcessor_IsTakingSpace( - rgCurLineLayoutItems[0][j]->m_pFormNode)) { - fCurPos -= rgCurLineLayoutItems[0][j]->m_sSize.x; - } - rgCurLineLayoutItems[0][j]->m_sPos = CFX_PointF(fCurPos, fContentCurRowY); - m_pLayoutItem->AddChild(rgCurLineLayoutItems[0][j]); - m_fLastRowWidth = fCurPos; - } - fCurPos = (fContentWidthLimit + fGroupWidths[0] + fGroupWidths[1] - - fGroupWidths[2]) / - 2; - for (int32_t c = nGroupLengths[1], j = 0; j < c; j++) { - if (XFA_ItemLayoutProcessor_IsTakingSpace( - rgCurLineLayoutItems[1][j]->m_pFormNode)) { - fCurPos -= rgCurLineLayoutItems[1][j]->m_sSize.x; - } - rgCurLineLayoutItems[1][j]->m_sPos = CFX_PointF(fCurPos, fContentCurRowY); - m_pLayoutItem->AddChild(rgCurLineLayoutItems[1][j]); - m_fLastRowWidth = fCurPos; - } - fCurPos = fContentWidthLimit; - for (int32_t c = nGroupLengths[2], j = 0; j < c; j++) { - if (XFA_ItemLayoutProcessor_IsTakingSpace( - rgCurLineLayoutItems[2][j]->m_pFormNode)) { - fCurPos -= rgCurLineLayoutItems[2][j]->m_sSize.x; - } - rgCurLineLayoutItems[2][j]->m_sPos = CFX_PointF(fCurPos, fContentCurRowY); - m_pLayoutItem->AddChild(rgCurLineLayoutItems[2][j]); - m_fLastRowWidth = fCurPos; - } - } - m_fLastRowY = fContentCurRowY; - fContentCurRowY += fContentCurRowHeight; - if (bContainerWidthAutoSize) { - FX_FLOAT fChildSuppliedWidth = fGroupWidths[0]; - if (fContentWidthLimit < XFA_LAYOUT_FLOAT_MAX && - fContentWidthLimit > fChildSuppliedWidth) { - fChildSuppliedWidth = fContentWidthLimit; - } - if (fContentCalculatedWidth < fChildSuppliedWidth) { - fContentCalculatedWidth = fChildSuppliedWidth; - } - } - if (bContainerHeightAutoSize) { - FX_FLOAT fChildSuppliedHeight = fContentCurRowY; - if (fContentCalculatedHeight < fChildSuppliedHeight) { - fContentCalculatedHeight = fChildSuppliedHeight; - } - } - return TRUE; -} -CXFA_Node* CXFA_ItemLayoutProcessor::GetSubformSetParent( - CXFA_Node* pSubformSet) { - if (pSubformSet && pSubformSet->GetClassID() == XFA_ELEMENT_SubformSet) { - CXFA_Node* pParent = pSubformSet->GetNodeItem(XFA_NODEITEM_Parent); - while (pParent) { - if (pParent->GetClassID() != XFA_ELEMENT_SubformSet) { - return pParent; - } - pParent = pParent->GetNodeItem(XFA_NODEITEM_Parent); - } - } - return pSubformSet; -} -void CXFA_ItemLayoutProcessor::DoLayoutField() { - if (m_pLayoutItem) - return; - - ASSERT(m_pCurChildNode == XFA_LAYOUT_INVALIDNODE); - m_pLayoutItem = CreateContentLayoutItem(m_pFormNode); - if (!m_pLayoutItem) { - return; - } - CXFA_Document* pDocument = m_pFormNode->GetDocument(); - IXFA_Notify* pNotify = pDocument->GetParser()->GetNotify(); - FX_FLOAT fHeight = -1; - FX_FLOAT fWidth = -1; - pNotify->StartFieldDrawLayout(m_pFormNode, fWidth, fHeight); - int32_t nRotate = - FXSYS_round(m_pFormNode->GetMeasure(XFA_ATTRIBUTE_Rotate).GetValue()); - nRotate = XFA_MapRotation(nRotate); - if (nRotate == 90 || nRotate == 270) { - FX_FLOAT fTmp = fWidth; - fWidth = fHeight; - fHeight = fTmp; - } - SetCurrentComponentSize(fWidth, fHeight); -} -XFA_ItemLayoutProcessorResult CXFA_ItemLayoutProcessor::DoLayout( - FX_BOOL bUseBreakControl, - FX_FLOAT fHeightLimit, - FX_FLOAT fRealHeight, - CXFA_LayoutContext* pContext) { - XFA_ELEMENT eClassID = m_pFormNode->GetClassID(); - switch (eClassID) { - case XFA_ELEMENT_Subform: - case XFA_ELEMENT_Area: - case XFA_ELEMENT_ExclGroup: - case XFA_ELEMENT_SubformSet: { - FX_BOOL bRootForceTb = FALSE; - CXFA_Node* pLayoutNode = GetSubformSetParent(m_pFormNode); - XFA_ATTRIBUTEENUM eLayoutStrategy = - XFA_ItemLayoutProcessor_GetLayout(pLayoutNode, bRootForceTb); - switch (eLayoutStrategy) { - case XFA_ATTRIBUTEENUM_Tb: - case XFA_ATTRIBUTEENUM_Lr_tb: - case XFA_ATTRIBUTEENUM_Rl_tb: - return DoLayoutFlowedContainer(bUseBreakControl, eLayoutStrategy, - fHeightLimit, fRealHeight, pContext, - bRootForceTb); - case XFA_ATTRIBUTEENUM_Position: - case XFA_ATTRIBUTEENUM_Row: - case XFA_ATTRIBUTEENUM_Rl_row: - default: - DoLayoutPositionedContainer(pContext); - m_nCurChildNodeStage = XFA_ItemLayoutProcessorStages_Done; - return XFA_ItemLayoutProcessorResult_Done; - case XFA_ATTRIBUTEENUM_Table: - DoLayoutTableContainer(pLayoutNode); - m_nCurChildNodeStage = XFA_ItemLayoutProcessorStages_Done; - return XFA_ItemLayoutProcessorResult_Done; - } - } - case XFA_ELEMENT_Draw: - case XFA_ELEMENT_Field: - DoLayoutField(); - m_nCurChildNodeStage = XFA_ItemLayoutProcessorStages_Done; - return XFA_ItemLayoutProcessorResult_Done; - case XFA_ELEMENT_ContentArea: - return XFA_ItemLayoutProcessorResult_Done; - default: - return XFA_ItemLayoutProcessorResult_Done; - } -} -void CXFA_ItemLayoutProcessor::GetCurrentComponentPos(FX_FLOAT& fAbsoluteX, - FX_FLOAT& fAbsoluteY) { - ASSERT(m_pLayoutItem); - fAbsoluteX = m_pLayoutItem->m_sPos.x; - fAbsoluteY = m_pLayoutItem->m_sPos.y; -} -void CXFA_ItemLayoutProcessor::GetCurrentComponentSize(FX_FLOAT& fWidth, - FX_FLOAT& fHeight) { - ASSERT(m_pLayoutItem); - fWidth = m_pLayoutItem->m_sSize.x; - fHeight = m_pLayoutItem->m_sSize.y; -} -void CXFA_ItemLayoutProcessor::SetCurrentComponentPos(FX_FLOAT fAbsoluteX, - FX_FLOAT fAbsoluteY) { - m_pLayoutItem->m_sPos = CFX_PointF(fAbsoluteX, fAbsoluteY); -} -void CXFA_ItemLayoutProcessor::SetCurrentComponentSize(FX_FLOAT fWidth, - FX_FLOAT fHeight) { - m_pLayoutItem->m_sSize = CFX_SizeF(fWidth, fHeight); -} -FX_BOOL CXFA_ItemLayoutProcessor::JudgeLeaderOrTrailerForOccur( - CXFA_Node* pFormNode) { - if (pFormNode == NULL) { - return FALSE; - } - CXFA_Node* pTemplate = pFormNode->GetTemplateNode(); - if (!pTemplate) { - pTemplate = pFormNode; - } - CXFA_Occur NodeOccur(pTemplate->GetFirstChildByClass(XFA_ELEMENT_Occur)); - int32_t iMax = NodeOccur.GetMax(); - if (iMax > -1) { - int32_t iCount = - (int32_t)(uintptr_t)m_PendingNodesCount.GetValueAt(pTemplate); - if (iCount >= iMax) { - return FALSE; - } - iCount++; - m_PendingNodesCount.SetAt(pTemplate, (void*)(uintptr_t)(iCount)); - return TRUE; - } - return TRUE; -} diff --git a/xfa/src/fxfa/parser/xfa_layout_itemlayout.h b/xfa/src/fxfa/parser/xfa_layout_itemlayout.h deleted file mode 100644 index 16a91d4f03..0000000000 --- a/xfa/src/fxfa/parser/xfa_layout_itemlayout.h +++ /dev/null @@ -1,195 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXFA_PARSER_XFA_LAYOUT_ITEMLAYOUT_H_ -#define XFA_SRC_FXFA_PARSER_XFA_LAYOUT_ITEMLAYOUT_H_ - -#include - -#include - -#include "core/include/fxcrt/fx_basic.h" -#include "xfa/src/fxfa/parser/xfa_doclayout.h" -#include "xfa/src/fxfa/parser/xfa_document_layout_imp.h" - -#define XFA_LAYOUT_INVALIDNODE ((CXFA_Node*)(intptr_t)-1) -#define XFA_LAYOUT_FLOAT_PERCISION (0.0005f) -#define XFA_LAYOUT_FLOAT_MAX FLT_MAX - -class CXFA_ContainerLayoutItem; -class CXFA_ContentLayoutItem; -class CXFA_ItemLayoutProcessor; -class CXFA_LayoutPageMgr; -class CXFA_Node; - -enum XFA_ItemLayoutProcessorResult { - XFA_ItemLayoutProcessorResult_Done, - XFA_ItemLayoutProcessorResult_PageFullBreak, - XFA_ItemLayoutProcessorResult_RowFullBreak, - XFA_ItemLayoutProcessorResult_ManualBreak, -}; - -enum XFA_ItemLayoutProcessorStages { - XFA_ItemLayoutProcessorStages_None, - XFA_ItemLayoutProcessorStages_BookendLeader, - XFA_ItemLayoutProcessorStages_BreakBefore, - XFA_ItemLayoutProcessorStages_Keep, - XFA_ItemLayoutProcessorStages_Container, - XFA_ItemLayoutProcessorStages_BreakAfter, - XFA_ItemLayoutProcessorStages_BookendTrailer, - XFA_ItemLayoutProcessorStages_Done, -}; - -class CXFA_LayoutContext { - public: - CXFA_LayoutContext() - : m_prgSpecifiedColumnWidths(NULL), - m_fCurColumnWidth(0), - m_bCurColumnWidthAvaiable(FALSE), - m_pOverflowProcessor(NULL), - m_pOverflowNode(NULL) {} - ~CXFA_LayoutContext() { m_pOverflowProcessor = NULL; } - CFX_ArrayTemplate* m_prgSpecifiedColumnWidths; - FX_FLOAT m_fCurColumnWidth; - FX_BOOL m_bCurColumnWidthAvaiable; - CXFA_ItemLayoutProcessor* m_pOverflowProcessor; - CXFA_Node* m_pOverflowNode; -}; - -class CXFA_ItemLayoutProcessor { - public: - CXFA_ItemLayoutProcessor(CXFA_Node* pNode, CXFA_LayoutPageMgr* pPageMgr); - - XFA_ItemLayoutProcessorResult DoLayout( - FX_BOOL bUseBreakControl, - FX_FLOAT fHeightLimit, - FX_FLOAT fRealHeight = XFA_LAYOUT_FLOAT_MAX, - CXFA_LayoutContext* pContext = NULL); - - void GetCurrentComponentPos(FX_FLOAT& fAbsoluteX, FX_FLOAT& fAbsoluteY); - - void GetCurrentComponentSize(FX_FLOAT& fWidth, FX_FLOAT& fHeight); - - void SetCurrentComponentPos(FX_FLOAT fAbsoluteX, FX_FLOAT fAbsoluteY); - - void SetCurrentComponentSize(FX_FLOAT fWidth, FX_FLOAT fHeight); - inline CXFA_Node* GetFormNode() { return m_pFormNode; } - inline FX_BOOL HasLayoutItem() { return m_pLayoutItem != NULL; } - CXFA_ContentLayoutItem* ExtractLayoutItem(); - - static FX_BOOL IncrementRelayoutNode(CXFA_LayoutProcessor* pLayoutProcessor, - CXFA_Node* pNode, - CXFA_Node* pParentNode); - static void CalculatePositionedContainerPos(CXFA_Node* pNode, - FX_FLOAT fWidth, - FX_FLOAT fHeight, - FX_FLOAT& fAbsoluteX, - FX_FLOAT& fAbsoluteY); - static FX_BOOL FindLayoutItemSplitPos(CXFA_ContentLayoutItem* pLayoutItem, - FX_FLOAT fCurVerticalOffset, - FX_FLOAT& fProposedSplitPos, - FX_BOOL& bAppChange, - FX_BOOL bCalculateMargin = TRUE); - FX_FLOAT FindSplitPos(FX_FLOAT fProposedSplitPos); - void SplitLayoutItem(CXFA_ContentLayoutItem* pLayoutItem, - CXFA_ContentLayoutItem* pSecondParent, - FX_FLOAT fSplitPos); - void SplitLayoutItem(FX_FLOAT fSplitPos); - FX_BOOL JudgePutNextPage( - CXFA_ContentLayoutItem* pParentLayoutItem, - FX_FLOAT fChildHeight, - CFX_ArrayTemplate& pKeepItems); - FX_BOOL ProcessKeepForSplite( - CXFA_ItemLayoutProcessor* pParentProcessor, - CXFA_ItemLayoutProcessor* pChildProcessor, - XFA_ItemLayoutProcessorResult eRetValue, - CFX_ArrayTemplate& rgCurLineLayoutItem, - FX_FLOAT& fContentCurRowAvailWidth, - FX_FLOAT& fContentCurRowHeight, - FX_FLOAT& fContentCurRowY, - FX_BOOL& bAddedItemInRow, - FX_BOOL& bForceEndPage, - XFA_ItemLayoutProcessorResult& result); - FX_FLOAT InsertKeepLayoutItems(); - void DoLayoutPageArea(CXFA_ContainerLayoutItem* pPageAreaLayoutItem); - FX_BOOL CalculateRowChildPosition( - CFX_ArrayTemplate(&rgCurLineLayoutItems)[3], - XFA_ATTRIBUTEENUM eFlowStrategy, - FX_BOOL bContainerHeightAutoSize, - FX_BOOL bContainerWidthAutoSize, - FX_FLOAT& fContentCalculatedWidth, - FX_FLOAT& fContentCalculatedHeight, - FX_FLOAT& fContentCurRowY, - FX_FLOAT fContentCurRowHeight, - FX_FLOAT fContentWidthLimit, - FX_BOOL bRootForceTb = FALSE); - - void ProcessUnUseOverFlow(CXFA_Node* pLeaderNode, - CXFA_Node* pTrailerNode, - CXFA_ContentLayoutItem* pTrailerItem, - CXFA_Node* pFormNode); - void ProcessUnUseBinds(CXFA_Node* pFormNode); - FX_BOOL IsAddNewRowForTrailer(CXFA_ContentLayoutItem* pTrailerItem); - FX_BOOL JudgeLeaderOrTrailerForOccur(CXFA_Node* pFormNode); - CXFA_ContentLayoutItem* CreateContentLayoutItem(CXFA_Node* pFormNode); - - protected: - void DoLayoutPositionedContainer(CXFA_LayoutContext* pContext = NULL); - void DoLayoutTableContainer(CXFA_Node* pLayoutNode); - XFA_ItemLayoutProcessorResult DoLayoutFlowedContainer( - FX_BOOL bUseBreakControl, - XFA_ATTRIBUTEENUM eFlowStrategy, - FX_FLOAT fHeightLimit, - FX_FLOAT fRealHeight, - CXFA_LayoutContext* pContext = NULL, - FX_BOOL bRootForceTb = FALSE); - void DoLayoutField(); - void XFA_ItemLayoutProcessor_GotoNextContainerNode( - CXFA_Node*& pCurActionNode, - XFA_ItemLayoutProcessorStages& nCurStage, - CXFA_Node* pParentContainer, - FX_BOOL bUsePageBreak); - - FX_BOOL ProcessKeepNodesForCheckNext(CXFA_Node*& pCurActionNode, - XFA_ItemLayoutProcessorStages& nCurStage, - CXFA_Node*& pNextContainer, - FX_BOOL& bLastKeepNode); - - FX_BOOL ProcessKeepNodesForBreakBefore( - CXFA_Node*& pCurActionNode, - XFA_ItemLayoutProcessorStages& nCurStage, - CXFA_Node* pContainerNode); - - CXFA_Node* GetSubformSetParent(CXFA_Node* pSubformSet); - - public: - FX_BOOL m_bKeepBreakFinish; - FX_BOOL m_bIsProcessKeep; - CXFA_Node* m_pKeepHeadNode; - CXFA_Node* m_pKeepTailNode; - CXFA_Node* m_pFormNode; - CXFA_ContentLayoutItem* m_pLayoutItem; - CXFA_ContentLayoutItem* m_pOldLayoutItem; - CXFA_Node* m_pCurChildNode; - CXFA_ItemLayoutProcessor* m_pCurChildPreprocessor; - XFA_ItemLayoutProcessorStages m_nCurChildNodeStage; - FX_FLOAT m_fUsedSize; - CXFA_LayoutPageMgr* m_pPageMgr; - std::list m_PendingNodes; - FX_BOOL m_bBreakPending; - CFX_ArrayTemplate m_rgSpecifiedColumnWidths; - CFX_ArrayTemplate m_arrayKeepItems; - CFX_MapPtrToPtr m_PendingNodesCount; - FX_FLOAT m_fLastRowWidth; - FX_FLOAT m_fLastRowY; - FX_FLOAT m_fWidthLimite; - FX_BOOL m_bUseInheriated; - XFA_ItemLayoutProcessorResult m_ePreProcessRs; - FX_BOOL m_bHasAvailHeight; -}; -FX_BOOL XFA_ItemLayoutProcessor_IsTakingSpace(CXFA_Node* pNode); - -#endif // XFA_SRC_FXFA_PARSER_XFA_LAYOUT_ITEMLAYOUT_H_ diff --git a/xfa/src/fxfa/parser/xfa_layout_pagemgr_new.cpp b/xfa/src/fxfa/parser/xfa_layout_pagemgr_new.cpp deleted file mode 100644 index 0ca5af5ca4..0000000000 --- a/xfa/src/fxfa/parser/xfa_layout_pagemgr_new.cpp +++ /dev/null @@ -1,1931 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fxfa/parser/xfa_layout_pagemgr_new.h" - -#include "xfa/src/fxfa/fm2js/xfa_fm2jsapi.h" -#include "xfa/src/fxfa/parser/xfa_docdata.h" -#include "xfa/src/fxfa/parser/xfa_doclayout.h" -#include "xfa/src/fxfa/parser/xfa_document.h" -#include "xfa/src/fxfa/parser/xfa_document_datamerger_imp.h" -#include "xfa/src/fxfa/parser/xfa_document_layout_imp.h" -#include "xfa/src/fxfa/parser/xfa_layout_appadapter.h" -#include "xfa/src/fxfa/parser/xfa_layout_itemlayout.h" -#include "xfa/src/fxfa/parser/xfa_localemgr.h" -#include "xfa/src/fxfa/parser/xfa_object.h" -#include "xfa/src/fxfa/parser/xfa_parser.h" -#include "xfa/src/fxfa/parser/xfa_script.h" -#include "xfa/src/fxfa/parser/xfa_utils.h" - -CXFA_LayoutPageMgr::CXFA_LayoutPageMgr(CXFA_LayoutProcessor* pLayoutProcessor) - : m_pLayoutProcessor(pLayoutProcessor), - m_pTemplatePageSetRoot(nullptr), - m_pPageSetLayoutItemRoot(nullptr), - m_pPageSetCurRoot(nullptr), - m_pCurrentContainerRecord(nullptr), - m_pCurPageArea(nullptr), - m_nAvailPages(0), - m_nCurPageCount(0), - m_ePageSetMode(XFA_ATTRIBUTEENUM_OrderedOccurrence), - m_bCreateOverFlowPage(FALSE) {} -CXFA_LayoutPageMgr::~CXFA_LayoutPageMgr() { - ClearData(); - CXFA_LayoutItem* pLayoutItem = GetRootLayoutItem(); - CXFA_LayoutItem* pNextLayout = NULL; - for (; pLayoutItem; pLayoutItem = pNextLayout) { - pNextLayout = pLayoutItem->m_pNextSibling; - XFA_ReleaseLayoutItem(pLayoutItem); - } -} -FX_BOOL CXFA_LayoutPageMgr::InitLayoutPage(CXFA_Node* pFormNode) { - PrepareLayout(); - CXFA_Node* pTemplateNode = pFormNode->GetTemplateNode(); - if (!pTemplateNode) { - return FALSE; - } - m_pTemplatePageSetRoot = pTemplateNode->GetProperty(0, XFA_ELEMENT_PageSet); - ASSERT(m_pTemplatePageSetRoot); - if (m_pPageSetLayoutItemRoot) { - m_pPageSetLayoutItemRoot->m_pParent = NULL; - m_pPageSetLayoutItemRoot->m_pFirstChild = NULL; - m_pPageSetLayoutItemRoot->m_pNextSibling = NULL; - m_pPageSetLayoutItemRoot->m_pFormNode = m_pTemplatePageSetRoot; - } else { - m_pPageSetLayoutItemRoot = - new CXFA_ContainerLayoutItem(m_pTemplatePageSetRoot); - } - m_pPageSetCurRoot = m_pPageSetLayoutItemRoot; - m_pTemplatePageSetRoot->SetUserData(XFA_LAYOUTITEMKEY, - (void*)m_pPageSetLayoutItemRoot); - XFA_ATTRIBUTEENUM eRelation = - m_pTemplatePageSetRoot->GetEnum(XFA_ATTRIBUTE_Relation); - if (eRelation != XFA_ATTRIBUTEENUM_Unknown) { - m_ePageSetMode = eRelation; - } - InitPageSetMap(); - CXFA_Node* pPageArea = NULL; - int32_t iCount = 0; - for (pPageArea = m_pTemplatePageSetRoot->GetNodeItem(XFA_NODEITEM_FirstChild); - pPageArea; - pPageArea = pPageArea->GetNodeItem(XFA_NODEITEM_NextSibling)) { - if (pPageArea->GetClassID() == XFA_ELEMENT_PageArea) { - iCount++; - if (pPageArea->GetFirstChildByClass(XFA_ELEMENT_ContentArea)) { - return TRUE; - } - } - } - if (iCount > 0) { - return FALSE; - } - CXFA_Document* pDocument = pTemplateNode->GetDocument(); - IXFA_ObjFactory* pObjFactory = pDocument->GetParser()->GetFactory(); - pPageArea = m_pTemplatePageSetRoot->GetChild(0, XFA_ELEMENT_PageArea); - if (!pPageArea) { - pPageArea = pObjFactory->CreateNode(m_pTemplatePageSetRoot->GetPacketID(), - XFA_ELEMENT_PageArea); - if (!pPageArea) { - return FALSE; - } - m_pTemplatePageSetRoot->InsertChild(pPageArea, NULL); - pPageArea->SetFlag(XFA_NODEFLAG_Initialized); - } - CXFA_Node* pContentArea = pPageArea->GetChild(0, XFA_ELEMENT_ContentArea); - if (!pContentArea) { - pContentArea = pObjFactory->CreateNode(pPageArea->GetPacketID(), - XFA_ELEMENT_ContentArea); - if (!pContentArea) { - return FALSE; - } - pPageArea->InsertChild(pContentArea, NULL); - pContentArea->SetFlag(XFA_NODEFLAG_Initialized); - pContentArea->SetMeasure(XFA_ATTRIBUTE_X, - CXFA_Measurement(0.25f, XFA_UNIT_In)); - pContentArea->SetMeasure(XFA_ATTRIBUTE_Y, - CXFA_Measurement(0.25f, XFA_UNIT_In)); - pContentArea->SetMeasure(XFA_ATTRIBUTE_W, - CXFA_Measurement(8.0f, XFA_UNIT_In)); - pContentArea->SetMeasure(XFA_ATTRIBUTE_H, - CXFA_Measurement(10.5f, XFA_UNIT_In)); - } - CXFA_Node* pMedium = pPageArea->GetChild(0, XFA_ELEMENT_Medium); - if (!pMedium) { - pMedium = - pObjFactory->CreateNode(pPageArea->GetPacketID(), XFA_ELEMENT_Medium); - if (!pContentArea) { - return FALSE; - } - pPageArea->InsertChild(pMedium, NULL); - pMedium->SetFlag(XFA_NODEFLAG_Initialized); - pMedium->SetMeasure(XFA_ATTRIBUTE_Short, - CXFA_Measurement(8.5f, XFA_UNIT_In)); - pMedium->SetMeasure(XFA_ATTRIBUTE_Long, - CXFA_Measurement(11.0f, XFA_UNIT_In)); - } - return TRUE; -} -FX_BOOL CXFA_LayoutPageMgr::PrepareFirstPage(CXFA_Node* pRootSubform) { - FX_BOOL bProBreakBefore = FALSE; - CXFA_Node* pBreakBeforeNode = NULL; - while (pRootSubform) { - for (CXFA_Node* pBreakNode = - pRootSubform->GetNodeItem(XFA_NODEITEM_FirstChild); - pBreakNode; - pBreakNode = pBreakNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { - XFA_ELEMENT eType = pBreakNode->GetClassID(); - if (eType == XFA_ELEMENT_BreakBefore || - (eType == XFA_ELEMENT_Break && - pBreakNode->GetEnum(XFA_ATTRIBUTE_Before) != - XFA_ATTRIBUTEENUM_Auto)) { - bProBreakBefore = TRUE; - pBreakBeforeNode = pBreakNode; - break; - } - } - if (bProBreakBefore) { - break; - } - bProBreakBefore = TRUE; - pRootSubform = pRootSubform->GetFirstChildByClass(XFA_ELEMENT_Subform); - while (pRootSubform && - !XFA_ItemLayoutProcessor_IsTakingSpace(pRootSubform)) { - pRootSubform = pRootSubform->GetNextSameClassSibling(XFA_ELEMENT_Subform); - } - } - CXFA_Node *pLeader, *pTrailer; - if (pBreakBeforeNode && - ExecuteBreakBeforeOrAfter(pBreakBeforeNode, TRUE, pLeader, pTrailer)) { - m_pCurrentContainerRecord = m_rgProposedContainerRecord.GetHeadPosition(); - return TRUE; - } - return AppendNewPage(TRUE); -} -FX_BOOL CXFA_LayoutPageMgr::AppendNewPage(FX_BOOL bFirstTemPage) { - if (m_pCurrentContainerRecord != - m_rgProposedContainerRecord.GetTailPosition()) { - return TRUE; - } - CXFA_Node* pPageNode = GetNextAvailPageArea(NULL); - if (!pPageNode) { - return FALSE; - } - if (bFirstTemPage && m_pCurrentContainerRecord == NULL) { - m_pCurrentContainerRecord = m_rgProposedContainerRecord.GetHeadPosition(); - } - return !bFirstTemPage || m_pCurrentContainerRecord; -} -static void XFA_LayoutItemMgr_ReorderLayoutItemToTail( - CXFA_ContainerLayoutItem* pLayoutItem) { - CXFA_ContainerLayoutItem* pParentLayoutItem = - (CXFA_ContainerLayoutItem*)pLayoutItem->m_pParent; - if (!pParentLayoutItem) { - return; - } - pParentLayoutItem->RemoveChild(pLayoutItem); - pParentLayoutItem->AddChild(pLayoutItem); -} -static void XFA_LayoutItemMgr_RemoveLayoutItem( - CXFA_ContainerLayoutItem* pLayoutItem) { - CXFA_ContainerLayoutItem* pParentLayoutItem = - (CXFA_ContainerLayoutItem*)pLayoutItem->m_pParent; - if (!pParentLayoutItem) { - return; - } - pParentLayoutItem->RemoveChild(pLayoutItem); -} -void CXFA_LayoutPageMgr::RemoveLayoutRecord(CXFA_ContainerRecord* pNewRecord, - CXFA_ContainerRecord* pPrevRecord) { - if (!pNewRecord || !pPrevRecord) { - return; - } - if (pNewRecord->pCurPageSet != pPrevRecord->pCurPageSet) { - XFA_LayoutItemMgr_RemoveLayoutItem(pNewRecord->pCurPageSet); - return; - } - if (pNewRecord->pCurPageArea != pPrevRecord->pCurPageArea) { - XFA_LayoutItemMgr_RemoveLayoutItem(pNewRecord->pCurPageArea); - return; - } - if (pNewRecord->pCurContentArea != pPrevRecord->pCurContentArea) { - XFA_LayoutItemMgr_RemoveLayoutItem(pNewRecord->pCurContentArea); - return; - } -} -void CXFA_LayoutPageMgr::ReorderPendingLayoutRecordToTail( - CXFA_ContainerRecord* pNewRecord, - CXFA_ContainerRecord* pPrevRecord) { - if (!pNewRecord || !pPrevRecord) { - return; - } - if (pNewRecord->pCurPageSet != pPrevRecord->pCurPageSet) { - XFA_LayoutItemMgr_ReorderLayoutItemToTail(pNewRecord->pCurPageSet); - return; - } - if (pNewRecord->pCurPageArea != pPrevRecord->pCurPageArea) { - XFA_LayoutItemMgr_ReorderLayoutItemToTail(pNewRecord->pCurPageArea); - return; - } - if (pNewRecord->pCurContentArea != pPrevRecord->pCurContentArea) { - XFA_LayoutItemMgr_ReorderLayoutItemToTail(pNewRecord->pCurContentArea); - return; - } -} -void CXFA_LayoutPageMgr::SubmitContentItem( - CXFA_ContentLayoutItem* pContentLayoutItem, - XFA_ItemLayoutProcessorResult eStatus) { - if (pContentLayoutItem) { - GetCurrentContainerRecord()->pCurContentArea->AddChild(pContentLayoutItem); - m_bCreateOverFlowPage = FALSE; - } - if (eStatus != XFA_ItemLayoutProcessorResult_Done) { - if (eStatus == XFA_ItemLayoutProcessorResult_PageFullBreak && - m_pCurrentContainerRecord == - m_rgProposedContainerRecord.GetTailPosition()) { - AppendNewPage(); - } - m_pCurrentContainerRecord = m_rgProposedContainerRecord.GetTailPosition(); - m_pCurPageArea = GetCurrentContainerRecord()->pCurPageArea->m_pFormNode; - } -} -FX_FLOAT CXFA_LayoutPageMgr::GetAvailHeight() { - CXFA_ContainerLayoutItem* pLayoutItem = - GetCurrentContainerRecord()->pCurContentArea; - if (!pLayoutItem || !pLayoutItem->m_pFormNode) - return 0.0f; - FX_FLOAT fAvailHeight = - pLayoutItem->m_pFormNode->GetMeasure(XFA_ATTRIBUTE_H).ToUnit(XFA_UNIT_Pt); - if (fAvailHeight >= XFA_LAYOUT_FLOAT_PERCISION) - return fAvailHeight; - if (m_pCurrentContainerRecord == - m_rgProposedContainerRecord.GetHeadPosition()) { - return 0.0f; - } - return XFA_LAYOUT_FLOAT_MAX; -} -static CXFA_Node* XFA_ResolveBreakTarget(CXFA_Node* pPageSetRoot, - FX_BOOL bNewExprStyle, - CFX_WideStringC& wsTargetExpr) { - CXFA_Document* pDocument = pPageSetRoot->GetDocument(); - if (wsTargetExpr.IsEmpty()) { - return NULL; - } - CFX_WideString wsTargetAll = wsTargetExpr; - wsTargetAll.TrimLeft(); - wsTargetAll.TrimRight(); - int32_t iSpliteIndex = 0; - FX_BOOL bTargetAllFind = TRUE; - while (iSpliteIndex != -1) { - CFX_WideString wsTargetExpr; - int32_t iSpliteNextIndex = 0; - if (!bTargetAllFind) { - iSpliteNextIndex = wsTargetAll.Find(' ', iSpliteIndex); - wsTargetExpr = - wsTargetAll.Mid(iSpliteIndex, iSpliteNextIndex - iSpliteIndex); - } else { - wsTargetExpr = wsTargetAll; - } - if (wsTargetExpr.IsEmpty()) { - return NULL; - } - bTargetAllFind = FALSE; - if (wsTargetExpr.GetAt(0) == '#') { - CXFA_Node* pNode = pDocument->GetNodeByID( - ToNode(pDocument->GetXFAObject(XFA_HASHCODE_Template)), - wsTargetExpr.Mid(1)); - if (pNode) { - return pNode; - } - } else if (bNewExprStyle) { - CFX_WideString wsProcessedTarget = wsTargetExpr; - if (wsTargetExpr.Left(4) == FX_WSTRC(L"som(") && - wsTargetExpr.Right(1) == FX_WSTRC(L")")) { - wsProcessedTarget = wsTargetExpr.Mid(4, wsTargetExpr.GetLength() - 5); - } - XFA_RESOLVENODE_RS rs; - int32_t iCount = pDocument->GetScriptContext()->ResolveObjects( - pPageSetRoot, wsProcessedTarget, rs, - XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Properties | - XFA_RESOLVENODE_Attributes | XFA_RESOLVENODE_Siblings | - XFA_RESOLVENODE_Parent); - if (iCount > 0 && rs.nodes[0]->IsNode()) { - return rs.nodes[0]->AsNode(); - } - } - iSpliteIndex = iSpliteNextIndex; - } - return NULL; -} - -FX_BOOL XFA_LayoutPageMgr_RunBreakTestScript(CXFA_Node* pTestScript) { - CFX_WideString wsExpression; - pTestScript->TryContent(wsExpression); - if (wsExpression.IsEmpty()) { - return TRUE; - } - return pTestScript->GetDocument()->GetParser()->GetNotify()->RunScript( - pTestScript, pTestScript->GetNodeItem(XFA_NODEITEM_Parent, - XFA_OBJECTTYPE_ContainerNode)); -} -CXFA_ContainerRecord* CXFA_LayoutPageMgr::CreateContainerRecord( - CXFA_Node* pPageNode, - FX_BOOL bCreateNew) { - CXFA_ContainerRecord* pNewRecord = new CXFA_ContainerRecord(); - if (m_pCurrentContainerRecord) { - if (!IsPageSetRootOrderedOccurrence() || pPageNode == NULL) { - *pNewRecord = *GetCurrentContainerRecord(); - m_rgProposedContainerRecord.AddTail(pNewRecord); - return pNewRecord; - } - CXFA_Node* pPageSet = pPageNode->GetNodeItem(XFA_NODEITEM_Parent); - if (!bCreateNew) { - if (pPageSet == m_pTemplatePageSetRoot) { - pNewRecord->pCurPageSet = m_pPageSetCurRoot; - } else { - CXFA_ContainerLayoutItem* pParentLayoutItem = - (CXFA_ContainerLayoutItem*)pPageSet->GetUserData(XFA_LAYOUTITEMKEY); - if (pParentLayoutItem == NULL) { - pParentLayoutItem = m_pPageSetCurRoot; - } - pNewRecord->pCurPageSet = pParentLayoutItem; - } - } else { - CXFA_ContainerLayoutItem* pParentPageSetLayout = NULL; - if (pPageSet == GetCurrentContainerRecord()->pCurPageSet->m_pFormNode) { - pParentPageSetLayout = - (CXFA_ContainerLayoutItem*)GetCurrentContainerRecord() - ->pCurPageSet->m_pParent; - } else { - pParentPageSetLayout = - (CXFA_ContainerLayoutItem*)pPageSet->GetNodeItem( - XFA_NODEITEM_Parent) - ->GetUserData(XFA_LAYOUTITEMKEY); - } - CXFA_ContainerLayoutItem* pPageSetLayoutItem = - new CXFA_ContainerLayoutItem(pPageSet); - pPageSet->SetUserData(XFA_LAYOUTITEMKEY, (void*)pPageSetLayoutItem); - if (pParentPageSetLayout == NULL) { - CXFA_ContainerLayoutItem* pPrePageSet = m_pPageSetLayoutItemRoot; - while (pPrePageSet->m_pNextSibling) { - pPrePageSet = (CXFA_ContainerLayoutItem*)pPrePageSet->m_pNextSibling; - } - pPrePageSet->m_pNextSibling = pPageSetLayoutItem; - m_pPageSetCurRoot = pPageSetLayoutItem; - } else { - pParentPageSetLayout->AddChild(pPageSetLayoutItem); - } - pNewRecord->pCurPageSet = pPageSetLayoutItem; - } - } else { - if (pPageNode) { - CXFA_Node* pPageSet = pPageNode->GetNodeItem(XFA_NODEITEM_Parent); - if (pPageSet == m_pTemplatePageSetRoot) { - pNewRecord->pCurPageSet = m_pPageSetLayoutItemRoot; - } else { - CXFA_ContainerLayoutItem* pPageSetLayoutItem = - new CXFA_ContainerLayoutItem(pPageSet); - pPageSet->SetUserData(XFA_LAYOUTITEMKEY, (void*)pPageSetLayoutItem); - m_pPageSetLayoutItemRoot->AddChild(pPageSetLayoutItem); - pNewRecord->pCurPageSet = pPageSetLayoutItem; - } - } else { - pNewRecord->pCurPageSet = m_pPageSetLayoutItemRoot; - } - } - m_rgProposedContainerRecord.AddTail(pNewRecord); - return pNewRecord; -} -void CXFA_LayoutPageMgr::AddPageAreaLayoutItem(CXFA_ContainerRecord* pNewRecord, - CXFA_Node* pNewPageArea) { - CXFA_ContainerLayoutItem* pNewPageAreaLayoutItem = NULL; - if (m_PageArray.GetSize() > m_nAvailPages) { - CXFA_ContainerLayoutItem* pContainerItem = m_PageArray[m_nAvailPages]; - pContainerItem->m_pFormNode = pNewPageArea; - m_nAvailPages++; - pNewPageAreaLayoutItem = pContainerItem; - } else { - IXFA_Notify* pNotify = - pNewPageArea->GetDocument()->GetParser()->GetNotify(); - CXFA_ContainerLayoutItem* pContainerItem = - (CXFA_ContainerLayoutItem*)pNotify->OnCreateLayoutItem(pNewPageArea); - m_PageArray.Add(pContainerItem); - m_nAvailPages++; - pNotify->OnPageEvent(pContainerItem, XFA_PAGEEVENT_PageAdded, - (void*)(uintptr_t)m_nAvailPages); - pNewPageAreaLayoutItem = pContainerItem; - } - pNewRecord->pCurPageSet->AddChild(pNewPageAreaLayoutItem); - pNewRecord->pCurPageArea = pNewPageAreaLayoutItem; - pNewRecord->pCurContentArea = NULL; -} -void CXFA_LayoutPageMgr::AddContentAreaLayoutItem( - CXFA_ContainerRecord* pNewRecord, - CXFA_Node* pContentArea) { - if (pContentArea == NULL) { - pNewRecord->pCurContentArea = NULL; - return; - } - CXFA_ContainerLayoutItem* pNewContentAreaLayoutItem = - new CXFA_ContainerLayoutItem(pContentArea); - ASSERT(pNewRecord->pCurPageArea); - pNewRecord->pCurPageArea->AddChild(pNewContentAreaLayoutItem); - pNewRecord->pCurContentArea = pNewContentAreaLayoutItem; -} -class CXFA_TraverseStrategy_PageSetContainerLayoutItem { - public: - static inline CXFA_ContainerLayoutItem* GetFirstChild( - CXFA_ContainerLayoutItem* pLayoutItem) { - if (pLayoutItem->m_pFormNode->GetClassID() == XFA_ELEMENT_PageSet) { - CXFA_ContainerLayoutItem* pChildItem = - (CXFA_ContainerLayoutItem*)pLayoutItem->m_pFirstChild; - while (pChildItem && - pChildItem->m_pFormNode->GetClassID() != XFA_ELEMENT_PageSet) { - pChildItem = (CXFA_ContainerLayoutItem*)pChildItem->m_pNextSibling; - } - return pChildItem; - } - return NULL; - } - static inline CXFA_ContainerLayoutItem* GetNextSibling( - CXFA_ContainerLayoutItem* pLayoutItem) { - CXFA_ContainerLayoutItem* pChildItem = - (CXFA_ContainerLayoutItem*)pLayoutItem->m_pNextSibling; - while (pChildItem && - pChildItem->m_pFormNode->GetClassID() != XFA_ELEMENT_PageSet) { - pChildItem = (CXFA_ContainerLayoutItem*)pChildItem->m_pNextSibling; - } - return pChildItem; - } - static inline CXFA_ContainerLayoutItem* GetParent( - CXFA_ContainerLayoutItem* pLayoutItem) { - return (CXFA_ContainerLayoutItem*)pLayoutItem->m_pParent; - } -}; -void CXFA_LayoutPageMgr::FinishPaginatedPageSets() { - CXFA_ContainerLayoutItem* pRootPageSetLayoutItem = m_pPageSetLayoutItemRoot; - for (; pRootPageSetLayoutItem; - pRootPageSetLayoutItem = - (CXFA_ContainerLayoutItem*)pRootPageSetLayoutItem->m_pNextSibling) { - CXFA_NodeIteratorTemplate - sIterator(pRootPageSetLayoutItem); - for (CXFA_ContainerLayoutItem* pPageSetLayoutItem = sIterator.GetCurrent(); - pPageSetLayoutItem; pPageSetLayoutItem = sIterator.MoveToNext()) { - XFA_ATTRIBUTEENUM ePageRelation = - pPageSetLayoutItem->m_pFormNode->GetEnum(XFA_ATTRIBUTE_Relation); - switch (ePageRelation) { - case XFA_ATTRIBUTEENUM_OrderedOccurrence: - default: { ProcessLastPageSet(); } break; - case XFA_ATTRIBUTEENUM_SimplexPaginated: - case XFA_ATTRIBUTEENUM_DuplexPaginated: { - CXFA_LayoutItem* pLastPageAreaLayoutItem = NULL; - int32_t nPageAreaCount = 0; - for (CXFA_LayoutItem* pPageAreaLayoutItem = - pPageSetLayoutItem->m_pFirstChild; - pPageAreaLayoutItem; - pPageAreaLayoutItem = pPageAreaLayoutItem->m_pNextSibling) { - if (pPageAreaLayoutItem->m_pFormNode->GetClassID() != - XFA_ELEMENT_PageArea) { - continue; - } - nPageAreaCount++; - pLastPageAreaLayoutItem = pPageAreaLayoutItem; - } - if (!pLastPageAreaLayoutItem) { - break; - } - if (!FindPageAreaFromPageSet_SimplexDuplex( - pPageSetLayoutItem->m_pFormNode, NULL, NULL, NULL, TRUE, TRUE, - nPageAreaCount == 1 ? XFA_ATTRIBUTEENUM_Only - : XFA_ATTRIBUTEENUM_Last) && - (nPageAreaCount == 1 && - !FindPageAreaFromPageSet_SimplexDuplex( - pPageSetLayoutItem->m_pFormNode, NULL, NULL, NULL, TRUE, - TRUE, XFA_ATTRIBUTEENUM_Last))) { - break; - } - CXFA_Node* pNode = m_pCurPageArea; - XFA_ATTRIBUTEENUM eCurChoice = - pNode->GetEnum(XFA_ATTRIBUTE_PagePosition); - if (eCurChoice == XFA_ATTRIBUTEENUM_Last) { - XFA_ATTRIBUTEENUM eOddOrEven = XFA_ATTRIBUTEENUM_Any; - pNode->TryEnum(XFA_ATTRIBUTE_OddOrEven, eOddOrEven); - XFA_ATTRIBUTEENUM eLastChoice = - pLastPageAreaLayoutItem->m_pFormNode->GetEnum( - XFA_ATTRIBUTE_PagePosition); - if (eLastChoice == XFA_ATTRIBUTEENUM_First && - (ePageRelation == XFA_ATTRIBUTEENUM_SimplexPaginated || - eOddOrEven != XFA_ATTRIBUTEENUM_Odd)) { - CXFA_ContainerRecord* pRecord = CreateContainerRecord(); - AddPageAreaLayoutItem(pRecord, pNode); - break; - } - } - FX_BOOL bUsable = TRUE; - CFX_ArrayTemplate rgUsedHeights; - for (CXFA_LayoutItem* pChildLayoutItem = - pLastPageAreaLayoutItem->m_pFirstChild; - pChildLayoutItem; - pChildLayoutItem = pChildLayoutItem->m_pNextSibling) { - if (pChildLayoutItem->m_pFormNode->GetClassID() != - XFA_ELEMENT_ContentArea) { - continue; - } - FX_FLOAT fUsedHeight = 0; - for (CXFA_LayoutItem* pContentChildLayoutItem = - pChildLayoutItem->m_pFirstChild; - pContentChildLayoutItem; - pContentChildLayoutItem = - pContentChildLayoutItem->m_pNextSibling) { - if (CXFA_ContentLayoutItem* pContent = - pContentChildLayoutItem->AsContentLayoutItem()) { - fUsedHeight += pContent->m_sSize.y; - } - } - rgUsedHeights.Add(fUsedHeight); - } - int32_t iCurContentAreaIndex = -1; - for (CXFA_Node* pContentAreaNode = - pNode->GetNodeItem(XFA_NODEITEM_FirstChild); - pContentAreaNode; - pContentAreaNode = - pContentAreaNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { - if (pContentAreaNode->GetClassID() != XFA_ELEMENT_ContentArea) { - continue; - } - iCurContentAreaIndex++; - if (rgUsedHeights[iCurContentAreaIndex] > - pContentAreaNode->GetMeasure(XFA_ATTRIBUTE_H) - .ToUnit(XFA_UNIT_Pt) + - XFA_LAYOUT_FLOAT_PERCISION) { - bUsable = FALSE; - break; - } - } - if (bUsable) { - CXFA_LayoutItem* pChildLayoutItem = - pLastPageAreaLayoutItem->m_pFirstChild; - CXFA_Node* pContentAreaNode = - pNode->GetNodeItem(XFA_NODEITEM_FirstChild); - pLastPageAreaLayoutItem->m_pFormNode = pNode; - while (pChildLayoutItem && pContentAreaNode) { - if (pChildLayoutItem->m_pFormNode->GetClassID() != - XFA_ELEMENT_ContentArea) { - pChildLayoutItem = pChildLayoutItem->m_pNextSibling; - continue; - } - if (pContentAreaNode->GetClassID() != XFA_ELEMENT_ContentArea) { - pContentAreaNode = - pContentAreaNode->GetNodeItem(XFA_NODEITEM_NextSibling); - continue; - } - pChildLayoutItem->m_pFormNode = pContentAreaNode; - pChildLayoutItem = pChildLayoutItem->m_pNextSibling; - pContentAreaNode = - pContentAreaNode->GetNodeItem(XFA_NODEITEM_NextSibling); - } - } else if (pNode->GetEnum(XFA_ATTRIBUTE_PagePosition) == - XFA_ATTRIBUTEENUM_Last) { - CXFA_ContainerRecord* pRecord = CreateContainerRecord(); - AddPageAreaLayoutItem(pRecord, pNode); - } - } break; - } - } - } -} -int32_t CXFA_LayoutPageMgr::GetPageCount() const { - return m_PageArray.GetSize(); -} -IXFA_LayoutPage* CXFA_LayoutPageMgr::GetPage(int32_t index) const { - if (index < 0 || index >= m_PageArray.GetSize()) - return nullptr; - return m_PageArray[index]; -} -int32_t CXFA_LayoutPageMgr::GetPageIndex(const IXFA_LayoutPage* pPage) const { - // FIXME: Find() method should take const. - return m_PageArray.Find(static_cast( - const_cast(pPage))); -} -FX_BOOL CXFA_LayoutPageMgr::RunBreak(XFA_ELEMENT eBreakType, - XFA_ATTRIBUTEENUM eTargetType, - CXFA_Node* pTarget, - FX_BOOL bStartNew) { - FX_BOOL bRet = FALSE; - switch (eTargetType) { - case XFA_ATTRIBUTEENUM_ContentArea: - if (pTarget && pTarget->GetClassID() != XFA_ELEMENT_ContentArea) { - pTarget = NULL; - } - if (!pTarget || !m_pCurrentContainerRecord || - pTarget != - GetCurrentContainerRecord()->pCurContentArea->m_pFormNode || - bStartNew) { - CXFA_Node* pPageArea = NULL; - if (pTarget) { - pPageArea = pTarget->GetNodeItem(XFA_NODEITEM_Parent); - } - pPageArea = GetNextAvailPageArea(pPageArea, pTarget); - bRet = pPageArea != NULL; - } - break; - case XFA_ATTRIBUTEENUM_PageArea: - if (pTarget && pTarget->GetClassID() != XFA_ELEMENT_PageArea) { - pTarget = NULL; - } - if (!pTarget || !m_pCurrentContainerRecord || - pTarget != GetCurrentContainerRecord()->pCurPageArea->m_pFormNode || - bStartNew) { - CXFA_Node* pPageArea = GetNextAvailPageArea(pTarget, NULL, TRUE); - bRet = pPageArea != NULL; - } - break; - case XFA_ATTRIBUTEENUM_PageOdd: - if (pTarget && pTarget->GetClassID() != XFA_ELEMENT_PageArea) { - pTarget = NULL; - } - if (m_nAvailPages % 2 != 1 || !m_pCurrentContainerRecord || - (pTarget && - pTarget != GetCurrentContainerRecord()->pCurPageArea->m_pFormNode) || - bStartNew) { - if (m_nAvailPages % 2 == 1) { - } - } - break; - case XFA_ATTRIBUTEENUM_PageEven: - if (pTarget && pTarget->GetClassID() != XFA_ELEMENT_PageArea) { - pTarget = NULL; - } - if (m_nAvailPages % 2 != 0 || !m_pCurrentContainerRecord || - (pTarget && - pTarget != GetCurrentContainerRecord()->pCurPageArea->m_pFormNode) || - bStartNew) { - if (m_nAvailPages % 2 == 0) { - } - } - break; - case XFA_ATTRIBUTEENUM_Auto: - default: - break; - } - return bRet; -} -FX_BOOL CXFA_LayoutPageMgr::ExecuteBreakBeforeOrAfter( - CXFA_Node* pCurNode, - FX_BOOL bBefore, - CXFA_Node*& pBreakLeaderTemplate, - CXFA_Node*& pBreakTrailerTemplate) { - XFA_ELEMENT eType = pCurNode->GetClassID(); - switch (eType) { - case XFA_ELEMENT_BreakBefore: - case XFA_ELEMENT_BreakAfter: { - CFX_WideStringC wsBreakLeader, wsBreakTrailer; - CXFA_Node* pFormNode = pCurNode->GetNodeItem( - XFA_NODEITEM_Parent, XFA_OBJECTTYPE_ContainerNode); - CXFA_Node* pContainer = pFormNode->GetTemplateNode(); - FX_BOOL bStartNew = pCurNode->GetInteger(XFA_ATTRIBUTE_StartNew) != 0; - CXFA_Node* pScript = pCurNode->GetFirstChildByClass(XFA_ELEMENT_Script); - if (pScript && !XFA_LayoutPageMgr_RunBreakTestScript(pScript)) { - return FALSE; - } - CFX_WideStringC wsTarget = pCurNode->GetCData(XFA_ATTRIBUTE_Target); - CXFA_Node* pTarget = - XFA_ResolveBreakTarget(m_pTemplatePageSetRoot, TRUE, wsTarget); - wsBreakTrailer = pCurNode->GetCData(XFA_ATTRIBUTE_Trailer); - wsBreakLeader = pCurNode->GetCData(XFA_ATTRIBUTE_Leader); - pBreakLeaderTemplate = - XFA_ResolveBreakTarget(pContainer, TRUE, wsBreakLeader); - pBreakTrailerTemplate = - XFA_ResolveBreakTarget(pContainer, TRUE, wsBreakTrailer); - if (RunBreak(eType, pCurNode->GetEnum(XFA_ATTRIBUTE_TargetType), pTarget, - bStartNew)) { - return TRUE; - } else { - if (m_rgProposedContainerRecord.GetCount() > 0 && - m_pCurrentContainerRecord == - m_rgProposedContainerRecord.GetHeadPosition() && - eType == XFA_ELEMENT_BreakBefore) { - CXFA_Node* pParentNode = pFormNode->GetNodeItem( - XFA_NODEITEM_Parent, XFA_OBJECTTYPE_ContainerNode); - if (!pParentNode || - pFormNode != - pParentNode->GetNodeItem(XFA_NODEITEM_FirstChild, - XFA_OBJECTTYPE_ContainerNode)) { - break; - } - pParentNode = pParentNode->GetNodeItem(XFA_NODEITEM_Parent); - if (!pParentNode || pParentNode->GetClassID() != XFA_ELEMENT_Form) { - break; - } - return TRUE; - } - } - } break; - case XFA_ELEMENT_Break: { - FX_BOOL bStartNew = pCurNode->GetInteger(XFA_ATTRIBUTE_StartNew) != 0; - CFX_WideStringC wsTarget = pCurNode->GetCData( - bBefore ? XFA_ATTRIBUTE_BeforeTarget : XFA_ATTRIBUTE_AfterTarget); - CXFA_Node* pTarget = - XFA_ResolveBreakTarget(m_pTemplatePageSetRoot, TRUE, wsTarget); - if (RunBreak(bBefore ? XFA_ELEMENT_BreakBefore : XFA_ELEMENT_BreakAfter, - pCurNode->GetEnum(bBefore ? XFA_ATTRIBUTE_Before - : XFA_ATTRIBUTE_After), - pTarget, bStartNew)) { - return TRUE; - } - } break; - default: - break; - } - return FALSE; -} -static void XFA_SetLayoutGeneratedNodeFlag(CXFA_Node* pNode) { - pNode->SetFlag(XFA_NODEFLAG_LayoutGeneratedNode, TRUE, FALSE); - pNode->SetFlag(XFA_NODEFLAG_UnusedNode, FALSE, FALSE); -} -FX_BOOL CXFA_LayoutPageMgr::ProcessBreakBeforeOrAfter( - CXFA_Node* pBreakNode, - FX_BOOL bBefore, - CXFA_Node*& pBreakLeaderNode, - CXFA_Node*& pBreakTrailerNode, - FX_BOOL& bCreatePage) { - CXFA_Node *pLeaderTemplate = NULL, *pTrailerTemplate = NULL; - CXFA_Node* pFormNode = pBreakNode->GetNodeItem(XFA_NODEITEM_Parent, - XFA_OBJECTTYPE_ContainerNode); - if (XFA_ItemLayoutProcessor_IsTakingSpace(pFormNode)) { - bCreatePage = ExecuteBreakBeforeOrAfter(pBreakNode, bBefore, - pLeaderTemplate, pTrailerTemplate); - CXFA_Document* pDocument = pBreakNode->GetDocument(); - CXFA_Node* pDataScope = NULL; - pFormNode = pFormNode->GetNodeItem(XFA_NODEITEM_Parent, - XFA_OBJECTTYPE_ContainerNode); - if (pLeaderTemplate) { - if (!pDataScope) { - pDataScope = XFA_DataMerge_FindDataScope(pFormNode); - } - pBreakLeaderNode = pDocument->DataMerge_CopyContainer( - pLeaderTemplate, pFormNode, pDataScope, TRUE); - pDocument->DataMerge_UpdateBindingRelations(pBreakLeaderNode); - XFA_SetLayoutGeneratedNodeFlag(pBreakLeaderNode); - } - if (pTrailerTemplate) { - if (!pDataScope) { - pDataScope = XFA_DataMerge_FindDataScope(pFormNode); - } - pBreakTrailerNode = pDocument->DataMerge_CopyContainer( - pTrailerTemplate, pFormNode, pDataScope, TRUE); - pDocument->DataMerge_UpdateBindingRelations(pBreakTrailerNode); - XFA_SetLayoutGeneratedNodeFlag(pBreakTrailerNode); - } - return TRUE; - } - return FALSE; -} -FX_BOOL CXFA_LayoutPageMgr::ProcessBookendLeaderOrTrailer( - CXFA_Node* pBookendNode, - FX_BOOL bLeader, - CXFA_Node*& pBookendAppendNode) { - CXFA_Node* pLeaderTemplate = NULL; - CXFA_Node* pFormNode = pBookendNode->GetNodeItem( - XFA_NODEITEM_Parent, XFA_OBJECTTYPE_ContainerNode); - if (ResolveBookendLeaderOrTrailer(pBookendNode, bLeader, pLeaderTemplate)) { - CXFA_Document* pDocument = pBookendNode->GetDocument(); - CXFA_Node* pDataScope = NULL; - if (pLeaderTemplate) { - if (!pDataScope) { - pDataScope = XFA_DataMerge_FindDataScope(pFormNode); - } - pBookendAppendNode = pDocument->DataMerge_CopyContainer( - pLeaderTemplate, pFormNode, pDataScope, TRUE); - pDocument->DataMerge_UpdateBindingRelations(pBookendAppendNode); - XFA_SetLayoutGeneratedNodeFlag(pBookendAppendNode); - return TRUE; - } - } - return FALSE; -} -CXFA_Node* CXFA_LayoutPageMgr::BreakOverflow(CXFA_Node* pOverflowNode, - CXFA_Node*& pLeaderTemplate, - CXFA_Node*& pTrailerTemplate, - FX_BOOL bCreatePage) { - CFX_WideStringC wsOverflowLeader, wsOverflowTrailer; - CXFA_Node* pContainer = - pOverflowNode->GetNodeItem(XFA_NODEITEM_Parent, - XFA_OBJECTTYPE_ContainerNode) - ->GetTemplateNode(); - if (pOverflowNode->GetClassID() == XFA_ELEMENT_Break) { - CFX_WideStringC wsOverflowLeader; - CFX_WideStringC wsOverflowTarget; - CFX_WideStringC wsOverflowTrailer; - pOverflowNode->TryCData(XFA_ATTRIBUTE_OverflowLeader, wsOverflowLeader); - pOverflowNode->TryCData(XFA_ATTRIBUTE_OverflowTrailer, wsOverflowTrailer); - pOverflowNode->TryCData(XFA_ATTRIBUTE_OverflowTarget, wsOverflowTarget); - if (!wsOverflowLeader.IsEmpty() || !wsOverflowTrailer.IsEmpty() || - !wsOverflowTarget.IsEmpty()) { - if (!wsOverflowTarget.IsEmpty() && bCreatePage && - !m_bCreateOverFlowPage) { - CXFA_Node* pTarget = XFA_ResolveBreakTarget(m_pTemplatePageSetRoot, - TRUE, wsOverflowTarget); - if (pTarget) { - m_bCreateOverFlowPage = TRUE; - switch (pTarget->GetClassID()) { - case XFA_ELEMENT_PageArea: - RunBreak(XFA_ELEMENT_Overflow, XFA_ATTRIBUTEENUM_PageArea, - pTarget, TRUE); - break; - case XFA_ELEMENT_ContentArea: - RunBreak(XFA_ELEMENT_Overflow, XFA_ATTRIBUTEENUM_ContentArea, - pTarget, TRUE); - break; - default: - break; - } - } - } - if (!bCreatePage) { - pLeaderTemplate = - XFA_ResolveBreakTarget(pContainer, TRUE, wsOverflowLeader); - pTrailerTemplate = - XFA_ResolveBreakTarget(pContainer, TRUE, wsOverflowTrailer); - } - return pOverflowNode; - } - return NULL; - } else if (pOverflowNode->GetClassID() == XFA_ELEMENT_Overflow) { - CFX_WideStringC wsOverflowTarget; - pOverflowNode->TryCData(XFA_ATTRIBUTE_Leader, wsOverflowLeader); - pOverflowNode->TryCData(XFA_ATTRIBUTE_Trailer, wsOverflowTrailer); - pOverflowNode->TryCData(XFA_ATTRIBUTE_Target, wsOverflowTarget); - if (!wsOverflowTarget.IsEmpty() && bCreatePage && !m_bCreateOverFlowPage) { - CXFA_Node* pTarget = XFA_ResolveBreakTarget(m_pTemplatePageSetRoot, TRUE, - wsOverflowTarget); - if (pTarget) { - m_bCreateOverFlowPage = TRUE; - switch (pTarget->GetClassID()) { - case XFA_ELEMENT_PageArea: - RunBreak(XFA_ELEMENT_Overflow, XFA_ATTRIBUTEENUM_PageArea, pTarget, - TRUE); - break; - case XFA_ELEMENT_ContentArea: - RunBreak(XFA_ELEMENT_Overflow, XFA_ATTRIBUTEENUM_ContentArea, - pTarget, TRUE); - break; - default: - break; - } - } - } - if (!bCreatePage) { - pLeaderTemplate = - XFA_ResolveBreakTarget(pContainer, TRUE, wsOverflowLeader); - pTrailerTemplate = - XFA_ResolveBreakTarget(pContainer, TRUE, wsOverflowTrailer); - } - return pOverflowNode; - } - return NULL; -} -FX_BOOL CXFA_LayoutPageMgr::ProcessOverflow(CXFA_Node* pFormNode, - CXFA_Node*& pLeaderNode, - CXFA_Node*& pTrailerNode, - FX_BOOL bDataMerge, - FX_BOOL bCreatePage) { - if (pFormNode == NULL) { - return FALSE; - } - CXFA_Node *pLeaderTemplate = NULL, *pTrailerTemplate = NULL; - FX_BOOL bIsOverflowNode = FALSE; - if (pFormNode->GetClassID() == XFA_ELEMENT_Overflow || - pFormNode->GetClassID() == XFA_ELEMENT_Break) { - bIsOverflowNode = TRUE; - } - for (CXFA_Node* pCurNode = - bIsOverflowNode ? pFormNode - : pFormNode->GetNodeItem(XFA_NODEITEM_FirstChild); - pCurNode; pCurNode = pCurNode->GetNodeItem((XFA_NODEITEM_NextSibling))) { - if (BreakOverflow(pCurNode, pLeaderTemplate, pTrailerTemplate, - bCreatePage)) { - if (bIsOverflowNode) { - pFormNode = pCurNode->GetNodeItem(XFA_NODEITEM_Parent); - } - CXFA_Document* pDocument = pCurNode->GetDocument(); - CXFA_Node* pDataScope = NULL; - if (pLeaderTemplate) { - if (!pDataScope) { - pDataScope = XFA_DataMerge_FindDataScope(pFormNode); - } - pLeaderNode = pDocument->DataMerge_CopyContainer( - pLeaderTemplate, pFormNode, pDataScope, TRUE); - pDocument->DataMerge_UpdateBindingRelations(pLeaderNode); - XFA_SetLayoutGeneratedNodeFlag(pLeaderNode); - } - if (pTrailerTemplate) { - if (!pDataScope) { - pDataScope = XFA_DataMerge_FindDataScope(pFormNode); - } - pTrailerNode = pDocument->DataMerge_CopyContainer( - pTrailerTemplate, pFormNode, pDataScope, TRUE); - pDocument->DataMerge_UpdateBindingRelations(pTrailerNode); - XFA_SetLayoutGeneratedNodeFlag(pTrailerNode); - } - return TRUE; - } - if (bIsOverflowNode) { - break; - } - } - return FALSE; -} -FX_BOOL CXFA_LayoutPageMgr::ResolveBookendLeaderOrTrailer( - CXFA_Node* pBookendNode, - FX_BOOL bLeader, - CXFA_Node*& pBookendAppendTemplate) { - CFX_WideStringC wsBookendLeader; - CXFA_Node* pContainer = - pBookendNode->GetNodeItem(XFA_NODEITEM_Parent, - XFA_OBJECTTYPE_ContainerNode) - ->GetTemplateNode(); - if (pBookendNode->GetClassID() == XFA_ELEMENT_Break) { - pBookendNode->TryCData( - bLeader ? XFA_ATTRIBUTE_BookendLeader : XFA_ATTRIBUTE_BookendTrailer, - wsBookendLeader); - if (!wsBookendLeader.IsEmpty()) { - pBookendAppendTemplate = - XFA_ResolveBreakTarget(pContainer, FALSE, wsBookendLeader); - return TRUE; - } - return FALSE; - } else if (pBookendNode->GetClassID() == XFA_ELEMENT_Bookend) { - pBookendNode->TryCData( - bLeader ? XFA_ATTRIBUTE_Leader : XFA_ATTRIBUTE_Trailer, - wsBookendLeader); - pBookendAppendTemplate = - XFA_ResolveBreakTarget(pContainer, TRUE, wsBookendLeader); - return TRUE; - } - return FALSE; -} -FX_BOOL CXFA_LayoutPageMgr::FindPageAreaFromPageSet( - CXFA_Node* pPageSet, - CXFA_Node* pStartChild, - CXFA_Node* pTargetPageArea, - CXFA_Node* pTargetContentArea, - FX_BOOL bNewPage, - FX_BOOL bQuery) { - if (pPageSet == NULL && pStartChild == NULL) { - return FALSE; - } - if (IsPageSetRootOrderedOccurrence()) { - return FindPageAreaFromPageSet_Ordered(pPageSet, pStartChild, - pTargetPageArea, pTargetContentArea, - bNewPage, bQuery); - } - XFA_ATTRIBUTEENUM ePreferredPosition = m_pCurrentContainerRecord - ? XFA_ATTRIBUTEENUM_Rest - : XFA_ATTRIBUTEENUM_First; - return FindPageAreaFromPageSet_SimplexDuplex( - pPageSet, pStartChild, pTargetPageArea, pTargetContentArea, bNewPage, - bQuery, ePreferredPosition); -} -FX_BOOL CXFA_LayoutPageMgr::FindPageAreaFromPageSet_Ordered( - CXFA_Node* pPageSet, - CXFA_Node* pStartChild, - CXFA_Node* pTargetPageArea, - CXFA_Node* pTargetContentArea, - FX_BOOL bNewPage, - FX_BOOL bQuery) { - int32_t iPageSetCount = 0; - if (!pStartChild && !bQuery) { - m_pPageSetMap.Lookup(pPageSet, iPageSetCount); - int32_t iMax = -1; - CXFA_Node* pOccurNode = pPageSet->GetFirstChildByClass(XFA_ELEMENT_Occur); - if (pOccurNode) { - pOccurNode->TryInteger(XFA_ATTRIBUTE_Max, iMax, FALSE); - } - if (iMax >= 0 && iMax <= iPageSetCount) { - return FALSE; - } - } - FX_BOOL bRes = FALSE; - CXFA_Node* pCurrentNode = - pStartChild ? pStartChild->GetNodeItem(XFA_NODEITEM_NextSibling) - : pPageSet->GetNodeItem(XFA_NODEITEM_FirstChild); - for (; pCurrentNode; - pCurrentNode = pCurrentNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { - if (pCurrentNode->GetClassID() == XFA_ELEMENT_PageArea) { - if ((pTargetPageArea == pCurrentNode || pTargetPageArea == NULL)) { - if (pCurrentNode->GetFirstChildByClass(XFA_ELEMENT_ContentArea) == - NULL) { - if (pTargetPageArea == pCurrentNode) { - CreateMinPageRecord(pCurrentNode, TRUE); - pTargetPageArea = NULL; - } - continue; - } - if (!bQuery) { - CXFA_ContainerRecord* pNewRecord = - CreateContainerRecord(pCurrentNode, pStartChild == NULL); - AddPageAreaLayoutItem(pNewRecord, pCurrentNode); - if (pTargetContentArea == NULL) { - pTargetContentArea = - pCurrentNode->GetFirstChildByClass(XFA_ELEMENT_ContentArea); - } - AddContentAreaLayoutItem(pNewRecord, pTargetContentArea); - } - m_pCurPageArea = pCurrentNode; - m_nCurPageCount = 1; - bRes = TRUE; - break; - } - if (!bQuery) { - CreateMinPageRecord(pCurrentNode, FALSE); - } - } else if (pCurrentNode->GetClassID() == XFA_ELEMENT_PageSet) { - if (FindPageAreaFromPageSet_Ordered(pCurrentNode, NULL, pTargetPageArea, - pTargetContentArea, bNewPage, - bQuery)) { - bRes = TRUE; - break; - } - if (!bQuery) { - CreateMinPageSetRecord(pCurrentNode, TRUE); - } - } - } - if (!pStartChild && bRes && !bQuery) { - m_pPageSetMap.SetAt(pPageSet, ++iPageSetCount); - } - return bRes; -} -FX_BOOL CXFA_LayoutPageMgr::FindPageAreaFromPageSet_SimplexDuplex( - CXFA_Node* pPageSet, - CXFA_Node* pStartChild, - CXFA_Node* pTargetPageArea, - CXFA_Node* pTargetContentArea, - FX_BOOL bNewPage, - FX_BOOL bQuery, - XFA_ATTRIBUTEENUM ePreferredPosition) { - const XFA_ATTRIBUTEENUM eFallbackPosition = XFA_ATTRIBUTEENUM_Any; - CXFA_Node *pPreferredPageArea = NULL, *pFallbackPageArea = NULL; - CXFA_Node* pCurrentNode = NULL; - if (!pStartChild || pStartChild->GetClassID() == XFA_ELEMENT_PageArea) { - pCurrentNode = pPageSet->GetNodeItem(XFA_NODEITEM_FirstChild); - } else { - pCurrentNode = pStartChild->GetNodeItem(XFA_NODEITEM_NextSibling); - } - for (; pCurrentNode; - pCurrentNode = pCurrentNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { - if (pCurrentNode->GetClassID() == XFA_ELEMENT_PageArea) { - if (!MatchPageAreaOddOrEven(pCurrentNode, FALSE)) { - continue; - } - XFA_ATTRIBUTEENUM eCurPagePosition = - pCurrentNode->GetEnum(XFA_ATTRIBUTE_PagePosition); - if (ePreferredPosition == XFA_ATTRIBUTEENUM_Last) { - if (eCurPagePosition != ePreferredPosition) { - continue; - } - if (m_ePageSetMode == XFA_ATTRIBUTEENUM_SimplexPaginated || - pCurrentNode->GetEnum(XFA_ATTRIBUTE_OddOrEven) == - XFA_ATTRIBUTEENUM_Any) { - pPreferredPageArea = pCurrentNode; - break; - } - CXFA_ContainerRecord* pNewRecord = CreateContainerRecord(); - AddPageAreaLayoutItem(pNewRecord, pCurrentNode); - AddContentAreaLayoutItem(pNewRecord, pCurrentNode->GetFirstChildByClass( - XFA_ELEMENT_ContentArea)); - pPreferredPageArea = pCurrentNode; - return FALSE; - } else if (ePreferredPosition == XFA_ATTRIBUTEENUM_Only) { - if (eCurPagePosition != ePreferredPosition) { - continue; - } - if (m_ePageSetMode != XFA_ATTRIBUTEENUM_DuplexPaginated || - pCurrentNode->GetEnum(XFA_ATTRIBUTE_OddOrEven) == - XFA_ATTRIBUTEENUM_Any) { - pPreferredPageArea = pCurrentNode; - break; - } - return FALSE; - } - if ((pTargetPageArea == pCurrentNode || pTargetPageArea == NULL)) { - if (pCurrentNode->GetFirstChildByClass(XFA_ELEMENT_ContentArea) == - NULL) { - if (pTargetPageArea == pCurrentNode) { - CXFA_ContainerRecord* pNewRecord = CreateContainerRecord(); - AddPageAreaLayoutItem(pNewRecord, pCurrentNode); - pTargetPageArea = NULL; - } - continue; - } - if ((ePreferredPosition == XFA_ATTRIBUTEENUM_Rest && - eCurPagePosition == XFA_ATTRIBUTEENUM_Any) || - eCurPagePosition == ePreferredPosition) { - pPreferredPageArea = pCurrentNode; - break; - } else if (eCurPagePosition == eFallbackPosition && - !pFallbackPageArea) { - pFallbackPageArea = pCurrentNode; - } - } else if (pTargetPageArea && - !MatchPageAreaOddOrEven(pTargetPageArea, FALSE)) { - CXFA_ContainerRecord* pNewRecord = CreateContainerRecord(); - AddPageAreaLayoutItem(pNewRecord, pCurrentNode); - AddContentAreaLayoutItem(pNewRecord, pCurrentNode->GetFirstChildByClass( - XFA_ELEMENT_ContentArea)); - } - } else if (pCurrentNode->GetClassID() == XFA_ELEMENT_PageSet) { - if (FindPageAreaFromPageSet_SimplexDuplex( - pCurrentNode, NULL, pTargetPageArea, pTargetContentArea, bNewPage, - bQuery, ePreferredPosition)) { - break; - } - } - } - CXFA_Node* pCurPageArea = NULL; - if (pPreferredPageArea) { - pCurPageArea = pPreferredPageArea; - } else if (pFallbackPageArea) { - pCurPageArea = pFallbackPageArea; - } - if (!pCurPageArea) { - return FALSE; - } - if (!bQuery) { - CXFA_ContainerRecord* pNewRecord = CreateContainerRecord(); - AddPageAreaLayoutItem(pNewRecord, pCurPageArea); - if (pTargetContentArea == NULL) { - pTargetContentArea = - pCurPageArea->GetFirstChildByClass(XFA_ELEMENT_ContentArea); - } - AddContentAreaLayoutItem(pNewRecord, pTargetContentArea); - } - m_pCurPageArea = pCurPageArea; - return TRUE; -} -FX_BOOL CXFA_LayoutPageMgr::MatchPageAreaOddOrEven(CXFA_Node* pPageArea, - FX_BOOL bLastMatch) { - if (m_ePageSetMode != XFA_ATTRIBUTEENUM_DuplexPaginated) { - return TRUE; - } - XFA_ATTRIBUTEENUM eOddOrEven = XFA_ATTRIBUTEENUM_Any; - pPageArea->TryEnum(XFA_ATTRIBUTE_OddOrEven, eOddOrEven); - if (eOddOrEven != XFA_ATTRIBUTEENUM_Any) { - int32_t iPageCount = GetPageCount(); - if (bLastMatch) { - return eOddOrEven == XFA_ATTRIBUTEENUM_Odd ? iPageCount % 2 == 1 - : iPageCount % 2 == 0; - } - return eOddOrEven == XFA_ATTRIBUTEENUM_Odd ? iPageCount % 2 == 0 - : iPageCount % 2 == 1; - } - return TRUE; -} -CXFA_Node* CXFA_LayoutPageMgr::GetNextAvailPageArea( - CXFA_Node* pTargetPageArea, - CXFA_Node* pTargetContentArea, - FX_BOOL bNewPage, - FX_BOOL bQuery) { - if (m_pCurPageArea == NULL) { - FindPageAreaFromPageSet(m_pTemplatePageSetRoot, NULL, pTargetPageArea, - pTargetContentArea, bNewPage, bQuery); - ASSERT(m_pCurPageArea); - return m_pCurPageArea; - } - if (pTargetPageArea == NULL || pTargetPageArea == m_pCurPageArea) { - if (!bNewPage && GetNextContentArea(pTargetContentArea)) { - return m_pCurPageArea; - } - if (IsPageSetRootOrderedOccurrence()) { - int32_t iMax = -1; - CXFA_Node* pOccurNode = - m_pCurPageArea->GetFirstChildByClass(XFA_ELEMENT_Occur); - if (pOccurNode) { - pOccurNode->TryInteger(XFA_ATTRIBUTE_Max, iMax, FALSE); - } - if ((iMax < 0 || m_nCurPageCount < iMax)) { - if (!bQuery) { - CXFA_ContainerRecord* pNewRecord = - CreateContainerRecord(m_pCurPageArea); - AddPageAreaLayoutItem(pNewRecord, m_pCurPageArea); - if (pTargetContentArea == NULL) { - pTargetContentArea = - m_pCurPageArea->GetFirstChildByClass(XFA_ELEMENT_ContentArea); - } - AddContentAreaLayoutItem(pNewRecord, pTargetContentArea); - } - m_nCurPageCount++; - return m_pCurPageArea; - } - } - } - if (!bQuery && IsPageSetRootOrderedOccurrence()) { - CreateMinPageRecord(m_pCurPageArea, FALSE, TRUE); - } - if (FindPageAreaFromPageSet(m_pCurPageArea->GetNodeItem(XFA_NODEITEM_Parent), - m_pCurPageArea, pTargetPageArea, - pTargetContentArea, bNewPage, bQuery)) { - return m_pCurPageArea; - } - CXFA_Node* pPageSet = m_pCurPageArea->GetNodeItem(XFA_NODEITEM_Parent); - while (TRUE) { - if (FindPageAreaFromPageSet(pPageSet, NULL, pTargetPageArea, - pTargetContentArea, bNewPage, bQuery)) { - return m_pCurPageArea; - } - if (!bQuery && IsPageSetRootOrderedOccurrence()) { - CreateMinPageSetRecord(pPageSet); - } - if (FindPageAreaFromPageSet(NULL, pPageSet, pTargetPageArea, - pTargetContentArea, bNewPage, bQuery)) { - return m_pCurPageArea; - } - if (pPageSet == m_pTemplatePageSetRoot) { - break; - } - pPageSet = pPageSet->GetNodeItem(XFA_NODEITEM_Parent); - } - return NULL; -} -static FX_BOOL XFA_LayoutPageMgr_CheckContentAreaNotUsed( - CXFA_ContainerLayoutItem* pPageAreaLayoutItem, - CXFA_Node* pContentArea, - CXFA_ContainerLayoutItem*& pContentAreaLayoutItem) { - for (CXFA_ContainerLayoutItem* pLayoutItem = - (CXFA_ContainerLayoutItem*)pPageAreaLayoutItem->m_pFirstChild; - pLayoutItem; - pLayoutItem = (CXFA_ContainerLayoutItem*)pLayoutItem->m_pNextSibling) { - if (pLayoutItem->m_pFormNode == pContentArea) { - if (pLayoutItem->m_pFirstChild == NULL) { - pContentAreaLayoutItem = pLayoutItem; - return TRUE; - } - return FALSE; - } - } - return TRUE; -} -FX_BOOL CXFA_LayoutPageMgr::GetNextContentArea(CXFA_Node* pContentArea) { - CXFA_Node* pCurContentNode = - GetCurrentContainerRecord()->pCurContentArea->m_pFormNode; - if (pContentArea == NULL) { - pContentArea = - pCurContentNode->GetNextSameClassSibling(XFA_ELEMENT_ContentArea); - if (pContentArea == NULL) { - return FALSE; - } - } else { - if (pContentArea->GetNodeItem(XFA_NODEITEM_Parent) != m_pCurPageArea) { - return FALSE; - } - CXFA_ContainerLayoutItem* pContentAreaLayout = NULL; - if (!XFA_LayoutPageMgr_CheckContentAreaNotUsed( - GetCurrentContainerRecord()->pCurPageArea, pContentArea, - pContentAreaLayout)) { - return FALSE; - } - if (pContentAreaLayout) { - if (pContentAreaLayout->m_pFormNode != pCurContentNode) { - CXFA_ContainerRecord* pNewRecord = CreateContainerRecord(); - pNewRecord->pCurContentArea = pContentAreaLayout; - return TRUE; - } else { - return FALSE; - } - } - } - CXFA_ContainerRecord* pNewRecord = CreateContainerRecord(); - AddContentAreaLayoutItem(pNewRecord, pContentArea); - return TRUE; -} -void CXFA_LayoutPageMgr::InitPageSetMap() { - if (!IsPageSetRootOrderedOccurrence()) { - return; - } - CXFA_NodeIterator sIterator(m_pTemplatePageSetRoot); - for (CXFA_Node* pPageSetNode = sIterator.GetCurrent(); pPageSetNode; - pPageSetNode = sIterator.MoveToNext()) { - if (pPageSetNode->GetClassID() == XFA_ELEMENT_PageSet) { - XFA_ATTRIBUTEENUM eRelation = - pPageSetNode->GetEnum(XFA_ATTRIBUTE_Relation); - if (eRelation == XFA_ATTRIBUTEENUM_OrderedOccurrence) { - m_pPageSetMap.SetAt(pPageSetNode, 0); - } - } - } -} -int32_t CXFA_LayoutPageMgr::CreateMinPageRecord(CXFA_Node* pPageArea, - FX_BOOL bTargetPageArea, - FX_BOOL bCreateLast) { - if (pPageArea == NULL) { - return 0; - } - CXFA_Node* pOccurNode = pPageArea->GetFirstChildByClass(XFA_ELEMENT_Occur); - int32_t iMin = 0; - if ((pOccurNode && pOccurNode->TryInteger(XFA_ATTRIBUTE_Min, iMin, FALSE)) || - bTargetPageArea) { - CXFA_Node* pContentArea = - pPageArea->GetFirstChildByClass(XFA_ELEMENT_ContentArea); - if (iMin < 1 && bTargetPageArea && !pContentArea) { - iMin = 1; - } - int32_t i = 0; - if (bCreateLast) { - i = m_nCurPageCount; - } - for (; i < iMin; i++) { - CXFA_ContainerRecord* pNewRecord = CreateContainerRecord(); - AddPageAreaLayoutItem(pNewRecord, pPageArea); - AddContentAreaLayoutItem(pNewRecord, pContentArea); - } - } - return iMin; -} -void CXFA_LayoutPageMgr::CreateMinPageSetRecord(CXFA_Node* pPageSet, - FX_BOOL bCreateAll) { - if (pPageSet == NULL) { - return; - } - int32_t iCurSetCount = 0; - if (!m_pPageSetMap.Lookup(pPageSet, iCurSetCount)) { - return; - } - if (bCreateAll) { - iCurSetCount = 0; - } - CXFA_Node* pOccurNode = pPageSet->GetFirstChildByClass(XFA_ELEMENT_Occur); - int32_t iMin = 0; - if (pOccurNode && pOccurNode->TryInteger(XFA_ATTRIBUTE_Min, iMin, FALSE)) { - if (iCurSetCount < iMin) { - for (int32_t i = 0; i < iMin - iCurSetCount; i++) { - for (CXFA_Node* pCurrentPageNode = - pPageSet->GetNodeItem(XFA_NODEITEM_FirstChild); - pCurrentPageNode; pCurrentPageNode = pCurrentPageNode->GetNodeItem( - XFA_NODEITEM_NextSibling)) { - if (pCurrentPageNode->GetClassID() == XFA_ELEMENT_PageArea) { - CreateMinPageRecord(pCurrentPageNode, FALSE); - } else if (pCurrentPageNode->GetClassID() == XFA_ELEMENT_PageSet) { - CreateMinPageSetRecord(pCurrentPageNode, TRUE); - } - } - } - m_pPageSetMap.SetAt(pPageSet, iMin); - } - } -} -void CXFA_LayoutPageMgr::CreateNextMinRecord(CXFA_Node* pRecordNode) { - if (pRecordNode == NULL) { - return; - } - for (CXFA_Node* pCurrentNode = - pRecordNode->GetNodeItem(XFA_NODEITEM_NextSibling); - pCurrentNode; - pCurrentNode = pCurrentNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { - if (pCurrentNode->GetClassID() == XFA_ELEMENT_PageArea) { - CreateMinPageRecord(pCurrentNode, FALSE); - } else if (pCurrentNode->GetClassID() == XFA_ELEMENT_PageSet) { - CreateMinPageSetRecord(pCurrentNode, TRUE); - } - } -} -void CXFA_LayoutPageMgr::ProcessLastPageSet() { - CreateMinPageRecord(m_pCurPageArea, FALSE, TRUE); - CreateNextMinRecord(m_pCurPageArea); - CXFA_Node* pPageSet = m_pCurPageArea->GetNodeItem(XFA_NODEITEM_Parent); - while (TRUE) { - CreateMinPageSetRecord(pPageSet); - if (pPageSet == m_pTemplatePageSetRoot) { - break; - } - CreateNextMinRecord(pPageSet); - pPageSet = pPageSet->GetNodeItem(XFA_NODEITEM_Parent); - } -} -FX_BOOL CXFA_LayoutPageMgr::GetNextAvailContentHeight(FX_FLOAT fChildHeight) { - CXFA_Node* pCurContentNode = - GetCurrentContainerRecord()->pCurContentArea->m_pFormNode; - if (pCurContentNode == NULL) { - return FALSE; - } - pCurContentNode = - pCurContentNode->GetNextSameClassSibling(XFA_ELEMENT_ContentArea); - if (pCurContentNode) { - FX_FLOAT fNextContentHeight = - pCurContentNode->GetMeasure(XFA_ATTRIBUTE_H).ToUnit(XFA_UNIT_Pt); - return fNextContentHeight > fChildHeight; - } - CXFA_Node* pPageNode = GetCurrentContainerRecord()->pCurPageArea->m_pFormNode; - CXFA_Node* pOccurNode = pPageNode->GetFirstChildByClass(XFA_ELEMENT_Occur); - int32_t iMax = 0; - if (pOccurNode && pOccurNode->TryInteger(XFA_ATTRIBUTE_Max, iMax, FALSE)) { - if (m_nCurPageCount == iMax) { - CXFA_Node* pSrcPage = m_pCurPageArea; - int32_t nSrcPageCount = m_nCurPageCount; - FX_POSITION psSrcRecord = m_rgProposedContainerRecord.GetTailPosition(); - CXFA_Node* pNextPage = GetNextAvailPageArea(NULL, NULL, FALSE, TRUE); - m_pCurPageArea = pSrcPage; - m_nCurPageCount = nSrcPageCount; - CXFA_ContainerRecord* pPrevRecord = - (CXFA_ContainerRecord*)m_rgProposedContainerRecord.GetNext( - psSrcRecord); - while (psSrcRecord) { - FX_POSITION psSaveRecord = psSrcRecord; - CXFA_ContainerRecord* pInsertRecord = - (CXFA_ContainerRecord*)m_rgProposedContainerRecord.GetNext( - psSrcRecord); - RemoveLayoutRecord(pInsertRecord, pPrevRecord); - delete pInsertRecord; - m_rgProposedContainerRecord.RemoveAt(psSaveRecord); - } - if (pNextPage) { - CXFA_Node* pContentArea = - pNextPage->GetFirstChildByClass(XFA_ELEMENT_ContentArea); - if (pContentArea) { - FX_FLOAT fNextContentHeight = - pContentArea->GetMeasure(XFA_ATTRIBUTE_H).ToUnit(XFA_UNIT_Pt); - if (fNextContentHeight > fChildHeight) { - return TRUE; - } - } - } - return FALSE; - } - } - CXFA_Node* pContentArea = - pPageNode->GetFirstChildByClass(XFA_ELEMENT_ContentArea); - FX_FLOAT fNextContentHeight = - pContentArea->GetMeasure(XFA_ATTRIBUTE_H).ToUnit(XFA_UNIT_Pt); - if (fNextContentHeight < XFA_LAYOUT_FLOAT_PERCISION) { - return TRUE; - } - if (fNextContentHeight > fChildHeight) { - return TRUE; - } - return FALSE; -} -void CXFA_LayoutPageMgr::ClearData() { - ClearRecordList(); -} -void CXFA_LayoutPageMgr::ClearRecordList() { - if (!m_pTemplatePageSetRoot) { - return; - } - if (m_rgProposedContainerRecord.GetCount() > 0) { - FX_POSITION sPos; - sPos = m_rgProposedContainerRecord.GetHeadPosition(); - while (sPos) { - CXFA_ContainerRecord* pRecord = - (CXFA_ContainerRecord*)m_rgProposedContainerRecord.GetNext(sPos); - delete pRecord; - } - m_rgProposedContainerRecord.RemoveAll(); - } - m_pCurrentContainerRecord = NULL; - m_pCurPageArea = NULL; - m_nCurPageCount = 0; - m_bCreateOverFlowPage = FALSE; - m_pPageSetMap.RemoveAll(); -} -CXFA_LayoutItem* CXFA_LayoutPageMgr::FindOrCreateLayoutItem( - CXFA_Node* pFormNode) { - return pFormNode->GetDocument()->GetParser()->GetNotify()->OnCreateLayoutItem( - pFormNode); -} -static void XFA_SyncRemoveLayoutItem(CXFA_LayoutItem* pParentLayoutItem, - IXFA_Notify* pNotify, - IXFA_DocLayout* pDocLayout) { - CXFA_LayoutItem* pNextLayoutItem; - CXFA_LayoutItem* pCurLayoutItem = pParentLayoutItem->m_pFirstChild; - while (pCurLayoutItem) { - pNextLayoutItem = pCurLayoutItem->m_pNextSibling; - if (pCurLayoutItem->m_pFirstChild) { - XFA_SyncRemoveLayoutItem(pCurLayoutItem, pNotify, pDocLayout); - } - pNotify->OnLayoutEvent(pDocLayout, pCurLayoutItem, - XFA_LAYOUTEVENT_ItemRemoving); - delete pCurLayoutItem; - pCurLayoutItem = pNextLayoutItem; - } -} -void CXFA_LayoutPageMgr::SaveLayoutItem(CXFA_LayoutItem* pParentLayoutItem) { - CXFA_LayoutItem* pNextLayoutItem; - CXFA_LayoutItem* pCurLayoutItem = pParentLayoutItem->m_pFirstChild; - while (pCurLayoutItem) { - pNextLayoutItem = pCurLayoutItem->m_pNextSibling; - if (pCurLayoutItem->IsContentLayoutItem()) { - FX_DWORD dwFlag = pCurLayoutItem->m_pFormNode->GetFlag(); - if (dwFlag & (XFA_NODEFLAG_HasRemoved)) { - IXFA_Notify* pNotify = - m_pTemplatePageSetRoot->GetDocument()->GetParser()->GetNotify(); - IXFA_DocLayout* pDocLayout = - m_pTemplatePageSetRoot->GetDocument()->GetDocLayout(); - if (pCurLayoutItem->m_pFirstChild) { - XFA_SyncRemoveLayoutItem(pCurLayoutItem, pNotify, pDocLayout); - } - pNotify->OnLayoutEvent(pDocLayout, pCurLayoutItem, - XFA_LAYOUTEVENT_ItemRemoving); - delete pCurLayoutItem; - pCurLayoutItem = pNextLayoutItem; - continue; - } - if (dwFlag & XFA_NODEFLAG_LayoutGeneratedNode) { - CXFA_NodeIteratorTemplate - sIterator(pCurLayoutItem->m_pFormNode); - for (CXFA_Node* pNode = sIterator.GetCurrent(); pNode; - pNode = sIterator.MoveToNext()) { - pNode->SetFlag(XFA_NODEFLAG_UnusedNode, TRUE, FALSE); - } - } - } - if (pCurLayoutItem->m_pFirstChild) { - SaveLayoutItem(pCurLayoutItem); - } - pCurLayoutItem->m_pParent = NULL; - pCurLayoutItem->m_pNextSibling = NULL; - pCurLayoutItem->m_pFirstChild = NULL; - if (!pCurLayoutItem->IsContentLayoutItem() && - pCurLayoutItem->m_pFormNode->GetClassID() != XFA_ELEMENT_PageArea) { - delete pCurLayoutItem; - } - pCurLayoutItem = pNextLayoutItem; - } -} -CXFA_Node* CXFA_LayoutPageMgr::QueryOverflow( - CXFA_Node* pFormNode, - CXFA_LayoutContext* pLayoutContext) { - for (CXFA_Node* pCurNode = pFormNode->GetNodeItem(XFA_NODEITEM_FirstChild); - pCurNode; pCurNode = pCurNode->GetNodeItem((XFA_NODEITEM_NextSibling))) { - if (pCurNode->GetClassID() == XFA_ELEMENT_Break) { - CFX_WideStringC wsOverflowLeader; - CFX_WideStringC wsOverflowTarget; - CFX_WideStringC wsOverflowTrailer; - pCurNode->TryCData(XFA_ATTRIBUTE_OverflowLeader, wsOverflowLeader); - pCurNode->TryCData(XFA_ATTRIBUTE_OverflowTrailer, wsOverflowTrailer); - pCurNode->TryCData(XFA_ATTRIBUTE_OverflowTarget, wsOverflowTarget); - if (!wsOverflowLeader.IsEmpty() || !wsOverflowTrailer.IsEmpty() || - !wsOverflowTarget.IsEmpty()) { - return pCurNode; - } - return NULL; - } else if (pCurNode->GetClassID() == XFA_ELEMENT_Overflow) { - return pCurNode; - } - } - return NULL; -} -void CXFA_LayoutPageMgr::MergePageSetContents() { - CXFA_Document* pDocument = m_pTemplatePageSetRoot->GetDocument(); - IXFA_Notify* pNotify = pDocument->GetParser()->GetNotify(); - IXFA_DocLayout* pDocLayout = pDocument->GetDocLayout(); - CXFA_ContainerLayoutItem* pRootLayout = GetRootLayoutItem(); - { - for (int32_t iIndex = 0; iIndex < pDocument->m_pPendingPageSet.GetSize(); - iIndex++) { - CXFA_NodeIteratorTemplate - sIterator(pDocument->m_pPendingPageSet.GetAt(iIndex)); - for (CXFA_Node* pNode = sIterator.GetCurrent(); pNode; - pNode = sIterator.MoveToNext()) { - if (pNode->IsContainerNode()) { - CXFA_Node* pBindNode = pNode->GetBindData(); - if (pBindNode) { - pBindNode->RemoveBindItem(pNode); - pNode->SetObject(XFA_ATTRIBUTE_BindingNode, NULL); - } - } - pNode->SetFlag(XFA_NODEFLAG_UnusedNode); - } - } - } - int32_t iIndex = 0; - CXFA_Node* pPendingPageSet = NULL; - for (; pRootLayout; - pRootLayout = (CXFA_ContainerLayoutItem*)pRootLayout->m_pNextSibling) { - pPendingPageSet = NULL; - CXFA_NodeIteratorTemplate< - CXFA_ContainerLayoutItem, - CXFA_TraverseStrategy_ContentAreaContainerLayoutItem> - iterator(pRootLayout); - CXFA_ContainerLayoutItem* pRootPageSetContainerItem = iterator.GetCurrent(); - ASSERT(pRootPageSetContainerItem->m_pFormNode->GetClassID() == - XFA_ELEMENT_PageSet); - if (iIndex < pDocument->m_pPendingPageSet.GetSize()) { - pPendingPageSet = pDocument->m_pPendingPageSet.GetAt(iIndex); - iIndex++; - } - if (!pPendingPageSet) { - if (pRootPageSetContainerItem->m_pFormNode->GetPacketID() == - XFA_XDPPACKET_Template) { - pPendingPageSet = - pRootPageSetContainerItem->m_pFormNode->CloneTemplateToForm(FALSE); - } else { - pPendingPageSet = pRootPageSetContainerItem->m_pFormNode; - } - } - if (pRootPageSetContainerItem->m_pFormNode->GetUserData( - XFA_LAYOUTITEMKEY) == pRootPageSetContainerItem) { - pRootPageSetContainerItem->m_pFormNode->SetUserData(XFA_LAYOUTITEMKEY, - NULL); - } - pRootPageSetContainerItem->m_pFormNode = pPendingPageSet; - pPendingPageSet->SetFlag(XFA_NODEFLAG_UnusedNode, FALSE); - for (CXFA_ContainerLayoutItem* pContainerItem = iterator.MoveToNext(); - pContainerItem; pContainerItem = iterator.MoveToNext()) { - CXFA_Node* pNode = pContainerItem->m_pFormNode; - if (pNode->GetPacketID() != XFA_XDPPACKET_Template) { - continue; - } - switch (pNode->GetClassID()) { - case XFA_ELEMENT_PageSet: { - CXFA_Node* pParentNode = pContainerItem->m_pParent->m_pFormNode; - pContainerItem->m_pFormNode = XFA_NodeMerge_CloneOrMergeContainer( - pDocument, pParentNode, pContainerItem->m_pFormNode, TRUE); - } break; - case XFA_ELEMENT_PageArea: { - CXFA_ContainerLayoutItem* pFormLayout = pContainerItem; - CXFA_Node* pParentNode = pContainerItem->m_pParent->m_pFormNode; - FX_BOOL bIsExistForm = TRUE; - for (int32_t iLevel = 0; iLevel < 3; iLevel++) { - pFormLayout = (CXFA_ContainerLayoutItem*)pFormLayout->m_pFirstChild; - if (iLevel == 2) { - while (pFormLayout && - !XFA_ItemLayoutProcessor_IsTakingSpace( - pFormLayout->m_pFormNode)) { - pFormLayout = - (CXFA_ContainerLayoutItem*)pFormLayout->m_pNextSibling; - } - } - if (pFormLayout == NULL) { - bIsExistForm = FALSE; - break; - } - } - if (bIsExistForm) { - CXFA_Node* pNewSubform = pFormLayout->m_pFormNode; - if (pContainerItem->m_pOldSubform && - pContainerItem->m_pOldSubform != pNewSubform) { - CXFA_Node* pExistingNode = XFA_DataMerge_FindFormDOMInstance( - pDocument, pContainerItem->m_pFormNode->GetClassID(), - pContainerItem->m_pFormNode->GetNameHash(), pParentNode); - CXFA_ContainerIterator sIterator(pExistingNode); - for (CXFA_Node* pNode = sIterator.GetCurrent(); pNode; - pNode = sIterator.MoveToNext()) { - if (pNode->GetClassID() != XFA_ELEMENT_ContentArea) { - CXFA_LayoutItem* pLayoutItem = static_cast( - pNode->GetUserData(XFA_LAYOUTITEMKEY)); - if (pLayoutItem) { - pNotify->OnLayoutEvent(pDocLayout, pLayoutItem, - XFA_LAYOUTEVENT_ItemRemoving); - delete pLayoutItem; - } - } - } - if (pExistingNode) { - pParentNode->RemoveChild(pExistingNode); - } - } - pContainerItem->m_pOldSubform = pNewSubform; - } - pContainerItem->m_pFormNode = pDocument->DataMerge_CopyContainer( - pContainerItem->m_pFormNode, pParentNode, - ToNode(pDocument->GetXFAObject(XFA_HASHCODE_Record)), TRUE); - } break; - case XFA_ELEMENT_ContentArea: { - CXFA_Node* pParentNode = pContainerItem->m_pParent->m_pFormNode; - for (CXFA_Node* pChildNode = - pParentNode->GetNodeItem(XFA_NODEITEM_FirstChild); - pChildNode; - pChildNode = pChildNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { - if (pChildNode->GetTemplateNode() != pContainerItem->m_pFormNode) { - continue; - } - pContainerItem->m_pFormNode = pChildNode; - break; - } - } break; - default: - break; - } - } - if (!pPendingPageSet->GetNodeItem(XFA_NODEITEM_Parent)) { - CXFA_Node* pFormToplevelSubform = - pDocument->GetXFAObject(XFA_HASHCODE_Form) - ->AsNode() - ->GetFirstChildByClass(XFA_ELEMENT_Subform); - pFormToplevelSubform->InsertChild(pPendingPageSet); - } - pDocument->DataMerge_UpdateBindingRelations(pPendingPageSet); - pPendingPageSet->SetFlag(XFA_NODEFLAG_Initialized); - } - pPendingPageSet = GetRootLayoutItem()->m_pFormNode; - while (pPendingPageSet) { - CXFA_Node* pNextPendingPageSet = - pPendingPageSet->GetNextSameClassSibling(XFA_ELEMENT_PageSet); - CXFA_NodeIteratorTemplate - sIterator(pPendingPageSet); - CXFA_Node* pNode = sIterator.GetCurrent(); - while (pNode) { - if (pNode->HasFlag(XFA_NODEFLAG_UnusedNode)) { - if (pNode->GetObjectType() == XFA_OBJECTTYPE_ContainerNode) { - XFA_ELEMENT eCurId = pNode->GetClassID(); - if (eCurId == XFA_ELEMENT_PageArea || eCurId == XFA_ELEMENT_PageSet) { - CXFA_ContainerIterator iteChild(pNode); - CXFA_Node* pChildNode = iteChild.MoveToNext(); - for (; pChildNode; pChildNode = iteChild.MoveToNext()) { - CXFA_LayoutItem* pLayoutItem = static_cast( - pChildNode->GetUserData(XFA_LAYOUTITEMKEY)); - if (pLayoutItem) { - pNotify->OnLayoutEvent(pDocLayout, pLayoutItem, - XFA_LAYOUTEVENT_ItemRemoving); - delete pLayoutItem; - } - } - } else if (eCurId != XFA_ELEMENT_ContentArea) { - CXFA_LayoutItem* pLayoutItem = static_cast( - pNode->GetUserData(XFA_LAYOUTITEMKEY)); - if (pLayoutItem) { - pNotify->OnLayoutEvent(pDocLayout, pLayoutItem, - XFA_LAYOUTEVENT_ItemRemoving); - delete pLayoutItem; - } - } - CXFA_Node* pNext = sIterator.SkipChildrenAndMoveToNext(); - pNode->GetNodeItem(XFA_NODEITEM_Parent)->RemoveChild(pNode); - pNode = pNext; - } else { - pNode->SetFlag(XFA_NODEFLAG_UnusedNode, FALSE); - pNode->SetFlag(XFA_NODEFLAG_Initialized); - pNode = sIterator.MoveToNext(); - } - } else { - pNode->SetFlag(XFA_NODEFLAG_Initialized); - pNode = sIterator.MoveToNext(); - } - } - pPendingPageSet = pNextPendingPageSet; - } -} -void CXFA_LayoutPageMgr::LayoutPageSetContents() { - CXFA_ContainerLayoutItem* pRootLayoutItem = GetRootLayoutItem(); - for (; pRootLayoutItem; - pRootLayoutItem = - (CXFA_ContainerLayoutItem*)pRootLayoutItem->m_pNextSibling) { - CXFA_NodeIteratorTemplate< - CXFA_ContainerLayoutItem, - CXFA_TraverseStrategy_ContentAreaContainerLayoutItem> - iterator(pRootLayoutItem); - for (CXFA_ContainerLayoutItem* pContainerItem = iterator.GetCurrent(); - pContainerItem; pContainerItem = iterator.MoveToNext()) { - CXFA_Node* pNode = pContainerItem->m_pFormNode; - switch (pNode->GetClassID()) { - case XFA_ELEMENT_PageArea: - m_pLayoutProcessor->GetRootRootItemLayoutProcessor() - ->DoLayoutPageArea(pContainerItem); - break; - default: - break; - } - } - } -} -void XFA_SyncContainer(IXFA_Notify* pNotify, - IXFA_DocLayout* pDocLayout, - CXFA_LayoutItem* pContainerItem, - FX_DWORD dwRelevant, - FX_BOOL bVisible, - int32_t nPageIndex) { - FX_BOOL bVisibleItem = FALSE; - FX_DWORD dwStatus = 0; - FX_DWORD dwRelevantContainer = 0; - if (bVisible) { - XFA_ATTRIBUTEENUM eAttributeValue = - pContainerItem->m_pFormNode->GetEnum(XFA_ATTRIBUTE_Presence); - if (eAttributeValue == XFA_ATTRIBUTEENUM_Visible || - eAttributeValue == XFA_ATTRIBUTEENUM_Unknown) { - bVisibleItem = TRUE; - } - dwRelevantContainer = - XFA_GetRelevant(pContainerItem->m_pFormNode, dwRelevant); - dwStatus = - (bVisibleItem ? XFA_LAYOUTSTATUS_Visible : 0) | dwRelevantContainer; - } - pNotify->OnLayoutEvent(pDocLayout, pContainerItem, XFA_LAYOUTEVENT_ItemAdded, - (void*)(uintptr_t)nPageIndex, - (void*)(uintptr_t)dwStatus); - for (CXFA_LayoutItem* pChild = pContainerItem->m_pFirstChild; pChild; - pChild = pChild->m_pNextSibling) { - if (pChild->IsContentLayoutItem()) { - XFA_SyncContainer(pNotify, pDocLayout, pChild, dwRelevantContainer, - bVisibleItem, nPageIndex); - } - } -} -void CXFA_LayoutPageMgr::SyncLayoutData() { - MergePageSetContents(); - LayoutPageSetContents(); - IXFA_Notify* pNotify = - m_pTemplatePageSetRoot->GetDocument()->GetParser()->GetNotify(); - int32_t nPageIdx = -1; - CXFA_ContainerLayoutItem* pRootLayoutItem = GetRootLayoutItem(); - for (; pRootLayoutItem; - pRootLayoutItem = - (CXFA_ContainerLayoutItem*)pRootLayoutItem->m_pNextSibling) { - CXFA_NodeIteratorTemplate< - CXFA_ContainerLayoutItem, - CXFA_TraverseStrategy_ContentAreaContainerLayoutItem> - iteratorParent(pRootLayoutItem); - for (CXFA_ContainerLayoutItem* pContainerItem = iteratorParent.GetCurrent(); - pContainerItem; pContainerItem = iteratorParent.MoveToNext()) { - switch (pContainerItem->m_pFormNode->GetClassID()) { - case XFA_ELEMENT_PageArea: { - nPageIdx++; - FX_DWORD dwRelevant = - XFA_LAYOUTSTATUS_Viewable | XFA_LAYOUTSTATUS_Printable; - CXFA_NodeIteratorTemplate - iterator(pContainerItem); - CXFA_LayoutItem* pChildLayoutItem = iterator.GetCurrent(); - while (pChildLayoutItem) { - CXFA_ContentLayoutItem* pContentItem = - pChildLayoutItem->AsContentLayoutItem(); - if (!pContentItem) { - pChildLayoutItem = iterator.MoveToNext(); - continue; - } - FX_BOOL bVisible = - (pContentItem->m_pFormNode->GetEnum(XFA_ATTRIBUTE_Presence) == - XFA_ATTRIBUTEENUM_Visible); - FX_DWORD dwRelevantChild = - XFA_GetRelevant(pContentItem->m_pFormNode, dwRelevant); - XFA_SyncContainer(pNotify, m_pLayoutProcessor, pContentItem, - dwRelevantChild, bVisible, nPageIdx); - pChildLayoutItem = iterator.SkipChildrenAndMoveToNext(); - } - } break; - default: - break; - } - } - } - int32_t nPage = m_PageArray.GetSize(); - for (int32_t i = nPage - 1; i >= m_nAvailPages; i--) { - CXFA_ContainerLayoutItem* pPage = m_PageArray[i]; - m_PageArray.RemoveAt(i); - pNotify->OnPageEvent(pPage, XFA_PAGEEVENT_PageRemoved); - delete pPage; - } - ClearRecordList(); -} -void XFA_ReleaseLayoutItem_NoPageArea(CXFA_LayoutItem* pLayoutItem) { - CXFA_LayoutItem *pNext, *pNode = pLayoutItem->m_pFirstChild; - while (pNode) { - pNext = pNode->m_pNextSibling; - pNode->m_pParent = NULL; - XFA_ReleaseLayoutItem_NoPageArea(pNode); - pNode = pNext; - } - if (pLayoutItem->m_pFormNode->GetClassID() != XFA_ELEMENT_PageArea) { - delete pLayoutItem; - } -} -void CXFA_LayoutPageMgr::PrepareLayout() { - m_pPageSetCurRoot = NULL; - m_ePageSetMode = XFA_ATTRIBUTEENUM_OrderedOccurrence; - m_nAvailPages = 0; - ClearRecordList(); - if (!m_pPageSetLayoutItemRoot) { - return; - } - CXFA_ContainerLayoutItem* pRootLayoutItem = m_pPageSetLayoutItemRoot; - if (pRootLayoutItem && - pRootLayoutItem->m_pFormNode->GetPacketID() == XFA_XDPPACKET_Form) { - CXFA_Node* pPageSetFormNode = pRootLayoutItem->m_pFormNode; - pRootLayoutItem->m_pFormNode->GetDocument()->m_pPendingPageSet.RemoveAll(); - if (pPageSetFormNode->HasFlag(XFA_NODEFLAG_HasRemoved)) { - XFA_ReleaseLayoutItem(pRootLayoutItem); - m_pPageSetLayoutItemRoot = NULL; - pRootLayoutItem = NULL; - pPageSetFormNode = NULL; - m_PageArray.RemoveAll(); - } - while (pPageSetFormNode) { - CXFA_Node* pNextPageSet = - pPageSetFormNode->GetNextSameClassSibling(XFA_ELEMENT_PageSet); - pPageSetFormNode->GetNodeItem(XFA_NODEITEM_Parent) - ->RemoveChild(pPageSetFormNode, FALSE); - pRootLayoutItem->m_pFormNode->GetDocument()->m_pPendingPageSet.Add( - pPageSetFormNode); - pPageSetFormNode = pNextPageSet; - } - } - pRootLayoutItem = m_pPageSetLayoutItemRoot; - CXFA_ContainerLayoutItem* pNextLayout = NULL; - for (; pRootLayoutItem; pRootLayoutItem = pNextLayout) { - pNextLayout = (CXFA_ContainerLayoutItem*)pRootLayoutItem->m_pNextSibling; - SaveLayoutItem(pRootLayoutItem); - delete pRootLayoutItem; - } - m_pPageSetLayoutItemRoot = NULL; -} diff --git a/xfa/src/fxfa/parser/xfa_layout_pagemgr_new.h b/xfa/src/fxfa/parser/xfa_layout_pagemgr_new.h deleted file mode 100644 index 5f6607f7cc..0000000000 --- a/xfa/src/fxfa/parser/xfa_layout_pagemgr_new.h +++ /dev/null @@ -1,152 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXFA_PARSER_XFA_LAYOUT_PAGEMGR_NEW_H_ -#define XFA_SRC_FXFA_PARSER_XFA_LAYOUT_PAGEMGR_NEW_H_ - -#include "xfa/src/fxfa/parser/xfa_doclayout.h" -#include "xfa/src/fxfa/parser/xfa_layout_itemlayout.h" - -class CXFA_ContainerRecord { - public: - CXFA_ContainerRecord(CXFA_ContainerLayoutItem* pPageSet = NULL, - CXFA_ContainerLayoutItem* pPageArea = NULL, - CXFA_ContainerLayoutItem* pContentArea = NULL) - : pCurPageSet(pPageSet), - pCurPageArea(pPageArea), - pCurContentArea(pContentArea) {} - CXFA_ContainerLayoutItem* pCurPageSet; - CXFA_ContainerLayoutItem* pCurPageArea; - CXFA_ContainerLayoutItem* pCurContentArea; -}; -class CXFA_LayoutPageMgr { - public: - CXFA_LayoutPageMgr(CXFA_LayoutProcessor* pLayoutProcessor); - ~CXFA_LayoutPageMgr(); - FX_BOOL InitLayoutPage(CXFA_Node* pFormNode); - FX_BOOL PrepareFirstPage(CXFA_Node* pRootSubform); - FX_FLOAT GetAvailHeight(); - FX_BOOL GetNextAvailContentHeight(FX_FLOAT fChildHeight); - void SubmitContentItem(CXFA_ContentLayoutItem* pContentLayoutItem, - XFA_ItemLayoutProcessorResult eStatus); - void FinishPaginatedPageSets(); - void SyncLayoutData(); - int32_t GetPageCount() const; - IXFA_LayoutPage* GetPage(int32_t index) const; - int32_t GetPageIndex(const IXFA_LayoutPage* pPage) const; - inline CXFA_ContainerLayoutItem* GetRootLayoutItem() const { - return m_pPageSetLayoutItemRoot; - } - FX_BOOL ProcessBreakBeforeOrAfter(CXFA_Node* pBreakNode, - FX_BOOL bBefore, - CXFA_Node*& pBreakLeaderNode, - CXFA_Node*& pBreakTrailerNode, - FX_BOOL& bCreatePage); - FX_BOOL ProcessOverflow(CXFA_Node* pFormNode, - CXFA_Node*& pLeaderNode, - CXFA_Node*& pTrailerNode, - FX_BOOL bDataMerge = FALSE, - FX_BOOL bCreatePage = TRUE); - CXFA_Node* QueryOverflow(CXFA_Node* pFormNode, - CXFA_LayoutContext* pLayoutContext = NULL); - FX_BOOL ProcessBookendLeaderOrTrailer(CXFA_Node* pBookendNode, - FX_BOOL bLeader, - CXFA_Node*& pBookendAppendNode); - CXFA_LayoutItem* FindOrCreateLayoutItem(CXFA_Node* pFormNode); - - protected: - FX_BOOL AppendNewPage(FX_BOOL bFirstTemPage = FALSE); - void ReorderPendingLayoutRecordToTail(CXFA_ContainerRecord* pNewRecord, - CXFA_ContainerRecord* pPrevRecord); - void RemoveLayoutRecord(CXFA_ContainerRecord* pNewRecord, - CXFA_ContainerRecord* pPrevRecord); - inline CXFA_ContainerRecord* GetCurrentContainerRecord() { - CXFA_ContainerRecord* result = - ((CXFA_ContainerRecord*)m_rgProposedContainerRecord.GetAt( - m_pCurrentContainerRecord)); - ASSERT(result); - return result; - } - CXFA_ContainerRecord* CreateContainerRecord(CXFA_Node* pPageNode = NULL, - FX_BOOL bCreateNew = FALSE); - void AddPageAreaLayoutItem(CXFA_ContainerRecord* pNewRecord, - CXFA_Node* pNewPageArea); - void AddContentAreaLayoutItem(CXFA_ContainerRecord* pNewRecord, - CXFA_Node* pContentArea); - FX_BOOL RunBreak(XFA_ELEMENT eBreakType, - XFA_ATTRIBUTEENUM eTargetType, - CXFA_Node* pTarget, - FX_BOOL bStartNew); - CXFA_Node* BreakOverflow(CXFA_Node* pOverflowNode, - CXFA_Node*& pLeaderTemplate, - CXFA_Node*& pTrailerTemplate, - FX_BOOL bCreatePage = TRUE); - FX_BOOL ResolveBookendLeaderOrTrailer(CXFA_Node* pBookendNode, - FX_BOOL bLeader, - CXFA_Node*& pBookendAppendTemplate); - FX_BOOL ExecuteBreakBeforeOrAfter(CXFA_Node* pCurNode, - FX_BOOL bBefore, - CXFA_Node*& pBreakLeaderTemplate, - CXFA_Node*& pBreakTrailerTemplate); - - int32_t CreateMinPageRecord(CXFA_Node* pPageArea, - FX_BOOL bTargetPageArea, - FX_BOOL bCreateLast = FALSE); - void CreateMinPageSetRecord(CXFA_Node* pPageSet, FX_BOOL bCreateAll = FALSE); - void CreateNextMinRecord(CXFA_Node* pRecordNode); - FX_BOOL FindPageAreaFromPageSet(CXFA_Node* pPageSet, - CXFA_Node* pStartChild, - CXFA_Node* pTargetPageArea = NULL, - CXFA_Node* pTargetContentArea = NULL, - FX_BOOL bNewPage = FALSE, - FX_BOOL bQuery = FALSE); - FX_BOOL FindPageAreaFromPageSet_Ordered(CXFA_Node* pPageSet, - CXFA_Node* pStartChild, - CXFA_Node* pTargetPageArea = NULL, - CXFA_Node* pTargetContentArea = NULL, - FX_BOOL bNewPage = FALSE, - FX_BOOL bQuery = FALSE); - FX_BOOL FindPageAreaFromPageSet_SimplexDuplex( - CXFA_Node* pPageSet, - CXFA_Node* pStartChild, - CXFA_Node* pTargetPageArea = NULL, - CXFA_Node* pTargetContentArea = NULL, - FX_BOOL bNewPage = FALSE, - FX_BOOL bQuery = FALSE, - XFA_ATTRIBUTEENUM ePreferredPosition = XFA_ATTRIBUTEENUM_First); - FX_BOOL MatchPageAreaOddOrEven(CXFA_Node* pPageArea, FX_BOOL bLastMatch); - CXFA_Node* GetNextAvailPageArea(CXFA_Node* pTargetPageArea, - CXFA_Node* pTargetContentArea = NULL, - FX_BOOL bNewPage = FALSE, - FX_BOOL bQuery = FALSE); - FX_BOOL GetNextContentArea(CXFA_Node* pTargetContentArea); - void InitPageSetMap(); - void ProcessLastPageSet(); - inline FX_BOOL IsPageSetRootOrderedOccurrence() { - return m_ePageSetMode == XFA_ATTRIBUTEENUM_OrderedOccurrence; - } - void ClearData(); - void ClearRecordList(); - void MergePageSetContents(); - void LayoutPageSetContents(); - void PrepareLayout(); - void SaveLayoutItem(CXFA_LayoutItem* pParentLayoutItem); - CXFA_LayoutProcessor* m_pLayoutProcessor; - CXFA_Node* m_pTemplatePageSetRoot; - CXFA_ContainerLayoutItem* m_pPageSetLayoutItemRoot; - CXFA_ContainerLayoutItem* m_pPageSetCurRoot; - FX_POSITION m_pCurrentContainerRecord; - CFX_PtrList m_rgProposedContainerRecord; - CXFA_Node* m_pCurPageArea; - int32_t m_nAvailPages; - int32_t m_nCurPageCount; - XFA_ATTRIBUTEENUM m_ePageSetMode; - FX_BOOL m_bCreateOverFlowPage; - CFX_MapPtrTemplate m_pPageSetMap; - CFX_ArrayTemplate m_PageArray; -}; - -#endif // XFA_SRC_FXFA_PARSER_XFA_LAYOUT_PAGEMGR_NEW_H_ diff --git a/xfa/src/fxfa/parser/xfa_locale.cpp b/xfa/src/fxfa/parser/xfa_locale.cpp deleted file mode 100644 index 5fc465f872..0000000000 --- a/xfa/src/fxfa/parser/xfa_locale.cpp +++ /dev/null @@ -1,377 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fxfa/parser/xfa_locale.h" - -#include "core/include/fxcrt/fx_xml.h" -#include "xfa/src/fxfa/fm2js/xfa_fm2jsapi.h" -#include "xfa/src/fxfa/parser/xfa_docdata.h" -#include "xfa/src/fxfa/parser/xfa_doclayout.h" -#include "xfa/src/fxfa/parser/xfa_document.h" -#include "xfa/src/fxfa/parser/xfa_localemgr.h" -#include "xfa/src/fxfa/parser/xfa_object.h" -#include "xfa/src/fxfa/parser/xfa_parser.h" -#include "xfa/src/fxfa/parser/xfa_script.h" -#include "xfa/src/fxfa/parser/xfa_utils.h" - -static const FX_WCHAR g_FX_Percent[] = L"z,zzz,zzz,zzz,zzz,zzz%"; -static const FX_WCHAR g_FX_Currency[] = L"$z,zzz,zzz,zzz,zzz,zz9.99"; -static const FX_WCHAR g_FX_Decimal[] = L"z,zzz,zzz,zzz,zzz,zz9.zzz"; -static const FX_WCHAR g_FX_Integer[] = L"z,zzz,zzz,zzz,zzz,zzz"; - -CXFA_XMLLocale::CXFA_XMLLocale(CXML_Element* pLocaleData) { - m_pLocaleData = pLocaleData; -} -CXFA_XMLLocale::~CXFA_XMLLocale() { - if (m_pLocaleData) { - delete m_pLocaleData; - } -} -void CXFA_XMLLocale::Release() { - delete this; -} -CFX_WideString CXFA_XMLLocale::GetName() { - return m_pLocaleData ? m_pLocaleData->GetAttrValue("name") : CFX_WideString(); -} -void CXFA_XMLLocale::GetNumbericSymbol(FX_LOCALENUMSYMBOL eType, - CFX_WideString& wsNumSymbol) const { - CFX_ByteString bsSymbols; - CFX_WideString wsName; - switch (eType) { - case FX_LOCALENUMSYMBOL_Decimal: - bsSymbols = "numberSymbols"; - wsName = FX_WSTRC(L"decimal"); - break; - case FX_LOCALENUMSYMBOL_Grouping: - bsSymbols = "numberSymbols"; - wsName = FX_WSTRC(L"grouping"); - break; - case FX_LOCALENUMSYMBOL_Percent: - bsSymbols = "numberSymbols"; - wsName = FX_WSTRC(L"percent"); - break; - case FX_LOCALENUMSYMBOL_Minus: - bsSymbols = "numberSymbols"; - wsName = FX_WSTRC(L"minus"); - break; - case FX_LOCALENUMSYMBOL_Zero: - bsSymbols = "numberSymbols"; - wsName = FX_WSTRC(L"zero"); - break; - case FX_LOCALENUMSYMBOL_CurrencySymbol: - bsSymbols = "currencySymbols"; - wsName = FX_WSTRC(L"symbol"); - break; - case FX_LOCALENUMSYMBOL_CurrencyName: - bsSymbols = "currencySymbols"; - wsName = FX_WSTRC(L"isoname"); - break; - default: - return; - } - CXML_Element* pElement = m_pLocaleData->GetElement("", bsSymbols); - if (!pElement) { - return; - } - GetPattern(pElement, CFX_ByteStringC((const FX_CHAR*)bsSymbols, - bsSymbols.GetLength() - 1), - wsName, wsNumSymbol); -} -void CXFA_XMLLocale::GetDateTimeSymbols(CFX_WideString& wsDtSymbol) const { - if (!m_pLocaleData) { - return; - } - CFX_ByteString bsSpace; - CXML_Element* pNumberSymbols = - m_pLocaleData->GetElement(bsSpace, "dateTimeSymbols"); - if (!pNumberSymbols) { - return; - } - wsDtSymbol = pNumberSymbols->GetContent(0); -} -void CXFA_XMLLocale::GetMonthName(int32_t nMonth, - CFX_WideString& wsMonthName, - FX_BOOL bAbbr) const { - wsMonthName = GetCalendarSymbol("month", nMonth, bAbbr); -} -void CXFA_XMLLocale::GetDayName(int32_t nWeek, - CFX_WideString& wsDayName, - FX_BOOL bAbbr) const { - wsDayName = GetCalendarSymbol("day", nWeek, bAbbr); -} -void CXFA_XMLLocale::GetMeridiemName(CFX_WideString& wsMeridiemName, - FX_BOOL bAM) const { - wsMeridiemName = GetCalendarSymbol("meridiem", bAM ? 0 : 1, FALSE); -} -void CXFA_XMLLocale::GetTimeZone(FX_TIMEZONE& tz) const { - IXFA_TimeZoneProvider* pProvider = IXFA_TimeZoneProvider::Get(); - pProvider->GetTimeZone(tz); -} -void CXFA_XMLLocale::GetEraName(CFX_WideString& wsEraName, FX_BOOL bAD) const { - wsEraName = GetCalendarSymbol("era", bAD ? 1 : 0, FALSE); -} -CFX_WideString CXFA_XMLLocale::GetCalendarSymbol(const CFX_ByteStringC& symbol, - int index, - FX_BOOL bAbbr) const { - CFX_ByteString pstrSymbolNames = symbol + "Names"; - CFX_WideString wsSymbolName = L""; - if (m_pLocaleData) { - CXML_Element* pChild = m_pLocaleData->GetElement("", "calendarSymbols"); - if (pChild) { - CXML_Element* pSymbolNames = pChild->GetElement("", pstrSymbolNames); - if (pSymbolNames) { - if (pSymbolNames->GetAttrInteger("abbr") != bAbbr) { - pSymbolNames = pChild->GetElement("", pstrSymbolNames, 1); - } - if (pSymbolNames && pSymbolNames->GetAttrInteger("abbr") == bAbbr) { - CXML_Element* pSymbolName = - pSymbolNames->GetElement("", symbol, index); - if (pSymbolName) { - wsSymbolName = pSymbolName->GetContent(0); - } - } - } - } - } - return wsSymbolName; -} -void CXFA_XMLLocale::GetDatePattern(FX_LOCALEDATETIMESUBCATEGORY eType, - CFX_WideString& wsPattern) const { - CXML_Element* pElement = m_pLocaleData->GetElement("", "datePatterns"); - if (pElement == NULL) { - return; - } - CFX_WideString wsName; - switch (eType) { - case FX_LOCALEDATETIMESUBCATEGORY_Short: - wsName = L"short"; - break; - case FX_LOCALEDATETIMESUBCATEGORY_Default: - case FX_LOCALEDATETIMESUBCATEGORY_Medium: - wsName = L"med"; - break; - case FX_LOCALEDATETIMESUBCATEGORY_Full: - wsName = L"full"; - break; - case FX_LOCALEDATETIMESUBCATEGORY_Long: - wsName = L"long"; - break; - } - GetPattern(pElement, "datePattern", wsName, wsPattern); -} -void CXFA_XMLLocale::GetTimePattern(FX_LOCALEDATETIMESUBCATEGORY eType, - CFX_WideString& wsPattern) const { - CXML_Element* pElement = m_pLocaleData->GetElement("", "timePatterns"); - if (pElement == NULL) { - return; - } - CFX_WideString wsName; - switch (eType) { - case FX_LOCALEDATETIMESUBCATEGORY_Short: - wsName = L"short"; - break; - case FX_LOCALEDATETIMESUBCATEGORY_Default: - case FX_LOCALEDATETIMESUBCATEGORY_Medium: - wsName = L"med"; - break; - case FX_LOCALEDATETIMESUBCATEGORY_Full: - wsName = L"full"; - break; - case FX_LOCALEDATETIMESUBCATEGORY_Long: - wsName = L"long"; - break; - } - GetPattern(pElement, "timePattern", wsName, wsPattern); -} -void CXFA_XMLLocale::GetNumPattern(FX_LOCALENUMSUBCATEGORY eType, - CFX_WideString& wsPattern) const { - CXML_Element* pElement = m_pLocaleData->GetElement("", "numberPatterns"); - if (pElement == NULL) { - return; - } - switch (eType) { - case FX_LOCALENUMPATTERN_Percent: - wsPattern = g_FX_Percent; - break; - case FX_LOCALENUMPATTERN_Currency: - wsPattern = g_FX_Currency; - break; - case FX_LOCALENUMPATTERN_Decimal: - wsPattern = g_FX_Decimal; - break; - case FX_LOCALENUMPATTERN_Integer: - wsPattern = g_FX_Integer; - break; - } -} -void CXFA_XMLLocale::GetPattern(CXML_Element* pElement, - const CFX_ByteStringC& bsTag, - const CFX_WideStringC& wsName, - CFX_WideString& wsPattern) const { - int32_t iCount = pElement->CountElements("", bsTag); - for (int32_t i = 0; i < iCount; i++) { - CXML_Element* pChild = pElement->GetElement("", bsTag, i); - if (pChild->GetAttrValue("name") == wsName) { - wsPattern = pChild->GetContent(0); - return; - } - } -} -CXFA_NodeLocale::CXFA_NodeLocale(CXFA_Node* pLocale) { - m_pLocale = pLocale; -} -CXFA_NodeLocale::~CXFA_NodeLocale() {} -void CXFA_NodeLocale::Release() { - delete this; -} -CFX_WideString CXFA_NodeLocale::GetName() { - return m_pLocale ? m_pLocale->GetCData(XFA_ATTRIBUTE_Name) : NULL; -} -void CXFA_NodeLocale::GetNumbericSymbol(FX_LOCALENUMSYMBOL eType, - CFX_WideString& wsNumSymbol) const { - switch (eType) { - case FX_LOCALENUMSYMBOL_Decimal: - wsNumSymbol = GetSymbol(XFA_ELEMENT_NumberSymbols, FX_WSTRC(L"decimal")); - break; - case FX_LOCALENUMSYMBOL_Grouping: - wsNumSymbol = GetSymbol(XFA_ELEMENT_NumberSymbols, FX_WSTRC(L"grouping")); - break; - case FX_LOCALENUMSYMBOL_Percent: - wsNumSymbol = GetSymbol(XFA_ELEMENT_NumberSymbols, FX_WSTRC(L"percent")); - break; - case FX_LOCALENUMSYMBOL_Minus: - wsNumSymbol = GetSymbol(XFA_ELEMENT_NumberSymbols, FX_WSTRC(L"minus")); - break; - case FX_LOCALENUMSYMBOL_Zero: - wsNumSymbol = GetSymbol(XFA_ELEMENT_NumberSymbols, FX_WSTRC(L"zero")); - break; - case FX_LOCALENUMSYMBOL_CurrencySymbol: - wsNumSymbol = GetSymbol(XFA_ELEMENT_CurrencySymbols, FX_WSTRC(L"symbol")); - break; - case FX_LOCALENUMSYMBOL_CurrencyName: - wsNumSymbol = - GetSymbol(XFA_ELEMENT_CurrencySymbols, FX_WSTRC(L"isoname")); - break; - } -} -void CXFA_NodeLocale::GetDateTimeSymbols(CFX_WideString& wsDtSymbol) const { - CXFA_Node* pSymbols = - m_pLocale ? m_pLocale->GetChild(0, XFA_ELEMENT_DateTimeSymbols) : NULL; - wsDtSymbol = pSymbols ? pSymbols->GetContent() : CFX_WideString(); -} -void CXFA_NodeLocale::GetMonthName(int32_t nMonth, - CFX_WideString& wsMonthName, - FX_BOOL bAbbr) const { - wsMonthName = GetCalendarSymbol(XFA_ELEMENT_MonthNames, nMonth, bAbbr); -} -void CXFA_NodeLocale::GetDayName(int32_t nWeek, - CFX_WideString& wsDayName, - FX_BOOL bAbbr) const { - wsDayName = GetCalendarSymbol(XFA_ELEMENT_DayNames, nWeek, bAbbr); -} -void CXFA_NodeLocale::GetMeridiemName(CFX_WideString& wsMeridiemName, - FX_BOOL bAM) const { - wsMeridiemName = - GetCalendarSymbol(XFA_ELEMENT_MeridiemNames, bAM ? 0 : 1, FALSE); -} -void CXFA_NodeLocale::GetTimeZone(FX_TIMEZONE& tz) const { - IXFA_TimeZoneProvider* pProvider = IXFA_TimeZoneProvider::Get(); - pProvider->GetTimeZone(tz); -} -void CXFA_NodeLocale::GetEraName(CFX_WideString& wsEraName, FX_BOOL bAD) const { - wsEraName = GetCalendarSymbol(XFA_ELEMENT_EraNames, bAD ? 1 : 0, FALSE); -} -void CXFA_NodeLocale::GetDatePattern(FX_LOCALEDATETIMESUBCATEGORY eType, - CFX_WideString& wsPattern) const { - switch (eType) { - case FX_LOCALEDATETIMESUBCATEGORY_Short: - wsPattern = GetSymbol(XFA_ELEMENT_DatePatterns, FX_WSTRC(L"short")); - break; - case FX_LOCALEDATETIMESUBCATEGORY_Medium: - case FX_LOCALEDATETIMESUBCATEGORY_Default: - wsPattern = GetSymbol(XFA_ELEMENT_DatePatterns, FX_WSTRC(L"med")); - break; - case FX_LOCALEDATETIMESUBCATEGORY_Full: - wsPattern = GetSymbol(XFA_ELEMENT_DatePatterns, FX_WSTRC(L"full")); - break; - case FX_LOCALEDATETIMESUBCATEGORY_Long: - wsPattern = GetSymbol(XFA_ELEMENT_DatePatterns, FX_WSTRC(L"long")); - break; - } -} -void CXFA_NodeLocale::GetTimePattern(FX_LOCALEDATETIMESUBCATEGORY eType, - CFX_WideString& wsPattern) const { - switch (eType) { - case FX_LOCALEDATETIMESUBCATEGORY_Short: - wsPattern = GetSymbol(XFA_ELEMENT_TimePatterns, FX_WSTRC(L"short")); - break; - case FX_LOCALEDATETIMESUBCATEGORY_Medium: - case FX_LOCALEDATETIMESUBCATEGORY_Default: - wsPattern = GetSymbol(XFA_ELEMENT_TimePatterns, FX_WSTRC(L"med")); - break; - case FX_LOCALEDATETIMESUBCATEGORY_Full: - wsPattern = GetSymbol(XFA_ELEMENT_TimePatterns, FX_WSTRC(L"full")); - break; - case FX_LOCALEDATETIMESUBCATEGORY_Long: - wsPattern = GetSymbol(XFA_ELEMENT_TimePatterns, FX_WSTRC(L"long")); - break; - } -} -void CXFA_NodeLocale::GetNumPattern(FX_LOCALENUMSUBCATEGORY eType, - CFX_WideString& wsPattern) const { - switch (eType) { - case FX_LOCALENUMPATTERN_Percent: - wsPattern = g_FX_Percent; - break; - case FX_LOCALENUMPATTERN_Currency: - wsPattern = g_FX_Currency; - break; - case FX_LOCALENUMPATTERN_Decimal: - wsPattern = g_FX_Decimal; - break; - case FX_LOCALENUMPATTERN_Integer: - wsPattern = g_FX_Integer; - break; - } -} -CXFA_Node* CXFA_NodeLocale::GetNodeByName(CXFA_Node* pParent, - const CFX_WideStringC& wsName) const { - CXFA_Node* pChild = - pParent ? pParent->GetNodeItem(XFA_NODEITEM_FirstChild) : NULL; - while (pChild) { - CFX_WideString wsChild; - if (pChild->GetAttribute(XFA_ATTRIBUTE_Name, wsChild)) { - if (wsChild == wsName) { - return pChild; - } - } - pChild = pChild->GetNodeItem(XFA_NODEITEM_NextSibling); - } - return NULL; -} -CFX_WideString CXFA_NodeLocale::GetSymbol( - XFA_ELEMENT eElement, - const CFX_WideStringC& symbol_type) const { - CXFA_Node* pSymbols = m_pLocale ? m_pLocale->GetChild(0, eElement) : NULL; - CXFA_Node* pSymbol = GetNodeByName(pSymbols, symbol_type); - return pSymbol ? pSymbol->GetContent() : CFX_WideString(); -} -CFX_WideString CXFA_NodeLocale::GetCalendarSymbol(XFA_ELEMENT eElement, - int index, - FX_BOOL bAbbr) const { - CXFA_Node* pCalendar = - m_pLocale ? m_pLocale->GetChild(0, XFA_ELEMENT_CalendarSymbols) : NULL; - if (pCalendar) { - CXFA_Node* pNode = pCalendar->GetFirstChildByClass(eElement); - for (; pNode; pNode = pNode->GetNextSameClassSibling(eElement)) { - if (pNode->GetBoolean(XFA_ATTRIBUTE_Abbr) == bAbbr) { - CXFA_Node* pSymbol = pNode->GetChild(index, XFA_ELEMENT_UNKNOWN); - return pSymbol ? pSymbol->GetContent() : CFX_WideString(); - } - } - } - return CFX_WideString(); -} diff --git a/xfa/src/fxfa/parser/xfa_locale.h b/xfa/src/fxfa/parser/xfa_locale.h deleted file mode 100644 index f4b128e67e..0000000000 --- a/xfa/src/fxfa/parser/xfa_locale.h +++ /dev/null @@ -1,93 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXFA_PARSER_XFA_LOCALE_H_ -#define XFA_SRC_FXFA_PARSER_XFA_LOCALE_H_ - -#include "xfa/src/fgas/localization/fgas_locale.h" -#include "xfa/src/fxfa/parser/xfa_object.h" - -class CXFA_XMLLocale : public IFX_Locale { - public: - CXFA_XMLLocale(CXML_Element* pLocaleData); - virtual void Release(); - virtual CFX_WideString GetName(); - virtual void GetNumbericSymbol(FX_LOCALENUMSYMBOL eType, - CFX_WideString& wsNumSymbol) const; - - virtual void GetDateTimeSymbols(CFX_WideString& wsDtSymbol) const; - virtual void GetMonthName(int32_t nMonth, - CFX_WideString& wsMonthName, - FX_BOOL bAbbr = TRUE) const; - virtual void GetDayName(int32_t nWeek, - CFX_WideString& wsDayName, - FX_BOOL bAbbr = TRUE) const; - virtual void GetMeridiemName(CFX_WideString& wsMeridiemName, - FX_BOOL bAM = TRUE) const; - virtual void GetTimeZone(FX_TIMEZONE& tz) const; - virtual void GetEraName(CFX_WideString& wsEraName, FX_BOOL bAD = TRUE) const; - - virtual void GetDatePattern(FX_LOCALEDATETIMESUBCATEGORY eType, - CFX_WideString& wsPattern) const; - virtual void GetTimePattern(FX_LOCALEDATETIMESUBCATEGORY eType, - CFX_WideString& wsPattern) const; - virtual void GetNumPattern(FX_LOCALENUMSUBCATEGORY eType, - CFX_WideString& wsPattern) const; - - protected: - ~CXFA_XMLLocale(); - void GetPattern(CXML_Element* pElement, - const CFX_ByteStringC& bsTag, - const CFX_WideStringC& wsName, - CFX_WideString& wsPattern) const; - CFX_WideString GetCalendarSymbol(const CFX_ByteStringC& symbol, - int index, - FX_BOOL bAbbr) const; - - private: - CXML_Element* m_pLocaleData; -}; -class CXFA_NodeLocale : public IFX_Locale { - public: - CXFA_NodeLocale(CXFA_Node* pLocale); - virtual void Release(); - virtual CFX_WideString GetName(); - virtual void GetNumbericSymbol(FX_LOCALENUMSYMBOL eType, - CFX_WideString& wsNumSymbol) const; - - virtual void GetDateTimeSymbols(CFX_WideString& wsDtSymbol) const; - virtual void GetMonthName(int32_t nMonth, - CFX_WideString& wsMonthName, - FX_BOOL bAbbr = TRUE) const; - virtual void GetDayName(int32_t nWeek, - CFX_WideString& wsDayName, - FX_BOOL bAbbr = TRUE) const; - virtual void GetMeridiemName(CFX_WideString& wsMeridiemName, - FX_BOOL bAM = TRUE) const; - virtual void GetTimeZone(FX_TIMEZONE& tz) const; - virtual void GetEraName(CFX_WideString& wsEraName, FX_BOOL bAD = TRUE) const; - - virtual void GetDatePattern(FX_LOCALEDATETIMESUBCATEGORY eType, - CFX_WideString& wsPattern) const; - virtual void GetTimePattern(FX_LOCALEDATETIMESUBCATEGORY eType, - CFX_WideString& wsPattern) const; - virtual void GetNumPattern(FX_LOCALENUMSUBCATEGORY eType, - CFX_WideString& wsPattern) const; - - protected: - ~CXFA_NodeLocale(); - CXFA_Node* GetNodeByName(CXFA_Node* pParent, - const CFX_WideStringC& wsName) const; - CFX_WideString GetSymbol(XFA_ELEMENT eElement, - const CFX_WideStringC& symbol_type) const; - CFX_WideString GetCalendarSymbol(XFA_ELEMENT eElement, - int index, - FX_BOOL bAbbr) const; - - CXFA_Node* m_pLocale; -}; - -#endif // XFA_SRC_FXFA_PARSER_XFA_LOCALE_H_ diff --git a/xfa/src/fxfa/parser/xfa_localemgr.cpp b/xfa/src/fxfa/parser/xfa_localemgr.cpp deleted file mode 100644 index bb27c9c1e2..0000000000 --- a/xfa/src/fxfa/parser/xfa_localemgr.cpp +++ /dev/null @@ -1,1305 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fxfa/parser/xfa_localemgr.h" - -#include "core/include/fxcodec/fx_codec.h" -#include "core/include/fxcrt/fx_xml.h" -#include "core/include/fxge/fx_ge.h" -#include "xfa/src/fxfa/fm2js/xfa_fm2jsapi.h" -#include "xfa/src/fxfa/parser/xfa_docdata.h" -#include "xfa/src/fxfa/parser/xfa_doclayout.h" -#include "xfa/src/fxfa/parser/xfa_document.h" -#include "xfa/src/fxfa/parser/xfa_locale.h" -#include "xfa/src/fxfa/parser/xfa_object.h" -#include "xfa/src/fxfa/parser/xfa_parser.h" -#include "xfa/src/fxfa/parser/xfa_script.h" -#include "xfa/src/fxfa/parser/xfa_utils.h" - -const uint8_t g_enUS_Locale[] = { - 0x78, 0x9C, 0x95, 0x56, 0xD1, 0x6E, 0x9B, 0x30, 0x14, 0x7D, 0x9F, 0xB4, - 0x7F, 0x40, 0xD6, 0x2A, 0xB5, 0x52, 0x56, 0x6F, 0x8F, 0xA9, 0x88, 0xA5, - 0x6C, 0x24, 0x9B, 0x3A, 0xD1, 0x55, 0x22, 0x55, 0xB5, 0xBE, 0x4C, 0x0E, - 0xDC, 0x05, 0x34, 0xB0, 0x23, 0x83, 0x37, 0x05, 0xED, 0xE3, 0x67, 0x07, - 0xC3, 0xC0, 0xF6, 0x24, 0xC2, 0x4B, 0x7C, 0xCF, 0x3D, 0xE7, 0xE6, 0xDE, - 0x63, 0x30, 0x84, 0x25, 0x4F, 0x69, 0x09, 0x01, 0xA3, 0x15, 0xAC, 0x10, - 0xB0, 0xEF, 0x4F, 0x09, 0x0A, 0x32, 0xA8, 0xD3, 0x15, 0xDA, 0xB0, 0x43, - 0x59, 0xD4, 0xF9, 0xF5, 0xBA, 0x02, 0x51, 0xA4, 0xF4, 0x06, 0x91, 0x50, - 0x53, 0x59, 0x46, 0x45, 0x72, 0xAA, 0xF6, 0xBC, 0xAC, 0x8D, 0xEA, 0x20, - 0xE0, 0xC0, 0x45, 0x41, 0x99, 0x62, 0x54, 0x9C, 0x35, 0xF9, 0x83, 0x82, - 0x6B, 0xB3, 0x26, 0xF7, 0x94, 0x49, 0x2A, 0x4E, 0x21, 0xEE, 0xC2, 0xD7, - 0xAF, 0x0C, 0xBE, 0x85, 0xBD, 0xF0, 0x26, 0x62, 0x2A, 0xD2, 0xDC, 0x41, - 0xD7, 0x47, 0x51, 0x94, 0x1E, 0xAE, 0xAB, 0xBF, 0x97, 0x0C, 0x3C, 0x60, - 0xE9, 0x32, 0xD7, 0xF2, 0x20, 0xEB, 0xC6, 0x81, 0x13, 0x38, 0x36, 0x50, - 0xED, 0x41, 0x38, 0x99, 0xAF, 0x69, 0xC3, 0x7D, 0xF8, 0x03, 0xFF, 0xE5, - 0x17, 0x44, 0x90, 0xDA, 0x09, 0x3C, 0xB2, 0xA8, 0xE7, 0x9D, 0xA3, 0x80, - 0xEE, 0xF7, 0x62, 0x85, 0xDE, 0xA3, 0x91, 0x73, 0x3E, 0xD7, 0x7C, 0x86, - 0xF9, 0xEC, 0x9A, 0x6B, 0x96, 0xCF, 0x2B, 0x9F, 0x55, 0x3E, 0x9F, 0x7C, - 0x0E, 0xF9, 0xDC, 0xF1, 0x19, 0xF3, 0x7F, 0x4F, 0x32, 0x7A, 0x32, 0xB7, - 0x90, 0x5A, 0x91, 0x44, 0xAA, 0x5B, 0x4E, 0x75, 0xAE, 0xD7, 0x5D, 0x92, - 0xC4, 0xDC, 0x81, 0x76, 0x12, 0x6A, 0x1B, 0x7B, 0x86, 0x8C, 0xB9, 0xE8, - 0x2E, 0x97, 0xC2, 0x01, 0xB7, 0xA2, 0xB0, 0xA1, 0x84, 0x36, 0x52, 0x8C, - 0x41, 0x3C, 0xF4, 0x35, 0xEA, 0x71, 0xB4, 0x6B, 0xA6, 0x59, 0xBB, 0x53, - 0xBB, 0x4D, 0xBB, 0x45, 0xBB, 0x39, 0xBB, 0x2F, 0xBB, 0x29, 0x7F, 0x3F, - 0xFA, 0x21, 0xCD, 0x0A, 0xA8, 0xFA, 0x67, 0xCF, 0x84, 0x64, 0x1D, 0x2B, - 0x77, 0xFB, 0x60, 0xC4, 0x23, 0x8F, 0x56, 0x02, 0x4F, 0x2B, 0x28, 0x04, - 0x04, 0x35, 0xD5, 0xD4, 0x8A, 0x7C, 0xF8, 0x18, 0x62, 0xFD, 0xDB, 0x25, - 0xC8, 0x3A, 0x1A, 0x42, 0x3C, 0x10, 0x75, 0x60, 0x9D, 0x11, 0x5D, 0xE3, - 0x0D, 0x3C, 0xD2, 0xA6, 0x01, 0xC1, 0xCE, 0x7B, 0x3A, 0x44, 0xE6, 0x00, - 0xF9, 0x21, 0xCB, 0x12, 0x91, 0x8D, 0xBA, 0x16, 0x41, 0xAC, 0xAE, 0x20, - 0x5A, 0x04, 0xDF, 0xD4, 0xA5, 0x27, 0x1C, 0xB8, 0x56, 0x21, 0x23, 0x2D, - 0x39, 0x3B, 0x20, 0x72, 0xA1, 0xA8, 0x82, 0xEC, 0xAC, 0xB9, 0x40, 0x52, - 0xE7, 0x5C, 0x34, 0x4A, 0x84, 0x23, 0xEC, 0xE1, 0xE3, 0xC9, 0x84, 0x0A, - 0x68, 0x8A, 0x6A, 0x34, 0xF1, 0x28, 0x9A, 0x4C, 0x9C, 0xDF, 0xC5, 0xF1, - 0x5D, 0x92, 0x04, 0xEB, 0xE0, 0x25, 0xC4, 0x23, 0x92, 0x55, 0x61, 0x32, - 0xEA, 0x65, 0x9A, 0xF3, 0xA4, 0x83, 0x64, 0x86, 0xC0, 0xCC, 0xA9, 0x25, - 0x1E, 0x3E, 0x9E, 0xCC, 0x65, 0x8C, 0xDA, 0x29, 0xAC, 0xDF, 0xEC, 0x4F, - 0xA7, 0x38, 0xFB, 0xF9, 0xB9, 0xAA, 0x93, 0x4D, 0xB4, 0xFD, 0xFD, 0x4C, - 0xF3, 0x2F, 0xED, 0x4B, 0x67, 0xCE, 0x98, 0xA4, 0x74, 0x4C, 0xEA, 0x53, - 0xF1, 0x9F, 0x43, 0x93, 0xD8, 0xB4, 0xA2, 0x30, 0xFD, 0xE2, 0x41, 0xA4, - 0x5D, 0xB4, 0xED, 0xF2, 0xB6, 0x6D, 0xDB, 0x10, 0x4F, 0x78, 0x4E, 0x21, - 0x23, 0x4C, 0xA5, 0x10, 0xC0, 0xD2, 0x13, 0x22, 0x6F, 0x3A, 0xE9, 0x72, - 0xF9, 0xE7, 0x7A, 0x58, 0xDE, 0xCC, 0xAC, 0x72, 0x04, 0x91, 0x02, 0x6B, - 0xCC, 0xDF, 0x5F, 0x79, 0x54, 0xD8, 0x9A, 0x62, 0x28, 0xD4, 0x0F, 0x3A, - 0x09, 0x4D, 0xD9, 0x0C, 0xD2, 0xA2, 0xA2, 0x6A, 0xF3, 0x6F, 0x7B, 0x7D, - 0x97, 0xB6, 0xD5, 0xC3, 0xBB, 0x95, 0xCB, 0x63, 0xA1, 0x37, 0x7E, 0x31, - 0x8B, 0x3F, 0x74, 0x7D, 0x35, 0x8B, 0x5E, 0x15, 0x4C, 0xD6, 0x88, 0xBC, - 0x9D, 0x45, 0x6E, 0x41, 0x70, 0x44, 0xDE, 0xB9, 0x5C, 0x3C, 0x1D, 0x5B, - 0x21, 0xFD, 0x16, 0x0C, 0x4E, 0x4C, 0x81, 0xFE, 0x66, 0x3B, 0x07, 0x6A, - 0x9B, 0xD4, 0xA9, 0x31, 0xC9, 0xBB, 0x25, 0x8C, 0xA2, 0xA8, 0xB9, 0x5E, - 0x20, 0xF2, 0x94, 0x44, 0xB3, 0x45, 0x63, 0xCB, 0x5D, 0x09, 0xB6, 0x7B, - 0xD5, 0x58, 0xF7, 0x55, 0xA4, 0x96, 0x7F, 0x01, 0x75, 0x37, 0x1B, 0x8B, -}; -const uint8_t g_enGB_Locale[] = { - 0x78, 0x9C, 0x95, 0x56, 0xD1, 0x6E, 0xD3, 0x30, 0x14, 0x7D, 0x47, 0xE2, - 0x1F, 0xA2, 0x88, 0x49, 0x20, 0x6D, 0x33, 0x3C, 0x6E, 0xEA, 0x2C, 0x75, - 0xEB, 0xD6, 0x32, 0xC8, 0xA8, 0x48, 0xC5, 0xC4, 0x5E, 0x90, 0x9B, 0x78, - 0x8D, 0x59, 0x62, 0x57, 0x4E, 0xCC, 0x94, 0xFC, 0x02, 0x9F, 0xC0, 0x23, - 0xCF, 0x08, 0xF1, 0x01, 0xBC, 0xF0, 0x2F, 0x48, 0xFB, 0x0C, 0x6E, 0x1A, - 0x27, 0x4B, 0x1C, 0xAF, 0x64, 0x79, 0x89, 0xEF, 0xB9, 0xE7, 0xDC, 0xDE, - 0x7B, 0x9C, 0xB8, 0x19, 0xC5, 0x22, 0x20, 0x31, 0x75, 0x38, 0x49, 0xE8, - 0x91, 0x4B, 0xF9, 0xA7, 0xE9, 0xB1, 0xEB, 0x84, 0x34, 0x0D, 0x8E, 0xDC, - 0xBB, 0xAF, 0xBF, 0xEE, 0x7E, 0xFE, 0x78, 0x0E, 0xB7, 0xBF, 0xDF, 0x7E, - 0xBF, 0x70, 0xF1, 0xA8, 0x24, 0xF2, 0x90, 0x48, 0x3F, 0x4F, 0x96, 0x22, - 0x4E, 0xB5, 0x66, 0x25, 0xE9, 0x4A, 0x48, 0x46, 0x38, 0x30, 0x12, 0xC1, - 0xB3, 0xE8, 0x02, 0xE0, 0x54, 0xAF, 0xF1, 0x39, 0xE1, 0x8A, 0xC8, 0x7C, - 0x84, 0xAA, 0xF0, 0xE9, 0x13, 0x8D, 0x9F, 0xD1, 0xA5, 0xB4, 0x26, 0x3C, - 0x22, 0x83, 0xA8, 0x87, 0x8E, 0xD7, 0x92, 0xC5, 0x16, 0x6E, 0x5F, 0x7F, - 0xAE, 0x38, 0xB5, 0x80, 0x71, 0x9F, 0x39, 0x56, 0x2B, 0x95, 0x66, 0x3D, - 0xD8, 0xA7, 0xEB, 0x8C, 0x26, 0x4B, 0x2A, 0x7B, 0x99, 0x77, 0x41, 0x26, - 0x6C, 0xF8, 0x85, 0xF8, 0x62, 0x17, 0x4C, 0x68, 0x60, 0x26, 0x50, 0xCB, - 0xA2, 0x9A, 0xB7, 0x89, 0x1C, 0xB2, 0x5C, 0xCA, 0x23, 0xF7, 0x95, 0xDB, - 0x72, 0xCE, 0xE6, 0x9A, 0xCD, 0x30, 0x9B, 0x5D, 0x43, 0xCD, 0xB2, 0x79, - 0x65, 0xB3, 0xCA, 0xE6, 0x93, 0xCD, 0x21, 0x9B, 0x3B, 0x36, 0x63, 0x1E, - 0xF6, 0x24, 0x24, 0xB9, 0x7E, 0x84, 0x60, 0x85, 0x7D, 0x05, 0x8F, 0x1C, - 0x74, 0x5E, 0xAE, 0xAB, 0x24, 0xF6, 0x44, 0x0F, 0x5A, 0x28, 0x9A, 0x9A, - 0xD8, 0x25, 0x0D, 0x79, 0x1F, 0x5D, 0x44, 0x4A, 0xF6, 0xC0, 0x33, 0xC9, - 0x4C, 0xC8, 0x27, 0x99, 0x92, 0x6D, 0x10, 0x35, 0x7D, 0xB5, 0x7A, 0x6C, - 0xED, 0x9A, 0x6E, 0xD6, 0xEC, 0xD4, 0x6C, 0xD3, 0x6C, 0xD1, 0x6C, 0xCE, - 0xEC, 0xCB, 0x6C, 0xCA, 0xDE, 0x4F, 0x42, 0x61, 0x02, 0x46, 0x93, 0xFA, - 0xDD, 0xD3, 0x21, 0x1E, 0x7B, 0xE0, 0x6E, 0x1D, 0xB4, 0x78, 0x78, 0x6E, - 0x24, 0x50, 0xB7, 0x02, 0x20, 0x54, 0x12, 0x5D, 0x0D, 0x56, 0xF8, 0xF8, - 0x64, 0x84, 0xCA, 0x7B, 0x95, 0xC0, 0xE3, 0x49, 0x13, 0xA2, 0x86, 0x58, - 0x06, 0xC6, 0x19, 0x51, 0x35, 0x9E, 0xD1, 0x39, 0xC9, 0x32, 0x2A, 0xF9, - 0x66, 0x4F, 0x9B, 0x48, 0x1F, 0x20, 0xD7, 0x2A, 0x8E, 0x5D, 0x7C, 0x0A, - 0xD7, 0xAE, 0x33, 0x71, 0x3C, 0xB8, 0x9C, 0x8F, 0x70, 0x95, 0x03, 0x36, - 0x54, 0xA3, 0x8E, 0x56, 0xC6, 0x82, 0xAF, 0x5C, 0xFC, 0x38, 0x4D, 0x42, - 0x43, 0x2D, 0x19, 0xAA, 0x48, 0x23, 0x21, 0x33, 0xD0, 0x4C, 0x90, 0xE7, - 0x21, 0xAB, 0x06, 0x75, 0x46, 0x04, 0x20, 0x63, 0x49, 0x6B, 0xE4, 0x56, - 0xD4, 0x19, 0x79, 0x36, 0x3B, 0xF4, 0xBC, 0x43, 0xDF, 0x77, 0xAE, 0x46, - 0xA8, 0xC5, 0x31, 0x0A, 0x74, 0x66, 0x7D, 0x94, 0x64, 0x33, 0x6A, 0xAD, - 0x18, 0xC0, 0xD7, 0x83, 0x6E, 0x14, 0x3D, 0x3A, 0xEA, 0xCC, 0xA4, 0x8D, - 0x5A, 0x00, 0x56, 0xEF, 0xF4, 0x34, 0xF7, 0xC2, 0x9B, 0x59, 0x92, 0xFA, - 0xA7, 0x93, 0xB3, 0xDB, 0x4B, 0x12, 0xBD, 0x29, 0xAE, 0x2A, 0x63, 0xDA, - 0x24, 0xD0, 0x71, 0x55, 0x1E, 0x89, 0xF7, 0xEE, 0x74, 0x62, 0xDD, 0x09, - 0x60, 0xF0, 0x38, 0x06, 0x2E, 0x2E, 0x76, 0x8B, 0xE2, 0x60, 0xBF, 0x28, - 0x8A, 0x11, 0xEA, 0xF0, 0x7A, 0x85, 0xB4, 0x30, 0x50, 0x52, 0x52, 0x1E, - 0xE4, 0x2E, 0x7E, 0x56, 0x49, 0x0F, 0x0E, 0x06, 0x2A, 0xD7, 0x54, 0x06, - 0x94, 0x67, 0xFA, 0x27, 0x77, 0x2C, 0x2A, 0x64, 0x74, 0xDE, 0x14, 0xAA, - 0x87, 0xEB, 0x84, 0xBA, 0x6C, 0x48, 0x03, 0x96, 0x10, 0xD8, 0xEC, 0xFD, - 0x5A, 0x5F, 0xA5, 0x4D, 0x75, 0xF3, 0x67, 0x2A, 0xD4, 0x9A, 0x95, 0x3B, - 0xBD, 0x3B, 0x88, 0xDF, 0x74, 0xBD, 0x33, 0x88, 0x9E, 0x30, 0xAE, 0x52, - 0x17, 0xEF, 0x0D, 0x22, 0x17, 0x54, 0x0A, 0x17, 0xBF, 0xEC, 0x73, 0x51, - 0x77, 0x6C, 0x40, 0x6A, 0xDB, 0x1B, 0x27, 0xBA, 0x40, 0xFD, 0x7C, 0x6D, - 0x02, 0x17, 0xFF, 0xF9, 0x0E, 0xE7, 0x44, 0x87, 0xD0, 0xAF, 0xA1, 0x25, - 0x2C, 0x15, 0xE5, 0xC2, 0xC5, 0xD3, 0xE3, 0xF9, 0x60, 0x51, 0xDB, 0xF3, - 0xBE, 0x04, 0x99, 0xCD, 0x96, 0xEF, 0x42, 0xBE, 0xA6, 0xD7, 0x24, 0x28, - 0x0F, 0xBB, 0x7A, 0xA9, 0x6B, 0x79, 0x39, 0x7C, 0xDA, 0x84, 0xCE, 0x1C, - 0xAC, 0x40, 0x6D, 0x66, 0x9D, 0x66, 0x9C, 0x09, 0xFE, 0x60, 0xFA, 0x44, - 0x28, 0xC9, 0xA8, 0x74, 0xFC, 0x2C, 0xB4, 0xE6, 0xC7, 0x21, 0x7C, 0x50, - 0x38, 0x73, 0xF6, 0x1F, 0xC2, 0x0C, 0x3E, 0x96, 0xE8, 0xED, 0x16, 0xC2, - 0x58, 0x92, 0x25, 0xBC, 0x2E, 0x0F, 0x13, 0x16, 0x11, 0x61, 0xD6, 0xF4, - 0x1B, 0x51, 0xA8, 0x1B, 0xE2, 0x4C, 0x45, 0x16, 0xB1, 0xA0, 0x9C, 0x63, - 0xEF, 0xC3, 0x6B, 0xC7, 0xDB, 0x46, 0x85, 0x91, 0x83, 0x48, 0xD4, 0xD4, - 0xF7, 0x5B, 0x7E, 0x14, 0x98, 0xAB, 0x72, 0x32, 0xE7, 0xED, 0x16, 0x92, - 0x2F, 0x06, 0x90, 0xBC, 0x5C, 0xF1, 0xD5, 0x67, 0xB1, 0xE1, 0xE9, 0xE6, - 0xD0, 0xFD, 0x9E, 0x95, 0x51, 0xF5, 0x19, 0x0B, 0xCB, 0x7F, 0x8E, 0x69, - 0xAC, 0xD0}; -const uint8_t g_zhCN_Locale[] = { - 0x78, 0x9C, 0xED, 0x56, 0x41, 0x4F, 0xD4, 0x40, 0x14, 0xBE, 0x9B, 0xF8, - 0x1F, 0x9A, 0x46, 0x52, 0x4D, 0x58, 0x46, 0x8F, 0x90, 0xD2, 0x64, 0x03, - 0x08, 0x06, 0xBB, 0x21, 0x96, 0x68, 0xE0, 0x62, 0xBA, 0xED, 0xB0, 0x2D, - 0x6C, 0x3B, 0x64, 0xB6, 0x0D, 0x6E, 0x4F, 0x18, 0x82, 0x82, 0xC2, 0x45, - 0x89, 0x9A, 0x80, 0xE1, 0x64, 0x3C, 0x28, 0x9E, 0x8C, 0x01, 0x22, 0xF1, - 0xCF, 0xB0, 0xCB, 0x91, 0xBF, 0xE0, 0x9B, 0xED, 0xB4, 0xB4, 0xDD, 0xD9, - 0xB5, 0x3F, 0xC0, 0x3D, 0xCD, 0xFB, 0xDE, 0xF7, 0x7D, 0xF3, 0xDE, 0xEB, - 0x74, 0xB6, 0x6A, 0x93, 0x58, 0x66, 0x13, 0x4B, 0xBE, 0xE9, 0xE1, 0x49, - 0x39, 0x72, 0x9E, 0x4F, 0xD5, 0x64, 0xC9, 0xC6, 0x2D, 0x6B, 0x52, 0xBE, - 0x3C, 0x3D, 0xE9, 0x7E, 0x78, 0x7D, 0xF7, 0xEA, 0xC7, 0xE6, 0xE5, 0xC5, - 0xFB, 0xEB, 0xDF, 0x7B, 0x10, 0x77, 0x0E, 0x2F, 0xEE, 0xC9, 0x9A, 0xCA, - 0x14, 0xBE, 0x6D, 0x52, 0xA3, 0xED, 0xD5, 0x49, 0xB3, 0xC5, 0xC5, 0x0D, - 0x8A, 0x1B, 0x84, 0xBA, 0xA6, 0x0F, 0x0C, 0x8F, 0xF8, 0x81, 0x53, 0x03, - 0xB8, 0xC5, 0xD7, 0xDA, 0xE5, 0xE9, 0x66, 0xF7, 0x68, 0x47, 0x45, 0x71, - 0x74, 0xFB, 0x56, 0x02, 0x9F, 0xEF, 0x09, 0xE1, 0xD3, 0x5D, 0x11, 0xDC, - 0x39, 0x3C, 0x14, 0x9B, 0x1C, 0x08, 0xD9, 0xDB, 0x27, 0x62, 0xEF, 0x2D, - 0x31, 0xFB, 0x9B, 0x90, 0x7D, 0xF6, 0x59, 0xC8, 0xDE, 0x7F, 0x39, 0x00, - 0x1E, 0xD0, 0x28, 0xCB, 0x14, 0x7B, 0x45, 0x99, 0x31, 0x25, 0xC4, 0x5E, - 0x24, 0x99, 0xF5, 0x3A, 0x9D, 0x94, 0x1F, 0xC8, 0xFF, 0xA7, 0x57, 0x7A, - 0x7A, 0xB6, 0xD9, 0xE6, 0x07, 0x0E, 0x56, 0x5A, 0xF7, 0xD3, 0x71, 0xF7, - 0xE8, 0xB8, 0xFB, 0xF1, 0x8B, 0x8A, 0x58, 0x18, 0xE7, 0x39, 0x0A, 0x7B, - 0x88, 0xD0, 0xF3, 0x3D, 0x21, 0x77, 0x57, 0x80, 0xC2, 0x24, 0x85, 0x0E, - 0x07, 0x22, 0xEE, 0xF6, 0x49, 0x8A, 0xA2, 0xB4, 0xC8, 0x4C, 0xC1, 0x99, - 0x87, 0xDD, 0x53, 0x15, 0x6A, 0x2E, 0x56, 0x5B, 0xAC, 0xB3, 0x58, 0x61, - 0xB1, 0xB6, 0x62, 0x55, 0x03, 0xEB, 0xF1, 0x30, 0x75, 0x6D, 0x17, 0x7B, - 0xC9, 0x6B, 0xCB, 0x43, 0xD8, 0xE0, 0x4D, 0x67, 0x9F, 0x0D, 0x3E, 0x01, - 0x32, 0x5C, 0x48, 0xBE, 0xED, 0x4B, 0xA2, 0xBC, 0x13, 0x20, 0x98, 0x9A, - 0xDC, 0x15, 0x56, 0x50, 0xC1, 0xF7, 0xCE, 0xF6, 0x56, 0x67, 0x77, 0x5F, - 0x45, 0x2C, 0x8C, 0xF3, 0x1C, 0x4D, 0x21, 0x94, 0x6A, 0x58, 0x50, 0xB8, - 0x71, 0xE2, 0x5E, 0x02, 0xBC, 0x60, 0x06, 0x01, 0xA6, 0x7E, 0xEF, 0x99, - 0xA7, 0x11, 0xBF, 0x8E, 0x56, 0xC2, 0x66, 0x53, 0xD6, 0x96, 0xE0, 0xA7, - 0x74, 0xCE, 0x7E, 0x2A, 0xBA, 0x02, 0xA7, 0x47, 0x99, 0x56, 0x60, 0xBC, - 0xCA, 0x0C, 0xFC, 0x58, 0xEF, 0xA9, 0xA4, 0xE0, 0xC7, 0x1D, 0x9A, 0xC4, - 0x6F, 0x0C, 0x70, 0x28, 0xA1, 0xF6, 0xB0, 0x1D, 0x8B, 0x2B, 0x7A, 0x65, - 0xBA, 0x04, 0xBF, 0xE5, 0x10, 0x1A, 0x30, 0x85, 0x90, 0x8F, 0x72, 0xED, - 0x02, 0x10, 0xB8, 0x5E, 0xA6, 0xFD, 0x4C, 0x94, 0x6B, 0xBF, 0xEA, 0x38, - 0x50, 0xEF, 0x2F, 0x45, 0xD7, 0x95, 0xCE, 0xCE, 0x2B, 0xC5, 0x30, 0x94, - 0xAB, 0xAF, 0xEF, 0x14, 0x69, 0x59, 0x45, 0x19, 0x45, 0xC1, 0x2E, 0xD7, - 0xBD, 0xD8, 0xA0, 0x84, 0xBC, 0xD7, 0x3E, 0xA8, 0x27, 0x74, 0x7D, 0xC2, - 0x30, 0x4A, 0x08, 0x78, 0xFF, 0x55, 0xA6, 0xE8, 0xA3, 0xA3, 0x5C, 0xBB, - 0x7C, 0x7E, 0x8B, 0x80, 0x25, 0x07, 0x62, 0xD6, 0xF4, 0x57, 0xD7, 0xE6, - 0xBC, 0x96, 0x31, 0x33, 0xFD, 0x70, 0xE3, 0xD9, 0x0B, 0x67, 0x3E, 0x5A, - 0x8E, 0x67, 0x96, 0x25, 0x81, 0xCE, 0x0F, 0xBD, 0x3A, 0xA6, 0x37, 0x83, - 0xCB, 0xC5, 0xBC, 0x12, 0xC0, 0xE0, 0x00, 0x5B, 0xB2, 0x16, 0x8D, 0x46, - 0xD1, 0xF8, 0x58, 0x14, 0x45, 0x2A, 0xCA, 0xF1, 0xFA, 0x8C, 0xB8, 0xD0, - 0x0A, 0x29, 0xC5, 0xBE, 0xD5, 0x96, 0xB5, 0x3B, 0xB1, 0x74, 0x7C, 0xBC, - 0xA4, 0x72, 0x1D, 0x53, 0x0B, 0xFB, 0x01, 0xDF, 0x72, 0x44, 0xA0, 0x42, - 0x85, 0xCA, 0x53, 0xA3, 0xA4, 0xB9, 0x5C, 0xC8, 0x6D, 0x6D, 0x6C, 0xB9, - 0x9E, 0x09, 0xE7, 0x60, 0x2C, 0xD1, 0xC7, 0xE9, 0xA2, 0x3A, 0xFD, 0x07, - 0x27, 0xE1, 0xBA, 0xCB, 0x1E, 0xFB, 0x68, 0x29, 0x7E, 0x5A, 0xF5, 0x48, - 0x29, 0xBA, 0xE7, 0xFA, 0x61, 0x4B, 0xD6, 0x2A, 0xA5, 0xC8, 0x11, 0xA6, - 0x44, 0xD6, 0xEE, 0xF7, 0x73, 0x51, 0xBE, 0x6D, 0x40, 0x92, 0xB1, 0xA7, - 0x93, 0xC8, 0x03, 0xC9, 0xF9, 0xEA, 0x05, 0xB2, 0x76, 0xFD, 0x07, 0xEE, - 0xD7, 0x3C, 0xA3, 0xDF, 0x84, 0x6B, 0xDC, 0x16, 0x61, 0x0B, 0x59, 0x9B, - 0xAA, 0x2D, 0x95, 0x16, 0x65, 0x87, 0xDE, 0x2F, 0x41, 0xC5, 0x6A, 0xD9, - 0xCB, 0xD0, 0x5E, 0xC7, 0x2B, 0xA6, 0xC5, 0xEE, 0xC7, 0x64, 0xC9, 0xBD, - 0xAA, 0x36, 0xA9, 0x63, 0xC9, 0x80, 0x57, 0x51, 0x32, 0x02, 0x5B, 0x7A, - 0x2C, 0xA3, 0x2C, 0x9F, 0x93, 0xF4, 0x36, 0x7C, 0x75, 0xD9, 0xD2, 0x02, - 0x0C, 0x4C, 0x98, 0x76, 0x7D, 0x97, 0xF8, 0x03, 0xD3, 0x53, 0x24, 0xA4, - 0x2E, 0xA6, 0xCC, 0x5F, 0x98, 0x8F, 0x4B, 0x58, 0x70, 0xFF, 0x41, 0x98, - 0xC3, 0x75, 0x8A, 0x37, 0x86, 0x10, 0xAA, 0xD4, 0xAC, 0xC3, 0x4B, 0x35, - 0x98, 0xB0, 0xE8, 0x98, 0xAE, 0x30, 0x3D, 0x4F, 0xA2, 0x70, 0xCD, 0x94, - 0x66, 0x49, 0xE0, 0xB8, 0x16, 0xEB, 0xA3, 0xF2, 0xF4, 0x91, 0xA4, 0x0F, - 0xA3, 0x42, 0xCB, 0x96, 0x43, 0x12, 0xEA, 0x93, 0x21, 0x9B, 0x02, 0x73, - 0xD8, 0x68, 0x39, 0xA9, 0x1D, 0xFA, 0x8D, 0x55, 0xD2, 0xE3, 0xF1, 0x7D, - 0xD1, 0xCD, 0x33, 0x63, 0x51, 0xFC, 0x15, 0x0D, 0xCB, 0xBF, 0xC0, 0xE4, - 0x3D, 0x40}; -const uint8_t g_zhTW_Locale[] = { - 0x78, 0x9C, 0xED, 0x57, 0xCD, 0x4F, 0xD4, 0x40, 0x14, 0x3F, 0x63, 0xE2, - 0xFF, 0x30, 0x69, 0x20, 0xD5, 0x04, 0xA8, 0x1E, 0x21, 0xA5, 0xC9, 0xC6, - 0x45, 0x30, 0x58, 0x42, 0xEC, 0x46, 0x22, 0x17, 0x33, 0xDB, 0x0E, 0xDB, - 0xC2, 0xB6, 0x43, 0x66, 0xDB, 0xC0, 0xF6, 0x24, 0x12, 0x14, 0x14, 0x62, - 0xA2, 0xC4, 0x8F, 0x80, 0xE1, 0x64, 0x3C, 0x28, 0x89, 0x07, 0x0F, 0x2C, - 0x51, 0xFF, 0x1A, 0x76, 0x39, 0xFA, 0x2F, 0x38, 0xD3, 0x2F, 0xFA, 0xB1, - 0xB3, 0xD4, 0xC4, 0xA3, 0x7B, 0x9A, 0xF7, 0xDE, 0xEF, 0xF7, 0xE6, 0xBD, - 0xDF, 0xBC, 0x7D, 0xD9, 0x95, 0x9B, 0x58, 0x87, 0x4D, 0x04, 0x1C, 0x68, - 0xA3, 0x29, 0xC1, 0x37, 0x1F, 0xD7, 0x16, 0x05, 0x60, 0xA0, 0x96, 0x3E, - 0x25, 0x9C, 0x9F, 0x9E, 0xF4, 0xDE, 0x3E, 0xBF, 0x71, 0xD1, 0xD9, 0x3C, - 0xFF, 0xF9, 0xE6, 0xF7, 0x8F, 0xBD, 0xEE, 0xAB, 0x6F, 0xBD, 0xCE, 0xAF, - 0x9B, 0x82, 0x72, 0xFD, 0x1A, 0x00, 0x32, 0x63, 0x39, 0x06, 0x24, 0x5A, - 0xDB, 0xAE, 0xE3, 0x66, 0x2B, 0x4A, 0xD0, 0x20, 0xA8, 0x81, 0x89, 0x05, - 0x1D, 0x86, 0x1A, 0x02, 0xB2, 0x8D, 0x1D, 0xD7, 0x9C, 0xA7, 0xA1, 0x16, - 0xB3, 0x87, 0x42, 0x5B, 0x39, 0x3F, 0x7D, 0xD2, 0x3B, 0xDA, 0x91, 0xA5, - 0xD0, 0x4A, 0x07, 0xCE, 0xF6, 0x38, 0x81, 0xD3, 0xDD, 0xFE, 0x81, 0xEE, - 0xE1, 0x21, 0x2F, 0xD5, 0x01, 0x87, 0xB1, 0x7D, 0xC2, 0xBB, 0x63, 0x8B, - 0xC7, 0xF8, 0xC2, 0x61, 0x74, 0x3E, 0x72, 0x18, 0xFB, 0x9B, 0xDC, 0x00, - 0xB7, 0x79, 0x16, 0xCB, 0xF7, 0x0F, 0xA2, 0x73, 0x22, 0x61, 0x5A, 0x52, - 0x00, 0xEB, 0x75, 0x32, 0x25, 0xDC, 0x16, 0xFE, 0x6B, 0xFB, 0x8F, 0xB4, - 0x35, 0x60, 0x3B, 0x35, 0xAC, 0xD4, 0x52, 0x7A, 0xEF, 0x8F, 0x7B, 0x47, - 0xC7, 0xBD, 0x77, 0x9F, 0x64, 0x89, 0x99, 0x39, 0x3F, 0xBD, 0xAF, 0xBF, - 0xFF, 0x6C, 0x8F, 0x83, 0xDF, 0xED, 0xEB, 0xA7, 0x4A, 0x73, 0xF2, 0x1C, - 0xF4, 0xC7, 0x6F, 0x9F, 0x24, 0x7E, 0x10, 0x9C, 0xFA, 0x34, 0x91, 0x1B, - 0x8F, 0x80, 0x5D, 0xE8, 0xA3, 0xD8, 0x41, 0xB1, 0xF6, 0x62, 0xD5, 0xC5, - 0x7A, 0x8B, 0x95, 0x0E, 0xAC, 0xD1, 0x46, 0xC4, 0x32, 0x2C, 0x64, 0xA7, - 0x57, 0x43, 0xE4, 0xA2, 0xD7, 0xBD, 0xE8, 0xEE, 0xB3, 0x87, 0x8A, 0x1D, - 0xF9, 0xF0, 0xCB, 0x42, 0x18, 0x5C, 0x9A, 0xA9, 0x4B, 0x10, 0x81, 0xA9, - 0xFC, 0xD4, 0xA2, 0x35, 0x7D, 0xED, 0x6E, 0x6F, 0x75, 0x77, 0xF7, 0x65, - 0x89, 0x99, 0x39, 0x7F, 0xE2, 0x04, 0xC1, 0x29, 0xE6, 0xD2, 0x65, 0x27, - 0xE5, 0xB6, 0x5D, 0xE8, 0x35, 0xA0, 0x8B, 0x16, 0xA0, 0xEB, 0x22, 0xE2, - 0x24, 0xD2, 0x27, 0x9E, 0x68, 0x21, 0x2E, 0x7B, 0xCD, 0xA6, 0xA0, 0x3C, - 0xA2, 0x1F, 0xB1, 0xDB, 0xF9, 0x2E, 0xAA, 0x22, 0x9D, 0x41, 0xB1, 0x2A, - 0xD2, 0x87, 0x10, 0xA7, 0xE9, 0x87, 0xE9, 0x92, 0x50, 0x78, 0x39, 0x9A, - 0xD8, 0x69, 0x70, 0x72, 0x94, 0xE2, 0xDB, 0xC8, 0x08, 0xE9, 0x92, 0x2A, - 0x55, 0x4B, 0x31, 0x5A, 0x26, 0x26, 0x2E, 0x9F, 0x03, 0x40, 0xC6, 0x13, - 0xC9, 0xE1, 0x5A, 0x76, 0x4E, 0x8E, 0x94, 0x27, 0x23, 0x47, 0xC5, 0x34, - 0xC5, 0xDE, 0x87, 0xA7, 0xA2, 0xAA, 0x8A, 0xDD, 0x9D, 0x67, 0xA2, 0xA6, - 0x89, 0x17, 0x9F, 0x5F, 0x8B, 0x60, 0x49, 0x96, 0x52, 0x0C, 0x5E, 0x8A, - 0x50, 0x8D, 0xFE, 0x29, 0x4A, 0x25, 0x08, 0xE4, 0xA8, 0x00, 0x73, 0x52, - 0x55, 0x27, 0x35, 0xAD, 0x14, 0x25, 0xD2, 0x23, 0x24, 0xE5, 0x19, 0x4C, - 0x8D, 0x5C, 0xEF, 0xD1, 0x70, 0xD4, 0xA8, 0x37, 0x9E, 0x98, 0x19, 0xE8, - 0xAC, 0xAC, 0xCE, 0xDA, 0x2D, 0x6D, 0xBA, 0x7A, 0x77, 0x7D, 0x71, 0xC3, - 0x9C, 0xF3, 0x97, 0x42, 0x11, 0xD3, 0xA0, 0x80, 0xE9, 0x78, 0x76, 0x1D, - 0x91, 0xAC, 0x92, 0x19, 0x5F, 0x54, 0x14, 0xF5, 0xD1, 0x99, 0xD7, 0x05, - 0xC5, 0x1F, 0xF5, 0xFD, 0x89, 0x71, 0xDF, 0xF7, 0x65, 0x29, 0x83, 0xE3, - 0x53, 0x75, 0x8F, 0x10, 0xE4, 0xE8, 0x6D, 0x41, 0x19, 0x0E, 0xC9, 0x13, - 0x13, 0xA5, 0xB9, 0x6B, 0x88, 0xE8, 0xC8, 0x71, 0xA3, 0x6B, 0x47, 0x8A, - 0x3C, 0xA6, 0x47, 0xA1, 0x87, 0xA4, 0xAF, 0xCB, 0x56, 0x87, 0xB2, 0xAE, - 0x28, 0xBD, 0x81, 0x74, 0xCB, 0x86, 0x74, 0x48, 0xC6, 0xE3, 0x2C, 0x61, - 0x98, 0x4B, 0x68, 0x10, 0xEC, 0xAD, 0x59, 0x6C, 0x26, 0x46, 0x4B, 0x32, - 0x92, 0x0E, 0x46, 0x4A, 0x12, 0x6C, 0xCB, 0xF1, 0x5A, 0x82, 0x32, 0x56, - 0x12, 0xEE, 0x23, 0x82, 0x05, 0xE5, 0x56, 0x01, 0x7D, 0x29, 0x4C, 0xE6, - 0xBD, 0xE3, 0xC7, 0xC8, 0x28, 0x93, 0x75, 0xC6, 0x63, 0x18, 0x18, 0x82, - 0x32, 0x5F, 0x1B, 0xA6, 0x2B, 0x29, 0x83, 0x18, 0xC0, 0xB2, 0x5A, 0x98, - 0x1D, 0x04, 0xA5, 0xB6, 0x58, 0xFD, 0x0B, 0x5A, 0xFA, 0x21, 0x0A, 0xA4, - 0x60, 0x27, 0x16, 0xEA, 0x66, 0x4B, 0xA0, 0xBD, 0x86, 0x96, 0xA1, 0x1E, - 0xAF, 0xE0, 0xD8, 0x8C, 0x72, 0x56, 0x0C, 0x5C, 0x47, 0x40, 0xA5, 0xAF, - 0x05, 0x34, 0xD7, 0x00, 0xF7, 0x05, 0xA9, 0x2F, 0x4C, 0x6D, 0xD3, 0x9F, - 0x90, 0x06, 0x58, 0xA0, 0x32, 0x72, 0x00, 0x96, 0x63, 0x61, 0x67, 0x00, - 0xE0, 0x0E, 0xF6, 0x88, 0x85, 0x08, 0xBB, 0x85, 0x83, 0x08, 0x4B, 0x59, - 0xB0, 0xAE, 0x84, 0xCC, 0xA2, 0x3A, 0x41, 0xEB, 0x03, 0x21, 0x15, 0x02, - 0xEB, 0xF4, 0x8B, 0x38, 0x08, 0x52, 0x33, 0xA1, 0xC5, 0x01, 0xCC, 0x61, - 0xDF, 0x5B, 0x85, 0x60, 0x06, 0xBB, 0xA6, 0xA5, 0xB3, 0x9E, 0xC6, 0x1E, - 0xDE, 0x03, 0xEA, 0x60, 0x30, 0x15, 0x40, 0x37, 0x71, 0x0C, 0x7E, 0x30, - 0xF0, 0x6A, 0x0D, 0x5F, 0x21, 0x77, 0xF4, 0x2A, 0x6D, 0xCF, 0x69, 0xAC, - 0xE0, 0x00, 0x19, 0xDE, 0x1E, 0x2C, 0xB6, 0xD4, 0x7B, 0xCA, 0x52, 0xF8, - 0x67, 0x41, 0xF9, 0x03, 0x11, 0xC2, 0x4A, 0xC9}; -const uint8_t g_zhHK_Locale[] = { - 0x78, 0x9C, 0xA5, 0x57, 0x4D, 0x4F, 0x13, 0x41, 0x18, 0x3E, 0x63, 0xE2, - 0x7F, 0x98, 0x6C, 0x20, 0x0B, 0x09, 0x50, 0x8A, 0x9F, 0x25, 0xCB, 0x26, - 0x44, 0x90, 0x9A, 0x5A, 0x43, 0x2C, 0xD1, 0xC8, 0xC5, 0x6C, 0x77, 0x87, - 0xEE, 0x42, 0x77, 0x87, 0x4C, 0xB7, 0xC1, 0x6E, 0x3C, 0x88, 0x04, 0xA5, - 0x5A, 0x2E, 0x4A, 0x54, 0x02, 0x86, 0x78, 0x50, 0x0F, 0x48, 0xBC, 0x78, - 0x68, 0x89, 0xC6, 0x3F, 0x43, 0x8B, 0x9E, 0xFC, 0x0B, 0xCE, 0xEC, 0x17, - 0xFB, 0x35, 0x6D, 0x8D, 0x3D, 0xCD, 0xFB, 0xBC, 0xCF, 0xF3, 0xCE, 0xFB, - 0x3E, 0x33, 0x3B, 0x01, 0xA1, 0x8C, 0x64, 0xA9, 0x0C, 0x81, 0x21, 0xE9, - 0x70, 0x9A, 0xB3, 0xD4, 0x87, 0xD9, 0x1C, 0x07, 0x14, 0x58, 0x91, 0xA7, - 0xB9, 0xD3, 0xE6, 0x71, 0xE7, 0xCD, 0xF3, 0xE1, 0xB3, 0xD6, 0xC6, 0xE9, - 0x8F, 0xD7, 0x7F, 0xBE, 0x37, 0x7E, 0x7F, 0xDA, 0xEB, 0x34, 0xBF, 0x9E, - 0xD5, 0x5B, 0xED, 0xED, 0xA3, 0x5F, 0x1F, 0x1A, 0x9D, 0xDD, 0x9F, 0xED, - 0xC6, 0xC9, 0x08, 0x27, 0x5E, 0xBC, 0x00, 0x80, 0x40, 0x8B, 0x18, 0x8A, - 0x84, 0x0B, 0x35, 0xBD, 0x88, 0xCA, 0x15, 0xB7, 0x5E, 0x09, 0xC3, 0x12, - 0xC2, 0x9A, 0x64, 0x50, 0xD6, 0x00, 0x10, 0x74, 0x64, 0x98, 0xEA, 0x1D, - 0x92, 0xAA, 0xD0, 0x78, 0xC0, 0x89, 0xC5, 0xD3, 0xE6, 0x93, 0xCE, 0xC1, - 0xB6, 0x90, 0x72, 0xA2, 0x60, 0xE2, 0xA4, 0xC1, 0x48, 0x34, 0xEB, 0xC9, - 0x89, 0xF6, 0xFE, 0x3E, 0xAB, 0xD4, 0x2E, 0x43, 0xB1, 0x75, 0xCC, 0xDA, - 0x63, 0x93, 0xA5, 0x38, 0x62, 0x28, 0x5A, 0xEF, 0x19, 0x8A, 0x9D, 0x0D, - 0x66, 0x82, 0x39, 0x3C, 0xCD, 0x45, 0xE7, 0x07, 0xEE, 0xDA, 0xB7, 0x30, - 0x68, 0x29, 0x90, 0x8A, 0x45, 0x3C, 0xCD, 0xA5, 0xB9, 0x60, 0x95, 0x74, - 0x72, 0xF1, 0xC9, 0x64, 0xF8, 0x52, 0x32, 0x7C, 0x39, 0x19, 0xBE, 0x92, - 0x0C, 0x5F, 0x4D, 0x86, 0xAF, 0x25, 0xC3, 0xD7, 0x93, 0xE1, 0x4C, 0x32, - 0x9C, 0x9E, 0x60, 0xE0, 0x8C, 0x39, 0xD3, 0x93, 0x3D, 0x0D, 0x54, 0xA4, - 0x5A, 0xE0, 0x46, 0x92, 0x48, 0xEC, 0xBC, 0x3B, 0xEC, 0x1C, 0x1C, 0x76, - 0xDE, 0x7E, 0x14, 0x52, 0x34, 0x8C, 0xE0, 0xE4, 0xC0, 0x92, 0xF1, 0x93, - 0x06, 0x83, 0x5F, 0x4F, 0xC4, 0xC9, 0x55, 0x65, 0xD4, 0xD9, 0x4D, 0xE6, - 0x6F, 0x1D, 0xFB, 0x38, 0xB0, 0x57, 0x09, 0x43, 0x44, 0xEE, 0x80, 0xAD, - 0x8E, 0xCD, 0x11, 0x9F, 0x20, 0xDE, 0x7B, 0xBC, 0xEB, 0x78, 0xBF, 0xF1, - 0x4E, 0xBB, 0xF6, 0xA8, 0x43, 0xAC, 0x29, 0x1A, 0xD4, 0x83, 0xDF, 0xBF, - 0x0B, 0x91, 0xED, 0x5E, 0xB4, 0x77, 0xE8, 0x41, 0x79, 0x40, 0x34, 0xFD, - 0x32, 0x96, 0x06, 0xE7, 0x61, 0x60, 0x13, 0x88, 0xA5, 0x40, 0x7D, 0x12, - 0x91, 0x9E, 0xBE, 0xB4, 0xB7, 0x36, 0xDB, 0xF5, 0x1D, 0x21, 0x45, 0xC3, - 0x08, 0xEE, 0x83, 0xC0, 0x5E, 0x79, 0x5A, 0xF2, 0xA2, 0xA5, 0x22, 0x4F, - 0x9A, 0x83, 0x2A, 0x92, 0x09, 0x17, 0x24, 0xD3, 0x84, 0xD8, 0xF0, 0xAD, - 0xF7, 0x11, 0xF7, 0xD5, 0x5B, 0xAE, 0x96, 0xCB, 0x9C, 0xF8, 0x80, 0xFC, - 0xF8, 0x76, 0xEB, 0x1B, 0x9F, 0xE7, 0xC9, 0x1D, 0xE4, 0x67, 0x79, 0x72, - 0x10, 0x3C, 0x98, 0x23, 0x3F, 0x6A, 0x8C, 0xAF, 0x61, 0x15, 0x29, 0x23, - 0xA3, 0xC4, 0x28, 0xD2, 0x97, 0x5E, 0x87, 0xCA, 0xFF, 0xC8, 0x2B, 0x2A, - 0xC2, 0x26, 0x2D, 0xD0, 0x53, 0x0E, 0x40, 0x08, 0x71, 0x7D, 0x32, 0x35, - 0x3D, 0xE2, 0x53, 0x00, 0x09, 0xF9, 0x34, 0xA3, 0xAA, 0x7C, 0x67, 0xEF, - 0x29, 0x9F, 0xCF, 0xF3, 0xED, 0xED, 0x67, 0x7C, 0xA1, 0xC0, 0x9F, 0x7D, - 0x7E, 0xC5, 0x83, 0x25, 0x21, 0x15, 0x50, 0xB0, 0x4A, 0x38, 0x2E, 0x25, - 0x97, 0xE8, 0xAB, 0x80, 0x6D, 0x13, 0xD1, 0x4F, 0xE5, 0xF3, 0x53, 0x85, - 0x42, 0x5F, 0x12, 0xD7, 0x9A, 0x19, 0xAA, 0x89, 0x0A, 0xA8, 0x19, 0x91, - 0xD1, 0xDD, 0x4B, 0xB3, 0x48, 0x50, 0xEF, 0x26, 0xCD, 0x4B, 0xC6, 0xCA, - 0x6A, 0x56, 0xAF, 0x14, 0xE6, 0x66, 0x6F, 0xAE, 0xDF, 0x7F, 0xA4, 0xE6, - 0xAC, 0x25, 0xC7, 0xC3, 0x20, 0xC9, 0x56, 0x1A, 0x55, 0xBD, 0x08, 0x71, - 0xD8, 0xC8, 0x10, 0xE6, 0xF6, 0x44, 0x30, 0xF2, 0x2D, 0xC8, 0x9C, 0x68, - 0x8D, 0x5A, 0x56, 0x66, 0xDC, 0xB2, 0x2C, 0x21, 0x15, 0xE2, 0xB1, 0xA5, - 0x72, 0x15, 0x63, 0x68, 0xC8, 0x35, 0x4E, 0x1C, 0x74, 0xC4, 0x99, 0xCC, - 0xE3, 0x61, 0x7F, 0x39, 0xD2, 0x77, 0x9D, 0x35, 0x88, 0x65, 0x68, 0x98, - 0x6E, 0x0B, 0x43, 0x71, 0x1D, 0xF5, 0x26, 0x36, 0x8F, 0x3F, 0xE3, 0xF9, - 0xD8, 0x03, 0x61, 0xC8, 0x2D, 0xAF, 0x40, 0x59, 0xD3, 0x25, 0x72, 0x5F, - 0xC6, 0xBD, 0x2A, 0x4E, 0x9A, 0x29, 0x28, 0x61, 0x54, 0x5D, 0xD3, 0xE8, - 0xF5, 0x18, 0xED, 0x53, 0xE1, 0x4F, 0x30, 0xD4, 0xA7, 0x40, 0xD7, 0x8C, - 0x6A, 0x85, 0x13, 0xC7, 0xFA, 0xA4, 0x5B, 0x10, 0x23, 0x4E, 0x9C, 0x88, - 0xB1, 0xCF, 0x8D, 0x09, 0x9D, 0xBD, 0x77, 0x30, 0x21, 0x67, 0xC2, 0xA0, - 0x77, 0x23, 0xED, 0x80, 0x13, 0xB3, 0xB9, 0x41, 0xF2, 0x6C, 0x85, 0x18, - 0x5D, 0x54, 0x5A, 0x05, 0xD1, 0x05, 0x95, 0xCD, 0xFE, 0x83, 0x2C, 0x78, - 0x10, 0x31, 0x91, 0xFD, 0x6E, 0xC6, 0xFA, 0xA6, 0xEF, 0x41, 0x6D, 0x0D, - 0x2E, 0x4B, 0xB2, 0xF7, 0x4C, 0x7B, 0xA1, 0x5B, 0x73, 0x46, 0x41, 0x45, - 0x08, 0xF2, 0xE4, 0xB4, 0x40, 0xC1, 0x54, 0xC0, 0x6D, 0x2E, 0x95, 0x48, - 0xCB, 0xD7, 0xC8, 0xDF, 0x92, 0x0A, 0x58, 0x20, 0x36, 0x32, 0x08, 0x9A, - 0xA1, 0x21, 0xA3, 0x0B, 0xE1, 0x06, 0xAA, 0x62, 0x0D, 0x62, 0xBA, 0x0B, - 0x83, 0xE1, 0xB4, 0xB2, 0xA0, 0xF5, 0xA4, 0x64, 0x61, 0x11, 0xC3, 0xF5, - 0xAE, 0x94, 0x19, 0x2C, 0x15, 0xC9, 0x47, 0xD9, 0x8D, 0xB2, 0xA8, 0x4A, - 0x1A, 0x83, 0x90, 0x43, 0x56, 0x75, 0x55, 0x02, 0xF3, 0xC8, 0x54, 0x35, - 0x99, 0xCE, 0x34, 0x76, 0xEF, 0x16, 0xC8, 0x77, 0x27, 0x13, 0x03, 0x64, - 0x15, 0x79, 0xE4, 0xBB, 0x5D, 0xB7, 0x2E, 0xA0, 0x1E, 0x76, 0xBB, 0xA7, - 0x52, 0xAB, 0x1A, 0xA5, 0x15, 0x64, 0x33, 0x9D, 0xDD, 0xED, 0x47, 0x2E, - 0x70, 0x9E, 0x42, 0xCA, 0xF9, 0x27, 0x42, 0xFC, 0x0B, 0xD9, 0x0E, 0x4B, - 0xED}; -const uint8_t g_jaJP_Locale[] = { - 0x78, 0x9C, 0xED, 0x56, 0xCB, 0x6E, 0xD3, 0x40, 0x14, 0x5D, 0x17, 0x89, - 0x7F, 0x18, 0x59, 0x20, 0x83, 0xD4, 0xD6, 0x0D, 0xEF, 0x56, 0xAE, 0xA5, - 0x8A, 0x96, 0x86, 0x16, 0xA3, 0x08, 0x57, 0xA0, 0x76, 0x83, 0x26, 0xF6, - 0x34, 0x99, 0x36, 0x9E, 0xA9, 0x26, 0xB6, 0x4A, 0xBC, 0xE2, 0x21, 0x20, - 0x48, 0x74, 0x01, 0x1B, 0x04, 0x44, 0x62, 0x55, 0x40, 0x02, 0x04, 0x8B, - 0x6E, 0xD8, 0xD0, 0xAF, 0x49, 0x5A, 0x56, 0xFC, 0x02, 0x33, 0x7E, 0xC5, - 0x8E, 0xED, 0xE0, 0xEE, 0xF1, 0x22, 0x99, 0x7B, 0x7C, 0xCE, 0xF5, 0xBD, - 0xE7, 0x8E, 0x47, 0x56, 0x5B, 0xD4, 0x84, 0x2D, 0x04, 0x08, 0xB4, 0xD1, - 0xBC, 0xB4, 0x05, 0xEF, 0xAF, 0xD4, 0x24, 0x60, 0xA1, 0xB6, 0x39, 0x2F, - 0x0D, 0xDE, 0xEC, 0x1F, 0x7F, 0xFF, 0x76, 0x8E, 0xFF, 0x0D, 0x7A, 0x5F, - 0xCF, 0x4B, 0xDA, 0xE9, 0x53, 0x00, 0xA8, 0x82, 0x4C, 0x2C, 0xC8, 0x8C, - 0x8E, 0x5D, 0xA7, 0xAD, 0x76, 0xA8, 0x6B, 0x30, 0xD4, 0xA0, 0x0C, 0x43, - 0x22, 0x58, 0x13, 0x40, 0xB5, 0x29, 0x71, 0x9A, 0xB7, 0xF9, 0xAD, 0xB6, - 0x88, 0x27, 0x82, 0x58, 0xAB, 0x0C, 0x7A, 0x5D, 0x55, 0x09, 0xD6, 0x09, - 0xF8, 0x42, 0x3E, 0x7C, 0x31, 0x1F, 0xBE, 0x94, 0x0F, 0x5F, 0xCE, 0x87, - 0xAF, 0xE4, 0xC3, 0x57, 0xF3, 0xE1, 0x6B, 0xF9, 0xF0, 0x6C, 0x3E, 0x5C, - 0x99, 0x29, 0xC0, 0x0B, 0xFA, 0xAC, 0x8C, 0x34, 0x0A, 0xC2, 0x75, 0xEC, - 0x53, 0xD2, 0x37, 0x00, 0xEB, 0x75, 0x36, 0x2F, 0x55, 0xA4, 0xFF, 0x06, - 0x9E, 0xC4, 0x40, 0x0B, 0x76, 0x12, 0xDB, 0x8E, 0x47, 0x9A, 0xD8, 0xBE, - 0xEF, 0x7B, 0xFC, 0x57, 0x55, 0x44, 0x38, 0xC4, 0x7B, 0xDD, 0x5C, 0xFC, - 0xE8, 0xD1, 0x97, 0x7C, 0xFE, 0x8F, 0x83, 0x82, 0x3C, 0x9F, 0x73, 0xF1, - 0xDF, 0xCF, 0x5F, 0xE5, 0xE2, 0xFD, 0xDE, 0x87, 0x11, 0x1C, 0xF8, 0xAB, - 0x9C, 0x26, 0x46, 0xF6, 0x40, 0xD8, 0x4D, 0xB6, 0x8F, 0x6C, 0x07, 0xD9, - 0xDA, 0xB3, 0x55, 0x67, 0xEB, 0xCD, 0x56, 0x5A, 0x5C, 0xA3, 0x8D, 0x18, - 0xB6, 0x30, 0xB2, 0x93, 0x2F, 0x79, 0x08, 0x69, 0xFD, 0xBD, 0x6E, 0xFF, - 0xC5, 0x1E, 0x1F, 0x4E, 0x04, 0x64, 0x6F, 0xFF, 0x7A, 0x99, 0xBE, 0x0D, - 0x86, 0x61, 0xE2, 0x21, 0x88, 0xC1, 0x44, 0x7E, 0x1E, 0x69, 0x47, 0x07, - 0x0F, 0xFB, 0x4F, 0x9F, 0xF8, 0xD9, 0x45, 0x18, 0xE3, 0xC7, 0xFB, 0x87, - 0x83, 0x77, 0x1F, 0x63, 0x10, 0xF8, 0xAB, 0x48, 0xCB, 0x8F, 0x2D, 0x65, - 0xE4, 0xDC, 0x0A, 0x50, 0x0B, 0x3A, 0xA8, 0x06, 0x1D, 0x07, 0x31, 0x12, - 0x5B, 0x1F, 0x23, 0xE1, 0xD1, 0xB6, 0xE9, 0xB6, 0x5A, 0x92, 0xB6, 0xCE, - 0x2F, 0xB9, 0xFF, 0xF3, 0x40, 0xD6, 0x65, 0x6E, 0xB8, 0xBC, 0x28, 0xF3, - 0x41, 0xC8, 0x4B, 0xFC, 0x12, 0xBE, 0xC4, 0x92, 0xA2, 0x1C, 0x2D, 0x4A, - 0x1A, 0x05, 0x39, 0x4A, 0xE9, 0x6D, 0x64, 0x05, 0x72, 0x45, 0xD7, 0x95, - 0xC5, 0xC5, 0x52, 0x9A, 0x76, 0x93, 0x32, 0x47, 0xA8, 0xF2, 0x35, 0x00, - 0xA4, 0x90, 0xD0, 0x10, 0x07, 0xDB, 0x23, 0x86, 0x24, 0x90, 0x94, 0x21, - 0x55, 0x79, 0xF0, 0xF6, 0xB1, 0xAC, 0xEB, 0x72, 0xBF, 0xFB, 0x4C, 0x36, - 0x0C, 0xF9, 0xE8, 0xD3, 0x6B, 0x79, 0x43, 0x55, 0x12, 0xF4, 0x22, 0x7D, - 0x60, 0x46, 0x75, 0x4E, 0xD7, 0xE7, 0x0C, 0x63, 0xAE, 0x9C, 0xC6, 0x37, - 0x20, 0x94, 0x94, 0x12, 0x84, 0xDD, 0x0B, 0xC9, 0x28, 0x5F, 0x74, 0x3E, - 0xD2, 0x67, 0xB8, 0x15, 0xD6, 0x38, 0x1A, 0xED, 0x8F, 0x65, 0x48, 0xB6, - 0xB6, 0xAB, 0x76, 0xDB, 0x58, 0x5A, 0xBC, 0xB1, 0x7B, 0xEF, 0x41, 0x73, - 0xD5, 0xDB, 0x08, 0x0C, 0x4B, 0x92, 0x7C, 0x25, 0x71, 0xED, 0x3A, 0x62, - 0x69, 0xD7, 0x52, 0x58, 0x58, 0x12, 0xC7, 0xF8, 0x0E, 0x37, 0x25, 0xCD, - 0x9B, 0xF4, 0xBC, 0xD9, 0x69, 0xCF, 0xF3, 0x54, 0x25, 0xC5, 0x2B, 0x96, - 0x9A, 0x2E, 0x63, 0x88, 0x98, 0x1D, 0x49, 0x3B, 0xE3, 0x8B, 0x4B, 0x0B, - 0x77, 0x10, 0x33, 0x11, 0x71, 0xC2, 0x67, 0x9E, 0xCD, 0xEA, 0x84, 0x19, - 0x99, 0x06, 0xE2, 0xA6, 0x86, 0x7D, 0x4E, 0xA4, 0xA1, 0x30, 0xBD, 0x85, - 0x4C, 0x6C, 0x43, 0xBE, 0x1B, 0xA6, 0xA3, 0x2C, 0xC1, 0xED, 0x42, 0x41, - 0x83, 0x51, 0x77, 0x07, 0x8B, 0xF9, 0x4F, 0x96, 0x54, 0xC4, 0x1D, 0x9C, - 0x2D, 0x29, 0xB0, 0x31, 0x71, 0xDB, 0x92, 0x36, 0x55, 0x92, 0xEE, 0x21, - 0x46, 0x25, 0x6D, 0x26, 0xC3, 0x1E, 0x1A, 0x93, 0x1A, 0x76, 0x34, 0x89, - 0x94, 0x33, 0x69, 0x30, 0xDA, 0x81, 0x7E, 0x20, 0x69, 0x7F, 0x0E, 0xF9, - 0x89, 0x9D, 0x66, 0x8C, 0x51, 0xE1, 0x36, 0x15, 0x0B, 0x49, 0x5B, 0xA9, - 0xAD, 0x9F, 0x40, 0x96, 0x1C, 0x44, 0x46, 0xE4, 0x1F, 0x7F, 0x99, 0xBA, - 0xC5, 0xDB, 0xDE, 0xD9, 0x41, 0x9B, 0xD0, 0x8C, 0x4E, 0xDB, 0x28, 0x0C, - 0x73, 0xAE, 0x52, 0xCF, 0xDD, 0x86, 0x60, 0x99, 0x3A, 0x4D, 0x6C, 0x82, - 0x1A, 0xA3, 0x53, 0x77, 0x6F, 0x02, 0x5D, 0x52, 0xC6, 0x91, 0x75, 0x4C, - 0xCC, 0x26, 0x8D, 0xC8, 0x77, 0x0A, 0xC8, 0x7A, 0x87, 0x7F, 0x2A, 0x5A, - 0x82, 0x55, 0x44, 0xC0, 0x04, 0x53, 0x32, 0x86, 0x70, 0x9D, 0xBA, 0x0C, - 0x23, 0x06, 0x0C, 0xC7, 0x2A, 0x60, 0x2C, 0x58, 0xB4, 0x8E, 0x40, 0x0D, - 0xFF, 0x93, 0x52, 0x45, 0x75, 0x86, 0x76, 0xC7, 0x52, 0x16, 0x18, 0xAC, - 0xF3, 0x17, 0x77, 0x1C, 0x65, 0xAD, 0x09, 0xF1, 0x58, 0x02, 0x6F, 0xA9, - 0x21, 0x6A, 0x01, 0xB7, 0xC6, 0xD2, 0x0C, 0x5A, 0x8A, 0xA6, 0x77, 0x5C, - 0xD2, 0xD8, 0xA2, 0x3E, 0x33, 0x18, 0x89, 0x7F, 0xAA, 0x25, 0xE6, 0xA9, - 0x2A, 0xC1, 0x87, 0xBD, 0xF6, 0x17, 0x6C, 0x42, 0x08, 0x21}; -const uint8_t g_koKR_Locale[] = { - 0x78, 0x9C, 0xED, 0x56, 0x4D, 0x6B, 0xD4, 0x40, 0x18, 0x3E, 0x57, 0xF0, - 0x3F, 0x0C, 0xC1, 0x12, 0x85, 0x76, 0xB7, 0xEB, 0x77, 0x4B, 0x1A, 0x28, - 0x6E, 0x6D, 0x65, 0x8D, 0x94, 0xA6, 0x58, 0xEC, 0x45, 0x66, 0x93, 0xE9, - 0x26, 0xED, 0x26, 0x53, 0x26, 0x09, 0x75, 0x73, 0xAE, 0x52, 0xF0, 0xE2, - 0xA1, 0x87, 0xEA, 0x6E, 0xB1, 0x07, 0x11, 0x2A, 0x88, 0x22, 0x22, 0x1E, - 0x14, 0x7F, 0x8D, 0x62, 0x6D, 0x8A, 0x7F, 0xC1, 0xC9, 0xE7, 0xE6, 0x63, - 0xB2, 0x4D, 0xEF, 0xEE, 0x61, 0x99, 0xF7, 0x99, 0xE7, 0x79, 0xF3, 0xBE, - 0xCF, 0x4C, 0x5E, 0x22, 0x74, 0xB1, 0x02, 0xBB, 0x08, 0x98, 0xD0, 0x40, - 0xB3, 0xDC, 0x26, 0x7E, 0xDC, 0x5A, 0xE6, 0x80, 0x8A, 0x2C, 0x65, 0x96, - 0xFB, 0x35, 0x38, 0x38, 0xFE, 0x34, 0xF8, 0xFD, 0xE1, 0xFD, 0xE5, 0xE3, - 0xD7, 0x47, 0x3F, 0xFB, 0xDF, 0xAF, 0x70, 0xE2, 0xC5, 0x0B, 0x00, 0x08, - 0x3E, 0xDF, 0x54, 0x21, 0x91, 0x7B, 0x46, 0x1B, 0x77, 0xAD, 0x48, 0xDA, - 0x21, 0xA8, 0x83, 0x89, 0x0E, 0x4D, 0x9F, 0x35, 0x06, 0x04, 0x03, 0x9B, - 0xB6, 0xF6, 0x80, 0x6E, 0x59, 0x7E, 0x3C, 0x16, 0xC6, 0x62, 0xC3, 0xEB, - 0xEF, 0x09, 0xF5, 0x70, 0x9D, 0x82, 0xAF, 0xB2, 0xE1, 0x6B, 0x6C, 0xF8, - 0x3A, 0x1B, 0xBE, 0xC1, 0x86, 0x6F, 0xB2, 0xE1, 0x5B, 0x6C, 0xF8, 0x36, - 0x1B, 0x9E, 0x66, 0xC3, 0x8D, 0xA9, 0x12, 0xBC, 0xA4, 0xCF, 0x46, 0xAE, - 0x51, 0x10, 0xAD, 0x13, 0x9F, 0xD2, 0xBE, 0x01, 0xD8, 0x6E, 0x93, 0x59, - 0xAE, 0xC1, 0xFD, 0x37, 0xF0, 0x3C, 0x06, 0xAA, 0xB0, 0x97, 0xBA, 0x76, - 0x34, 0x12, 0xBD, 0x83, 0x6F, 0xDE, 0xAB, 0x3D, 0xFA, 0x2F, 0xD4, 0xFD, - 0x70, 0x88, 0xF7, 0xF7, 0x98, 0xF8, 0xE9, 0x4B, 0x36, 0xEE, 0xED, 0xEE, - 0x33, 0xF1, 0x93, 0x77, 0x47, 0x4C, 0xFC, 0xCF, 0xD7, 0x5D, 0x76, 0xFE, - 0x67, 0x87, 0x39, 0x1C, 0x04, 0x2B, 0x46, 0x13, 0xB9, 0x3B, 0x10, 0x75, - 0x53, 0xEC, 0xA3, 0xD8, 0x41, 0xB1, 0xF6, 0x62, 0xD5, 0xC5, 0x7A, 0x8B, - 0x95, 0x96, 0xD7, 0x68, 0x20, 0xA2, 0xAB, 0x3A, 0x32, 0xD2, 0x2F, 0x79, - 0x04, 0x89, 0xDE, 0xFE, 0x1B, 0xEF, 0x70, 0x87, 0x1E, 0x4E, 0x0C, 0x14, - 0xB6, 0x4F, 0xFB, 0xB9, 0x6D, 0x30, 0x0C, 0x53, 0x0F, 0x41, 0x04, 0xA6, - 0xF2, 0xD3, 0x88, 0x56, 0xF9, 0xD1, 0xEB, 0xBF, 0x08, 0xB2, 0xFB, 0x61, - 0x82, 0x7B, 0x3B, 0x03, 0xBA, 0x95, 0x80, 0x20, 0x58, 0xC5, 0x5A, 0x3A, - 0xB6, 0xEA, 0xB9, 0xB9, 0x15, 0xA2, 0x2A, 0xB4, 0xD1, 0x12, 0xB4, 0x6D, - 0x44, 0xCC, 0xC4, 0xFA, 0x04, 0x89, 0x46, 0xDB, 0xBA, 0xD3, 0xED, 0x72, - 0xE2, 0x23, 0xFA, 0xE3, 0x4F, 0x9E, 0xEE, 0xF0, 0x40, 0xE2, 0xA9, 0xE3, - 0x3C, 0x68, 0xF2, 0xF4, 0x28, 0x78, 0x30, 0x4F, 0x7F, 0xBE, 0x35, 0x89, - 0xAA, 0x2C, 0x4D, 0x17, 0x9B, 0x9D, 0xD2, 0x34, 0x95, 0x32, 0x18, 0x48, - 0x0D, 0x13, 0xD4, 0x80, 0x24, 0xD5, 0x40, 0xB3, 0x59, 0x49, 0x65, 0x69, - 0x98, 0xD8, 0xBE, 0xAE, 0x4C, 0x05, 0x40, 0x06, 0x89, 0x9C, 0xB1, 0x75, - 0x23, 0xE7, 0x4C, 0x0A, 0xC9, 0x38, 0x33, 0x07, 0x34, 0x8D, 0xF7, 0x9E, - 0x0F, 0x68, 0x4B, 0x12, 0x7F, 0xF2, 0x85, 0xB6, 0x26, 0xCB, 0xBC, 0xF7, - 0x79, 0x97, 0x07, 0x6B, 0x42, 0x3D, 0x25, 0x2A, 0xCB, 0x12, 0x1A, 0x53, - 0x9A, 0xA5, 0x52, 0x8E, 0xC0, 0x1A, 0x9A, 0x62, 0x46, 0x92, 0x66, 0x64, - 0xB9, 0x92, 0x24, 0xF2, 0x25, 0x14, 0xE5, 0x15, 0xBE, 0x27, 0x39, 0x07, - 0xA2, 0xDB, 0xB2, 0x42, 0xD1, 0xF8, 0x0A, 0x2D, 0x40, 0x73, 0x63, 0x73, - 0xD1, 0xB0, 0xE4, 0xF9, 0xE6, 0xDD, 0xED, 0xD5, 0x27, 0x5A, 0xCB, 0x5D, - 0x0B, 0xAD, 0x4C, 0x93, 0x02, 0xA5, 0xE9, 0x18, 0x6D, 0x44, 0xB2, 0x7E, - 0x66, 0xB0, 0xA8, 0x28, 0x8A, 0xD1, 0x97, 0x40, 0xE1, 0x44, 0x77, 0xC2, - 0x75, 0xA7, 0x6B, 0xAE, 0xEB, 0x0A, 0xF5, 0x0C, 0xAF, 0x5C, 0xAA, 0x38, - 0x84, 0x20, 0x53, 0xE9, 0x71, 0xE2, 0xA5, 0x40, 0x5C, 0x59, 0xB8, 0x85, - 0x88, 0x82, 0x4C, 0x3B, 0x7A, 0xE6, 0x78, 0x51, 0xE7, 0x9B, 0x51, 0x68, - 0x20, 0x69, 0x6A, 0xD8, 0xE7, 0x58, 0x16, 0x8A, 0xD2, 0xAB, 0x48, 0xD1, - 0x0D, 0x48, 0xEF, 0x49, 0x2D, 0xCE, 0x12, 0x6E, 0x97, 0x0A, 0x3A, 0x04, - 0x3B, 0x5B, 0xBA, 0x7F, 0x27, 0x26, 0x2A, 0x2A, 0x92, 0x0E, 0xC6, 0x2B, - 0x0A, 0x0C, 0xDD, 0x74, 0x2C, 0x4E, 0x9C, 0xAC, 0x48, 0x77, 0x11, 0xC1, - 0x9C, 0x38, 0x55, 0x60, 0x0F, 0x8D, 0xC9, 0x1C, 0x76, 0x7C, 0x12, 0x19, - 0x67, 0xB2, 0x60, 0x7C, 0x07, 0x83, 0x80, 0x13, 0xFF, 0xFE, 0x78, 0x4B, - 0x07, 0x54, 0x86, 0x31, 0x42, 0xA5, 0x5B, 0xD8, 0x5F, 0x70, 0x62, 0x6B, - 0x79, 0xF5, 0x1C, 0xB2, 0xF4, 0x41, 0x14, 0x44, 0xC1, 0x84, 0x2C, 0xD4, - 0xED, 0xCF, 0x81, 0xDE, 0x16, 0x5A, 0x87, 0x4A, 0x3C, 0x90, 0xE3, 0x30, - 0xCA, 0x39, 0xA7, 0xE2, 0x36, 0x02, 0x52, 0xCF, 0x31, 0x3B, 0x1B, 0x18, - 0xC8, 0xB6, 0x0A, 0x24, 0xAE, 0xCE, 0x64, 0x4A, 0x3D, 0xFA, 0x75, 0xA8, - 0x82, 0x25, 0xEA, 0x64, 0x09, 0x41, 0x37, 0x75, 0x6C, 0x8E, 0x20, 0xDC, - 0xC1, 0x0E, 0xD1, 0x11, 0xF1, 0x9F, 0x52, 0xC2, 0x08, 0xAB, 0x59, 0xD2, - 0xCF, 0xA4, 0x2C, 0xA2, 0x36, 0x41, 0xDB, 0x23, 0x29, 0x73, 0x04, 0xB6, - 0xE9, 0x8B, 0x38, 0x8A, 0xB2, 0xA2, 0x41, 0xBD, 0x84, 0xD0, 0xC2, 0xAE, - 0xB3, 0x09, 0xC1, 0x02, 0xB6, 0x35, 0x5D, 0xF1, 0x7B, 0x9A, 0x7C, 0x78, - 0xAF, 0xD4, 0x9A, 0x88, 0x4C, 0x0D, 0x50, 0x34, 0x1C, 0x93, 0x97, 0x47, - 0x3E, 0x9A, 0x72, 0x3B, 0x81, 0xDD, 0xF7, 0x47, 0xD2, 0x64, 0x9C, 0xA1, - 0x05, 0x53, 0x2D, 0x75, 0x9E, 0x42, 0x3D, 0xFC, 0xFC, 0x17, 0xFF, 0x01, - 0xDC, 0xF1, 0x18, 0xD3}; -const uint8_t g_esES_Locale[] = { - 0x78, 0x9C, 0x9D, 0x56, 0xCF, 0x6B, 0xD4, 0x40, 0x14, 0xBE, 0x0B, 0xFE, - 0x0F, 0x21, 0x58, 0x56, 0xA1, 0xDD, 0xD1, 0x63, 0xCB, 0x36, 0x50, 0xDA, - 0xDA, 0x95, 0x1A, 0x59, 0x9A, 0xAA, 0xD8, 0x8B, 0x4C, 0x92, 0xE9, 0xEE, - 0xB4, 0xC9, 0xCC, 0x32, 0x49, 0x2C, 0x9B, 0xA3, 0xE0, 0x41, 0x10, 0x0B, - 0xDE, 0x8A, 0x27, 0x0F, 0x1E, 0x04, 0x8B, 0x77, 0x51, 0x3C, 0xF4, 0x3F, - 0x11, 0x6A, 0xEB, 0xC9, 0x7F, 0xC1, 0x37, 0x9B, 0x49, 0x36, 0x3F, 0x66, - 0xD7, 0x60, 0x4E, 0xF3, 0xBE, 0xF7, 0x7D, 0x2F, 0xEF, 0x7D, 0x93, 0x4C, - 0xD2, 0x0B, 0xB8, 0x87, 0x03, 0x62, 0x30, 0x1C, 0x92, 0x75, 0x93, 0x44, - 0xCF, 0xB7, 0x1D, 0xD3, 0xF0, 0x49, 0xE4, 0xAD, 0x9B, 0xD7, 0x1F, 0x7F, - 0x5C, 0x9D, 0x9E, 0x5F, 0xBD, 0x3E, 0xBB, 0xFE, 0x72, 0x7E, 0xBB, 0x08, - 0xFE, 0x7C, 0x7B, 0x73, 0xF9, 0xFE, 0xFB, 0xEF, 0xB3, 0x57, 0xBF, 0xDE, - 0xBE, 0xBB, 0xFC, 0x7A, 0x7A, 0xC7, 0xB4, 0x7A, 0xB2, 0x00, 0xF3, 0xB1, - 0x70, 0x26, 0xA1, 0xCB, 0x83, 0x48, 0xD5, 0x1A, 0x0A, 0x32, 0xE4, 0x82, - 0x62, 0x06, 0x8C, 0x90, 0xB3, 0x78, 0xF4, 0x08, 0xE0, 0x48, 0xAD, 0x2D, - 0xC2, 0x88, 0xE0, 0x3D, 0x94, 0x05, 0x37, 0x6F, 0x28, 0xF4, 0x90, 0xB8, - 0x42, 0x87, 0x87, 0x58, 0xA4, 0x4D, 0x14, 0xBB, 0x82, 0x06, 0x1A, 0xEE, - 0xA4, 0x49, 0x3D, 0x4A, 0x18, 0xD5, 0xA1, 0x81, 0x06, 0xC5, 0x43, 0x1E, - 0xC5, 0x4D, 0x38, 0x22, 0xE3, 0x98, 0x92, 0x10, 0x1A, 0x6C, 0xA4, 0xB8, - 0x17, 0x27, 0x3A, 0x9C, 0xF1, 0x17, 0x73, 0x14, 0x3E, 0xF5, 0x1A, 0x19, - 0x54, 0x72, 0x29, 0x27, 0x4E, 0x23, 0x03, 0xBB, 0xAE, 0x58, 0x37, 0xEF, - 0x99, 0x25, 0xF3, 0x74, 0xD6, 0xE9, 0x6C, 0xD3, 0x99, 0xA6, 0xB3, 0x4C, - 0xE7, 0x98, 0xCE, 0x2F, 0x9D, 0x5B, 0x3A, 0xAB, 0x74, 0x1E, 0xE9, 0xFC, - 0xD1, 0x39, 0x33, 0xDF, 0x13, 0x1F, 0x4F, 0xD4, 0x53, 0x04, 0x2B, 0xCB, - 0xE7, 0x21, 0x65, 0xF2, 0xF6, 0x32, 0xC8, 0xB2, 0x56, 0x90, 0x30, 0x12, - 0x55, 0x10, 0x30, 0x21, 0xAE, 0x43, 0xF4, 0xE2, 0x93, 0xF0, 0x78, 0x50, - 0x83, 0x8F, 0x12, 0xF2, 0xA2, 0x06, 0xC1, 0xFE, 0x89, 0x7A, 0xC1, 0xE8, - 0xE2, 0x83, 0x8B, 0xFD, 0xD9, 0x6D, 0x51, 0xD1, 0x55, 0xA9, 0xC3, 0xD2, - 0x9E, 0xA9, 0x56, 0xEB, 0x6D, 0xD6, 0x9B, 0x6C, 0x74, 0x58, 0xEF, 0xAD, - 0xDE, 0x58, 0xA3, 0x29, 0x7D, 0x47, 0x21, 0x11, 0xD4, 0x87, 0x87, 0x2D, - 0x7F, 0xFD, 0x54, 0x68, 0x6D, 0xD8, 0xE0, 0x6E, 0x1E, 0x94, 0x78, 0xD6, - 0xA0, 0x96, 0x40, 0xD5, 0x0A, 0x80, 0x10, 0x81, 0x55, 0x35, 0x58, 0x59, - 0xB8, 0xBB, 0xD9, 0xED, 0x21, 0xB9, 0xCA, 0x52, 0x96, 0x5F, 0x06, 0x50, - 0x41, 0x96, 0x41, 0xED, 0xA8, 0xC8, 0xBA, 0x8F, 0xC9, 0x00, 0xC7, 0x31, - 0x18, 0x3D, 0xDD, 0xD7, 0x22, 0x52, 0xE7, 0xC8, 0x61, 0x12, 0x04, 0xA6, - 0xB5, 0x0D, 0x97, 0xB1, 0xD5, 0x81, 0xA3, 0xC9, 0xE8, 0xD8, 0x70, 0x65, - 0xAB, 0x67, 0x70, 0xC9, 0x69, 0x0B, 0x4D, 0xAD, 0xA0, 0x2A, 0x11, 0x70, - 0x36, 0x34, 0xAD, 0xFF, 0x55, 0x87, 0xC4, 0x07, 0xF1, 0x16, 0xB2, 0x6D, - 0xD4, 0x52, 0x11, 0x8D, 0xB8, 0x88, 0x67, 0x9A, 0x86, 0x02, 0x55, 0x66, - 0x06, 0x20, 0xA6, 0x61, 0xC9, 0x83, 0x52, 0x54, 0xF1, 0xA0, 0xDF, 0xEF, - 0xF4, 0xA1, 0xFD, 0x0E, 0x5C, 0x0E, 0x9C, 0xD2, 0x07, 0x3D, 0x54, 0x62, - 0xD6, 0xCA, 0x54, 0x26, 0xEF, 0xF7, 0xD7, 0x6C, 0x7B, 0xCD, 0x71, 0x5A, - 0x49, 0xA6, 0xE3, 0x2A, 0x41, 0x0B, 0xBA, 0x9A, 0x55, 0x0A, 0x1A, 0x6C, - 0x54, 0x99, 0x4B, 0x59, 0xB5, 0x0F, 0x58, 0xBE, 0xFD, 0x3B, 0x89, 0x1D, - 0x1F, 0x8F, 0xC2, 0xC8, 0xD9, 0xDE, 0xBA, 0x7F, 0xF2, 0x14, 0x8F, 0x76, - 0xD3, 0x83, 0xCC, 0x9C, 0x32, 0x09, 0x74, 0x2C, 0x09, 0x5D, 0x22, 0x66, - 0x0E, 0x55, 0x62, 0xD5, 0x08, 0x60, 0xF0, 0x9C, 0x7A, 0xA6, 0x95, 0x2E, - 0xA7, 0xE9, 0x6A, 0x37, 0x4D, 0xD3, 0x1E, 0xAA, 0xF0, 0x1A, 0x85, 0x94, - 0xD0, 0x4B, 0x84, 0x20, 0xCC, 0x9B, 0xE4, 0xCA, 0xD5, 0x55, 0xE3, 0x56, - 0x4B, 0xE9, 0x98, 0x08, 0x8F, 0xB0, 0x58, 0x29, 0x97, 0x34, 0x2A, 0x54, - 0x6B, 0xBD, 0x28, 0x94, 0x4F, 0x57, 0x09, 0x55, 0x59, 0x9F, 0x78, 0x34, - 0xC4, 0xB0, 0xE3, 0xCB, 0xB9, 0x3E, 0x4B, 0xD7, 0xD5, 0xC5, 0x97, 0x96, - 0x27, 0x63, 0x2A, 0x37, 0xBA, 0xDB, 0x8A, 0x5F, 0x74, 0xBD, 0xD4, 0x8A, - 0x0E, 0x87, 0x6C, 0x12, 0x99, 0xD6, 0x4A, 0x2B, 0x72, 0x0A, 0x9F, 0x6F, - 0xD3, 0xBA, 0xDB, 0xE4, 0xA2, 0xEA, 0xD8, 0x80, 0xE4, 0xBE, 0x17, 0x4E, - 0x54, 0x81, 0xFC, 0xF9, 0x9A, 0x06, 0xA6, 0xF5, 0xF3, 0xE5, 0x67, 0x38, - 0x3E, 0x2A, 0x8C, 0x66, 0x11, 0xA5, 0xA1, 0x11, 0x97, 0x0B, 0x38, 0x35, - 0x1E, 0xEF, 0xB5, 0x16, 0x95, 0x4D, 0x6F, 0x4A, 0x50, 0xBD, 0x5B, 0xF9, - 0x32, 0x4C, 0xC6, 0xE4, 0x10, 0x7B, 0xF2, 0x1C, 0xCC, 0x97, 0xAA, 0x96, - 0x3D, 0x81, 0x1F, 0x1F, 0xDF, 0x18, 0x80, 0x17, 0xA8, 0xCC, 0xCC, 0xD3, - 0x14, 0xFE, 0x46, 0xD8, 0xDC, 0xF4, 0x26, 0x4F, 0x04, 0x7C, 0x77, 0x0C, - 0x27, 0xF6, 0xB5, 0xF9, 0x0D, 0x9F, 0xBB, 0xC4, 0x18, 0xD0, 0x7F, 0x10, - 0xFA, 0xF2, 0x67, 0xEA, 0x64, 0x01, 0x61, 0x43, 0x60, 0x17, 0x5E, 0x98, - 0xF9, 0x84, 0xFD, 0x11, 0xA6, 0xDA, 0xF4, 0x2E, 0x4F, 0x93, 0x63, 0x6C, - 0xEC, 0xF0, 0x78, 0x44, 0x3D, 0x39, 0xC7, 0xCA, 0x93, 0x07, 0x86, 0xBD, - 0x88, 0x0A, 0x23, 0x7B, 0x23, 0x9E, 0x53, 0xF7, 0x16, 0xDC, 0x14, 0x98, - 0x43, 0x39, 0x99, 0xF1, 0x70, 0x01, 0xC9, 0xE1, 0x2D, 0x48, 0xF6, 0x24, - 0x61, 0xC3, 0x23, 0x3E, 0xE5, 0xA9, 0xE6, 0xD0, 0x6C, 0xCF, 0x64, 0x94, - 0xFD, 0xFC, 0xC2, 0xF2, 0x2F, 0x7C, 0xDC, 0xCC, 0x2F, -}; -const uint8_t g_esLA_Locale[] = { - 0x78, 0x9C, 0x9D, 0x56, 0xCD, 0x4E, 0xDC, 0x30, 0x10, 0x3E, 0x53, 0xA9, - 0xEF, 0x60, 0x45, 0x45, 0x80, 0x04, 0x9B, 0xF6, 0xB8, 0x28, 0x44, 0x5A, - 0x01, 0xA5, 0x15, 0x0D, 0x5A, 0x75, 0x51, 0x4B, 0xB9, 0x54, 0x4E, 0x62, - 0x36, 0x86, 0xC4, 0x5E, 0x39, 0x09, 0x68, 0xA3, 0xBE, 0x40, 0x4F, 0x3D, - 0xF4, 0xD4, 0x63, 0x2B, 0x21, 0xB5, 0x07, 0xD4, 0x47, 0xE8, 0x81, 0x67, - 0x41, 0xF0, 0x18, 0x9D, 0xFC, 0x6E, 0x12, 0x3B, 0xE9, 0xD2, 0x9C, 0x3C, - 0xDF, 0x7C, 0x9F, 0x77, 0xE6, 0xB3, 0x33, 0x1B, 0xC3, 0xE7, 0x0E, 0xF6, - 0x09, 0x62, 0x38, 0x20, 0x3B, 0x1A, 0x09, 0x3F, 0x5A, 0x27, 0x1A, 0x72, - 0x49, 0xE8, 0xEC, 0x68, 0x0F, 0xD7, 0x7F, 0xEE, 0xBF, 0xDC, 0xDC, 0x7F, - 0xFE, 0xF6, 0xF0, 0xFB, 0x66, 0xFD, 0xEE, 0xC7, 0x4F, 0x88, 0xEF, 0xBE, - 0x5E, 0x6F, 0x68, 0xE6, 0xD3, 0x27, 0x08, 0x19, 0xA9, 0x8A, 0xB9, 0x58, - 0x4C, 0xE6, 0x81, 0xCD, 0xFD, 0xB0, 0xD8, 0x60, 0x2A, 0xC8, 0x94, 0x0B, - 0x8A, 0x59, 0xCA, 0x5A, 0x41, 0x46, 0xC0, 0x59, 0xE4, 0x1D, 0x41, 0x2A, - 0x4C, 0xE3, 0x95, 0x3C, 0x36, 0x09, 0x23, 0x82, 0x1B, 0x7A, 0x1E, 0xD4, - 0xF0, 0x33, 0x62, 0x0B, 0x75, 0x26, 0xC0, 0x22, 0x51, 0xE1, 0xD8, 0x16, - 0xD4, 0x57, 0xF2, 0xE7, 0x2A, 0xFA, 0x79, 0xCC, 0xA8, 0x1A, 0xF7, 0x95, - 0x38, 0x9E, 0xF2, 0x30, 0x52, 0x25, 0x42, 0x32, 0x8B, 0x28, 0x09, 0xA0, - 0x5C, 0x45, 0x92, 0x3B, 0x51, 0xAC, 0xCE, 0x30, 0x7E, 0xD9, 0xA9, 0x72, - 0xA9, 0x23, 0xE5, 0x50, 0xB1, 0xAE, 0x1C, 0xAC, 0x3B, 0x8A, 0xB0, 0x6D, - 0x8B, 0x1D, 0xED, 0x85, 0xD6, 0xB2, 0x56, 0x6D, 0xAC, 0xDA, 0x54, 0xB5, - 0xA5, 0x6A, 0x43, 0xD5, 0x7E, 0xAA, 0xDD, 0x54, 0x7B, 0xA9, 0x36, 0x52, - 0xED, 0xA0, 0xDA, 0x3D, 0xB5, 0x6F, 0xFD, 0x8E, 0xB9, 0x78, 0x5E, 0xBB, - 0x81, 0x10, 0x99, 0x2E, 0x0F, 0x28, 0x4B, 0xCB, 0x49, 0x83, 0x0A, 0xF5, - 0x63, 0x46, 0xC2, 0x16, 0x06, 0x16, 0x45, 0x32, 0x48, 0x6F, 0x7F, 0x09, - 0x87, 0xFB, 0x52, 0xE2, 0x3C, 0x26, 0x97, 0x12, 0x08, 0x27, 0x2E, 0xE4, - 0x8D, 0xC3, 0xDB, 0xEF, 0x36, 0x76, 0x17, 0x25, 0xA0, 0x6C, 0xA5, 0xA8, - 0xBA, 0x75, 0xCA, 0x45, 0xF9, 0x72, 0xE9, 0x72, 0xE1, 0x8A, 0xAA, 0xE5, - 0x7A, 0xE5, 0x62, 0x15, 0x85, 0x76, 0x57, 0x19, 0x10, 0x41, 0x5D, 0xB8, - 0xB6, 0xF5, 0x57, 0xBC, 0x80, 0xCC, 0x91, 0x05, 0x67, 0x51, 0x06, 0xCD, - 0xD4, 0xB8, 0x95, 0x42, 0x8B, 0xB0, 0xB6, 0x39, 0x11, 0xB8, 0xB6, 0x2F, - 0x44, 0x26, 0x1E, 0xEC, 0x0E, 0x0C, 0x3D, 0x5D, 0x55, 0x90, 0x5B, 0x87, - 0x50, 0xB6, 0x2A, 0x45, 0x30, 0xA5, 0xF4, 0xD6, 0x98, 0xCA, 0x51, 0x17, - 0x47, 0x64, 0x8C, 0xA3, 0x08, 0x0E, 0xA6, 0x72, 0xBB, 0x42, 0x8A, 0x49, - 0x76, 0x16, 0xFB, 0xBE, 0x66, 0xEE, 0xC3, 0x83, 0xF6, 0xD6, 0x60, 0x22, - 0xA2, 0x35, 0x0B, 0x9E, 0x7C, 0xF5, 0x01, 0x9E, 0xD4, 0x89, 0x4A, 0xD3, - 0xB5, 0x89, 0xCF, 0xD9, 0x54, 0x33, 0xFF, 0x5F, 0x1F, 0x10, 0x17, 0xE4, - 0x7B, 0xBA, 0x65, 0xE9, 0x4B, 0x6B, 0x42, 0x8F, 0x8B, 0x68, 0xA1, 0x6A, - 0x6B, 0x10, 0x6A, 0x20, 0x85, 0x23, 0x11, 0x0D, 0x5A, 0x8E, 0xD4, 0x90, - 0x86, 0x23, 0x9E, 0xB7, 0x6D, 0x59, 0xDB, 0x93, 0x09, 0x1A, 0xA1, 0x53, - 0x43, 0xAF, 0xB1, 0xBA, 0x64, 0xB9, 0x07, 0x8F, 0x96, 0x65, 0xAD, 0x2F, - 0x54, 0x4B, 0x69, 0x8A, 0xD6, 0x33, 0x95, 0x2C, 0x49, 0x3B, 0x6F, 0xF5, - 0x59, 0xDC, 0x85, 0x63, 0x40, 0xCB, 0x0B, 0x72, 0x10, 0x5B, 0xD1, 0x85, - 0x17, 0x84, 0x93, 0xFD, 0xBD, 0x97, 0x57, 0xEF, 0xB1, 0x77, 0x98, 0x9C, - 0xE6, 0x86, 0xD5, 0x49, 0x99, 0x92, 0xC5, 0x81, 0x4D, 0x44, 0xD3, 0xB5, - 0x06, 0x56, 0x54, 0x05, 0x18, 0xDC, 0x6D, 0x47, 0x33, 0x93, 0xCD, 0x24, - 0x19, 0x0E, 0x92, 0x24, 0x31, 0xF4, 0x06, 0xAF, 0x5B, 0xEA, 0xC4, 0x42, - 0x10, 0xE6, 0xCC, 0x35, 0xF3, 0x59, 0x2E, 0x1E, 0x0E, 0x3F, 0xAD, 0x57, - 0xCB, 0x8D, 0xA5, 0xF7, 0x99, 0x11, 0xE1, 0x10, 0x16, 0x15, 0x25, 0xAC, - 0xCA, 0xBA, 0xD4, 0x1B, 0xA9, 0x9F, 0xAA, 0xC7, 0x45, 0xDB, 0x2B, 0x4D, - 0xA8, 0xD8, 0xDE, 0x25, 0x0E, 0x0D, 0x30, 0x5C, 0x8E, 0x41, 0xB9, 0x4B, - 0x9E, 0xEE, 0x14, 0x4C, 0x05, 0x8F, 0x67, 0x34, 0xBD, 0x17, 0x9B, 0x4B, - 0x2A, 0xAA, 0x0E, 0x56, 0x97, 0x14, 0xC0, 0x84, 0x8F, 0x43, 0xCD, 0xDC, - 0x5A, 0x92, 0x9E, 0xC0, 0x77, 0x87, 0x66, 0x3E, 0x97, 0xD8, 0x0B, 0x63, - 0x1A, 0x67, 0x5F, 0x1E, 0x4C, 0xC3, 0x99, 0x26, 0x58, 0xDE, 0xC9, 0x2C, - 0x80, 0x03, 0x84, 0x59, 0xD4, 0xC8, 0xF7, 0x68, 0x68, 0xC8, 0xD3, 0x85, - 0x66, 0x5A, 0x27, 0x47, 0x8F, 0x90, 0xD5, 0x8F, 0x41, 0x12, 0x65, 0xC3, - 0x50, 0xAA, 0x3A, 0x7D, 0xF5, 0xE7, 0x33, 0x72, 0x86, 0x9D, 0x72, 0xE8, - 0x96, 0x61, 0xB1, 0xA7, 0x35, 0x87, 0xAF, 0x39, 0x17, 0x8D, 0xC1, 0x1D, - 0x5D, 0x4D, 0xA0, 0xF0, 0x49, 0xC5, 0x7A, 0x08, 0xBB, 0x3C, 0x16, 0xF0, - 0x17, 0x88, 0x26, 0x91, 0xDB, 0xC1, 0x18, 0xB9, 0xDC, 0x26, 0x68, 0x4C, - 0xFF, 0x49, 0x79, 0x95, 0x7E, 0x1F, 0x5E, 0xF5, 0x52, 0x46, 0x02, 0xDB, - 0xF0, 0xAE, 0xF5, 0x51, 0x8E, 0x3D, 0x4C, 0x3B, 0x08, 0x87, 0x3C, 0x89, - 0x2F, 0x30, 0x3A, 0xE0, 0x91, 0x47, 0x9D, 0xB4, 0xA7, 0xAD, 0x77, 0xAF, - 0x91, 0xD5, 0x4F, 0x06, 0x03, 0x1C, 0x8F, 0x97, 0xE4, 0xB7, 0xBD, 0x3F, - 0x0D, 0xDC, 0x69, 0xDA, 0x25, 0x7A, 0xD3, 0x4B, 0x9B, 0xF0, 0xA5, 0x68, - 0xD6, 0x3C, 0x66, 0xD3, 0x73, 0x9E, 0x31, 0xF3, 0x22, 0xB3, 0x11, 0x57, - 0x3B, 0x4F, 0x43, 0xCF, 0x3F, 0xEF, 0xCD, 0xBF, 0xC4, 0xB5, 0xD4, 0x04}; -const uint8_t g_deDE_Loacale[] = { - 0x78, 0x9C, 0x95, 0x56, 0x4D, 0x6F, 0xD4, 0x30, 0x10, 0xBD, 0x23, 0xF1, - 0x1F, 0xAC, 0x88, 0xAA, 0x20, 0xB5, 0x1B, 0x38, 0xB6, 0xDA, 0x46, 0x5A, - 0x75, 0xFB, 0x41, 0x4B, 0xCA, 0xAA, 0x69, 0x41, 0xF4, 0x82, 0xBC, 0x89, - 0xBB, 0x71, 0x9B, 0xD8, 0x2B, 0xC7, 0x69, 0xB5, 0x39, 0xF2, 0x37, 0xB8, - 0x72, 0x04, 0x71, 0xE4, 0x04, 0x17, 0xFE, 0x09, 0x52, 0x25, 0x7E, 0x06, - 0x93, 0x8D, 0x93, 0x26, 0xB6, 0xBB, 0x0D, 0xB9, 0xAC, 0xE7, 0xCD, 0x7B, - 0xB3, 0x33, 0xCF, 0x89, 0x93, 0x61, 0xC2, 0x43, 0x9C, 0x10, 0xC4, 0x70, - 0x4A, 0x76, 0x9C, 0x88, 0x7C, 0x1C, 0xEF, 0x39, 0x28, 0x22, 0x59, 0xB8, - 0xE3, 0xDC, 0xFD, 0xFA, 0xF1, 0xF7, 0xFB, 0xB7, 0xE7, 0xF0, 0x73, 0xF7, - 0xF9, 0xE7, 0x0B, 0xC7, 0x1B, 0x96, 0x44, 0x16, 0x61, 0x11, 0x2C, 0xD2, - 0x29, 0x4F, 0x32, 0xA5, 0x99, 0x09, 0x32, 0xE3, 0x82, 0x62, 0x06, 0x8C, - 0x94, 0x33, 0x19, 0x9F, 0x00, 0x9C, 0xA9, 0xB5, 0x77, 0x84, 0x59, 0x8E, - 0xC5, 0xD0, 0xAD, 0xA2, 0xA7, 0x4F, 0x14, 0xBC, 0x4F, 0xA6, 0xC2, 0x86, - 0xFB, 0xBF, 0xBF, 0x88, 0xC2, 0x40, 0x47, 0x73, 0x41, 0x13, 0x93, 0x8B, - 0xA9, 0x81, 0x1D, 0xE5, 0xCC, 0x06, 0x26, 0x26, 0x38, 0xCA, 0x67, 0x79, - 0x26, 0x0D, 0x38, 0x20, 0x73, 0x49, 0xD2, 0x29, 0x31, 0x5B, 0x7B, 0x7B, - 0x2D, 0xB9, 0x0D, 0x3F, 0xE1, 0x37, 0x76, 0xC1, 0x98, 0x14, 0x7A, 0xC2, - 0x6D, 0x19, 0x54, 0xF3, 0x96, 0x11, 0xC2, 0xD3, 0xA9, 0xD8, 0x71, 0x5E, - 0x39, 0x2D, 0xDF, 0x6C, 0xA6, 0x99, 0x26, 0xD8, 0xED, 0xEA, 0x6B, 0x96, - 0xCD, 0x2B, 0x9B, 0x55, 0x36, 0x9F, 0x6C, 0x0E, 0xD9, 0xDC, 0xB1, 0x19, - 0xF3, 0xB0, 0x27, 0x11, 0x5E, 0xA8, 0x1B, 0x08, 0x56, 0x5E, 0xC0, 0x19, - 0x93, 0x18, 0xFE, 0xBE, 0x0C, 0xAA, 0xAC, 0xE7, 0x73, 0x03, 0x1A, 0x53, - 0xC2, 0x32, 0x83, 0x47, 0xA5, 0xBC, 0xE5, 0x61, 0xDC, 0x65, 0x42, 0x41, - 0x22, 0x0C, 0xEE, 0xBE, 0x20, 0x54, 0xC7, 0x02, 0x9C, 0x76, 0x78, 0x6E, - 0xD3, 0x5A, 0xAB, 0xCD, 0xD6, 0xC6, 0x55, 0xFD, 0x6A, 0xAD, 0x6A, 0x6D, - 0x6A, 0x0D, 0x6A, 0xAD, 0x69, 0x2D, 0x69, 0xDD, 0xD8, 0x1B, 0x49, 0x89, - 0xA0, 0x11, 0x25, 0x69, 0xFD, 0xD4, 0xA9, 0xD0, 0x1B, 0xF9, 0xE0, 0x6C, - 0x1D, 0xB4, 0x78, 0xDE, 0x44, 0x4B, 0xB8, 0xDD, 0x0A, 0x80, 0x10, 0x81, - 0x55, 0x35, 0x58, 0x79, 0x37, 0x03, 0xB4, 0x1B, 0x8B, 0xC1, 0xD0, 0x2D, - 0x83, 0x2A, 0xEB, 0x31, 0x0D, 0x73, 0x1B, 0x49, 0x19, 0x68, 0xE7, 0x44, - 0x35, 0x81, 0x24, 0x13, 0x2C, 0x25, 0x11, 0x6C, 0xB9, 0xB3, 0x4D, 0xA4, - 0x0E, 0x91, 0xCB, 0x3C, 0x49, 0x1C, 0x6F, 0x0F, 0xAE, 0x0D, 0x34, 0x1E, - 0x20, 0x1F, 0x2E, 0xF4, 0x01, 0xAE, 0x72, 0xD6, 0x86, 0xAB, 0x15, 0x52, - 0xD2, 0x84, 0xB3, 0x99, 0xE3, 0xFD, 0xA7, 0x28, 0x25, 0x11, 0x68, 0xC6, - 0x03, 0xDF, 0x1F, 0xF4, 0x54, 0x64, 0x31, 0x17, 0xF2, 0x5E, 0x63, 0x28, - 0xDC, 0xCE, 0x88, 0x00, 0x48, 0x9A, 0xB6, 0x46, 0x6E, 0x45, 0x9D, 0x91, - 0x0F, 0xB7, 0x7D, 0x7F, 0x1D, 0x9D, 0xC7, 0x02, 0xAD, 0x5F, 0x0C, 0xDD, - 0x16, 0x4B, 0x2B, 0xD1, 0x19, 0xF6, 0xB0, 0x54, 0x6D, 0x07, 0x01, 0xEA, - 0x23, 0x59, 0x8E, 0x5A, 0x2B, 0x7A, 0xF0, 0xD5, 0xA0, 0x4B, 0x85, 0x41, - 0x77, 0x3B, 0x53, 0x29, 0xA3, 0xCE, 0x00, 0xAB, 0xF7, 0xFA, 0xE0, 0xCA, - 0x97, 0xD7, 0x87, 0x69, 0x16, 0xEC, 0x8D, 0xF7, 0x6F, 0xDF, 0xE3, 0xF8, - 0xB8, 0xB8, 0xA8, 0xAC, 0x69, 0x93, 0x40, 0xC7, 0xF2, 0xF2, 0x68, 0xBC, - 0xF7, 0xA7, 0x13, 0xAB, 0x4E, 0x00, 0x83, 0x5B, 0x33, 0x74, 0xBC, 0x62, - 0xA3, 0x28, 0xB6, 0x06, 0x45, 0x01, 0xC7, 0x46, 0x87, 0x67, 0x14, 0x52, - 0xC2, 0x30, 0x17, 0x82, 0xB0, 0x70, 0x51, 0x2B, 0xB7, 0xB6, 0xD0, 0xB3, - 0x9E, 0xD2, 0x39, 0x11, 0x21, 0x61, 0x52, 0x29, 0xD7, 0x2C, 0x2A, 0x57, - 0x6B, 0xBD, 0x29, 0x54, 0x4F, 0xD7, 0x09, 0x9B, 0x17, 0x6B, 0x48, 0x53, - 0x0C, 0xFB, 0xBD, 0x51, 0xEB, 0xAB, 0xB4, 0xAE, 0x6E, 0xDE, 0xA9, 0x3C, - 0x9F, 0xD3, 0x72, 0xAB, 0x07, 0xBD, 0xF8, 0x4D, 0xD7, 0x6B, 0xBD, 0xE8, - 0x29, 0x65, 0x79, 0xE6, 0x78, 0x9B, 0xBD, 0xC8, 0x05, 0x11, 0xDC, 0xF1, - 0x5E, 0x9A, 0x5C, 0xB7, 0x3B, 0x36, 0x20, 0xB5, 0xEF, 0x8D, 0x13, 0x5D, - 0xA0, 0xBE, 0xC1, 0x96, 0x81, 0xE3, 0xFD, 0xF9, 0xF4, 0x15, 0xCE, 0x8A, - 0x0E, 0xC3, 0x2C, 0xA2, 0x34, 0x34, 0xE3, 0xE5, 0x02, 0x8E, 0x88, 0xF3, - 0xD3, 0xDE, 0xA2, 0xB6, 0xE9, 0xA6, 0xC4, 0xD5, 0xBB, 0x2D, 0x9F, 0x86, - 0xC5, 0x9C, 0x5C, 0xE2, 0xB0, 0x3C, 0xFA, 0xEA, 0xA5, 0xAA, 0xE5, 0x2F, - 0xE0, 0x13, 0x27, 0x42, 0x13, 0xF0, 0xC2, 0x6D, 0x33, 0xEB, 0x34, 0x65, - 0x94, 0xB3, 0x07, 0xD3, 0xBB, 0x3C, 0x17, 0x94, 0x08, 0x14, 0xC8, 0xC8, - 0x9A, 0x1F, 0x45, 0xF0, 0x69, 0x81, 0x26, 0xF4, 0x11, 0xC2, 0x21, 0x7C, - 0x35, 0x91, 0xDB, 0x15, 0x84, 0x91, 0xC0, 0x53, 0x78, 0x60, 0x1E, 0x26, - 0x9C, 0xC5, 0x98, 0x5A, 0xD3, 0xC7, 0xBC, 0xC8, 0xAF, 0x31, 0x3A, 0xE0, - 0x32, 0xA6, 0x61, 0x39, 0xC7, 0xE6, 0xBB, 0xD7, 0xC8, 0x5F, 0x45, 0x85, - 0x91, 0xC3, 0x98, 0xD7, 0xD4, 0xD3, 0x15, 0x7F, 0x0A, 0xCC, 0x59, 0x39, - 0x19, 0x7A, 0xB3, 0x82, 0x04, 0x6F, 0xFA, 0xC7, 0x49, 0xFE, 0x22, 0x67, - 0xB3, 0x2B, 0xBE, 0xE4, 0xA9, 0xE6, 0xDC, 0xFB, 0x3D, 0x2B, 0xA3, 0xEA, - 0x73, 0x16, 0x96, 0xFF, 0x00, 0x29, 0x27, 0xAF, 0x17, -}; -const uint8_t g_frFR_Locale[] = { - 0x78, 0x9C, 0x95, 0x56, 0x4D, 0x6F, 0xD3, 0x40, 0x10, 0xBD, 0x23, 0xF1, - 0x1F, 0x56, 0x16, 0x55, 0x41, 0x6A, 0xBD, 0x70, 0x4C, 0x95, 0x5A, 0xAA, - 0xFA, 0x15, 0x28, 0x46, 0x51, 0x53, 0x40, 0xF4, 0x82, 0x36, 0xF6, 0x36, - 0xDE, 0xD4, 0xDE, 0x8D, 0xD6, 0x76, 0x4A, 0x7C, 0xE4, 0x3F, 0x70, 0xE2, - 0xC2, 0xB5, 0x12, 0x88, 0x03, 0x47, 0xC4, 0x85, 0xFE, 0x13, 0x24, 0x10, - 0x3F, 0x83, 0x71, 0xBC, 0x76, 0xED, 0x5D, 0x27, 0xB8, 0xBE, 0x64, 0xE7, - 0xCD, 0x7B, 0xE3, 0x99, 0xB7, 0xF6, 0xC6, 0xFD, 0x50, 0x78, 0x24, 0xA4, - 0x88, 0x93, 0x88, 0xEE, 0x5A, 0x17, 0xF2, 0xED, 0xD1, 0xA9, 0x85, 0x7C, - 0x1A, 0x7B, 0xBB, 0xD6, 0x9F, 0x6F, 0x1F, 0xFE, 0x7E, 0xFD, 0xF2, 0x10, - 0x7E, 0x7E, 0x7F, 0xFC, 0xF1, 0xC8, 0x72, 0xFA, 0x39, 0x91, 0xFB, 0x44, - 0x8E, 0x16, 0xD1, 0x58, 0x84, 0xB1, 0xD2, 0x4C, 0x24, 0x9D, 0x08, 0xC9, - 0x08, 0x07, 0x46, 0x24, 0x78, 0x12, 0xBC, 0x00, 0x38, 0x56, 0x6B, 0x67, - 0x4A, 0xF8, 0x9C, 0x51, 0xD9, 0xC7, 0x45, 0x78, 0xFF, 0x9E, 0xC2, 0x2F, - 0x6E, 0xAE, 0xE7, 0xB2, 0x2D, 0x11, 0x11, 0x19, 0x1B, 0x20, 0x01, 0x6E, - 0xD8, 0x42, 0x65, 0x06, 0x36, 0x4D, 0x19, 0x6F, 0x03, 0xC3, 0x90, 0x26, - 0x66, 0x59, 0x71, 0xF3, 0xDD, 0x44, 0x63, 0x3A, 0x4B, 0x68, 0x34, 0x96, - 0xD4, 0xC8, 0x08, 0x2F, 0x11, 0x6D, 0x38, 0x17, 0xF3, 0x76, 0x81, 0x7F, - 0x73, 0xED, 0xE9, 0x19, 0x5C, 0x33, 0xA9, 0x24, 0x2E, 0x23, 0x44, 0xC6, - 0x63, 0xB9, 0x6B, 0x3D, 0xB1, 0xEA, 0xDE, 0xD9, 0xED, 0xCE, 0x99, 0xF0, - 0x2A, 0xDF, 0xDA, 0x98, 0x77, 0xB0, 0xCD, 0x94, 0xAF, 0x36, 0xCD, 0xE4, - 0x82, 0x61, 0x26, 0x08, 0x6E, 0x99, 0x60, 0xEE, 0x94, 0xBD, 0xDA, 0x25, - 0x9F, 0x2C, 0xD4, 0x63, 0x05, 0x2B, 0xC7, 0x67, 0x11, 0xE1, 0x5E, 0x00, - 0xAE, 0xE6, 0x51, 0x91, 0x76, 0xC2, 0x94, 0xFB, 0xAC, 0x81, 0x80, 0x25, - 0x3A, 0x42, 0xA5, 0x27, 0xA9, 0x06, 0x4E, 0x69, 0xAA, 0x21, 0x73, 0x78, - 0xCC, 0x0D, 0x5A, 0x0C, 0xF7, 0xAF, 0x41, 0xB8, 0x6A, 0xA9, 0xD6, 0x5E, - 0x6D, 0x0B, 0x55, 0x9F, 0xB6, 0xDE, 0xA3, 0xAD, 0xB7, 0x68, 0xEB, 0x1D, - 0xDA, 0x7A, 0x77, 0xB6, 0xDE, 0x9C, 0xAD, 0x37, 0x66, 0xB7, 0xB7, 0x05, - 0xC5, 0x98, 0xCF, 0x68, 0x54, 0xBE, 0x91, 0x2A, 0x74, 0xF6, 0x5C, 0xF0, - 0xB7, 0x0C, 0x6A, 0x3C, 0x67, 0xA8, 0x25, 0x70, 0xB3, 0x02, 0x20, 0x54, - 0x12, 0x55, 0x0D, 0x56, 0xF0, 0x7C, 0xD9, 0xE8, 0x99, 0xBD, 0xBD, 0x0F, - 0xF7, 0xCF, 0xC3, 0x22, 0xEF, 0x90, 0x99, 0x8E, 0xE2, 0x4A, 0x96, 0x07, - 0xDA, 0x39, 0x52, 0xCC, 0x91, 0xD0, 0x21, 0x49, 0x12, 0x2A, 0xF9, 0x72, - 0x8F, 0xAB, 0xA8, 0x3C, 0x98, 0xD2, 0x30, 0xB4, 0x9C, 0x43, 0xB8, 0xD0, - 0x01, 0x72, 0xE1, 0x42, 0x6F, 0xE0, 0xCA, 0xA7, 0xAD, 0x98, 0x5A, 0x19, - 0x25, 0x0C, 0x05, 0x9F, 0x58, 0xCE, 0xDD, 0x34, 0xB0, 0xCF, 0x4A, 0x82, - 0x3A, 0xF1, 0xE3, 0x40, 0xC8, 0x04, 0x14, 0x07, 0xD8, 0x75, 0x71, 0x8B, - 0x02, 0x37, 0xA6, 0x03, 0x20, 0x61, 0x51, 0x6D, 0xDA, 0x5A, 0xD4, 0x98, - 0x76, 0x30, 0xD8, 0x44, 0x01, 0xDA, 0x84, 0x2E, 0xCE, 0xFB, 0xB8, 0x46, - 0xD2, 0x2A, 0x34, 0x06, 0x1D, 0x0C, 0x76, 0x5C, 0x77, 0x67, 0x34, 0xEA, - 0x24, 0x59, 0xCE, 0x59, 0x2A, 0x3A, 0xF0, 0xD5, 0x9C, 0x4B, 0x85, 0x41, - 0xC7, 0x8D, 0xA1, 0x94, 0x4F, 0x67, 0x80, 0x95, 0xBB, 0x7C, 0x4C, 0xDC, - 0xE9, 0xE5, 0x20, 0x8A, 0x47, 0x87, 0x07, 0x47, 0x57, 0xAF, 0xDF, 0x05, - 0x27, 0xD9, 0x79, 0xE1, 0x4C, 0x9D, 0x04, 0x3A, 0x9E, 0x46, 0x63, 0x2A, - 0x6F, 0xED, 0x69, 0xC4, 0xAA, 0x13, 0xC0, 0xE0, 0xC1, 0xF4, 0x2C, 0x27, - 0xDB, 0xCA, 0xB2, 0x9E, 0x9D, 0x65, 0x59, 0x1F, 0x37, 0x78, 0x46, 0x21, - 0x25, 0xF4, 0x52, 0x29, 0x29, 0xF7, 0x16, 0xA5, 0xB2, 0xD7, 0x43, 0x0F, - 0x3A, 0x4A, 0x67, 0x70, 0x76, 0x50, 0x9E, 0x28, 0xE5, 0x46, 0x8B, 0x0A, - 0x6B, 0xAD, 0x57, 0x85, 0xCA, 0xE9, 0x1A, 0xA1, 0x2A, 0xEB, 0x53, 0x0F, - 0x4E, 0x33, 0xD8, 0xEE, 0xAD, 0x52, 0x5F, 0xA4, 0x75, 0x75, 0xF5, 0x6F, - 0x2B, 0xD2, 0x19, 0xCB, 0xB7, 0xFA, 0xE7, 0xA7, 0x4E, 0x82, 0xAA, 0xED, - 0x8D, 0x4E, 0xF4, 0x88, 0xF1, 0x34, 0xB6, 0x9C, 0xED, 0x4E, 0xE4, 0x8C, - 0x4A, 0x61, 0x39, 0x8F, 0x4D, 0x2E, 0x6E, 0xCE, 0x0D, 0x48, 0x69, 0x7C, - 0x65, 0x45, 0x13, 0x28, 0x9F, 0xB0, 0x65, 0x60, 0x39, 0xBF, 0xDE, 0x7F, - 0x86, 0x63, 0xA2, 0xC1, 0x30, 0x8B, 0x28, 0x0D, 0x8B, 0x45, 0xBE, 0x80, - 0xD3, 0xE1, 0xE5, 0x69, 0x67, 0x51, 0xDD, 0x75, 0x53, 0x82, 0xF5, 0x6E, - 0xF3, 0xD7, 0x61, 0x31, 0xA3, 0x17, 0xC4, 0xCB, 0x4F, 0xBE, 0x72, 0xA9, - 0x6A, 0xB9, 0x0B, 0xF8, 0xFA, 0xF1, 0xD1, 0x10, 0xBC, 0xC0, 0x75, 0x66, - 0x99, 0x66, 0x9C, 0x09, 0xBE, 0x32, 0xBD, 0x2F, 0xD2, 0xFC, 0x3B, 0x08, - 0x8D, 0x12, 0xBF, 0x35, 0xBF, 0xE7, 0x8B, 0x31, 0x45, 0x43, 0xF6, 0x1F, - 0xC2, 0x80, 0xC2, 0x57, 0xC6, 0xD5, 0x1A, 0xC2, 0x9E, 0x24, 0x63, 0x78, - 0x63, 0x56, 0x13, 0xCE, 0x02, 0xC2, 0x5A, 0xD3, 0x27, 0x22, 0x4B, 0x2F, - 0x09, 0x3A, 0x16, 0x49, 0xC0, 0xBC, 0x7C, 0x8E, 0xED, 0x57, 0x4F, 0x91, - 0xBB, 0x8E, 0x0A, 0x23, 0x7B, 0x81, 0x28, 0xA9, 0xA7, 0x6B, 0x6E, 0x0A, - 0xCC, 0x49, 0x3E, 0x19, 0x7A, 0xBE, 0x86, 0x34, 0x12, 0x1D, 0x48, 0xEE, - 0x22, 0xE5, 0x93, 0xA9, 0x58, 0xF2, 0x54, 0x73, 0xF8, 0x76, 0xCF, 0xF2, - 0xA8, 0xF8, 0xD2, 0x85, 0xE5, 0x3F, 0x5D, 0x49, 0xBE, 0x1B}; -const uint8_t g_itIT_Locale[] = { - 0x78, 0x9C, 0x95, 0x56, 0xD1, 0x6A, 0xD4, 0x40, 0x14, 0x7D, 0x17, 0xFC, - 0x87, 0x21, 0x58, 0x50, 0x68, 0x3B, 0xFA, 0xD8, 0x92, 0x06, 0x4A, 0x5B, - 0xBB, 0xA5, 0x46, 0x96, 0xEE, 0xAA, 0xD8, 0x17, 0x99, 0x64, 0xA6, 0xD9, - 0xB1, 0xC9, 0xCC, 0x32, 0x49, 0x5A, 0x92, 0x47, 0xF1, 0xC1, 0x37, 0x7F, - 0x42, 0x10, 0x41, 0xF1, 0x23, 0xFC, 0x13, 0xA1, 0xE2, 0x67, 0x78, 0xB3, - 0x99, 0xA4, 0xC9, 0x64, 0xBA, 0xA6, 0x79, 0xD9, 0xB9, 0xE7, 0x9E, 0x73, - 0x73, 0xEF, 0x99, 0x64, 0x36, 0x6E, 0x2C, 0x43, 0x12, 0x33, 0x24, 0x48, - 0xC2, 0xF6, 0x1C, 0x9E, 0xBD, 0x3B, 0x99, 0x3B, 0x88, 0xB2, 0x34, 0xDC, - 0x73, 0xFE, 0x7C, 0xFC, 0x7C, 0xF3, 0xE5, 0xEB, 0xCD, 0xA7, 0x6F, 0x7F, - 0x7F, 0xFE, 0x78, 0xDC, 0x06, 0x4F, 0x1C, 0xCF, 0xAD, 0x14, 0x82, 0x12, - 0x35, 0x2B, 0x92, 0x40, 0xC6, 0xA9, 0x16, 0x47, 0x8A, 0x45, 0x52, 0x71, - 0x22, 0x80, 0x91, 0x48, 0x91, 0x2D, 0x5E, 0x02, 0x9C, 0xEA, 0xB5, 0x17, - 0x31, 0x21, 0x08, 0x97, 0x2E, 0xAE, 0xC3, 0x87, 0x0F, 0x34, 0x7E, 0xC1, - 0x82, 0x40, 0xD9, 0x12, 0x09, 0x51, 0xE5, 0x10, 0x25, 0x4B, 0xC5, 0x63, - 0x66, 0x21, 0x47, 0x91, 0xA5, 0x46, 0xC4, 0xF3, 0x48, 0x0C, 0xE1, 0x38, - 0x8F, 0x62, 0x0B, 0x9B, 0x44, 0x32, 0xCD, 0x86, 0x70, 0xCA, 0xB2, 0x8C, - 0x25, 0x81, 0x1A, 0xDE, 0x55, 0x66, 0x99, 0xB4, 0xE1, 0x42, 0x5E, 0xD9, - 0x05, 0x94, 0x87, 0x66, 0x02, 0x77, 0xAC, 0x6A, 0x78, 0xAB, 0x08, 0x11, - 0x30, 0x66, 0xCF, 0x79, 0xE6, 0x74, 0x1C, 0xB4, 0xB9, 0x67, 0x33, 0xCE, - 0x66, 0x9B, 0xCD, 0x33, 0x9B, 0x61, 0x36, 0xB7, 0x6C, 0x56, 0xD9, 0x7C, - 0xB2, 0x39, 0x64, 0x73, 0xC7, 0x66, 0xCC, 0xDD, 0x9E, 0x50, 0x52, 0xE8, - 0x47, 0x09, 0x56, 0x1E, 0x95, 0x09, 0x13, 0x3C, 0x24, 0x2E, 0xAE, 0xA2, - 0x3A, 0x0D, 0x3D, 0x0A, 0x46, 0x7F, 0x7D, 0xEF, 0x61, 0xE0, 0x43, 0x36, - 0x04, 0x99, 0x0A, 0x65, 0x3C, 0x80, 0xE1, 0xE1, 0xB9, 0x1A, 0x80, 0x57, - 0x4C, 0x30, 0x65, 0x82, 0x29, 0x09, 0x48, 0xF5, 0x90, 0x68, 0x08, 0xB7, - 0xCD, 0x75, 0x1A, 0xED, 0x6C, 0x9D, 0xEE, 0xD8, 0x6C, 0xD6, 0x6C, 0xD4, - 0xEC, 0xD1, 0x6C, 0xCE, 0xEC, 0xCB, 0x6C, 0xC9, 0xDE, 0x0F, 0x14, 0xE2, - 0x94, 0xB3, 0xA4, 0x79, 0x11, 0x75, 0xE8, 0xED, 0xFB, 0x60, 0x71, 0x13, - 0x74, 0x78, 0xDE, 0xD4, 0x48, 0xE0, 0x7E, 0x05, 0x40, 0x98, 0x22, 0xBA, - 0x1A, 0xAC, 0x3C, 0x72, 0xE0, 0xE2, 0xEA, 0xB7, 0x4E, 0x78, 0xF4, 0x36, - 0xC4, 0x2D, 0xB1, 0x0A, 0x8C, 0x03, 0xA3, 0x6E, 0x3C, 0x63, 0x53, 0x02, - 0x6F, 0x96, 0x12, 0xAB, 0x8D, 0x6D, 0x23, 0x7D, 0x9A, 0x5C, 0xE4, 0x71, - 0xEC, 0x78, 0x47, 0x70, 0xA1, 0x43, 0xE4, 0xC3, 0x85, 0xDE, 0xC2, 0x55, - 0xCD, 0xD7, 0x32, 0x8D, 0x32, 0x5A, 0x18, 0x4B, 0x11, 0x39, 0xDE, 0xE1, - 0xFD, 0x44, 0x09, 0xA3, 0x95, 0x06, 0x83, 0x04, 0x8F, 0x12, 0xA4, 0x0B, - 0xA9, 0x32, 0x2D, 0xB1, 0x29, 0x70, 0x6F, 0x3E, 0x00, 0x32, 0x9E, 0x74, - 0xE6, 0xED, 0x44, 0xBD, 0x79, 0x27, 0x93, 0x5D, 0xDF, 0xDF, 0x9D, 0xCD, - 0xD0, 0xB9, 0x8B, 0x3B, 0x1C, 0xA3, 0x40, 0x6F, 0xD2, 0xFB, 0x28, 0x56, - 0x63, 0x36, 0xF7, 0x18, 0xC1, 0xD7, 0x53, 0xAE, 0x14, 0x03, 0x3A, 0xEE, - 0x8D, 0xA4, 0x5D, 0x9A, 0x03, 0xD6, 0xEC, 0xF2, 0x71, 0xE1, 0xD3, 0xCB, - 0x49, 0x92, 0xCE, 0x8E, 0x0E, 0x9F, 0x5F, 0xBF, 0x21, 0x8B, 0xD3, 0xF2, - 0xBC, 0xF6, 0xA5, 0x4B, 0x02, 0x9D, 0xC8, 0x93, 0x80, 0xA9, 0x5B, 0x73, - 0x7A, 0xB1, 0xEE, 0x04, 0x30, 0x78, 0x14, 0x43, 0xC7, 0x2B, 0x37, 0xCB, - 0x72, 0x67, 0xBB, 0x2C, 0x4B, 0x17, 0xF7, 0x78, 0x83, 0x42, 0x5A, 0x18, - 0xE6, 0x4A, 0x31, 0x11, 0x16, 0x8E, 0xF7, 0x08, 0xD5, 0xDA, 0x9D, 0x9D, - 0x91, 0xD2, 0x25, 0x9C, 0x15, 0x4C, 0x64, 0xFA, 0x9E, 0x1B, 0x16, 0x15, - 0x36, 0x5A, 0x6F, 0x0B, 0x35, 0xD3, 0xF5, 0x42, 0x5D, 0x96, 0xB2, 0x90, - 0x27, 0x04, 0x36, 0x7B, 0xB3, 0xD1, 0xD7, 0x69, 0x53, 0xDD, 0xFE, 0xAD, - 0xCA, 0x7C, 0xC9, 0xAB, 0x9D, 0xDE, 0x1E, 0xC5, 0x6F, 0xBB, 0xDE, 0x18, - 0x45, 0x4F, 0xB8, 0xC8, 0x53, 0xC7, 0xDB, 0x1A, 0x45, 0x2E, 0x99, 0x92, - 0x8E, 0xF7, 0x74, 0xC8, 0xC5, 0xFD, 0xB1, 0x01, 0x69, 0x7C, 0x6F, 0x9D, - 0xE8, 0x03, 0xCD, 0x03, 0xB6, 0x0A, 0x1C, 0xEF, 0xF7, 0x07, 0x38, 0x65, - 0xFB, 0x8C, 0x61, 0x91, 0xE6, 0x23, 0x25, 0x95, 0xD5, 0x02, 0x0E, 0x87, - 0x57, 0x67, 0xA3, 0x45, 0x5D, 0xD3, 0x87, 0x12, 0x6C, 0x76, 0x5B, 0xBD, - 0x0D, 0xC5, 0x92, 0x5D, 0x90, 0xB0, 0x3A, 0xEA, 0x9A, 0xA5, 0xAE, 0xE5, - 0x17, 0xF0, 0x95, 0x43, 0xD1, 0x14, 0xBC, 0xC0, 0x5D, 0x66, 0x93, 0xE6, - 0x82, 0x4B, 0x71, 0x67, 0xFA, 0x40, 0xE6, 0x8A, 0x33, 0x85, 0x66, 0x19, - 0xB5, 0xE6, 0xF7, 0xA9, 0x0C, 0x18, 0x9A, 0xF2, 0xFF, 0x10, 0x26, 0x0C, - 0xBE, 0x23, 0xAE, 0xD7, 0x10, 0xF6, 0x15, 0x09, 0xE0, 0x85, 0xB9, 0x9B, - 0x30, 0x5F, 0x10, 0x6E, 0x4D, 0x9F, 0xCA, 0x32, 0xBF, 0x24, 0xE8, 0x58, - 0x66, 0x0B, 0x1E, 0x56, 0x73, 0x6C, 0xBD, 0x3E, 0x41, 0xFE, 0x3A, 0x2A, - 0x8C, 0x1C, 0x2E, 0x64, 0x43, 0x3D, 0x5B, 0x73, 0x53, 0x60, 0x46, 0xD5, - 0x64, 0xE8, 0xC5, 0x1A, 0xD2, 0x4C, 0x8E, 0x20, 0xF9, 0x45, 0x2E, 0xA2, - 0xF7, 0x72, 0xC5, 0xD3, 0xCD, 0xE1, 0xDB, 0x3D, 0xAB, 0xA2, 0xFA, 0xD3, - 0x16, 0x96, 0xFF, 0x00, 0x20, 0x8B, 0xBE, 0xF7}; -const uint8_t g_ptBR_Locale[] = { - 0x78, 0x9C, 0x9D, 0x56, 0x3D, 0x6F, 0xD4, 0x40, 0x10, 0xAD, 0x83, 0xC4, - 0x7F, 0x58, 0x59, 0x89, 0x0E, 0xA4, 0x24, 0x86, 0x92, 0xC8, 0x67, 0xE9, - 0x92, 0x0B, 0x39, 0x94, 0x18, 0x9D, 0xCE, 0x11, 0x88, 0x34, 0x68, 0x6D, - 0xEF, 0xD9, 0x9B, 0xD8, 0xBB, 0xC7, 0xDA, 0x4E, 0xB0, 0x6B, 0x1A, 0x3A, - 0x28, 0x29, 0x53, 0x20, 0x2A, 0x44, 0x83, 0x44, 0x49, 0x91, 0xDF, 0x82, - 0xB8, 0x9F, 0xC1, 0xFA, 0xF3, 0xFC, 0xB1, 0x36, 0x06, 0x37, 0xDE, 0x99, - 0x79, 0x6F, 0x3D, 0xF3, 0x76, 0x76, 0x64, 0xC5, 0xA5, 0x26, 0x74, 0x11, - 0x20, 0xD0, 0x43, 0x63, 0x69, 0x15, 0xBC, 0x3E, 0x5C, 0x48, 0xC0, 0x42, - 0xBE, 0x39, 0x96, 0xD6, 0x1F, 0x6F, 0xD7, 0x1F, 0xDE, 0xFD, 0x7E, 0xFF, - 0x69, 0xFD, 0xED, 0xEB, 0x83, 0x5F, 0x3F, 0xBE, 0xAF, 0x3F, 0xFF, 0x7C, - 0x28, 0xA9, 0xF7, 0xEF, 0x01, 0xA0, 0x24, 0x14, 0x62, 0x41, 0xA6, 0x47, - 0x9E, 0x41, 0x5D, 0x3F, 0x67, 0xDB, 0x0C, 0xD9, 0x94, 0x61, 0x48, 0x12, - 0xD4, 0x16, 0x50, 0x3C, 0x4A, 0x02, 0xE7, 0x39, 0x0F, 0xF9, 0x89, 0xBD, - 0x95, 0xD9, 0xEA, 0x25, 0x24, 0x08, 0x33, 0xAA, 0xC8, 0x99, 0x59, 0x89, - 0x2C, 0xD1, 0x35, 0x62, 0x1D, 0x31, 0x0F, 0xB2, 0xBB, 0x2F, 0xA2, 0x00, - 0x34, 0x18, 0x76, 0x85, 0x04, 0x2C, 0x82, 0x5F, 0x86, 0xC4, 0x11, 0xFB, - 0x5D, 0xA1, 0x1F, 0xDA, 0xD4, 0x0F, 0x44, 0x01, 0x1F, 0x05, 0xC8, 0x33, - 0x84, 0xB9, 0xD2, 0x30, 0x08, 0xC5, 0x11, 0x42, 0xAF, 0xBB, 0x48, 0x16, - 0x8A, 0x9B, 0x21, 0x90, 0xAF, 0x4B, 0x09, 0xAB, 0x92, 0x02, 0x68, 0x18, - 0x6C, 0x2C, 0x3D, 0x96, 0x1A, 0xDA, 0x8A, 0x75, 0x15, 0x2B, 0x2A, 0x96, - 0x53, 0x2C, 0xA6, 0x58, 0x4B, 0xB1, 0x92, 0x62, 0x1D, 0xC5, 0x22, 0x8A, - 0xF5, 0x13, 0x6B, 0x27, 0x96, 0xAD, 0x5F, 0x31, 0x0B, 0x46, 0x95, 0x16, - 0xE4, 0x96, 0x6A, 0x51, 0x0F, 0x93, 0x24, 0x9D, 0xC4, 0x28, 0xBD, 0x3E, - 0xB2, 0x43, 0xDE, 0xD2, 0x7B, 0x4B, 0xDE, 0x80, 0xB0, 0x11, 0x0B, 0x10, - 0x6F, 0x3E, 0x71, 0xE8, 0x4D, 0x08, 0x59, 0xD0, 0x15, 0xC2, 0xA4, 0x23, - 0xE4, 0xA3, 0xB7, 0x5D, 0x91, 0xBB, 0x5B, 0x03, 0x5A, 0x9B, 0xE4, 0x40, - 0xBA, 0x12, 0xD4, 0xD3, 0x38, 0xFF, 0xBC, 0xB0, 0x76, 0x51, 0xED, 0x52, - 0xDA, 0x15, 0xB4, 0x13, 0x6F, 0xE7, 0x2B, 0xC8, 0xB3, 0x3B, 0x49, 0x0F, - 0x31, 0x6C, 0x61, 0xE4, 0x55, 0x2F, 0x7F, 0xEE, 0x52, 0x27, 0x1A, 0x3F, - 0xA4, 0xC2, 0xA8, 0x87, 0xE6, 0x8D, 0x10, 0xD8, 0x98, 0x95, 0xCD, 0x11, - 0x83, 0x95, 0x7D, 0xB9, 0xA5, 0x1E, 0x1E, 0x29, 0x72, 0xF2, 0x2E, 0x1D, - 0x93, 0x69, 0xE9, 0x00, 0xE9, 0xAA, 0x20, 0xF0, 0xD9, 0x25, 0x37, 0x86, - 0x57, 0xE6, 0xB5, 0x60, 0x80, 0xE6, 0x30, 0xE0, 0xF2, 0x90, 0x52, 0xE8, - 0xD2, 0x93, 0xCF, 0xB7, 0x65, 0xE8, 0xBA, 0x92, 0x7A, 0xCC, 0x9F, 0x5D, - 0x30, 0x1D, 0xF1, 0x29, 0x09, 0x46, 0x1A, 0x7F, 0xB2, 0xD5, 0x2B, 0xFE, - 0x24, 0x32, 0x94, 0xA4, 0xAE, 0x5D, 0x5C, 0x4A, 0x6C, 0x49, 0xFD, 0x7F, - 0xBE, 0x87, 0x2C, 0x4E, 0x9F, 0xCA, 0x9A, 0x26, 0x0F, 0xE6, 0xF8, 0x0E, - 0x65, 0xC1, 0x86, 0xD5, 0xE4, 0x00, 0x50, 0xF3, 0xE4, 0x92, 0x04, 0xD8, - 0x6B, 0x48, 0x52, 0xF1, 0xD4, 0x24, 0x99, 0xCD, 0x46, 0x0E, 0x2F, 0x65, - 0xC4, 0xEF, 0xD5, 0x48, 0xD7, 0x47, 0xFE, 0x08, 0x5C, 0x28, 0x72, 0x05, - 0xDC, 0xC5, 0xCE, 0xA4, 0x48, 0xC9, 0x19, 0x77, 0x38, 0x35, 0x55, 0x61, - 0x36, 0x3B, 0xD0, 0xB4, 0x03, 0x5D, 0x1F, 0xC4, 0xC8, 0x35, 0x48, 0x39, - 0x4D, 0x42, 0x22, 0x40, 0xA3, 0xDC, 0xBC, 0x27, 0xCE, 0xB9, 0xB7, 0x68, - 0x94, 0x93, 0x48, 0xB3, 0xAE, 0x66, 0x9E, 0xAF, 0x1F, 0x4F, 0x9F, 0xDE, - 0xBC, 0x84, 0xCE, 0x69, 0x7C, 0x91, 0xE9, 0x56, 0x05, 0xA5, 0x4C, 0x12, - 0x7A, 0x06, 0x62, 0x75, 0xF1, 0x6A, 0xBE, 0x3C, 0x27, 0xEE, 0xE3, 0xFD, - 0x6D, 0x4A, 0x6A, 0xBC, 0x1B, 0xC7, 0x4F, 0xF6, 0xE3, 0x98, 0x0F, 0xB3, - 0x1A, 0xAE, 0x9B, 0x6A, 0x86, 0x8C, 0x21, 0x62, 0x46, 0x92, 0xBA, 0x0D, - 0x0A, 0xF6, 0x60, 0xF2, 0x0A, 0x31, 0x13, 0x91, 0x20, 0xFF, 0xEE, 0x4E, - 0x9B, 0x97, 0x08, 0xD2, 0x2A, 0xA2, 0x2C, 0x6C, 0x53, 0xEB, 0x56, 0xDD, - 0x95, 0x6F, 0x6F, 0x21, 0x13, 0x7B, 0x90, 0x37, 0xC6, 0x6E, 0xB1, 0x4B, - 0x16, 0xEE, 0x24, 0xD8, 0x8C, 0x86, 0x2B, 0x9C, 0x34, 0xC3, 0xFE, 0x40, - 0x46, 0x59, 0xC1, 0xCE, 0x40, 0x02, 0xEF, 0xAF, 0xD0, 0x97, 0xD4, 0xBD, - 0x81, 0xF0, 0x18, 0x31, 0x2A, 0xA9, 0x8F, 0x5A, 0xE8, 0x8D, 0x30, 0xB5, - 0x03, 0x2F, 0x4E, 0xA3, 0xA6, 0x4C, 0xDD, 0x59, 0xB4, 0x61, 0x6A, 0x48, - 0xEA, 0x62, 0x9B, 0x4F, 0xA2, 0x1A, 0xA0, 0x87, 0x84, 0x7D, 0x9A, 0x2C, - 0x24, 0xF5, 0x70, 0x71, 0xF6, 0x0F, 0xB4, 0xEA, 0x39, 0xB4, 0x48, 0xE9, - 0x28, 0x6C, 0xA5, 0x9D, 0xDC, 0xFB, 0x68, 0x85, 0x96, 0xD0, 0x2C, 0xC6, - 0x6D, 0x61, 0xE6, 0x7B, 0x6A, 0x11, 0xFF, 0xC3, 0xB3, 0xC0, 0x9C, 0xCB, - 0x23, 0x8B, 0x01, 0x98, 0x60, 0x4A, 0x7A, 0x00, 0x47, 0x34, 0x64, 0x18, - 0x31, 0xA0, 0x07, 0x56, 0x07, 0x62, 0x62, 0x51, 0x03, 0x81, 0x39, 0xFE, - 0x2B, 0x64, 0x86, 0x0C, 0x86, 0x6E, 0x7A, 0x21, 0x13, 0x06, 0x0D, 0x7E, - 0xC3, 0xFA, 0x20, 0xE7, 0x0E, 0xC4, 0x1D, 0x80, 0x53, 0x1A, 0x87, 0x57, - 0x10, 0x9C, 0xD0, 0xC0, 0xC1, 0x66, 0x52, 0xD3, 0xDE, 0x8B, 0x67, 0x40, - 0xEB, 0x07, 0x73, 0x01, 0x4C, 0x87, 0x16, 0xE0, 0x45, 0xEF, 0xA7, 0x39, - 0xD6, 0x4E, 0xAA, 0x04, 0x67, 0xBD, 0x30, 0x9D, 0x0E, 0x82, 0x69, 0x51, - 0x48, 0xEC, 0x4B, 0x9A, 0x22, 0xB3, 0x24, 0xD3, 0xC1, 0x56, 0x39, 0x4F, - 0x45, 0xCE, 0xFE, 0xF7, 0xD5, 0x3F, 0x30, 0xBB, 0xD9, 0x9B}; -const uint8_t g_nlNL_Locale[] = { - 0x78, 0x9C, 0x95, 0x56, 0x4D, 0x4F, 0xDC, 0x30, 0x10, 0x3D, 0x53, 0xA9, - 0xFF, 0xC1, 0x8A, 0x8A, 0x68, 0x25, 0x96, 0x2D, 0x47, 0x50, 0x88, 0xB4, - 0x05, 0x0A, 0x15, 0x04, 0xAD, 0x58, 0xDA, 0xAA, 0x5C, 0x2A, 0x6F, 0x62, - 0x76, 0xBD, 0x24, 0xF6, 0xCA, 0x89, 0x41, 0xC9, 0xB1, 0x52, 0x8F, 0xFD, - 0x27, 0xAD, 0xDA, 0x5B, 0xFF, 0x4F, 0xA5, 0x4A, 0xFC, 0x8C, 0x8E, 0xF3, - 0x45, 0x12, 0x3B, 0x69, 0xC8, 0x05, 0xCF, 0x9B, 0xF7, 0xBC, 0x33, 0xCF, - 0xCE, 0x10, 0x3B, 0xE0, 0x1E, 0x0E, 0x08, 0x62, 0x38, 0x24, 0x07, 0x16, - 0x0B, 0x3E, 0x5F, 0x9C, 0x5B, 0xC8, 0x27, 0x91, 0x77, 0x60, 0x3D, 0x7C, - 0xFB, 0xFD, 0xF7, 0xEB, 0xAF, 0x87, 0x9F, 0x3F, 0x5E, 0xE6, 0xAB, 0x57, - 0x96, 0xF3, 0xFC, 0x19, 0x42, 0xB6, 0xE2, 0x33, 0x1F, 0x8B, 0x59, 0x12, - 0xCE, 0x79, 0x10, 0x15, 0xD2, 0x85, 0x20, 0x0B, 0x2E, 0x28, 0x66, 0x8A, - 0xB5, 0x81, 0xEC, 0x90, 0xB3, 0x78, 0x79, 0x01, 0xA9, 0x48, 0xC5, 0x1B, - 0x79, 0xEC, 0xAC, 0x30, 0x93, 0x58, 0x50, 0x7B, 0x9C, 0x87, 0xB5, 0xCC, - 0x0D, 0x99, 0x8B, 0x8E, 0x54, 0x88, 0xB1, 0x88, 0x0D, 0x38, 0x5E, 0x0B, - 0x1A, 0x98, 0xF8, 0xC4, 0xB4, 0xCB, 0x4A, 0x32, 0x33, 0x1C, 0x98, 0x60, - 0x2C, 0x17, 0x32, 0x8A, 0x65, 0x64, 0x48, 0x45, 0x64, 0x1D, 0x93, 0x70, - 0x4E, 0x84, 0x21, 0xC7, 0x6F, 0x63, 0x6E, 0xCE, 0x30, 0x7E, 0xD7, 0x25, - 0xF2, 0x89, 0xD7, 0x4E, 0xA1, 0x62, 0x5D, 0x19, 0x58, 0x37, 0x14, 0xE1, - 0xF9, 0x5C, 0x1C, 0x58, 0xBB, 0x56, 0xCB, 0x59, 0xB3, 0xAB, 0x26, 0x83, - 0xBA, 0xEC, 0x7C, 0x8A, 0x99, 0x66, 0x2F, 0xCD, 0x56, 0x9A, 0x5D, 0x34, - 0xFB, 0x67, 0xF6, 0xCE, 0x6C, 0x5B, 0xBF, 0x63, 0x3E, 0x4E, 0x6A, 0x17, - 0x10, 0x22, 0x27, 0xE5, 0x70, 0x71, 0xA1, 0x1A, 0xB5, 0xAE, 0x40, 0xB8, - 0x5E, 0x06, 0xD4, 0xA7, 0x2C, 0xD2, 0xD1, 0x7B, 0x4E, 0x4C, 0xB0, 0x0F, - 0xFB, 0x12, 0xA1, 0xE3, 0x77, 0x82, 0xAE, 0x74, 0x34, 0xC5, 0x71, 0x93, - 0x8C, 0xB2, 0x95, 0xA1, 0xF2, 0xD6, 0x49, 0xE7, 0x2D, 0x68, 0xE5, 0x6B, - 0x95, 0x6B, 0x45, 0x6B, 0xE5, 0x6A, 0x75, 0x6A, 0x25, 0x76, 0x17, 0x17, - 0x12, 0x41, 0x7D, 0x4A, 0xC2, 0xFA, 0xCB, 0x5D, 0x40, 0xCE, 0xC4, 0x85, - 0x63, 0x28, 0x83, 0x66, 0x6A, 0xDA, 0x4A, 0xA1, 0xC7, 0xB0, 0xB6, 0x39, - 0x11, 0xB8, 0xB6, 0x2F, 0x44, 0xCE, 0x9B, 0x43, 0x7B, 0xAC, 0xFE, 0x56, - 0xC0, 0xE4, 0xA8, 0x02, 0x50, 0xB6, 0x2A, 0x05, 0x30, 0x9B, 0xC6, 0xAD, - 0xE1, 0x94, 0xA3, 0x3E, 0x18, 0x3E, 0xC5, 0x31, 0xB8, 0xCE, 0x2A, 0x83, - 0x2B, 0xA4, 0x98, 0x5F, 0x37, 0x32, 0x08, 0x2C, 0xE7, 0x18, 0x1E, 0x74, - 0x84, 0x5C, 0x78, 0xD0, 0x27, 0x78, 0x54, 0xEF, 0x15, 0xB3, 0x4B, 0x1A, - 0x70, 0xB6, 0xB0, 0x9C, 0xA7, 0xAA, 0x42, 0xE2, 0x83, 0x68, 0x04, 0x9A, - 0xD1, 0x60, 0x4D, 0xB4, 0xE4, 0x22, 0xCE, 0x54, 0x23, 0x5D, 0x81, 0x50, - 0x03, 0x29, 0x7A, 0x8F, 0x69, 0xD8, 0xEA, 0xBD, 0x86, 0x34, 0x7A, 0x3F, - 0xDD, 0x77, 0xDD, 0xFD, 0xD9, 0x6C, 0x0B, 0x49, 0x29, 0xB6, 0xD0, 0xB5, - 0x3D, 0xAE, 0x11, 0xBB, 0x94, 0x79, 0xEB, 0x85, 0x72, 0xA0, 0x26, 0x6B, - 0xBC, 0x90, 0x0C, 0x12, 0x14, 0x5D, 0x2B, 0x49, 0x9B, 0xAF, 0x7A, 0x6E, - 0x75, 0x58, 0x9C, 0xF7, 0x15, 0xA0, 0xE5, 0x25, 0x38, 0x49, 0x5C, 0xFF, - 0xF6, 0x34, 0x8C, 0x66, 0xC7, 0x47, 0x6F, 0xEF, 0x3F, 0xE2, 0xE5, 0x59, - 0x7A, 0x9D, 0x5B, 0x55, 0x27, 0x65, 0x4A, 0x26, 0xD5, 0x20, 0x6E, 0xFA, - 0xD5, 0xC0, 0xCA, 0x7F, 0x94, 0x52, 0xDD, 0x5D, 0xCF, 0x72, 0xD2, 0xED, - 0x34, 0xDD, 0xDB, 0x49, 0xD3, 0xD4, 0x1E, 0x37, 0x78, 0xDD, 0x52, 0x4F, - 0x0A, 0x41, 0x98, 0x97, 0x58, 0xCE, 0x0B, 0x94, 0xAB, 0xF7, 0xF6, 0xA2, - 0xC1, 0xEA, 0x35, 0x11, 0x1E, 0x61, 0x71, 0xF1, 0xC3, 0x9B, 0xBA, 0x4E, - 0x39, 0xA2, 0x75, 0x51, 0x75, 0xF6, 0xD8, 0xEC, 0x46, 0x13, 0x2A, 0xB6, - 0x87, 0x99, 0x4A, 0x43, 0x0C, 0x97, 0x61, 0xBB, 0xDC, 0x25, 0x4F, 0x77, - 0x0A, 0x16, 0x82, 0xCB, 0x35, 0x55, 0x97, 0x60, 0x67, 0xA0, 0xA2, 0xEA, - 0x60, 0x73, 0xA0, 0x20, 0xA4, 0x4C, 0x46, 0x96, 0x33, 0x1A, 0x48, 0x4F, - 0x89, 0xE0, 0x96, 0xF3, 0x5A, 0x63, 0x3F, 0x1A, 0xD3, 0x38, 0xF1, 0xF2, - 0x38, 0x1A, 0xCE, 0x34, 0xC1, 0xF2, 0x1A, 0x66, 0x81, 0xE5, 0xFC, 0xF9, - 0xF2, 0x1D, 0xE6, 0x4C, 0x83, 0xD1, 0xA3, 0xA2, 0x11, 0x57, 0x0B, 0x18, - 0x2D, 0xEF, 0x2F, 0x9F, 0x20, 0xAB, 0x1F, 0x84, 0x26, 0xCA, 0x06, 0x9D, - 0x56, 0xB7, 0x7A, 0xD9, 0x93, 0x35, 0xB9, 0xC1, 0x5E, 0x39, 0x4C, 0xCB, - 0xB0, 0xD8, 0xD3, 0x4D, 0xE0, 0xFB, 0xCC, 0x47, 0x53, 0xF0, 0x67, 0x6C, - 0x26, 0x50, 0x46, 0x39, 0xEB, 0x21, 0x1C, 0x72, 0x29, 0x28, 0x11, 0x68, - 0x16, 0xFB, 0x1D, 0x8C, 0x89, 0x0F, 0xDF, 0x3F, 0x68, 0x4A, 0xFF, 0x4B, - 0x39, 0x85, 0xEF, 0x3D, 0x72, 0xDF, 0x4B, 0x99, 0x08, 0x3C, 0x87, 0x77, - 0xAC, 0x8F, 0x72, 0xB5, 0xC4, 0xB4, 0x83, 0x70, 0xC6, 0x53, 0x79, 0x8B, - 0xD1, 0x09, 0x8F, 0x97, 0xD4, 0x53, 0x3D, 0x8D, 0x3E, 0xBC, 0x43, 0x6E, - 0x3F, 0x19, 0x0C, 0xF0, 0x96, 0xBC, 0x24, 0x5F, 0xF6, 0xFE, 0x34, 0x70, - 0x17, 0xAA, 0x4B, 0x74, 0xDE, 0x4B, 0x9B, 0xF1, 0x41, 0x34, 0x37, 0x91, - 0x6C, 0xB1, 0xE2, 0x19, 0x33, 0x2F, 0x32, 0x1B, 0x6D, 0xB5, 0xF3, 0xB4, - 0xC7, 0xF9, 0xA7, 0xBA, 0xF3, 0x0F, 0xD5, 0xFA, 0xC0, 0xFA}; -const uint8_t g_ruRU_Locale[] = { - 0x78, 0x9C, 0xAD, 0x57, 0x4D, 0x4F, 0x13, 0x41, 0x18, 0x3E, 0x63, 0xE2, - 0x7F, 0x98, 0x6C, 0x24, 0x68, 0x02, 0xAD, 0x1E, 0x25, 0x65, 0x13, 0x22, - 0x0A, 0x06, 0xD7, 0x90, 0x16, 0x34, 0x72, 0x31, 0xDB, 0xDD, 0xA1, 0x5D, - 0xE8, 0xEE, 0x90, 0xE9, 0x6E, 0xB0, 0x7B, 0x2A, 0x85, 0xE8, 0x05, 0x25, - 0xE1, 0xA0, 0x47, 0xF4, 0xE4, 0xC9, 0x50, 0xBE, 0x12, 0x82, 0xB6, 0x24, - 0xFE, 0x82, 0xD9, 0xFF, 0x60, 0xD4, 0x9F, 0xE1, 0x3B, 0xFB, 0xD1, 0xEE, - 0xB7, 0xC5, 0xD8, 0x1E, 0x3A, 0xF3, 0x3E, 0xCF, 0xF3, 0xCE, 0xFB, 0xB5, - 0xD3, 0xB6, 0xD4, 0x20, 0x8A, 0xDC, 0xC0, 0xC8, 0x90, 0x75, 0x3C, 0x23, - 0x50, 0xEB, 0x65, 0x79, 0x45, 0x40, 0x2A, 0x6E, 0x2A, 0x33, 0xC2, 0x8F, - 0xAB, 0xDD, 0xDF, 0x47, 0x5F, 0x6E, 0xC3, 0xC7, 0xAF, 0xDE, 0x87, 0x9F, - 0xEF, 0x8F, 0xEE, 0x08, 0xE2, 0xCD, 0x1B, 0x08, 0x95, 0x38, 0xDF, 0x50, - 0x65, 0x5A, 0x69, 0xE9, 0x55, 0xD2, 0x68, 0xFA, 0xD2, 0x1A, 0xC5, 0x35, - 0x42, 0x35, 0xD9, 0xE0, 0xAC, 0x31, 0x54, 0xD2, 0x89, 0x61, 0xD6, 0x9F, - 0x02, 0xD4, 0xE4, 0xFB, 0x31, 0x6F, 0x2F, 0x3A, 0xFB, 0xAC, 0xC7, 0x4E, - 0x58, 0xD7, 0x69, 0x3B, 0xFB, 0xA5, 0xA2, 0x67, 0x0B, 0xC3, 0xBB, 0xEC, - 0x9C, 0x9D, 0x38, 0x6D, 0xD6, 0x65, 0x5F, 0x53, 0x09, 0xEC, 0x9B, 0xAB, - 0xED, 0xB0, 0x6E, 0x1A, 0xD8, 0x65, 0x57, 0xA0, 0x3D, 0xCF, 0xD3, 0xA6, - 0x02, 0x17, 0xCE, 0x3B, 0xD6, 0xCB, 0x86, 0x32, 0xDC, 0x75, 0x21, 0x91, - 0x53, 0x67, 0xC7, 0xD9, 0xCE, 0x08, 0xC7, 0xD9, 0x86, 0x50, 0x7A, 0x4E, - 0x07, 0x72, 0x3E, 0xCE, 0xC8, 0x97, 0xF5, 0xD9, 0x65, 0x3E, 0xA1, 0xC7, - 0xFA, 0x79, 0xF0, 0x19, 0x1C, 0x71, 0x09, 0x91, 0xC4, 0x09, 0xC8, 0x5F, - 0x0F, 0x1A, 0x10, 0x6E, 0x08, 0x92, 0xAB, 0x55, 0x3A, 0x23, 0xDC, 0x13, - 0x92, 0x9D, 0x29, 0xE4, 0x34, 0x25, 0x0D, 0x1B, 0xA1, 0x1F, 0x99, 0xB2, - 0xFF, 0xDD, 0x8A, 0xD4, 0xD8, 0xFD, 0x1E, 0xA4, 0x06, 0xE1, 0x16, 0x3F, - 0x15, 0xF1, 0xAB, 0x9E, 0x8A, 0xB9, 0x25, 0x2F, 0xE4, 0xD7, 0x5A, 0x95, - 0x5B, 0xA1, 0xD1, 0x87, 0x9D, 0x08, 0x01, 0xF6, 0x21, 0x98, 0x4B, 0x3E, - 0x9F, 0x7E, 0x50, 0x7B, 0xEC, 0xBC, 0x54, 0xE4, 0xD8, 0x90, 0x74, 0x05, - 0x31, 0xF5, 0x00, 0x3C, 0x73, 0x87, 0x78, 0x0F, 0xD6, 0x17, 0xEC, 0x32, - 0x4E, 0x3A, 0x81, 0x72, 0xF7, 0xC1, 0x4F, 0x1A, 0x08, 0xC3, 0xD8, 0x76, - 0xF5, 0xDD, 0x38, 0xF0, 0x06, 0xCE, 0xED, 0x40, 0x14, 0xE7, 0x40, 0x38, - 0x4D, 0x9C, 0xEB, 0xEC, 0x03, 0x08, 0x0E, 0x9D, 0xD7, 0x49, 0xE5, 0xB6, - 0xB3, 0xC3, 0x8E, 0xE1, 0xDD, 0xF7, 0xDA, 0xEC, 0x83, 0xC8, 0x5D, 0xA5, - 0xE4, 0x1C, 0x9B, 0x2E, 0xD7, 0xFF, 0x81, 0xB3, 0x1D, 0x3F, 0xF2, 0x90, - 0xF5, 0xE2, 0xA6, 0x03, 0xA7, 0x13, 0x37, 0x7D, 0x72, 0xDA, 0x71, 0xD3, - 0xE7, 0x24, 0xEB, 0x30, 0x45, 0xC8, 0x8E, 0xB3, 0x43, 0xD5, 0x31, 0xD5, - 0x54, 0x0D, 0xEB, 0xE1, 0xEB, 0xC9, 0x37, 0x89, 0xB3, 0x12, 0xB4, 0x33, - 0xD8, 0x44, 0xA1, 0xA5, 0x18, 0x84, 0x86, 0xDB, 0x90, 0x73, 0x4C, 0xE5, - 0x90, 0x5F, 0xD8, 0xF1, 0x91, 0xE9, 0x23, 0xD6, 0x2B, 0x38, 0x6F, 0x61, - 0x6C, 0xB8, 0x61, 0x88, 0x44, 0x8D, 0xC8, 0x5D, 0x05, 0x6A, 0xB8, 0x6A, - 0x8B, 0xB1, 0xBB, 0xD6, 0xB3, 0xAA, 0xB2, 0x89, 0x97, 0x64, 0xD3, 0xC4, - 0xD4, 0x18, 0xD4, 0x7E, 0x60, 0xF1, 0xAF, 0xE3, 0x35, 0xAB, 0xD1, 0x10, - 0xC4, 0x39, 0x24, 0xC1, 0x0B, 0xBD, 0x80, 0x17, 0x9A, 0x80, 0x27, 0x64, - 0x82, 0x57, 0x62, 0x40, 0xCD, 0xD2, 0x36, 0x88, 0x51, 0xFB, 0x57, 0xAD, - 0x8E, 0x55, 0x90, 0xCE, 0x15, 0x24, 0xA9, 0xC0, 0x95, 0x23, 0x69, 0x9A, - 0x75, 0x42, 0xCD, 0xA1, 0x2A, 0xAE, 0x41, 0x28, 0x62, 0xF1, 0x8B, 0x60, - 0x6A, 0x7A, 0xAC, 0x08, 0x21, 0x4B, 0xA4, 0x08, 0x0B, 0xD3, 0x92, 0x34, - 0x5D, 0xA9, 0xA0, 0xD5, 0x52, 0x31, 0x44, 0xC9, 0xD2, 0x78, 0xC9, 0x5F, - 0x4F, 0xE3, 0x26, 0xED, 0x4B, 0x46, 0x12, 0xF8, 0x19, 0x73, 0x49, 0x9C, - 0xCF, 0xB3, 0x8D, 0xE5, 0xE6, 0xB7, 0x7C, 0x19, 0xAC, 0xC1, 0x1C, 0xCC, - 0xCB, 0xC6, 0xFA, 0xC6, 0x82, 0xDE, 0xAC, 0x3C, 0x9C, 0x7B, 0xB4, 0xF5, - 0xFC, 0x55, 0x7D, 0xD1, 0x5E, 0xF5, 0x8A, 0x14, 0x26, 0xB9, 0x4A, 0xC3, - 0xD2, 0xAB, 0x98, 0x46, 0x2B, 0x15, 0xB1, 0xF9, 0x21, 0x81, 0x0D, 0x66, - 0x59, 0x11, 0x44, 0x7B, 0xD2, 0xB6, 0xEF, 0x17, 0x6C, 0xDB, 0x2E, 0x15, - 0x23, 0xBC, 0x6C, 0xA9, 0x62, 0x51, 0x8A, 0x0D, 0xA5, 0x35, 0xD4, 0xDE, - 0x1A, 0x59, 0xBB, 0x89, 0xA9, 0x82, 0x0D, 0xD3, 0x97, 0x8E, 0x27, 0x75, - 0xBC, 0x1E, 0x89, 0x1C, 0x06, 0x79, 0x0D, 0x53, 0x1D, 0x8B, 0x9A, 0x7C, - 0xF7, 0x2A, 0x56, 0x34, 0x5D, 0x86, 0x21, 0x98, 0x0C, 0xBC, 0x78, 0x70, - 0xA6, 0xA0, 0x46, 0x89, 0xB5, 0xA9, 0xF1, 0x11, 0xF8, 0xFE, 0x71, 0x44, - 0xC9, 0x20, 0x85, 0xF1, 0x11, 0x05, 0xBA, 0x66, 0x58, 0x4D, 0x41, 0x9C, - 0x1A, 0x91, 0x6E, 0x63, 0x4A, 0x04, 0xF1, 0x6E, 0x82, 0x3D, 0xAC, 0x4C, - 0xA4, 0xE1, 0x41, 0x37, 0x22, 0xA5, 0x89, 0x1A, 0x83, 0x29, 0x74, 0x37, - 0x82, 0xE8, 0x7E, 0x47, 0x47, 0x19, 0x39, 0x2A, 0xAD, 0x49, 0xF8, 0x42, - 0x10, 0xCB, 0x2B, 0xE5, 0x6B, 0xC8, 0xC2, 0x9D, 0x48, 0x88, 0xDC, 0xAB, - 0x2E, 0x11, 0x37, 0x7F, 0xCA, 0x5B, 0x9B, 0x78, 0x4D, 0x56, 0x82, 0xBB, - 0x35, 0xD8, 0xFA, 0x3E, 0xA5, 0x16, 0xFC, 0xE0, 0x54, 0xD1, 0x12, 0xD4, - 0xA7, 0x98, 0x4E, 0xD0, 0x0C, 0x8D, 0x18, 0x39, 0x84, 0x07, 0xC4, 0xA2, - 0x1A, 0xA6, 0xA8, 0x62, 0xAA, 0x19, 0x8C, 0x59, 0x95, 0x54, 0x31, 0x5A, - 0xD2, 0xFE, 0x4A, 0x59, 0xC0, 0x55, 0x8A, 0xB7, 0x72, 0x29, 0xB3, 0x54, - 0xAE, 0xC2, 0x23, 0x96, 0x47, 0x59, 0xAE, 0xCB, 0x5A, 0x06, 0x61, 0x91, - 0xD8, 0xD6, 0x86, 0x8C, 0xE6, 0x89, 0x59, 0xD7, 0x14, 0x9E, 0xD3, 0xD4, - 0xB3, 0xC7, 0x48, 0xCA, 0x27, 0x43, 0x01, 0x94, 0x3A, 0x09, 0xC8, 0xE5, - 0xDC, 0xA3, 0x81, 0x5B, 0xE3, 0x59, 0xA2, 0x27, 0xB9, 0xB4, 0x0A, 0x19, - 0x89, 0x26, 0xB5, 0x2C, 0xA3, 0xB6, 0x4E, 0x5C, 0xA6, 0x17, 0xA4, 0x7B, - 0xB3, 0x85, 0xFA, 0x59, 0x2A, 0x7A, 0xFF, 0x3D, 0xC4, 0x3F, 0xDE, 0xCB, - 0x8B, 0xC4}; -static IFX_Locale* XFA_GetLocaleFromBuffer(const uint8_t* pBuf, int nBufLen) { - if (pBuf == NULL || nBufLen <= 0) { - return NULL; - } - CFX_GEModule* pGeModule = CFX_GEModule::Get(); - if (!pGeModule) { - return NULL; - } - CCodec_ModuleMgr* pCodecMgr = pGeModule->GetCodecModule(); - if (!pCodecMgr) { - return NULL; - } - CXML_Element* pLocale = NULL; - uint8_t* pOut = NULL; - FX_DWORD dwSize; - pCodecMgr->GetFlateModule()->FlateOrLZWDecode(FALSE, pBuf, nBufLen, TRUE, 0, - 0, 0, 0, 0, pOut, dwSize); - if (pOut) { - pLocale = CXML_Element::Parse(pOut, dwSize); - FX_Free(pOut); - } - if (pLocale) { - return new CXFA_XMLLocale(pLocale); - } - return NULL; -} -static FX_WORD XFA_GetLanguage(CFX_WideString wsLanguage) { - FX_WORD dwLangueID = XFA_LANGID_en_US; - if (wsLanguage.GetLength() < 2) { - return dwLangueID; - } - wsLanguage.MakeLower(); - FX_DWORD dwIDFirst = wsLanguage.GetAt(0) << 8 | wsLanguage.GetAt(1); - FX_DWORD dwIDSecond = wsLanguage.GetLength() >= 5 - ? wsLanguage.GetAt(3) << 8 | wsLanguage.GetAt(4) - : 0; - switch (dwIDFirst) { - case FXBSTR_ID(0, 0, 'z', 'h'): { - if (dwIDSecond == FXBSTR_ID(0, 0, 'c', 'n')) { - dwLangueID = XFA_LANGID_zh_CN; - } else if (dwIDSecond == FXBSTR_ID(0, 0, 't', 'w')) { - dwLangueID = XFA_LANGID_zh_TW; - } else if (dwIDSecond == FXBSTR_ID(0, 0, 'h', 'k')) { - dwLangueID = XFA_LANGID_zh_HK; - } - } break; - case FXBSTR_ID(0, 0, 'j', 'a'): - dwLangueID = XFA_LANGID_ja_JP; - break; - case FXBSTR_ID(0, 0, 'k', 'o'): - dwLangueID = XFA_LANGID_ko_KR; - break; - case FXBSTR_ID(0, 0, 'e', 'n'): { - if (dwIDSecond == FXBSTR_ID(0, 0, 'g', 'b')) { - dwLangueID = XFA_LANGID_en_GB; - } else { - dwLangueID = XFA_LANGID_en_US; - } - } break; - case FXBSTR_ID(0, 0, 'd', 'e'): - dwLangueID = XFA_LANGID_de_DE; - break; - case FXBSTR_ID(0, 0, 'f', 'r'): - dwLangueID = XFA_LANGID_fr_FR; - break; - case FXBSTR_ID(0, 0, 'e', 's'): { - if (dwIDSecond == FXBSTR_ID(0, 0, 'e', 's')) { - dwLangueID = XFA_LANGID_es_ES; - } else { - dwLangueID = XFA_LANGID_es_LA; - } - } break; - case FXBSTR_ID(0, 0, 'i', 't'): - dwLangueID = XFA_LANGID_it_IT; - break; - case FXBSTR_ID(0, 0, 'p', 't'): - dwLangueID = XFA_LANGID_pt_BR; - break; - case FXBSTR_ID(0, 0, 'n', 'l'): - dwLangueID = XFA_LANGID_nl_NL; - break; - case FXBSTR_ID(0, 0, 'r', 'u'): - dwLangueID = XFA_LANGID_ru_RU; - break; - } - return dwLangueID; -} -CXFA_LocaleMgr::CXFA_LocaleMgr(CXFA_Node* pLocaleSet, CFX_WideString wsDeflcid) - : m_dwLocaleFlags(0x00) { - m_dwDeflcid = XFA_GetLanguage(wsDeflcid); - CXFA_Node* pNodeLocale = NULL; - if (pLocaleSet && - (pNodeLocale = pLocaleSet->GetNodeItem(XFA_NODEITEM_FirstChild))) { - while (pNodeLocale) { - m_LocaleArray.Add(new CXFA_NodeLocale(pNodeLocale)); - pNodeLocale = pNodeLocale->GetNodeItem(XFA_NODEITEM_NextSibling); - } - } - m_pDefLocale = GetLocaleByName(wsDeflcid); -} -CXFA_LocaleMgr::~CXFA_LocaleMgr() { - int32_t iCount = m_LocaleArray.GetSize(); - for (int32_t i = 0; i < iCount; i++) { - ((IFX_Locale*)m_LocaleArray[i])->Release(); - } - int32_t iXmls = m_XMLLocaleArray.GetSize(); - for (int32_t j = 0; j < iXmls; j++) { - ((IFX_Locale*)m_XMLLocaleArray[j])->Release(); - } -} -void CXFA_LocaleMgr::Release() { - delete this; -} -FX_WORD CXFA_LocaleMgr::GetDefLocaleID() { - return m_dwDeflcid; -} -IFX_Locale* CXFA_LocaleMgr::GetDefLocale() { - if (m_pDefLocale) { - return m_pDefLocale; - } else if (m_LocaleArray.GetSize()) { - return (IFX_Locale*)m_LocaleArray[0]; - } else if (m_XMLLocaleArray.GetSize()) { - return (IFX_Locale*)m_XMLLocaleArray[0]; - } - m_pDefLocale = GetLocale(m_dwDeflcid); - if (m_pDefLocale) - m_XMLLocaleArray.Add(m_pDefLocale); - return m_pDefLocale; -} -IFX_Locale* CXFA_LocaleMgr::GetLocale(FX_WORD lcid) { - IFX_Locale* pLocal = NULL; - switch (lcid) { - case XFA_LANGID_zh_CN: - pLocal = XFA_GetLocaleFromBuffer(g_zhCN_Locale, sizeof(g_zhCN_Locale)); - break; - case XFA_LANGID_zh_TW: - pLocal = XFA_GetLocaleFromBuffer(g_zhTW_Locale, sizeof(g_zhTW_Locale)); - break; - case XFA_LANGID_zh_HK: - pLocal = XFA_GetLocaleFromBuffer(g_zhHK_Locale, sizeof(g_zhHK_Locale)); - break; - case XFA_LANGID_ja_JP: - pLocal = XFA_GetLocaleFromBuffer(g_jaJP_Locale, sizeof(g_jaJP_Locale)); - break; - case XFA_LANGID_ko_KR: - pLocal = XFA_GetLocaleFromBuffer(g_koKR_Locale, sizeof(g_koKR_Locale)); - break; - case XFA_LANGID_en_GB: - pLocal = XFA_GetLocaleFromBuffer(g_enGB_Locale, sizeof(g_enGB_Locale)); - break; - case XFA_LANGID_es_LA: - pLocal = XFA_GetLocaleFromBuffer(g_esLA_Locale, sizeof(g_esLA_Locale)); - break; - case XFA_LANGID_es_ES: - pLocal = XFA_GetLocaleFromBuffer(g_esES_Locale, sizeof(g_esES_Locale)); - break; - case XFA_LANGID_de_DE: - pLocal = XFA_GetLocaleFromBuffer(g_deDE_Loacale, sizeof(g_deDE_Loacale)); - break; - case XFA_LANGID_fr_FR: - pLocal = XFA_GetLocaleFromBuffer(g_frFR_Locale, sizeof(g_frFR_Locale)); - break; - case XFA_LANGID_it_IT: - pLocal = XFA_GetLocaleFromBuffer(g_itIT_Locale, sizeof(g_itIT_Locale)); - break; - case XFA_LANGID_pt_BR: - pLocal = XFA_GetLocaleFromBuffer(g_ptBR_Locale, sizeof(g_ptBR_Locale)); - break; - case XFA_LANGID_nl_NL: - pLocal = XFA_GetLocaleFromBuffer(g_nlNL_Locale, sizeof(g_nlNL_Locale)); - break; - case XFA_LANGID_ru_RU: - pLocal = XFA_GetLocaleFromBuffer(g_ruRU_Locale, sizeof(g_ruRU_Locale)); - break; - case XFA_LANGID_en_US: - default: - pLocal = XFA_GetLocaleFromBuffer(g_enUS_Locale, sizeof(g_enUS_Locale)); - break; - } - return pLocal; -} -IFX_Locale* CXFA_LocaleMgr::GetLocaleByName( - const CFX_WideStringC& wsLocaleName) { - int32_t iCount = m_LocaleArray.GetSize(); - int32_t i = 0; - for (i = 0; i < iCount; i++) { - IFX_Locale* pLocale = ((IFX_Locale*)m_LocaleArray[i]); - if (pLocale->GetName() == wsLocaleName) { - return pLocale; - } - } - int32_t iLen = wsLocaleName.GetLength(); - if (iLen < 2) { - return NULL; - } - iCount = m_XMLLocaleArray.GetSize(); - for (i = 0; i < iCount; i++) { - IFX_Locale* pLocale = ((IFX_Locale*)m_XMLLocaleArray[i]); - if (pLocale->GetName() == wsLocaleName) { - return pLocale; - } - } - FX_WORD dwLangueID = XFA_GetLanguage(wsLocaleName); - IFX_Locale* pLocale = GetLocale(dwLangueID); - if (pLocale) - m_XMLLocaleArray.Add(pLocale); - return pLocale; -} -void CXFA_LocaleMgr::SetDefLocale(IFX_Locale* pLocale) { - m_pDefLocale = pLocale; -} -CFX_WideStringC CXFA_LocaleMgr::GetConfigLocaleName(CXFA_Node* pConfig) { - if (!(m_dwLocaleFlags & 0x01)) { - m_wsConfigLocale.Empty(); - if (pConfig) { - CXFA_Node* pChildfConfig = - pConfig->GetFirstChildByClass(XFA_ELEMENT_Acrobat); - if (!pChildfConfig) { - pChildfConfig = pConfig->GetFirstChildByClass(XFA_ELEMENT_Present); - } - CXFA_Node* pCommon = - pChildfConfig - ? pChildfConfig->GetFirstChildByClass(XFA_ELEMENT_Common) - : NULL; - CXFA_Node* pLocale = - pCommon ? pCommon->GetFirstChildByClass(XFA_ELEMENT_Locale) : NULL; - if (pLocale) { - pLocale->TryCData(XFA_ATTRIBUTE_Value, m_wsConfigLocale, FALSE); - } - } - m_dwLocaleFlags |= 0x01; - } - return m_wsConfigLocale; -} -static CXFA_TimeZoneProvider* g_pProvider = NULL; -IXFA_TimeZoneProvider* IXFA_TimeZoneProvider::Create() { - FXSYS_assert(!g_pProvider); - g_pProvider = new CXFA_TimeZoneProvider(); - return g_pProvider; -} -IXFA_TimeZoneProvider* IXFA_TimeZoneProvider::Get() { - if (!g_pProvider) { - g_pProvider = new CXFA_TimeZoneProvider(); - } - return g_pProvider; -} -void IXFA_TimeZoneProvider::Destroy() { - delete g_pProvider; - g_pProvider = NULL; -} -#include -CXFA_TimeZoneProvider::CXFA_TimeZoneProvider() { -#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ - _tzset(); - m_tz.tzHour = (int8_t)(_timezone / 3600 * -1); - m_tz.tzMinute = (int8_t)((FXSYS_abs(_timezone) % 3600) / 60); -#else - tzset(); - m_tz.tzHour = (int8_t)(timezone / 3600 * -1); - m_tz.tzMinute = (int8_t)((FXSYS_abs((int)timezone) % 3600) / 60); -#endif -} -CXFA_TimeZoneProvider::~CXFA_TimeZoneProvider() {} -void CXFA_TimeZoneProvider::SetTimeZone(FX_TIMEZONE& tz) { - m_tz = tz; -} -void CXFA_TimeZoneProvider::GetTimeZone(FX_TIMEZONE& tz) { - tz = m_tz; -} diff --git a/xfa/src/fxfa/parser/xfa_localemgr.h b/xfa/src/fxfa/parser/xfa_localemgr.h deleted file mode 100644 index 0af6f5f2d3..0000000000 --- a/xfa/src/fxfa/parser/xfa_localemgr.h +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXFA_PARSER_XFA_LOCALEMGR_H_ -#define XFA_SRC_FXFA_PARSER_XFA_LOCALEMGR_H_ - -#include "xfa/include/fxfa/fxfa_objectacc.h" -#include "xfa/src/fgas/localization/fgas_datetime.h" -#include "xfa/src/fgas/localization/fgas_locale.h" -#include "xfa/src/fxfa/parser/xfa_localemgr.h" - -class CXFA_Node; -class IFX_Locale; - -#define XFA_LANGID_zh_CN 0x0804 -#define XFA_LANGID_zh_TW 0x0404 -#define XFA_LANGID_zh_HK 0x0c04 -#define XFA_LANGID_ja_JP 0x0411 -#define XFA_LANGID_ko_KR 0x0412 -#define XFA_LANGID_en_US 0x0409 -#define XFA_LANGID_en_GB 0x0809 -#define XFA_LANGID_es_ES 0x0c0a -#define XFA_LANGID_es_LA 0x080a -#define XFA_LANGID_de_DE 0x0407 -#define XFA_LANGID_fr_FR 0x040c -#define XFA_LANGID_it_IT 0x0410 -#define XFA_LANGID_pt_BR 0x0416 -#define XFA_LANGID_nl_NL 0x0413 -#define XFA_LANGID_ru_RU 0x0419 - -class CXFA_LocaleMgr : public IFX_LocaleMgr { - public: - CXFA_LocaleMgr(CXFA_Node* pLocaleSet, CFX_WideString wsDeflcid); - virtual void Release(); - virtual FX_WORD GetDefLocaleID(); - virtual IFX_Locale* GetDefLocale(); - virtual IFX_Locale* GetLocale(FX_WORD lcid); - virtual IFX_Locale* GetLocaleByName(const CFX_WideStringC& wsLocaleName); - ~CXFA_LocaleMgr(); - void SetDefLocale(IFX_Locale* pLocale); - CFX_WideStringC GetConfigLocaleName(CXFA_Node* pConfig); - - protected: - CFX_PtrArray m_LocaleArray; - CFX_PtrArray m_XMLLocaleArray; - IFX_Locale* m_pDefLocale; - CFX_WideString m_wsConfigLocale; - FX_WORD m_dwDeflcid; - FX_WORD m_dwLocaleFlags; -}; - -class IXFA_TimeZoneProvider { - public: - static IXFA_TimeZoneProvider* Create(); - static IXFA_TimeZoneProvider* Get(); - static void Destroy(); - - virtual ~IXFA_TimeZoneProvider() {} - - virtual void SetTimeZone(FX_TIMEZONE& tz) = 0; - - virtual void GetTimeZone(FX_TIMEZONE& tz) = 0; -}; -class CXFA_TimeZoneProvider : public IXFA_TimeZoneProvider { - public: - CXFA_TimeZoneProvider(); - virtual ~CXFA_TimeZoneProvider(); - virtual void SetTimeZone(FX_TIMEZONE& tz); - virtual void GetTimeZone(FX_TIMEZONE& tz); - - private: - FX_TIMEZONE m_tz; -}; - -#endif // XFA_SRC_FXFA_PARSER_XFA_LOCALEMGR_H_ diff --git a/xfa/src/fxfa/parser/xfa_localevalue.cpp b/xfa/src/fxfa/parser/xfa_localevalue.cpp deleted file mode 100644 index 5b9dc27681..0000000000 --- a/xfa/src/fxfa/parser/xfa_localevalue.cpp +++ /dev/null @@ -1,981 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fxfa/parser/xfa_localevalue.h" - -#include "xfa/src/fxfa/fm2js/xfa_fm2jsapi.h" -#include "xfa/src/fxfa/parser/xfa_docdata.h" -#include "xfa/src/fxfa/parser/xfa_doclayout.h" -#include "xfa/src/fxfa/parser/xfa_document.h" -#include "xfa/src/fxfa/parser/xfa_localemgr.h" -#include "xfa/src/fxfa/parser/xfa_object.h" -#include "xfa/src/fxfa/parser/xfa_parser.h" -#include "xfa/src/fxfa/parser/xfa_script.h" -#include "xfa/src/fxfa/parser/xfa_utils.h" - -static const FX_DOUBLE fraction_scales[] = {0.1, - 0.01, - 0.001, - 0.0001, - 0.00001, - 0.000001, - 0.0000001, - 0.00000001, - 0.000000001, - 0.0000000001, - 0.00000000001, - 0.000000000001, - 0.0000000000001, - 0.00000000000001, - 0.000000000000001, - 0.0000000000000001}; -CXFA_LocaleValue::CXFA_LocaleValue() { - m_dwType = XFA_VT_NULL; - m_bValid = TRUE; - m_pLocaleMgr = NULL; -} -CXFA_LocaleValue::CXFA_LocaleValue(const CXFA_LocaleValue& value) { - m_dwType = XFA_VT_NULL; - m_bValid = TRUE; - m_pLocaleMgr = NULL; - *this = value; -} -CXFA_LocaleValue::CXFA_LocaleValue(FX_DWORD dwType, - CXFA_LocaleMgr* pLocaleMgr) { - m_dwType = dwType; - m_bValid = (m_dwType != XFA_VT_NULL); - m_pLocaleMgr = pLocaleMgr; -} -CXFA_LocaleValue::CXFA_LocaleValue(FX_DWORD dwType, - const CFX_WideString& wsValue, - CXFA_LocaleMgr* pLocaleMgr) { - m_wsValue = wsValue; - m_dwType = dwType; - m_pLocaleMgr = pLocaleMgr; - m_bValid = ValidateCanonicalValue(wsValue, dwType); -} -CXFA_LocaleValue::CXFA_LocaleValue(FX_DWORD dwType, - const CFX_WideString& wsValue, - const CFX_WideString& wsFormat, - IFX_Locale* pLocale, - CXFA_LocaleMgr* pLocaleMgr) { - m_pLocaleMgr = pLocaleMgr; - m_bValid = TRUE; - m_dwType = dwType; - m_bValid = ParsePatternValue(wsValue, wsFormat, pLocale); -} -CXFA_LocaleValue& CXFA_LocaleValue::operator=(const CXFA_LocaleValue& value) { - m_wsValue = value.m_wsValue; - m_dwType = value.m_dwType; - m_bValid = value.m_bValid; - m_pLocaleMgr = value.m_pLocaleMgr; - return *this; -} -CXFA_LocaleValue::~CXFA_LocaleValue() {} -static FX_LOCALECATEGORY XFA_ValugeCategory(FX_LOCALECATEGORY eCategory, - FX_DWORD dwValueType) { - if (eCategory == FX_LOCALECATEGORY_Unknown) { - switch (dwValueType) { - case XFA_VT_BOOLEAN: - case XFA_VT_INTEGER: - case XFA_VT_DECIMAL: - case XFA_VT_FLOAT: - return FX_LOCALECATEGORY_Num; - case XFA_VT_TEXT: - return FX_LOCALECATEGORY_Text; - case XFA_VT_DATE: - return FX_LOCALECATEGORY_Date; - case XFA_VT_TIME: - return FX_LOCALECATEGORY_Time; - case XFA_VT_DATETIME: - return FX_LOCALECATEGORY_DateTime; - } - } - return eCategory; -} -FX_BOOL CXFA_LocaleValue::ValidateValue(const CFX_WideString& wsValue, - const CFX_WideString& wsPattern, - IFX_Locale* pLocale, - CFX_WideString* pMatchFormat) { - CFX_WideString wsOutput; - IFX_Locale* locale = m_pLocaleMgr->GetDefLocale(); - if (pLocale) { - m_pLocaleMgr->SetDefLocale(pLocale); - } - IFX_FormatString* pFormat = IFX_FormatString::Create(m_pLocaleMgr, FALSE); - CFX_WideStringArray wsPatterns; - pFormat->SplitFormatString(wsPattern, wsPatterns); - FX_BOOL bRet = FALSE; - int32_t iCount = wsPatterns.GetSize(); - int32_t i = 0; - for (; i < iCount && !bRet; i++) { - CFX_WideString wsFormat = wsPatterns[i]; - FX_LOCALECATEGORY eCategory = pFormat->GetCategory(wsFormat); - eCategory = XFA_ValugeCategory(eCategory, m_dwType); - switch (eCategory) { - case FX_LOCALECATEGORY_Null: - bRet = pFormat->ParseNull(wsValue, wsFormat); - if (!bRet) { - bRet = wsValue.IsEmpty(); - } - break; - case FX_LOCALECATEGORY_Zero: - bRet = pFormat->ParseZero(wsValue, wsFormat); - if (!bRet) { - bRet = wsValue == FX_WSTRC(L"0"); - } - break; - case FX_LOCALECATEGORY_Num: { - CFX_WideString fNum; - bRet = pFormat->ParseNum(wsValue, wsFormat, fNum); - if (!bRet) { - bRet = pFormat->FormatNum(wsValue, wsFormat, wsOutput); - } - break; - } - case FX_LOCALECATEGORY_Text: - bRet = pFormat->ParseText(wsValue, wsFormat, wsOutput); - wsOutput.Empty(); - if (!bRet) { - bRet = pFormat->FormatText(wsValue, wsFormat, wsOutput); - } - break; - case FX_LOCALECATEGORY_Date: { - CFX_Unitime dt; - bRet = ValidateCanonicalDate(wsValue, dt); - if (!bRet) { - bRet = pFormat->ParseDateTime(wsValue, wsFormat, FX_DATETIMETYPE_Date, - dt); - if (!bRet) { - bRet = pFormat->FormatDateTime(wsValue, wsFormat, wsOutput, - FX_DATETIMETYPE_Date); - } - } - break; - } - case FX_LOCALECATEGORY_Time: { - CFX_Unitime dt; - bRet = - pFormat->ParseDateTime(wsValue, wsFormat, FX_DATETIMETYPE_Time, dt); - if (!bRet) { - bRet = pFormat->FormatDateTime(wsValue, wsFormat, wsOutput, - FX_DATETIMETYPE_Time); - } - break; - } - case FX_LOCALECATEGORY_DateTime: { - CFX_Unitime dt; - bRet = pFormat->ParseDateTime(wsValue, wsFormat, - FX_DATETIMETYPE_DateTime, dt); - if (!bRet) { - bRet = pFormat->FormatDateTime(wsValue, wsFormat, wsOutput, - FX_DATETIMETYPE_DateTime); - } - break; - } - default: - bRet = FALSE; - break; - } - } - if (bRet && pMatchFormat) { - *pMatchFormat = wsPatterns[i - 1]; - } - pFormat->Release(); - if (pLocale) { - m_pLocaleMgr->SetDefLocale(locale); - } - return bRet; -} -CFX_WideString CXFA_LocaleValue::GetValue() const { - return m_wsValue; -} -FX_DWORD CXFA_LocaleValue::GetType() const { - return m_dwType; -} -void CXFA_LocaleValue::SetValue(const CFX_WideString& wsValue, - FX_DWORD dwType) { - m_wsValue = wsValue; - m_dwType = dwType; -} -CFX_WideString CXFA_LocaleValue::GetText() const { - if (m_bValid && m_dwType == XFA_VT_TEXT) { - return m_wsValue; - } - return CFX_WideString(); -} -FX_FLOAT CXFA_LocaleValue::GetNum() const { - if (m_bValid && (m_dwType == XFA_VT_BOOLEAN || m_dwType == XFA_VT_INTEGER || - m_dwType == XFA_VT_DECIMAL || m_dwType == XFA_VT_FLOAT)) { - int64_t nIntegral = 0; - FX_DWORD dwFractional = 0; - int32_t nExponent = 0; - int cc = 0; - FX_BOOL bNegative = FALSE, bExpSign = FALSE; - const FX_WCHAR* str = (const FX_WCHAR*)m_wsValue; - int len = m_wsValue.GetLength(); - while (XFA_IsSpace(str[cc]) && cc < len) { - cc++; - } - if (cc >= len) { - return 0; - } - if (str[0] == '+') { - cc++; - } else if (str[0] == '-') { - bNegative = TRUE; - cc++; - } - int nIntegralLen = 0; - while (cc < len) { - if (str[cc] == '.' || !XFA_IsDigit(str[cc]) || nIntegralLen > 17) { - break; - } - nIntegral = nIntegral * 10 + str[cc] - '0'; - cc++; - nIntegralLen++; - } - nIntegral = bNegative ? -nIntegral : nIntegral; - int scale = 0; - double fraction = 0.0; - if (cc < len && str[cc] == '.') { - cc++; - while (cc < len) { - fraction += fraction_scales[scale] * (str[cc] - '0'); - scale++; - cc++; - if (scale == sizeof fraction_scales / sizeof(double) || - !XFA_IsDigit(str[cc])) { - break; - } - } - dwFractional = (FX_DWORD)(fraction * 4294967296.0); - } - if (cc < len && (str[cc] == 'E' || str[cc] == 'e')) { - cc++; - if (cc < len) { - if (str[cc] == '+') { - cc++; - } else if (str[cc] == '-') { - bExpSign = TRUE; - cc++; - } - } - while (cc < len) { - if (str[cc] == '.' || !XFA_IsDigit(str[cc])) { - break; - } - nExponent = nExponent * 10 + str[cc] - '0'; - cc++; - } - nExponent = bExpSign ? -nExponent : nExponent; - } - FX_FLOAT fValue = (FX_FLOAT)(dwFractional / 4294967296.0); - fValue = nIntegral + (nIntegral >= 0 ? fValue : -fValue); - if (nExponent != 0) { - fValue *= FXSYS_pow(10, (FX_FLOAT)nExponent); - } - return fValue; - } - return 0; -} -FX_DOUBLE CXFA_LocaleValue::GetDoubleNum() const { - if (m_bValid && (m_dwType == XFA_VT_BOOLEAN || m_dwType == XFA_VT_INTEGER || - m_dwType == XFA_VT_DECIMAL || m_dwType == XFA_VT_FLOAT)) { - int64_t nIntegral = 0; - FX_DWORD dwFractional = 0; - int32_t nExponent = 0; - int32_t cc = 0; - FX_BOOL bNegative = FALSE, bExpSign = FALSE; - const FX_WCHAR* str = (const FX_WCHAR*)m_wsValue; - int len = m_wsValue.GetLength(); - while (XFA_IsSpace(str[cc]) && cc < len) { - cc++; - } - if (cc >= len) { - return 0; - } - if (str[0] == '+') { - cc++; - } else if (str[0] == '-') { - bNegative = TRUE; - cc++; - } - int32_t nIntegralLen = 0; - while (cc < len) { - if (str[cc] == '.' || !XFA_IsDigit(str[cc]) || nIntegralLen > 17) { - break; - } - nIntegral = nIntegral * 10 + str[cc] - '0'; - cc++; - nIntegralLen++; - } - nIntegral = bNegative ? -nIntegral : nIntegral; - int32_t scale = 0; - FX_DOUBLE fraction = 0.0; - if (cc < len && str[cc] == '.') { - cc++; - while (cc < len) { - fraction += fraction_scales[scale] * (str[cc] - '0'); - scale++; - cc++; - if (scale == sizeof fraction_scales / sizeof(FX_DOUBLE) || - !XFA_IsDigit(str[cc])) { - break; - } - } - dwFractional = (FX_DWORD)(fraction * 4294967296.0); - } - if (cc < len && (str[cc] == 'E' || str[cc] == 'e')) { - cc++; - if (cc < len) { - if (str[cc] == '+') { - cc++; - } else if (str[cc] == '-') { - bExpSign = TRUE; - cc++; - } - } - while (cc < len) { - if (str[cc] == '.' || !XFA_IsDigit(str[cc])) { - break; - } - nExponent = nExponent * 10 + str[cc] - '0'; - cc++; - } - nExponent = bExpSign ? -nExponent : nExponent; - } - FX_DOUBLE dValue = (dwFractional / 4294967296.0); - dValue = nIntegral + (nIntegral >= 0 ? dValue : -dValue); - if (nExponent != 0) { - dValue *= FXSYS_pow(10, (FX_FLOAT)nExponent); - } - return dValue; - } - return 0; -} -CFX_Unitime CXFA_LocaleValue::GetDate() const { - if (m_bValid && m_dwType == XFA_VT_DATE) { - CFX_Unitime dt; - FX_DateFromCanonical(m_wsValue, dt); - return dt; - } - return CFX_Unitime(); -} -CFX_Unitime CXFA_LocaleValue::GetTime() const { - if (m_bValid && m_dwType == XFA_VT_TIME) { - CFX_Unitime dt(0); - FXSYS_assert(m_pLocaleMgr); - FX_TimeFromCanonical(m_wsValue, dt, m_pLocaleMgr->GetDefLocale()); - return dt; - } - return CFX_Unitime(); -} -CFX_Unitime CXFA_LocaleValue::GetDateTime() const { - if (m_bValid && m_dwType == XFA_VT_DATETIME) { - int32_t index = m_wsValue.Find('T'); - CFX_Unitime dt; - FX_DateFromCanonical(m_wsValue.Left(index), dt); - FXSYS_assert(m_pLocaleMgr); - FX_TimeFromCanonical(m_wsValue.Right(m_wsValue.GetLength() - index - 1), dt, - m_pLocaleMgr->GetDefLocale()); - return dt; - } - return CFX_Unitime(); -} -FX_BOOL CXFA_LocaleValue::SetText(const CFX_WideString& wsText) { - m_dwType = XFA_VT_TEXT; - m_wsValue = wsText; - return TRUE; -} -FX_BOOL CXFA_LocaleValue::SetText(const CFX_WideString& wsText, - const CFX_WideString& wsFormat, - IFX_Locale* pLocale) { - m_dwType = XFA_VT_TEXT; - return m_bValid = ParsePatternValue(wsText, wsFormat, pLocale); -} -FX_BOOL CXFA_LocaleValue::SetNum(FX_FLOAT fNum) { - m_dwType = XFA_VT_FLOAT; - m_wsValue.Format(L"%.8g", (FX_DOUBLE)fNum); - return TRUE; -} -FX_BOOL CXFA_LocaleValue::SetNum(const CFX_WideString& wsNum, - const CFX_WideString& wsFormat, - IFX_Locale* pLocale) { - m_dwType = XFA_VT_FLOAT; - return m_bValid = ParsePatternValue(wsNum, wsFormat, pLocale); -} -FX_BOOL CXFA_LocaleValue::SetDate(const CFX_Unitime& d) { - m_dwType = XFA_VT_DATE; - m_wsValue.Format(L"%04d-%02d-%02d", d.GetYear(), d.GetMonth(), d.GetDay()); - return TRUE; -} -FX_BOOL CXFA_LocaleValue::SetDate(const CFX_WideString& wsDate, - const CFX_WideString& wsFormat, - IFX_Locale* pLocale) { - m_dwType = XFA_VT_DATE; - return m_bValid = ParsePatternValue(wsDate, wsFormat, pLocale); -} -FX_BOOL CXFA_LocaleValue::SetTime(const CFX_Unitime& t) { - m_dwType = XFA_VT_TIME; - m_wsValue.Format(L"%02d:%02d:%02d", t.GetHour(), t.GetMinute(), - t.GetSecond()); - if (t.GetMillisecond() > 0) { - CFX_WideString wsTemp; - wsTemp.Format(L"%:03d", t.GetMillisecond()); - m_wsValue += wsTemp; - } - return TRUE; -} -FX_BOOL CXFA_LocaleValue::SetTime(const CFX_WideString& wsTime, - const CFX_WideString& wsFormat, - IFX_Locale* pLocale) { - m_dwType = XFA_VT_TIME; - return m_bValid = ParsePatternValue(wsTime, wsFormat, pLocale); -} -FX_BOOL CXFA_LocaleValue::SetDateTime(const CFX_Unitime& dt) { - m_dwType = XFA_VT_DATETIME; - m_wsValue.Format(L"%04d-%02d-%02dT%02d:%02d:%02d", dt.GetYear(), - dt.GetMonth(), dt.GetDay(), dt.GetHour(), dt.GetMinute(), - dt.GetSecond()); - if (dt.GetMillisecond() > 0) { - CFX_WideString wsTemp; - wsTemp.Format(L"%:03d", dt.GetMillisecond()); - m_wsValue += wsTemp; - } - return TRUE; -} -FX_BOOL CXFA_LocaleValue::SetDateTime(const CFX_WideString& wsDateTime, - const CFX_WideString& wsFormat, - IFX_Locale* pLocale) { - m_dwType = XFA_VT_DATETIME; - return m_bValid = ParsePatternValue(wsDateTime, wsFormat, pLocale); -} -FX_BOOL CXFA_LocaleValue::FormatPatterns(CFX_WideString& wsResult, - const CFX_WideString& wsFormat, - IFX_Locale* pLocale, - XFA_VALUEPICTURE eValueType) const { - wsResult.Empty(); - FX_BOOL bRet = FALSE; - IFX_FormatString* pFormat = IFX_FormatString::Create(m_pLocaleMgr, FALSE); - CFX_WideStringArray wsPatterns; - pFormat->SplitFormatString(wsFormat, wsPatterns); - int32_t iCount = wsPatterns.GetSize(); - for (int32_t i = 0; i < iCount; i++) { - bRet = FormatSinglePattern(wsResult, wsPatterns[i], pLocale, eValueType); - if (bRet) { - break; - } - } - pFormat->Release(); - return bRet; -} -FX_BOOL CXFA_LocaleValue::FormatSinglePattern( - CFX_WideString& wsResult, - const CFX_WideString& wsFormat, - IFX_Locale* pLocale, - XFA_VALUEPICTURE eValueType) const { - IFX_Locale* locale = m_pLocaleMgr->GetDefLocale(); - if (pLocale) { - m_pLocaleMgr->SetDefLocale(pLocale); - } - wsResult.Empty(); - FX_BOOL bRet = FALSE; - IFX_FormatString* pFormat = IFX_FormatString::Create(m_pLocaleMgr, FALSE); - FX_LOCALECATEGORY eCategory = pFormat->GetCategory(wsFormat); - eCategory = XFA_ValugeCategory(eCategory, m_dwType); - switch (eCategory) { - case FX_LOCALECATEGORY_Null: - if (m_wsValue.IsEmpty()) { - bRet = pFormat->FormatNull(wsFormat, wsResult); - } - break; - case FX_LOCALECATEGORY_Zero: - if (m_wsValue == FX_WSTRC(L"0")) { - bRet = pFormat->FormatZero(wsFormat, wsResult); - } - break; - case FX_LOCALECATEGORY_Num: - bRet = pFormat->FormatNum(m_wsValue, wsFormat, wsResult); - break; - case FX_LOCALECATEGORY_Text: - bRet = pFormat->FormatText(m_wsValue, wsFormat, wsResult); - break; - case FX_LOCALECATEGORY_Date: - bRet = pFormat->FormatDateTime(m_wsValue, wsFormat, wsResult, - FX_DATETIMETYPE_Date); - break; - case FX_LOCALECATEGORY_Time: - bRet = pFormat->FormatDateTime(m_wsValue, wsFormat, wsResult, - FX_DATETIMETYPE_Time); - break; - case FX_LOCALECATEGORY_DateTime: - bRet = pFormat->FormatDateTime(m_wsValue, wsFormat, wsResult, - FX_DATETIMETYPE_DateTime); - break; - default: - wsResult = m_wsValue; - bRet = TRUE; - } - pFormat->Release(); - if (!bRet && (eCategory != FX_LOCALECATEGORY_Num || - eValueType != XFA_VALUEPICTURE_Display)) { - wsResult = m_wsValue; - } - if (pLocale) { - m_pLocaleMgr->SetDefLocale(locale); - } - return bRet; -} -static FX_BOOL XFA_ValueSplitDateTime(const CFX_WideString& wsDateTime, - CFX_WideString& wsDate, - CFX_WideString& wsTime) { - wsDate = L""; - wsTime = L""; - if (wsDateTime.IsEmpty()) { - return FALSE; - } - int nSplitIndex = -1; - nSplitIndex = wsDateTime.Find('T'); - if (nSplitIndex < 0) { - nSplitIndex = wsDateTime.Find(' '); - } - if (nSplitIndex < 0) { - return FALSE; - } - wsDate = wsDateTime.Left(nSplitIndex); - wsTime = wsDateTime.Right(wsDateTime.GetLength() - nSplitIndex - 1); - return TRUE; -} -FX_BOOL CXFA_LocaleValue::ValidateCanonicalValue(const CFX_WideString& wsValue, - FX_DWORD dwVType) { - if (wsValue.IsEmpty()) { - return TRUE; - } - CFX_Unitime dt; - switch (dwVType) { - case XFA_VT_DATE: { - if (ValidateCanonicalDate(wsValue, dt)) { - return TRUE; - } - CFX_WideString wsDate, wsTime; - if (XFA_ValueSplitDateTime(wsValue, wsDate, wsTime) && - ValidateCanonicalDate(wsDate, dt)) { - return TRUE; - } - return FALSE; - } - case XFA_VT_TIME: { - if (ValidateCanonicalTime(wsValue)) { - return TRUE; - } - CFX_WideString wsDate, wsTime; - if (XFA_ValueSplitDateTime(wsValue, wsDate, wsTime) && - ValidateCanonicalTime(wsTime)) { - return TRUE; - } - return FALSE; - } - case XFA_VT_DATETIME: { - CFX_WideString wsDate, wsTime; - if (XFA_ValueSplitDateTime(wsValue, wsDate, wsTime) && - ValidateCanonicalDate(wsDate, dt) && ValidateCanonicalTime(wsTime)) { - return TRUE; - } - } break; - } - return TRUE; -} -FX_BOOL CXFA_LocaleValue::ValidateCanonicalDate(const CFX_WideString& wsDate, - CFX_Unitime& unDate) { - const FX_WORD LastDay[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; - const FX_WORD wCountY = 4, wCountM = 2, wCountD = 2; - int nLen = wsDate.GetLength(); - if (nLen < wCountY || nLen > wCountY + wCountM + wCountD + 2) { - return FALSE; - } - const bool bSymbol = wsDate.Find(0x2D) != -1; - FX_WORD wYear = 0; - FX_WORD wMonth = 0; - FX_WORD wDay = 0; - const FX_WCHAR* pDate = (const FX_WCHAR*)wsDate; - int nIndex = 0, nStart = 0; - while (pDate[nIndex] != '\0' && nIndex < wCountY) { - if (!XFA_IsDigit(pDate[nIndex])) { - return FALSE; - } - wYear = (pDate[nIndex] - '0') + wYear * 10; - nIndex++; - } - if (bSymbol) { - if (pDate[nIndex] != 0x2D) { - return FALSE; - } - nIndex++; - } - nStart = nIndex; - while (pDate[nIndex] != '\0' && nIndex - nStart < wCountM && nIndex < nLen) { - if (!XFA_IsDigit(pDate[nIndex])) { - return FALSE; - } - wMonth = (pDate[nIndex] - '0') + wMonth * 10; - nIndex++; - } - if (bSymbol) { - if (pDate[nIndex] != 0x2D) { - return FALSE; - } - nIndex++; - } - nStart = nIndex; - while (pDate[nIndex] != '\0' && nIndex - nStart < wCountD && nIndex < nLen) { - if (!XFA_IsDigit(pDate[nIndex])) { - return FALSE; - } - wDay = (pDate[nIndex] - '0') + wDay * 10; - nIndex++; - } - if (nIndex != nLen) { - return FALSE; - } - if (wYear < 1900 || wYear > 2029) { - return FALSE; - } - if (wMonth < 1 || wMonth > 12) { - if (wMonth == 0 && nLen == wCountY) { - return TRUE; - } - return FALSE; - } - if (wDay < 1) { - if (wDay == 0 && (nLen == wCountY + wCountM)) { - return TRUE; - } - return FALSE; - } - if (wMonth == 2) { - if (wYear % 400 == 0 || (wYear % 100 != 0 && wYear % 4 == 0)) { - if (wDay > 29) { - return FALSE; - } - } else { - if (wDay > 28) { - return FALSE; - } - } - } else if (wDay > LastDay[wMonth - 1]) { - return FALSE; - } - CFX_Unitime ut; - ut.Set(wYear, static_cast(wMonth), static_cast(wDay)); - unDate = unDate + ut; - return TRUE; -} -FX_BOOL CXFA_LocaleValue::ValidateCanonicalTime(const CFX_WideString& wsTime) { - int nLen = wsTime.GetLength(); - if (nLen < 2) - return FALSE; - const FX_WORD wCountH = 2; - const FX_WORD wCountM = 2; - const FX_WORD wCountS = 2; - const FX_WORD wCountF = 3; - const bool bSymbol = wsTime.Find(':') != -1; - FX_WORD wHour = 0; - FX_WORD wMinute = 0; - FX_WORD wSecond = 0; - FX_WORD wFraction = 0; - const FX_WCHAR* pTime = (const FX_WCHAR*)wsTime; - int nIndex = 0; - int nStart = 0; - while (nIndex - nStart < wCountH && pTime[nIndex]) { - if (!XFA_IsDigit(pTime[nIndex])) - return FALSE; - wHour = pTime[nIndex] - '0' + wHour * 10; - nIndex++; - } - if (bSymbol) { - if (nIndex < nLen && pTime[nIndex] != ':') - return FALSE; - nIndex++; - } - nStart = nIndex; - while (nIndex - nStart < wCountM && nIndex < nLen && pTime[nIndex]) { - if (!XFA_IsDigit(pTime[nIndex])) - return FALSE; - wMinute = pTime[nIndex] - '0' + wMinute * 10; - nIndex++; - } - if (bSymbol) { - if (nIndex < nLen && pTime[nIndex] != ':') - return FALSE; - nIndex++; - } - nStart = nIndex; - while (nIndex - nStart < wCountS && nIndex < nLen && pTime[nIndex]) { - if (!XFA_IsDigit(pTime[nIndex])) - return FALSE; - wSecond = pTime[nIndex] - '0' + wSecond * 10; - nIndex++; - } - if (wsTime.Find('.') > 0) { - if (pTime[nIndex] != '.') - return FALSE; - nIndex++; - nStart = nIndex; - while (nIndex - nStart < wCountF && nIndex < nLen && pTime[nIndex]) { - if (!XFA_IsDigit(pTime[nIndex])) - return FALSE; - wFraction = pTime[nIndex] - '0' + wFraction * 10; - nIndex++; - } - } - if (nIndex < nLen) { - if (pTime[nIndex] == 'Z') { - nIndex++; - } else if (pTime[nIndex] == '-' || pTime[nIndex] == '+') { - int16_t nOffsetH = 0; - int16_t nOffsetM = 0; - nIndex++; - nStart = nIndex; - while (nIndex - nStart < wCountH && nIndex < nLen && pTime[nIndex]) { - if (!XFA_IsDigit(pTime[nIndex])) - return FALSE; - nOffsetH = pTime[nIndex] - '0' + nOffsetH * 10; - nIndex++; - } - if (bSymbol) { - if (nIndex < nLen && pTime[nIndex] != ':') - return FALSE; - nIndex++; - } - nStart = nIndex; - while (nIndex - nStart < wCountM && nIndex < nLen && pTime[nIndex]) { - if (!XFA_IsDigit(pTime[nIndex])) - return FALSE; - nOffsetM = pTime[nIndex] - '0' + nOffsetM * 10; - nIndex++; - } - if (nOffsetH > 12 || nOffsetM >= 60) - return FALSE; - } - } - return nIndex == nLen && wHour < 24 && wMinute < 60 && wSecond < 60 && - wFraction <= 999; -} -FX_BOOL CXFA_LocaleValue::ValidateCanonicalDateTime( - const CFX_WideString& wsDateTime) { - CFX_WideString wsDate, wsTime; - if (wsDateTime.IsEmpty()) { - return FALSE; - } - int nSplitIndex = -1; - nSplitIndex = wsDateTime.Find('T'); - if (nSplitIndex < 0) { - nSplitIndex = wsDateTime.Find(' '); - } - if (nSplitIndex < 0) { - return FALSE; - } - wsDate = wsDateTime.Left(nSplitIndex); - wsTime = wsDateTime.Right(wsDateTime.GetLength() - nSplitIndex - 1); - CFX_Unitime dt; - return ValidateCanonicalDate(wsDate, dt) && ValidateCanonicalTime(wsTime); -} -FX_BOOL CXFA_LocaleValue::ParsePatternValue(const CFX_WideString& wsValue, - const CFX_WideString& wsPattern, - IFX_Locale* pLocale) { - IFX_Locale* locale = m_pLocaleMgr->GetDefLocale(); - if (pLocale) { - m_pLocaleMgr->SetDefLocale(pLocale); - } - IFX_FormatString* pFormat = IFX_FormatString::Create(m_pLocaleMgr, FALSE); - CFX_WideStringArray wsPatterns; - pFormat->SplitFormatString(wsPattern, wsPatterns); - FX_BOOL bRet = FALSE; - int32_t iCount = wsPatterns.GetSize(); - for (int32_t i = 0; i < iCount && !bRet; i++) { - CFX_WideString wsFormat = wsPatterns[i]; - FX_LOCALECATEGORY eCategory = pFormat->GetCategory(wsFormat); - eCategory = XFA_ValugeCategory(eCategory, m_dwType); - switch (eCategory) { - case FX_LOCALECATEGORY_Null: - bRet = pFormat->ParseNull(wsValue, wsFormat); - if (bRet) { - m_wsValue.Empty(); - } - break; - case FX_LOCALECATEGORY_Zero: - bRet = pFormat->ParseZero(wsValue, wsFormat); - if (bRet) { - m_wsValue = FX_WSTRC(L"0"); - } - break; - case FX_LOCALECATEGORY_Num: { - CFX_WideString fNum; - bRet = pFormat->ParseNum(wsValue, wsFormat, fNum); - if (bRet) { - m_wsValue = fNum; - } - break; - } - case FX_LOCALECATEGORY_Text: - bRet = pFormat->ParseText(wsValue, wsFormat, m_wsValue); - break; - case FX_LOCALECATEGORY_Date: { - CFX_Unitime dt; - bRet = ValidateCanonicalDate(wsValue, dt); - if (!bRet) { - bRet = pFormat->ParseDateTime(wsValue, wsFormat, FX_DATETIMETYPE_Date, - dt); - } - if (bRet) { - SetDate(dt); - } - break; - } - case FX_LOCALECATEGORY_Time: { - CFX_Unitime dt; - bRet = - pFormat->ParseDateTime(wsValue, wsFormat, FX_DATETIMETYPE_Time, dt); - if (bRet) { - SetTime(dt); - } - break; - } - case FX_LOCALECATEGORY_DateTime: { - CFX_Unitime dt; - bRet = pFormat->ParseDateTime(wsValue, wsFormat, - FX_DATETIMETYPE_DateTime, dt); - if (bRet) { - SetDateTime(dt); - } - break; - } - default: - m_wsValue = wsValue; - bRet = TRUE; - break; - } - } - if (!bRet) { - m_wsValue = wsValue; - } - pFormat->Release(); - if (pLocale) { - m_pLocaleMgr->SetDefLocale(locale); - } - return bRet; -} -void CXFA_LocaleValue::GetNumbericFormat(CFX_WideString& wsFormat, - int32_t nIntLen, - int32_t nDecLen, - FX_BOOL bSign) { - FXSYS_assert(wsFormat.IsEmpty()); - FXSYS_assert(nIntLen >= -1 && nDecLen >= -1); - int32_t nTotalLen = (nIntLen >= 0 ? nIntLen : 2) + (bSign ? 1 : 0) + - (nDecLen >= 0 ? nDecLen : 2) + (nDecLen == 0 ? 0 : 1); - FX_WCHAR* lpBuf = wsFormat.GetBuffer(nTotalLen); - int32_t nPos = 0; - if (bSign) { - lpBuf[nPos++] = L's'; - } - if (nIntLen == -1) { - lpBuf[nPos++] = L'z'; - lpBuf[nPos++] = L'*'; - } else { - while (nIntLen) { - lpBuf[nPos++] = L'z'; - nIntLen--; - } - } - if (nDecLen != 0) { - lpBuf[nPos++] = L'.'; - } - if (nDecLen == -1) { - lpBuf[nPos++] = L'z'; - lpBuf[nPos++] = L'*'; - } else { - while (nDecLen) { - lpBuf[nPos++] = L'z'; - nDecLen--; - } - } - wsFormat.ReleaseBuffer(nTotalLen); -} -FX_BOOL CXFA_LocaleValue::ValidateNumericTemp(CFX_WideString& wsNumeric, - CFX_WideString& wsFormat, - IFX_Locale* pLocale, - int32_t* pos) { - if (wsFormat.IsEmpty() || wsNumeric.IsEmpty()) { - return TRUE; - } - const FX_WCHAR* pNum = wsNumeric.c_str(); - const FX_WCHAR* pFmt = wsFormat.c_str(); - int32_t n = 0, nf = 0; - FX_WCHAR c = pNum[n]; - FX_WCHAR cf = pFmt[nf]; - if (cf == L's') { - if (c == L'-' || c == L'+') { - ++n; - } - ++nf; - } - FX_BOOL bLimit = TRUE; - int32_t nCount = wsNumeric.GetLength(); - int32_t nCountFmt = wsFormat.GetLength(); - while (n < nCount && (bLimit ? nf < nCountFmt : TRUE) && - XFA_IsDigit(c = pNum[n])) { - if (bLimit == TRUE) { - if ((cf = pFmt[nf]) == L'*') { - bLimit = FALSE; - } else if (cf == L'z') { - nf++; - } else { - return FALSE; - } - } - n++; - } - if (n == nCount) { - return TRUE; - } - if (nf == nCountFmt) { - return FALSE; - } - while (nf < nCountFmt && (cf = pFmt[nf]) != L'.') { - FXSYS_assert(cf == L'z' || cf == L'*'); - ++nf; - } - CFX_WideString wsDecimalSymbol; - if (pLocale) { - pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Decimal, wsDecimalSymbol); - } else { - wsDecimalSymbol = CFX_WideString(L'.'); - } - if (pFmt[nf] != L'.') { - return FALSE; - } - if (wsDecimalSymbol != CFX_WideStringC(c) && c != L'.') { - return FALSE; - } - ++nf; - ++n; - bLimit = TRUE; - while (n < nCount && (bLimit ? nf < nCountFmt : TRUE) && - XFA_IsDigit(c = pNum[n])) { - if (bLimit == TRUE) { - if ((cf = pFmt[nf]) == L'*') { - bLimit = FALSE; - } else if (cf == L'z') { - nf++; - } else { - return FALSE; - } - } - n++; - } - return n == nCount; -} diff --git a/xfa/src/fxfa/parser/xfa_localevalue.h b/xfa/src/fxfa/parser/xfa_localevalue.h deleted file mode 100644 index bcdf037fcd..0000000000 --- a/xfa/src/fxfa/parser/xfa_localevalue.h +++ /dev/null @@ -1,112 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXFA_PARSER_XFA_LOCALEVALUE_H_ -#define XFA_SRC_FXFA_PARSER_XFA_LOCALEVALUE_H_ - -#include "xfa/include/fxfa/fxfa_objectacc.h" - -class IFX_Locale; -class CFX_Unitime; -class CXFA_LocaleMgr; - -#define XFA_VT_NULL 0 -#define XFA_VT_BOOLEAN 1 -#define XFA_VT_INTEGER 2 -#define XFA_VT_DECIMAL 4 -#define XFA_VT_FLOAT 8 -#define XFA_VT_TEXT 16 -#define XFA_VT_DATE 32 -#define XFA_VT_TIME 64 -#define XFA_VT_DATETIME 128 - -class CXFA_LocaleValue { - public: - CXFA_LocaleValue(); - CXFA_LocaleValue(const CXFA_LocaleValue& value); - CXFA_LocaleValue(FX_DWORD dwType, CXFA_LocaleMgr* pLocaleMgr); - CXFA_LocaleValue(FX_DWORD dwType, - const CFX_WideString& wsValue, - CXFA_LocaleMgr* pLocaleMgr); - CXFA_LocaleValue(FX_DWORD dwType, - const CFX_WideString& wsValue, - const CFX_WideString& wsFormat, - IFX_Locale* pLocale, - CXFA_LocaleMgr* pLocaleMgr); - ~CXFA_LocaleValue(); - CXFA_LocaleValue& operator=(const CXFA_LocaleValue& value); - - FX_BOOL ValidateValue(const CFX_WideString& wsValue, - const CFX_WideString& wsPattern, - IFX_Locale* pLocale, - CFX_WideString* pMatchFormat = NULL); - FX_BOOL FormatPatterns(CFX_WideString& wsResult, - const CFX_WideString& wsFormat, - IFX_Locale* pLocale, - XFA_VALUEPICTURE eValueType) const; - FX_BOOL FormatSinglePattern(CFX_WideString& wsResult, - const CFX_WideString& wsFormat, - IFX_Locale* pLocale, - XFA_VALUEPICTURE eValueType) const; - FX_BOOL ValidateCanonicalValue(const CFX_WideString& wsValue, - FX_DWORD dwVType); - FX_BOOL ValidateCanonicalDate(const CFX_WideString& wsDate, - CFX_Unitime& unDate); - FX_BOOL ValidateCanonicalTime(const CFX_WideString& wsTime); - FX_BOOL ValidateCanonicalDateTime(const CFX_WideString& wsDateTime); - void GetNumbericFormat(CFX_WideString& wsFormat, - int32_t nIntLen, - int32_t nDecLen, - FX_BOOL bSign = TRUE); - FX_BOOL ValidateNumericTemp(CFX_WideString& wsNumeric, - CFX_WideString& wsFormat, - IFX_Locale* pLocale = NULL, - int32_t* pos = NULL); - - CFX_WideString GetValue() const; - FX_DWORD GetType() const; - void SetValue(const CFX_WideString& wsValue, FX_DWORD dwType); - CFX_WideString GetText() const; - FX_FLOAT GetNum() const; - FX_DOUBLE GetDoubleNum() const; - CFX_Unitime GetDate() const; - CFX_Unitime GetTime() const; - CFX_Unitime GetDateTime() const; - FX_BOOL SetText(const CFX_WideString& wsText); - FX_BOOL SetText(const CFX_WideString& wsText, - const CFX_WideString& wsFormat, - IFX_Locale* pLocale); - FX_BOOL SetNum(FX_FLOAT fNum); - FX_BOOL SetNum(const CFX_WideString& wsNum, - const CFX_WideString& wsFormat, - IFX_Locale* pLocale); - FX_BOOL SetDate(const CFX_Unitime& d); - FX_BOOL SetDate(const CFX_WideString& wsDate, - const CFX_WideString& wsFormat, - IFX_Locale* pLocale); - FX_BOOL SetTime(const CFX_Unitime& t); - FX_BOOL SetTime(const CFX_WideString& wsTime, - const CFX_WideString& wsFormat, - IFX_Locale* pLocale); - FX_BOOL SetDateTime(const CFX_Unitime& dt); - FX_BOOL SetDateTime(const CFX_WideString& wsDateTime, - const CFX_WideString& wsFormat, - IFX_Locale* pLocale); - bool IsNull() const { return m_dwType == XFA_VT_NULL; } - FX_BOOL IsEmpty() const { return m_wsValue.IsEmpty(); } - FX_BOOL IsValid() const { return m_bValid; } - - protected: - FX_BOOL ParsePatternValue(const CFX_WideString& wsValue, - const CFX_WideString& wsPattern, - IFX_Locale* pLocale); - CXFA_LocaleMgr* m_pLocaleMgr; - CFX_WideString m_wsValue; - FX_DWORD m_dwType; - FX_BOOL m_bValid; -}; - -#endif // XFA_SRC_FXFA_PARSER_XFA_LOCALEVALUE_H_ diff --git a/xfa/src/fxfa/parser/xfa_object.h b/xfa/src/fxfa/parser/xfa_object.h deleted file mode 100644 index 949ca8739f..0000000000 --- a/xfa/src/fxfa/parser/xfa_object.h +++ /dev/null @@ -1,803 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXFA_PARSER_XFA_OBJECT_H_ -#define XFA_SRC_FXFA_PARSER_XFA_OBJECT_H_ - -#include "xfa/src/fde/xml/fde_xml.h" -#include "xfa/src/fxfa/parser/xfa_utils.h" - -class CXFA_Document; -class CXFA_Node; -class CXFA_NodeList; -class CXFA_OrdinaryObject; - -enum XFA_OBJECTTYPE { - XFA_OBJECTTYPE_OrdinaryObject = 0x0, - XFA_OBJECTTYPE_OrdinaryList = 0x1, - XFA_OBJECTTYPE_NodeList = 0x2, - XFA_OBJECTTYPE_Node = 0x4, - XFA_OBJECTTYPE_NodeC = 0x5, - XFA_OBJECTTYPE_NodeV = 0x6, - XFA_OBJECTTYPE_ModelNode = 0x8, - XFA_OBJECTTYPE_TextNode = 0x9, - XFA_OBJECTTYPE_ContainerNode = 0xA, - XFA_OBJECTTYPE_ContentNode = 0xB, - XFA_OBJECTTYPE_VariablesThis = 0xC, - XFA_OBJECTTYPEMASK = 0xF, - XFA_NODEFLAG_Initialized = 0x00020, - XFA_NODEFLAG_HasRemoved = 0x00200, - XFA_NODEFLAG_NeedsInitApp = 0x00400, - XFA_NODEFLAG_BindFormItems = 0x00800, - XFA_NODEFLAG_UserInteractive = 0x01000, - XFA_NODEFLAG_SkipDataBinding = 0x02000, - XFA_NODEFLAG_OwnXMLNode = 0x04000, - XFA_NODEFLAG_UnusedNode = 0x08000, - XFA_NODEFLAG_LayoutGeneratedNode = 0x10000, -}; -class CXFA_Object { - public: - CXFA_Object(CXFA_Document* pDocument, FX_DWORD uFlags); - CXFA_Document* GetDocument() const { return m_pDocument; } - FX_DWORD GetFlag() const { return m_uFlags; } - XFA_OBJECTTYPE GetObjectType() const { - return (XFA_OBJECTTYPE)(m_uFlags & XFA_OBJECTTYPEMASK); - } - - FX_BOOL IsNode() const { - return (m_uFlags & XFA_OBJECTTYPEMASK) >= XFA_OBJECTTYPE_Node; - } - FX_BOOL IsOrdinaryObject() const { - return (m_uFlags & XFA_OBJECTTYPEMASK) == XFA_OBJECTTYPE_OrdinaryObject; - } - FX_BOOL IsNodeList() const { - return (m_uFlags & XFA_OBJECTTYPEMASK) == XFA_OBJECTTYPE_NodeList; - } - FX_BOOL IsOrdinaryList() const { - return (m_uFlags & XFA_OBJECTTYPEMASK) == XFA_OBJECTTYPE_OrdinaryList; - } - FX_BOOL IsContentNode() const { - return (m_uFlags & XFA_OBJECTTYPEMASK) == XFA_OBJECTTYPE_ContentNode; - } - FX_BOOL IsContainerNode() const { - return (m_uFlags & XFA_OBJECTTYPEMASK) == XFA_OBJECTTYPE_ContainerNode; - } - - CXFA_Node* AsNode(); - CXFA_OrdinaryObject* AsOrdinaryObject(); - CXFA_NodeList* AsNodeList(); - - const CXFA_Node* AsNode() const; - const CXFA_OrdinaryObject* AsOrdinaryObject() const; - const CXFA_NodeList* AsNodeList() const; - - XFA_ELEMENT GetClassID() const; - void GetClassName(CFX_WideStringC& wsName) const; - uint32_t GetClassHashCode() const; - void Script_ObjectClass_ClassName(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void ThrowScriptErrorMessage(int32_t iStringID, ...); - - protected: - CXFA_Document* const m_pDocument; - FX_DWORD m_uFlags; -}; - -#define XFA_NODEFILTER_Children 0x01 -#define XFA_NODEFILTER_Properties 0x02 -#define XFA_NODEFILTER_OneOfProperty 0x04 -#define XFA_CLONEFLAG_Content 0x01 -enum XFA_NODEITEM { - XFA_NODEITEM_Parent, - XFA_NODEITEM_FirstChild, - XFA_NODEITEM_NextSibling, - XFA_NODEITEM_PrevSibling, -}; -enum XFA_SOM_MESSAGETYPE { - XFA_SOM_ValidationMessage, - XFA_SOM_FormatMessage, - XFA_SOM_MandatoryMessage -}; - -typedef CFX_ArrayTemplate CXFA_NodeArray; -typedef CFX_StackTemplate CXFA_NodeStack; -typedef CXFA_PtrSetTemplate CXFA_NodeSet; -typedef void (*PD_CALLBACK_DUPLICATEDATA)(void*& pData); - -struct XFA_MAPDATABLOCKCALLBACKINFO { - PD_CALLBACK_FREEDATA pFree; - PD_CALLBACK_DUPLICATEDATA pCopy; -}; - -struct XFA_MAPDATABLOCK { - uint8_t* GetData() const { return (uint8_t*)this + sizeof(XFA_MAPDATABLOCK); } - XFA_MAPDATABLOCKCALLBACKINFO* pCallbackInfo; - int32_t iBytes; -}; - -struct XFA_MAPMODULEDATA { - CFX_MapPtrToPtr m_ValueMap; - CFX_MapPtrTemplate m_BufferMap; -}; - -#define XFA_CalcRefCount (void*)(uintptr_t) FXBSTR_ID('X', 'F', 'A', 'R') -#define XFA_CalcData (void*)(uintptr_t) FXBSTR_ID('X', 'F', 'A', 'C') -#define XFA_LAYOUTITEMKEY (void*)(uintptr_t) FXBSTR_ID('L', 'Y', 'I', 'M') -class CXFA_Node : public CXFA_Object { - public: - XFA_ELEMENT GetClassID() const { return (XFA_ELEMENT)m_eNodeClass; } - FX_DWORD GetPacketID() const { return m_ePacket; } - FX_BOOL HasFlag(FX_DWORD dwFlag) const; - void SetFlag(FX_DWORD dwFlag, FX_BOOL bOn = TRUE, FX_BOOL bNotify = TRUE); - FX_BOOL IsAttributeInXML(); - FX_BOOL IsFormContainer() { - return m_ePacket == XFA_XDPPACKET_Form && IsContainerNode(); - } - void SetXMLMappingNode(IFDE_XMLNode* pXMLNode) { m_pXMLNode = pXMLNode; } - IFDE_XMLNode* GetXMLMappingNode() const { return m_pXMLNode; } - IFDE_XMLNode* CreateXMLMappingNode(); - FX_BOOL IsNeedSavingXMLNode(); - FX_DWORD GetNameHash() const { return m_dwNameHash; } - bool IsUnnamed() const { return m_dwNameHash == 0; } - CXFA_Node* GetModelNode(); - void UpdateNameHash(); - FX_BOOL HasAttribute(XFA_ATTRIBUTE eAttr, FX_BOOL bCanInherit = FALSE); - FX_BOOL SetAttribute(XFA_ATTRIBUTE eAttr, - const CFX_WideStringC& wsValue, - FX_BOOL bNotify = FALSE); - FX_BOOL GetAttribute(XFA_ATTRIBUTE eAttr, - CFX_WideString& wsValue, - FX_BOOL bUseDefault = TRUE); - FX_BOOL SetAttribute(const CFX_WideStringC& wsAttr, - const CFX_WideStringC& wsValue, - FX_BOOL bNotify = FALSE); - FX_BOOL GetAttribute(const CFX_WideStringC& wsAttr, - CFX_WideString& wsValue, - FX_BOOL bUseDefault = TRUE); - FX_BOOL RemoveAttribute(const CFX_WideStringC& wsAttr); - FX_BOOL SetContent(const CFX_WideString& wsContent, - const CFX_WideString& wsXMLValue, - FX_BOOL bNotify = FALSE, - FX_BOOL bScriptModify = FALSE, - FX_BOOL bSyncData = TRUE); - FX_BOOL TryContent(CFX_WideString& wsContent, - FX_BOOL bScriptModify = FALSE, - FX_BOOL bProto = TRUE); - CFX_WideString GetContent(); - - FX_BOOL TryNamespace(CFX_WideString& wsNamespace); - - FX_BOOL SetBoolean(XFA_ATTRIBUTE eAttr, - FX_BOOL bValue, - FX_BOOL bNotify = FALSE) { - return SetValue(eAttr, XFA_ATTRIBUTETYPE_Boolean, (void*)(uintptr_t)bValue, - bNotify); - } - FX_BOOL TryBoolean(XFA_ATTRIBUTE eAttr, - FX_BOOL& bValue, - FX_BOOL bUseDefault = TRUE); - FX_BOOL GetBoolean(XFA_ATTRIBUTE eAttr) { - FX_BOOL bValue; - return TryBoolean(eAttr, bValue, TRUE) ? bValue : FALSE; - } - FX_BOOL SetInteger(XFA_ATTRIBUTE eAttr, - int32_t iValue, - FX_BOOL bNotify = FALSE) { - return SetValue(eAttr, XFA_ATTRIBUTETYPE_Integer, (void*)(uintptr_t)iValue, - bNotify); - } - FX_BOOL TryInteger(XFA_ATTRIBUTE eAttr, - int32_t& iValue, - FX_BOOL bUseDefault = TRUE); - int32_t GetInteger(XFA_ATTRIBUTE eAttr) { - int32_t iValue; - return TryInteger(eAttr, iValue, TRUE) ? iValue : 0; - } - FX_BOOL SetEnum(XFA_ATTRIBUTE eAttr, - XFA_ATTRIBUTEENUM eValue, - FX_BOOL bNotify = FALSE) { - return SetValue(eAttr, XFA_ATTRIBUTETYPE_Enum, (void*)(uintptr_t)eValue, - bNotify); - } - FX_BOOL TryEnum(XFA_ATTRIBUTE eAttr, - XFA_ATTRIBUTEENUM& eValue, - FX_BOOL bUseDefault = TRUE); - XFA_ATTRIBUTEENUM GetEnum(XFA_ATTRIBUTE eAttr) { - XFA_ATTRIBUTEENUM eValue; - return TryEnum(eAttr, eValue, TRUE) ? eValue : XFA_ATTRIBUTEENUM_Unknown; - } - FX_BOOL SetCData(XFA_ATTRIBUTE eAttr, - const CFX_WideString& wsValue, - FX_BOOL bNotify = FALSE, - FX_BOOL bScriptModify = FALSE); - FX_BOOL SetAttributeValue(const CFX_WideString& wsValue, - const CFX_WideString& wsXMLValue, - FX_BOOL bNotify = FALSE, - FX_BOOL bScriptModify = FALSE); - FX_BOOL TryCData(XFA_ATTRIBUTE eAttr, - CFX_WideString& wsValue, - FX_BOOL bUseDefault = TRUE, - FX_BOOL bProto = TRUE); - FX_BOOL TryCData(XFA_ATTRIBUTE eAttr, - CFX_WideStringC& wsValue, - FX_BOOL bUseDefault = TRUE, - FX_BOOL bProto = TRUE); - CFX_WideStringC GetCData(XFA_ATTRIBUTE eAttr) { - CFX_WideStringC wsValue; - return TryCData(eAttr, wsValue) ? wsValue : CFX_WideStringC(); - } - FX_BOOL SetMeasure(XFA_ATTRIBUTE eAttr, - CXFA_Measurement mValue, - FX_BOOL bNotify = FALSE); - FX_BOOL TryMeasure(XFA_ATTRIBUTE eAttr, - CXFA_Measurement& mValue, - FX_BOOL bUseDefault = TRUE) const; - CXFA_Measurement GetMeasure(XFA_ATTRIBUTE eAttr) const; - FX_BOOL SetObject(XFA_ATTRIBUTE eAttr, - void* pData, - XFA_MAPDATABLOCKCALLBACKINFO* pCallbackInfo = NULL); - FX_BOOL TryObject(XFA_ATTRIBUTE eAttr, void*& pData); - void* GetObject(XFA_ATTRIBUTE eAttr) { - void* pData; - return TryObject(eAttr, pData) ? pData : NULL; - } - FX_BOOL SetUserData(void* pKey, - void* pData, - XFA_MAPDATABLOCKCALLBACKINFO* pCallbackInfo = NULL); - FX_BOOL TryUserData(void* pKey, void*& pData, FX_BOOL bProtoAlso = FALSE); - void* GetUserData(void* pKey, FX_BOOL bProtoAlso = FALSE) { - void* pData; - return TryUserData(pKey, pData, bProtoAlso) ? pData : NULL; - } - CXFA_Node* GetProperty(int32_t index, - XFA_ELEMENT eProperty, - FX_BOOL bCreateProperty = TRUE); - int32_t CountChildren(XFA_ELEMENT eElement, FX_BOOL bOnlyChild = FALSE); - CXFA_Node* GetChild(int32_t index, - XFA_ELEMENT eElement, - FX_BOOL bOnlyChild = FALSE); - int32_t InsertChild(int32_t index, CXFA_Node* pNode); - FX_BOOL InsertChild(CXFA_Node* pNode, CXFA_Node* pBeforeNode = NULL); - FX_BOOL RemoveChild(CXFA_Node* pNode, FX_BOOL bNotify = TRUE); - CXFA_Node* Clone(FX_BOOL bRecursive); - CXFA_Node* GetNodeItem(XFA_NODEITEM eItem) const; - CXFA_Node* GetNodeItem(XFA_NODEITEM eItem, XFA_OBJECTTYPE eType) const; - int32_t GetNodeList(CXFA_NodeArray& nodes, - FX_DWORD dwTypeFilter = XFA_NODEFILTER_Children | - XFA_NODEFILTER_Properties, - XFA_ELEMENT eElementFilter = XFA_ELEMENT_UNKNOWN, - int32_t iLevel = 1); - CXFA_Node* CreateSamePacketNode(XFA_ELEMENT eElement, - FX_DWORD dwFlags = XFA_NODEFLAG_Initialized); - CXFA_Node* CloneTemplateToForm(FX_BOOL bRecursive); - CXFA_Node* GetTemplateNode() const; - void SetTemplateNode(CXFA_Node* pTemplateNode); - CXFA_Node* GetDataDescriptionNode(); - void SetDataDescriptionNode(CXFA_Node* pDataDescriptionNode); - CXFA_Node* GetBindData(); - int32_t GetBindItems(CXFA_NodeArray& formItems); - int32_t AddBindItem(CXFA_Node* pFormNode); - int32_t RemoveBindItem(CXFA_Node* pFormNode); - FX_BOOL HasBindItem(); - CXFA_WidgetData* GetWidgetData(); - CXFA_WidgetData* GetContainerWidgetData(); - FX_BOOL GetLocaleName(CFX_WideString& wsLocaleName); - XFA_ATTRIBUTEENUM GetIntact(); - CXFA_Node* GetFirstChildByName(const CFX_WideStringC& wsNodeName) const; - CXFA_Node* GetFirstChildByName(FX_DWORD dwNodeNameHash) const; - CXFA_Node* GetFirstChildByClass(XFA_ELEMENT eNodeClass) const; - CXFA_Node* GetNextSameNameSibling(FX_DWORD dwNodeNameHash) const; - CXFA_Node* GetNextSameNameSibling(const CFX_WideStringC& wsNodeName) const; - CXFA_Node* GetNextSameClassSibling(XFA_ELEMENT eNodeClass) const; - int32_t GetNodeSameNameIndex() const; - int32_t GetNodeSameClassIndex() const; - void GetSOMExpression(CFX_WideString& wsSOMExpression); - CXFA_Node* GetInstanceMgrOfSubform(); - - CXFA_Node* GetOccurNode(); - void Script_TreeClass_ResolveNode(CFXJSE_Arguments* pArguments); - void Script_TreeClass_ResolveNodes(CFXJSE_Arguments* pArguments); - void Script_Som_ResolveNodeList(FXJSE_HVALUE hValue, - CFX_WideString wsExpression, - FX_DWORD dwFlag, - CXFA_Node* refNode = NULL); - void Script_TreeClass_All(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_TreeClass_Nodes(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_TreeClass_ClassAll(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_TreeClass_Parent(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_TreeClass_Index(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_TreeClass_ClassIndex(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_TreeClass_SomExpression(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_NodeClass_ApplyXSL(CFXJSE_Arguments* pArguments); - void Script_NodeClass_AssignNode(CFXJSE_Arguments* pArguments); - void Script_NodeClass_Clone(CFXJSE_Arguments* pArguments); - void Script_NodeClass_GetAttribute(CFXJSE_Arguments* pArguments); - void Script_NodeClass_GetElement(CFXJSE_Arguments* pArguments); - void Script_NodeClass_IsPropertySpecified(CFXJSE_Arguments* pArguments); - void Script_NodeClass_LoadXML(CFXJSE_Arguments* pArguments); - void Script_NodeClass_SaveFilteredXML(CFXJSE_Arguments* pArguments); - void Script_NodeClass_SaveXML(CFXJSE_Arguments* pArguments); - void Script_NodeClass_SetAttribute(CFXJSE_Arguments* pArguments); - void Script_NodeClass_SetElement(CFXJSE_Arguments* pArguments); - void Script_NodeClass_Ns(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_NodeClass_Model(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_NodeClass_IsContainer(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_NodeClass_IsNull(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_NodeClass_OneOfChild(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_ContainerClass_GetDelta(CFXJSE_Arguments* pArguments); - void Script_ContainerClass_GetDeltas(CFXJSE_Arguments* pArguments); - void Script_ModelClass_ClearErrorList(CFXJSE_Arguments* pArguments); - void Script_ModelClass_CreateNode(CFXJSE_Arguments* pArguments); - void Script_ModelClass_IsCompatibleNS(CFXJSE_Arguments* pArguments); - void Script_ModelClass_Context(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_ModelClass_AliasNode(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_WsdlConnection_Execute(CFXJSE_Arguments* pArguments); - void Script_Delta_Restore(CFXJSE_Arguments* pArguments); - void Script_Delta_CurrentValue(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_Delta_SavedValue(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_Delta_Target(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_Attribute_SendAttributeChangeMessage(void* eAttribute, - void* eValue, - FX_BOOL bScriptModify); - void Script_Attribute_Integer(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_Attribute_IntegerRead(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_Attribute_BOOL(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_Attribute_BOOLRead(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_Attribute_String(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_Attribute_StringRead(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_Som_ValidationMessage(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_Field_Length(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_Som_DefaultValue(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_Som_DefaultValue_Read(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_Boolean_Value(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_Som_Message(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_SOM_MESSAGETYPE iMessageType); - void Script_Som_BorderColor(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_Som_BorderWidth(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_Som_FillColor(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_Som_DataNode(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_Som_FontColor(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_Som_Mandatory(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_Som_MandatoryMessage(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_Som_InstanceIndex(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_Draw_DefaultValue(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_Field_DefaultValue(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_Field_EditValue(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_Field_FormatMessage(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_Field_FormattedValue(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_Field_ParentSubform(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_Field_SelectedIndex(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_Field_ClearItems(CFXJSE_Arguments* pArguments); - void Script_Field_ExecEvent(CFXJSE_Arguments* pArguments); - void Script_Field_ExecInitialize(CFXJSE_Arguments* pArguments); - void Script_Field_DeleteItem(CFXJSE_Arguments* pArguments); - void Script_Field_GetSaveItem(CFXJSE_Arguments* pArguments); - void Script_Field_BoundItem(CFXJSE_Arguments* pArguments); - void Script_Field_GetItemState(CFXJSE_Arguments* pArguments); - void Script_Field_ExecCalculate(CFXJSE_Arguments* pArguments); - void Script_Field_SetItems(CFXJSE_Arguments* pArguments); - void Script_Field_GetDisplayItem(CFXJSE_Arguments* pArguments); - void Script_Field_SetItemState(CFXJSE_Arguments* pArguments); - void Script_Field_AddItem(CFXJSE_Arguments* pArguments); - void Script_Field_ExecValidate(CFXJSE_Arguments* pArguments); - void Script_ExclGroup_DefaultAndRawValue(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_ExclGroup_ErrorText(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_ExclGroup_Transient(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_ExclGroup_ExecEvent(CFXJSE_Arguments* pArguments); - void Script_ExclGroup_SelectedMember(CFXJSE_Arguments* pArguments); - void Script_ExclGroup_ExecInitialize(CFXJSE_Arguments* pArguments); - void Script_ExclGroup_ExecCalculate(CFXJSE_Arguments* pArguments); - void Script_ExclGroup_ExecValidate(CFXJSE_Arguments* pArguments); - void Script_Subform_InstanceManager(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_Subform_Locale(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_Subform_ExecEvent(CFXJSE_Arguments* pArguments); - void Script_Subform_ExecInitialize(CFXJSE_Arguments* pArguments); - void Script_Subform_ExecCalculate(CFXJSE_Arguments* pArguments); - void Script_Subform_ExecValidate(CFXJSE_Arguments* pArguments); - void Script_Subform_GetInvalidObjects(CFXJSE_Arguments* pArguments); - - int32_t Subform_and_SubformSet_InstanceIndex(); - void Script_Template_FormNodes(CFXJSE_Arguments* pArguments); - void Script_Template_Remerge(CFXJSE_Arguments* pArguments); - void Script_Template_ExecInitialize(CFXJSE_Arguments* pArguments); - void Script_Template_CreateNode(CFXJSE_Arguments* pArguments); - void Script_Template_Recalculate(CFXJSE_Arguments* pArguments); - void Script_Template_ExecCalculate(CFXJSE_Arguments* pArguments); - void Script_Template_ExecValidate(CFXJSE_Arguments* pArguments); - void Script_Manifest_Evaluate(CFXJSE_Arguments* pArguments); - void Script_InstanceManager_Count(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_InstanceManager_Max(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_InstanceManager_Min(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_InstanceManager_MoveInstance(CFXJSE_Arguments* pArguments); - void Script_InstanceManager_RemoveInstance(CFXJSE_Arguments* pArguments); - void Script_InstanceManager_SetInstances(CFXJSE_Arguments* pArguments); - void Script_InstanceManager_AddInstance(CFXJSE_Arguments* pArguments); - void Script_InstanceManager_InsertInstance(CFXJSE_Arguments* pArguments); - int32_t InstanceManager_SetInstances(int32_t iCount); - int32_t InstanceManager_MoveInstance(int32_t iTo, int32_t iFrom); - void Script_Occur_Max(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_Occur_Min(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_Desc_Metadata(CFXJSE_Arguments* pArguments); - void Script_Form_FormNodes(CFXJSE_Arguments* pArguments); - void Script_Form_Remerge(CFXJSE_Arguments* pArguments); - void Script_Form_ExecInitialize(CFXJSE_Arguments* pArguments); - void Script_Form_Recalculate(CFXJSE_Arguments* pArguments); - void Script_Form_ExecCalculate(CFXJSE_Arguments* pArguments); - void Script_Form_ExecValidate(CFXJSE_Arguments* pArguments); - void Script_Form_Checksum(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_Packet_GetAttribute(CFXJSE_Arguments* pArguments); - void Script_Packet_SetAttribute(CFXJSE_Arguments* pArguments); - void Script_Packet_RemoveAttribute(CFXJSE_Arguments* pArguments); - void Script_Packet_Content(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_Source_Next(CFXJSE_Arguments* pArguments); - void Script_Source_CancelBatch(CFXJSE_Arguments* pArguments); - void Script_Source_First(CFXJSE_Arguments* pArguments); - void Script_Source_UpdateBatch(CFXJSE_Arguments* pArguments); - void Script_Source_Previous(CFXJSE_Arguments* pArguments); - void Script_Source_IsBOF(CFXJSE_Arguments* pArguments); - void Script_Source_IsEOF(CFXJSE_Arguments* pArguments); - void Script_Source_Cancel(CFXJSE_Arguments* pArguments); - void Script_Source_Update(CFXJSE_Arguments* pArguments); - void Script_Source_Open(CFXJSE_Arguments* pArguments); - void Script_Source_Delete(CFXJSE_Arguments* pArguments); - void Script_Source_AddNew(CFXJSE_Arguments* pArguments); - void Script_Source_Requery(CFXJSE_Arguments* pArguments); - void Script_Source_Resync(CFXJSE_Arguments* pArguments); - void Script_Source_Close(CFXJSE_Arguments* pArguments); - void Script_Source_Last(CFXJSE_Arguments* pArguments); - void Script_Source_HasDataChanged(CFXJSE_Arguments* pArguments); - void Script_Source_Db(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_Xfa_This(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_Handler_Version(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_SubmitFormat_Mode(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_Extras_Type(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_Encrypt_Format(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_Script_Stateless(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - - protected: - CXFA_Node(CXFA_Document* pDoc, FX_WORD ePacket, XFA_ELEMENT eElement); - ~CXFA_Node(); - friend class CXFA_Document; - CXFA_Node* Deprecated_GetPrevSibling(); - FX_BOOL SetValue(XFA_ATTRIBUTE eAttr, - XFA_ATTRIBUTETYPE eType, - void* pValue, - FX_BOOL bNotify); - FX_BOOL GetValue(XFA_ATTRIBUTE eAttr, - XFA_ATTRIBUTETYPE eType, - FX_BOOL bUseDefault, - void*& pValue); - void OnRemoved(CXFA_Node* pParent, CXFA_Node* pRemoved, FX_BOOL bNotify); - void OnChanging(XFA_ATTRIBUTE eAttr, void* pNewValue, FX_BOOL bNotify); - void OnChanged(XFA_ATTRIBUTE eAttr, - void* pNewValue, - FX_BOOL bNotify, - FX_BOOL bScriptModify = FALSE); - int32_t execSingleEventByName(const CFX_WideStringC& wsEventName, - XFA_ELEMENT eElementType); - FX_BOOL SetScriptContent(const CFX_WideString& wsContent, - const CFX_WideString& wsXMLValue, - FX_BOOL bNotify = TRUE, - FX_BOOL bScriptModify = FALSE, - FX_BOOL bSyncData = TRUE); - CFX_WideString GetScriptContent(FX_BOOL bScriptModify = FALSE); - XFA_MAPMODULEDATA* CreateMapModuleData(); - XFA_MAPMODULEDATA* GetMapModuleData() const; - void SetMapModuleValue(void* pKey, void* pValue); - FX_BOOL GetMapModuleValue(void* pKey, void*& pValue); - void SetMapModuleString(void* pKey, const CFX_WideStringC& wsValue); - FX_BOOL GetMapModuleString(void* pKey, CFX_WideStringC& wsValue); - void SetMapModuleBuffer(void* pKey, - void* pValue, - int32_t iBytes, - XFA_MAPDATABLOCKCALLBACKINFO* pCallbackInfo = NULL); - FX_BOOL GetMapModuleBuffer(void* pKey, - void*& pValue, - int32_t& iBytes, - FX_BOOL bProtoAlso = TRUE) const; - FX_BOOL HasMapModuleKey(void* pKey, FX_BOOL bProtoAlso = FALSE); - void RemoveMapModuleKey(void* pKey = NULL); - void MergeAllData(void* pDstModule, FX_BOOL bUseSrcAttr = TRUE); - void MoveBufferMapData(CXFA_Node* pDstModule, void* pKey); - void MoveBufferMapData(CXFA_Node* pSrcModule, - CXFA_Node* pDstModule, - void* pKey, - FX_BOOL bRecursive = FALSE); - - CXFA_Node* m_pNext; - CXFA_Node* m_pChild; - CXFA_Node* m_pLastChild; - CXFA_Node* m_pParent; - IFDE_XMLNode* m_pXMLNode; - XFA_ELEMENT m_eNodeClass; - FX_WORD m_ePacket; - FX_DWORD m_dwNameHash; - CXFA_Node* m_pAuxNode; - XFA_MAPMODULEDATA* m_pMapModuleData; -}; -class CXFA_OrdinaryObject : public CXFA_Object { - public: - CXFA_OrdinaryObject(CXFA_Document* pDocument, XFA_ELEMENT eElement) - : CXFA_Object(pDocument, XFA_OBJECTTYPE_OrdinaryObject), - m_uScriptHash(0) { - m_eNodeClass = eElement; - } - XFA_ELEMENT GetClassID() const { return (XFA_ELEMENT)m_eNodeClass; } - uint32_t GetScriptObjHash() { return m_uScriptHash; } - - protected: - XFA_ELEMENT m_eNodeClass; - uint32_t m_uScriptHash; -}; -class CXFA_ThisProxy : public CXFA_Object { - public: - CXFA_ThisProxy(CXFA_Node* pThisNode, CXFA_Node* pScriptNode) - : CXFA_Object(pThisNode->GetDocument(), XFA_OBJECTTYPE_VariablesThis), - m_pThisNode(NULL), - m_pScriptNode(NULL) { - m_pThisNode = pThisNode; - m_pScriptNode = pScriptNode; - } - virtual ~CXFA_ThisProxy() {} - CXFA_Node* GetThisNode() { return m_pThisNode; } - CXFA_Node* GetScriptNode() { return m_pScriptNode; } - - private: - CXFA_Node* m_pThisNode; - CXFA_Node* m_pScriptNode; -}; -class CXFA_NodeList : public CXFA_Object { - public: - explicit CXFA_NodeList(CXFA_Document* pDocument); - virtual ~CXFA_NodeList() {} - XFA_ELEMENT GetClassID() const { return XFA_ELEMENT_NodeList; } - CXFA_Node* NamedItem(const CFX_WideStringC& wsName); - virtual int32_t GetLength() = 0; - virtual FX_BOOL Append(CXFA_Node* pNode) = 0; - virtual FX_BOOL Insert(CXFA_Node* pNewNode, CXFA_Node* pBeforeNode) = 0; - virtual FX_BOOL Remove(CXFA_Node* pNode) = 0; - virtual CXFA_Node* Item(int32_t iIndex) = 0; - - void Script_ListClass_Append(CFXJSE_Arguments* pArguments); - void Script_ListClass_Insert(CFXJSE_Arguments* pArguments); - void Script_ListClass_Remove(CFXJSE_Arguments* pArguments); - void Script_ListClass_Item(CFXJSE_Arguments* pArguments); - - void Script_TreelistClass_NamedItem(CFXJSE_Arguments* pArguments); - void Script_ListClass_Length(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); -}; -class CXFA_ArrayNodeList : public CXFA_NodeList { - public: - explicit CXFA_ArrayNodeList(CXFA_Document* pDocument); - void SetArrayNodeList(const CXFA_NodeArray& srcArray); - virtual int32_t GetLength(); - virtual FX_BOOL Append(CXFA_Node* pNode); - virtual FX_BOOL Insert(CXFA_Node* pNewNode, CXFA_Node* pBeforeNode); - virtual FX_BOOL Remove(CXFA_Node* pNode); - virtual CXFA_Node* Item(int32_t iIndex); - - protected: - CXFA_NodeArray m_array; -}; -class CXFA_AttachNodeList : public CXFA_NodeList { - public: - CXFA_AttachNodeList(CXFA_Document* pDocument, CXFA_Node* pAttachNode); - - virtual int32_t GetLength(); - virtual FX_BOOL Append(CXFA_Node* pNode); - virtual FX_BOOL Insert(CXFA_Node* pNewNode, CXFA_Node* pBeforeNode); - virtual FX_BOOL Remove(CXFA_Node* pNode); - virtual CXFA_Node* Item(int32_t iIndex); - - protected: - CXFA_Node* m_pAttachNode; -}; -class CXFA_TraverseStrategy_XFAContainerNode { - public: - static CXFA_Node* GetFirstChild(CXFA_Node* pTemplateNode, - void* pUserData = NULL) { - return pTemplateNode->GetNodeItem(XFA_NODEITEM_FirstChild, - XFA_OBJECTTYPE_ContainerNode); - } - static CXFA_Node* GetNextSibling(CXFA_Node* pTemplateNode, - void* pUserData = NULL) { - return pTemplateNode->GetNodeItem(XFA_NODEITEM_NextSibling, - XFA_OBJECTTYPE_ContainerNode); - } - static CXFA_Node* GetParent(CXFA_Node* pTemplateNode, - void* pUserData = NULL) { - return pTemplateNode->GetNodeItem(XFA_NODEITEM_Parent, - XFA_OBJECTTYPE_ContainerNode); - } -}; -typedef CXFA_NodeIteratorTemplate - CXFA_ContainerIterator; -class CXFA_TraverseStrategy_XFANode { - public: - static inline CXFA_Node* GetFirstChild(CXFA_Node* pTemplateNode) { - return pTemplateNode->GetNodeItem(XFA_NODEITEM_FirstChild); - } - static inline CXFA_Node* GetNextSibling(CXFA_Node* pTemplateNode) { - return pTemplateNode->GetNodeItem(XFA_NODEITEM_NextSibling); - } - static inline CXFA_Node* GetParent(CXFA_Node* pTemplateNode) { - return pTemplateNode->GetNodeItem(XFA_NODEITEM_Parent); - } -}; -typedef CXFA_NodeIteratorTemplate - CXFA_NodeIterator; - -inline CXFA_Node* CXFA_Object::AsNode() { - return IsNode() ? static_cast(this) : nullptr; -} -inline CXFA_OrdinaryObject* CXFA_Object::AsOrdinaryObject() { - return IsOrdinaryObject() ? static_cast(this) : nullptr; -} -inline CXFA_NodeList* CXFA_Object::AsNodeList() { - return IsNodeList() ? static_cast(this) : nullptr; -} - -inline const CXFA_Node* CXFA_Object::AsNode() const { - return IsNode() ? static_cast(this) : nullptr; -} -inline const CXFA_OrdinaryObject* CXFA_Object::AsOrdinaryObject() const { - return IsOrdinaryObject() ? static_cast(this) - : nullptr; -} -inline const CXFA_NodeList* CXFA_Object::AsNodeList() const { - return IsNodeList() ? static_cast(this) : nullptr; -} - -inline CXFA_Node* ToNode(CXFA_Object* pObj) { - return pObj ? pObj->AsNode() : nullptr; -} -inline CXFA_OrdinaryObject* ToOrdinaryObject(CXFA_Object* pObj) { - return pObj ? pObj->AsOrdinaryObject() : nullptr; -} -inline CXFA_NodeList* ToNodeList(CXFA_Object* pObj) { - return pObj ? pObj->AsNodeList() : nullptr; -} - -inline const CXFA_Node* ToNode(const CXFA_Object* pObj) { - return pObj ? pObj->AsNode() : nullptr; -} -inline const CXFA_OrdinaryObject* ToOrdinaryObject(const CXFA_Object* pObj) { - return pObj ? pObj->AsOrdinaryObject() : nullptr; -} -inline const CXFA_NodeList* ToNodeList(const CXFA_Object* pObj) { - return pObj ? pObj->AsNodeList() : nullptr; -} - -#endif // XFA_SRC_FXFA_PARSER_XFA_OBJECT_H_ diff --git a/xfa/src/fxfa/parser/xfa_object_imp.cpp b/xfa/src/fxfa/parser/xfa_object_imp.cpp deleted file mode 100644 index 23b0644074..0000000000 --- a/xfa/src/fxfa/parser/xfa_object_imp.cpp +++ /dev/null @@ -1,5408 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fxfa/parser/xfa_object.h" - -#include "core/include/fxcrt/fx_ext.h" -#include "xfa/src/fgas/crt/fgas_codepage.h" -#include "xfa/src/fgas/crt/fgas_system.h" -#include "xfa/src/fxfa/fm2js/xfa_fm2jsapi.h" -#include "xfa/src/fxfa/parser/xfa_basic_imp.h" -#include "xfa/src/fxfa/parser/xfa_docdata.h" -#include "xfa/src/fxfa/parser/xfa_doclayout.h" -#include "xfa/src/fxfa/parser/xfa_document.h" -#include "xfa/src/fxfa/parser/xfa_document_layout_imp.h" -#include "xfa/src/fxfa/parser/xfa_localemgr.h" -#include "xfa/src/fxfa/parser/xfa_parser.h" -#include "xfa/src/fxfa/parser/xfa_script.h" -#include "xfa/src/fxfa/parser/xfa_utils.h" - -CXFA_Object::CXFA_Object(CXFA_Document* pDocument, FX_DWORD uFlags) - : m_pDocument(pDocument), m_uFlags(uFlags) {} -void CXFA_Object::GetClassName(CFX_WideStringC& wsName) const { - wsName = XFA_GetElementByID(GetClassID())->pName; -} -uint32_t CXFA_Object::GetClassHashCode() const { - return XFA_GetElementByID(GetClassID())->uHash; -} -XFA_ELEMENT CXFA_Object::GetClassID() const { - if (IsNode()) { - return AsNode()->GetClassID(); - } - if (IsOrdinaryObject()) { - return AsOrdinaryObject()->GetClassID(); - } - if (IsNodeList()) { - return AsNodeList()->GetClassID(); - } - if (IsOrdinaryList()) { - return XFA_ELEMENT_List; - } - ASSERT(FALSE); - return (XFA_ELEMENT)0; -} -void CXFA_Object::Script_ObjectClass_ClassName(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - if (!bSetting) { - CFX_WideStringC className; - GetClassName(className); - FXJSE_Value_SetUTF8String( - hValue, FX_UTF8Encode(className.GetPtr(), className.GetLength())); - } else { - ThrowScriptErrorMessage(XFA_IDS_INVAlID_PROP_SET); - } -} -void CXFA_Object::ThrowScriptErrorMessage(int32_t iStringID, ...) { - IXFA_AppProvider* pAppProvider = m_pDocument->GetNotify()->GetAppProvider(); - FXSYS_assert(pAppProvider); - CFX_WideString wsFormat; - pAppProvider->LoadString(iStringID, wsFormat); - CFX_WideString wsMessage; - va_list arg_ptr; - va_start(arg_ptr, iStringID); - wsMessage.FormatV((const FX_WCHAR*)wsFormat, arg_ptr); - va_end(arg_ptr); - FXJSE_ThrowMessage("", FX_UTF8Encode(wsMessage, wsMessage.GetLength())); -} - -static void XFA_DeleteWideString(void* pData) { - delete static_cast(pData); -} - -static void XFA_CopyWideString(void*& pData) { - if (pData) { - CFX_WideString* pNewData = new CFX_WideString(*(CFX_WideString*)pData); - pData = pNewData; - } -} -static XFA_MAPDATABLOCKCALLBACKINFO deleteWideStringCallBack = { - XFA_DeleteWideString, XFA_CopyWideString}; -static XFA_OBJECTTYPE XFA_GetElementObjectType(XFA_ELEMENT eElement) { - return (XFA_OBJECTTYPE)XFA_GetElementByID(eElement)->eObjectType; -} -CXFA_Node::CXFA_Node(CXFA_Document* pDoc, FX_WORD ePacket, XFA_ELEMENT eElement) - : CXFA_Object(pDoc, XFA_GetElementObjectType(eElement)), - m_pNext(nullptr), - m_pChild(nullptr), - m_pLastChild(nullptr), - m_pParent(nullptr), - m_pXMLNode(nullptr), - m_eNodeClass(eElement), - m_ePacket(ePacket), - m_dwNameHash(0), - m_pAuxNode(nullptr), - m_pMapModuleData(nullptr) { - ASSERT(m_pDocument); -} -CXFA_Node::~CXFA_Node() { - FXSYS_assert(m_pParent == NULL); - RemoveMapModuleKey(); - CXFA_Node *pNext, *pNode = m_pChild; - while (pNode) { - pNext = pNode->m_pNext; - pNode->m_pParent = NULL; - delete pNode; - pNode = pNext; - } - if (m_pXMLNode && HasFlag(XFA_NODEFLAG_OwnXMLNode)) { - m_pXMLNode->Release(); - } -} -CXFA_Node* CXFA_Node::Clone(FX_BOOL bRecursive) { - IXFA_ObjFactory* pFactory = m_pDocument->GetParser()->GetFactory(); - CXFA_Node* pClone = pFactory->CreateNode(m_ePacket, m_eNodeClass); - if (!pClone) { - return NULL; - } - MergeAllData(pClone); - pClone->UpdateNameHash(); - if (IsNeedSavingXMLNode()) { - IFDE_XMLNode* pCloneXML = NULL; - if (IsAttributeInXML()) { - CFX_WideString wsName; - GetAttribute(XFA_ATTRIBUTE_Name, wsName, FALSE); - IFDE_XMLElement* pCloneXMLElement = IFDE_XMLElement::Create(wsName); - CFX_WideStringC wsValue = GetCData(XFA_ATTRIBUTE_Value); - if (!wsValue.IsEmpty()) { - pCloneXMLElement->SetTextData(wsValue); - } - pCloneXML = pCloneXMLElement; - pCloneXMLElement = NULL; - pClone->SetEnum(XFA_ATTRIBUTE_Contains, XFA_ATTRIBUTEENUM_Unknown); - } else { - pCloneXML = m_pXMLNode->Clone(FALSE); - } - pClone->SetXMLMappingNode(pCloneXML); - pClone->SetFlag(XFA_NODEFLAG_OwnXMLNode, TRUE, FALSE); - } - if (bRecursive) { - for (CXFA_Node* pChild = GetNodeItem(XFA_NODEITEM_FirstChild); pChild; - pChild = pChild->GetNodeItem(XFA_NODEITEM_NextSibling)) { - pClone->InsertChild(pChild->Clone(bRecursive)); - } - } - pClone->SetFlag(XFA_NODEFLAG_Initialized); - pClone->SetObject(XFA_ATTRIBUTE_BindingNode, NULL); - return pClone; -} -CXFA_Node* CXFA_Node::GetNodeItem(XFA_NODEITEM eItem) const { - switch (eItem) { - case XFA_NODEITEM_NextSibling: - return m_pNext; - case XFA_NODEITEM_FirstChild: - return m_pChild; - case XFA_NODEITEM_Parent: - return m_pParent; - case XFA_NODEITEM_PrevSibling: - if (m_pParent) { - CXFA_Node* pSibling = m_pParent->m_pChild; - CXFA_Node* pPrev = NULL; - while (pSibling && pSibling != this) { - pPrev = pSibling; - pSibling = pSibling->m_pNext; - } - return pPrev; - } - return NULL; - default: - break; - } - return NULL; -} -CXFA_Node* CXFA_Node::GetNodeItem(XFA_NODEITEM eItem, - XFA_OBJECTTYPE eType) const { - CXFA_Node* pNode = NULL; - switch (eItem) { - case XFA_NODEITEM_NextSibling: - pNode = m_pNext; - if (eType != XFA_OBJECTTYPEMASK) { - while (pNode && pNode->GetObjectType() != eType) { - pNode = pNode->m_pNext; - } - } - break; - case XFA_NODEITEM_FirstChild: - pNode = m_pChild; - if (eType != XFA_OBJECTTYPEMASK) { - while (pNode && pNode->GetObjectType() != eType) { - pNode = pNode->m_pNext; - } - } - break; - case XFA_NODEITEM_Parent: - pNode = m_pParent; - if (eType != XFA_OBJECTTYPEMASK) { - while (pNode && pNode->GetObjectType() != eType) { - pNode = pNode->m_pParent; - } - } - break; - case XFA_NODEITEM_PrevSibling: - if (m_pParent) { - CXFA_Node* pSibling = m_pParent->m_pChild; - while (pSibling && pSibling != this) { - if (eType == XFA_OBJECTTYPEMASK || - eType == pSibling->GetObjectType()) { - pNode = pSibling; - } - pSibling = pSibling->m_pNext; - } - } - break; - default: - break; - } - return pNode; -} -int32_t CXFA_Node::GetNodeList(CXFA_NodeArray& nodes, - FX_DWORD dwTypeFilter, - XFA_ELEMENT eElementFilter, - int32_t iLevel) { - if (--iLevel < 0) { - return nodes.GetSize(); - } - if (eElementFilter != XFA_ELEMENT_UNKNOWN) { - CXFA_Node* pChild = m_pChild; - while (pChild) { - if (pChild->GetClassID() == eElementFilter) { - nodes.Add(pChild); - if (iLevel > 0) { - GetNodeList(nodes, dwTypeFilter, eElementFilter, iLevel); - } - } - pChild = pChild->m_pNext; - } - } else if (dwTypeFilter == - (XFA_NODEFILTER_Children | XFA_NODEFILTER_Properties)) { - CXFA_Node* pChild = m_pChild; - while (pChild) { - nodes.Add(pChild); - if (iLevel > 0) { - GetNodeList(nodes, dwTypeFilter, eElementFilter, iLevel); - } - pChild = pChild->m_pNext; - } - } else if (dwTypeFilter != 0) { - FX_BOOL bFilterChildren = (dwTypeFilter & XFA_NODEFILTER_Children) != 0; - FX_BOOL bFilterProperties = (dwTypeFilter & XFA_NODEFILTER_Properties) != 0; - FX_BOOL bFilterOneOfProperties = - (dwTypeFilter & XFA_NODEFILTER_OneOfProperty) != 0; - CXFA_Node* pChild = m_pChild; - while (pChild) { - const XFA_PROPERTY* pProperty = XFA_GetPropertyOfElement( - GetClassID(), pChild->GetClassID(), XFA_XDPPACKET_UNKNOWN); - if (pProperty) { - if (bFilterProperties) { - nodes.Add(pChild); - } else if (bFilterOneOfProperties && - (pProperty->uFlags & XFA_PROPERTYFLAG_OneOf)) { - nodes.Add(pChild); - } else if (bFilterChildren && - (pChild->GetClassID() == XFA_ELEMENT_Variables || - pChild->GetClassID() == XFA_ELEMENT_PageSet)) { - nodes.Add(pChild); - } - } else { - if (bFilterChildren) { - nodes.Add(pChild); - } - } - pChild = pChild->m_pNext; - } - if (bFilterOneOfProperties && nodes.GetSize() < 1) { - int32_t iProperties = 0; - const XFA_PROPERTY* pProperty = - XFA_GetElementProperties(GetClassID(), iProperties); - if (pProperty == NULL || iProperties < 1) { - return 0; - } - for (int32_t i = 0; i < iProperties; i++) { - if (pProperty[i].uFlags & XFA_PROPERTYFLAG_DefaultOneOf) { - IXFA_ObjFactory* pFactory = m_pDocument->GetParser()->GetFactory(); - const XFA_PACKETINFO* pPacket = XFA_GetPacketByID(GetPacketID()); - CXFA_Node* pNewNode = - pFactory->CreateNode(pPacket, (XFA_ELEMENT)pProperty[i].eName); - if (!pNewNode) { - break; - } - InsertChild(pNewNode, NULL); - pNewNode->SetFlag(XFA_NODEFLAG_Initialized); - nodes.Add(pNewNode); - break; - } - } - } - } - return nodes.GetSize(); -} -CXFA_Node* CXFA_Node::CreateSamePacketNode(XFA_ELEMENT eElement, - FX_DWORD dwFlags) { - IXFA_ObjFactory* pFactory = m_pDocument->GetParser()->GetFactory(); - CXFA_Node* pNode = pFactory->CreateNode(m_ePacket, eElement); - pNode->SetFlag(dwFlags); - return pNode; -} -CXFA_Node* CXFA_Node::CloneTemplateToForm(FX_BOOL bRecursive) { - FXSYS_assert(m_ePacket == XFA_XDPPACKET_Template); - IXFA_ObjFactory* pFactory = m_pDocument->GetParser()->GetFactory(); - CXFA_Node* pClone = pFactory->CreateNode(XFA_XDPPACKET_Form, m_eNodeClass); - if (!pClone) { - return NULL; - } - pClone->SetTemplateNode(this); - pClone->UpdateNameHash(); - pClone->SetXMLMappingNode(GetXMLMappingNode()); - if (bRecursive) { - for (CXFA_Node* pChild = GetNodeItem(XFA_NODEITEM_FirstChild); pChild; - pChild = pChild->GetNodeItem(XFA_NODEITEM_NextSibling)) { - pClone->InsertChild(pChild->CloneTemplateToForm(bRecursive)); - } - } - pClone->SetFlag(XFA_NODEFLAG_Initialized); - return pClone; -} - -CXFA_Node* CXFA_Node::GetTemplateNode() const { - return m_pAuxNode; -} - -void CXFA_Node::SetTemplateNode(CXFA_Node* pTemplateNode) { - m_pAuxNode = pTemplateNode; -} -CXFA_Node* CXFA_Node::GetBindData() { - ASSERT(GetPacketID() == XFA_XDPPACKET_Form); - return static_cast(GetObject(XFA_ATTRIBUTE_BindingNode)); -} -int32_t CXFA_Node::GetBindItems(CXFA_NodeArray& formItems) { - if (m_uFlags & XFA_NODEFLAG_BindFormItems) { - CXFA_NodeArray* pItems = NULL; - TryObject(XFA_ATTRIBUTE_BindingNode, (void*&)pItems); - formItems.Copy(*pItems); - return formItems.GetSize(); - } - CXFA_Node* pFormNode = - static_cast(GetObject(XFA_ATTRIBUTE_BindingNode)); - if (pFormNode) { - formItems.Add(pFormNode); - } - return formItems.GetSize(); -} - -static void XFA_DataNodeDeleteBindItem(void* pData) { - delete static_cast(pData); -} - -static XFA_MAPDATABLOCKCALLBACKINFO deleteBindItemCallBack = { - XFA_DataNodeDeleteBindItem, NULL}; -int32_t CXFA_Node::AddBindItem(CXFA_Node* pFormNode) { - ASSERT(pFormNode); - if (m_uFlags & XFA_NODEFLAG_BindFormItems) { - CXFA_NodeArray* pItems = NULL; - TryObject(XFA_ATTRIBUTE_BindingNode, (void*&)pItems); - ASSERT(pItems); - if (pItems->Find(pFormNode) < 0) { - pItems->Add(pFormNode); - } - return pItems->GetSize(); - } - CXFA_Node* pOldFormItem = - static_cast(GetObject(XFA_ATTRIBUTE_BindingNode)); - if (!pOldFormItem) { - SetObject(XFA_ATTRIBUTE_BindingNode, pFormNode); - return 1; - } else if (pOldFormItem == pFormNode) { - return 1; - } - CXFA_NodeArray* pItems = new CXFA_NodeArray; - SetObject(XFA_ATTRIBUTE_BindingNode, pItems, &deleteBindItemCallBack); - pItems->Add(pOldFormItem); - pItems->Add(pFormNode); - m_uFlags |= XFA_NODEFLAG_BindFormItems; - return 2; -} -int32_t CXFA_Node::RemoveBindItem(CXFA_Node* pFormNode) { - if (m_uFlags & XFA_NODEFLAG_BindFormItems) { - CXFA_NodeArray* pItems = NULL; - TryObject(XFA_ATTRIBUTE_BindingNode, (void*&)pItems); - ASSERT(pItems); - int32_t iIndex = pItems->Find(pFormNode); - int32_t iCount = pItems->GetSize(); - if (iIndex >= 0) { - if (iIndex != iCount - 1) { - pItems->SetAt(iIndex, pItems->GetAt(iCount - 1)); - } - pItems->RemoveAt(iCount - 1); - if (iCount == 2) { - CXFA_Node* pLastFormNode = pItems->GetAt(0); - SetObject(XFA_ATTRIBUTE_BindingNode, pLastFormNode); - m_uFlags &= ~XFA_NODEFLAG_BindFormItems; - } - iCount--; - } - return iCount; - } - CXFA_Node* pOldFormItem = - static_cast(GetObject(XFA_ATTRIBUTE_BindingNode)); - if (pOldFormItem == pFormNode) { - SetObject(XFA_ATTRIBUTE_BindingNode, NULL); - pOldFormItem = NULL; - } - return pOldFormItem == NULL ? 0 : 1; -} -FX_BOOL CXFA_Node::HasBindItem() { - return (GetPacketID() == XFA_XDPPACKET_Datasets) && - GetObject(XFA_ATTRIBUTE_BindingNode) != NULL; -} -CXFA_WidgetData* CXFA_Node::GetWidgetData() { - return (CXFA_WidgetData*)GetObject(XFA_ATTRIBUTE_WidgetData); -} -CXFA_WidgetData* CXFA_Node::GetContainerWidgetData() { - if (GetPacketID() != XFA_XDPPACKET_Form) { - return NULL; - } - XFA_ELEMENT classID = GetClassID(); - if (classID == XFA_ELEMENT_ExclGroup) { - return NULL; - } - CXFA_Node* pParentNode = GetNodeItem(XFA_NODEITEM_Parent); - if (pParentNode && pParentNode->GetClassID() == XFA_ELEMENT_ExclGroup) { - return NULL; - } - if (classID == XFA_ELEMENT_Field) { - CXFA_WidgetData* pFieldWidgetData = GetWidgetData(); - if (pFieldWidgetData && - pFieldWidgetData->GetChoiceListOpen() == - XFA_ATTRIBUTEENUM_MultiSelect) { - return NULL; - } else { - CFX_WideString wsPicture; - if (pFieldWidgetData) { - pFieldWidgetData->GetPictureContent(wsPicture, - XFA_VALUEPICTURE_DataBind); - } - if (!wsPicture.IsEmpty()) { - return pFieldWidgetData; - } - CXFA_Node* pDataNode = GetBindData(); - if (!pDataNode) { - return NULL; - } - pFieldWidgetData = NULL; - CXFA_NodeArray formNodes; - pDataNode->GetBindItems(formNodes); - for (int32_t i = 0; i < formNodes.GetSize(); i++) { - CXFA_Node* pFormNode = formNodes.GetAt(i); - if (!pFormNode || pFormNode->HasFlag(XFA_NODEFLAG_HasRemoved)) { - continue; - } - pFieldWidgetData = pFormNode->GetWidgetData(); - if (pFieldWidgetData) { - pFieldWidgetData->GetPictureContent(wsPicture, - XFA_VALUEPICTURE_DataBind); - } - if (!wsPicture.IsEmpty()) { - break; - } - pFieldWidgetData = NULL; - } - return pFieldWidgetData; - } - } - CXFA_Node* pGrandNode = - pParentNode ? pParentNode->GetNodeItem(XFA_NODEITEM_Parent) : NULL; - CXFA_Node* pValueNode = - (pParentNode && pParentNode->GetClassID() == XFA_ELEMENT_Value) - ? pParentNode - : NULL; - if (!pValueNode) { - pValueNode = (pGrandNode && pGrandNode->GetClassID() == XFA_ELEMENT_Value) - ? pGrandNode - : NULL; - } - CXFA_Node* pParentOfValueNode = - pValueNode ? pValueNode->GetNodeItem(XFA_NODEITEM_Parent) : NULL; - return pParentOfValueNode ? pParentOfValueNode->GetContainerWidgetData() - : NULL; -} -FX_BOOL CXFA_Node::GetLocaleName(CFX_WideString& wsLocaleName) { - CXFA_Node* pForm = GetDocument()->GetXFAObject(XFA_HASHCODE_Form)->AsNode(); - CXFA_Node* pTopSubform = pForm->GetFirstChildByClass(XFA_ELEMENT_Subform); - FXSYS_assert(pTopSubform); - CXFA_Node* pLocaleNode = this; - FX_BOOL bLocale = FALSE; - do { - bLocale = pLocaleNode->TryCData(XFA_ATTRIBUTE_Locale, wsLocaleName, FALSE); - if (!bLocale) { - pLocaleNode = pLocaleNode->GetNodeItem(XFA_NODEITEM_Parent); - } - } while (pLocaleNode && pLocaleNode != pTopSubform && !bLocale); - if (bLocale) { - return bLocale; - } - CXFA_Node* pConfig = ToNode(GetDocument()->GetXFAObject(XFA_HASHCODE_Config)); - wsLocaleName = GetDocument()->GetLocalMgr()->GetConfigLocaleName(pConfig); - if (!wsLocaleName.IsEmpty()) { - bLocale = TRUE; - } - if (bLocale) { - return bLocale; - } - if (pTopSubform) { - bLocale = pTopSubform->TryCData(XFA_ATTRIBUTE_Locale, wsLocaleName, FALSE); - } - if (bLocale) { - return bLocale; - } - IFX_Locale* pLocale = GetDocument()->GetLocalMgr()->GetDefLocale(); - if (pLocale) { - wsLocaleName = pLocale->GetName(); - bLocale = TRUE; - } - return bLocale; -} -XFA_ATTRIBUTEENUM CXFA_Node::GetIntact() { - XFA_ELEMENT eElement = GetClassID(); - CXFA_Node* pKeep = GetFirstChildByClass(XFA_ELEMENT_Keep); - XFA_ATTRIBUTEENUM eLayoutType = GetEnum(XFA_ATTRIBUTE_Layout); - if (pKeep) { - XFA_ATTRIBUTEENUM eIntact; - if (pKeep->TryEnum(XFA_ATTRIBUTE_Intact, eIntact, FALSE)) { - if (eIntact == XFA_ATTRIBUTEENUM_None && - eLayoutType == XFA_ATTRIBUTEENUM_Row && - m_pDocument->GetCurVersionMode() < XFA_VERSION_208) { - CXFA_Node* pPreviewRow = - GetNodeItem(XFA_NODEITEM_PrevSibling, XFA_OBJECTTYPE_ContainerNode); - if (pPreviewRow && - pPreviewRow->GetEnum(XFA_ATTRIBUTE_Layout) == - XFA_ATTRIBUTEENUM_Row) { - XFA_ATTRIBUTEENUM eValue; - if (pKeep->TryEnum(XFA_ATTRIBUTE_Previous, eValue, FALSE)) { - if (eValue == XFA_ATTRIBUTEENUM_ContentArea || - eValue == XFA_ATTRIBUTEENUM_PageArea) { - return XFA_ATTRIBUTEENUM_ContentArea; - } - } - CXFA_Node* pKeep = - pPreviewRow->GetFirstChildByClass(XFA_ELEMENT_Keep); - if (pKeep) { - if (pKeep->TryEnum(XFA_ATTRIBUTE_Next, eValue, FALSE)) { - if (eValue == XFA_ATTRIBUTEENUM_ContentArea || - eValue == XFA_ATTRIBUTEENUM_PageArea) { - return XFA_ATTRIBUTEENUM_ContentArea; - } - } - } - } - } - return eIntact; - } - } - switch (eElement) { - case XFA_ELEMENT_Subform: - switch (eLayoutType) { - case XFA_ATTRIBUTEENUM_Position: - case XFA_ATTRIBUTEENUM_Row: - return XFA_ATTRIBUTEENUM_ContentArea; - case XFA_ATTRIBUTEENUM_Tb: - case XFA_ATTRIBUTEENUM_Table: - case XFA_ATTRIBUTEENUM_Lr_tb: - case XFA_ATTRIBUTEENUM_Rl_tb: - return XFA_ATTRIBUTEENUM_None; - default: - break; - } - break; - case XFA_ELEMENT_Field: { - CXFA_Node* pParentNode = GetNodeItem(XFA_NODEITEM_Parent); - if (!pParentNode || pParentNode->GetClassID() == XFA_ELEMENT_PageArea) { - return XFA_ATTRIBUTEENUM_ContentArea; - } - if (pParentNode->GetIntact() == XFA_ATTRIBUTEENUM_None) { - XFA_ATTRIBUTEENUM eParLayout = - pParentNode->GetEnum(XFA_ATTRIBUTE_Layout); - if (eParLayout == XFA_ATTRIBUTEENUM_Position || - eParLayout == XFA_ATTRIBUTEENUM_Row || - eParLayout == XFA_ATTRIBUTEENUM_Table) { - return XFA_ATTRIBUTEENUM_None; - } - XFA_VERSION version = m_pDocument->GetCurVersionMode(); - if (eParLayout == XFA_ATTRIBUTEENUM_Tb && version < XFA_VERSION_208) { - CXFA_Measurement measureH; - if (TryMeasure(XFA_ATTRIBUTE_H, measureH, FALSE)) { - return XFA_ATTRIBUTEENUM_ContentArea; - } - } - return XFA_ATTRIBUTEENUM_None; - } - return XFA_ATTRIBUTEENUM_ContentArea; - } - case XFA_ELEMENT_Draw: - return XFA_ATTRIBUTEENUM_ContentArea; - default: - break; - } - return XFA_ATTRIBUTEENUM_None; -} -CXFA_Node* CXFA_Node::GetDataDescriptionNode() { - if (m_ePacket == XFA_XDPPACKET_Datasets) { - return m_pAuxNode; - } - return NULL; -} -void CXFA_Node::SetDataDescriptionNode(CXFA_Node* pDataDescriptionNode) { - FXSYS_assert(m_ePacket == XFA_XDPPACKET_Datasets); - m_pAuxNode = pDataDescriptionNode; -} -void CXFA_Node::Script_TreeClass_ResolveNode(CFXJSE_Arguments* pArguments) { - int32_t iLength = pArguments->GetLength(); - if (iLength != 1) { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"resolveNode"); - return; - } - CFX_WideString wsExpression; - CFX_ByteString bsExpression = pArguments->GetUTF8String(0); - wsExpression = - CFX_WideString::FromUTF8(bsExpression, bsExpression.GetLength()); - IXFA_ScriptContext* pScriptContext = m_pDocument->GetScriptContext(); - if (!pScriptContext) { - return; - } - CXFA_Node* refNode = this; - if (refNode->GetClassID() == XFA_ELEMENT_Xfa) { - refNode = ToNode(pScriptContext->GetThisObject()); - } - FX_DWORD dwFlag = XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Attributes | - XFA_RESOLVENODE_Properties | XFA_RESOLVENODE_Parent | - XFA_RESOLVENODE_Siblings; - XFA_RESOLVENODE_RS resoveNodeRS; - int32_t iRet = pScriptContext->ResolveObjects(refNode, wsExpression, - resoveNodeRS, dwFlag); - if (iRet < 1) { - return FXJSE_Value_SetNull(pArguments->GetReturnValue()); - } - FXJSE_HVALUE hValue = NULL; - if (resoveNodeRS.dwFlags == XFA_RESOVENODE_RSTYPE_Nodes) { - CXFA_Object* pNode = resoveNodeRS.nodes[0]; - hValue = pScriptContext->GetJSValueFromMap(pNode); - FXJSE_Value_Set(pArguments->GetReturnValue(), hValue); - } else { - const XFA_SCRIPTATTRIBUTEINFO* lpAttributeInfo = - resoveNodeRS.pScriptAttribute; - if (lpAttributeInfo && lpAttributeInfo->eValueType == XFA_SCRIPT_Object) { - hValue = FXJSE_Value_Create(pScriptContext->GetRuntime()); - (resoveNodeRS.nodes[0]->*(lpAttributeInfo->lpfnCallback))( - hValue, FALSE, (XFA_ATTRIBUTE)lpAttributeInfo->eAttribute); - FXJSE_Value_Set(pArguments->GetReturnValue(), hValue); - FXJSE_Value_Release(hValue); - } else { - FXJSE_Value_SetNull(pArguments->GetReturnValue()); - } - } -} -void CXFA_Node::Script_TreeClass_ResolveNodes(CFXJSE_Arguments* pArguments) { - int32_t iLength = pArguments->GetLength(); - if (iLength != 1) { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"resolveNodes"); - return; - } - CFX_WideString wsExpression; - CFX_ByteString bsExpression = pArguments->GetUTF8String(0); - wsExpression = - CFX_WideString::FromUTF8(bsExpression, bsExpression.GetLength()); - FXJSE_HVALUE hValue = pArguments->GetReturnValue(); - if (!hValue) { - return; - } - FX_DWORD dwFlag = XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Attributes | - XFA_RESOLVENODE_Properties | XFA_RESOLVENODE_Parent | - XFA_RESOLVENODE_Siblings; - CXFA_Node* refNode = this; - if (refNode->GetClassID() == XFA_ELEMENT_Xfa) { - refNode = ToNode(m_pDocument->GetScriptContext()->GetThisObject()); - } - Script_Som_ResolveNodeList(hValue, wsExpression, dwFlag, refNode); -} -void CXFA_Node::Script_Som_ResolveNodeList(FXJSE_HVALUE hValue, - CFX_WideString wsExpression, - FX_DWORD dwFlag, - CXFA_Node* refNode) { - IXFA_ScriptContext* pScriptContext = m_pDocument->GetScriptContext(); - if (!pScriptContext) { - return; - } - XFA_RESOLVENODE_RS resoveNodeRS; - if (refNode == NULL) { - refNode = this; - } - pScriptContext->ResolveObjects(refNode, wsExpression, resoveNodeRS, dwFlag); - CXFA_ArrayNodeList* pNodeList = new CXFA_ArrayNodeList(m_pDocument); - if (resoveNodeRS.dwFlags == XFA_RESOVENODE_RSTYPE_Nodes) { - for (int32_t i = 0; i < resoveNodeRS.nodes.GetSize(); i++) { - if (resoveNodeRS.nodes[i]->IsNode()) - pNodeList->Append(resoveNodeRS.nodes[i]->AsNode()); - } - } else { - CXFA_HVALUEArray hValueArray(pScriptContext->GetRuntime()); - if (resoveNodeRS.GetAttributeResult(hValueArray) > 0) { - CXFA_ObjArray objectArray; - hValueArray.GetAttributeObject(objectArray); - for (int32_t i = 0; i < objectArray.GetSize(); i++) { - if (objectArray[i]->IsNode()) - pNodeList->Append(objectArray[i]->AsNode()); - } - } - } - FXJSE_Value_SetObject(hValue, (CXFA_Object*)pNodeList, - pScriptContext->GetJseNormalClass()); -} -void CXFA_Node::Script_TreeClass_All(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - if (bSetting) { - ThrowScriptErrorMessage(XFA_IDS_INVAlID_PROP_SET); - } else { - FX_DWORD dwFlag = XFA_RESOLVENODE_Siblings | XFA_RESOLVENODE_ALL; - CFX_WideString wsName; - GetAttribute(XFA_ATTRIBUTE_Name, wsName); - CFX_WideString wsExpression = wsName + FX_WSTRC(L"[*]"); - Script_Som_ResolveNodeList(hValue, wsExpression, dwFlag); - } -} -void CXFA_Node::Script_TreeClass_Nodes(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - IXFA_ScriptContext* pScriptContext = m_pDocument->GetScriptContext(); - if (!pScriptContext) { - return; - } - if (bSetting) { - IXFA_AppProvider* pAppProvider = m_pDocument->GetNotify()->GetAppProvider(); - FXSYS_assert(pAppProvider); - CFX_WideString wsMessage; - pAppProvider->LoadString(XFA_IDS_Unable_TO_SET, wsMessage); - FXJSE_ThrowMessage("", FX_UTF8Encode(wsMessage, wsMessage.GetLength())); - } else { - CXFA_AttachNodeList* pNodeList = new CXFA_AttachNodeList(m_pDocument, this); - FXJSE_Value_SetObject(hValue, (CXFA_Object*)pNodeList, - pScriptContext->GetJseNormalClass()); - } -} -void CXFA_Node::Script_TreeClass_ClassAll(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - if (bSetting) { - ThrowScriptErrorMessage(XFA_IDS_INVAlID_PROP_SET); - } else { - FX_DWORD dwFlag = XFA_RESOLVENODE_Siblings | XFA_RESOLVENODE_ALL; - CFX_WideStringC wsName; - GetClassName(wsName); - CFX_WideString wsExpression = FX_WSTRC(L"#") + wsName + FX_WSTRC(L"[*]"); - Script_Som_ResolveNodeList(hValue, wsExpression, dwFlag); - } -} -void CXFA_Node::Script_TreeClass_Parent(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - if (bSetting) { - ThrowScriptErrorMessage(XFA_IDS_INVAlID_PROP_SET); - } else { - CXFA_Node* pParent = GetNodeItem(XFA_NODEITEM_Parent); - if (pParent) { - FXJSE_Value_Set( - hValue, m_pDocument->GetScriptContext()->GetJSValueFromMap(pParent)); - } else { - FXJSE_Value_SetNull(hValue); - } - } -} -void CXFA_Node::Script_TreeClass_Index(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - if (bSetting) { - ThrowScriptErrorMessage(XFA_IDS_INVAlID_PROP_SET); - } else { - FXJSE_Value_SetInteger(hValue, GetNodeSameNameIndex()); - } -} -void CXFA_Node::Script_TreeClass_ClassIndex(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - if (bSetting) { - ThrowScriptErrorMessage(XFA_IDS_INVAlID_PROP_SET); - } else { - FXJSE_Value_SetInteger(hValue, GetNodeSameClassIndex()); - } -} -void CXFA_Node::Script_TreeClass_SomExpression(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - if (bSetting) { - ThrowScriptErrorMessage(XFA_IDS_INVAlID_PROP_SET); - } else { - CFX_WideString wsSOMExpression; - GetSOMExpression(wsSOMExpression); - FXJSE_Value_SetUTF8String(hValue, FX_UTF8Encode(wsSOMExpression)); - } -} -void CXFA_Node::Script_NodeClass_ApplyXSL(CFXJSE_Arguments* pArguments) { - int32_t iLength = pArguments->GetLength(); - if (iLength != 1) { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"applyXSL"); - return; - } - CFX_WideString wsExpression; - CFX_ByteString bsExpression = pArguments->GetUTF8String(0); - wsExpression = - CFX_WideString::FromUTF8(bsExpression, bsExpression.GetLength()); -} -void CXFA_Node::Script_NodeClass_AssignNode(CFXJSE_Arguments* pArguments) { - int32_t iLength = pArguments->GetLength(); - if (iLength < 1 || iLength > 3) { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"assignNode"); - return; - } - CFX_WideString wsExpression; - CFX_WideString wsValue; - int32_t iAction = 0; - if (iLength >= 1) { - CFX_ByteString bsExpression = pArguments->GetUTF8String(0); - wsExpression = - CFX_WideString::FromUTF8(bsExpression, bsExpression.GetLength()); - } - if (iLength >= 2) { - CFX_ByteString bsValue = pArguments->GetUTF8String(1); - wsValue = CFX_WideString::FromUTF8(bsValue, bsValue.GetLength()); - } - if (iLength >= 3) { - iAction = pArguments->GetInt32(2); - } -} -void CXFA_Node::Script_NodeClass_Clone(CFXJSE_Arguments* pArguments) { - int32_t iLength = pArguments->GetLength(); - if (iLength != 1) { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"clone"); - return; - } - FX_BOOL bClone = TRUE; - bClone = pArguments->GetInt32(0) == 0 ? FALSE : TRUE; - CXFA_Node* pCloneNode = Clone(bClone); - FXJSE_Value_Set( - pArguments->GetReturnValue(), - m_pDocument->GetScriptContext()->GetJSValueFromMap(pCloneNode)); -} -void CXFA_Node::Script_NodeClass_GetAttribute(CFXJSE_Arguments* pArguments) { - int32_t iLength = pArguments->GetLength(); - if (iLength != 1) { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"getAttribute"); - return; - } - CFX_WideString wsExpression; - CFX_ByteString bsExpression = pArguments->GetUTF8String(0); - wsExpression = - CFX_WideString::FromUTF8(bsExpression, bsExpression.GetLength()); - CFX_WideString wsValue; - GetAttribute(wsExpression, wsValue); - FXJSE_HVALUE hValue = pArguments->GetReturnValue(); - if (hValue) { - FXJSE_Value_SetUTF8String(hValue, FX_UTF8Encode(wsValue)); - } -} -void CXFA_Node::Script_NodeClass_GetElement(CFXJSE_Arguments* pArguments) { - int32_t iLength = pArguments->GetLength(); - if (iLength < 1 || iLength > 2) { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"getElement"); - return; - } - CFX_WideString wsExpression; - int32_t iValue = 0; - if (iLength >= 1) { - CFX_ByteString bsExpression = pArguments->GetUTF8String(0); - wsExpression = - CFX_WideString::FromUTF8(bsExpression, bsExpression.GetLength()); - } - if (iLength >= 2) { - iValue = pArguments->GetInt32(1); - } - const XFA_ELEMENTINFO* pElementInfo = XFA_GetElementByName(wsExpression); - CXFA_Node* pNode = GetProperty(iValue, pElementInfo->eName); - FXJSE_Value_Set(pArguments->GetReturnValue(), - m_pDocument->GetScriptContext()->GetJSValueFromMap(pNode)); -} -void CXFA_Node::Script_NodeClass_IsPropertySpecified( - CFXJSE_Arguments* pArguments) { - int32_t iLength = pArguments->GetLength(); - if (iLength < 1 || iLength > 3) { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"isPropertySpecified"); - return; - } - CFX_WideString wsExpression; - FX_BOOL bParent = TRUE; - int32_t iIndex = 0; - if (iLength >= 1) { - CFX_ByteString bsExpression = pArguments->GetUTF8String(0); - wsExpression = - CFX_WideString::FromUTF8(bsExpression, bsExpression.GetLength()); - } - if (iLength >= 2) { - bParent = pArguments->GetInt32(1) == 0 ? FALSE : TRUE; - } - if (iLength >= 3) { - iIndex = pArguments->GetInt32(2); - } - FX_BOOL bHas = FALSE; - const XFA_ATTRIBUTEINFO* pAttributeInfo = - XFA_GetAttributeByName(wsExpression); - CFX_WideString wsValue; - if (pAttributeInfo) { - bHas = HasAttribute(pAttributeInfo->eName); - } - if (!bHas) { - const XFA_ELEMENTINFO* pElementInfo = XFA_GetElementByName(wsExpression); - bHas = (GetProperty(iIndex, pElementInfo->eName) != NULL); - } - FXJSE_HVALUE hValue = pArguments->GetReturnValue(); - if (hValue) { - FXJSE_Value_SetBoolean(hValue, bHas); - } -} -void CXFA_Node::Script_NodeClass_LoadXML(CFXJSE_Arguments* pArguments) { - int32_t iLength = pArguments->GetLength(); - if (iLength < 1 || iLength > 3) { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"loadXML"); - return; - } - CFX_WideString wsExpression; - FX_BOOL bIgnoreRoot = TRUE; - FX_BOOL bOverwrite = 0; - if (iLength >= 1) { - CFX_ByteString bsExpression = pArguments->GetUTF8String(0); - wsExpression = - CFX_WideString::FromUTF8(bsExpression, bsExpression.GetLength()); - if (wsExpression.IsEmpty()) { - return; - } - } - if (iLength >= 2) { - bIgnoreRoot = pArguments->GetInt32(1) == 0 ? FALSE : TRUE; - } - if (iLength >= 3) { - bOverwrite = pArguments->GetInt32(2) == 0 ? FALSE : TRUE; - } - IXFA_Parser* pParser = IXFA_Parser::Create(m_pDocument); - if (!pParser) { - return; - } - IFDE_XMLNode* pXMLNode = NULL; - int32_t iParserStatus = pParser->ParseXMLData(wsExpression, pXMLNode, NULL); - if (iParserStatus != XFA_PARSESTATUS_Done || !pXMLNode) { - pParser->Release(); - pParser = NULL; - return; - } - if (bIgnoreRoot && (pXMLNode->GetType() != FDE_XMLNODE_Element || - XFA_RecognizeRichText((IFDE_XMLElement*)pXMLNode))) { - bIgnoreRoot = FALSE; - } - CXFA_Node* pFakeRoot = Clone(FALSE); - CFX_WideStringC wsContentType = GetCData(XFA_ATTRIBUTE_ContentType); - if (!wsContentType.IsEmpty()) { - pFakeRoot->SetCData(XFA_ATTRIBUTE_ContentType, wsContentType); - } - IFDE_XMLNode* pFakeXMLRoot = pFakeRoot->GetXMLMappingNode(); - if (!pFakeXMLRoot) { - IFDE_XMLNode* pThisXMLRoot = GetXMLMappingNode(); - pFakeXMLRoot = pThisXMLRoot ? pThisXMLRoot->Clone(FALSE) : NULL; - } - if (!pFakeXMLRoot) { - CFX_WideStringC wsClassName; - GetClassName(wsClassName); - pFakeXMLRoot = IFDE_XMLElement::Create(wsClassName); - } - if (bIgnoreRoot) { - IFDE_XMLNode* pXMLChild = pXMLNode->GetNodeItem(IFDE_XMLNode::FirstChild); - while (pXMLChild) { - IFDE_XMLNode* pXMLSibling = - pXMLChild->GetNodeItem(IFDE_XMLNode::NextSibling); - pXMLNode->RemoveChildNode(pXMLChild); - pFakeXMLRoot->InsertChildNode(pXMLChild); - pXMLChild = pXMLSibling; - } - } else { - IFDE_XMLNode* pXMLParent = pXMLNode->GetNodeItem(IFDE_XMLNode::Parent); - if (pXMLParent) { - pXMLParent->RemoveChildNode(pXMLNode); - } - pFakeXMLRoot->InsertChildNode(pXMLNode); - } - pParser->ConstructXFANode(pFakeRoot, pFakeXMLRoot); - pFakeRoot = pParser->GetRootNode(); - if (pFakeRoot) { - if (bOverwrite) { - CXFA_Node* pChild = GetNodeItem(XFA_NODEITEM_FirstChild); - CXFA_Node* pNewChild = pFakeRoot->GetNodeItem(XFA_NODEITEM_FirstChild); - int32_t index = 0; - while (pNewChild) { - CXFA_Node* pItem = pNewChild->GetNodeItem(XFA_NODEITEM_NextSibling); - pFakeRoot->RemoveChild(pNewChild); - InsertChild(index++, pNewChild); - pNewChild->SetFlag(XFA_NODEFLAG_Initialized); - pNewChild = pItem; - } - while (pChild) { - CXFA_Node* pItem = pChild->GetNodeItem(XFA_NODEITEM_NextSibling); - RemoveChild(pChild); - pFakeRoot->InsertChild(pChild); - pChild = pItem; - } - if (GetPacketID() == XFA_XDPPACKET_Form && - GetClassID() == XFA_ELEMENT_ExData) { - IFDE_XMLNode* pTempXMLNode = GetXMLMappingNode(); - SetXMLMappingNode(pFakeXMLRoot); - SetFlag(XFA_NODEFLAG_OwnXMLNode, TRUE, FALSE); - if (pTempXMLNode && - pTempXMLNode->GetNodeItem(IFDE_XMLNode::Parent) == NULL) { - pFakeXMLRoot = pTempXMLNode; - } else { - pFakeXMLRoot = NULL; - } - } - MoveBufferMapData(pFakeRoot, this, XFA_CalcData, TRUE); - } else { - CXFA_Node* pChild = pFakeRoot->GetNodeItem(XFA_NODEITEM_FirstChild); - while (pChild) { - CXFA_Node* pItem = pChild->GetNodeItem(XFA_NODEITEM_NextSibling); - pFakeRoot->RemoveChild(pChild); - InsertChild(pChild); - pChild->SetFlag(XFA_NODEFLAG_Initialized); - pChild = pItem; - } - } - if (pFakeXMLRoot) { - pFakeRoot->SetXMLMappingNode(pFakeXMLRoot); - pFakeRoot->SetFlag(XFA_NODEFLAG_OwnXMLNode, TRUE, FALSE); - } - pFakeRoot->SetFlag(XFA_NODEFLAG_HasRemoved, TRUE, FALSE); - } else { - if (pFakeXMLRoot) { - pFakeXMLRoot->Release(); - pFakeXMLRoot = NULL; - } - } - pParser->Release(); - pParser = NULL; -} -void CXFA_Node::Script_NodeClass_SaveFilteredXML(CFXJSE_Arguments* pArguments) { -} - -void CXFA_Node::Script_NodeClass_SaveXML(CFXJSE_Arguments* pArguments) { - int32_t iLength = pArguments->GetLength(); - if (iLength < 0 || iLength > 1) { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"saveXML"); - return; - } - FX_BOOL bPrettyMode = FALSE; - if (iLength == 1) { - CFX_ByteString bsPretty = pArguments->GetUTF8String(0); - if (!bsPretty.Equal("pretty")) { - ThrowScriptErrorMessage(XFA_IDS_ARGUMENT_MISMATCH); - return; - } - bPrettyMode = TRUE; - } - CFX_ByteStringC bsXMLHeader = "\n"; - if (GetPacketID() == XFA_XDPPACKET_Form) { - IFX_MemoryStream* pMemoryStream = FX_CreateMemoryStream(TRUE); - IFX_Stream* pStream = IFX_Stream::CreateStream( - (IFX_FileWrite*)pMemoryStream, - FX_STREAMACCESS_Text | FX_STREAMACCESS_Write | FX_STREAMACCESS_Append); - if (!pStream) { - FXJSE_Value_SetUTF8String(pArguments->GetReturnValue(), bsXMLHeader); - pMemoryStream->Release(); - pMemoryStream = NULL; - return; - } - pStream->SetCodePage(FX_CODEPAGE_UTF8); - pStream->WriteData(bsXMLHeader.GetPtr(), bsXMLHeader.GetLength()); - XFA_DataExporter_RegenerateFormFile(this, pStream, NULL, TRUE); - FXJSE_Value_SetUTF8String( - pArguments->GetReturnValue(), - CFX_ByteStringC(pMemoryStream->GetBuffer(), pMemoryStream->GetSize())); - pStream->Release(); - pStream = NULL; - if (pMemoryStream) { - pMemoryStream->Release(); - pMemoryStream = NULL; - } - return; - } - if (GetPacketID() == XFA_XDPPACKET_Datasets) { - IFDE_XMLNode* pElement = GetXMLMappingNode(); - if (!pElement || pElement->GetType() != FDE_XMLNODE_Element) { - FXJSE_Value_SetUTF8String(pArguments->GetReturnValue(), bsXMLHeader); - return; - } - XFA_DataExporter_DealWithDataGroupNode(this); - IFX_MemoryStream* pMemoryStream = FX_CreateMemoryStream(TRUE); - IFX_Stream* pStream = IFX_Stream::CreateStream( - (IFX_FileWrite*)pMemoryStream, - FX_STREAMACCESS_Text | FX_STREAMACCESS_Write | FX_STREAMACCESS_Append); - if (pStream) { - pStream->SetCodePage(FX_CODEPAGE_UTF8); - pStream->WriteData(bsXMLHeader.GetPtr(), bsXMLHeader.GetLength()); - pElement->SaveXMLNode(pStream); - FXJSE_Value_SetUTF8String(pArguments->GetReturnValue(), - CFX_ByteStringC(pMemoryStream->GetBuffer(), - pMemoryStream->GetSize())); - pStream->Release(); - pStream = NULL; - } - if (pMemoryStream) { - pMemoryStream->Release(); - pMemoryStream = NULL; - } - return; - } - FXJSE_Value_SetUTF8String(pArguments->GetReturnValue(), ""); -} - -void CXFA_Node::Script_NodeClass_SetAttribute(CFXJSE_Arguments* pArguments) { - int32_t iLength = pArguments->GetLength(); - if (iLength != 2) { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"setAttribute"); - return; - } - CFX_WideString wsAttribute; - CFX_WideString wsAttributeValue; - CFX_ByteString bsAttributeValue = pArguments->GetUTF8String(0); - CFX_ByteString bsAttribute = pArguments->GetUTF8String(1); - wsAttributeValue = - CFX_WideString::FromUTF8(bsAttributeValue, bsAttributeValue.GetLength()); - wsAttribute = CFX_WideString::FromUTF8(bsAttribute, bsAttribute.GetLength()); - SetAttribute(wsAttribute, wsAttributeValue, TRUE); -} -void CXFA_Node::Script_NodeClass_SetElement(CFXJSE_Arguments* pArguments) { - int32_t iLength = pArguments->GetLength(); - if (iLength != 1 && iLength != 2) { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"setElement"); - return; - } - CXFA_Node* pNode = NULL; - CFX_WideString wsName; - if (iLength >= 1) { - pNode = static_cast(pArguments->GetObject(0)); - } - if (iLength >= 2) { - CFX_ByteString bsName = pArguments->GetUTF8String(1); - wsName = CFX_WideString::FromUTF8(bsName, bsName.GetLength()); - } -} -void CXFA_Node::Script_NodeClass_Ns(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - if (bSetting) { - ThrowScriptErrorMessage(XFA_IDS_INVAlID_PROP_SET); - } else { - CFX_WideString wsNameSpace; - TryNamespace(wsNameSpace); - FXJSE_Value_SetUTF8String(hValue, FX_UTF8Encode(wsNameSpace)); - } -} -void CXFA_Node::Script_NodeClass_Model(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - if (bSetting) { - ThrowScriptErrorMessage(XFA_IDS_INVAlID_PROP_SET); - } else { - FXJSE_Value_Set(hValue, m_pDocument->GetScriptContext()->GetJSValueFromMap( - GetModelNode())); - } -} -void CXFA_Node::Script_NodeClass_IsContainer(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - if (bSetting) { - ThrowScriptErrorMessage(XFA_IDS_INVAlID_PROP_SET); - } else { - FXJSE_Value_SetBoolean(hValue, IsContainerNode()); - } -} -void CXFA_Node::Script_NodeClass_IsNull(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - if (bSetting) { - ThrowScriptErrorMessage(XFA_IDS_INVAlID_PROP_SET); - } else { - if (GetClassID() == XFA_ELEMENT_Subform) { - FXJSE_Value_SetBoolean(hValue, FALSE); - return; - } - CFX_WideString strValue; - FXJSE_Value_SetBoolean(hValue, !TryContent(strValue) || strValue.IsEmpty()); - } -} -void CXFA_Node::Script_NodeClass_OneOfChild(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - if (bSetting) { - ThrowScriptErrorMessage(XFA_IDS_INVAlID_PROP_SET); - } else { - CXFA_NodeArray properts; - int32_t iSize = GetNodeList(properts, XFA_NODEFILTER_OneOfProperty); - if (iSize > 0) { - FXJSE_Value_Set( - hValue, - m_pDocument->GetScriptContext()->GetJSValueFromMap(properts[0])); - } - } -} -void CXFA_Node::Script_ContainerClass_GetDelta(CFXJSE_Arguments* pArguments) {} -void CXFA_Node::Script_ContainerClass_GetDeltas(CFXJSE_Arguments* pArguments) { - CXFA_ArrayNodeList* pFormNodes = new CXFA_ArrayNodeList(m_pDocument); - FXJSE_Value_SetObject(pArguments->GetReturnValue(), (CXFA_Object*)pFormNodes, - m_pDocument->GetScriptContext()->GetJseNormalClass()); -} -void CXFA_Node::Script_ModelClass_ClearErrorList(CFXJSE_Arguments* pArguments) { -} -void CXFA_Node::Script_ModelClass_CreateNode(CFXJSE_Arguments* pArguments) { - Script_Template_CreateNode(pArguments); -} -void CXFA_Node::Script_ModelClass_IsCompatibleNS(CFXJSE_Arguments* pArguments) { - int32_t iLength = pArguments->GetLength(); - if (iLength < 1) { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"isCompatibleNS"); - return; - } - CFX_WideString wsNameSpace; - if (iLength >= 1) { - CFX_ByteString bsNameSpace = pArguments->GetUTF8String(0); - wsNameSpace = - CFX_WideString::FromUTF8(bsNameSpace, bsNameSpace.GetLength()); - } - CFX_WideString wsNodeNameSpace; - TryNamespace(wsNodeNameSpace); - FXJSE_HVALUE hValue = pArguments->GetReturnValue(); - if (hValue) { - FXJSE_Value_SetBoolean(hValue, wsNodeNameSpace.Equal(wsNameSpace)); - } -} -void CXFA_Node::Script_ModelClass_Context(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) {} -void CXFA_Node::Script_ModelClass_AliasNode(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) {} -void CXFA_Node::Script_Attribute_Integer(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - if (bSetting) { - SetInteger(eAttribute, FXJSE_Value_ToInteger(hValue), TRUE); - } else { - FXJSE_Value_SetInteger(hValue, GetInteger(eAttribute)); - } -} -void CXFA_Node::Script_Attribute_IntegerRead(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - if (!bSetting) { - FXJSE_Value_SetInteger(hValue, GetInteger(eAttribute)); - } else { - ThrowScriptErrorMessage(XFA_IDS_INVAlID_PROP_SET); - } -} -void CXFA_Node::Script_Attribute_BOOL(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - if (bSetting) { - SetBoolean(eAttribute, FXJSE_Value_ToBoolean(hValue), TRUE); - } else { - FXJSE_Value_SetUTF8String(hValue, GetBoolean(eAttribute) ? "1" : "0"); - } -} -void CXFA_Node::Script_Attribute_BOOLRead(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - if (!bSetting) { - FXJSE_Value_SetUTF8String(hValue, GetBoolean(eAttribute) ? "1" : "0"); - } else { - ThrowScriptErrorMessage(XFA_IDS_INVAlID_PROP_SET); - } -} -void CXFA_Node::Script_Attribute_SendAttributeChangeMessage( - void* eAttribute, - void* eValue, - FX_BOOL bScriptModify) { - CXFA_LayoutProcessor* pLayoutPro = m_pDocument->GetLayoutProcessor(); - if (!pLayoutPro) { - return; - } - IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); - if (!pNotify) { - return; - } - FX_DWORD dwPacket = GetPacketID(); - if (dwPacket & XFA_XDPPACKET_Form) { - FX_BOOL bNeedFindContainer = FALSE; - XFA_ELEMENT eType = GetClassID(); - switch (eType) { - case XFA_ELEMENT_Caption: - bNeedFindContainer = TRUE; - pNotify->OnNodeEvent(this, XFA_NODEEVENT_ValueChanged, eAttribute, - eValue, this, GetNodeItem(XFA_NODEITEM_Parent)); - break; - case XFA_ELEMENT_Font: - case XFA_ELEMENT_Para: { - bNeedFindContainer = TRUE; - CXFA_Node* pParentNode = GetNodeItem(XFA_NODEITEM_Parent); - if (pParentNode->GetClassID() == XFA_ELEMENT_Caption) { - pNotify->OnNodeEvent(this, XFA_NODEEVENT_ValueChanged, eAttribute, - eValue, pParentNode, - pParentNode->GetNodeItem(XFA_NODEITEM_Parent)); - } else { - pNotify->OnNodeEvent(this, XFA_NODEEVENT_ValueChanged, eAttribute, - eValue, this, pParentNode); - } - } break; - case XFA_ELEMENT_Margin: { - bNeedFindContainer = TRUE; - CXFA_Node* pParentNode = GetNodeItem(XFA_NODEITEM_Parent); - XFA_ELEMENT eParentType = pParentNode->GetClassID(); - if (pParentNode->IsContainerNode()) { - pNotify->OnNodeEvent(this, XFA_NODEEVENT_ValueChanged, eAttribute, - eValue, this, pParentNode); - } else if (eParentType == XFA_ELEMENT_Caption) { - pNotify->OnNodeEvent(this, XFA_NODEEVENT_ValueChanged, eAttribute, - eValue, pParentNode, - pParentNode->GetNodeItem(XFA_NODEITEM_Parent)); - } else { - CXFA_Node* pNode = pParentNode->GetNodeItem(XFA_NODEITEM_Parent); - if (pNode && pNode->GetClassID() == XFA_ELEMENT_Ui) { - pNotify->OnNodeEvent(this, XFA_NODEEVENT_ValueChanged, eAttribute, - eValue, pNode, - pNode->GetNodeItem(XFA_NODEITEM_Parent)); - } - } - } break; - case XFA_ELEMENT_Comb: { - CXFA_Node* pEditNode = GetNodeItem(XFA_NODEITEM_Parent); - XFA_ELEMENT eUIType = pEditNode->GetClassID(); - if (pEditNode && (eUIType == XFA_ELEMENT_DateTimeEdit || - eUIType == XFA_ELEMENT_NumericEdit || - eUIType == XFA_ELEMENT_TextEdit)) { - CXFA_Node* pUINode = pEditNode->GetNodeItem(XFA_NODEITEM_Parent); - if (pUINode) { - pNotify->OnNodeEvent(this, XFA_NODEEVENT_ValueChanged, eAttribute, - eValue, pUINode, - pUINode->GetNodeItem(XFA_NODEITEM_Parent)); - } - } - } break; - case XFA_ELEMENT_Button: - case XFA_ELEMENT_Barcode: - case XFA_ELEMENT_ChoiceList: - case XFA_ELEMENT_DateTimeEdit: - case XFA_ELEMENT_NumericEdit: - case XFA_ELEMENT_PasswordEdit: - case XFA_ELEMENT_TextEdit: { - CXFA_Node* pUINode = GetNodeItem(XFA_NODEITEM_Parent); - if (pUINode) { - pNotify->OnNodeEvent(this, XFA_NODEEVENT_ValueChanged, eAttribute, - eValue, pUINode, - pUINode->GetNodeItem(XFA_NODEITEM_Parent)); - } - } break; - case XFA_ELEMENT_CheckButton: { - bNeedFindContainer = TRUE; - CXFA_Node* pUINode = GetNodeItem(XFA_NODEITEM_Parent); - if (pUINode) { - pNotify->OnNodeEvent(this, XFA_NODEEVENT_ValueChanged, eAttribute, - eValue, pUINode, - pUINode->GetNodeItem(XFA_NODEITEM_Parent)); - } - } break; - case XFA_ELEMENT_Keep: - case XFA_ELEMENT_Bookend: - case XFA_ELEMENT_Break: - case XFA_ELEMENT_BreakAfter: - case XFA_ELEMENT_BreakBefore: - case XFA_ELEMENT_Overflow: - bNeedFindContainer = TRUE; - break; - case XFA_ELEMENT_Area: - case XFA_ELEMENT_Draw: - case XFA_ELEMENT_ExclGroup: - case XFA_ELEMENT_Field: - case XFA_ELEMENT_Subform: - case XFA_ELEMENT_SubformSet: - pLayoutPro->AddChangedContainer(this); - pNotify->OnNodeEvent(this, XFA_NODEEVENT_ValueChanged, eAttribute, - eValue, this, this); - break; - case XFA_ELEMENT_Sharptext: - case XFA_ELEMENT_Sharpxml: - case XFA_ELEMENT_SharpxHTML: { - CXFA_Node* pTextNode = GetNodeItem(XFA_NODEITEM_Parent); - if (!pTextNode) { - return; - } - CXFA_Node* pValueNode = pTextNode->GetNodeItem(XFA_NODEITEM_Parent); - if (!pValueNode) { - return; - } - XFA_ELEMENT eType = pValueNode->GetClassID(); - if (eType == XFA_ELEMENT_Value) { - bNeedFindContainer = TRUE; - CXFA_Node* pNode = pValueNode->GetNodeItem(XFA_NODEITEM_Parent); - if (pNode && pNode->IsContainerNode()) { - if (bScriptModify) { - pValueNode = pNode; - } - pNotify->OnNodeEvent(this, XFA_NODEEVENT_ValueChanged, eAttribute, - eValue, pValueNode, pNode); - } else { - pNotify->OnNodeEvent(this, XFA_NODEEVENT_ValueChanged, eAttribute, - eValue, pNode, - pNode->GetNodeItem(XFA_NODEITEM_Parent)); - } - } else { - if (eType == XFA_ELEMENT_Items) { - CXFA_Node* pNode = pValueNode->GetNodeItem(XFA_NODEITEM_Parent); - if (pNode && pNode->IsContainerNode()) { - pNotify->OnNodeEvent(this, XFA_NODEEVENT_ValueChanged, eAttribute, - eValue, pValueNode, pNode); - } - } - } - } break; - default: - break; - } - if (bNeedFindContainer) { - CXFA_Node* pParent = this; - while (pParent) { - if (pParent->IsContainerNode()) { - break; - } - pParent = pParent->GetNodeItem(XFA_NODEITEM_Parent); - } - if (pParent) { - pLayoutPro->AddChangedContainer(pParent); - } - } - } else { - pNotify->OnNodeEvent(this, XFA_NODEEVENT_ValueChanged, eAttribute, eValue, - this, this); - } -} -void CXFA_Node::Script_Attribute_String(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - if (bSetting) { - CFX_ByteString szValue; - FXJSE_Value_ToUTF8String(hValue, szValue); - CFX_WideString wsValue = - CFX_WideString::FromUTF8(szValue, szValue.GetLength()); - SetAttribute(eAttribute, wsValue, TRUE); - if (eAttribute == XFA_ATTRIBUTE_Use && GetClassID() == XFA_ELEMENT_Desc) { - CFX_WideString wsUseVal = wsValue, wsID, wsSOM; - CXFA_Node* pTemplateNode = - ToNode(m_pDocument->GetXFAObject(XFA_HASHCODE_Template)); - CXFA_Node* pProtoRoot = - pTemplateNode->GetFirstChildByClass(XFA_ELEMENT_Subform) - ->GetFirstChildByClass(XFA_ELEMENT_Proto); - if (!wsUseVal.IsEmpty()) { - if (wsUseVal[0] == '#') { - wsID = CFX_WideString((const FX_WCHAR*)wsUseVal + 1, - wsUseVal.GetLength() - 1); - } else { - wsSOM = - CFX_WideString((const FX_WCHAR*)wsUseVal, wsUseVal.GetLength()); - } - } - CXFA_Node* pProtoNode = NULL; - if (!wsSOM.IsEmpty()) { - FX_DWORD dwFlag = XFA_RESOLVENODE_Children | - XFA_RESOLVENODE_Attributes | - XFA_RESOLVENODE_Properties | XFA_RESOLVENODE_Parent | - XFA_RESOLVENODE_Siblings; - XFA_RESOLVENODE_RS resoveNodeRS; - int32_t iRet = m_pDocument->GetScriptContext()->ResolveObjects( - pProtoRoot, wsSOM, resoveNodeRS, dwFlag); - if (iRet > 0 && resoveNodeRS.nodes[0]->IsNode()) { - pProtoNode = resoveNodeRS.nodes[0]->AsNode(); - } - } else if (!wsID.IsEmpty()) { - pProtoNode = m_pDocument->GetNodeByID(pProtoRoot, wsID); - } - if (pProtoNode) { - CXFA_Node* pHeadChild = GetNodeItem(XFA_NODEITEM_FirstChild); - while (pHeadChild) { - CXFA_Node* pSibling = - pHeadChild->GetNodeItem(XFA_NODEITEM_NextSibling); - RemoveChild(pHeadChild); - pHeadChild = pSibling; - } - CXFA_Node* pProtoForm = pProtoNode->CloneTemplateToForm(TRUE); - pHeadChild = pProtoForm->GetNodeItem(XFA_NODEITEM_FirstChild); - while (pHeadChild) { - CXFA_Node* pSibling = - pHeadChild->GetNodeItem(XFA_NODEITEM_NextSibling); - pProtoForm->RemoveChild(pHeadChild); - InsertChild(pHeadChild); - pHeadChild = pSibling; - } - m_pDocument->RemovePurgeNode(pProtoForm); - delete pProtoForm; - } - } - } else { - CFX_WideString wsValue; - GetAttribute(eAttribute, wsValue); - FXJSE_Value_SetUTF8String(hValue, - FX_UTF8Encode(wsValue, wsValue.GetLength())); - } -} -void CXFA_Node::Script_Attribute_StringRead(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - if (!bSetting) { - CFX_WideString wsValue; - GetAttribute(eAttribute, wsValue); - FXJSE_Value_SetUTF8String(hValue, - FX_UTF8Encode(wsValue, wsValue.GetLength())); - } else { - ThrowScriptErrorMessage(XFA_IDS_INVAlID_PROP_SET); - } -} -void CXFA_Node::Script_WsdlConnection_Execute(CFXJSE_Arguments* pArguments) { - int32_t argc = pArguments->GetLength(); - if ((argc == 0) || (argc == 1)) { - FXJSE_Value_SetBoolean(pArguments->GetReturnValue(), FALSE); - } else { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"execute"); - } -} -void CXFA_Node::Script_Delta_Restore(CFXJSE_Arguments* pArguments) { - int32_t argc = pArguments->GetLength(); - if (argc == 0) { - } else { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"restore"); - } -} -void CXFA_Node::Script_Delta_CurrentValue(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) {} -void CXFA_Node::Script_Delta_SavedValue(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) {} -void CXFA_Node::Script_Delta_Target(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) {} -void CXFA_Node::Script_Som_Message(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_SOM_MESSAGETYPE iMessageType) { - CXFA_WidgetData* pWidgetData = GetWidgetData(); - if (!pWidgetData) { - return; - } - FX_BOOL bNew = FALSE; - CXFA_Validate validate = pWidgetData->GetValidate(); - if (!validate) { - validate = pWidgetData->GetValidate(TRUE); - bNew = TRUE; - } - if (bSetting) { - CFX_ByteString bsMessage; - FXJSE_Value_ToUTF8String(hValue, bsMessage); - switch (iMessageType) { - case XFA_SOM_ValidationMessage: - validate.SetScriptMessageText( - CFX_WideString::FromUTF8(bsMessage, bsMessage.GetLength())); - break; - case XFA_SOM_FormatMessage: - validate.SetFormatMessageText( - CFX_WideString::FromUTF8(bsMessage, bsMessage.GetLength())); - break; - case XFA_SOM_MandatoryMessage: - validate.SetNullMessageText( - CFX_WideString::FromUTF8(bsMessage, bsMessage.GetLength())); - break; - default: - break; - } - if (!bNew) { - IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); - if (!pNotify) { - return; - } - pNotify->AddCalcValidate(this); - } - } else { - CFX_WideString wsMessage; - switch (iMessageType) { - case XFA_SOM_ValidationMessage: - validate.GetScriptMessageText(wsMessage); - break; - case XFA_SOM_FormatMessage: - validate.GetFormatMessageText(wsMessage); - break; - case XFA_SOM_MandatoryMessage: - validate.GetNullMessageText(wsMessage); - break; - default: - break; - } - FXJSE_Value_SetUTF8String(hValue, FX_UTF8Encode(wsMessage)); - } -} -void CXFA_Node::Script_Som_ValidationMessage(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - Script_Som_Message(hValue, bSetting, XFA_SOM_ValidationMessage); -} -void CXFA_Node::Script_Field_Length(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - if (bSetting) { - ThrowScriptErrorMessage(XFA_IDS_INVAlID_PROP_SET); - } else { - CXFA_WidgetData* pWidgetData = GetWidgetData(); - if (!pWidgetData) { - FXJSE_Value_SetInteger(hValue, 0); - return; - } - FXJSE_Value_SetInteger(hValue, pWidgetData->CountChoiceListItems(TRUE)); - } -} -void CXFA_Node::Script_Som_DefaultValue(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - XFA_ELEMENT classID = GetClassID(); - if (classID == XFA_ELEMENT_Field) { - Script_Field_DefaultValue(hValue, bSetting, eAttribute); - return; - } else if (classID == XFA_ELEMENT_Draw) { - Script_Draw_DefaultValue(hValue, bSetting, eAttribute); - return; - } else if (classID == XFA_ELEMENT_Boolean) { - Script_Boolean_Value(hValue, bSetting, eAttribute); - return; - } - if (bSetting) { - CFX_ByteString newValue; - if (!(FXJSE_Value_IsNull(hValue) || FXJSE_Value_IsUndefined(hValue))) { - FXJSE_Value_ToUTF8String(hValue, newValue); - } - CFX_WideString wsNewValue = - CFX_WideString::FromUTF8(newValue, newValue.GetLength()); - CFX_WideString wsFormatValue(wsNewValue); - CXFA_WidgetData* pContainerWidgetData = NULL; - if (GetPacketID() == XFA_XDPPACKET_Datasets) { - CXFA_NodeArray formNodes; - GetBindItems(formNodes); - CFX_WideString wsPicture; - for (int32_t i = 0; i < formNodes.GetSize(); i++) { - CXFA_Node* pFormNode = formNodes.GetAt(i); - if (!pFormNode || pFormNode->HasFlag(XFA_NODEFLAG_HasRemoved)) { - continue; - } - pContainerWidgetData = pFormNode->GetContainerWidgetData(); - if (pContainerWidgetData) { - pContainerWidgetData->GetPictureContent(wsPicture, - XFA_VALUEPICTURE_DataBind); - } - if (!wsPicture.IsEmpty()) { - break; - } - pContainerWidgetData = NULL; - } - } else if (GetPacketID() == XFA_XDPPACKET_Form) { - pContainerWidgetData = GetContainerWidgetData(); - } - if (pContainerWidgetData) { - pContainerWidgetData->GetFormatDataValue(wsNewValue, wsFormatValue); - } - SetScriptContent(wsNewValue, wsFormatValue, TRUE, TRUE); - } else { - CFX_WideString content = GetScriptContent(TRUE); - if (content.IsEmpty() && classID != XFA_ELEMENT_Text && - classID != XFA_ELEMENT_SubmitUrl) { - FXJSE_Value_SetNull(hValue); - } else if (classID == XFA_ELEMENT_Integer) { - FXJSE_Value_SetInteger(hValue, FXSYS_wtoi(content)); - } else if (classID == XFA_ELEMENT_Float || classID == XFA_ELEMENT_Decimal) { - CFX_Decimal decimal(content); - FXJSE_Value_SetFloat(hValue, (FX_FLOAT)(double)decimal); - } else { - FXJSE_Value_SetUTF8String(hValue, - FX_UTF8Encode(content, content.GetLength())); - } - } -} -void CXFA_Node::Script_Som_DefaultValue_Read(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - if (bSetting) { - ThrowScriptErrorMessage(XFA_IDS_INVAlID_PROP_SET); - return; - } - CFX_WideString content = GetScriptContent(TRUE); - if (content.IsEmpty()) { - FXJSE_Value_SetNull(hValue); - } else { - FXJSE_Value_SetUTF8String(hValue, - FX_UTF8Encode(content, content.GetLength())); - } -} -void CXFA_Node::Script_Boolean_Value(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - if (bSetting) { - CFX_ByteString newValue; - if (!(FXJSE_Value_IsNull(hValue) || FXJSE_Value_IsUndefined(hValue))) { - FXJSE_Value_ToUTF8String(hValue, newValue); - } - int32_t iValue = FXSYS_atoi(newValue); - CFX_WideString wsNewValue = (iValue == 0) ? FX_WSTRC(L"0") : FX_WSTRC(L"1"); - CFX_WideString wsFormatValue(wsNewValue); - CXFA_WidgetData* pContainerWidgetData = GetContainerWidgetData(); - if (pContainerWidgetData) { - pContainerWidgetData->GetFormatDataValue(wsNewValue, wsFormatValue); - } - SetScriptContent(wsNewValue, wsFormatValue, TRUE, TRUE); - } else { - CFX_WideString wsValue = GetScriptContent(TRUE); - FXJSE_Value_SetBoolean(hValue, wsValue.Equal(FX_WSTRC(L"1"))); - } -} -struct XFA_ExecEventParaInfo { - public: - uint32_t m_uHash; - const FX_WCHAR* m_lpcEventName; - XFA_EVENTTYPE m_eventType; - uint32_t m_validFlags; -}; -static const XFA_ExecEventParaInfo gs_eventParaInfos[] = { - {0x02a6c55a, L"postSubmit", XFA_EVENT_PostSubmit, 0}, - {0x0ab466bb, L"preSubmit", XFA_EVENT_PreSubmit, 0}, - {0x109d7ce7, L"mouseEnter", XFA_EVENT_MouseEnter, 5}, - {0x17fad373, L"postPrint", XFA_EVENT_PostPrint, 0}, - {0x1bfc72d9, L"preOpen", XFA_EVENT_PreOpen, 7}, - {0x2196a452, L"initialize", XFA_EVENT_Initialize, 1}, - {0x27410f03, L"mouseExit", XFA_EVENT_MouseExit, 5}, - {0x33c43dec, L"docClose", XFA_EVENT_DocClose, 0}, - {0x361fa1b6, L"preSave", XFA_EVENT_PreSave, 0}, - {0x36f1c6d8, L"preSign", XFA_EVENT_PreSign, 6}, - {0x4731d6ba, L"exit", XFA_EVENT_Exit, 2}, - {0x56bf456b, L"docReady", XFA_EVENT_DocReady, 0}, - {0x7233018a, L"validate", XFA_EVENT_Validate, 1}, - {0x8808385e, L"indexChange", XFA_EVENT_IndexChange, 3}, - {0x891f4606, L"change", XFA_EVENT_Change, 4}, - {0x9528a7b4, L"prePrint", XFA_EVENT_PrePrint, 0}, - {0x9f693b21, L"mouseDown", XFA_EVENT_MouseDown, 5}, - {0xcdce56b3, L"full", XFA_EVENT_Full, 4}, - {0xd576d08e, L"mouseUp", XFA_EVENT_MouseUp, 5}, - {0xd95657a6, L"click", XFA_EVENT_Click, 4}, - {0xdbfbe02e, L"calculate", XFA_EVENT_Calculate, 1}, - {0xe25fa7b8, L"postOpen", XFA_EVENT_PostOpen, 7}, - {0xe28dce7e, L"enter", XFA_EVENT_Enter, 2}, - {0xfc82d695, L"postSave", XFA_EVENT_PostSave, 0}, - {0xfd54fbb7, L"postSign", XFA_EVENT_PostSign, 6}, -}; -const XFA_ExecEventParaInfo* GetEventParaInfoByName( - const CFX_WideStringC& wsEventName) { - int32_t iLength = wsEventName.GetLength(); - uint32_t uHash = FX_HashCode_String_GetW(wsEventName.GetPtr(), iLength); - const XFA_ExecEventParaInfo* eventParaInfo = NULL; - int32_t iStart = 0, - iEnd = (sizeof(gs_eventParaInfos) / sizeof(gs_eventParaInfos[0])) - 1; - int32_t iMid = (iStart + iEnd) / 2; - do { - iMid = (iStart + iEnd) / 2; - eventParaInfo = &gs_eventParaInfos[iMid]; - if (uHash == eventParaInfo->m_uHash) { - return eventParaInfo; - } else if (uHash < eventParaInfo->m_uHash) { - iEnd = iMid - 1; - } else { - iStart = iMid + 1; - } - } while (iStart <= iEnd); - return NULL; -} -void XFA_STRING_TO_RGB(CFX_WideString& strRGB, - int32_t& r, - int32_t& g, - int32_t& b) { - r = 0; - g = 0; - b = 0; - FX_WCHAR zero = '0'; - int32_t iIndex = 0; - int32_t iLen = strRGB.GetLength(); - for (int32_t i = 0; i < iLen; ++i) { - FX_WCHAR ch = strRGB.GetAt(i); - if (ch == L',') { - ++iIndex; - } - if (iIndex > 2) { - break; - } - int32_t iValue = ch - zero; - if (iValue >= 0 && iValue <= 9) { - switch (iIndex) { - case 0: - r = r * 10 + iValue; - break; - case 1: - g = g * 10 + iValue; - break; - default: - b = b * 10 + iValue; - break; - } - } - } -} -void CXFA_Node::Script_Som_BorderColor(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - CXFA_WidgetData* pWidgetData = GetWidgetData(); - if (!pWidgetData) { - return; - } - CXFA_Border border = pWidgetData->GetBorder(TRUE); - int32_t iSize = border.CountEdges(); - CFX_WideString strColor; - if (bSetting) { - CFX_ByteString bsValue; - FXJSE_Value_ToUTF8String(hValue, bsValue); - strColor = CFX_WideString::FromUTF8(bsValue, bsValue.GetLength()); - int32_t r = 0, g = 0, b = 0; - XFA_STRING_TO_RGB(strColor, r, g, b); - FX_ARGB rgb = ArgbEncode(100, r, g, b); - for (int32_t i = 0; i < iSize; ++i) { - CXFA_Edge edge = border.GetEdge(i); - edge.SetColor(rgb); - } - } else { - CXFA_Edge edge = border.GetEdge(0); - FX_ARGB color = edge.GetColor(); - int32_t a, r, g, b; - ArgbDecode(color, a, r, g, b); - strColor.Format(L"%d,%d,%d", r, g, b); - FXJSE_Value_SetUTF8String(hValue, FX_UTF8Encode(strColor)); - } -} -void CXFA_Node::Script_Som_BorderWidth(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - CXFA_WidgetData* pWidgetData = GetWidgetData(); - if (!pWidgetData) { - return; - } - CXFA_Border border = pWidgetData->GetBorder(TRUE); - int32_t iSize = border.CountEdges(); - CFX_WideString wsThickness; - if (bSetting) { - CFX_ByteString bsValue; - FXJSE_Value_ToUTF8String(hValue, bsValue); - wsThickness = CFX_WideString::FromUTF8(bsValue, bsValue.GetLength()); - for (int32_t i = 0; i < iSize; ++i) { - CXFA_Edge edge = border.GetEdge(i); - CXFA_Measurement thickness(wsThickness); - edge.SetMSThickness(thickness); - } - } else { - CXFA_Edge edge = border.GetEdge(0); - CXFA_Measurement thickness = edge.GetMSThickness(); - thickness.ToString(wsThickness); - FXJSE_Value_SetUTF8String(hValue, FX_UTF8Encode(wsThickness)); - } -} -void CXFA_Node::Script_Som_FillColor(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - CXFA_WidgetData* pWidgetData = GetWidgetData(); - if (!pWidgetData) { - return; - } - CXFA_Border border = pWidgetData->GetBorder(TRUE); - CXFA_Fill borderfill = border.GetFill(TRUE); - CXFA_Node* pNode = borderfill.GetNode(); - if (!pNode) { - return; - } - CFX_WideString wsColor; - if (bSetting) { - CFX_ByteString bsValue; - FXJSE_Value_ToUTF8String(hValue, bsValue); - wsColor = CFX_WideString::FromUTF8(bsValue, bsValue.GetLength()); - int32_t r, g, b; - XFA_STRING_TO_RGB(wsColor, r, g, b); - FX_ARGB color = ArgbEncode(0xff, r, g, b); - borderfill.SetColor(color); - } else { - FX_ARGB color = borderfill.GetColor(); - int32_t a, r, g, b; - ArgbDecode(color, a, r, g, b); - wsColor.Format(L"%d,%d,%d", r, g, b); - FXJSE_Value_SetUTF8String(hValue, FX_UTF8Encode(wsColor)); - } -} -void CXFA_Node::Script_Som_DataNode(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - if (!bSetting) { - CXFA_Node* pDataNode = GetBindData(); - if (pDataNode) { - FXJSE_Value_Set( - hValue, - m_pDocument->GetScriptContext()->GetJSValueFromMap(pDataNode)); - } else { - FXJSE_Value_SetNull(hValue); - } - } else { - ThrowScriptErrorMessage(XFA_IDS_INVAlID_PROP_SET); - } -} -void CXFA_Node::Script_Draw_DefaultValue(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - if (bSetting) { - if (FXJSE_Value_IsUTF8String(hValue)) { - CXFA_WidgetData* pWidgetData = GetWidgetData(); - FXSYS_assert(pWidgetData); - XFA_ELEMENT uiType = pWidgetData->GetUIType(); - if (uiType == XFA_ELEMENT_Text) { - CFX_ByteString newValue; - FXJSE_Value_ToUTF8String(hValue, newValue); - CFX_WideString wsNewValue = - CFX_WideString::FromUTF8(newValue, newValue.GetLength()); - CFX_WideString wsFormatValue(wsNewValue); - SetScriptContent(wsNewValue, wsFormatValue, TRUE, TRUE); - } else if (uiType != XFA_ELEMENT_Image) { - } - } - } else { - CFX_WideString content = GetScriptContent(TRUE); - if (content.IsEmpty()) { - FXJSE_Value_SetNull(hValue); - } else { - FXJSE_Value_SetUTF8String(hValue, - FX_UTF8Encode(content, content.GetLength())); - } - } -} -void CXFA_Node::Script_Field_DefaultValue(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - CXFA_WidgetData* pWidgetData = GetWidgetData(); - if (!pWidgetData) { - return; - } - if (bSetting) { - if (FXJSE_Value_IsNull(hValue)) { - pWidgetData->m_bPreNull = pWidgetData->m_bIsNull; - pWidgetData->m_bIsNull = TRUE; - } else { - pWidgetData->m_bPreNull = pWidgetData->m_bIsNull; - pWidgetData->m_bIsNull = FALSE; - } - CFX_ByteString newValue; - if (!(FXJSE_Value_IsNull(hValue) || FXJSE_Value_IsUndefined(hValue))) { - FXJSE_Value_ToUTF8String(hValue, newValue); - } - CFX_WideString wsNewText = - CFX_WideString::FromUTF8(newValue, newValue.GetLength()); - CXFA_Node* pUIChild = pWidgetData->GetUIChild(); - if (pUIChild->GetClassID() == XFA_ELEMENT_NumericEdit) { - int32_t iLeadDigits = 0; - int32_t iFracDigits = 0; - pWidgetData->GetLeadDigits(iLeadDigits); - pWidgetData->GetFracDigits(iFracDigits); - wsNewText = XFA_NumericLimit(wsNewText, iLeadDigits, iFracDigits); - } - CXFA_WidgetData* pContainerWidgetData = GetContainerWidgetData(); - CFX_WideString wsFormatText(wsNewText); - if (pContainerWidgetData) { - pContainerWidgetData->GetFormatDataValue(wsNewText, wsFormatText); - } - SetScriptContent(wsNewText, wsFormatText, TRUE, TRUE); - } else { - CFX_WideString content = GetScriptContent(TRUE); - if (content.IsEmpty()) { - FXJSE_Value_SetNull(hValue); - } else { - CXFA_Node* pUIChild = pWidgetData->GetUIChild(); - XFA_ELEMENT eUI = pUIChild->GetClassID(); - CXFA_Value defVal = pWidgetData->GetFormValue(); - CXFA_Node* pNode = defVal.GetNode()->GetNodeItem(XFA_NODEITEM_FirstChild); - if (pNode && pNode->GetClassID() == XFA_ELEMENT_Decimal) { - if (eUI == XFA_ELEMENT_NumericEdit && - (pNode->GetInteger(XFA_ATTRIBUTE_FracDigits) == -1)) { - FXJSE_Value_SetUTF8String( - hValue, FX_UTF8Encode(content, content.GetLength())); - } else { - CFX_Decimal decimal(content); - FXJSE_Value_SetFloat(hValue, (FX_FLOAT)(double)decimal); - } - } else if (pNode && pNode->GetClassID() == XFA_ELEMENT_Integer) { - FXJSE_Value_SetInteger(hValue, FXSYS_wtoi(content)); - } else if (pNode && pNode->GetClassID() == XFA_ELEMENT_Boolean) { - FXJSE_Value_SetBoolean(hValue, FXSYS_wtoi(content) == 0 ? FALSE : TRUE); - } else if (pNode && pNode->GetClassID() == XFA_ELEMENT_Float) { - CFX_Decimal decimal(content); - FXJSE_Value_SetFloat(hValue, (FX_FLOAT)(double)decimal); - } else { - FXJSE_Value_SetUTF8String(hValue, - FX_UTF8Encode(content, content.GetLength())); - } - } - } -} -void CXFA_Node::Script_Field_EditValue(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - CXFA_WidgetData* pWidgetData = GetWidgetData(); - if (!pWidgetData) { - return; - } - CFX_WideString wsValue; - if (bSetting) { - CFX_ByteString bsValue; - FXJSE_Value_ToUTF8String(hValue, bsValue); - wsValue = CFX_WideString::FromUTF8(bsValue, bsValue.GetLength()); - pWidgetData->SetValue(wsValue, XFA_VALUEPICTURE_Edit); - } else { - pWidgetData->GetValue(wsValue, XFA_VALUEPICTURE_Edit); - FXJSE_Value_SetUTF8String(hValue, FX_UTF8Encode(wsValue)); - } -} -void CXFA_Node::Script_Som_FontColor(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - CXFA_WidgetData* pWidgetData = GetWidgetData(); - if (!pWidgetData) { - return; - } - CXFA_Font font = pWidgetData->GetFont(TRUE); - CXFA_Node* pNode = font.GetNode(); - if (!pNode) { - return; - } - CFX_WideString wsColor; - if (bSetting) { - CFX_ByteString bsValue; - FXJSE_Value_ToUTF8String(hValue, bsValue); - wsColor = CFX_WideString::FromUTF8(bsValue, bsValue.GetLength()); - int32_t r, g, b; - XFA_STRING_TO_RGB(wsColor, r, g, b); - FX_ARGB color = ArgbEncode(0xff, r, g, b); - font.SetColor(color); - } else { - FX_ARGB color = font.GetColor(); - int32_t a, r, g, b; - ArgbDecode(color, a, r, g, b); - wsColor.Format(L"%d,%d,%d", r, g, b); - FXJSE_Value_SetUTF8String(hValue, FX_UTF8Encode(wsColor)); - } -} -void CXFA_Node::Script_Field_FormatMessage(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - Script_Som_Message(hValue, bSetting, XFA_SOM_FormatMessage); -} -void CXFA_Node::Script_Field_FormattedValue(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - CXFA_WidgetData* pWidgetData = GetWidgetData(); - if (!pWidgetData) { - return; - } - CFX_WideString wsValue; - if (bSetting) { - CFX_ByteString bsValue; - FXJSE_Value_ToUTF8String(hValue, bsValue); - wsValue = CFX_WideString::FromUTF8(bsValue, bsValue.GetLength()); - pWidgetData->SetValue(wsValue, XFA_VALUEPICTURE_Display); - } else { - pWidgetData->GetValue(wsValue, XFA_VALUEPICTURE_Display); - FXJSE_Value_SetUTF8String(hValue, FX_UTF8Encode(wsValue)); - } -} -void CXFA_Node::Script_Som_Mandatory(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - CXFA_WidgetData* pWidgetData = GetWidgetData(); - if (!pWidgetData) { - return; - } - CXFA_Validate validate = pWidgetData->GetValidate(TRUE); - CFX_WideString wsValue; - if (bSetting) { - CFX_ByteString bsValue; - FXJSE_Value_ToUTF8String(hValue, bsValue); - wsValue = CFX_WideString::FromUTF8(bsValue, bsValue.GetLength()); - validate.SetNullTest(wsValue); - } else { - int32_t iValue = validate.GetNullTest(); - const XFA_ATTRIBUTEENUMINFO* pInfo = - XFA_GetAttributeEnumByID((XFA_ATTRIBUTEENUM)iValue); - if (pInfo) { - wsValue = pInfo->pName; - } - FXJSE_Value_SetUTF8String(hValue, FX_UTF8Encode(wsValue)); - } -} -void CXFA_Node::Script_Som_MandatoryMessage(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - Script_Som_Message(hValue, bSetting, XFA_SOM_MandatoryMessage); -} -void CXFA_Node::Script_Field_ParentSubform(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - if (bSetting) { - ThrowScriptErrorMessage(XFA_IDS_INVAlID_PROP_SET); - } else { - FXJSE_Value_SetNull(hValue); - } -} -void CXFA_Node::Script_Field_SelectedIndex(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - CXFA_WidgetData* pWidgetData = GetWidgetData(); - if (!pWidgetData) { - return; - } - if (bSetting) { - int32_t iIndex = FXJSE_Value_ToInteger(hValue); - if (iIndex == -1) { - pWidgetData->ClearAllSelections(); - return; - } - pWidgetData->SetItemState(iIndex, TRUE, TRUE, TRUE); - } else { - FXJSE_Value_SetInteger(hValue, pWidgetData->GetSelectedItem()); - } -} -void CXFA_Node::Script_Field_ClearItems(CFXJSE_Arguments* pArguments) { - CXFA_WidgetData* pWidgetData = GetWidgetData(); - if (!pWidgetData) { - return; - } - pWidgetData->DeleteItem(-1, TRUE); -} -void CXFA_Node::Script_Field_ExecEvent(CFXJSE_Arguments* pArguments) { - int32_t argc = pArguments->GetLength(); - if (argc == 1) { - CFX_ByteString eventString = pArguments->GetUTF8String(0); - int32_t iRet = execSingleEventByName( - CFX_WideString::FromUTF8(eventString, eventString.GetLength()), - XFA_ELEMENT_Field); - if (eventString == "validate") { - FXJSE_Value_SetBoolean(pArguments->GetReturnValue(), - ((iRet == XFA_EVENTERROR_Error) ? FALSE : TRUE)); - } - } else { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"execEvent"); - } -} -void CXFA_Node::Script_Field_ExecInitialize(CFXJSE_Arguments* pArguments) { - int32_t argc = pArguments->GetLength(); - if (argc == 0) { - IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); - if (!pNotify) { - return; - } - pNotify->ExecEventByDeepFirst(this, XFA_EVENT_Initialize, FALSE, FALSE); - } else { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"execInitialize"); - } -} -void CXFA_Node::Script_Field_DeleteItem(CFXJSE_Arguments* pArguments) { - int32_t iLength = pArguments->GetLength(); - if (iLength != 1) { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"deleteItem"); - return; - } - CXFA_WidgetData* pWidgetData = GetWidgetData(); - if (!pWidgetData) { - return; - } - int32_t iIndex = pArguments->GetInt32(0); - FX_BOOL bValue = pWidgetData->DeleteItem(iIndex, TRUE, TRUE); - FXJSE_HVALUE hValue = pArguments->GetReturnValue(); - if (hValue) { - FXJSE_Value_SetBoolean(hValue, bValue); - } -} -void CXFA_Node::Script_Field_GetSaveItem(CFXJSE_Arguments* pArguments) { - int32_t iLength = pArguments->GetLength(); - if (iLength != 1) { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"getSaveItem"); - return; - } - int32_t iIndex = pArguments->GetInt32(0); - if (iIndex < 0) { - FXJSE_Value_SetNull(pArguments->GetReturnValue()); - return; - } - CXFA_WidgetData* pWidgetData = GetWidgetData(); - if (!pWidgetData) { - FXJSE_Value_SetNull(pArguments->GetReturnValue()); - return; - } - CFX_WideString wsValue; - FX_BOOL bHasItem = pWidgetData->GetChoiceListItem(wsValue, iIndex, TRUE); - if (bHasItem) { - FXJSE_Value_SetUTF8String(pArguments->GetReturnValue(), - FX_UTF8Encode(wsValue, wsValue.GetLength())); - } else { - FXJSE_Value_SetNull(pArguments->GetReturnValue()); - } -} -void CXFA_Node::Script_Field_BoundItem(CFXJSE_Arguments* pArguments) { - int32_t iLength = pArguments->GetLength(); - if (iLength != 1) { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"boundItem"); - return; - } - CXFA_WidgetData* pWidgetData = GetWidgetData(); - if (!pWidgetData) { - return; - } - CFX_ByteString bsValue = pArguments->GetUTF8String(0); - CFX_WideString wsValue = - CFX_WideString::FromUTF8(bsValue, bsValue.GetLength()); - CFX_WideString wsBoundValue; - pWidgetData->GetItemValue(wsValue, wsBoundValue); - FXJSE_HVALUE hValue = pArguments->GetReturnValue(); - if (hValue) { - FXJSE_Value_SetUTF8String(hValue, FX_UTF8Encode(wsBoundValue)); - } -} -void CXFA_Node::Script_Field_GetItemState(CFXJSE_Arguments* pArguments) { - int32_t iLength = pArguments->GetLength(); - if (iLength != 1) { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"getItemState"); - return; - } - CXFA_WidgetData* pWidgetData = GetWidgetData(); - if (!pWidgetData) { - return; - } - int32_t iIndex = pArguments->GetInt32(0); - FX_BOOL bValue = pWidgetData->GetItemState(iIndex); - FXJSE_HVALUE hValue = pArguments->GetReturnValue(); - if (hValue) { - FXJSE_Value_SetBoolean(hValue, bValue); - } -} -void CXFA_Node::Script_Field_ExecCalculate(CFXJSE_Arguments* pArguments) { - int32_t argc = pArguments->GetLength(); - if (argc == 0) { - IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); - if (!pNotify) { - return; - } - pNotify->ExecEventByDeepFirst(this, XFA_EVENT_Calculate, FALSE, FALSE); - } else { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"execCalculate"); - } -} -void CXFA_Node::Script_Field_SetItems(CFXJSE_Arguments* pArguments) {} -void CXFA_Node::Script_Field_GetDisplayItem(CFXJSE_Arguments* pArguments) { - int32_t iLength = pArguments->GetLength(); - if (iLength != 1) { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"getDisplayItem"); - return; - } - int32_t iIndex = pArguments->GetInt32(0); - if (iIndex < 0) { - FXJSE_Value_SetNull(pArguments->GetReturnValue()); - return; - } - CXFA_WidgetData* pWidgetData = GetWidgetData(); - if (!pWidgetData) { - FXJSE_Value_SetNull(pArguments->GetReturnValue()); - return; - } - CFX_WideString wsValue; - FX_BOOL bHasItem = pWidgetData->GetChoiceListItem(wsValue, iIndex, FALSE); - if (bHasItem) { - FXJSE_Value_SetUTF8String(pArguments->GetReturnValue(), - FX_UTF8Encode(wsValue, wsValue.GetLength())); - } else { - FXJSE_Value_SetNull(pArguments->GetReturnValue()); - } -} -void CXFA_Node::Script_Field_SetItemState(CFXJSE_Arguments* pArguments) { - int32_t iLength = pArguments->GetLength(); - if (iLength != 2) { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"setItemState"); - return; - } - CXFA_WidgetData* pWidgetData = GetWidgetData(); - if (!pWidgetData) { - return; - } - int32_t iIndex = pArguments->GetInt32(0); - if (pArguments->GetInt32(1) != 0) { - pWidgetData->SetItemState(iIndex, TRUE, TRUE, TRUE); - } else { - if (pWidgetData->GetItemState(iIndex)) { - pWidgetData->SetItemState(iIndex, FALSE, TRUE, TRUE); - } - } -} -void CXFA_Node::Script_Field_AddItem(CFXJSE_Arguments* pArguments) { - int32_t iLength = pArguments->GetLength(); - if (iLength < 1 || iLength > 2) { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"addItem"); - return; - } - CXFA_WidgetData* pWidgetData = GetWidgetData(); - if (!pWidgetData) { - return; - } - CFX_WideString wsLabel; - CFX_WideString wsValue; - if (iLength >= 1) { - CFX_ByteString bsLable = pArguments->GetUTF8String(0); - wsLabel = CFX_WideString::FromUTF8(bsLable, bsLable.GetLength()); - } - if (iLength >= 2) { - CFX_ByteString bsValue = pArguments->GetUTF8String(1); - wsValue = CFX_WideString::FromUTF8(bsValue, bsValue.GetLength()); - } - pWidgetData->InsertItem(wsLabel, wsValue, -1, TRUE); -} -void CXFA_Node::Script_Field_ExecValidate(CFXJSE_Arguments* pArguments) { - int32_t argc = pArguments->GetLength(); - if (argc == 0) { - IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); - if (!pNotify) { - FXJSE_Value_SetBoolean(pArguments->GetReturnValue(), FALSE); - } else { - int32_t iRet = - pNotify->ExecEventByDeepFirst(this, XFA_EVENT_Validate, FALSE, FALSE); - FXJSE_Value_SetBoolean(pArguments->GetReturnValue(), - ((iRet == XFA_EVENTERROR_Error) ? FALSE : TRUE)); - } - } else { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"execValidate"); - } -} -void CXFA_Node::Script_ExclGroup_ErrorText(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - if (!bSetting) { - } else { - ThrowScriptErrorMessage(XFA_IDS_INVAlID_PROP_SET); - } -} -void CXFA_Node::Script_ExclGroup_DefaultAndRawValue(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - CXFA_WidgetData* pWidgetData = GetWidgetData(); - if (!pWidgetData) { - return; - } - if (bSetting) { - CFX_ByteString bsValue; - FXJSE_Value_ToUTF8String(hValue, bsValue); - pWidgetData->SetSelectedMemberByValue( - CFX_WideString::FromUTF8(bsValue, bsValue.GetLength()), TRUE, TRUE); - } else { - CFX_WideString wsValue = GetScriptContent(TRUE); - XFA_VERSION curVersion = GetDocument()->GetCurVersionMode(); - if (wsValue.IsEmpty() && curVersion >= XFA_VERSION_300) { - FXJSE_Value_SetNull(hValue); - } else { - FXJSE_Value_SetUTF8String(hValue, FX_UTF8Encode(wsValue)); - } - } -} -void CXFA_Node::Script_ExclGroup_Transient(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) {} -void CXFA_Node::Script_ExclGroup_ExecEvent(CFXJSE_Arguments* pArguments) { - int32_t argc = pArguments->GetLength(); - if (argc == 1) { - CFX_ByteString eventString = pArguments->GetUTF8String(0); - execSingleEventByName( - CFX_WideString::FromUTF8(eventString, eventString.GetLength()), - XFA_ELEMENT_ExclGroup); - } else { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"execEvent"); - } -} -void CXFA_Node::Script_ExclGroup_SelectedMember(CFXJSE_Arguments* pArguments) { - int32_t argc = pArguments->GetLength(); - if ((argc == 0) || (argc == 1)) { - CXFA_WidgetData* pWidgetData = GetWidgetData(); - if (!pWidgetData) { - FXJSE_Value_SetNull(pArguments->GetReturnValue()); - } else { - CXFA_Node* pReturnNode = NULL; - if (argc == 0) { - pReturnNode = pWidgetData->GetSelectedMember(); - } else { - CFX_ByteString szName; - szName = pArguments->GetUTF8String(0); - pReturnNode = pWidgetData->SetSelectedMember( - CFX_WideString::FromUTF8(szName, szName.GetLength())); - } - if (pReturnNode) { - FXJSE_Value_Set( - pArguments->GetReturnValue(), - m_pDocument->GetScriptContext()->GetJSValueFromMap(pReturnNode)); - } else { - FXJSE_Value_SetNull(pArguments->GetReturnValue()); - } - } - } else { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"selectedMember"); - } -} -void CXFA_Node::Script_ExclGroup_ExecInitialize(CFXJSE_Arguments* pArguments) { - int32_t argc = pArguments->GetLength(); - if (argc == 0) { - IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); - if (!pNotify) { - return; - } - pNotify->ExecEventByDeepFirst(this, XFA_EVENT_Initialize); - } else { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"execInitialize"); - } -} -void CXFA_Node::Script_ExclGroup_ExecCalculate(CFXJSE_Arguments* pArguments) { - int32_t argc = pArguments->GetLength(); - if (argc == 0) { - IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); - if (!pNotify) { - return; - } - pNotify->ExecEventByDeepFirst(this, XFA_EVENT_Calculate); - } else { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"execCalculate"); - } -} -void CXFA_Node::Script_ExclGroup_ExecValidate(CFXJSE_Arguments* pArguments) { - int32_t argc = pArguments->GetLength(); - if (argc == 0) { - IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); - if (!pNotify) { - FXJSE_Value_SetBoolean(pArguments->GetReturnValue(), FALSE); - } else { - int32_t iRet = pNotify->ExecEventByDeepFirst(this, XFA_EVENT_Validate); - FXJSE_Value_SetBoolean(pArguments->GetReturnValue(), - ((iRet == XFA_EVENTERROR_Error) ? FALSE : TRUE)); - } - } else { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"execValidate"); - } -} -static CXFA_Node* XFA_ScriptInstanceManager_GetItem(CXFA_Node* pInstMgrNode, - int32_t iIndex) { - ASSERT(pInstMgrNode); - int32_t iCount = 0; - FX_DWORD dwNameHash = 0; - for (CXFA_Node* pNode = pInstMgrNode->GetNodeItem(XFA_NODEITEM_NextSibling); - pNode; pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { - XFA_ELEMENT eCurType = pNode->GetClassID(); - if (eCurType == XFA_ELEMENT_InstanceManager) { - break; - } - if ((eCurType != XFA_ELEMENT_Subform) && - (eCurType != XFA_ELEMENT_SubformSet)) { - continue; - } - if (iCount == 0) { - CFX_WideStringC wsName = pNode->GetCData(XFA_ATTRIBUTE_Name); - CFX_WideStringC wsInstName = pInstMgrNode->GetCData(XFA_ATTRIBUTE_Name); - if (wsInstName.GetLength() < 1 || wsInstName.GetAt(0) != '_' || - wsInstName.Mid(1) != wsName) { - return NULL; - } - dwNameHash = pNode->GetNameHash(); - } - if (dwNameHash != pNode->GetNameHash()) { - break; - } - iCount++; - if (iCount > iIndex) { - return pNode; - } - } - return NULL; -} -void CXFA_Node::Script_Som_InstanceIndex(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - if (bSetting) { - int32_t iTo = FXJSE_Value_ToInteger(hValue); - int32_t iFrom = Subform_and_SubformSet_InstanceIndex(); - CXFA_Node* pManagerNode = NULL; - for (CXFA_Node* pNode = GetNodeItem(XFA_NODEITEM_PrevSibling); pNode; - pNode = pNode->GetNodeItem(XFA_NODEITEM_PrevSibling)) { - if (pNode->GetClassID() == XFA_ELEMENT_InstanceManager) { - pManagerNode = pNode; - break; - } - } - if (pManagerNode) { - pManagerNode->InstanceManager_MoveInstance(iTo, iFrom); - IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); - if (!pNotify) { - return; - } - CXFA_Node* pToInstance = - XFA_ScriptInstanceManager_GetItem(pManagerNode, iTo); - if (pToInstance && pToInstance->GetClassID() == XFA_ELEMENT_Subform) { - pNotify->RunSubformIndexChange(pToInstance); - } - CXFA_Node* pFromInstance = - XFA_ScriptInstanceManager_GetItem(pManagerNode, iFrom); - if (pFromInstance && pFromInstance->GetClassID() == XFA_ELEMENT_Subform) { - pNotify->RunSubformIndexChange(pFromInstance); - } - } - } else { - FXJSE_Value_SetInteger(hValue, Subform_and_SubformSet_InstanceIndex()); - } -} -void CXFA_Node::Script_Subform_InstanceManager(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - if (!bSetting) { - CFX_WideStringC wsName = GetCData(XFA_ATTRIBUTE_Name); - CXFA_Node* pInstanceMgr = NULL; - for (CXFA_Node* pNode = GetNodeItem(XFA_NODEITEM_PrevSibling); pNode; - pNode = pNode->GetNodeItem(XFA_NODEITEM_PrevSibling)) { - if (pNode->GetClassID() == XFA_ELEMENT_InstanceManager) { - CFX_WideStringC wsInstMgrName = pNode->GetCData(XFA_ATTRIBUTE_Name); - if (wsInstMgrName.GetLength() >= 1 && wsInstMgrName.GetAt(0) == '_' && - wsInstMgrName.Mid(1) == wsName) { - pInstanceMgr = pNode; - } - break; - } - } - if (pInstanceMgr) { - FXJSE_Value_Set( - hValue, - m_pDocument->GetScriptContext()->GetJSValueFromMap(pInstanceMgr)); - } else { - FXJSE_Value_SetNull(hValue); - } - } else { - ThrowScriptErrorMessage(XFA_IDS_INVAlID_PROP_SET); - } -} -void CXFA_Node::Script_Subform_Locale(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - if (bSetting) { - CFX_ByteString bsLocaleName; - FXJSE_Value_ToUTF8String(hValue, bsLocaleName); - SetCData(XFA_ATTRIBUTE_Locale, - CFX_WideString::FromUTF8(bsLocaleName, bsLocaleName.GetLength()), - TRUE, TRUE); - } else { - CFX_WideString wsLocaleName; - GetLocaleName(wsLocaleName); - FXJSE_Value_SetUTF8String( - hValue, FX_UTF8Encode(wsLocaleName, wsLocaleName.GetLength())); - } -} -void CXFA_Node::Script_Subform_ExecEvent(CFXJSE_Arguments* pArguments) { - int32_t argc = pArguments->GetLength(); - if (argc == 1) { - CFX_ByteString eventString = pArguments->GetUTF8String(0); - execSingleEventByName( - CFX_WideString::FromUTF8(eventString, eventString.GetLength()), - XFA_ELEMENT_Subform); - } else { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"execEvent"); - } -} -void CXFA_Node::Script_Subform_ExecInitialize(CFXJSE_Arguments* pArguments) { - int32_t argc = pArguments->GetLength(); - if (argc == 0) { - IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); - if (!pNotify) { - return; - } - pNotify->ExecEventByDeepFirst(this, XFA_EVENT_Initialize); - } else { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"execInitialize"); - } -} -void CXFA_Node::Script_Subform_ExecCalculate(CFXJSE_Arguments* pArguments) { - int32_t argc = pArguments->GetLength(); - if (argc == 0) { - IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); - if (!pNotify) { - return; - } - pNotify->ExecEventByDeepFirst(this, XFA_EVENT_Calculate); - } else { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"execCalculate"); - } -} -void CXFA_Node::Script_Subform_ExecValidate(CFXJSE_Arguments* pArguments) { - int32_t argc = pArguments->GetLength(); - if (argc == 0) { - IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); - if (!pNotify) { - FXJSE_Value_SetBoolean(pArguments->GetReturnValue(), FALSE); - } else { - int32_t iRet = pNotify->ExecEventByDeepFirst(this, XFA_EVENT_Validate); - FXJSE_Value_SetBoolean(pArguments->GetReturnValue(), - ((iRet == XFA_EVENTERROR_Error) ? FALSE : TRUE)); - } - } else { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"execValidate"); - } -} -void CXFA_Node::Script_Subform_GetInvalidObjects(CFXJSE_Arguments* pArguments) { - int32_t argc = pArguments->GetLength(); - if (argc == 0) { - } else { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"getInvalidObjects"); - } -} -int32_t CXFA_Node::Subform_and_SubformSet_InstanceIndex() { - int32_t index = 0; - for (CXFA_Node* pNode = GetNodeItem(XFA_NODEITEM_PrevSibling); pNode; - pNode = pNode->GetNodeItem(XFA_NODEITEM_PrevSibling)) { - if ((pNode->GetClassID() == XFA_ELEMENT_Subform) || - (pNode->GetClassID() == XFA_ELEMENT_SubformSet)) { - index++; - } else { - break; - } - } - return index; -} -void CXFA_Node::Script_Template_FormNodes(CFXJSE_Arguments* pArguments) { - int32_t argc = pArguments->GetLength(); - if (argc == 1) { - FXJSE_Value_SetBoolean(pArguments->GetReturnValue(), TRUE); - } else { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"formNodes"); - } -} -void CXFA_Node::Script_Template_Remerge(CFXJSE_Arguments* pArguments) { - int32_t argc = pArguments->GetLength(); - if (argc == 0) { - m_pDocument->DoDataRemerge(TRUE); - } else { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"remerge"); - } -} -void CXFA_Node::Script_Template_ExecInitialize(CFXJSE_Arguments* pArguments) { - int32_t argc = pArguments->GetLength(); - if (argc == 0) { - CXFA_WidgetData* pWidgetData = GetWidgetData(); - if (!pWidgetData) { - FXJSE_Value_SetBoolean(pArguments->GetReturnValue(), FALSE); - } else { - FXJSE_Value_SetBoolean(pArguments->GetReturnValue(), TRUE); - } - } else { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"execInitialize"); - } -} -void CXFA_Node::Script_Template_CreateNode(CFXJSE_Arguments* pArguments) { - int32_t argc = pArguments->GetLength(); - if ((argc > 0) && (argc < 4)) { - CFX_WideString strTagName; - CFX_WideString strName; - CFX_WideString strNameSpace; - CFX_ByteString bsTagName = pArguments->GetUTF8String(0); - strTagName = CFX_WideString::FromUTF8(bsTagName, bsTagName.GetLength()); - if (argc > 1) { - CFX_ByteString bsName = pArguments->GetUTF8String(1); - strName = CFX_WideString::FromUTF8(bsName, bsName.GetLength()); - if (argc == 3) { - CFX_ByteString bsNameSpace = pArguments->GetUTF8String(2); - strNameSpace = - CFX_WideString::FromUTF8(bsNameSpace, bsNameSpace.GetLength()); - } - } - const XFA_ELEMENTINFO* pElement = XFA_GetElementByName(strTagName); - CXFA_Node* pNewNode = CreateSamePacketNode(pElement->eName); - if (!pNewNode) { - FXJSE_Value_SetNull(pArguments->GetReturnValue()); - } else { - if (!strName.IsEmpty()) { - if (XFA_GetAttributeOfElement(pElement->eName, XFA_ATTRIBUTE_Name, - XFA_XDPPACKET_UNKNOWN)) { - pNewNode->SetAttribute(XFA_ATTRIBUTE_Name, strName, TRUE); - if (pNewNode->GetPacketID() == XFA_XDPPACKET_Datasets) { - pNewNode->CreateXMLMappingNode(); - } - FXJSE_Value_Set( - pArguments->GetReturnValue(), - m_pDocument->GetScriptContext()->GetJSValueFromMap(pNewNode)); - } else { - ThrowScriptErrorMessage(XFA_IDS_NOT_HAVE_PROPERTY, - (const FX_WCHAR*)strTagName, L"name"); - } - } else { - FXJSE_Value_Set( - pArguments->GetReturnValue(), - m_pDocument->GetScriptContext()->GetJSValueFromMap(pNewNode)); - } - } - } else { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"createNode"); - } -} -void CXFA_Node::Script_Template_Recalculate(CFXJSE_Arguments* pArguments) { - if (pArguments->GetLength() == 1) { - FXJSE_Value_SetBoolean(pArguments->GetReturnValue(), TRUE); - } else { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"recalculate"); - } -} -void CXFA_Node::Script_Template_ExecCalculate(CFXJSE_Arguments* pArguments) { - int32_t argc = pArguments->GetLength(); - if (argc == 0) { - CXFA_WidgetData* pWidgetData = GetWidgetData(); - if (!pWidgetData) { - FXJSE_Value_SetBoolean(pArguments->GetReturnValue(), FALSE); - } else { - FXJSE_Value_SetBoolean(pArguments->GetReturnValue(), TRUE); - } - } else { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"execCalculate"); - } -} -void CXFA_Node::Script_Template_ExecValidate(CFXJSE_Arguments* pArguments) { - int32_t argc = pArguments->GetLength(); - if (argc == 0) { - CXFA_WidgetData* pWidgetData = GetWidgetData(); - if (!pWidgetData) { - FXJSE_Value_SetBoolean(pArguments->GetReturnValue(), FALSE); - } else { - FXJSE_Value_SetBoolean(pArguments->GetReturnValue(), TRUE); - } - } else { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"execValidate"); - } -} -void CXFA_Node::Script_Manifest_Evaluate(CFXJSE_Arguments* pArguments) { - int32_t argc = pArguments->GetLength(); - if (argc == 0) { - CXFA_WidgetData* pWidgetData = GetWidgetData(); - if (!pWidgetData) { - FXJSE_Value_SetBoolean(pArguments->GetReturnValue(), FALSE); - } else { - FXJSE_Value_SetBoolean(pArguments->GetReturnValue(), TRUE); - } - } else { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"evaluate"); - } -} -void CXFA_Node::Script_InstanceManager_Max(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - if (bSetting) { - ThrowScriptErrorMessage(XFA_IDS_INVAlID_PROP_SET); - return; - } - CXFA_Occur nodeOccur(GetOccurNode()); - FXJSE_Value_SetInteger(hValue, nodeOccur.GetMax()); -} -void CXFA_Node::Script_InstanceManager_Min(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - if (bSetting) { - ThrowScriptErrorMessage(XFA_IDS_INVAlID_PROP_SET); - return; - } - CXFA_Occur nodeOccur(GetOccurNode()); - FXJSE_Value_SetInteger(hValue, nodeOccur.GetMin()); -} -static int32_t XFA_ScriptInstanceManager_GetCount(CXFA_Node* pInstMgrNode) { - ASSERT(pInstMgrNode); - int32_t iCount = 0; - FX_DWORD dwNameHash = 0; - for (CXFA_Node* pNode = pInstMgrNode->GetNodeItem(XFA_NODEITEM_NextSibling); - pNode; pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { - XFA_ELEMENT eCurType = pNode->GetClassID(); - if (eCurType == XFA_ELEMENT_InstanceManager) { - break; - } - if ((eCurType != XFA_ELEMENT_Subform) && - (eCurType != XFA_ELEMENT_SubformSet)) { - continue; - } - if (iCount == 0) { - CFX_WideStringC wsName = pNode->GetCData(XFA_ATTRIBUTE_Name); - CFX_WideStringC wsInstName = pInstMgrNode->GetCData(XFA_ATTRIBUTE_Name); - if (wsInstName.GetLength() < 1 || wsInstName.GetAt(0) != '_' || - wsInstName.Mid(1) != wsName) { - return iCount; - } - dwNameHash = pNode->GetNameHash(); - } - if (dwNameHash != pNode->GetNameHash()) { - break; - } - iCount++; - } - return iCount; -} -static void -XFA_ScriptInstanceManager_ReorderDataNodes_SortNodeArrayByDocumentIdx( - const CXFA_NodeSet& rgNodeSet, - CXFA_NodeArray& rgNodeArray, - CFX_ArrayTemplate& rgIdxArray) { - int32_t iCount = rgNodeSet.GetCount(); - rgNodeArray.SetSize(iCount); - rgIdxArray.SetSize(iCount); - if (iCount == 0) { - return; - } - int32_t iIndex = -1, iTotalIndex = -1; - CXFA_Node* pNode = NULL; - FX_POSITION pos = rgNodeSet.GetStartPosition(); - rgNodeSet.GetNextAssoc(pos, pNode); - for (pNode = pNode->GetNodeItem(XFA_NODEITEM_Parent) - ->GetNodeItem(XFA_NODEITEM_FirstChild); - pNode && iIndex < iCount; - pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { - iTotalIndex++; - if (rgNodeSet.Lookup(pNode)) { - iIndex++; - rgNodeArray[iIndex] = pNode; - rgIdxArray[iIndex] = iTotalIndex; - } - } -} -struct CXFA_DualNodeArray { - CXFA_NodeSet firstNodeList; - CXFA_NodeSet secondNodeList; -}; -static void XFA_ScriptInstanceManager_ReorderDataNodes(CXFA_NodeSet& sSet1, - CXFA_NodeSet& sSet2, - FX_BOOL bInsertBefore) { - CFX_MapPtrTemplate*> - rgNodeListMap; - FX_POSITION pos; - pos = sSet1.GetStartPosition(); - while (pos) { - CXFA_Node* pNode = NULL; - sSet1.GetNextAssoc(pos, pNode); - CXFA_Node* pParentNode = pNode->GetNodeItem(XFA_NODEITEM_Parent); - FX_DWORD dwNameHash = pNode->GetNameHash(); - if (!pParentNode || !dwNameHash) { - continue; - } - CFX_MapPtrTemplate* pNodeListChildMap = - rgNodeListMap[pParentNode]; - if (!pNodeListChildMap) { - rgNodeListMap[pParentNode] = pNodeListChildMap = - new CFX_MapPtrTemplate; - } - CXFA_DualNodeArray* pDualNodeArray = (*pNodeListChildMap)[dwNameHash]; - if (!pDualNodeArray) { - (*pNodeListChildMap)[dwNameHash] = pDualNodeArray = - new CXFA_DualNodeArray; - } - pDualNodeArray->firstNodeList.Add(pNode); - } - pos = sSet2.GetStartPosition(); - while (pos) { - CXFA_Node* pNode = NULL; - sSet2.GetNextAssoc(pos, pNode); - CXFA_Node* pParentNode = pNode->GetNodeItem(XFA_NODEITEM_Parent); - FX_DWORD dwNameHash = pNode->GetNameHash(); - if (!pParentNode || !dwNameHash) { - continue; - } - CFX_MapPtrTemplate* pNodeListChildMap = - rgNodeListMap[pParentNode]; - if (!pNodeListChildMap) { - rgNodeListMap[pParentNode] = pNodeListChildMap = - new CFX_MapPtrTemplate; - } - CXFA_DualNodeArray* pDualNodeArray = (*pNodeListChildMap)[dwNameHash]; - if (!pDualNodeArray) { - (*pNodeListChildMap)[dwNameHash] = pDualNodeArray = - new CXFA_DualNodeArray; - } - if (pDualNodeArray->firstNodeList.Lookup(pNode)) { - pDualNodeArray->firstNodeList.RemoveKey(pNode); - } else { - pDualNodeArray->secondNodeList.Add(pNode); - } - } - pos = rgNodeListMap.GetStartPosition(); - while (pos) { - CXFA_Node* pParentNode = NULL; - CFX_MapPtrTemplate* pNodeListChildMap = NULL; - rgNodeListMap.GetNextAssoc(pos, pParentNode, pNodeListChildMap); - if (!pNodeListChildMap) { - continue; - } - FX_POSITION childpos = pNodeListChildMap->GetStartPosition(); - while (childpos) { - FX_DWORD dwNameHash = 0; - CXFA_DualNodeArray* pDualNodeArray = NULL; - pNodeListChildMap->GetNextAssoc(childpos, dwNameHash, pDualNodeArray); - if (!pDualNodeArray) { - continue; - } - if (pDualNodeArray->firstNodeList.GetCount() != 0 && - pDualNodeArray->secondNodeList.GetCount() != 0) { - CXFA_NodeArray rgNodeArray1, rgNodeArray2; - CFX_ArrayTemplate rgIdxArray1, rgIdxArray2; - XFA_ScriptInstanceManager_ReorderDataNodes_SortNodeArrayByDocumentIdx( - pDualNodeArray->firstNodeList, rgNodeArray1, rgIdxArray1); - XFA_ScriptInstanceManager_ReorderDataNodes_SortNodeArrayByDocumentIdx( - pDualNodeArray->secondNodeList, rgNodeArray2, rgIdxArray2); - CXFA_Node *pParentNode = NULL, *pBeforeNode = NULL; - if (bInsertBefore) { - pBeforeNode = rgNodeArray2[0]; - pParentNode = pBeforeNode->GetNodeItem(XFA_NODEITEM_Parent); - } else { - CXFA_Node* pLastNode = rgNodeArray2[rgIdxArray2.GetSize() - 1]; - pParentNode = pLastNode->GetNodeItem(XFA_NODEITEM_Parent); - pBeforeNode = pLastNode->GetNodeItem(XFA_NODEITEM_NextSibling); - } - for (int32_t iIdx = 0, iCount = rgIdxArray1.GetSize(); iIdx < iCount; - iIdx++) { - CXFA_Node* pCurNode = rgNodeArray1[iIdx]; - pParentNode->RemoveChild(pCurNode); - pParentNode->InsertChild(pCurNode, pBeforeNode); - } - } - delete pDualNodeArray; - } - pNodeListChildMap->RemoveAll(); - } - rgNodeListMap.RemoveAll(); -} -static void XFA_ScriptInstanceManager_InsertItem( - CXFA_Node* pInstMgrNode, - CXFA_Node* pNewInstance, - int32_t iPos, - int32_t iCount = -1, - FX_BOOL bMoveDataBindingNodes = TRUE) { - if (iCount < 0) { - iCount = XFA_ScriptInstanceManager_GetCount(pInstMgrNode); - } - if (iPos < 0) { - iPos = iCount; - } - if (iPos == iCount) { - CXFA_Node* pNextSibling = - iCount > 0 - ? XFA_ScriptInstanceManager_GetItem(pInstMgrNode, iCount - 1) - ->GetNodeItem(XFA_NODEITEM_NextSibling) - : pInstMgrNode->GetNodeItem(XFA_NODEITEM_NextSibling); - pInstMgrNode->GetNodeItem(XFA_NODEITEM_Parent) - ->InsertChild(pNewInstance, pNextSibling); - if (bMoveDataBindingNodes) { - CXFA_NodeSet sNew, sAfter; - CXFA_NodeIteratorTemplate - sIteratorNew(pNewInstance); - for (CXFA_Node* pNode = sIteratorNew.GetCurrent(); pNode; - pNode = sIteratorNew.MoveToNext()) { - CXFA_Node* pDataNode = pNode->GetBindData(); - if (!pDataNode) { - continue; - } - sNew.Add(pDataNode); - } - CXFA_NodeIteratorTemplate - sIteratorAfter(pNextSibling); - for (CXFA_Node* pNode = sIteratorAfter.GetCurrent(); pNode; - pNode = sIteratorAfter.MoveToNext()) { - CXFA_Node* pDataNode = pNode->GetBindData(); - if (!pDataNode) { - continue; - } - sAfter.Add(pDataNode); - } - XFA_ScriptInstanceManager_ReorderDataNodes(sNew, sAfter, FALSE); - } - } else { - CXFA_Node* pBeforeInstance = - XFA_ScriptInstanceManager_GetItem(pInstMgrNode, iPos); - pInstMgrNode->GetNodeItem(XFA_NODEITEM_Parent) - ->InsertChild(pNewInstance, pBeforeInstance); - if (bMoveDataBindingNodes) { - CXFA_NodeSet sNew, sBefore; - CXFA_NodeIteratorTemplate - sIteratorNew(pNewInstance); - for (CXFA_Node* pNode = sIteratorNew.GetCurrent(); pNode; - pNode = sIteratorNew.MoveToNext()) { - CXFA_Node* pDataNode = pNode->GetBindData(); - if (!pDataNode) { - continue; - } - sNew.Add(pDataNode); - } - CXFA_NodeIteratorTemplate - sIteratorBefore(pBeforeInstance); - for (CXFA_Node* pNode = sIteratorBefore.GetCurrent(); pNode; - pNode = sIteratorBefore.MoveToNext()) { - CXFA_Node* pDataNode = pNode->GetBindData(); - if (!pDataNode) { - continue; - } - sBefore.Add(pDataNode); - } - XFA_ScriptInstanceManager_ReorderDataNodes(sNew, sBefore, TRUE); - } - } -} -static void XFA_ScriptInstanceManager_RemoveItem( - CXFA_Node* pInstMgrNode, - CXFA_Node* pRemoveInstance, - FX_BOOL bRemoveDataBinding = TRUE) { - pInstMgrNode->GetNodeItem(XFA_NODEITEM_Parent)->RemoveChild(pRemoveInstance); - if (!bRemoveDataBinding) { - return; - } - CXFA_NodeIteratorTemplate - sIterator(pRemoveInstance); - for (CXFA_Node* pFormNode = sIterator.GetCurrent(); pFormNode; - pFormNode = sIterator.MoveToNext()) { - CXFA_Node* pDataNode = pFormNode->GetBindData(); - if (!pDataNode) { - continue; - } - if (pDataNode->RemoveBindItem(pFormNode) == 0) { - if (CXFA_Node* pDataParent = - pDataNode->GetNodeItem(XFA_NODEITEM_Parent)) { - pDataParent->RemoveChild(pDataNode); - } - } - pFormNode->SetObject(XFA_ATTRIBUTE_BindingNode, NULL); - } -} -static CXFA_Node* XFA_ScriptInstanceManager_CreateInstance( - CXFA_Node* pInstMgrNode, - FX_BOOL bDataMerge) { - CXFA_Document* pDocument = pInstMgrNode->GetDocument(); - CXFA_Node* pTemplateNode = pInstMgrNode->GetTemplateNode(); - CXFA_Node* pFormParent = pInstMgrNode->GetNodeItem(XFA_NODEITEM_Parent); - CXFA_Node* pDataScope = NULL; - for (CXFA_Node* pRootBoundNode = pFormParent; - pRootBoundNode && - pRootBoundNode->GetObjectType() == XFA_OBJECTTYPE_ContainerNode; - pRootBoundNode = pRootBoundNode->GetNodeItem(XFA_NODEITEM_Parent)) { - pDataScope = pRootBoundNode->GetBindData(); - if (pDataScope) { - break; - } - } - if (!pDataScope) { - pDataScope = ToNode(pDocument->GetXFAObject(XFA_HASHCODE_Record)); - ASSERT(pDataScope); - } - CXFA_Node* pInstance = pDocument->DataMerge_CopyContainer( - pTemplateNode, pFormParent, pDataScope, TRUE, bDataMerge); - if (pInstance) { - pDocument->DataMerge_UpdateBindingRelations(pInstance); - pFormParent->RemoveChild(pInstance); - } - return pInstance; -} -void CXFA_Node::Script_InstanceManager_Count(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - if (bSetting) { - int32_t iDesired = FXJSE_Value_ToInteger(hValue); - InstanceManager_SetInstances(iDesired); - } else { - FXJSE_Value_SetInteger(hValue, XFA_ScriptInstanceManager_GetCount(this)); - } -} -void CXFA_Node::Script_InstanceManager_MoveInstance( - CFXJSE_Arguments* pArguments) { - int32_t argc = pArguments->GetLength(); - if (argc != 2) { - FXJSE_Value_SetUndefined(pArguments->GetReturnValue()); - return; - } - int32_t iFrom = pArguments->GetInt32(0); - int32_t iTo = pArguments->GetInt32(1); - InstanceManager_MoveInstance(iTo, iFrom); - IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); - if (!pNotify) { - return; - } - CXFA_Node* pToInstance = XFA_ScriptInstanceManager_GetItem(this, iTo); - if (pToInstance && pToInstance->GetClassID() == XFA_ELEMENT_Subform) { - pNotify->RunSubformIndexChange(pToInstance); - } - CXFA_Node* pFromInstance = XFA_ScriptInstanceManager_GetItem(this, iFrom); - if (pFromInstance && pFromInstance->GetClassID() == XFA_ELEMENT_Subform) { - pNotify->RunSubformIndexChange(pFromInstance); - } -} -void CXFA_Node::Script_InstanceManager_RemoveInstance( - CFXJSE_Arguments* pArguments) { - int32_t argc = pArguments->GetLength(); - if (argc != 1) { - FXJSE_Value_SetUndefined(pArguments->GetReturnValue()); - return; - } - int32_t iIndex = pArguments->GetInt32(0); - int32_t iCount = XFA_ScriptInstanceManager_GetCount(this); - if (iIndex < 0 || iIndex >= iCount) { - ThrowScriptErrorMessage(XFA_IDS_INDEX_OUT_OF_BOUNDS); - return; - } - CXFA_Occur nodeOccur(GetOccurNode()); - int32_t iMin = nodeOccur.GetMin(); - if (iCount - 1 < iMin) { - ThrowScriptErrorMessage(XFA_IDS_VIOLATE_BOUNDARY, L"min"); - return; - } - CXFA_Node* pRemoveInstance = XFA_ScriptInstanceManager_GetItem(this, iIndex); - XFA_ScriptInstanceManager_RemoveItem(this, pRemoveInstance); - IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); - if (pNotify) { - for (int32_t i = iIndex; i < iCount - 1; i++) { - CXFA_Node* pSubformInstance = XFA_ScriptInstanceManager_GetItem(this, i); - if (pSubformInstance && - pSubformInstance->GetClassID() == XFA_ELEMENT_Subform) { - pNotify->RunSubformIndexChange(pSubformInstance); - } - } - } - CXFA_LayoutProcessor* pLayoutPro = m_pDocument->GetLayoutProcessor(); - if (!pLayoutPro) { - return; - } - pLayoutPro->AddChangedContainer( - ToNode(m_pDocument->GetXFAObject(XFA_HASHCODE_Form))); -} -void CXFA_Node::Script_InstanceManager_SetInstances( - CFXJSE_Arguments* pArguments) { - int32_t argc = pArguments->GetLength(); - if (argc != 1) { - FXJSE_Value_SetUndefined(pArguments->GetReturnValue()); - return; - } - int32_t iDesired = pArguments->GetInt32(0); - InstanceManager_SetInstances(iDesired); -} -void CXFA_Node::Script_InstanceManager_AddInstance( - CFXJSE_Arguments* pArguments) { - int32_t argc = pArguments->GetLength(); - if ((argc != 0) && (argc != 1)) { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"addInstance"); - return; - } - FX_BOOL fFlags = TRUE; - if (argc == 1) { - fFlags = pArguments->GetInt32(0) == 0 ? FALSE : TRUE; - } - int32_t iCount = XFA_ScriptInstanceManager_GetCount(this); - CXFA_Occur nodeOccur(GetOccurNode()); - int32_t iMax = nodeOccur.GetMax(); - if (iMax >= 0 && iCount >= iMax) { - ThrowScriptErrorMessage(XFA_IDS_VIOLATE_BOUNDARY, L"max"); - return; - } - CXFA_Node* pNewInstance = - XFA_ScriptInstanceManager_CreateInstance(this, fFlags); - XFA_ScriptInstanceManager_InsertItem(this, pNewInstance, iCount, iCount, - FALSE); - FXJSE_Value_Set( - pArguments->GetReturnValue(), - m_pDocument->GetScriptContext()->GetJSValueFromMap(pNewInstance)); - IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); - if (!pNotify) { - return; - } - pNotify->RunNodeInitialize(pNewInstance); - CXFA_LayoutProcessor* pLayoutPro = m_pDocument->GetLayoutProcessor(); - if (!pLayoutPro) { - return; - } - pLayoutPro->AddChangedContainer( - ToNode(m_pDocument->GetXFAObject(XFA_HASHCODE_Form))); -} -void CXFA_Node::Script_InstanceManager_InsertInstance( - CFXJSE_Arguments* pArguments) { - int32_t argc = pArguments->GetLength(); - if ((argc != 1) && (argc != 2)) { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"insertInstance"); - return; - } - int32_t iIndex = pArguments->GetInt32(0); - FX_BOOL bBind = FALSE; - if (argc == 2) { - bBind = pArguments->GetInt32(1) == 0 ? FALSE : TRUE; - } - CXFA_Occur nodeOccur(GetOccurNode()); - int32_t iCount = XFA_ScriptInstanceManager_GetCount(this); - if (iIndex < 0 || iIndex > iCount) { - ThrowScriptErrorMessage(XFA_IDS_INDEX_OUT_OF_BOUNDS); - return; - } - int32_t iMax = nodeOccur.GetMax(); - if (iMax >= 0 && iCount >= iMax) { - ThrowScriptErrorMessage(XFA_IDS_VIOLATE_BOUNDARY, L"max"); - return; - } - CXFA_Node* pNewInstance = - XFA_ScriptInstanceManager_CreateInstance(this, bBind); - XFA_ScriptInstanceManager_InsertItem(this, pNewInstance, iIndex, iCount, - TRUE); - FXJSE_Value_Set( - pArguments->GetReturnValue(), - m_pDocument->GetScriptContext()->GetJSValueFromMap(pNewInstance)); - IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); - if (!pNotify) { - return; - } - pNotify->RunNodeInitialize(pNewInstance); - CXFA_LayoutProcessor* pLayoutPro = m_pDocument->GetLayoutProcessor(); - if (!pLayoutPro) { - return; - } - pLayoutPro->AddChangedContainer( - ToNode(m_pDocument->GetXFAObject(XFA_HASHCODE_Form))); -} -int32_t CXFA_Node::InstanceManager_SetInstances(int32_t iDesired) { - CXFA_Occur nodeOccur(GetOccurNode()); - int32_t iMax = nodeOccur.GetMax(); - int32_t iMin = nodeOccur.GetMin(); - if (iDesired < iMin) { - ThrowScriptErrorMessage(XFA_IDS_VIOLATE_BOUNDARY, L"min"); - return 1; - } - if ((iMax >= 0) && (iDesired > iMax)) { - ThrowScriptErrorMessage(XFA_IDS_VIOLATE_BOUNDARY, L"max"); - return 2; - } - int32_t iCount = XFA_ScriptInstanceManager_GetCount(this); - if (iDesired == iCount) { - return 0; - } - if (iDesired < iCount) { - CFX_WideStringC wsInstManagerName = GetCData(XFA_ATTRIBUTE_Name); - CFX_WideString wsInstanceName = wsInstManagerName.IsEmpty() - ? wsInstManagerName - : wsInstManagerName.Mid(1); - FX_DWORD dInstanceNameHash = - wsInstanceName.IsEmpty() ? 0 : FX_HashCode_String_GetW( - wsInstanceName, - wsInstanceName.GetLength()); - CXFA_Node* pPrevSibling = - (iDesired == 0) ? this - : XFA_ScriptInstanceManager_GetItem(this, iDesired - 1); - while (iCount > iDesired) { - CXFA_Node* pRemoveInstance = - pPrevSibling->GetNodeItem(XFA_NODEITEM_NextSibling); - if (pRemoveInstance->GetClassID() != XFA_ELEMENT_Subform && - pRemoveInstance->GetClassID() != XFA_ELEMENT_SubformSet) { - continue; - } - if (pRemoveInstance->GetClassID() == XFA_ELEMENT_InstanceManager) { - FXSYS_assert(FALSE); - break; - } - if (pRemoveInstance->GetNameHash() == dInstanceNameHash) { - XFA_ScriptInstanceManager_RemoveItem(this, pRemoveInstance); - iCount--; - } - } - } else if (iDesired > iCount) { - while (iCount < iDesired) { - CXFA_Node* pNewInstance = - XFA_ScriptInstanceManager_CreateInstance(this, TRUE); - XFA_ScriptInstanceManager_InsertItem(this, pNewInstance, iCount, iCount, - FALSE); - iCount++; - IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); - if (!pNotify) { - return 0; - } - pNotify->RunNodeInitialize(pNewInstance); - } - } - CXFA_LayoutProcessor* pLayoutPro = m_pDocument->GetLayoutProcessor(); - if (pLayoutPro) { - pLayoutPro->AddChangedContainer( - ToNode(m_pDocument->GetXFAObject(XFA_HASHCODE_Form))); - } - return 0; -} -int32_t CXFA_Node::InstanceManager_MoveInstance(int32_t iTo, int32_t iFrom) { - int32_t iCount = XFA_ScriptInstanceManager_GetCount(this); - if (iFrom > iCount || iTo > iCount - 1) { - ThrowScriptErrorMessage(XFA_IDS_INDEX_OUT_OF_BOUNDS); - return 1; - } - if (iFrom < 0 || iTo < 0 || iFrom == iTo) { - return 0; - } - CXFA_Node* pMoveInstance = XFA_ScriptInstanceManager_GetItem(this, iFrom); - XFA_ScriptInstanceManager_RemoveItem(this, pMoveInstance, FALSE); - XFA_ScriptInstanceManager_InsertItem(this, pMoveInstance, iTo, iCount - 1, - TRUE); - CXFA_LayoutProcessor* pLayoutPro = m_pDocument->GetLayoutProcessor(); - if (pLayoutPro) { - pLayoutPro->AddChangedContainer( - ToNode(m_pDocument->GetXFAObject(XFA_HASHCODE_Form))); - } - return 0; -} -void CXFA_Node::Script_Occur_Max(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - CXFA_Occur occur(this); - if (bSetting) { - int32_t iMax = FXJSE_Value_ToInteger(hValue); - occur.SetMax(iMax); - } else { - FXJSE_Value_SetInteger(hValue, occur.GetMax()); - } -} -void CXFA_Node::Script_Occur_Min(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - CXFA_Occur occur(this); - if (bSetting) { - int32_t iMin = FXJSE_Value_ToInteger(hValue); - occur.SetMin(iMin); - } else { - FXJSE_Value_SetInteger(hValue, occur.GetMin()); - } -} -void CXFA_Node::Script_Desc_Metadata(CFXJSE_Arguments* pArguments) { - int32_t argc = pArguments->GetLength(); - if ((argc == 0) || (argc == 1)) { - FXJSE_Value_SetUTF8String(pArguments->GetReturnValue(), ""); - } else { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"metadata"); - } -} -void CXFA_Node::Script_Form_FormNodes(CFXJSE_Arguments* pArguments) { - int32_t argc = pArguments->GetLength(); - if (argc == 1) { - CXFA_Node* pDataNode = static_cast(pArguments->GetObject(0)); - if (pDataNode) { - CXFA_NodeArray formItems; - CXFA_ArrayNodeList* pFormNodes = new CXFA_ArrayNodeList(m_pDocument); - pFormNodes->SetArrayNodeList(formItems); - FXJSE_Value_SetObject( - pArguments->GetReturnValue(), (CXFA_Object*)pFormNodes, - m_pDocument->GetScriptContext()->GetJseNormalClass()); - } else { - ThrowScriptErrorMessage(XFA_IDS_ARGUMENT_MISMATCH); - } - } else { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"formNodes"); - } -} -void CXFA_Node::Script_Form_Remerge(CFXJSE_Arguments* pArguments) { - int32_t argc = pArguments->GetLength(); - if (argc == 0) { - m_pDocument->DoDataRemerge(TRUE); - } else { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"remerge"); - } -} -void CXFA_Node::Script_Form_ExecInitialize(CFXJSE_Arguments* pArguments) { - int32_t argc = pArguments->GetLength(); - if (argc == 0) { - IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); - if (!pNotify) { - return; - } - pNotify->ExecEventByDeepFirst(this, XFA_EVENT_Initialize); - } else { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"execInitialize"); - } -} -void CXFA_Node::Script_Form_Recalculate(CFXJSE_Arguments* pArguments) { - CXFA_EventParam* pEventParam = - m_pDocument->GetScriptContext()->GetEventParam(); - if (pEventParam->m_eType == XFA_EVENT_Calculate || - pEventParam->m_eType == XFA_EVENT_InitCalculate) { - return; - } - int32_t argc = pArguments->GetLength(); - if (argc == 1) { - const bool bScriptFlags = pArguments->GetInt32(0) != 0; - IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); - if (!pNotify) { - return; - } - if (bScriptFlags) { - pNotify->ExecEventByDeepFirst(this, XFA_EVENT_Calculate); - pNotify->ExecEventByDeepFirst(this, XFA_EVENT_Validate); - pNotify->ExecEventByDeepFirst(this, XFA_EVENT_Ready, TRUE); - } else { - } - } else { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"recalculate"); - } -} -void CXFA_Node::Script_Form_ExecCalculate(CFXJSE_Arguments* pArguments) { - int32_t argc = pArguments->GetLength(); - if (argc == 0) { - IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); - if (!pNotify) { - return; - } - pNotify->ExecEventByDeepFirst(this, XFA_EVENT_Calculate); - } else { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"execCalculate"); - } -} -void CXFA_Node::Script_Form_ExecValidate(CFXJSE_Arguments* pArguments) { - int32_t argc = pArguments->GetLength(); - if (argc == 0) { - IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); - if (!pNotify) { - FXJSE_Value_SetBoolean(pArguments->GetReturnValue(), FALSE); - } else { - int32_t iRet = pNotify->ExecEventByDeepFirst(this, XFA_EVENT_Validate); - FXJSE_Value_SetBoolean(pArguments->GetReturnValue(), - ((iRet == XFA_EVENTERROR_Error) ? FALSE : TRUE)); - } - } else { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"execValidate"); - } -} -void CXFA_Node::Script_Form_Checksum(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - if (bSetting) { - CFX_ByteString bsChecksum; - FXJSE_Value_ToUTF8String(hValue, bsChecksum); - SetAttribute(XFA_ATTRIBUTE_Checksum, - CFX_WideString::FromUTF8(bsChecksum, bsChecksum.GetLength())); - } else { - CFX_WideString wsChecksum; - GetAttribute(XFA_ATTRIBUTE_Checksum, wsChecksum, FALSE); - FXJSE_Value_SetUTF8String( - hValue, FX_UTF8Encode(wsChecksum, wsChecksum.GetLength())); - } -} -void CXFA_Node::Script_Packet_GetAttribute(CFXJSE_Arguments* pArguments) { - int32_t argc = pArguments->GetLength(); - if (argc == 1) { - CFX_ByteString bsAttributeName = pArguments->GetUTF8String(0); - CFX_WideString wsAttributeValue; - IFDE_XMLNode* pXMLNode = GetXMLMappingNode(); - if (pXMLNode && pXMLNode->GetType() == FDE_XMLNODE_Element) { - ((IFDE_XMLElement*)pXMLNode) - ->GetString(CFX_WideString::FromUTF8(bsAttributeName, - bsAttributeName.GetLength()), - wsAttributeValue); - } - FXJSE_Value_SetUTF8String( - pArguments->GetReturnValue(), - FX_UTF8Encode(wsAttributeValue, wsAttributeValue.GetLength())); - } else { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"getAttribute"); - } -} -void CXFA_Node::Script_Packet_SetAttribute(CFXJSE_Arguments* pArguments) { - int32_t argc = pArguments->GetLength(); - if (argc == 2) { - CFX_ByteString bsValue = pArguments->GetUTF8String(0); - CFX_ByteString bsName = pArguments->GetUTF8String(1); - IFDE_XMLNode* pXMLNode = GetXMLMappingNode(); - if (pXMLNode && pXMLNode->GetType() == FDE_XMLNODE_Element) { - ((IFDE_XMLElement*)pXMLNode) - ->SetString(CFX_WideString::FromUTF8(bsName, bsName.GetLength()), - CFX_WideString::FromUTF8(bsValue, bsValue.GetLength())); - } - FXJSE_Value_SetNull(pArguments->GetReturnValue()); - } else { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"setAttribute"); - } -} -void CXFA_Node::Script_Packet_RemoveAttribute(CFXJSE_Arguments* pArguments) { - int32_t argc = pArguments->GetLength(); - if (argc == 1) { - CFX_ByteString bsName = pArguments->GetUTF8String(0); - CFX_WideString wsName = - CFX_WideString::FromUTF8(bsName, bsName.GetLength()); - IFDE_XMLNode* pXMLNode = GetXMLMappingNode(); - if (pXMLNode && pXMLNode->GetType() == FDE_XMLNODE_Element) { - IFDE_XMLElement* pXMLElement = (IFDE_XMLElement*)pXMLNode; - if (pXMLElement->HasAttribute(wsName)) { - pXMLElement->RemoveAttribute(wsName); - } - } - FXJSE_Value_SetNull(pArguments->GetReturnValue()); - } else { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"removeAttribute"); - } -} -void CXFA_Node::Script_Packet_Content(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - if (bSetting) { - CFX_ByteString bsNewContent; - FXJSE_Value_ToUTF8String(hValue, bsNewContent); - IFDE_XMLNode* pXMLNode = GetXMLMappingNode(); - if (pXMLNode && pXMLNode->GetType() == FDE_XMLNODE_Element) { - IFDE_XMLElement* pXMLElement = (IFDE_XMLElement*)pXMLNode; - pXMLElement->SetTextData( - CFX_WideString::FromUTF8(bsNewContent, bsNewContent.GetLength())); - } - } else { - CFX_WideString wsTextData; - IFDE_XMLNode* pXMLNode = GetXMLMappingNode(); - if (pXMLNode && pXMLNode->GetType() == FDE_XMLNODE_Element) { - IFDE_XMLElement* pXMLElement = (IFDE_XMLElement*)pXMLNode; - pXMLElement->GetTextData(wsTextData); - } - FXJSE_Value_SetUTF8String( - hValue, FX_UTF8Encode(wsTextData, wsTextData.GetLength())); - } -} -void CXFA_Node::Script_Source_Next(CFXJSE_Arguments* pArguments) { - int32_t argc = pArguments->GetLength(); - if (argc == 0) { - } else { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"next"); - } -} -void CXFA_Node::Script_Source_CancelBatch(CFXJSE_Arguments* pArguments) { - int32_t argc = pArguments->GetLength(); - if (argc == 0) { - } else { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"cancelBatch"); - } -} -void CXFA_Node::Script_Source_First(CFXJSE_Arguments* pArguments) { - int32_t argc = pArguments->GetLength(); - if (argc == 0) { - } else { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"first"); - } -} -void CXFA_Node::Script_Source_UpdateBatch(CFXJSE_Arguments* pArguments) { - int32_t argc = pArguments->GetLength(); - if (argc == 0) { - } else { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"updateBatch"); - } -} -void CXFA_Node::Script_Source_Previous(CFXJSE_Arguments* pArguments) { - int32_t argc = pArguments->GetLength(); - if (argc == 0) { - } else { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"previous"); - } -} -void CXFA_Node::Script_Source_IsBOF(CFXJSE_Arguments* pArguments) { - int32_t argc = pArguments->GetLength(); - if (argc == 0) { - } else { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"isBOF"); - } -} -void CXFA_Node::Script_Source_IsEOF(CFXJSE_Arguments* pArguments) { - int32_t argc = pArguments->GetLength(); - if (argc == 0) { - } else { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"isEOF"); - } -} -void CXFA_Node::Script_Source_Cancel(CFXJSE_Arguments* pArguments) { - int32_t argc = pArguments->GetLength(); - if (argc == 0) { - } else { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"cancel"); - } -} -void CXFA_Node::Script_Source_Update(CFXJSE_Arguments* pArguments) { - int32_t argc = pArguments->GetLength(); - if (argc == 0) { - } else { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"update"); - } -} -void CXFA_Node::Script_Source_Open(CFXJSE_Arguments* pArguments) { - int32_t argc = pArguments->GetLength(); - if (argc == 0) { - } else { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"open"); - } -} -void CXFA_Node::Script_Source_Delete(CFXJSE_Arguments* pArguments) { - int32_t argc = pArguments->GetLength(); - if (argc == 0) { - } else { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"delete"); - } -} -void CXFA_Node::Script_Source_AddNew(CFXJSE_Arguments* pArguments) { - int32_t argc = pArguments->GetLength(); - if (argc == 0) { - } else { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"addNew"); - } -} -void CXFA_Node::Script_Source_Requery(CFXJSE_Arguments* pArguments) { - int32_t argc = pArguments->GetLength(); - if (argc == 0) { - } else { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"requery"); - } -} -void CXFA_Node::Script_Source_Resync(CFXJSE_Arguments* pArguments) { - int32_t argc = pArguments->GetLength(); - if (argc == 0) { - } else { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"resync"); - } -} -void CXFA_Node::Script_Source_Close(CFXJSE_Arguments* pArguments) { - int32_t argc = pArguments->GetLength(); - if (argc == 0) { - } else { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"close"); - } -} -void CXFA_Node::Script_Source_Last(CFXJSE_Arguments* pArguments) { - int32_t argc = pArguments->GetLength(); - if (argc == 0) { - } else { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"last"); - } -} -void CXFA_Node::Script_Source_HasDataChanged(CFXJSE_Arguments* pArguments) { - int32_t argc = pArguments->GetLength(); - if (argc == 0) { - } else { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"hasDataChanged"); - } -} -void CXFA_Node::Script_Source_Db(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) {} -void CXFA_Node::Script_Xfa_This(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - if (!bSetting) { - CXFA_Object* pThis = m_pDocument->GetScriptContext()->GetThisObject(); - FXSYS_assert(pThis); - FXJSE_Value_Set(hValue, - m_pDocument->GetScriptContext()->GetJSValueFromMap(pThis)); - } -} -void CXFA_Node::Script_Handler_Version(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) {} -void CXFA_Node::Script_SubmitFormat_Mode(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) {} -void CXFA_Node::Script_Extras_Type(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) {} -void CXFA_Node::Script_Script_Stateless(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - if (bSetting) { - ThrowScriptErrorMessage(XFA_IDS_INVAlID_PROP_SET); - return; - } - FXJSE_Value_SetUTF8String(hValue, FX_UTF8Encode(FX_WSTRC(L"0"))); -} -void CXFA_Node::Script_Encrypt_Format(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) {} -enum XFA_KEYTYPE { - XFA_KEYTYPE_Custom, - XFA_KEYTYPE_Element, -}; -void* XFA_GetMapKey_Custom(const CFX_WideStringC& wsKey) { - FX_DWORD dwKey = FX_HashCode_String_GetW(wsKey.GetPtr(), wsKey.GetLength()); - return (void*)(uintptr_t)((dwKey << 1) | XFA_KEYTYPE_Custom); -} -void* XFA_GetMapKey_Element(XFA_ELEMENT eElement, XFA_ATTRIBUTE eAttribute) { - return (void*)(uintptr_t)((eElement << 16) | (eAttribute << 8) | - XFA_KEYTYPE_Element); -} -FX_BOOL CXFA_Node::HasAttribute(XFA_ATTRIBUTE eAttr, FX_BOOL bCanInherit) { - void* pKey = XFA_GetMapKey_Element(GetClassID(), eAttr); - return HasMapModuleKey(pKey, bCanInherit); -} -FX_BOOL CXFA_Node::SetAttribute(XFA_ATTRIBUTE eAttr, - const CFX_WideStringC& wsValue, - FX_BOOL bNotify) { - const XFA_ATTRIBUTEINFO* pAttr = XFA_GetAttributeByID(eAttr); - if (pAttr == NULL) { - return FALSE; - } - XFA_ATTRIBUTETYPE eType = pAttr->eType; - if (eType == XFA_ATTRIBUTETYPE_NOTSURE) { - const XFA_NOTSUREATTRIBUTE* pNotsure = - XFA_GetNotsureAttribute(GetClassID(), pAttr->eName); - eType = pNotsure ? pNotsure->eType : XFA_ATTRIBUTETYPE_Cdata; - } - switch (eType) { - case XFA_ATTRIBUTETYPE_Enum: { - const XFA_ATTRIBUTEENUMINFO* pEnum = XFA_GetAttributeEnumByName(wsValue); - return SetEnum(pAttr->eName, - pEnum ? pEnum->eName - : (XFA_ATTRIBUTEENUM)(intptr_t)(pAttr->pDefValue), - bNotify); - } break; - case XFA_ATTRIBUTETYPE_Cdata: - return SetCData(pAttr->eName, wsValue, bNotify); - case XFA_ATTRIBUTETYPE_Boolean: - return SetBoolean(pAttr->eName, wsValue != FX_WSTRC(L"0"), bNotify); - case XFA_ATTRIBUTETYPE_Integer: - return SetInteger( - pAttr->eName, - FXSYS_round(FX_wcstof(wsValue.GetPtr(), wsValue.GetLength())), - bNotify); - case XFA_ATTRIBUTETYPE_Measure: - return SetMeasure(pAttr->eName, CXFA_Measurement(wsValue), bNotify); - default: - break; - } - return FALSE; -} -FX_BOOL CXFA_Node::GetAttribute(XFA_ATTRIBUTE eAttr, - CFX_WideString& wsValue, - FX_BOOL bUseDefault) { - const XFA_ATTRIBUTEINFO* pAttr = XFA_GetAttributeByID(eAttr); - if (pAttr == NULL) { - return FALSE; - } - XFA_ATTRIBUTETYPE eType = pAttr->eType; - if (eType == XFA_ATTRIBUTETYPE_NOTSURE) { - const XFA_NOTSUREATTRIBUTE* pNotsure = - XFA_GetNotsureAttribute(GetClassID(), pAttr->eName); - eType = pNotsure ? pNotsure->eType : XFA_ATTRIBUTETYPE_Cdata; - } - switch (eType) { - case XFA_ATTRIBUTETYPE_Enum: { - XFA_ATTRIBUTEENUM eValue; - if (!TryEnum(pAttr->eName, eValue, bUseDefault)) { - return FALSE; - } - wsValue = XFA_GetAttributeEnumByID(eValue)->pName; - return TRUE; - } break; - case XFA_ATTRIBUTETYPE_Cdata: { - CFX_WideStringC wsValueC; - if (!TryCData(pAttr->eName, wsValueC, bUseDefault)) { - return FALSE; - } - wsValue = wsValueC; - return TRUE; - } break; - case XFA_ATTRIBUTETYPE_Boolean: { - FX_BOOL bValue; - if (!TryBoolean(pAttr->eName, bValue, bUseDefault)) { - return FALSE; - } - wsValue = bValue ? FX_WSTRC(L"1") : FX_WSTRC(L"0"); - return TRUE; - } break; - case XFA_ATTRIBUTETYPE_Integer: { - int32_t iValue; - if (!TryInteger(pAttr->eName, iValue, bUseDefault)) { - return FALSE; - } - wsValue.Format(L"%d", iValue); - return TRUE; - } break; - case XFA_ATTRIBUTETYPE_Measure: { - CXFA_Measurement mValue; - if (!TryMeasure(pAttr->eName, mValue, bUseDefault)) { - return FALSE; - } - mValue.ToString(wsValue); - return TRUE; - } break; - default: - break; - } - return FALSE; -} -FX_BOOL CXFA_Node::SetAttribute(const CFX_WideStringC& wsAttr, - const CFX_WideStringC& wsValue, - FX_BOOL bNotify) { - const XFA_ATTRIBUTEINFO* pAttributeInfo = XFA_GetAttributeByName(wsValue); - if (pAttributeInfo) { - return SetAttribute(pAttributeInfo->eName, wsValue, bNotify); - } - void* pKey = XFA_GetMapKey_Custom(wsAttr); - SetMapModuleString(pKey, wsValue); - return TRUE; -} -FX_BOOL CXFA_Node::GetAttribute(const CFX_WideStringC& wsAttr, - CFX_WideString& wsValue, - FX_BOOL bUseDefault) { - const XFA_ATTRIBUTEINFO* pAttributeInfo = XFA_GetAttributeByName(wsAttr); - if (pAttributeInfo) { - return GetAttribute(pAttributeInfo->eName, wsValue, bUseDefault); - } - void* pKey = XFA_GetMapKey_Custom(wsAttr); - CFX_WideStringC wsValueC; - if (GetMapModuleString(pKey, wsValueC)) { - wsValue = wsValueC; - } - return TRUE; -} -FX_BOOL CXFA_Node::RemoveAttribute(const CFX_WideStringC& wsAttr) { - void* pKey = XFA_GetMapKey_Custom(wsAttr); - RemoveMapModuleKey(pKey); - return TRUE; -} -FX_BOOL CXFA_Node::TryBoolean(XFA_ATTRIBUTE eAttr, - FX_BOOL& bValue, - FX_BOOL bUseDefault) { - void* pValue = NULL; - if (!GetValue(eAttr, XFA_ATTRIBUTETYPE_Boolean, bUseDefault, pValue)) { - return FALSE; - } - bValue = (FX_BOOL)(uintptr_t)pValue; - return TRUE; -} -FX_BOOL CXFA_Node::TryInteger(XFA_ATTRIBUTE eAttr, - int32_t& iValue, - FX_BOOL bUseDefault) { - void* pValue = NULL; - if (!GetValue(eAttr, XFA_ATTRIBUTETYPE_Integer, bUseDefault, pValue)) { - return FALSE; - } - iValue = (int32_t)(uintptr_t)pValue; - return TRUE; -} -FX_BOOL CXFA_Node::TryEnum(XFA_ATTRIBUTE eAttr, - XFA_ATTRIBUTEENUM& eValue, - FX_BOOL bUseDefault) { - void* pValue = NULL; - if (!GetValue(eAttr, XFA_ATTRIBUTETYPE_Enum, bUseDefault, pValue)) { - return FALSE; - } - eValue = (XFA_ATTRIBUTEENUM)(uintptr_t)pValue; - return TRUE; -} -FX_BOOL CXFA_Node::SetMeasure(XFA_ATTRIBUTE eAttr, - CXFA_Measurement mValue, - FX_BOOL bNotify) { - void* pKey = XFA_GetMapKey_Element(GetClassID(), eAttr); - OnChanging(eAttr, &mValue, bNotify); - SetMapModuleBuffer(pKey, &mValue, sizeof(CXFA_Measurement)); - OnChanged(eAttr, &mValue, bNotify); - return TRUE; -} -FX_BOOL CXFA_Node::TryMeasure(XFA_ATTRIBUTE eAttr, - CXFA_Measurement& mValue, - FX_BOOL bUseDefault) const { - void* pKey = XFA_GetMapKey_Element(GetClassID(), eAttr); - void* pValue; - int32_t iBytes; - if (GetMapModuleBuffer(pKey, pValue, iBytes) && iBytes == sizeof(mValue)) { - FXSYS_memcpy(&mValue, pValue, sizeof(mValue)); - return TRUE; - } - if (bUseDefault && - XFA_GetAttributeDefaultValue(pValue, GetClassID(), eAttr, - XFA_ATTRIBUTETYPE_Measure, m_ePacket)) { - FXSYS_memcpy(&mValue, pValue, sizeof(mValue)); - return TRUE; - } - return FALSE; -} - -CXFA_Measurement CXFA_Node::GetMeasure(XFA_ATTRIBUTE eAttr) const { - CXFA_Measurement mValue; - return TryMeasure(eAttr, mValue, TRUE) ? mValue : CXFA_Measurement(); -} - -FX_BOOL CXFA_Node::SetCData(XFA_ATTRIBUTE eAttr, - const CFX_WideString& wsValue, - FX_BOOL bNotify, - FX_BOOL bScriptModify) { - void* pKey = XFA_GetMapKey_Element(GetClassID(), eAttr); - OnChanging(eAttr, (void*)(const FX_WCHAR*)wsValue, bNotify); - if (eAttr == XFA_ATTRIBUTE_Value) { - CFX_WideString* pClone = new CFX_WideString(wsValue); - SetUserData(pKey, pClone, &deleteWideStringCallBack); - } else { - SetMapModuleString(pKey, wsValue); - if (eAttr == XFA_ATTRIBUTE_Name) - UpdateNameHash(); - } - OnChanged(eAttr, (void*)(const FX_WCHAR*)wsValue, bNotify, bScriptModify); - if (IsNeedSavingXMLNode() && eAttr != XFA_ATTRIBUTE_QualifiedName && - eAttr != XFA_ATTRIBUTE_BindingNode) { - if (eAttr == XFA_ATTRIBUTE_Name && - (m_eNodeClass == XFA_ELEMENT_DataValue || - m_eNodeClass == XFA_ELEMENT_DataGroup)) { - return TRUE; - } - if (eAttr == XFA_ATTRIBUTE_Value) { - FDE_XMLNODETYPE eXMLType = m_pXMLNode->GetType(); - switch (eXMLType) { - case FDE_XMLNODE_Element: - if (IsAttributeInXML()) { - ((IFDE_XMLElement*)m_pXMLNode) - ->SetString(GetCData(XFA_ATTRIBUTE_QualifiedName), wsValue); - } else { - FX_BOOL bDeleteChildren = TRUE; - if (GetPacketID() == XFA_XDPPACKET_Datasets) { - for (CXFA_Node* pChildDataNode = - GetNodeItem(XFA_NODEITEM_FirstChild); - pChildDataNode; pChildDataNode = pChildDataNode->GetNodeItem( - XFA_NODEITEM_NextSibling)) { - CXFA_NodeArray formNodes; - if (pChildDataNode->GetBindItems(formNodes) > 0) { - bDeleteChildren = FALSE; - break; - } - } - } - if (bDeleteChildren) { - ((IFDE_XMLElement*)m_pXMLNode)->DeleteChildren(); - } - ((IFDE_XMLElement*)m_pXMLNode)->SetTextData(wsValue); - } - break; - case FDE_XMLNODE_Text: - ((IFDE_XMLText*)m_pXMLNode)->SetText(wsValue); - break; - default: - FXSYS_assert(0); - } - return TRUE; - } - const XFA_ATTRIBUTEINFO* pInfo = XFA_GetAttributeByID(eAttr); - if (pInfo) { - FXSYS_assert(m_pXMLNode->GetType() == FDE_XMLNODE_Element); - CFX_WideString wsAttrName = pInfo->pName; - if (pInfo->eName == XFA_ATTRIBUTE_ContentType) { - wsAttrName = FX_WSTRC(L"xfa:") + wsAttrName; - } - ((IFDE_XMLElement*)m_pXMLNode)->SetString(wsAttrName, wsValue); - } - } - return TRUE; -} -FX_BOOL CXFA_Node::SetAttributeValue(const CFX_WideString& wsValue, - const CFX_WideString& wsXMLValue, - FX_BOOL bNotify, - FX_BOOL bScriptModify) { - void* pKey = XFA_GetMapKey_Element(GetClassID(), XFA_ATTRIBUTE_Value); - OnChanging(XFA_ATTRIBUTE_Value, (void*)(const FX_WCHAR*)wsValue, bNotify); - CFX_WideString* pClone = new CFX_WideString(wsValue); - SetUserData(pKey, pClone, &deleteWideStringCallBack); - OnChanged(XFA_ATTRIBUTE_Value, (void*)(const FX_WCHAR*)wsValue, bNotify, - bScriptModify); - if (IsNeedSavingXMLNode()) { - FDE_XMLNODETYPE eXMLType = m_pXMLNode->GetType(); - switch (eXMLType) { - case FDE_XMLNODE_Element: - if (IsAttributeInXML()) { - ((IFDE_XMLElement*)m_pXMLNode) - ->SetString(GetCData(XFA_ATTRIBUTE_QualifiedName), wsXMLValue); - } else { - FX_BOOL bDeleteChildren = TRUE; - if (GetPacketID() == XFA_XDPPACKET_Datasets) { - for (CXFA_Node* pChildDataNode = - GetNodeItem(XFA_NODEITEM_FirstChild); - pChildDataNode; pChildDataNode = pChildDataNode->GetNodeItem( - XFA_NODEITEM_NextSibling)) { - CXFA_NodeArray formNodes; - if (pChildDataNode->GetBindItems(formNodes) > 0) { - bDeleteChildren = FALSE; - break; - } - } - } - if (bDeleteChildren) { - ((IFDE_XMLElement*)m_pXMLNode)->DeleteChildren(); - } - ((IFDE_XMLElement*)m_pXMLNode)->SetTextData(wsXMLValue); - } - break; - case FDE_XMLNODE_Text: - ((IFDE_XMLText*)m_pXMLNode)->SetText(wsXMLValue); - break; - default: - FXSYS_assert(0); - } - } - return TRUE; -} -FX_BOOL CXFA_Node::TryCData(XFA_ATTRIBUTE eAttr, - CFX_WideString& wsValue, - FX_BOOL bUseDefault, - FX_BOOL bProto) { - void* pKey = XFA_GetMapKey_Element(GetClassID(), eAttr); - if (eAttr == XFA_ATTRIBUTE_Value) { - CFX_WideString* pStr = (CFX_WideString*)GetUserData(pKey, bProto); - if (pStr) { - wsValue = *pStr; - return TRUE; - } - } else { - CFX_WideStringC wsValueC; - if (GetMapModuleString(pKey, wsValueC)) { - wsValue = wsValueC; - return TRUE; - } - } - if (!bUseDefault) { - return FALSE; - } - void* pValue = NULL; - if (XFA_GetAttributeDefaultValue(pValue, GetClassID(), eAttr, - XFA_ATTRIBUTETYPE_Cdata, m_ePacket)) { - wsValue = (const FX_WCHAR*)pValue; - return TRUE; - } - return FALSE; -} -FX_BOOL CXFA_Node::TryCData(XFA_ATTRIBUTE eAttr, - CFX_WideStringC& wsValue, - FX_BOOL bUseDefault, - FX_BOOL bProto) { - void* pKey = XFA_GetMapKey_Element(GetClassID(), eAttr); - if (eAttr == XFA_ATTRIBUTE_Value) { - CFX_WideString* pStr = (CFX_WideString*)GetUserData(pKey, bProto); - if (pStr) { - wsValue = *pStr; - return TRUE; - } - } else { - if (GetMapModuleString(pKey, wsValue)) { - return TRUE; - } - } - if (!bUseDefault) { - return FALSE; - } - void* pValue = NULL; - if (XFA_GetAttributeDefaultValue(pValue, GetClassID(), eAttr, - XFA_ATTRIBUTETYPE_Cdata, m_ePacket)) { - wsValue = (CFX_WideStringC)(const FX_WCHAR*)pValue; - return TRUE; - } - return FALSE; -} -FX_BOOL CXFA_Node::SetObject(XFA_ATTRIBUTE eAttr, - void* pData, - XFA_MAPDATABLOCKCALLBACKINFO* pCallbackInfo) { - void* pKey = XFA_GetMapKey_Element(GetClassID(), eAttr); - return SetUserData(pKey, pData, pCallbackInfo); -} -FX_BOOL CXFA_Node::TryObject(XFA_ATTRIBUTE eAttr, void*& pData) { - void* pKey = XFA_GetMapKey_Element(GetClassID(), eAttr); - pData = GetUserData(pKey); - return pData != NULL; -} -FX_BOOL CXFA_Node::SetValue(XFA_ATTRIBUTE eAttr, - XFA_ATTRIBUTETYPE eType, - void* pValue, - FX_BOOL bNotify) { - void* pKey = XFA_GetMapKey_Element(GetClassID(), eAttr); - OnChanging(eAttr, pValue, bNotify); - SetMapModuleValue(pKey, pValue); - OnChanged(eAttr, pValue, bNotify); - if (IsNeedSavingXMLNode()) { - FXSYS_assert(m_pXMLNode->GetType() == FDE_XMLNODE_Element); - const XFA_ATTRIBUTEINFO* pInfo = XFA_GetAttributeByID(eAttr); - if (pInfo) { - switch (eType) { - case XFA_ATTRIBUTETYPE_Enum: - ((IFDE_XMLElement*)m_pXMLNode) - ->SetString( - pInfo->pName, - XFA_GetAttributeEnumByID((XFA_ATTRIBUTEENUM)(uintptr_t)pValue) - ->pName); - break; - case XFA_ATTRIBUTETYPE_Boolean: - ((IFDE_XMLElement*)m_pXMLNode) - ->SetString(pInfo->pName, - pValue ? FX_WSTRC(L"1") : FX_WSTRC(L"0")); - break; - case XFA_ATTRIBUTETYPE_Integer: - ((IFDE_XMLElement*)m_pXMLNode) - ->SetInteger(pInfo->pName, (int32_t)(uintptr_t)pValue); - break; - default: - FXSYS_assert(0); - } - } - } - return TRUE; -} -FX_BOOL CXFA_Node::GetValue(XFA_ATTRIBUTE eAttr, - XFA_ATTRIBUTETYPE eType, - FX_BOOL bUseDefault, - void*& pValue) { - void* pKey = XFA_GetMapKey_Element(GetClassID(), eAttr); - if (GetMapModuleValue(pKey, pValue)) { - return TRUE; - } - if (!bUseDefault) { - return FALSE; - } - return XFA_GetAttributeDefaultValue(pValue, GetClassID(), eAttr, eType, - m_ePacket); -} -static void XFA_DefaultFreeData(void* pData) {} -static XFA_MAPDATABLOCKCALLBACKINFO gs_XFADefaultFreeData = { - XFA_DefaultFreeData, NULL}; -FX_BOOL CXFA_Node::SetUserData(void* pKey, - void* pData, - XFA_MAPDATABLOCKCALLBACKINFO* pCallbackInfo) { - SetMapModuleBuffer(pKey, &pData, sizeof(void*), - pCallbackInfo ? pCallbackInfo : &gs_XFADefaultFreeData); - return TRUE; -} -FX_BOOL CXFA_Node::TryUserData(void* pKey, void*& pData, FX_BOOL bProtoAlso) { - int32_t iBytes = 0; - if (!GetMapModuleBuffer(pKey, pData, iBytes, bProtoAlso)) { - return FALSE; - } - return iBytes == sizeof(void*) && FXSYS_memcpy(&pData, pData, iBytes); -} -FX_BOOL CXFA_Node::SetScriptContent(const CFX_WideString& wsContent, - const CFX_WideString& wsXMLValue, - FX_BOOL bNotify, - FX_BOOL bScriptModify, - FX_BOOL bSyncData) { - CXFA_Node* pNode = NULL; - CXFA_Node* pBindNode = NULL; - switch (GetObjectType()) { - case XFA_OBJECTTYPE_ContainerNode: { - if (XFA_FieldIsMultiListBox(this)) { - CXFA_Node* pValue = GetProperty(0, XFA_ELEMENT_Value); - CXFA_Node* pChildValue = pValue->GetNodeItem(XFA_NODEITEM_FirstChild); - FXSYS_assert(pChildValue); - pChildValue->SetCData(XFA_ATTRIBUTE_ContentType, FX_WSTRC(L"text/xml")); - pChildValue->SetScriptContent(wsContent, wsContent, bNotify, - bScriptModify, FALSE); - CXFA_Node* pBind = GetBindData(); - if (bSyncData && pBind) { - CFX_WideStringArray wsSaveTextArray; - int32_t iSize = 0; - if (!wsContent.IsEmpty()) { - int32_t iStart = 0; - int32_t iLength = wsContent.GetLength(); - int32_t iEnd = wsContent.Find(L'\n', iStart); - iEnd = (iEnd == -1) ? iLength : iEnd; - while (iEnd >= iStart) { - wsSaveTextArray.Add(wsContent.Mid(iStart, iEnd - iStart)); - iStart = iEnd + 1; - if (iStart >= iLength) { - break; - } - iEnd = wsContent.Find(L'\n', iStart); - if (iEnd < 0) { - wsSaveTextArray.Add(wsContent.Mid(iStart, iLength - iStart)); - } - } - iSize = wsSaveTextArray.GetSize(); - } - if (iSize == 0) { - while (CXFA_Node* pChildNode = - pBind->GetNodeItem(XFA_NODEITEM_FirstChild)) { - pBind->RemoveChild(pChildNode); - } - } else { - CXFA_NodeArray valueNodes; - int32_t iDatas = pBind->GetNodeList( - valueNodes, XFA_NODEFILTER_Children, XFA_ELEMENT_DataValue); - if (iDatas < iSize) { - int32_t iAddNodes = iSize - iDatas; - CXFA_Node* pValueNodes = NULL; - while (iAddNodes-- > 0) { - pValueNodes = - pBind->CreateSamePacketNode(XFA_ELEMENT_DataValue); - pValueNodes->SetCData(XFA_ATTRIBUTE_Name, FX_WSTRC(L"value")); - pValueNodes->CreateXMLMappingNode(); - pBind->InsertChild(pValueNodes); - } - pValueNodes = NULL; - } else if (iDatas > iSize) { - int32_t iDelNodes = iDatas - iSize; - while (iDelNodes-- > 0) { - pBind->RemoveChild(pBind->GetNodeItem(XFA_NODEITEM_FirstChild)); - } - } - int32_t i = 0; - for (CXFA_Node* pValueNode = - pBind->GetNodeItem(XFA_NODEITEM_FirstChild); - pValueNode; pValueNode = pValueNode->GetNodeItem( - XFA_NODEITEM_NextSibling)) { - pValueNode->SetAttributeValue(wsSaveTextArray[i], - wsSaveTextArray[i], FALSE); - i++; - } - } - CXFA_NodeArray nodeArray; - pBind->GetBindItems(nodeArray); - for (int32_t i = 0; i < nodeArray.GetSize(); i++) { - CXFA_Node* pNode = nodeArray[i]; - if (pNode == this) { - continue; - } - pNode->SetScriptContent(wsContent, wsContent, bNotify, - bScriptModify, FALSE); - } - } - break; - } else if (GetClassID() == XFA_ELEMENT_ExclGroup) { - pNode = this; - } else { - CXFA_Node* pValue = GetProperty(0, XFA_ELEMENT_Value); - CXFA_Node* pChildValue = pValue->GetNodeItem(XFA_NODEITEM_FirstChild); - FXSYS_assert(pChildValue); - pChildValue->SetScriptContent(wsContent, wsContent, bNotify, - bScriptModify, FALSE); - } - pBindNode = GetBindData(); - if (pBindNode && bSyncData) { - pBindNode->SetScriptContent(wsContent, wsXMLValue, bNotify, - bScriptModify, FALSE); - CXFA_NodeArray nodeArray; - pBindNode->GetBindItems(nodeArray); - for (int32_t i = 0; i < nodeArray.GetSize(); i++) { - CXFA_Node* pNode = nodeArray[i]; - if (pNode == this) { - continue; - } - pNode->SetScriptContent(wsContent, wsContent, bNotify, TRUE, FALSE); - } - } - pBindNode = NULL; - break; - } - case XFA_OBJECTTYPE_ContentNode: { - CFX_WideString wsContentType; - if (GetClassID() == XFA_ELEMENT_ExData) { - GetAttribute(XFA_ATTRIBUTE_ContentType, wsContentType, FALSE); - if (wsContentType.Equal(FX_WSTRC(L"text/html"))) { - wsContentType = FX_WSTRC(L""); - SetAttribute(XFA_ATTRIBUTE_ContentType, wsContentType); - } - } - CXFA_Node* pContentRawDataNode = GetNodeItem(XFA_NODEITEM_FirstChild); - if (!pContentRawDataNode) { - pContentRawDataNode = - CreateSamePacketNode((wsContentType.Equal(FX_WSTRC(L"text/xml"))) - ? XFA_ELEMENT_Sharpxml - : XFA_ELEMENT_Sharptext); - InsertChild(pContentRawDataNode); - } - return pContentRawDataNode->SetScriptContent( - wsContent, wsXMLValue, bNotify, bScriptModify, bSyncData); - } break; - case XFA_OBJECTTYPE_NodeC: - case XFA_OBJECTTYPE_TextNode: - pNode = this; - break; - case XFA_OBJECTTYPE_NodeV: - pNode = this; - if (bSyncData && GetPacketID() == XFA_XDPPACKET_Form) { - CXFA_Node* pParent = GetNodeItem(XFA_NODEITEM_Parent); - if (pParent) { - pParent = pParent->GetNodeItem(XFA_NODEITEM_Parent); - } - if (pParent && pParent->GetClassID() == XFA_ELEMENT_Value) { - pParent = pParent->GetNodeItem(XFA_NODEITEM_Parent); - if (pParent && pParent->IsContainerNode()) { - pBindNode = pParent->GetBindData(); - if (pBindNode) { - pBindNode->SetScriptContent(wsContent, wsXMLValue, bNotify, - bScriptModify, FALSE); - } - } - } - } - break; - default: - if (GetClassID() == XFA_ELEMENT_DataValue) { - pNode = this; - pBindNode = this; - } - break; - } - if (pNode) { - SetAttributeValue(wsContent, wsXMLValue, bNotify, bScriptModify); - if (pBindNode && bSyncData) { - CXFA_NodeArray nodeArray; - pBindNode->GetBindItems(nodeArray); - for (int32_t i = 0; i < nodeArray.GetSize(); i++) { - CXFA_Node* pNode = nodeArray[i]; - pNode->SetScriptContent(wsContent, wsContent, bNotify, bScriptModify, - FALSE); - } - } - return TRUE; - } - return FALSE; -} -FX_BOOL CXFA_Node::SetContent(const CFX_WideString& wsContent, - const CFX_WideString& wsXMLValue, - FX_BOOL bNotify, - FX_BOOL bScriptModify, - FX_BOOL bSyncData) { - return SetScriptContent(wsContent, wsXMLValue, bNotify, bScriptModify, - bSyncData); -} -CFX_WideString CXFA_Node::GetScriptContent(FX_BOOL bScriptModify) { - CFX_WideString wsContent; - return TryContent(wsContent, bScriptModify) ? wsContent : CFX_WideString(); -} -CFX_WideString CXFA_Node::GetContent() { - return GetScriptContent(); -} -FX_BOOL CXFA_Node::TryContent(CFX_WideString& wsContent, - FX_BOOL bScriptModify, - FX_BOOL bProto) { - CXFA_Node* pNode = NULL; - switch (GetObjectType()) { - case XFA_OBJECTTYPE_ContainerNode: - if (GetClassID() == XFA_ELEMENT_ExclGroup) { - pNode = this; - } else { - CXFA_Node* pValue = GetChild(0, XFA_ELEMENT_Value); - if (!pValue) { - return FALSE; - } - CXFA_Node* pChildValue = pValue->GetNodeItem(XFA_NODEITEM_FirstChild); - if (pChildValue && XFA_FieldIsMultiListBox(this)) { - pChildValue->SetAttribute(XFA_ATTRIBUTE_ContentType, - FX_WSTRC(L"text/xml")); - } - return pChildValue - ? pChildValue->TryContent(wsContent, bScriptModify, bProto) - : FALSE; - } - break; - case XFA_OBJECTTYPE_ContentNode: { - CXFA_Node* pContentRawDataNode = GetNodeItem(XFA_NODEITEM_FirstChild); - if (!pContentRawDataNode) { - XFA_ELEMENT element = XFA_ELEMENT_Sharptext; - if (GetClassID() == XFA_ELEMENT_ExData) { - CFX_WideString wsContentType; - GetAttribute(XFA_ATTRIBUTE_ContentType, wsContentType, FALSE); - if (wsContentType.Equal(FX_WSTRC(L"text/html"))) { - element = XFA_ELEMENT_SharpxHTML; - } else if (wsContentType.Equal(FX_WSTRC(L"text/xml"))) { - element = XFA_ELEMENT_Sharpxml; - } - } - pContentRawDataNode = CreateSamePacketNode(element); - InsertChild(pContentRawDataNode); - } - return pContentRawDataNode->TryContent(wsContent, bScriptModify, bProto); - } - case XFA_OBJECTTYPE_NodeC: - case XFA_OBJECTTYPE_NodeV: - case XFA_OBJECTTYPE_TextNode: - pNode = this; - default: - if (GetClassID() == XFA_ELEMENT_DataValue) { - pNode = this; - } - break; - } - if (pNode) { - if (bScriptModify) { - IXFA_ScriptContext* pScriptContext = m_pDocument->GetScriptContext(); - if (pScriptContext) { - m_pDocument->GetScriptContext()->AddNodesOfRunScript(this); - } - } - return TryCData(XFA_ATTRIBUTE_Value, wsContent, FALSE, bProto); - } - return FALSE; -} -CXFA_Node* CXFA_Node::GetModelNode() { - switch (GetPacketID()) { - case XFA_XDPPACKET_XDP: - return m_pDocument->GetRoot(); - case XFA_XDPPACKET_Config: - return ToNode(m_pDocument->GetXFAObject(XFA_HASHCODE_Config)); - case XFA_XDPPACKET_Template: - return ToNode(m_pDocument->GetXFAObject(XFA_HASHCODE_Template)); - case XFA_XDPPACKET_Form: - return ToNode(m_pDocument->GetXFAObject(XFA_HASHCODE_Form)); - case XFA_XDPPACKET_Datasets: - return ToNode(m_pDocument->GetXFAObject(XFA_HASHCODE_Datasets)); - case XFA_XDPPACKET_LocaleSet: - return ToNode(m_pDocument->GetXFAObject(XFA_HASHCODE_LocaleSet)); - case XFA_XDPPACKET_ConnectionSet: - return ToNode(m_pDocument->GetXFAObject(XFA_HASHCODE_ConnectionSet)); - case XFA_XDPPACKET_SourceSet: - return ToNode(m_pDocument->GetXFAObject(XFA_HASHCODE_SourceSet)); - case XFA_XDPPACKET_Xdc: - return ToNode(m_pDocument->GetXFAObject(XFA_HASHCODE_Xdc)); - default: - return this; - } -} -FX_BOOL CXFA_Node::TryNamespace(CFX_WideString& wsNamespace) { - wsNamespace.Empty(); - if (GetObjectType() == XFA_OBJECTTYPE_ModelNode || - GetClassID() == XFA_ELEMENT_Packet) { - IFDE_XMLNode* pXMLNode = GetXMLMappingNode(); - if (!pXMLNode || pXMLNode->GetType() != FDE_XMLNODE_Element) { - return FALSE; - } - ((IFDE_XMLElement*)pXMLNode)->GetNamespaceURI(wsNamespace); - return TRUE; - } else if (GetPacketID() == XFA_XDPPACKET_Datasets) { - IFDE_XMLNode* pXMLNode = GetXMLMappingNode(); - if (!pXMLNode) { - return FALSE; - } - if (pXMLNode->GetType() != FDE_XMLNODE_Element) { - return TRUE; - } - if (GetClassID() == XFA_ELEMENT_DataValue && - GetEnum(XFA_ATTRIBUTE_Contains) == XFA_ATTRIBUTEENUM_MetaData) { - return XFA_FDEExtension_ResolveNamespaceQualifier( - (IFDE_XMLElement*)pXMLNode, GetCData(XFA_ATTRIBUTE_QualifiedName), - wsNamespace); - } - ((IFDE_XMLElement*)pXMLNode)->GetNamespaceURI(wsNamespace); - return TRUE; - } else { - CXFA_Node* pModelNode = GetModelNode(); - return pModelNode->TryNamespace(wsNamespace); - } -} -CXFA_Node* CXFA_Node::GetProperty(int32_t index, - XFA_ELEMENT eProperty, - FX_BOOL bCreateProperty) { - XFA_ELEMENT eElement = GetClassID(); - FX_DWORD dwPacket = GetPacketID(); - const XFA_PROPERTY* pProperty = - XFA_GetPropertyOfElement(eElement, eProperty, dwPacket); - if (pProperty == NULL || index >= pProperty->uOccur) { - return NULL; - } - CXFA_Node* pNode = m_pChild; - int32_t iCount = 0; - for (; pNode; pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { - if (pNode->GetClassID() == eProperty) { - iCount++; - if (iCount > index) { - return pNode; - } - } - } - if (!bCreateProperty) { - return NULL; - } - if (pProperty->uFlags & XFA_PROPERTYFLAG_OneOf) { - pNode = m_pChild; - for (; pNode; pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { - const XFA_PROPERTY* pExistProperty = - XFA_GetPropertyOfElement(eElement, pNode->GetClassID(), dwPacket); - if (pExistProperty && (pExistProperty->uFlags & XFA_PROPERTYFLAG_OneOf)) { - return NULL; - } - } - } - IXFA_ObjFactory* pFactory = m_pDocument->GetParser()->GetFactory(); - const XFA_PACKETINFO* pPacket = XFA_GetPacketByID(dwPacket); - CXFA_Node* pNewNode; - for (; iCount <= index; iCount++) { - pNewNode = pFactory->CreateNode(pPacket, eProperty); - if (!pNewNode) { - return NULL; - } - InsertChild(pNewNode, nullptr); - pNewNode->SetFlag(XFA_NODEFLAG_Initialized); - } - return pNewNode; -} -int32_t CXFA_Node::CountChildren(XFA_ELEMENT eElement, FX_BOOL bOnlyChild) { - CXFA_Node* pNode = m_pChild; - int32_t iCount = 0; - for (; pNode; pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { - if (pNode->GetClassID() == eElement || eElement == XFA_ELEMENT_UNKNOWN) { - if (bOnlyChild) { - const XFA_PROPERTY* pProperty = XFA_GetPropertyOfElement( - GetClassID(), pNode->GetClassID(), XFA_XDPPACKET_UNKNOWN); - if (pProperty) { - continue; - } - } - iCount++; - } - } - return iCount; -} -CXFA_Node* CXFA_Node::GetChild(int32_t index, - XFA_ELEMENT eElement, - FX_BOOL bOnlyChild) { - FXSYS_assert(index > -1); - CXFA_Node* pNode = m_pChild; - int32_t iCount = 0; - for (; pNode; pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { - if (pNode->GetClassID() == eElement || eElement == XFA_ELEMENT_UNKNOWN) { - if (bOnlyChild) { - const XFA_PROPERTY* pProperty = XFA_GetPropertyOfElement( - GetClassID(), pNode->GetClassID(), XFA_XDPPACKET_UNKNOWN); - if (pProperty) { - continue; - } - } - iCount++; - if (iCount > index) { - return pNode; - } - } - } - return NULL; -} -int32_t CXFA_Node::InsertChild(int32_t index, CXFA_Node* pNode) { - ASSERT(!pNode->m_pNext); - pNode->m_pParent = this; - FX_BOOL bWasPurgeNode = m_pDocument->RemovePurgeNode(pNode); - if (!bWasPurgeNode) - FXSYS_assert(false); - - if (m_pChild == NULL || index == 0) { - if (index > 0) { - return -1; - } - pNode->m_pNext = m_pChild; - m_pChild = pNode; - index = 0; - } else if (index < 0) { - m_pLastChild->m_pNext = pNode; - } else { - CXFA_Node* pPrev = m_pChild; - int32_t iCount = 0; - while (++iCount != index && pPrev->m_pNext) { - pPrev = pPrev->m_pNext; - } - if (index > 0 && index != iCount) { - return -1; - } - pNode->m_pNext = pPrev->m_pNext; - pPrev->m_pNext = pNode; - index = iCount; - } - if (pNode->m_pNext == NULL) { - m_pLastChild = pNode; - } - ASSERT(m_pLastChild); - ASSERT(m_pLastChild->m_pNext == NULL); - pNode->SetFlag(XFA_NODEFLAG_HasRemoved, FALSE); - IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); - if (pNotify) { - pNotify->OnNodeEvent(this, XFA_NODEEVENT_ChildAdded, pNode); - } - if (IsNeedSavingXMLNode() && pNode->m_pXMLNode) { - FXSYS_assert(pNode->m_pXMLNode->GetNodeItem(IFDE_XMLNode::Parent) == NULL); - m_pXMLNode->InsertChildNode(pNode->m_pXMLNode, index); - pNode->SetFlag(XFA_NODEFLAG_OwnXMLNode, FALSE, FALSE); - } - return index; -} -FX_BOOL CXFA_Node::InsertChild(CXFA_Node* pNode, CXFA_Node* pBeforeNode) { - if (!pNode || pNode->m_pParent || - (pBeforeNode && pBeforeNode->m_pParent != this)) { - FXSYS_assert(false); - return FALSE; - } - FX_BOOL bWasPurgeNode = m_pDocument->RemovePurgeNode(pNode); - if (!bWasPurgeNode) - FXSYS_assert(false); - - int32_t nIndex = -1; - pNode->m_pParent = this; - if (m_pChild == NULL || pBeforeNode == m_pChild) { - pNode->m_pNext = m_pChild; - m_pChild = pNode; - nIndex = 0; - } else if (!pBeforeNode) { - pNode->m_pNext = m_pLastChild->m_pNext; - m_pLastChild->m_pNext = pNode; - } else { - nIndex = 1; - CXFA_Node* pPrev = m_pChild; - while (pPrev->m_pNext != pBeforeNode) { - pPrev = pPrev->m_pNext; - nIndex++; - } - pNode->m_pNext = pPrev->m_pNext; - pPrev->m_pNext = pNode; - } - if (pNode->m_pNext == NULL) { - m_pLastChild = pNode; - } - ASSERT(m_pLastChild); - ASSERT(m_pLastChild->m_pNext == NULL); - pNode->SetFlag(XFA_NODEFLAG_HasRemoved, FALSE); - IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); - if (pNotify) { - pNotify->OnNodeEvent(this, XFA_NODEEVENT_ChildAdded, pNode); - } - if (IsNeedSavingXMLNode() && pNode->m_pXMLNode) { - FXSYS_assert(pNode->m_pXMLNode->GetNodeItem(IFDE_XMLNode::Parent) == NULL); - m_pXMLNode->InsertChildNode(pNode->m_pXMLNode, nIndex); - pNode->SetFlag(XFA_NODEFLAG_OwnXMLNode, FALSE, FALSE); - } - return TRUE; -} -CXFA_Node* CXFA_Node::Deprecated_GetPrevSibling() { - if (!m_pParent) { - return NULL; - } - for (CXFA_Node* pSibling = m_pParent->m_pChild; pSibling; - pSibling = pSibling->m_pNext) { - if (pSibling->m_pNext == this) { - return pSibling; - } - } - return NULL; -} -FX_BOOL CXFA_Node::RemoveChild(CXFA_Node* pNode, FX_BOOL bNotify) { - if (pNode == NULL || pNode->m_pParent != this) { - FXSYS_assert(FALSE); - return FALSE; - } - if (m_pChild == pNode) { - m_pChild = pNode->m_pNext; - if (m_pLastChild == pNode) { - m_pLastChild = pNode->m_pNext; - } - pNode->m_pNext = NULL; - pNode->m_pParent = NULL; - } else { - CXFA_Node* pPrev = pNode->Deprecated_GetPrevSibling(); - pPrev->m_pNext = pNode->m_pNext; - if (m_pLastChild == pNode) { - m_pLastChild = pNode->m_pNext ? pNode->m_pNext : pPrev; - } - pNode->m_pNext = NULL; - pNode->m_pParent = NULL; - } - ASSERT(m_pLastChild == NULL || m_pLastChild->m_pNext == NULL); - OnRemoved(this, pNode, bNotify); - pNode->SetFlag(XFA_NODEFLAG_HasRemoved); - m_pDocument->AddPurgeNode(pNode); - if (IsNeedSavingXMLNode() && pNode->m_pXMLNode) { - if (pNode->IsAttributeInXML()) { - FXSYS_assert(pNode->m_pXMLNode == m_pXMLNode && - m_pXMLNode->GetType() == FDE_XMLNODE_Element); - if (pNode->m_pXMLNode->GetType() == FDE_XMLNODE_Element) { - IFDE_XMLElement* pXMLElement = (IFDE_XMLElement*)(pNode->m_pXMLNode); - CFX_WideStringC wsAttributeName = - pNode->GetCData(XFA_ATTRIBUTE_QualifiedName); - pXMLElement->RemoveAttribute(wsAttributeName.GetPtr()); - } - CFX_WideString wsName; - pNode->GetAttribute(XFA_ATTRIBUTE_Name, wsName, FALSE); - IFDE_XMLElement* pNewXMLElement = IFDE_XMLElement::Create(wsName); - CFX_WideStringC wsValue = GetCData(XFA_ATTRIBUTE_Value); - if (!wsValue.IsEmpty()) { - pNewXMLElement->SetTextData(wsValue); - } - pNode->m_pXMLNode = pNewXMLElement; - pNode->SetEnum(XFA_ATTRIBUTE_Contains, XFA_ATTRIBUTEENUM_Unknown); - } else { - m_pXMLNode->RemoveChildNode(pNode->m_pXMLNode); - } - pNode->SetFlag(XFA_NODEFLAG_OwnXMLNode, TRUE, FALSE); - } - return TRUE; -} -CXFA_Node* CXFA_Node::GetFirstChildByName(const CFX_WideStringC& wsName) const { - return GetFirstChildByName( - wsName.IsEmpty() ? 0 : FX_HashCode_String_GetW(wsName.GetPtr(), - wsName.GetLength())); -} -CXFA_Node* CXFA_Node::GetFirstChildByName(FX_DWORD dwNameHash) const { - for (CXFA_Node* pNode = GetNodeItem(XFA_NODEITEM_FirstChild); pNode; - pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { - if (pNode->GetNameHash() == dwNameHash) { - return pNode; - } - } - return NULL; -} -CXFA_Node* CXFA_Node::GetFirstChildByClass(XFA_ELEMENT eElement) const { - for (CXFA_Node* pNode = GetNodeItem(XFA_NODEITEM_FirstChild); pNode; - pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { - if (pNode->GetClassID() == eElement) { - return pNode; - } - } - return NULL; -} -CXFA_Node* CXFA_Node::GetNextSameNameSibling(FX_DWORD dwNameHash) const { - for (CXFA_Node* pNode = GetNodeItem(XFA_NODEITEM_NextSibling); pNode; - pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { - if (pNode->GetNameHash() == dwNameHash) { - return pNode; - } - } - return NULL; -} -CXFA_Node* CXFA_Node::GetNextSameNameSibling( - const CFX_WideStringC& wsNodeName) const { - return GetNextSameNameSibling( - wsNodeName.IsEmpty() ? 0 - : FX_HashCode_String_GetW(wsNodeName.GetPtr(), - wsNodeName.GetLength())); -} -CXFA_Node* CXFA_Node::GetNextSameClassSibling(XFA_ELEMENT eElement) const { - for (CXFA_Node* pNode = GetNodeItem(XFA_NODEITEM_NextSibling); pNode; - pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { - if (pNode->GetClassID() == eElement) { - return pNode; - } - } - return NULL; -} -int32_t CXFA_Node::GetNodeSameNameIndex() const { - IXFA_ScriptContext* pScriptContext = m_pDocument->GetScriptContext(); - if (!pScriptContext) { - return -1; - } - return pScriptContext->GetIndexByName(const_cast(this)); -} -int32_t CXFA_Node::GetNodeSameClassIndex() const { - IXFA_ScriptContext* pScriptContext = m_pDocument->GetScriptContext(); - if (!pScriptContext) { - return -1; - } - return pScriptContext->GetIndexByClassName(const_cast(this)); -} -void CXFA_Node::GetSOMExpression(CFX_WideString& wsSOMExpression) { - IXFA_ScriptContext* pScriptContext = m_pDocument->GetScriptContext(); - if (!pScriptContext) { - return; - } - pScriptContext->GetSomExpression(this, wsSOMExpression); -} -CXFA_Node* CXFA_Node::GetInstanceMgrOfSubform() { - CXFA_Node* pInstanceMgr = NULL; - if (m_ePacket == XFA_XDPPACKET_Form) { - CXFA_Node* pParentNode = GetNodeItem(XFA_NODEITEM_Parent); - if (!pParentNode || pParentNode->GetClassID() == XFA_ELEMENT_Area) { - return pInstanceMgr; - } - for (CXFA_Node* pNode = GetNodeItem(XFA_NODEITEM_PrevSibling); pNode; - pNode = pNode->GetNodeItem(XFA_NODEITEM_PrevSibling)) { - XFA_ELEMENT eType = pNode->GetClassID(); - if ((eType == XFA_ELEMENT_Subform || eType == XFA_ELEMENT_SubformSet) && - pNode->m_dwNameHash != m_dwNameHash) { - break; - } - if (eType == XFA_ELEMENT_InstanceManager) { - CFX_WideStringC wsName = GetCData(XFA_ATTRIBUTE_Name); - CFX_WideStringC wsInstName = pNode->GetCData(XFA_ATTRIBUTE_Name); - if (wsInstName.GetLength() > 0 && wsInstName.GetAt(0) == '_' && - wsInstName.Mid(1) == wsName) { - pInstanceMgr = pNode; - } - break; - } - } - } - return pInstanceMgr; -} -CXFA_Node* CXFA_Node::GetOccurNode() { - return GetFirstChildByClass(XFA_ELEMENT_Occur); -} -FX_BOOL CXFA_Node::HasFlag(FX_DWORD dwFlag) const { - if (m_uFlags & dwFlag) { - return TRUE; - } - switch (dwFlag) { - case XFA_NODEFLAG_HasRemoved: - return m_pParent && m_pParent->HasFlag(dwFlag); - default: - break; - } - return FALSE; -} -void CXFA_Node::SetFlag(FX_DWORD dwFlag, FX_BOOL bOn, FX_BOOL bNotify) { - if (bOn) { - switch (dwFlag) { - case XFA_NODEFLAG_Initialized: - if (bNotify && !HasFlag(XFA_NODEFLAG_Initialized)) { - IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); - if (pNotify) { - pNotify->OnNodeEvent(this, XFA_NODEEVENT_Ready); - } - } - break; - default: - break; - } - m_uFlags |= dwFlag; - } else { - m_uFlags &= ~dwFlag; - } -} -FX_BOOL CXFA_Node::IsAttributeInXML() { - return GetEnum(XFA_ATTRIBUTE_Contains) == XFA_ATTRIBUTEENUM_MetaData; -} -void CXFA_Node::OnRemoved(CXFA_Node* pParent, - CXFA_Node* pRemoved, - FX_BOOL bNotify) { - if (bNotify && pParent) { - IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); - if (pNotify) { - pNotify->OnNodeEvent(pParent, XFA_NODEEVENT_ChildRemoved, pRemoved); - } - } -} -void CXFA_Node::OnChanging(XFA_ATTRIBUTE eAttr, - void* pNewValue, - FX_BOOL bNotify) { - if (bNotify && HasFlag(XFA_NODEFLAG_Initialized)) { - IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); - if (pNotify) { - pNotify->OnNodeEvent(this, XFA_NODEEVENT_ValueChanging, - (void*)(uintptr_t)eAttr, pNewValue); - } - } -} -void CXFA_Node::OnChanged(XFA_ATTRIBUTE eAttr, - void* pNewValue, - FX_BOOL bNotify, - FX_BOOL bScriptModify) { - if (bNotify && HasFlag(XFA_NODEFLAG_Initialized)) { - Script_Attribute_SendAttributeChangeMessage((void*)(uintptr_t)eAttr, - pNewValue, bScriptModify); - } -} -int32_t CXFA_Node::execSingleEventByName(const CFX_WideStringC& wsEventName, - XFA_ELEMENT eElementType) { - int32_t iRet = XFA_EVENTERROR_NotExist; - const XFA_ExecEventParaInfo* eventParaInfo = - GetEventParaInfoByName(wsEventName); - if (eventParaInfo) { - uint32_t validFlags = eventParaInfo->m_validFlags; - IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); - if (!pNotify) { - return iRet; - } - if (validFlags == 1) { - iRet = pNotify->ExecEventByDeepFirst(this, eventParaInfo->m_eventType); - } else if (validFlags == 2) { - iRet = pNotify->ExecEventByDeepFirst(this, eventParaInfo->m_eventType, - FALSE, FALSE); - } else if (validFlags == 3) { - if (eElementType == XFA_ELEMENT_Subform) { - iRet = pNotify->ExecEventByDeepFirst(this, eventParaInfo->m_eventType, - FALSE, FALSE); - } - } else if (validFlags == 4) { - if (eElementType == XFA_ELEMENT_ExclGroup || - eElementType == XFA_ELEMENT_Field) { - CXFA_Node* pParentNode = GetNodeItem(XFA_NODEITEM_Parent); - if (pParentNode && pParentNode->GetClassID() == XFA_ELEMENT_ExclGroup) { - iRet = pNotify->ExecEventByDeepFirst(this, eventParaInfo->m_eventType, - FALSE, FALSE); - } - iRet = pNotify->ExecEventByDeepFirst(this, eventParaInfo->m_eventType, - FALSE, FALSE); - } - } else if (validFlags == 5) { - if (eElementType == XFA_ELEMENT_Field) { - iRet = pNotify->ExecEventByDeepFirst(this, eventParaInfo->m_eventType, - FALSE, FALSE); - } - } else if (validFlags == 6) { - CXFA_WidgetData* pWidgetData = GetWidgetData(); - if (pWidgetData) { - CXFA_Node* pUINode = pWidgetData->GetUIChild(); - if (pUINode->m_eNodeClass == XFA_ELEMENT_Signature) { - iRet = pNotify->ExecEventByDeepFirst(this, eventParaInfo->m_eventType, - FALSE, FALSE); - } - } - } else if (validFlags == 7) { - CXFA_WidgetData* pWidgetData = GetWidgetData(); - if (pWidgetData) { - CXFA_Node* pUINode = pWidgetData->GetUIChild(); - if ((pUINode->m_eNodeClass == XFA_ELEMENT_ChoiceList) && - (!pWidgetData->IsListBox())) { - iRet = pNotify->ExecEventByDeepFirst(this, eventParaInfo->m_eventType, - FALSE, FALSE); - } - } - } - } - return iRet; -} -void CXFA_Node::UpdateNameHash() { - const XFA_NOTSUREATTRIBUTE* pNotsure = - XFA_GetNotsureAttribute(GetClassID(), XFA_ATTRIBUTE_Name); - if (!pNotsure || pNotsure->eType == XFA_ATTRIBUTETYPE_Cdata) { - CFX_WideStringC wsName = GetCData(XFA_ATTRIBUTE_Name); - m_dwNameHash = - wsName.IsEmpty() ? 0 : FX_HashCode_String_GetW(wsName.GetPtr(), - wsName.GetLength()); - } else if (pNotsure->eType == XFA_ATTRIBUTETYPE_Enum) { - CFX_WideStringC wsName = - XFA_GetAttributeEnumByID(GetEnum(XFA_ATTRIBUTE_Name))->pName; - m_dwNameHash = - wsName.IsEmpty() ? 0 : FX_HashCode_String_GetW(wsName.GetPtr(), - wsName.GetLength()); - } -} -IFDE_XMLNode* CXFA_Node::CreateXMLMappingNode() { - if (!m_pXMLNode) { - CFX_WideStringC wsTag = GetCData(XFA_ATTRIBUTE_Name); - m_pXMLNode = IFDE_XMLElement::Create(wsTag); - SetFlag(XFA_NODEFLAG_OwnXMLNode, TRUE, FALSE); - } - return m_pXMLNode; -} -FX_BOOL CXFA_Node::IsNeedSavingXMLNode() { - return m_pXMLNode && (GetPacketID() == XFA_XDPPACKET_Datasets || - GetClassID() == XFA_ELEMENT_Xfa); -} - -XFA_MAPMODULEDATA* CXFA_Node::CreateMapModuleData() { - if (!m_pMapModuleData) - m_pMapModuleData = new XFA_MAPMODULEDATA; - return m_pMapModuleData; -} - -XFA_MAPMODULEDATA* CXFA_Node::GetMapModuleData() const { - return m_pMapModuleData; -} - -void CXFA_Node::SetMapModuleValue(void* pKey, void* pValue) { - XFA_MAPMODULEDATA* pModule = CreateMapModuleData(); - pModule->m_ValueMap.SetAt(pKey, pValue); -} - -FX_BOOL CXFA_Node::GetMapModuleValue(void* pKey, void*& pValue) { - CXFA_Node* pNode = this; - while (pNode) { - XFA_MAPMODULEDATA* pModule = pNode->GetMapModuleData(); - if (pModule && pModule->m_ValueMap.Lookup(pKey, pValue)) { - return TRUE; - } - pNode = pNode->GetPacketID() != XFA_XDPPACKET_Datasets - ? pNode->GetTemplateNode() - : NULL; - } - return FALSE; -} -void CXFA_Node::SetMapModuleString(void* pKey, const CFX_WideStringC& wsValue) { - SetMapModuleBuffer(pKey, (void*)wsValue.GetPtr(), - wsValue.GetLength() * sizeof(FX_WCHAR)); -} -FX_BOOL CXFA_Node::GetMapModuleString(void* pKey, CFX_WideStringC& wsValue) { - void* pValue; - int32_t iBytes; - if (!GetMapModuleBuffer(pKey, pValue, iBytes)) { - return FALSE; - } - wsValue = CFX_WideStringC((const FX_WCHAR*)pValue, iBytes / sizeof(FX_WCHAR)); - return TRUE; -} -void CXFA_Node::SetMapModuleBuffer( - void* pKey, - void* pValue, - int32_t iBytes, - XFA_MAPDATABLOCKCALLBACKINFO* pCallbackInfo) { - XFA_MAPMODULEDATA* pModule = CreateMapModuleData(); - XFA_MAPDATABLOCK*& pBuffer = pModule->m_BufferMap[pKey]; - if (pBuffer == NULL) { - pBuffer = - (XFA_MAPDATABLOCK*)FX_Alloc(uint8_t, sizeof(XFA_MAPDATABLOCK) + iBytes); - } else if (pBuffer->iBytes != iBytes) { - if (pBuffer->pCallbackInfo && pBuffer->pCallbackInfo->pFree) { - pBuffer->pCallbackInfo->pFree(*(void**)pBuffer->GetData()); - } - pBuffer = (XFA_MAPDATABLOCK*)FX_Realloc(uint8_t, pBuffer, - sizeof(XFA_MAPDATABLOCK) + iBytes); - } else if (pBuffer->pCallbackInfo && pBuffer->pCallbackInfo->pFree) { - pBuffer->pCallbackInfo->pFree(*(void**)pBuffer->GetData()); - } - if (pBuffer == NULL) { - return; - } - pBuffer->pCallbackInfo = pCallbackInfo; - pBuffer->iBytes = iBytes; - FXSYS_memcpy(pBuffer->GetData(), pValue, iBytes); -} -FX_BOOL CXFA_Node::GetMapModuleBuffer(void* pKey, - void*& pValue, - int32_t& iBytes, - FX_BOOL bProtoAlso) const { - XFA_MAPDATABLOCK* pBuffer = NULL; - const CXFA_Node* pNode = this; - while (pNode) { - XFA_MAPMODULEDATA* pModule = pNode->GetMapModuleData(); - if (pModule && pModule->m_BufferMap.Lookup(pKey, pBuffer)) { - break; - } - pNode = (bProtoAlso && pNode->GetPacketID() != XFA_XDPPACKET_Datasets) - ? pNode->GetTemplateNode() - : NULL; - } - if (pBuffer == NULL) { - return FALSE; - } - pValue = pBuffer->GetData(); - iBytes = pBuffer->iBytes; - return TRUE; -} -FX_BOOL CXFA_Node::HasMapModuleKey(void* pKey, FX_BOOL bProtoAlso) { - CXFA_Node* pNode = this; - while (pNode) { - void* pVal; - XFA_MAPMODULEDATA* pModule = pNode->GetMapModuleData(); - if (pModule && - (pModule->m_ValueMap.Lookup(pKey, pVal) || - pModule->m_BufferMap.Lookup(pKey, (XFA_MAPDATABLOCK*&)pVal))) { - return TRUE; - } - pNode = (bProtoAlso && pNode->GetPacketID() != XFA_XDPPACKET_Datasets) - ? pNode->GetTemplateNode() - : NULL; - } - return FALSE; -} -void CXFA_Node::RemoveMapModuleKey(void* pKey) { - XFA_MAPMODULEDATA* pModule = GetMapModuleData(); - if (!pModule) - return; - - if (pKey) { - XFA_MAPDATABLOCK* pBuffer = NULL; - pModule->m_BufferMap.Lookup(pKey, pBuffer); - if (pBuffer) { - if (pBuffer->pCallbackInfo && pBuffer->pCallbackInfo->pFree) { - pBuffer->pCallbackInfo->pFree(*(void**)pBuffer->GetData()); - } - FX_Free(pBuffer); - } - pModule->m_BufferMap.RemoveKey(pKey); - pModule->m_ValueMap.RemoveKey(pKey); - } else { - XFA_MAPDATABLOCK* pBuffer; - FX_POSITION posBuffer = pModule->m_BufferMap.GetStartPosition(); - while (posBuffer) { - pModule->m_BufferMap.GetNextAssoc(posBuffer, pKey, pBuffer); - if (pBuffer) { - if (pBuffer->pCallbackInfo && pBuffer->pCallbackInfo->pFree) { - pBuffer->pCallbackInfo->pFree(*(void**)pBuffer->GetData()); - } - FX_Free(pBuffer); - } - } - pModule->m_BufferMap.RemoveAll(); - pModule->m_ValueMap.RemoveAll(); - delete pModule; - } -} -void CXFA_Node::MergeAllData(void* pDstModule, FX_BOOL bUseSrcAttr) { - XFA_MAPMODULEDATA* pDstModuleData = - static_cast(pDstModule)->CreateMapModuleData(); - XFA_MAPMODULEDATA* pSrcModuleData = GetMapModuleData(); - if (!pSrcModuleData) { - return; - } - FX_POSITION psValue = pSrcModuleData->m_ValueMap.GetStartPosition(); - while (psValue) { - void* pKey; - void* pValue; - pSrcModuleData->m_ValueMap.GetNextAssoc(psValue, pKey, pValue); - if (bUseSrcAttr || !pDstModuleData->m_ValueMap.GetValueAt(pKey)) { - pDstModuleData->m_ValueMap.SetAt(pKey, pValue); - } - } - FX_POSITION psBuffer = pSrcModuleData->m_BufferMap.GetStartPosition(); - while (psBuffer) { - void* pKey; - XFA_MAPDATABLOCK* pSrcBuffer; - pSrcModuleData->m_BufferMap.GetNextAssoc(psBuffer, pKey, pSrcBuffer); - XFA_MAPDATABLOCK*& pBuffer = pDstModuleData->m_BufferMap[pKey]; - if (pBuffer && !bUseSrcAttr) { - continue; - } - if (pSrcBuffer->pCallbackInfo && pSrcBuffer->pCallbackInfo->pFree && - !pSrcBuffer->pCallbackInfo->pCopy) { - if (pBuffer) { - pBuffer->pCallbackInfo->pFree(*(void**)pBuffer->GetData()); - pDstModuleData->m_BufferMap.RemoveKey(pKey); - } - continue; - } - if (pBuffer == NULL) { - pBuffer = (XFA_MAPDATABLOCK*)FX_Alloc( - uint8_t, sizeof(XFA_MAPDATABLOCK) + pSrcBuffer->iBytes); - } else if (pBuffer->iBytes != pSrcBuffer->iBytes) { - if (pBuffer->pCallbackInfo && pBuffer->pCallbackInfo->pFree) { - pBuffer->pCallbackInfo->pFree(*(void**)pBuffer->GetData()); - } - pBuffer = (XFA_MAPDATABLOCK*)FX_Realloc( - uint8_t, pBuffer, sizeof(XFA_MAPDATABLOCK) + pSrcBuffer->iBytes); - } else if (pBuffer->pCallbackInfo && pBuffer->pCallbackInfo->pFree) { - pBuffer->pCallbackInfo->pFree(*(void**)pBuffer->GetData()); - } - if (pBuffer == NULL) { - continue; - } - pBuffer->pCallbackInfo = pSrcBuffer->pCallbackInfo; - pBuffer->iBytes = pSrcBuffer->iBytes; - FXSYS_memcpy(pBuffer->GetData(), pSrcBuffer->GetData(), pSrcBuffer->iBytes); - if (pBuffer->pCallbackInfo && pBuffer->pCallbackInfo->pCopy) { - pBuffer->pCallbackInfo->pCopy(*(void**)pBuffer->GetData()); - } - } -} -void CXFA_Node::MoveBufferMapData(CXFA_Node* pDstModule, void* pKey) { - if (!pDstModule) { - return; - } - FX_BOOL bNeedMove = TRUE; - if (!pKey) { - bNeedMove = FALSE; - } - if (pDstModule->GetClassID() != GetClassID()) { - bNeedMove = FALSE; - } - XFA_MAPMODULEDATA* pSrcModuleData = NULL; - XFA_MAPMODULEDATA* pDstModuleData = NULL; - if (bNeedMove) { - pSrcModuleData = GetMapModuleData(); - if (!pSrcModuleData) { - bNeedMove = FALSE; - } - pDstModuleData = pDstModule->CreateMapModuleData(); - } - if (bNeedMove) { - void* pBufferBlockData = pSrcModuleData->m_BufferMap.GetValueAt(pKey); - if (pBufferBlockData) { - pSrcModuleData->m_BufferMap.RemoveKey(pKey); - pDstModuleData->m_BufferMap.RemoveKey(pKey); - pDstModuleData->m_BufferMap.SetAt(pKey, - (XFA_MAPDATABLOCK*)pBufferBlockData); - } - } - if (pDstModule->GetObjectType() == XFA_OBJECTTYPE_NodeV) { - CFX_WideString wsValue = pDstModule->GetScriptContent(FALSE); - CFX_WideString wsFormatValue(wsValue); - CXFA_WidgetData* pWidgetData = pDstModule->GetContainerWidgetData(); - if (pWidgetData) { - pWidgetData->GetFormatDataValue(wsValue, wsFormatValue); - } - pDstModule->SetScriptContent(wsValue, wsFormatValue, TRUE, TRUE); - } -} -void CXFA_Node::MoveBufferMapData(CXFA_Node* pSrcModule, - CXFA_Node* pDstModule, - void* pKey, - FX_BOOL bRecursive) { - if (!pSrcModule || !pDstModule || !pKey) { - return; - } - if (bRecursive) { - CXFA_Node* pSrcChild = pSrcModule->GetNodeItem(XFA_NODEITEM_FirstChild); - CXFA_Node* pDstChild = pDstModule->GetNodeItem(XFA_NODEITEM_FirstChild); - for (; pSrcChild && pDstChild; - pSrcChild = pSrcChild->GetNodeItem(XFA_NODEITEM_NextSibling), - pDstChild = pDstChild->GetNodeItem(XFA_NODEITEM_NextSibling)) { - MoveBufferMapData(pSrcChild, pDstChild, pKey, TRUE); - } - } - pSrcModule->MoveBufferMapData(pDstModule, pKey); -} -CXFA_NodeList::CXFA_NodeList(CXFA_Document* pDocument) - : CXFA_Object(pDocument, XFA_OBJECTTYPE_NodeList) { - m_pDocument->GetScriptContext()->CacheList(this); -} -CXFA_Node* CXFA_NodeList::NamedItem(const CFX_WideStringC& wsName) { - int32_t iCount = GetLength(); - FX_DWORD dwHashCode = - FX_HashCode_String_GetW(wsName.GetPtr(), wsName.GetLength()); - for (int32_t i = 0; i < iCount; i++) { - CXFA_Node* ret = Item(i); - if (dwHashCode == ret->GetNameHash()) { - return ret; - } - } - return NULL; -} -void CXFA_NodeList::Script_ListClass_Append(CFXJSE_Arguments* pArguments) { - int32_t argc = pArguments->GetLength(); - if (argc == 1) { - CXFA_Node* pNode = static_cast(pArguments->GetObject(0)); - if (pNode) { - Append(pNode); - } else { - ThrowScriptErrorMessage(XFA_IDS_ARGUMENT_MISMATCH); - } - } else { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"append"); - } -} -void CXFA_NodeList::Script_ListClass_Insert(CFXJSE_Arguments* pArguments) { - int32_t argc = pArguments->GetLength(); - if (argc == 2) { - CXFA_Node* pNewNode = static_cast(pArguments->GetObject(0)); - CXFA_Node* pBeforeNode = static_cast(pArguments->GetObject(1)); - if (pNewNode) { - Insert(pNewNode, pBeforeNode); - } else { - ThrowScriptErrorMessage(XFA_IDS_ARGUMENT_MISMATCH); - } - } else { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"insert"); - } -} -void CXFA_NodeList::Script_ListClass_Remove(CFXJSE_Arguments* pArguments) { - int32_t argc = pArguments->GetLength(); - if (argc == 1) { - CXFA_Node* pNode = static_cast(pArguments->GetObject(0)); - if (pNode) { - Remove(pNode); - } else { - ThrowScriptErrorMessage(XFA_IDS_ARGUMENT_MISMATCH); - } - } else { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"remove"); - } -} -void CXFA_NodeList::Script_ListClass_Item(CFXJSE_Arguments* pArguments) { - int32_t argc = pArguments->GetLength(); - if (argc == 1) { - int32_t iIndex = pArguments->GetInt32(0); - if ((iIndex >= 0) && (iIndex + 1 <= GetLength())) { - FXJSE_Value_Set( - pArguments->GetReturnValue(), - m_pDocument->GetScriptContext()->GetJSValueFromMap(Item(iIndex))); - } else { - ThrowScriptErrorMessage(XFA_IDS_INDEX_OUT_OF_BOUNDS); - } - } else { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"item"); - } -} -void CXFA_NodeList::Script_TreelistClass_NamedItem( - CFXJSE_Arguments* pArguments) { - int32_t argc = pArguments->GetLength(); - if (argc == 1) { - CFX_ByteString szName = pArguments->GetUTF8String(0); - CXFA_Node* pNode = - NamedItem(CFX_WideString::FromUTF8(szName, szName.GetLength())); - if (!pNode) { - return; - } - FXJSE_Value_Set(pArguments->GetReturnValue(), - m_pDocument->GetScriptContext()->GetJSValueFromMap(pNode)); - } else { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"namedItem"); - } -} -void CXFA_NodeList::Script_ListClass_Length(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - if (!bSetting) { - FXJSE_Value_SetInteger(hValue, GetLength()); - } else { - ThrowScriptErrorMessage(XFA_IDS_INVAlID_PROP_SET); - } -} -CXFA_ArrayNodeList::CXFA_ArrayNodeList(CXFA_Document* pDocument) - : CXFA_NodeList(pDocument) {} -void CXFA_ArrayNodeList::SetArrayNodeList(const CXFA_NodeArray& srcArray) { - if (srcArray.GetSize() > 0) { - m_array.Copy(srcArray); - } -} -int32_t CXFA_ArrayNodeList::GetLength() { - return m_array.GetSize(); -} -FX_BOOL CXFA_ArrayNodeList::Append(CXFA_Node* pNode) { - m_array.Add(pNode); - return TRUE; -} -FX_BOOL CXFA_ArrayNodeList::Insert(CXFA_Node* pNewNode, - CXFA_Node* pBeforeNode) { - if (pBeforeNode == NULL) { - m_array.Add(pNewNode); - } else { - int32_t iSize = m_array.GetSize(); - for (int32_t i = 0; i < iSize; ++i) { - if (m_array[i] == pBeforeNode) { - m_array.InsertAt(i, pNewNode); - break; - } - } - } - return TRUE; -} -FX_BOOL CXFA_ArrayNodeList::Remove(CXFA_Node* pNode) { - int32_t iSize = m_array.GetSize(); - for (int32_t i = 0; i < iSize; ++i) { - if (m_array[i] == pNode) { - m_array.RemoveAt(i); - break; - } - } - return TRUE; -} -CXFA_Node* CXFA_ArrayNodeList::Item(int32_t iIndex) { - int32_t iSize = m_array.GetSize(); - if (iIndex >= 0 && iIndex < iSize) { - return m_array[iIndex]; - } - return NULL; -} -CXFA_AttachNodeList::CXFA_AttachNodeList(CXFA_Document* pDocument, - CXFA_Node* pAttachNode) - : CXFA_NodeList(pDocument) { - m_pAttachNode = pAttachNode; -} -int32_t CXFA_AttachNodeList::GetLength() { - return m_pAttachNode->CountChildren( - XFA_ELEMENT_UNKNOWN, m_pAttachNode->GetClassID() == XFA_ELEMENT_Subform); -} -FX_BOOL CXFA_AttachNodeList::Append(CXFA_Node* pNode) { - CXFA_Node* pParent = pNode->GetNodeItem(XFA_NODEITEM_Parent); - if (pParent) { - pParent->RemoveChild(pNode); - } - return m_pAttachNode->InsertChild(pNode); -} -FX_BOOL CXFA_AttachNodeList::Insert(CXFA_Node* pNewNode, - CXFA_Node* pBeforeNode) { - CXFA_Node* pParent = pNewNode->GetNodeItem(XFA_NODEITEM_Parent); - if (pParent) { - pParent->RemoveChild(pNewNode); - } - return m_pAttachNode->InsertChild(pNewNode, pBeforeNode); -} -FX_BOOL CXFA_AttachNodeList::Remove(CXFA_Node* pNode) { - return m_pAttachNode->RemoveChild(pNode); -} -CXFA_Node* CXFA_AttachNodeList::Item(int32_t iIndex) { - return m_pAttachNode->GetChild( - iIndex, XFA_ELEMENT_UNKNOWN, - m_pAttachNode->GetClassID() == XFA_ELEMENT_Subform); -} diff --git a/xfa/src/fxfa/parser/xfa_objectacc_imp.cpp b/xfa/src/fxfa/parser/xfa_objectacc_imp.cpp deleted file mode 100644 index 9515237683..0000000000 --- a/xfa/src/fxfa/parser/xfa_objectacc_imp.cpp +++ /dev/null @@ -1,3760 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "core/include/fxcrt/fx_ext.h" -#include "xfa/include/fxbarcode/BC_BarCode.h" -#include "xfa/src/fxfa/fm2js/xfa_fm2jsapi.h" -#include "xfa/src/fxfa/parser/xfa_docdata.h" -#include "xfa/src/fxfa/parser/xfa_doclayout.h" -#include "xfa/src/fxfa/parser/xfa_document.h" -#include "xfa/src/fxfa/parser/xfa_localemgr.h" -#include "xfa/src/fxfa/parser/xfa_localevalue.h" -#include "xfa/src/fxfa/parser/xfa_object.h" -#include "xfa/src/fxfa/parser/xfa_parser.h" -#include "xfa/src/fxfa/parser/xfa_script.h" -#include "xfa/src/fxfa/parser/xfa_utils.h" - -static FX_ARGB XFA_WStringToColor(const CFX_WideStringC& wsValue) { - uint8_t r = 0, g = 0, b = 0; - if (wsValue.GetLength() == 0) { - return 0xff000000; - } - int cc = 0; - const FX_WCHAR* str = wsValue.GetPtr(); - int len = wsValue.GetLength(); - while (XFA_IsSpace(str[cc]) && cc < len) { - cc++; - } - if (cc >= len) { - return 0xff000000; - } - while (cc < len) { - if (str[cc] == ',' || !XFA_IsDigit(str[cc])) { - break; - } - r = r * 10 + str[cc] - '0'; - cc++; - } - if (cc < len && str[cc] == ',') { - cc++; - while (XFA_IsSpace(str[cc]) && cc < len) { - cc++; - } - while (cc < len) { - if (str[cc] == ',' || !XFA_IsDigit(str[cc])) { - break; - } - g = g * 10 + str[cc] - '0'; - cc++; - } - if (cc < len && str[cc] == ',') { - cc++; - while (XFA_IsSpace(str[cc]) && cc < len) { - cc++; - } - while (cc < len) { - if (str[cc] == ',' || !XFA_IsDigit(str[cc])) { - break; - } - b = b * 10 + str[cc] - '0'; - cc++; - } - } - } - return (0xff << 24) | (r << 16) | (g << 8) | b; -} -XFA_ELEMENT CXFA_Data::GetClassID() const { - return m_pNode ? m_pNode->GetClassID() : XFA_ELEMENT_UNKNOWN; -} -FX_BOOL CXFA_Data::TryMeasure(XFA_ATTRIBUTE eAttr, - FX_FLOAT& fValue, - FX_BOOL bUseDefault) const { - CXFA_Measurement ms; - if (m_pNode->TryMeasure(eAttr, ms, bUseDefault)) { - fValue = ms.ToUnit(XFA_UNIT_Pt); - return TRUE; - } - return FALSE; -} -FX_BOOL CXFA_Data::SetMeasure(XFA_ATTRIBUTE eAttr, FX_FLOAT fValue) { - CXFA_Measurement ms(fValue, XFA_UNIT_Pt); - return m_pNode->SetMeasure(eAttr, ms); -} -CXFA_Fill::CXFA_Fill(CXFA_Node* pNode) : CXFA_Data(pNode) {} -CXFA_Fill::~CXFA_Fill() {} -int32_t CXFA_Fill::GetPresence() { - return m_pNode->GetEnum(XFA_ATTRIBUTE_Presence); -} -void CXFA_Fill::SetColor(FX_ARGB color) { - CXFA_Node* pNode = m_pNode->GetProperty(0, XFA_ELEMENT_Color); - CFX_WideString wsColor; - int a, r, g, b; - ArgbDecode(color, a, r, g, b); - wsColor.Format(L"%d,%d,%d", r, g, b); - pNode->SetCData(XFA_ATTRIBUTE_Value, wsColor); -} -FX_ARGB CXFA_Fill::GetColor(FX_BOOL bText) { - if (CXFA_Node* pNode = m_pNode->GetChild(0, XFA_ELEMENT_Color)) { - CFX_WideStringC wsColor; - if (pNode->TryCData(XFA_ATTRIBUTE_Value, wsColor, FALSE)) { - return XFA_WStringToColor(wsColor); - } - } - if (bText) { - return 0xFF000000; - } - return 0xFFFFFFFF; -} -int32_t CXFA_Fill::GetFillType() { - CXFA_Node* pChild = m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild); - while (pChild) { - int32_t eType = pChild->GetClassID(); - if (eType != XFA_ELEMENT_Color && eType != XFA_ELEMENT_Extras) { - return eType; - } - pChild = pChild->GetNodeItem(XFA_NODEITEM_NextSibling); - } - return XFA_ELEMENT_Solid; -} -int32_t CXFA_Fill::GetPattern(FX_ARGB& foreColor) { - CXFA_Node* pNode = m_pNode->GetProperty(0, XFA_ELEMENT_Pattern); - if (CXFA_Node* pColor = pNode->GetChild(0, XFA_ELEMENT_Color)) { - CFX_WideStringC wsColor; - pColor->TryCData(XFA_ATTRIBUTE_Value, wsColor, FALSE); - foreColor = XFA_WStringToColor(wsColor); - } else { - foreColor = 0xFF000000; - } - return pNode->GetEnum(XFA_ATTRIBUTE_Type); -} -int32_t CXFA_Fill::GetStipple(FX_ARGB& stippleColor) { - CXFA_Node* pNode = m_pNode->GetProperty(0, XFA_ELEMENT_Stipple); - int32_t eAttr = 50; - pNode->TryInteger(XFA_ATTRIBUTE_Rate, eAttr); - if (CXFA_Node* pColor = pNode->GetChild(0, XFA_ELEMENT_Color)) { - CFX_WideStringC wsColor; - pColor->TryCData(XFA_ATTRIBUTE_Value, wsColor, FALSE); - stippleColor = XFA_WStringToColor(wsColor); - } else { - stippleColor = 0xFF000000; - } - return eAttr; -} -int32_t CXFA_Fill::GetLinear(FX_ARGB& endColor) { - CXFA_Node* pNode = m_pNode->GetProperty(0, XFA_ELEMENT_Linear); - XFA_ATTRIBUTEENUM eAttr = XFA_ATTRIBUTEENUM_ToRight; - pNode->TryEnum(XFA_ATTRIBUTE_Type, eAttr); - if (CXFA_Node* pColor = pNode->GetChild(0, XFA_ELEMENT_Color)) { - CFX_WideStringC wsColor; - pColor->TryCData(XFA_ATTRIBUTE_Value, wsColor, FALSE); - endColor = XFA_WStringToColor(wsColor); - } else { - endColor = 0xFF000000; - } - return eAttr; -} -int32_t CXFA_Fill::GetRadial(FX_ARGB& endColor) { - CXFA_Node* pNode = m_pNode->GetProperty(0, XFA_ELEMENT_Radial); - XFA_ATTRIBUTEENUM eAttr = XFA_ATTRIBUTEENUM_ToEdge; - pNode->TryEnum(XFA_ATTRIBUTE_Type, eAttr); - if (CXFA_Node* pColor = pNode->GetChild(0, XFA_ELEMENT_Color)) { - CFX_WideStringC wsColor; - pColor->TryCData(XFA_ATTRIBUTE_Value, wsColor, FALSE); - endColor = XFA_WStringToColor(wsColor); - } else { - endColor = 0xFF000000; - } - return eAttr; -} -FX_BOOL CXFA_Fill::SetPresence(int32_t iPresence) { - return m_pNode->SetEnum(XFA_ATTRIBUTE_Presence, (XFA_ATTRIBUTEENUM)iPresence); -} -FX_BOOL CXFA_Fill::SetFillType(int32_t iType) { - return FALSE; -} -FX_BOOL CXFA_Fill::SetPattern(int32_t iPattern, FX_ARGB foreColor) { - CXFA_Node* pNode = m_pNode->GetProperty(0, XFA_ELEMENT_Pattern); - CXFA_Node* pColor = pNode->GetProperty(0, XFA_ELEMENT_Color); - CFX_WideString wsColor; - int a, r, g, b; - ArgbDecode(foreColor, a, r, g, b); - wsColor.Format(L"%d,%d,%d", r, g, b); - pColor->SetCData(XFA_ATTRIBUTE_Value, wsColor); - return pNode->SetEnum(XFA_ATTRIBUTE_Type, (XFA_ATTRIBUTEENUM)iPattern); -} -FX_BOOL CXFA_Fill::SetStipple(int32_t iStipple, FX_ARGB stippleColor) { - CXFA_Node* pNode = m_pNode->GetProperty(0, XFA_ELEMENT_Stipple); - CXFA_Node* pColor = pNode->GetProperty(0, XFA_ELEMENT_Color); - CFX_WideString wsColor; - int a, r, g, b; - ArgbDecode(stippleColor, a, r, g, b); - wsColor.Format(L"%d,%d,%d", r, g, b); - pColor->SetCData(XFA_ATTRIBUTE_Value, wsColor); - return pNode->SetEnum(XFA_ATTRIBUTE_Rate, (XFA_ATTRIBUTEENUM)iStipple); -} -FX_BOOL CXFA_Fill::SetLinear(int32_t iLinear, FX_ARGB endColor) { - CXFA_Node* pNode = m_pNode->GetProperty(0, XFA_ELEMENT_Linear); - CXFA_Node* pColor = pNode->GetProperty(0, XFA_ELEMENT_Color); - CFX_WideString wsColor; - int a, r, g, b; - ArgbDecode(endColor, a, r, g, b); - wsColor.Format(L"%d,%d,%d", r, g, b); - pColor->SetCData(XFA_ATTRIBUTE_Value, wsColor); - return pNode->SetEnum(XFA_ATTRIBUTE_Type, (XFA_ATTRIBUTEENUM)iLinear); -} -FX_BOOL CXFA_Fill::SetRadial(int32_t iRadial, FX_ARGB endColor) { - CXFA_Node* pNode = m_pNode->GetProperty(0, XFA_ELEMENT_Radial); - CXFA_Node* pColor = pNode->GetProperty(0, XFA_ELEMENT_Color); - CFX_WideString wsColor; - int a, r, g, b; - ArgbDecode(endColor, a, r, g, b); - wsColor.Format(L"%d,%d,%d", r, g, b); - pColor->SetCData(XFA_ATTRIBUTE_Value, wsColor); - return pNode->SetEnum(XFA_ATTRIBUTE_Type, (XFA_ATTRIBUTEENUM)iRadial); -} -CXFA_Margin::CXFA_Margin(CXFA_Node* pNode) : CXFA_Data(pNode) {} -FX_BOOL CXFA_Margin::GetLeftInset(FX_FLOAT& fInset, FX_FLOAT fDefInset) const { - fInset = fDefInset; - return TryMeasure(XFA_ATTRIBUTE_LeftInset, fInset); -} -FX_BOOL CXFA_Margin::GetTopInset(FX_FLOAT& fInset, FX_FLOAT fDefInset) const { - fInset = fDefInset; - return TryMeasure(XFA_ATTRIBUTE_TopInset, fInset); -} -FX_BOOL CXFA_Margin::GetRightInset(FX_FLOAT& fInset, FX_FLOAT fDefInset) const { - fInset = fDefInset; - return TryMeasure(XFA_ATTRIBUTE_RightInset, fInset); -} -FX_BOOL CXFA_Margin::GetBottomInset(FX_FLOAT& fInset, - FX_FLOAT fDefInset) const { - fInset = fDefInset; - return TryMeasure(XFA_ATTRIBUTE_BottomInset, fInset); -} -FX_BOOL CXFA_Margin::SetLeftInset(FX_FLOAT fInset) { - return SetMeasure(XFA_ATTRIBUTE_LeftInset, fInset); -} -FX_BOOL CXFA_Margin::SetTopInset(FX_FLOAT fInset) { - return SetMeasure(XFA_ATTRIBUTE_TopInset, fInset); -} -FX_BOOL CXFA_Margin::SetRightInset(FX_FLOAT fInset) { - return SetMeasure(XFA_ATTRIBUTE_RightInset, fInset); -} -FX_BOOL CXFA_Margin::SetBottomInset(FX_FLOAT fInset) { - return SetMeasure(XFA_ATTRIBUTE_BottomInset, fInset); -} -CXFA_Font::CXFA_Font(CXFA_Node* pNode) : CXFA_Data(pNode) {} -FX_FLOAT CXFA_Font::GetBaselineShift() { - return m_pNode->GetMeasure(XFA_ATTRIBUTE_BaselineShift).ToUnit(XFA_UNIT_Pt); -} -FX_FLOAT CXFA_Font::GetHorizontalScale() { - CFX_WideString wsValue; - m_pNode->TryCData(XFA_ATTRIBUTE_FontHorizontalScale, wsValue); - int32_t iScale = FXSYS_wtoi((const FX_WCHAR*)wsValue); - return iScale > 0 ? (FX_FLOAT)iScale : 100.0f; -} -FX_FLOAT CXFA_Font::GetVerticalScale() { - CFX_WideString wsValue; - m_pNode->TryCData(XFA_ATTRIBUTE_FontVerticalScale, wsValue); - int32_t iScale = FXSYS_wtoi((const FX_WCHAR*)wsValue); - return iScale > 0 ? (FX_FLOAT)iScale : 100.0f; -} -FX_FLOAT CXFA_Font::GetLetterSpacing() { - CFX_WideStringC wsValue; - if (!m_pNode->TryCData(XFA_ATTRIBUTE_LetterSpacing, wsValue)) { - return 0; - } - CXFA_Measurement ms(wsValue); - if (ms.GetUnit() == XFA_UNIT_Em) { - return ms.GetValue() * GetFontSize(); - } - return ms.ToUnit(XFA_UNIT_Pt); -} -int32_t CXFA_Font::GetLineThrough() { - int32_t iValue = 0; - m_pNode->TryInteger(XFA_ATTRIBUTE_LineThrough, iValue); - return iValue; -} -int32_t CXFA_Font::GetLineThroughPeriod() { - XFA_ATTRIBUTEENUM eAttr = XFA_ATTRIBUTEENUM_All; - m_pNode->TryEnum(XFA_ATTRIBUTE_LineThroughPeriod, eAttr); - return eAttr; -} -int32_t CXFA_Font::GetOverline() { - int32_t iValue = 0; - m_pNode->TryInteger(XFA_ATTRIBUTE_Overline, iValue); - return iValue; -} -int32_t CXFA_Font::GetOverlinePeriod() { - XFA_ATTRIBUTEENUM eAttr = XFA_ATTRIBUTEENUM_All; - m_pNode->TryEnum(XFA_ATTRIBUTE_OverlinePeriod, eAttr); - return eAttr; -} -int32_t CXFA_Font::GetUnderline() { - int32_t iValue = 0; - m_pNode->TryInteger(XFA_ATTRIBUTE_Underline, iValue); - return iValue; -} -int32_t CXFA_Font::GetUnderlinePeriod() { - XFA_ATTRIBUTEENUM eAttr = XFA_ATTRIBUTEENUM_All; - m_pNode->TryEnum(XFA_ATTRIBUTE_UnderlinePeriod, eAttr); - return eAttr; -} -FX_FLOAT CXFA_Font::GetFontSize() { - CXFA_Measurement ms; - m_pNode->TryMeasure(XFA_ATTRIBUTE_Size, ms); - return ms.ToUnit(XFA_UNIT_Pt); -} -void CXFA_Font::GetTypeface(CFX_WideStringC& wsTypeFace) { - m_pNode->TryCData(XFA_ATTRIBUTE_Typeface, wsTypeFace); -} -FX_BOOL CXFA_Font::IsBold() { - XFA_ATTRIBUTEENUM eAttr = XFA_ATTRIBUTEENUM_Normal; - m_pNode->TryEnum(XFA_ATTRIBUTE_Weight, eAttr); - return eAttr == XFA_ATTRIBUTEENUM_Bold; -} -FX_BOOL CXFA_Font::IsItalic() { - XFA_ATTRIBUTEENUM eAttr = XFA_ATTRIBUTEENUM_Normal; - m_pNode->TryEnum(XFA_ATTRIBUTE_Posture, eAttr); - return eAttr == XFA_ATTRIBUTEENUM_Italic; -} -FX_BOOL CXFA_Font::IsUseKerning() { - XFA_ATTRIBUTEENUM eAttr = XFA_ATTRIBUTEENUM_None; - m_pNode->TryEnum(XFA_ATTRIBUTE_KerningMode, eAttr); - return eAttr == XFA_ATTRIBUTEENUM_Pair; -} -void CXFA_Font::SetColor(FX_ARGB color) { - CXFA_Fill fill(m_pNode->GetProperty(0, XFA_ELEMENT_Fill)); - fill.SetColor(color); -} -FX_ARGB CXFA_Font::GetColor() { - CXFA_Fill fill(m_pNode->GetChild(0, XFA_ELEMENT_Fill)); - return fill ? fill.GetColor(TRUE) : 0xFF000000; -} -FX_BOOL CXFA_Font::SetBaselineShift(FX_FLOAT fBaselineShift) { - CXFA_Measurement ms(fBaselineShift, XFA_UNIT_Pt); - return m_pNode->SetMeasure(XFA_ATTRIBUTE_BaselineShift, ms); -} -FX_BOOL CXFA_Font::SetHorizontalScale(FX_FLOAT fHorizontalScale) { - CFX_WideString wsValue; - wsValue.Format(L"%d", (int32_t)fHorizontalScale); - return m_pNode->SetCData(XFA_ATTRIBUTE_FontHorizontalScale, wsValue); -} -FX_BOOL CXFA_Font::SetVerticalScale(FX_FLOAT fVerticalScale) { - CFX_WideString wsValue; - wsValue.Format(L"%d", (int32_t)fVerticalScale); - return m_pNode->SetCData(XFA_ATTRIBUTE_FontVerticalScale, wsValue); -} -FX_BOOL CXFA_Font::SetLetterSpacing(FX_FLOAT fLetterSpacing, XFA_UNIT eUnit) { - return FALSE; -} -FX_BOOL CXFA_Font::SetLineThrough(int32_t iLineThrough) { - return m_pNode->SetInteger(XFA_ATTRIBUTE_LineThrough, iLineThrough); -} -FX_BOOL CXFA_Font::SetLineThroughPeriod(int32_t iLineThroughPeriod) { - return m_pNode->SetEnum(XFA_ATTRIBUTE_LineThroughPeriod, - (XFA_ATTRIBUTEENUM)iLineThroughPeriod); -} -FX_BOOL CXFA_Font::SetOverline(int32_t iOverline) { - return m_pNode->SetInteger(XFA_ATTRIBUTE_Overline, iOverline); -} -FX_BOOL CXFA_Font::SetOverlinePeriod(int32_t iOverlinePeriod) { - return m_pNode->SetEnum(XFA_ATTRIBUTE_OverlinePeriod, - (XFA_ATTRIBUTEENUM)iOverlinePeriod); -} -FX_BOOL CXFA_Font::SetUnderline(int32_t iUnderline) { - return m_pNode->SetInteger(XFA_ATTRIBUTE_Underline, iUnderline); -} -FX_BOOL CXFA_Font::SetUnderlinePeriod(int32_t iUnderlinePeriod) { - return m_pNode->SetEnum(XFA_ATTRIBUTE_UnderlinePeriod, - (XFA_ATTRIBUTEENUM)iUnderlinePeriod); -} -CXFA_Caption::CXFA_Caption(CXFA_Node* pNode) : CXFA_Data(pNode) {} -int32_t CXFA_Caption::GetPresence() { - XFA_ATTRIBUTEENUM eAttr = XFA_ATTRIBUTEENUM_Visible; - m_pNode->TryEnum(XFA_ATTRIBUTE_Presence, eAttr); - return eAttr; -} -int32_t CXFA_Caption::GetPlacementType() { - XFA_ATTRIBUTEENUM eAttr = XFA_ATTRIBUTEENUM_Left; - m_pNode->TryEnum(XFA_ATTRIBUTE_Placement, eAttr); - return eAttr; -} -FX_FLOAT CXFA_Caption::GetReserve() { - CXFA_Measurement ms; - m_pNode->TryMeasure(XFA_ATTRIBUTE_Reserve, ms); - return ms.ToUnit(XFA_UNIT_Pt); -} -CXFA_Margin CXFA_Caption::GetMargin() { - return CXFA_Margin(m_pNode ? m_pNode->GetChild(0, XFA_ELEMENT_Margin) : NULL); -} -CXFA_Font CXFA_Caption::GetFont() { - return CXFA_Font(m_pNode ? m_pNode->GetChild(0, XFA_ELEMENT_Font) : NULL); -} -CXFA_Value CXFA_Caption::GetValue() { - return CXFA_Value(m_pNode ? m_pNode->GetChild(0, XFA_ELEMENT_Value) : NULL); -} -CXFA_Para CXFA_Caption::GetPara() { - return CXFA_Para(m_pNode ? m_pNode->GetChild(0, XFA_ELEMENT_Para) : NULL); -} -FX_BOOL CXFA_Caption::SetPresence(int32_t iPresence) { - return m_pNode->SetEnum(XFA_ATTRIBUTE_Presence, (XFA_ATTRIBUTEENUM)iPresence); -} -FX_BOOL CXFA_Caption::SetPlacementType(int32_t iType) { - return m_pNode->SetEnum(XFA_ATTRIBUTE_Placement, (XFA_ATTRIBUTEENUM)iType); -} -FX_BOOL CXFA_Caption::SetReserve(FX_FLOAT fReserve) { - CXFA_Measurement ms(fReserve, XFA_UNIT_Pt); - return m_pNode->SetMeasure(XFA_ATTRIBUTE_Reserve, ms); -} -CXFA_Para::CXFA_Para(CXFA_Node* pNode) : CXFA_Data(pNode) {} -int32_t CXFA_Para::GetHorizontalAlign() { - XFA_ATTRIBUTEENUM eAttr = XFA_ATTRIBUTEENUM_Left; - m_pNode->TryEnum(XFA_ATTRIBUTE_HAlign, eAttr); - return eAttr; -} -int32_t CXFA_Para::GetVerticalAlign() { - XFA_ATTRIBUTEENUM eAttr = XFA_ATTRIBUTEENUM_Top; - m_pNode->TryEnum(XFA_ATTRIBUTE_VAlign, eAttr); - return eAttr; -} -FX_FLOAT CXFA_Para::GetLineHeight() { - CXFA_Measurement ms; - m_pNode->TryMeasure(XFA_ATTRIBUTE_LineHeight, ms); - return ms.ToUnit(XFA_UNIT_Pt); -} -FX_FLOAT CXFA_Para::GetMarginLeft() { - CXFA_Measurement ms; - m_pNode->TryMeasure(XFA_ATTRIBUTE_MarginLeft, ms); - return ms.ToUnit(XFA_UNIT_Pt); -} -FX_FLOAT CXFA_Para::GetMarginRight() { - CXFA_Measurement ms; - m_pNode->TryMeasure(XFA_ATTRIBUTE_MarginRight, ms); - return ms.ToUnit(XFA_UNIT_Pt); -} -int32_t CXFA_Para::GetOrphans() { - int32_t iValue = 0; - m_pNode->TryInteger(XFA_ATTRIBUTE_Orphans, iValue); - return iValue; -} -FX_FLOAT CXFA_Para::GetRadixOffset() { - CXFA_Measurement ms; - m_pNode->TryMeasure(XFA_ATTRIBUTE_RadixOffset, ms); - return ms.ToUnit(XFA_UNIT_Pt); -} -FX_FLOAT CXFA_Para::GetSpaceAbove() { - CXFA_Measurement ms; - m_pNode->TryMeasure(XFA_ATTRIBUTE_SpaceAbove, ms); - return ms.ToUnit(XFA_UNIT_Pt); -} -FX_FLOAT CXFA_Para::GetSpaceBelow() { - CXFA_Measurement ms; - m_pNode->TryMeasure(XFA_ATTRIBUTE_SpaceBelow, ms); - return ms.ToUnit(XFA_UNIT_Pt); -} -FX_FLOAT CXFA_Para::GetTextIndent() { - CXFA_Measurement ms; - m_pNode->TryMeasure(XFA_ATTRIBUTE_TextIndent, ms); - return ms.ToUnit(XFA_UNIT_Pt); -} -int32_t CXFA_Para::GetWidows() { - int32_t iValue = 0; - m_pNode->TryInteger(XFA_ATTRIBUTE_Widows, iValue); - return iValue; -} -FX_BOOL CXFA_Para::SetHorizontalAlign(int32_t iHorizontalAlign) { - return m_pNode->SetEnum(XFA_ATTRIBUTE_HAlign, - (XFA_ATTRIBUTEENUM)iHorizontalAlign); -} -FX_BOOL CXFA_Para::SetVerticalAlign(int32_t iVerticalAlign) { - return m_pNode->SetEnum(XFA_ATTRIBUTE_VAlign, - (XFA_ATTRIBUTEENUM)iVerticalAlign); -} -FX_BOOL CXFA_Para::SetLineHeight(FX_FLOAT fLineHeight) { - CXFA_Measurement ms; - return m_pNode->SetMeasure(XFA_ATTRIBUTE_LineHeight, ms); -} -FX_BOOL CXFA_Para::SetMarginLeft(FX_FLOAT fMarginLeft) { - CXFA_Measurement ms(fMarginLeft, XFA_UNIT_Pt); - return m_pNode->SetMeasure(XFA_ATTRIBUTE_MarginLeft, ms); -} -FX_BOOL CXFA_Para::SetMarginRight(FX_FLOAT fMarginRight) { - CXFA_Measurement ms(fMarginRight, XFA_UNIT_Pt); - return m_pNode->SetMeasure(XFA_ATTRIBUTE_MarginRight, ms); -} -FX_BOOL CXFA_Para::SetOrphans(int32_t iOrphans) { - return m_pNode->SetInteger(XFA_ATTRIBUTE_Orphans, iOrphans); -} -FX_BOOL CXFA_Para::SetRadixOffset(FX_FLOAT fRadixOffset) { - CXFA_Measurement ms(fRadixOffset, XFA_UNIT_Pt); - return m_pNode->SetMeasure(XFA_ATTRIBUTE_RadixOffset, ms); -} -FX_BOOL CXFA_Para::SetSpaceAbove(FX_FLOAT fSpaceAbove) { - CXFA_Measurement ms(fSpaceAbove, XFA_UNIT_Pt); - return m_pNode->SetMeasure(XFA_ATTRIBUTE_SpaceAbove, ms); -} -FX_BOOL CXFA_Para::SetSpaceBelow(FX_FLOAT fSpaceBelow) { - CXFA_Measurement ms(fSpaceBelow, XFA_UNIT_Pt); - return m_pNode->SetMeasure(XFA_ATTRIBUTE_SpaceBelow, ms); -} -FX_BOOL CXFA_Para::SetTextIndent(FX_FLOAT fTextIndent) { - CXFA_Measurement ms(fTextIndent, XFA_UNIT_Pt); - return m_pNode->SetMeasure(XFA_ATTRIBUTE_TextIndent, ms); -} -FX_BOOL CXFA_Para::SetWidows(int32_t iWidows) { - return m_pNode->SetInteger(XFA_ATTRIBUTE_Widows, iWidows); -} -CXFA_Keep::CXFA_Keep(CXFA_Node* pNode, CXFA_Node* pParent) - : CXFA_Data(pNode), m_pParent(pParent) {} -int32_t CXFA_Keep::GetIntact() { - XFA_ATTRIBUTEENUM eAttr = XFA_ATTRIBUTEENUM_None; - switch (m_pParent->GetClassID()) { - case XFA_ELEMENT_Subform: { - XFA_ATTRIBUTEENUM eAttrSubForm; - m_pParent->TryEnum(XFA_ATTRIBUTE_Layout, eAttrSubForm); - if (eAttrSubForm == XFA_ATTRIBUTEENUM_Position || - eAttrSubForm == XFA_ATTRIBUTEENUM_Row) { - eAttr = XFA_ATTRIBUTEENUM_ContentArea; - } - } break; - case XFA_ELEMENT_Draw: - eAttr = XFA_ATTRIBUTEENUM_ContentArea; - break; - default: - break; - } - m_pNode->TryEnum(XFA_ATTRIBUTE_Intact, eAttr, FALSE); - return eAttr; -} -int32_t CXFA_Keep::GetNext() { - XFA_ATTRIBUTEENUM eAttr = XFA_ATTRIBUTEENUM_None; - m_pNode->TryEnum(XFA_ATTRIBUTE_Next, eAttr); - return eAttr; -} -int32_t CXFA_Keep::GetPrevious() { - XFA_ATTRIBUTEENUM eAttr = XFA_ATTRIBUTEENUM_None; - m_pNode->TryEnum(XFA_ATTRIBUTE_Previous, eAttr); - return eAttr; -} -FX_BOOL CXFA_Keep::SetIntact(int32_t iIntact) { - return m_pNode->SetEnum(XFA_ATTRIBUTE_Intact, (XFA_ATTRIBUTEENUM)iIntact); -} -FX_BOOL CXFA_Keep::SetNext(int32_t iNext) { - return m_pNode->SetEnum(XFA_ATTRIBUTE_Next, (XFA_ATTRIBUTEENUM)iNext); -} -FX_BOOL CXFA_Keep::SetPrevious(int32_t iPrevious) { - return m_pNode->SetEnum(XFA_ATTRIBUTE_Previous, (XFA_ATTRIBUTEENUM)iPrevious); -} -CXFA_Event::CXFA_Event(CXFA_Node* pNode) : CXFA_Data(pNode) {} -int32_t CXFA_Event::GetActivity() { - return m_pNode->GetEnum(XFA_ATTRIBUTE_Activity); -} -int32_t CXFA_Event::GetEventType() { - CXFA_Node* pChild = m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild); - while (pChild) { - int32_t eType = pChild->GetClassID(); - if (eType != XFA_ELEMENT_Extras) { - return eType; - } - pChild = pChild->GetNodeItem(XFA_NODEITEM_NextSibling); - } - return XFA_ELEMENT_UNKNOWN; -} -void CXFA_Event::GetRef(CFX_WideStringC& wsRef) { - m_pNode->TryCData(XFA_ATTRIBUTE_Ref, wsRef); -} -int32_t CXFA_Event::GetExecuteRunAt() { - CXFA_Node* pNode = m_pNode->GetProperty(0, XFA_ELEMENT_Execute); - return pNode->GetEnum(XFA_ATTRIBUTE_RunAt); -} -int32_t CXFA_Event::GetExecuteType() { - CXFA_Node* pNode = m_pNode->GetProperty(0, XFA_ELEMENT_Execute); - return pNode->GetEnum(XFA_ATTRIBUTE_ExecuteType); -} -void CXFA_Event::GetExecuteConnection(CFX_WideString& wsConnection) { - CXFA_Node* pNode = m_pNode->GetProperty(0, XFA_ELEMENT_Execute); - CFX_WideStringC cData; - pNode->TryCData(XFA_ATTRIBUTE_Connection, cData); - wsConnection = cData; -} -CXFA_Script CXFA_Event::GetScript() { - return CXFA_Script(m_pNode->GetChild(0, XFA_ELEMENT_Script)); -} -CXFA_Submit CXFA_Event::GetSubmit() { - return CXFA_Submit(m_pNode->GetChild(0, XFA_ELEMENT_Submit)); -} -int32_t CXFA_Event::GetSignDataOperation() { - CXFA_Node* pNode = m_pNode->GetProperty(0, XFA_ELEMENT_SignData); - return pNode->GetEnum(XFA_ATTRIBUTE_Operation); -} -void CXFA_Event::GetSignDataTarget(CFX_WideString& wsTarget) { - if (CXFA_Node* pNode = m_pNode->GetProperty(0, XFA_ELEMENT_SignData)) { - CFX_WideStringC wsCData; - pNode->TryCData(XFA_ATTRIBUTE_Target, wsCData); - wsTarget = wsCData; - } -} -FX_BOOL CXFA_Event::SetActivity(int32_t iActivity) { - return m_pNode->SetEnum(XFA_ATTRIBUTE_Activity, (XFA_ATTRIBUTEENUM)iActivity); -} -FX_BOOL CXFA_Event::SetEventType(int32_t iEventType) { - return FALSE; -} -FX_BOOL CXFA_Event::SetExecuteRunAt(int32_t iExecuteRunAt) { - CXFA_Node* pNode = m_pNode->GetProperty(0, XFA_ELEMENT_Execute); - return pNode->SetEnum(XFA_ATTRIBUTE_RunAt, (XFA_ATTRIBUTEENUM)iExecuteRunAt); -} -FX_BOOL CXFA_Event::SetExecuteType(int32_t iExecuteType) { - CXFA_Node* pNode = m_pNode->GetProperty(0, XFA_ELEMENT_Execute); - return pNode->SetEnum(XFA_ATTRIBUTE_ExecuteType, - (XFA_ATTRIBUTEENUM)iExecuteType); -} -FX_BOOL CXFA_Event::SetExecuteConnection(const CFX_WideString& wsConnection) { - CXFA_Node* pNode = m_pNode->GetProperty(0, XFA_ELEMENT_Execute); - return pNode->SetCData(XFA_ATTRIBUTE_Connection, wsConnection); -} -FX_BOOL CXFA_Event::SetSignDataOperation(int32_t iOperation) { - CXFA_Node* pNode = m_pNode->GetProperty(0, XFA_ELEMENT_SignData); - return pNode->SetEnum(XFA_ATTRIBUTE_Operation, (XFA_ATTRIBUTEENUM)iOperation); -} -FX_BOOL CXFA_Event::SetSignDataTarget(const CFX_WideString& wsTarget) { - if (CXFA_Node* pNode = m_pNode->GetProperty(0, XFA_ELEMENT_SignData)) { - return pNode->SetCData(XFA_ATTRIBUTE_Target, wsTarget); - } - return FALSE; -} -CXFA_Script::CXFA_Script(CXFA_Node* pNode) : CXFA_Data(pNode) {} -void CXFA_Script::GetBinding(CFX_WideString& wsBinding) { - CFX_WideStringC cData; - m_pNode->TryCData(XFA_ATTRIBUTE_Binding, cData); - wsBinding = cData; -} -XFA_SCRIPTTYPE CXFA_Script::GetContentType() { - CFX_WideStringC cData; - if (m_pNode->TryCData(XFA_ATTRIBUTE_ContentType, cData, FALSE)) { - if (cData == FX_WSTRC(L"application/x-javascript")) { - return XFA_SCRIPTTYPE_Javascript; - } else if (cData == FX_WSTRC(L"application/x-formcalc")) { - return XFA_SCRIPTTYPE_Formcalc; - } else { - return XFA_SCRIPTTYPE_Unkown; - } - } - return XFA_SCRIPTTYPE_Formcalc; -} -int32_t CXFA_Script::GetRunAt() { - return m_pNode->GetEnum(XFA_ATTRIBUTE_RunAt); -} -void CXFA_Script::GetExpression(CFX_WideString& wsExpression) { - m_pNode->TryContent(wsExpression); -} -FX_BOOL CXFA_Script::SetBinding(const CFX_WideString& wsBinding) { - return m_pNode->SetCData(XFA_ATTRIBUTE_Binding, wsBinding); -} -FX_BOOL CXFA_Script::SetContentType(XFA_SCRIPTTYPE eType) { - CFX_WideString wsType; - switch (eType) { - case XFA_SCRIPTTYPE_Javascript: - wsType = L"application/x-javascript"; - break; - case XFA_SCRIPTTYPE_Formcalc: - wsType = L"application/x-formcalc"; - break; - default: - break; - } - return m_pNode->SetCData(XFA_ATTRIBUTE_ContentType, wsType); -} -FX_BOOL CXFA_Script::SetRunAt(int32_t iRunAt) { - return m_pNode->SetEnum(XFA_ATTRIBUTE_RunAt, (XFA_ATTRIBUTEENUM)iRunAt); -} -FX_BOOL CXFA_Script::SetExpression(const CFX_WideString& wsExpression) { - return m_pNode->SetContent(wsExpression, wsExpression); -} -CXFA_Submit::CXFA_Submit(CXFA_Node* pNode) : CXFA_Data(pNode) {} -FX_BOOL CXFA_Submit::IsSubmitEmbedPDF() { - return m_pNode->GetBoolean(XFA_ATTRIBUTE_EmbedPDF); -} -int32_t CXFA_Submit::GetSubmitFormat() { - return m_pNode->GetEnum(XFA_ATTRIBUTE_Format); -} -void CXFA_Submit::GetSubmitTarget(CFX_WideStringC& wsTarget) { - m_pNode->TryCData(XFA_ATTRIBUTE_Target, wsTarget); -} -XFA_TEXTENCODING CXFA_Submit::GetSubmitTextEncoding() { - CFX_WideStringC wsCData; - if (!m_pNode->TryCData(XFA_ATTRIBUTE_TextEncoding, wsCData)) { - return XFA_TEXTENCODING_None; - } - CFX_WideString wsValue(wsCData); - if (wsValue == L"Big-Five") { - return XFA_TEXTENCODING_Big5; - } else if (wsValue == L"fontSpecific") { - return XFA_TEXTENCODING_FontSpecific; - } else if (wsValue == L"GBK") { - return XFA_TEXTENCODING_GBK; - } else if (wsValue == L"GB-18030") { - return XFA_TEXTENCODING_GB18030; - } else if (wsValue == L"GB-2312") { - return XFA_TEXTENCODING_GB2312; - } else if (wsValue == L"ISO-8859-NN") { - return XFA_TEXTENCODING_ISO8859NN; - } else if (wsValue == L"KSC-5601") { - return XFA_TEXTENCODING_KSC5601; - } else if (wsValue == L"Shift-JIS") { - return XFA_TEXTENCODING_ShiftJIS; - } else if (wsValue == L"UCS-2") { - return XFA_TEXTENCODING_UCS2; - } else if (wsValue == L"UTF-16") { - return XFA_TEXTENCODING_UTF16; - } else if (wsValue == L"UTF-8") { - return XFA_TEXTENCODING_UTF8; - } - return XFA_TEXTENCODING_None; -} -void CXFA_Submit::GetSubmitXDPContent(CFX_WideStringC& wsContent) { - m_pNode->TryCData(XFA_ATTRIBUTE_XdpContent, wsContent); -} -FX_BOOL CXFA_Submit::SetSubmitFormat(int32_t iSubmitFormat) { - return m_pNode->SetEnum(XFA_ATTRIBUTE_Format, - (XFA_ATTRIBUTEENUM)iSubmitFormat); -} -FX_BOOL CXFA_Submit::SetSubmitTarget(const CFX_WideString& wsTarget) { - return m_pNode->SetCData(XFA_ATTRIBUTE_Target, wsTarget); -} -FX_BOOL CXFA_Submit::SetSubmitTextEncoding(XFA_TEXTENCODING eTextEncoding) { - CFX_WideString wsValue; - switch (eTextEncoding) { - case XFA_TEXTENCODING_Big5: - wsValue = L"Big-Five"; - break; - case XFA_TEXTENCODING_FontSpecific: - wsValue = L"fontSpecific"; - break; - case XFA_TEXTENCODING_GBK: - wsValue = L"GBK"; - break; - case XFA_TEXTENCODING_GB18030: - wsValue = L"GB-18030"; - break; - case XFA_TEXTENCODING_GB2312: - wsValue = L"GB-2312"; - break; - case XFA_TEXTENCODING_ISO8859NN: - wsValue = L"ISO-8859-NN"; - break; - case XFA_TEXTENCODING_KSC5601: - wsValue = L"KSC-5601"; - break; - case XFA_TEXTENCODING_ShiftJIS: - wsValue = L"Shift-JIS"; - break; - case XFA_TEXTENCODING_UCS2: - wsValue = L"UCS-2"; - break; - case XFA_TEXTENCODING_UTF16: - wsValue = L"UTF-16"; - break; - case XFA_TEXTENCODING_UTF8: - wsValue = L"UTF-8"; - break; - default: - break; - } - return m_pNode->SetCData(XFA_ATTRIBUTE_TextEncoding, wsValue); -} -FX_BOOL CXFA_Submit::SetSubmitXDPContent(const CFX_WideString& wsContent) { - return m_pNode->SetCData(XFA_ATTRIBUTE_XdpContent, wsContent); -} -XFA_ELEMENT CXFA_Value::GetChildValueClassID() { - if (!m_pNode) { - return XFA_ELEMENT_UNKNOWN; - } - if (CXFA_Node* pNode = m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild)) { - return pNode->GetClassID(); - } - return XFA_ELEMENT_UNKNOWN; -} -FX_BOOL CXFA_Value::GetChildValueContent(CFX_WideString& wsContent) { - if (!m_pNode) { - return FALSE; - } - if (CXFA_Node* pNode = m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild)) { - return pNode->TryContent(wsContent); - } - return FALSE; -} -CXFA_Arc CXFA_Value::GetArc() { - return CXFA_Arc(m_pNode ? m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild) - : nullptr); -} -CXFA_Line CXFA_Value::GetLine() { - return CXFA_Line(m_pNode ? m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild) - : nullptr); -} -CXFA_Rectangle CXFA_Value::GetRectangle() { - return CXFA_Rectangle(m_pNode ? m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild) - : nullptr); -} -CXFA_Text CXFA_Value::GetText() { - return CXFA_Text(m_pNode ? m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild) - : nullptr); -} -CXFA_ExData CXFA_Value::GetExData() { - return CXFA_ExData(m_pNode ? m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild) - : nullptr); -} -CXFA_Image CXFA_Value::GetImage() { - return CXFA_Image( - m_pNode ? (m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild)) : nullptr, - TRUE); -} -FX_BOOL CXFA_Value::SetChildValueContent(const CFX_WideString& wsContent, - FX_BOOL bNotify, - XFA_ELEMENT iType) { - if (!m_pNode) { - return FALSE; - } - CXFA_Node* pNode = m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild); - if (!pNode) { - if (iType == XFA_ELEMENT_UNKNOWN) { - return FALSE; - } - pNode = m_pNode->GetProperty(0, iType); - } - CFX_WideString wsFormatContent(wsContent); - CXFA_WidgetData* pContainerWidgetData = pNode->GetContainerWidgetData(); - if (pContainerWidgetData) { - pContainerWidgetData->GetFormatDataValue(wsContent, wsFormatContent); - } - return pNode->SetContent(wsContent, wsFormatContent, bNotify); -} -int32_t CXFA_Line::GetHand() { - return m_pNode->GetEnum(XFA_ATTRIBUTE_Hand); -} -FX_BOOL CXFA_Line::GetSlop() { - XFA_ATTRIBUTEENUM eSlop = m_pNode->GetEnum(XFA_ATTRIBUTE_Slope); - return eSlop == XFA_ATTRIBUTEENUM_Slash; -} -CXFA_Edge CXFA_Line::GetEdge() { - return CXFA_Edge(m_pNode->GetChild(0, XFA_ELEMENT_Edge)); -} -FX_BOOL CXFA_Line::SetHand(int32_t iHand) { - return m_pNode->SetEnum(XFA_ATTRIBUTE_Hand, (XFA_ATTRIBUTEENUM)iHand); -} -FX_BOOL CXFA_Line::SetSlop(int32_t iSlop) { - return m_pNode->SetEnum(XFA_ATTRIBUTE_Slope, (XFA_ATTRIBUTEENUM)iSlop); -} -CXFA_Text::CXFA_Text(CXFA_Node* pNode) : CXFA_Data(pNode) {} -void CXFA_Text::GetName(CFX_WideStringC& wsName) { - m_pNode->TryCData(XFA_ATTRIBUTE_Name, wsName); -} -int32_t CXFA_Text::GetMaxChars() { - return m_pNode->GetInteger(XFA_ATTRIBUTE_MaxChars); -} -void CXFA_Text::GetRid(CFX_WideStringC& wsRid) { - m_pNode->TryCData(XFA_ATTRIBUTE_Rid, wsRid); -} -void CXFA_Text::GetContent(CFX_WideString& wsText) { - m_pNode->TryContent(wsText); -} -void CXFA_Text::SetContent(CFX_WideString wsText, FX_BOOL bNotify) { - CFX_WideString wsFormatValue(wsText); - CXFA_WidgetData* pContainerWidgetData = m_pNode->GetContainerWidgetData(); - if (pContainerWidgetData) { - pContainerWidgetData->GetFormatDataValue(wsText, wsFormatValue); - } - m_pNode->SetContent(wsText, wsFormatValue, bNotify); -} -FX_BOOL CXFA_Text::SetName(const CFX_WideString& wsName) { - return m_pNode->SetCData(XFA_ATTRIBUTE_Name, wsName); -} -FX_BOOL CXFA_Text::SetMaxChars(int32_t iMaxChars) { - return m_pNode->SetInteger(XFA_ATTRIBUTE_MaxChars, iMaxChars); -} -FX_BOOL CXFA_Text::SetRid(const CFX_WideString& wsRid) { - return m_pNode->SetCData(XFA_ATTRIBUTE_Rid, wsRid); -} -CXFA_ExData::CXFA_ExData(CXFA_Node* pNode) : CXFA_Data(pNode) {} -void CXFA_ExData::GetContentType(CFX_WideStringC& wsContentType) { - m_pNode->TryCData(XFA_ATTRIBUTE_ContentType, wsContentType); -} -void CXFA_ExData::GetHref(CFX_WideStringC& wsHref) { - m_pNode->TryCData(XFA_ATTRIBUTE_Href, wsHref); -} -int32_t CXFA_ExData::GetMaxLength() { - return m_pNode->GetInteger(XFA_ATTRIBUTE_MaxLength); -} -void CXFA_ExData::GetRid(CFX_WideStringC& wsRid) { - m_pNode->TryCData(XFA_ATTRIBUTE_Rid, wsRid); -} -int32_t CXFA_ExData::GetTransferEncoding() { - return m_pNode->GetEnum(XFA_ATTRIBUTE_TransferEncoding); -} -void CXFA_ExData::GetContent(CFX_WideString& wsText) { - m_pNode->TryContent(wsText); -} -FX_BOOL CXFA_ExData::SetContentType(const CFX_WideString& wsContentType) { - return m_pNode->SetCData(XFA_ATTRIBUTE_ContentType, wsContentType); -} -FX_BOOL CXFA_ExData::SetHref(const CFX_WideString& wsHref) { - return m_pNode->SetCData(XFA_ATTRIBUTE_Href, wsHref); -} -FX_BOOL CXFA_ExData::SetMaxLength(int32_t iMaxLength) { - return m_pNode->SetInteger(XFA_ATTRIBUTE_MaxLength, iMaxLength); -} -FX_BOOL CXFA_ExData::SetRid(const CFX_WideString& wsRid) { - return m_pNode->SetCData(XFA_ATTRIBUTE_Rid, wsRid); -} -FX_BOOL CXFA_ExData::SetTransferEncoding(int32_t iTransferEncoding) { - return m_pNode->SetEnum(XFA_ATTRIBUTE_TransferEncoding, - (XFA_ATTRIBUTEENUM)iTransferEncoding); -} -FX_BOOL CXFA_ExData::SetContent(const CFX_WideString& wsText, - FX_BOOL bNotify, - FX_BOOL bScriptModify, - FX_BOOL bSyncData) { - CFX_WideString wsFormatValue(wsText); - CXFA_WidgetData* pContainerWidgetData = m_pNode->GetContainerWidgetData(); - if (pContainerWidgetData) { - pContainerWidgetData->GetFormatDataValue(wsText, wsFormatValue); - } - return m_pNode->SetContent(wsText, wsFormatValue, bNotify, bScriptModify, - bSyncData); -} -CXFA_Image::CXFA_Image(CXFA_Node* pNode, FX_BOOL bDefValue) - : CXFA_Data(pNode), m_bDefValue(bDefValue) {} -int32_t CXFA_Image::GetAspect() { - return m_pNode->GetEnum(XFA_ATTRIBUTE_Aspect); -} -FX_BOOL CXFA_Image::GetContentType(CFX_WideString& wsContentType) { - return m_pNode->TryCData(XFA_ATTRIBUTE_ContentType, wsContentType); -} -FX_BOOL CXFA_Image::GetHref(CFX_WideString& wsHref) { - if (m_bDefValue) { - return m_pNode->TryCData(XFA_ATTRIBUTE_Href, wsHref); - } - return m_pNode->GetAttribute(FX_WSTRC(L"href"), wsHref); -} -int32_t CXFA_Image::GetTransferEncoding() { - if (m_bDefValue) { - return m_pNode->GetEnum(XFA_ATTRIBUTE_TransferEncoding); - } - return XFA_ATTRIBUTEENUM_Base64; -} -FX_BOOL CXFA_Image::GetContent(CFX_WideString& wsText) { - return m_pNode->TryContent(wsText); -} -FX_BOOL CXFA_Image::SetAspect(int32_t iAspect) { - return m_pNode->SetEnum(XFA_ATTRIBUTE_Aspect, (XFA_ATTRIBUTEENUM)iAspect); -} -FX_BOOL CXFA_Image::SetContentType(const CFX_WideString& wsContentType) { - return m_pNode->SetCData(XFA_ATTRIBUTE_ContentType, wsContentType); -} -FX_BOOL CXFA_Image::SetHref(const CFX_WideString& wsHref) { - if (m_bDefValue) { - return m_pNode->SetCData(XFA_ATTRIBUTE_Href, wsHref); - } - return m_pNode->SetAttribute(XFA_ATTRIBUTE_Href, wsHref); -} -FX_BOOL CXFA_Image::SetTransferEncoding(int32_t iTransferEncoding) { - if (m_bDefValue) { - return m_pNode->SetEnum(XFA_ATTRIBUTE_TransferEncoding, - (XFA_ATTRIBUTEENUM)iTransferEncoding); - } - return TRUE; -} -FX_BOOL CXFA_Image::SetContent(const CFX_WideString& wsText) { - CFX_WideString wsFormatValue(wsText); - CXFA_WidgetData* pContainerWidgetData = m_pNode->GetContainerWidgetData(); - if (pContainerWidgetData) { - pContainerWidgetData->GetFormatDataValue(wsText, wsFormatValue); - } - return m_pNode->SetContent(wsText, wsFormatValue); -} -CXFA_Calculate::CXFA_Calculate(CXFA_Node* pNode) : CXFA_Data(pNode) {} -int32_t CXFA_Calculate::GetOverride() { - XFA_ATTRIBUTEENUM eAtt = XFA_ATTRIBUTEENUM_Error; - m_pNode->TryEnum(XFA_ATTRIBUTE_Override, eAtt, FALSE); - return eAtt; -} -CXFA_Script CXFA_Calculate::GetScript() { - return CXFA_Script(m_pNode->GetChild(0, XFA_ELEMENT_Script)); -} -void CXFA_Calculate::GetMessageText(CFX_WideString& wsMessage) { - if (CXFA_Node* pNode = m_pNode->GetChild(0, XFA_ELEMENT_Message)) { - CXFA_Text text(pNode->GetChild(0, XFA_ELEMENT_Text)); - if (text) { - text.GetContent(wsMessage); - } - } -} -FX_BOOL CXFA_Calculate::SetOverride(int32_t iOverride) { - return m_pNode->SetEnum(XFA_ATTRIBUTE_Override, (XFA_ATTRIBUTEENUM)iOverride); -} -FX_BOOL CXFA_Calculate::SetMessageText(const CFX_WideString& wsMessage) { - if (CXFA_Node* pNode = m_pNode->GetChild(0, XFA_ELEMENT_Message)) { - CXFA_Node* pChildNode = pNode->GetProperty(0, XFA_ELEMENT_Text); - return pChildNode->SetContent(wsMessage, wsMessage); - } - return FALSE; -} -CXFA_Validate::CXFA_Validate(CXFA_Node* pNode) : CXFA_Data(pNode) {} -int32_t CXFA_Validate::GetFormatTest() { - return m_pNode->GetEnum(XFA_ATTRIBUTE_FormatTest); -} -FX_BOOL CXFA_Validate::SetTestValue(int32_t iType, - CFX_WideString& wsValue, - XFA_ATTRIBUTEENUM eName) { - const XFA_ATTRIBUTEENUMINFO* pInfo = XFA_GetAttributeEnumByName(wsValue); - if (pInfo) { - eName = pInfo->eName; - } - m_pNode->SetEnum((XFA_ATTRIBUTE)iType, eName, FALSE); - return TRUE; -} -FX_BOOL CXFA_Validate::SetFormatTest(CFX_WideString wsValue) { - return SetTestValue(XFA_ATTRIBUTE_FormatTest, wsValue, - XFA_ATTRIBUTEENUM_Warning); -} -FX_BOOL CXFA_Validate::SetNullTest(CFX_WideString wsValue) { - return SetTestValue(XFA_ATTRIBUTE_NullTest, wsValue, - XFA_ATTRIBUTEENUM_Disabled); -} -int32_t CXFA_Validate::GetNullTest() { - return m_pNode->GetEnum(XFA_ATTRIBUTE_NullTest); -} -int32_t CXFA_Validate::GetScriptTest() { - return m_pNode->GetEnum(XFA_ATTRIBUTE_ScriptTest); -} -void CXFA_Validate::GetMessageText(CFX_WideString& wsMessage, - const CFX_WideStringC& wsMessageType) { - if (CXFA_Node* pNode = m_pNode->GetProperty(0, XFA_ELEMENT_Message, FALSE)) { - CXFA_Node* pItemNode = pNode->GetNodeItem(XFA_NODEITEM_FirstChild); - for (; pItemNode; - pItemNode = pItemNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { - if (pItemNode->GetClassID() != XFA_ELEMENT_Text) { - continue; - } - CFX_WideStringC wsName; - pItemNode->TryCData(XFA_ATTRIBUTE_Name, wsName); - if (wsName.IsEmpty() || wsName == wsMessageType) { - pItemNode->TryContent(wsMessage); - return; - } - } - } -} -void CXFA_Validate::SetFormatMessageText(CFX_WideString wsMessage) { - SetMessageText(wsMessage, FX_WSTRC(L"formatTest")); -} -void CXFA_Validate::GetFormatMessageText(CFX_WideString& wsMessage) { - GetMessageText(wsMessage, FX_WSTRC(L"formatTest")); -} -void CXFA_Validate::SetNullMessageText(CFX_WideString wsMessage) { - SetMessageText(wsMessage, FX_WSTRC(L"nullTest")); -} -void CXFA_Validate::GetNullMessageText(CFX_WideString& wsMessage) { - GetMessageText(wsMessage, FX_WSTRC(L"nullTest")); -} -void CXFA_Validate::SetMessageText(CFX_WideString& wsMessage, - const CFX_WideStringC& wsMessageType) { - if (CXFA_Node* pNode = m_pNode->GetProperty(0, XFA_ELEMENT_Message, TRUE)) { - CXFA_Node* pItemNode = pNode->GetNodeItem(XFA_NODEITEM_FirstChild); - for (; pItemNode; - pItemNode = pItemNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { - if (pItemNode->GetClassID() != XFA_ELEMENT_Text) { - continue; - } - CFX_WideStringC wsName; - pItemNode->TryCData(XFA_ATTRIBUTE_Name, wsName); - if (wsName.IsEmpty() || wsName == wsMessageType) { - pItemNode->SetContent(wsMessage, wsMessage, FALSE); - return; - } - } - CXFA_Node* pTextNode = pNode->CreateSamePacketNode(XFA_ELEMENT_Text); - pNode->InsertChild(pTextNode); - pTextNode->SetCData(XFA_ATTRIBUTE_Name, wsMessageType, FALSE); - pTextNode->SetContent(wsMessage, wsMessage, FALSE); - } -} -void CXFA_Validate::GetScriptMessageText(CFX_WideString& wsMessage) { - GetMessageText(wsMessage, FX_WSTRC(L"scriptTest")); -} -void CXFA_Validate::SetScriptMessageText(CFX_WideString wsMessage) { - SetMessageText(wsMessage, FX_WSTRC(L"scriptTest")); -} -void CXFA_Validate::GetPicture(CFX_WideString& wsPicture) { - if (CXFA_Node* pNode = m_pNode->GetChild(0, XFA_ELEMENT_Picture)) { - pNode->TryContent(wsPicture); - } -} -CXFA_Script CXFA_Validate::GetScript() { - return CXFA_Script(m_pNode->GetChild(0, XFA_ELEMENT_Script)); -} -CXFA_Variables::CXFA_Variables(CXFA_Node* pNode) : CXFA_Data(pNode) {} -int32_t CXFA_Variables::CountScripts() { - return m_pNode->CountChildren(XFA_ELEMENT_Script); -} -CXFA_Script CXFA_Variables::GetScript(int32_t nIndex) { - return CXFA_Script(m_pNode->GetChild(nIndex, XFA_ELEMENT_Script)); -} -CXFA_Bind::CXFA_Bind(CXFA_Node* pNode) : CXFA_Data(pNode) {} -int32_t CXFA_Bind::GetMatch() { - return m_pNode->GetEnum(XFA_ATTRIBUTE_Match); -} -void CXFA_Bind::GetRef(CFX_WideStringC& wsRef) { - m_pNode->TryCData(XFA_ATTRIBUTE_Ref, wsRef); -} -void CXFA_Bind::GetPicture(CFX_WideString& wsPicture) { - if (CXFA_Node* pPicture = m_pNode->GetChild(0, XFA_ELEMENT_Picture)) { - pPicture->TryContent(wsPicture); - } -} -FX_BOOL CXFA_Bind::SetMatch(int32_t iMatch) { - return m_pNode->SetEnum(XFA_ATTRIBUTE_Match, (XFA_ATTRIBUTEENUM)iMatch); -} -FX_BOOL CXFA_Bind::SetRef(const CFX_WideString& wsRef) { - return m_pNode->SetCData(XFA_ATTRIBUTE_Ref, wsRef); -} -FX_BOOL CXFA_Bind::SetPicture(const CFX_WideString& wsPicture) { - if (CXFA_Node* pPicture = m_pNode->GetChild(0, XFA_ELEMENT_Picture)) { - return pPicture->SetContent(wsPicture, wsPicture); - } - return FALSE; -} -CXFA_Assist::CXFA_Assist(CXFA_Node* pNode) : CXFA_Data(pNode) {} -CXFA_ToolTip CXFA_Assist::GetToolTip() { - return CXFA_ToolTip(m_pNode->GetChild(0, XFA_ELEMENT_ToolTip)); -} -CXFA_ToolTip::CXFA_ToolTip(CXFA_Node* pNode) : CXFA_Data(pNode) {} -FX_BOOL CXFA_ToolTip::GetTip(CFX_WideString& wsTip) { - return m_pNode->TryContent(wsTip); -} -FX_BOOL CXFA_ToolTip::SetTip(const CFX_WideString& wsTip) { - return m_pNode->SetContent(wsTip, wsTip); -} -CXFA_BindItems::CXFA_BindItems(CXFA_Node* pNode) : CXFA_Data(pNode) {} -void CXFA_BindItems::GetConnection(CFX_WideStringC& wsConnection) { - m_pNode->TryCData(XFA_ATTRIBUTE_Connection, wsConnection); -} -void CXFA_BindItems::GetLabelRef(CFX_WideStringC& wsLabelRef) { - m_pNode->TryCData(XFA_ATTRIBUTE_LabelRef, wsLabelRef); -} -void CXFA_BindItems::GetValueRef(CFX_WideStringC& wsValueRef) { - m_pNode->TryCData(XFA_ATTRIBUTE_ValueRef, wsValueRef); -} -void CXFA_BindItems::GetRef(CFX_WideStringC& wsRef) { - m_pNode->TryCData(XFA_ATTRIBUTE_Ref, wsRef); -} -FX_BOOL CXFA_BindItems::SetConnection(const CFX_WideString& wsConnection) { - return m_pNode->SetCData(XFA_ATTRIBUTE_Connection, wsConnection); -} -FX_BOOL CXFA_BindItems::SetLabelRef(const CFX_WideString& wsLabelRef) { - return m_pNode->SetCData(XFA_ATTRIBUTE_LabelRef, wsLabelRef); -} -FX_BOOL CXFA_BindItems::SetValueRef(const CFX_WideString& wsValueRef) { - return m_pNode->SetCData(XFA_ATTRIBUTE_ValueRef, wsValueRef); -} -FX_BOOL CXFA_BindItems::SetRef(const CFX_WideString& wsRef) { - return m_pNode->SetCData(XFA_ATTRIBUTE_Ref, wsRef); -} -int32_t CXFA_Box::GetBreak() const { - if (!m_pNode) { - return XFA_ATTRIBUTEENUM_Close; - } - return m_pNode->GetEnum(XFA_ATTRIBUTE_Break); -} -int32_t CXFA_Box::GetHand() const { - if (!m_pNode) { - return XFA_ATTRIBUTEENUM_Even; - } - return m_pNode->GetEnum(XFA_ATTRIBUTE_Hand); -} -int32_t CXFA_Box::GetPresence() const { - if (!m_pNode) { - return XFA_ATTRIBUTEENUM_Hidden; - } - return m_pNode->GetEnum(XFA_ATTRIBUTE_Presence); -} -int32_t CXFA_Box::CountCorners() const { - if (!m_pNode) { - return 0; - } - return m_pNode->CountChildren(XFA_ELEMENT_Corner); -} -CXFA_Corner CXFA_Box::GetCorner(int32_t nIndex) const { - return CXFA_Corner( - m_pNode ? m_pNode->GetProperty(nIndex, XFA_ELEMENT_Corner, nIndex == 0) - : nullptr); -} -int32_t CXFA_Box::CountEdges() const { - if (!m_pNode) { - return 0; - } - return m_pNode->CountChildren(XFA_ELEMENT_Edge); -} -CXFA_Edge CXFA_Box::GetEdge(int32_t nIndex) const { - return CXFA_Edge( - m_pNode ? m_pNode->GetProperty(nIndex, XFA_ELEMENT_Edge, nIndex == 0) - : nullptr); -} -static void XFA_BOX_GetStrokes(CXFA_Node* pNode, - CXFA_StrokeArray& strokes, - FX_BOOL bNULL) { - strokes.RemoveAll(); - if (!pNode) { - return; - } - strokes.SetSize(8); - int32_t i, j; - for (i = 0, j = 0; i < 4; i++) { - CXFA_Corner corner = - CXFA_Corner(pNode->GetProperty(i, XFA_ELEMENT_Corner, i == 0)); - if (corner || i == 0) { - strokes.SetAt(j, corner); - } else if (bNULL) { - strokes.SetAt(j, CXFA_Stroke(nullptr)); - } else if (i == 1) { - strokes.SetAt(j, strokes[0]); - } else if (i == 2) { - strokes.SetAt(j, strokes[0]); - } else { - strokes.SetAt(j, strokes[2]); - } - j++; - CXFA_Edge edge = CXFA_Edge(pNode->GetProperty(i, XFA_ELEMENT_Edge, i == 0)); - if (edge || i == 0) { - strokes.SetAt(j, edge); - } else if (bNULL) { - strokes.SetAt(j, CXFA_Stroke(nullptr)); - } else if (i == 1) { - strokes.SetAt(j, strokes[1]); - } else if (i == 2) { - strokes.SetAt(j, strokes[1]); - } else { - strokes.SetAt(j, strokes[3]); - } - j++; - } -} -void CXFA_Box::GetStrokes(CXFA_StrokeArray& strokes) const { - XFA_BOX_GetStrokes(m_pNode, strokes, FALSE); -} -FX_BOOL CXFA_Box::IsCircular() const { - if (!m_pNode) { - return FALSE; - } - return m_pNode->GetBoolean(XFA_ATTRIBUTE_Circular); -} -FX_BOOL CXFA_Box::GetStartAngle(FX_FLOAT& fStartAngle) const { - fStartAngle = 0; - if (!m_pNode) { - return FALSE; - } - CXFA_Measurement ms; - FX_BOOL bRet = m_pNode->TryMeasure(XFA_ATTRIBUTE_StartAngle, ms, FALSE); - if (bRet) { - fStartAngle = ms.GetValue(); - } - return bRet; -} -FX_BOOL CXFA_Box::GetSweepAngle(FX_FLOAT& fSweepAngle) const { - fSweepAngle = 360; - if (!m_pNode) { - return FALSE; - } - CXFA_Measurement ms; - FX_BOOL bRet = m_pNode->TryMeasure(XFA_ATTRIBUTE_SweepAngle, ms, FALSE); - if (bRet) { - fSweepAngle = ms.GetValue(); - } - return bRet; -} -CXFA_Fill CXFA_Box::GetFill(FX_BOOL bModified) const { - if (!m_pNode) { - return CXFA_Fill(nullptr); - } - CXFA_Node* pFillNode = m_pNode->GetProperty(0, XFA_ELEMENT_Fill, bModified); - return CXFA_Fill(pFillNode); -} -CXFA_Margin CXFA_Box::GetMargin() const { - return CXFA_Margin(m_pNode ? m_pNode->GetChild(0, XFA_ELEMENT_Margin) - : nullptr); -} -static FX_BOOL XFA_BOX_SameStyles(const CXFA_StrokeArray& strokes) { - int32_t iCount = strokes.GetSize(); - if (iCount < 1) { - return TRUE; - } - CXFA_Stroke stroke1 = strokes[0]; - for (int32_t i = 1; i < iCount; i++) { - CXFA_Stroke stroke2 = strokes[i]; - if (!stroke2) { - continue; - } - if (!stroke1) { - stroke1 = stroke2; - } else if (!stroke1.SameStyles(stroke2)) { - return FALSE; - } - } - return TRUE; -} -FX_BOOL CXFA_Box::SameStyles() const { - if (IsArc()) { - return TRUE; - } - CXFA_StrokeArray strokes; - XFA_BOX_GetStrokes(m_pNode, strokes, TRUE); - return XFA_BOX_SameStyles(strokes); -} -static int32_t XFA_BOX_3DStyle(const CXFA_StrokeArray& strokes, - CXFA_Stroke& stroke) { - int32_t iCount = strokes.GetSize(); - if (iCount < 1) { - return 0; - } - stroke = strokes[0]; - for (int32_t i = 1; i < iCount; i++) { - CXFA_Stroke find = strokes[i]; - if (!find) { - continue; - } - if (!stroke) { - stroke = find; - } else if (stroke.GetStrokeType() != find.GetStrokeType()) { - stroke = find; - break; - } - } - int32_t iType = stroke.GetStrokeType(); - if (iType == XFA_ATTRIBUTEENUM_Lowered || iType == XFA_ATTRIBUTEENUM_Raised || - iType == XFA_ATTRIBUTEENUM_Etched || - iType == XFA_ATTRIBUTEENUM_Embossed) { - return iType; - } - return 0; -} -int32_t CXFA_Box::Get3DStyle(FX_BOOL& bVisible, FX_FLOAT& fThickness) const { - if (IsArc()) { - return 0; - } - CXFA_StrokeArray strokes; - XFA_BOX_GetStrokes(m_pNode, strokes, TRUE); - CXFA_Stroke stroke(NULL); - int32_t iType = XFA_BOX_3DStyle(strokes, stroke); - if (iType) { - bVisible = stroke.IsVisible(); - fThickness = stroke.GetThickness(); - } - return iType; -} -int32_t CXFA_Stroke::GetPresence() const { - return m_pNode ? m_pNode->GetEnum(XFA_ATTRIBUTE_Presence) - : XFA_ATTRIBUTEENUM_Invisible; -} -int32_t CXFA_Stroke::GetCapType() const { - if (!m_pNode) { - return XFA_ATTRIBUTEENUM_Square; - } - return m_pNode->GetEnum(XFA_ATTRIBUTE_Cap); -} -int32_t CXFA_Stroke::GetStrokeType() const { - return m_pNode ? m_pNode->GetEnum(XFA_ATTRIBUTE_Stroke) - : XFA_ATTRIBUTEENUM_Solid; -} -FX_FLOAT CXFA_Stroke::GetThickness() const { - return GetMSThickness().ToUnit(XFA_UNIT_Pt); -} -CXFA_Measurement CXFA_Stroke::GetMSThickness() const { - return m_pNode ? m_pNode->GetMeasure(XFA_ATTRIBUTE_Thickness) - : XFA_GetAttributeDefaultValue_Measure(XFA_ELEMENT_Edge, - XFA_ATTRIBUTE_Thickness, - XFA_XDPPACKET_Form); -} -void CXFA_Stroke::SetThickness(FX_FLOAT fThickness) { - if (!m_pNode) { - return; - } - CXFA_Measurement thickness(fThickness, XFA_UNIT_Pt); - m_pNode->SetMeasure(XFA_ATTRIBUTE_Thickness, thickness); -} -void CXFA_Stroke::SetMSThickness(CXFA_Measurement msThinkness) { - if (!m_pNode) { - return; - } - m_pNode->SetMeasure(XFA_ATTRIBUTE_Thickness, msThinkness); -} -FX_ARGB CXFA_Stroke::GetColor() const { - if (!m_pNode) { - return 0xFF000000; - } - CXFA_Node* pNode = m_pNode->GetChild(0, XFA_ELEMENT_Color); - if (!pNode) { - return 0xFF000000; - } - CFX_WideStringC wsColor; - pNode->TryCData(XFA_ATTRIBUTE_Value, wsColor); - return XFA_WStringToColor(wsColor); -} -void CXFA_Stroke::SetColor(FX_ARGB argb) { - if (!m_pNode) { - return; - } - CXFA_Node* pNode = m_pNode->GetProperty(0, XFA_ELEMENT_Color); - CFX_WideString wsColor; - int a, r, g, b; - ArgbDecode(argb, a, r, g, b); - wsColor.Format(L"%d,%d,%d", r, g, b); - pNode->SetCData(XFA_ATTRIBUTE_Value, wsColor); -} -int32_t CXFA_Stroke::GetJoinType() const { - return m_pNode ? m_pNode->GetEnum(XFA_ATTRIBUTE_Join) - : XFA_ATTRIBUTEENUM_Square; -} -FX_BOOL CXFA_Stroke::IsInverted() const { - return m_pNode ? m_pNode->GetBoolean(XFA_ATTRIBUTE_Inverted) : FALSE; -} -FX_FLOAT CXFA_Stroke::GetRadius() const { - return m_pNode ? m_pNode->GetMeasure(XFA_ATTRIBUTE_Radius).ToUnit(XFA_UNIT_Pt) - : 0; -} -FX_BOOL CXFA_Stroke::SameStyles(CXFA_Stroke stroke, FX_DWORD dwFlags) const { - if (m_pNode == stroke.GetNode()) { - return TRUE; - } - if (FXSYS_fabs(GetThickness() - stroke.GetThickness()) >= 0.01f) { - return FALSE; - } - if ((dwFlags & XFA_STROKE_SAMESTYLE_NoPresence) == 0 && - IsVisible() != stroke.IsVisible()) { - return FALSE; - } - if (GetStrokeType() != stroke.GetStrokeType()) { - return FALSE; - } - if (GetColor() != stroke.GetColor()) { - return FALSE; - } - if ((dwFlags & XFA_STROKE_SAMESTYLE_Corner) != 0 && - FXSYS_fabs(GetRadius() - stroke.GetRadius()) >= 0.01f) { - return FALSE; - } - return TRUE; -} -FX_FLOAT XFA_GetEdgeThickness(const CXFA_StrokeArray& strokes, - FX_BOOL b3DStyle, - int32_t nIndex) { - FX_FLOAT fThickness = 0; - { - if (strokes[nIndex * 2 + 1].GetPresence() == XFA_ATTRIBUTEENUM_Visible) { - if (nIndex == 0) { - fThickness += 2.5f; - } - fThickness += strokes[nIndex * 2 + 1].GetThickness() * (b3DStyle ? 4 : 2); - } - } - return fThickness; -} -CXFA_WidgetData::CXFA_WidgetData(CXFA_Node* pNode) - : CXFA_Data(pNode), - m_bIsNull(TRUE), - m_bPreNull(TRUE), - m_pUiChildNode(NULL), - m_eUIType(XFA_ELEMENT_UNKNOWN) {} -CXFA_Node* CXFA_WidgetData::GetUIChild() { - if (m_eUIType == XFA_ELEMENT_UNKNOWN) { - m_pUiChildNode = XFA_CreateUIChild(m_pNode, m_eUIType); - } - return m_pUiChildNode; -} -XFA_ELEMENT CXFA_WidgetData::GetUIType() { - GetUIChild(); - return m_eUIType; -} -CFX_WideString CXFA_WidgetData::GetRawValue() { - return m_pNode->GetContent(); -} -int32_t CXFA_WidgetData::GetAccess(FX_BOOL bTemplate) { - if (bTemplate) { - CXFA_Node* pNode = m_pNode->GetTemplateNode(); - if (pNode) { - return pNode->GetEnum(XFA_ATTRIBUTE_Access); - } - return XFA_ATTRIBUTEENUM_Open; - } - CXFA_Node* pNode = m_pNode; - while (pNode) { - int32_t iAcc = pNode->GetEnum(XFA_ATTRIBUTE_Access); - if (iAcc != XFA_ATTRIBUTEENUM_Open) { - return iAcc; - } - pNode = - pNode->GetNodeItem(XFA_NODEITEM_Parent, XFA_OBJECTTYPE_ContainerNode); - } - return XFA_ATTRIBUTEENUM_Open; -} -FX_BOOL CXFA_WidgetData::GetAccessKey(CFX_WideStringC& wsAccessKey) { - return m_pNode->TryCData(XFA_ATTRIBUTE_AccessKey, wsAccessKey); -} -int32_t CXFA_WidgetData::GetAnchorType() { - return m_pNode->GetEnum(XFA_ATTRIBUTE_AnchorType); -} -int32_t CXFA_WidgetData::GetColSpan() { - return m_pNode->GetInteger(XFA_ATTRIBUTE_ColSpan); -} -int32_t CXFA_WidgetData::GetPresence() { - return m_pNode->GetEnum(XFA_ATTRIBUTE_Presence); - CXFA_Node* pNode = m_pNode; - while (pNode && pNode->GetObjectType() == XFA_OBJECTTYPE_ContainerNode) { - int32_t iAcc = pNode->GetEnum(XFA_ATTRIBUTE_Presence); - if (iAcc != XFA_ATTRIBUTEENUM_Visible) { - return iAcc; - } - pNode = pNode->GetNodeItem(XFA_NODEITEM_Parent); - } - return XFA_ATTRIBUTEENUM_Visible; -} -int32_t CXFA_WidgetData::GetRotate() { - CXFA_Measurement ms; - if (!m_pNode->TryMeasure(XFA_ATTRIBUTE_Rotate, ms, FALSE)) { - return 0; - } - int32_t iRotate = FXSYS_round(ms.GetValue()); - iRotate = XFA_MapRotation(iRotate); - return iRotate / 90 * 90; -} -CXFA_Border CXFA_WidgetData::GetBorder(FX_BOOL bModified) { - return CXFA_Border(m_pNode->GetProperty(0, XFA_ELEMENT_Border, bModified)); -} -CXFA_Caption CXFA_WidgetData::GetCaption(FX_BOOL bModified) { - return CXFA_Caption(m_pNode->GetProperty(0, XFA_ELEMENT_Caption, bModified)); -} -CXFA_Font CXFA_WidgetData::GetFont(FX_BOOL bModified) { - return CXFA_Font(m_pNode->GetProperty(0, XFA_ELEMENT_Font, bModified)); -} -CXFA_Margin CXFA_WidgetData::GetMargin(FX_BOOL bModified) { - return CXFA_Margin(m_pNode->GetProperty(0, XFA_ELEMENT_Margin, bModified)); -} -CXFA_Para CXFA_WidgetData::GetPara(FX_BOOL bModified) { - return CXFA_Para(m_pNode->GetProperty(0, XFA_ELEMENT_Para, bModified)); -} -CXFA_Keep CXFA_WidgetData::GetKeep(FX_BOOL bModified) { - return CXFA_Keep(m_pNode->GetProperty(0, XFA_ELEMENT_Keep, bModified), - m_pNode); -} -void CXFA_WidgetData::GetEventList(CXFA_NodeArray& events) { - m_pNode->GetNodeList(events, 0, XFA_ELEMENT_Event); -} -int32_t CXFA_WidgetData::GetEventByActivity(int32_t iActivity, - CXFA_NodeArray& events, - FX_BOOL bIsFormReady) { - CXFA_NodeArray allEvents; - GetEventList(allEvents); - int32_t iCount = allEvents.GetSize(); - for (int32_t i = 0; i < iCount; i++) { - CXFA_Event event(allEvents[i]); - if (event.GetActivity() == iActivity) { - if (iActivity == XFA_ATTRIBUTEENUM_Ready) { - CFX_WideStringC wsRef; - event.GetRef(wsRef); - if (bIsFormReady) { - if (wsRef == CFX_WideStringC(L"$form")) { - events.Add(allEvents[i]); - } - } else { - if (wsRef == CFX_WideStringC(L"$layout")) { - events.Add(allEvents[i]); - } - } - } else { - events.Add(allEvents[i]); - } - } - } - return events.GetSize(); -} -CXFA_Value CXFA_WidgetData::GetDefaultValue(FX_BOOL bModified) { - CXFA_Node* pTemNode = m_pNode->GetTemplateNode(); - return CXFA_Value(pTemNode - ? pTemNode->GetProperty(0, XFA_ELEMENT_Value, bModified) - : nullptr); -} -CXFA_Value CXFA_WidgetData::GetFormValue(FX_BOOL bModified) { - return CXFA_Value(m_pNode->GetProperty(0, XFA_ELEMENT_Value, bModified)); -} -CXFA_Calculate CXFA_WidgetData::GetCalculate(FX_BOOL bModified) { - return CXFA_Calculate( - m_pNode->GetProperty(0, XFA_ELEMENT_Calculate, bModified)); -} -CXFA_Validate CXFA_WidgetData::GetValidate(FX_BOOL bModified) { - return CXFA_Validate( - m_pNode->GetProperty(0, XFA_ELEMENT_Validate, bModified)); -} -CXFA_Variables CXFA_WidgetData::GetVariables(FX_BOOL bModified) { - return CXFA_Variables( - m_pNode->GetProperty(0, XFA_ELEMENT_Variables, bModified)); -} -CXFA_Bind CXFA_WidgetData::GetBind(FX_BOOL bModified) { - return CXFA_Bind(m_pNode->GetProperty(0, XFA_ELEMENT_Bind, bModified)); -} -CXFA_Assist CXFA_WidgetData::GetAssist(FX_BOOL bModified) { - return CXFA_Assist(m_pNode->GetProperty(0, XFA_ELEMENT_Assist, bModified)); -} -void CXFA_WidgetData::GetRelevant(CFX_WideStringC& wsRelevant) { - m_pNode->TryCData(XFA_ATTRIBUTE_Relevant, wsRelevant); -} -FX_BOOL CXFA_WidgetData::GetWidth(FX_FLOAT& fWidth) { - return TryMeasure(XFA_ATTRIBUTE_W, fWidth); -} -FX_BOOL CXFA_WidgetData::GetHeight(FX_FLOAT& fHeight) { - return TryMeasure(XFA_ATTRIBUTE_H, fHeight); -} -FX_BOOL CXFA_WidgetData::GetMinWidth(FX_FLOAT& fMinWidth) { - return TryMeasure(XFA_ATTRIBUTE_MinW, fMinWidth); -} -FX_BOOL CXFA_WidgetData::GetMinHeight(FX_FLOAT& fMinHeight) { - return TryMeasure(XFA_ATTRIBUTE_MinH, fMinHeight); -} -FX_BOOL CXFA_WidgetData::GetMaxWidth(FX_FLOAT& fMaxWidth) { - return TryMeasure(XFA_ATTRIBUTE_MaxW, fMaxWidth); -} -FX_BOOL CXFA_WidgetData::GetMaxHeight(FX_FLOAT& fMaxHeight) { - return TryMeasure(XFA_ATTRIBUTE_MaxH, fMaxHeight); -} -CXFA_BindItems CXFA_WidgetData::GetBindItems() { - return CXFA_BindItems(m_pNode->GetChild(0, XFA_ELEMENT_BindItems)); -} -FX_BOOL CXFA_WidgetData::SetAccess(int32_t iAccess, FX_BOOL bNotify) { - return m_pNode->SetEnum(XFA_ATTRIBUTE_Access, (XFA_ATTRIBUTEENUM)iAccess, - bNotify); -} -FX_BOOL CXFA_WidgetData::SetAccessKey(const CFX_WideString& wsAccessKey) { - return m_pNode->SetCData(XFA_ATTRIBUTE_AccessKey, wsAccessKey); -} -FX_BOOL CXFA_WidgetData::SetAnchorType(int32_t iType) { - return m_pNode->SetEnum(XFA_ATTRIBUTE_AnchorType, (XFA_ATTRIBUTEENUM)iType); -} -FX_BOOL CXFA_WidgetData::SetColSpan(int32_t iColSpan) { - return m_pNode->SetInteger(XFA_ATTRIBUTE_ColSpan, - (XFA_ATTRIBUTEENUM)iColSpan); -} -FX_BOOL CXFA_WidgetData::SetPresence(int32_t iPresence) { - return m_pNode->SetEnum(XFA_ATTRIBUTE_Presence, (XFA_ATTRIBUTEENUM)iPresence); -} -FX_BOOL CXFA_WidgetData::SetRotate(int32_t iRotate) { - iRotate = XFA_MapRotation(iRotate); - CXFA_Measurement ms((FX_FLOAT)iRotate, XFA_UNIT_Angle); - return m_pNode->SetMeasure(XFA_ATTRIBUTE_Rotate, ms); -} -FX_BOOL CXFA_WidgetData::SetRelevant(const CFX_WideString& wsRelevant) { - return m_pNode->SetCData(XFA_ATTRIBUTE_Relevant, wsRelevant); -} -FX_BOOL CXFA_WidgetData::SetStatus(FX_DWORD dwStatus) { - return FALSE; -} -FX_BOOL CXFA_WidgetData::SetWidth(FX_FLOAT fWidth) { - return SetMeasure(XFA_ATTRIBUTE_W, fWidth); -} -FX_BOOL CXFA_WidgetData::SetHeight(FX_FLOAT fHeight) { - return SetMeasure(XFA_ATTRIBUTE_H, fHeight); -} -FX_BOOL CXFA_WidgetData::SetMinWidth(FX_FLOAT fMinWidth) { - return SetMeasure(XFA_ATTRIBUTE_MinW, fMinWidth); -} -FX_BOOL CXFA_WidgetData::SetMinHeight(FX_FLOAT fMinHeight) { - return SetMeasure(XFA_ATTRIBUTE_MinH, fMinHeight); -} -FX_BOOL CXFA_WidgetData::SetMaxWidth(FX_FLOAT fMaxWidth) { - return SetMeasure(XFA_ATTRIBUTE_MaxW, fMaxWidth); -} -FX_BOOL CXFA_WidgetData::SetMaxHeight(FX_FLOAT fMaxHeight) { - return SetMeasure(XFA_ATTRIBUTE_MaxH, fMaxHeight); -} -FX_BOOL CXFA_WidgetData::SetPos(FX_FLOAT x, FX_FLOAT y) { - return SetMeasure(XFA_ATTRIBUTE_X, x) && SetMeasure(XFA_ATTRIBUTE_Y, y); -} -FX_BOOL CXFA_WidgetData::SetName(const CFX_WideString& wsName) { - return m_pNode->SetCData(XFA_ATTRIBUTE_Name, wsName); -} -FX_BOOL CXFA_WidgetData::SetButtonHighlight(int32_t iButtonHighlight) { - CXFA_Node* pUiChildNode = GetUIChild(); - return pUiChildNode->SetEnum(XFA_ATTRIBUTE_Highlight, - (XFA_ATTRIBUTEENUM)iButtonHighlight); -} -FX_BOOL CXFA_WidgetData::SetButtonRollover(const CFX_WideString& wsRollover, - FX_BOOL bRichText) { - return FALSE; -} -FX_BOOL CXFA_WidgetData::SetButtonDown(const CFX_WideString& wsDown, - FX_BOOL bRichText) { - return FALSE; -} -FX_BOOL CXFA_WidgetData::SetCheckButtonShape(int32_t iCheckButtonShape) { - CXFA_Node* pUiChildNode = GetUIChild(); - return pUiChildNode->SetEnum(XFA_ATTRIBUTE_Shape, - (XFA_ATTRIBUTEENUM)iCheckButtonShape); -} -FX_BOOL CXFA_WidgetData::SetCheckButtonMark(int32_t iCheckButtonMark) { - CXFA_Node* pUiChildNode = GetUIChild(); - return pUiChildNode->SetEnum(XFA_ATTRIBUTE_Mark, - (XFA_ATTRIBUTEENUM)iCheckButtonMark); -} -FX_BOOL CXFA_WidgetData::SetCheckButtonSize(FX_FLOAT fCheckButtonMark) { - CXFA_Node* pUiChildNode = GetUIChild(); - if (pUiChildNode) { - CXFA_Measurement ms(fCheckButtonMark, XFA_UNIT_Pt); - return pUiChildNode->SetMeasure(XFA_ATTRIBUTE_Size, ms); - } - return FALSE; -} -CXFA_Border CXFA_WidgetData::GetUIBorder(FX_BOOL bModified) { - CXFA_Node* pUIChild = GetUIChild(); - return CXFA_Border( - pUIChild ? pUIChild->GetProperty(0, XFA_ELEMENT_Border, bModified) - : nullptr); -} -CXFA_Margin CXFA_WidgetData::GetUIMargin(FX_BOOL bModified) { - CXFA_Node* pUIChild = GetUIChild(); - return CXFA_Margin( - pUIChild ? pUIChild->GetProperty(0, XFA_ELEMENT_Margin, bModified) - : nullptr); -} -void CXFA_WidgetData::GetUIMargin(CFX_RectF& rtUIMargin) { - rtUIMargin.Reset(); - CXFA_Margin mgUI = GetUIMargin(); - if (!mgUI) { - return; - } - CXFA_Border border = GetUIBorder(); - if (border && border.GetPresence() != XFA_ATTRIBUTEENUM_Visible) { - return; - } - FX_FLOAT fLeftInset, fTopInset, fRightInset, fBottomInset; - FX_BOOL bLeft = mgUI.GetLeftInset(fLeftInset); - FX_BOOL bTop = mgUI.GetTopInset(fTopInset); - FX_BOOL bRight = mgUI.GetRightInset(fRightInset); - FX_BOOL bBottom = mgUI.GetBottomInset(fBottomInset); - if (border) { - FX_BOOL bVisible = FALSE; - FX_FLOAT fThickness = 0; - border.Get3DStyle(bVisible, fThickness); - if (!bLeft || !bTop || !bRight || !bBottom) { - CXFA_StrokeArray strokes; - border.GetStrokes(strokes); - if (!bTop) { - fTopInset = XFA_GetEdgeThickness(strokes, bVisible, 0); - } - if (!bRight) { - fRightInset = XFA_GetEdgeThickness(strokes, bVisible, 1); - } - if (!bBottom) { - fBottomInset = XFA_GetEdgeThickness(strokes, bVisible, 2); - } - if (!bLeft) { - fLeftInset = XFA_GetEdgeThickness(strokes, bVisible, 3); - } - } - } - rtUIMargin.Set(fLeftInset, fTopInset, fRightInset, fBottomInset); -} -int32_t CXFA_WidgetData::GetButtonHighlight() { - CXFA_Node* pUIChild = GetUIChild(); - if (pUIChild) { - return pUIChild->GetEnum(XFA_ATTRIBUTE_Highlight); - } - return XFA_GetAttributeDefaultValue_Enum( - XFA_ELEMENT_Button, XFA_ATTRIBUTE_Highlight, XFA_XDPPACKET_Form); -} -FX_BOOL CXFA_WidgetData::GetButtonRollover(CFX_WideString& wsRollover, - FX_BOOL& bRichText) { - if (CXFA_Node* pItems = m_pNode->GetChild(0, XFA_ELEMENT_Items)) { - CXFA_Node* pText = pItems->GetNodeItem(XFA_NODEITEM_FirstChild); - while (pText) { - CFX_WideStringC wsName; - pText->TryCData(XFA_ATTRIBUTE_Name, wsName); - if (wsName == FX_WSTRC(L"rollover")) { - pText->TryContent(wsRollover); - bRichText = pText->GetClassID() == XFA_ELEMENT_ExData; - return !wsRollover.IsEmpty(); - } - pText = pText->GetNodeItem(XFA_NODEITEM_NextSibling); - } - } - return FALSE; -} -FX_BOOL CXFA_WidgetData::GetButtonDown(CFX_WideString& wsDown, - FX_BOOL& bRichText) { - if (CXFA_Node* pItems = m_pNode->GetChild(0, XFA_ELEMENT_Items)) { - CXFA_Node* pText = pItems->GetNodeItem(XFA_NODEITEM_FirstChild); - while (pText) { - CFX_WideStringC wsName; - pText->TryCData(XFA_ATTRIBUTE_Name, wsName); - if (wsName == FX_WSTRC(L"down")) { - pText->TryContent(wsDown); - bRichText = pText->GetClassID() == XFA_ELEMENT_ExData; - return !wsDown.IsEmpty(); - } - pText = pText->GetNodeItem(XFA_NODEITEM_NextSibling); - } - } - return FALSE; -} -int32_t CXFA_WidgetData::GetCheckButtonShape() { - CXFA_Node* pUIChild = GetUIChild(); - if (pUIChild) { - return pUIChild->GetEnum(XFA_ATTRIBUTE_Shape); - } - return XFA_GetAttributeDefaultValue_Enum( - XFA_ELEMENT_CheckButton, XFA_ATTRIBUTE_Shape, XFA_XDPPACKET_Form); -} -int32_t CXFA_WidgetData::GetCheckButtonMark() { - CXFA_Node* pUIChild = GetUIChild(); - if (pUIChild) { - return pUIChild->GetEnum(XFA_ATTRIBUTE_Mark); - } - return XFA_GetAttributeDefaultValue_Enum( - XFA_ELEMENT_CheckButton, XFA_ATTRIBUTE_Mark, XFA_XDPPACKET_Form); -} -FX_BOOL CXFA_WidgetData::IsRadioButton() { - if (CXFA_Node* pParent = m_pNode->GetNodeItem(XFA_NODEITEM_Parent)) { - return pParent->GetClassID() == XFA_ELEMENT_ExclGroup; - } - return FALSE; -} -FX_FLOAT CXFA_WidgetData::GetCheckButtonSize() { - CXFA_Node* pUIChild = GetUIChild(); - if (pUIChild) { - return pUIChild->GetMeasure(XFA_ATTRIBUTE_Size).ToUnit(XFA_UNIT_Pt); - } - return XFA_GetAttributeDefaultValue_Measure( - XFA_ELEMENT_CheckButton, XFA_ATTRIBUTE_Size, XFA_XDPPACKET_Form) - .ToUnit(XFA_UNIT_Pt); -} -FX_BOOL CXFA_WidgetData::IsAllowNeutral() { - CXFA_Node* pUIChild = GetUIChild(); - if (pUIChild) { - return pUIChild->GetBoolean(XFA_ATTRIBUTE_AllowNeutral); - } - return XFA_GetAttributeDefaultValue_Boolean( - XFA_ELEMENT_CheckButton, XFA_ATTRIBUTE_AllowNeutral, XFA_XDPPACKET_Form); -} -XFA_CHECKSTATE CXFA_WidgetData::GetCheckState() { - CFX_WideString wsValue = GetRawValue(); - if (wsValue.IsEmpty()) { - return XFA_CHECKSTATE_Off; - } - if (CXFA_Node* pItems = m_pNode->GetChild(0, XFA_ELEMENT_Items)) { - CXFA_Node* pText = pItems->GetNodeItem(XFA_NODEITEM_FirstChild); - int32_t i = 0; - while (pText) { - CFX_WideString wsContent; - if (pText->TryContent(wsContent) && (wsContent == wsValue)) { - return (XFA_CHECKSTATE)i; - } - i++; - pText = pText->GetNodeItem(XFA_NODEITEM_NextSibling); - } - } - return XFA_CHECKSTATE_Off; -} -void CXFA_WidgetData::SetCheckState(XFA_CHECKSTATE eCheckState, - FX_BOOL bNotify) { - CXFA_WidgetData exclGroup(GetExclGroupNode()); - if (exclGroup) { - CFX_WideString wsValue; - if (eCheckState != XFA_CHECKSTATE_Off) { - if (CXFA_Node* pItems = m_pNode->GetChild(0, XFA_ELEMENT_Items)) { - CXFA_Node* pText = pItems->GetNodeItem(XFA_NODEITEM_FirstChild); - if (pText) { - pText->TryContent(wsValue); - } - } - } - CXFA_Node* pChild = - exclGroup.GetNode()->GetNodeItem(XFA_NODEITEM_FirstChild); - for (; pChild; pChild = pChild->GetNodeItem(XFA_NODEITEM_NextSibling)) { - if (pChild->GetClassID() != XFA_ELEMENT_Field) { - continue; - } - CXFA_Node* pItem = pChild->GetChild(0, XFA_ELEMENT_Items); - if (!pItem) { - continue; - } - CXFA_Node* pItemchild = pItem->GetNodeItem(XFA_NODEITEM_FirstChild); - if (!pItemchild) { - continue; - } - CFX_WideString text = pItemchild->GetContent(); - CFX_WideString wsChildValue = text; - if (wsValue != text) { - pItemchild = pItemchild->GetNodeItem(XFA_NODEITEM_NextSibling); - if (pItemchild) { - wsChildValue = pItemchild->GetContent(); - } else { - wsChildValue.Empty(); - } - } - CXFA_WidgetData ch(pChild); - ch.SyncValue(wsChildValue, bNotify); - } - exclGroup.SyncValue(wsValue, bNotify); - } else { - CXFA_Node* pItems = m_pNode->GetChild(0, XFA_ELEMENT_Items); - if (!pItems) { - return; - } - int32_t i = -1; - CXFA_Node* pText = pItems->GetNodeItem(XFA_NODEITEM_FirstChild); - CFX_WideString wsContent; - while (pText) { - i++; - if (i == eCheckState) { - pText->TryContent(wsContent); - break; - } - pText = pText->GetNodeItem(XFA_NODEITEM_NextSibling); - } - SyncValue(wsContent, bNotify); - } -} -CXFA_Node* CXFA_WidgetData::GetExclGroupNode() { - CXFA_Node* pExcl = ToNode(m_pNode->GetNodeItem(XFA_NODEITEM_Parent)); - if (!pExcl || pExcl->GetClassID() != XFA_ELEMENT_ExclGroup) { - return NULL; - } - return pExcl; -} -CXFA_Node* CXFA_WidgetData::GetSelectedMember() { - CXFA_Node* pSelectedMember = NULL; - CFX_WideString wsState = GetRawValue(); - if (wsState.IsEmpty()) { - return pSelectedMember; - } - for (CXFA_Node* pNode = ToNode(m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild)); - pNode; pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { - CXFA_WidgetData widgetData(pNode); - if (widgetData.GetCheckState() == XFA_CHECKSTATE_On) { - pSelectedMember = pNode; - break; - } - } - return pSelectedMember; -} -CXFA_Node* CXFA_WidgetData::SetSelectedMember(const CFX_WideStringC& wsName, - FX_BOOL bNotify) { - CXFA_Node* pSelectedMember = NULL; - FX_DWORD nameHash = - FX_HashCode_String_GetW(wsName.GetPtr(), wsName.GetLength()); - for (CXFA_Node* pNode = ToNode(m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild)); - pNode; pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { - if (pNode->GetNameHash() == nameHash) { - CXFA_WidgetData widgetData(pNode); - widgetData.SetCheckState(XFA_CHECKSTATE_On, bNotify); - pSelectedMember = pNode; - break; - } - } - return pSelectedMember; -} -void CXFA_WidgetData::SetSelectedMemberByValue(const CFX_WideStringC& wsValue, - FX_BOOL bNotify, - FX_BOOL bScriptModify, - FX_BOOL bSyncData) { - CFX_WideString wsExclGroup; - for (CXFA_Node* pNode = m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild); pNode; - pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { - if (pNode->GetClassID() != XFA_ELEMENT_Field) { - continue; - } - CXFA_Node* pItem = pNode->GetChild(0, XFA_ELEMENT_Items); - if (!pItem) { - continue; - } - CXFA_Node* pItemchild = pItem->GetNodeItem(XFA_NODEITEM_FirstChild); - if (!pItemchild) { - continue; - } - CFX_WideString wsChildValue = pItemchild->GetContent(); - if (wsValue != wsChildValue) { - pItemchild = pItemchild->GetNodeItem(XFA_NODEITEM_NextSibling); - if (pItemchild) { - wsChildValue = pItemchild->GetContent(); - } else { - wsChildValue.Empty(); - } - } else { - wsExclGroup = wsValue; - } - pNode->SetContent(wsChildValue, wsChildValue, bNotify, bScriptModify, - FALSE); - } - if (m_pNode) { - m_pNode->SetContent(wsExclGroup, wsExclGroup, bNotify, bScriptModify, - bSyncData); - } -} -CXFA_Node* CXFA_WidgetData::GetExclGroupFirstMember() { - CXFA_Node* pExcl = GetNode(); - if (!pExcl) { - return NULL; - } - CXFA_Node* pNode = pExcl->GetNodeItem(XFA_NODEITEM_FirstChild); - while (pNode) { - if (pNode->GetClassID() == XFA_ELEMENT_Field) { - return pNode; - } - pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling); - } - return NULL; -} -CXFA_Node* CXFA_WidgetData::GetExclGroupNextMember(CXFA_Node* pNode) { - if (!pNode) { - return NULL; - } - CXFA_Node* pNodeField = pNode->GetNodeItem(XFA_NODEITEM_NextSibling); - while (pNodeField) { - if (pNodeField->GetClassID() == XFA_ELEMENT_Field) { - return pNodeField; - } - pNodeField = pNodeField->GetNodeItem(XFA_NODEITEM_NextSibling); - } - return NULL; -} -int32_t CXFA_WidgetData::GetChoiceListCommitOn() { - CXFA_Node* pUIChild = GetUIChild(); - if (pUIChild) { - return pUIChild->GetEnum(XFA_ATTRIBUTE_CommitOn); - } - return XFA_GetAttributeDefaultValue_Enum( - XFA_ELEMENT_ChoiceList, XFA_ATTRIBUTE_CommitOn, XFA_XDPPACKET_Form); -} -FX_BOOL CXFA_WidgetData::IsChoiceListAllowTextEntry() { - CXFA_Node* pUIChild = GetUIChild(); - if (pUIChild) { - return pUIChild->GetBoolean(XFA_ATTRIBUTE_TextEntry); - } - return XFA_GetAttributeDefaultValue_Boolean( - XFA_ELEMENT_ChoiceList, XFA_ATTRIBUTE_TextEntry, XFA_XDPPACKET_Form); -} -int32_t CXFA_WidgetData::GetChoiceListOpen() { - CXFA_Node* pUIChild = GetUIChild(); - if (pUIChild) { - return pUIChild->GetEnum(XFA_ATTRIBUTE_Open); - } - return XFA_GetAttributeDefaultValue_Enum( - XFA_ELEMENT_ChoiceList, XFA_ATTRIBUTE_Open, XFA_XDPPACKET_Form); -} -FX_BOOL CXFA_WidgetData::IsListBox() { - int32_t iOpenMode = GetChoiceListOpen(); - return (iOpenMode == XFA_ATTRIBUTEENUM_Always || - iOpenMode == XFA_ATTRIBUTEENUM_MultiSelect); -} -int32_t CXFA_WidgetData::CountChoiceListItems(FX_BOOL bSaveValue) { - CXFA_NodeArray pItems; - CXFA_Node* pItem = NULL; - int32_t iCount = 0; - CXFA_Node* pNode = m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild); - for (; pNode; pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { - if (pNode->GetClassID() != XFA_ELEMENT_Items) { - continue; - } - iCount++; - pItems.Add(pNode); - if (iCount == 2) { - break; - } - } - if (iCount == 0) { - return 0; - } - pItem = pItems[0]; - if (iCount > 1) { - FX_BOOL bItemOneHasSave = pItems[0]->GetBoolean(XFA_ATTRIBUTE_Save); - FX_BOOL bItemTwoHasSave = pItems[1]->GetBoolean(XFA_ATTRIBUTE_Save); - if (bItemOneHasSave != bItemTwoHasSave && bSaveValue == bItemTwoHasSave) { - pItem = pItems[1]; - } - } - pItems.RemoveAll(); - return pItem->CountChildren(XFA_ELEMENT_UNKNOWN); -} -FX_BOOL CXFA_WidgetData::GetChoiceListItem(CFX_WideString& wsText, - int32_t nIndex, - FX_BOOL bSaveValue) { - wsText.Empty(); - CXFA_NodeArray pItemsArray; - CXFA_Node* pItems = NULL; - int32_t iCount = 0; - CXFA_Node* pNode = m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild); - for (; pNode; pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { - if (pNode->GetClassID() != XFA_ELEMENT_Items) { - continue; - } - iCount++; - pItemsArray.Add(pNode); - if (iCount == 2) { - break; - } - } - if (iCount == 0) { - return FALSE; - } - pItems = pItemsArray[0]; - if (iCount > 1) { - FX_BOOL bItemOneHasSave = pItemsArray[0]->GetBoolean(XFA_ATTRIBUTE_Save); - FX_BOOL bItemTwoHasSave = pItemsArray[1]->GetBoolean(XFA_ATTRIBUTE_Save); - if (bItemOneHasSave != bItemTwoHasSave && bSaveValue == bItemTwoHasSave) { - pItems = pItemsArray[1]; - } - } - if (pItems) { - CXFA_Node* pItem = pItems->GetChild(nIndex, XFA_ELEMENT_UNKNOWN); - if (pItem) { - pItem->TryContent(wsText); - return TRUE; - } - } - return FALSE; -} -void CXFA_WidgetData::GetChoiceListItems(CFX_WideStringArray& wsTextArray, - FX_BOOL bSaveValue) { - CXFA_NodeArray pItems; - CXFA_Node* pItem = NULL; - int32_t iCount = 0; - CXFA_Node* pNode = m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild); - for (; pNode; pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { - if (pNode->GetClassID() != XFA_ELEMENT_Items) { - continue; - } - iCount++; - pItems.Add(pNode); - if (iCount == 2) { - break; - } - } - if (iCount == 0) { - return; - } - pItem = pItems[0]; - if (iCount > 1) { - FX_BOOL bItemOneHasSave = pItems[0]->GetBoolean(XFA_ATTRIBUTE_Save); - FX_BOOL bItemTwoHasSave = pItems[1]->GetBoolean(XFA_ATTRIBUTE_Save); - if (bItemOneHasSave != bItemTwoHasSave && bSaveValue == bItemTwoHasSave) { - pItem = pItems[1]; - } - } - pItems.RemoveAll(); - pNode = pItem->GetNodeItem(XFA_NODEITEM_FirstChild); - for (; pNode; pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { - pNode->TryContent(wsTextArray.Add()); - } -} -int32_t CXFA_WidgetData::CountSelectedItems() { - CFX_WideStringArray wsValueArray; - GetSelectedItemsValue(wsValueArray); - if (IsListBox() || !IsChoiceListAllowTextEntry()) { - return wsValueArray.GetSize(); - } - int32_t iSelected = 0; - CFX_WideStringArray wsSaveTextArray; - GetChoiceListItems(wsSaveTextArray, TRUE); - int32_t iValues = wsValueArray.GetSize(); - for (int32_t i = 0; i < iValues; i++) { - int32_t iSaves = wsSaveTextArray.GetSize(); - for (int32_t j = 0; j < iSaves; j++) { - if (wsValueArray[i] == wsSaveTextArray[j]) { - iSelected++; - break; - } - } - } - return iSelected; -} -int32_t CXFA_WidgetData::GetSelectedItem(int32_t nIndex) { - CFX_WideStringArray wsValueArray; - GetSelectedItemsValue(wsValueArray); - CFX_WideStringArray wsSaveTextArray; - GetChoiceListItems(wsSaveTextArray, TRUE); - int32_t iSaves = wsSaveTextArray.GetSize(); - for (int32_t j = 0; j < iSaves; j++) { - if (wsValueArray[nIndex] == wsSaveTextArray[j]) { - return j; - } - } - return -1; -} -void CXFA_WidgetData::GetSelectedItems(CFX_Int32Array& iSelArray) { - CFX_WideStringArray wsValueArray; - GetSelectedItemsValue(wsValueArray); - int32_t iValues = wsValueArray.GetSize(); - if (iValues < 1) { - return; - } - CFX_WideStringArray wsSaveTextArray; - GetChoiceListItems(wsSaveTextArray, TRUE); - int32_t iSaves = wsSaveTextArray.GetSize(); - for (int32_t i = 0; i < iValues; i++) { - for (int32_t j = 0; j < iSaves; j++) { - if (wsValueArray[i] == wsSaveTextArray[j]) { - iSelArray.Add(j); - break; - } - } - } -} -void CXFA_WidgetData::GetSelectedItemsValue( - CFX_WideStringArray& wsSelTextArray) { - CFX_WideString wsValue = GetRawValue(); - if (GetChoiceListOpen() == XFA_ATTRIBUTEENUM_MultiSelect) { - if (!wsValue.IsEmpty()) { - int32_t iStart = 0; - int32_t iLength = wsValue.GetLength(); - int32_t iEnd = wsValue.Find(L'\n', iStart); - iEnd = (iEnd == -1) ? iLength : iEnd; - while (iEnd >= iStart) { - wsSelTextArray.Add(wsValue.Mid(iStart, iEnd - iStart)); - iStart = iEnd + 1; - if (iStart >= iLength) { - break; - } - iEnd = wsValue.Find(L'\n', iStart); - if (iEnd < 0) { - wsSelTextArray.Add(wsValue.Mid(iStart, iLength - iStart)); - } - } - } - } else { - wsSelTextArray.Add(wsValue); - } -} -FX_BOOL CXFA_WidgetData::GetItemState(int32_t nIndex) { - if (nIndex < 0) { - return FALSE; - } - CFX_WideStringArray wsSaveTextArray; - GetChoiceListItems(wsSaveTextArray, TRUE); - if (wsSaveTextArray.GetSize() <= nIndex) { - return FALSE; - } - CFX_WideStringArray wsValueArray; - GetSelectedItemsValue(wsValueArray); - int32_t iValues = wsValueArray.GetSize(); - for (int32_t j = 0; j < iValues; j++) { - if (wsValueArray[j] == wsSaveTextArray[nIndex]) { - return TRUE; - } - } - return FALSE; -} -void CXFA_WidgetData::SetItemState(int32_t nIndex, - FX_BOOL bSelected, - FX_BOOL bNotify, - FX_BOOL bScriptModify, - FX_BOOL bSyncData) { - if (nIndex < 0) { - return; - } - CFX_WideStringArray wsSaveTextArray; - GetChoiceListItems(wsSaveTextArray, TRUE); - if (wsSaveTextArray.GetSize() <= nIndex) { - return; - } - int32_t iSel = -1; - CFX_WideStringArray wsValueArray; - GetSelectedItemsValue(wsValueArray); - int32_t iValues = wsValueArray.GetSize(); - for (int32_t j = 0; j < iValues; j++) { - if (wsValueArray[j] == wsSaveTextArray[nIndex]) { - iSel = j; - break; - } - } - if (GetChoiceListOpen() == XFA_ATTRIBUTEENUM_MultiSelect) { - if (bSelected) { - if (iSel < 0) { - CFX_WideString wsValue = GetRawValue(); - if (!wsValue.IsEmpty()) { - wsValue += L"\n"; - } - wsValue += wsSaveTextArray[nIndex]; - m_pNode->SetContent(wsValue, wsValue, bNotify, bScriptModify, - bSyncData); - } - } else if (iSel >= 0) { - CFX_Int32Array iSelArray; - GetSelectedItems(iSelArray); - for (int32_t i = 0; i < iSelArray.GetSize(); i++) { - if (iSelArray[i] == nIndex) { - iSelArray.RemoveAt(i); - break; - } - } - SetSelectdItems(iSelArray, bNotify, bScriptModify, bSyncData); - } - } else { - if (bSelected) { - if (iSel < 0) { - CFX_WideString wsSaveText = wsSaveTextArray[nIndex]; - CFX_WideString wsFormatText(wsSaveText); - GetFormatDataValue(wsSaveText, wsFormatText); - m_pNode->SetContent(wsSaveText, wsFormatText, bNotify, bScriptModify, - bSyncData); - } - } else if (iSel >= 0) { - m_pNode->SetContent(CFX_WideString(), CFX_WideString(), bNotify, - bScriptModify, bSyncData); - } - } -} -void CXFA_WidgetData::SetSelectdItems(CFX_Int32Array& iSelArray, - FX_BOOL bNotify, - FX_BOOL bScriptModify, - FX_BOOL bSyncData) { - CFX_WideString wsValue; - int32_t iSize = iSelArray.GetSize(); - if (iSize >= 1) { - CFX_WideStringArray wsSaveTextArray; - GetChoiceListItems(wsSaveTextArray, TRUE); - CFX_WideString wsItemValue; - for (int32_t i = 0; i < iSize; i++) { - wsItemValue = (iSize == 1) - ? wsSaveTextArray[iSelArray[i]] - : wsSaveTextArray[iSelArray[i]] + FX_WSTRC(L"\n"); - wsValue += wsItemValue; - } - } - CFX_WideString wsFormat(wsValue); - if (GetChoiceListOpen() != XFA_ATTRIBUTEENUM_MultiSelect) { - GetFormatDataValue(wsValue, wsFormat); - } - m_pNode->SetContent(wsValue, wsFormat, bNotify, bScriptModify, bSyncData); -} -void CXFA_WidgetData::ClearAllSelections() { - CXFA_Node* pBind = m_pNode->GetBindData(); - if (pBind && GetChoiceListOpen() == XFA_ATTRIBUTEENUM_MultiSelect) { - while (CXFA_Node* pChildNode = - pBind->GetNodeItem(XFA_NODEITEM_FirstChild)) { - pBind->RemoveChild(pChildNode); - } - } else { - SyncValue(CFX_WideString(), FALSE); - } -} -void CXFA_WidgetData::InsertItem(const CFX_WideString& wsLabel, - const CFX_WideString& wsValue, - int32_t nIndex, - FX_BOOL bNotify) { - CFX_WideString wsNewValue(wsValue); - if (wsNewValue.IsEmpty()) { - wsNewValue = wsLabel; - } - CXFA_NodeArray listitems; - int32_t iCount = 0; - CXFA_Node* pItemNode = m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild); - for (; pItemNode; - pItemNode = pItemNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { - if (pItemNode->GetClassID() != XFA_ELEMENT_Items) { - continue; - } - listitems.Add(pItemNode); - iCount++; - } - if (iCount < 1) { - CXFA_Node* pItems = m_pNode->CreateSamePacketNode(XFA_ELEMENT_Items); - m_pNode->InsertChild(-1, pItems); - InsertListTextItem(pItems, wsLabel, nIndex); - CXFA_Node* pSaveItems = m_pNode->CreateSamePacketNode(XFA_ELEMENT_Items); - m_pNode->InsertChild(-1, pSaveItems); - pSaveItems->SetBoolean(XFA_ATTRIBUTE_Save, TRUE); - InsertListTextItem(pSaveItems, wsNewValue, nIndex); - } else if (iCount > 1) { - for (int32_t i = 0; i < 2; i++) { - CXFA_Node* pNode = listitems[i]; - FX_BOOL bHasSave = pNode->GetBoolean(XFA_ATTRIBUTE_Save); - if (bHasSave) { - InsertListTextItem(pNode, wsNewValue, nIndex); - } else { - InsertListTextItem(pNode, wsLabel, nIndex); - } - } - } else { - CXFA_Node* pNode = listitems[0]; - pNode->SetBoolean(XFA_ATTRIBUTE_Save, FALSE); - pNode->SetEnum(XFA_ATTRIBUTE_Presence, XFA_ATTRIBUTEENUM_Visible); - CXFA_Node* pSaveItems = m_pNode->CreateSamePacketNode(XFA_ELEMENT_Items); - m_pNode->InsertChild(-1, pSaveItems); - pSaveItems->SetBoolean(XFA_ATTRIBUTE_Save, TRUE); - pSaveItems->SetEnum(XFA_ATTRIBUTE_Presence, XFA_ATTRIBUTEENUM_Hidden); - listitems.RemoveAll(); - CXFA_Node* pListNode = pNode->GetNodeItem(XFA_NODEITEM_FirstChild); - int32_t i = 0; - while (pListNode) { - CFX_WideString wsOldValue; - pListNode->TryContent(wsOldValue); - InsertListTextItem(pSaveItems, wsOldValue, i); - i++; - pListNode = pListNode->GetNodeItem(XFA_NODEITEM_NextSibling); - } - InsertListTextItem(pNode, wsLabel, nIndex); - InsertListTextItem(pSaveItems, wsNewValue, nIndex); - } - if (!bNotify) { - return; - } - m_pNode->GetDocument()->GetNotify()->OnWidgetDataEvent( - this, XFA_WIDGETEVENT_ListItemAdded, (void*)(const FX_WCHAR*)wsLabel, - (void*)(const FX_WCHAR*)wsValue, (void*)(uintptr_t)nIndex); -} -void CXFA_WidgetData::GetItemLabel(const CFX_WideStringC& wsValue, - CFX_WideString& wsLabel) { - int32_t iCount = 0; - CXFA_NodeArray listitems; - CXFA_Node* pItems = m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild); - for (; pItems; pItems = pItems->GetNodeItem(XFA_NODEITEM_NextSibling)) { - if (pItems->GetClassID() != XFA_ELEMENT_Items) { - continue; - } - iCount++; - listitems.Add(pItems); - } - if (iCount <= 1) { - wsLabel = wsValue; - } else { - CXFA_Node* pLabelItems = listitems[0]; - FX_BOOL bSave = pLabelItems->GetBoolean(XFA_ATTRIBUTE_Save); - CXFA_Node* pSaveItems = NULL; - if (bSave) { - pSaveItems = pLabelItems; - pLabelItems = listitems[1]; - } else { - pSaveItems = listitems[1]; - } - iCount = 0; - int32_t iSearch = -1; - CFX_WideString wsContent; - CXFA_Node* pChildItem = pSaveItems->GetNodeItem(XFA_NODEITEM_FirstChild); - for (; pChildItem; - pChildItem = pChildItem->GetNodeItem(XFA_NODEITEM_NextSibling)) { - pChildItem->TryContent(wsContent); - if (wsContent == wsValue) { - iSearch = iCount; - break; - } - iCount++; - } - if (iSearch < 0) { - return; - } - if (CXFA_Node* pText = - pLabelItems->GetChild(iSearch, XFA_ELEMENT_UNKNOWN)) { - pText->TryContent(wsLabel); - } - } -} -void CXFA_WidgetData::GetItemValue(const CFX_WideStringC& wsLabel, - CFX_WideString& wsValue) { - int32_t iCount = 0; - CXFA_NodeArray listitems; - CXFA_Node* pItems = m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild); - for (; pItems; pItems = pItems->GetNodeItem(XFA_NODEITEM_NextSibling)) { - if (pItems->GetClassID() != XFA_ELEMENT_Items) { - continue; - } - iCount++; - listitems.Add(pItems); - } - if (iCount <= 1) { - wsValue = wsLabel; - } else { - CXFA_Node* pLabelItems = listitems[0]; - FX_BOOL bSave = pLabelItems->GetBoolean(XFA_ATTRIBUTE_Save); - CXFA_Node* pSaveItems = NULL; - if (bSave) { - pSaveItems = pLabelItems; - pLabelItems = listitems[1]; - } else { - pSaveItems = listitems[1]; - } - iCount = 0; - int32_t iSearch = -1; - CFX_WideString wsContent; - CXFA_Node* pChildItem = pLabelItems->GetNodeItem(XFA_NODEITEM_FirstChild); - for (; pChildItem; - pChildItem = pChildItem->GetNodeItem(XFA_NODEITEM_NextSibling)) { - pChildItem->TryContent(wsContent); - if (wsContent == wsLabel) { - iSearch = iCount; - break; - } - iCount++; - } - if (iSearch < 0) { - return; - } - if (CXFA_Node* pText = pSaveItems->GetChild(iSearch, XFA_ELEMENT_UNKNOWN)) { - pText->TryContent(wsValue); - } - } -} -FX_BOOL CXFA_WidgetData::DeleteItem(int32_t nIndex, - FX_BOOL bNotify, - FX_BOOL bScriptModify, - FX_BOOL bSyncData) { - FX_BOOL bSetValue = FALSE; - CXFA_Node* pItems = m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild); - for (; pItems; pItems = pItems->GetNodeItem(XFA_NODEITEM_NextSibling)) { - if (pItems->GetClassID() != XFA_ELEMENT_Items) { - continue; - } - if (nIndex < 0) { - while (CXFA_Node* pNode = pItems->GetNodeItem(XFA_NODEITEM_FirstChild)) { - pItems->RemoveChild(pNode); - } - } else { - if (!bSetValue && pItems->GetBoolean(XFA_ATTRIBUTE_Save)) { - SetItemState(nIndex, FALSE, TRUE, bScriptModify, bSyncData); - bSetValue = TRUE; - } - int32_t i = 0; - CXFA_Node* pNode = pItems->GetNodeItem(XFA_NODEITEM_FirstChild); - while (pNode) { - if (i == nIndex) { - pItems->RemoveChild(pNode); - break; - } - i++; - pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling); - } - } - } - if (!bNotify) { - return TRUE; - } - m_pNode->GetDocument()->GetNotify()->OnWidgetDataEvent( - this, XFA_WIDGETEVENT_ListItemRemoved, (void*)(uintptr_t)nIndex); - return TRUE; -} -int32_t CXFA_WidgetData::GetHorizontalScrollPolicy() { - CXFA_Node* pUIChild = GetUIChild(); - if (pUIChild) { - return pUIChild->GetEnum(XFA_ATTRIBUTE_HScrollPolicy); - } - return XFA_ATTRIBUTEENUM_Auto; -} -int32_t CXFA_WidgetData::GetNumberOfCells() { - CXFA_Node* pUIChild = GetUIChild(); - if (!pUIChild) { - return -1; - } - if (CXFA_Node* pNode = pUIChild->GetChild(0, XFA_ELEMENT_Comb)) { - return pNode->GetInteger(XFA_ATTRIBUTE_NumberOfCells); - } - return -1; -} -FX_BOOL CXFA_WidgetData::IsDateTimeEditUsePicker() { - return TRUE; -} -CFX_WideString CXFA_WidgetData::GetBarcodeType() { - CXFA_Node* pUIChild = GetUIChild(); - return pUIChild ? pUIChild->GetCData(XFA_ATTRIBUTE_Type) : NULL; -} -FX_BOOL CXFA_WidgetData::GetBarcodeAttribute_CharEncoding(int32_t& val) { - CXFA_Node* pUIChild = GetUIChild(); - CFX_WideString wsCharEncoding; - if (pUIChild->TryCData(XFA_ATTRIBUTE_CharEncoding, wsCharEncoding)) { - if (wsCharEncoding.CompareNoCase(L"UTF-16")) { - val = CHAR_ENCODING_UNICODE; - return TRUE; - } else if (wsCharEncoding.CompareNoCase(L"UTF-8")) { - val = CHAR_ENCODING_UTF8; - return TRUE; - } - } - return FALSE; -} -FX_BOOL CXFA_WidgetData::GetBarcodeAttribute_Checksum(int32_t& val) { - CXFA_Node* pUIChild = GetUIChild(); - XFA_ATTRIBUTEENUM eChecksum; - if (pUIChild->TryEnum(XFA_ATTRIBUTE_Checksum, eChecksum)) { - switch (eChecksum) { - case XFA_ATTRIBUTEENUM_None: - val = 0; - return TRUE; - case XFA_ATTRIBUTEENUM_Auto: - val = 1; - return TRUE; - case XFA_ATTRIBUTEENUM_1mod10: - break; - case XFA_ATTRIBUTEENUM_1mod10_1mod11: - break; - case XFA_ATTRIBUTEENUM_2mod10: - break; - default: - break; - } - } - return FALSE; -} -FX_BOOL CXFA_WidgetData::GetBarcodeAttribute_DataLength(int32_t& val) { - CXFA_Node* pUIChild = GetUIChild(); - CFX_WideString wsDataLength; - if (pUIChild->TryCData(XFA_ATTRIBUTE_DataLength, wsDataLength)) { - val = FXSYS_wtoi(wsDataLength); - return TRUE; - } - return FALSE; -} -FX_BOOL CXFA_WidgetData::GetBarcodeAttribute_StartChar(FX_CHAR& val) { - CXFA_Node* pUIChild = GetUIChild(); - CFX_WideStringC wsStartEndChar; - if (pUIChild->TryCData(XFA_ATTRIBUTE_StartChar, wsStartEndChar)) { - if (wsStartEndChar.GetLength()) { - val = (FX_CHAR)wsStartEndChar.GetAt(0); - return TRUE; - } - } - return FALSE; -} -FX_BOOL CXFA_WidgetData::GetBarcodeAttribute_EndChar(FX_CHAR& val) { - CXFA_Node* pUIChild = GetUIChild(); - CFX_WideStringC wsStartEndChar; - if (pUIChild->TryCData(XFA_ATTRIBUTE_EndChar, wsStartEndChar)) { - if (wsStartEndChar.GetLength()) { - val = (FX_CHAR)wsStartEndChar.GetAt(0); - return TRUE; - } - } - return FALSE; -} -FX_BOOL CXFA_WidgetData::GetBarcodeAttribute_ECLevel(int32_t& val) { - CXFA_Node* pUIChild = GetUIChild(); - CFX_WideString wsECLevel; - if (pUIChild->TryCData(XFA_ATTRIBUTE_ErrorCorrectionLevel, wsECLevel)) { - val = FXSYS_wtoi(wsECLevel); - return TRUE; - } - return FALSE; -} -FX_BOOL CXFA_WidgetData::GetBarcodeAttribute_ModuleWidth(int32_t& val) { - CXFA_Node* pUIChild = GetUIChild(); - CXFA_Measurement mModuleWidthHeight; - if (pUIChild->TryMeasure(XFA_ATTRIBUTE_ModuleWidth, mModuleWidthHeight)) { - val = (int32_t)mModuleWidthHeight.ToUnit(XFA_UNIT_Pt); - return TRUE; - } - return FALSE; -} -FX_BOOL CXFA_WidgetData::GetBarcodeAttribute_ModuleHeight(int32_t& val) { - CXFA_Node* pUIChild = GetUIChild(); - CXFA_Measurement mModuleWidthHeight; - if (pUIChild->TryMeasure(XFA_ATTRIBUTE_ModuleHeight, mModuleWidthHeight)) { - val = (int32_t)mModuleWidthHeight.ToUnit(XFA_UNIT_Pt); - return TRUE; - } - return FALSE; -} -FX_BOOL CXFA_WidgetData::GetBarcodeAttribute_PrintChecksum(FX_BOOL& val) { - CXFA_Node* pUIChild = GetUIChild(); - FX_BOOL bPrintCheckDigit; - if (pUIChild->TryBoolean(XFA_ATTRIBUTE_PrintCheckDigit, bPrintCheckDigit)) { - val = bPrintCheckDigit; - return TRUE; - } - return FALSE; -} -FX_BOOL CXFA_WidgetData::GetBarcodeAttribute_TextLocation(int32_t& val) { - CXFA_Node* pUIChild = GetUIChild(); - XFA_ATTRIBUTEENUM eTextLocation; - if (pUIChild->TryEnum(XFA_ATTRIBUTE_TextLocation, eTextLocation)) { - switch (eTextLocation) { - case XFA_ATTRIBUTEENUM_None: - val = BC_TEXT_LOC_NONE; - return TRUE; - case XFA_ATTRIBUTEENUM_Above: - val = BC_TEXT_LOC_ABOVE; - return TRUE; - case XFA_ATTRIBUTEENUM_Below: - val = BC_TEXT_LOC_BELOW; - return TRUE; - case XFA_ATTRIBUTEENUM_AboveEmbedded: - val = BC_TEXT_LOC_ABOVEEMBED; - return TRUE; - case XFA_ATTRIBUTEENUM_BelowEmbedded: - val = BC_TEXT_LOC_BELOWEMBED; - return TRUE; - default: - break; - } - } - return FALSE; -} -FX_BOOL CXFA_WidgetData::GetBarcodeAttribute_Truncate(FX_BOOL& val) { - CXFA_Node* pUIChild = GetUIChild(); - FX_BOOL bTruncate; - if (pUIChild->TryBoolean(XFA_ATTRIBUTE_Truncate, bTruncate)) { - val = bTruncate; - return TRUE; - } - return FALSE; -} -FX_BOOL CXFA_WidgetData::GetBarcodeAttribute_WideNarrowRatio(FX_FLOAT& val) { - CXFA_Node* pUIChild = GetUIChild(); - CFX_WideString wsWideNarrowRatio; - if (pUIChild->TryCData(XFA_ATTRIBUTE_WideNarrowRatio, wsWideNarrowRatio)) { - FX_STRSIZE ptPos = wsWideNarrowRatio.Find(':'); - FX_FLOAT fRatio = 0; - if (ptPos >= 0) { - fRatio = (FX_FLOAT)FXSYS_wtoi(wsWideNarrowRatio); - } else { - int32_t fA, fB; - fA = FXSYS_wtoi(wsWideNarrowRatio.Left(ptPos)); - fB = FXSYS_wtoi(wsWideNarrowRatio.Mid(ptPos + 1)); - if (fB) { - fRatio = (FX_FLOAT)fA / fB; - } - } - val = fRatio; - return TRUE; - } - return FALSE; -} -void CXFA_WidgetData::GetPasswordChar(CFX_WideString& wsPassWord) { - CXFA_Node* pUIChild = GetUIChild(); - if (pUIChild) { - pUIChild->TryCData(XFA_ATTRIBUTE_PasswordChar, wsPassWord); - } else { - wsPassWord = XFA_GetAttributeDefaultValue_Cdata(XFA_ELEMENT_PasswordEdit, - XFA_ATTRIBUTE_PasswordChar, - XFA_XDPPACKET_Form); - } -} -FX_BOOL CXFA_WidgetData::IsAllowRichText() { - CXFA_Node* pUIChild = GetUIChild(); - FX_BOOL bValue = FALSE; - if (pUIChild && - pUIChild->TryBoolean(XFA_ATTRIBUTE_AllowRichText, bValue, FALSE)) { - return bValue; - } - if (CXFA_Node* pNode = m_pNode->GetChild(0, XFA_ELEMENT_Value)) { - if (CXFA_Node* pChild = pNode->GetNodeItem(XFA_NODEITEM_FirstChild)) { - return pChild->GetClassID() == XFA_ELEMENT_ExData; - } - } - return FALSE; -} -FX_BOOL CXFA_WidgetData::IsMultiLine() { - CXFA_Node* pUIChild = GetUIChild(); - if (pUIChild) { - return pUIChild->GetBoolean(XFA_ATTRIBUTE_MultiLine); - } - return XFA_GetAttributeDefaultValue_Boolean( - XFA_ELEMENT_TextEdit, XFA_ATTRIBUTE_MultiLine, XFA_XDPPACKET_Form); -} -int32_t CXFA_WidgetData::GetVerticalScrollPolicy() { - CXFA_Node* pUIChild = GetUIChild(); - if (pUIChild) { - return pUIChild->GetEnum(XFA_ATTRIBUTE_VScrollPolicy); - } - return XFA_GetAttributeDefaultValue_Enum( - XFA_ELEMENT_TextEdit, XFA_ATTRIBUTE_VScrollPolicy, XFA_XDPPACKET_Form); -} -int32_t CXFA_WidgetData::GetMaxChars(XFA_ELEMENT& eType) { - if (CXFA_Node* pNode = m_pNode->GetChild(0, XFA_ELEMENT_Value)) { - if (CXFA_Node* pChild = pNode->GetNodeItem(XFA_NODEITEM_FirstChild)) { - switch (pChild->GetClassID()) { - case XFA_ELEMENT_Text: - eType = XFA_ELEMENT_Text; - return pChild->GetInteger(XFA_ATTRIBUTE_MaxChars); - case XFA_ELEMENT_ExData: { - eType = XFA_ELEMENT_ExData; - int32_t iMax = pChild->GetInteger(XFA_ATTRIBUTE_MaxLength); - return iMax < 0 ? 0 : iMax; - } - default: - break; - } - } - } - return 0; -} -FX_BOOL CXFA_WidgetData::GetFracDigits(int32_t& iFracDigits) { - if (CXFA_Node* pNode = m_pNode->GetChild(0, XFA_ELEMENT_Value)) { - if (CXFA_Node* pChild = pNode->GetChild(0, XFA_ELEMENT_Decimal)) { - return pChild->TryInteger(XFA_ATTRIBUTE_FracDigits, iFracDigits); - } - } - iFracDigits = -1; - return FALSE; -} -FX_BOOL CXFA_WidgetData::GetLeadDigits(int32_t& iLeadDigits) { - if (CXFA_Node* pNode = m_pNode->GetChild(0, XFA_ELEMENT_Value)) { - if (CXFA_Node* pChild = pNode->GetChild(0, XFA_ELEMENT_Decimal)) { - return pChild->TryInteger(XFA_ATTRIBUTE_LeadDigits, iLeadDigits); - } - } - iLeadDigits = -1; - return FALSE; -} -CFX_WideString XFA_NumericLimit(const CFX_WideString& wsValue, - int32_t iLead, - int32_t iTread) { - if ((iLead == -1) && (iTread == -1)) { - return wsValue; - } - CFX_WideString wsRet; - int32_t iLead_ = 0, iTread_ = -1; - int32_t iCount = wsValue.GetLength(); - if (iCount == 0) { - return wsValue; - } - int32_t i = 0; - if (wsValue[i] == L'-') { - wsRet += L'-'; - i++; - } - for (; i < iCount; i++) { - FX_WCHAR wc = wsValue[i]; - if (XFA_IsDigit(wc)) { - if (iLead >= 0) { - iLead_++; - if (iLead_ > iLead) { - return L"0"; - } - } else if (iTread_ >= 0) { - iTread_++; - if (iTread_ > iTread) { - if (iTread != -1) { - CFX_Decimal wsDeci = CFX_Decimal(wsValue); - wsDeci.SetScale(iTread); - wsRet = wsDeci; - } - return wsRet; - } - } - } else if (wc == L'.') { - iTread_ = 0; - iLead = -1; - } - wsRet += wc; - } - return wsRet; -} -FX_BOOL CXFA_WidgetData::SetValue(const CFX_WideString& wsValue, - XFA_VALUEPICTURE eValueType) { - if (wsValue.IsEmpty()) { - SyncValue(wsValue, TRUE); - return TRUE; - } - m_bPreNull = m_bIsNull; - m_bIsNull = FALSE; - CFX_WideString wsNewText(wsValue); - CFX_WideString wsPicture; - GetPictureContent(wsPicture, eValueType); - FX_BOOL bValidate = TRUE; - FX_BOOL bSyncData = FALSE; - CXFA_Node* pNode = GetUIChild(); - if (!pNode) { - return TRUE; - } - XFA_ELEMENT uiType = pNode->GetClassID(); - if (!wsPicture.IsEmpty()) { - CXFA_LocaleMgr* pLocalMgr = m_pNode->GetDocument()->GetLocalMgr(); - IFX_Locale* pLocale = GetLocal(); - CXFA_LocaleValue widgetValue = XFA_GetLocaleValue(this); - bValidate = - widgetValue.ValidateValue(wsValue, wsPicture, pLocale, &wsPicture); - if (bValidate) { - widgetValue = CXFA_LocaleValue(widgetValue.GetType(), wsNewText, - wsPicture, pLocale, pLocalMgr); - wsNewText = widgetValue.GetValue(); - if (uiType == XFA_ELEMENT_NumericEdit) { - int32_t iLeadDigits = 0; - int32_t iFracDigits = 0; - GetLeadDigits(iLeadDigits); - GetFracDigits(iFracDigits); - wsNewText = XFA_NumericLimit(wsNewText, iLeadDigits, iFracDigits); - } - bSyncData = TRUE; - } - } else { - if (uiType == XFA_ELEMENT_NumericEdit) { - if (wsNewText != FX_WSTRC(L"0")) { - int32_t iLeadDigits = 0; - int32_t iFracDigits = 0; - GetLeadDigits(iLeadDigits); - GetFracDigits(iFracDigits); - wsNewText = XFA_NumericLimit(wsNewText, iLeadDigits, iFracDigits); - } - bSyncData = TRUE; - } - } - if (uiType != XFA_ELEMENT_NumericEdit || bSyncData) { - SyncValue(wsNewText, TRUE); - } - return bValidate; -} -FX_BOOL CXFA_WidgetData::GetPictureContent(CFX_WideString& wsPicture, - XFA_VALUEPICTURE ePicture) { - if (ePicture == XFA_VALUEPICTURE_Raw) { - return FALSE; - } - CXFA_LocaleValue widgetValue = XFA_GetLocaleValue(this); - switch (ePicture) { - case XFA_VALUEPICTURE_Display: { - if (CXFA_Node* pFormat = m_pNode->GetChild(0, XFA_ELEMENT_Format)) { - if (CXFA_Node* pPicture = pFormat->GetChild(0, XFA_ELEMENT_Picture)) { - if (pPicture->TryContent(wsPicture)) { - return TRUE; - } - } - } - CFX_WideString wsDataPicture, wsTimePicture; - IFX_Locale* pLocale = GetLocal(); - if (!pLocale) { - return FALSE; - } - FX_DWORD dwType = widgetValue.GetType(); - switch (dwType) { - case XFA_VT_DATE: - pLocale->GetDatePattern(FX_LOCALEDATETIMESUBCATEGORY_Medium, - wsPicture); - break; - case XFA_VT_TIME: - pLocale->GetTimePattern(FX_LOCALEDATETIMESUBCATEGORY_Medium, - wsPicture); - break; - case XFA_VT_DATETIME: - pLocale->GetDatePattern(FX_LOCALEDATETIMESUBCATEGORY_Medium, - wsDataPicture); - pLocale->GetTimePattern(FX_LOCALEDATETIMESUBCATEGORY_Medium, - wsTimePicture); - wsPicture = wsDataPicture + FX_WSTRC(L"T") + wsTimePicture; - break; - case XFA_VT_DECIMAL: - case XFA_VT_FLOAT: - break; - default: - break; - } - } - return TRUE; - case XFA_VALUEPICTURE_Edit: { - CXFA_Node* pUI = m_pNode->GetChild(0, XFA_ELEMENT_Ui); - if (pUI) { - if (CXFA_Node* pPicture = pUI->GetChild(0, XFA_ELEMENT_Picture)) { - if (pPicture->TryContent(wsPicture)) { - return TRUE; - } - } - } - { - CFX_WideString wsDataPicture, wsTimePicture; - IFX_Locale* pLocale = GetLocal(); - if (!pLocale) { - return FALSE; - } - FX_DWORD dwType = widgetValue.GetType(); - switch (dwType) { - case XFA_VT_DATE: - pLocale->GetDatePattern(FX_LOCALEDATETIMESUBCATEGORY_Short, - wsPicture); - break; - case XFA_VT_TIME: - pLocale->GetTimePattern(FX_LOCALEDATETIMESUBCATEGORY_Short, - wsPicture); - break; - case XFA_VT_DATETIME: - pLocale->GetDatePattern(FX_LOCALEDATETIMESUBCATEGORY_Short, - wsDataPicture); - pLocale->GetTimePattern(FX_LOCALEDATETIMESUBCATEGORY_Short, - wsTimePicture); - wsPicture = wsDataPicture + L"T" + wsTimePicture; - break; - default: - break; - } - } - } - return TRUE; - case XFA_VALUEPICTURE_DataBind: { - if (CXFA_Bind bind = GetBind()) { - bind.GetPicture(wsPicture); - return TRUE; - } - } break; - default: - break; - } - return FALSE; -} -IFX_Locale* CXFA_WidgetData::GetLocal() { - IFX_Locale* pLocale = NULL; - if (!m_pNode) { - return pLocale; - } - FX_BOOL bLocale = FALSE; - CFX_WideString wsLocaleName; - bLocale = m_pNode->GetLocaleName(wsLocaleName); - if (bLocale) { - if (wsLocaleName.Equal(FX_WSTRC(L"ambient"))) { - pLocale = m_pNode->GetDocument()->GetLocalMgr()->GetDefLocale(); - } else { - pLocale = - m_pNode->GetDocument()->GetLocalMgr()->GetLocaleByName(wsLocaleName); - } - } - return pLocale; -} -static FX_BOOL XFA_SplitDateTime(const CFX_WideString& wsDateTime, - CFX_WideString& wsDate, - CFX_WideString& wsTime) { - wsDate = L""; - wsTime = L""; - if (wsDateTime.IsEmpty()) { - return FALSE; - } - int nSplitIndex = -1; - nSplitIndex = wsDateTime.Find('T'); - if (nSplitIndex < 0) { - nSplitIndex = wsDateTime.Find(' '); - } - if (nSplitIndex < 0) { - return FALSE; - } - wsDate = wsDateTime.Left(nSplitIndex); - if (!wsDate.IsEmpty()) { - int32_t iCount = wsDate.GetLength(); - int32_t i = 0; - for (i = 0; i < iCount; i++) { - if (wsDate[i] >= '0' && wsDate[i] <= '9') { - break; - } - } - if (i == iCount) { - return FALSE; - } - } - wsTime = wsDateTime.Right(wsDateTime.GetLength() - nSplitIndex - 1); - if (!wsTime.IsEmpty()) { - int32_t iCount = wsTime.GetLength(); - int32_t i = 0; - for (i = 0; i < iCount; i++) { - if (wsTime[i] >= '0' && wsTime[i] <= '9') { - break; - } - } - if (i == iCount) { - return FALSE; - } - } - return TRUE; -} - -FX_BOOL CXFA_WidgetData::GetValue(CFX_WideString& wsValue, - XFA_VALUEPICTURE eValueType) { - wsValue = m_pNode->GetContent(); - - if (eValueType == XFA_VALUEPICTURE_Display) - GetItemLabel(wsValue, wsValue); - - CFX_WideString wsPicture; - GetPictureContent(wsPicture, eValueType); - CXFA_Node* pNode = GetUIChild(); - if (!pNode) - return TRUE; - - XFA_ELEMENT uiType = GetUIChild()->GetClassID(); - switch (uiType) { - case XFA_ELEMENT_ChoiceList: { - if (eValueType == XFA_VALUEPICTURE_Display) { - int32_t iSelItemIndex = GetSelectedItem(0); - if (iSelItemIndex >= 0) { - GetChoiceListItem(wsValue, iSelItemIndex); - wsPicture.Empty(); - } - } - } break; - case XFA_ELEMENT_NumericEdit: - if (eValueType != XFA_VALUEPICTURE_Raw && wsPicture.IsEmpty()) { - IFX_Locale* pLocale = GetLocal(); - if (eValueType == XFA_VALUEPICTURE_Display && pLocale) { - CFX_WideString wsOutput; - NormalizeNumStr(wsValue, wsOutput); - FormatNumStr(wsOutput, pLocale, wsOutput); - wsValue = wsOutput; - } - } - break; - default: - break; - } - if (wsPicture.IsEmpty()) - return TRUE; - - if (IFX_Locale* pLocale = GetLocal()) { - CXFA_LocaleValue widgetValue = XFA_GetLocaleValue(this); - CXFA_LocaleMgr* pLocalMgr = m_pNode->GetDocument()->GetLocalMgr(); - switch (widgetValue.GetType()) { - case XFA_VT_DATE: { - CFX_WideString wsDate, wsTime; - if (XFA_SplitDateTime(wsValue, wsDate, wsTime)) { - CXFA_LocaleValue date(XFA_VT_DATE, wsDate, pLocalMgr); - if (date.FormatPatterns(wsValue, wsPicture, pLocale, eValueType)) - return TRUE; - } - break; - } - case XFA_VT_TIME: { - CFX_WideString wsDate, wsTime; - if (XFA_SplitDateTime(wsValue, wsDate, wsTime)) { - CXFA_LocaleValue time(XFA_VT_TIME, wsTime, pLocalMgr); - if (time.FormatPatterns(wsValue, wsPicture, pLocale, eValueType)) - return TRUE; - } - break; - } - default: - break; - } - widgetValue.FormatPatterns(wsValue, wsPicture, pLocale, eValueType); - } - return TRUE; -} - -FX_BOOL CXFA_WidgetData::GetNormalizeDataValue( - const CFX_WideStringC& wsValue, - CFX_WideString& wsNormalizeValue) { - wsNormalizeValue = wsValue; - if (wsValue.IsEmpty()) { - return TRUE; - } - CFX_WideString wsPicture; - GetPictureContent(wsPicture, XFA_VALUEPICTURE_DataBind); - if (wsPicture.IsEmpty()) { - return TRUE; - } - FXSYS_assert(GetNode()); - CXFA_LocaleMgr* pLocalMgr = GetNode()->GetDocument()->GetLocalMgr(); - IFX_Locale* pLocale = GetLocal(); - CXFA_LocaleValue widgetValue = XFA_GetLocaleValue(this); - if (widgetValue.ValidateValue(wsValue, wsPicture, pLocale, &wsPicture)) { - widgetValue = CXFA_LocaleValue(widgetValue.GetType(), wsNormalizeValue, - wsPicture, pLocale, pLocalMgr); - wsNormalizeValue = widgetValue.GetValue(); - return TRUE; - } - return FALSE; -} -FX_BOOL CXFA_WidgetData::GetFormatDataValue(const CFX_WideStringC& wsValue, - CFX_WideString& wsFormatedValue) { - wsFormatedValue = wsValue; - if (wsValue.IsEmpty()) { - return TRUE; - } - CFX_WideString wsPicture; - GetPictureContent(wsPicture, XFA_VALUEPICTURE_DataBind); - if (wsPicture.IsEmpty()) { - return TRUE; - } - if (IFX_Locale* pLocale = GetLocal()) { - FXSYS_assert(GetNode()); - CXFA_Node* pNodeValue = GetNode()->GetChild(0, XFA_ELEMENT_Value); - if (!pNodeValue) { - return FALSE; - } - CXFA_Node* pValueChild = pNodeValue->GetNodeItem(XFA_NODEITEM_FirstChild); - if (!pValueChild) { - return FALSE; - } - int32_t iVTType = XFA_VT_NULL; - XFA_ELEMENT eType = pValueChild->GetClassID(); - switch (eType) { - case XFA_ELEMENT_Decimal: - iVTType = XFA_VT_DECIMAL; - break; - case XFA_ELEMENT_Float: - iVTType = XFA_VT_FLOAT; - break; - case XFA_ELEMENT_Date: - iVTType = XFA_VT_DATE; - break; - case XFA_ELEMENT_Time: - iVTType = XFA_VT_TIME; - break; - case XFA_ELEMENT_DateTime: - iVTType = XFA_VT_DATETIME; - break; - case XFA_ELEMENT_Boolean: - iVTType = XFA_VT_BOOLEAN; - break; - case XFA_ELEMENT_Integer: - iVTType = XFA_VT_INTEGER; - break; - case XFA_ELEMENT_Text: - iVTType = XFA_VT_TEXT; - break; - default: - iVTType = XFA_VT_NULL; - break; - } - CXFA_LocaleMgr* pLocalMgr = GetNode()->GetDocument()->GetLocalMgr(); - CXFA_LocaleValue widgetValue(iVTType, wsValue, pLocalMgr); - switch (widgetValue.GetType()) { - case XFA_VT_DATE: { - CFX_WideString wsDate, wsTime; - if (XFA_SplitDateTime(wsValue, wsDate, wsTime)) { - CXFA_LocaleValue date(XFA_VT_DATE, wsDate, pLocalMgr); - if (date.FormatPatterns(wsFormatedValue, wsPicture, pLocale, - XFA_VALUEPICTURE_DataBind)) { - return TRUE; - } - } - break; - } - case XFA_VT_TIME: { - CFX_WideString wsDate, wsTime; - if (XFA_SplitDateTime(wsValue, wsDate, wsTime)) { - CXFA_LocaleValue time(XFA_VT_TIME, wsTime, pLocalMgr); - if (time.FormatPatterns(wsFormatedValue, wsPicture, pLocale, - XFA_VALUEPICTURE_DataBind)) { - return TRUE; - } - } - break; - } - default: - break; - } - widgetValue.FormatPatterns(wsFormatedValue, wsPicture, pLocale, - XFA_VALUEPICTURE_DataBind); - } - return FALSE; -} -void CXFA_WidgetData::NormalizeNumStr(const CFX_WideString& wsValue, - CFX_WideString& wsOutput) { - if (wsValue.IsEmpty()) { - return; - } - wsOutput = wsValue; - wsOutput.TrimLeft('0'); - int32_t dot_index = wsOutput.Find('.'); - int32_t iFracDigits = 0; - if (!wsOutput.IsEmpty() && dot_index >= 0 && - (!GetFracDigits(iFracDigits) || iFracDigits != -1)) { - wsOutput.TrimRight(L"0"); - wsOutput.TrimRight(L"."); - } - if (wsOutput.IsEmpty() || wsOutput[0] == '.') { - wsOutput.Insert(0, '0'); - } -} -void CXFA_WidgetData::FormatNumStr(const CFX_WideString& wsValue, - IFX_Locale* pLocale, - CFX_WideString& wsOutput) { - if (wsValue.IsEmpty()) { - return; - } - CFX_WideString wsSrcNum = wsValue; - CFX_WideString wsGroupSymbol; - pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Grouping, wsGroupSymbol); - FX_BOOL bNeg = FALSE; - if (wsSrcNum[0] == '-') { - bNeg = TRUE; - wsSrcNum.Delete(0, 1); - } - int32_t len = wsSrcNum.GetLength(); - int32_t dot_index = wsSrcNum.Find('.'); - if (dot_index == -1) { - dot_index = len; - } - int32_t cc = dot_index - 1; - if (cc >= 0) { - int nPos = dot_index % 3; - wsOutput.Empty(); - for (int32_t i = 0; i < dot_index; i++) { - if (i % 3 == nPos && i != 0) { - wsOutput += wsGroupSymbol; - } - wsOutput += wsSrcNum[i]; - } - if (dot_index < len) { - CFX_WideString wsSymbol; - pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Decimal, wsSymbol); - wsOutput += wsSymbol; - wsOutput += wsSrcNum.Right(len - dot_index - 1); - } - if (bNeg) { - CFX_WideString wsMinusymbol; - pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Minus, wsMinusymbol); - wsOutput = wsMinusymbol + wsOutput; - } - } -} -void CXFA_WidgetData::SyncValue(const CFX_WideString& wsValue, - FX_BOOL bNotify) { - if (!m_pNode) { - return; - } - CFX_WideString wsFormatValue(wsValue); - CXFA_WidgetData* pContainerWidgetData = m_pNode->GetContainerWidgetData(); - if (pContainerWidgetData) { - pContainerWidgetData->GetFormatDataValue(wsValue, wsFormatValue); - } - m_pNode->SetContent(wsValue, wsFormatValue, bNotify); -} -void CXFA_WidgetData::InsertListTextItem(CXFA_Node* pItems, - const CFX_WideStringC& wsText, - int32_t nIndex) { - CXFA_Node* pText = pItems->CreateSamePacketNode(XFA_ELEMENT_Text); - pItems->InsertChild(nIndex, pText); - pText->SetContent(wsText, wsText, FALSE, FALSE, FALSE); -} -CXFA_Filter CXFA_WidgetData::GetFilter(FX_BOOL bModified) { - if (!m_pUiChildNode) { - return CXFA_Filter(nullptr); - } - return CXFA_Filter( - m_pUiChildNode->GetProperty(0, XFA_ELEMENT_Filter, bModified)); -} -CXFA_Manifest CXFA_WidgetData::GetManifest(FX_BOOL bModified) { - if (!m_pUiChildNode) { - return CXFA_Manifest(nullptr); - } - return CXFA_Manifest( - m_pUiChildNode->GetProperty(0, XFA_ELEMENT_Manifest, bModified)); -} -CXFA_Occur::CXFA_Occur(CXFA_Node* pNode) : CXFA_Data(pNode) {} -int32_t CXFA_Occur::GetMax() { - int32_t iMax = 1; - if (m_pNode) { - if (!m_pNode->TryInteger(XFA_ATTRIBUTE_Max, iMax, TRUE)) { - iMax = GetMin(); - } - } - return iMax; -} -int32_t CXFA_Occur::GetMin() { - int32_t iMin = 1; - if (m_pNode) { - if (!m_pNode->TryInteger(XFA_ATTRIBUTE_Min, iMin, TRUE) || iMin < 0) { - iMin = 1; - } - } - return iMin; -} -int32_t CXFA_Occur::GetInitial() { - int32_t iInit = 1; - if (m_pNode) { - int32_t iMin = GetMin(); - if (!m_pNode->TryInteger(XFA_ATTRIBUTE_Initial, iInit, TRUE) || - iInit < iMin) { - iInit = iMin; - } - } - return iInit; -} -FX_BOOL CXFA_Occur::GetOccurInfo(int32_t& iMin, int32_t& iMax, int32_t& iInit) { - if (!m_pNode) { - return FALSE; - } - if (!m_pNode->TryInteger(XFA_ATTRIBUTE_Min, iMin, FALSE) || iMin < 0) { - iMin = 1; - } - if (!m_pNode->TryInteger(XFA_ATTRIBUTE_Max, iMax, FALSE)) { - if (iMin == 0) { - iMax = 1; - } else { - iMax = iMin; - } - } - if (!m_pNode->TryInteger(XFA_ATTRIBUTE_Initial, iInit, FALSE) || - iInit < iMin) { - iInit = iMin; - } - return TRUE; -} -void CXFA_Occur::SetMax(int32_t iMax) { - iMax = (iMax != -1 && iMax < 1) ? 1 : iMax; - m_pNode->SetInteger(XFA_ATTRIBUTE_Max, iMax, FALSE); - int32_t iMin = GetMin(); - if (iMax != -1 && iMax < iMin) { - iMin = iMax; - m_pNode->SetInteger(XFA_ATTRIBUTE_Min, iMin, FALSE); - } -} -void CXFA_Occur::SetMin(int32_t iMin) { - iMin = (iMin < 0) ? 1 : iMin; - m_pNode->SetInteger(XFA_ATTRIBUTE_Min, iMin, FALSE); - int32_t iMax = GetMax(); - if (iMax > 0 && iMax < iMin) { - iMax = iMin; - m_pNode->SetInteger(XFA_ATTRIBUTE_Max, iMax, FALSE); - } -} -XFA_ATTRIBUTEENUM XFA_GetEnumTypeAttribute( - CXFA_Node* pNode, - XFA_ATTRIBUTE attributeValue = XFA_ATTRIBUTE_Type, - XFA_ATTRIBUTEENUM eDefaultValue = XFA_ATTRIBUTEENUM_Optional) { - XFA_ATTRIBUTEENUM eType = eDefaultValue; - if (pNode) { - if (!pNode->TryEnum(attributeValue, eType, TRUE)) { - eType = eDefaultValue; - } - } - return eType; -} -CFX_WideString CXFA_Filter::GetFilterString(XFA_ATTRIBUTE eAttribute) { - CFX_WideString wsStringValue; - if (m_pNode) { - m_pNode->GetAttribute(eAttribute, wsStringValue, FALSE); - } - return wsStringValue; -} -XFA_ATTRIBUTEENUM CXFA_Filter::GetAppearanceFilterType() { - if (!m_pNode) { - return XFA_ATTRIBUTEENUM_Optional; - } - CXFA_Node* pAppearanceFilterNode = - m_pNode->GetProperty(0, XFA_ELEMENT_AppearanceFilter); - return XFA_GetEnumTypeAttribute(pAppearanceFilterNode); -} -CFX_WideString CXFA_Filter::GetAppearanceFilterContent() { - CFX_WideString wsContent; - if (m_pNode) { - CXFA_Node* pAppearanceFilterNode = - m_pNode->GetProperty(0, XFA_ELEMENT_AppearanceFilter); - pAppearanceFilterNode->TryContent(wsContent); - } - return wsContent; -} -XFA_ATTRIBUTEENUM CXFA_Filter::GetCertificatesCredentialServerPolicy() { - if (!m_pNode) { - return XFA_ATTRIBUTEENUM_Optional; - } - CXFA_Node* pCertsNode = m_pNode->GetProperty(0, XFA_ELEMENT_Certificates); - return XFA_GetEnumTypeAttribute(pCertsNode, - XFA_ATTRIBUTE_CredentialServerPolicy); -} -CFX_WideString CXFA_Filter::GetCertificatesURL() { - CFX_WideString wsURL; - if (m_pNode) { - CXFA_Node* pCertsNode = m_pNode->GetProperty(0, XFA_ELEMENT_Certificates); - pCertsNode->GetAttribute(XFA_ATTRIBUTE_Url, wsURL, FALSE); - } - return wsURL; -} -CFX_WideString CXFA_Filter::GetCertificatesURLPolicy() { - CFX_WideString wsURLPolicy; - if (m_pNode) { - CXFA_Node* pCertsNode = m_pNode->GetProperty(0, XFA_ELEMENT_Certificates); - pCertsNode->GetAttribute(XFA_ATTRIBUTE_UrlPolicy, wsURLPolicy, FALSE); - } - return wsURLPolicy; -} -CXFA_WrapCertificate CXFA_Filter::GetCertificatesEncryption(FX_BOOL bModified) { - if (!m_pNode) { - return CXFA_WrapCertificate(NULL); - } - CXFA_Node* pCertsNode = - m_pNode->GetProperty(0, XFA_ELEMENT_Certificates, bModified); - return CXFA_WrapCertificate( - pCertsNode ? pCertsNode->GetProperty(0, XFA_ELEMENT_Encryption, bModified) - : NULL); -} -CXFA_WrapCertificate CXFA_Filter::GetCertificatesIssuers(FX_BOOL bModified) { - if (!m_pNode) { - return CXFA_WrapCertificate(NULL); - } - CXFA_Node* pCertsNode = - m_pNode->GetProperty(0, XFA_ELEMENT_Certificates, bModified); - return CXFA_WrapCertificate( - pCertsNode ? pCertsNode->GetProperty(0, XFA_ELEMENT_Issuers, bModified) - : NULL); -} -CFX_WideString CXFA_Filter::GetCertificatesKeyUsageString( - XFA_ATTRIBUTE eAttribute) { - if (!m_pNode) { - return FX_WSTRC(L""); - } - CXFA_Node* pCertsNode = m_pNode->GetProperty(0, XFA_ELEMENT_Certificates); - CXFA_Node* pKeyUsageNode = pCertsNode->GetProperty(0, XFA_ELEMENT_KeyUsage); - CFX_WideString wsAttributeValue; - pKeyUsageNode->GetAttribute(eAttribute, wsAttributeValue, FALSE); - return wsAttributeValue; -} -CXFA_Oids CXFA_Filter::GetCertificatesOids() { - if (!m_pNode) { - return CXFA_Oids(NULL); - } - CXFA_Node* pCertsNode = m_pNode->GetProperty(0, XFA_ELEMENT_Certificates); - return CXFA_Oids(pCertsNode ? pCertsNode->GetProperty(0, XFA_ELEMENT_Oids) - : NULL); -} -CXFA_WrapCertificate CXFA_Filter::GetCertificatesSigning(FX_BOOL bModified) { - if (!m_pNode) { - return CXFA_WrapCertificate(NULL); - } - CXFA_Node* pCertsNode = - m_pNode->GetProperty(0, XFA_ELEMENT_Certificates, bModified); - return CXFA_WrapCertificate( - pCertsNode ? pCertsNode->GetProperty(0, XFA_ELEMENT_Signing, bModified) - : NULL); -} -CXFA_DigestMethods CXFA_Filter::GetDigestMethods(FX_BOOL bModified) { - return CXFA_DigestMethods( - m_pNode ? m_pNode->GetProperty(0, XFA_ELEMENT_DigestMethods, bModified) - : NULL); -} -CXFA_Encodings CXFA_Filter::GetEncodings(FX_BOOL bModified) { - return CXFA_Encodings( - m_pNode ? m_pNode->GetProperty(0, XFA_ELEMENT_Encodings, bModified) - : NULL); -} -CXFA_EncryptionMethods CXFA_Filter::GetEncryptionMethods(FX_BOOL bModified) { - return CXFA_EncryptionMethods( - m_pNode - ? m_pNode->GetProperty(0, XFA_ELEMENT_EncryptionMethods, bModified) - : NULL); -} -XFA_ATTRIBUTEENUM CXFA_Filter::GetHandlerType() { - if (!m_pNode) { - return XFA_ATTRIBUTEENUM_Optional; - } - CXFA_Node* pHandlerNode = m_pNode->GetProperty(0, XFA_ELEMENT_Handler); - return XFA_GetEnumTypeAttribute(pHandlerNode); -} -CFX_WideString CXFA_Filter::GetHandlerContent() { - CFX_WideString wsContent; - if (m_pNode) { - CXFA_Node* pHandlerNode = m_pNode->GetProperty(0, XFA_ELEMENT_Handler); - pHandlerNode->TryContent(wsContent); - } - return wsContent; -} -XFA_ATTRIBUTEENUM CXFA_Filter::GetlockDocumentType() { - if (!m_pNode) { - return XFA_ATTRIBUTEENUM_Optional; - } - CXFA_Node* pLockDocNode = m_pNode->GetProperty(0, XFA_ELEMENT_LockDocument); - return XFA_GetEnumTypeAttribute(pLockDocNode); -} -CFX_WideString CXFA_Filter::GetlockDocumentContent() { - CFX_WideString wsContent = FX_WSTRC(L"auto"); - if (m_pNode) { - CXFA_Node* pLockDocNode = m_pNode->GetProperty(0, XFA_ELEMENT_LockDocument); - pLockDocNode->TryContent(wsContent); - } - return wsContent; -} -int32_t CXFA_Filter::GetMDPPermissions() { - int32_t iPermissions = 2; - if (m_pNode) { - CXFA_Node* pMDPNode = m_pNode->GetProperty(0, XFA_ELEMENT_Mdp); - if (!pMDPNode->TryInteger(XFA_ATTRIBUTE_Permissions, iPermissions, TRUE)) { - iPermissions = 2; - } - } - return iPermissions; -} -XFA_ATTRIBUTEENUM CXFA_Filter::GetMDPSignatureType() { - if (!m_pNode) { - return XFA_ATTRIBUTEENUM_Filter; - } - CXFA_Node* pMDPNode = m_pNode->GetProperty(0, XFA_ELEMENT_Mdp); - return XFA_GetEnumTypeAttribute(pMDPNode, XFA_ATTRIBUTE_SignatureType, - XFA_ATTRIBUTEENUM_Filter); -} -CXFA_Reasons CXFA_Filter::GetReasons(FX_BOOL bModified) { - return CXFA_Reasons(m_pNode ? m_pNode->GetProperty(0, XFA_ELEMENT_Reasons) - : NULL); -} -CFX_WideString CXFA_Filter::GetTimeStampServer() { - CFX_WideString wsServerURI; - if (m_pNode) { - CXFA_Node* pTimeStampNode = m_pNode->GetProperty(0, XFA_ELEMENT_TimeStamp); - pTimeStampNode->GetAttribute(XFA_ATTRIBUTE_Server, wsServerURI, FALSE); - } - return wsServerURI; -} -XFA_ATTRIBUTEENUM CXFA_Filter::GetTimeStampType() { - if (!m_pNode) { - return XFA_ATTRIBUTEENUM_Optional; - } - CXFA_Node* pTimeStampNode = m_pNode->GetProperty(0, XFA_ELEMENT_TimeStamp); - return XFA_GetEnumTypeAttribute(pTimeStampNode); -} -CFX_WideString CXFA_Certificate::GetCertificateName() { - CFX_WideString wsName; - if (m_pNode) { - m_pNode->GetAttribute(XFA_ATTRIBUTE_Name, wsName, FALSE); - } - return wsName; -} -CFX_WideString CXFA_Certificate::GetCertificateContent() { - CFX_WideString wsContent; - if (m_pNode) { - m_pNode->TryContent(wsContent); - } - return wsContent; -} -XFA_ATTRIBUTEENUM CXFA_WrapCertificate::GetType() { - return XFA_GetEnumTypeAttribute(m_pNode); -} -int32_t CXFA_WrapCertificate::CountCertificates() { - return m_pNode ? m_pNode->CountChildren(XFA_ELEMENT_Certificate) : 0; -} -CXFA_Certificate CXFA_WrapCertificate::GetCertificate(int32_t nIndex) { - return CXFA_Certificate( - (nIndex > -1 && m_pNode) - ? m_pNode->GetChild(nIndex, XFA_ELEMENT_Certificate) - : NULL); -} -XFA_ATTRIBUTEENUM CXFA_Oids::GetOidsType() { - return XFA_GetEnumTypeAttribute(m_pNode); -} -int32_t CXFA_Oids::CountOids() { - return m_pNode ? m_pNode->CountChildren(XFA_ELEMENT_Oid) : 0; -} -CFX_WideString CXFA_Oids::GetOidContent(int32_t nIndex) { - if (nIndex <= -1 || !m_pNode) { - return FX_WSTRC(L""); - } - CXFA_Node* pOidNode = m_pNode->GetChild(nIndex, XFA_ELEMENT_Oid); - if (!pOidNode) { - return FX_WSTRC(L""); - } - CFX_WideString wsContent; - pOidNode->TryContent(wsContent); - return wsContent; -} -XFA_ATTRIBUTEENUM CXFA_SubjectDNs::GetSubjectDNsType() { - return XFA_GetEnumTypeAttribute(m_pNode); -} -int32_t CXFA_SubjectDNs::CountSubjectDNs() { - return m_pNode ? m_pNode->CountChildren(XFA_ELEMENT_SubjectDN) : 0; -} -CFX_WideString CXFA_SubjectDNs::GetSubjectDNString(int32_t nIndex, - XFA_ATTRIBUTE eAttribute) { - if (nIndex <= -1 || !m_pNode) { - return FX_WSTRC(L""); - } - CXFA_Node* pSubjectDNNode = m_pNode->GetChild(nIndex, XFA_ELEMENT_SubjectDN); - if (!pSubjectDNNode) { - return FX_WSTRC(L""); - } - CFX_WideString wsAttributeValue; - pSubjectDNNode->GetAttribute(eAttribute, wsAttributeValue, FALSE); - return wsAttributeValue; -} -CFX_WideString CXFA_SubjectDNs::GetSubjectDNContent(int32_t nIndex) { - if (nIndex <= -1 || !m_pNode) { - return FX_WSTRC(L""); - } - CXFA_Node* pSubjectDNNode = m_pNode->GetChild(nIndex, XFA_ELEMENT_SubjectDN); - if (!pSubjectDNNode) { - return FX_WSTRC(L""); - } - CFX_WideString wsContent; - pSubjectDNNode->TryContent(wsContent); - return wsContent; -} -XFA_ATTRIBUTEENUM CXFA_DigestMethods::GetDigestMethodsType() { - return XFA_GetEnumTypeAttribute(m_pNode); -} -int32_t CXFA_DigestMethods::CountDigestMethods() { - return m_pNode ? m_pNode->CountChildren(XFA_ELEMENT_DigestMethod) : 0; -} -CFX_WideString CXFA_DigestMethods::GetDigestMethodContent(int32_t nIndex) { - if (nIndex <= -1 || !m_pNode) { - return FX_WSTRC(L""); - } - CXFA_Node* pDigestMethodNode = - m_pNode->GetChild(nIndex, XFA_ELEMENT_DigestMethod); - if (!pDigestMethodNode) { - return FX_WSTRC(L""); - } - CFX_WideString wsContent; - pDigestMethodNode->TryContent(wsContent); - return wsContent; -} -XFA_ATTRIBUTEENUM CXFA_Encodings::GetEncodingsType() { - return XFA_GetEnumTypeAttribute(m_pNode); -} -int32_t CXFA_Encodings::CountEncodings() { - return m_pNode ? m_pNode->CountChildren(XFA_ELEMENT_Encoding) : 0; -} -CFX_WideString CXFA_Encodings::GetEncodingContent(int32_t nIndex) { - if (nIndex <= -1 || !m_pNode) { - return FX_WSTRC(L""); - } - CXFA_Node* pEncodingNode = m_pNode->GetChild(nIndex, XFA_ELEMENT_Encoding); - if (!pEncodingNode) { - return FX_WSTRC(L""); - } - CFX_WideString wsContent; - pEncodingNode->TryContent(wsContent); - return wsContent; -} -XFA_ATTRIBUTEENUM CXFA_EncryptionMethods::GetEncryptionMethodsType() { - return XFA_GetEnumTypeAttribute(m_pNode); -} -int32_t CXFA_EncryptionMethods::CountEncryptionMethods() { - return m_pNode ? m_pNode->CountChildren(XFA_ELEMENT_EncryptionMethod) : 0; -} -CFX_WideString CXFA_EncryptionMethods::GetEncryptionMethodContent( - int32_t nIndex) { - if (nIndex <= -1 || !m_pNode) { - return FX_WSTRC(L""); - } - CXFA_Node* pEncryMethodNode = - m_pNode->GetChild(nIndex, XFA_ELEMENT_EncryptionMethod); - if (!pEncryMethodNode) { - return FX_WSTRC(L""); - } - CFX_WideString wsContent; - pEncryMethodNode->TryContent(wsContent); - return wsContent; -} -XFA_ATTRIBUTEENUM CXFA_Reasons::GetReasonsType() { - return XFA_GetEnumTypeAttribute(m_pNode); -} -int32_t CXFA_Reasons::CountReasons() { - return m_pNode ? m_pNode->CountChildren(XFA_ELEMENT_Reason) : 0; -} -CFX_WideString CXFA_Reasons::GetReasonContent(int32_t nIndex) { - if (nIndex <= -1 || !m_pNode) { - return FX_WSTRC(L""); - } - CXFA_Node* pReasonNode = m_pNode->GetChild(nIndex, XFA_ELEMENT_Reason); - if (!pReasonNode) { - return FX_WSTRC(L""); - } - CFX_WideString wsContent; - pReasonNode->TryContent(wsContent); - return wsContent; -} -XFA_ATTRIBUTEENUM CXFA_Manifest::GetAction() { - return XFA_GetEnumTypeAttribute(m_pNode, XFA_ATTRIBUTE_Action, - XFA_ATTRIBUTEENUM_Include); -} -int32_t CXFA_Manifest::CountReives() { - return m_pNode ? m_pNode->CountChildren(XFA_ELEMENT_Ref) : 0; -} -CFX_WideString CXFA_Manifest::GetRefContent(int32_t nIndex) { - if (nIndex <= -1 || !m_pNode) { - return FX_WSTRC(L""); - } - CXFA_Node* pRefNode = m_pNode->GetChild(nIndex, XFA_ELEMENT_Ref); - if (!pRefNode) { - return FX_WSTRC(L""); - } - CFX_WideString wsContent; - pRefNode->TryContent(wsContent); - return wsContent; -} diff --git a/xfa/src/fxfa/parser/xfa_parser.h b/xfa/src/fxfa/parser/xfa_parser.h deleted file mode 100644 index 814228177c..0000000000 --- a/xfa/src/fxfa/parser/xfa_parser.h +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXFA_PARSER_XFA_PARSER_H_ -#define XFA_SRC_FXFA_PARSER_XFA_PARSER_H_ - -#include "xfa/src/fxfa/parser/xfa_document.h" - -class IXFA_Parser { - public: - static IXFA_Parser* Create(IXFA_ObjFactory* pFactory, - FX_BOOL bDocumentParser = FALSE); - virtual ~IXFA_Parser() {} - virtual void Release() = 0; - virtual int32_t StartParse(IFX_FileRead* pStream, - XFA_XDPPACKET ePacketID = XFA_XDPPACKET_XDP) = 0; - virtual int32_t DoParse(IFX_Pause* pPause = NULL) = 0; - virtual int32_t ParseXMLData(const CFX_WideString& wsXML, - IFDE_XMLNode*& pXMLNode, - IFX_Pause* pPause = NULL) = 0; - virtual void ConstructXFANode(CXFA_Node* pXFANode, - IFDE_XMLNode* pXMLNode) = 0; - virtual IXFA_ObjFactory* GetFactory() const = 0; - virtual CXFA_Node* GetRootNode() const = 0; - virtual IFDE_XMLDoc* GetXMLDoc() const = 0; - virtual void CloseParser() = 0; -}; -class IXFA_DocParser : public IXFA_Parser { - public: - static IXFA_DocParser* Create(IXFA_Notify* pNotify); - virtual CXFA_Document* GetDocument() const = 0; - virtual IXFA_Notify* GetNotify() const = 0; -}; - -#endif // XFA_SRC_FXFA_PARSER_XFA_PARSER_H_ diff --git a/xfa/src/fxfa/parser/xfa_parser_imp.cpp b/xfa/src/fxfa/parser/xfa_parser_imp.cpp deleted file mode 100644 index a3d4f94089..0000000000 --- a/xfa/src/fxfa/parser/xfa_parser_imp.cpp +++ /dev/null @@ -1,1568 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fxfa/parser/xfa_parser_imp.h" - -#include "xfa/src/fgas/crt/fgas_codepage.h" -#include "xfa/src/fxfa/fm2js/xfa_fm2jsapi.h" -#include "xfa/src/fxfa/parser/xfa_basic_imp.h" -#include "xfa/src/fxfa/parser/xfa_docdata.h" -#include "xfa/src/fxfa/parser/xfa_doclayout.h" -#include "xfa/src/fxfa/parser/xfa_document.h" -#include "xfa/src/fxfa/parser/xfa_localemgr.h" -#include "xfa/src/fxfa/parser/xfa_object.h" -#include "xfa/src/fxfa/parser/xfa_parser.h" -#include "xfa/src/fxfa/parser/xfa_script.h" -#include "xfa/src/fxfa/parser/xfa_utils.h" - -IXFA_Parser* IXFA_Parser::Create(IXFA_ObjFactory* pFactory, - FX_BOOL bDocumentParser) { - return new CXFA_SimpleParser(pFactory, bDocumentParser); -} -CXFA_SimpleParser::CXFA_SimpleParser(IXFA_ObjFactory* pFactory, - FX_BOOL bDocumentParser) - : m_pXMLParser(nullptr), - m_pXMLDoc(nullptr), - m_pStream(nullptr), - m_pFileRead(nullptr), - m_pFactory(pFactory), - m_pRootNode(nullptr), - m_ePacketID(XFA_XDPPACKET_UNKNOWN), - m_bDocumentParser(bDocumentParser) {} -CXFA_SimpleParser::~CXFA_SimpleParser() { - CloseParser(); -} -void CXFA_SimpleParser::SetFactory(IXFA_ObjFactory* pFactory) { - m_pFactory = pFactory; -} -static IFDE_XMLNode* XFA_FDEExtension_GetDocumentNode( - IFDE_XMLDoc* pXMLDoc, - FX_BOOL bVerifyWellFormness = FALSE) { - if (!pXMLDoc) { - return NULL; - } - IFDE_XMLNode* pXMLFakeRoot = pXMLDoc->GetRoot(); - for (IFDE_XMLNode* pXMLNode = - pXMLFakeRoot->GetNodeItem(IFDE_XMLNode::FirstChild); - pXMLNode; pXMLNode = pXMLNode->GetNodeItem(IFDE_XMLNode::NextSibling)) { - if (pXMLNode->GetType() == FDE_XMLNODE_Element) { - if (bVerifyWellFormness) { - for (IFDE_XMLNode* pNextNode = - pXMLNode->GetNodeItem(IFDE_XMLNode::NextSibling); - pNextNode; - pNextNode = pNextNode->GetNodeItem(IFDE_XMLNode::NextSibling)) { - if (pNextNode->GetType() == FDE_XMLNODE_Element) { - return FALSE; - } - } - } - return pXMLNode; - } - } - return NULL; -} -int32_t CXFA_SimpleParser::StartParse(IFX_FileRead* pStream, - XFA_XDPPACKET ePacketID) { - CloseParser(); - m_pFileRead = pStream; - m_pStream = IFX_Stream::CreateStream( - pStream, FX_STREAMACCESS_Read | FX_STREAMACCESS_Text); - if (m_pStream == NULL) { - return XFA_PARSESTATUS_StreamErr; - } - FX_WORD wCodePage = m_pStream->GetCodePage(); - if (wCodePage != FX_CODEPAGE_UTF16LE && wCodePage != FX_CODEPAGE_UTF16BE && - wCodePage != FX_CODEPAGE_UTF8) { - m_pStream->SetCodePage(FX_CODEPAGE_UTF8); - } - m_pXMLDoc = IFDE_XMLDoc::Create(); - if (m_pXMLDoc == NULL) { - return XFA_PARSESTATUS_StatusErr; - } - m_pXMLParser = new CXFA_XMLParser(m_pXMLDoc->GetRoot(), m_pStream); - if (m_pXMLParser == NULL) { - return XFA_PARSESTATUS_StatusErr; - } - if (!m_pXMLDoc->LoadXML(m_pXMLParser)) { - return XFA_PARSESTATUS_StatusErr; - } - m_ePacketID = ePacketID; - return XFA_PARSESTATUS_Ready; -} -int32_t CXFA_SimpleParser::DoParse(IFX_Pause* pPause) { - if (m_pXMLDoc == NULL || m_ePacketID == XFA_XDPPACKET_UNKNOWN) { - return XFA_PARSESTATUS_StatusErr; - } - int32_t iRet = m_pXMLDoc->DoLoad(pPause); - if (iRet < 0) { - return XFA_PARSESTATUS_SyntaxErr; - } - if (iRet < 100) { - return iRet / 2; - } - m_pRootNode = ParseAsXDPPacket(XFA_FDEExtension_GetDocumentNode(m_pXMLDoc), - m_ePacketID); - m_pXMLDoc->CloseXML(); - if (m_pStream) { - m_pStream->Release(); - m_pStream = NULL; - } - if (!m_pRootNode) { - return XFA_PARSESTATUS_StatusErr; - } - return XFA_PARSESTATUS_Done; -} -int32_t CXFA_SimpleParser::ParseXMLData(const CFX_WideString& wsXML, - IFDE_XMLNode*& pXMLNode, - IFX_Pause* pPause) { - CloseParser(); - pXMLNode = NULL; - IFX_Stream* pStream = XFA_CreateWideTextRead(wsXML); - if (!pStream) { - return XFA_PARSESTATUS_StreamErr; - } - m_pStream = pStream; - m_pXMLDoc = IFDE_XMLDoc::Create(); - if (m_pXMLDoc == NULL) { - return XFA_PARSESTATUS_StatusErr; - } - CXFA_XMLParser* pParser = new CXFA_XMLParser(m_pXMLDoc->GetRoot(), m_pStream); - if (pParser == NULL) { - return XFA_PARSESTATUS_StatusErr; - } - - pParser->m_dwCheckStatus = 0x03; - if (!m_pXMLDoc->LoadXML(pParser)) { - return XFA_PARSESTATUS_StatusErr; - } - int32_t iRet = m_pXMLDoc->DoLoad(pPause); - if (iRet < 0 || iRet >= 100) { - m_pXMLDoc->CloseXML(); - } - if (iRet < 0) { - return XFA_PARSESTATUS_SyntaxErr; - } - if (iRet < 100) { - return iRet / 2; - } - if (m_pStream) { - m_pStream->Release(); - m_pStream = NULL; - } - pXMLNode = XFA_FDEExtension_GetDocumentNode(m_pXMLDoc); - return XFA_PARSESTATUS_Done; -} - -void CXFA_SimpleParser::ConstructXFANode(CXFA_Node* pXFANode, - IFDE_XMLNode* pXMLNode) { - XFA_XDPPACKET ePacketID = (XFA_XDPPACKET)pXFANode->GetPacketID(); - if (ePacketID == XFA_XDPPACKET_Datasets) { - if (pXFANode->GetClassID() == XFA_ELEMENT_DataValue) { - for (IFDE_XMLNode* pXMLChild = - pXMLNode->GetNodeItem(IFDE_XMLNode::FirstChild); - pXMLChild; - pXMLChild = pXMLChild->GetNodeItem(IFDE_XMLNode::NextSibling)) { - FDE_XMLNODETYPE eNodeType = pXMLChild->GetType(); - if (eNodeType == FDE_XMLNODE_Instruction) - continue; - - if (eNodeType == FDE_XMLNODE_Element) { - CXFA_Node* pXFAChild = m_pFactory->CreateNode(XFA_XDPPACKET_Datasets, - XFA_ELEMENT_DataValue); - if (!pXFAChild) - return; - - CFX_WideString wsNodeStr; - ((IFDE_XMLElement*)pXMLChild)->GetLocalTagName(wsNodeStr); - pXFAChild->SetCData(XFA_ATTRIBUTE_Name, wsNodeStr); - CFX_WideString wsChildValue; - XFA_GetPlainTextFromRichText((IFDE_XMLElement*)pXMLChild, - wsChildValue); - if (!wsChildValue.IsEmpty()) - pXFAChild->SetCData(XFA_ATTRIBUTE_Value, wsChildValue); - - pXFANode->InsertChild(pXFAChild); - pXFAChild->SetXMLMappingNode(pXMLChild); - pXFAChild->SetFlag(XFA_NODEFLAG_Initialized, TRUE, FALSE); - break; - } - } - m_pRootNode = pXFANode; - } else { - m_pRootNode = DataLoader(pXFANode, pXMLNode, TRUE); - } - } else if (pXFANode->GetObjectType() == XFA_OBJECTTYPE_ContentNode) { - ParseContentNode(pXFANode, pXMLNode, ePacketID); - m_pRootNode = pXFANode; - } else { - m_pRootNode = NormalLoader(pXFANode, pXMLNode, ePacketID); - } -} - -FX_BOOL XFA_FDEExtension_ResolveNamespaceQualifier( - IFDE_XMLElement* pNode, - const CFX_WideStringC& wsQualifier, - CFX_WideString& wsNamespaceURI) { - if (!pNode) { - return FALSE; - } - IFDE_XMLNode* pFakeRoot = pNode->GetNodeItem(IFDE_XMLNode::Root); - CFX_WideString wsNSAttribute; - FX_BOOL bRet = FALSE; - if (wsQualifier.IsEmpty()) { - wsNSAttribute = FX_WSTRC(L"xmlns"); - bRet = TRUE; - } else { - wsNSAttribute = FX_WSTRC(L"xmlns:") + wsQualifier; - } - for (; pNode != pFakeRoot; - pNode = (IFDE_XMLElement*)pNode->GetNodeItem(IFDE_XMLNode::Parent)) { - if (pNode->GetType() != FDE_XMLNODE_Element) { - continue; - } - if (pNode->HasAttribute(wsNSAttribute)) { - pNode->GetString(wsNSAttribute, wsNamespaceURI); - return TRUE; - } - } - wsNamespaceURI.Empty(); - return bRet; -} -static inline void XFA_FDEExtension_GetElementTagNamespaceURI( - IFDE_XMLElement* pElement, - CFX_WideString& wsNamespaceURI) { - CFX_WideString wsNodeStr; - pElement->GetNamespacePrefix(wsNodeStr); - if (!XFA_FDEExtension_ResolveNamespaceQualifier(pElement, wsNodeStr, - wsNamespaceURI)) { - wsNamespaceURI.Empty(); - } -} -static FX_BOOL XFA_FDEExtension_MatchNodeName( - IFDE_XMLNode* pNode, - const CFX_WideStringC& wsLocalTagName, - const CFX_WideStringC& wsNamespaceURIPrefix, - FX_DWORD eMatchFlags = XFA_XDPPACKET_FLAGS_NOMATCH) { - if (!pNode || pNode->GetType() != FDE_XMLNODE_Element) { - return FALSE; - } - IFDE_XMLElement* pElement = reinterpret_cast(pNode); - CFX_WideString wsNodeStr; - pElement->GetLocalTagName(wsNodeStr); - if (wsNodeStr != wsLocalTagName) { - return FALSE; - } - XFA_FDEExtension_GetElementTagNamespaceURI(pElement, wsNodeStr); - if (eMatchFlags & XFA_XDPPACKET_FLAGS_NOMATCH) { - return TRUE; - } - if (eMatchFlags & XFA_XDPPACKET_FLAGS_PREFIXMATCH) { - return wsNodeStr.Left(wsNamespaceURIPrefix.GetLength()) == - wsNamespaceURIPrefix; - } - return wsNodeStr == wsNamespaceURIPrefix; -} -static FX_BOOL XFA_FDEExtension_GetAttributeLocalName( - const CFX_WideStringC& wsAttributeName, - CFX_WideString& wsLocalAttrName) { - CFX_WideString wsAttrName(wsAttributeName); - FX_STRSIZE iFind = wsAttrName.Find(L':', 0); - if (iFind < 0) { - wsLocalAttrName = wsAttrName; - return FALSE; - } else { - wsLocalAttrName = wsAttrName.Right(wsAttrName.GetLength() - iFind - 1); - return TRUE; - } -} -static FX_BOOL XFA_FDEExtension_ResolveAttribute( - IFDE_XMLElement* pElement, - const CFX_WideStringC& wsAttributeName, - CFX_WideString& wsLocalAttrName, - CFX_WideString& wsNamespaceURI) { - CFX_WideString wsAttrName(wsAttributeName); - CFX_WideString wsNSPrefix; - if (XFA_FDEExtension_GetAttributeLocalName(wsAttributeName, - wsLocalAttrName)) { - wsNSPrefix = wsAttrName.Left(wsAttributeName.GetLength() - - wsLocalAttrName.GetLength() - 1); - } - if (wsLocalAttrName == FX_WSTRC(L"xmlns") || - wsNSPrefix == FX_WSTRC(L"xmlns") || wsNSPrefix == FX_WSTRC(L"xml")) { - return FALSE; - } - if (!XFA_FDEExtension_ResolveNamespaceQualifier(pElement, wsNSPrefix, - wsNamespaceURI)) { - wsNamespaceURI.Empty(); - return FALSE; - } - return TRUE; -} -static FX_BOOL XFA_FDEExtension_FindAttributeWithNS( - IFDE_XMLElement* pElement, - const CFX_WideStringC& wsLocalAttributeName, - const CFX_WideStringC& wsNamespaceURIPrefix, - CFX_WideString& wsValue, - FX_BOOL bMatchNSAsPrefix = FALSE) { - if (!pElement) { - return FALSE; - } - CFX_WideString wsAttrName; - CFX_WideString wsAttrValue; - CFX_WideString wsAttrNS; - for (int32_t iAttrCount = pElement->CountAttributes(), i = 0; i < iAttrCount; - i++) { - pElement->GetAttribute(i, wsAttrName, wsAttrValue); - FX_STRSIZE iFind = wsAttrName.Find(L':', 0); - CFX_WideString wsNSPrefix; - if (iFind < 0) { - if (wsLocalAttributeName != wsAttrName) { - continue; - } - } else { - if (wsLocalAttributeName != - wsAttrName.Right(wsAttrName.GetLength() - iFind - 1)) { - continue; - } - wsNSPrefix = wsAttrName.Left(iFind); - } - if (!XFA_FDEExtension_ResolveNamespaceQualifier(pElement, wsNSPrefix, - wsAttrNS)) { - continue; - } - if (bMatchNSAsPrefix) { - if (wsAttrNS.Left(wsNamespaceURIPrefix.GetLength()) != - wsNamespaceURIPrefix) { - continue; - } - } else { - if (wsAttrNS != wsNamespaceURIPrefix) { - continue; - } - } - wsValue = wsAttrValue; - return TRUE; - } - return FALSE; -} -CXFA_Node* CXFA_SimpleParser::ParseAsXDPPacket(IFDE_XMLNode* pXMLDocumentNode, - XFA_XDPPACKET ePacketID) { - switch (ePacketID) { - case XFA_XDPPACKET_UNKNOWN: - return NULL; - case XFA_XDPPACKET_XDP: - return ParseAsXDPPacket_XDP(pXMLDocumentNode, ePacketID); - case XFA_XDPPACKET_Config: - return ParseAsXDPPacket_Config(pXMLDocumentNode, ePacketID); - case XFA_XDPPACKET_Template: - case XFA_XDPPACKET_Form: - return ParseAsXDPPacket_TemplateForm(pXMLDocumentNode, ePacketID); - case XFA_XDPPACKET_Datasets: - return ParseAsXDPPacket_Data(pXMLDocumentNode, ePacketID); - case XFA_XDPPACKET_Xdc: - return ParseAsXDPPacket_Xdc(pXMLDocumentNode, ePacketID); - case XFA_XDPPACKET_LocaleSet: - case XFA_XDPPACKET_ConnectionSet: - case XFA_XDPPACKET_SourceSet: - return ParseAsXDPPacket_LocaleConnectionSourceSet(pXMLDocumentNode, - ePacketID); - default: - return ParseAsXDPPacket_User(pXMLDocumentNode, ePacketID); - } - return NULL; -} -CXFA_Node* CXFA_SimpleParser::ParseAsXDPPacket_XDP( - IFDE_XMLNode* pXMLDocumentNode, - XFA_XDPPACKET ePacketID) { - if (!XFA_FDEExtension_MatchNodeName( - pXMLDocumentNode, XFA_GetPacketByIndex(XFA_PACKET_XDP)->pName, - XFA_GetPacketByIndex(XFA_PACKET_XDP)->pURI, - XFA_GetPacketByIndex(XFA_PACKET_XDP)->eFlags)) { - return nullptr; - } - CXFA_Node* pXFARootNode = - m_pFactory->CreateNode(XFA_XDPPACKET_XDP, XFA_ELEMENT_Xfa); - if (!pXFARootNode) { - return nullptr; - } - m_pRootNode = pXFARootNode; - pXFARootNode->SetCData(XFA_ATTRIBUTE_Name, FX_WSTRC(L"xfa")); - { - IFDE_XMLElement* pElement = (IFDE_XMLElement*)pXMLDocumentNode; - int32_t iAttributeCount = pElement->CountAttributes(); - for (int32_t i = 0; i < iAttributeCount; i++) { - CFX_WideString wsAttriName, wsAttriValue; - pElement->GetAttribute(i, wsAttriName, wsAttriValue); - if (wsAttriName == FX_WSTRC(L"uuid")) { - pXFARootNode->SetCData(XFA_ATTRIBUTE_Uuid, wsAttriValue); - } else if (wsAttriName == FX_WSTRC(L"timeStamp")) { - pXFARootNode->SetCData(XFA_ATTRIBUTE_TimeStamp, wsAttriValue); - } - } - } - IFDE_XMLNode* pXMLConfigDOMRoot = nullptr; - CXFA_Node* pXFAConfigDOMRoot = nullptr; - { - for (IFDE_XMLNode* pChildItem = - pXMLDocumentNode->GetNodeItem(IFDE_XMLNode::FirstChild); - pChildItem; - pChildItem = pChildItem->GetNodeItem(IFDE_XMLNode::NextSibling)) { - const XFA_PACKETINFO* pPacketInfo = - XFA_GetPacketByIndex(XFA_PACKET_Config); - if (!XFA_FDEExtension_MatchNodeName(pChildItem, pPacketInfo->pName, - pPacketInfo->pURI, - pPacketInfo->eFlags)) { - continue; - } - if (pXFARootNode->GetFirstChildByName(pPacketInfo->uHash)) { - return nullptr; - } - pXMLConfigDOMRoot = pChildItem; - pXFAConfigDOMRoot = - ParseAsXDPPacket_Config(pXMLConfigDOMRoot, XFA_XDPPACKET_Config); - pXFARootNode->InsertChild(pXFAConfigDOMRoot, NULL); - } - } - IFDE_XMLNode* pXMLDatasetsDOMRoot = nullptr; - IFDE_XMLNode* pXMLFormDOMRoot = nullptr; - IFDE_XMLNode* pXMLTemplateDOMRoot = nullptr; - { - for (IFDE_XMLNode* pChildItem = - pXMLDocumentNode->GetNodeItem(IFDE_XMLNode::FirstChild); - pChildItem; - pChildItem = pChildItem->GetNodeItem(IFDE_XMLNode::NextSibling)) { - if (!pChildItem || pChildItem->GetType() != FDE_XMLNODE_Element) { - continue; - } - if (pChildItem == pXMLConfigDOMRoot) { - continue; - } - IFDE_XMLElement* pElement = - reinterpret_cast(pChildItem); - CFX_WideString wsPacketName; - pElement->GetLocalTagName(wsPacketName); - const XFA_PACKETINFO* pPacketInfo = XFA_GetPacketByName(wsPacketName); - if (pPacketInfo && pPacketInfo->pURI) { - if (!XFA_FDEExtension_MatchNodeName(pElement, pPacketInfo->pName, - pPacketInfo->pURI, - pPacketInfo->eFlags)) { - pPacketInfo = nullptr; - } - } - XFA_XDPPACKET ePacket = - pPacketInfo ? pPacketInfo->eName : XFA_XDPPACKET_USER; - if (ePacket == XFA_XDPPACKET_XDP) { - continue; - } - if (ePacket == XFA_XDPPACKET_Datasets) { - if (pXMLDatasetsDOMRoot) { - return nullptr; - } - pXMLDatasetsDOMRoot = pElement; - } else if (ePacket == XFA_XDPPACKET_Form) { - if (pXMLFormDOMRoot) { - return nullptr; - } - pXMLFormDOMRoot = pElement; - } else if (ePacket == XFA_XDPPACKET_Template) { - if (pXMLTemplateDOMRoot) { - // Found a duplicate template packet. - return nullptr; - } - CXFA_Node* pPacketNode = ParseAsXDPPacket(pElement, ePacket); - if (pPacketNode) { - pXMLTemplateDOMRoot = pElement; - pXFARootNode->InsertChild(pPacketNode); - } - } else { - CXFA_Node* pPacketNode = ParseAsXDPPacket(pElement, ePacket); - if (pPacketNode) { - if (pPacketInfo && - (pPacketInfo->eFlags & XFA_XDPPACKET_FLAGS_SUPPORTONE) && - pXFARootNode->GetFirstChildByName(pPacketInfo->uHash)) { - return nullptr; - } - pXFARootNode->InsertChild(pPacketNode); - } - } - } - } - if (!pXMLTemplateDOMRoot) { - // No template is found. - return nullptr; - } - if (pXMLDatasetsDOMRoot) { - CXFA_Node* pPacketNode = - ParseAsXDPPacket(pXMLDatasetsDOMRoot, XFA_XDPPACKET_Datasets); - if (pPacketNode) { - pXFARootNode->InsertChild(pPacketNode); - } - } - if (pXMLFormDOMRoot) { - CXFA_Node* pPacketNode = - ParseAsXDPPacket(pXMLFormDOMRoot, XFA_XDPPACKET_Form); - if (pPacketNode) { - pXFARootNode->InsertChild(pPacketNode); - } - } - pXFARootNode->SetXMLMappingNode(pXMLDocumentNode); - return pXFARootNode; -} -CXFA_Node* CXFA_SimpleParser::ParseAsXDPPacket_Config( - IFDE_XMLNode* pXMLDocumentNode, - XFA_XDPPACKET ePacketID) { - if (!XFA_FDEExtension_MatchNodeName( - pXMLDocumentNode, XFA_GetPacketByIndex(XFA_PACKET_Config)->pName, - XFA_GetPacketByIndex(XFA_PACKET_Config)->pURI, - XFA_GetPacketByIndex(XFA_PACKET_Config)->eFlags)) { - return NULL; - } - CXFA_Node* pNode = - m_pFactory->CreateNode(XFA_XDPPACKET_Config, XFA_ELEMENT_Config); - if (!pNode) { - return NULL; - } - pNode->SetCData(XFA_ATTRIBUTE_Name, - XFA_GetPacketByIndex(XFA_PACKET_Config)->pName); - if (!NormalLoader(pNode, pXMLDocumentNode, ePacketID)) { - return NULL; - } - pNode->SetXMLMappingNode(pXMLDocumentNode); - return pNode; -} -CXFA_Node* CXFA_SimpleParser::ParseAsXDPPacket_TemplateForm( - IFDE_XMLNode* pXMLDocumentNode, - XFA_XDPPACKET ePacketID) { - CXFA_Node* pNode = NULL; - if (ePacketID == XFA_XDPPACKET_Template) { - if (XFA_FDEExtension_MatchNodeName( - pXMLDocumentNode, XFA_GetPacketByIndex(XFA_PACKET_Template)->pName, - XFA_GetPacketByIndex(XFA_PACKET_Template)->pURI, - XFA_GetPacketByIndex(XFA_PACKET_Template)->eFlags)) { - pNode = - m_pFactory->CreateNode(XFA_XDPPACKET_Template, XFA_ELEMENT_Template); - if (!pNode) { - return NULL; - } - pNode->SetCData(XFA_ATTRIBUTE_Name, - XFA_GetPacketByIndex(XFA_PACKET_Template)->pName); - if (m_bDocumentParser) { - CFX_WideString wsNamespaceURI; - IFDE_XMLElement* pXMLDocumentElement = - (IFDE_XMLElement*)pXMLDocumentNode; - pXMLDocumentElement->GetNamespaceURI(wsNamespaceURI); - if (wsNamespaceURI.IsEmpty()) { - pXMLDocumentElement->GetString(L"xmlns:xfa", wsNamespaceURI); - } - pNode->GetDocument()->RecognizeXFAVersionNumber(wsNamespaceURI); - } - if (!NormalLoader(pNode, pXMLDocumentNode, ePacketID)) { - return NULL; - } - } - } else if (ePacketID == XFA_XDPPACKET_Form) { - if (XFA_FDEExtension_MatchNodeName( - pXMLDocumentNode, XFA_GetPacketByIndex(XFA_PACKET_Form)->pName, - XFA_GetPacketByIndex(XFA_PACKET_Form)->pURI, - XFA_GetPacketByIndex(XFA_PACKET_Form)->eFlags)) { - IFDE_XMLElement* pXMLDocumentElement = (IFDE_XMLElement*)pXMLDocumentNode; - CFX_WideString wsChecksum; - pXMLDocumentElement->GetString(L"checksum", wsChecksum); - if (wsChecksum.GetLength() != 28 || - m_pXMLParser->m_dwCheckStatus != 0x03) { - return NULL; - } - IXFA_ChecksumContext* pChecksum = XFA_Checksum_Create(); - pChecksum->StartChecksum(); - pChecksum->UpdateChecksum(m_pFileRead, m_pXMLParser->m_nStart[0], - m_pXMLParser->m_nSize[0]); - pChecksum->UpdateChecksum(m_pFileRead, m_pXMLParser->m_nStart[1], - m_pXMLParser->m_nSize[1]); - pChecksum->FinishChecksum(); - CFX_ByteString bsCheck; - pChecksum->GetChecksum(bsCheck); - pChecksum->Release(); - if (bsCheck != wsChecksum.UTF8Encode()) { - return NULL; - } - - pNode = m_pFactory->CreateNode(XFA_XDPPACKET_Form, XFA_ELEMENT_Form); - if (!pNode) { - return NULL; - } - pNode->SetCData(XFA_ATTRIBUTE_Name, - XFA_GetPacketByIndex(XFA_PACKET_Form)->pName); - pNode->SetAttribute(XFA_ATTRIBUTE_Checksum, wsChecksum); - CXFA_Node* pTemplateRoot = - m_pRootNode->GetFirstChildByClass(XFA_ELEMENT_Template); - CXFA_Node* pTemplateChosen = - pTemplateRoot - ? pTemplateRoot->GetFirstChildByClass(XFA_ELEMENT_Subform) - : NULL; - FX_BOOL bUseAttribute = TRUE; - if (pTemplateChosen && - pTemplateChosen->GetEnum(XFA_ATTRIBUTE_RestoreState) != - XFA_ATTRIBUTEENUM_Auto) { - bUseAttribute = FALSE; - } - if (!NormalLoader(pNode, pXMLDocumentNode, ePacketID, bUseAttribute)) { - return NULL; - } - } - } - if (pNode) { - pNode->SetXMLMappingNode(pXMLDocumentNode); - } - return pNode; -} -static IFDE_XMLNode* XFA_GetDataSetsFromXDP(IFDE_XMLNode* pXMLDocumentNode) { - if (XFA_FDEExtension_MatchNodeName( - pXMLDocumentNode, XFA_GetPacketByIndex(XFA_PACKET_Datasets)->pName, - XFA_GetPacketByIndex(XFA_PACKET_Datasets)->pURI, - XFA_GetPacketByIndex(XFA_PACKET_Datasets)->eFlags)) { - return pXMLDocumentNode; - } - if (!XFA_FDEExtension_MatchNodeName( - pXMLDocumentNode, XFA_GetPacketByIndex(XFA_PACKET_XDP)->pName, - XFA_GetPacketByIndex(XFA_PACKET_XDP)->pURI, - XFA_GetPacketByIndex(XFA_PACKET_XDP)->eFlags)) { - return NULL; - } - for (IFDE_XMLNode* pDatasetsNode = - pXMLDocumentNode->GetNodeItem(IFDE_XMLNode::FirstChild); - pDatasetsNode; - pDatasetsNode = pDatasetsNode->GetNodeItem(IFDE_XMLNode::NextSibling)) { - if (!XFA_FDEExtension_MatchNodeName( - pDatasetsNode, XFA_GetPacketByIndex(XFA_PACKET_Datasets)->pName, - XFA_GetPacketByIndex(XFA_PACKET_Datasets)->pURI, - XFA_GetPacketByIndex(XFA_PACKET_Datasets)->eFlags)) { - continue; - } - return pDatasetsNode; - } - return NULL; -} -CXFA_Node* CXFA_SimpleParser::ParseAsXDPPacket_Data( - IFDE_XMLNode* pXMLDocumentNode, - XFA_XDPPACKET ePacketID) { - IFDE_XMLNode* pDatasetsXMLNode = XFA_GetDataSetsFromXDP(pXMLDocumentNode); - if (pDatasetsXMLNode) { - CXFA_Node* pNode = - m_pFactory->CreateNode(XFA_XDPPACKET_Datasets, XFA_ELEMENT_DataModel); - if (!pNode) { - return NULL; - } - pNode->SetCData(XFA_ATTRIBUTE_Name, - XFA_GetPacketByIndex(XFA_PACKET_Datasets)->pName); - if (!DataLoader(pNode, pDatasetsXMLNode, FALSE)) { - return NULL; - } - pNode->SetXMLMappingNode(pDatasetsXMLNode); - return pNode; - } - IFDE_XMLNode* pDataXMLNode = NULL; - if (XFA_FDEExtension_MatchNodeName( - pXMLDocumentNode, FX_WSTRC(L"data"), - XFA_GetPacketByIndex(XFA_PACKET_Datasets)->pURI, - XFA_GetPacketByIndex(XFA_PACKET_Datasets)->eFlags)) { - ((IFDE_XMLElement*)pXMLDocumentNode)->RemoveAttribute(L"xmlns:xfa"); - pDataXMLNode = pXMLDocumentNode; - } else { - IFDE_XMLElement* pDataElement = - IFDE_XMLElement::Create(FX_WSTRC(L"xfa:data")); - IFDE_XMLNode* pParentXMLNode = - pXMLDocumentNode->GetNodeItem(IFDE_XMLNode::Parent); - if (pParentXMLNode) { - pParentXMLNode->RemoveChildNode(pXMLDocumentNode); - } - FXSYS_assert(pXMLDocumentNode->GetType() == FDE_XMLNODE_Element); - if (pXMLDocumentNode->GetType() == FDE_XMLNODE_Element) { - ((IFDE_XMLElement*)pXMLDocumentNode)->RemoveAttribute(L"xmlns:xfa"); - } - pDataElement->InsertChildNode(pXMLDocumentNode); - pDataXMLNode = pDataElement; - } - if (pDataXMLNode) { - CXFA_Node* pNode = - m_pFactory->CreateNode(XFA_XDPPACKET_Datasets, XFA_ELEMENT_DataGroup); - if (!pNode) { - if (pDataXMLNode != pXMLDocumentNode) { - pDataXMLNode->Release(); - } - return NULL; - } - CFX_WideString wsLocalName; - ((IFDE_XMLElement*)pDataXMLNode)->GetLocalTagName(wsLocalName); - pNode->SetCData(XFA_ATTRIBUTE_Name, wsLocalName); - if (!DataLoader(pNode, pDataXMLNode, TRUE)) { - return NULL; - } - pNode->SetXMLMappingNode(pDataXMLNode); - if (pDataXMLNode != pXMLDocumentNode) { - pNode->SetFlag(XFA_NODEFLAG_OwnXMLNode, TRUE, FALSE); - } - return pNode; - } - return NULL; -} -CXFA_Node* CXFA_SimpleParser::ParseAsXDPPacket_LocaleConnectionSourceSet( - IFDE_XMLNode* pXMLDocumentNode, - XFA_XDPPACKET ePacketID) { - CXFA_Node* pNode = NULL; - if (ePacketID == XFA_XDPPACKET_LocaleSet) { - if (XFA_FDEExtension_MatchNodeName( - pXMLDocumentNode, XFA_GetPacketByIndex(XFA_PACKET_LocaleSet)->pName, - XFA_GetPacketByIndex(XFA_PACKET_LocaleSet)->pURI, - XFA_GetPacketByIndex(XFA_PACKET_LocaleSet)->eFlags)) { - pNode = m_pFactory->CreateNode(XFA_XDPPACKET_LocaleSet, - XFA_ELEMENT_LocaleSet); - if (!pNode) { - return NULL; - } - pNode->SetCData(XFA_ATTRIBUTE_Name, - XFA_GetPacketByIndex(XFA_PACKET_LocaleSet)->pName); - if (!NormalLoader(pNode, pXMLDocumentNode, ePacketID)) { - return NULL; - } - } - } else if (ePacketID == XFA_XDPPACKET_ConnectionSet) { - if (XFA_FDEExtension_MatchNodeName( - pXMLDocumentNode, - XFA_GetPacketByIndex(XFA_PACKET_ConnectionSet)->pName, - XFA_GetPacketByIndex(XFA_PACKET_ConnectionSet)->pURI, - XFA_GetPacketByIndex(XFA_PACKET_ConnectionSet)->eFlags)) { - pNode = m_pFactory->CreateNode(XFA_XDPPACKET_ConnectionSet, - XFA_ELEMENT_ConnectionSet); - if (!pNode) { - return NULL; - } - pNode->SetCData(XFA_ATTRIBUTE_Name, - XFA_GetPacketByIndex(XFA_PACKET_ConnectionSet)->pName); - if (!NormalLoader(pNode, pXMLDocumentNode, ePacketID)) { - return NULL; - } - } - } else if (ePacketID == XFA_XDPPACKET_SourceSet) { - if (XFA_FDEExtension_MatchNodeName( - pXMLDocumentNode, XFA_GetPacketByIndex(XFA_PACKET_SourceSet)->pName, - XFA_GetPacketByIndex(XFA_PACKET_SourceSet)->pURI, - XFA_GetPacketByIndex(XFA_PACKET_SourceSet)->eFlags)) { - pNode = m_pFactory->CreateNode(XFA_XDPPACKET_SourceSet, - XFA_ELEMENT_SourceSet); - if (!pNode) { - return NULL; - } - pNode->SetCData(XFA_ATTRIBUTE_Name, - XFA_GetPacketByIndex(XFA_PACKET_SourceSet)->pName); - if (!NormalLoader(pNode, pXMLDocumentNode, ePacketID)) { - return NULL; - } - } - } - if (pNode) { - pNode->SetXMLMappingNode(pXMLDocumentNode); - } - return pNode; -} -CXFA_Node* CXFA_SimpleParser::ParseAsXDPPacket_Xdc( - IFDE_XMLNode* pXMLDocumentNode, - XFA_XDPPACKET ePacketID) { - if (XFA_FDEExtension_MatchNodeName( - pXMLDocumentNode, XFA_GetPacketByIndex(XFA_PACKET_Xdc)->pName, - XFA_GetPacketByIndex(XFA_PACKET_Xdc)->pURI, - XFA_GetPacketByIndex(XFA_PACKET_Xdc)->eFlags)) { - CXFA_Node* pNode = - m_pFactory->CreateNode(XFA_XDPPACKET_Xdc, XFA_ELEMENT_Xdc); - if (!pNode) { - return NULL; - } - pNode->SetCData(XFA_ATTRIBUTE_Name, - XFA_GetPacketByIndex(XFA_PACKET_Xdc)->pName); - pNode->SetXMLMappingNode(pXMLDocumentNode); - return pNode; - } - return NULL; -} -CXFA_Node* CXFA_SimpleParser::ParseAsXDPPacket_User( - IFDE_XMLNode* pXMLDocumentNode, - XFA_XDPPACKET ePacketID) { - CXFA_Node* pNode = - m_pFactory->CreateNode(XFA_XDPPACKET_XDP, XFA_ELEMENT_Packet); - if (!pNode) { - return NULL; - } - CFX_WideString wsName; - ((IFDE_XMLElement*)pXMLDocumentNode)->GetLocalTagName(wsName); - pNode->SetCData(XFA_ATTRIBUTE_Name, wsName); - if (!UserPacketLoader(pNode, pXMLDocumentNode)) { - return NULL; - } - pNode->SetXMLMappingNode(pXMLDocumentNode); - return pNode; -} -CXFA_Node* CXFA_SimpleParser::UserPacketLoader(CXFA_Node* pXFANode, - IFDE_XMLNode* pXMLDoc) { - return pXFANode; -} -static FX_BOOL XFA_FDEExtension_IsStringAllWhitespace(CFX_WideString wsText) { - wsText.TrimRight(L"\x20\x9\xD\xA"); - return wsText.IsEmpty(); -} -CXFA_Node* CXFA_SimpleParser::DataLoader(CXFA_Node* pXFANode, - IFDE_XMLNode* pXMLDoc, - FX_BOOL bDoTransform) { - ParseDataGroup(pXFANode, pXMLDoc, XFA_XDPPACKET_Datasets); - return pXFANode; -} -CXFA_Node* CXFA_SimpleParser::NormalLoader(CXFA_Node* pXFANode, - IFDE_XMLNode* pXMLDoc, - XFA_XDPPACKET ePacketID, - FX_BOOL bUseAttribute) { - FX_BOOL bOneOfPropertyFound = FALSE; - for (IFDE_XMLNode* pXMLChild = pXMLDoc->GetNodeItem(IFDE_XMLNode::FirstChild); - pXMLChild; - pXMLChild = pXMLChild->GetNodeItem(IFDE_XMLNode::NextSibling)) { - switch (pXMLChild->GetType()) { - case FDE_XMLNODE_Element: { - IFDE_XMLElement* pXMLElement = (IFDE_XMLElement*)pXMLChild; - CFX_WideString wsTagName; - pXMLElement->GetLocalTagName(wsTagName); - const XFA_ELEMENTINFO* pElemInfo = XFA_GetElementByName(wsTagName); - if (!pElemInfo) { - continue; - } - const XFA_PROPERTY* pPropertyInfo = XFA_GetPropertyOfElement( - pXFANode->GetClassID(), pElemInfo->eName, ePacketID); - if (pPropertyInfo && - ((pPropertyInfo->uFlags & - (XFA_PROPERTYFLAG_OneOf | XFA_PROPERTYFLAG_DefaultOneOf)) != 0)) { - if (bOneOfPropertyFound) { - break; - } - bOneOfPropertyFound = TRUE; - } - CXFA_Node* pXFAChild = - m_pFactory->CreateNode(ePacketID, pElemInfo->eName); - if (pXFAChild == NULL) { - return NULL; - } - if (ePacketID == XFA_XDPPACKET_Config) { - pXFAChild->SetAttribute(XFA_ATTRIBUTE_Name, wsTagName); - } - FX_BOOL IsNeedValue = TRUE; - for (int32_t i = 0, count = pXMLElement->CountAttributes(); i < count; - i++) { - CFX_WideString wsAttrQualifiedName; - CFX_WideString wsAttrName; - CFX_WideString wsAttrValue; - pXMLElement->GetAttribute(i, wsAttrQualifiedName, wsAttrValue); - XFA_FDEExtension_GetAttributeLocalName(wsAttrQualifiedName, - wsAttrName); - if (wsAttrName == FX_WSTRC(L"nil") && - wsAttrValue == FX_WSTRC(L"true")) { - IsNeedValue = FALSE; - } - const XFA_ATTRIBUTEINFO* lpAttrInfo = - XFA_GetAttributeByName(wsAttrName); - if (!lpAttrInfo) { - continue; - } - if (!bUseAttribute && lpAttrInfo->eName != XFA_ATTRIBUTE_Name && - lpAttrInfo->eName != XFA_ATTRIBUTE_Save) { - continue; - } - pXFAChild->SetAttribute(lpAttrInfo->eName, wsAttrValue); - } - pXFANode->InsertChild(pXFAChild); - if (pElemInfo->eName == XFA_ELEMENT_Validate || - pElemInfo->eName == XFA_ELEMENT_Locale) { - if (ePacketID == XFA_XDPPACKET_Config) { - ParseContentNode(pXFAChild, pXMLElement, ePacketID); - } else { - NormalLoader(pXFAChild, pXMLElement, ePacketID, bUseAttribute); - } - break; - } - switch (pXFAChild->GetObjectType()) { - case XFA_OBJECTTYPE_ContentNode: - case XFA_OBJECTTYPE_TextNode: - case XFA_OBJECTTYPE_NodeC: - case XFA_OBJECTTYPE_NodeV: - if (IsNeedValue) { - ParseContentNode(pXFAChild, pXMLElement, ePacketID); - } - break; - default: - NormalLoader(pXFAChild, pXMLElement, ePacketID, bUseAttribute); - break; - } - } break; - case FDE_XMLNODE_Instruction: - ParseInstruction(pXFANode, (IFDE_XMLInstruction*)pXMLChild, ePacketID); - break; - default: - break; - } - } - return pXFANode; -} -FX_BOOL XFA_RecognizeRichText(IFDE_XMLElement* pRichTextXMLNode) { - if (pRichTextXMLNode) { - CFX_WideString wsNamespaceURI; - XFA_FDEExtension_GetElementTagNamespaceURI(pRichTextXMLNode, - wsNamespaceURI); - if (wsNamespaceURI == FX_WSTRC(L"http://www.w3.org/1999/xhtml")) { - return TRUE; - } - } - return FALSE; -} -class RichTextNodeVisitor { - public: - static inline IFDE_XMLNode* GetFirstChild(IFDE_XMLNode* pNode) { - return pNode->GetNodeItem(IFDE_XMLNode::FirstChild); - } - static inline IFDE_XMLNode* GetNextSibling(IFDE_XMLNode* pNode) { - return pNode->GetNodeItem(IFDE_XMLNode::NextSibling); - } - static inline IFDE_XMLNode* GetParent(IFDE_XMLNode* pNode) { - return pNode->GetNodeItem(IFDE_XMLNode::Parent); - } -}; - -void XFA_ConvertXMLToPlainText(IFDE_XMLElement* pRootXMLNode, - CFX_WideString& wsOutput) { - for (IFDE_XMLNode* pXMLChild = - pRootXMLNode->GetNodeItem(IFDE_XMLNode::FirstChild); - pXMLChild; - pXMLChild = pXMLChild->GetNodeItem(IFDE_XMLNode::NextSibling)) { - switch (pXMLChild->GetType()) { - case FDE_XMLNODE_Element: { - CFX_WideString wsTextData; - ((IFDE_XMLElement*)pXMLChild)->GetTextData(wsTextData); - wsTextData += FX_WSTRC(L"\n"); - wsOutput += wsTextData; - } break; - case FDE_XMLNODE_Text: { - CFX_WideString wsText; - ((IFDE_XMLText*)pXMLChild)->GetText(wsText); - if (XFA_FDEExtension_IsStringAllWhitespace(wsText)) { - continue; - } else { - wsOutput = wsText; - } - } break; - case FDE_XMLNODE_CharData: { - CFX_WideString wsCharData; - ((IFDE_XMLCharData*)pXMLChild)->GetCharData(wsCharData); - if (XFA_FDEExtension_IsStringAllWhitespace(wsCharData)) { - continue; - } else { - wsOutput = wsCharData; - } - } break; - default: - FXSYS_assert(FALSE); - break; - } - } -} - -void CXFA_SimpleParser::ParseContentNode(CXFA_Node* pXFANode, - IFDE_XMLNode* pXMLNode, - XFA_XDPPACKET ePacketID) { - XFA_ELEMENT element = XFA_ELEMENT_Sharptext; - if (pXFANode->GetClassID() == XFA_ELEMENT_ExData) { - CFX_WideStringC wsContentType = - pXFANode->GetCData(XFA_ATTRIBUTE_ContentType); - if (wsContentType == FX_WSTRC(L"text/html")) - element = XFA_ELEMENT_SharpxHTML; - else if (wsContentType == FX_WSTRC(L"text/xml")) - element = XFA_ELEMENT_Sharpxml; - } - if (element == XFA_ELEMENT_SharpxHTML) - pXFANode->SetXMLMappingNode(pXMLNode); - - CFX_WideString wsValue; - for (IFDE_XMLNode* pXMLChild = - pXMLNode->GetNodeItem(IFDE_XMLNode::FirstChild); - pXMLChild; - pXMLChild = pXMLChild->GetNodeItem(IFDE_XMLNode::NextSibling)) { - FDE_XMLNODETYPE eNodeType = pXMLChild->GetType(); - if (eNodeType == FDE_XMLNODE_Instruction) - continue; - - if (element == XFA_ELEMENT_SharpxHTML) { - if (eNodeType != FDE_XMLNODE_Element) - break; - - if (XFA_RecognizeRichText((IFDE_XMLElement*)pXMLChild)) - XFA_GetPlainTextFromRichText((IFDE_XMLElement*)pXMLChild, wsValue); - } else if (element == XFA_ELEMENT_Sharpxml) { - if (eNodeType != FDE_XMLNODE_Element) - break; - XFA_ConvertXMLToPlainText((IFDE_XMLElement*)pXMLChild, wsValue); - } else { - if (eNodeType == FDE_XMLNODE_Element) - break; - if (eNodeType == FDE_XMLNODE_Text) - ((IFDE_XMLText*)pXMLChild)->GetText(wsValue); - else if (eNodeType == FDE_XMLNODE_CharData) - ((IFDE_XMLCharData*)pXMLChild)->GetCharData(wsValue); - } - break; - } - if (!wsValue.IsEmpty()) { - if (pXFANode->GetObjectType() == XFA_OBJECTTYPE_ContentNode) { - CXFA_Node* pContentRawDataNode = - m_pFactory->CreateNode(ePacketID, element); - FXSYS_assert(pContentRawDataNode); - pContentRawDataNode->SetCData(XFA_ATTRIBUTE_Value, wsValue); - pXFANode->InsertChild(pContentRawDataNode); - } else { - pXFANode->SetCData(XFA_ATTRIBUTE_Value, wsValue); - } - } -} - -void CXFA_SimpleParser::ParseDataGroup(CXFA_Node* pXFANode, - IFDE_XMLNode* pXMLNode, - XFA_XDPPACKET ePacketID) { - for (IFDE_XMLNode* pXMLChild = - pXMLNode->GetNodeItem(IFDE_XMLNode::FirstChild); - pXMLChild; - pXMLChild = pXMLChild->GetNodeItem(IFDE_XMLNode::NextSibling)) { - switch (pXMLChild->GetType()) { - case FDE_XMLNODE_Element: { - IFDE_XMLElement* pXMLElement = (IFDE_XMLElement*)pXMLChild; - { - CFX_WideString wsNamespaceURI; - XFA_FDEExtension_GetElementTagNamespaceURI(pXMLElement, - wsNamespaceURI); - if (wsNamespaceURI == - FX_WSTRC(L"http://www.xfa.com/schema/xfa-package/") || - wsNamespaceURI == - FX_WSTRC(L"http://www.xfa.org/schema/xfa-package/") || - wsNamespaceURI == - FX_WSTRC(L"http://www.w3.org/2001/XMLSchema-instance")) { - continue; - } - if (0) { - continue; - } - } - XFA_ELEMENT eNodeType = XFA_ELEMENT_DataModel; - if (eNodeType == XFA_ELEMENT_DataModel) { - CFX_WideString wsDataNodeAttr; - if (XFA_FDEExtension_FindAttributeWithNS( - pXMLElement, FX_WSTRC(L"dataNode"), - FX_WSTRC(L"http://www.xfa.org/schema/xfa-data/1.0/"), - wsDataNodeAttr)) { - if (wsDataNodeAttr == FX_WSTRC(L"dataGroup")) { - eNodeType = XFA_ELEMENT_DataGroup; - } else if (wsDataNodeAttr == FX_WSTRC(L"dataValue")) { - eNodeType = XFA_ELEMENT_DataValue; - } - } - } - CFX_WideString wsContentType; - if (eNodeType == XFA_ELEMENT_DataModel) { - if (XFA_FDEExtension_FindAttributeWithNS( - pXMLElement, FX_WSTRC(L"contentType"), - FX_WSTRC(L"http://www.xfa.org/schema/xfa-data/1.0/"), - wsContentType)) { - if (!wsContentType.IsEmpty()) { - eNodeType = XFA_ELEMENT_DataValue; - } - } - } - if (eNodeType == XFA_ELEMENT_DataModel) { - for (IFDE_XMLNode* pXMLDataChild = - pXMLElement->GetNodeItem(IFDE_XMLNode::FirstChild); - pXMLDataChild; pXMLDataChild = pXMLDataChild->GetNodeItem( - IFDE_XMLNode::NextSibling)) { - if (pXMLDataChild->GetType() == FDE_XMLNODE_Element) { - if (!XFA_RecognizeRichText((IFDE_XMLElement*)pXMLDataChild)) { - eNodeType = XFA_ELEMENT_DataGroup; - break; - } - } - } - } - if (eNodeType == XFA_ELEMENT_DataModel) { - eNodeType = XFA_ELEMENT_DataValue; - } - CXFA_Node* pXFAChild = - m_pFactory->CreateNode(XFA_XDPPACKET_Datasets, eNodeType); - if (pXFAChild == NULL) { - return; - } - CFX_WideString wsNodeName; - pXMLElement->GetLocalTagName(wsNodeName); - pXFAChild->SetCData(XFA_ATTRIBUTE_Name, wsNodeName); - FX_BOOL bNeedValue = TRUE; - if (1) { - for (int32_t i = 0, count = pXMLElement->CountAttributes(); i < count; - i++) { - CFX_WideString wsAttrQualifiedName; - CFX_WideString wsAttrValue; - CFX_WideString wsAttrName; - CFX_WideString wsAttrNamespaceURI; - pXMLElement->GetAttribute(i, wsAttrQualifiedName, wsAttrValue); - if (!XFA_FDEExtension_ResolveAttribute( - pXMLElement, wsAttrQualifiedName, wsAttrName, - wsAttrNamespaceURI)) { - continue; - } - if (wsAttrName == FX_WSTRC(L"nil") && - wsAttrValue == FX_WSTRC(L"true")) { - bNeedValue = FALSE; - continue; - } - if (wsAttrNamespaceURI == - FX_WSTRC(L"http://www.xfa.com/schema/xfa-package/") || - wsAttrNamespaceURI == - FX_WSTRC(L"http://www.xfa.org/schema/xfa-package/") || - wsAttrNamespaceURI == - FX_WSTRC(L"http://www.w3.org/2001/XMLSchema-instance") || - wsAttrNamespaceURI == - FX_WSTRC(L"http://www.xfa.org/schema/xfa-data/1.0/")) { - continue; - } - if (0) { - continue; - } - CXFA_Node* pXFAMetaData = m_pFactory->CreateNode( - XFA_XDPPACKET_Datasets, XFA_ELEMENT_DataValue); - if (pXFAMetaData == NULL) { - return; - } - pXFAMetaData->SetCData(XFA_ATTRIBUTE_Name, wsAttrName); - pXFAMetaData->SetCData(XFA_ATTRIBUTE_QualifiedName, - wsAttrQualifiedName); - pXFAMetaData->SetCData(XFA_ATTRIBUTE_Value, wsAttrValue); - pXFAMetaData->SetEnum(XFA_ATTRIBUTE_Contains, - XFA_ATTRIBUTEENUM_MetaData); - pXFAChild->InsertChild(pXFAMetaData); - pXFAMetaData->SetXMLMappingNode(pXMLElement); - pXFAMetaData->SetFlag(XFA_NODEFLAG_Initialized, TRUE, FALSE); - } - if (!bNeedValue) { - CFX_WideString wsNilName = FX_WSTRC(L"xsi:nil"); - pXMLElement->RemoveAttribute(wsNilName); - } - } - pXFANode->InsertChild(pXFAChild); - if (eNodeType == XFA_ELEMENT_DataGroup) { - ParseDataGroup(pXFAChild, pXMLElement, ePacketID); - } else { - if (bNeedValue) { - ParseDataValue(pXFAChild, pXMLChild, XFA_XDPPACKET_Datasets); - } - } - pXFAChild->SetXMLMappingNode(pXMLElement); - pXFAChild->SetFlag(XFA_NODEFLAG_Initialized, TRUE, FALSE); - } - continue; - case FDE_XMLNODE_CharData: { - IFDE_XMLCharData* pXMLCharData = (IFDE_XMLCharData*)pXMLChild; - CFX_WideString wsCharData; - pXMLCharData->GetCharData(wsCharData); - if (XFA_FDEExtension_IsStringAllWhitespace(wsCharData)) { - continue; - } - CXFA_Node* pXFAChild = m_pFactory->CreateNode(XFA_XDPPACKET_Datasets, - XFA_ELEMENT_DataValue); - if (pXFAChild == NULL) { - return; - } - pXFAChild->SetCData(XFA_ATTRIBUTE_Value, wsCharData); - pXFANode->InsertChild(pXFAChild); - pXFAChild->SetXMLMappingNode(pXMLCharData); - pXFAChild->SetFlag(XFA_NODEFLAG_Initialized, TRUE, FALSE); - } - continue; - case FDE_XMLNODE_Text: { - IFDE_XMLText* pXMLText = (IFDE_XMLText*)pXMLChild; - CFX_WideString wsText; - pXMLText->GetText(wsText); - if (XFA_FDEExtension_IsStringAllWhitespace(wsText)) { - continue; - } - CXFA_Node* pXFAChild = m_pFactory->CreateNode(XFA_XDPPACKET_Datasets, - XFA_ELEMENT_DataValue); - if (pXFAChild == NULL) { - return; - } - pXFAChild->SetCData(XFA_ATTRIBUTE_Value, wsText); - pXFANode->InsertChild(pXFAChild); - pXFAChild->SetXMLMappingNode(pXMLText); - pXFAChild->SetFlag(XFA_NODEFLAG_Initialized, TRUE, FALSE); - } - continue; - case FDE_XMLNODE_Instruction: - continue; - default: - continue; - } - } -} - -void CXFA_SimpleParser::ParseDataValue(CXFA_Node* pXFANode, - IFDE_XMLNode* pXMLNode, - XFA_XDPPACKET ePacketID) { - CFX_WideTextBuf wsValueTextBuf; - CFX_WideTextBuf wsCurValueTextBuf; - FX_BOOL bMarkAsCompound = FALSE; - IFDE_XMLNode* pXMLCurValueNode = nullptr; - for (IFDE_XMLNode* pXMLChild = - pXMLNode->GetNodeItem(IFDE_XMLNode::FirstChild); - pXMLChild; - pXMLChild = pXMLChild->GetNodeItem(IFDE_XMLNode::NextSibling)) { - FDE_XMLNODETYPE eNodeType = pXMLChild->GetType(); - if (eNodeType == FDE_XMLNODE_Instruction) - continue; - - CFX_WideString wsText; - if (eNodeType == FDE_XMLNODE_Text) { - ((IFDE_XMLText*)pXMLChild)->GetText(wsText); - if (!pXMLCurValueNode) - pXMLCurValueNode = pXMLChild; - - wsCurValueTextBuf << wsText; - } else if (eNodeType == FDE_XMLNODE_CharData) { - ((IFDE_XMLCharData*)pXMLChild)->GetCharData(wsText); - if (!pXMLCurValueNode) - pXMLCurValueNode = pXMLChild; - - wsCurValueTextBuf << wsText; - } else if (XFA_RecognizeRichText((IFDE_XMLElement*)pXMLChild)) { - XFA_GetPlainTextFromRichText((IFDE_XMLElement*)pXMLChild, wsText); - if (!pXMLCurValueNode) - pXMLCurValueNode = pXMLChild; - - wsCurValueTextBuf << wsText; - } else { - bMarkAsCompound = TRUE; - if (pXMLCurValueNode) { - CFX_WideStringC wsCurValue = wsCurValueTextBuf.GetWideString(); - if (!wsCurValue.IsEmpty()) { - CXFA_Node* pXFAChild = - m_pFactory->CreateNode(ePacketID, XFA_ELEMENT_DataValue); - if (!pXFAChild) - return; - - pXFAChild->SetCData(XFA_ATTRIBUTE_Name, FX_WSTRC(L"")); - pXFAChild->SetCData(XFA_ATTRIBUTE_Value, wsCurValue); - pXFANode->InsertChild(pXFAChild); - pXFAChild->SetXMLMappingNode(pXMLCurValueNode); - pXFAChild->SetFlag(XFA_NODEFLAG_Initialized, TRUE, FALSE); - wsValueTextBuf << wsCurValue; - wsCurValueTextBuf.Clear(); - } - pXMLCurValueNode = nullptr; - } - CXFA_Node* pXFAChild = - m_pFactory->CreateNode(ePacketID, XFA_ELEMENT_DataValue); - if (!pXFAChild) - return; - - CFX_WideString wsNodeStr; - ((IFDE_XMLElement*)pXMLChild)->GetLocalTagName(wsNodeStr); - pXFAChild->SetCData(XFA_ATTRIBUTE_Name, wsNodeStr); - ParseDataValue(pXFAChild, pXMLChild, ePacketID); - pXFANode->InsertChild(pXFAChild); - pXFAChild->SetXMLMappingNode(pXMLChild); - pXFAChild->SetFlag(XFA_NODEFLAG_Initialized, TRUE, FALSE); - CFX_WideStringC wsCurValue = pXFAChild->GetCData(XFA_ATTRIBUTE_Value); - wsValueTextBuf << wsCurValue; - } - } - if (pXMLCurValueNode) { - CFX_WideStringC wsCurValue = wsCurValueTextBuf.GetWideString(); - if (!wsCurValue.IsEmpty()) { - if (bMarkAsCompound) { - CXFA_Node* pXFAChild = - m_pFactory->CreateNode(ePacketID, XFA_ELEMENT_DataValue); - if (!pXFAChild) - return; - - pXFAChild->SetCData(XFA_ATTRIBUTE_Name, FX_WSTRC(L"")); - pXFAChild->SetCData(XFA_ATTRIBUTE_Value, wsCurValue); - pXFANode->InsertChild(pXFAChild); - pXFAChild->SetXMLMappingNode(pXMLCurValueNode); - pXFAChild->SetFlag(XFA_NODEFLAG_Initialized, TRUE, FALSE); - } - wsValueTextBuf << wsCurValue; - wsCurValueTextBuf.Clear(); - } - pXMLCurValueNode = nullptr; - } - CFX_WideStringC wsNodeValue = wsValueTextBuf.GetWideString(); - pXFANode->SetCData(XFA_ATTRIBUTE_Value, wsNodeValue); -} - -void CXFA_SimpleParser::ParseInstruction(CXFA_Node* pXFANode, - IFDE_XMLInstruction* pXMLInstruction, - XFA_XDPPACKET ePacketID) { - if (!m_bDocumentParser) { - return; - } - CFX_WideString wsTargetName; - pXMLInstruction->GetTargetName(wsTargetName); - if (wsTargetName == FX_WSTRC(L"originalXFAVersion")) { - CFX_WideString wsData; - if (pXMLInstruction->GetData(0, wsData) && - (pXFANode->GetDocument()->RecognizeXFAVersionNumber(wsData) != - XFA_VERSION_UNKNOWN)) { - wsData.Empty(); - if (pXMLInstruction->GetData(1, wsData) && - wsData == FX_WSTRC(L"v2.7-scripting:1")) { - pXFANode->GetDocument()->SetFlag(XFA_DOCFLAG_Scripting, TRUE); - } - } - } else if (wsTargetName == FX_WSTRC(L"acrobat")) { - CFX_WideString wsData; - if (pXMLInstruction->GetData(0, wsData) && - wsData == FX_WSTRC(L"JavaScript")) { - if (pXMLInstruction->GetData(1, wsData) && - wsData == FX_WSTRC(L"strictScoping")) { - pXFANode->GetDocument()->SetFlag(XFA_DOCFLAG_StrictScoping, TRUE); - } - } - } -} -void CXFA_SimpleParser::CloseParser() { - if (m_pXMLDoc) { - m_pXMLDoc->Release(); - m_pXMLDoc = NULL; - } - if (m_pStream) { - m_pStream->Release(); - m_pStream = NULL; - } -} -IXFA_DocParser* IXFA_DocParser::Create(IXFA_Notify* pNotify) { - return new CXFA_DocumentParser(pNotify); -} -CXFA_DocumentParser::CXFA_DocumentParser(IXFA_Notify* pNotify) - : m_nodeParser(NULL, TRUE), m_pNotify(pNotify), m_pDocument(NULL) {} -CXFA_DocumentParser::~CXFA_DocumentParser() { - CloseParser(); -} -int32_t CXFA_DocumentParser::StartParse(IFX_FileRead* pStream, - XFA_XDPPACKET ePacketID) { - CloseParser(); - int32_t nRetStatus = m_nodeParser.StartParse(pStream, ePacketID); - if (nRetStatus == XFA_PARSESTATUS_Ready) { - m_pDocument = new CXFA_Document(this); - m_nodeParser.SetFactory(m_pDocument); - } - return nRetStatus; -} -int32_t CXFA_DocumentParser::DoParse(IFX_Pause* pPause) { - int32_t nRetStatus = m_nodeParser.DoParse(pPause); - if (nRetStatus >= XFA_PARSESTATUS_Done) { - FXSYS_assert(m_pDocument); - m_pDocument->SetRoot(m_nodeParser.GetRootNode()); - } - return nRetStatus; -} -int32_t CXFA_DocumentParser::ParseXMLData(const CFX_WideString& wsXML, - IFDE_XMLNode*& pXMLNode, - IFX_Pause* pPause) { - CloseParser(); - int32_t nRetStatus = m_nodeParser.ParseXMLData(wsXML, pXMLNode, NULL); - if (nRetStatus == XFA_PARSESTATUS_Done && pXMLNode) { - m_pDocument = new CXFA_Document(this); - m_nodeParser.SetFactory(m_pDocument); - } - return nRetStatus; -} -void CXFA_DocumentParser::ConstructXFANode(CXFA_Node* pXFANode, - IFDE_XMLNode* pXMLNode) { - if (!pXFANode || !pXMLNode) { - return; - } - m_nodeParser.ConstructXFANode(pXFANode, pXMLNode); - CXFA_Node* pRootNode = m_nodeParser.GetRootNode(); - if (m_pDocument && pRootNode) { - m_pDocument->SetRoot(pRootNode); - } -} -void CXFA_DocumentParser::CloseParser() { - if (m_pDocument) { - delete m_pDocument; - m_pDocument = NULL; - } - m_nodeParser.CloseParser(); -} -CXFA_XMLParser::CXFA_XMLParser(IFDE_XMLNode* pRoot, IFX_Stream* pStream) - : m_nElementStart(0), - m_dwCheckStatus(0), - m_dwCurrentCheckStatus(0), - m_pRoot(pRoot), - m_pStream(pStream), - m_pParser(nullptr), - m_pParent(pRoot), - m_pChild(nullptr), - m_NodeStack(16), - m_dwStatus(FDE_XMLSYNTAXSTATUS_None) { - ASSERT(m_pParent && m_pStream); - m_NodeStack.Push(m_pParent); - m_pParser = IFDE_XMLSyntaxParser::Create(); - m_pParser->Init(m_pStream, 32 * 1024, 1024 * 1024); -} -CXFA_XMLParser::~CXFA_XMLParser() { - if (m_pParser) { - m_pParser->Release(); - } - m_NodeStack.RemoveAll(); - m_ws1.Empty(); - m_ws2.Empty(); -} -int32_t CXFA_XMLParser::DoParser(IFX_Pause* pPause) { - if (m_dwStatus == FDE_XMLSYNTAXSTATUS_Error) { - return -1; - } - if (m_dwStatus == FDE_XMLSYNTAXSTATUS_EOS) { - return 100; - } - int32_t iCount = 0; - while (TRUE) { - m_dwStatus = m_pParser->DoSyntaxParse(); - switch (m_dwStatus) { - case FDE_XMLSYNTAXSTATUS_InstructionOpen: - break; - case FDE_XMLSYNTAXSTATUS_InstructionClose: - if (m_pChild) { - if (m_pChild->GetType() != FDE_XMLNODE_Instruction) { - m_dwStatus = FDE_XMLSYNTAXSTATUS_Error; - break; - } - } - m_pChild = m_pParent; - break; - case FDE_XMLSYNTAXSTATUS_ElementOpen: - if (m_dwCheckStatus != 0x03 && m_NodeStack.GetSize() == 2) { - m_nElementStart = m_pParser->GetCurrentPos() - 1; - } - break; - case FDE_XMLSYNTAXSTATUS_ElementBreak: - break; - case FDE_XMLSYNTAXSTATUS_ElementClose: - if (m_pChild->GetType() != FDE_XMLNODE_Element) { - m_dwStatus = FDE_XMLSYNTAXSTATUS_Error; - break; - } - m_pParser->GetTagName(m_ws1); - ((IFDE_XMLElement*)m_pChild)->GetTagName(m_ws2); - if (m_ws1.GetLength() > 0 && !m_ws1.Equal(m_ws2)) { - m_dwStatus = FDE_XMLSYNTAXSTATUS_Error; - break; - } - m_NodeStack.Pop(); - if (m_NodeStack.GetSize() < 1) { - m_dwStatus = FDE_XMLSYNTAXSTATUS_Error; - break; - } else if (m_dwCurrentCheckStatus != 0 && m_NodeStack.GetSize() == 2) { - m_nSize[m_dwCurrentCheckStatus - 1] = - m_pParser->GetCurrentBinaryPos() - - m_nStart[m_dwCurrentCheckStatus - 1]; - m_dwCurrentCheckStatus = 0; - } - - m_pParent = (IFDE_XMLNode*)*m_NodeStack.GetTopElement(); - m_pChild = m_pParent; - iCount++; - break; - case FDE_XMLSYNTAXSTATUS_TargetName: - m_pParser->GetTargetName(m_ws1); - if (m_ws1 == FX_WSTRC(L"originalXFAVersion") || - m_ws1 == FX_WSTRC(L"acrobat")) { - m_pChild = IFDE_XMLInstruction::Create(m_ws1); - m_pParent->InsertChildNode(m_pChild); - } else { - m_pChild = NULL; - } - m_ws1.Empty(); - break; - case FDE_XMLSYNTAXSTATUS_TagName: - m_pParser->GetTagName(m_ws1); - m_pChild = IFDE_XMLElement::Create(m_ws1); - m_pParent->InsertChildNode(m_pChild); - m_NodeStack.Push(m_pChild); - m_pParent = m_pChild; - - if (m_dwCheckStatus != 0x03 && m_NodeStack.GetSize() == 3) { - CFX_WideString wsTag; - ((IFDE_XMLElement*)m_pChild)->GetLocalTagName(wsTag); - if (wsTag == FX_WSTRC(L"template")) { - m_dwCheckStatus |= 0x01; - m_dwCurrentCheckStatus = 0x01; - m_nStart[0] = m_pParser->GetCurrentBinaryPos() - - (m_pParser->GetCurrentPos() - m_nElementStart); - } else if (wsTag == FX_WSTRC(L"datasets")) { - m_dwCheckStatus |= 0x02; - m_dwCurrentCheckStatus = 0x02; - m_nStart[1] = m_pParser->GetCurrentBinaryPos() - - (m_pParser->GetCurrentPos() - m_nElementStart); - } - } - break; - case FDE_XMLSYNTAXSTATUS_AttriName: - m_pParser->GetAttributeName(m_ws1); - break; - case FDE_XMLSYNTAXSTATUS_AttriValue: - if (m_pChild) { - m_pParser->GetAttributeName(m_ws2); - if (m_pChild->GetType() == FDE_XMLNODE_Element) { - ((IFDE_XMLElement*)m_pChild)->SetString(m_ws1, m_ws2); - } - } - m_ws1.Empty(); - break; - case FDE_XMLSYNTAXSTATUS_Text: - m_pParser->GetTextData(m_ws1); - m_pChild = IFDE_XMLText::Create(m_ws1); - m_pParent->InsertChildNode(m_pChild); - m_pChild = m_pParent; - break; - case FDE_XMLSYNTAXSTATUS_CData: - m_pParser->GetTextData(m_ws1); - m_pChild = IFDE_XMLCharData::Create(m_ws1); - m_pParent->InsertChildNode(m_pChild); - m_pChild = m_pParent; - break; - case FDE_XMLSYNTAXSTATUS_TargetData: - if (m_pChild) { - if (m_pChild->GetType() != FDE_XMLNODE_Instruction) { - m_dwStatus = FDE_XMLSYNTAXSTATUS_Error; - break; - } - if (!m_ws1.IsEmpty()) { - ((IFDE_XMLInstruction*)m_pChild)->AppendData(m_ws1); - } - m_pParser->GetTargetData(m_ws1); - ((IFDE_XMLInstruction*)m_pChild)->AppendData(m_ws1); - } - m_ws1.Empty(); - break; - default: - break; - } - if (m_dwStatus == FDE_XMLSYNTAXSTATUS_Error || - m_dwStatus == FDE_XMLSYNTAXSTATUS_EOS) { - break; - } - if (pPause && iCount > 500 && pPause->NeedToPauseNow()) { - break; - } - } - return (m_dwStatus == FDE_XMLSYNTAXSTATUS_Error || m_NodeStack.GetSize() != 1) - ? -1 - : m_pParser->GetStatus(); -} diff --git a/xfa/src/fxfa/parser/xfa_parser_imp.h b/xfa/src/fxfa/parser/xfa_parser_imp.h deleted file mode 100644 index f288bc0930..0000000000 --- a/xfa/src/fxfa/parser/xfa_parser_imp.h +++ /dev/null @@ -1,138 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXFA_PARSER_XFA_PARSER_IMP_H_ -#define XFA_SRC_FXFA_PARSER_XFA_PARSER_IMP_H_ - -#include "xfa/src/fxfa/parser/xfa_parser.h" - -class CXFA_XMLParser; - -class CXFA_SimpleParser : public IXFA_Parser { - public: - CXFA_SimpleParser(IXFA_ObjFactory* pFactory, FX_BOOL bDocumentParser = FALSE); - ~CXFA_SimpleParser(); - virtual void Release() { delete this; } - - virtual int32_t StartParse(IFX_FileRead* pStream, - XFA_XDPPACKET ePacketID = XFA_XDPPACKET_XDP); - virtual int32_t DoParse(IFX_Pause* pPause = NULL); - virtual int32_t ParseXMLData(const CFX_WideString& wsXML, - IFDE_XMLNode*& pXMLNode, - IFX_Pause* pPause = NULL); - virtual void ConstructXFANode(CXFA_Node* pXFANode, IFDE_XMLNode* pXMLNode); - virtual IXFA_ObjFactory* GetFactory() const { return m_pFactory; } - virtual CXFA_Node* GetRootNode() const { return m_pRootNode; } - virtual IFDE_XMLDoc* GetXMLDoc() const { return m_pXMLDoc; } - virtual void CloseParser(); - - protected: - CXFA_Node* ParseAsXDPPacket(IFDE_XMLNode* pXMLDocumentNode, - XFA_XDPPACKET ePacketID); - CXFA_Node* ParseAsXDPPacket_XDP(IFDE_XMLNode* pXMLDocumentNode, - XFA_XDPPACKET ePacketID); - CXFA_Node* ParseAsXDPPacket_Config(IFDE_XMLNode* pXMLDocumentNode, - XFA_XDPPACKET ePacketID); - CXFA_Node* ParseAsXDPPacket_TemplateForm(IFDE_XMLNode* pXMLDocumentNode, - XFA_XDPPACKET ePacketID); - CXFA_Node* ParseAsXDPPacket_Data(IFDE_XMLNode* pXMLDocumentNode, - XFA_XDPPACKET ePacketID); - CXFA_Node* ParseAsXDPPacket_LocaleConnectionSourceSet( - IFDE_XMLNode* pXMLDocumentNode, - XFA_XDPPACKET ePacketID); - CXFA_Node* ParseAsXDPPacket_Xdc(IFDE_XMLNode* pXMLDocumentNode, - XFA_XDPPACKET ePacketID); - CXFA_Node* ParseAsXDPPacket_User(IFDE_XMLNode* pXMLDocumentNode, - XFA_XDPPACKET ePacketID); - CXFA_Node* NormalLoader(CXFA_Node* pXFANode, - IFDE_XMLNode* pXMLDoc, - XFA_XDPPACKET ePacketID, - FX_BOOL bUseAttribute = TRUE); - CXFA_Node* DataLoader(CXFA_Node* pXFANode, - IFDE_XMLNode* pXMLDoc, - FX_BOOL bDoTransform); - CXFA_Node* UserPacketLoader(CXFA_Node* pXFANode, IFDE_XMLNode* pXMLDoc); - void ParseContentNode(CXFA_Node* pXFANode, - IFDE_XMLNode* pXMLNode, - XFA_XDPPACKET ePacketID); - void ParseDataValue(CXFA_Node* pXFANode, - IFDE_XMLNode* pXMLNode, - XFA_XDPPACKET ePacketID); - void ParseDataGroup(CXFA_Node* pXFANode, - IFDE_XMLNode* pXMLNode, - XFA_XDPPACKET ePacketID); - void ParseInstruction(CXFA_Node* pXFANode, - IFDE_XMLInstruction* pXMLInstruction, - XFA_XDPPACKET ePacketID); - void SetFactory(IXFA_ObjFactory* pFactory); - - CXFA_XMLParser* m_pXMLParser; - IFDE_XMLDoc* m_pXMLDoc; - IFX_Stream* m_pStream; - IFX_FileRead* m_pFileRead; - IXFA_ObjFactory* m_pFactory; - CXFA_Node* m_pRootNode; - XFA_XDPPACKET m_ePacketID; - FX_BOOL m_bDocumentParser; - friend class CXFA_DocumentParser; -}; - -class CXFA_DocumentParser : public IXFA_DocParser { - public: - CXFA_DocumentParser(IXFA_Notify* pNotify); - ~CXFA_DocumentParser(); - virtual void Release() { delete this; } - virtual int32_t StartParse(IFX_FileRead* pStream, - XFA_XDPPACKET ePacketID = XFA_XDPPACKET_XDP); - virtual int32_t DoParse(IFX_Pause* pPause = NULL); - virtual int32_t ParseXMLData(const CFX_WideString& wsXML, - IFDE_XMLNode*& pXMLNode, - IFX_Pause* pPause = NULL); - virtual void ConstructXFANode(CXFA_Node* pXFANode, IFDE_XMLNode* pXMLNode); - virtual IXFA_ObjFactory* GetFactory() const { - return m_nodeParser.GetFactory(); - } - virtual CXFA_Node* GetRootNode() const { return m_nodeParser.GetRootNode(); } - virtual IFDE_XMLDoc* GetXMLDoc() const { return m_nodeParser.GetXMLDoc(); } - virtual IXFA_Notify* GetNotify() const { return m_pNotify; } - virtual CXFA_Document* GetDocument() const { return m_pDocument; } - virtual void CloseParser(); - - protected: - CXFA_SimpleParser m_nodeParser; - IXFA_Notify* m_pNotify; - CXFA_Document* m_pDocument; -}; -typedef CFX_StackTemplate CXFA_XMLNodeStack; - -class CXFA_XMLParser : public IFDE_XMLParser { - public: - CXFA_XMLParser(IFDE_XMLNode* pRoot, IFX_Stream* pStream); - ~CXFA_XMLParser(); - - virtual void Release() { delete this; } - virtual int32_t DoParser(IFX_Pause* pPause); - - FX_FILESIZE m_nStart[2]; - size_t m_nSize[2]; - FX_FILESIZE m_nElementStart; - FX_WORD m_dwCheckStatus; - FX_WORD m_dwCurrentCheckStatus; - - protected: - IFDE_XMLNode* m_pRoot; - IFX_Stream* m_pStream; - IFDE_XMLSyntaxParser* m_pParser; - - IFDE_XMLNode* m_pParent; - IFDE_XMLNode* m_pChild; - CXFA_XMLNodeStack m_NodeStack; - CFX_WideString m_ws1; - CFX_WideString m_ws2; - FX_DWORD m_dwStatus; -}; - -#endif // XFA_SRC_FXFA_PARSER_XFA_PARSER_IMP_H_ diff --git a/xfa/src/fxfa/parser/xfa_parser_imp_embeddertest.cpp b/xfa/src/fxfa/parser/xfa_parser_imp_embeddertest.cpp deleted file mode 100644 index 63fe272872..0000000000 --- a/xfa/src/fxfa/parser/xfa_parser_imp_embeddertest.cpp +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2015 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "testing/embedder_test.h" -#include "testing/gtest/include/gtest/gtest.h" - -class XFAParserImpEmbeddertest : public EmbedderTest {}; - -TEST_F(XFAParserImpEmbeddertest, Bug_216) { - EXPECT_TRUE(OpenDocument("bug_216.pdf")); - FPDF_PAGE page = LoadPage(0); - EXPECT_NE(nullptr, page); - UnloadPage(page); -} diff --git a/xfa/src/fxfa/parser/xfa_script.h b/xfa/src/fxfa/parser/xfa_script.h deleted file mode 100644 index 286e8f704e..0000000000 --- a/xfa/src/fxfa/parser/xfa_script.h +++ /dev/null @@ -1,121 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXFA_PARSER_XFA_SCRIPT_H_ -#define XFA_SRC_FXFA_PARSER_XFA_SCRIPT_H_ - -#include "xfa/include/fxfa/fxfa.h" -#include "xfa/include/fxfa/fxfa_objectacc.h" - -#define XFA_RESOLVENODE_Children 0x0001 -#define XFA_RESOLVENODE_Attributes 0x0004 -#define XFA_RESOLVENODE_Properties 0x0008 -#define XFA_RESOLVENODE_Siblings 0x0020 -#define XFA_RESOLVENODE_Parent 0x0040 -#define XFA_RESOLVENODE_AnyChild 0x0080 -#define XFA_RESOLVENODE_ALL 0x0100 -#define XFA_RESOLVENODE_CreateNode 0x0400 -#define XFA_RESOLVENODE_Bind 0x0800 -#define XFA_RESOLVENODE_BindNew 0x1000 - -enum XFA_SCRIPTLANGTYPE { - XFA_SCRIPTLANGTYPE_Formcalc = XFA_SCRIPTTYPE_Formcalc, - XFA_SCRIPTLANGTYPE_Javascript = XFA_SCRIPTTYPE_Javascript, - XFA_SCRIPTLANGTYPE_Unkown = XFA_SCRIPTTYPE_Unkown, -}; - -enum XFA_RESOVENODE_RSTYPE { - XFA_RESOVENODE_RSTYPE_Nodes, - XFA_RESOVENODE_RSTYPE_Attribute, - XFA_RESOLVENODE_RSTYPE_CreateNodeOne, - XFA_RESOLVENODE_RSTYPE_CreateNodeAll, - XFA_RESOLVENODE_RSTYPE_CreateNodeMidAll, - XFA_RESOVENODE_RSTYPE_ExistNodes, -}; - -class CXFA_HVALUEArray : public CFX_ArrayTemplate { - public: - CXFA_HVALUEArray(FXJSE_HRUNTIME hRunTime) : m_hRunTime(hRunTime) {} - ~CXFA_HVALUEArray() { - for (int32_t i = 0; i < GetSize(); i++) { - FXJSE_Value_Release(GetAt(i)); - } - } - void GetAttributeObject(CXFA_ObjArray& objArray) { - for (int32_t i = 0; i < GetSize(); i++) { - CXFA_Object* pObject = (CXFA_Object*)FXJSE_Value_ToObject(GetAt(i), NULL); - objArray.Add(pObject); - } - } - FXJSE_HRUNTIME m_hRunTime; -}; - -struct XFA_RESOLVENODE_RS { - XFA_RESOLVENODE_RS() - : dwFlags(XFA_RESOVENODE_RSTYPE_Nodes), pScriptAttribute(NULL) {} - ~XFA_RESOLVENODE_RS() { nodes.RemoveAll(); } - int32_t GetAttributeResult(CXFA_HVALUEArray& hValueArray) const { - if (pScriptAttribute && pScriptAttribute->eValueType == XFA_SCRIPT_Object) { - FXJSE_HRUNTIME hRunTime = hValueArray.m_hRunTime; - for (int32_t i = 0; i < nodes.GetSize(); i++) { - FXJSE_HVALUE hValue = FXJSE_Value_Create(hRunTime); - (nodes[i]->*(pScriptAttribute->lpfnCallback))( - hValue, FALSE, (XFA_ATTRIBUTE)pScriptAttribute->eAttribute); - hValueArray.Add(hValue); - } - } - return hValueArray.GetSize(); - } - - CXFA_ObjArray nodes; - XFA_RESOVENODE_RSTYPE dwFlags; - const XFA_SCRIPTATTRIBUTEINFO* pScriptAttribute; -}; - -struct XFA_JSBUILTININFO { - uint32_t uUnicodeHash; - const FX_CHAR* pName; -}; - -const XFA_JSBUILTININFO* XFA_GetJSBuiltinByHash(uint32_t uHashCode); - -class IXFA_ScriptContext { - public: - virtual ~IXFA_ScriptContext() {} - virtual void Release() = 0; - virtual void Initialize(FXJSE_HRUNTIME hRuntime) = 0; - - virtual void SetEventParam(CXFA_EventParam param) = 0; - virtual CXFA_EventParam* GetEventParam() = 0; - virtual FX_BOOL RunScript(XFA_SCRIPTLANGTYPE eScriptType, - const CFX_WideStringC& wsScript, - FXJSE_HVALUE hRetValue, - CXFA_Object* pThisObject = NULL) = 0; - virtual int32_t ResolveObjects(CXFA_Object* refNode, - const CFX_WideStringC& wsExpression, - XFA_RESOLVENODE_RS& resolveNodeRS, - FX_DWORD dwStyles = XFA_RESOLVENODE_Children, - CXFA_Node* bindNode = NULL) = 0; - virtual FXJSE_HVALUE GetJSValueFromMap(CXFA_Object* pObject) = 0; - virtual void CacheList(CXFA_NodeList* pList) = 0; - virtual CXFA_Object* GetThisObject() const = 0; - virtual FXJSE_HRUNTIME GetRuntime() const = 0; - virtual int32_t GetIndexByName(CXFA_Node* refNode) = 0; - virtual int32_t GetIndexByClassName(CXFA_Node* refNode) = 0; - virtual void GetSomExpression(CXFA_Node* refNode, - CFX_WideString& wsExpression) = 0; - - virtual void SetNodesOfRunScript(CXFA_NodeArray* pArray) = 0; - virtual void AddNodesOfRunScript(const CXFA_NodeArray& nodes) = 0; - virtual void AddNodesOfRunScript(CXFA_Node* pNode) = 0; - virtual FXJSE_HCLASS GetJseNormalClass() = 0; - virtual XFA_SCRIPTLANGTYPE GetType() = 0; - virtual void SetRunAtType(XFA_ATTRIBUTEENUM eRunAt) = 0; - virtual FX_BOOL IsRunAtClient() = 0; -}; -IXFA_ScriptContext* XFA_ScriptContext_Create(CXFA_Document* pDocument); - -#endif // XFA_SRC_FXFA_PARSER_XFA_SCRIPT_H_ diff --git a/xfa/src/fxfa/parser/xfa_script_datawindow.cpp b/xfa/src/fxfa/parser/xfa_script_datawindow.cpp deleted file mode 100644 index 33146adcd0..0000000000 --- a/xfa/src/fxfa/parser/xfa_script_datawindow.cpp +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fxfa/parser/xfa_script_datawindow.h" - -#include "xfa/src/fxfa/fm2js/xfa_fm2jsapi.h" -#include "xfa/src/fxfa/parser/xfa_docdata.h" -#include "xfa/src/fxfa/parser/xfa_doclayout.h" -#include "xfa/src/fxfa/parser/xfa_document.h" -#include "xfa/src/fxfa/parser/xfa_localemgr.h" -#include "xfa/src/fxfa/parser/xfa_object.h" -#include "xfa/src/fxfa/parser/xfa_parser.h" -#include "xfa/src/fxfa/parser/xfa_script.h" -#include "xfa/src/fxfa/parser/xfa_utils.h" - -CScript_DataWindow::CScript_DataWindow(CXFA_Document* pDocument) - : CXFA_OrdinaryObject(pDocument, XFA_ELEMENT_DataWindow) { - m_uScriptHash = XFA_HASHCODE_DataWindow; -} -CScript_DataWindow::~CScript_DataWindow() {} -void CScript_DataWindow::Script_DataWindow_MoveCurrentRecord( - CFXJSE_Arguments* pArguments) {} -void CScript_DataWindow::Script_DataWindow_Record( - CFXJSE_Arguments* pArguments) {} -void CScript_DataWindow::Script_DataWindow_GotoRecord( - CFXJSE_Arguments* pArguments) {} -void CScript_DataWindow::Script_DataWindow_IsRecordGroup( - CFXJSE_Arguments* pArguments) {} -void CScript_DataWindow::Script_DataWindow_RecordsBefore( - FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) {} -void CScript_DataWindow::Script_DataWindow_CurrentRecordNumber( - FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) {} -void CScript_DataWindow::Script_DataWindow_RecordsAfter( - FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) {} -void CScript_DataWindow::Script_DataWindow_IsDefined(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { -} diff --git a/xfa/src/fxfa/parser/xfa_script_datawindow.h b/xfa/src/fxfa/parser/xfa_script_datawindow.h deleted file mode 100644 index 2639d3c5d3..0000000000 --- a/xfa/src/fxfa/parser/xfa_script_datawindow.h +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXFA_PARSER_XFA_SCRIPT_DATAWINDOW_H_ -#define XFA_SRC_FXFA_PARSER_XFA_SCRIPT_DATAWINDOW_H_ - -#include "xfa/src/fxfa/parser/xfa_object.h" - -class CScript_DataWindow : public CXFA_OrdinaryObject { - public: - CScript_DataWindow(CXFA_Document* pDocument); - virtual ~CScript_DataWindow(); - void Script_DataWindow_MoveCurrentRecord(CFXJSE_Arguments* pArguments); - void Script_DataWindow_Record(CFXJSE_Arguments* pArguments); - void Script_DataWindow_GotoRecord(CFXJSE_Arguments* pArguments); - void Script_DataWindow_IsRecordGroup(CFXJSE_Arguments* pArguments); - void Script_DataWindow_RecordsBefore(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_DataWindow_CurrentRecordNumber(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_DataWindow_RecordsAfter(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_DataWindow_IsDefined(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); -}; - -#endif // XFA_SRC_FXFA_PARSER_XFA_SCRIPT_DATAWINDOW_H_ diff --git a/xfa/src/fxfa/parser/xfa_script_eventpseudomodel.cpp b/xfa/src/fxfa/parser/xfa_script_eventpseudomodel.cpp deleted file mode 100644 index 8c8cd5214e..0000000000 --- a/xfa/src/fxfa/parser/xfa_script_eventpseudomodel.cpp +++ /dev/null @@ -1,269 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fxfa/parser/xfa_script_eventpseudomodel.h" - -#include "xfa/src/fxfa/fm2js/xfa_fm2jsapi.h" -#include "xfa/src/fxfa/parser/xfa_docdata.h" -#include "xfa/src/fxfa/parser/xfa_doclayout.h" -#include "xfa/src/fxfa/parser/xfa_document.h" -#include "xfa/src/fxfa/parser/xfa_localemgr.h" -#include "xfa/src/fxfa/parser/xfa_object.h" -#include "xfa/src/fxfa/parser/xfa_parser.h" -#include "xfa/src/fxfa/parser/xfa_script.h" -#include "xfa/src/fxfa/parser/xfa_utils.h" - -CScript_EventPseudoModel::CScript_EventPseudoModel(CXFA_Document* pDocument) - : CXFA_OrdinaryObject(pDocument, XFA_ELEMENT_EventPseudoModel) { - m_uScriptHash = XFA_HASHCODE_Event; -} -CScript_EventPseudoModel::~CScript_EventPseudoModel() {} -void Script_EventPseudoModel_StringProperty(FXJSE_HVALUE hValue, - CFX_WideString& wsValue, - FX_BOOL bSetting) { - if (bSetting) { - CFX_ByteString bsValue; - FXJSE_Value_ToUTF8String(hValue, bsValue); - wsValue = CFX_WideString::FromUTF8(bsValue, bsValue.GetLength()); - } else { - FXJSE_Value_SetUTF8String(hValue, FX_UTF8Encode(wsValue)); - } -} -void Script_EventPseudoModel_InterProperty(FXJSE_HVALUE hValue, - int32_t& iValue, - FX_BOOL bSetting) { - if (bSetting) { - iValue = FXJSE_Value_ToInteger(hValue); - } else { - FXJSE_Value_SetInteger(hValue, iValue); - } -} -void Script_EventPseudoModel_BooleanProperty(FXJSE_HVALUE hValue, - FX_BOOL& bValue, - FX_BOOL bSetting) { - if (bSetting) { - bValue = FXJSE_Value_ToBoolean(hValue); - } else { - FXJSE_Value_SetBoolean(hValue, bValue); - } -} -void CScript_EventPseudoModel::Script_EventPseudoModel_Property( - FXJSE_HVALUE hValue, - FX_DWORD dwFlag, - FX_BOOL bSetting) { - IXFA_ScriptContext* pScriptContext = m_pDocument->GetScriptContext(); - if (!pScriptContext) { - return; - } - CXFA_EventParam* pEventParam = pScriptContext->GetEventParam(); - if (!pEventParam) { - return; - } - switch (dwFlag) { - case XFA_EVENT_CANCELACTION: - Script_EventPseudoModel_BooleanProperty( - hValue, pEventParam->m_bCancelAction, bSetting); - break; - case XFA_EVENT_CHANGE: - Script_EventPseudoModel_StringProperty(hValue, pEventParam->m_wsChange, - bSetting); - break; - case XFA_EVENT_COMMITKEY: - Script_EventPseudoModel_InterProperty(hValue, pEventParam->m_iCommitKey, - bSetting); - break; - case XFA_EVENT_FULLTEXT: - Script_EventPseudoModel_StringProperty(hValue, pEventParam->m_wsFullText, - bSetting); - break; - case XFA_EVENT_KEYDOWN: - Script_EventPseudoModel_BooleanProperty(hValue, pEventParam->m_bKeyDown, - bSetting); - break; - case XFA_EVENT_MODIFIER: - Script_EventPseudoModel_BooleanProperty(hValue, pEventParam->m_bModifier, - bSetting); - break; - case XFA_EVENT_NEWCONTENTTYPE: - Script_EventPseudoModel_StringProperty( - hValue, pEventParam->m_wsNewContentType, bSetting); - break; - case XFA_EVENT_NEWTEXT: - Script_EventPseudoModel_StringProperty(hValue, pEventParam->m_wsNewText, - bSetting); - break; - case XFA_EVENT_PREVCONTENTTYPE: - Script_EventPseudoModel_StringProperty( - hValue, pEventParam->m_wsPrevContentType, bSetting); - break; - case XFA_EVENT_PREVTEXT: - Script_EventPseudoModel_StringProperty(hValue, pEventParam->m_wsPrevText, - bSetting); - break; - case XFA_EVENT_REENTER: - Script_EventPseudoModel_BooleanProperty(hValue, pEventParam->m_bReenter, - bSetting); - break; - case XFA_EVENT_SELEND: - Script_EventPseudoModel_InterProperty(hValue, pEventParam->m_iSelEnd, - bSetting); - break; - case XFA_EVENT_SELSTART: - Script_EventPseudoModel_InterProperty(hValue, pEventParam->m_iSelStart, - bSetting); - break; - case XFA_EVENT_SHIFT: - Script_EventPseudoModel_BooleanProperty(hValue, pEventParam->m_bShift, - bSetting); - break; - case XFA_EVENT_SOAPFAULTCODE: - Script_EventPseudoModel_StringProperty( - hValue, pEventParam->m_wsSoapFaultCode, bSetting); - break; - case XFA_EVENT_SOAPFAULTSTRING: - Script_EventPseudoModel_StringProperty( - hValue, pEventParam->m_wsSoapFaultString, bSetting); - break; - case XFA_EVENT_TARGET: - break; - default: - break; - } -} -void CScript_EventPseudoModel::Script_EventPseudoModel_CancelAction( - FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - Script_EventPseudoModel_Property(hValue, XFA_EVENT_CANCELACTION, bSetting); -} -void CScript_EventPseudoModel::Script_EventPseudoModel_Change( - FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - Script_EventPseudoModel_Property(hValue, XFA_EVENT_CHANGE, bSetting); -} -void CScript_EventPseudoModel::Script_EventPseudoModel_CommitKey( - FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - Script_EventPseudoModel_Property(hValue, XFA_EVENT_COMMITKEY, bSetting); -} -void CScript_EventPseudoModel::Script_EventPseudoModel_FullText( - FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - Script_EventPseudoModel_Property(hValue, XFA_EVENT_FULLTEXT, bSetting); -} -void CScript_EventPseudoModel::Script_EventPseudoModel_KeyDown( - FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - Script_EventPseudoModel_Property(hValue, XFA_EVENT_KEYDOWN, bSetting); -} -void CScript_EventPseudoModel::Script_EventPseudoModel_Modifier( - FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - Script_EventPseudoModel_Property(hValue, XFA_EVENT_MODIFIER, bSetting); -} -void CScript_EventPseudoModel::Script_EventPseudoModel_NewContentType( - FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - Script_EventPseudoModel_Property(hValue, XFA_EVENT_NEWCONTENTTYPE, bSetting); -} -void CScript_EventPseudoModel::Script_EventPseudoModel_NewText( - FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - Script_EventPseudoModel_Property(hValue, XFA_EVENT_NEWTEXT, bSetting); -} -void CScript_EventPseudoModel::Script_EventPseudoModel_PrevContentType( - FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - Script_EventPseudoModel_Property(hValue, XFA_EVENT_PREVCONTENTTYPE, bSetting); -} -void CScript_EventPseudoModel::Script_EventPseudoModel_PrevText( - FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - Script_EventPseudoModel_Property(hValue, XFA_EVENT_PREVTEXT, bSetting); -} -void CScript_EventPseudoModel::Script_EventPseudoModel_Reenter( - FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - Script_EventPseudoModel_Property(hValue, XFA_EVENT_REENTER, bSetting); -} -void CScript_EventPseudoModel::Script_EventPseudoModel_SelEnd( - FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - Script_EventPseudoModel_Property(hValue, XFA_EVENT_SELEND, bSetting); -} -void CScript_EventPseudoModel::Script_EventPseudoModel_SelStart( - FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - Script_EventPseudoModel_Property(hValue, XFA_EVENT_SELSTART, bSetting); -} -void CScript_EventPseudoModel::Script_EventPseudoModel_Shift( - FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - Script_EventPseudoModel_Property(hValue, XFA_EVENT_SHIFT, bSetting); -} -void CScript_EventPseudoModel::Script_EventPseudoModel_SoapFaultCode( - FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - Script_EventPseudoModel_Property(hValue, XFA_EVENT_SOAPFAULTCODE, bSetting); -} -void CScript_EventPseudoModel::Script_EventPseudoModel_SoapFaultString( - FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - Script_EventPseudoModel_Property(hValue, XFA_EVENT_SOAPFAULTSTRING, bSetting); -} -void CScript_EventPseudoModel::Script_EventPseudoModel_Target( - FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - Script_EventPseudoModel_Property(hValue, XFA_EVENT_TARGET, bSetting); -} -void CScript_EventPseudoModel::Script_EventPseudoModel_Emit( - CFXJSE_Arguments* pArguments) { - IXFA_ScriptContext* pScriptContext = m_pDocument->GetScriptContext(); - if (!pScriptContext) { - return; - } - CXFA_EventParam* pEventParam = pScriptContext->GetEventParam(); - if (!pEventParam) { - return; - } - IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); - if (!pNotify) { - return; - } - IXFA_WidgetHandler* pWidgetHandler = pNotify->GetWidgetHandler(); - if (!pWidgetHandler) { - return; - } - pWidgetHandler->ProcessEvent(pEventParam->m_pTarget, pEventParam); -} -void CScript_EventPseudoModel::Script_EventPseudoModel_Reset( - CFXJSE_Arguments* pArguments) { - IXFA_ScriptContext* pScriptContext = m_pDocument->GetScriptContext(); - if (!pScriptContext) { - return; - } - CXFA_EventParam* pEventParam = pScriptContext->GetEventParam(); - if (!pEventParam) { - return; - } - pEventParam->Reset(); -} diff --git a/xfa/src/fxfa/parser/xfa_script_eventpseudomodel.h b/xfa/src/fxfa/parser/xfa_script_eventpseudomodel.h deleted file mode 100644 index 770ec2e4b9..0000000000 --- a/xfa/src/fxfa/parser/xfa_script_eventpseudomodel.h +++ /dev/null @@ -1,96 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXFA_PARSER_XFA_SCRIPT_EVENTPSEUDOMODEL_H_ -#define XFA_SRC_FXFA_PARSER_XFA_SCRIPT_EVENTPSEUDOMODEL_H_ - -#include "xfa/src/fxfa/parser/xfa_object.h" - -#define XFA_EVENT_CHANGE 0 -#define XFA_EVENT_COMMITKEY 1 -#define XFA_EVENT_FULLTEXT 2 -#define XFA_EVENT_KEYDOWN 3 -#define XFA_EVENT_MODIFIER 4 -#define XFA_EVENT_NEWCONTENTTYPE 5 -#define XFA_EVENT_NEWTEXT 6 -#define XFA_EVENT_PREVCONTENTTYPE 7 -#define XFA_EVENT_PREVTEXT 8 -#define XFA_EVENT_REENTER 9 -#define XFA_EVENT_SELEND 10 -#define XFA_EVENT_SELSTART 11 -#define XFA_EVENT_SHIFT 12 -#define XFA_EVENT_SOAPFAULTCODE 13 -#define XFA_EVENT_SOAPFAULTSTRING 14 -#define XFA_EVENT_TARGET 15 -#define XFA_EVENT_CANCELACTION 16 - -class CScript_EventPseudoModel : public CXFA_OrdinaryObject { - public: - explicit CScript_EventPseudoModel(CXFA_Document* pDocument); - virtual ~CScript_EventPseudoModel(); - - void Script_EventPseudoModel_CancelAction(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_EventPseudoModel_Change(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_EventPseudoModel_CommitKey(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_EventPseudoModel_FullText(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_EventPseudoModel_KeyDown(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_EventPseudoModel_Modifier(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_EventPseudoModel_NewContentType(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_EventPseudoModel_NewText(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_EventPseudoModel_PrevContentType(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_EventPseudoModel_PrevText(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_EventPseudoModel_Reenter(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_EventPseudoModel_SelEnd(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_EventPseudoModel_SelStart(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_EventPseudoModel_Shift(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_EventPseudoModel_SoapFaultCode(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_EventPseudoModel_SoapFaultString(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_EventPseudoModel_Target(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - - void Script_EventPseudoModel_Emit(CFXJSE_Arguments* pArguments); - void Script_EventPseudoModel_Reset(CFXJSE_Arguments* pArguments); - - protected: - void Script_EventPseudoModel_Property(FXJSE_HVALUE hValue, - FX_DWORD dwFlag, - FX_BOOL bSetting); -}; - -#endif // XFA_SRC_FXFA_PARSER_XFA_SCRIPT_EVENTPSEUDOMODEL_H_ diff --git a/xfa/src/fxfa/parser/xfa_script_hostpseudomodel.cpp b/xfa/src/fxfa/parser/xfa_script_hostpseudomodel.cpp deleted file mode 100644 index 4e5be8f3c4..0000000000 --- a/xfa/src/fxfa/parser/xfa_script_hostpseudomodel.cpp +++ /dev/null @@ -1,800 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fxfa/parser/xfa_script_hostpseudomodel.h" - -#include "xfa/src/fxfa/fm2js/xfa_fm2jsapi.h" -#include "xfa/src/fxfa/parser/xfa_docdata.h" -#include "xfa/src/fxfa/parser/xfa_doclayout.h" -#include "xfa/src/fxfa/parser/xfa_document.h" -#include "xfa/src/fxfa/parser/xfa_localemgr.h" -#include "xfa/src/fxfa/parser/xfa_object.h" -#include "xfa/src/fxfa/parser/xfa_parser.h" -#include "xfa/src/fxfa/parser/xfa_script.h" -#include "xfa/src/fxfa/parser/xfa_utils.h" - -CScript_HostPseudoModel::CScript_HostPseudoModel(CXFA_Document* pDocument) - : CXFA_OrdinaryObject(pDocument, XFA_ELEMENT_HostPseudoModel) { - m_uScriptHash = XFA_HASHCODE_Host; -} -CScript_HostPseudoModel::~CScript_HostPseudoModel() {} -void CScript_HostPseudoModel::Script_HostPseudoModel_LoadString( - FXJSE_HVALUE hValue, - IXFA_Notify* pNotify, - FX_DWORD dwFlag) { - CFX_WideString wsValue; - pNotify->GetAppProvider()->LoadString(dwFlag, wsValue); - FXJSE_Value_SetUTF8String(hValue, FX_UTF8Encode(wsValue)); -} -void CScript_HostPseudoModel::Script_HostPseudoModel_AppType( - FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); - if (!pNotify) { - return; - } - if (bSetting) { - ThrowScriptErrorMessage(XFA_IDS_INVAlID_PROP_SET); - return; - } - CFX_WideString wsAppType; - pNotify->GetAppProvider()->GetAppType(wsAppType); - FXJSE_Value_SetUTF8String(hValue, FX_UTF8Encode(wsAppType)); -} -void CScript_HostPseudoModel::Script_HostPseudoModel_FoxitAppType( - FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); - if (!pNotify) { - return; - } - if (bSetting) { - ThrowScriptErrorMessage(XFA_IDS_INVAlID_PROP_SET); - return; - } - CFX_WideString wsAppType; - pNotify->GetAppProvider()->GetFoxitAppType(wsAppType); - FXJSE_Value_SetUTF8String(hValue, FX_UTF8Encode(wsAppType)); -} -void CScript_HostPseudoModel::Script_HostPseudoModel_CalculationsEnabled( - FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); - if (!pNotify) { - return; - } - IXFA_Doc* hDoc = pNotify->GetHDOC(); - if (bSetting) { - pNotify->GetDocProvider()->SetCalculationsEnabled( - hDoc, FXJSE_Value_ToBoolean(hValue)); - return; - } - FX_BOOL bEnabled = pNotify->GetDocProvider()->IsCalculationsEnabled(hDoc); - FXJSE_Value_SetBoolean(hValue, bEnabled); -} -void CScript_HostPseudoModel::Script_HostPseudoModel_CurrentPage( - FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); - if (!pNotify) { - return; - } - IXFA_Doc* hDoc = pNotify->GetHDOC(); - if (bSetting) { - pNotify->GetDocProvider()->SetCurrentPage(hDoc, - FXJSE_Value_ToInteger(hValue)); - return; - } - int32_t iCurrentPage = pNotify->GetDocProvider()->GetCurrentPage(hDoc); - FXJSE_Value_SetInteger(hValue, iCurrentPage); -} -void CScript_HostPseudoModel::Script_HostPseudoModel_Language( - FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); - if (!pNotify) { - return; - } - if (bSetting) { - ThrowScriptErrorMessage(XFA_IDS_UNABLE_SET_LANGUAGE); - return; - } - CFX_WideString wsLanguage; - pNotify->GetAppProvider()->GetLanguage(wsLanguage); - FXJSE_Value_SetUTF8String(hValue, FX_UTF8Encode(wsLanguage)); -} -void CScript_HostPseudoModel::Script_HostPseudoModel_NumPages( - FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); - if (!pNotify) { - return; - } - IXFA_Doc* hDoc = pNotify->GetHDOC(); - if (bSetting) { - ThrowScriptErrorMessage(XFA_IDS_UNABLE_SET_NUMPAGES); - return; - } - int32_t iNumPages = pNotify->GetDocProvider()->CountPages(hDoc); - FXJSE_Value_SetInteger(hValue, iNumPages); -} -void CScript_HostPseudoModel::Script_HostPseudoModel_Platform( - FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); - if (!pNotify) { - return; - } - if (bSetting) { - ThrowScriptErrorMessage(XFA_IDS_UNABLE_SET_PLATFORM); - return; - } - CFX_WideString wsPlatform; - pNotify->GetAppProvider()->GetPlatform(wsPlatform); - FXJSE_Value_SetUTF8String(hValue, FX_UTF8Encode(wsPlatform)); -} -void CScript_HostPseudoModel::Script_HostPseudoModel_Title( - FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - if (!m_pDocument->GetScriptContext()->IsRunAtClient()) { - return; - } - IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); - if (!pNotify) { - return; - } - IXFA_Doc* hDoc = pNotify->GetHDOC(); - if (bSetting) { - CFX_ByteString bsValue; - FXJSE_Value_ToUTF8String(hValue, bsValue); - pNotify->GetDocProvider()->SetTitle( - hDoc, CFX_WideString::FromUTF8(bsValue, bsValue.GetLength())); - return; - } - CFX_WideString wsTitle; - pNotify->GetDocProvider()->GetTitle(hDoc, wsTitle); - FXJSE_Value_SetUTF8String(hValue, FX_UTF8Encode(wsTitle)); -} -void CScript_HostPseudoModel::Script_HostPseudoModel_ValidationsEnabled( - FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); - if (!pNotify) { - return; - } - IXFA_Doc* hDoc = pNotify->GetHDOC(); - if (bSetting) { - pNotify->GetDocProvider()->SetValidationsEnabled( - hDoc, FXJSE_Value_ToBoolean(hValue)); - return; - } - FX_BOOL bEnabled = pNotify->GetDocProvider()->IsValidationsEnabled(hDoc); - FXJSE_Value_SetBoolean(hValue, bEnabled); -} -void CScript_HostPseudoModel::Script_HostPseudoModel_Variation( - FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - if (!m_pDocument->GetScriptContext()->IsRunAtClient()) { - return; - } - IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); - if (!pNotify) { - return; - } - if (bSetting) { - ThrowScriptErrorMessage(XFA_IDS_UNABLE_SET_VARIATION); - return; - } - CFX_WideString wsVariation; - pNotify->GetAppProvider()->GetVariation(wsVariation); - FXJSE_Value_SetUTF8String(hValue, FX_UTF8Encode(wsVariation)); -} -void CScript_HostPseudoModel::Script_HostPseudoModel_Version( - FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); - if (!pNotify) { - return; - } - if (bSetting) { - ThrowScriptErrorMessage(XFA_IDS_UNABLE_SET_VERSION); - return; - } - CFX_WideString wsVersion; - pNotify->GetAppProvider()->GetVersion(wsVersion); - FXJSE_Value_SetUTF8String(hValue, FX_UTF8Encode(wsVersion)); -} -void CScript_HostPseudoModel::Script_HostPseudoModel_FoxitVersion( - FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); - if (!pNotify) { - return; - } - if (bSetting) { - ThrowScriptErrorMessage(XFA_IDS_UNABLE_SET_VERSION); - return; - } - CFX_WideString wsVersion; - pNotify->GetAppProvider()->GetFoxitVersion(wsVersion); - FXJSE_Value_SetUTF8String(hValue, FX_UTF8Encode(wsVersion)); -} -void CScript_HostPseudoModel::Script_HostPseudoModel_Name( - FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); - if (!pNotify) { - return; - } - if (bSetting) { - ThrowScriptErrorMessage(XFA_IDS_INVAlID_PROP_SET); - return; - } - CFX_WideString wsAppName; - pNotify->GetAppProvider()->GetAppName(wsAppName); - FXJSE_Value_SetUTF8String(hValue, FX_UTF8Encode(wsAppName)); -} -void CScript_HostPseudoModel::Script_HostPseudoModel_FoxitName( - FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); - if (!pNotify) { - return; - } - if (bSetting) { - ThrowScriptErrorMessage(XFA_IDS_INVAlID_PROP_SET); - return; - } - CFX_WideString wsFoxitAppName; - pNotify->GetAppProvider()->GetFoxitAppName(wsFoxitAppName); - FXJSE_Value_SetUTF8String(hValue, FX_UTF8Encode(wsFoxitAppName)); -} -void CScript_HostPseudoModel::Script_HostPseudoModel_GotoURL( - CFXJSE_Arguments* pArguments) { - if (!m_pDocument->GetScriptContext()->IsRunAtClient()) { - return; - } - int32_t iLength = pArguments->GetLength(); - if (iLength != 1) { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"gotoURL"); - return; - } - IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); - if (!pNotify) { - return; - } - IXFA_Doc* hDoc = pNotify->GetHDOC(); - CFX_WideString wsURL; - if (iLength >= 1) { - CFX_ByteString bsURL = pArguments->GetUTF8String(0); - wsURL = CFX_WideString::FromUTF8(bsURL, bsURL.GetLength()); - } - pNotify->GetDocProvider()->GotoURL(hDoc, wsURL); -} -void CScript_HostPseudoModel::Script_HostPseudoModel_OpenList( - CFXJSE_Arguments* pArguments) { - if (!m_pDocument->GetScriptContext()->IsRunAtClient()) { - return; - } - int32_t iLength = pArguments->GetLength(); - if (iLength != 1) { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"openList"); - return; - } - IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); - if (!pNotify) { - return; - } - CXFA_Node* pNode = NULL; - if (iLength >= 1) { - FXJSE_HVALUE hValue = pArguments->GetValue(0); - if (FXJSE_Value_IsObject(hValue)) { - pNode = static_cast(FXJSE_Value_ToObject(hValue, nullptr)); - } else if (FXJSE_Value_IsUTF8String(hValue)) { - CFX_ByteString bsString; - FXJSE_Value_ToUTF8String(hValue, bsString); - CFX_WideString wsExpression = - CFX_WideString::FromUTF8(bsString, bsString.GetLength()); - IXFA_ScriptContext* pScriptContext = m_pDocument->GetScriptContext(); - if (!pScriptContext) { - FXJSE_Value_Release(hValue); - return; - } - CXFA_Object* pObject = pScriptContext->GetThisObject(); - if (!pObject) { - FXJSE_Value_Release(hValue); - return; - } - FX_DWORD dwFlag = XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Parent | - XFA_RESOLVENODE_Siblings; - XFA_RESOLVENODE_RS resoveNodeRS; - int32_t iRet = pScriptContext->ResolveObjects(pObject, wsExpression, - resoveNodeRS, dwFlag); - if (iRet < 1 || !resoveNodeRS.nodes[0]->IsNode()) { - FXJSE_Value_Release(hValue); - return; - } - pNode = resoveNodeRS.nodes[0]->AsNode(); - } - FXJSE_Value_Release(hValue); - } - IXFA_DocLayout* pDocLayout = m_pDocument->GetDocLayout(); - if (!pDocLayout) { - return; - } - IXFA_Widget* hWidget = pNotify->GetHWidget(pDocLayout->GetLayoutItem(pNode)); - if (!hWidget) { - return; - } - pNotify->GetDocProvider()->SetFocusWidget(pNotify->GetHDOC(), hWidget); - pNotify->OpenDropDownList(hWidget); -} -void CScript_HostPseudoModel::Script_HostPseudoModel_Response( - CFXJSE_Arguments* pArguments) { - int32_t iLength = pArguments->GetLength(); - if (iLength < 1 || iLength > 4) { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"response"); - return; - } - IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); - if (!pNotify) { - return; - } - CFX_WideString wsQuestion; - CFX_WideString wsTitle; - CFX_WideString wsDefaultAnswer; - FX_BOOL bMark = FALSE; - if (iLength >= 1) { - CFX_ByteString bsQuestion = pArguments->GetUTF8String(0); - wsQuestion = CFX_WideString::FromUTF8(bsQuestion, bsQuestion.GetLength()); - } - if (iLength >= 2) { - CFX_ByteString bsTitle = pArguments->GetUTF8String(1); - wsTitle = CFX_WideString::FromUTF8(bsTitle, bsTitle.GetLength()); - } - if (iLength >= 3) { - CFX_ByteString bsDefaultAnswer = pArguments->GetUTF8String(2); - wsDefaultAnswer = - CFX_WideString::FromUTF8(bsDefaultAnswer, bsDefaultAnswer.GetLength()); - } - if (iLength >= 4) { - bMark = pArguments->GetInt32(3) == 0 ? FALSE : TRUE; - } - CFX_WideString wsAnswer; - pNotify->GetAppProvider()->Response(wsAnswer, wsQuestion, wsTitle, - wsDefaultAnswer, bMark); - FXJSE_HVALUE hValue = pArguments->GetReturnValue(); - if (hValue) { - FXJSE_Value_SetUTF8String(hValue, FX_UTF8Encode(wsAnswer)); - } -} -void CScript_HostPseudoModel::Script_HostPseudoModel_DocumentInBatch( - CFXJSE_Arguments* pArguments) { - IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); - if (!pNotify) { - return; - } - int32_t iCur = pNotify->GetAppProvider()->GetCurDocumentInBatch(); - FXJSE_HVALUE hValue = pArguments->GetReturnValue(); - if (hValue) { - FXJSE_Value_SetInteger(hValue, iCur); - } -} -static int32_t XFA_FilterName(const CFX_WideStringC& wsExpression, - int32_t nStart, - CFX_WideString& wsFilter) { - FXSYS_assert(nStart > -1); - int32_t iLength = wsExpression.GetLength(); - if (nStart >= iLength) { - return iLength; - } - FX_WCHAR* pBuf = wsFilter.GetBuffer(iLength - nStart); - int32_t nCount = 0; - const FX_WCHAR* pSrc = wsExpression.GetPtr(); - FX_WCHAR wCur; - while (nStart < iLength) { - wCur = pSrc[nStart++]; - if (wCur == ',') { - break; - } - pBuf[nCount++] = wCur; - } - wsFilter.ReleaseBuffer(nCount); - wsFilter.TrimLeft(); - wsFilter.TrimRight(); - return nStart; -} -void CScript_HostPseudoModel::Script_HostPseudoModel_ResetData( - CFXJSE_Arguments* pArguments) { - int32_t iLength = pArguments->GetLength(); - if (iLength < 0 || iLength > 1) { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"resetData"); - return; - } - IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); - if (!pNotify) { - return; - } - CFX_WideString wsExpression; - if (iLength >= 1) { - CFX_ByteString bsExpression = pArguments->GetUTF8String(0); - wsExpression = - CFX_WideString::FromUTF8(bsExpression, bsExpression.GetLength()); - } - if (wsExpression.IsEmpty()) { - pNotify->ResetData(); - return; - } - int32_t iStart = 0; - CFX_WideString wsName; - CXFA_Node* pNode = NULL; - int32_t iExpLength = wsExpression.GetLength(); - while (iStart < iExpLength) { - iStart = XFA_FilterName(wsExpression, iStart, wsName); - IXFA_ScriptContext* pScriptContext = m_pDocument->GetScriptContext(); - if (!pScriptContext) { - return; - } - CXFA_Object* pObject = pScriptContext->GetThisObject(); - if (!pObject) { - return; - } - FX_DWORD dwFlag = XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Parent | - XFA_RESOLVENODE_Siblings; - XFA_RESOLVENODE_RS resoveNodeRS; - int32_t iRet = - pScriptContext->ResolveObjects(pObject, wsName, resoveNodeRS, dwFlag); - if (iRet < 1 || !resoveNodeRS.nodes[0]->IsNode()) { - continue; - } - pNode = resoveNodeRS.nodes[0]->AsNode(); - pNotify->ResetData(pNode->GetWidgetData()); - } - if (!pNode) { - pNotify->ResetData(); - } -} -void CScript_HostPseudoModel::Script_HostPseudoModel_Beep( - CFXJSE_Arguments* pArguments) { - if (!m_pDocument->GetScriptContext()->IsRunAtClient()) { - return; - } - int32_t iLength = pArguments->GetLength(); - if (iLength < 0 || iLength > 1) { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"beep"); - return; - } - IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); - if (!pNotify) { - return; - } - FX_DWORD dwType = 4; - if (iLength >= 1) { - dwType = pArguments->GetInt32(0); - } - pNotify->GetAppProvider()->Beep(dwType); -} -void CScript_HostPseudoModel::Script_HostPseudoModel_SetFocus( - CFXJSE_Arguments* pArguments) { - if (!m_pDocument->GetScriptContext()->IsRunAtClient()) { - return; - } - int32_t iLength = pArguments->GetLength(); - if (iLength != 1) { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"setFocus"); - return; - } - IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); - if (!pNotify) { - return; - } - CXFA_Node* pNode = NULL; - if (iLength >= 1) { - FXJSE_HVALUE hValue = pArguments->GetValue(0); - if (FXJSE_Value_IsObject(hValue)) { - pNode = static_cast(FXJSE_Value_ToObject(hValue, NULL)); - } else if (FXJSE_Value_IsUTF8String(hValue)) { - CFX_ByteString bsString; - FXJSE_Value_ToUTF8String(hValue, bsString); - CFX_WideString wsExpression = - CFX_WideString::FromUTF8(bsString, bsString.GetLength()); - IXFA_ScriptContext* pScriptContext = m_pDocument->GetScriptContext(); - if (!pScriptContext) { - FXJSE_Value_Release(hValue); - return; - } - CXFA_Object* pObject = pScriptContext->GetThisObject(); - if (!pObject) { - FXJSE_Value_Release(hValue); - return; - } - FX_DWORD dwFlag = XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Parent | - XFA_RESOLVENODE_Siblings; - XFA_RESOLVENODE_RS resoveNodeRS; - int32_t iRet = pScriptContext->ResolveObjects(pObject, wsExpression, - resoveNodeRS, dwFlag); - if (iRet < 1 || !resoveNodeRS.nodes[0]->IsNode()) { - FXJSE_Value_Release(hValue); - return; - } - pNode = resoveNodeRS.nodes[0]->AsNode(); - } - FXJSE_Value_Release(hValue); - } - pNotify->SetFocusWidgetNode(pNode); -} -void CScript_HostPseudoModel::Script_HostPseudoModel_GetFocus( - CFXJSE_Arguments* pArguments) { - IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); - if (!pNotify) { - return; - } - CXFA_Node* pNode = pNotify->GetFocusWidgetNode(); - if (!pNode) { - return; - } - FXJSE_Value_Set(pArguments->GetReturnValue(), - m_pDocument->GetScriptContext()->GetJSValueFromMap(pNode)); -} -void CScript_HostPseudoModel::Script_HostPseudoModel_MessageBox( - CFXJSE_Arguments* pArguments) { - if (!m_pDocument->GetScriptContext()->IsRunAtClient()) { - return; - } - int32_t iLength = pArguments->GetLength(); - if (iLength < 1 || iLength > 4) { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"messageBox"); - return; - } - IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); - if (!pNotify) { - return; - } - CFX_WideString wsMessage; - CFX_WideString bsTitle; - FX_DWORD dwMessageType = XFA_MBICON_Error; - FX_DWORD dwButtonType = XFA_MB_OK; - if (iLength >= 1) { - if (!Script_HostPseudoModel_ValidateArgsForMsg(pArguments, 0, wsMessage)) { - return; - } - } - if (iLength >= 2) { - if (!Script_HostPseudoModel_ValidateArgsForMsg(pArguments, 1, bsTitle)) { - return; - } - } - if (iLength >= 3) { - dwMessageType = pArguments->GetInt32(2); - if (dwMessageType > XFA_MBICON_Status) { - dwMessageType = XFA_MBICON_Error; - } - } - if (iLength >= 4) { - dwButtonType = pArguments->GetInt32(3); - if (dwButtonType > XFA_MB_YesNoCancel) { - dwButtonType = XFA_MB_OK; - } - } - int32_t iValue = pNotify->GetAppProvider()->MsgBox( - wsMessage, bsTitle, dwMessageType, dwButtonType); - FXJSE_HVALUE hValue = pArguments->GetReturnValue(); - if (hValue) { - FXJSE_Value_SetInteger(hValue, iValue); - } -} -FX_BOOL CScript_HostPseudoModel::Script_HostPseudoModel_ValidateArgsForMsg( - CFXJSE_Arguments* pArguments, - int32_t iArgIndex, - CFX_WideString& wsValue) { - if (pArguments == NULL || iArgIndex < 0) { - return FALSE; - } - FX_BOOL bIsJsType = FALSE; - if (m_pDocument->GetScriptContext()->GetType() == - XFA_SCRIPTLANGTYPE_Javascript) { - bIsJsType = TRUE; - } - FXJSE_HVALUE hValueArg = pArguments->GetValue(iArgIndex); - if (!FXJSE_Value_IsUTF8String(hValueArg) && bIsJsType) { - ThrowScriptErrorMessage(XFA_IDS_ARGUMENT_MISMATCH); - FXJSE_Value_Release(hValueArg); - return FALSE; - } - if (FXJSE_Value_IsNull(hValueArg)) { - wsValue = FX_WSTRC(L""); - } else { - CFX_ByteString byMessage; - FXJSE_Value_ToUTF8String(hValueArg, byMessage); - wsValue = CFX_WideString::FromUTF8(byMessage, byMessage.GetLength()); - } - FXJSE_Value_Release(hValueArg); - return TRUE; -} -void CScript_HostPseudoModel::Script_HostPseudoModel_DocumentCountInBatch( - CFXJSE_Arguments* pArguments) { - IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); - if (!pNotify) { - return; - } - int32_t iValue = pNotify->GetAppProvider()->GetDocumentCountInBatch(); - FXJSE_HVALUE hValue = pArguments->GetReturnValue(); - if (hValue) { - FXJSE_Value_SetInteger(hValue, iValue); - } -} -void CScript_HostPseudoModel::Script_HostPseudoModel_Print( - CFXJSE_Arguments* pArguments) { - if (!m_pDocument->GetScriptContext()->IsRunAtClient()) { - return; - } - int32_t iLength = pArguments->GetLength(); - if (iLength != 8) { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"print"); - return; - } - IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); - if (!pNotify) { - return; - } - IXFA_Doc* hDoc = pNotify->GetHDOC(); - FX_DWORD dwOptions = 0; - FX_BOOL bShowDialog = TRUE; - if (iLength >= 1) { - bShowDialog = pArguments->GetInt32(0) == 0 ? FALSE : TRUE; - } - if (bShowDialog) { - dwOptions |= XFA_PRINTOPT_ShowDialog; - } - int32_t nStartPage = 0; - if (iLength >= 2) { - nStartPage = pArguments->GetInt32(1); - } - int32_t nEndPage = 0; - if (iLength >= 3) { - nEndPage = pArguments->GetInt32(2); - } - FX_BOOL bCanCancel = TRUE; - if (iLength >= 4) { - bCanCancel = pArguments->GetInt32(3) == 0 ? FALSE : TRUE; - } - if (bCanCancel) { - dwOptions |= XFA_PRINTOPT_CanCancel; - } - FX_BOOL bShrinkPage = TRUE; - if (iLength >= 5) { - bShrinkPage = pArguments->GetInt32(4) == 0 ? FALSE : TRUE; - } - if (bShrinkPage) { - dwOptions |= XFA_PRINTOPT_ShrinkPage; - } - FX_BOOL bAsImage = TRUE; - if (iLength >= 6) { - bAsImage = pArguments->GetInt32(5) == 0 ? FALSE : TRUE; - } - if (bAsImage) { - dwOptions |= XFA_PRINTOPT_AsImage; - } - FX_BOOL bReverseOrder = TRUE; - if (iLength >= 7) { - bAsImage = pArguments->GetInt32(5) == 0 ? FALSE : TRUE; - } - bReverseOrder = pArguments->GetInt32(6) == 0 ? FALSE : TRUE; - if (bReverseOrder) { - dwOptions |= XFA_PRINTOPT_ReverseOrder; - } - FX_BOOL bPrintAnnot = TRUE; - if (iLength >= 8) { - bPrintAnnot = pArguments->GetInt32(7) == 0 ? FALSE : TRUE; - } - if (bPrintAnnot) { - dwOptions |= XFA_PRINTOPT_PrintAnnot; - } - pNotify->GetDocProvider()->Print(hDoc, nStartPage, nEndPage, dwOptions); -} -void CScript_HostPseudoModel::Script_HostPseudoModel_ImportData( - CFXJSE_Arguments* pArguments) { - int32_t iLength = pArguments->GetLength(); - if (iLength < 0 || iLength > 1) { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"importData"); - return; - } - IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); - if (!pNotify) { - return; - } - CFX_WideString wsFilePath; - if (iLength > 0) { - CFX_ByteString bsFilePath = pArguments->GetUTF8String(0); - wsFilePath = CFX_WideString::FromUTF8(bsFilePath, bsFilePath.GetLength()); - } - IXFA_Doc* hDoc = pNotify->GetHDOC(); - pNotify->GetDocProvider()->ImportData(hDoc, wsFilePath); -} -void CScript_HostPseudoModel::Script_HostPseudoModel_ExportData( - CFXJSE_Arguments* pArguments) { - int32_t iLength = pArguments->GetLength(); - if (iLength < 0 || iLength > 2) { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"exportData"); - return; - } - IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); - if (!pNotify) { - return; - } - IXFA_Doc* hDoc = pNotify->GetHDOC(); - CFX_WideString wsFilePath; - FX_BOOL bXDP = TRUE; - if (iLength >= 1) { - CFX_ByteString bsFilePath = pArguments->GetUTF8String(0); - wsFilePath = CFX_WideString::FromUTF8(bsFilePath, bsFilePath.GetLength()); - } - if (iLength >= 2) { - bXDP = pArguments->GetInt32(1) == 0 ? FALSE : TRUE; - } - pNotify->GetDocProvider()->ExportData(hDoc, wsFilePath, bXDP); -} -void CScript_HostPseudoModel::Script_HostPseudoModel_PageUp( - CFXJSE_Arguments* pArguments) { - IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); - if (!pNotify) { - return; - } - IXFA_Doc* hDoc = pNotify->GetHDOC(); - int32_t nCurPage = pNotify->GetDocProvider()->GetCurrentPage(hDoc); - int32_t nNewPage = 0; - if (nCurPage <= 1) { - return; - } - nNewPage = nCurPage - 1; - pNotify->GetDocProvider()->SetCurrentPage(hDoc, nNewPage); -} -void CScript_HostPseudoModel::Script_HostPseudoModel_PageDown( - CFXJSE_Arguments* pArguments) { - IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); - if (!pNotify) { - return; - } - IXFA_Doc* hDoc = pNotify->GetHDOC(); - int32_t nCurPage = pNotify->GetDocProvider()->GetCurrentPage(hDoc); - int32_t nPageCount = pNotify->GetDocProvider()->CountPages(hDoc); - if (!nPageCount || nCurPage == nPageCount) { - return; - } - int32_t nNewPage = 0; - if (nCurPage >= nPageCount) { - nNewPage = nPageCount - 1; - } else { - nNewPage = nCurPage + 1; - } - pNotify->GetDocProvider()->SetCurrentPage(hDoc, nNewPage); -} -void CScript_HostPseudoModel::Script_HostPseudoModel_CurrentDateTime( - CFXJSE_Arguments* pArguments) { - IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); - if (!pNotify) { - return; - } - CFX_WideString wsDataTime = pNotify->GetCurrentDateTime(); - FXJSE_HVALUE hValue = pArguments->GetReturnValue(); - if (hValue) { - FXJSE_Value_SetUTF8String(hValue, FX_UTF8Encode(wsDataTime)); - } -} diff --git a/xfa/src/fxfa/parser/xfa_script_hostpseudomodel.h b/xfa/src/fxfa/parser/xfa_script_hostpseudomodel.h deleted file mode 100644 index 7154a255f6..0000000000 --- a/xfa/src/fxfa/parser/xfa_script_hostpseudomodel.h +++ /dev/null @@ -1,89 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXFA_PARSER_XFA_SCRIPT_HOSTPSEUDOMODEL_H_ -#define XFA_SRC_FXFA_PARSER_XFA_SCRIPT_HOSTPSEUDOMODEL_H_ - -#include "xfa/src/fxfa/parser/xfa_document.h" -#include "xfa/src/fxfa/parser/xfa_object.h" - -class CScript_HostPseudoModel : public CXFA_OrdinaryObject { - public: - CScript_HostPseudoModel(CXFA_Document* pDocument); - virtual ~CScript_HostPseudoModel(); - - void Script_HostPseudoModel_AppType(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_HostPseudoModel_FoxitAppType(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_HostPseudoModel_CalculationsEnabled(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_HostPseudoModel_CurrentPage(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_HostPseudoModel_Language(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_HostPseudoModel_NumPages(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_HostPseudoModel_Platform(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_HostPseudoModel_Title(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_HostPseudoModel_ValidationsEnabled(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_HostPseudoModel_Variation(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_HostPseudoModel_Version(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_HostPseudoModel_FoxitVersion(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_HostPseudoModel_Name(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - void Script_HostPseudoModel_FoxitName(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - - void Script_HostPseudoModel_GotoURL(CFXJSE_Arguments* pArguments); - void Script_HostPseudoModel_OpenList(CFXJSE_Arguments* pArguments); - void Script_HostPseudoModel_Response(CFXJSE_Arguments* pArguments); - void Script_HostPseudoModel_DocumentInBatch(CFXJSE_Arguments* pArguments); - void Script_HostPseudoModel_ResetData(CFXJSE_Arguments* pArguments); - void Script_HostPseudoModel_Beep(CFXJSE_Arguments* pArguments); - void Script_HostPseudoModel_SetFocus(CFXJSE_Arguments* pArguments); - void Script_HostPseudoModel_GetFocus(CFXJSE_Arguments* pArguments); - void Script_HostPseudoModel_MessageBox(CFXJSE_Arguments* pArguments); - void Script_HostPseudoModel_DocumentCountInBatch( - CFXJSE_Arguments* pArguments); - void Script_HostPseudoModel_Print(CFXJSE_Arguments* pArguments); - void Script_HostPseudoModel_ImportData(CFXJSE_Arguments* pArguments); - void Script_HostPseudoModel_ExportData(CFXJSE_Arguments* pArguments); - void Script_HostPseudoModel_PageUp(CFXJSE_Arguments* pArguments); - void Script_HostPseudoModel_PageDown(CFXJSE_Arguments* pArguments); - void Script_HostPseudoModel_CurrentDateTime(CFXJSE_Arguments* pArguments); - - protected: - void Script_HostPseudoModel_LoadString(FXJSE_HVALUE hValue, - IXFA_Notify* pNotify, - FX_DWORD dwFlag); - FX_BOOL Script_HostPseudoModel_ValidateArgsForMsg( - CFXJSE_Arguments* pArguments, - int32_t iArgIndex, - CFX_WideString& wsValue); -}; - -#endif // XFA_SRC_FXFA_PARSER_XFA_SCRIPT_HOSTPSEUDOMODEL_H_ diff --git a/xfa/src/fxfa/parser/xfa_script_imp.cpp b/xfa/src/fxfa/parser/xfa_script_imp.cpp deleted file mode 100644 index 3682580eb5..0000000000 --- a/xfa/src/fxfa/parser/xfa_script_imp.cpp +++ /dev/null @@ -1,781 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fxfa/parser/xfa_script_imp.h" - -#include "core/include/fxcrt/fx_ext.h" -#include "xfa/src/fxfa/fm2js/xfa_fm2jsapi.h" -#include "xfa/src/fxfa/parser/xfa_docdata.h" -#include "xfa/src/fxfa/parser/xfa_doclayout.h" -#include "xfa/src/fxfa/parser/xfa_document.h" -#include "xfa/src/fxfa/parser/xfa_script_nodehelper.h" -#include "xfa/src/fxfa/parser/xfa_script_resolveprocessor.h" -#include "xfa/src/fxfa/parser/xfa_localemgr.h" -#include "xfa/src/fxfa/parser/xfa_object.h" -#include "xfa/src/fxfa/parser/xfa_parser.h" -#include "xfa/src/fxfa/parser/xfa_script.h" -#include "xfa/src/fxfa/parser/xfa_utils.h" - -CXFA_ScriptContext::CXFA_ScriptContext(CXFA_Document* pDocument) - : m_pDocument(pDocument), - m_hJsContext(nullptr), - m_hJsRuntime(nullptr), - m_hJsClass(nullptr), - m_eScriptType(XFA_SCRIPTLANGTYPE_Unkown), - m_pScriptNodeArray(nullptr), - m_pResolveProcessor(nullptr), - m_hFM2JSContext(nullptr), - m_pThisObject(nullptr), - m_dwBuiltInInFlags(0), - m_eRunAtType(XFA_ATTRIBUTEENUM_Client) { - FXSYS_memset(&m_JsGlobalClass, 0, sizeof(FXJSE_CLASS)); - FXSYS_memset(&m_JsNormalClass, 0, sizeof(FXJSE_CLASS)); -} -CXFA_ScriptContext::~CXFA_ScriptContext() { - FX_POSITION ps = m_mapXFAToHValue.GetStartPosition(); - while (ps) { - CXFA_Object* pXFAObj; - FXJSE_HVALUE pValue; - m_mapXFAToHValue.GetNextAssoc(ps, pXFAObj, pValue); - FXJSE_Value_Release(pValue); - } - m_mapXFAToHValue.RemoveAll(); - ReleaseVariablesMap(); - if (m_hFM2JSContext) { - XFA_FM2JS_ContextRelease(m_hFM2JSContext); - m_hFM2JSContext = NULL; - } - if (m_hJsContext) { - FXJSE_Context_Release(m_hJsContext); - m_hJsContext = NULL; - } - if (m_pResolveProcessor) { - delete m_pResolveProcessor; - m_pResolveProcessor = NULL; - } - m_upObjectArray.RemoveAll(); - for (int32_t i = 0; i < m_CacheListArray.GetSize(); i++) { - delete ((CXFA_NodeList*)m_CacheListArray[i]); - } - m_CacheListArray.RemoveAll(); -} -void CXFA_ScriptContext::Initialize(FXJSE_HRUNTIME hRuntime) { - m_hJsRuntime = hRuntime; - DefineJsContext(); - DefineJsClass(); - m_pResolveProcessor = new CXFA_ResolveProcessor; -} -void CXFA_ScriptContext::Release() { - delete this; -} -FX_BOOL CXFA_ScriptContext::RunScript(XFA_SCRIPTLANGTYPE eScriptType, - const CFX_WideStringC& wsScript, - FXJSE_HVALUE hRetValue, - CXFA_Object* pThisObject) { - CFX_ByteString btScript; - XFA_SCRIPTLANGTYPE eSaveType = m_eScriptType; - m_eScriptType = eScriptType; - if (eScriptType == XFA_SCRIPTLANGTYPE_Formcalc) { - if (!m_hFM2JSContext) { - m_hFM2JSContext = XFA_FM2JS_ContextCreate(); - XFA_FM2JS_ContextInitialize(m_hFM2JSContext, m_hJsRuntime, m_hJsContext, - m_pDocument); - } - CFX_WideTextBuf wsJavaScript; - CFX_WideString wsErrorInfo; - int32_t iFlags = XFA_FM2JS_Translate(wsScript, wsJavaScript, wsErrorInfo); - if (iFlags) { - FXJSE_Value_SetUndefined(hRetValue); - return FALSE; - } - btScript = - FX_UTF8Encode(wsJavaScript.GetBuffer(), wsJavaScript.GetLength()); - } else { - btScript = FX_UTF8Encode(wsScript.GetPtr(), wsScript.GetLength()); - } - CXFA_Object* pOriginalObject = m_pThisObject; - m_pThisObject = pThisObject; - FXJSE_HVALUE pValue = pThisObject ? GetJSValueFromMap(pThisObject) : NULL; - FX_BOOL bRet = FXJSE_ExecuteScript(m_hJsContext, btScript, hRetValue, pValue); - m_pThisObject = pOriginalObject; - m_eScriptType = eSaveType; - return bRet; -} -void CXFA_ScriptContext::GlobalPropertySetter(FXJSE_HOBJECT hObject, - const CFX_ByteStringC& szPropName, - FXJSE_HVALUE hValue) { - CXFA_Object* lpOrginalNode = - (CXFA_Object*)FXJSE_Value_ToObject(hObject, NULL); - CXFA_Document* pDoc = lpOrginalNode->GetDocument(); - CXFA_ScriptContext* lpScriptContext = - (CXFA_ScriptContext*)pDoc->GetScriptContext(); - CXFA_Object* lpCurNode = lpScriptContext->GetVariablesThis(lpOrginalNode); - CFX_WideString wsPropName = CFX_WideString::FromUTF8( - (const FX_CHAR*)szPropName.GetPtr(), szPropName.GetLength()); - FX_DWORD dwFlag = XFA_RESOLVENODE_Parent | XFA_RESOLVENODE_Siblings | - XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Properties | - XFA_RESOLVENODE_Attributes; - CXFA_Node* pRefNode = ToNode(lpScriptContext->GetThisObject()); - if (lpOrginalNode->GetObjectType() == XFA_OBJECTTYPE_VariablesThis) { - pRefNode = ToNode(lpCurNode); - } - if (lpScriptContext->QueryNodeByFlag(pRefNode, wsPropName, hValue, dwFlag, - TRUE)) { - return; - } - if (lpOrginalNode->GetObjectType() == XFA_OBJECTTYPE_VariablesThis) { - if (FXJSE_Value_IsUndefined(hValue)) { - FXJSE_Value_SetObjectOwnProp(hObject, szPropName, hValue); - return; - } - } - IXFA_Notify* pNotify = pDoc->GetNotify(); - if (!pNotify) { - return; - } - pNotify->GetDocProvider()->SetGlobalProperty(pNotify->GetHDOC(), szPropName, - hValue); -} -FX_BOOL CXFA_ScriptContext::QueryNodeByFlag(CXFA_Node* refNode, - const CFX_WideStringC& propname, - FXJSE_HVALUE hValue, - FX_DWORD dwFlag, - FX_BOOL bSetting) { - if (!refNode) - return false; - XFA_RESOLVENODE_RS resolveRs; - if (ResolveObjects(refNode, propname, resolveRs, dwFlag) <= 0) - return false; - if (resolveRs.dwFlags == XFA_RESOVENODE_RSTYPE_Nodes) { - FXJSE_HVALUE pValue = GetJSValueFromMap(resolveRs.nodes[0]); - FXJSE_Value_Set(hValue, pValue); - return true; - } - if (resolveRs.dwFlags == XFA_RESOVENODE_RSTYPE_Attribute) { - const XFA_SCRIPTATTRIBUTEINFO* lpAttributeInfo = resolveRs.pScriptAttribute; - if (lpAttributeInfo) { - (resolveRs.nodes[0]->*(lpAttributeInfo->lpfnCallback))( - hValue, bSetting, (XFA_ATTRIBUTE)lpAttributeInfo->eAttribute); - } - } - return true; -} -void CXFA_ScriptContext::GlobalPropertyGetter(FXJSE_HOBJECT hObject, - const CFX_ByteStringC& szPropName, - FXJSE_HVALUE hValue) { - CXFA_Object* pOrginalObject = - (CXFA_Object*)FXJSE_Value_ToObject(hObject, NULL); - CXFA_Document* pDoc = pOrginalObject->GetDocument(); - CXFA_ScriptContext* lpScriptContext = - (CXFA_ScriptContext*)pDoc->GetScriptContext(); - CXFA_Object* lpCurNode = lpScriptContext->GetVariablesThis(pOrginalObject); - CFX_WideString wsPropName = CFX_WideString::FromUTF8( - (const FX_CHAR*)szPropName.GetPtr(), szPropName.GetLength()); - if (lpScriptContext->GetType() == XFA_SCRIPTLANGTYPE_Formcalc) { - if (szPropName == FOXIT_XFA_FM2JS_FORMCALC_RUNTIME) { - XFA_FM2JS_GlobalPropertyGetter(lpScriptContext->m_hFM2JSContext, hValue); - return; - } - uint32_t uHashCode = - FX_HashCode_String_GetW(wsPropName, wsPropName.GetLength()); - if (uHashCode != XFA_HASHCODE_Layout) { - CXFA_Object* pObject = - lpScriptContext->GetDocument()->GetXFAObject(uHashCode); - if (pObject) { - FXJSE_Value_Set(hValue, lpScriptContext->GetJSValueFromMap(pObject)); - return; - } - } - } - FX_DWORD dwFlag = XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Properties | - XFA_RESOLVENODE_Attributes; - CXFA_Node* pRefNode = ToNode(lpScriptContext->GetThisObject()); - if (pOrginalObject->GetObjectType() == XFA_OBJECTTYPE_VariablesThis) { - pRefNode = ToNode(lpCurNode); - } - if (lpScriptContext->QueryNodeByFlag(pRefNode, wsPropName, hValue, dwFlag, - FALSE)) { - return; - } - dwFlag = XFA_RESOLVENODE_Parent | XFA_RESOLVENODE_Siblings; - if (lpScriptContext->QueryNodeByFlag(pRefNode, wsPropName, hValue, dwFlag, - FALSE)) { - return; - } - CXFA_Object* pScriptObject = - lpScriptContext->GetVariablesThis(pOrginalObject, TRUE); - if (pScriptObject && - lpScriptContext->QueryVariableHValue(pScriptObject->AsNode(), szPropName, - hValue, TRUE)) { - return; - } - IXFA_Notify* pNotify = pDoc->GetNotify(); - if (!pNotify) { - return; - } - pNotify->GetDocProvider()->GetGlobalProperty(pNotify->GetHDOC(), szPropName, - hValue); -} -void CXFA_ScriptContext::NormalPropertyGetter(FXJSE_HOBJECT hObject, - const CFX_ByteStringC& szPropName, - FXJSE_HVALUE hValue) { - CXFA_Object* pOrginalObject = - (CXFA_Object*)FXJSE_Value_ToObject(hObject, NULL); - if (pOrginalObject == NULL) { - FXJSE_Value_SetUndefined(hValue); - return; - } - CFX_WideString wsPropName = CFX_WideString::FromUTF8( - (const FX_CHAR*)szPropName.GetPtr(), szPropName.GetLength()); - CXFA_ScriptContext* lpScriptContext = - (CXFA_ScriptContext*)pOrginalObject->GetDocument()->GetScriptContext(); - CXFA_Object* pObject = lpScriptContext->GetVariablesThis(pOrginalObject); - if (wsPropName == FX_WSTRC(L"xfa")) { - FXJSE_HVALUE pValue = lpScriptContext->GetJSValueFromMap( - lpScriptContext->GetDocument()->GetRoot()); - FXJSE_Value_Set(hValue, pValue); - return; - } - FX_DWORD dwFlag = XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Properties | - XFA_RESOLVENODE_Attributes; - FX_BOOL bRet = lpScriptContext->QueryNodeByFlag(ToNode(pObject), wsPropName, - hValue, dwFlag, FALSE); - if (bRet) { - return; - } - if (pObject == lpScriptContext->GetThisObject() || - (lpScriptContext->GetType() == XFA_SCRIPTLANGTYPE_Javascript && - !lpScriptContext->IsStrictScopeInJavaScript())) { - dwFlag = XFA_RESOLVENODE_Parent | XFA_RESOLVENODE_Siblings; - bRet = lpScriptContext->QueryNodeByFlag(ToNode(pObject), wsPropName, hValue, - dwFlag, FALSE); - } - if (bRet) { - return; - } - CXFA_Object* pScriptObject = - lpScriptContext->GetVariablesThis(pOrginalObject, TRUE); - if (pScriptObject) { - bRet = lpScriptContext->QueryVariableHValue(ToNode(pScriptObject), - szPropName, hValue, TRUE); - } - if (!bRet) { - FXJSE_Value_SetUndefined(hValue); - } -} -void CXFA_ScriptContext::NormalPropertySetter(FXJSE_HOBJECT hObject, - const CFX_ByteStringC& szPropName, - FXJSE_HVALUE hValue) { - CXFA_Object* pOrginalObject = - (CXFA_Object*)FXJSE_Value_ToObject(hObject, NULL); - if (pOrginalObject == NULL) { - return; - } - CXFA_ScriptContext* lpScriptContext = - (CXFA_ScriptContext*)pOrginalObject->GetDocument()->GetScriptContext(); - CXFA_Object* pObject = lpScriptContext->GetVariablesThis(pOrginalObject); - CFX_WideString wsPropName = CFX_WideString::FromUTF8( - (const FX_CHAR*)szPropName.GetPtr(), szPropName.GetLength()); - const XFA_SCRIPTATTRIBUTEINFO* lpAttributeInfo = - XFA_GetScriptAttributeByName(pObject->GetClassID(), wsPropName); - if (lpAttributeInfo) { - (pObject->*(lpAttributeInfo->lpfnCallback))( - hValue, TRUE, (XFA_ATTRIBUTE)lpAttributeInfo->eAttribute); - } else { - if (pObject->IsNode()) { - if (wsPropName.GetAt(0) == '#') { - wsPropName = wsPropName.Right(wsPropName.GetLength() - 1); - } - CXFA_Node* pNode = ToNode(pObject); - CXFA_Node* pPropOrChild = NULL; - const XFA_ELEMENTINFO* lpElementInfo = XFA_GetElementByName(wsPropName); - if (lpElementInfo) { - pPropOrChild = pNode->GetProperty(0, lpElementInfo->eName); - } else { - pPropOrChild = pNode->GetFirstChildByName(wsPropName); - } - if (pPropOrChild) { - CFX_WideString wsDefaultName = FX_WSTRC(L"{default}"); - const XFA_SCRIPTATTRIBUTEINFO* lpAttributeInfo = - XFA_GetScriptAttributeByName(pPropOrChild->GetClassID(), - wsDefaultName); - if (lpAttributeInfo) { - (pPropOrChild->*(lpAttributeInfo->lpfnCallback))( - hValue, TRUE, (XFA_ATTRIBUTE)lpAttributeInfo->eAttribute); - return; - } - } - } - CXFA_Object* pScriptObject = - lpScriptContext->GetVariablesThis(pOrginalObject, TRUE); - if (pScriptObject) { - lpScriptContext->QueryVariableHValue(ToNode(pScriptObject), szPropName, - hValue, FALSE); - } - } -} -int32_t CXFA_ScriptContext::NormalPropTypeGetter( - FXJSE_HOBJECT hObject, - const CFX_ByteStringC& szPropName, - FX_BOOL bQueryIn) { - CXFA_Object* pObject = (CXFA_Object*)FXJSE_Value_ToObject(hObject, NULL); - if (pObject == NULL) { - return FXJSE_ClassPropType_None; - } - CXFA_ScriptContext* lpScriptContext = - (CXFA_ScriptContext*)pObject->GetDocument()->GetScriptContext(); - pObject = lpScriptContext->GetVariablesThis(pObject); - XFA_ELEMENT objElement = pObject->GetClassID(); - CFX_WideString wsPropName = CFX_WideString::FromUTF8( - (const FX_CHAR*)szPropName.GetPtr(), szPropName.GetLength()); - if (XFA_GetMethodByName(objElement, wsPropName)) { - return FXJSE_ClassPropType_Method; - } - if (bQueryIn && !XFA_GetScriptAttributeByName(objElement, wsPropName)) { - return FXJSE_ClassPropType_None; - } - return FXJSE_ClassPropType_Property; -} -int32_t CXFA_ScriptContext::GlobalPropTypeGetter( - FXJSE_HOBJECT hObject, - const CFX_ByteStringC& szPropName, - FX_BOOL bQueryIn) { - CXFA_Object* pObject = (CXFA_Object*)FXJSE_Value_ToObject(hObject, NULL); - if (pObject == NULL) { - return FXJSE_ClassPropType_None; - } - CXFA_ScriptContext* lpScriptContext = - (CXFA_ScriptContext*)pObject->GetDocument()->GetScriptContext(); - pObject = lpScriptContext->GetVariablesThis(pObject); - XFA_ELEMENT objElement = pObject->GetClassID(); - CFX_WideString wsPropName = CFX_WideString::FromUTF8( - (const FX_CHAR*)szPropName.GetPtr(), szPropName.GetLength()); - if (XFA_GetMethodByName(objElement, wsPropName)) { - return FXJSE_ClassPropType_Method; - } - return FXJSE_ClassPropType_Property; -} -void CXFA_ScriptContext::NormalMethodCall(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args) { - CXFA_Object* pObject = (CXFA_Object*)FXJSE_Value_ToObject(hThis, NULL); - if (pObject == NULL) { - return; - } - CXFA_ScriptContext* lpScriptContext = - (CXFA_ScriptContext*)pObject->GetDocument()->GetScriptContext(); - pObject = lpScriptContext->GetVariablesThis(pObject); - CFX_WideString wsFunName = CFX_WideString::FromUTF8( - (const FX_CHAR*)szFuncName.GetPtr(), szFuncName.GetLength()); - const XFA_METHODINFO* lpMethodInfo = - XFA_GetMethodByName(pObject->GetClassID(), wsFunName); - if (NULL == lpMethodInfo) { - return; - } - (pObject->*(lpMethodInfo->lpfnCallback))(&args); -} -FX_BOOL CXFA_ScriptContext::IsStrictScopeInJavaScript() { - return m_pDocument->HasFlag(XFA_DOCFLAG_StrictScoping); -} -XFA_SCRIPTLANGTYPE CXFA_ScriptContext::GetType() { - return m_eScriptType; -} -void CXFA_ScriptContext::DefineJsContext() { - m_JsGlobalClass.constructor = NULL; - m_JsGlobalClass.name = "Root"; - m_JsGlobalClass.propNum = 0; - m_JsGlobalClass.properties = NULL; - m_JsGlobalClass.methNum = 0; - m_JsGlobalClass.methods = NULL; - m_JsGlobalClass.dynPropGetter = CXFA_ScriptContext::GlobalPropertyGetter; - m_JsGlobalClass.dynPropSetter = CXFA_ScriptContext::GlobalPropertySetter; - m_JsGlobalClass.dynPropTypeGetter = CXFA_ScriptContext::GlobalPropTypeGetter; - m_JsGlobalClass.dynPropDeleter = NULL; - m_JsGlobalClass.dynMethodCall = CXFA_ScriptContext::NormalMethodCall; - m_hJsContext = FXJSE_Context_Create(m_hJsRuntime, &m_JsGlobalClass, - m_pDocument->GetRoot()); - RemoveBuiltInObjs(m_hJsContext); - FXJSE_Context_EnableCompatibleMode( - m_hJsContext, FXJSE_COMPATIBLEMODEFLAG_CONSTRUCTOREXTRAMETHODS); -} -FXJSE_HCONTEXT CXFA_ScriptContext::CreateVariablesContext( - CXFA_Node* pScriptNode, - CXFA_Node* pSubform) { - if (pScriptNode == NULL || pSubform == NULL) { - return NULL; - } - if (m_mapVariableToHValue.GetCount() == 0) { - m_JsGlobalVariablesClass.constructor = NULL; - m_JsGlobalVariablesClass.name = "XFAScriptObject"; - m_JsGlobalVariablesClass.propNum = 0; - m_JsGlobalVariablesClass.properties = NULL; - m_JsGlobalVariablesClass.methNum = 0; - m_JsGlobalVariablesClass.methods = NULL; - m_JsGlobalVariablesClass.dynPropGetter = - CXFA_ScriptContext::GlobalPropertyGetter; - m_JsGlobalVariablesClass.dynPropSetter = - CXFA_ScriptContext::GlobalPropertySetter; - m_JsGlobalVariablesClass.dynPropTypeGetter = - CXFA_ScriptContext::NormalPropTypeGetter; - m_JsGlobalVariablesClass.dynPropDeleter = NULL; - m_JsGlobalVariablesClass.dynMethodCall = - CXFA_ScriptContext::NormalMethodCall; - } - CXFA_ThisProxy* lpVariableNode = new CXFA_ThisProxy(pSubform, pScriptNode); - FXJSE_HCONTEXT hVariablesContext = FXJSE_Context_Create( - m_hJsRuntime, &m_JsGlobalVariablesClass, (CXFA_Object*)lpVariableNode); - RemoveBuiltInObjs(hVariablesContext); - FXJSE_Context_EnableCompatibleMode( - hVariablesContext, FXJSE_COMPATIBLEMODEFLAG_CONSTRUCTOREXTRAMETHODS); - m_mapVariableToHValue.SetAt(pScriptNode, hVariablesContext); - return hVariablesContext; -} -CXFA_Object* CXFA_ScriptContext::GetVariablesThis(CXFA_Object* pObject, - FX_BOOL bScriptNode) { - if (pObject->GetObjectType() == XFA_OBJECTTYPE_VariablesThis) { - return bScriptNode ? ((CXFA_ThisProxy*)pObject)->GetScriptNode() - : ((CXFA_ThisProxy*)pObject)->GetThisNode(); - } - return pObject; -} -FX_BOOL CXFA_ScriptContext::RunVariablesScript(CXFA_Node* pScriptNode) { - if (pScriptNode == NULL) { - return FALSE; - } - if (pScriptNode->GetClassID() == XFA_ELEMENT_Script) { - CXFA_Node* pParent = pScriptNode->GetNodeItem(XFA_NODEITEM_Parent); - if (!pParent || pParent->GetClassID() != XFA_ELEMENT_Variables) { - return FALSE; - } - if (m_mapVariableToHValue.GetValueAt(pScriptNode)) { - return TRUE; - } - CXFA_Node* pTextNode = pScriptNode->GetNodeItem(XFA_NODEITEM_FirstChild); - if (!pTextNode) { - return FALSE; - } - CFX_WideStringC wsScript; - if (!pTextNode->TryCData(XFA_ATTRIBUTE_Value, wsScript)) { - return FALSE; - } - CFX_ByteString btScript = - FX_UTF8Encode(wsScript.GetPtr(), wsScript.GetLength()); - FXJSE_HVALUE hRetValue = FXJSE_Value_Create(m_hJsRuntime); - CXFA_Node* pThisObject = pParent->GetNodeItem(XFA_NODEITEM_Parent); - FXJSE_HCONTEXT hVariablesContext = - CreateVariablesContext(pScriptNode, pThisObject); - CXFA_Object* pOriginalObject = m_pThisObject; - m_pThisObject = pThisObject; - FX_BOOL bRet = FXJSE_ExecuteScript(hVariablesContext, btScript, hRetValue); - m_pThisObject = pOriginalObject; - FXJSE_Value_Release(hRetValue); - return bRet; - } - return TRUE; -} -FX_BOOL CXFA_ScriptContext::QueryVariableHValue( - CXFA_Node* pScriptNode, - const CFX_ByteStringC& szPropName, - FXJSE_HVALUE hValue, - FX_BOOL bGetter) { - if (!pScriptNode || pScriptNode->GetClassID() != XFA_ELEMENT_Script) { - return FALSE; - } - CXFA_Node* variablesNode = pScriptNode->GetNodeItem(XFA_NODEITEM_Parent); - if (!variablesNode || variablesNode->GetClassID() != XFA_ELEMENT_Variables) { - return FALSE; - } - FX_BOOL bRes = FALSE; - void* lpVariables = m_mapVariableToHValue.GetValueAt(pScriptNode); - if (lpVariables) { - FXJSE_HCONTEXT hVariableContext = (FXJSE_HCONTEXT)lpVariables; - FXJSE_HVALUE hObject = FXJSE_Context_GetGlobalObject(hVariableContext); - FXJSE_HVALUE hVariableValue = FXJSE_Value_Create(m_hJsRuntime); - if (!bGetter) { - FXJSE_Value_SetObjectOwnProp(hObject, szPropName, hValue); - bRes = TRUE; - } else if (FXJSE_Value_ObjectHasOwnProp(hObject, szPropName, FALSE)) { - FXJSE_Value_GetObjectProp(hObject, szPropName, hVariableValue); - if (FXJSE_Value_IsFunction(hVariableValue)) { - FXJSE_Value_SetFunctionBind(hValue, hVariableValue, hObject); - } else if (bGetter) { - FXJSE_Value_Set(hValue, hVariableValue); - } else { - FXJSE_Value_Set(hVariableValue, hValue); - } - bRes = TRUE; - } - FXJSE_Value_Release(hVariableValue); - FXJSE_Value_Release(hObject); - } - return bRes; -} -void CXFA_ScriptContext::ReleaseVariablesMap() { - FX_POSITION ps = m_mapVariableToHValue.GetStartPosition(); - while (ps) { - CXFA_Object* pScriptNode; - FXJSE_HCONTEXT hVariableContext; - m_mapVariableToHValue.GetNextAssoc(ps, pScriptNode, hVariableContext); - FXJSE_HVALUE hObject = FXJSE_Context_GetGlobalObject(hVariableContext); - CXFA_Object* lpCurNode = (CXFA_Object*)FXJSE_Value_ToObject(hObject, NULL); - if (lpCurNode) { - delete (CXFA_ThisProxy*)lpCurNode; - lpCurNode = NULL; - } - FXJSE_Value_Release(hObject); - FXJSE_Context_Release(hVariableContext); - hVariableContext = NULL; - } - m_mapVariableToHValue.RemoveAll(); -} -void CXFA_ScriptContext::DefineJsClass() { - m_JsNormalClass.constructor = NULL; - m_JsNormalClass.name = "XFAObject"; - m_JsNormalClass.propNum = 0; - m_JsNormalClass.properties = NULL; - m_JsNormalClass.methNum = 0; - m_JsNormalClass.methods = NULL; - m_JsNormalClass.dynPropGetter = CXFA_ScriptContext::NormalPropertyGetter; - m_JsNormalClass.dynPropSetter = CXFA_ScriptContext::NormalPropertySetter; - m_JsNormalClass.dynPropTypeGetter = CXFA_ScriptContext::NormalPropTypeGetter; - m_JsNormalClass.dynPropDeleter = NULL; - m_JsNormalClass.dynMethodCall = CXFA_ScriptContext::NormalMethodCall; - m_hJsClass = FXJSE_DefineClass(m_hJsContext, &m_JsNormalClass); -} -void CXFA_ScriptContext::RemoveBuiltInObjs(FXJSE_HCONTEXT jsContext) const { - static const CFX_ByteStringC OBJ_NAME[2] = {"Number", "Date"}; - FXJSE_HVALUE hObject = FXJSE_Context_GetGlobalObject(jsContext); - FXJSE_HVALUE hProp = FXJSE_Value_Create(m_hJsRuntime); - for (int i = 0; i < 2; ++i) { - if (FXJSE_Value_GetObjectProp(hObject, OBJ_NAME[i], hProp)) - FXJSE_Value_DeleteObjectProp(hObject, OBJ_NAME[i]); - } - FXJSE_Value_Release(hProp); - FXJSE_Value_Release(hObject); -} -FXJSE_HCLASS CXFA_ScriptContext::GetJseNormalClass() { - return m_hJsClass; -} -int32_t CXFA_ScriptContext::ResolveObjects(CXFA_Object* refNode, - const CFX_WideStringC& wsExpression, - XFA_RESOLVENODE_RS& resolveNodeRS, - FX_DWORD dwStyles, - CXFA_Node* bindNode) { - if (wsExpression.IsEmpty()) { - return 0; - } - if (m_eScriptType != XFA_SCRIPTLANGTYPE_Formcalc || - (dwStyles & (XFA_RESOLVENODE_Parent | XFA_RESOLVENODE_Siblings))) { - m_upObjectArray.RemoveAll(); - } - if (refNode && refNode->IsNode() && - (dwStyles & (XFA_RESOLVENODE_Parent | XFA_RESOLVENODE_Siblings))) { - m_upObjectArray.Add(refNode->AsNode()); - } - FX_BOOL bNextCreate = FALSE; - if (dwStyles & XFA_RESOLVENODE_CreateNode) { - m_pResolveProcessor->GetNodeHelper()->XFA_SetCreateNodeType(bindNode); - } - m_pResolveProcessor->GetNodeHelper()->m_pCreateParent = NULL; - m_pResolveProcessor->GetNodeHelper()->m_iCurAllStart = -1; - CXFA_ResolveNodesData rndFind; - int32_t nStart = 0; - int32_t nLevel = 0; - int32_t nRet = -1; - rndFind.m_pSC = this; - CXFA_ObjArray findNodes; - findNodes.Add(refNode ? refNode : m_pDocument->GetRoot()); - int32_t nNodes = 0; - while (TRUE) { - nNodes = findNodes.GetSize(); - int32_t i = 0; - rndFind.m_dwStyles = dwStyles; - m_pResolveProcessor->m_iCurStart = nStart; - nStart = m_pResolveProcessor->XFA_ResolveNodes_GetFilter(wsExpression, - nStart, rndFind); - if (nStart < 1) { - if ((dwStyles & XFA_RESOLVENODE_CreateNode) && !bNextCreate) { - CXFA_Node* pDataNode = NULL; - nStart = m_pResolveProcessor->GetNodeHelper()->m_iCurAllStart; - if (nStart != -1) { - pDataNode = m_pDocument->GetNotBindNode(findNodes); - if (pDataNode) { - findNodes.RemoveAll(); - findNodes.Add(pDataNode); - break; - } - } else { - pDataNode = findNodes[0]->AsNode(); - findNodes.RemoveAll(); - findNodes.Add(pDataNode); - break; - } - dwStyles |= XFA_RESOLVENODE_Bind; - findNodes.RemoveAll(); - findNodes.Add(m_pResolveProcessor->GetNodeHelper()->m_pAllStartParent); - continue; - } else { - break; - } - } - if (bNextCreate) { - FX_BOOL bCreate = - m_pResolveProcessor->GetNodeHelper()->XFA_ResolveNodes_CreateNode( - rndFind.m_wsName, rndFind.m_wsCondition, - nStart == wsExpression.GetLength(), this); - if (bCreate) { - continue; - } else { - break; - } - } - CXFA_ObjArray retNodes; - while (i < nNodes) { - FX_BOOL bDataBind = FALSE; - if (((dwStyles & XFA_RESOLVENODE_Bind) || - (dwStyles & XFA_RESOLVENODE_CreateNode)) && - nNodes > 1) { - CXFA_ResolveNodesData rndBind; - m_pResolveProcessor->XFA_ResolveNodes_GetFilter(wsExpression, nStart, - rndBind); - m_pResolveProcessor->XFA_ResolveNode_SetIndexDataBind( - rndBind.m_wsCondition, i, nNodes); - bDataBind = TRUE; - } - rndFind.m_CurNode = findNodes[i++]; - rndFind.m_nLevel = nLevel; - rndFind.m_dwFlag = XFA_RESOVENODE_RSTYPE_Nodes; - nRet = m_pResolveProcessor->XFA_ResolveNodes(rndFind); - if (nRet < 1) { - continue; - } - if (rndFind.m_dwFlag == XFA_RESOVENODE_RSTYPE_Attribute && - rndFind.m_pScriptAttribute && nStart < wsExpression.GetLength()) { - FXJSE_HVALUE hValue = FXJSE_Value_Create(m_hJsRuntime); - (rndFind.m_Nodes[0]->*(rndFind.m_pScriptAttribute->lpfnCallback))( - hValue, FALSE, - (XFA_ATTRIBUTE)rndFind.m_pScriptAttribute->eAttribute); - rndFind.m_Nodes.SetAt(0, - (CXFA_Object*)FXJSE_Value_ToObject(hValue, NULL)); - FXJSE_Value_Release(hValue); - } - int32_t iSize = m_upObjectArray.GetSize(); - if (iSize) { - m_upObjectArray.RemoveAt(iSize - 1); - } - retNodes.Append(rndFind.m_Nodes); - rndFind.m_Nodes.RemoveAll(); - if (bDataBind) { - break; - } - } - findNodes.RemoveAll(); - nNodes = retNodes.GetSize(); - if (nNodes < 1) { - if (dwStyles & XFA_RESOLVENODE_CreateNode) { - bNextCreate = TRUE; - if (m_pResolveProcessor->GetNodeHelper()->m_pCreateParent == NULL) { - m_pResolveProcessor->GetNodeHelper()->m_pCreateParent = - ToNode(rndFind.m_CurNode); - m_pResolveProcessor->GetNodeHelper()->m_iCreateCount = 1; - } - FX_BOOL bCreate = - m_pResolveProcessor->GetNodeHelper()->XFA_ResolveNodes_CreateNode( - rndFind.m_wsName, rndFind.m_wsCondition, - nStart == wsExpression.GetLength(), this); - if (bCreate) { - continue; - } else { - break; - } - } else { - break; - } - } - findNodes.Copy(retNodes); - rndFind.m_Nodes.RemoveAll(); - if (nLevel == 0) { - dwStyles &= ~(XFA_RESOLVENODE_Parent | XFA_RESOLVENODE_Siblings); - } - nLevel++; - } - if (!bNextCreate) { - resolveNodeRS.dwFlags = rndFind.m_dwFlag; - if (nNodes > 0) { - resolveNodeRS.nodes.Append(findNodes); - } - if (rndFind.m_dwFlag == XFA_RESOVENODE_RSTYPE_Attribute) { - resolveNodeRS.pScriptAttribute = rndFind.m_pScriptAttribute; - return 1; - } - } - if (dwStyles & (XFA_RESOLVENODE_CreateNode | XFA_RESOLVENODE_Bind | - XFA_RESOLVENODE_BindNew)) { - m_pResolveProcessor->XFA_ResolveNode_SetResultCreateNode( - resolveNodeRS, rndFind.m_wsCondition); - if (!bNextCreate && (dwStyles & XFA_RESOLVENODE_CreateNode)) { - resolveNodeRS.dwFlags = XFA_RESOVENODE_RSTYPE_ExistNodes; - } - return resolveNodeRS.nodes.GetSize(); - } - return nNodes; -} -FXJSE_HVALUE CXFA_ScriptContext::GetJSValueFromMap(CXFA_Object* pObject) { - if (!pObject) { - return NULL; - } - if (pObject->IsNode()) { - RunVariablesScript(pObject->AsNode()); - } - void* pValue = m_mapXFAToHValue.GetValueAt(pObject); - if (pValue == NULL) { - FXJSE_HVALUE jsHvalue = FXJSE_Value_Create(m_hJsRuntime); - FXJSE_Value_SetObject(jsHvalue, pObject, m_hJsClass); - m_mapXFAToHValue.SetAt(pObject, jsHvalue); - pValue = jsHvalue; - } - return (FXJSE_HVALUE)pValue; -} -int32_t CXFA_ScriptContext::GetIndexByName(CXFA_Node* refNode) { - CXFA_NodeHelper* lpNodeHelper = m_pResolveProcessor->GetNodeHelper(); - return lpNodeHelper->XFA_GetIndex(refNode, XFA_LOGIC_Transparent, - lpNodeHelper->XFA_NodeIsProperty(refNode), - FALSE); -} -int32_t CXFA_ScriptContext::GetIndexByClassName(CXFA_Node* refNode) { - CXFA_NodeHelper* lpNodeHelper = m_pResolveProcessor->GetNodeHelper(); - return lpNodeHelper->XFA_GetIndex(refNode, XFA_LOGIC_Transparent, - lpNodeHelper->XFA_NodeIsProperty(refNode), - TRUE); -} -void CXFA_ScriptContext::GetSomExpression(CXFA_Node* refNode, - CFX_WideString& wsExpression) { - CXFA_NodeHelper* lpNodeHelper = m_pResolveProcessor->GetNodeHelper(); - lpNodeHelper->XFA_GetNameExpression(refNode, wsExpression, TRUE, - XFA_LOGIC_Transparent); -} -void CXFA_ScriptContext::SetNodesOfRunScript(CXFA_NodeArray* pArray) { - m_pScriptNodeArray = pArray; -} -void CXFA_ScriptContext::AddNodesOfRunScript(const CXFA_NodeArray& nodes) { - if (!m_pScriptNodeArray) { - return; - } - if (nodes.GetSize() > 0) { - m_pScriptNodeArray->Copy(nodes); - } -} -void CXFA_ScriptContext::AddNodesOfRunScript(CXFA_Node* pNode) { - if (!m_pScriptNodeArray) { - return; - } - if (m_pScriptNodeArray->Find(pNode) == -1) { - m_pScriptNodeArray->Add(pNode); - } -} -IXFA_ScriptContext* XFA_ScriptContext_Create(CXFA_Document* pDocument) { - return new CXFA_ScriptContext(pDocument); -} diff --git a/xfa/src/fxfa/parser/xfa_script_imp.h b/xfa/src/fxfa/parser/xfa_script_imp.h deleted file mode 100644 index 529ab6d087..0000000000 --- a/xfa/src/fxfa/parser/xfa_script_imp.h +++ /dev/null @@ -1,127 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXFA_PARSER_XFA_SCRIPT_IMP_H_ -#define XFA_SRC_FXFA_PARSER_XFA_SCRIPT_IMP_H_ - -#include - -#include "xfa/src/fxfa/fm2js/xfa_fm2jsapi.h" -#include "xfa/src/fxfa/parser/xfa_document.h" -#include "xfa/src/fxfa/parser/xfa_script.h" - -#define XFA_RESOLVENODE_TagName 0x0002 - -class CXFA_ResolveProcessor; - -class CXFA_ScriptContext : public IXFA_ScriptContext { - public: - explicit CXFA_ScriptContext(CXFA_Document* pDocument); - ~CXFA_ScriptContext(); - - virtual void Release(); - virtual void Initialize(FXJSE_HRUNTIME hRuntime); - virtual void SetEventParam(CXFA_EventParam param) { m_eventParam = param; } - virtual CXFA_EventParam* GetEventParam() { return &m_eventParam; } - virtual FX_BOOL RunScript(XFA_SCRIPTLANGTYPE eScriptType, - const CFX_WideStringC& wsScript, - FXJSE_HVALUE hRetValue, - CXFA_Object* pThisObject = NULL); - - virtual int32_t ResolveObjects(CXFA_Object* refNode, - const CFX_WideStringC& wsExpression, - XFA_RESOLVENODE_RS& resolveNodeRS, - FX_DWORD dwStyles = XFA_RESOLVENODE_Children, - CXFA_Node* bindNode = NULL); - virtual FXJSE_HVALUE GetJSValueFromMap(CXFA_Object* pObject); - virtual void CacheList(CXFA_NodeList* pList) { m_CacheListArray.Add(pList); } - virtual CXFA_Object* GetThisObject() const { return m_pThisObject; } - virtual FXJSE_HRUNTIME GetRuntime() const { return m_hJsRuntime; } - - virtual int32_t GetIndexByName(CXFA_Node* refNode); - virtual int32_t GetIndexByClassName(CXFA_Node* refNode); - virtual void GetSomExpression(CXFA_Node* refNode, - CFX_WideString& wsExpression); - - virtual void SetNodesOfRunScript(CXFA_NodeArray* pArray); - virtual void AddNodesOfRunScript(const CXFA_NodeArray& nodes); - virtual void AddNodesOfRunScript(CXFA_Node* pNode); - virtual FXJSE_HCLASS GetJseNormalClass(); - - virtual void SetRunAtType(XFA_ATTRIBUTEENUM eRunAt) { m_eRunAtType = eRunAt; } - virtual FX_BOOL IsRunAtClient() { - return m_eRunAtType != XFA_ATTRIBUTEENUM_Server; - } - FX_BOOL QueryNodeByFlag(CXFA_Node* refNode, - const CFX_WideStringC& propname, - FXJSE_HVALUE hValue, - FX_DWORD dwFlag, - FX_BOOL bSetting); - FX_BOOL QueryVariableHValue(CXFA_Node* pScriptNode, - const CFX_ByteStringC& szPropName, - FXJSE_HVALUE hValue, - FX_BOOL bGetter); - FX_BOOL QueryBuiltinHValue(const CFX_ByteStringC& szPropName, - FXJSE_HVALUE hValue); - static void GlobalPropertyGetter(FXJSE_HOBJECT hObject, - const CFX_ByteStringC& szPropName, - FXJSE_HVALUE hValue); - static void GlobalPropertySetter(FXJSE_HOBJECT hObject, - const CFX_ByteStringC& szPropName, - FXJSE_HVALUE hValue); - static void NormalPropertyGetter(FXJSE_HOBJECT hObject, - const CFX_ByteStringC& szPropName, - FXJSE_HVALUE hValue); - static void NormalPropertySetter(FXJSE_HOBJECT hObject, - const CFX_ByteStringC& szPropName, - FXJSE_HVALUE hValue); - static void NormalMethodCall(FXJSE_HOBJECT hThis, - const CFX_ByteStringC& szFuncName, - CFXJSE_Arguments& args); - static int32_t NormalPropTypeGetter(FXJSE_HOBJECT hObject, - const CFX_ByteStringC& szPropName, - FX_BOOL bQueryIn); - static int32_t GlobalPropTypeGetter(FXJSE_HOBJECT hObject, - const CFX_ByteStringC& szPropName, - FX_BOOL bQueryIn); - FX_BOOL RunVariablesScript(CXFA_Node* pScriptNode); - CXFA_Object* GetVariablesThis(CXFA_Object* pObject, - FX_BOOL bScriptNode = FALSE); - void ReleaseVariablesMap(); - FX_BOOL IsStrictScopeInJavaScript(); - XFA_SCRIPTLANGTYPE GetType(); - CXFA_NodeArray& GetUpObjectArray() { return m_upObjectArray; } - CXFA_Document* GetDocument() const { return m_pDocument; } - - protected: - void DefineJsContext(); - FXJSE_HCONTEXT CreateVariablesContext(CXFA_Node* pScriptNode, - CXFA_Node* pSubform); - void DefineJsClass(); - void RemoveBuiltInObjs(FXJSE_HCONTEXT jsContext) const; - - CXFA_Document* m_pDocument; - FXJSE_HCONTEXT m_hJsContext; - FXJSE_HRUNTIME m_hJsRuntime; - FXJSE_HCLASS m_hJsClass; - XFA_SCRIPTLANGTYPE m_eScriptType; - FXJSE_CLASS m_JsGlobalClass; - FXJSE_CLASS m_JsNormalClass; - CFX_MapPtrTemplate m_mapXFAToHValue; - FXJSE_CLASS m_JsGlobalVariablesClass; - CFX_MapPtrTemplate m_mapVariableToHValue; - CXFA_EventParam m_eventParam; - CXFA_NodeArray m_upObjectArray; - CFX_PtrArray m_CacheListArray; - CXFA_NodeArray* m_pScriptNodeArray; - CXFA_ResolveProcessor* m_pResolveProcessor; - XFA_HFM2JSCONTEXT m_hFM2JSContext; - CXFA_Object* m_pThisObject; - FX_DWORD m_dwBuiltInInFlags; - XFA_ATTRIBUTEENUM m_eRunAtType; -}; - -#endif // XFA_SRC_FXFA_PARSER_XFA_SCRIPT_IMP_H_ diff --git a/xfa/src/fxfa/parser/xfa_script_layoutpseudomodel.cpp b/xfa/src/fxfa/parser/xfa_script_layoutpseudomodel.cpp deleted file mode 100644 index fe8990ac1a..0000000000 --- a/xfa/src/fxfa/parser/xfa_script_layoutpseudomodel.cpp +++ /dev/null @@ -1,552 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fxfa/parser/xfa_script_layoutpseudomodel.h" - -#include "xfa/src/fxfa/fm2js/xfa_fm2jsapi.h" -#include "xfa/src/fxfa/parser/xfa_docdata.h" -#include "xfa/src/fxfa/parser/xfa_doclayout.h" -#include "xfa/src/fxfa/parser/xfa_document.h" -#include "xfa/src/fxfa/parser/xfa_document_layout_imp.h" -#include "xfa/src/fxfa/parser/xfa_layout_appadapter.h" -#include "xfa/src/fxfa/parser/xfa_localemgr.h" -#include "xfa/src/fxfa/parser/xfa_object.h" -#include "xfa/src/fxfa/parser/xfa_parser.h" -#include "xfa/src/fxfa/parser/xfa_script.h" -#include "xfa/src/fxfa/parser/xfa_utils.h" - -CScript_LayoutPseudoModel::CScript_LayoutPseudoModel(CXFA_Document* pDocument) - : CXFA_OrdinaryObject(pDocument, XFA_ELEMENT_LayoutPseudoModel) { - m_uScriptHash = XFA_HASHCODE_Layout; -} -CScript_LayoutPseudoModel::~CScript_LayoutPseudoModel() {} -void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_Ready( - FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute) { - IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); - if (!pNotify) { - return; - } - if (bSetting) { - ThrowScriptErrorMessage(XFA_IDS_UNABLE_SET_READY); - return; - } - int32_t iStatus = pNotify->GetLayoutStatus(); - FXJSE_Value_SetBoolean(hValue, iStatus >= 2); -} -void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_HWXY( - CFXJSE_Arguments* pArguments, - XFA_LAYOUTMODEL_HWXY layoutModel) { - int32_t iLength = pArguments->GetLength(); - if (iLength < 1 || iLength > 3) { - const FX_WCHAR* methodName = NULL; - switch (layoutModel) { - case XFA_LAYOUTMODEL_H: - methodName = L"h"; - break; - case XFA_LAYOUTMODEL_W: - methodName = L"w"; - break; - case XFA_LAYOUTMODEL_X: - methodName = L"x"; - break; - case XFA_LAYOUTMODEL_Y: - methodName = L"y"; - break; - } - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, methodName); - return; - } - CXFA_Node* pNode = NULL; - CFX_WideString wsUnit = FX_WSTRC(L"pt"); - int32_t iIndex = 0; - if (iLength >= 1) { - pNode = static_cast(pArguments->GetObject(0)); - } - if (iLength >= 2) { - CFX_ByteString bsUnit = pArguments->GetUTF8String(1); - if (!bsUnit.IsEmpty()) { - wsUnit = CFX_WideString::FromUTF8(bsUnit, bsUnit.GetLength()); - } - } - if (iLength >= 3) { - iIndex = pArguments->GetInt32(2); - } - if (!pNode) { - return; - } - IXFA_DocLayout* pDocLayout = m_pDocument->GetDocLayout(); - if (!pDocLayout) { - return; - } - CFX_RectF rtRect; - CXFA_Measurement measure; - CXFA_LayoutItem* pLayoutItem = pDocLayout->GetLayoutItem(pNode); - if (!pLayoutItem) { - return; - } - while (iIndex > 0 && pLayoutItem) { - pLayoutItem = pLayoutItem->GetNext(); - iIndex--; - } - FXJSE_HVALUE hValue = pArguments->GetReturnValue(); - if (!pLayoutItem) { - FXJSE_Value_SetFloat(hValue, 0); - return; - } - pLayoutItem->GetRect(rtRect, TRUE); - switch (layoutModel) { - case XFA_LAYOUTMODEL_H: - measure.Set(rtRect.height, XFA_UNIT_Pt); - break; - case XFA_LAYOUTMODEL_W: - measure.Set(rtRect.width, XFA_UNIT_Pt); - break; - case XFA_LAYOUTMODEL_X: - measure.Set(rtRect.left, XFA_UNIT_Pt); - break; - case XFA_LAYOUTMODEL_Y: - measure.Set(rtRect.top, XFA_UNIT_Pt); - break; - } - XFA_UNIT unit = measure.GetUnit(wsUnit); - FX_FLOAT fValue = measure.ToUnit(unit); - fValue = FXSYS_round(fValue * 1000) / 1000.0f; - if (hValue) { - FXJSE_Value_SetFloat(hValue, fValue); - } -} -void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_H( - CFXJSE_Arguments* pArguments) { - Script_LayoutPseudoModel_HWXY(pArguments, XFA_LAYOUTMODEL_H); -} -void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_W( - CFXJSE_Arguments* pArguments) { - Script_LayoutPseudoModel_HWXY(pArguments, XFA_LAYOUTMODEL_W); -} -void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_X( - CFXJSE_Arguments* pArguments) { - Script_LayoutPseudoModel_HWXY(pArguments, XFA_LAYOUTMODEL_X); -} -void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_Y( - CFXJSE_Arguments* pArguments) { - Script_LayoutPseudoModel_HWXY(pArguments, XFA_LAYOUTMODEL_Y); -} -void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_NumberedPageCount( - CFXJSE_Arguments* pArguments, - FX_BOOL bNumbered) { - IXFA_DocLayout* pDocLayout = m_pDocument->GetDocLayout(); - if (!pDocLayout) { - return; - } - int32_t iPageCount = 0; - int32_t iPageNum = pDocLayout->CountPages(); - if (bNumbered) { - for (int32_t i = 0; i < iPageNum; i++) { - IXFA_LayoutPage* pLayoutPage = pDocLayout->GetPage(i); - if (!pLayoutPage) { - continue; - } - CXFA_Node* pMasterPage = pLayoutPage->GetMasterPage(); - if (pMasterPage->GetInteger(XFA_ATTRIBUTE_Numbered)) { - iPageCount++; - } - } - } else { - iPageCount = iPageNum; - } - FXJSE_HVALUE hValue = pArguments->GetReturnValue(); - if (hValue) { - FXJSE_Value_SetInteger(hValue, iPageCount); - } -} -void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_PageCount( - CFXJSE_Arguments* pArguments) { - Script_LayoutPseudoModel_NumberedPageCount(pArguments, TRUE); -} -void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_PageSpan( - CFXJSE_Arguments* pArguments) { - int32_t iLength = pArguments->GetLength(); - if (iLength != 1) { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"pageSpan"); - return; - } - CXFA_Node* pNode = NULL; - if (iLength >= 1) { - pNode = static_cast(pArguments->GetObject(0)); - } - if (!pNode) { - return; - } - IXFA_DocLayout* pDocLayout = m_pDocument->GetDocLayout(); - if (!pDocLayout) { - return; - } - FXJSE_HVALUE hValue = pArguments->GetReturnValue(); - CXFA_LayoutItem* pLayoutItem = pDocLayout->GetLayoutItem(pNode); - if (!pLayoutItem) { - FXJSE_Value_SetInteger(hValue, -1); - return; - } - int32_t iLast = pLayoutItem->GetLast()->GetPage()->GetPageIndex(); - int32_t iFirst = pLayoutItem->GetFirst()->GetPage()->GetPageIndex(); - int32_t iPageSpan = iLast - iFirst + 1; - if (hValue) { - FXJSE_Value_SetInteger(hValue, iPageSpan); - } -} -void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_Page( - CFXJSE_Arguments* pArguments) { - Script_LayoutPseudoModel_PageImp(pArguments, FALSE); -} -void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_GetObjArray( - IXFA_DocLayout* pDocLayout, - int32_t iPageNo, - const CFX_WideString& wsType, - FX_BOOL bOnPageArea, - CXFA_NodeArray& retArray) { - CXFA_ContainerLayoutItem* pLayoutPage = - (CXFA_ContainerLayoutItem*)pDocLayout->GetPage(iPageNo); - if (!pLayoutPage) { - return; - } - if (wsType == FX_WSTRC(L"pageArea")) { - if (CXFA_Node* pMasterPage = pLayoutPage->m_pFormNode) { - retArray.Add(pMasterPage); - } - return; - } - if (wsType == FX_WSTRC(L"contentArea")) { - for (CXFA_LayoutItem* pItem = pLayoutPage->m_pFirstChild; pItem; - pItem = pItem->m_pNextSibling) { - if (pItem->m_pFormNode->GetClassID() == XFA_ELEMENT_ContentArea) { - retArray.Add(pItem->m_pFormNode); - } - } - return; - } - CFX_MapPtrToPtr formItems; - formItems.InitHashTable(256, TRUE); - if (wsType.IsEmpty()) { - if (CXFA_Node* pMasterPage = pLayoutPage->m_pFormNode) { - retArray.Add(pMasterPage); - } - for (CXFA_LayoutItem* pItem = pLayoutPage->m_pFirstChild; pItem; - pItem = pItem->m_pNextSibling) { - if (pItem->m_pFormNode->GetClassID() == XFA_ELEMENT_ContentArea) { - retArray.Add(pItem->m_pFormNode); - if (!bOnPageArea) { - CXFA_NodeIteratorTemplate - iterator((CXFA_ContentLayoutItem*)pItem->m_pFirstChild); - for (CXFA_ContentLayoutItem* pItemChild = iterator.GetCurrent(); - pItemChild; pItemChild = iterator.MoveToNext()) { - if (!pItemChild->IsContentLayoutItem()) { - continue; - } - XFA_ELEMENT eElementType = pItemChild->m_pFormNode->GetClassID(); - if (eElementType != XFA_ELEMENT_Field && - eElementType != XFA_ELEMENT_Draw && - eElementType != XFA_ELEMENT_Subform && - eElementType != XFA_ELEMENT_Area) { - continue; - } - if (formItems.GetValueAt(pItemChild->m_pFormNode)) { - continue; - } - formItems.SetAt(pItemChild->m_pFormNode, this); - retArray.Add(pItemChild->m_pFormNode); - } - } - } else { - if (bOnPageArea) { - CXFA_NodeIteratorTemplate - iterator((CXFA_ContentLayoutItem*)pItem); - for (CXFA_ContentLayoutItem* pItemChild = iterator.GetCurrent(); - pItemChild; pItemChild = iterator.MoveToNext()) { - if (!pItemChild->IsContentLayoutItem()) { - continue; - } - XFA_ELEMENT eElementType = pItemChild->m_pFormNode->GetClassID(); - if (eElementType != XFA_ELEMENT_Field && - eElementType != XFA_ELEMENT_Draw && - eElementType != XFA_ELEMENT_Subform && - eElementType != XFA_ELEMENT_Area) { - continue; - } - if (formItems.GetValueAt(pItemChild->m_pFormNode)) { - continue; - } - formItems.SetAt(pItemChild->m_pFormNode, this); - retArray.Add(pItemChild->m_pFormNode); - } - } - } - } - return; - } - XFA_ELEMENT eType = XFA_ELEMENT_UNKNOWN; - if (wsType == FX_WSTRC(L"field")) { - eType = XFA_ELEMENT_Field; - } else if (wsType == FX_WSTRC(L"draw")) { - eType = XFA_ELEMENT_Draw; - } else if (wsType == FX_WSTRC(L"subform")) { - eType = XFA_ELEMENT_Subform; - } else if (wsType == FX_WSTRC(L"area")) { - eType = XFA_ELEMENT_Area; - } - if (eType != XFA_ELEMENT_UNKNOWN) { - for (CXFA_LayoutItem* pItem = pLayoutPage->m_pFirstChild; pItem; - pItem = pItem->m_pNextSibling) { - if (pItem->m_pFormNode->GetClassID() == XFA_ELEMENT_ContentArea) { - if (!bOnPageArea) { - CXFA_NodeIteratorTemplate - iterator((CXFA_ContentLayoutItem*)pItem->m_pFirstChild); - for (CXFA_ContentLayoutItem* pItemChild = iterator.GetCurrent(); - pItemChild; pItemChild = iterator.MoveToNext()) { - if (!pItemChild->IsContentLayoutItem()) { - continue; - } - if (pItemChild->m_pFormNode->GetClassID() != eType) { - continue; - } - if (formItems.GetValueAt(pItemChild->m_pFormNode)) { - continue; - } - formItems.SetAt(pItemChild->m_pFormNode, this); - retArray.Add(pItemChild->m_pFormNode); - } - } - } else { - if (bOnPageArea) { - CXFA_NodeIteratorTemplate - iterator((CXFA_ContentLayoutItem*)pItem); - for (CXFA_ContentLayoutItem* pItemChild = iterator.GetCurrent(); - pItemChild; pItemChild = iterator.MoveToNext()) { - if (!pItemChild->IsContentLayoutItem()) { - continue; - } - if (pItemChild->m_pFormNode->GetClassID() != eType) { - continue; - } - if (formItems.GetValueAt(pItemChild->m_pFormNode)) { - continue; - } - formItems.SetAt(pItemChild->m_pFormNode, this); - retArray.Add(pItemChild->m_pFormNode); - } - } - } - } - return; - } -} -void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_PageContent( - CFXJSE_Arguments* pArguments) { - int32_t iLength = pArguments->GetLength(); - if (iLength < 1 || iLength > 3) { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"pageContent"); - return; - } - int32_t iIndex = 0; - CFX_WideString wsType; - FX_BOOL bOnPageArea = FALSE; - if (iLength >= 1) { - iIndex = pArguments->GetInt32(0); - } - if (iLength >= 2) { - CFX_ByteString bsType = pArguments->GetUTF8String(1); - wsType = CFX_WideString::FromUTF8(bsType, bsType.GetLength()); - } - if (iLength >= 3) { - bOnPageArea = pArguments->GetInt32(2) == 0 ? FALSE : TRUE; - } - IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); - if (!pNotify) { - return; - } - IXFA_DocLayout* pDocLayout = m_pDocument->GetDocLayout(); - if (!pDocLayout) { - return; - } - CXFA_NodeArray retArray; - Script_LayoutPseudoModel_GetObjArray(pDocLayout, iIndex, wsType, bOnPageArea, - retArray); - CXFA_ArrayNodeList* pArrayNodeList = new CXFA_ArrayNodeList(m_pDocument); - pArrayNodeList->SetArrayNodeList(retArray); - FXJSE_Value_SetObject(pArguments->GetReturnValue(), - (CXFA_Object*)pArrayNodeList, - m_pDocument->GetScriptContext()->GetJseNormalClass()); -} -void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_AbsPageCount( - CFXJSE_Arguments* pArguments) { - Script_LayoutPseudoModel_NumberedPageCount(pArguments, FALSE); -} -void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_AbsPageCountInBatch( - CFXJSE_Arguments* pArguments) { - IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); - if (!pNotify) { - return; - } - IXFA_Doc* hDoc = pNotify->GetHDOC(); - int32_t iPageCount = pNotify->GetDocProvider()->AbsPageCountInBatch(hDoc); - FXJSE_HVALUE hValue = pArguments->GetReturnValue(); - if (hValue) { - FXJSE_Value_SetInteger(hValue, iPageCount); - } -} -void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_SheetCountInBatch( - CFXJSE_Arguments* pArguments) { - IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); - if (!pNotify) { - return; - } - IXFA_Doc* hDoc = pNotify->GetHDOC(); - int32_t iPageCount = pNotify->GetDocProvider()->SheetCountInBatch(hDoc); - FXJSE_HVALUE hValue = pArguments->GetReturnValue(); - if (hValue) { - FXJSE_Value_SetInteger(hValue, iPageCount); - } -} -void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_Relayout( - CFXJSE_Arguments* pArguments) { - CXFA_Node* pRootNode = m_pDocument->GetRoot(); - CXFA_Node* pFormRoot = pRootNode->GetFirstChildByClass(XFA_ELEMENT_Form); - FXSYS_assert(pFormRoot); - CXFA_Node* pContentRootNode = pFormRoot->GetNodeItem(XFA_NODEITEM_FirstChild); - CXFA_LayoutProcessor* pLayoutProcessor = m_pDocument->GetLayoutProcessor(); - if (pContentRootNode) { - pLayoutProcessor->AddChangedContainer(pContentRootNode); - } - pLayoutProcessor->SetForceReLayout(TRUE); -} -void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_AbsPageSpan( - CFXJSE_Arguments* pArguments) { - Script_LayoutPseudoModel_PageSpan(pArguments); -} -void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_AbsPageInBatch( - CFXJSE_Arguments* pArguments) { - int32_t iLength = pArguments->GetLength(); - if (iLength != 1) { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"absPageInBatch"); - return; - } - CXFA_Node* pNode = NULL; - if (iLength >= 1) { - pNode = static_cast(pArguments->GetObject(0)); - } - if (!pNode) { - return; - } - IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); - if (!pNotify) { - return; - } - IXFA_DocLayout* pDocLayout = m_pDocument->GetDocLayout(); - if (!pDocLayout) { - return; - } - IXFA_Widget* hWidget = pNotify->GetHWidget(pDocLayout->GetLayoutItem(pNode)); - if (!hWidget) { - return; - } - IXFA_Doc* hDoc = pNotify->GetHDOC(); - int32_t iPageCount = pNotify->GetDocProvider()->AbsPageInBatch(hDoc, hWidget); - FXJSE_HVALUE hValue = pArguments->GetReturnValue(); - if (hValue) { - FXJSE_Value_SetInteger(hValue, iPageCount); - } -} -void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_SheetInBatch( - CFXJSE_Arguments* pArguments) { - int32_t iLength = pArguments->GetLength(); - if (iLength != 1) { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, - L"sheetInBatch"); - return; - } - CXFA_Node* pNode = NULL; - if (iLength >= 1) { - pNode = static_cast(pArguments->GetObject(0)); - } - if (!pNode) { - return; - } - IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); - if (!pNotify) { - return; - } - IXFA_DocLayout* pDocLayout = m_pDocument->GetDocLayout(); - if (!pDocLayout) { - return; - } - IXFA_Widget* hWidget = pNotify->GetHWidget(pDocLayout->GetLayoutItem(pNode)); - if (!hWidget) { - return; - } - IXFA_Doc* hDoc = pNotify->GetHDOC(); - int32_t iPageCount = pNotify->GetDocProvider()->SheetInBatch(hDoc, hWidget); - FXJSE_HVALUE hValue = pArguments->GetReturnValue(); - if (hValue) { - FXJSE_Value_SetInteger(hValue, iPageCount); - } -} -void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_Sheet( - CFXJSE_Arguments* pArguments) { - Script_LayoutPseudoModel_PageImp(pArguments, TRUE); -} -void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_RelayoutPageArea( - CFXJSE_Arguments* pArguments) {} -void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_SheetCount( - CFXJSE_Arguments* pArguments) { - Script_LayoutPseudoModel_NumberedPageCount(pArguments, FALSE); -} -void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_AbsPage( - CFXJSE_Arguments* pArguments) { - Script_LayoutPseudoModel_PageImp(pArguments, TRUE); -} -void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_PageImp( - CFXJSE_Arguments* pArguments, - FX_BOOL bAbsPage) { - int32_t iLength = pArguments->GetLength(); - if (iLength != 1) { - const FX_WCHAR* methodName; - if (bAbsPage) { - methodName = L"absPage"; - } else { - methodName = L"page"; - } - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, methodName); - return; - } - CXFA_Node* pNode = NULL; - if (iLength >= 1) { - pNode = static_cast(pArguments->GetObject(0)); - } - int32_t iPage = 0; - FXJSE_HVALUE hValue = pArguments->GetReturnValue(); - if (!pNode && hValue) { - FXJSE_Value_SetInteger(hValue, iPage); - } - IXFA_DocLayout* pDocLayout = m_pDocument->GetDocLayout(); - if (!pDocLayout) { - return; - } - CXFA_LayoutItem* pLayoutItem = pDocLayout->GetLayoutItem(pNode); - if (!pLayoutItem) { - FXJSE_Value_SetInteger(hValue, -1); - return; - } - iPage = pLayoutItem->GetFirst()->GetPage()->GetPageIndex(); - if (hValue) { - FXJSE_Value_SetInteger(hValue, bAbsPage ? iPage : iPage + 1); - } -} diff --git a/xfa/src/fxfa/parser/xfa_script_layoutpseudomodel.h b/xfa/src/fxfa/parser/xfa_script_layoutpseudomodel.h deleted file mode 100644 index 5b0dbb816f..0000000000 --- a/xfa/src/fxfa/parser/xfa_script_layoutpseudomodel.h +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXFA_PARSER_XFA_SCRIPT_LAYOUTPSEUDOMODEL_H_ -#define XFA_SRC_FXFA_PARSER_XFA_SCRIPT_LAYOUTPSEUDOMODEL_H_ - -#include "xfa/src/fxfa/parser/xfa_doclayout.h" -#include "xfa/src/fxfa/parser/xfa_object.h" - -enum XFA_LAYOUTMODEL_HWXY { - XFA_LAYOUTMODEL_H, - XFA_LAYOUTMODEL_W, - XFA_LAYOUTMODEL_X, - XFA_LAYOUTMODEL_Y -}; - -class CScript_LayoutPseudoModel : public CXFA_OrdinaryObject { - public: - explicit CScript_LayoutPseudoModel(CXFA_Document* pDocument); - ~CScript_LayoutPseudoModel(); - - void Script_LayoutPseudoModel_Ready(FXJSE_HVALUE hValue, - FX_BOOL bSetting, - XFA_ATTRIBUTE eAttribute); - - void Script_LayoutPseudoModel_HWXY(CFXJSE_Arguments* pArguments, - XFA_LAYOUTMODEL_HWXY layoutModel); - void Script_LayoutPseudoModel_H(CFXJSE_Arguments* pArguments); - void Script_LayoutPseudoModel_W(CFXJSE_Arguments* pArguments); - void Script_LayoutPseudoModel_X(CFXJSE_Arguments* pArguments); - void Script_LayoutPseudoModel_Y(CFXJSE_Arguments* pArguments); - void Script_LayoutPseudoModel_NumberedPageCount(CFXJSE_Arguments* pArguments, - FX_BOOL bNumbered); - void Script_LayoutPseudoModel_PageCount(CFXJSE_Arguments* pArguments); - void Script_LayoutPseudoModel_PageSpan(CFXJSE_Arguments* pArguments); - void Script_LayoutPseudoModel_Page(CFXJSE_Arguments* pArguments); - void Script_LayoutPseudoModel_PageContent(CFXJSE_Arguments* pArguments); - void Script_LayoutPseudoModel_AbsPageCount(CFXJSE_Arguments* pArguments); - void Script_LayoutPseudoModel_AbsPageCountInBatch( - CFXJSE_Arguments* pArguments); - void Script_LayoutPseudoModel_SheetCountInBatch(CFXJSE_Arguments* pArguments); - void Script_LayoutPseudoModel_Relayout(CFXJSE_Arguments* pArguments); - void Script_LayoutPseudoModel_AbsPageSpan(CFXJSE_Arguments* pArguments); - void Script_LayoutPseudoModel_AbsPageInBatch(CFXJSE_Arguments* pArguments); - void Script_LayoutPseudoModel_SheetInBatch(CFXJSE_Arguments* pArguments); - void Script_LayoutPseudoModel_Sheet(CFXJSE_Arguments* pArguments); - void Script_LayoutPseudoModel_RelayoutPageArea(CFXJSE_Arguments* pArguments); - void Script_LayoutPseudoModel_SheetCount(CFXJSE_Arguments* pArguments); - void Script_LayoutPseudoModel_AbsPage(CFXJSE_Arguments* pArguments); - - protected: - void Script_LayoutPseudoModel_GetObjArray(IXFA_DocLayout* pDocLayout, - int32_t iPageNo, - const CFX_WideString& wsType, - FX_BOOL bOnPageArea, - CXFA_NodeArray& retArray); - void Script_LayoutPseudoModel_PageImp(CFXJSE_Arguments* pArguments, - FX_BOOL bAbsPage); -}; - -#endif // XFA_SRC_FXFA_PARSER_XFA_SCRIPT_LAYOUTPSEUDOMODEL_H_ diff --git a/xfa/src/fxfa/parser/xfa_script_logpseudomodel.cpp b/xfa/src/fxfa/parser/xfa_script_logpseudomodel.cpp deleted file mode 100644 index d5ddd811ad..0000000000 --- a/xfa/src/fxfa/parser/xfa_script_logpseudomodel.cpp +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fxfa/parser/xfa_script_logpseudomodel.h" - -#include "xfa/src/fxfa/fm2js/xfa_fm2jsapi.h" -#include "xfa/src/fxfa/parser/xfa_docdata.h" -#include "xfa/src/fxfa/parser/xfa_doclayout.h" -#include "xfa/src/fxfa/parser/xfa_document.h" -#include "xfa/src/fxfa/parser/xfa_localemgr.h" -#include "xfa/src/fxfa/parser/xfa_object.h" -#include "xfa/src/fxfa/parser/xfa_parser.h" -#include "xfa/src/fxfa/parser/xfa_script.h" -#include "xfa/src/fxfa/parser/xfa_utils.h" - -CScript_LogPseudoModel::CScript_LogPseudoModel(CXFA_Document* pDocument) - : CXFA_OrdinaryObject(pDocument, XFA_ELEMENT_LogPseudoModel) { - m_uScriptHash = XFA_HASHCODE_Log; -} -CScript_LogPseudoModel::~CScript_LogPseudoModel() {} -void CScript_LogPseudoModel::Script_LogPseudoModel_Message( - CFXJSE_Arguments* pArguments) {} -void CScript_LogPseudoModel::Script_LogPseudoModel_TraceEnabled( - CFXJSE_Arguments* pArguments) {} -void CScript_LogPseudoModel::Script_LogPseudoModel_TraceActivate( - CFXJSE_Arguments* pArguments) {} -void CScript_LogPseudoModel::Script_LogPseudoModel_TraceDeactivate( - CFXJSE_Arguments* pArguments) {} -void CScript_LogPseudoModel::Script_LogPseudoModel_Trace( - CFXJSE_Arguments* pArguments) {} diff --git a/xfa/src/fxfa/parser/xfa_script_logpseudomodel.h b/xfa/src/fxfa/parser/xfa_script_logpseudomodel.h deleted file mode 100644 index ee3d35c052..0000000000 --- a/xfa/src/fxfa/parser/xfa_script_logpseudomodel.h +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXFA_PARSER_XFA_SCRIPT_LOGPSEUDOMODEL_H_ -#define XFA_SRC_FXFA_PARSER_XFA_SCRIPT_LOGPSEUDOMODEL_H_ - -#include "xfa/src/fxfa/parser/xfa_object.h" - -class CScript_LogPseudoModel : public CXFA_OrdinaryObject { - public: - explicit CScript_LogPseudoModel(CXFA_Document* pDocument); - virtual ~CScript_LogPseudoModel(); - - void Script_LogPseudoModel_Message(CFXJSE_Arguments* pArguments); - void Script_LogPseudoModel_TraceEnabled(CFXJSE_Arguments* pArguments); - void Script_LogPseudoModel_TraceActivate(CFXJSE_Arguments* pArguments); - void Script_LogPseudoModel_TraceDeactivate(CFXJSE_Arguments* pArguments); - void Script_LogPseudoModel_Trace(CFXJSE_Arguments* pArguments); -}; - -#endif // XFA_SRC_FXFA_PARSER_XFA_SCRIPT_LOGPSEUDOMODEL_H_ diff --git a/xfa/src/fxfa/parser/xfa_script_nodehelper.cpp b/xfa/src/fxfa/parser/xfa_script_nodehelper.cpp deleted file mode 100644 index e2f047591e..0000000000 --- a/xfa/src/fxfa/parser/xfa_script_nodehelper.cpp +++ /dev/null @@ -1,429 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fxfa/parser/xfa_script_nodehelper.h" - -#include "core/include/fxcrt/fx_ext.h" -#include "xfa/src/fxfa/fm2js/xfa_fm2jsapi.h" -#include "xfa/src/fxfa/parser/xfa_docdata.h" -#include "xfa/src/fxfa/parser/xfa_doclayout.h" -#include "xfa/src/fxfa/parser/xfa_document.h" -#include "xfa/src/fxfa/parser/xfa_localemgr.h" -#include "xfa/src/fxfa/parser/xfa_script_imp.h" -#include "xfa/src/fxfa/parser/xfa_object.h" -#include "xfa/src/fxfa/parser/xfa_parser.h" -#include "xfa/src/fxfa/parser/xfa_script.h" -#include "xfa/src/fxfa/parser/xfa_utils.h" - -CXFA_NodeHelper::CXFA_NodeHelper(void) - : m_eLastCreateType(XFA_ELEMENT_DataValue), - m_pCreateParent(NULL), - m_iCreateCount(0), - m_iCreateFlag(XFA_RESOLVENODE_RSTYPE_CreateNodeOne), - m_iCurAllStart(-1), - m_pAllStartParent(NULL) {} -CXFA_NodeHelper::~CXFA_NodeHelper(void) {} -CXFA_Node* CXFA_NodeHelper::XFA_ResolveNodes_GetOneChild( - CXFA_Node* parent, - const FX_WCHAR* pwsName, - FX_BOOL bIsClassName) { - if (parent == NULL) { - return NULL; - } - CXFA_NodeArray siblings; - uint32_t uNameHash = FX_HashCode_String_GetW(pwsName, FXSYS_wcslen(pwsName)); - XFA_NodeAcc_TraverseAnySiblings(parent, uNameHash, &siblings, bIsClassName); - if (siblings.GetSize() == 0) { - return NULL; - } - return siblings[0]; -} -int32_t CXFA_NodeHelper::XFA_CountSiblings(CXFA_Node* pNode, - XFA_LOGIC_TYPE eLogicType, - CXFA_NodeArray* pSiblings, - FX_BOOL bIsClassName) { - if (!pNode) - return 0; - CXFA_Node* parent = - XFA_ResolveNodes_GetParent(pNode, XFA_LOGIC_NoTransparent); - if (!parent) - return 0; - const XFA_PROPERTY* pProperty = XFA_GetPropertyOfElement( - parent->GetClassID(), pNode->GetClassID(), XFA_XDPPACKET_UNKNOWN); - if (!pProperty && eLogicType == XFA_LOGIC_Transparent) { - parent = XFA_ResolveNodes_GetParent(pNode, XFA_LOGIC_Transparent); - if (parent == NULL) { - return 0; - } - } - if (bIsClassName) { - return XFA_NodeAcc_TraverseSiblings(parent, pNode->GetClassHashCode(), - pSiblings, eLogicType, bIsClassName); - } else { - return XFA_NodeAcc_TraverseSiblings(parent, pNode->GetNameHash(), pSiblings, - eLogicType, bIsClassName); - } -} -int32_t CXFA_NodeHelper::XFA_NodeAcc_TraverseAnySiblings( - CXFA_Node* parent, - FX_DWORD dNameHash, - CXFA_NodeArray* pSiblings, - FX_BOOL bIsClassName) { - if (parent == NULL || pSiblings == NULL) { - return 0; - } - int32_t nCount = 0; - int32_t i = 0; - CXFA_NodeArray properties; - parent->GetNodeList(properties, XFA_NODEFILTER_Properties); - int32_t nProperties = properties.GetSize(); - for (i = 0; i < nProperties; ++i) { - CXFA_Node* child = properties[i]; - if (bIsClassName) { - if (child->GetClassHashCode() == dNameHash) { - pSiblings->Add(child); - nCount++; - } - } else { - if (child->GetNameHash() == dNameHash) { - pSiblings->Add(child); - nCount++; - } - } - if (nCount > 0) { - return nCount; - } - nCount += XFA_NodeAcc_TraverseAnySiblings(child, dNameHash, pSiblings, - bIsClassName); - } - CXFA_NodeArray children; - parent->GetNodeList(children, XFA_NODEFILTER_Children); - int32_t nChildren = children.GetSize(); - for (i = 0; i < nChildren; i++) { - CXFA_Node* child = children[i]; - if (bIsClassName) { - if (child->GetClassHashCode() == dNameHash) { - if (pSiblings) { - pSiblings->Add(child); - } - nCount++; - } - } else { - if (child->GetNameHash() == dNameHash) { - if (pSiblings) { - pSiblings->Add(child); - } - nCount++; - } - } - if (nCount > 0) { - return nCount; - } - nCount += XFA_NodeAcc_TraverseAnySiblings(child, dNameHash, pSiblings, - bIsClassName); - } - return nCount; -} -int32_t CXFA_NodeHelper::XFA_NodeAcc_TraverseSiblings(CXFA_Node* parent, - FX_DWORD dNameHash, - CXFA_NodeArray* pSiblings, - XFA_LOGIC_TYPE eLogicType, - FX_BOOL bIsClassName, - FX_BOOL bIsFindProperty) { - if (parent == NULL || pSiblings == NULL) { - return 0; - } - int32_t nCount = 0; - int32_t i = 0; - if (bIsFindProperty) { - CXFA_NodeArray properties; - parent->GetNodeList(properties, XFA_NODEFILTER_Properties); - int32_t nProperties = properties.GetSize(); - for (i = 0; i < nProperties; ++i) { - CXFA_Node* child = properties[i]; - if (bIsClassName) { - if (child->GetClassHashCode() == dNameHash) { - pSiblings->Add(child); - nCount++; - } - } else { - if (child->GetNameHash() == dNameHash) { - if (child->GetClassID() != XFA_ELEMENT_PageSet && - child->GetClassID() != XFA_ELEMENT_Extras && - child->GetClassID() != XFA_ELEMENT_Items) { - pSiblings->Add(child); - nCount++; - } - } - } - if (child->IsUnnamed() && child->GetClassID() == XFA_ELEMENT_PageSet) { - nCount += XFA_NodeAcc_TraverseSiblings(child, dNameHash, pSiblings, - eLogicType, bIsClassName, FALSE); - } - } - if (nCount > 0) { - return nCount; - } - } - CXFA_NodeArray children; - parent->GetNodeList(children, XFA_NODEFILTER_Children); - int32_t nChildren = children.GetSize(); - for (i = 0; i < nChildren; i++) { - CXFA_Node* child = children[i]; - if (child->GetClassID() == XFA_ELEMENT_Variables) { - continue; - } - if (bIsClassName) { - if (child->GetClassHashCode() == dNameHash) { - if (pSiblings) { - pSiblings->Add(child); - } - nCount++; - } - } else { - if (child->GetNameHash() == dNameHash) { - if (pSiblings) { - pSiblings->Add(child); - } - nCount++; - } - } - if (eLogicType == XFA_LOGIC_NoTransparent) { - continue; - } - if (XFA_NodeIsTransparent(child) && - child->GetClassID() != XFA_ELEMENT_PageSet) { - nCount += XFA_NodeAcc_TraverseSiblings(child, dNameHash, pSiblings, - eLogicType, bIsClassName, FALSE); - } - } - return nCount; -} -CXFA_Node* CXFA_NodeHelper::XFA_ResolveNodes_GetParent( - CXFA_Node* pNode, - XFA_LOGIC_TYPE eLogicType) { - if (!pNode) { - return NULL; - } - if (eLogicType == XFA_LOGIC_NoTransparent) { - return pNode->GetNodeItem(XFA_NODEITEM_Parent); - } - CXFA_Node* parent; - CXFA_Node* node = pNode; - while (TRUE) { - parent = XFA_ResolveNodes_GetParent(node); - if (parent == NULL) { - break; - } - XFA_ELEMENT parentElement = parent->GetClassID(); - if ((!parent->IsUnnamed() && parentElement != XFA_ELEMENT_SubformSet) || - parentElement == XFA_ELEMENT_Variables) { - break; - } - node = parent; - } - return parent; -} -int32_t CXFA_NodeHelper::XFA_GetIndex(CXFA_Node* pNode, - XFA_LOGIC_TYPE eLogicType, - FX_BOOL bIsProperty, - FX_BOOL bIsClassIndex) { - CXFA_Node* parent = - XFA_ResolveNodes_GetParent(pNode, XFA_LOGIC_NoTransparent); - if (parent == NULL) { - return 0; - } - if (!bIsProperty && eLogicType == XFA_LOGIC_Transparent) { - parent = XFA_ResolveNodes_GetParent(pNode, XFA_LOGIC_Transparent); - if (parent == NULL) { - return 0; - } - } - FX_DWORD dwHashName = pNode->GetNameHash(); - if (bIsClassIndex) { - dwHashName = pNode->GetClassHashCode(); - } - CXFA_NodeArray siblings; - int32_t iSize = XFA_NodeAcc_TraverseSiblings(parent, dwHashName, &siblings, - eLogicType, bIsClassIndex); - for (int32_t i = 0; i < iSize; ++i) { - CXFA_Node* child = siblings[i]; - if (child == pNode) { - return i; - } - } - return 0; -} -void CXFA_NodeHelper::XFA_GetNameExpression(CXFA_Node* refNode, - CFX_WideString& wsName, - FX_BOOL bIsAllPath, - XFA_LOGIC_TYPE eLogicType) { - wsName.Empty(); - if (bIsAllPath) { - XFA_GetNameExpression(refNode, wsName, FALSE, eLogicType); - CFX_WideString wsParent; - CXFA_Node* parent = - XFA_ResolveNodes_GetParent(refNode, XFA_LOGIC_NoTransparent); - while (parent) { - XFA_GetNameExpression(parent, wsParent, FALSE, eLogicType); - wsParent += L"."; - wsParent += wsName; - wsName = wsParent; - parent = XFA_ResolveNodes_GetParent(parent, XFA_LOGIC_NoTransparent); - } - return; - } - - CFX_WideStringC wsTagName; - CFX_WideString ws; - FX_BOOL bIsProperty = XFA_NodeIsProperty(refNode); - if (refNode->IsUnnamed() || - (bIsProperty && refNode->GetClassID() != XFA_ELEMENT_PageSet)) { - refNode->GetClassName(wsTagName); - ws = wsTagName; - wsName.Format(L"#%s[%d]", (const FX_WCHAR*)ws, - XFA_GetIndex(refNode, eLogicType, bIsProperty, TRUE)); - return; - } - ws = refNode->GetCData(XFA_ATTRIBUTE_Name); - ws.Replace(L".", L"\\."); - wsName.Format(L"%s[%d]", (const FX_WCHAR*)ws, - XFA_GetIndex(refNode, eLogicType, bIsProperty, FALSE)); -} - -FX_BOOL CXFA_NodeHelper::XFA_NodeIsTransparent(CXFA_Node* refNode) { - if (refNode == NULL) { - return FALSE; - } - XFA_ELEMENT eRefNode = refNode->GetClassID(); - if ((refNode->IsUnnamed() && refNode->IsContainerNode()) || - eRefNode == XFA_ELEMENT_SubformSet || eRefNode == XFA_ELEMENT_Area || - eRefNode == XFA_ELEMENT_Proto) { - return TRUE; - } - return FALSE; -} -FX_BOOL CXFA_NodeHelper::XFA_CreateNode_ForCondition( - CFX_WideString& wsCondition) { - int32_t iLen = wsCondition.GetLength(); - CFX_WideString wsIndex = FX_WSTRC(L"0"); - FX_BOOL bAll = FALSE; - - if (iLen == 0) { - m_iCreateFlag = XFA_RESOLVENODE_RSTYPE_CreateNodeOne; - return FALSE; - } - if (wsCondition.GetAt(0) == '[') { - int32_t i = 1; - for (; i < iLen; ++i) { - FX_WCHAR ch = wsCondition[i]; - if (ch == ' ') { - continue; - } - if (ch == '+' || ch == '-') { - break; - } else if (ch == '*') { - bAll = TRUE; - break; - } else { - break; - } - } - if (bAll) { - wsIndex = FX_WSTRC(L"1"); - m_iCreateFlag = XFA_RESOLVENODE_RSTYPE_CreateNodeAll; - } else { - m_iCreateFlag = XFA_RESOLVENODE_RSTYPE_CreateNodeOne; - wsIndex = wsCondition.Mid(i, iLen - 1 - i); - } - int32_t iIndex = wsIndex.GetInteger(); - m_iCreateCount = iIndex; - return TRUE; - } - return FALSE; -} -FX_BOOL CXFA_NodeHelper::XFA_ResolveNodes_CreateNode( - CFX_WideString wsName, - CFX_WideString wsCondition, - FX_BOOL bLastNode, - CXFA_ScriptContext* pScriptContext) { - if (m_pCreateParent == NULL) { - return FALSE; - } - FX_BOOL bIsClassName = FALSE; - FX_BOOL bResult = FALSE; - if (wsName.GetAt(0) == '!') { - wsName = wsName.Right(wsName.GetLength() - 1); - m_pCreateParent = ToNode( - pScriptContext->GetDocument()->GetXFAObject(XFA_HASHCODE_Datasets)); - } - if (wsName.GetAt(0) == '#') { - bIsClassName = TRUE; - wsName = wsName.Right(wsName.GetLength() - 1); - } - if (m_iCreateCount == 0) { - XFA_CreateNode_ForCondition(wsCondition); - } - if (bIsClassName) { - const XFA_ELEMENTINFO* lpElement = XFA_GetElementByName(wsName); - if (lpElement == NULL) { - return FALSE; - } - for (int32_t iIndex = 0; iIndex < m_iCreateCount; iIndex++) { - CXFA_Node* pNewNode = - m_pCreateParent->CreateSamePacketNode(lpElement->eName); - if (pNewNode) { - m_pCreateParent->InsertChild(pNewNode); - if (iIndex == m_iCreateCount - 1) { - m_pCreateParent = pNewNode; - } - bResult = TRUE; - } - } - } else { - XFA_ELEMENT eClassType = XFA_ELEMENT_DataGroup; - if (bLastNode) { - eClassType = m_eLastCreateType; - } - for (int32_t iIndex = 0; iIndex < m_iCreateCount; iIndex++) { - CXFA_Node* pNewNode = m_pCreateParent->CreateSamePacketNode(eClassType); - if (pNewNode) { - pNewNode->SetAttribute(XFA_ATTRIBUTE_Name, wsName); - pNewNode->CreateXMLMappingNode(); - m_pCreateParent->InsertChild(pNewNode); - if (iIndex == m_iCreateCount - 1) { - m_pCreateParent = pNewNode; - } - bResult = TRUE; - } - } - } - if (!bResult) { - m_pCreateParent = NULL; - } - return bResult; -} -void CXFA_NodeHelper::XFA_SetCreateNodeType(CXFA_Node* refNode) { - if (refNode == NULL) { - return; - } - if (refNode->GetClassID() == XFA_ELEMENT_Subform) { - m_eLastCreateType = XFA_ELEMENT_DataGroup; - } else if (refNode->GetClassID() == XFA_ELEMENT_Field) { - m_eLastCreateType = XFA_FieldIsMultiListBox(refNode) - ? XFA_ELEMENT_DataGroup - : XFA_ELEMENT_DataValue; - } else if (refNode->GetClassID() == XFA_ELEMENT_ExclGroup) { - m_eLastCreateType = XFA_ELEMENT_DataValue; - } -} -FX_BOOL CXFA_NodeHelper::XFA_NodeIsProperty(CXFA_Node* refNode) { - CXFA_Node* parent = - XFA_ResolveNodes_GetParent(refNode, XFA_LOGIC_NoTransparent); - return parent && refNode && - XFA_GetPropertyOfElement(parent->GetClassID(), refNode->GetClassID(), - XFA_XDPPACKET_UNKNOWN); -} diff --git a/xfa/src/fxfa/parser/xfa_script_nodehelper.h b/xfa/src/fxfa/parser/xfa_script_nodehelper.h deleted file mode 100644 index 318a5a1ab3..0000000000 --- a/xfa/src/fxfa/parser/xfa_script_nodehelper.h +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXFA_PARSER_XFA_SCRIPT_NODEHELPER_H_ -#define XFA_SRC_FXFA_PARSER_XFA_SCRIPT_NODEHELPER_H_ - -#include "xfa/src/fxfa/parser/xfa_object.h" -#include "xfa/src/fxfa/parser/xfa_script.h" - -class CXFA_ScriptContext; - -enum XFA_LOGIC_TYPE { - XFA_LOGIC_NoTransparent, - XFA_LOGIC_Transparent, -}; - -class CXFA_NodeHelper { - public: - CXFA_NodeHelper(void); - ~CXFA_NodeHelper(void); - CXFA_Node* XFA_ResolveNodes_GetOneChild(CXFA_Node* parent, - const FX_WCHAR* pwsName, - FX_BOOL bIsClassName = FALSE); - CXFA_Node* XFA_ResolveNodes_GetParent( - CXFA_Node* pNode, - XFA_LOGIC_TYPE eLogicType = XFA_LOGIC_NoTransparent); - - int32_t XFA_NodeAcc_TraverseSiblings(CXFA_Node* parent, - FX_DWORD dNameHash, - CXFA_NodeArray* pSiblings, - XFA_LOGIC_TYPE eLogicType, - FX_BOOL bIsClassName = FALSE, - FX_BOOL bIsFindProperty = TRUE); - int32_t XFA_NodeAcc_TraverseAnySiblings(CXFA_Node* parent, - FX_DWORD dNameHash, - CXFA_NodeArray* pSiblings, - FX_BOOL bIsClassName = FALSE); - int32_t XFA_CountSiblings(CXFA_Node* pNode, - XFA_LOGIC_TYPE eLogicType, - CXFA_NodeArray* pSiblings, - FX_BOOL bIsClassName = FALSE); - int32_t XFA_GetIndex(CXFA_Node* pNode, - XFA_LOGIC_TYPE eLogicType = XFA_LOGIC_NoTransparent, - FX_BOOL bIsProperty = FALSE, - FX_BOOL bIsClassIndex = FALSE); - void XFA_GetNameExpression( - CXFA_Node* refNode, - CFX_WideString& wsName, - FX_BOOL bIsAllPath, - XFA_LOGIC_TYPE eLogicType = XFA_LOGIC_NoTransparent); - FX_BOOL XFA_NodeIsTransparent(CXFA_Node* refNode); - FX_BOOL XFA_ResolveNodes_CreateNode(CFX_WideString wsName, - CFX_WideString wsCondition, - FX_BOOL bLastNode, - CXFA_ScriptContext* pScriptContext); - FX_BOOL XFA_CreateNode_ForCondition(CFX_WideString& wsCondition); - void XFA_SetCreateNodeType(CXFA_Node* refNode); - FX_BOOL XFA_NodeIsProperty(CXFA_Node* refNode); - - public: - XFA_ELEMENT m_eLastCreateType; - CXFA_Node* m_pCreateParent; - int32_t m_iCreateCount; - XFA_RESOVENODE_RSTYPE m_iCreateFlag; - int32_t m_iCurAllStart; - CXFA_Node* m_pAllStartParent; -}; - -#endif // XFA_SRC_FXFA_PARSER_XFA_SCRIPT_NODEHELPER_H_ diff --git a/xfa/src/fxfa/parser/xfa_script_resolveprocessor.cpp b/xfa/src/fxfa/parser/xfa_script_resolveprocessor.cpp deleted file mode 100644 index 3f4a9c7b88..0000000000 --- a/xfa/src/fxfa/parser/xfa_script_resolveprocessor.cpp +++ /dev/null @@ -1,825 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fxfa/parser/xfa_script_resolveprocessor.h" - -#include "core/include/fxcrt/fx_ext.h" -#include "xfa/src/fxfa/fm2js/xfa_fm2jsapi.h" -#include "xfa/src/fxfa/parser/xfa_docdata.h" -#include "xfa/src/fxfa/parser/xfa_doclayout.h" -#include "xfa/src/fxfa/parser/xfa_document.h" -#include "xfa/src/fxfa/parser/xfa_localemgr.h" -#include "xfa/src/fxfa/parser/xfa_script_imp.h" -#include "xfa/src/fxfa/parser/xfa_script_nodehelper.h" -#include "xfa/src/fxfa/parser/xfa_object.h" -#include "xfa/src/fxfa/parser/xfa_parser.h" -#include "xfa/src/fxfa/parser/xfa_script.h" -#include "xfa/src/fxfa/parser/xfa_utils.h" - -CXFA_ResolveProcessor::CXFA_ResolveProcessor(void) - : m_pNodeHelper(NULL), m_iCurStart(0) { - m_pNodeHelper = new CXFA_NodeHelper; -} -CXFA_ResolveProcessor::~CXFA_ResolveProcessor(void) { - if (m_pNodeHelper) { - delete m_pNodeHelper; - m_pNodeHelper = NULL; - } -} -int32_t CXFA_ResolveProcessor::XFA_ResolveNodes(CXFA_ResolveNodesData& rnd) { - if (rnd.m_CurNode == NULL) { - return -1; - } - if (!rnd.m_CurNode->IsNode()) { - if (rnd.m_dwStyles & XFA_RESOLVENODE_Attributes) { - return XFA_ResolveNodes_ForAttributeRs(rnd.m_CurNode, rnd, rnd.m_wsName); - } - return 0; - } - if (rnd.m_dwStyles & XFA_RESOLVENODE_AnyChild) { - return XFA_ResolveNodes_AnyChild(rnd); - } - FX_WCHAR wch = rnd.m_wsName.GetAt(0); - switch (wch) { - case '$': - return XFA_ResolveNodes_Dollar(rnd); - case '!': - return XFA_ResolveNodes_Excalmatory(rnd); - case '#': - return XFA_ResolveNodes_NumberSign(rnd); - case '*': - return XFA_ResolveNodes_Asterisk(rnd); - case '.': - return XFA_ResolveNodes_AnyChild(rnd); - default: - break; - } - if (rnd.m_uHashName == XFA_HASHCODE_This && rnd.m_nLevel == 0) { - rnd.m_Nodes.Add(rnd.m_pSC->GetThisObject()); - return 1; - } else if (rnd.m_CurNode->GetClassID() == XFA_ELEMENT_Xfa) { - CXFA_Object* pObjNode = - rnd.m_pSC->GetDocument()->GetXFAObject(rnd.m_uHashName); - if (pObjNode) { - rnd.m_Nodes.Add(pObjNode); - } else if (rnd.m_uHashName == XFA_HASHCODE_Xfa) { - rnd.m_Nodes.Add(rnd.m_CurNode); - } else if ((rnd.m_dwStyles & XFA_RESOLVENODE_Attributes) && - XFA_ResolveNodes_ForAttributeRs(rnd.m_CurNode, rnd, - rnd.m_wsName)) { - return 1; - } - if (rnd.m_Nodes.GetSize() > 0) { - XFA_ResolveNode_FilterCondition(rnd, rnd.m_wsCondition); - } - return rnd.m_Nodes.GetSize(); - } - int32_t nRet = XFA_ResolveNodes_Normal(rnd); - if (nRet < 1 && rnd.m_uHashName == XFA_HASHCODE_Xfa) { - rnd.m_Nodes.Add(rnd.m_pSC->GetDocument()->GetRoot()); - } - return rnd.m_Nodes.GetSize(); -} -int32_t CXFA_ResolveProcessor::XFA_ResolveNodes_AnyChild( - CXFA_ResolveNodesData& rnd) { - CFX_WideString wsName = rnd.m_wsName.Right(rnd.m_wsName.GetLength() - 1); - CFX_WideString wsCondition = rnd.m_wsCondition; - CXFA_Node* findNode = NULL; - CXFA_NodeArray siblings; - FX_BOOL bClassName = FALSE; - if (wsName.GetAt(0) == '#') { - bClassName = TRUE; - wsName = wsName.Right(wsName.GetLength() - 1); - } - findNode = m_pNodeHelper->XFA_ResolveNodes_GetOneChild(ToNode(rnd.m_CurNode), - wsName, bClassName); - if (findNode == NULL) { - return 0; - } - if (wsCondition.IsEmpty()) { - rnd.m_Nodes.Add(findNode); - return rnd.m_Nodes.GetSize(); - } - m_pNodeHelper->XFA_CountSiblings(findNode, XFA_LOGIC_Transparent, - (CXFA_NodeArray*)&rnd.m_Nodes, bClassName); - XFA_ResolveNode_FilterCondition(rnd, wsCondition); - return rnd.m_Nodes.GetSize(); -} -int32_t CXFA_ResolveProcessor::XFA_ResolveNodes_Dollar( - CXFA_ResolveNodesData& rnd) { - CXFA_ObjArray& nodes = rnd.m_Nodes; - CFX_WideString wsName = rnd.m_wsName; - CFX_WideString wsCondition = rnd.m_wsCondition; - int32_t iNameLen = wsName.GetLength(); - if (iNameLen == 1) { - nodes.Add(rnd.m_CurNode); - return 1; - } - if (rnd.m_nLevel > 0) { - return -1; - } - FX_DWORD dwNameHash = - FX_HashCode_String_GetW((const FX_WCHAR*)wsName + 1, iNameLen - 1); - if (dwNameHash == XFA_HASHCODE_Xfa) { - nodes.Add(rnd.m_pSC->GetDocument()->GetRoot()); - } else { - CXFA_Object* pObjNode = rnd.m_pSC->GetDocument()->GetXFAObject(dwNameHash); - if (pObjNode) { - rnd.m_Nodes.Add(pObjNode); - } - } - if (rnd.m_Nodes.GetSize() > 0) { - XFA_ResolveNode_FilterCondition(rnd, wsCondition); - } - return rnd.m_Nodes.GetSize(); -} -int32_t CXFA_ResolveProcessor::XFA_ResolveNodes_Excalmatory( - CXFA_ResolveNodesData& rnd) { - if (rnd.m_nLevel > 0) { - return 0; - } - CXFA_Node* datasets = - ToNode(rnd.m_pSC->GetDocument()->GetXFAObject(XFA_HASHCODE_Datasets)); - if (!datasets) { - return 0; - } - CXFA_ResolveNodesData rndFind; - rndFind.m_pSC = rnd.m_pSC; - rndFind.m_CurNode = datasets; - rndFind.m_wsName = rnd.m_wsName.Right(rnd.m_wsName.GetLength() - 1); - rndFind.m_uHashName = - FX_HashCode_String_GetW(rndFind.m_wsName, rndFind.m_wsName.GetLength()); - rndFind.m_nLevel = rnd.m_nLevel + 1; - rndFind.m_dwStyles = XFA_RESOLVENODE_Children; - rndFind.m_wsCondition = rnd.m_wsCondition; - XFA_ResolveNodes(rndFind); - if (rndFind.m_Nodes.GetSize() > 0) { - rnd.m_Nodes.Append(rndFind.m_Nodes); - rndFind.m_Nodes.RemoveAll(); - } - return rnd.m_Nodes.GetSize(); -} -int32_t CXFA_ResolveProcessor::XFA_ResolveNodes_NumberSign( - CXFA_ResolveNodesData& rnd) { - CFX_WideString wsName = rnd.m_wsName.Right(rnd.m_wsName.GetLength() - 1); - CFX_WideString wsCondition = rnd.m_wsCondition; - CXFA_Node* curNode = ToNode(rnd.m_CurNode); - if (XFA_ResolveNodes_ForAttributeRs(curNode, rnd, wsName)) { - return 1; - } - CXFA_ResolveNodesData rndFind; - rndFind.m_pSC = rnd.m_pSC; - rndFind.m_nLevel = rnd.m_nLevel + 1; - rndFind.m_dwStyles = rnd.m_dwStyles; - rndFind.m_dwStyles |= XFA_RESOLVENODE_TagName; - rndFind.m_dwStyles &= ~XFA_RESOLVENODE_Attributes; - rndFind.m_wsName = wsName; - rndFind.m_uHashName = - FX_HashCode_String_GetW(rndFind.m_wsName, rndFind.m_wsName.GetLength()); - rndFind.m_wsCondition = wsCondition; - rndFind.m_CurNode = curNode; - XFA_ResolveNodes_Normal(rndFind); - if (rndFind.m_Nodes.GetSize() > 0) { - if (wsCondition.GetLength() == 0 && rndFind.m_Nodes.Find(curNode) >= 0) { - rnd.m_Nodes.Add(curNode); - } else { - rnd.m_Nodes.Append(rndFind.m_Nodes); - rndFind.m_Nodes.RemoveAll(); - } - } - return rnd.m_Nodes.GetSize(); -} -int32_t CXFA_ResolveProcessor::XFA_ResolveNodes_ForAttributeRs( - CXFA_Object* curNode, - CXFA_ResolveNodesData& rnd, - const CFX_WideStringC& strAttr) { - const XFA_SCRIPTATTRIBUTEINFO* lpScriptAttribute = - XFA_GetScriptAttributeByName(curNode->GetClassID(), strAttr); - if (lpScriptAttribute) { - rnd.m_pScriptAttribute = lpScriptAttribute; - rnd.m_Nodes.Add(curNode); - rnd.m_dwFlag = XFA_RESOVENODE_RSTYPE_Attribute; - return 1; - } - return 0; -} -int32_t CXFA_ResolveProcessor::XFA_ResolveNodes_Normal( - CXFA_ResolveNodesData& rnd) { - if (rnd.m_nLevel > 32) { - return 0; - } - if (!rnd.m_CurNode->IsNode()) { - return 0; - } - CXFA_Node* curNode = ToNode(rnd.m_CurNode); - CXFA_ObjArray& nodes = rnd.m_Nodes; - int32_t nNum = nodes.GetSize(); - FX_DWORD dwStyles = rnd.m_dwStyles; - CFX_WideString& wsName = rnd.m_wsName; - uint32_t uNameHash = rnd.m_uHashName; - CFX_WideString& wsCondition = rnd.m_wsCondition; - CXFA_ResolveNodesData rndFind; - rndFind.m_wsName = rnd.m_wsName; - rndFind.m_wsCondition = rnd.m_wsCondition; - rndFind.m_pSC = rnd.m_pSC; - rndFind.m_nLevel = rnd.m_nLevel + 1; - rndFind.m_uHashName = uNameHash; - CXFA_NodeArray children; - CXFA_NodeArray properties; - CXFA_Node* pVariablesNode = NULL; - CXFA_Node* pPageSetNode = NULL; - CXFA_Node* pChild = curNode->GetNodeItem(XFA_NODEITEM_FirstChild); - while (pChild) { - if (pChild->GetClassID() == XFA_ELEMENT_Variables) { - pVariablesNode = pChild; - pChild = pChild->GetNodeItem(XFA_NODEITEM_NextSibling); - continue; - } else if (pChild->GetClassID() == XFA_ELEMENT_PageSet) { - pPageSetNode = pChild; - pChild = pChild->GetNodeItem(XFA_NODEITEM_NextSibling); - continue; - } else { - const XFA_PROPERTY* pPropert = XFA_GetPropertyOfElement( - curNode->GetClassID(), pChild->GetClassID(), XFA_XDPPACKET_UNKNOWN); - if (pPropert) { - properties.Add(pChild); - } else { - children.Add(pChild); - } - } - pChild = pChild->GetNodeItem(XFA_NODEITEM_NextSibling); - } - if ((dwStyles & XFA_RESOLVENODE_Properties) && pVariablesNode) { - uint32_t uPropHash = pVariablesNode->GetClassHashCode(); - if (uPropHash == uNameHash) { - nodes.Add(pVariablesNode); - } else { - rndFind.m_CurNode = pVariablesNode; - XFA_ResolveNodes_SetStylesForChild(dwStyles, rndFind); - CFX_WideString wsSaveCondition = rndFind.m_wsCondition; - rndFind.m_wsCondition.Empty(); - XFA_ResolveNodes_Normal(rndFind); - rndFind.m_wsCondition = wsSaveCondition; - if (rndFind.m_Nodes.GetSize() > 0) { - nodes.Append(rndFind.m_Nodes); - rndFind.m_Nodes.RemoveAll(); - } - } - if (nodes.GetSize() > nNum) { - XFA_ResolveNode_FilterCondition(rnd, wsCondition); - if (nodes.GetSize() > 0) { - return 1; - } - return 0; - } - } - if (dwStyles & XFA_RESOLVENODE_Children) { - FX_BOOL bSetFlag = FALSE; - if (pPageSetNode && (dwStyles & XFA_RESOLVENODE_Properties)) { - children.Add(pPageSetNode); - } - for (int32_t i = 0; i < children.GetSize(); i++) { - CXFA_Node* child = children[i]; - if (dwStyles & XFA_RESOLVENODE_TagName) { - if (child->GetClassHashCode() == uNameHash) { - nodes.Add(child); - } - } else if (child->GetNameHash() == uNameHash) { - nodes.Add(child); - } - if (m_pNodeHelper->XFA_NodeIsTransparent(child) && - child->GetClassID() != XFA_ELEMENT_PageSet) { - if (!bSetFlag) { - XFA_ResolveNodes_SetStylesForChild(dwStyles, rndFind); - bSetFlag = TRUE; - } - rndFind.m_CurNode = child; - CFX_WideString wsSaveCondition = rndFind.m_wsCondition; - rndFind.m_wsCondition.Empty(); - XFA_ResolveNodes_Normal(rndFind); - rndFind.m_wsCondition = wsSaveCondition; - if (rndFind.m_Nodes.GetSize() > 0) { - nodes.Append(rndFind.m_Nodes); - rndFind.m_Nodes.RemoveAll(); - } - } - } - if (nodes.GetSize() > nNum) { - if (!(dwStyles & XFA_RESOLVENODE_ALL)) { - CXFA_NodeArray upArrayNodes; - if (m_pNodeHelper->XFA_NodeIsTransparent(ToNode(curNode))) { - m_pNodeHelper->XFA_CountSiblings( - ToNode(nodes[0]), XFA_LOGIC_Transparent, &upArrayNodes, - !!(dwStyles & XFA_RESOLVENODE_TagName)); - } - if (upArrayNodes.GetSize() > nodes.GetSize()) { - upArrayNodes[0] = ToNode(nodes[0]); - nodes.RemoveAll(); - nodes.Append((CXFA_ObjArray&)upArrayNodes); - upArrayNodes.RemoveAll(); - } - } - XFA_ResolveNode_FilterCondition(rnd, wsCondition); - if (nodes.GetSize() > 0) { - return 1; - } - return 0; - } - } - if (dwStyles & XFA_RESOLVENODE_Attributes) { - if (XFA_ResolveNodes_ForAttributeRs(curNode, rnd, wsName)) { - return 1; - } - } - if (dwStyles & XFA_RESOLVENODE_Properties) { - for (int32_t i = 0; i < properties.GetSize(); i++) { - CXFA_Node* childProperty = properties[i]; - if (childProperty->IsUnnamed()) { - uint32_t uPropHash = childProperty->GetClassHashCode(); - if (uPropHash == uNameHash) { - nodes.Add(childProperty); - } - } else if (childProperty->GetNameHash() == uNameHash && - childProperty->GetClassID() != XFA_ELEMENT_Extras && - childProperty->GetClassID() != XFA_ELEMENT_Items) { - nodes.Add(childProperty); - } - } - if (nodes.GetSize() > nNum) { - XFA_ResolveNode_FilterCondition(rnd, wsCondition); - if (nodes.GetSize() > 0) { - return 1; - } - return 0; - } - CXFA_Node* pProp = NULL; - if (XFA_ELEMENT_Subform == curNode->GetClassID() && - XFA_HASHCODE_Occur == uNameHash) { - CXFA_Node* pInstanceManager = - curNode->AsNode()->GetInstanceMgrOfSubform(); - if (pInstanceManager) { - pProp = pInstanceManager->GetProperty(0, XFA_ELEMENT_Occur, TRUE); - } - } else { - const XFA_ELEMENTINFO* pElement = XFA_GetElementByName(wsName); - if (pElement) { - pProp = curNode->AsNode()->GetProperty( - 0, pElement->eName, pElement->eName != XFA_ELEMENT_PageSet); - } - } - if (pProp) { - nodes.Add(pProp); - return nodes.GetSize(); - } - } - CXFA_Node* parentNode = m_pNodeHelper->XFA_ResolveNodes_GetParent( - curNode->AsNode(), XFA_LOGIC_NoTransparent); - uint32_t uCurClassHash = curNode->GetClassHashCode(); - if (!parentNode) { - if (uCurClassHash == uNameHash) { - nodes.Add(curNode->AsNode()); - XFA_ResolveNode_FilterCondition(rnd, wsCondition); - if (nodes.GetSize() > 0) { - return 1; - } - } - return 0; - } - if (dwStyles & XFA_RESOLVENODE_Siblings) { - CXFA_Node* child = parentNode->GetNodeItem(XFA_NODEITEM_FirstChild); - FX_DWORD dwSubStyles = - XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Properties; - if (dwStyles & XFA_RESOLVENODE_TagName) { - dwSubStyles |= XFA_RESOLVENODE_TagName; - } - if (dwStyles & XFA_RESOLVENODE_ALL) { - dwSubStyles |= XFA_RESOLVENODE_ALL; - } - rndFind.m_dwStyles = dwSubStyles; - while (child) { - if (child == curNode) { - if (dwStyles & XFA_RESOLVENODE_TagName) { - if (uCurClassHash == uNameHash) { - nodes.Add(curNode); - } - } else { - if (child->GetNameHash() == uNameHash) { - nodes.Add(curNode); - if (rnd.m_nLevel == 0 && wsCondition.GetLength() == 0) { - nodes.RemoveAll(); - nodes.Add(curNode); - return 1; - } - } - } - child = child->GetNodeItem(XFA_NODEITEM_NextSibling); - continue; - } - if (dwStyles & XFA_RESOLVENODE_TagName) { - if (child->GetClassHashCode() == uNameHash) { - nodes.Add(child); - } - } else if (child->GetNameHash() == uNameHash) { - nodes.Add(child); - } - const XFA_PROPERTY* pPropert = XFA_GetPropertyOfElement( - parentNode->GetClassID(), child->GetClassID(), XFA_XDPPACKET_UNKNOWN); - FX_BOOL bInnerSearch = FALSE; - if (pPropert) { - if ((child->GetClassID() == XFA_ELEMENT_Variables || - child->GetClassID() == XFA_ELEMENT_PageSet)) { - bInnerSearch = TRUE; - } - } else { - if (m_pNodeHelper->XFA_NodeIsTransparent(child)) { - bInnerSearch = TRUE; - } - } - if (bInnerSearch) { - rndFind.m_CurNode = child; - CFX_WideString wsOriginCondition = rndFind.m_wsCondition; - rndFind.m_wsCondition.Empty(); - FX_DWORD dwOriginStyle = rndFind.m_dwStyles; - rndFind.m_dwStyles = dwOriginStyle | XFA_RESOLVENODE_ALL; - XFA_ResolveNodes_Normal(rndFind); - rndFind.m_dwStyles = dwOriginStyle; - rndFind.m_wsCondition = wsOriginCondition; - if (rndFind.m_Nodes.GetSize() > 0) { - nodes.Append(rndFind.m_Nodes); - rndFind.m_Nodes.RemoveAll(); - } - } - child = child->GetNodeItem(XFA_NODEITEM_NextSibling); - } - if (nodes.GetSize() > nNum) { - if (m_pNodeHelper->XFA_NodeIsTransparent(parentNode)) { - CXFA_NodeArray upArrayNodes; - m_pNodeHelper->XFA_CountSiblings( - ToNode(nodes[0]), XFA_LOGIC_Transparent, &upArrayNodes, - !!(dwStyles & XFA_RESOLVENODE_TagName)); - if (upArrayNodes.GetSize() > nodes.GetSize()) { - upArrayNodes[0] = ToNode(nodes[0]); - nodes.RemoveAll(); - nodes.Append((CXFA_ObjArray&)upArrayNodes); - upArrayNodes.RemoveAll(); - } - } - XFA_ResolveNode_FilterCondition(rnd, wsCondition); - if (nodes.GetSize() > 0) { - return 1; - } - return 0; - } - } - if (dwStyles & XFA_RESOLVENODE_Parent) { - FX_DWORD dwSubStyles = XFA_RESOLVENODE_Siblings | XFA_RESOLVENODE_Parent | - XFA_RESOLVENODE_Properties; - if (dwStyles & XFA_RESOLVENODE_TagName) { - dwSubStyles |= XFA_RESOLVENODE_TagName; - } - if (dwStyles & XFA_RESOLVENODE_ALL) { - dwSubStyles |= XFA_RESOLVENODE_ALL; - } - rndFind.m_dwStyles = dwSubStyles; - rndFind.m_CurNode = parentNode; - CXFA_NodeArray& array = rnd.m_pSC->GetUpObjectArray(); - array.Add(parentNode); - XFA_ResolveNodes_Normal(rndFind); - if (rndFind.m_Nodes.GetSize() > 0) { - nodes.Append(rndFind.m_Nodes); - rndFind.m_Nodes.RemoveAll(); - } - if (nodes.GetSize() > nNum) { - return 1; - } - } - return 0; -} -int32_t CXFA_ResolveProcessor::XFA_ResolveNodes_Asterisk( - CXFA_ResolveNodesData& rnd) { - CXFA_Node* curNode = ToNode(rnd.m_CurNode); - CXFA_ObjArray& nodes = rnd.m_Nodes; - CXFA_NodeArray array; - curNode->GetNodeList(array, - XFA_NODEFILTER_Children | XFA_NODEFILTER_Properties); - nodes.Append((CXFA_ObjArray&)array); - return nodes.GetSize(); -} -int32_t CXFA_ResolveProcessor::XFA_ResolveNodes_PopStack( - CFX_Int32Array& stack) { - int32_t nType = -1; - int32_t iSize = stack.GetSize() - 1; - if (iSize > -1) { - nType = stack[iSize]; - stack.RemoveAt(iSize, 1); - } - return nType; -} -int32_t CXFA_ResolveProcessor::XFA_ResolveNodes_GetFilter( - const CFX_WideStringC& wsExpression, - int32_t nStart, - CXFA_ResolveNodesData& rnd) { - FXSYS_assert(nStart > -1); - int32_t iLength = wsExpression.GetLength(); - if (nStart >= iLength) { - return 0; - } - CFX_WideString& wsName = rnd.m_wsName; - CFX_WideString& wsCondition = rnd.m_wsCondition; - FX_WCHAR* pNameBuf = wsName.GetBuffer(iLength - nStart); - FX_WCHAR* pConditionBuf = wsCondition.GetBuffer(iLength - nStart); - int32_t nNameCount = 0; - int32_t nConditionCount = 0; - CFX_Int32Array stack; - int32_t nType = -1; - const FX_WCHAR* pSrc = wsExpression.GetPtr(); - FX_WCHAR wPrev = 0, wCur; - FX_BOOL bIsCondition = FALSE; - while (nStart < iLength) { - wCur = pSrc[nStart++]; - if (wCur == '.') { - if (wPrev == '\\') { - pNameBuf[nNameCount - 1] = wPrev = '.'; - continue; - } - if (nNameCount == 0) { - pNameBuf[nNameCount++] = wCur; - continue; - } - FX_WCHAR wLookahead = nStart < iLength ? pSrc[nStart] : 0; - if (wLookahead != '[' && wLookahead != '(') { - if (nType < 0) { - break; - } - } - } - if (wCur == '[' || wCur == '(') { - bIsCondition = TRUE; - } else if (wCur == '.' && nStart < iLength && - (pSrc[nStart] == '[' || pSrc[nStart] == '(')) { - bIsCondition = TRUE; - } - if (bIsCondition) { - pConditionBuf[nConditionCount++] = wCur; - } else { - pNameBuf[nNameCount++] = wCur; - } - FX_BOOL bRecursive = TRUE; - switch (nType) { - case 0: - if (wCur == ']') { - nType = XFA_ResolveNodes_PopStack(stack); - bRecursive = FALSE; - } - break; - case 1: - if (wCur == ')') { - nType = XFA_ResolveNodes_PopStack(stack); - bRecursive = FALSE; - } - break; - case 2: - if (wCur == '"') { - nType = XFA_ResolveNodes_PopStack(stack); - bRecursive = FALSE; - } - break; - } - if (bRecursive) { - switch (wCur) { - case '[': - stack.Add(nType); - nType = 0; - break; - case '(': - stack.Add(nType); - nType = 1; - break; - case '"': - stack.Add(nType); - nType = 2; - break; - } - } - wPrev = wCur; - } - if (stack.GetSize() > 0) { - return -1; - } - wsName.ReleaseBuffer(nNameCount); - wsName.TrimLeft(); - wsName.TrimRight(); - wsCondition.ReleaseBuffer(nConditionCount); - wsCondition.TrimLeft(); - wsCondition.TrimRight(); - rnd.m_uHashName = FX_HashCode_String_GetW(wsName, wsName.GetLength()); - return nStart; -} -void CXFA_ResolveProcessor::XFA_ResolveNode_ConditionArray( - int32_t iCurIndex, - CFX_WideString wsCondition, - int32_t iFoundCount, - CXFA_ResolveNodesData& rnd) { - CXFA_NodeArray& findNodes = (CXFA_NodeArray&)rnd.m_Nodes; - int32_t iLen = wsCondition.GetLength(); - FX_BOOL bRelative = FALSE; - FX_BOOL bAll = FALSE; - int32_t i = 1; - for (; i < iLen; ++i) { - FX_WCHAR ch = wsCondition[i]; - if (ch == ' ') { - continue; - } - if (ch == '+' || ch == '-') { - bRelative = TRUE; - break; - } else if (ch == '*') { - bAll = TRUE; - break; - } else { - break; - } - } - if (bAll) { - if (rnd.m_dwStyles & XFA_RESOLVENODE_CreateNode) { - if (rnd.m_dwStyles & XFA_RESOLVENODE_Bind) { - m_pNodeHelper->m_pCreateParent = ToNode(rnd.m_CurNode); - m_pNodeHelper->m_iCreateCount = 1; - findNodes.RemoveAll(); - m_pNodeHelper->m_iCurAllStart = -1; - m_pNodeHelper->m_pAllStartParent = NULL; - } else { - if (m_pNodeHelper->m_iCurAllStart == -1) { - m_pNodeHelper->m_iCurAllStart = m_iCurStart; - m_pNodeHelper->m_pAllStartParent = ToNode(rnd.m_CurNode); - } - } - } else if (rnd.m_dwStyles & XFA_RESOLVENODE_BindNew) { - if (m_pNodeHelper->m_iCurAllStart == -1) { - m_pNodeHelper->m_iCurAllStart = m_iCurStart; - } - } - return; - } - if (iFoundCount == 1 && !iLen) { - return; - } - CFX_WideString wsIndex; - wsIndex = wsCondition.Mid(i, iLen - 1 - i); - int32_t iIndex = wsIndex.GetInteger(); - if (bRelative) { - iIndex += iCurIndex; - } - if (iFoundCount <= iIndex || iIndex < 0) { - if (rnd.m_dwStyles & XFA_RESOLVENODE_CreateNode) { - m_pNodeHelper->m_pCreateParent = ToNode(rnd.m_CurNode); - m_pNodeHelper->m_iCreateCount = iIndex - iFoundCount + 1; - } - findNodes.RemoveAll(); - } else { - CXFA_Node* ret = findNodes[iIndex]; - findNodes.RemoveAll(); - findNodes.Add(ret); - } -} -void CXFA_ResolveProcessor::XFA_ResolveNode_DoPredicateFilter( - int32_t iCurIndex, - CFX_WideString wsCondition, - int32_t iFoundCount, - CXFA_ResolveNodesData& rnd) { - CXFA_NodeArray& findNodes = (CXFA_NodeArray&)rnd.m_Nodes; - FXSYS_assert(iFoundCount == findNodes.GetSize()); - CFX_WideString wsExpression; - IXFA_ScriptContext* pContext = NULL; - XFA_SCRIPTLANGTYPE eLangType = XFA_SCRIPTLANGTYPE_Unkown; - if (wsCondition.Left(2) == FX_WSTRC(L".[") && - wsCondition.Right(1) == FX_WSTRC(L"]")) { - eLangType = XFA_SCRIPTLANGTYPE_Formcalc; - } else if (wsCondition.Left(2) == FX_WSTRC(L".(") && - wsCondition.Right(1) == FX_WSTRC(L")")) { - eLangType = XFA_SCRIPTLANGTYPE_Javascript; - } else { - return; - } - pContext = rnd.m_pSC; - wsExpression = wsCondition.Mid(2, wsCondition.GetLength() - 3); - for (int32_t i = iFoundCount - 1; i >= 0; i--) { - CXFA_Object* node = findNodes[i]; - FX_BOOL bRet = FALSE; - FXJSE_HVALUE pRetValue = FXJSE_Value_Create(rnd.m_pSC->GetRuntime()); - bRet = pContext->RunScript(eLangType, wsExpression, pRetValue, node); - if (!bRet || !FXJSE_Value_ToBoolean(pRetValue)) { - findNodes.RemoveAt(i); - } - FXJSE_Value_Release(pRetValue); - } -} - -void CXFA_ResolveProcessor::XFA_ResolveNode_FilterCondition( - CXFA_ResolveNodesData& rnd, - CFX_WideString wsCondition) { - CXFA_NodeArray& findNodes = (CXFA_NodeArray&)rnd.m_Nodes; - int32_t iCurrIndex = 0; - const CXFA_NodeArray& array = rnd.m_pSC->GetUpObjectArray(); - int32_t iSize = array.GetSize(); - if (iSize) { - CXFA_Node* curNode = array[iSize - 1]; - FX_BOOL bIsProperty = m_pNodeHelper->XFA_NodeIsProperty(curNode); - if (curNode->IsUnnamed() || - (bIsProperty && curNode->GetClassID() != XFA_ELEMENT_PageSet)) { - iCurrIndex = m_pNodeHelper->XFA_GetIndex(curNode, XFA_LOGIC_Transparent, - bIsProperty, TRUE); - } else { - iCurrIndex = m_pNodeHelper->XFA_GetIndex(curNode, XFA_LOGIC_Transparent, - bIsProperty, FALSE); - } - } - int32_t iFoundCount = findNodes.GetSize(); - wsCondition.TrimLeft(); - wsCondition.TrimRight(); - int32_t iLen = wsCondition.GetLength(); - if (!iLen) { - if (rnd.m_dwStyles & XFA_RESOLVENODE_ALL) { - return; - } - if (iFoundCount == 1) { - return; - } - if (iFoundCount <= iCurrIndex) { - if (rnd.m_dwStyles & XFA_RESOLVENODE_CreateNode) { - m_pNodeHelper->m_pCreateParent = ToNode(rnd.m_CurNode); - m_pNodeHelper->m_iCreateCount = iCurrIndex - iFoundCount + 1; - } - findNodes.RemoveAll(); - return; - } else { - CXFA_Node* ret = findNodes[iCurrIndex]; - findNodes.RemoveAll(); - findNodes.Add(ret); - return; - } - } - FX_WCHAR wTypeChar = wsCondition[0]; - switch (wTypeChar) { - case '[': - XFA_ResolveNode_ConditionArray(iCurrIndex, wsCondition, iFoundCount, rnd); - return; - case '(': - return; - case '"': - return; - case '.': - if (iLen > 1 && (wsCondition[1] == '[' || wsCondition[1] == '(')) { - XFA_ResolveNode_DoPredicateFilter(iCurrIndex, wsCondition, iFoundCount, - rnd); - } - default: - return; - } -} -void CXFA_ResolveProcessor::XFA_ResolveNodes_SetStylesForChild( - FX_DWORD dwParentStyles, - CXFA_ResolveNodesData& rnd) { - FX_DWORD dwSubStyles = XFA_RESOLVENODE_Children; - if (dwParentStyles & XFA_RESOLVENODE_TagName) { - dwSubStyles |= XFA_RESOLVENODE_TagName; - } - dwSubStyles &= ~XFA_RESOLVENODE_Parent; - dwSubStyles &= ~XFA_RESOLVENODE_Siblings; - dwSubStyles &= ~XFA_RESOLVENODE_Properties; - dwSubStyles |= XFA_RESOLVENODE_ALL; - rnd.m_dwStyles = dwSubStyles; -} -int32_t CXFA_ResolveProcessor::XFA_ResolveNode_SetResultCreateNode( - XFA_RESOLVENODE_RS& resolveNodeRS, - CFX_WideString& wsLastCondition) { - if (m_pNodeHelper->m_pCreateParent) { - resolveNodeRS.nodes.Add(m_pNodeHelper->m_pCreateParent); - } else { - m_pNodeHelper->XFA_CreateNode_ForCondition(wsLastCondition); - } - resolveNodeRS.dwFlags = m_pNodeHelper->m_iCreateFlag; - if (resolveNodeRS.dwFlags == XFA_RESOLVENODE_RSTYPE_CreateNodeOne) { - if (m_pNodeHelper->m_iCurAllStart != -1) { - resolveNodeRS.dwFlags = XFA_RESOLVENODE_RSTYPE_CreateNodeMidAll; - } - } - return resolveNodeRS.nodes.GetSize(); -} -void CXFA_ResolveProcessor::XFA_ResolveNode_SetIndexDataBind( - CFX_WideString& wsNextCondition, - int32_t& iIndex, - int32_t iCount) { - if (m_pNodeHelper->XFA_CreateNode_ForCondition(wsNextCondition)) { - if (m_pNodeHelper->m_eLastCreateType == XFA_ELEMENT_DataGroup) { - iIndex = 0; - } else { - iIndex = iCount - 1; - } - } else { - iIndex = iCount - 1; - } -} diff --git a/xfa/src/fxfa/parser/xfa_script_resolveprocessor.h b/xfa/src/fxfa/parser/xfa_script_resolveprocessor.h deleted file mode 100644 index 36e89392da..0000000000 --- a/xfa/src/fxfa/parser/xfa_script_resolveprocessor.h +++ /dev/null @@ -1,86 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXFA_PARSER_XFA_SCRIPT_RESOLVEPROCESSOR_H_ -#define XFA_SRC_FXFA_PARSER_XFA_SCRIPT_RESOLVEPROCESSOR_H_ - -#include "xfa/include/fxfa/fxfa_objectacc.h" -#include "xfa/src/fxfa/parser/xfa_object.h" -#include "xfa/src/fxfa/parser/xfa_script.h" - -class CXFA_NodeHelper; -class CXFA_ScriptContext; - -class CXFA_ResolveNodesData { - public: - CXFA_ResolveNodesData(CXFA_ScriptContext* pSC = NULL) - : m_pSC(pSC), - m_CurNode(NULL), - m_wsName(), - m_uHashName(0), - m_wsCondition(), - m_nLevel(0), - m_Nodes(), - m_dwStyles(XFA_RESOLVENODE_Children), - m_pScriptAttribute(NULL), - m_dwFlag(XFA_RESOVENODE_RSTYPE_Nodes) {} - ~CXFA_ResolveNodesData() { m_Nodes.RemoveAll(); } - CXFA_ScriptContext* m_pSC; - CXFA_Object* m_CurNode; - CFX_WideString m_wsName; - uint32_t m_uHashName; - CFX_WideString m_wsCondition; - int32_t m_nLevel; - CXFA_ObjArray m_Nodes; - FX_DWORD m_dwStyles; - const XFA_SCRIPTATTRIBUTEINFO* m_pScriptAttribute; - XFA_RESOVENODE_RSTYPE m_dwFlag; -}; -class CXFA_ResolveProcessor { - public: - CXFA_ResolveProcessor(void); - ~CXFA_ResolveProcessor(void); - int32_t XFA_ResolveNodes(CXFA_ResolveNodesData& rnd); - int32_t XFA_ResolveNodes_AnyChild(CXFA_ResolveNodesData& rnd); - int32_t XFA_ResolveNodes_Dollar(CXFA_ResolveNodesData& rnd); - int32_t XFA_ResolveNodes_Excalmatory(CXFA_ResolveNodesData& rnd); - int32_t XFA_ResolveNodes_NumberSign(CXFA_ResolveNodesData& rnd); - int32_t XFA_ResolveNodes_Asterisk(CXFA_ResolveNodesData& rnd); - int32_t XFA_ResolveNodes_Normal(CXFA_ResolveNodesData& rnd); - int32_t XFA_ResolveNodes_ForAttributeRs(CXFA_Object* curNode, - CXFA_ResolveNodesData& rnd, - const CFX_WideStringC& strAttr); - void XFA_ResolveNode_ConditionArray(int32_t iCurIndex, - CFX_WideString wsCondition, - int32_t iFoundCount, - CXFA_ResolveNodesData& rnd); - void XFA_ResolveNode_DoPredicateFilter(int32_t iCurIndex, - CFX_WideString wsCondition, - int32_t iFoundCount, - CXFA_ResolveNodesData& rnd); - int32_t XFA_ResolveNodes_GetFilter(const CFX_WideStringC& wsExpression, - int32_t nStart, - CXFA_ResolveNodesData& rnd); - void XFA_ResolveNode_FilterCondition(CXFA_ResolveNodesData& rnd, - CFX_WideString wsCondition); - int32_t XFA_ResolveNodes_PopStack(CFX_Int32Array& stack); - void XFA_ResolveNodes_SetStylesForChild(FX_DWORD dwParentStyles, - CXFA_ResolveNodesData& rnd); - int32_t XFA_ResolveNode_SetResultCreateNode(XFA_RESOLVENODE_RS& resolveNodeRS, - CFX_WideString& wsLastCondition); - void XFA_ResolveNode_SetIndexDataBind(CFX_WideString& wsNextCondition, - int32_t& iIndex, - int32_t iCount); - CXFA_NodeHelper* GetNodeHelper() { return m_pNodeHelper; } - - private: - CXFA_NodeHelper* m_pNodeHelper; - - public: - int32_t m_iCurStart; -}; - -#endif // XFA_SRC_FXFA_PARSER_XFA_SCRIPT_RESOLVEPROCESSOR_H_ diff --git a/xfa/src/fxfa/parser/xfa_script_signaturepseudomodel.cpp b/xfa/src/fxfa/parser/xfa_script_signaturepseudomodel.cpp deleted file mode 100644 index a721338864..0000000000 --- a/xfa/src/fxfa/parser/xfa_script_signaturepseudomodel.cpp +++ /dev/null @@ -1,124 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fxfa/parser/xfa_script_signaturepseudomodel.h" - -#include "xfa/src/fxfa/fm2js/xfa_fm2jsapi.h" -#include "xfa/src/fxfa/parser/xfa_docdata.h" -#include "xfa/src/fxfa/parser/xfa_doclayout.h" -#include "xfa/src/fxfa/parser/xfa_document.h" -#include "xfa/src/fxfa/parser/xfa_localemgr.h" -#include "xfa/src/fxfa/parser/xfa_object.h" -#include "xfa/src/fxfa/parser/xfa_parser.h" -#include "xfa/src/fxfa/parser/xfa_script.h" -#include "xfa/src/fxfa/parser/xfa_utils.h" - -CScript_SignaturePseudoModel::CScript_SignaturePseudoModel( - CXFA_Document* pDocument) - : CXFA_OrdinaryObject(pDocument, XFA_ELEMENT_SignaturePseudoModel) { - m_uScriptHash = XFA_HASHCODE_Signature; -} -CScript_SignaturePseudoModel::~CScript_SignaturePseudoModel() {} -void CScript_SignaturePseudoModel::Script_SignaturePseudoModel_Verify( - CFXJSE_Arguments* pArguments) { - int32_t iLength = pArguments->GetLength(); - if (iLength < 1 || iLength > 4) { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"verify"); - return; - } - IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); - if (!pNotify) { - return; - } - IXFA_Doc* hDoc = pNotify->GetHDOC(); - CXFA_Node* pNode = NULL; - if (iLength >= 1) { - pNode = static_cast(pArguments->GetObject(0)); - } - int32_t bVerify = pNotify->GetDocProvider()->Verify(hDoc, pNode); - FXJSE_HVALUE hValue = pArguments->GetReturnValue(); - if (hValue) { - FXJSE_Value_SetInteger(hValue, bVerify); - } -} -void CScript_SignaturePseudoModel::Script_SignaturePseudoModel_Sign( - CFXJSE_Arguments* pArguments) { - int32_t iLength = pArguments->GetLength(); - if (iLength < 3 || iLength > 7) { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"sign"); - return; - } - IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); - if (!pNotify) { - return; - } - IXFA_Doc* hDoc = pNotify->GetHDOC(); - CXFA_NodeList* pNodeList = NULL; - CFX_WideString wsExpression; - CFX_WideString wsXMLIdent; - if (iLength >= 1) { - pNodeList = (CXFA_NodeList*)pArguments->GetObject(0); - } - if (iLength >= 2) { - CFX_ByteString bsExpression = pArguments->GetUTF8String(1); - wsExpression = - CFX_WideString::FromUTF8(bsExpression, bsExpression.GetLength()); - } - if (iLength >= 3) { - CFX_ByteString bsXMLIdent = pArguments->GetUTF8String(2); - wsXMLIdent = CFX_WideString::FromUTF8(bsXMLIdent, bsXMLIdent.GetLength()); - } - FX_BOOL bSign = pNotify->GetDocProvider()->Sign(hDoc, pNodeList, wsExpression, - wsXMLIdent); - FXJSE_HVALUE hValue = pArguments->GetReturnValue(); - if (hValue) { - FXJSE_Value_SetBoolean(hValue, bSign); - } -} -void CScript_SignaturePseudoModel::Script_SignaturePseudoModel_Enumerate( - CFXJSE_Arguments* pArguments) { - int32_t iLength = pArguments->GetLength(); - if (iLength != 0) { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"enumerate"); - return; - } - IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); - if (!pNotify) { - return; - } - IXFA_Doc* hDoc = pNotify->GetHDOC(); - CXFA_NodeList* pList = pNotify->GetDocProvider()->Enumerate(hDoc); - if (!pList) - return; - FXJSE_Value_Set(pArguments->GetReturnValue(), - m_pDocument->GetScriptContext()->GetJSValueFromMap(pList)); -} -void CScript_SignaturePseudoModel::Script_SignaturePseudoModel_Clear( - CFXJSE_Arguments* pArguments) { - int32_t iLength = pArguments->GetLength(); - if (iLength < 1 || iLength > 2) { - ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"clear"); - return; - } - IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); - if (!pNotify) { - return; - } - IXFA_Doc* hDoc = pNotify->GetHDOC(); - CXFA_Node* pNode = NULL; - FX_BOOL bClear = TRUE; - if (iLength >= 1) { - pNode = static_cast(pArguments->GetObject(0)); - } - if (iLength >= 2) { - bClear = pArguments->GetInt32(1) == 0 ? FALSE : TRUE; - } - FX_BOOL bFlag = pNotify->GetDocProvider()->Clear(hDoc, pNode, bClear); - FXJSE_HVALUE hValue = pArguments->GetReturnValue(); - if (hValue) { - FXJSE_Value_SetBoolean(hValue, bFlag); - } -} diff --git a/xfa/src/fxfa/parser/xfa_script_signaturepseudomodel.h b/xfa/src/fxfa/parser/xfa_script_signaturepseudomodel.h deleted file mode 100644 index f7c64971d0..0000000000 --- a/xfa/src/fxfa/parser/xfa_script_signaturepseudomodel.h +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXFA_PARSER_XFA_SCRIPT_SIGNATUREPSEUDOMODEL_H_ -#define XFA_SRC_FXFA_PARSER_XFA_SCRIPT_SIGNATUREPSEUDOMODEL_H_ - -#include "xfa/src/fxfa/parser/xfa_object.h" - -class CScript_SignaturePseudoModel : public CXFA_OrdinaryObject { - public: - CScript_SignaturePseudoModel(CXFA_Document* pDocument); - ~CScript_SignaturePseudoModel(); - void Script_SignaturePseudoModel_Verify(CFXJSE_Arguments* pArguments); - void Script_SignaturePseudoModel_Sign(CFXJSE_Arguments* pArguments); - void Script_SignaturePseudoModel_Enumerate(CFXJSE_Arguments* pArguments); - void Script_SignaturePseudoModel_Clear(CFXJSE_Arguments* pArguments); -}; - -#endif // XFA_SRC_FXFA_PARSER_XFA_SCRIPT_SIGNATUREPSEUDOMODEL_H_ diff --git a/xfa/src/fxfa/parser/xfa_utils.h b/xfa/src/fxfa/parser/xfa_utils.h deleted file mode 100644 index 497cb29cc4..0000000000 --- a/xfa/src/fxfa/parser/xfa_utils.h +++ /dev/null @@ -1,219 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXFA_PARSER_XFA_UTILS_H_ -#define XFA_SRC_FXFA_PARSER_XFA_UTILS_H_ - -#include "xfa/include/fxfa/fxfa_basic.h" -#include "xfa/src/fde/xml/fde_xml.h" - -class CXFA_LocaleValue; - -FX_BOOL XFA_FDEExtension_ResolveNamespaceQualifier( - IFDE_XMLElement* pNode, - const CFX_WideStringC& wsQualifier, - CFX_WideString& wsNamespaceURI); -template -class CXFA_NodeIteratorTemplate { - public: - CXFA_NodeIteratorTemplate(NodeType* pRootNode = NULL) : m_pRoot(pRootNode) { - if (pRootNode) { - m_NodeStack.Push(pRootNode); - } - } - FX_BOOL Init(NodeType* pRootNode) { - if (!pRootNode) { - return FALSE; - } - m_pRoot = pRootNode; - m_NodeStack.RemoveAll(); - m_NodeStack.Push(pRootNode); - return TRUE; - } - void Clear() { m_NodeStack.RemoveAll(); } - void Reset() { - Clear(); - if (m_pRoot) { - m_NodeStack.Push(m_pRoot); - } - } - FX_BOOL SetCurrent(NodeType* pCurNode) { - m_NodeStack.RemoveAll(); - if (pCurNode) { - CFX_StackTemplate revStack; - NodeType* pNode; - for (pNode = pCurNode; pNode && pNode != m_pRoot; - pNode = TraverseStrategy::GetParent(pNode)) { - revStack.Push(pNode); - } - if (!pNode) { - return FALSE; - } - revStack.Push(m_pRoot); - while (revStack.GetSize()) { - m_NodeStack.Push(*revStack.GetTopElement()); - revStack.Pop(); - } - } - return TRUE; - } - NodeType* GetCurrent() const { - return m_NodeStack.GetSize() ? *m_NodeStack.GetTopElement() : NULL; - } - NodeType* GetRoot() const { return m_pRoot; } - NodeType* MoveToPrev() { - int32_t nStackLength = m_NodeStack.GetSize(); - if (nStackLength == 1) { - return NULL; - } else if (nStackLength > 1) { - NodeType* pCurItem = *m_NodeStack.GetTopElement(); - m_NodeStack.Pop(); - NodeType* pParentItem = *m_NodeStack.GetTopElement(); - NodeType* pParentFirstChildItem = - TraverseStrategy::GetFirstChild(pParentItem); - if (pCurItem == pParentFirstChildItem) { - return pParentItem; - } - NodeType *pPrevItem = pParentFirstChildItem, *pPrevItemNext = NULL; - for (; pPrevItem; pPrevItem = pPrevItemNext) { - pPrevItemNext = TraverseStrategy::GetNextSibling(pPrevItem); - if (!pPrevItemNext || pPrevItemNext == pCurItem) { - break; - } - } - m_NodeStack.Push(pPrevItem); - } else { - m_NodeStack.RemoveAll(); - if (m_pRoot) { - m_NodeStack.Push(m_pRoot); - } - } - if (m_NodeStack.GetSize() > 0) { - NodeType* pChildItem = *m_NodeStack.GetTopElement(); - while ((pChildItem = TraverseStrategy::GetFirstChild(pChildItem)) != - NULL) { - while (NodeType* pNextItem = - TraverseStrategy::GetNextSibling(pChildItem)) { - pChildItem = pNextItem; - } - m_NodeStack.Push(pChildItem); - } - return *m_NodeStack.GetTopElement(); - } - return NULL; - } - NodeType* MoveToNext() { - NodeType** ppNode = NULL; - NodeType* pCurrent = GetCurrent(); - while (m_NodeStack.GetSize() > 0) { - while ((ppNode = m_NodeStack.GetTopElement())) { - if (pCurrent != *ppNode) { - return *ppNode; - } - NodeType* pChild = TraverseStrategy::GetFirstChild(*ppNode); - if (pChild == NULL) { - break; - } - m_NodeStack.Push(pChild); - } - while ((ppNode = m_NodeStack.GetTopElement())) { - NodeType* pNext = TraverseStrategy::GetNextSibling(*ppNode); - m_NodeStack.Pop(); - if (m_NodeStack.GetSize() == 0) { - break; - } - if (pNext) { - m_NodeStack.Push(pNext); - break; - } - } - } - return NULL; - } - NodeType* SkipChildrenAndMoveToNext() { - NodeType** ppNode = NULL; - while ((ppNode = m_NodeStack.GetTopElement())) { - NodeType* pNext = TraverseStrategy::GetNextSibling(*ppNode); - m_NodeStack.Pop(); - if (m_NodeStack.GetSize() == 0) { - break; - } - if (pNext) { - m_NodeStack.Push(pNext); - break; - } - } - return GetCurrent(); - } - - protected: - NodeType* m_pRoot; - CFX_StackTemplate m_NodeStack; -}; -template -class CXFA_PtrSetTemplate : private CFX_MapPtrToPtr { - public: - CXFA_PtrSetTemplate() : CFX_MapPtrToPtr(10) {} - - int GetCount() const { return CFX_MapPtrToPtr::GetCount(); } - - FX_BOOL IsEmpty() const { return CFX_MapPtrToPtr::IsEmpty(); } - - FX_BOOL Lookup(KeyType key) const { - void* pValue = NULL; - return CFX_MapPtrToPtr::Lookup((void*)key, pValue); - } - - FX_BOOL operator[](KeyType key) { return Lookup(key); } - - void Add(KeyType key) { CFX_MapPtrToPtr::SetAt((void*)key, (void*)key); } - - FX_BOOL RemoveKey(KeyType key) { - return CFX_MapPtrToPtr::RemoveKey((void*)key); - } - - void RemoveAll() { CFX_MapPtrToPtr::RemoveAll(); } - - FX_POSITION GetStartPosition() const { - return CFX_MapPtrToPtr::GetStartPosition(); - } - - void GetNextAssoc(FX_POSITION& rNextPosition, KeyType& rKey) const { - void* pKey = NULL; - void* pValue = NULL; - CFX_MapPtrToPtr::GetNextAssoc(rNextPosition, pKey, pValue); - rKey = (KeyType)(uintptr_t)pKey; - } -}; -class CXFA_Node; -class CXFA_WidgetData; - -CXFA_Node* XFA_CreateUIChild(CXFA_Node* pNode, XFA_ELEMENT& eWidgetType); -CXFA_LocaleValue XFA_GetLocaleValue(CXFA_WidgetData* pWidgetData); -CFX_WideString XFA_NumericLimit(const CFX_WideString& wsValue, - int32_t iLead, - int32_t iTread); -FX_DOUBLE XFA_WideStringToDouble(const CFX_WideString& wsStringVal); -FX_DOUBLE XFA_ByteStringToDouble(const CFX_ByteStringC& szStringVal); -int32_t XFA_MapRotation(int32_t nRotation); - -FX_BOOL XFA_RecognizeRichText(IFDE_XMLElement* pRichTextXMLNode); -void XFA_GetPlainTextFromRichText(IFDE_XMLNode* pXMLNode, - CFX_WideString& wsPlainText); -FX_BOOL XFA_FieldIsMultiListBox(CXFA_Node* pFieldNode); -IFX_Stream* XFA_CreateWideTextRead(const CFX_WideString& wsBuffer); -FX_BOOL XFA_IsLayoutElement(XFA_ELEMENT eElement, - FX_BOOL bLayoutContainer = FALSE); -FX_BOOL XFA_IsTakingupSpace(XFA_ATTRIBUTEENUM ePresence); -FX_BOOL XFA_IsFlowingLayout(XFA_ATTRIBUTEENUM eLayout); -FX_BOOL XFA_IsHorizontalFlow(XFA_ATTRIBUTEENUM eLayout); -void XFA_DataExporter_DealWithDataGroupNode(CXFA_Node* pDataNode); -void XFA_DataExporter_RegenerateFormFile(CXFA_Node* pNode, - IFX_Stream* pStream, - const FX_CHAR* pChecksum = NULL, - FX_BOOL bSaveXML = FALSE); - -#endif // XFA_SRC_FXFA_PARSER_XFA_UTILS_H_ diff --git a/xfa/src/fxfa/parser/xfa_utils_imp.cpp b/xfa/src/fxfa/parser/xfa_utils_imp.cpp deleted file mode 100644 index 32f5ce125f..0000000000 --- a/xfa/src/fxfa/parser/xfa_utils_imp.cpp +++ /dev/null @@ -1,403 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fxfa/parser/xfa_utils.h" - -#include "core/include/fxcrt/fx_ext.h" -#include "xfa/src/fxfa/fm2js/xfa_fm2jsapi.h" -#include "xfa/src/fxfa/parser/xfa_docdata.h" -#include "xfa/src/fxfa/parser/xfa_doclayout.h" -#include "xfa/src/fxfa/parser/xfa_document.h" -#include "xfa/src/fxfa/parser/xfa_localemgr.h" -#include "xfa/src/fxfa/parser/xfa_localevalue.h" -#include "xfa/src/fxfa/parser/xfa_object.h" -#include "xfa/src/fxfa/parser/xfa_parser.h" -#include "xfa/src/fxfa/parser/xfa_script.h" - -CXFA_Node* XFA_CreateUIChild(CXFA_Node* pNode, XFA_ELEMENT& eWidgetType) { - XFA_ELEMENT eType = pNode->GetClassID(); - eWidgetType = eType; - if (eType != XFA_ELEMENT_Field && eType != XFA_ELEMENT_Draw) { - return NULL; - } - eWidgetType = XFA_ELEMENT_UNKNOWN; - XFA_ELEMENT eUIType = XFA_ELEMENT_UNKNOWN; - CXFA_Value defValue(pNode->GetProperty(0, XFA_ELEMENT_Value, TRUE)); - XFA_ELEMENT eValueType = (XFA_ELEMENT)defValue.GetChildValueClassID(); - switch (eValueType) { - case XFA_ELEMENT_Boolean: - eUIType = XFA_ELEMENT_CheckButton; - break; - case XFA_ELEMENT_Integer: - case XFA_ELEMENT_Decimal: - case XFA_ELEMENT_Float: - eUIType = XFA_ELEMENT_NumericEdit; - break; - case XFA_ELEMENT_ExData: - case XFA_ELEMENT_Text: - eUIType = XFA_ELEMENT_TextEdit; - eWidgetType = XFA_ELEMENT_Text; - break; - case XFA_ELEMENT_Date: - case XFA_ELEMENT_Time: - case XFA_ELEMENT_DateTime: - eUIType = XFA_ELEMENT_DateTimeEdit; - break; - case XFA_ELEMENT_Image: - eUIType = XFA_ELEMENT_ImageEdit; - eWidgetType = XFA_ELEMENT_Image; - break; - case XFA_ELEMENT_Arc: - case XFA_ELEMENT_Line: - case XFA_ELEMENT_Rectangle: - eUIType = XFA_ELEMENT_DefaultUi; - eWidgetType = eValueType; - break; - default: - break; - } - CXFA_Node* pUIChild = NULL; - CXFA_Node* pUI = pNode->GetProperty(0, XFA_ELEMENT_Ui, TRUE); - CXFA_Node* pChild = pUI->GetNodeItem(XFA_NODEITEM_FirstChild); - for (; pChild; pChild = pChild->GetNodeItem(XFA_NODEITEM_NextSibling)) { - XFA_ELEMENT eChild = pChild->GetClassID(); - if (eChild == XFA_ELEMENT_Extras || eChild == XFA_ELEMENT_Picture) { - continue; - } - const XFA_PROPERTY* pProperty = - XFA_GetPropertyOfElement(XFA_ELEMENT_Ui, eChild, XFA_XDPPACKET_Form); - if (pProperty && (pProperty->uFlags & XFA_PROPERTYFLAG_OneOf)) { - pUIChild = pChild; - break; - } - } - if (eType == XFA_ELEMENT_Draw) { - XFA_ELEMENT eDraw = pUIChild ? pUIChild->GetClassID() : XFA_ELEMENT_UNKNOWN; - switch (eDraw) { - case XFA_ELEMENT_TextEdit: - eWidgetType = XFA_ELEMENT_Text; - break; - case XFA_ELEMENT_ImageEdit: - eWidgetType = XFA_ELEMENT_Image; - break; - default: - eWidgetType = - eWidgetType == XFA_ELEMENT_UNKNOWN ? XFA_ELEMENT_Text : eWidgetType; - break; - } - } else { - if (pUIChild && pUIChild->GetClassID() == XFA_ELEMENT_DefaultUi) { - eWidgetType = XFA_ELEMENT_TextEdit; - } else { - eWidgetType = pUIChild - ? pUIChild->GetClassID() - : (eUIType == XFA_ELEMENT_UNKNOWN ? XFA_ELEMENT_TextEdit - : eUIType); - } - } - if (!pUIChild) { - if (eUIType == XFA_ELEMENT_UNKNOWN) { - eUIType = XFA_ELEMENT_TextEdit; - defValue.GetNode()->GetProperty(0, XFA_ELEMENT_Text, TRUE); - } - pUIChild = pUI->GetProperty(0, eUIType, TRUE); - } else if (eUIType == XFA_ELEMENT_UNKNOWN) { - switch (pUIChild->GetClassID()) { - case XFA_ELEMENT_CheckButton: { - eValueType = XFA_ELEMENT_Text; - if (CXFA_Node* pItems = pNode->GetChild(0, XFA_ELEMENT_Items)) { - if (CXFA_Node* pItem = pItems->GetChild(0, XFA_ELEMENT_UNKNOWN)) { - eValueType = pItem->GetClassID(); - } - } - } break; - case XFA_ELEMENT_DateTimeEdit: - eValueType = XFA_ELEMENT_DateTime; - break; - case XFA_ELEMENT_ImageEdit: - eValueType = XFA_ELEMENT_Image; - break; - case XFA_ELEMENT_NumericEdit: - eValueType = XFA_ELEMENT_Float; - break; - case XFA_ELEMENT_ChoiceList: { - eValueType = (pUIChild->GetEnum(XFA_ATTRIBUTE_Open) == - XFA_ATTRIBUTEENUM_MultiSelect) - ? XFA_ELEMENT_ExData - : XFA_ELEMENT_Text; - } break; - case XFA_ELEMENT_Barcode: - case XFA_ELEMENT_Button: - case XFA_ELEMENT_PasswordEdit: - case XFA_ELEMENT_Signature: - case XFA_ELEMENT_TextEdit: - default: - eValueType = XFA_ELEMENT_Text; - break; - } - defValue.GetNode()->GetProperty(0, eValueType, TRUE); - } - return pUIChild; -} -CXFA_LocaleValue XFA_GetLocaleValue(CXFA_WidgetData* pWidgetData) { - CXFA_Node* pNodeValue = - pWidgetData->GetNode()->GetChild(0, XFA_ELEMENT_Value); - if (!pNodeValue) { - return CXFA_LocaleValue(); - } - CXFA_Node* pValueChild = pNodeValue->GetNodeItem(XFA_NODEITEM_FirstChild); - if (!pValueChild) { - return CXFA_LocaleValue(); - } - int32_t iVTType = XFA_VT_NULL; - XFA_ELEMENT eType = pValueChild->GetClassID(); - switch (eType) { - case XFA_ELEMENT_Decimal: - iVTType = XFA_VT_DECIMAL; - break; - case XFA_ELEMENT_Float: - iVTType = XFA_VT_FLOAT; - break; - case XFA_ELEMENT_Date: - iVTType = XFA_VT_DATE; - break; - case XFA_ELEMENT_Time: - iVTType = XFA_VT_TIME; - break; - case XFA_ELEMENT_DateTime: - iVTType = XFA_VT_DATETIME; - break; - case XFA_ELEMENT_Boolean: - iVTType = XFA_VT_BOOLEAN; - break; - case XFA_ELEMENT_Integer: - iVTType = XFA_VT_INTEGER; - break; - case XFA_ELEMENT_Text: - iVTType = XFA_VT_TEXT; - break; - default: - iVTType = XFA_VT_NULL; - break; - } - return CXFA_LocaleValue(iVTType, pWidgetData->GetRawValue(), - pWidgetData->GetNode()->GetDocument()->GetLocalMgr()); -} -void XFA_GetPlainTextFromRichText(IFDE_XMLNode* pXMLNode, - CFX_WideString& wsPlainText) { - if (pXMLNode == NULL) { - return; - } - switch (pXMLNode->GetType()) { - case FDE_XMLNODE_Element: { - IFDE_XMLElement* pXMLElement = (IFDE_XMLElement*)pXMLNode; - CFX_WideString wsTag; - pXMLElement->GetLocalTagName(wsTag); - uint32_t uTag = FX_HashCode_String_GetW(wsTag, wsTag.GetLength(), TRUE); - if (uTag == 0x0001f714) { - wsPlainText += L"\n"; - } else if (uTag == 0x00000070) { - if (!wsPlainText.IsEmpty()) { - wsPlainText += L"\n"; - } - } else if (uTag == 0xa48ac63) { - if (!wsPlainText.IsEmpty() && - wsPlainText[wsPlainText.GetLength() - 1] != '\n') { - wsPlainText += L"\n"; - } - } - } break; - case FDE_XMLNODE_Text: { - CFX_WideString wsContent; - ((IFDE_XMLText*)pXMLNode)->GetText(wsContent); - wsPlainText += wsContent; - } break; - case FDE_XMLNODE_CharData: { - CFX_WideString wsCharData; - ((IFDE_XMLCharData*)pXMLNode)->GetCharData(wsCharData); - wsPlainText += wsCharData; - } break; - default: - break; - } - for (IFDE_XMLNode* pChildXML = - pXMLNode->GetNodeItem(IFDE_XMLNode::FirstChild); - pChildXML; - pChildXML = pChildXML->GetNodeItem(IFDE_XMLNode::NextSibling)) { - XFA_GetPlainTextFromRichText(pChildXML, wsPlainText); - } -} -FX_BOOL XFA_FieldIsMultiListBox(CXFA_Node* pFieldNode) { - FX_BOOL bRet = FALSE; - if (!pFieldNode) { - return bRet; - } - CXFA_Node* pUIChild = pFieldNode->GetChild(0, XFA_ELEMENT_Ui); - if (pUIChild) { - CXFA_Node* pFirstChild = pUIChild->GetNodeItem(XFA_NODEITEM_FirstChild); - if (pFirstChild && pFirstChild->GetClassID() == XFA_ELEMENT_ChoiceList) { - bRet = pFirstChild->GetEnum(XFA_ATTRIBUTE_Open) == - XFA_ATTRIBUTEENUM_MultiSelect; - } - } - return bRet; -} -FX_BOOL XFA_IsLayoutElement(XFA_ELEMENT eElement, FX_BOOL bLayoutContainer) { - switch (eElement) { - case XFA_ELEMENT_Draw: - case XFA_ELEMENT_Field: - case XFA_ELEMENT_InstanceManager: - return !bLayoutContainer; - case XFA_ELEMENT_Area: - case XFA_ELEMENT_Subform: - case XFA_ELEMENT_ExclGroup: - case XFA_ELEMENT_SubformSet: - return TRUE; - case XFA_ELEMENT_PageArea: - case XFA_ELEMENT_Form: - return TRUE; - default: - return FALSE; - } - return FALSE; -} -FX_BOOL XFA_IsTakingupSpace(XFA_ATTRIBUTEENUM ePresence) { - switch (ePresence) { - case XFA_ATTRIBUTEENUM_Visible: - case XFA_ATTRIBUTEENUM_Invisible: - return TRUE; - default: - return FALSE; - } - return FALSE; -} -FX_BOOL XFA_IsFlowingLayout(XFA_ATTRIBUTEENUM eLayout) { - switch (eLayout) { - case XFA_ATTRIBUTEENUM_Tb: - case XFA_ATTRIBUTEENUM_Lr_tb: - case XFA_ATTRIBUTEENUM_Rl_tb: - return TRUE; - default: - return FALSE; - } - return FALSE; -} -FX_BOOL XFA_IsHorizontalFlow(XFA_ATTRIBUTEENUM eLayout) { - switch (eLayout) { - case XFA_ATTRIBUTEENUM_Lr_tb: - case XFA_ATTRIBUTEENUM_Rl_tb: - return TRUE; - default: - return FALSE; - } - return FALSE; -} -static const FX_DOUBLE fraction_scales[] = {0.1, - 0.01, - 0.001, - 0.0001, - 0.00001, - 0.000001, - 0.0000001, - 0.00000001, - 0.000000001, - 0.0000000001, - 0.00000000001, - 0.000000000001, - 0.0000000000001, - 0.00000000000001, - 0.000000000000001, - 0.0000000000000001}; -FX_DOUBLE XFA_WideStringToDouble(const CFX_WideString& wsStringVal) { - CFX_WideString wsValue = wsStringVal; - wsValue.TrimLeft(); - wsValue.TrimRight(); - int64_t nIntegral = 0; - FX_DWORD dwFractional = 0; - int32_t nExponent = 0; - int32_t cc = 0; - FX_BOOL bNegative = FALSE, bExpSign = FALSE; - const FX_WCHAR* str = (const FX_WCHAR*)wsValue; - int32_t len = wsValue.GetLength(); - if (str[0] == '+') { - cc++; - } else if (str[0] == '-') { - bNegative = TRUE; - cc++; - } - int32_t nIntegralLen = 0; - while (cc < len) { - if (str[cc] == '.' || str[cc] == 'E' || str[cc] == 'e' || - nIntegralLen > 17) { - break; - } - if (!XFA_IsDigit(str[cc])) { - return 0; - } - nIntegral = nIntegral * 10 + str[cc] - '0'; - cc++; - nIntegralLen++; - } - nIntegral = bNegative ? -nIntegral : nIntegral; - int32_t scale = 0; - FX_DOUBLE fraction = 0.0; - if (cc < len && str[cc] == '.') { - cc++; - while (cc < len) { - fraction += fraction_scales[scale] * (str[cc] - '0'); - scale++; - cc++; - if (cc == len) { - break; - } - if (scale == sizeof(fraction_scales) / sizeof(FX_DOUBLE) || - str[cc] == 'E' || str[cc] == 'e') { - break; - } - if (!XFA_IsDigit(str[cc])) { - return 0; - } - } - dwFractional = (FX_DWORD)(fraction * 4294967296.0); - } - if (cc < len && (str[cc] == 'E' || str[cc] == 'e')) { - cc++; - if (cc < len) { - if (str[cc] == '+') { - cc++; - } else if (str[cc] == '-') { - bExpSign = TRUE; - cc++; - } - } - while (cc < len) { - if (str[cc] == '.' || !XFA_IsDigit(str[cc])) { - return 0; - } - nExponent = nExponent * 10 + str[cc] - '0'; - cc++; - } - nExponent = bExpSign ? -nExponent : nExponent; - } - FX_DOUBLE dValue = (dwFractional / 4294967296.0); - dValue = nIntegral + (nIntegral >= 0 ? dValue : -dValue); - if (nExponent != 0) { - dValue *= FXSYS_pow(10, (FX_FLOAT)nExponent); - } - return dValue; -} - -FX_DOUBLE XFA_ByteStringToDouble(const CFX_ByteStringC& szStringVal) { - CFX_WideString wsValue = - CFX_WideString::FromUTF8(szStringVal.GetCStr(), szStringVal.GetLength()); - return XFA_WideStringToDouble(wsValue); -} - -int32_t XFA_MapRotation(int32_t nRotation) { - nRotation = nRotation % 360; - nRotation = nRotation < 0 ? nRotation + 360 : nRotation; - return nRotation; -} diff --git a/xfa/src/fxfa/parser/xfa_utils_imp_unittest.cpp b/xfa/src/fxfa/parser/xfa_utils_imp_unittest.cpp deleted file mode 100644 index d5f0e4a923..0000000000 --- a/xfa/src/fxfa/parser/xfa_utils_imp_unittest.cpp +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "testing/gtest/include/gtest/gtest.h" -#include "xfa/src/fxfa/parser/xfa_utils.h" - -TEST(XfaUtilsImp, XFA_MapRotation) { - struct TestCase { - int input; - int expected_output; - } TestCases[] = {{-1000000, 80}, {-361, 359}, {-360, 0}, {-359, 1}, - {-91, 269}, {-90, 270}, {-89, 271}, {-1, 359}, - {0, 0}, {1, 1}, {89, 89}, {90, 90}, - {91, 91}, {359, 359}, {360, 0}, {361, 1}, - {100000, 280}}; - - for (size_t i = 0; i < FX_ArraySize(TestCases); ++i) { - EXPECT_EQ(TestCases[i].expected_output, - XFA_MapRotation(TestCases[i].input)); - } -} diff --git a/xfa/src/fxgraphics/fx_graphics.cpp b/xfa/src/fxgraphics/fx_graphics.cpp deleted file mode 100644 index 249c72e73f..0000000000 --- a/xfa/src/fxgraphics/fx_graphics.cpp +++ /dev/null @@ -1,1548 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/include/fxgraphics/fx_graphics.h" - -#include - -#include "xfa/src/fxgraphics/fx_path_generator.h" -#include "xfa/src/fxgraphics/pre.h" - -class CAGG_Graphics { - public: - CAGG_Graphics(); - FX_ERR Create(CFX_Graphics* owner, - int32_t width, - int32_t height, - FXDIB_Format format); - virtual ~CAGG_Graphics(); - - private: - CFX_Graphics* _owner; -}; -CFX_Graphics::CFX_Graphics() { - _type = FX_CONTEXT_None; - _info._graphState.SetDashCount(0); - _info._isAntialiasing = TRUE; - _info._strokeAlignment = FX_STROKEALIGNMENT_Center; - _info._CTM.SetIdentity(); - _info._isActOnDash = FALSE; - _info._strokeColor = NULL; - _info._fillColor = NULL; - _info._font = NULL; - _info._fontSize = 40.0; - _info._fontHScale = 1.0; - _info._fontSpacing = 0.0; - _renderDevice = NULL; - _aggGraphics = NULL; -} -FX_ERR CFX_Graphics::Create(CFX_RenderDevice* renderDevice, - FX_BOOL isAntialiasing) { - if (!renderDevice) - return FX_ERR_Parameter_Invalid; - if (_type != FX_CONTEXT_None) { - return FX_ERR_Property_Invalid; - } - _type = FX_CONTEXT_Device; - _info._isAntialiasing = isAntialiasing; - _renderDevice = renderDevice; - if (_renderDevice->GetDeviceCaps(FXDC_RENDER_CAPS) & FXRC_SOFT_CLIP) { - return FX_ERR_Succeeded; - } - return FX_ERR_Indefinite; -} -FX_ERR CFX_Graphics::Create(int32_t width, - int32_t height, - FXDIB_Format format, - FX_BOOL isNative, - FX_BOOL isAntialiasing) { - if (_type != FX_CONTEXT_None) { - return FX_ERR_Property_Invalid; - } - _type = FX_CONTEXT_Device; - _info._isAntialiasing = isAntialiasing; - { - _aggGraphics = new CAGG_Graphics; - return _aggGraphics->Create(this, width, height, format); - } -} -CFX_Graphics::~CFX_Graphics() { - if (_aggGraphics) { - delete _aggGraphics; - _aggGraphics = NULL; - } - _renderDevice = NULL; - _info._graphState.SetDashCount(0); - _type = FX_CONTEXT_None; -} -FX_ERR CFX_Graphics::GetDeviceCap(const int32_t capID, FX_DeviceCap& capVal) { - switch (_type) { - case FX_CONTEXT_Device: { - if (!_renderDevice) - return FX_ERR_Property_Invalid; - capVal = _renderDevice->GetDeviceCaps(capID); - return FX_ERR_Succeeded; - } - default: { return FX_ERR_Property_Invalid; } - } -} -FX_ERR CFX_Graphics::IsPrinterDevice(FX_BOOL& isPrinter) { - switch (_type) { - case FX_CONTEXT_Device: { - if (!_renderDevice) - return FX_ERR_Property_Invalid; - int32_t deviceClass = _renderDevice->GetDeviceClass(); - if (deviceClass == FXDC_PRINTER) { - isPrinter = TRUE; - } else { - isPrinter = FALSE; - } - return FX_ERR_Succeeded; - } - default: { return FX_ERR_Property_Invalid; } - } -} -FX_ERR CFX_Graphics::EnableAntialiasing(FX_BOOL isAntialiasing) { - switch (_type) { - case FX_CONTEXT_Device: { - if (!_renderDevice) - return FX_ERR_Property_Invalid; - _info._isAntialiasing = isAntialiasing; - return FX_ERR_Succeeded; - } - default: { return FX_ERR_Property_Invalid; } - } -} -FX_ERR CFX_Graphics::SaveGraphState() { - switch (_type) { - case FX_CONTEXT_Device: { - if (!_renderDevice) - return FX_ERR_Property_Invalid; - _renderDevice->SaveState(); - TInfo* info = new TInfo; - info->_graphState.Copy(_info._graphState); - info->_isAntialiasing = _info._isAntialiasing; - info->_strokeAlignment = _info._strokeAlignment; - info->_CTM = _info._CTM; - info->_isActOnDash = _info._isActOnDash; - info->_strokeColor = _info._strokeColor; - info->_fillColor = _info._fillColor; - info->_font = _info._font; - info->_fontSize = _info._fontSize; - info->_fontHScale = _info._fontHScale; - info->_fontSpacing = _info._fontSpacing; - _infoStack.Add(info); - return FX_ERR_Succeeded; - } - default: { return FX_ERR_Property_Invalid; } - } -} -FX_ERR CFX_Graphics::RestoreGraphState() { - switch (_type) { - case FX_CONTEXT_Device: { - if (!_renderDevice) - return FX_ERR_Property_Invalid; - _renderDevice->RestoreState(); - int32_t size = _infoStack.GetSize(); - if (size <= 0) { - return FX_ERR_Intermediate_Value_Invalid; - } - int32_t topIndex = size - 1; - TInfo* info = (TInfo*)_infoStack.GetAt(topIndex); - if (!info) - return FX_ERR_Intermediate_Value_Invalid; - _info._graphState.Copy(info->_graphState); - _info._isAntialiasing = info->_isAntialiasing; - _info._strokeAlignment = info->_strokeAlignment; - _info._CTM = info->_CTM; - _info._isActOnDash = info->_isActOnDash; - _info._strokeColor = info->_strokeColor; - _info._fillColor = info->_fillColor; - _info._font = info->_font; - _info._fontSize = info->_fontSize; - _info._fontHScale = info->_fontHScale; - _info._fontSpacing = info->_fontSpacing; - delete info; - info = NULL; - _infoStack.RemoveAt(topIndex); - return FX_ERR_Succeeded; - } - default: { return FX_ERR_Property_Invalid; } - } -} -FX_ERR CFX_Graphics::GetLineCap(CFX_GraphStateData::LineCap& lineCap) { - switch (_type) { - case FX_CONTEXT_Device: { - if (!_renderDevice) - return FX_ERR_Property_Invalid; - lineCap = _info._graphState.m_LineCap; - return FX_ERR_Succeeded; - } - default: { return FX_ERR_Property_Invalid; } - } -} -FX_ERR CFX_Graphics::SetLineCap(CFX_GraphStateData::LineCap lineCap) { - switch (_type) { - case FX_CONTEXT_Device: { - if (!_renderDevice) - return FX_ERR_Property_Invalid; - _info._graphState.m_LineCap = lineCap; - return FX_ERR_Succeeded; - } - default: { return FX_ERR_Property_Invalid; } - } -} -FX_ERR CFX_Graphics::GetDashCount(int32_t& dashCount) { - switch (_type) { - case FX_CONTEXT_Device: { - if (!_renderDevice) - return FX_ERR_Property_Invalid; - dashCount = _info._graphState.m_DashCount; - return FX_ERR_Succeeded; - } - default: { return FX_ERR_Property_Invalid; } - } -} -FX_ERR CFX_Graphics::GetLineDash(FX_FLOAT& dashPhase, FX_FLOAT* dashArray) { - if (!dashArray) - return FX_ERR_Parameter_Invalid; - switch (_type) { - case FX_CONTEXT_Device: { - if (!_renderDevice) - return FX_ERR_Property_Invalid; - dashPhase = _info._graphState.m_DashPhase; - FXSYS_memcpy(dashArray, _info._graphState.m_DashArray, - _info._graphState.m_DashCount * sizeof(FX_FLOAT)); - return FX_ERR_Succeeded; - } - default: { return FX_ERR_Property_Invalid; } - } -} -FX_ERR CFX_Graphics::SetLineDash(FX_FLOAT dashPhase, - FX_FLOAT* dashArray, - int32_t dashCount) { - if (dashCount > 0 && !dashArray) { - return FX_ERR_Parameter_Invalid; - } - dashCount = dashCount < 0 ? 0 : dashCount; - switch (_type) { - case FX_CONTEXT_Device: { - if (!_renderDevice) - return FX_ERR_Property_Invalid; - FX_FLOAT scale = 1.0; - if (_info._isActOnDash) { - scale = _info._graphState.m_LineWidth; - } - _info._graphState.m_DashPhase = dashPhase; - _info._graphState.SetDashCount(dashCount); - for (int32_t i = 0; i < dashCount; i++) { - _info._graphState.m_DashArray[i] = dashArray[i] * scale; - } - return FX_ERR_Succeeded; - } - default: { return FX_ERR_Property_Invalid; } - } -} -FX_ERR CFX_Graphics::SetLineDash(FX_DashStyle dashStyle) { - switch (_type) { - case FX_CONTEXT_Device: { - if (!_renderDevice) - return FX_ERR_Property_Invalid; - return RenderDeviceSetLineDash(dashStyle); - } - default: { return FX_ERR_Property_Invalid; } - } -} -FX_ERR CFX_Graphics::GetLineJoin(CFX_GraphStateData::LineJoin& lineJoin) { - switch (_type) { - case FX_CONTEXT_Device: { - if (!_renderDevice) - return FX_ERR_Property_Invalid; - lineJoin = _info._graphState.m_LineJoin; - return FX_ERR_Succeeded; - } - default: { return FX_ERR_Property_Invalid; } - } -} -FX_ERR CFX_Graphics::SetLineJoin(CFX_GraphStateData::LineJoin lineJoin) { - switch (_type) { - case FX_CONTEXT_Device: { - if (!_renderDevice) - return FX_ERR_Property_Invalid; - _info._graphState.m_LineJoin = lineJoin; - return FX_ERR_Succeeded; - } - default: { return FX_ERR_Property_Invalid; } - } -} -FX_ERR CFX_Graphics::GetMiterLimit(FX_FLOAT& miterLimit) { - switch (_type) { - case FX_CONTEXT_Device: { - if (!_renderDevice) - return FX_ERR_Property_Invalid; - miterLimit = _info._graphState.m_MiterLimit; - return FX_ERR_Succeeded; - } - default: { return FX_ERR_Property_Invalid; } - } -} -FX_ERR CFX_Graphics::SetMiterLimit(FX_FLOAT miterLimit) { - switch (_type) { - case FX_CONTEXT_Device: { - if (!_renderDevice) - return FX_ERR_Property_Invalid; - _info._graphState.m_MiterLimit = miterLimit; - return FX_ERR_Succeeded; - } - default: { return FX_ERR_Property_Invalid; } - } -} -FX_ERR CFX_Graphics::GetLineWidth(FX_FLOAT& lineWidth) { - switch (_type) { - case FX_CONTEXT_Device: { - if (!_renderDevice) - return FX_ERR_Property_Invalid; - lineWidth = _info._graphState.m_LineWidth; - return FX_ERR_Succeeded; - } - default: { return FX_ERR_Property_Invalid; } - } -} -FX_ERR CFX_Graphics::SetLineWidth(FX_FLOAT lineWidth, FX_BOOL isActOnDash) { - switch (_type) { - case FX_CONTEXT_Device: { - if (!_renderDevice) - return FX_ERR_Property_Invalid; - _info._graphState.m_LineWidth = lineWidth; - _info._isActOnDash = isActOnDash; - return FX_ERR_Succeeded; - } - default: { return FX_ERR_Property_Invalid; } - } -} -FX_ERR CFX_Graphics::GetStrokeAlignment(FX_StrokeAlignment& strokeAlignment) { - switch (_type) { - case FX_CONTEXT_Device: { - if (!_renderDevice) - return FX_ERR_Property_Invalid; - strokeAlignment = _info._strokeAlignment; - return FX_ERR_Succeeded; - } - default: { return FX_ERR_Property_Invalid; } - } -} -FX_ERR CFX_Graphics::SetStrokeAlignment(FX_StrokeAlignment strokeAlignment) { - switch (_type) { - case FX_CONTEXT_Device: { - if (!_renderDevice) - return FX_ERR_Property_Invalid; - _info._strokeAlignment = strokeAlignment; - return FX_ERR_Succeeded; - } - default: { return FX_ERR_Property_Invalid; } - } -} -FX_ERR CFX_Graphics::SetStrokeColor(CFX_Color* color) { - if (!color) - return FX_ERR_Parameter_Invalid; - switch (_type) { - case FX_CONTEXT_Device: { - if (!_renderDevice) - return FX_ERR_Property_Invalid; - _info._strokeColor = color; - return FX_ERR_Succeeded; - } - default: { return FX_ERR_Property_Invalid; } - } -} -FX_ERR CFX_Graphics::SetFillColor(CFX_Color* color) { - if (!color) - return FX_ERR_Parameter_Invalid; - switch (_type) { - case FX_CONTEXT_Device: { - if (!_renderDevice) - return FX_ERR_Property_Invalid; - _info._fillColor = color; - return FX_ERR_Succeeded; - } - default: { return FX_ERR_Property_Invalid; } - } -} -FX_ERR CFX_Graphics::StrokePath(CFX_Path* path, CFX_Matrix* matrix) { - if (!path) - return FX_ERR_Parameter_Invalid; - switch (_type) { - case FX_CONTEXT_Device: { - if (!_renderDevice) - return FX_ERR_Property_Invalid; - return RenderDeviceStrokePath(path, matrix); - } - default: { return FX_ERR_Property_Invalid; } - } -} -FX_ERR CFX_Graphics::FillPath(CFX_Path* path, - FX_FillMode fillMode, - CFX_Matrix* matrix) { - if (!path) - return FX_ERR_Parameter_Invalid; - switch (_type) { - case FX_CONTEXT_Device: { - if (!_renderDevice) - return FX_ERR_Property_Invalid; - return RenderDeviceFillPath(path, fillMode, matrix); - } - default: { return FX_ERR_Property_Invalid; } - } -} -FX_ERR CFX_Graphics::ClipPath(CFX_Path* path, - FX_FillMode fillMode, - CFX_Matrix* matrix) { - if (!path) - return FX_ERR_Parameter_Invalid; - switch (_type) { - case FX_CONTEXT_Device: { - if (!_renderDevice) - return FX_ERR_Property_Invalid; - FX_BOOL result = _renderDevice->SetClip_PathFill( - path->GetPathData(), (CFX_Matrix*)matrix, fillMode); - if (!result) - return FX_ERR_Indefinite; - return FX_ERR_Succeeded; - } - default: { return FX_ERR_Property_Invalid; } - } -} -FX_ERR CFX_Graphics::DrawImage(CFX_DIBSource* source, - const CFX_PointF& point, - CFX_Matrix* matrix) { - if (!source) - return FX_ERR_Parameter_Invalid; - switch (_type) { - case FX_CONTEXT_Device: { - if (!_renderDevice) - return FX_ERR_Property_Invalid; - return RenderDeviceDrawImage(source, point, matrix); - } - default: { return FX_ERR_Property_Invalid; } - } -} -FX_ERR CFX_Graphics::StretchImage(CFX_DIBSource* source, - const CFX_RectF& rect, - CFX_Matrix* matrix) { - if (!source) - return FX_ERR_Parameter_Invalid; - switch (_type) { - case FX_CONTEXT_Device: { - if (!_renderDevice) - return FX_ERR_Property_Invalid; - return RenderDeviceStretchImage(source, rect, matrix); - } - default: { return FX_ERR_Property_Invalid; } - } -} -FX_ERR CFX_Graphics::ConcatMatrix(const CFX_Matrix* matrix) { - if (!matrix) - return FX_ERR_Parameter_Invalid; - switch (_type) { - case FX_CONTEXT_Device: { - if (!_renderDevice) - return FX_ERR_Property_Invalid; - _info._CTM.Concat(*matrix); - return FX_ERR_Succeeded; - } - default: { return FX_ERR_Property_Invalid; } - } -} -CFX_Matrix* CFX_Graphics::GetMatrix() { - switch (_type) { - case FX_CONTEXT_Device: { - if (!_renderDevice) - return NULL; - return &_info._CTM; - } - default: { return NULL; } - } -} -FX_ERR CFX_Graphics::GetClipRect(CFX_RectF& rect) { - switch (_type) { - case FX_CONTEXT_Device: { - if (!_renderDevice) - return FX_ERR_Property_Invalid; - FX_RECT r = _renderDevice->GetClipBox(); - rect.left = (FX_FLOAT)r.left; - rect.top = (FX_FLOAT)r.top; - rect.width = (FX_FLOAT)r.Width(); - rect.height = (FX_FLOAT)r.Height(); - return FX_ERR_Succeeded; - } - default: { return FX_ERR_Property_Invalid; } - } -} -FX_ERR CFX_Graphics::SetClipRect(const CFX_RectF& rect) { - switch (_type) { - case FX_CONTEXT_Device: { - if (!_renderDevice) - return FX_ERR_Property_Invalid; - if (!_renderDevice->SetClip_Rect( - FX_RECT(FXSYS_round(rect.left), FXSYS_round(rect.top), - FXSYS_round(rect.right()), FXSYS_round(rect.bottom())))) { - return FX_ERR_Method_Not_Supported; - } - return FX_ERR_Succeeded; - } - default: { return FX_ERR_Property_Invalid; } - } -} -FX_ERR CFX_Graphics::ClearClip() { - switch (_type) { - case FX_CONTEXT_Device: { - if (!_renderDevice) - return FX_ERR_Property_Invalid; - return FX_ERR_Succeeded; - } - default: { return FX_ERR_Property_Invalid; } - } -} -FX_ERR CFX_Graphics::SetFont(CFX_Font* font) { - if (!font) - return FX_ERR_Parameter_Invalid; - switch (_type) { - case FX_CONTEXT_Device: { - if (!_renderDevice) - return FX_ERR_Property_Invalid; - _info._font = font; - return FX_ERR_Succeeded; - } - default: { return FX_ERR_Property_Invalid; } - } -} -FX_ERR CFX_Graphics::SetFontSize(const FX_FLOAT size) { - FX_FLOAT fontSize = size <= 0 ? 1.0f : size; - switch (_type) { - case FX_CONTEXT_Device: { - if (!_renderDevice) - return FX_ERR_Property_Invalid; - _info._fontSize = fontSize; - return FX_ERR_Succeeded; - } - default: { return FX_ERR_Property_Invalid; } - } -} -FX_ERR CFX_Graphics::SetFontHScale(const FX_FLOAT scale) { - FX_FLOAT fontHScale = scale <= 0 ? 1.0f : scale; - switch (_type) { - case FX_CONTEXT_Device: { - if (!_renderDevice) - return FX_ERR_Property_Invalid; - _info._fontHScale = fontHScale; - return FX_ERR_Succeeded; - } - default: { return FX_ERR_Property_Invalid; } - } -} -FX_ERR CFX_Graphics::SetCharSpacing(const FX_FLOAT spacing) { - FX_FLOAT fontSpacing = spacing < 0 ? 0 : spacing; - switch (_type) { - case FX_CONTEXT_Device: { - if (!_renderDevice) - return FX_ERR_Property_Invalid; - _info._fontSpacing = fontSpacing; - return FX_ERR_Succeeded; - } - default: { return FX_ERR_Property_Invalid; } - } -} -FX_ERR CFX_Graphics::SetTextDrawingMode(const int32_t mode) { - switch (_type) { - case FX_CONTEXT_Device: { - if (!_renderDevice) - return FX_ERR_Property_Invalid; - return FX_ERR_Succeeded; - } - default: { return FX_ERR_Property_Invalid; } - } -} -FX_ERR CFX_Graphics::ShowText(const CFX_PointF& point, - const CFX_WideString& text, - CFX_Matrix* matrix) { - switch (_type) { - case FX_CONTEXT_Device: { - if (!_renderDevice) - return FX_ERR_Property_Invalid; - return RenderDeviceShowText(point, text, matrix); - } - default: { return FX_ERR_Property_Invalid; } - } -} -FX_ERR CFX_Graphics::CalcTextRect(CFX_RectF& rect, - const CFX_WideString& text, - FX_BOOL isMultiline, - CFX_Matrix* matrix) { - switch (_type) { - case FX_CONTEXT_Device: { - if (!_renderDevice) - return FX_ERR_Property_Invalid; - int32_t length = text.GetLength(); - FX_DWORD* charCodes = FX_Alloc(FX_DWORD, length); - FXTEXT_CHARPOS* charPos = FX_Alloc(FXTEXT_CHARPOS, length); - CalcTextInfo(text, charCodes, charPos, rect); - FX_Free(charPos); - FX_Free(charCodes); - return FX_ERR_Succeeded; - } - default: { return FX_ERR_Property_Invalid; } - } -} -FX_ERR CFX_Graphics::Transfer(CFX_Graphics* graphics, - const CFX_Matrix* matrix) { - if (!graphics) - return FX_ERR_Parameter_Invalid; - CFX_Matrix m; - m.Set(_info._CTM.a, _info._CTM.b, _info._CTM.c, _info._CTM.d, _info._CTM.e, - _info._CTM.f); - if (matrix) { - m.Concat(*matrix); - } - switch (_type) { - case FX_CONTEXT_Device: { - if (!_renderDevice) - return FX_ERR_Property_Invalid; - { - if (!graphics->_renderDevice) - return FX_ERR_Parameter_Invalid; - CFX_DIBitmap* bitmap = graphics->_renderDevice->GetBitmap(); - FX_BOOL result = _renderDevice->SetDIBits(bitmap, 0, 0); - if (!result) - return FX_ERR_Method_Not_Supported; - } - } - default: { return FX_ERR_Property_Invalid; } - } -} -FX_ERR CFX_Graphics::Transfer(CFX_Graphics* graphics, - FX_FLOAT srcLeft, - FX_FLOAT srcTop, - const CFX_RectF& dstRect, - const CFX_Matrix* matrix) { - if (!graphics) - return FX_ERR_Parameter_Invalid; - CFX_Matrix m; - m.Set(_info._CTM.a, _info._CTM.b, _info._CTM.c, _info._CTM.d, _info._CTM.e, - _info._CTM.f); - if (matrix) { - m.Concat(*matrix); - } - switch (_type) { - case FX_CONTEXT_Device: { - if (!_renderDevice) - return FX_ERR_Property_Invalid; - { - if (!graphics->_renderDevice) - return FX_ERR_Parameter_Invalid; - CFX_DIBitmap* bitmap = graphics->_renderDevice->GetBitmap(); - CFX_DIBitmap bmp; - FX_BOOL result = - bmp.Create((int32_t)dstRect.width, (int32_t)dstRect.height, - bitmap->GetFormat()); - if (!result) - return FX_ERR_Intermediate_Value_Invalid; - result = graphics->_renderDevice->GetDIBits(&bmp, (int32_t)srcLeft, - (int32_t)srcTop); - if (!result) - return FX_ERR_Method_Not_Supported; - result = _renderDevice->SetDIBits(&bmp, (int32_t)dstRect.left, - (int32_t)dstRect.top); - if (!result) - return FX_ERR_Method_Not_Supported; - return FX_ERR_Succeeded; - } - } - default: { return FX_ERR_Property_Invalid; } - } -} -CFX_RenderDevice* CFX_Graphics::GetRenderDevice() { - return _renderDevice; -} -FX_ERR CFX_Graphics::InverseRect(const CFX_RectF& rect) { - if (!_renderDevice) - return FX_ERR_Property_Invalid; - CFX_DIBitmap* bitmap = _renderDevice->GetBitmap(); - if (!bitmap) - return FX_ERR_Property_Invalid; - CFX_RectF temp(rect); - _info._CTM.TransformRect(temp); - CFX_RectF r; - r.Set(0, 0, (FX_FLOAT)bitmap->GetWidth(), (FX_FLOAT)bitmap->GetWidth()); - r.Intersect(temp); - if (r.IsEmpty()) { - return FX_ERR_Parameter_Invalid; - } - FX_ARGB* pBuf = - (FX_ARGB*)(bitmap->GetBuffer() + int32_t(r.top) * bitmap->GetPitch()); - int32_t bottom = (int32_t)r.bottom(); - int32_t right = (int32_t)r.right(); - for (int32_t i = (int32_t)r.top; i < bottom; i++) { - FX_ARGB* pLine = pBuf + (int32_t)r.left; - for (int32_t j = (int32_t)r.left; j < right; j++) { - FX_ARGB c = *pLine; - *pLine++ = (c & 0xFF000000) | (0xFFFFFF - (c & 0x00FFFFFF)); - } - pBuf = (FX_ARGB*)((uint8_t*)pBuf + bitmap->GetPitch()); - } - return FX_ERR_Succeeded; -} -FX_ERR CFX_Graphics::XorDIBitmap(const CFX_DIBitmap* srcBitmap, - const CFX_RectF& rect) { - if (!_renderDevice) - return FX_ERR_Property_Invalid; - CFX_DIBitmap* dst = _renderDevice->GetBitmap(); - if (!dst) - return FX_ERR_Property_Invalid; - CFX_RectF temp(rect); - _info._CTM.TransformRect(temp); - CFX_RectF r; - r.Set(0, 0, (FX_FLOAT)dst->GetWidth(), (FX_FLOAT)dst->GetWidth()); - r.Intersect(temp); - if (r.IsEmpty()) { - return FX_ERR_Parameter_Invalid; - } - FX_ARGB* pSrcBuf = (FX_ARGB*)(srcBitmap->GetBuffer() + - int32_t(r.top) * srcBitmap->GetPitch()); - FX_ARGB* pDstBuf = - (FX_ARGB*)(dst->GetBuffer() + int32_t(r.top) * dst->GetPitch()); - int32_t bottom = (int32_t)r.bottom(); - int32_t right = (int32_t)r.right(); - for (int32_t i = (int32_t)r.top; i < bottom; i++) { - FX_ARGB* pSrcLine = pSrcBuf + (int32_t)r.left; - FX_ARGB* pDstLine = pDstBuf + (int32_t)r.left; - for (int32_t j = (int32_t)r.left; j < right; j++) { - FX_ARGB c = *pDstLine; - *pDstLine++ = - ArgbEncode(FXARGB_A(c), (c & 0xFFFFFF) ^ (*pSrcLine & 0xFFFFFF)); - pSrcLine++; - } - pSrcBuf = (FX_ARGB*)((uint8_t*)pSrcBuf + srcBitmap->GetPitch()); - pDstBuf = (FX_ARGB*)((uint8_t*)pDstBuf + dst->GetPitch()); - } - return FX_ERR_Succeeded; -} -FX_ERR CFX_Graphics::EqvDIBitmap(const CFX_DIBitmap* srcBitmap, - const CFX_RectF& rect) { - if (!_renderDevice) - return FX_ERR_Property_Invalid; - CFX_DIBitmap* dst = _renderDevice->GetBitmap(); - if (!dst) - return FX_ERR_Property_Invalid; - CFX_RectF temp(rect); - _info._CTM.TransformRect(temp); - CFX_RectF r; - r.Set(0, 0, (FX_FLOAT)dst->GetWidth(), (FX_FLOAT)dst->GetWidth()); - r.Intersect(temp); - if (r.IsEmpty()) { - return FX_ERR_Parameter_Invalid; - } - FX_ARGB* pSrcBuf = (FX_ARGB*)(srcBitmap->GetBuffer() + - int32_t(r.top) * srcBitmap->GetPitch()); - FX_ARGB* pDstBuf = - (FX_ARGB*)(dst->GetBuffer() + int32_t(r.top) * dst->GetPitch()); - int32_t bottom = (int32_t)r.bottom(); - int32_t right = (int32_t)r.right(); - for (int32_t i = (int32_t)r.top; i < bottom; i++) { - FX_ARGB* pSrcLine = pSrcBuf + (int32_t)r.left; - FX_ARGB* pDstLine = pDstBuf + (int32_t)r.left; - for (int32_t j = (int32_t)r.left; j < right; j++) { - FX_ARGB c = *pDstLine; - *pDstLine++ = - ArgbEncode(FXARGB_A(c), ~((c & 0xFFFFFF) ^ (*pSrcLine & 0xFFFFFF))); - pSrcLine++; - } - pSrcBuf = (FX_ARGB*)((uint8_t*)pSrcBuf + srcBitmap->GetPitch()); - pDstBuf = (FX_ARGB*)((uint8_t*)pDstBuf + dst->GetPitch()); - } - return FX_ERR_Succeeded; -} -FX_ERR CFX_Graphics::RenderDeviceSetLineDash(FX_DashStyle dashStyle) { - switch (dashStyle) { - case FX_DASHSTYLE_Solid: { - _info._graphState.SetDashCount(0); - return FX_ERR_Succeeded; - } - case FX_DASHSTYLE_Dash: { - FX_FLOAT dashArray[] = {3, 1}; - SetLineDash(0, dashArray, 2); - return FX_ERR_Succeeded; - } - case FX_DASHSTYLE_Dot: { - FX_FLOAT dashArray[] = {1, 1}; - SetLineDash(0, dashArray, 2); - return FX_ERR_Succeeded; - } - case FX_DASHSTYLE_DashDot: { - FX_FLOAT dashArray[] = {3, 1, 1, 1}; - SetLineDash(0, dashArray, 4); - return FX_ERR_Succeeded; - } - case FX_DASHSTYLE_DashDotDot: { - FX_FLOAT dashArray[] = {4, 1, 2, 1, 2, 1}; - SetLineDash(0, dashArray, 6); - return FX_ERR_Succeeded; - } - default: { return FX_ERR_Parameter_Invalid; } - } -} -FX_ERR CFX_Graphics::RenderDeviceStrokePath(CFX_Path* path, - CFX_Matrix* matrix) { - if (!_info._strokeColor) - return FX_ERR_Property_Invalid; - CFX_Matrix m; - m.Set(_info._CTM.a, _info._CTM.b, _info._CTM.c, _info._CTM.d, _info._CTM.e, - _info._CTM.f); - if (matrix) { - m.Concat(*matrix); - } - switch (_info._strokeColor->_type) { - case FX_COLOR_Solid: { - FX_BOOL result = _renderDevice->DrawPath( - path->GetPathData(), (CFX_Matrix*)&m, &_info._graphState, 0x0, - _info._strokeColor->_argb, 0); - if (!result) - return FX_ERR_Indefinite; - return FX_ERR_Succeeded; - } - case FX_COLOR_Pattern: { - return StrokePathWithPattern(path, &m); - } - case FX_COLOR_Shading: { - return StrokePathWithShading(path, &m); - } - default: { return FX_ERR_Property_Invalid; } - } -} -FX_ERR CFX_Graphics::RenderDeviceFillPath(CFX_Path* path, - FX_FillMode fillMode, - CFX_Matrix* matrix) { - if (!_info._fillColor) - return FX_ERR_Property_Invalid; - CFX_Matrix m; - m.Set(_info._CTM.a, _info._CTM.b, _info._CTM.c, _info._CTM.d, _info._CTM.e, - _info._CTM.f); - if (matrix) { - m.Concat(*matrix); - } - switch (_info._fillColor->_type) { - case FX_COLOR_Solid: { - FX_BOOL result = _renderDevice->DrawPath( - path->GetPathData(), (CFX_Matrix*)&m, &_info._graphState, - _info._fillColor->_argb, 0x0, fillMode); - if (!result) - return FX_ERR_Indefinite; - return FX_ERR_Succeeded; - } - case FX_COLOR_Pattern: { - { return FillPathWithPattern(path, fillMode, &m); } - } - case FX_COLOR_Shading: { - { return FillPathWithShading(path, fillMode, &m); } - } - default: { return FX_ERR_Property_Invalid; } - } -} -FX_ERR CFX_Graphics::RenderDeviceDrawImage(CFX_DIBSource* source, - const CFX_PointF& point, - CFX_Matrix* matrix) { - CFX_Matrix m1; - m1.Set(_info._CTM.a, _info._CTM.b, _info._CTM.c, _info._CTM.d, _info._CTM.e, - _info._CTM.f); - if (matrix) { - m1.Concat(*matrix); - } - CFX_Matrix m2; - m2.Set((FX_FLOAT)source->GetWidth(), 0.0, 0.0, (FX_FLOAT)source->GetHeight(), - point.x, point.y); - m2.Concat(m1); - int32_t left, top; - CFX_DIBitmap* bmp1 = source->FlipImage(FALSE, TRUE); - CFX_DIBitmap* bmp2 = bmp1->TransformTo((CFX_Matrix*)&m2, left, top); - CFX_RectF r; - GetClipRect(r); - FX_ERR result = FX_ERR_Indefinite; - { - CFX_DIBitmap* bitmap = _renderDevice->GetBitmap(); - CFX_DIBitmap bmp; - bmp.Create(bitmap->GetWidth(), bitmap->GetHeight(), FXDIB_Argb); - _renderDevice->GetDIBits(&bmp, 0, 0); - bmp.TransferBitmap(FXSYS_round(r.left), FXSYS_round(r.top), - FXSYS_round(r.Width()), FXSYS_round(r.Height()), bmp2, - FXSYS_round(r.left - left), FXSYS_round(r.top - top)); - _renderDevice->SetDIBits(&bmp, 0, 0); - result = FX_ERR_Succeeded; - } - if (bmp2) { - delete bmp2; - bmp2 = NULL; - } - if (bmp1) { - delete bmp1; - bmp1 = NULL; - } - return result; -} -FX_ERR CFX_Graphics::RenderDeviceStretchImage(CFX_DIBSource* source, - const CFX_RectF& rect, - CFX_Matrix* matrix) { - CFX_Matrix m1; - m1.Set(_info._CTM.a, _info._CTM.b, _info._CTM.c, _info._CTM.d, _info._CTM.e, - _info._CTM.f); - if (matrix) { - m1.Concat(*matrix); - } - CFX_DIBitmap* bmp1 = - source->StretchTo((int32_t)rect.Width(), (int32_t)rect.Height()); - CFX_Matrix m2; - m2.Set(rect.Width(), 0.0, 0.0, rect.Height(), rect.left, rect.top); - m2.Concat(m1); - int32_t left, top; - CFX_DIBitmap* bmp2 = bmp1->FlipImage(FALSE, TRUE); - CFX_DIBitmap* bmp3 = bmp2->TransformTo((CFX_Matrix*)&m2, left, top); - CFX_RectF r; - GetClipRect(r); - FX_ERR result = FX_ERR_Indefinite; - { - CFX_DIBitmap* bitmap = _renderDevice->GetBitmap(); - bitmap->CompositeBitmap(FXSYS_round(r.left), FXSYS_round(r.top), - FXSYS_round(r.Width()), FXSYS_round(r.Height()), - bmp3, FXSYS_round(r.left - left), - FXSYS_round(r.top - top)); - result = FX_ERR_Succeeded; - } - if (bmp3) { - delete bmp3; - bmp3 = NULL; - } - if (bmp2) { - delete bmp2; - bmp2 = NULL; - } - if (bmp1) { - delete bmp1; - bmp1 = NULL; - } - return result; -} -FX_ERR CFX_Graphics::RenderDeviceShowText(const CFX_PointF& point, - const CFX_WideString& text, - CFX_Matrix* matrix) { - int32_t length = text.GetLength(); - FX_DWORD* charCodes = FX_Alloc(FX_DWORD, length); - FXTEXT_CHARPOS* charPos = FX_Alloc(FXTEXT_CHARPOS, length); - CFX_RectF rect; - rect.Set(point.x, point.y, 0, 0); - CalcTextInfo(text, charCodes, charPos, rect); - CFX_Matrix m; - m.Set(_info._CTM.a, _info._CTM.b, _info._CTM.c, _info._CTM.d, _info._CTM.e, - _info._CTM.f); - m.Translate(0, _info._fontSize * _info._fontHScale); - if (matrix) { - m.Concat(*matrix); - } - FX_BOOL result = _renderDevice->DrawNormalText( - length, charPos, _info._font, CFX_GEModule::Get()->GetFontCache(), - -_info._fontSize * _info._fontHScale, (CFX_Matrix*)&m, - _info._fillColor->_argb, FXTEXT_CLEARTYPE); - if (!result) - return FX_ERR_Indefinite; - FX_Free(charPos); - FX_Free(charCodes); - return FX_ERR_Succeeded; -} -FX_ERR CFX_Graphics::StrokePathWithPattern(CFX_Path* path, CFX_Matrix* matrix) { - return FX_ERR_Method_Not_Supported; -} -FX_ERR CFX_Graphics::StrokePathWithShading(CFX_Path* path, CFX_Matrix* matrix) { - return FX_ERR_Method_Not_Supported; -} -FX_ERR CFX_Graphics::FillPathWithPattern(CFX_Path* path, - FX_FillMode fillMode, - CFX_Matrix* matrix) { - CFX_Pattern* pattern = _info._fillColor->_pattern; - CFX_DIBitmap* bitmap = _renderDevice->GetBitmap(); - int32_t width = bitmap->GetWidth(); - int32_t height = bitmap->GetHeight(); - CFX_DIBitmap bmp; - bmp.Create(width, height, FXDIB_Argb); - _renderDevice->GetDIBits(&bmp, 0, 0); - switch (pattern->_type) { - case FX_PATTERN_Bitmap: { - int32_t xStep = FXSYS_round(pattern->_x1Step); - int32_t yStep = FXSYS_round(pattern->_y1Step); - int32_t xCount = width / xStep + 1; - int32_t yCount = height / yStep + 1; - for (int32_t i = 0; i <= yCount; i++) { - for (int32_t j = 0; j <= xCount; j++) { - bmp.TransferBitmap(j * xStep, i * yStep, xStep, yStep, - pattern->_bitmap, 0, 0); - } - } - break; - } - case FX_PATTERN_Hatch: { - FX_HatchStyle hatchStyle = _info._fillColor->_pattern->_hatchStyle; - if (hatchStyle < FX_HATCHSTYLE_Horizontal || - hatchStyle > FX_HATCHSTYLE_SolidDiamond) { - return FX_ERR_Intermediate_Value_Invalid; - } - const FX_HATCHDATA& data = hatchBitmapData[hatchStyle]; - CFX_DIBitmap mask; - mask.Create(data.width, data.height, FXDIB_1bppMask); - FXSYS_memcpy(mask.GetBuffer(), data.maskBits, - mask.GetPitch() * data.height); - CFX_FloatRect rectf = path->GetPathData()->GetBoundingBox(); - if (matrix) { - rectf.Transform((const CFX_Matrix*)matrix); - } - FX_RECT rect(FXSYS_round(rectf.left), FXSYS_round(rectf.top), - FXSYS_round(rectf.right), FXSYS_round(rectf.bottom)); - CFX_FxgeDevice device; - device.Attach(&bmp); - device.FillRect(&rect, _info._fillColor->_pattern->_backArgb); - for (int32_t j = rect.bottom; j < rect.top; j += mask.GetHeight()) { - for (int32_t i = rect.left; i < rect.right; i += mask.GetWidth()) { - device.SetBitMask(&mask, i, j, _info._fillColor->_pattern->_foreArgb); - } - } - break; - } - } - _renderDevice->SaveState(); - _renderDevice->SetClip_PathFill(path->GetPathData(), (CFX_Matrix*)matrix, - fillMode); - SetDIBitsWithMatrix(&bmp, &pattern->_matrix); - _renderDevice->RestoreState(); - return FX_ERR_Succeeded; -} -FX_ERR CFX_Graphics::FillPathWithShading(CFX_Path* path, - FX_FillMode fillMode, - CFX_Matrix* matrix) { - CFX_DIBitmap* bitmap = _renderDevice->GetBitmap(); - int32_t width = bitmap->GetWidth(); - int32_t height = bitmap->GetHeight(); - FX_FLOAT start_x = _info._fillColor->_shading->_beginPoint.x; - FX_FLOAT start_y = _info._fillColor->_shading->_beginPoint.y; - FX_FLOAT end_x = _info._fillColor->_shading->_endPoint.x; - FX_FLOAT end_y = _info._fillColor->_shading->_endPoint.y; - CFX_DIBitmap bmp; - bmp.Create(width, height, FXDIB_Argb); - _renderDevice->GetDIBits(&bmp, 0, 0); - int32_t pitch = bmp.GetPitch(); - FX_BOOL result = FALSE; - switch (_info._fillColor->_shading->_type) { - case FX_SHADING_Axial: { - FX_FLOAT x_span = end_x - start_x; - FX_FLOAT y_span = end_y - start_y; - FX_FLOAT axis_len_square = (x_span * x_span) + (y_span * y_span); - for (int32_t row = 0; row < height; row++) { - FX_DWORD* dib_buf = (FX_DWORD*)(bmp.GetBuffer() + row * pitch); - for (int32_t column = 0; column < width; column++) { - FX_FLOAT x = (FX_FLOAT)(column); - FX_FLOAT y = (FX_FLOAT)(row); - FX_FLOAT scale = - (((x - start_x) * x_span) + ((y - start_y) * y_span)) / - axis_len_square; - if (scale < 0) { - if (!_info._fillColor->_shading->_isExtendedBegin) { - continue; - } - scale = 0; - } else if (scale > 1.0f) { - if (!_info._fillColor->_shading->_isExtendedEnd) { - continue; - } - scale = 1.0f; - } - int32_t index = (int32_t)(scale * (FX_SHADING_Steps - 1)); - dib_buf[column] = _info._fillColor->_shading->_argbArray[index]; - } - } - result = TRUE; - break; - } - case FX_SHADING_Radial: { - FX_FLOAT start_r = _info._fillColor->_shading->_beginRadius; - FX_FLOAT end_r = _info._fillColor->_shading->_endRadius; - FX_FLOAT a = ((start_x - end_x) * (start_x - end_x)) + - ((start_y - end_y) * (start_y - end_y)) - - ((start_r - end_r) * (start_r - end_r)); - for (int32_t row = 0; row < height; row++) { - FX_DWORD* dib_buf = (FX_DWORD*)(bmp.GetBuffer() + row * pitch); - for (int32_t column = 0; column < width; column++) { - FX_FLOAT x = (FX_FLOAT)(column); - FX_FLOAT y = (FX_FLOAT)(row); - FX_FLOAT b = -2 * (((x - start_x) * (end_x - start_x)) + - ((y - start_y) * (end_y - start_y)) + - (start_r * (end_r - start_r))); - FX_FLOAT c = ((x - start_x) * (x - start_x)) + - ((y - start_y) * (y - start_y)) - (start_r * start_r); - FX_FLOAT s; - if (a == 0) { - s = -c / b; - } else { - FX_FLOAT b2_4ac = (b * b) - 4 * (a * c); - if (b2_4ac < 0) { - continue; - } - FX_FLOAT root = (FXSYS_sqrt(b2_4ac)); - FX_FLOAT s1, s2; - if (a > 0) { - s1 = (-b - root) / (2 * a); - s2 = (-b + root) / (2 * a); - } else { - s2 = (-b - root) / (2 * a); - s1 = (-b + root) / (2 * a); - } - if (s2 <= 1.0f || _info._fillColor->_shading->_isExtendedEnd) { - s = (s2); - } else { - s = (s1); - } - if ((start_r) + s * (end_r - start_r) < 0) { - continue; - } - } - if (s < 0) { - if (!_info._fillColor->_shading->_isExtendedBegin) { - continue; - } - s = 0; - } - if (s > 1.0f) { - if (!_info._fillColor->_shading->_isExtendedEnd) { - continue; - } - s = 1.0f; - } - int index = (int32_t)(s * (FX_SHADING_Steps - 1)); - dib_buf[column] = _info._fillColor->_shading->_argbArray[index]; - } - } - result = TRUE; - break; - } - default: { result = FALSE; } - } - if (result) { - _renderDevice->SaveState(); - _renderDevice->SetClip_PathFill(path->GetPathData(), (CFX_Matrix*)matrix, - fillMode); - SetDIBitsWithMatrix(&bmp, matrix); - _renderDevice->RestoreState(); - } - return result; -} -FX_ERR CFX_Graphics::SetDIBitsWithMatrix(CFX_DIBSource* source, - CFX_Matrix* matrix) { - if (matrix->IsIdentity()) { - _renderDevice->SetDIBits(source, 0, 0); - } else { - CFX_Matrix m; - m.Set((FX_FLOAT)source->GetWidth(), 0, 0, (FX_FLOAT)source->GetHeight(), 0, - 0); - m.Concat(*matrix); - int32_t left, top; - CFX_DIBitmap* bmp1 = source->FlipImage(FALSE, TRUE); - CFX_DIBitmap* bmp2 = bmp1->TransformTo((CFX_Matrix*)&m, left, top); - _renderDevice->SetDIBits(bmp2, left, top); - if (bmp2) { - delete bmp2; - bmp2 = NULL; - } - if (bmp1) { - delete bmp1; - bmp1 = NULL; - } - } - return FX_ERR_Succeeded; -} -FX_ERR CFX_Graphics::CalcTextInfo(const CFX_WideString& text, - FX_DWORD* charCodes, - FXTEXT_CHARPOS* charPos, - CFX_RectF& rect) { - std::unique_ptr encoding( - new CFX_UnicodeEncoding(_info._font)); - int32_t length = text.GetLength(); - FX_FLOAT penX = (FX_FLOAT)rect.left; - FX_FLOAT penY = (FX_FLOAT)rect.top; - FX_FLOAT left = (FX_FLOAT)(0); - FX_FLOAT top = (FX_FLOAT)(0); - charCodes[0] = text.GetAt(0); - charPos[0].m_OriginX = penX + left; - charPos[0].m_OriginY = penY + top; - charPos[0].m_GlyphIndex = encoding->GlyphFromCharCode(charCodes[0]); - charPos[0].m_FontCharWidth = FXSYS_round( - _info._font->GetGlyphWidth(charPos[0].m_GlyphIndex) * _info._fontHScale); - charPos[0].m_bGlyphAdjust = TRUE; - charPos[0].m_AdjustMatrix[0] = -1; - charPos[0].m_AdjustMatrix[1] = 0; - charPos[0].m_AdjustMatrix[2] = 0; - charPos[0].m_AdjustMatrix[3] = 1; - penX += (FX_FLOAT)(charPos[0].m_FontCharWidth) * _info._fontSize / 1000 + - _info._fontSpacing; - for (int32_t i = 1; i < length; i++) { - charCodes[i] = text.GetAt(i); - charPos[i].m_OriginX = penX + left; - charPos[i].m_OriginY = penY + top; - charPos[i].m_GlyphIndex = encoding->GlyphFromCharCode(charCodes[i]); - charPos[i].m_FontCharWidth = - FXSYS_round(_info._font->GetGlyphWidth(charPos[i].m_GlyphIndex) * - _info._fontHScale); - charPos[i].m_bGlyphAdjust = TRUE; - charPos[i].m_AdjustMatrix[0] = -1; - charPos[i].m_AdjustMatrix[1] = 0; - charPos[i].m_AdjustMatrix[2] = 0; - charPos[i].m_AdjustMatrix[3] = 1; - penX += (FX_FLOAT)(charPos[i].m_FontCharWidth) * _info._fontSize / 1000 + - _info._fontSpacing; - } - rect.width = (FX_FLOAT)penX - rect.left; - rect.height = rect.top + _info._fontSize * _info._fontHScale - rect.top; - return FX_ERR_Succeeded; -} -CAGG_Graphics::CAGG_Graphics() { - _owner = NULL; -} -FX_ERR CAGG_Graphics::Create(CFX_Graphics* owner, - int32_t width, - int32_t height, - FXDIB_Format format) { - if (owner->_renderDevice) { - return FX_ERR_Parameter_Invalid; - } - if (_owner) { - return FX_ERR_Property_Invalid; - } - CFX_FxgeDevice* device = new CFX_FxgeDevice; - device->Create(width, height, format); - _owner = owner; - _owner->_renderDevice = device; - _owner->_renderDevice->GetBitmap()->Clear(0xFFFFFFFF); - return FX_ERR_Succeeded; -} -CAGG_Graphics::~CAGG_Graphics() { - if (_owner->_renderDevice) { - delete (CFX_FxgeDevice*)_owner->_renderDevice; - } - _owner = NULL; -} -CFX_Path::CFX_Path() { - _generator = NULL; -} -FX_ERR CFX_Path::Create() { - if (_generator) { - return FX_ERR_Property_Invalid; - } - _generator = new CFX_PathGenerator; - _generator->Create(); - return FX_ERR_Succeeded; -} -CFX_Path::~CFX_Path() { - if (_generator) { - delete _generator; - _generator = NULL; - } -} -FX_ERR CFX_Path::MoveTo(FX_FLOAT x, FX_FLOAT y) { - if (!_generator) - return FX_ERR_Property_Invalid; - _generator->MoveTo(x, y); - return FX_ERR_Succeeded; -} -FX_ERR CFX_Path::LineTo(FX_FLOAT x, FX_FLOAT y) { - if (!_generator) - return FX_ERR_Property_Invalid; - _generator->LineTo(x, y); - return FX_ERR_Succeeded; -} -FX_ERR CFX_Path::BezierTo(FX_FLOAT ctrlX1, - FX_FLOAT ctrlY1, - FX_FLOAT ctrlX2, - FX_FLOAT ctrlY2, - FX_FLOAT toX, - FX_FLOAT toY) { - if (!_generator) - return FX_ERR_Property_Invalid; - _generator->BezierTo(ctrlX1, ctrlY1, ctrlX2, ctrlY2, toX, toY); - return FX_ERR_Succeeded; -} -FX_ERR CFX_Path::ArcTo(FX_FLOAT left, - FX_FLOAT top, - FX_FLOAT width, - FX_FLOAT height, - FX_FLOAT startAngle, - FX_FLOAT sweepAngle) { - if (!_generator) - return FX_ERR_Property_Invalid; - _generator->ArcTo(left + width / 2, top + height / 2, width / 2, height / 2, - startAngle, sweepAngle); - return FX_ERR_Succeeded; -} -FX_ERR CFX_Path::Close() { - if (!_generator) - return FX_ERR_Property_Invalid; - _generator->Close(); - return FX_ERR_Succeeded; -} -FX_ERR CFX_Path::AddLine(FX_FLOAT x1, FX_FLOAT y1, FX_FLOAT x2, FX_FLOAT y2) { - if (!_generator) - return FX_ERR_Property_Invalid; - _generator->AddLine(x1, y1, x2, y2); - return FX_ERR_Succeeded; -} -FX_ERR CFX_Path::AddBezier(FX_FLOAT startX, - FX_FLOAT startY, - FX_FLOAT ctrlX1, - FX_FLOAT ctrlY1, - FX_FLOAT ctrlX2, - FX_FLOAT ctrlY2, - FX_FLOAT endX, - FX_FLOAT endY) { - if (!_generator) - return FX_ERR_Property_Invalid; - _generator->AddBezier(startX, startY, ctrlX1, ctrlY1, ctrlX2, ctrlY2, endX, - endY); - return FX_ERR_Succeeded; -} -FX_ERR CFX_Path::AddRectangle(FX_FLOAT left, - FX_FLOAT top, - FX_FLOAT width, - FX_FLOAT height) { - if (!_generator) - return FX_ERR_Property_Invalid; - _generator->AddRectangle(left, top, left + width, top + height); - return FX_ERR_Succeeded; -} -FX_ERR CFX_Path::AddEllipse(FX_FLOAT left, - FX_FLOAT top, - FX_FLOAT width, - FX_FLOAT height) { - if (!_generator) - return FX_ERR_Property_Invalid; - _generator->AddEllipse(left + width / 2, top + height / 2, width / 2, - height / 2); - return FX_ERR_Succeeded; -} -FX_ERR CFX_Path::AddEllipse(const CFX_RectF& rect) { - if (!_generator) - return FX_ERR_Property_Invalid; - _generator->AddEllipse(rect.left + rect.Width() / 2, - rect.top + rect.Height() / 2, rect.Width() / 2, - rect.Height() / 2); - return FX_ERR_Succeeded; -} -FX_ERR CFX_Path::AddArc(FX_FLOAT left, - FX_FLOAT top, - FX_FLOAT width, - FX_FLOAT height, - FX_FLOAT startAngle, - FX_FLOAT sweepAngle) { - if (!_generator) - return FX_ERR_Property_Invalid; - _generator->AddArc(left + width / 2, top + height / 2, width / 2, height / 2, - startAngle, sweepAngle); - return FX_ERR_Succeeded; -} -FX_ERR CFX_Path::AddPie(FX_FLOAT left, - FX_FLOAT top, - FX_FLOAT width, - FX_FLOAT height, - FX_FLOAT startAngle, - FX_FLOAT sweepAngle) { - if (!_generator) - return FX_ERR_Property_Invalid; - _generator->AddPie(left + width / 2, top + height / 2, width / 2, height / 2, - startAngle, sweepAngle); - return FX_ERR_Succeeded; -} -FX_ERR CFX_Path::AddSubpath(CFX_Path* path) { - if (!_generator) - return FX_ERR_Property_Invalid; - _generator->AddPathData(path->GetPathData()); - return FX_ERR_Succeeded; -} -FX_ERR CFX_Path::Clear() { - if (!_generator) - return FX_ERR_Property_Invalid; - _generator->GetPathData()->SetPointCount(0); - return FX_ERR_Succeeded; -} -FX_BOOL CFX_Path::IsEmpty() { - if (!_generator) - return FX_ERR_Property_Invalid; - if (_generator->GetPathData()->GetPointCount() == 0) { - return TRUE; - } - return FALSE; -} -CFX_PathData* CFX_Path::GetPathData() { - if (!_generator) - return NULL; - return _generator->GetPathData(); -} -CFX_Color::CFX_Color() { - _type = FX_COLOR_None; -} -CFX_Color::CFX_Color(const FX_ARGB argb) { - _type = FX_COLOR_None; - Set(argb); -} -CFX_Color::CFX_Color(CFX_Pattern* pattern, const FX_ARGB argb) { - _type = FX_COLOR_None; - Set(pattern, argb); -} -CFX_Color::CFX_Color(CFX_Shading* shading) { - _type = FX_COLOR_None; - Set(shading); -} -CFX_Color::~CFX_Color() { - _type = FX_COLOR_None; -} -FX_ERR CFX_Color::Set(const FX_ARGB argb) { - _type = FX_COLOR_Solid; - _argb = argb; - _pattern = NULL; - return FX_ERR_Succeeded; -} -FX_ERR CFX_Color::Set(CFX_Pattern* pattern, const FX_ARGB argb) { - if (!pattern) - return FX_ERR_Parameter_Invalid; - _type = FX_COLOR_Pattern; - _argb = argb; - _pattern = pattern; - return FX_ERR_Succeeded; -} -FX_ERR CFX_Color::Set(CFX_Shading* shading) { - if (!shading) - return FX_ERR_Parameter_Invalid; - _type = FX_COLOR_Shading; - _shading = shading; - return FX_ERR_Succeeded; -} -CFX_Pattern::CFX_Pattern() { - _type = FX_PATTERN_None; - _matrix.SetIdentity(); -} -FX_ERR CFX_Pattern::Create(CFX_DIBitmap* bitmap, - const FX_FLOAT xStep, - const FX_FLOAT yStep, - CFX_Matrix* matrix) { - if (!bitmap) - return FX_ERR_Parameter_Invalid; - if (_type != FX_PATTERN_None) { - return FX_ERR_Property_Invalid; - } - _type = FX_PATTERN_Bitmap; - _bitmap = bitmap; - _x1Step = xStep; - _y1Step = yStep; - if (matrix) { - _matrix.Set(matrix->a, matrix->b, matrix->c, matrix->d, matrix->e, - matrix->f); - } - return FX_ERR_Succeeded; -} -FX_ERR CFX_Pattern::Create(FX_HatchStyle hatchStyle, - const FX_ARGB foreArgb, - const FX_ARGB backArgb, - CFX_Matrix* matrix) { - if (hatchStyle < FX_HATCHSTYLE_Horizontal || - hatchStyle > FX_HATCHSTYLE_SolidDiamond) { - return FX_ERR_Parameter_Invalid; - } - if (_type != FX_PATTERN_None) { - return FX_ERR_Property_Invalid; - } - _type = FX_PATTERN_Hatch; - _hatchStyle = hatchStyle; - _foreArgb = foreArgb; - _backArgb = backArgb; - if (matrix) { - _matrix.Set(matrix->a, matrix->b, matrix->c, matrix->d, matrix->e, - matrix->f); - } - return FX_ERR_Succeeded; -} -CFX_Pattern::~CFX_Pattern() { - _type = FX_PATTERN_None; -} -CFX_Shading::CFX_Shading() { - _type = FX_SHADING_None; -} -FX_ERR CFX_Shading::CreateAxial(const CFX_PointF& beginPoint, - const CFX_PointF& endPoint, - FX_BOOL isExtendedBegin, - FX_BOOL isExtendedEnd, - const FX_ARGB beginArgb, - const FX_ARGB endArgb) { - if (_type != FX_SHADING_None) { - return FX_ERR_Property_Invalid; - } - _type = FX_SHADING_Axial; - _beginPoint = beginPoint; - _endPoint = endPoint; - _isExtendedBegin = isExtendedBegin; - _isExtendedEnd = isExtendedEnd; - _beginArgb = beginArgb; - _endArgb = endArgb; - return InitArgbArray(); -} -FX_ERR CFX_Shading::CreateRadial(const CFX_PointF& beginPoint, - const CFX_PointF& endPoint, - const FX_FLOAT beginRadius, - const FX_FLOAT endRadius, - FX_BOOL isExtendedBegin, - FX_BOOL isExtendedEnd, - const FX_ARGB beginArgb, - const FX_ARGB endArgb) { - if (_type != FX_SHADING_None) { - return FX_ERR_Property_Invalid; - } - _type = FX_SHADING_Radial; - _beginPoint = beginPoint; - _endPoint = endPoint; - _beginRadius = beginRadius; - _endRadius = endRadius; - _isExtendedBegin = isExtendedBegin; - _isExtendedEnd = isExtendedEnd; - _beginArgb = beginArgb; - _endArgb = endArgb; - return InitArgbArray(); -} -CFX_Shading::~CFX_Shading() { - _type = FX_SHADING_None; -} -FX_ERR CFX_Shading::InitArgbArray() { - int32_t a1, r1, g1, b1; - ArgbDecode(_beginArgb, a1, r1, g1, b1); - int32_t a2, r2, g2, b2; - ArgbDecode(_endArgb, a2, r2, g2, b2); - FX_FLOAT f = (FX_FLOAT)(FX_SHADING_Steps - 1); - FX_FLOAT aScale = (FX_FLOAT)(1.0 * (a2 - a1) / f); - FX_FLOAT rScale = (FX_FLOAT)(1.0 * (r2 - r1) / f); - FX_FLOAT gScale = (FX_FLOAT)(1.0 * (g2 - g1) / f); - FX_FLOAT bScale = (FX_FLOAT)(1.0 * (b2 - b1) / f); - int32_t a3, r3, g3, b3; - for (int32_t i = 0; i < FX_SHADING_Steps; i++) { - a3 = (int32_t)(i * aScale); - r3 = (int32_t)(i * rScale); - g3 = (int32_t)(i * gScale); - b3 = (int32_t)(i * bScale); - _argbArray[i] = - FXARGB_TODIB(FXARGB_MAKE((a1 + a3), (r1 + r3), (g1 + g3), (b1 + b3))); - } - return FX_ERR_Succeeded; -} -class CFX_Pause : public IFX_Pause { - public: - virtual FX_BOOL NeedToPauseNow() { return TRUE; } -}; diff --git a/xfa/src/fxgraphics/fx_path_generator.cpp b/xfa/src/fxgraphics/fx_path_generator.cpp deleted file mode 100644 index 8b0bab00da..0000000000 --- a/xfa/src/fxgraphics/fx_path_generator.cpp +++ /dev/null @@ -1,201 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fxgraphics/fx_path_generator.h" - -#include "xfa/src/fxgraphics/pre.h" - -CFX_PathGenerator::CFX_PathGenerator() { - m_pPathData = NULL; -} -void CFX_PathGenerator::Create() { - m_pPathData = new CFX_PathData; -} -CFX_PathGenerator::~CFX_PathGenerator() { - if (m_pPathData) { - delete m_pPathData; - m_pPathData = NULL; - } -} -void CFX_PathGenerator::AddPathData(CFX_PathData* pPathData) { - if (pPathData && pPathData->GetPointCount() > 0) { - int nCount = pPathData->GetPointCount(); - FX_PATHPOINT* pPoints = pPathData->GetPoints(); - AddPathData(pPoints, nCount); - } -} -void CFX_PathGenerator::AddPathData(FX_PATHPOINT* pPoints, int nCount) { - if (pPoints && nCount > 0) { - int nOldCount = m_pPathData->GetPointCount(); - m_pPathData->AddPointCount(nCount); - FX_PATHPOINT* pDstPoints = m_pPathData->GetPoints(); - FXSYS_memcpy(pDstPoints + nOldCount, pPoints, - sizeof(FX_PATHPOINT) * nCount); - } -} -void CFX_PathGenerator::MoveTo(FX_FLOAT x, FX_FLOAT y) { - m_pPathData->AddPointCount(1); - m_pPathData->SetPoint(m_pPathData->GetPointCount() - 1, x, y, FXPT_MOVETO); -} -void CFX_PathGenerator::LineTo(FX_FLOAT x, FX_FLOAT y) { - m_pPathData->AddPointCount(1); - m_pPathData->SetPoint(m_pPathData->GetPointCount() - 1, x, y, FXPT_LINETO); -} -void CFX_PathGenerator::BezierTo(FX_FLOAT ctrl_x1, - FX_FLOAT ctrl_y1, - FX_FLOAT ctrl_x2, - FX_FLOAT ctrl_y2, - FX_FLOAT to_x, - FX_FLOAT to_y) { - int old_count = m_pPathData->GetPointCount(); - m_pPathData->AddPointCount(3); - m_pPathData->SetPoint(old_count, ctrl_x1, ctrl_y1, FXPT_BEZIERTO); - m_pPathData->SetPoint(old_count + 1, ctrl_x2, ctrl_y2, FXPT_BEZIERTO); - m_pPathData->SetPoint(old_count + 2, to_x, to_y, FXPT_BEZIERTO); -} -void CFX_PathGenerator::Close() { - if (m_pPathData->GetPointCount() > 0) { - int index = m_pPathData->GetPointCount() - 1; - FX_PATHPOINT* pPoints = m_pPathData->GetPoints(); - pPoints[index].m_Flag |= FXPT_CLOSEFIGURE; - } -} -void CFX_PathGenerator::AddLine(FX_FLOAT x1, - FX_FLOAT y1, - FX_FLOAT x2, - FX_FLOAT y2) { - int old_count = m_pPathData->GetPointCount(); - m_pPathData->AddPointCount(2); - m_pPathData->SetPoint(old_count, x1, y1, FXPT_MOVETO); - m_pPathData->SetPoint(old_count + 1, x2, y2, FXPT_LINETO); -} -void CFX_PathGenerator::AddBezier(FX_FLOAT start_x, - FX_FLOAT start_y, - FX_FLOAT ctrl_x1, - FX_FLOAT ctrl_y1, - FX_FLOAT ctrl_x2, - FX_FLOAT ctrl_y2, - FX_FLOAT end_x, - FX_FLOAT end_y) { - int old_count = m_pPathData->GetPointCount(); - m_pPathData->AddPointCount(4); - m_pPathData->SetPoint(old_count, start_x, start_y, FXPT_MOVETO); - m_pPathData->SetPoint(old_count + 1, ctrl_x1, ctrl_y1, FXPT_BEZIERTO); - m_pPathData->SetPoint(old_count + 2, ctrl_x2, ctrl_y2, FXPT_BEZIERTO); - m_pPathData->SetPoint(old_count + 3, end_x, end_y, FXPT_BEZIERTO); -} -void CFX_PathGenerator::AddRectangle(FX_FLOAT x1, - FX_FLOAT y1, - FX_FLOAT x2, - FX_FLOAT y2) { - m_pPathData->AppendRect(x1, y1, x2, y2); -} -void CFX_PathGenerator::AddEllipse(FX_FLOAT x, - FX_FLOAT y, - FX_FLOAT width, - FX_FLOAT height) { - AddArc(x, y, width, height, 0, FX_PI * 2); -} -void CFX_PathGenerator::ArcTo(FX_FLOAT x, - FX_FLOAT y, - FX_FLOAT width, - FX_FLOAT height, - FX_FLOAT start_angle, - FX_FLOAT sweep_angle) { - FX_FLOAT x0 = FXSYS_cos(sweep_angle / 2); - FX_FLOAT y0 = FXSYS_sin(sweep_angle / 2); - FX_FLOAT tx = ((1.0f - x0) * 4) / (3 * 1.0f); - FX_FLOAT ty = y0 - ((tx * x0) / y0); - FX_FLOAT px[3], py[3]; - px[0] = x0 + tx; - py[0] = -ty; - px[1] = x0 + tx; - py[1] = ty; - FX_FLOAT sn = FXSYS_sin(start_angle + sweep_angle / 2); - FX_FLOAT cs = FXSYS_cos(start_angle + sweep_angle / 2); - int old_count = m_pPathData->GetPointCount(); - m_pPathData->AddPointCount(3); - FX_FLOAT bezier_x, bezier_y; - bezier_x = x + (width * ((px[0] * cs) - (py[0] * sn))); - bezier_y = y + (height * ((px[0] * sn) + (py[0] * cs))); - m_pPathData->SetPoint(old_count, bezier_x, bezier_y, FXPT_BEZIERTO); - bezier_x = x + (width * ((px[1] * cs) - (py[1] * sn))); - bezier_y = y + (height * ((px[1] * sn) + (py[1] * cs))); - m_pPathData->SetPoint(old_count + 1, bezier_x, bezier_y, FXPT_BEZIERTO); - bezier_x = x + (width * FXSYS_cos(start_angle + sweep_angle)); - bezier_y = y + (height * FXSYS_sin(start_angle + sweep_angle)); - m_pPathData->SetPoint(old_count + 2, bezier_x, bezier_y, FXPT_BEZIERTO); -} -void CFX_PathGenerator::AddArc(FX_FLOAT x, - FX_FLOAT y, - FX_FLOAT width, - FX_FLOAT height, - FX_FLOAT start_angle, - FX_FLOAT sweep_angle) { - if (sweep_angle == 0) { - return; - } - - const FX_FLOAT bezier_arc_angle_epsilon = 0.01f; - while (start_angle > FX_PI * 2) { - start_angle -= FX_PI * 2; - } - while (start_angle < 0) { - start_angle += FX_PI * 2; - } - if (sweep_angle >= FX_PI * 2) { - sweep_angle = FX_PI * 2; - } - if (sweep_angle <= -FX_PI * 2) { - sweep_angle = -FX_PI * 2; - } - m_pPathData->AddPointCount(1); - m_pPathData->SetPoint(m_pPathData->GetPointCount() - 1, - x + (width * FXSYS_cos(start_angle)), - y + (height * FXSYS_sin(start_angle)), FXPT_MOVETO); - FX_FLOAT total_sweep = 0, local_sweep = 0, prev_sweep = 0; - FX_BOOL done = FALSE; - do { - if (sweep_angle < 0) { - prev_sweep = total_sweep; - local_sweep = -FX_PI / 2; - total_sweep -= FX_PI / 2; - if (total_sweep <= sweep_angle + bezier_arc_angle_epsilon) { - local_sweep = sweep_angle - prev_sweep; - done = TRUE; - } - } else { - prev_sweep = total_sweep; - local_sweep = FX_PI / 2; - total_sweep += FX_PI / 2; - if (total_sweep >= sweep_angle - bezier_arc_angle_epsilon) { - local_sweep = sweep_angle - prev_sweep; - done = TRUE; - } - } - ArcTo(x, y, width, height, start_angle, local_sweep); - start_angle += local_sweep; - } while (!done); -} -void CFX_PathGenerator::AddPie(FX_FLOAT x, - FX_FLOAT y, - FX_FLOAT width, - FX_FLOAT height, - FX_FLOAT start_angle, - FX_FLOAT sweep_angle) { - if (sweep_angle == 0) { - int old_count = m_pPathData->GetPointCount(); - m_pPathData->AddPointCount(2); - m_pPathData->SetPoint(old_count, x, y, FXPT_MOVETO); - m_pPathData->SetPoint(old_count + 1, x + (width * FXSYS_cos(start_angle)), - y + (height * FXSYS_sin(start_angle)), FXPT_LINETO); - return; - } - AddArc(x, y, width, height, start_angle, sweep_angle); - m_pPathData->AddPointCount(1); - m_pPathData->SetPoint(m_pPathData->GetPointCount() - 1, x, y, - FXPT_LINETO | FXPT_CLOSEFIGURE); -} diff --git a/xfa/src/fxgraphics/fx_path_generator.h b/xfa/src/fxgraphics/fx_path_generator.h deleted file mode 100644 index b8253961de..0000000000 --- a/xfa/src/fxgraphics/fx_path_generator.h +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXGRAPHICS_FX_PATH_GENERATOR_H_ -#define XFA_SRC_FXGRAPHICS_FX_PATH_GENERATOR_H_ - -#include "core/include/fxge/fx_ge.h" - -class CFX_PathGenerator { - public: - CFX_PathGenerator(); - void Create(); - ~CFX_PathGenerator(); - CFX_PathData* GetPathData() const { return m_pPathData; } - void AddPathData(CFX_PathData* path_data); - void AddPathData(FX_PATHPOINT* points, int count); - void MoveTo(FX_FLOAT x, FX_FLOAT y); - void LineTo(FX_FLOAT x, FX_FLOAT y); - void BezierTo(FX_FLOAT ctrl_x1, - FX_FLOAT ctrl_y1, - FX_FLOAT ctrl_x2, - FX_FLOAT ctrl_y2, - FX_FLOAT to_x, - FX_FLOAT to_y); - void Close(); - void ArcTo(FX_FLOAT x, - FX_FLOAT y, - FX_FLOAT width, - FX_FLOAT height, - FX_FLOAT start_angle, - FX_FLOAT sweep_angle); - - void AddLine(FX_FLOAT x1, FX_FLOAT y1, FX_FLOAT x2, FX_FLOAT y2); - void AddBezier(FX_FLOAT start_x, - FX_FLOAT start_y, - FX_FLOAT ctrl_x1, - FX_FLOAT ctrl_y1, - FX_FLOAT ctrl_x2, - FX_FLOAT ctrl_y2, - FX_FLOAT end_x, - FX_FLOAT end_y); - void AddRectangle(FX_FLOAT x1, FX_FLOAT y1, FX_FLOAT x2, FX_FLOAT y2); - void AddEllipse(FX_FLOAT x, FX_FLOAT y, FX_FLOAT width, FX_FLOAT height); - void AddArc(FX_FLOAT x, - FX_FLOAT y, - FX_FLOAT width, - FX_FLOAT height, - FX_FLOAT start_angle, - FX_FLOAT sweep_angle); - void AddPie(FX_FLOAT x, - FX_FLOAT y, - FX_FLOAT width, - FX_FLOAT height, - FX_FLOAT start_angle, - FX_FLOAT sweep_angle); - - protected: - CFX_PathData* m_pPathData; -}; - -#endif // XFA_SRC_FXGRAPHICS_FX_PATH_GENERATOR_H_ diff --git a/xfa/src/fxgraphics/pre.h b/xfa/src/fxgraphics/pre.h deleted file mode 100644 index 625df394d7..0000000000 --- a/xfa/src/fxgraphics/pre.h +++ /dev/null @@ -1,586 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXGRAPHICS_PRE_H_ -#define XFA_SRC_FXGRAPHICS_PRE_H_ - -enum { - FX_CONTEXT_None = 0, - FX_CONTEXT_Device, -}; -enum { FX_COLOR_None = 0, FX_COLOR_Solid, FX_COLOR_Pattern, FX_COLOR_Shading }; -enum { FX_PATTERN_None = 0, FX_PATTERN_Bitmap, FX_PATTERN_Hatch }; -enum { FX_SHADING_None = 0, FX_SHADING_Axial, FX_SHADING_Radial }; - -#define FX_HATCHSTYLE_Total 53 - -struct FX_HATCHDATA { - int32_t width; - int32_t height; - uint8_t maskBits[64]; -}; -typedef FX_HATCHDATA const* FX_LPCHATCHDATA; - -static const FX_HATCHDATA hatchBitmapData[FX_HATCHSTYLE_Total] = { - {16, - 16, - { - 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - }}, - {16, - 16, - { - 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, - 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, - 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, - 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, - 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, - 0x80, 0x80, 0x00, 0x00, - }}, - {16, - 16, - { - 0x80, 0x80, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x20, 0x20, 0x00, 0x00, - 0x10, 0x10, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, - 0x02, 0x02, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, - 0x40, 0x40, 0x00, 0x00, 0x20, 0x20, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, - 0x08, 0x08, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, - 0x01, 0x01, 0x00, 0x00, - }}, - {16, - 16, - { - 0x01, 0x01, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, - 0x08, 0x08, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x20, 0x20, 0x00, 0x00, - 0x40, 0x40, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, - 0x02, 0x02, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, - 0x10, 0x10, 0x00, 0x00, 0x20, 0x20, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, - 0x80, 0x80, 0x00, 0x00, - }}, - {16, - 16, - { - 0xff, 0xff, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, - 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, - 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, - 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, - 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, - 0x80, 0x80, 0x00, 0x00, - }}, - {16, - 16, - { - 0x81, 0x81, 0x00, 0x00, 0x42, 0x42, 0x00, 0x00, 0x24, 0x24, 0x00, 0x00, - 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x24, 0x24, 0x00, 0x00, - 0x42, 0x42, 0x00, 0x00, 0x81, 0x81, 0x00, 0x00, 0x81, 0x81, 0x00, 0x00, - 0x42, 0x42, 0x00, 0x00, 0x24, 0x24, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, - 0x18, 0x18, 0x00, 0x00, 0x24, 0x24, 0x00, 0x00, 0x42, 0x42, 0x00, 0x00, - 0x81, 0x81, 0x00, 0x00, - }}, - {16, - 16, - { - 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - }}, - {16, - 16, - { - 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - }}, - {16, - 16, - { - 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x22, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x22, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - }}, - {16, - 16, - { - 0x88, 0x88, 0x00, 0x00, 0x22, 0x22, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, - 0x22, 0x22, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, 0x22, 0x22, 0x00, 0x00, - 0x88, 0x88, 0x00, 0x00, 0x22, 0x22, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, - 0x22, 0x22, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, 0x22, 0x22, 0x00, 0x00, - 0x88, 0x88, 0x00, 0x00, 0x22, 0x22, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, - 0x22, 0x22, 0x00, 0x00, - }}, - {16, - 16, - { - 0xaa, 0xaa, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0xaa, 0xaa, 0x00, 0x00, - 0x11, 0x11, 0x00, 0x00, 0xaa, 0xaa, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, - 0xaa, 0xaa, 0x00, 0x00, 0x11, 0x11, 0x00, 0x00, 0xaa, 0xaa, 0x00, 0x00, - 0x44, 0x44, 0x00, 0x00, 0xaa, 0xaa, 0x00, 0x00, 0x11, 0x11, 0x00, 0x00, - 0xaa, 0xaa, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0xaa, 0xaa, 0x00, 0x00, - 0x11, 0x11, 0x00, 0x00, - }}, - {16, - 16, - { - 0xaa, 0xaa, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0xaa, 0xaa, 0x00, 0x00, - 0x51, 0x51, 0x00, 0x00, 0xaa, 0xaa, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, - 0xaa, 0xaa, 0x00, 0x00, 0x15, 0x15, 0x00, 0x00, 0xaa, 0xaa, 0x00, 0x00, - 0x55, 0x55, 0x00, 0x00, 0xaa, 0xaa, 0x00, 0x00, 0x51, 0x51, 0x00, 0x00, - 0xaa, 0xaa, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0xaa, 0xaa, 0x00, 0x00, - 0x15, 0x15, 0x00, 0x00, - }}, - {16, - 16, - { - 0xaa, 0xaa, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0xaa, 0xaa, 0x00, 0x00, - 0x55, 0x55, 0x00, 0x00, 0xaa, 0xaa, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, - 0xaa, 0xaa, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0xaa, 0xaa, 0x00, 0x00, - 0x55, 0x55, 0x00, 0x00, 0xaa, 0xaa, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, - 0xaa, 0xaa, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0xaa, 0xaa, 0x00, 0x00, - 0x55, 0x55, 0x00, 0x00, - }}, - {16, - 16, - { - 0xee, 0xee, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0xbb, 0xbb, 0x00, 0x00, - 0x55, 0x55, 0x00, 0x00, 0xee, 0xee, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, - 0xbb, 0xbb, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0xee, 0xee, 0x00, 0x00, - 0x55, 0x55, 0x00, 0x00, 0xbb, 0xbb, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, - 0xee, 0xee, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0xbb, 0xbb, 0x00, 0x00, - 0x55, 0x55, 0x00, 0x00, - }}, - {16, - 16, - { - 0x77, 0x77, 0x00, 0x00, 0xdd, 0xdd, 0x00, 0x00, 0x77, 0x77, 0x00, 0x00, - 0xdd, 0xdd, 0x00, 0x00, 0x77, 0x77, 0x00, 0x00, 0xdd, 0xdd, 0x00, 0x00, - 0x77, 0x77, 0x00, 0x00, 0xdd, 0xdd, 0x00, 0x00, 0x77, 0x77, 0x00, 0x00, - 0xdd, 0xdd, 0x00, 0x00, 0x77, 0x77, 0x00, 0x00, 0xdd, 0xdd, 0x00, 0x00, - 0x77, 0x77, 0x00, 0x00, 0xdd, 0xdd, 0x00, 0x00, 0x77, 0x77, 0x00, 0x00, - 0xdd, 0xdd, 0x00, 0x00, - }}, - {16, - 16, - { - 0x77, 0x77, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xdd, 0xdd, 0x00, 0x00, - 0xff, 0xff, 0x00, 0x00, 0x77, 0x77, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, - 0xdd, 0xdd, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x77, 0x77, 0x00, 0x00, - 0xff, 0xff, 0x00, 0x00, 0xdd, 0xdd, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, - 0x77, 0x77, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xdd, 0xdd, 0x00, 0x00, - 0xff, 0xff, 0x00, 0x00, - }}, - {16, - 16, - { - 0xef, 0xef, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xfe, 0xfe, 0x00, 0x00, - 0xff, 0xff, 0x00, 0x00, 0xef, 0xef, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, - 0xfe, 0xfe, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xef, 0xef, 0x00, 0x00, - 0xff, 0xff, 0x00, 0x00, 0xfe, 0xfe, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, - 0xef, 0xef, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xfe, 0xfe, 0x00, 0x00, - 0xff, 0xff, 0x00, 0x00, - }}, - {16, - 16, - { - 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, - 0xf7, 0xf7, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, - 0xff, 0xff, 0x00, 0x00, 0x7f, 0x7f, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, - 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xf7, 0xf7, 0x00, 0x00, - 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, - 0x7f, 0x7f, 0x00, 0x00, - }}, - {16, - 16, - { - 0x88, 0x88, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x22, 0x22, 0x00, 0x00, - 0x11, 0x11, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, - 0x22, 0x22, 0x00, 0x00, 0x11, 0x11, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, - 0x44, 0x44, 0x00, 0x00, 0x22, 0x22, 0x00, 0x00, 0x11, 0x11, 0x00, 0x00, - 0x88, 0x88, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x22, 0x22, 0x00, 0x00, - 0x11, 0x11, 0x00, 0x00, - }}, - {16, - 16, - { - 0x11, 0x11, 0x00, 0x00, 0x22, 0x22, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, - 0x88, 0x88, 0x00, 0x00, 0x11, 0x11, 0x00, 0x00, 0x22, 0x22, 0x00, 0x00, - 0x44, 0x44, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, 0x11, 0x11, 0x00, 0x00, - 0x22, 0x22, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, - 0x11, 0x11, 0x00, 0x00, 0x22, 0x22, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, - 0x88, 0x88, 0x00, 0x00, - }}, - {16, - 16, - { - 0xcc, 0xcc, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x33, 0x33, 0x00, 0x00, - 0x99, 0x99, 0x00, 0x00, 0xcc, 0xcc, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, - 0x33, 0x33, 0x00, 0x00, 0x99, 0x99, 0x00, 0x00, 0xcc, 0xcc, 0x00, 0x00, - 0x66, 0x66, 0x00, 0x00, 0x33, 0x33, 0x00, 0x00, 0x99, 0x99, 0x00, 0x00, - 0xcc, 0xcc, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x33, 0x33, 0x00, 0x00, - 0x99, 0x99, 0x00, 0x00, - }}, - {16, - 16, - { - 0x33, 0x33, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0xcc, 0xcc, 0x00, 0x00, - 0x99, 0x99, 0x00, 0x00, 0x33, 0x33, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, - 0xcc, 0xcc, 0x00, 0x00, 0x99, 0x99, 0x00, 0x00, 0x33, 0x33, 0x00, 0x00, - 0x66, 0x66, 0x00, 0x00, 0xcc, 0xcc, 0x00, 0x00, 0x99, 0x99, 0x00, 0x00, - 0x33, 0x33, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0xcc, 0xcc, 0x00, 0x00, - 0x99, 0x99, 0x00, 0x00, - }}, - {16, - 16, - { - 0xc1, 0xc1, 0x00, 0x00, 0xe0, 0xe0, 0x00, 0x00, 0x70, 0x70, 0x00, 0x00, - 0x38, 0x38, 0x00, 0x00, 0x1c, 0x1c, 0x00, 0x00, 0x0e, 0x0e, 0x00, 0x00, - 0x07, 0x07, 0x00, 0x00, 0x83, 0x83, 0x00, 0x00, 0xc1, 0xc1, 0x00, 0x00, - 0xe0, 0xe0, 0x00, 0x00, 0x70, 0x70, 0x00, 0x00, 0x38, 0x38, 0x00, 0x00, - 0x1c, 0x1c, 0x00, 0x00, 0x0e, 0x0e, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, - 0x83, 0x83, 0x00, 0x00, - }}, - {16, - 16, - { - 0x83, 0x83, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, 0x0e, 0x0e, 0x00, 0x00, - 0x1c, 0x1c, 0x00, 0x00, 0x38, 0x38, 0x00, 0x00, 0x70, 0x70, 0x00, 0x00, - 0xe0, 0xe0, 0x00, 0x00, 0xc1, 0xc1, 0x00, 0x00, 0x83, 0x83, 0x00, 0x00, - 0x07, 0x07, 0x00, 0x00, 0x0e, 0x0e, 0x00, 0x00, 0x1c, 0x1c, 0x00, 0x00, - 0x38, 0x38, 0x00, 0x00, 0x70, 0x70, 0x00, 0x00, 0xe0, 0xe0, 0x00, 0x00, - 0xc1, 0xc1, 0x00, 0x00, - }}, - {16, - 16, - { - 0x88, 0x88, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, - 0x88, 0x88, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, - 0x88, 0x88, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, - 0x88, 0x88, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, - 0x88, 0x88, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, - 0x88, 0x88, 0x00, 0x00, - }}, - {16, - 16, - { - 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - }}, - {16, - 16, - { - 0x55, 0x55, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, - 0x55, 0x55, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, - 0x55, 0x55, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, - 0x55, 0x55, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, - 0x55, 0x55, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, - 0x55, 0x55, 0x00, 0x00, - }}, - {16, - 16, - { - 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - }}, - {16, - 16, - { - 0xcc, 0xcc, 0x00, 0x00, 0xcc, 0xcc, 0x00, 0x00, 0xcc, 0xcc, 0x00, 0x00, - 0xcc, 0xcc, 0x00, 0x00, 0xcc, 0xcc, 0x00, 0x00, 0xcc, 0xcc, 0x00, 0x00, - 0xcc, 0xcc, 0x00, 0x00, 0xcc, 0xcc, 0x00, 0x00, 0xcc, 0xcc, 0x00, 0x00, - 0xcc, 0xcc, 0x00, 0x00, 0xcc, 0xcc, 0x00, 0x00, 0xcc, 0xcc, 0x00, 0x00, - 0xcc, 0xcc, 0x00, 0x00, 0xcc, 0xcc, 0x00, 0x00, 0xcc, 0xcc, 0x00, 0x00, - 0xcc, 0xcc, 0x00, 0x00, - }}, - {16, - 16, - { - 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, - 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - }}, - {16, - 16, - { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, - 0x44, 0x44, 0x00, 0x00, 0x22, 0x22, 0x00, 0x00, 0x11, 0x11, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, - 0x22, 0x22, 0x00, 0x00, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - }}, - {16, - 16, - { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x00, 0x00, - 0x22, 0x22, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x00, 0x00, 0x22, 0x22, 0x00, 0x00, - 0x44, 0x44, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - }}, - {16, - 16, - { - 0xf0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xf0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - }}, - {16, - 16, - { - 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, - 0x80, 0x80, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, - 0x08, 0x08, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, - 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, - 0x08, 0x08, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, - 0x08, 0x08, 0x00, 0x00, - }}, - {16, - 16, - { - 0x80, 0x80, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, - 0x02, 0x02, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, - 0x20, 0x20, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, - 0x08, 0x08, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, - 0x10, 0x10, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x20, 0x20, 0x00, 0x00, - 0x04, 0x04, 0x00, 0x00, - }}, - {16, - 16, - { - 0xb1, 0xb1, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, - 0x1b, 0x1b, 0x00, 0x00, 0xd8, 0xd8, 0x00, 0x00, 0xc0, 0xc0, 0x00, 0x00, - 0x0c, 0x0c, 0x00, 0x00, 0x8d, 0x8d, 0x00, 0x00, 0xb1, 0xb1, 0x00, 0x00, - 0x30, 0x30, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x1b, 0x1b, 0x00, 0x00, - 0xd8, 0xd8, 0x00, 0x00, 0xc0, 0xc0, 0x00, 0x00, 0x0c, 0x0c, 0x00, 0x00, - 0x8d, 0x8d, 0x00, 0x00, - }}, - {16, - 16, - { - 0x81, 0x81, 0x00, 0x00, 0x42, 0x42, 0x00, 0x00, 0x24, 0x24, 0x00, 0x00, - 0x18, 0x18, 0x00, 0x00, 0x81, 0x81, 0x00, 0x00, 0x42, 0x42, 0x00, 0x00, - 0x24, 0x24, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x81, 0x81, 0x00, 0x00, - 0x42, 0x42, 0x00, 0x00, 0x24, 0x24, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, - 0x81, 0x81, 0x00, 0x00, 0x42, 0x42, 0x00, 0x00, 0x24, 0x24, 0x00, 0x00, - 0x18, 0x18, 0x00, 0x00, - }}, - {16, - 16, - { - 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x25, 0x25, 0x00, 0x00, - 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, - 0x25, 0x25, 0x00, 0x00, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x18, 0x18, 0x00, 0x00, 0x25, 0x25, 0x00, 0x00, 0xc0, 0xc0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x25, 0x25, 0x00, 0x00, - 0xc0, 0xc0, 0x00, 0x00, - }}, - {16, - 16, - { - 0x01, 0x01, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, - 0x08, 0x08, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x24, 0x24, 0x00, 0x00, - 0x42, 0x42, 0x00, 0x00, 0x81, 0x81, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, - 0x02, 0x02, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, - 0x18, 0x18, 0x00, 0x00, 0x24, 0x24, 0x00, 0x00, 0x42, 0x42, 0x00, 0x00, - 0x81, 0x81, 0x00, 0x00, - }}, - {16, - 16, - { - 0xff, 0xff, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, - 0x80, 0x80, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, - 0x08, 0x08, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, - 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, - 0xff, 0xff, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, - 0x08, 0x08, 0x00, 0x00, - }}, - {16, - 16, - { - 0x88, 0x88, 0x00, 0x00, 0x54, 0x54, 0x00, 0x00, 0x22, 0x22, 0x00, 0x00, - 0x45, 0x45, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, 0x14, 0x14, 0x00, 0x00, - 0x22, 0x22, 0x00, 0x00, 0x51, 0x51, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, - 0x54, 0x54, 0x00, 0x00, 0x22, 0x22, 0x00, 0x00, 0x45, 0x45, 0x00, 0x00, - 0x88, 0x88, 0x00, 0x00, 0x14, 0x14, 0x00, 0x00, 0x22, 0x22, 0x00, 0x00, - 0x51, 0x51, 0x00, 0x00, - }}, - {16, - 16, - { - 0xaa, 0xaa, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0xaa, 0xaa, 0x00, 0x00, - 0x55, 0x55, 0x00, 0x00, 0xf0, 0xf0, 0x00, 0x00, 0xf0, 0xf0, 0x00, 0x00, - 0xf0, 0xf0, 0x00, 0x00, 0xf0, 0xf0, 0x00, 0x00, 0xaa, 0xaa, 0x00, 0x00, - 0x55, 0x55, 0x00, 0x00, 0xaa, 0xaa, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, - 0xf0, 0xf0, 0x00, 0x00, 0xf0, 0xf0, 0x00, 0x00, 0xf0, 0xf0, 0x00, 0x00, - 0xf0, 0xf0, 0x00, 0x00, - }}, - {16, - 16, - { - 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, - 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, - 0x01, 0x01, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x10, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, - 0x80, 0x80, 0x00, 0x00, - }}, - {16, - 16, - { - 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - }}, - {16, - 16, - { - 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x22, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x22, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - }}, - {16, - 16, - { - 0x03, 0x03, 0x00, 0x00, 0x84, 0x84, 0x00, 0x00, 0x48, 0x48, 0x00, 0x00, - 0x30, 0x30, 0x00, 0x00, 0x0c, 0x0c, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, - 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, - 0x84, 0x84, 0x00, 0x00, 0x48, 0x48, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, - 0x0c, 0x0c, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, - 0x01, 0x01, 0x00, 0x00, - }}, - {16, - 16, - { - 0xff, 0xff, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, - 0x99, 0x99, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, - 0xff, 0xff, 0x00, 0x00, 0x99, 0x99, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, - 0x66, 0x66, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x99, 0x99, 0x00, 0x00, - 0xff, 0xff, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, - 0x99, 0x99, 0x00, 0x00, - }}, - {16, - 16, - { - 0x77, 0x77, 0x00, 0x00, 0x89, 0x89, 0x00, 0x00, 0x8f, 0x8f, 0x00, 0x00, - 0x8f, 0x8f, 0x00, 0x00, 0x77, 0x77, 0x00, 0x00, 0x98, 0x98, 0x00, 0x00, - 0xf8, 0xf8, 0x00, 0x00, 0xf8, 0xf8, 0x00, 0x00, 0x77, 0x77, 0x00, 0x00, - 0x89, 0x89, 0x00, 0x00, 0x8f, 0x8f, 0x00, 0x00, 0x8f, 0x8f, 0x00, 0x00, - 0x77, 0x77, 0x00, 0x00, 0x98, 0x98, 0x00, 0x00, 0xf8, 0xf8, 0x00, 0x00, - 0xf8, 0xf8, 0x00, 0x00, - }}, - {16, - 16, - { - 0xff, 0xff, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, - 0x88, 0x88, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, - 0x88, 0x88, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, - 0x88, 0x88, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, - 0xff, 0xff, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, - 0x88, 0x88, 0x00, 0x00, - }}, - {16, - 16, - { - 0x99, 0x99, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, - 0x99, 0x99, 0x00, 0x00, 0x99, 0x99, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, - 0x66, 0x66, 0x00, 0x00, 0x99, 0x99, 0x00, 0x00, 0x99, 0x99, 0x00, 0x00, - 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x99, 0x99, 0x00, 0x00, - 0x99, 0x99, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, - 0x99, 0x99, 0x00, 0x00, - }}, - {16, - 16, - { - 0xf0, 0xf0, 0x00, 0x00, 0xf0, 0xf0, 0x00, 0x00, 0xf0, 0xf0, 0x00, 0x00, - 0xf0, 0xf0, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, - 0x0f, 0x0f, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0xf0, 0xf0, 0x00, 0x00, - 0xf0, 0xf0, 0x00, 0x00, 0xf0, 0xf0, 0x00, 0x00, 0xf0, 0xf0, 0x00, 0x00, - 0x0f, 0x0f, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, - 0x0f, 0x0f, 0x00, 0x00, - }}, - {16, - 16, - { - 0x82, 0x82, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x28, 0x28, 0x00, 0x00, - 0x10, 0x10, 0x00, 0x00, 0x28, 0x28, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, - 0x82, 0x82, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x82, 0x82, 0x00, 0x00, - 0x44, 0x44, 0x00, 0x00, 0x28, 0x28, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, - 0x28, 0x28, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x82, 0x82, 0x00, 0x00, - 0x01, 0x01, 0x00, 0x00, - }}, - {16, - 16, - { - 0x10, 0x10, 0x00, 0x00, 0x38, 0x38, 0x00, 0x00, 0x7c, 0x7c, 0x00, 0x00, - 0xfe, 0xfe, 0x00, 0x00, 0x7c, 0x7c, 0x00, 0x00, 0x38, 0x38, 0x00, 0x00, - 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, - 0x38, 0x38, 0x00, 0x00, 0x7c, 0x7c, 0x00, 0x00, 0xfe, 0xfe, 0x00, 0x00, - 0x7c, 0x7c, 0x00, 0x00, 0x38, 0x38, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - }}, -}; -#if defined(__WIN32__) || defined(_WIN32) -#define FX_START_TIMER \ - SYSTEMTIME start, stop; \ - ::GetLocalTime(&start); -#define FX_STOP_TIMER \ - ::GetLocalTime(&stop); \ - WORD wSecond = stop.wSecond - start.wSecond; \ - WORD wMilliseconds = stop.wMilliseconds - start.wMilliseconds; \ - char buf[256]; \ - memset(buf, 0, sizeof(buf)); \ - snprintf(buf, sizeof(buf) - 1, "duration is %d millisecond\n", \ - wSecond * 1000 + wMilliseconds); \ - ::OutputDebugString(buf); -#elif defined(__linux) || defined(linux) -#define FX_START_TIMER -#define FX_STOP_TIMER -#elif defined(__APPLE__) || defined(__MACOSX__) -#define FX_START_TIMER \ - NSTimeInterval start, stop; \ - start = [NSDate timeIntervalSinceReferenceDate]; -#define FX_STOP_TIMER \ - stop = [NSDate timeIntervalSinceReferenceDate]; \ - NSTimeInterval duration = stop - start; \ - printf("duration is %f millisecond\n", duration * 1000); -#else -#endif - -#endif // XFA_SRC_FXGRAPHICS_PRE_H_ diff --git a/xfa/src/fxjse/class.cpp b/xfa/src/fxjse/class.cpp deleted file mode 100644 index bccbe2ba20..0000000000 --- a/xfa/src/fxjse/class.cpp +++ /dev/null @@ -1,348 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fxjse/class.h" - -#include "xfa/src/fxjse/context.h" -#include "xfa/src/fxjse/scope_inline.h" -#include "xfa/src/fxjse/util_inline.h" -#include "xfa/src/fxjse/value.h" - -static void FXJSE_V8ConstructorCallback_Wrapper( - const v8::FunctionCallbackInfo& info); -static void FXJSE_V8FunctionCallback_Wrapper( - const v8::FunctionCallbackInfo& info); -static void FXJSE_V8GetterCallback_Wrapper( - v8::Local property, - const v8::PropertyCallbackInfo& info); -static void FXJSE_V8SetterCallback_Wrapper( - v8::Local property, - v8::Local value, - const v8::PropertyCallbackInfo& info); - -void FXJSE_DefineFunctions(FXJSE_HCONTEXT hContext, - const FXJSE_FUNCTION* lpFunctions, - int nNum) { - CFXJSE_Context* lpContext = reinterpret_cast(hContext); - ASSERT(lpContext); - CFXJSE_ScopeUtil_IsolateHandleContext scope(lpContext); - v8::Isolate* pIsolate = lpContext->GetRuntime(); - v8::Local hGlobalObject = - FXJSE_GetGlobalObjectFromContext(scope.GetLocalContext()); - for (int32_t i = 0; i < nNum; i++) { - v8::Maybe maybe_success = hGlobalObject->DefineOwnProperty( - scope.GetLocalContext(), - v8::String::NewFromUtf8(pIsolate, lpFunctions[i].name), - v8::Function::New( - pIsolate, FXJSE_V8FunctionCallback_Wrapper, - v8::External::New(pIsolate, - const_cast(lpFunctions + i))), - static_cast(v8::ReadOnly | v8::DontDelete)); - if (!maybe_success.FromMaybe(false)) - return; - } -} - -FXJSE_HCLASS FXJSE_DefineClass(FXJSE_HCONTEXT hContext, - const FXJSE_CLASS* lpClass) { - CFXJSE_Context* lpContext = reinterpret_cast(hContext); - ASSERT(lpContext); - return reinterpret_cast( - CFXJSE_Class::Create(lpContext, lpClass, FALSE)); -} - -FXJSE_HCLASS FXJSE_GetClass(FXJSE_HCONTEXT hContext, - const CFX_ByteStringC& szName) { - return reinterpret_cast(CFXJSE_Class::GetClassFromContext( - reinterpret_cast(hContext), szName)); -} - -static void FXJSE_V8FunctionCallback_Wrapper( - const v8::FunctionCallbackInfo& info) { - const FXJSE_FUNCTION* lpFunctionInfo = - static_cast(info.Data().As()->Value()); - if (!lpFunctionInfo) { - return; - } - CFX_ByteStringC szFunctionName(lpFunctionInfo->name); - CFXJSE_Value* lpThisValue = CFXJSE_Value::Create(info.GetIsolate()); - lpThisValue->ForceSetValue(info.This()); - CFXJSE_Value* lpRetValue = CFXJSE_Value::Create(info.GetIsolate()); - CFXJSE_ArgumentsImpl impl = {&info, lpRetValue}; - lpFunctionInfo->callbackProc(reinterpret_cast(lpThisValue), - szFunctionName, - reinterpret_cast(impl)); - if (!lpRetValue->DirectGetValue().IsEmpty()) { - info.GetReturnValue().Set(lpRetValue->DirectGetValue()); - } - delete lpRetValue; - lpRetValue = NULL; - delete lpThisValue; - lpThisValue = NULL; -} - -static void FXJSE_V8ClassGlobalConstructorCallback_Wrapper( - const v8::FunctionCallbackInfo& info) { - const FXJSE_CLASS* lpClassDefinition = - static_cast(info.Data().As()->Value()); - if (!lpClassDefinition) { - return; - } - CFX_ByteStringC szFunctionName(lpClassDefinition->name); - CFXJSE_Value* lpThisValue = CFXJSE_Value::Create(info.GetIsolate()); - lpThisValue->ForceSetValue(info.This()); - CFXJSE_Value* lpRetValue = CFXJSE_Value::Create(info.GetIsolate()); - CFXJSE_ArgumentsImpl impl = {&info, lpRetValue}; - lpClassDefinition->constructor(reinterpret_cast(lpThisValue), - szFunctionName, - reinterpret_cast(impl)); - if (!lpRetValue->DirectGetValue().IsEmpty()) { - info.GetReturnValue().Set(lpRetValue->DirectGetValue()); - } - delete lpRetValue; - lpRetValue = NULL; - delete lpThisValue; - lpThisValue = NULL; -} - -static void FXJSE_V8GetterCallback_Wrapper( - v8::Local property, - const v8::PropertyCallbackInfo& info) { - const FXJSE_PROPERTY* lpPropertyInfo = - static_cast(info.Data().As()->Value()); - if (!lpPropertyInfo) { - return; - } - CFX_ByteStringC szPropertyName(lpPropertyInfo->name); - CFXJSE_Value* lpThisValue = CFXJSE_Value::Create(info.GetIsolate()); - CFXJSE_Value* lpPropValue = CFXJSE_Value::Create(info.GetIsolate()); - lpThisValue->ForceSetValue(info.This()); - lpPropertyInfo->getProc(reinterpret_cast(lpThisValue), - szPropertyName, - reinterpret_cast(lpPropValue)); - info.GetReturnValue().Set(lpPropValue->DirectGetValue()); - delete lpThisValue; - lpThisValue = NULL; - delete lpPropValue; - lpPropValue = NULL; -} - -static void FXJSE_V8SetterCallback_Wrapper( - v8::Local property, - v8::Local value, - const v8::PropertyCallbackInfo& info) { - const FXJSE_PROPERTY* lpPropertyInfo = - static_cast(info.Data().As()->Value()); - if (!lpPropertyInfo) { - return; - } - CFX_ByteStringC szPropertyName(lpPropertyInfo->name); - CFXJSE_Value* lpThisValue = CFXJSE_Value::Create(info.GetIsolate()); - CFXJSE_Value* lpPropValue = CFXJSE_Value::Create(info.GetIsolate()); - lpThisValue->ForceSetValue(info.This()); - lpPropValue->ForceSetValue(value); - lpPropertyInfo->setProc(reinterpret_cast(lpThisValue), - szPropertyName, - reinterpret_cast(lpPropValue)); - delete lpThisValue; - lpThisValue = NULL; - delete lpPropValue; - lpPropValue = NULL; -} - -static void FXJSE_V8ConstructorCallback_Wrapper( - const v8::FunctionCallbackInfo& info) { - const FXJSE_CLASS* lpClassDefinition = - static_cast(info.Data().As()->Value()); - if (!lpClassDefinition) { - return; - } - FXSYS_assert(info.This()->InternalFieldCount()); - info.This()->SetAlignedPointerInInternalField(0, NULL); -} - -FXJSE_HRUNTIME CFXJSE_Arguments::GetRuntime() const { - const CFXJSE_ArgumentsImpl* lpArguments = - reinterpret_cast(this); - return reinterpret_cast( - lpArguments->m_pRetValue->GetIsolate()); -} - -int32_t CFXJSE_Arguments::GetLength() const { - const CFXJSE_ArgumentsImpl* lpArguments = - reinterpret_cast(this); - return lpArguments->m_pInfo->Length(); -} - -FXJSE_HVALUE CFXJSE_Arguments::GetValue(int32_t index) const { - const CFXJSE_ArgumentsImpl* lpArguments = - reinterpret_cast(this); - CFXJSE_Value* lpArgValue = CFXJSE_Value::Create(v8::Isolate::GetCurrent()); - ASSERT(lpArgValue); - lpArgValue->ForceSetValue((*lpArguments->m_pInfo)[index]); - return reinterpret_cast(lpArgValue); -} - -FX_BOOL CFXJSE_Arguments::GetBoolean(int32_t index) const { - const CFXJSE_ArgumentsImpl* lpArguments = - reinterpret_cast(this); - return (*lpArguments->m_pInfo)[index]->BooleanValue(); -} - -int32_t CFXJSE_Arguments::GetInt32(int32_t index) const { - const CFXJSE_ArgumentsImpl* lpArguments = - reinterpret_cast(this); - return static_cast((*lpArguments->m_pInfo)[index]->NumberValue()); -} - -FX_FLOAT CFXJSE_Arguments::GetFloat(int32_t index) const { - const CFXJSE_ArgumentsImpl* lpArguments = - reinterpret_cast(this); - return static_cast((*lpArguments->m_pInfo)[index]->NumberValue()); -} - -CFX_ByteString CFXJSE_Arguments::GetUTF8String(int32_t index) const { - const CFXJSE_ArgumentsImpl* lpArguments = - reinterpret_cast(this); - v8::Local hString = (*lpArguments->m_pInfo)[index]->ToString(); - v8::String::Utf8Value szStringVal(hString); - return CFX_ByteString(*szStringVal); -} - -void* CFXJSE_Arguments::GetObject(int32_t index, FXJSE_HCLASS hClass) const { - const CFXJSE_ArgumentsImpl* lpArguments = - reinterpret_cast(this); - v8::Local hValue = (*lpArguments->m_pInfo)[index]; - ASSERT(!hValue.IsEmpty()); - if (!hValue->IsObject()) { - return NULL; - } - CFXJSE_Class* lpClass = reinterpret_cast(hClass); - return FXJSE_RetrieveObjectBinding(hValue.As(), lpClass); -} - -FXJSE_HVALUE CFXJSE_Arguments::GetReturnValue() { - const CFXJSE_ArgumentsImpl* lpArguments = - reinterpret_cast(this); - return reinterpret_cast(lpArguments->m_pRetValue); -} -static void FXJSE_Context_GlobalObjToString( - const v8::FunctionCallbackInfo& info) { - const FXJSE_CLASS* lpClass = - static_cast(info.Data().As()->Value()); - if (!lpClass) { - return; - } - if (info.This() == info.Holder() && lpClass->name) { - CFX_ByteString szStringVal; - szStringVal.Format("[object %s]", lpClass->name); - info.GetReturnValue().Set(v8::String::NewFromUtf8( - info.GetIsolate(), (const FX_CHAR*)szStringVal, - v8::String::kNormalString, szStringVal.GetLength())); - } else { - v8::Local local_str = - info.This() - ->ObjectProtoToString(info.GetIsolate()->GetCurrentContext()) - .FromMaybe(v8::Local()); - info.GetReturnValue().Set(local_str); - } -} - -CFXJSE_Class* CFXJSE_Class::Create(CFXJSE_Context* lpContext, - const FXJSE_CLASS* lpClassDefinition, - FX_BOOL bIsJSGlobal) { - if (!lpContext || !lpClassDefinition) { - return NULL; - } - CFXJSE_Class* pClass = - GetClassFromContext(lpContext, lpClassDefinition->name); - if (pClass) { - return pClass; - } - v8::Isolate* pIsolate = lpContext->m_pIsolate; - pClass = new CFXJSE_Class(lpContext); - pClass->m_szClassName = lpClassDefinition->name; - pClass->m_lpClassDefinition = lpClassDefinition; - CFXJSE_ScopeUtil_IsolateHandleRootContext scope(pIsolate); - v8::Local hFunctionTemplate = v8::FunctionTemplate::New( - pIsolate, bIsJSGlobal ? 0 : FXJSE_V8ConstructorCallback_Wrapper, - v8::External::New(pIsolate, const_cast(lpClassDefinition))); - hFunctionTemplate->SetClassName( - v8::String::NewFromUtf8(pIsolate, lpClassDefinition->name)); - hFunctionTemplate->InstanceTemplate()->SetInternalFieldCount(1); - v8::Local hObjectTemplate = - hFunctionTemplate->InstanceTemplate(); - SetUpNamedPropHandler(pIsolate, hObjectTemplate, lpClassDefinition); - - if (lpClassDefinition->propNum) { - for (int32_t i = 0; i < lpClassDefinition->propNum; i++) { - hObjectTemplate->SetNativeDataProperty( - v8::String::NewFromUtf8(pIsolate, - lpClassDefinition->properties[i].name), - lpClassDefinition->properties[i].getProc - ? FXJSE_V8GetterCallback_Wrapper - : NULL, - lpClassDefinition->properties[i].setProc - ? FXJSE_V8SetterCallback_Wrapper - : NULL, - v8::External::New(pIsolate, const_cast( - lpClassDefinition->properties + i)), - static_cast(v8::DontDelete)); - } - } - if (lpClassDefinition->methNum) { - for (int32_t i = 0; i < lpClassDefinition->methNum; i++) { - hObjectTemplate->Set( - v8::String::NewFromUtf8(pIsolate, lpClassDefinition->methods[i].name), - v8::FunctionTemplate::New( - pIsolate, FXJSE_V8FunctionCallback_Wrapper, - v8::External::New(pIsolate, const_cast( - lpClassDefinition->methods + i))), - static_cast(v8::ReadOnly | v8::DontDelete)); - } - } - if (lpClassDefinition->constructor) { - if (bIsJSGlobal) { - hObjectTemplate->Set( - v8::String::NewFromUtf8(pIsolate, lpClassDefinition->name), - v8::FunctionTemplate::New( - pIsolate, FXJSE_V8ClassGlobalConstructorCallback_Wrapper, - v8::External::New(pIsolate, - const_cast(lpClassDefinition))), - static_cast(v8::ReadOnly | v8::DontDelete)); - } else { - v8::Local hLocalContext = - v8::Local::New(pIsolate, lpContext->m_hContext); - FXJSE_GetGlobalObjectFromContext(hLocalContext) - ->Set(v8::String::NewFromUtf8(pIsolate, lpClassDefinition->name), - v8::Function::New( - pIsolate, FXJSE_V8ClassGlobalConstructorCallback_Wrapper, - v8::External::New(pIsolate, const_cast( - lpClassDefinition)))); - } - } - if (bIsJSGlobal) { - hObjectTemplate->Set( - v8::String::NewFromUtf8(pIsolate, "toString"), - v8::FunctionTemplate::New( - pIsolate, FXJSE_Context_GlobalObjToString, - v8::External::New(pIsolate, - const_cast(lpClassDefinition)))); - } - pClass->m_hTemplate.Reset(lpContext->m_pIsolate, hFunctionTemplate); - lpContext->m_rgClasses.Add(pClass); - return pClass; -} -CFXJSE_Class* CFXJSE_Class::GetClassFromContext(CFXJSE_Context* pContext, - const CFX_ByteStringC& szName) { - for (int count = pContext->m_rgClasses.GetSize(), i = 0; i < count; i++) { - CFXJSE_Class* pClass = pContext->m_rgClasses[i]; - if (pClass->m_szClassName == szName) { - return pClass; - } - } - return NULL; -} diff --git a/xfa/src/fxjse/class.h b/xfa/src/fxjse/class.h deleted file mode 100644 index f5738ebcc6..0000000000 --- a/xfa/src/fxjse/class.h +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXJSE_CLASS_H_ -#define XFA_SRC_FXJSE_CLASS_H_ - -#include "v8/include/v8.h" -#include "xfa/include/fxjse/fxjse.h" - -class CFXJSE_Context; -class CFXJSE_Value; - -class CFXJSE_Class { - protected: - CFXJSE_Class(CFXJSE_Context* lpContext) - : m_lpClassDefinition(nullptr), m_pContext(lpContext) {} - - public: - inline CFXJSE_Context* GetContext() { return m_pContext; } - inline v8::Global& GetTemplate() { return m_hTemplate; } - - public: - static CFXJSE_Class* Create(CFXJSE_Context* pContext, - const FXJSE_CLASS* lpClassDefintion, - FX_BOOL bIsJSGlobal = FALSE); - static CFXJSE_Class* GetClassFromContext(CFXJSE_Context* pContext, - const CFX_ByteStringC& szName); - static void SetUpNamedPropHandler( - v8::Isolate* pIsolate, - v8::Local& hObjectTemplate, - const FXJSE_CLASS* lpClassDefinition); - - protected: - CFX_ByteString m_szClassName; - const FXJSE_CLASS* m_lpClassDefinition; - CFXJSE_Context* m_pContext; - v8::Global m_hTemplate; - friend class CFXJSE_Context; - friend class CFXJSE_Value; -}; -struct CFXJSE_ArgumentsImpl { - const v8::FunctionCallbackInfo* m_pInfo; - CFXJSE_Value* m_pRetValue; -}; - -#endif // XFA_SRC_FXJSE_CLASS_H_ diff --git a/xfa/src/fxjse/context.cpp b/xfa/src/fxjse/context.cpp deleted file mode 100644 index 485869d797..0000000000 --- a/xfa/src/fxjse/context.cpp +++ /dev/null @@ -1,275 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fxjse/context.h" - -#include "xfa/src/fxjse/class.h" -#include "xfa/src/fxjse/scope_inline.h" -#include "xfa/src/fxjse/util_inline.h" -#include "xfa/src/fxjse/value.h" - -FXJSE_HCONTEXT FXJSE_Context_Create(FXJSE_HRUNTIME hRuntime, - const FXJSE_CLASS* lpGlobalClass, - void* lpGlobalObject) { - CFXJSE_Context* pContext = CFXJSE_Context::Create( - reinterpret_cast(hRuntime), lpGlobalClass, lpGlobalObject); - return reinterpret_cast(pContext); -} - -void FXJSE_Context_Release(FXJSE_HCONTEXT hContext) { - CFXJSE_Context* pContext = reinterpret_cast(hContext); - if (pContext) { - delete pContext; - } -} - -FXJSE_HVALUE FXJSE_Context_GetGlobalObject(FXJSE_HCONTEXT hContext) { - CFXJSE_Context* pContext = reinterpret_cast(hContext); - if (!pContext) { - return NULL; - } - CFXJSE_Value* lpValue = CFXJSE_Value::Create(pContext->GetRuntime()); - ASSERT(lpValue); - pContext->GetGlobalObject(lpValue); - return reinterpret_cast(lpValue); -} - -FXJSE_HRUNTIME FXJSE_Context_GetRuntime(FXJSE_HCONTEXT hContext) { - CFXJSE_Context* pContext = reinterpret_cast(hContext); - return pContext ? reinterpret_cast(pContext->GetRuntime()) - : NULL; -} - -static const FX_CHAR* szCompatibleModeScripts[] = { - "(function(global, list) {\n" - " 'use strict';\n" - " var objname;\n" - " for (objname in list) {\n" - " var globalobj = global[objname];\n" - " if (globalobj) {\n" - " list[objname].forEach(function(name) {\n" - " if (!globalobj[name]) {\n" - " Object.defineProperty(globalobj, name, {\n" - " writable: true,\n" - " enumerable: false,\n" - " value: (function(obj) {\n" - " if (arguments.length === 0) {\n" - " throw new TypeError('missing argument 0 when calling " - " function ' + objname + '.' + name);\n" - " }\n" - " return globalobj.prototype[name].apply(obj, " - " Array.prototype.slice.call(arguments, 1));\n" - " })\n" - " });\n" - " }\n" - " });\n" - " }\n" - " }\n" - "}(this, {String: ['substr', 'toUpperCase']}));"}; -void FXJSE_Context_EnableCompatibleMode(FXJSE_HCONTEXT hContext, - FX_DWORD dwCompatibleFlags) { - for (uint32_t i = 0; i < (uint32_t)FXJSE_COMPATIBLEMODEFLAGCOUNT; i++) { - if (dwCompatibleFlags & (1 << i)) { - FXJSE_ExecuteScript(hContext, szCompatibleModeScripts[i], NULL, NULL); - } - } -} - -FX_BOOL FXJSE_ExecuteScript(FXJSE_HCONTEXT hContext, - const FX_CHAR* szScript, - FXJSE_HVALUE hRetValue, - FXJSE_HVALUE hNewThisObject) { - CFXJSE_Context* pContext = reinterpret_cast(hContext); - ASSERT(pContext); - return pContext->ExecuteScript( - szScript, reinterpret_cast(hRetValue), - reinterpret_cast(hNewThisObject)); -} - -v8::Local FXJSE_CreateReturnValue(v8::Isolate* pIsolate, - v8::TryCatch& trycatch) { - v8::Local hReturnValue = v8::Object::New(pIsolate); - if (trycatch.HasCaught()) { - v8::Local hException = trycatch.Exception(); - v8::Local hMessage = trycatch.Message(); - if (hException->IsObject()) { - v8::Local hValue; - hValue = hException.As()->Get( - v8::String::NewFromUtf8(pIsolate, "name")); - if (hValue->IsString() || hValue->IsStringObject()) { - hReturnValue->Set(0, hValue); - } else { - hReturnValue->Set(0, v8::String::NewFromUtf8(pIsolate, "Error")); - } - hValue = hException.As()->Get( - v8::String::NewFromUtf8(pIsolate, "message")); - if (hValue->IsString() || hValue->IsStringObject()) { - hReturnValue->Set(1, hValue); - } else { - hReturnValue->Set(1, hMessage->Get()); - } - } else { - hReturnValue->Set(0, v8::String::NewFromUtf8(pIsolate, "Error")); - hReturnValue->Set(1, hMessage->Get()); - } - hReturnValue->Set(2, hException); - hReturnValue->Set(3, v8::Integer::New(pIsolate, hMessage->GetLineNumber())); - hReturnValue->Set(4, hMessage->GetSourceLine()); - v8::Maybe maybe_int = - hMessage->GetStartColumn(pIsolate->GetCurrentContext()); - hReturnValue->Set(5, v8::Integer::New(pIsolate, maybe_int.FromMaybe(0))); - maybe_int = hMessage->GetEndColumn(pIsolate->GetCurrentContext()); - hReturnValue->Set(6, v8::Integer::New(pIsolate, maybe_int.FromMaybe(0))); - } - return hReturnValue; -} - -FX_BOOL FXJSE_ReturnValue_GetMessage(FXJSE_HVALUE hRetValue, - CFX_ByteString& utf8Name, - CFX_ByteString& utf8Message) { - CFXJSE_Value* lpValue = reinterpret_cast(hRetValue); - if (!lpValue) { - return FALSE; - } - v8::Isolate* pIsolate = lpValue->GetIsolate(); - CFXJSE_ScopeUtil_IsolateHandleRootContext scope(pIsolate); - v8::Local hValue = - v8::Local::New(pIsolate, lpValue->DirectGetValue()); - if (!hValue->IsObject()) { - return FALSE; - } - v8::String::Utf8Value hStringVal0( - hValue.As()->Get(0)->ToString()); - utf8Name = *hStringVal0; - v8::String::Utf8Value hStringVal1( - hValue.As()->Get(1)->ToString()); - utf8Message = *hStringVal1; - return TRUE; -} - -FX_BOOL FXJSE_ReturnValue_GetLineInfo(FXJSE_HVALUE hRetValue, - int32_t& nLine, - int32_t& nCol) { - CFXJSE_Value* lpValue = reinterpret_cast(hRetValue); - if (!lpValue) { - return FALSE; - } - v8::Isolate* pIsolate = lpValue->GetIsolate(); - CFXJSE_ScopeUtil_IsolateHandleRootContext scope(pIsolate); - v8::Local hValue = - v8::Local::New(pIsolate, lpValue->DirectGetValue()); - if (!hValue->IsObject()) { - return FALSE; - } - v8::MaybeLocal maybe_int = - hValue.As()->Get(3)->ToInt32(pIsolate->GetCurrentContext()); - nLine = maybe_int.FromMaybe(v8::Local())->Value(); - maybe_int = - hValue.As()->Get(5)->ToInt32(pIsolate->GetCurrentContext()); - nCol = maybe_int.FromMaybe(v8::Local())->Value(); - return TRUE; -} - -CFXJSE_Context* CFXJSE_Context::Create(v8::Isolate* pIsolate, - const FXJSE_CLASS* lpGlobalClass, - void* lpGlobalObject) { - CFXJSE_ScopeUtil_IsolateHandle scope(pIsolate); - CFXJSE_Context* pContext = new CFXJSE_Context(pIsolate); - CFXJSE_Class* lpGlobalClassObj = NULL; - v8::Local hObjectTemplate; - if (lpGlobalClass) { - lpGlobalClassObj = CFXJSE_Class::Create(pContext, lpGlobalClass, TRUE); - ASSERT(lpGlobalClassObj); - v8::Local hFunctionTemplate = - v8::Local::New(pIsolate, - lpGlobalClassObj->m_hTemplate); - hObjectTemplate = hFunctionTemplate->InstanceTemplate(); - } else { - hObjectTemplate = v8::ObjectTemplate::New(pIsolate); - hObjectTemplate->SetInternalFieldCount(1); - } - v8::Local hNewContext = - v8::Context::New(pIsolate, NULL, hObjectTemplate); - v8::Local hRootContext = v8::Local::New( - pIsolate, CFXJSE_RuntimeData::Get(pIsolate)->m_hRootContext); - hNewContext->SetSecurityToken(hRootContext->GetSecurityToken()); - v8::Local hGlobalObject = - FXJSE_GetGlobalObjectFromContext(hNewContext); - FXJSE_UpdateObjectBinding(hGlobalObject, lpGlobalObject); - pContext->m_hContext.Reset(pIsolate, hNewContext); - return pContext; -} - -CFXJSE_Context::~CFXJSE_Context() { - for (int32_t i = 0, count = m_rgClasses.GetSize(); i < count; i++) { - CFXJSE_Class* pClass = m_rgClasses[i]; - if (pClass) { - delete pClass; - } - } - m_rgClasses.RemoveAll(); -} - -void CFXJSE_Context::GetGlobalObject(CFXJSE_Value* pValue) { - ASSERT(pValue); - CFXJSE_ScopeUtil_IsolateHandleContext scope(this); - v8::Local hContext = - v8::Local::New(m_pIsolate, m_hContext); - v8::Local hGlobalObject = hContext->Global(); - pValue->ForceSetValue(hGlobalObject); -} - -FX_BOOL CFXJSE_Context::ExecuteScript(const FX_CHAR* szScript, - CFXJSE_Value* lpRetValue, - CFXJSE_Value* lpNewThisObject) { - CFXJSE_ScopeUtil_IsolateHandleContext scope(this); - v8::TryCatch trycatch(m_pIsolate); - v8::Local hScriptString = - v8::String::NewFromUtf8(m_pIsolate, szScript); - if (lpNewThisObject == NULL) { - v8::Local hScript = v8::Script::Compile(hScriptString); - if (!trycatch.HasCaught()) { - v8::Local hValue = hScript->Run(); - if (!trycatch.HasCaught()) { - if (lpRetValue) { - lpRetValue->m_hValue.Reset(m_pIsolate, hValue); - } - return TRUE; - } - } - if (lpRetValue) { - lpRetValue->m_hValue.Reset(m_pIsolate, - FXJSE_CreateReturnValue(m_pIsolate, trycatch)); - } - return FALSE; - } else { - v8::Local hNewThis = - v8::Local::New(m_pIsolate, lpNewThisObject->m_hValue); - ASSERT(!hNewThis.IsEmpty()); - v8::Local hWrapper = - v8::Script::Compile(v8::String::NewFromUtf8( - m_pIsolate, "(function () { return eval(arguments[0]); })")); - v8::Local hWrapperValue = hWrapper->Run(); - ASSERT(hWrapperValue->IsFunction()); - v8::Local hWrapperFn = hWrapperValue.As(); - if (!trycatch.HasCaught()) { - v8::Local rgArgs[] = {hScriptString}; - v8::Local hValue = - hWrapperFn->Call(hNewThis.As(), 1, rgArgs); - if (!trycatch.HasCaught()) { - if (lpRetValue) { - lpRetValue->m_hValue.Reset(m_pIsolate, hValue); - } - return TRUE; - } - } - if (lpRetValue) { - lpRetValue->m_hValue.Reset(m_pIsolate, - FXJSE_CreateReturnValue(m_pIsolate, trycatch)); - } - return FALSE; - } -} diff --git a/xfa/src/fxjse/context.h b/xfa/src/fxjse/context.h deleted file mode 100644 index b35a28017f..0000000000 --- a/xfa/src/fxjse/context.h +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXJSE_CONTEXT_H_ -#define XFA_SRC_FXJSE_CONTEXT_H_ - -#include "core/include/fxcrt/fx_basic.h" -#include "v8/include/v8.h" -#include "xfa/include/fxjse/fxjse.h" - -class CFXJSE_Class; -class CFXJSE_Value; - -class CFXJSE_Context { - protected: - CFXJSE_Context(v8::Isolate* pIsolate) : m_pIsolate(pIsolate) {} - - public: - static CFXJSE_Context* Create(v8::Isolate* pIsolate, - const FXJSE_CLASS* lpGlobalClass = NULL, - void* lpGlobalObject = NULL); - ~CFXJSE_Context(); - V8_INLINE v8::Isolate* GetRuntime(void) { return m_pIsolate; } - void GetGlobalObject(CFXJSE_Value* pValue); - FX_BOOL ExecuteScript(const FX_CHAR* szScript, - CFXJSE_Value* lpRetValue, - CFXJSE_Value* lpNewThisObject = NULL); - - protected: - CFXJSE_Context(); - CFXJSE_Context(const CFXJSE_Context&); - CFXJSE_Context& operator=(const CFXJSE_Context&); - - protected: - v8::Global m_hContext; - v8::Isolate* m_pIsolate; - CFX_ArrayTemplate m_rgClasses; - friend class CFXJSE_Class; - friend class CFXJSE_ScopeUtil_IsolateHandleContext; - friend class CFXJSE_ScopeUtil_IsolateHandleRootOrNormalContext; -}; -v8::Local FXJSE_CreateReturnValue(v8::Isolate* pIsolate, - v8::TryCatch& trycatch); - -#endif // XFA_SRC_FXJSE_CONTEXT_H_ diff --git a/xfa/src/fxjse/dynprop.cpp b/xfa/src/fxjse/dynprop.cpp deleted file mode 100644 index 55ca6ed8cd..0000000000 --- a/xfa/src/fxjse/dynprop.cpp +++ /dev/null @@ -1,236 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fxjse/class.h" -#include "xfa/src/fxjse/value.h" - -static void FXJSE_DynPropGetterAdapter_MethodCallback( - const v8::FunctionCallbackInfo& info) { - v8::Local hCallBackInfo = info.Data().As(); - FXJSE_CLASS* lpClass = static_cast( - hCallBackInfo->GetAlignedPointerFromInternalField(0)); - v8::Local hPropName = - hCallBackInfo->GetInternalField(1).As(); - ASSERT(lpClass && !hPropName.IsEmpty()); - v8::String::Utf8Value szPropName(hPropName); - CFX_ByteStringC szFxPropName = *szPropName; - CFXJSE_Value* lpThisValue = CFXJSE_Value::Create(info.GetIsolate()); - lpThisValue->ForceSetValue(info.This()); - CFXJSE_Value* lpRetValue = CFXJSE_Value::Create(info.GetIsolate()); - CFXJSE_ArgumentsImpl impl = {&info, lpRetValue}; - lpClass->dynMethodCall(reinterpret_cast(lpThisValue), - szFxPropName, - reinterpret_cast(impl)); - if (!lpRetValue->DirectGetValue().IsEmpty()) { - info.GetReturnValue().Set(lpRetValue->DirectGetValue()); - } - delete lpRetValue; - lpRetValue = nullptr; - delete lpThisValue; - lpThisValue = nullptr; -} - -static void FXJSE_DynPropGetterAdapter(const FXJSE_CLASS* lpClass, - FXJSE_HOBJECT hObject, - const CFX_ByteStringC& szPropName, - FXJSE_HVALUE hValue) { - ASSERT(lpClass); - int32_t nPropType = - lpClass->dynPropTypeGetter == nullptr - ? FXJSE_ClassPropType_Property - : lpClass->dynPropTypeGetter(hObject, szPropName, FALSE); - if (nPropType == FXJSE_ClassPropType_Property) { - if (lpClass->dynPropGetter) { - lpClass->dynPropGetter(hObject, szPropName, hValue); - } - } else if (nPropType == FXJSE_ClassPropType_Method) { - if (lpClass->dynMethodCall && hValue) { - CFXJSE_Value* lpValue = reinterpret_cast(hValue); - v8::Isolate* pIsolate = lpValue->GetIsolate(); - v8::HandleScope hscope(pIsolate); - v8::Local hCallBackInfoTemplate = - v8::ObjectTemplate::New(pIsolate); - hCallBackInfoTemplate->SetInternalFieldCount(2); - v8::Local hCallBackInfo = - hCallBackInfoTemplate->NewInstance(); - hCallBackInfo->SetAlignedPointerInInternalField( - 0, const_cast(lpClass)); - hCallBackInfo->SetInternalField( - 1, v8::String::NewFromUtf8( - pIsolate, reinterpret_cast(szPropName.GetPtr()), - v8::String::kNormalString, szPropName.GetLength())); - lpValue->ForceSetValue(v8::Function::New( - lpValue->GetIsolate(), FXJSE_DynPropGetterAdapter_MethodCallback, - hCallBackInfo)); - } - } -} - -static void FXJSE_DynPropSetterAdapter(const FXJSE_CLASS* lpClass, - FXJSE_HOBJECT hObject, - const CFX_ByteStringC& szPropName, - FXJSE_HVALUE hValue) { - ASSERT(lpClass); - int32_t nPropType = - lpClass->dynPropTypeGetter == nullptr - ? FXJSE_ClassPropType_Property - : lpClass->dynPropTypeGetter(hObject, szPropName, FALSE); - if (nPropType != FXJSE_ClassPropType_Method) { - if (lpClass->dynPropSetter) { - lpClass->dynPropSetter(hObject, szPropName, hValue); - } - } -} - -static FX_BOOL FXJSE_DynPropQueryAdapter(const FXJSE_CLASS* lpClass, - FXJSE_HOBJECT hObject, - const CFX_ByteStringC& szPropName) { - ASSERT(lpClass); - int32_t nPropType = - lpClass->dynPropTypeGetter == nullptr - ? FXJSE_ClassPropType_Property - : lpClass->dynPropTypeGetter(hObject, szPropName, TRUE); - return nPropType != FXJSE_ClassPropType_None; -} - -static FX_BOOL FXJSE_DynPropDeleterAdapter(const FXJSE_CLASS* lpClass, - FXJSE_HOBJECT hObject, - const CFX_ByteStringC& szPropName) { - ASSERT(lpClass); - int32_t nPropType = - lpClass->dynPropTypeGetter == nullptr - ? FXJSE_ClassPropType_Property - : lpClass->dynPropTypeGetter(hObject, szPropName, FALSE); - if (nPropType != FXJSE_ClassPropType_Method) { - if (lpClass->dynPropDeleter) { - return lpClass->dynPropDeleter(hObject, szPropName); - } else { - return nPropType == FXJSE_ClassPropType_Property ? FALSE : TRUE; - } - } - return FALSE; -} - -static void FXJSE_V8_GenericNamedPropertyQueryCallback( - v8::Local property, - const v8::PropertyCallbackInfo& info) { - v8::Local thisObject = info.This(); - const FXJSE_CLASS* lpClass = - static_cast(info.Data().As()->Value()); - v8::Isolate* pIsolate = info.GetIsolate(); - v8::HandleScope scope(pIsolate); - v8::String::Utf8Value szPropName(property); - CFX_ByteStringC szFxPropName(*szPropName, szPropName.length()); - CFXJSE_Value* lpThisValue = CFXJSE_Value::Create(info.GetIsolate()); - lpThisValue->ForceSetValue(thisObject); - if (FXJSE_DynPropQueryAdapter(lpClass, - reinterpret_cast(lpThisValue), - szFxPropName)) { - info.GetReturnValue().Set(v8::DontDelete); - } else { - const int32_t iV8Absent = 64; - info.GetReturnValue().Set(iV8Absent); - } - delete lpThisValue; - lpThisValue = nullptr; -} - -static void FXJSE_V8_GenericNamedPropertyDeleterCallback( - v8::Local property, - const v8::PropertyCallbackInfo& info) { - v8::Local thisObject = info.This(); - const FXJSE_CLASS* lpClass = - static_cast(info.Data().As()->Value()); - v8::Isolate* pIsolate = info.GetIsolate(); - v8::HandleScope scope(pIsolate); - v8::String::Utf8Value szPropName(property); - CFX_ByteStringC szFxPropName(*szPropName, szPropName.length()); - CFXJSE_Value* lpThisValue = CFXJSE_Value::Create(info.GetIsolate()); - lpThisValue->ForceSetValue(thisObject); - info.GetReturnValue().Set( - FXJSE_DynPropDeleterAdapter( - lpClass, reinterpret_cast(lpThisValue), szFxPropName) - ? true - : false); - delete lpThisValue; - lpThisValue = nullptr; -} - -static void FXJSE_V8_GenericNamedPropertyGetterCallback( - v8::Local property, - const v8::PropertyCallbackInfo& info) { - v8::Local thisObject = info.This(); - const FXJSE_CLASS* lpClass = - static_cast(info.Data().As()->Value()); - v8::String::Utf8Value szPropName(property); - CFX_ByteStringC szFxPropName(*szPropName, szPropName.length()); - CFXJSE_Value* lpThisValue = CFXJSE_Value::Create(info.GetIsolate()); - lpThisValue->ForceSetValue(thisObject); - CFXJSE_Value* lpNewValue = CFXJSE_Value::Create(info.GetIsolate()); - FXJSE_DynPropGetterAdapter( - lpClass, reinterpret_cast(lpThisValue), szFxPropName, - reinterpret_cast(lpNewValue)); - info.GetReturnValue().Set(lpNewValue->DirectGetValue()); - delete lpThisValue; - lpThisValue = nullptr; -} - -static void FXJSE_V8_GenericNamedPropertySetterCallback( - v8::Local property, - v8::Local value, - const v8::PropertyCallbackInfo& info) { - v8::Local thisObject = info.This(); - const FXJSE_CLASS* lpClass = - static_cast(info.Data().As()->Value()); - v8::String::Utf8Value szPropName(property); - CFX_ByteStringC szFxPropName(*szPropName, szPropName.length()); - CFXJSE_Value* lpThisValue = CFXJSE_Value::Create(info.GetIsolate()); - lpThisValue->ForceSetValue(thisObject); - CFXJSE_Value* lpNewValue = CFXJSE_Value::Create(info.GetIsolate()); - lpNewValue->ForceSetValue(value); - FXJSE_DynPropSetterAdapter( - lpClass, reinterpret_cast(lpThisValue), szFxPropName, - reinterpret_cast(lpNewValue)); - info.GetReturnValue().Set(value); - delete lpThisValue; - lpThisValue = nullptr; -} - -static void FXJSE_V8_GenericNamedPropertyEnumeratorCallback( - const v8::PropertyCallbackInfo& info) { - const FXJSE_CLASS* lpClass = - static_cast(info.Data().As()->Value()); - v8::Isolate* pIsolate = info.GetIsolate(); - v8::Local newArray = v8::Array::New(pIsolate, lpClass->propNum); - for (int i = 0; i < lpClass->propNum; i++) { - newArray->Set( - i, v8::String::NewFromUtf8(pIsolate, lpClass->properties[i].name)); - } - info.GetReturnValue().Set(newArray); -} - -void CFXJSE_Class::SetUpNamedPropHandler( - v8::Isolate* pIsolate, - v8::Local& hObjectTemplate, - const FXJSE_CLASS* lpClassDefinition) { - v8::NamedPropertyHandlerConfiguration configuration( - lpClassDefinition->dynPropGetter - ? FXJSE_V8_GenericNamedPropertyGetterCallback - : 0, - lpClassDefinition->dynPropSetter - ? FXJSE_V8_GenericNamedPropertySetterCallback - : 0, - lpClassDefinition->dynPropTypeGetter - ? FXJSE_V8_GenericNamedPropertyQueryCallback - : 0, - lpClassDefinition->dynPropDeleter - ? FXJSE_V8_GenericNamedPropertyDeleterCallback - : 0, - FXJSE_V8_GenericNamedPropertyEnumeratorCallback, - v8::External::New(pIsolate, const_cast(lpClassDefinition)), - v8::PropertyHandlerFlags::kNonMasking); - hObjectTemplate->SetHandler(configuration); -} diff --git a/xfa/src/fxjse/runtime.cpp b/xfa/src/fxjse/runtime.cpp deleted file mode 100644 index 69a0ed1d5e..0000000000 --- a/xfa/src/fxjse/runtime.cpp +++ /dev/null @@ -1,128 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fxjse/runtime.h" - -#include "fpdfsdk/include/jsapi/fxjs_v8.h" -#include "xfa/src/fxjse/scope_inline.h" - -// Duplicates fpdfsdk's JS_Runtime.h, but keeps XFA from depending on it. -// TODO(tsepez): make a single version of this. -class FXJSE_ArrayBufferAllocator : public v8::ArrayBuffer::Allocator { - void* Allocate(size_t length) override { return calloc(1, length); } - void* AllocateUninitialized(size_t length) override { return malloc(length); } - void Free(void* data, size_t length) override { free(data); } -}; - -static void FXJSE_KillV8() { - v8::V8::Dispose(); -} - -void FXJSE_Initialize() { - if (!CFXJSE_RuntimeData::g_RuntimeList) { - CFXJSE_RuntimeData::g_RuntimeList = new CFXJSE_RuntimeList; - } - static FX_BOOL bV8Initialized = FALSE; - if (bV8Initialized) { - return; - } - bV8Initialized = TRUE; - atexit(FXJSE_KillV8); -} - -static void FXJSE_Runtime_DisposeCallback(v8::Isolate* pIsolate) { - { - v8::Locker locker(pIsolate); - if (FXJS_PerIsolateData* pData = FXJS_PerIsolateData::Get(pIsolate)) { - delete pData->m_pFXJSERuntimeData; - pData->m_pFXJSERuntimeData = nullptr; - } - } - pIsolate->Dispose(); -} - -void FXJSE_Finalize() { - if (CFXJSE_RuntimeData::g_RuntimeList) { - CFXJSE_RuntimeData::g_RuntimeList->RemoveAllRuntimes( - FXJSE_Runtime_DisposeCallback); - delete CFXJSE_RuntimeData::g_RuntimeList; - CFXJSE_RuntimeData::g_RuntimeList = NULL; - } -} - -FXJSE_HRUNTIME FXJSE_Runtime_Create() { - v8::Isolate::CreateParams params; - params.array_buffer_allocator = new FXJSE_ArrayBufferAllocator(); - v8::Isolate* pIsolate = v8::Isolate::New(params); - ASSERT(pIsolate && CFXJSE_RuntimeData::g_RuntimeList); - CFXJSE_RuntimeData::g_RuntimeList->AppendRuntime(pIsolate); - return reinterpret_cast(pIsolate); -} - -void FXJSE_Runtime_Release(FXJSE_HRUNTIME hRuntime, bool bOwnedRuntime) { - v8::Isolate* pIsolate = reinterpret_cast(hRuntime); - if (!pIsolate) - return; - if (bOwnedRuntime) { - ASSERT(CFXJSE_RuntimeData::g_RuntimeList); - CFXJSE_RuntimeData::g_RuntimeList->RemoveRuntime( - pIsolate, FXJSE_Runtime_DisposeCallback); - } else { - if (FXJS_PerIsolateData* pData = FXJS_PerIsolateData::Get(pIsolate)) { - delete pData->m_pFXJSERuntimeData; - pData->m_pFXJSERuntimeData = nullptr; - } - } -} - -CFXJSE_RuntimeData* CFXJSE_RuntimeData::Create(v8::Isolate* pIsolate) { - CFXJSE_RuntimeData* pRuntimeData = new CFXJSE_RuntimeData(pIsolate); - CFXJSE_ScopeUtil_IsolateHandle scope(pIsolate); - v8::Local hFuncTemplate = - v8::FunctionTemplate::New(pIsolate); - v8::Local hContext = - v8::Context::New(pIsolate, 0, hFuncTemplate->InstanceTemplate()); - hContext->SetSecurityToken(v8::External::New(pIsolate, pIsolate)); - pRuntimeData->m_hRootContextGlobalTemplate.Reset(pIsolate, hFuncTemplate); - pRuntimeData->m_hRootContext.Reset(pIsolate, hContext); - return pRuntimeData; -} - -CFXJSE_RuntimeData* CFXJSE_RuntimeData::Get(v8::Isolate* pIsolate) { - FXJS_PerIsolateData::SetUp(pIsolate); - FXJS_PerIsolateData* pData = FXJS_PerIsolateData::Get(pIsolate); - if (!pData->m_pFXJSERuntimeData) - pData->m_pFXJSERuntimeData = CFXJSE_RuntimeData::Create(pIsolate); - return pData->m_pFXJSERuntimeData; -} - -CFXJSE_RuntimeList* CFXJSE_RuntimeData::g_RuntimeList = NULL; -void CFXJSE_RuntimeList::AppendRuntime(v8::Isolate* pIsolate) { - m_RuntimeList.Add(pIsolate); -} - -void CFXJSE_RuntimeList::RemoveRuntime( - v8::Isolate* pIsolate, - CFXJSE_RuntimeList::RuntimeDisposeCallback lpfnDisposeCallback) { - int32_t iIdx = m_RuntimeList.Find(pIsolate, 0); - if (iIdx >= 0) { - m_RuntimeList.RemoveAt(iIdx, 1); - } - if (lpfnDisposeCallback) { - lpfnDisposeCallback(pIsolate); - } -} - -void CFXJSE_RuntimeList::RemoveAllRuntimes( - CFXJSE_RuntimeList::RuntimeDisposeCallback lpfnDisposeCallback) { - int32_t iSize = m_RuntimeList.GetSize(); - if (lpfnDisposeCallback) { - for (int32_t iIdx = 0; iIdx < iSize; iIdx++) { - lpfnDisposeCallback(m_RuntimeList[iIdx]); - } - } - m_RuntimeList.RemoveAll(); -} diff --git a/xfa/src/fxjse/runtime.h b/xfa/src/fxjse/runtime.h deleted file mode 100644 index a93a589bb4..0000000000 --- a/xfa/src/fxjse/runtime.h +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXJSE_RUNTIME_H_ -#define XFA_SRC_FXJSE_RUNTIME_H_ - -#include "core/include/fxcrt/fx_basic.h" -#include "v8/include/v8.h" - -class CFXJSE_RuntimeList; - -class CFXJSE_RuntimeData { - protected: - CFXJSE_RuntimeData(v8::Isolate* pIsolate) : m_pIsolate(pIsolate) {} - - public: - static CFXJSE_RuntimeData* Create(v8::Isolate* pIsolate); - static CFXJSE_RuntimeData* Get(v8::Isolate* pIsolate); - - public: - v8::Isolate* m_pIsolate; - v8::Global m_hRootContextGlobalTemplate; - v8::Global m_hRootContext; - - public: - static CFXJSE_RuntimeList* g_RuntimeList; - - protected: - CFXJSE_RuntimeData(); - CFXJSE_RuntimeData(const CFXJSE_RuntimeData&); - CFXJSE_RuntimeData& operator=(const CFXJSE_RuntimeData&); -}; - -class CFXJSE_RuntimeList { - public: - typedef void (*RuntimeDisposeCallback)(v8::Isolate*); - - public: - void AppendRuntime(v8::Isolate* pIsolate); - void RemoveRuntime(v8::Isolate* pIsolate, - RuntimeDisposeCallback lpfnDisposeCallback); - void RemoveAllRuntimes(RuntimeDisposeCallback lpfnDisposeCallback); - - protected: - CFX_ArrayTemplate m_RuntimeList; -}; - -#endif // XFA_SRC_FXJSE_RUNTIME_H_ diff --git a/xfa/src/fxjse/scope_inline.h b/xfa/src/fxjse/scope_inline.h deleted file mode 100644 index 6105590966..0000000000 --- a/xfa/src/fxjse/scope_inline.h +++ /dev/null @@ -1,108 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXJSE_SCOPE_INLINE_H_ -#define XFA_SRC_FXJSE_SCOPE_INLINE_H_ - -#include "xfa/src/fxjse/context.h" -#include "xfa/src/fxjse/runtime.h" - -class CFXJSE_ScopeUtil_IsolateHandle { - protected: - v8::Isolate* m_isolate; - v8::Locker m_locker; - v8::Isolate::Scope m_iscope; - v8::HandleScope m_hscope; - - public: - explicit CFXJSE_ScopeUtil_IsolateHandle(v8::Isolate* pIsolate) - : m_isolate(pIsolate), - m_locker(pIsolate), - m_iscope(pIsolate), - m_hscope(pIsolate) {} - v8::Isolate* GetIsolate() { return m_isolate; } - - private: - CFXJSE_ScopeUtil_IsolateHandle(const CFXJSE_ScopeUtil_IsolateHandle&); - void operator=(const CFXJSE_ScopeUtil_IsolateHandle&); - void* operator new(size_t size); - void operator delete(void*, size_t); -}; -class CFXJSE_ScopeUtil_IsolateHandleRootContext { - CFXJSE_ScopeUtil_IsolateHandle m_parent; - v8::Context::Scope m_cscope; - - public: - explicit CFXJSE_ScopeUtil_IsolateHandleRootContext(v8::Isolate* pIsolate) - : m_parent(pIsolate), - m_cscope(v8::Local::New( - pIsolate, - CFXJSE_RuntimeData::Get(pIsolate)->m_hRootContext)) {} - - private: - CFXJSE_ScopeUtil_IsolateHandleRootContext( - const CFXJSE_ScopeUtil_IsolateHandleRootContext&); - void operator=(const CFXJSE_ScopeUtil_IsolateHandleRootContext&); - void* operator new(size_t size); - void operator delete(void*, size_t); -}; -class CFXJSE_ScopeUtil_IsolateHandleContext { - CFXJSE_Context* m_context; - CFXJSE_ScopeUtil_IsolateHandle m_parent; - v8::Context::Scope m_cscope; - - public: - explicit CFXJSE_ScopeUtil_IsolateHandleContext(CFXJSE_Context* pContext) - : m_context(pContext), - m_parent(pContext->m_pIsolate), - m_cscope(v8::Local::New(pContext->m_pIsolate, - pContext->m_hContext)) {} - v8::Isolate* GetIsolate() { return m_context->m_pIsolate; } - v8::Local GetLocalContext() { - return v8::Local::New(m_context->m_pIsolate, - m_context->m_hContext); - } - - private: - CFXJSE_ScopeUtil_IsolateHandleContext( - const CFXJSE_ScopeUtil_IsolateHandleContext&); - void operator=(const CFXJSE_ScopeUtil_IsolateHandleContext&); - void* operator new(size_t size); - void operator delete(void*, size_t); -}; -class CFXJSE_ScopeUtil_IsolateHandleRootOrNormalContext { - CFXJSE_Context* m_context; - CFXJSE_ScopeUtil_IsolateHandle m_parent; - v8::Context::Scope m_cscope; - - public: - explicit CFXJSE_ScopeUtil_IsolateHandleRootOrNormalContext( - v8::Isolate* pIsolate, - CFXJSE_Context* pContext) - : m_context(pContext), - m_parent(pIsolate), - m_cscope(v8::Local::New( - pIsolate, - pContext ? pContext->m_hContext - : CFXJSE_RuntimeData::Get(pIsolate)->m_hRootContext)) {} - v8::Isolate* GetIsolate() { return m_parent.GetIsolate(); } - v8::Local GetLocalContext() { - v8::Isolate* pIsolate = m_parent.GetIsolate(); - return v8::Local::New( - pIsolate, m_context - ? m_context->m_hContext - : CFXJSE_RuntimeData::Get(pIsolate)->m_hRootContext); - } - - private: - CFXJSE_ScopeUtil_IsolateHandleRootOrNormalContext( - const CFXJSE_ScopeUtil_IsolateHandleRootOrNormalContext&); - void operator=(const CFXJSE_ScopeUtil_IsolateHandleRootOrNormalContext&); - void* operator new(size_t size); - void operator delete(void*, size_t); -}; - -#endif // XFA_SRC_FXJSE_SCOPE_INLINE_H_ diff --git a/xfa/src/fxjse/util_inline.h b/xfa/src/fxjse/util_inline.h deleted file mode 100644 index c29c22e1f8..0000000000 --- a/xfa/src/fxjse/util_inline.h +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXJSE_UTIL_INLINE_H_ -#define XFA_SRC_FXJSE_UTIL_INLINE_H_ - -#include "xfa/src/fxjse/context.h" - -static V8_INLINE v8::Local FXJSE_GetGlobalObjectFromContext( - const v8::Local& hContext) { - return hContext->Global()->GetPrototype().As(); -} -static V8_INLINE void FXJSE_UpdateObjectBinding(v8::Local& hObject, - void* lpNewBinding) { - ASSERT(!hObject.IsEmpty()); - ASSERT(hObject->InternalFieldCount() > 0); - hObject->SetAlignedPointerInInternalField(0, lpNewBinding); -} -static V8_INLINE void* FXJSE_RetrieveObjectBinding( - const v8::Local& hJSObject, - CFXJSE_Class* lpClass = NULL) { - ASSERT(!hJSObject.IsEmpty()); - if (!hJSObject->IsObject()) { - return NULL; - } - v8::Local hObject = hJSObject; - if (hObject->InternalFieldCount() == 0) { - v8::Local hProtoObject = hObject->GetPrototype(); - if (hProtoObject.IsEmpty() || !hProtoObject->IsObject()) { - return NULL; - } - hObject = hProtoObject.As(); - if (hObject->InternalFieldCount() == 0) { - return NULL; - } - } - if (lpClass) { - v8::Local hClass = - v8::Local::New( - lpClass->GetContext()->GetRuntime(), lpClass->GetTemplate()); - if (!hClass->HasInstance(hObject)) { - return NULL; - } - } - return hObject->GetAlignedPointerFromInternalField(0); -} - -#endif // XFA_SRC_FXJSE_UTIL_INLINE_H_ diff --git a/xfa/src/fxjse/value.cpp b/xfa/src/fxjse/value.cpp deleted file mode 100644 index f7b04092d3..0000000000 --- a/xfa/src/fxjse/value.cpp +++ /dev/null @@ -1,582 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fxjse/value.h" - -#include - -#include "xfa/src/fxjse/class.h" -#include "xfa/src/fxjse/util_inline.h" - -FX_BOOL FXJSE_Value_IsUndefined(FXJSE_HVALUE hValue) { - CFXJSE_Value* lpValue = reinterpret_cast(hValue); - return lpValue && lpValue->IsUndefined(); -} - -FX_BOOL FXJSE_Value_IsNull(FXJSE_HVALUE hValue) { - CFXJSE_Value* lpValue = reinterpret_cast(hValue); - return lpValue && lpValue->IsNull(); -} - -FX_BOOL FXJSE_Value_IsBoolean(FXJSE_HVALUE hValue) { - CFXJSE_Value* lpValue = reinterpret_cast(hValue); - return lpValue && lpValue->IsBoolean(); -} - -FX_BOOL FXJSE_Value_IsUTF8String(FXJSE_HVALUE hValue) { - CFXJSE_Value* lpValue = reinterpret_cast(hValue); - return lpValue && lpValue->IsString(); -} - -FX_BOOL FXJSE_Value_IsNumber(FXJSE_HVALUE hValue) { - CFXJSE_Value* lpValue = reinterpret_cast(hValue); - return lpValue && lpValue->IsNumber(); -} - -FX_BOOL FXJSE_Value_IsInteger(FXJSE_HVALUE hValue) { - CFXJSE_Value* lpValue = reinterpret_cast(hValue); - return lpValue && lpValue->IsInteger(); -} - -FX_BOOL FXJSE_Value_IsObject(FXJSE_HVALUE hValue) { - CFXJSE_Value* lpValue = reinterpret_cast(hValue); - return lpValue && lpValue->IsObject(); -} - -FX_BOOL FXJSE_Value_IsArray(FXJSE_HVALUE hValue) { - CFXJSE_Value* lpValue = reinterpret_cast(hValue); - return lpValue && lpValue->IsArray(); -} - -FX_BOOL FXJSE_Value_IsFunction(FXJSE_HVALUE hValue) { - CFXJSE_Value* lpValue = reinterpret_cast(hValue); - return lpValue && lpValue->IsFunction(); -} - -FX_BOOL FXJSE_Value_IsDate(FXJSE_HVALUE hValue) { - CFXJSE_Value* lpValue = reinterpret_cast(hValue); - return lpValue && lpValue->IsDate(); -} - -FX_BOOL FXJSE_Value_ToBoolean(FXJSE_HVALUE hValue) { - return reinterpret_cast(hValue)->ToBoolean(); -} - -FX_FLOAT FXJSE_Value_ToFloat(FXJSE_HVALUE hValue) { - return reinterpret_cast(hValue)->ToFloat(); -} - -FXJSE_DOUBLE FXJSE_Value_ToDouble(FXJSE_HVALUE hValue) { - return reinterpret_cast(hValue)->ToDouble(); -} - -void FXJSE_Value_ToUTF8String(FXJSE_HVALUE hValue, - CFX_ByteString& szStrOutput) { - return reinterpret_cast(hValue)->ToString(szStrOutput); -} - -int32_t FXJSE_Value_ToInteger(FXJSE_HVALUE hValue) { - return reinterpret_cast(hValue)->ToInteger(); -} - -void* FXJSE_Value_ToObject(FXJSE_HVALUE hValue, FXJSE_HCLASS hClass) { - CFXJSE_Class* lpClass = reinterpret_cast(hClass); - return reinterpret_cast(hValue)->ToObject(lpClass); -} - -void FXJSE_Value_SetUndefined(FXJSE_HVALUE hValue) { - reinterpret_cast(hValue)->SetUndefined(); -} - -void FXJSE_Value_SetNull(FXJSE_HVALUE hValue) { - reinterpret_cast(hValue)->SetNull(); -} - -void FXJSE_Value_SetBoolean(FXJSE_HVALUE hValue, FX_BOOL bBoolean) { - reinterpret_cast(hValue)->SetBoolean(bBoolean); -} - -void FXJSE_Value_SetUTF8String(FXJSE_HVALUE hValue, - const CFX_ByteStringC& szString) { - reinterpret_cast(hValue)->SetString(szString); -} - -void FXJSE_Value_SetInteger(FXJSE_HVALUE hValue, int32_t nInteger) { - reinterpret_cast(hValue)->SetInteger(nInteger); -} - -void FXJSE_Value_SetFloat(FXJSE_HVALUE hValue, FX_FLOAT fFloat) { - reinterpret_cast(hValue)->SetFloat(fFloat); -} - -void FXJSE_Value_SetDouble(FXJSE_HVALUE hValue, FXJSE_DOUBLE dDouble) { - reinterpret_cast(hValue)->SetDouble(dDouble); -} - -void FXJSE_Value_SetObject(FXJSE_HVALUE hValue, - void* lpObject, - FXJSE_HCLASS hClass) { - CFXJSE_Value* lpValue = reinterpret_cast(hValue); - CFXJSE_Class* lpClass = reinterpret_cast(hClass); - if (!lpClass) { - ASSERT(!lpObject); - lpValue->SetJSObject(); - } else { - lpValue->SetHostObject(lpObject, lpClass); - } -} - -void FXJSE_Value_SetArray(FXJSE_HVALUE hValue, - uint32_t uValueCount, - FXJSE_HVALUE* rgValues) { - reinterpret_cast(hValue) - ->SetArray(uValueCount, reinterpret_cast(rgValues)); -} - -void FXJSE_Value_SetDate(FXJSE_HVALUE hValue, FXJSE_DOUBLE dDouble) { - reinterpret_cast(hValue)->SetDate(dDouble); -} - -void FXJSE_Value_Set(FXJSE_HVALUE hValue, FXJSE_HVALUE hOriginalValue) { - CFXJSE_Value* lpValue = reinterpret_cast(hValue); - CFXJSE_Value* lpOriginalValue = - reinterpret_cast(hOriginalValue); - ASSERT(lpValue && lpOriginalValue); - lpValue->Assign(lpOriginalValue); -} - -FX_BOOL FXJSE_Value_GetObjectProp(FXJSE_HVALUE hValue, - const CFX_ByteStringC& szPropName, - FXJSE_HVALUE hPropValue) { - CFXJSE_Value* lpValue = reinterpret_cast(hValue); - CFXJSE_Value* lpPropValue = reinterpret_cast(hPropValue); - ASSERT(lpValue && lpPropValue); - return lpValue->GetObjectProperty(szPropName, lpPropValue); -} - -FX_BOOL FXJSE_Value_SetObjectProp(FXJSE_HVALUE hValue, - const CFX_ByteStringC& szPropName, - FXJSE_HVALUE hPropValue) { - CFXJSE_Value* lpValue = reinterpret_cast(hValue); - CFXJSE_Value* lpPropValue = reinterpret_cast(hPropValue); - ASSERT(lpValue && lpPropValue); - return lpValue->SetObjectProperty(szPropName, lpPropValue); -} - -FX_BOOL FXJSE_Value_GetObjectPropByIdx(FXJSE_HVALUE hValue, - uint32_t uPropIdx, - FXJSE_HVALUE hPropValue) { - CFXJSE_Value* lpValue = reinterpret_cast(hValue); - CFXJSE_Value* lpPropValue = reinterpret_cast(hPropValue); - ASSERT(lpValue && lpPropValue); - return lpValue->GetObjectProperty(uPropIdx, lpPropValue); -} - -FX_BOOL FXJSE_Value_SetObjectPropByIdx(FXJSE_HVALUE hValue, - uint32_t uPropIdx, - FXJSE_HVALUE hPropValue) { - CFXJSE_Value* lpValue = reinterpret_cast(hValue); - CFXJSE_Value* lpPropValue = reinterpret_cast(hPropValue); - ASSERT(lpValue && lpPropValue); - return lpValue->SetObjectProperty(uPropIdx, lpPropValue); -} - -FX_BOOL FXJSE_Value_DeleteObjectProp(FXJSE_HVALUE hValue, - const CFX_ByteStringC& szPropName) { - return reinterpret_cast(hValue) - ->DeleteObjectProperty(szPropName); -} - -FX_BOOL FXJSE_Value_ObjectHasOwnProp(FXJSE_HVALUE hValue, - const CFX_ByteStringC& szPropName, - FX_BOOL bUseTypeGetter) { - return reinterpret_cast(hValue) - ->HasObjectOwnProperty(szPropName, bUseTypeGetter); -} - -FX_BOOL FXJSE_Value_SetObjectOwnProp(FXJSE_HVALUE hValue, - const CFX_ByteStringC& szPropName, - FXJSE_HVALUE hPropValue) { - CFXJSE_Value* lpValue = reinterpret_cast(hValue); - CFXJSE_Value* lpPropValue = reinterpret_cast(hPropValue); - ASSERT(lpValue && lpPropValue); - return lpValue->SetObjectOwnProperty(szPropName, lpPropValue); -} - -FX_BOOL FXJSE_Value_SetFunctionBind(FXJSE_HVALUE hValue, - FXJSE_HVALUE hOldFunction, - FXJSE_HVALUE hNewThis) { - CFXJSE_Value* lpValue = reinterpret_cast(hValue); - CFXJSE_Value* lpOldFunction = reinterpret_cast(hOldFunction); - CFXJSE_Value* lpNewThis = reinterpret_cast(hNewThis); - ASSERT(lpValue && lpOldFunction && lpNewThis); - return lpValue->SetFunctionBind(lpOldFunction, lpNewThis); -} - -FX_BOOL FXJSE_Value_CallFunction(FXJSE_HVALUE hFunction, - FXJSE_HVALUE hThis, - FXJSE_HVALUE hRetValue, - uint32_t nArgCount, - FXJSE_HVALUE* lpArgs) { - CFXJSE_Value* lpThis = reinterpret_cast(hThis); - CFXJSE_Value* lpRetValue = reinterpret_cast(hRetValue); - return reinterpret_cast(hFunction) - ->Call(lpThis, lpRetValue, nArgCount, lpArgs); -} - -FXJSE_HVALUE FXJSE_Value_Create(FXJSE_HRUNTIME hRuntime) { - return reinterpret_cast( - CFXJSE_Value::Create(reinterpret_cast(hRuntime))); -} - -void FXJSE_Value_Release(FXJSE_HVALUE hValue) { - CFXJSE_Value* lpValue = reinterpret_cast(hValue); - delete lpValue; -} - -FXJSE_HRUNTIME FXJSE_Value_GetRuntime(FXJSE_HVALUE hValue) { - return reinterpret_cast( - reinterpret_cast(hValue)->GetIsolate()); -} - -void FXJSE_ThrowMessage(const CFX_ByteStringC& utf8Name, - const CFX_ByteStringC& utf8Message) { - v8::Isolate* pIsolate = v8::Isolate::GetCurrent(); - ASSERT(pIsolate); - - CFXJSE_ScopeUtil_IsolateHandleRootContext scope(pIsolate); - v8::Local hMessage = v8::String::NewFromUtf8( - pIsolate, utf8Message.GetCStr(), v8::String::kNormalString, - utf8Message.GetLength()); - v8::Local hError; - - if (utf8Name == "RangeError") { - hError = v8::Exception::RangeError(hMessage); - } else if (utf8Name == "ReferenceError") { - hError = v8::Exception::ReferenceError(hMessage); - } else if (utf8Name == "SyntaxError") { - hError = v8::Exception::SyntaxError(hMessage); - } else if (utf8Name == "TypeError") { - hError = v8::Exception::TypeError(hMessage); - } else { - hError = v8::Exception::Error(hMessage); - if (utf8Name != "Error" && !utf8Name.IsEmpty()) { - hError.As()->Set( - v8::String::NewFromUtf8(pIsolate, "name"), - v8::String::NewFromUtf8(pIsolate, utf8Name.GetCStr(), - v8::String::kNormalString, - utf8Name.GetLength())); - } - } - pIsolate->ThrowException(hError); -} - -CFXJSE_Value* CFXJSE_Value::Create(v8::Isolate* pIsolate) { - return new CFXJSE_Value(pIsolate); -} - -void* CFXJSE_Value::ToObject(CFXJSE_Class* lpClass) const { - ASSERT(!m_hValue.IsEmpty()); - - CFXJSE_ScopeUtil_IsolateHandleRootContext scope(m_pIsolate); - v8::Local hValue = v8::Local::New(m_pIsolate, m_hValue); - ASSERT(!hValue.IsEmpty()); - - if (!hValue->IsObject()) - return nullptr; - - return FXJSE_RetrieveObjectBinding(hValue.As(), lpClass); -} - -V8_INLINE static double FXJSE_ftod(FX_FLOAT fNumber) { - if (sizeof(FX_FLOAT) != 4) { - ASSERT(FALSE); - return fNumber; - } - - uint32_t nFloatBits = (uint32_t&)fNumber; - uint8_t nExponent = (uint8_t)(nFloatBits >> 16 >> 7); - if (nExponent == 0 || nExponent == 255) - return fNumber; - - int8_t nErrExp = nExponent - 127 - 23; - if (nErrExp >= 0) - return fNumber; - - double dwError = pow(2.0, nErrExp), dwErrorHalf = dwError / 2; - double dNumber = fNumber, dNumberAbs = fabs(fNumber); - double dNumberAbsMin = dNumberAbs - dwErrorHalf, - dNumberAbsMax = dNumberAbs + dwErrorHalf; - int32_t iErrPos = 0; - if (floor(dNumberAbsMin) == floor(dNumberAbsMax)) { - dNumberAbsMin = fmod(dNumberAbsMin, 1.0); - dNumberAbsMax = fmod(dNumberAbsMax, 1.0); - int32_t iErrPosMin = 1, iErrPosMax = 38; - do { - int32_t iMid = (iErrPosMin + iErrPosMax) / 2; - double dPow = pow(10.0, iMid); - if (floor(dNumberAbsMin * dPow) == floor(dNumberAbsMax * dPow)) { - iErrPosMin = iMid + 1; - } else { - iErrPosMax = iMid; - } - } while (iErrPosMin < iErrPosMax); - iErrPos = iErrPosMax; - } - double dPow = pow(10.0, iErrPos); - return fNumber < 0 ? ceil(dNumber * dPow - 0.5) / dPow - : floor(dNumber * dPow + 0.5) / dPow; -} - -void CFXJSE_Value::SetFloat(FX_FLOAT fFloat) { - CFXJSE_ScopeUtil_IsolateHandle scope(m_pIsolate); - v8::Local hValue = v8::Number::New(m_pIsolate, FXJSE_ftod(fFloat)); - m_hValue.Reset(m_pIsolate, hValue); -} - -void CFXJSE_Value::SetHostObject(void* lpObject, CFXJSE_Class* lpClass) { - CFXJSE_ScopeUtil_IsolateHandleRootContext scope(m_pIsolate); - ASSERT(lpClass); - v8::Local hClass = - v8::Local::New(m_pIsolate, lpClass->m_hTemplate); - v8::Local hObject = hClass->InstanceTemplate()->NewInstance(); - FXJSE_UpdateObjectBinding(hObject, lpObject); - m_hValue.Reset(m_pIsolate, hObject); -} - -void CFXJSE_Value::SetArray(uint32_t uValueCount, CFXJSE_Value** rgValues) { - CFXJSE_ScopeUtil_IsolateHandleRootContext scope(m_pIsolate); - v8::Local hArrayObject = v8::Array::New(m_pIsolate, uValueCount); - if (rgValues) { - for (uint32_t i = 0; i < uValueCount; i++) { - if (rgValues[i]) { - hArrayObject->Set(i, v8::Local::New( - m_pIsolate, rgValues[i]->DirectGetValue())); - } - } - } - m_hValue.Reset(m_pIsolate, hArrayObject); -} - -void CFXJSE_Value::SetDate(FXJSE_DOUBLE dDouble) { - CFXJSE_ScopeUtil_IsolateHandleRootContext scope(m_pIsolate); - v8::Local hDate = v8::Date::New(m_pIsolate, dDouble); - m_hValue.Reset(m_pIsolate, hDate); -} - -FX_BOOL CFXJSE_Value::SetObjectProperty(const CFX_ByteStringC& szPropName, - CFXJSE_Value* lpPropValue) { - CFXJSE_ScopeUtil_IsolateHandleRootContext scope(m_pIsolate); - v8::Local hObject = - v8::Local::New(m_pIsolate, m_hValue); - if (!hObject->IsObject()) - return FALSE; - - v8::Local hPropValue = - v8::Local::New(m_pIsolate, lpPropValue->DirectGetValue()); - return (FX_BOOL)hObject.As()->Set( - v8::String::NewFromUtf8(m_pIsolate, szPropName.GetCStr(), - v8::String::kNormalString, - szPropName.GetLength()), - hPropValue); -} - -FX_BOOL CFXJSE_Value::GetObjectProperty(const CFX_ByteStringC& szPropName, - CFXJSE_Value* lpPropValue) { - CFXJSE_ScopeUtil_IsolateHandleRootContext scope(m_pIsolate); - v8::Local hObject = - v8::Local::New(m_pIsolate, m_hValue); - if (!hObject->IsObject()) - return FALSE; - - v8::Local hPropValue = - hObject.As()->Get(v8::String::NewFromUtf8( - m_pIsolate, szPropName.GetCStr(), v8::String::kNormalString, - szPropName.GetLength())); - lpPropValue->ForceSetValue(hPropValue); - return TRUE; -} - -FX_BOOL CFXJSE_Value::SetObjectProperty(uint32_t uPropIdx, - CFXJSE_Value* lpPropValue) { - CFXJSE_ScopeUtil_IsolateHandleRootContext scope(m_pIsolate); - v8::Local hObject = - v8::Local::New(m_pIsolate, m_hValue); - if (!hObject->IsObject()) - return FALSE; - - v8::Local hPropValue = - v8::Local::New(m_pIsolate, lpPropValue->DirectGetValue()); - return (FX_BOOL)hObject.As()->Set(uPropIdx, hPropValue); -} - -FX_BOOL CFXJSE_Value::GetObjectProperty(uint32_t uPropIdx, - CFXJSE_Value* lpPropValue) { - CFXJSE_ScopeUtil_IsolateHandleRootContext scope(m_pIsolate); - v8::Local hObject = - v8::Local::New(m_pIsolate, m_hValue); - if (!hObject->IsObject()) - return FALSE; - - v8::Local hPropValue = hObject.As()->Get(uPropIdx); - lpPropValue->ForceSetValue(hPropValue); - return TRUE; -} - -FX_BOOL CFXJSE_Value::DeleteObjectProperty(const CFX_ByteStringC& szPropName) { - CFXJSE_ScopeUtil_IsolateHandleRootContext scope(m_pIsolate); - v8::Local hObject = - v8::Local::New(m_pIsolate, m_hValue); - if (!hObject->IsObject()) - return FALSE; - - hObject.As()->Delete(v8::String::NewFromUtf8( - m_pIsolate, szPropName.GetCStr(), v8::String::kNormalString, - szPropName.GetLength())); - return TRUE; -} - -FX_BOOL CFXJSE_Value::HasObjectOwnProperty(const CFX_ByteStringC& szPropName, - FX_BOOL bUseTypeGetter) { - CFXJSE_ScopeUtil_IsolateHandleRootContext scope(m_pIsolate); - v8::Local hObject = - v8::Local::New(m_pIsolate, m_hValue); - if (!hObject->IsObject()) - return FALSE; - - v8::Local hKey = v8::String::NewFromUtf8( - m_pIsolate, szPropName.GetCStr(), v8::String::kNormalString, - szPropName.GetLength()); - return hObject.As()->HasRealNamedProperty(hKey) || - (bUseTypeGetter && - hObject.As() - ->HasOwnProperty(m_pIsolate->GetCurrentContext(), hKey) - .FromMaybe(false)); -} - -FX_BOOL CFXJSE_Value::SetObjectOwnProperty(const CFX_ByteStringC& szPropName, - CFXJSE_Value* lpPropValue) { - CFXJSE_ScopeUtil_IsolateHandleRootContext scope(m_pIsolate); - v8::Local hObject = - v8::Local::New(m_pIsolate, m_hValue); - if (!hObject->IsObject()) - return FALSE; - - v8::Local hValue = - v8::Local::New(m_pIsolate, lpPropValue->m_hValue); - return hObject.As() - ->DefineOwnProperty( - m_pIsolate->GetCurrentContext(), - v8::String::NewFromUtf8(m_pIsolate, szPropName.GetCStr(), - v8::String::kNormalString, - szPropName.GetLength()), - hValue) - .FromMaybe(false); -} - -FX_BOOL CFXJSE_Value::SetFunctionBind(CFXJSE_Value* lpOldFunction, - CFXJSE_Value* lpNewThis) { - CFXJSE_ScopeUtil_IsolateHandleRootContext scope(m_pIsolate); - v8::Local rgArgs[2]; - v8::Local hOldFunction = - v8::Local::New(m_pIsolate, lpOldFunction->DirectGetValue()); - if (hOldFunction.IsEmpty() || !hOldFunction->IsFunction()) - return FALSE; - - rgArgs[0] = hOldFunction; - v8::Local hNewThis = - v8::Local::New(m_pIsolate, lpNewThis->DirectGetValue()); - if (hNewThis.IsEmpty()) - return FALSE; - - rgArgs[1] = hNewThis; - v8::Local hBinderFuncSource = - v8::String::NewFromUtf8(m_pIsolate, - "(function (oldfunction, newthis) { return " - "oldfunction.bind(newthis); })"); - v8::Local hBinderFunc = - v8::Script::Compile(hBinderFuncSource)->Run().As(); - v8::Local hBoundFunction = - hBinderFunc->Call(m_pIsolate->GetCurrentContext()->Global(), 2, rgArgs); - if (hBoundFunction.IsEmpty() || !hBoundFunction->IsFunction()) - return FALSE; - - m_hValue.Reset(m_pIsolate, hBoundFunction); - return TRUE; -} - -#define FXJSE_INVALID_PTR ((void*)(intptr_t)-1) -FX_BOOL CFXJSE_Value::Call(CFXJSE_Value* lpReceiver, - CFXJSE_Value* lpRetValue, - uint32_t nArgCount, - FXJSE_HVALUE* lpArgs) { - CFXJSE_ScopeUtil_IsolateHandleRootContext scope(m_pIsolate); - v8::Local hFunctionValue = - v8::Local::New(m_pIsolate, DirectGetValue()); - v8::Local hFunctionObject = - !hFunctionValue.IsEmpty() && hFunctionValue->IsObject() - ? hFunctionValue.As() - : v8::Local(); - - v8::TryCatch trycatch(m_pIsolate); - if (hFunctionObject.IsEmpty() || !hFunctionObject->IsCallable()) { - if (lpRetValue) - lpRetValue->ForceSetValue(FXJSE_CreateReturnValue(m_pIsolate, trycatch)); - return FALSE; - } - - v8::Local hReturnValue; - v8::Local* lpLocalArgs = NULL; - if (nArgCount) { - lpLocalArgs = FX_Alloc(v8::Local, nArgCount); - for (uint32_t i = 0; i < nArgCount; i++) { - new (lpLocalArgs + i) v8::Local; - CFXJSE_Value* lpArg = (CFXJSE_Value*)lpArgs[i]; - if (lpArg) { - lpLocalArgs[i] = - v8::Local::New(m_pIsolate, lpArg->DirectGetValue()); - } - if (lpLocalArgs[i].IsEmpty()) { - lpLocalArgs[i] = v8::Undefined(m_pIsolate); - } - } - } - - FX_BOOL bRetValue = TRUE; - if (lpReceiver == FXJSE_INVALID_PTR) { - v8::MaybeLocal maybe_retvalue = - hFunctionObject->CallAsConstructor(m_pIsolate->GetCurrentContext(), - nArgCount, lpLocalArgs); - hReturnValue = maybe_retvalue.FromMaybe(v8::Local()); - } else { - v8::Local hReceiver; - if (lpReceiver) { - hReceiver = - v8::Local::New(m_pIsolate, lpReceiver->DirectGetValue()); - } - if (hReceiver.IsEmpty() || !hReceiver->IsObject()) - hReceiver = v8::Object::New(m_pIsolate); - - v8::MaybeLocal maybe_retvalue = hFunctionObject->CallAsFunction( - m_pIsolate->GetCurrentContext(), hReceiver, nArgCount, lpLocalArgs); - hReturnValue = maybe_retvalue.FromMaybe(v8::Local()); - } - - if (trycatch.HasCaught()) { - hReturnValue = FXJSE_CreateReturnValue(m_pIsolate, trycatch); - bRetValue = FALSE; - } - - if (lpRetValue) - lpRetValue->ForceSetValue(hReturnValue); - - if (lpLocalArgs) { - for (uint32_t i = 0; i < nArgCount; i++) - lpLocalArgs[i].~Local(); - FX_Free(lpLocalArgs); - } - return bRetValue; -} diff --git a/xfa/src/fxjse/value.h b/xfa/src/fxjse/value.h deleted file mode 100644 index 55c9c72ce2..0000000000 --- a/xfa/src/fxjse/value.h +++ /dev/null @@ -1,241 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_SRC_FXJSE_VALUE_H_ -#define XFA_SRC_FXJSE_VALUE_H_ - -#include "xfa/src/fxjse/scope_inline.h" - -class CFXJSE_Value { - public: - CFXJSE_Value(v8::Isolate* pIsolate) : m_pIsolate(pIsolate) {} - - protected: - CFXJSE_Value(); - CFXJSE_Value(const CFXJSE_Value&); - CFXJSE_Value& operator=(const CFXJSE_Value&); - - public: - V8_INLINE FX_BOOL IsUndefined() const { - if (m_hValue.IsEmpty()) { - return FALSE; - } - CFXJSE_ScopeUtil_IsolateHandle scope(m_pIsolate); - v8::Local hValue = - v8::Local::New(m_pIsolate, m_hValue); - return hValue->IsUndefined(); - } - V8_INLINE FX_BOOL IsNull() const { - if (m_hValue.IsEmpty()) { - return FALSE; - } - CFXJSE_ScopeUtil_IsolateHandle scope(m_pIsolate); - v8::Local hValue = - v8::Local::New(m_pIsolate, m_hValue); - return hValue->IsNull(); - } - V8_INLINE FX_BOOL IsBoolean() const { - if (m_hValue.IsEmpty()) { - return FALSE; - } - CFXJSE_ScopeUtil_IsolateHandle scope(m_pIsolate); - v8::Local hValue = - v8::Local::New(m_pIsolate, m_hValue); - return hValue->IsBoolean(); - } - V8_INLINE FX_BOOL IsString() const { - if (m_hValue.IsEmpty()) { - return FALSE; - } - CFXJSE_ScopeUtil_IsolateHandle scope(m_pIsolate); - v8::Local hValue = - v8::Local::New(m_pIsolate, m_hValue); - return hValue->IsString(); - } - V8_INLINE FX_BOOL IsNumber() const { - if (m_hValue.IsEmpty()) { - return FALSE; - } - CFXJSE_ScopeUtil_IsolateHandle scope(m_pIsolate); - v8::Local hValue = - v8::Local::New(m_pIsolate, m_hValue); - return hValue->IsNumber(); - } - V8_INLINE FX_BOOL IsInteger() const { - if (m_hValue.IsEmpty()) { - return FALSE; - } - CFXJSE_ScopeUtil_IsolateHandle scope(m_pIsolate); - v8::Local hValue = - v8::Local::New(m_pIsolate, m_hValue); - return hValue->IsInt32(); - } - V8_INLINE FX_BOOL IsObject() const { - if (m_hValue.IsEmpty()) { - return FALSE; - } - CFXJSE_ScopeUtil_IsolateHandle scope(m_pIsolate); - v8::Local hValue = - v8::Local::New(m_pIsolate, m_hValue); - return hValue->IsObject(); - } - V8_INLINE FX_BOOL IsArray() const { - if (m_hValue.IsEmpty()) { - return FALSE; - } - CFXJSE_ScopeUtil_IsolateHandle scope(m_pIsolate); - v8::Local hValue = - v8::Local::New(m_pIsolate, m_hValue); - return hValue->IsArray(); - } - V8_INLINE FX_BOOL IsFunction() const { - if (m_hValue.IsEmpty()) { - return FALSE; - } - CFXJSE_ScopeUtil_IsolateHandle scope(m_pIsolate); - v8::Local hValue = - v8::Local::New(m_pIsolate, m_hValue); - return hValue->IsFunction(); - } - V8_INLINE FX_BOOL IsDate() const { - if (m_hValue.IsEmpty()) { - return FALSE; - } - CFXJSE_ScopeUtil_IsolateHandle scope(m_pIsolate); - v8::Local hValue = - v8::Local::New(m_pIsolate, m_hValue); - return hValue->IsDate(); - } - - public: - V8_INLINE FX_BOOL ToBoolean() const { - ASSERT(!m_hValue.IsEmpty()); - CFXJSE_ScopeUtil_IsolateHandleRootContext scope(m_pIsolate); - v8::Local hValue = - v8::Local::New(m_pIsolate, m_hValue); - return static_cast(hValue->BooleanValue()); - } - V8_INLINE FX_FLOAT ToFloat() const { - ASSERT(!m_hValue.IsEmpty()); - CFXJSE_ScopeUtil_IsolateHandleRootContext scope(m_pIsolate); - v8::Local hValue = - v8::Local::New(m_pIsolate, m_hValue); - return static_cast(hValue->NumberValue()); - } - V8_INLINE FXJSE_DOUBLE ToDouble() const { - ASSERT(!m_hValue.IsEmpty()); - CFXJSE_ScopeUtil_IsolateHandleRootContext scope(m_pIsolate); - v8::Local hValue = - v8::Local::New(m_pIsolate, m_hValue); - return static_cast(hValue->NumberValue()); - } - V8_INLINE int32_t ToInteger() const { - ASSERT(!m_hValue.IsEmpty()); - CFXJSE_ScopeUtil_IsolateHandleRootContext scope(m_pIsolate); - v8::Local hValue = - v8::Local::New(m_pIsolate, m_hValue); - return static_cast(hValue->NumberValue()); - } - V8_INLINE void ToString(CFX_ByteString& szStrOutput) const { - ASSERT(!m_hValue.IsEmpty()); - CFXJSE_ScopeUtil_IsolateHandleRootContext scope(m_pIsolate); - v8::Local hValue = - v8::Local::New(m_pIsolate, m_hValue); - v8::Local hString = hValue->ToString(); - v8::String::Utf8Value hStringVal(hString); - szStrOutput = *hStringVal; - } - void* ToObject(CFXJSE_Class* lpClass) const; - - public: - V8_INLINE void SetUndefined() { - CFXJSE_ScopeUtil_IsolateHandle scope(m_pIsolate); - v8::Local hValue = v8::Undefined(m_pIsolate); - m_hValue.Reset(m_pIsolate, hValue); - } - V8_INLINE void SetNull() { - CFXJSE_ScopeUtil_IsolateHandle scope(m_pIsolate); - v8::Local hValue = v8::Null(m_pIsolate); - m_hValue.Reset(m_pIsolate, hValue); - } - V8_INLINE void SetBoolean(FX_BOOL bBoolean) { - CFXJSE_ScopeUtil_IsolateHandle scope(m_pIsolate); - v8::Local hValue = - v8::Boolean::New(m_pIsolate, bBoolean != FALSE); - m_hValue.Reset(m_pIsolate, hValue); - } - V8_INLINE void SetInteger(int32_t nInteger) { - CFXJSE_ScopeUtil_IsolateHandle scope(m_pIsolate); - v8::Local hValue = v8::Integer::New(m_pIsolate, nInteger); - m_hValue.Reset(m_pIsolate, hValue); - } - V8_INLINE void SetDouble(FXJSE_DOUBLE dDouble) { - CFXJSE_ScopeUtil_IsolateHandle scope(m_pIsolate); - v8::Local hValue = v8::Number::New(m_pIsolate, dDouble); - m_hValue.Reset(m_pIsolate, hValue); - } - V8_INLINE void SetString(const CFX_ByteStringC& szString) { - CFXJSE_ScopeUtil_IsolateHandle scope(m_pIsolate); - v8::Local hValue = v8::String::NewFromUtf8( - m_pIsolate, reinterpret_cast(szString.GetPtr()), - v8::String::kNormalString, szString.GetLength()); - m_hValue.Reset(m_pIsolate, hValue); - } - V8_INLINE void SetFloat(FX_FLOAT fFloat); - V8_INLINE void SetJSObject() { - CFXJSE_ScopeUtil_IsolateHandleRootContext scope(m_pIsolate); - v8::Local hValue = v8::Object::New(m_pIsolate); - m_hValue.Reset(m_pIsolate, hValue); - } - void SetHostObject(void* lpObject, CFXJSE_Class* lpClass); - void SetArray(uint32_t uValueCount, CFXJSE_Value** rgValues); - void SetDate(FXJSE_DOUBLE dDouble); - - public: - FX_BOOL GetObjectProperty(const CFX_ByteStringC& szPropName, - CFXJSE_Value* lpPropValue); - FX_BOOL SetObjectProperty(const CFX_ByteStringC& szPropName, - CFXJSE_Value* lpPropValue); - FX_BOOL GetObjectProperty(uint32_t uPropIdx, CFXJSE_Value* lpPropValue); - FX_BOOL SetObjectProperty(uint32_t uPropIdx, CFXJSE_Value* lpPropValue); - FX_BOOL DeleteObjectProperty(const CFX_ByteStringC& szPropName); - FX_BOOL HasObjectOwnProperty(const CFX_ByteStringC& szPropName, - FX_BOOL bUseTypeGetter); - FX_BOOL SetObjectOwnProperty(const CFX_ByteStringC& szPropName, - CFXJSE_Value* lpPropValue); - FX_BOOL SetFunctionBind(CFXJSE_Value* lpOldFunction, CFXJSE_Value* lpNewThis); - FX_BOOL Call(CFXJSE_Value* lpReceiver, - CFXJSE_Value* lpRetValue, - uint32_t nArgCount, - FXJSE_HVALUE* lpArgs); - - public: - V8_INLINE v8::Isolate* GetIsolate() const { return m_pIsolate; } - V8_INLINE const v8::Global& DirectGetValue() const { - return m_hValue; - } - V8_INLINE void ForceSetValue(v8::Local hValue) { - m_hValue.Reset(m_pIsolate, hValue); - } - V8_INLINE void Assign(const CFXJSE_Value* lpValue) { - if (lpValue) { - m_hValue.Reset(m_pIsolate, lpValue->m_hValue); - } else { - m_hValue.Reset(); - } - } - - public: - static CFXJSE_Value* Create(v8::Isolate* pIsolate); - - protected: - v8::Isolate* m_pIsolate; - v8::Global m_hValue; - friend class CFXJSE_Context; - friend class CFXJSE_Class; -}; - -#endif // XFA_SRC_FXJSE_VALUE_H_ -- cgit v1.2.3