mirror of
https://github.com/ONLYOFFICE/core.git
synced 2026-07-10 13:44:16 +08:00
Compare commits
685 Commits
v8.1.0.88
...
feature/pd
| Author | SHA1 | Date | |
|---|---|---|---|
| 447e1f5ccc | |||
| 06ee659edc | |||
| fe35178e26 | |||
| 13590d4c2e | |||
| 84fc9f876e | |||
| c4530caac1 | |||
| c018d57081 | |||
| 43f49b7a9d | |||
| f8e19a7f0b | |||
| f245985bbd | |||
| 68171df991 | |||
| bbf4003ec7 | |||
| 75cc7d8457 | |||
| 7018402a58 | |||
| 6ce30ccaad | |||
| 670677c23b | |||
| 208f6efcc5 | |||
| 685165d270 | |||
| f18eb2ef5b | |||
| facdff46fe | |||
| 8843c3dd36 | |||
| 2708479152 | |||
| f3facfa8e8 | |||
| 1e26e1723a | |||
| 6d9242e1dd | |||
| e8de8dc03b | |||
| 57447f757f | |||
| 46d6eaa793 | |||
| def502c7eb | |||
| 1e5e43cbe5 | |||
| 60a888fc19 | |||
| 01ca25d798 | |||
| 6812ebaa42 | |||
| aacb2842f7 | |||
| 27a2a47cbe | |||
| 02f8178c01 | |||
| a0e2384409 | |||
| 56088e9eff | |||
| 1d6b895496 | |||
| fa4b8c8d76 | |||
| 2db2b98c8f | |||
| f45fb3c6be | |||
| 6f60d75863 | |||
| d1acdf35d8 | |||
| a1bf6a76ed | |||
| 3634d59ece | |||
| 1b21e8f136 | |||
| 554ca5ec7c | |||
| dc2e0edf80 | |||
| e38fa336d2 | |||
| 357450f242 | |||
| 4ed9925aff | |||
| 796537565b | |||
| fcf8e28ae8 | |||
| de949afbb6 | |||
| fb7bb041c1 | |||
| 8d6e15627b | |||
| 0583cbb5cc | |||
| a68bec86df | |||
| 6554185ec7 | |||
| 22bbde155d | |||
| 4a123d33ea | |||
| c7d0f27f6b | |||
| f1ddd51164 | |||
| 1d636b717f | |||
| c026f33aa7 | |||
| 29e5769d6d | |||
| 6586fc39ee | |||
| e8c7a4f670 | |||
| ead6b305b2 | |||
| 2de6a6d199 | |||
| c6ca99994b | |||
| b707510c88 | |||
| 7171dcb9f0 | |||
| 49dedc7a6d | |||
| 431fa060c4 | |||
| 0fc5133d98 | |||
| 8d5fc7d6ca | |||
| 3221d20d81 | |||
| 9fdb81554a | |||
| 95a1983e75 | |||
| c27aa4d807 | |||
| c4f8c524b5 | |||
| f7d55c08d8 | |||
| 4cfb8cc97a | |||
| a41ecb0715 | |||
| faa9e5e640 | |||
| ac2ee1b56d | |||
| b722238d21 | |||
| 83e20057f4 | |||
| 373786fca6 | |||
| 0fa1b4feec | |||
| 6a6204ae33 | |||
| f02147b97c | |||
| 88b1660735 | |||
| f5f7cb1aec | |||
| af01306997 | |||
| ef30a30e00 | |||
| 16ae48ef4e | |||
| 0eb8c93cf9 | |||
| c98285ffef | |||
| 4b99c4179b | |||
| e98dec952f | |||
| 8b2d7035c1 | |||
| 234def9cd7 | |||
| ce92766ef6 | |||
| 59c95c5039 | |||
| a23002225a | |||
| cb64a5a266 | |||
| 65483d0460 | |||
| 41758f0552 | |||
| bfd790ba11 | |||
| 81d9e3cfd7 | |||
| 2920527898 | |||
| 7013fdcb8d | |||
| 0d84e22e79 | |||
| f2acef6bb2 | |||
| 84b8850a52 | |||
| b2a3de852a | |||
| a8fa59d64d | |||
| 59b84f26ee | |||
| 5b17009fb9 | |||
| a5827f187c | |||
| 6ae25ca4c4 | |||
| ff4425e977 | |||
| 06edc93c7b | |||
| 8f9b35d94a | |||
| 14c06e4e7b | |||
| abaaa54bc2 | |||
| 7d0683e338 | |||
| f9d6b49a05 | |||
| 01916b7de6 | |||
| 666d62239e | |||
| 2e25f5dc64 | |||
| cc61536a90 | |||
| 58b5417ab4 | |||
| c056c14303 | |||
| 1b975c7048 | |||
| 3fd5b5612b | |||
| b8a8d36b8b | |||
| ccbeb28f8a | |||
| 6ab0d9d106 | |||
| 79309d3f02 | |||
| c8c4edf592 | |||
| 64afe55078 | |||
| 967a5728c7 | |||
| 62b96623a0 | |||
| 8a105d35d5 | |||
| eaf2c02b86 | |||
| 46f30b980f | |||
| ac4f15b999 | |||
| 918a940e05 | |||
| 47961709ad | |||
| a47e72cf2f | |||
| 472c9ecd0d | |||
| 7b8aa38c37 | |||
| 5c87955ae2 | |||
| c37aa9d9dc | |||
| d699c30bda | |||
| 9db017b9f4 | |||
| 70fe676300 | |||
| e73d4455c2 | |||
| 3158e830ff | |||
| 33daee696c | |||
| 305492ec7b | |||
| 2d213df8af | |||
| 4bb3953171 | |||
| f8e894af67 | |||
| 777be23513 | |||
| b8af955fcd | |||
| 176290adaf | |||
| b3868ff146 | |||
| f30aba8bf1 | |||
| b039eeca38 | |||
| 450cbf0ab1 | |||
| 2e33e7d097 | |||
| e9af537e63 | |||
| 849d3fb09a | |||
| ea76a114f3 | |||
| fb209c6c8a | |||
| d4af1308c0 | |||
| 824d9c59cf | |||
| d4f3cd3801 | |||
| c7fc2bc3a7 | |||
| f9ecfee609 | |||
| a8c815d7bd | |||
| 64234659aa | |||
| 09c066def3 | |||
| 685434b2ab | |||
| bcfb9b3630 | |||
| 17e6ebeb31 | |||
| ae0e888186 | |||
| 4559d53a97 | |||
| dac41ff6f7 | |||
| 5e5fec1666 | |||
| a2d32b59a1 | |||
| 0889f82c76 | |||
| ee6ea32ad1 | |||
| 69e6ff99f6 | |||
| b763041695 | |||
| adfc64f01e | |||
| f465f17b93 | |||
| efd7b5ac9a | |||
| 2375b476d0 | |||
| f97bb4e688 | |||
| aff7b42f71 | |||
| 0675b8c5b5 | |||
| a27c26dbe3 | |||
| 74d7bbca7c | |||
| 6eba82f433 | |||
| d1460a057e | |||
| 21ba3ac0c9 | |||
| 14196ddc9f | |||
| 18db2f8614 | |||
| 81f01f49ed | |||
| 4cb159a794 | |||
| e164168418 | |||
| fd60059dd6 | |||
| e40be65c55 | |||
| 0bf9663169 | |||
| b1ff8b79d3 | |||
| efb9095dc5 | |||
| 3aab7fd183 | |||
| 0c0cd575ad | |||
| 82c06b5aaa | |||
| efa4433195 | |||
| e9c9530d66 | |||
| 6c36fc7146 | |||
| 34db65ff5e | |||
| 5770551ed4 | |||
| 75c56c13fc | |||
| e5b0c0f1f9 | |||
| 723dcef8aa | |||
| 880b96acfc | |||
| 81806d96d0 | |||
| 49a9205aad | |||
| 971205b325 | |||
| 73fc80aa7d | |||
| 84836a3e8b | |||
| 6dc7ff0874 | |||
| eec0fa47ce | |||
| ebadb754c5 | |||
| 7d3bf0c328 | |||
| 7e7ed8d746 | |||
| cd7b39acf2 | |||
| 92a3c6cfce | |||
| f3e6b5bc21 | |||
| 95d2939a73 | |||
| da06f82447 | |||
| 5ad4cca9f4 | |||
| 3d528bf8b5 | |||
| fe489b9da0 | |||
| 6d9bccee65 | |||
| 6ae6c37ef1 | |||
| cc3528c226 | |||
| db4ae797a1 | |||
| b1810af6f0 | |||
| 263b48dea0 | |||
| 128e09f839 | |||
| 5b16ea0693 | |||
| be821d6b45 | |||
| 4c08e60ecc | |||
| e55101141c | |||
| ce9268f166 | |||
| e7751e891a | |||
| a3a734a558 | |||
| 7326f88aa0 | |||
| 83f98f3186 | |||
| 2d6ef9a38b | |||
| baae7b0a15 | |||
| 5e7caad32a | |||
| a517809a5d | |||
| 255fa70292 | |||
| 71ecf1a1e0 | |||
| 8d092ad6e4 | |||
| d9269bcd33 | |||
| 2f45e0952e | |||
| 05293f43ce | |||
| df6c20b57d | |||
| 59b3862d89 | |||
| e80e545024 | |||
| 2245952739 | |||
| ff52afecc9 | |||
| 5503208e95 | |||
| 90c1ffe7de | |||
| 23ef8fd8af | |||
| e5559e4cf8 | |||
| 91b82d9dcb | |||
| 142ed45a1b | |||
| 76623ec66d | |||
| d5a4cf73ec | |||
| ef530fea0b | |||
| a72b42bd6d | |||
| e20f98aa4a | |||
| cc27db504f | |||
| 1da9dc12b5 | |||
| 6cf95e6151 | |||
| ad4ba02895 | |||
| 79c7fced0a | |||
| b63ff91ce4 | |||
| d0b6c55347 | |||
| 53f9629194 | |||
| 272b69ae70 | |||
| 8c081c83c9 | |||
| 37bef7c398 | |||
| aae80a161c | |||
| a498117748 | |||
| 7a4cebb89c | |||
| 3a8c941649 | |||
| 32464cb685 | |||
| a8787e9220 | |||
| 17bc68d102 | |||
| ca17a96d32 | |||
| 04419326f4 | |||
| adfbf6ea3f | |||
| 61397b67c1 | |||
| a6e87b589c | |||
| 5927b0113f | |||
| e03b3e9f1b | |||
| ecef6154ff | |||
| e16578c3a1 | |||
| 3e709a99ed | |||
| c2f0390b6a | |||
| 27619798b9 | |||
| e62585a7fc | |||
| 19c4a674f6 | |||
| 505d8093ef | |||
| 3316216f8e | |||
| 7131129ba0 | |||
| 4070725515 | |||
| 5dfeeeb809 | |||
| 14b66e2bb3 | |||
| 9a5e1464bd | |||
| af9a69d0f2 | |||
| 819e568a35 | |||
| c8ce9c8a35 | |||
| 95f91b816a | |||
| 29788a5d1b | |||
| a81fb19e1a | |||
| c82c8743f8 | |||
| ebef9ad556 | |||
| a564d289b7 | |||
| a98ee52dc5 | |||
| f39355156c | |||
| 99a560bebd | |||
| cb10bccd6a | |||
| c219ce8b06 | |||
| afc8dd6e48 | |||
| 505c28f88d | |||
| 49d789dc77 | |||
| 2da89c8b03 | |||
| 24fb53ac6f | |||
| 4af39960da | |||
| 29115060b4 | |||
| dc485997f0 | |||
| 2e6d5450b4 | |||
| 4ed4c5596f | |||
| dea44f1829 | |||
| b428487d07 | |||
| f366cae604 | |||
| 96ea86e3c0 | |||
| 5c7d0a61be | |||
| 4014d4914f | |||
| 0b77fb2bba | |||
| 2e1ccbc985 | |||
| f5202108a1 | |||
| 2f7407bd8e | |||
| ac721572f2 | |||
| 33da43b2f4 | |||
| 6000944cc9 | |||
| 591dffc965 | |||
| cd74ef4ded | |||
| c7612a259d | |||
| f665afc1ad | |||
| 586455310a | |||
| 96008085d6 | |||
| 282b87e518 | |||
| 115a60c273 | |||
| 66d48673cf | |||
| 29ef74770a | |||
| 15247d39f0 | |||
| e18fc06c7b | |||
| 145154690b | |||
| 4f28d8d3d8 | |||
| 4cd6e99531 | |||
| 2d3cd6bd3a | |||
| 2fdd88bee2 | |||
| 7c501fe5a3 | |||
| acbf5b0c40 | |||
| d843cf1fe1 | |||
| 50529346e4 | |||
| 803fcf3602 | |||
| d83930bf67 | |||
| cd5ca284e1 | |||
| 7a1a59a883 | |||
| 56a08867db | |||
| bfb97ef026 | |||
| 742cfde620 | |||
| 600fd26e30 | |||
| 92fa08303e | |||
| 17bd0f99dd | |||
| 4eaf500040 | |||
| d5d4d06553 | |||
| 400da99fa9 | |||
| 85be8041b1 | |||
| b209e00333 | |||
| f86548c873 | |||
| 1859173fb6 | |||
| dfb0aeefcb | |||
| 6ba5d1141e | |||
| 8d6a13b24a | |||
| a66fdc73a5 | |||
| a2b8fcc5e1 | |||
| 7ac5ff5383 | |||
| 5e560528a4 | |||
| b8c57da779 | |||
| 19951d807c | |||
| 49d1426831 | |||
| e8ae960a26 | |||
| 11ddc0ab4f | |||
| 5361740a02 | |||
| 0050c6148c | |||
| 8e3df68ffc | |||
| ab829fa8db | |||
| be64e3e624 | |||
| 2f6a542d02 | |||
| f69b52e232 | |||
| ce15265d5a | |||
| 370e317b79 | |||
| bc56de19c1 | |||
| 1de6787014 | |||
| b02189c14d | |||
| 63003a5e76 | |||
| 499810dbae | |||
| f55d822c4f | |||
| 4c51371b96 | |||
| 4be711c0bf | |||
| 986bcae0e2 | |||
| 96b87265bb | |||
| 0be217ba05 | |||
| af12226bfa | |||
| d51f035561 | |||
| d01681bb1e | |||
| 72e975f7d9 | |||
| ba87df6b9d | |||
| a1fed79a78 | |||
| 08111e8fde | |||
| 1286b7f458 | |||
| dcb4364410 | |||
| 55a009713e | |||
| 474828364f | |||
| 9e145ef9e0 | |||
| 40b6178a0d | |||
| a70f50206d | |||
| 40fa3e60c4 | |||
| 105a193742 | |||
| 4ca9a94609 | |||
| 3bfb3ee045 | |||
| 512df584ba | |||
| 84eebc69e1 | |||
| 7abb3899a7 | |||
| f19906c14c | |||
| fd15cdf4d0 | |||
| 9d3e553086 | |||
| a19b4a03b3 | |||
| 90650b1af8 | |||
| 3780922610 | |||
| fbb7ab93d6 | |||
| ca5201e704 | |||
| 2b13696379 | |||
| 24b32a2ba7 | |||
| 1cdb2b0f15 | |||
| 7758da7173 | |||
| 3cd89354bc | |||
| 5fbed3db1c | |||
| f28119e646 | |||
| a2b0495254 | |||
| 28f873be5c | |||
| 5dede9304b | |||
| ab52ee7486 | |||
| 3bf80a74fe | |||
| 8f711f607f | |||
| f2c5fed3c1 | |||
| 1602fb2106 | |||
| c3f72756a4 | |||
| 5f8b557eb5 | |||
| de31b16f91 | |||
| 9d8e75a957 | |||
| 839844cb4f | |||
| fac976a22e | |||
| 84cb59d7b2 | |||
| 788620079d | |||
| 0e5b95f1d8 | |||
| d0a82d71ee | |||
| 97f742f816 | |||
| 58980e61b7 | |||
| 5a04f9033b | |||
| 28785f13bc | |||
| 7a73d3288c | |||
| d82b2dc6ef | |||
| 6ad319554d | |||
| ff3b94a23a | |||
| 5227a593ed | |||
| c802944d3b | |||
| 93d77ee945 | |||
| 4c101b21d0 | |||
| 05366635c1 | |||
| d853d42090 | |||
| cb06eae63e | |||
| 6ba40aba51 | |||
| b8d54fb295 | |||
| 84d7eb03f2 | |||
| 28cd584393 | |||
| bd6cc8a759 | |||
| 7cfd4e2dfa | |||
| f923f4e03d | |||
| e8898ce424 | |||
| ebe045a833 | |||
| 140f9970f9 | |||
| 3d23e74818 | |||
| c24c78267b | |||
| a7501e370b | |||
| 68200895d0 | |||
| b6b99ee9f0 | |||
| 5ea601cde9 | |||
| 1e7611f3f9 | |||
| c14856ac6f | |||
| 8857d3daca | |||
| ad1bd06bb3 | |||
| 52555f4d9d | |||
| d85b3dd7f0 | |||
| 6af44146e5 | |||
| f704c44e9e | |||
| a9884c1efb | |||
| 2dc0956b3c | |||
| 7dbe7eb3e1 | |||
| 5617968a0c | |||
| 3b029ae4cd | |||
| 73dc770870 | |||
| 46e56afa5c | |||
| e6842f50b3 | |||
| f4ec536794 | |||
| f008857ab2 | |||
| e7022472ff | |||
| b470c4b259 | |||
| 155103b40f | |||
| 0eee7ea548 | |||
| b53527c9fd | |||
| fb12bfa57f | |||
| 1a5af05024 | |||
| 7a842c4b14 | |||
| 9779e53fe7 | |||
| 5c495dcf8d | |||
| 6bccf233ee | |||
| 83e020f492 | |||
| 84e4797ddf | |||
| 40e7685751 | |||
| bfdd7be53c | |||
| 198498a26d | |||
| 3ba74a0373 | |||
| 5c7b7615dd | |||
| e2992c2a79 | |||
| aab5cfe30c | |||
| f32ace9737 | |||
| d8bed77b67 | |||
| 7ae79f20b8 | |||
| 0a09d4a872 | |||
| 68e778ba1f | |||
| 6d28d1af1d | |||
| 7e7bc0eb0e | |||
| b32728c9f0 | |||
| 39748f9d9e | |||
| dabe547fb4 | |||
| 3104f84768 | |||
| bb2967c3ea | |||
| de1c08d65a | |||
| a68f18c9f2 | |||
| d16d7a1e76 | |||
| 2338218fa6 | |||
| a46115f056 | |||
| d61747c283 | |||
| 10afcda7a3 | |||
| 680c3824f7 | |||
| 194d1c2208 | |||
| 88aba1cb02 | |||
| fd664bafae | |||
| c03ec96966 | |||
| 5e02a7c21e | |||
| bce25e9788 | |||
| b8332ae05b | |||
| f1fbcf653b | |||
| 283d611ad7 | |||
| 045ca4ad9e | |||
| f7a623a052 | |||
| 0439347bc3 | |||
| 441716773f | |||
| 801e068abb | |||
| a44e22c726 | |||
| 63bd2a1cbf | |||
| c88c1aac96 | |||
| a2e76364e9 | |||
| 051ae3fab6 | |||
| f1544a6f6c | |||
| 715facaefc | |||
| 6de671ccd5 | |||
| e61a727180 | |||
| 30e09e731b | |||
| d516c625eb | |||
| 9dceffdbeb | |||
| e107a67f55 | |||
| ee85c3597e | |||
| ddc413a1b3 | |||
| 5c6aaed51f | |||
| 234c1766dc | |||
| 95d8fd2871 | |||
| a6d9af576d | |||
| 23c54255e3 | |||
| 013d6990ce | |||
| 25b33244a4 | |||
| c8c4127fbb | |||
| 33fdfadcf7 | |||
| 3d7fa985f7 | |||
| 63c9185fd2 | |||
| e69dc4f898 | |||
| 32b5dfc04a | |||
| 2d78eda6ad | |||
| ae03967fb6 | |||
| 5db50d2ff7 | |||
| af226ceb67 | |||
| b17a6be4d5 | |||
| 7f791ad265 | |||
| 03b568ad49 | |||
| f9bfdee8c3 | |||
| 123fcf9d3c | |||
| e673fd5b38 | |||
| 0b07bef0de | |||
| ba4c5b31d1 | |||
| 6b5f930a1e | |||
| 51c6fe496b | |||
| 4880ff705b | |||
| 4f7841fa85 | |||
| 3acb44a5c9 | |||
| 5108fa6b94 | |||
| db5909fdf5 | |||
| 051a1fa7ef | |||
| 2fa4cdebb9 | |||
| 3c2f4874fc | |||
| 66d8690dc3 | |||
| 0f9b8f14e6 | |||
| eb1bc2779b | |||
| ed9a5f1a24 | |||
| 31090af440 | |||
| 283f21de86 | |||
| 0a088eb949 | |||
| 663248ae2b | |||
| a94a068202 | |||
| 6778a4c0da | |||
| 2901f337e7 | |||
| cb53604c13 | |||
| 1e18eb4335 | |||
| ddb01d9478 | |||
| 8309c5bbfe | |||
| 0700038802 | |||
| d733af03aa | |||
| 3e4c531538 | |||
| e728a58222 | |||
| 8491d20439 | |||
| 30ae04fd6e | |||
| f5ca81240b | |||
| 2ab2cb7cf2 | |||
| 29afb2aed9 | |||
| 10c6def10e | |||
| 7f17f30650 | |||
| 12fd3bd3ce | |||
| 86b53b7ede | |||
| 078e9afcc2 | |||
| 21e3293895 | |||
| cd86a8a3c7 | |||
| 9e1e641218 | |||
| 03244e9e83 | |||
| dc3a4a3ed9 | |||
| 8ca63e5013 | |||
| 92663a7ae3 | |||
| ee0ab7f042 | |||
| 2e22646c34 |
@ -1,16 +1,18 @@
|
||||
INCLUDEPATH += $$PWD/build/$$CORE_BUILDS_PLATFORM_PREFIX/include
|
||||
CORE_BOOST_LIBS = $$PWD/build/$$CORE_BUILDS_PLATFORM_PREFIX/lib
|
||||
|
||||
core_ios:CONFIG += disable_enum_constexpr_conversion
|
||||
core_android:CONFIG += disable_enum_constexpr_conversion
|
||||
core_mac:CONFIG += disable_enum_constexpr_conversion
|
||||
|
||||
core_android {
|
||||
INCLUDEPATH += $$PWD/build/android/include
|
||||
CORE_BOOST_LIBS = $$PWD/build/android/lib/$$CORE_BUILDS_PLATFORM_PREFIX
|
||||
|
||||
DEFINES += "_HAS_AUTO_PTR_ETC=0"
|
||||
QMAKE_CFLAGS += -Wno-enum-constexpr-conversion
|
||||
QMAKE_CXXFLAGS += -Wno-enum-constexpr-conversion
|
||||
}
|
||||
|
||||
core_ios {
|
||||
disable_enum_constexpr_conversion {
|
||||
QMAKE_CFLAGS += -Wno-enum-constexpr-conversion
|
||||
QMAKE_CXXFLAGS += -Wno-enum-constexpr-conversion
|
||||
}
|
||||
|
||||
@ -12,7 +12,7 @@
|
||||
#include "StaticFunctions.h"
|
||||
#include "ConstValues.h"
|
||||
|
||||
#define DEFAULT_FONT_SIZE 28 // 14 * 2
|
||||
#define DEFAULT_FONT_SIZE 14
|
||||
|
||||
namespace NSCSS
|
||||
{
|
||||
@ -34,6 +34,9 @@ namespace NSCSS
|
||||
|
||||
CCompiledStyle& CCompiledStyle::operator+= (const CCompiledStyle &oElement)
|
||||
{
|
||||
if (oElement.Empty())
|
||||
return *this;
|
||||
|
||||
m_oBackground += oElement.m_oBackground;
|
||||
m_oBorder += oElement.m_oBorder;
|
||||
m_oFont += oElement.m_oFont;
|
||||
@ -42,6 +45,9 @@ namespace NSCSS
|
||||
m_oText += oElement.m_oText;
|
||||
m_oDisplay += oElement.m_oDisplay;
|
||||
|
||||
if (!oElement.m_sId.empty())
|
||||
m_sId += L'+' + oElement.m_sId;
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
@ -110,7 +116,7 @@ namespace NSCSS
|
||||
void CCompiledStyle::AddStyle(const std::map<std::wstring, std::wstring>& mStyle, const unsigned int unLevel, const bool& bHardMode)
|
||||
{
|
||||
const bool bIsThereBorder = (m_oBorder.Empty()) ? false : true;
|
||||
const double dFontSize = (!m_oFont.GetSize().Empty()) ? m_oFont.GetSize().ToDouble(NSCSS::Twips) : DEFAULT_FONT_SIZE;
|
||||
const double dFontSize = (!m_oFont.GetSize().Empty()) ? m_oFont.GetSize().ToDouble(NSCSS::Point) : DEFAULT_FONT_SIZE;
|
||||
|
||||
for (std::pair<std::wstring, std::wstring> pPropertie : mStyle)
|
||||
{
|
||||
@ -180,7 +186,6 @@ namespace NSCSS
|
||||
break;
|
||||
|
||||
m_oMargin.SetTop(pPropertie.second, unLevel, bHardMode);
|
||||
m_oMargin.UpdateTop(dFontSize);
|
||||
break;
|
||||
}
|
||||
CASE(L"margin-right"):
|
||||
@ -489,6 +494,11 @@ namespace NSCSS
|
||||
return arParentsName;
|
||||
}
|
||||
|
||||
std::set<std::wstring> CCompiledStyle::GetParentsNamesSet() const
|
||||
{
|
||||
return m_arParentsStyles;
|
||||
}
|
||||
|
||||
void CCompiledStyle::SetID(const std::wstring& sId)
|
||||
{
|
||||
m_sId = sId;
|
||||
|
||||
@ -48,6 +48,7 @@ namespace NSCSS
|
||||
void AddParent(const std::wstring& sParentName);
|
||||
|
||||
std::vector<std::wstring> GetParentsName() const;
|
||||
std::set<std::wstring> GetParentsNamesSet() const;
|
||||
|
||||
void SetID(const std::wstring& sId);
|
||||
std::wstring GetId() const;
|
||||
|
||||
@ -23,6 +23,11 @@ namespace NSCSS
|
||||
return m_pInternal->GetCompiledStyle(oStyle, arSelectors, bIsSettings, unitMeasure);
|
||||
}
|
||||
|
||||
std::wstring CCssCalculator::CalculateStyleId(const CNode& oNode)
|
||||
{
|
||||
return m_pInternal->CalculateStyleId(oNode);
|
||||
}
|
||||
|
||||
bool CCssCalculator::CalculatePageStyle(NSProperties::CPage& oPageData, const std::vector<CNode> &arSelectors)
|
||||
{
|
||||
return m_pInternal->CalculatePageStyle(oPageData, arSelectors);
|
||||
|
||||
@ -22,6 +22,7 @@ namespace NSCSS
|
||||
CCompiledStyle GetCompiledStyle(const std::vector<CNode> &arSelectors, const bool& bIsSettings = false, const UnitMeasure& unitMeasure = Point) const;
|
||||
bool GetCompiledStyle(CCompiledStyle& oStyle, const std::vector<CNode> &arSelectors, const bool& bIsSettings = false, const UnitMeasure& unitMeasure = Point) const;
|
||||
|
||||
std::wstring CalculateStyleId(const CNode& oNode);
|
||||
bool CalculatePageStyle(NSProperties::CPage& oPageData, const std::vector<CNode> &arSelectors);
|
||||
|
||||
// void AddStyle(const std::vector<std::string>& sSelectors, const std::string& sStyle);
|
||||
|
||||
@ -16,8 +16,9 @@
|
||||
|
||||
#define MaxNumberRepetitions 6
|
||||
|
||||
inline static std::wstring StringifyValueList(const KatanaArray* oValues);
|
||||
inline static std::wstring StringifyValue(const KatanaValue* oValue);
|
||||
inline static std::wstring StringifyValueList(const KatanaArray* oValues);
|
||||
inline static std::wstring StringifyValue(const KatanaValue* oValue);
|
||||
inline static bool IsTableElement(const std::wstring& wsNameTag);
|
||||
|
||||
bool operator<(const std::vector<NSCSS::CNode> &arLeftSelectors, const std::vector<NSCSS::CNode> &arRightSelectors)
|
||||
{
|
||||
@ -52,13 +53,6 @@ namespace NSCSS
|
||||
|
||||
m_mData.clear();
|
||||
|
||||
#ifdef CSS_CALCULATOR_WITH_XHTML
|
||||
for (std::map<std::vector<CNode>, CCompiledStyle*>::iterator iter = m_mUsedStyles.begin(); iter != m_mUsedStyles.end(); ++iter)
|
||||
delete iter->second;
|
||||
|
||||
m_mUsedStyles.clear();
|
||||
#endif
|
||||
|
||||
if (NULL != m_mStatictics)
|
||||
delete m_mStatictics;
|
||||
}
|
||||
@ -163,28 +157,34 @@ namespace NSCSS
|
||||
|
||||
std::vector<CElement*> CCssCalculator_Private::FindElements(std::vector<std::wstring> &arNodes, std::vector<std::wstring> &arNextNodes, bool bIsSettings)
|
||||
{
|
||||
if (arNodes.empty())
|
||||
return {};
|
||||
|
||||
std::vector<CElement*> arFindedElements;
|
||||
|
||||
std::wstring wsName, wsId;
|
||||
std::vector<std::wstring> arClasses;
|
||||
|
||||
if (arNodes.back()[0] == L'#')
|
||||
if (!arNodes.empty() && arNodes.back()[0] == L'#')
|
||||
{
|
||||
wsId = arNodes.back();
|
||||
arNodes.pop_back();
|
||||
arNextNodes.push_back(wsId);
|
||||
}
|
||||
|
||||
if (arNodes.back()[0] == L'.')
|
||||
if (!arNodes.empty() && arNodes.back()[0] == L'.')
|
||||
{
|
||||
arClasses = NS_STATIC_FUNCTIONS::GetWordsW(arNodes.back(), false, L" ");
|
||||
arNextNodes.push_back(arNodes.back());
|
||||
arNodes.pop_back();
|
||||
}
|
||||
|
||||
wsName = arNodes.back();
|
||||
arNodes.pop_back();
|
||||
arNextNodes.push_back(wsName);
|
||||
if (!arNodes.empty())
|
||||
{
|
||||
wsName = arNodes.back();
|
||||
arNodes.pop_back();
|
||||
arNextNodes.push_back(wsName);
|
||||
}
|
||||
|
||||
const std::map<std::wstring, CElement*>::const_iterator oFindName = m_mData.find(wsName);
|
||||
std::map<std::wstring, CElement*>::const_iterator oFindId;
|
||||
@ -494,11 +494,11 @@ namespace NSCSS
|
||||
|
||||
if (!bIsSettings)
|
||||
{
|
||||
const std::map<std::vector<CNode>, CCompiledStyle*>::iterator oItem = m_mUsedStyles.find(arSelectors);
|
||||
const std::map<std::vector<CNode>, CCompiledStyle>::iterator oItem = m_mUsedStyles.find(arSelectors);
|
||||
|
||||
if (oItem != m_mUsedStyles.end())
|
||||
{
|
||||
oStyle = *oItem->second;
|
||||
oStyle = oItem->second;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@ -516,20 +516,20 @@ namespace NSCSS
|
||||
|
||||
std::vector<std::wstring> arNodes = CalculateAllNodes(arSelectors);
|
||||
std::vector<std::wstring> arPrevNodes;
|
||||
|
||||
bool bInTable = false;
|
||||
|
||||
for (size_t i = 0; i < arSelectors.size(); ++i)
|
||||
{
|
||||
oStyle.AddParent(arSelectors[i].m_wsName);
|
||||
|
||||
// Скидываем некоторые внешние стили, которые внутри таблицы переопределяются
|
||||
if (L"table" == arSelectors[i].m_wsName)
|
||||
{
|
||||
oStyle.m_oFont.GetLineHeight().Clear();
|
||||
oStyle.m_oPadding.Clear();
|
||||
oStyle.m_oMargin.Clear();
|
||||
}
|
||||
if (!bInTable)
|
||||
bInTable = IsTableElement(arSelectors[i].m_wsName);
|
||||
|
||||
oStyle.m_oBorder.Clear();
|
||||
if (bInTable)
|
||||
{
|
||||
oStyle.m_oBackground.Clear();
|
||||
oStyle.m_oBorder.Clear();
|
||||
}
|
||||
|
||||
CCompiledStyle oTempStyle;
|
||||
|
||||
@ -557,20 +557,29 @@ namespace NSCSS
|
||||
oTempStyle.AddStyle(arSelectors[i].m_wsStyle, i + 1, true);
|
||||
|
||||
oStyle += oTempStyle;
|
||||
|
||||
// Скидываем некоторые внешние стили, которые внутри таблицы переопределяются
|
||||
if (bInTable && i < arSelectors.size() - 1)
|
||||
{
|
||||
oStyle.m_oFont.GetLineHeight().Clear();
|
||||
oStyle.m_oPadding.Clear();
|
||||
oStyle.m_oMargin.Clear();
|
||||
}
|
||||
}
|
||||
|
||||
if (!bIsSettings)
|
||||
{
|
||||
oStyle.SetID(arSelectors.back().m_wsName + ((!arSelectors.back().m_wsClass.empty()) ? L'.' + arSelectors.back().m_wsClass : L"") + ((arSelectors.back().m_wsId.empty()) ? L"" : L'#' + arSelectors.back().m_wsId) + L'-' + std::to_wstring(++m_nCountNodes));
|
||||
oStyle.SetID(CalculateStyleId(arSelectors.back()));
|
||||
|
||||
CCompiledStyle *pTemp = new CCompiledStyle(oStyle);
|
||||
|
||||
m_mUsedStyles[arSelectors] = pTemp;
|
||||
}
|
||||
if (!bIsSettings && !oStyle.Empty())
|
||||
m_mUsedStyles[arSelectors] = oStyle;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
std::wstring CCssCalculator_Private::CalculateStyleId(const CNode& oNode)
|
||||
{
|
||||
return oNode.m_wsName + ((!oNode.m_wsClass.empty()) ? L'.' + oNode.m_wsClass : L"") + ((oNode.m_wsId.empty()) ? L"" : L'#' + oNode.m_wsId) + L'-' + std::to_wstring(++m_nCountNodes);
|
||||
}
|
||||
|
||||
bool CCssCalculator_Private::CalculatePageStyle(NSProperties::CPage &oPageData, const std::vector<CNode> &arSelectors)
|
||||
{
|
||||
if (arSelectors.empty())
|
||||
@ -788,4 +797,11 @@ inline static std::wstring StringifyValue(const KatanaValue* oValue)
|
||||
return str;
|
||||
}
|
||||
|
||||
inline static bool IsTableElement(const std::wstring& wsNameTag)
|
||||
{
|
||||
return L"td" == wsNameTag || L"tr" == wsNameTag || L"table" == wsNameTag ||
|
||||
L"tbody" == wsNameTag || L"thead" == wsNameTag || L"tfoot" == wsNameTag ||
|
||||
L"th" == wsNameTag;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -37,7 +37,7 @@ namespace NSCSS
|
||||
std::map<StatistickElement, unsigned int> *m_mStatictics; // Количество повторений свойств id и style у селекторов
|
||||
|
||||
#ifdef CSS_CALCULATOR_WITH_XHTML
|
||||
std::map<std::vector<CNode>, CCompiledStyle*> m_mUsedStyles;
|
||||
std::map<std::vector<CNode>, CCompiledStyle> m_mUsedStyles;
|
||||
|
||||
std::map<std::wstring, std::wstring> GetPageData(const std::wstring& wsPageName);
|
||||
void SetPageData(NSProperties::CPage& oPage, const std::map<std::wstring, std::wstring>& mData, unsigned int unLevel, bool bHardMode = false);
|
||||
@ -75,6 +75,7 @@ namespace NSCSS
|
||||
CCompiledStyle GetCompiledStyle(const std::vector<CNode> &arSelectors, const bool& bIsSettings = false, const UnitMeasure& unitMeasure = Point);
|
||||
bool GetCompiledStyle(CCompiledStyle& oStyle, const std::vector<CNode> &arSelectors, const bool& bIsSettings = false, const UnitMeasure& unitMeasure = Point);
|
||||
|
||||
std::wstring CalculateStyleId(const CNode& oNode);
|
||||
bool CalculatePageStyle(NSProperties::CPage& oPageData, const std::vector<CNode> &arSelectors);
|
||||
#endif
|
||||
|
||||
|
||||
@ -5,7 +5,7 @@ namespace NSCSS
|
||||
CNode::CNode()
|
||||
{}
|
||||
|
||||
CNode::CNode(std::wstring wsName, std::wstring wsClass, std::wstring wsId)
|
||||
CNode::CNode(const std::wstring& wsName, const std::wstring& wsClass, const std::wstring& wsId)
|
||||
: m_wsName(wsName), m_wsClass(wsClass), m_wsId(wsId)
|
||||
{}
|
||||
|
||||
|
||||
@ -18,7 +18,7 @@ namespace NSCSS
|
||||
|
||||
public:
|
||||
CNode();
|
||||
CNode(std::wstring wsName, std::wstring wsClass, std::wstring wsId);
|
||||
CNode(const std::wstring& wsName, const std::wstring& wsClass, const std::wstring& wsId);
|
||||
|
||||
bool Empty() const;
|
||||
|
||||
|
||||
@ -87,6 +87,7 @@ namespace NSCSS
|
||||
R_Color,
|
||||
R_U,
|
||||
R_Highlight,
|
||||
R_Shd,
|
||||
R_SmallCaps,
|
||||
R_Kern
|
||||
} RunnerProperties;
|
||||
|
||||
@ -141,7 +141,9 @@ namespace NS_STATIC_FUNCTIONS
|
||||
|
||||
while (std::wstring::npos != unEnd)
|
||||
{
|
||||
arWords.emplace_back(wsLine.data() + unStart, unEnd - unStart + ((bWithSigns) ? 1 : 0));
|
||||
if (unStart != unEnd)
|
||||
arWords.emplace_back(wsLine.data() + unStart, unEnd - unStart + ((bWithSigns) ? 1 : 0));
|
||||
|
||||
unStart = wsLine.find_first_not_of(wsDelimiters, unEnd);
|
||||
unEnd = wsLine.find_first_of(wsDelimiters, unStart);
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -13,6 +13,8 @@ namespace NSCSS
|
||||
{
|
||||
namespace NSProperties
|
||||
{
|
||||
#define NEXT_LEVEL UINT_MAX, true
|
||||
|
||||
template<typename T>
|
||||
class CValue
|
||||
{
|
||||
@ -21,6 +23,7 @@ namespace NSCSS
|
||||
friend class CDigit;
|
||||
friend class CColor;
|
||||
friend class CEnum;
|
||||
friend class CURL;
|
||||
|
||||
T m_oValue;
|
||||
unsigned int m_unLevel;
|
||||
@ -74,13 +77,13 @@ namespace NSCSS
|
||||
return *this;
|
||||
}
|
||||
|
||||
CValue& operator =(const T& oValue)
|
||||
virtual CValue& operator =(const T& oValue)
|
||||
{
|
||||
//m_oValue = oValue.m_oValue;
|
||||
return *this;
|
||||
}
|
||||
|
||||
CValue& operator+=(const CValue& oValue)
|
||||
virtual CValue& operator+=(const CValue& oValue)
|
||||
{
|
||||
if (m_unLevel > oValue.m_unLevel || (m_bImportant && !oValue.m_bImportant) || oValue.Empty())
|
||||
return *this;
|
||||
@ -92,10 +95,15 @@ namespace NSCSS
|
||||
return *this;
|
||||
}
|
||||
|
||||
bool operator==(const CValue& oValue) const
|
||||
virtual bool operator==(const CValue& oValue) const
|
||||
{
|
||||
return m_oValue == oValue.m_oValue;
|
||||
}
|
||||
|
||||
virtual bool operator!=(const CValue& oValue) const
|
||||
{
|
||||
return m_oValue != oValue.m_oValue;
|
||||
}
|
||||
};
|
||||
|
||||
class CString : public CValue<std::wstring>
|
||||
@ -130,13 +138,14 @@ namespace NSCSS
|
||||
|
||||
bool SetValue(const std::wstring& wsValue, unsigned int unLevel = 0, bool bHardMode = true) override;
|
||||
bool SetValue(const CDigit& oValue);
|
||||
bool SetValue(const double& dValue, unsigned int unLevel, bool bHardMode);
|
||||
|
||||
bool Empty() const override;
|
||||
bool Zero() const;
|
||||
void Clear() override;
|
||||
|
||||
void ConvertTo(UnitMeasure enUnitMeasure, double dPrevValue = 0.);
|
||||
|
||||
|
||||
int ToInt() const override;
|
||||
double ToDouble() const override;
|
||||
std::wstring ToWString() const override;
|
||||
@ -178,8 +187,28 @@ namespace NSCSS
|
||||
bool Empty() const;
|
||||
|
||||
bool operator==(const TRGB& oRGB) const;
|
||||
bool operator!=(const TRGB& oRGB) const;
|
||||
};
|
||||
|
||||
class CURL
|
||||
{
|
||||
public:
|
||||
CURL();
|
||||
|
||||
bool Empty() const;
|
||||
bool LinkToId() const;
|
||||
|
||||
void Clear();
|
||||
|
||||
bool SetValue(const std::wstring& wsValue);
|
||||
std::wstring GetValue() const;
|
||||
|
||||
bool operator==(const CURL& oValue) const;
|
||||
bool operator!=(const CURL& oValue) const;
|
||||
private:
|
||||
std::wstring m_wsValue;
|
||||
};
|
||||
|
||||
typedef enum
|
||||
{
|
||||
ColorEmpty,
|
||||
@ -189,39 +218,8 @@ namespace NSCSS
|
||||
ColorUrl
|
||||
} ColorType;
|
||||
|
||||
class Q_DECL_EXPORT CColorValue
|
||||
class CColor : public CValue<void*>
|
||||
{
|
||||
public:
|
||||
CColorValue();
|
||||
CColorValue(const CColorValue& oColorValue);
|
||||
~CColorValue();
|
||||
|
||||
void SetRGB(unsigned char uchR, unsigned char uchG, unsigned char uchB);
|
||||
void SetRGB(const TRGB& oRGB);
|
||||
void SetHEX(const std::wstring& wsValue);
|
||||
void SetUrl(const std::wstring& wsValue);
|
||||
void SetNone();
|
||||
|
||||
void Clear();
|
||||
|
||||
bool Empty() const;
|
||||
|
||||
ColorType m_enType;
|
||||
void* m_pColor = NULL;
|
||||
|
||||
std::wstring GetColor() const;
|
||||
|
||||
bool operator==(const CColorValue& oColorValue) const;
|
||||
CColorValue& operator= (const CColorValue& oColorValue);
|
||||
};
|
||||
|
||||
class CColor : public CValue<CColorValue>
|
||||
{
|
||||
CDigit m_oOpacity;
|
||||
static TRGB ConvertHEXtoRGB(const std::wstring& wsValue);
|
||||
static std::wstring ConvertRGBtoHEX(const TRGB& oValue);
|
||||
static std::wstring CutURL(const std::wstring& wsValue);
|
||||
void SetEmpty(unsigned int unLevel = 0);
|
||||
public:
|
||||
CColor();
|
||||
|
||||
@ -229,6 +227,8 @@ namespace NSCSS
|
||||
bool SetOpacity(const std::wstring& wsValue, unsigned int unLevel = 0, bool bHardMode = true);
|
||||
|
||||
bool Empty() const override;
|
||||
bool None() const;
|
||||
bool Url() const;
|
||||
void Clear() override;
|
||||
|
||||
ColorType GetType() const;
|
||||
@ -240,6 +240,25 @@ namespace NSCSS
|
||||
std::wstring ToWString() const override;
|
||||
std::wstring EquateToColor(const std::vector<std::pair<TRGB, std::wstring>>& arColors) const;
|
||||
TRGB ToRGB() const;
|
||||
|
||||
static TRGB ConvertHEXtoRGB(const std::wstring& wsValue);
|
||||
static std::wstring ConvertRGBtoHEX(const TRGB& oValue);
|
||||
|
||||
bool operator==(const CColor& oColor) const;
|
||||
bool operator!=(const CColor& oColor) const;
|
||||
|
||||
CColor& operator =(const CColor& oColor);
|
||||
CColor& operator+=(const CColor& oColor);
|
||||
private:
|
||||
CDigit m_oOpacity;
|
||||
ColorType m_enType;
|
||||
|
||||
void SetEmpty(unsigned int unLevel = 0);
|
||||
void SetRGB(unsigned char uchR, unsigned char uchG, unsigned char uchB);
|
||||
void SetRGB(const TRGB& oRGB);
|
||||
void SetHEX(const std::wstring& wsValue);
|
||||
void SetUrl(const std::wstring& wsValue);
|
||||
void SetNone();
|
||||
};
|
||||
|
||||
typedef enum
|
||||
@ -383,6 +402,7 @@ namespace NSCSS
|
||||
|
||||
const CColor& GetColor() const;
|
||||
|
||||
void Clear();
|
||||
bool Empty() const;
|
||||
bool IsNone() const;
|
||||
|
||||
@ -405,6 +425,11 @@ namespace NSCSS
|
||||
bool SetMatrix(const std::wstring& wsValue, unsigned int unLevel, bool bHardMode = false);
|
||||
bool SetMatrix(const Aggplus::CMatrix &oMatrix);
|
||||
|
||||
void Translate(double dOffsetX, double dOffsetY);
|
||||
void Scale(double dScaleX, double dScaleY);
|
||||
void Rotate(double dValue);
|
||||
void RotateAt(double dValue, double dX, double dY);
|
||||
|
||||
const CMatrix& GetMatrix() const;
|
||||
|
||||
bool Empty() const;
|
||||
@ -419,6 +444,7 @@ namespace NSCSS
|
||||
{
|
||||
public:
|
||||
CBorderSide();
|
||||
CBorderSide(const CBorderSide& oBorderSide);
|
||||
|
||||
void Clear();
|
||||
|
||||
@ -426,9 +452,12 @@ namespace NSCSS
|
||||
|
||||
bool SetValue(const std::wstring& wsValue, unsigned int unLevel, bool bHardMode = false);
|
||||
bool SetWidth(const std::wstring& wsValue, unsigned int unLevel, bool bHardMode = false);
|
||||
bool SetWidth(const double& dValue, unsigned int unLevel, bool bHardMode = false);
|
||||
bool SetStyle(const std::wstring& wsValue, unsigned int unLevel, bool bHardMode = false);
|
||||
bool SetColor(const std::wstring& wsValue, unsigned int unLevel, bool bHardMode = false);
|
||||
|
||||
void SetNone(unsigned int unLevel, bool bHardMode);
|
||||
|
||||
void Block();
|
||||
void Unblock();
|
||||
|
||||
@ -444,6 +473,8 @@ namespace NSCSS
|
||||
|
||||
CBorderSide& operator+=(const CBorderSide& oBorderSide);
|
||||
bool operator==(const CBorderSide& oBorderSide) const;
|
||||
bool operator!=(const CBorderSide& oBorderSide) const;
|
||||
CBorderSide& operator =(const CBorderSide& oBorderSide);
|
||||
private:
|
||||
CDigit m_oWidth;
|
||||
CString m_oStyle;
|
||||
@ -464,39 +495,50 @@ namespace NSCSS
|
||||
CBorder();
|
||||
|
||||
void Clear();
|
||||
void ClearLeftSide();
|
||||
void ClearTopSide();
|
||||
void ClearRightSide();
|
||||
void ClearBottomSide();
|
||||
|
||||
static void Equation(CBorder &oFirstBorder, CBorder &oSecondBorder);
|
||||
|
||||
bool SetSides(const std::wstring& wsValue, unsigned int unLevel, bool bHardMode = false);
|
||||
bool SetWidth(const std::wstring& wsValue, unsigned int unLevel, bool bHardMode = false);
|
||||
bool SetStyle(const std::wstring& wsValue, unsigned int unLevel, bool bHardMode = false);
|
||||
bool SetColor(const std::wstring& wsValue, unsigned int unLevel, bool bHardMode = false);
|
||||
bool SetSides(const std::wstring& wsValue, unsigned int unLevel, bool bHardMode = false);
|
||||
bool SetWidth(const std::wstring& wsValue, unsigned int unLevel, bool bHardMode = false);
|
||||
bool SetWidth(const double& dValue, unsigned int unLevel, bool bHardMode = false);
|
||||
bool SetStyle(const std::wstring& wsValue, unsigned int unLevel, bool bHardMode = false);
|
||||
bool SetColor(const std::wstring& wsValue, unsigned int unLevel, bool bHardMode = false);
|
||||
bool SetCollapse(const std::wstring& wsValue, unsigned int unLevel, bool bHardMode = false);
|
||||
|
||||
//Left Side
|
||||
bool SetLeftSide (const std::wstring& wsValue, unsigned int unLevel, bool bHardMode = false);
|
||||
bool SetWidthLeftSide (const std::wstring& wsValue, unsigned int unLevel, bool bHardMode = false);
|
||||
bool SetWidthLeftSide (const double& dValue, unsigned int unLevel, bool bHardMode = false);
|
||||
bool SetStyleLeftSide (const std::wstring& wsValue, unsigned int unLevel, bool bHardMode = false);
|
||||
bool SetColorLeftSide (const std::wstring& wsValue, unsigned int unLevel, bool bHardMode = false);
|
||||
|
||||
//Top Side
|
||||
bool SetTopSide (const std::wstring& wsValue, unsigned int unLevel, bool bHardMode = false);
|
||||
bool SetWidthTopSide (const std::wstring& wsValue, unsigned int unLevel, bool bHardMode = false);
|
||||
bool SetWidthTopSide (const double& dValue, unsigned int unLevel, bool bHardMode = false);
|
||||
bool SetStyleTopSide (const std::wstring& wsValue, unsigned int unLevel, bool bHardMode = false);
|
||||
bool SetColorTopSide (const std::wstring& wsValue, unsigned int unLevel, bool bHardMode = false);
|
||||
|
||||
//Right Side
|
||||
bool SetRightSide (const std::wstring& wsValue, unsigned int unLevel, bool bHardMode = false);
|
||||
bool SetWidthRightSide (const std::wstring& wsValue, unsigned int unLevel, bool bHardMode = false);
|
||||
bool SetWidthRightSide (const double& dValue, unsigned int unLevel, bool bHardMode = false);
|
||||
bool SetStyleRightSide (const std::wstring& wsValue, unsigned int unLevel, bool bHardMode = false);
|
||||
bool SetColorRightSide (const std::wstring& wsValue, unsigned int unLevel, bool bHardMode = false);
|
||||
|
||||
//Bottom Side
|
||||
bool SetBottomSide (const std::wstring& wsValue, unsigned int unLevel, bool bHardMode = false);
|
||||
bool SetWidthBottomSide(const std::wstring& wsValue, unsigned int unLevel, bool bHardMode = false);
|
||||
bool SetWidthBottomSide(const double& dValue, unsigned int unLevel, bool bHardMode = false);
|
||||
bool SetStyleBottomSide(const std::wstring& wsValue, unsigned int unLevel, bool bHardMode = false);
|
||||
bool SetColorBottomSide(const std::wstring& wsValue, unsigned int unLevel, bool bHardMode = false);
|
||||
|
||||
void SetNone(unsigned int unLevel, bool bHardMode = false);
|
||||
|
||||
void Block();
|
||||
void Unblock();
|
||||
|
||||
@ -513,6 +555,8 @@ namespace NSCSS
|
||||
|
||||
CBorder& operator+=(const CBorder& oBorder);
|
||||
bool operator==(const CBorder& oBorder) const;
|
||||
bool operator!=(const CBorder& oBorder) const;
|
||||
CBorder& operator =(const CBorder& oBorder);
|
||||
private:
|
||||
CBorderSide m_oLeft;
|
||||
CBorderSide m_oTop;
|
||||
@ -563,11 +607,13 @@ namespace NSCSS
|
||||
bool SetAlign (const std::wstring& wsValue, unsigned int unLevel, bool bHardMode = false);
|
||||
bool SetDecoration(const std::wstring& wsValue, unsigned int unLevel, bool bHardMode = false);
|
||||
bool SetColor (const std::wstring& wsValue, unsigned int unLevel, bool bHardMode = false);
|
||||
bool SetHighlight (const std::wstring& wsValue, unsigned int unLevel, bool bHardMode = false);
|
||||
|
||||
const CDigit& GetIndent() const;
|
||||
const CString& GetAlign() const;
|
||||
const TTextDecoration& GetDecoration() const;
|
||||
const CColor& GetColor() const;
|
||||
const CColor& GetHighlight() const;
|
||||
|
||||
bool Empty() const;
|
||||
|
||||
@ -582,6 +628,7 @@ namespace NSCSS
|
||||
CDigit m_oIndent;
|
||||
CString m_oAlign;
|
||||
CColor m_oColor;
|
||||
CColor m_oHighlight;
|
||||
};
|
||||
|
||||
class CIndent
|
||||
@ -599,9 +646,13 @@ namespace NSCSS
|
||||
|
||||
bool SetValues (const std::wstring& wsValue, unsigned int unLevel, bool bHardMode = false);
|
||||
bool SetTop (const std::wstring& wsValue, unsigned int unLevel, bool bHardMode = false);
|
||||
bool SetTop (const double& dValue, unsigned int unLevel, bool bHardMode = false);
|
||||
bool SetRight (const std::wstring& wsValue, unsigned int unLevel, bool bHardMode = false);
|
||||
bool SetRight (const double& dValue, unsigned int unLevel, bool bHardMode = false);
|
||||
bool SetBottom (const std::wstring& wsValue, unsigned int unLevel, bool bHardMode = false);
|
||||
bool SetBottom (const double& dValue, unsigned int unLevel, bool bHardMode = false);
|
||||
bool SetLeft (const std::wstring& wsValue, unsigned int unLevel, bool bHardMode = false);
|
||||
bool SetLeft (const double& dValue, unsigned int unLevel, bool bHardMode = false);
|
||||
|
||||
void UpdateAll (double dFontSize);
|
||||
void UpdateTop (double dFontSize);
|
||||
@ -641,6 +692,7 @@ namespace NSCSS
|
||||
|
||||
bool SetValue (const std::wstring& wsValue, unsigned int unLevel, bool bHardMode = false);
|
||||
bool SetSize (const std::wstring& wsValue, unsigned int unLevel, bool bHardMode = false);
|
||||
bool SetSize (const double& dValue, unsigned int unLevel, bool bHardMode = false);
|
||||
bool SetLineHeight (const std::wstring& wsValue, unsigned int unLevel, bool bHardMode = false);
|
||||
bool SetFamily (const std::wstring& wsValue, unsigned int unLevel, bool bHardMode = false);
|
||||
bool SetStretch (const std::wstring& wsValue, unsigned int unLevel, bool bHardMode = false);
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
#include "CDocumentStyle.h"
|
||||
|
||||
#include <iostream>
|
||||
#include <unordered_set>
|
||||
#include <wchar.h>
|
||||
#include <math.h>
|
||||
#include <cmath>
|
||||
@ -10,33 +11,66 @@
|
||||
#define DEFAULT_LINEHEIGHT 240
|
||||
#define LINEHEIGHTSCALE 10 // Значение LineHeight в OOXML должно быть в 10 раз больше чем указано в стиле
|
||||
|
||||
#define VALUE_TO_INT(value, unit_measure) \
|
||||
(NSCSS::UnitMeasure::None != value.GetUnitMeasure()) ? \
|
||||
value.ToInt(unit_measure) : \
|
||||
static_cast<int>(NSCSS::CUnitMeasureConverter::ConvertPx(value.ToDouble(), unit_measure, 96) + 0.5)
|
||||
|
||||
namespace NSCSS
|
||||
{
|
||||
CStyleUsed::CStyleUsed(const std::wstring &wsId, bool bIsPStyle)
|
||||
: m_bIsPStyle(bIsPStyle), m_wsId(wsId)
|
||||
CStyleUsed::CStyleUsed(const CCompiledStyle &oStyle, bool bIsPStyle)
|
||||
: m_oStyle(oStyle), m_bIsPStyle(bIsPStyle)
|
||||
{}
|
||||
|
||||
bool CheckArrays(const std::vector<std::wstring>& arInitial, const std::set<std::wstring>& arFirst, const std::set<std::wstring>& arSecond)
|
||||
{
|
||||
std::unordered_set<std::wstring> arInitialSet(arInitial.begin(), arInitial.end());
|
||||
|
||||
std::vector<std::wstring> arCommonElements1;
|
||||
std::vector<std::wstring> arCommonElements2;
|
||||
|
||||
for (const std::wstring& wsValue : arFirst)
|
||||
{
|
||||
if (arInitialSet.count(wsValue) > 0)
|
||||
arCommonElements1.push_back(wsValue);
|
||||
}
|
||||
|
||||
for (const std::wstring& wsValue : arSecond)
|
||||
{
|
||||
if (arInitialSet.count(wsValue) > 0)
|
||||
arCommonElements2.push_back(wsValue);
|
||||
}
|
||||
|
||||
if (arCommonElements1.size() != arCommonElements2.size())
|
||||
return false;
|
||||
|
||||
std::sort(arCommonElements1.begin(), arCommonElements1.end());
|
||||
std::sort(arCommonElements2.begin(), arCommonElements2.end());
|
||||
|
||||
return arCommonElements1 == arCommonElements2;
|
||||
}
|
||||
|
||||
bool CStyleUsed::operator==(const CStyleUsed &oUsedStyle) const
|
||||
{
|
||||
return (m_bIsPStyle == oUsedStyle.m_bIsPStyle) && (m_wsId == oUsedStyle.m_wsId);
|
||||
return m_bIsPStyle == oUsedStyle.m_bIsPStyle &&
|
||||
CheckArrays(Names_Standard_Styles, m_oStyle.GetParentsNamesSet(), oUsedStyle.m_oStyle.GetParentsNamesSet()) &&
|
||||
m_oStyle == oUsedStyle.m_oStyle;
|
||||
}
|
||||
|
||||
std::wstring CStyleUsed::getId()
|
||||
{
|
||||
if (m_bIsPStyle)
|
||||
return m_wsId;
|
||||
return m_oStyle.GetId();
|
||||
|
||||
return m_wsId + L"-c";
|
||||
return m_oStyle.GetId() + L"-c";
|
||||
}
|
||||
|
||||
void CStyleUsed::setId(const std::wstring &sId)
|
||||
CDocumentStyle::CDocumentStyle() : m_arStandardStyles(Names_Standard_Styles)
|
||||
{
|
||||
m_wsId = sId;
|
||||
for (const std::wstring& oNameStandardStyle : Names_Standard_Styles)
|
||||
m_arStandardStyles.push_back(oNameStandardStyle + L"-c");
|
||||
}
|
||||
|
||||
CDocumentStyle::CDocumentStyle() : m_arStandardStyles({L"a", L"li", L"h1", L"h2", L"h3", L"h4", L"h5", L"h6", L"h1-c",
|
||||
L"h2-c", L"h3-c", L"h4-c", L"h5-c", L"h6-c", L"p-c", L"p", L"div-c", L"div", L"a-c"}) {}
|
||||
|
||||
CDocumentStyle::~CDocumentStyle()
|
||||
{
|
||||
m_arStandardStyles. clear();
|
||||
@ -270,9 +304,10 @@ namespace NSCSS
|
||||
oElement.AddBasicProperties(BProperties::B_CustomStyle, L"1");
|
||||
}
|
||||
|
||||
void CDocumentStyle::SetPStyle (const NSCSS::CCompiledStyle& oStyle, CXmlElement& oXmlElement)
|
||||
void CDocumentStyle::SetPStyle (const NSCSS::CCompiledStyle& oStyle, CXmlElement& oXmlElement, bool bIsLite)
|
||||
{
|
||||
ConvertStyle(oStyle, oXmlElement, true);
|
||||
if (!bIsLite)
|
||||
ConvertStyle(oStyle, oXmlElement, true);
|
||||
|
||||
if (oStyle.Empty())
|
||||
return;
|
||||
@ -306,10 +341,14 @@ namespace NSCSS
|
||||
sSpacingValue.reserve(128);
|
||||
|
||||
if (!oStyle.m_oMargin.GetTop().Empty() && !oStyle.m_oMargin.GetTop().Zero())
|
||||
sSpacingValue += L"w:before=\"" + std::to_wstring(oStyle.m_oMargin.GetTop().ToInt(NSCSS::Twips)) + L"\" ";
|
||||
sSpacingValue += L"w:before=\"" + std::to_wstring(VALUE_TO_INT(oStyle.m_oMargin.GetTop(), NSCSS::Twips)) + L"\" w:beforeAutospacing=\"0\"";
|
||||
else if (oStyle.m_oMargin.GetBottom().Zero() || bInTable)
|
||||
sSpacingValue += L"w:before=\"0\" w:beforeAutospacing=\"0\"";
|
||||
|
||||
if (!oStyle.m_oMargin.GetBottom().Empty() && !oStyle.m_oMargin.GetBottom().Zero())
|
||||
sSpacingValue += L"w:after=\"" + std::to_wstring(oStyle.m_oMargin.GetBottom().ToInt(NSCSS::Twips)) + L"\" ";
|
||||
sSpacingValue += L" w:after=\"" + std::to_wstring(VALUE_TO_INT(oStyle.m_oMargin.GetBottom(), NSCSS::Twips)) + L"\" w:afterAutospacing=\"0\"";
|
||||
else if (oStyle.m_oMargin.GetBottom().Zero() || bInTable)
|
||||
sSpacingValue += L" w:after=\"0\" w:afterAutospacing=\"0\"";
|
||||
|
||||
if (!oStyle.m_oFont.GetLineHeight().Empty() && !oStyle.m_oFont.GetLineHeight().Zero())
|
||||
{
|
||||
@ -318,6 +357,8 @@ namespace NSCSS
|
||||
|
||||
sSpacingValue += L" w:line=\"" + wsLine + L"\" w:lineRule=\"" + wsLineRule + L"\"";
|
||||
}
|
||||
else if (oStyle.m_oFont.GetLineHeight().Zero() || bInTable)
|
||||
sSpacingValue += L" w:lineRule=\"auto\" w:line=\"240\"";
|
||||
|
||||
if (!sSpacingValue.empty())
|
||||
oXmlElement.AddPropertiesInP(PProperties::P_Spacing, sSpacingValue);
|
||||
@ -435,9 +476,11 @@ namespace NSCSS
|
||||
return L"w:val=\"" + wsStyle + L"\" w:sz=\"" + std::to_wstring(nWidth) + + L"\" w:space=\"" + std::to_wstring(nSpace) + L"\" w:color=\"" + wsColor + L"\"";
|
||||
}
|
||||
|
||||
void CDocumentStyle::SetRStyle(const NSCSS::CCompiledStyle& oStyle, CXmlElement& oXmlElement)
|
||||
void CDocumentStyle::SetRStyle(const NSCSS::CCompiledStyle& oStyle, CXmlElement& oXmlElement, bool bIsLite)
|
||||
{
|
||||
ConvertStyle(oStyle, oXmlElement, false);
|
||||
if (!bIsLite)
|
||||
ConvertStyle(oStyle, oXmlElement, false);
|
||||
|
||||
if (oStyle.Empty() && oXmlElement.Empty())
|
||||
return;
|
||||
|
||||
@ -447,12 +490,15 @@ namespace NSCSS
|
||||
if (oStyle.m_oText.GetDecoration().m_oLine.Underline())
|
||||
oXmlElement.AddPropertiesInR(RProperties::R_U, (!oStyle.m_oText.GetDecoration().m_oStyle.Empty()) ? oStyle.m_oText.GetDecoration().m_oStyle.ToWString() : L"single");
|
||||
|
||||
const std::wstring wsHighlight{oStyle.m_oBackground.GetColor().EquateToColor({{{0, 0, 0}, L"black"}, {{0, 0, 255}, L"blue"}, {{0, 255, 255}, L"cyan"},
|
||||
{{0, 255, 0}, L"green"}, {{255, 0, 255}, L"magenta"}, {{255, 0, 0}, L"red"},
|
||||
{{255, 255, 0}, L"yellow"}, {{255, 255, 255}, L"white"}, {{0, 0, 139}, L"darkBlue"},
|
||||
{{0, 139, 139}, L"darkCyan"}, {{0, 100, 0}, L"darkGreen"}, {{139, 0, 139}, L"darkMagenta"},
|
||||
{{139, 0, 0}, L"darkRed"}, {{128, 128, 0}, L"darkYellow"},{{169, 169, 169}, L"darkGray"},
|
||||
{{211, 211, 211}, L"lightGray"}})};
|
||||
if (!oStyle.m_oBackground.GetColor().Empty() && !oStyle.m_oBackground.GetColor().None() && !oStyle.m_oBackground.GetColor().Url())
|
||||
oXmlElement.AddPropertiesInR(RProperties::R_Shd, oStyle.m_oBackground.GetColor().ToWString());
|
||||
|
||||
const std::wstring wsHighlight{oStyle.m_oText.GetHighlight().EquateToColor({{{0, 0, 0}, L"black"}, {{0, 0, 255}, L"blue"}, {{0, 255, 255}, L"cyan"},
|
||||
{{0, 255, 0}, L"green"}, {{255, 0, 255}, L"magenta"}, {{255, 0, 0}, L"red"},
|
||||
{{255, 255, 0}, L"yellow"}, {{255, 255, 255}, L"white"}, {{0, 0, 139}, L"darkBlue"},
|
||||
{{0, 139, 139}, L"darkCyan"}, {{0, 100, 0}, L"darkGreen"}, {{139, 0, 139}, L"darkMagenta"},
|
||||
{{139, 0, 0}, L"darkRed"}, {{128, 128, 0}, L"darkYellow"},{{169, 169, 169}, L"darkGray"},
|
||||
{{211, 211, 211}, L"lightGray"}})};
|
||||
|
||||
if (L"none" != wsHighlight)
|
||||
oXmlElement.AddPropertiesInR(RProperties::R_Highlight, wsHighlight);
|
||||
@ -477,14 +523,11 @@ namespace NSCSS
|
||||
Clear();
|
||||
|
||||
if(oStyle.GetId().empty())
|
||||
{
|
||||
m_sId = L"normal";
|
||||
return false;
|
||||
}
|
||||
|
||||
CStyleUsed structStyle(oStyle.GetId(), false);
|
||||
CStyleUsed structStyle(oStyle, false);
|
||||
|
||||
std::list<CStyleUsed>::iterator oItem = std::find(m_arStyleUsed.begin(), m_arStyleUsed.end(), structStyle);
|
||||
std::vector<CStyleUsed>::iterator oItem = std::find(m_arStyleUsed.begin(), m_arStyleUsed.end(), structStyle);
|
||||
|
||||
if (oItem != m_arStyleUsed.end())
|
||||
{
|
||||
@ -506,11 +549,13 @@ namespace NSCSS
|
||||
|
||||
bool CDocumentStyle::WriteLitePStyle(const CCompiledStyle &oStyle)
|
||||
{
|
||||
Clear();
|
||||
|
||||
if (oStyle.Empty())
|
||||
return false;
|
||||
|
||||
CXmlElement oXmlElement;
|
||||
SetPStyle(oStyle, oXmlElement);
|
||||
SetPStyle(oStyle, oXmlElement, true);
|
||||
|
||||
if (oXmlElement.Empty())
|
||||
return false;
|
||||
@ -521,11 +566,13 @@ namespace NSCSS
|
||||
|
||||
bool CDocumentStyle::WriteLiteRStyle(const CCompiledStyle &oStyle)
|
||||
{
|
||||
Clear();
|
||||
|
||||
if (oStyle.Empty())
|
||||
return false;
|
||||
|
||||
CXmlElement oXmlElement;
|
||||
SetRStyle(oStyle, oXmlElement);
|
||||
SetRStyle(oStyle, oXmlElement, true);
|
||||
|
||||
if (oXmlElement.Empty())
|
||||
return false;
|
||||
@ -539,13 +586,10 @@ namespace NSCSS
|
||||
Clear();
|
||||
|
||||
if(oStyle.GetId().empty())
|
||||
{
|
||||
m_sId = L"normal";
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
||||
CStyleUsed structStyle(oStyle.GetId(), true);
|
||||
std::list<CStyleUsed>::iterator oItem = std::find(m_arStyleUsed.begin(), m_arStyleUsed.end(), structStyle);
|
||||
CStyleUsed structStyle(oStyle, true);
|
||||
std::vector<CStyleUsed>::iterator oItem = std::find(m_arStyleUsed.begin(), m_arStyleUsed.end(), structStyle);
|
||||
|
||||
if (oItem != m_arStyleUsed.end())
|
||||
{
|
||||
@ -559,11 +603,6 @@ namespace NSCSS
|
||||
if (oXmlElement.Empty())
|
||||
return false;
|
||||
|
||||
structStyle.setId(oXmlElement.GetStyleId());
|
||||
|
||||
if (structStyle.getId().empty())
|
||||
structStyle.setId(m_sId);
|
||||
|
||||
m_arStyleUsed.push_back(structStyle);
|
||||
m_sStyle += oXmlElement.GetPStyle();
|
||||
|
||||
|
||||
@ -10,27 +10,28 @@ namespace NSCSS
|
||||
{
|
||||
class CStyleUsed
|
||||
{
|
||||
CCompiledStyle m_oStyle;
|
||||
bool m_bIsPStyle;
|
||||
std::wstring m_wsId;
|
||||
|
||||
public:
|
||||
CStyleUsed(const std::wstring& wsId, bool bIsPStyle);
|
||||
CStyleUsed(const CCompiledStyle& oStyle, bool bIsPStyle);
|
||||
|
||||
bool operator==(const CStyleUsed& oUsedStyle) const;
|
||||
|
||||
std::wstring getId();
|
||||
void setId(const std::wstring& sId);
|
||||
};
|
||||
|
||||
static const std::vector<std::wstring> Names_Standard_Styles = {L"a", L"li", L"h1", L"h2", L"h3", L"h4", L"h5", L"h6",L"p", L"div"};
|
||||
|
||||
class CSSCALCULATOR_EXPORT CDocumentStyle
|
||||
{
|
||||
typedef NSConstValues::NSProperties::BasicProperties BProperties;
|
||||
typedef NSConstValues::NSProperties::ParagraphProperties PProperties;
|
||||
typedef NSConstValues::NSProperties::RunnerProperties RProperties;
|
||||
|
||||
std::list<std::wstring> m_arStandardStylesUsed;
|
||||
std::list<std::wstring> m_arStandardStyles;
|
||||
std::list<CStyleUsed> m_arStyleUsed;
|
||||
std::vector<std::wstring> m_arStandardStylesUsed;
|
||||
std::vector<std::wstring> m_arStandardStyles;
|
||||
std::vector<CStyleUsed> m_arStyleUsed;
|
||||
|
||||
std::wstring m_sStyle;
|
||||
std::wstring m_sId;
|
||||
@ -39,8 +40,8 @@ namespace NSCSS
|
||||
void CreateStandardStyle (const std::wstring& sNameStyle, CXmlElement& oElement);
|
||||
void ConvertStyle (const NSCSS::CCompiledStyle& oStyle, CXmlElement& oElement, bool bIsPStyle);
|
||||
|
||||
void SetRStyle(const NSCSS::CCompiledStyle& oStyle, CXmlElement& oXmlElement);
|
||||
void SetPStyle(const NSCSS::CCompiledStyle& oStyle, CXmlElement& oXmlElement);
|
||||
void SetRStyle(const NSCSS::CCompiledStyle& oStyle, CXmlElement& oXmlElement, bool bIsLite = false);
|
||||
void SetPStyle(const NSCSS::CCompiledStyle& oStyle, CXmlElement& oXmlElement, bool bIsLite = false);
|
||||
|
||||
void SetBorderStyle(const NSCSS::CCompiledStyle& oStyle, CXmlElement& oXmlElement, const PProperties& enBorderProperty);
|
||||
public:
|
||||
|
||||
@ -27,7 +27,7 @@ CXmlElement::CXmlElement(const std::wstring& sNameDefaultElement)
|
||||
|
||||
bool CXmlElement::Empty() const
|
||||
{
|
||||
return m_mPStyleValues.empty() && m_mRStyleValues.empty() && m_mBasicValues.find(CSSProperties::BasicProperties::B_BasedOn) == m_mBasicValues.end();
|
||||
return m_mPStyleValues.empty() && m_mRStyleValues.empty() && GetBasedOn().empty();
|
||||
}
|
||||
|
||||
void CXmlElement::CreateDefaultElement(const std::wstring& sNameDefaultElement)
|
||||
@ -35,7 +35,7 @@ void CXmlElement::CreateDefaultElement(const std::wstring& sNameDefaultElement)
|
||||
if (!Empty())
|
||||
Clear();
|
||||
|
||||
if (sNameDefaultElement == L"p")
|
||||
/* if (sNameDefaultElement == L"p")
|
||||
{
|
||||
AddBasicProperties(CSSProperties::BasicProperties::B_Type, L"paragraph");
|
||||
AddBasicProperties(CSSProperties::BasicProperties::B_StyleId, L"p");
|
||||
@ -45,9 +45,9 @@ void CXmlElement::CreateDefaultElement(const std::wstring& sNameDefaultElement)
|
||||
AddBasicProperties(CSSProperties::BasicProperties::B_UnhideWhenUsed, L"true");
|
||||
AddBasicProperties(CSSProperties::BasicProperties::B_SemiHidden, L"true");
|
||||
|
||||
AddPropertiesInP(CSSProperties::ParagraphProperties::P_Spacing, L"w:before=\"100\" w:beforeAutospacing=\"1\" w:after=\"100\" w:afterAutospacing=\"1\"");
|
||||
// AddPropertiesInP(CSSProperties::ParagraphProperties::P_Spacing, L"w:before=\"100\" w:beforeAutospacing=\"1\" w:after=\"100\" w:afterAutospacing=\"1\"");
|
||||
}
|
||||
else if (sNameDefaultElement == L"li")
|
||||
else */if (sNameDefaultElement == L"li")
|
||||
{
|
||||
AddBasicProperties(CSSProperties::BasicProperties::B_Type, L"paragraph");
|
||||
AddBasicProperties(CSSProperties::BasicProperties::B_StyleId, L"li");
|
||||
@ -67,7 +67,7 @@ void CXmlElement::CreateDefaultElement(const std::wstring& sNameDefaultElement)
|
||||
AddBasicProperties(CSSProperties::BasicProperties::B_Link, L"h1-c");
|
||||
|
||||
AddPropertiesInP(CSSProperties::ParagraphProperties::P_OutlineLvl, L"0");
|
||||
AddPropertiesInP(CSSProperties::ParagraphProperties::P_Spacing, L"w:before=\"100\" w:beforeAutospacing=\"1\" w:after=\"100\" w:afterAutospacing=\"1\"");
|
||||
// AddPropertiesInP(CSSProperties::ParagraphProperties::P_Spacing, L"w:before=\"100\" w:beforeAutospacing=\"1\" w:after=\"100\" w:afterAutospacing=\"1\"");
|
||||
}
|
||||
else if (sNameDefaultElement == L"h2")
|
||||
{
|
||||
@ -78,7 +78,7 @@ void CXmlElement::CreateDefaultElement(const std::wstring& sNameDefaultElement)
|
||||
AddBasicProperties(CSSProperties::BasicProperties::B_Link, L"h2-c");
|
||||
|
||||
AddPropertiesInP(CSSProperties::ParagraphProperties::P_OutlineLvl, L"1");
|
||||
AddPropertiesInP(CSSProperties::ParagraphProperties::P_Spacing, L"w:before=\"100\" w:beforeAutospacing=\"1\" w:after=\"100\" w:afterAutospacing=\"1\"");
|
||||
// AddPropertiesInP(CSSProperties::ParagraphProperties::P_Spacing, L"w:before=\"100\" w:beforeAutospacing=\"1\" w:after=\"100\" w:afterAutospacing=\"1\"");
|
||||
}
|
||||
else if (sNameDefaultElement == L"h3")
|
||||
{
|
||||
@ -89,7 +89,7 @@ void CXmlElement::CreateDefaultElement(const std::wstring& sNameDefaultElement)
|
||||
AddBasicProperties(CSSProperties::BasicProperties::B_Link, L"h3-c");
|
||||
|
||||
AddPropertiesInP(CSSProperties::ParagraphProperties::P_OutlineLvl, L"2");
|
||||
AddPropertiesInP(CSSProperties::ParagraphProperties::P_Spacing, L"w:before=\"100\" w:beforeAutospacing=\"1\" w:after=\"100\" w:afterAutospacing=\"1\"");
|
||||
// AddPropertiesInP(CSSProperties::ParagraphProperties::P_Spacing, L"w:before=\"100\" w:beforeAutospacing=\"1\" w:after=\"100\" w:afterAutospacing=\"1\"");
|
||||
}
|
||||
else if (sNameDefaultElement == L"h4")
|
||||
{
|
||||
@ -100,7 +100,7 @@ void CXmlElement::CreateDefaultElement(const std::wstring& sNameDefaultElement)
|
||||
AddBasicProperties(CSSProperties::BasicProperties::B_Link, L"h4-c");
|
||||
|
||||
AddPropertiesInP(CSSProperties::ParagraphProperties::P_OutlineLvl, L"3");
|
||||
AddPropertiesInP(CSSProperties::ParagraphProperties::P_Spacing, L"w:before=\"100\" w:beforeAutospacing=\"1\" w:after=\"100\" w:afterAutospacing=\"1\"");
|
||||
// AddPropertiesInP(CSSProperties::ParagraphProperties::P_Spacing, L"w:before=\"100\" w:beforeAutospacing=\"1\" w:after=\"100\" w:afterAutospacing=\"1\"");
|
||||
}
|
||||
else if (sNameDefaultElement == L"h5")
|
||||
{
|
||||
@ -111,7 +111,7 @@ void CXmlElement::CreateDefaultElement(const std::wstring& sNameDefaultElement)
|
||||
AddBasicProperties(CSSProperties::BasicProperties::B_Link, L"h5-c");
|
||||
|
||||
AddPropertiesInP(CSSProperties::ParagraphProperties::P_OutlineLvl, L"4");
|
||||
AddPropertiesInP(CSSProperties::ParagraphProperties::P_Spacing, L"w:before=\"100\" w:beforeAutospacing=\"1\" w:after=\"100\" w:afterAutospacing=\"1\"");
|
||||
// AddPropertiesInP(CSSProperties::ParagraphProperties::P_Spacing, L"w:before=\"100\" w:beforeAutospacing=\"1\" w:after=\"100\" w:afterAutospacing=\"1\"");
|
||||
|
||||
}
|
||||
else if (sNameDefaultElement == L"h6")
|
||||
@ -123,7 +123,7 @@ void CXmlElement::CreateDefaultElement(const std::wstring& sNameDefaultElement)
|
||||
AddBasicProperties(CSSProperties::BasicProperties::B_Link, L"h6-c");
|
||||
|
||||
AddPropertiesInP(CSSProperties::ParagraphProperties::P_OutlineLvl, L"5");
|
||||
AddPropertiesInP(CSSProperties::ParagraphProperties::P_Spacing, L"w:before=\"100\" w:beforeAutospacing=\"1\" w:after=\"100\" w:afterAutospacing=\"1\"");
|
||||
// AddPropertiesInP(CSSProperties::ParagraphProperties::P_Spacing, L"w:before=\"100\" w:beforeAutospacing=\"1\" w:after=\"100\" w:afterAutospacing=\"1\"");
|
||||
}
|
||||
else if (sNameDefaultElement == L"h1-c")
|
||||
{
|
||||
@ -203,7 +203,7 @@ void CXmlElement::CreateDefaultElement(const std::wstring& sNameDefaultElement)
|
||||
AddPropertiesInR(CSSProperties::RunnerProperties::R_Sz, L"15");
|
||||
AddPropertiesInR(CSSProperties::RunnerProperties::R_B, L"bold");
|
||||
}
|
||||
else if (sNameDefaultElement == L"div-c")
|
||||
/*else if (sNameDefaultElement == L"div-c")
|
||||
{
|
||||
AddBasicProperties(CSSProperties::BasicProperties::B_Type, L"character");
|
||||
AddBasicProperties(CSSProperties::BasicProperties::B_StyleId, L"div-c");
|
||||
@ -219,7 +219,7 @@ void CXmlElement::CreateDefaultElement(const std::wstring& sNameDefaultElement)
|
||||
AddBasicProperties(CSSProperties::BasicProperties::B_Name, L"Div paragraph");
|
||||
AddBasicProperties(CSSProperties::BasicProperties::B_BasedOn, L"normal");
|
||||
AddBasicProperties(CSSProperties::BasicProperties::B_Link, L"div-c");
|
||||
}
|
||||
}*/
|
||||
else if (sNameDefaultElement == L"a-c")
|
||||
{
|
||||
AddBasicProperties(CSSProperties::BasicProperties::B_Type, L"character");
|
||||
@ -298,7 +298,7 @@ CXmlElement& CXmlElement::operator=(const CXmlElement& oElement)
|
||||
return *this;
|
||||
}
|
||||
|
||||
bool CXmlElement::operator==(const CXmlElement &oElement)
|
||||
bool CXmlElement::operator==(const CXmlElement &oElement) const
|
||||
{
|
||||
return m_mBasicValues == oElement.m_mBasicValues &&
|
||||
m_mPStyleValues == oElement.m_mPStyleValues &&
|
||||
@ -454,6 +454,12 @@ std::wstring CXmlElement::ConvertRStyle(bool bIsLite) const
|
||||
sRStyle += L"<w:highlight w:val=\"" + oItem.second + L"\"/>";
|
||||
break;
|
||||
}
|
||||
case CSSProperties::RunnerProperties::R_Shd:
|
||||
{
|
||||
if (!oItem.second.empty())
|
||||
sRStyle += L"<w:shd w:val=\"clear\" w:color=\"auto\" w:fill=\"" + oItem.second + L"\"/>";
|
||||
break;
|
||||
}
|
||||
case CSSProperties::RunnerProperties::R_SmallCaps:
|
||||
{
|
||||
if (oItem.second == L"smallCaps")
|
||||
|
||||
@ -47,7 +47,7 @@ public:
|
||||
|
||||
CXmlElement& operator+=(const CXmlElement& oElement);
|
||||
CXmlElement& operator= (const CXmlElement& oelement);
|
||||
bool operator== (const CXmlElement& oElement);
|
||||
bool operator== (const CXmlElement& oElement) const;
|
||||
};
|
||||
|
||||
#endif // CXMLELEMENT_H
|
||||
|
||||
@ -5,7 +5,6 @@ sys.path.append('../../../../build_tools/scripts')
|
||||
import config
|
||||
import base
|
||||
import os
|
||||
import build
|
||||
|
||||
base_directory = os.getcwd()
|
||||
|
||||
|
||||
@ -22,8 +22,27 @@ static std::string special_handling = "|html|body|";
|
||||
static std::string no_entity_sub = ""; //"|style|";
|
||||
static std::string treat_like_inline = "|p|";
|
||||
|
||||
static void prettyprint(GumboNode*, NSStringUtils::CStringBuilderA& oBuilder);
|
||||
static std::string mhtTohtml(std::string& sFileContent);
|
||||
static std::vector<std::string> html_tags = {"div","span","a","img","p","h1","h2","h3","h4","h5","h6",
|
||||
"ul", "ol", "li","td","tr","table","thead","tbody","tfoot","th",
|
||||
"br","form","input","button","section","nav","header","footer",
|
||||
"main","figure","figcaption","strong","em","i", "b", "u","pre",
|
||||
"code","blockquote","hr","script","link","meta","style","title",
|
||||
"head","body","html","legend","optgroup","option","select","dl",
|
||||
"dt","dd","time","data","abbr","address","area","base","bdi",
|
||||
"bdo","cite","col","iframe","video","source","track","textarea",
|
||||
"label","fieldset","colgroup","del","ins","details","summary",
|
||||
"dialog","embed","kbd","map","mark","menu","meter","object",
|
||||
"output","param","progress","q","samp","small","sub","sup","var",
|
||||
"wbr","acronym","applet","article","aside","audio","basefont",
|
||||
"bgsound","big","blink","canvas","caption","center","command",
|
||||
"comment","datalist","dfn","dir","font","frame","frameset",
|
||||
"hgroup","isindex","keygen","marquee","nobr","noembed","noframes",
|
||||
"noscript","plaintext","rp","rt","ruby","s","strike","tt","xmp"};
|
||||
|
||||
static std::vector<std::string> unchecked_nodes_new = {"svg"};
|
||||
|
||||
static void prettyprint(GumboNode*, NSStringUtils::CStringBuilderA& oBuilder, bool bCheckValidNode = true);
|
||||
static std::string mhtTohtml(const std::string &sFileContent);
|
||||
|
||||
// Заменяет в строке s все символы s1 на s2
|
||||
static void replace_all(std::string& s, const std::string& s1, const std::string& s2)
|
||||
@ -36,14 +55,19 @@ static void replace_all(std::string& s, const std::string& s1, const std::string
|
||||
}
|
||||
}
|
||||
|
||||
static bool IsUnckeckedNodes(const std::string& sValue)
|
||||
{
|
||||
return unchecked_nodes_new.end() != std::find(unchecked_nodes_new.begin(), unchecked_nodes_new.end(), sValue);
|
||||
}
|
||||
|
||||
static std::wstring htmlToXhtml(std::string& sFileContent, bool bNeedConvert)
|
||||
{
|
||||
if (bNeedConvert)
|
||||
{ // Определение кодировки
|
||||
std::string sEncoding = NSStringFinder::FindPropety(sFileContent, "charset", {"="}, {";", "\\n", "\\r", " ", "\""});
|
||||
std::string sEncoding = NSStringFinder::FindPropety(sFileContent, "charset", {"="}, {";", "\\n", "\\r", " ", "\""}).m_sValue;
|
||||
|
||||
if (sEncoding.empty())
|
||||
sEncoding = NSStringFinder::FindPropety(sFileContent, "encoding", {"="}, {";", "\\n", "\\r", " "});
|
||||
sEncoding = NSStringFinder::FindPropety(sFileContent, "encoding", {"="}, {";", "\\n", "\\r", " "}).m_sValue;
|
||||
|
||||
if (!sEncoding.empty() && !NSStringFinder::Equals("utf-8", sEncoding))
|
||||
{
|
||||
@ -59,39 +83,12 @@ static std::wstring htmlToXhtml(std::string& sFileContent, bool bNeedConvert)
|
||||
if (boost::regex_search(sFileContent, oResult, oRegex))
|
||||
sFileContent.erase(0, oResult.position());
|
||||
|
||||
// Избавление от <a/>
|
||||
size_t posA = sFileContent.find("<a ");
|
||||
while(posA != std::string::npos)
|
||||
{
|
||||
size_t nBegin = sFileContent.find('<', posA + 1);
|
||||
size_t nEnd = sFileContent.find("/>", posA);
|
||||
if(nEnd < nBegin)
|
||||
sFileContent.replace(nEnd, 2, "></a>");
|
||||
posA = sFileContent.find("<a ", nBegin);
|
||||
}
|
||||
// Избавление от <title/>
|
||||
posA = sFileContent.find("<title/>");
|
||||
while (posA != std::string::npos)
|
||||
{
|
||||
sFileContent.replace(posA, 8, "<title></title>");
|
||||
posA = sFileContent.find("<title/>", posA);
|
||||
}
|
||||
// Избавление от <script/>
|
||||
posA = sFileContent.find("<script");
|
||||
while (posA != std::string::npos)
|
||||
{
|
||||
size_t nEnd = 0;
|
||||
size_t nEnd1 = sFileContent.find("/>", posA);
|
||||
size_t nEnd2 = sFileContent.find("</script>", posA);
|
||||
if (nEnd1 != std::string::npos)
|
||||
nEnd = nEnd1 + 2;
|
||||
if (nEnd2 != std::string::npos && (nEnd == 0 || (nEnd > 0 && nEnd2 < nEnd)))
|
||||
nEnd = nEnd2 + 9;
|
||||
|
||||
sFileContent.erase(posA, nEnd - posA);
|
||||
|
||||
posA = sFileContent.find("<script", posA);
|
||||
}
|
||||
//Избавление от <a ... />
|
||||
while (NSStringFinder::RemoveEmptyTag(sFileContent, "a"));
|
||||
//Избавление от <title ... />
|
||||
while (NSStringFinder::RemoveEmptyTag(sFileContent, "title"));
|
||||
//Избавление от <script ... />
|
||||
while (NSStringFinder::RemoveEmptyTag(sFileContent, "script"));
|
||||
|
||||
// Gumbo
|
||||
GumboOptions options = kGumboDefaultOptions;
|
||||
@ -202,102 +199,91 @@ static std::string QuotedPrintableDecode(const std::string& sContent, std::strin
|
||||
return sRes.GetData();
|
||||
}
|
||||
|
||||
static void ReadMht(std::string& sFileContent, size_t& nFound, size_t& nNextFound,
|
||||
std::map<std::string, std::string>& sRes, NSStringUtils::CStringBuilderA& oRes)
|
||||
static void ReadMht(const std::string& sMhtContent, std::map<std::string, std::string>& sRes, NSStringUtils::CStringBuilderA& oRes)
|
||||
{
|
||||
// Content
|
||||
size_t nContentTag = sFileContent.find("\n\n", nFound);
|
||||
if(nContentTag == std::string::npos || nContentTag > nNextFound)
|
||||
{
|
||||
nContentTag = sFileContent.find("\r\r", nFound);
|
||||
if(nContentTag == std::string::npos || nContentTag > nNextFound)
|
||||
{
|
||||
nContentTag = sFileContent.find("\r\n\r\n", nFound);
|
||||
if(nContentTag == std::string::npos || nContentTag > nNextFound)
|
||||
{
|
||||
nFound = nNextFound;
|
||||
return;
|
||||
}
|
||||
else
|
||||
nContentTag += 4;
|
||||
}
|
||||
else
|
||||
nContentTag += 2;
|
||||
}
|
||||
else
|
||||
nContentTag += 2;
|
||||
size_t unContentPosition = 0, unCharsetBegin = 0, unCharsetEnd = std::string::npos;
|
||||
|
||||
NSStringFinder::TFoundedData<char> oData;
|
||||
|
||||
// Content-Type
|
||||
std::string sContentType = NSStringFinder::FindPropety(sFileContent, "content-type", {":"}, {";", "\\n", "\\r"}, nFound);
|
||||
oData = NSStringFinder::FindPropety(sMhtContent, "content-type", {":"}, {";", "\\n", "\\r"});
|
||||
const std::string sContentType{oData.m_sValue};
|
||||
|
||||
if (sContentType.empty())
|
||||
return;
|
||||
|
||||
if (NSStringFinder::Equals(sContentType, "multipart/alternative"))
|
||||
{
|
||||
nFound = nNextFound;
|
||||
oRes.WriteString(mhtTohtml(sMhtContent.substr(oData.m_unEndPosition, sMhtContent.length() - oData.m_unEndPosition)));
|
||||
return;
|
||||
}
|
||||
|
||||
if (NSStringFinder::Equals(sContentType, std::string("multipart/alternative")))
|
||||
nContentTag = nFound;
|
||||
unContentPosition = std::max(unContentPosition, oData.m_unEndPosition);
|
||||
unCharsetBegin = oData.m_unEndPosition;
|
||||
|
||||
size_t nTag = 0, nTagEnd = 0;
|
||||
|
||||
// name
|
||||
std::string sName = NSStringFinder::FindPropety(sFileContent, "name", {"="}, {";", "\\n", "\\r"}, nFound);
|
||||
|
||||
// charset
|
||||
std::string sCharset = NSStringFinder::FindPropety(sFileContent, "charset", {"="}, {";", "\\n", "\\r"}, nFound);
|
||||
NSStringFinder::CutInside<std::string>(sCharset, "\"");
|
||||
// std::string sName = NSStringFinder::FindPropety(sMhtContent, "name", {"="}, {";", "\\n", "\\r"}, 0, unLastPosition);
|
||||
// unContentPosition = std::max(unContentPosition, unLastPosition);
|
||||
|
||||
// Content-Location
|
||||
std::string sContentLocation = NSStringFinder::FindPropety(sFileContent, "content-location", {":"}, {";", "\\n", "\\r"}, nFound);
|
||||
oData = NSStringFinder::FindPropety(sMhtContent, "content-location", {":"}, {";", "\\n", "\\r"});
|
||||
std::string sContentLocation{oData.m_sValue};
|
||||
|
||||
if (sContentLocation.empty())
|
||||
if (!oData.Empty())
|
||||
unContentPosition = std::max(unContentPosition, oData.m_unEndPosition);
|
||||
|
||||
// Content-ID
|
||||
oData = NSStringFinder::FindPropety(sMhtContent, "content-id", {":"}, {";", "\\n", "\\r"});
|
||||
std::string sContentID{oData.m_sValue};
|
||||
|
||||
if (!oData.Empty())
|
||||
{
|
||||
// Content-ID
|
||||
std::string sContentID = NSStringFinder::FindPropety(sFileContent, "content-id", {":"}, {";", "\\n", "\\r"}, nFound);
|
||||
NSStringFinder::CutInside<std::string>(sCharset, "<", ">");
|
||||
|
||||
if (!sContentID.empty())
|
||||
sContentLocation = "cid:" + sContentID;
|
||||
unContentPosition = std::max(unContentPosition, oData.m_unEndPosition);
|
||||
unCharsetEnd = std::min(unCharsetEnd, oData.m_unBeginPosition);
|
||||
NSStringFinder::CutInside<std::string>(sContentID, "<", ">");
|
||||
}
|
||||
|
||||
if (sContentLocation.empty() && !sContentID.empty())
|
||||
sContentLocation = "cid:" + sContentID;
|
||||
|
||||
// Content-Transfer-Encoding
|
||||
std::string sContentEncoding = NSStringFinder::FindPropety(sFileContent, "content-transfer-encoding", {":"}, {";", "\\n", "\\r"}, nFound);;
|
||||
|
||||
// nTag = sFileContent.find("Content-Transfer-Encoding: ", nFound);
|
||||
// if(nTag != std::string::npos && nTag < nContentTag)
|
||||
// {
|
||||
// nTagEnd = sFileContent.find_first_of(";\n\r", nTag);
|
||||
// nTag += 27;
|
||||
// if(nTagEnd != std::string::npos && nTagEnd < nContentTag)
|
||||
// sContentEncoding = sFileContent.substr(nTag, nTagEnd - nTag);
|
||||
// }
|
||||
oData = NSStringFinder::FindPropety(sMhtContent, "content-transfer-encoding", {":"}, {";", "\\n", "\\r"});
|
||||
const std::string sContentEncoding{oData.m_sValue};
|
||||
|
||||
if (!oData.Empty())
|
||||
{
|
||||
unContentPosition = std::max(unContentPosition, oData.m_unEndPosition);
|
||||
unCharsetEnd = std::min(unCharsetEnd, oData.m_unBeginPosition);
|
||||
}
|
||||
|
||||
// charset
|
||||
std::string sCharset = "utf-8";
|
||||
|
||||
if (std::string::npos != unCharsetEnd && unCharsetBegin < unCharsetEnd)
|
||||
{
|
||||
sCharset = NSStringFinder::FindPropety(sMhtContent.substr(unCharsetBegin, unCharsetEnd - unCharsetBegin), "charset", {"="}, {";", "\\n", "\\r"}).m_sValue;
|
||||
NSStringFinder::CutInside<std::string>(sCharset, "\"");
|
||||
}
|
||||
|
||||
// Content
|
||||
nTagEnd = nNextFound - 2;
|
||||
if(nTagEnd == std::string::npos || nTagEnd < nContentTag)
|
||||
{
|
||||
nFound = nNextFound;
|
||||
return;
|
||||
}
|
||||
std::string sContent = sFileContent.substr(nContentTag, nTagEnd - nContentTag);
|
||||
std::string sContent = sMhtContent.substr(unContentPosition, sMhtContent.length() - unContentPosition);
|
||||
|
||||
std::wstring sExtention = NSFile::GetFileExtention(UTF8_TO_U(sName));
|
||||
// std::wstring sExtention = NSFile::GetFileExtention(UTF8_TO_U(sName));
|
||||
// std::transform(sExtention.begin(), sExtention.end(), sExtention.begin(), tolower);
|
||||
// Основной документ
|
||||
if (NSStringFinder::Equals(sContentType, "multipart/alternative"))
|
||||
oRes.WriteString(mhtTohtml(sContent));
|
||||
else if ((NSStringFinder::Find(sContentType, "text") && (sExtention.empty() || NSStringFinder::EqualOf(sExtention, {L"htm", L"html", L"xhtml", L"css"})))
|
||||
else if ((NSStringFinder::Find(sContentType, "text") /*&& (sExtention.empty() || NSStringFinder::EqualOf(sExtention, {L"htm", L"html", L"xhtml", L"css"}))*/)
|
||||
|| (NSStringFinder::Equals(sContentType, "application/octet-stream") && NSStringFinder::Find(sContentLocation, "css")))
|
||||
{
|
||||
// Стили заключаются в тэг <style>
|
||||
const bool bAddTagStyle = NSStringFinder::Equals(sContentType, "text/css") || NSStringFinder::Equals(sExtention, L"css") || NSStringFinder::Find(sContentLocation, "css");
|
||||
const bool bAddTagStyle = NSStringFinder::Equals(sContentType, "text/css") /*|| NSStringFinder::Equals(sExtention, L"css")*/ || NSStringFinder::Find(sContentLocation, "css");
|
||||
|
||||
if (bAddTagStyle)
|
||||
oRes.WriteString("<style>");
|
||||
|
||||
if (NSStringFinder::Equals(sContentEncoding, "base64"))
|
||||
oRes.WriteString(Base64ToString(sContent, sCharset));
|
||||
sContent = Base64ToString(sContent, sCharset);
|
||||
else if (NSStringFinder::EqualOf(sContentEncoding, {"8bit", "7bit"}) || sContentEncoding.empty())
|
||||
{
|
||||
if (!NSStringFinder::Equals(sCharset, "utf-8") && !sCharset.empty())
|
||||
@ -305,7 +291,6 @@ static void ReadMht(std::string& sFileContent, size_t& nFound, size_t& nNextFoun
|
||||
NSUnicodeConverter::CUnicodeConverter oConverter;
|
||||
sContent = U_TO_UTF8(oConverter.toUnicode(sContent, sCharset.data()));
|
||||
}
|
||||
oRes.WriteString(sContent);
|
||||
}
|
||||
else if (NSStringFinder::Equals(sContentEncoding, "quoted-printable"))
|
||||
{
|
||||
@ -315,20 +300,24 @@ static void ReadMht(std::string& sFileContent, size_t& nFound, size_t& nNextFoun
|
||||
NSUnicodeConverter::CUnicodeConverter oConverter;
|
||||
sContent = U_TO_UTF8(oConverter.toUnicode(sContent, sCharset.data()));
|
||||
}
|
||||
oRes.WriteString(sContent);
|
||||
}
|
||||
|
||||
if (NSStringFinder::Equals(sContentType, "text/html"))
|
||||
sContent = U_TO_UTF8(htmlToXhtml(sContent, false));
|
||||
|
||||
oRes.WriteString(sContent);
|
||||
|
||||
if(bAddTagStyle)
|
||||
oRes.WriteString("</style>");
|
||||
}
|
||||
// Картинки
|
||||
else if ((NSStringFinder::Find(sContentType, "image") || NSStringFinder::Equals(sExtention, L"gif") || NSStringFinder::Equals(sContentType, "application/octet-stream")) &&
|
||||
else if ((NSStringFinder::Find(sContentType, "image") /*|| NSStringFinder::Equals(sExtention, L"gif")*/ || NSStringFinder::Equals(sContentType, "application/octet-stream")) &&
|
||||
NSStringFinder::Equals(sContentEncoding, "base64"))
|
||||
{
|
||||
if (NSStringFinder::Equals(sExtention, L"ico") || NSStringFinder::Find(sContentType, "ico"))
|
||||
sContentType = "image/jpg";
|
||||
else if(NSStringFinder::Equals(sExtention, L"gif"))
|
||||
sContentType = "image/gif";
|
||||
// if (NSStringFinder::Equals(sExtention, L"ico") || NSStringFinder::Find(sContentType, "ico"))
|
||||
// sContentType = "image/jpg";
|
||||
// else if(NSStringFinder::Equals(sExtention, L"gif"))
|
||||
// sContentType = "image/gif";
|
||||
int nSrcLen = (int)sContent.length();
|
||||
int nDecodeLen = NSBase64::Base64DecodeGetRequiredLength(nSrcLen);
|
||||
BYTE* pData = new BYTE[nDecodeLen];
|
||||
@ -338,20 +327,22 @@ static void ReadMht(std::string& sFileContent, size_t& nFound, size_t& nNextFoun
|
||||
}
|
||||
}
|
||||
|
||||
static std::string mhtTohtml(std::string& sFileContent)
|
||||
static std::string mhtTohtml(const std::string& sFileContent)
|
||||
{
|
||||
std::map<std::string, std::string> sRes;
|
||||
NSStringUtils::CStringBuilderA oRes;
|
||||
|
||||
size_t nFound = 0;
|
||||
// Поиск boundary
|
||||
std::string sBoundary = NSStringFinder::FindPropety(sFileContent, "boundary", {"="}, {"\\r", "\\n", "\""}, 0, nFound);
|
||||
NSStringFinder::TFoundedData<char> oData{NSStringFinder::FindPropety(sFileContent, "boundary", {"="}, {"\\r", "\\n", "\""})};
|
||||
|
||||
size_t nFound{oData.m_unEndPosition};
|
||||
std::string sBoundary{oData.m_sValue};
|
||||
|
||||
if (sBoundary.empty())
|
||||
{
|
||||
size_t nFoundEnd = sFileContent.length();
|
||||
nFound = 0;
|
||||
ReadMht(sFileContent, nFound, nFoundEnd, sRes, oRes);
|
||||
ReadMht(sFileContent.substr(nFound, nFoundEnd), sRes, oRes);
|
||||
return oRes.GetData();
|
||||
}
|
||||
|
||||
@ -371,9 +362,9 @@ static std::string mhtTohtml(std::string& sFileContent)
|
||||
if(nFoundEnd == std::string::npos)
|
||||
break;
|
||||
|
||||
ReadMht(sFileContent, nFound, nFoundEnd, sRes, oRes);
|
||||
ReadMht(sFileContent.substr(nFound, nFoundEnd - nFound), sRes, oRes);
|
||||
|
||||
nFound = sFileContent.find(sBoundary, nFoundEnd + nBoundaryLength);;
|
||||
nFound = sFileContent.find(sBoundary, nFoundEnd);
|
||||
}
|
||||
|
||||
std::string sFile = oRes.GetData();
|
||||
@ -387,10 +378,18 @@ static std::string mhtTohtml(std::string& sFileContent)
|
||||
while(found != std::string::npos)
|
||||
{
|
||||
size_t fq = sFile.find_last_of("\"\'>=", found);
|
||||
|
||||
if (std::string::npos == fq)
|
||||
break;
|
||||
|
||||
char ch = sFile[fq];
|
||||
if(ch != '\"' && ch != '\'')
|
||||
fq++;
|
||||
size_t tq = sFile.find_first_of("\"\'<> ", found) + 1;
|
||||
|
||||
if (std::string::npos == tq)
|
||||
break;
|
||||
|
||||
if(sFile[tq] != '\"' && sFile[tq] != '\'')
|
||||
tq--;
|
||||
if(ch != '>')
|
||||
@ -403,6 +402,7 @@ static std::string mhtTohtml(std::string& sFileContent)
|
||||
found = sFile.find(sName, tq);
|
||||
}
|
||||
}
|
||||
|
||||
return sFile;
|
||||
}
|
||||
|
||||
@ -534,7 +534,7 @@ static void build_attributes(const GumboVector* attribs, bool no_entities, NSStr
|
||||
}
|
||||
}
|
||||
|
||||
static void prettyprint_contents(GumboNode* node, NSStringUtils::CStringBuilderA& contents)
|
||||
static void prettyprint_contents(GumboNode* node, NSStringUtils::CStringBuilderA& contents, bool bCheckValidNode)
|
||||
{
|
||||
std::string key = "|" + get_tag_name(node) + "|";
|
||||
bool no_entity_substitution = no_entity_sub.find(key) != std::string::npos;
|
||||
@ -565,7 +565,7 @@ static void prettyprint_contents(GumboNode* node, NSStringUtils::CStringBuilderA
|
||||
contents.WriteString(val);
|
||||
}
|
||||
else if ((child->type == GUMBO_NODE_ELEMENT) || (child->type == GUMBO_NODE_TEMPLATE))
|
||||
prettyprint(child, contents);
|
||||
prettyprint(child, contents, bCheckValidNode);
|
||||
else if (child->type == GUMBO_NODE_WHITESPACE)
|
||||
{
|
||||
if (keep_whitespace || is_inline || is_like_inline)
|
||||
@ -580,23 +580,33 @@ static void prettyprint_contents(GumboNode* node, NSStringUtils::CStringBuilderA
|
||||
}
|
||||
}
|
||||
|
||||
static void prettyprint(GumboNode* node, NSStringUtils::CStringBuilderA& oBuilder)
|
||||
static void prettyprint(GumboNode* node, NSStringUtils::CStringBuilderA& oBuilder, bool bCheckValidNode)
|
||||
{
|
||||
// special case the document node
|
||||
if (node->type == GUMBO_NODE_DOCUMENT)
|
||||
{
|
||||
build_doctype(node, oBuilder);
|
||||
prettyprint_contents(node, oBuilder);
|
||||
prettyprint_contents(node, oBuilder, bCheckValidNode);
|
||||
return;
|
||||
}
|
||||
|
||||
std::string tagname = get_tag_name(node);
|
||||
|
||||
if (bCheckValidNode)
|
||||
bCheckValidNode = !IsUnckeckedNodes(tagname);
|
||||
|
||||
if (bCheckValidNode && html_tags.end() == std::find(html_tags.begin(), html_tags.end(), tagname))
|
||||
{
|
||||
prettyprint_contents(node, oBuilder, bCheckValidNode);
|
||||
return;
|
||||
}
|
||||
|
||||
std::string close = "";
|
||||
std::string closeTag = "";
|
||||
std::string tagname = get_tag_name(node);
|
||||
std::string key = "|" + tagname + "|";
|
||||
bool is_empty_tag = empty_tags.find(key) != std::string::npos;
|
||||
bool no_entity_substitution = no_entity_sub.find(key) != std::string::npos;
|
||||
|
||||
|
||||
// determine closing tag type
|
||||
if (is_empty_tag)
|
||||
close = "/";
|
||||
@ -612,7 +622,7 @@ static void prettyprint(GumboNode* node, NSStringUtils::CStringBuilderA& oBuilde
|
||||
oBuilder.WriteString(close + ">");
|
||||
|
||||
// prettyprint your contents
|
||||
prettyprint_contents(node, oBuilder);
|
||||
prettyprint_contents(node, oBuilder, bCheckValidNode);
|
||||
oBuilder.WriteString(closeTag);
|
||||
}
|
||||
|
||||
|
||||
@ -33,6 +33,7 @@
|
||||
#include "../../../../Common/3dParty/hunspell/hunspell/src/hunspell/hunspell.h"
|
||||
#include "../../../../DesktopEditor/common/StringExt.h"
|
||||
#include "../../../../DesktopEditor/common/Directory.h"
|
||||
#include <iostream>
|
||||
|
||||
bool CheckCaret(std::vector<std::wstring>& words)
|
||||
{
|
||||
@ -85,11 +86,36 @@ std::wstring CheckWord(Hunhandle* pDic, const std::wstring& sWord, const bool& b
|
||||
return sResult;
|
||||
}
|
||||
|
||||
#if defined(_WIN32) || defined(_WIN64)
|
||||
#define USE_WCHAR_ARGC
|
||||
#endif
|
||||
|
||||
#ifdef USE_WCHAR_ARGC
|
||||
std::wstring GetParam(wchar_t* arg)
|
||||
{
|
||||
return std::wstring(arg);
|
||||
}
|
||||
#else
|
||||
std::wstring GetParam(char* arg)
|
||||
{
|
||||
return NSFile::CUtf8Converter::GetUnicodeStringFromUTF8((BYTE *)arg, (LONG)strlen(arg));
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef USE_WCHAR_ARGC
|
||||
int wmain(int argc, wchar_t *argv[])
|
||||
#else
|
||||
int main(int argc, char *argv[])
|
||||
#endif
|
||||
{
|
||||
std::wstring sSrcDir = NSFile::GetProcessDirectory() + L"/../src";
|
||||
std::wstring sDstDir = NSFile::GetProcessDirectory() + L"/../dst";
|
||||
std::wstring sDictionariesDir = NSFile::GetProcessDirectory() + L"/../../../../../../dictionaries";
|
||||
|
||||
if (argc > 1) sSrcDir = GetParam(argv[1]);
|
||||
if (argc > 2) sDstDir = GetParam(argv[2]);
|
||||
if (argc > 3) sDictionariesDir = GetParam(argv[3]);
|
||||
|
||||
std::vector<std::wstring> arSrcFiles = NSDirectory::GetFiles(sSrcDir);
|
||||
|
||||
for (int i = 0, len = (int)arSrcFiles.size(); i < len; ++i)
|
||||
@ -125,6 +151,8 @@ int main(int argc, char *argv[])
|
||||
Hunspell_destroy(pDictionary);
|
||||
|
||||
NSFile::CFileBinary::SaveToFile(sFileDst, sResult, true);
|
||||
|
||||
std::cout << "[" << (i + 1) << " of " << (int)arSrcFiles.size() << "] " << U_TO_UTF8(sName) << std::endl;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
|
||||
QT -= core gui
|
||||
|
||||
TARGET = test
|
||||
TARGET = dictionariestester
|
||||
CONFIG += console
|
||||
CONFIG -= app_bundle
|
||||
|
||||
@ -22,8 +22,7 @@ include($$CORE_ROOT_DIR/Common/3dParty/icu/icu.pri)
|
||||
ADD_DEPENDENCY(UnicodeConverter kernel hunspell)
|
||||
|
||||
core_windows:LIBS += -lgdi32 -ladvapi32 -luser32 -lshell32
|
||||
core_linux:LIBS += -lz
|
||||
|
||||
SOURCES += main.cpp
|
||||
|
||||
DESTDIR = $$PWD/build
|
||||
DESTDIR = $$CORE_BUILDS_BINARY_PATH
|
||||
|
||||
BIN
Common/3dParty/libvlc/build/linux_64/lib/libva-drm.so
Normal file
BIN
Common/3dParty/libvlc/build/linux_64/lib/libva-drm.so
Normal file
Binary file not shown.
BIN
Common/3dParty/libvlc/build/linux_64/lib/libva-drm.so.2
Normal file
BIN
Common/3dParty/libvlc/build/linux_64/lib/libva-drm.so.2
Normal file
Binary file not shown.
BIN
Common/3dParty/libvlc/build/linux_64/lib/libva-drm.so.2.2100.0
Normal file
BIN
Common/3dParty/libvlc/build/linux_64/lib/libva-drm.so.2.2100.0
Normal file
Binary file not shown.
BIN
Common/3dParty/libvlc/build/linux_64/lib/libva-glx.so
Normal file
BIN
Common/3dParty/libvlc/build/linux_64/lib/libva-glx.so
Normal file
Binary file not shown.
BIN
Common/3dParty/libvlc/build/linux_64/lib/libva-glx.so.2
Normal file
BIN
Common/3dParty/libvlc/build/linux_64/lib/libva-glx.so.2
Normal file
Binary file not shown.
BIN
Common/3dParty/libvlc/build/linux_64/lib/libva-glx.so.2.2100.0
Normal file
BIN
Common/3dParty/libvlc/build/linux_64/lib/libva-glx.so.2.2100.0
Normal file
Binary file not shown.
BIN
Common/3dParty/libvlc/build/linux_64/lib/libva-wayland.so
Normal file
BIN
Common/3dParty/libvlc/build/linux_64/lib/libva-wayland.so
Normal file
Binary file not shown.
BIN
Common/3dParty/libvlc/build/linux_64/lib/libva-wayland.so.2
Normal file
BIN
Common/3dParty/libvlc/build/linux_64/lib/libva-wayland.so.2
Normal file
Binary file not shown.
Binary file not shown.
BIN
Common/3dParty/libvlc/build/linux_64/lib/libva-x11.so
Normal file
BIN
Common/3dParty/libvlc/build/linux_64/lib/libva-x11.so
Normal file
Binary file not shown.
BIN
Common/3dParty/libvlc/build/linux_64/lib/libva-x11.so.2
Normal file
BIN
Common/3dParty/libvlc/build/linux_64/lib/libva-x11.so.2
Normal file
Binary file not shown.
BIN
Common/3dParty/libvlc/build/linux_64/lib/libva-x11.so.2.2100.0
Normal file
BIN
Common/3dParty/libvlc/build/linux_64/lib/libva-x11.so.2.2100.0
Normal file
Binary file not shown.
BIN
Common/3dParty/libvlc/build/linux_64/lib/libva.so
Normal file
BIN
Common/3dParty/libvlc/build/linux_64/lib/libva.so
Normal file
Binary file not shown.
BIN
Common/3dParty/libvlc/build/linux_64/lib/libva.so.2
Normal file
BIN
Common/3dParty/libvlc/build/linux_64/lib/libva.so.2
Normal file
Binary file not shown.
BIN
Common/3dParty/libvlc/build/linux_64/lib/libva.so.2.2100.0
Normal file
BIN
Common/3dParty/libvlc/build/linux_64/lib/libva.so.2.2100.0
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user