Compare commits
1177 Commits
feature/po
...
main/gingo
Author | SHA1 | Date |
---|---|---|
Nuno Gonçalves (Ulukyn) | 7df9b2f255 | 3 years ago |
Nuno Gonçalves (Ulukyn) | 8697553956 | 3 years ago |
nimetu | d2508c8b15 | 3 years ago |
Nuno Gonçalves (Ulukyn) | d385dedabc | 3 years ago |
Nuno Gonçalves (Ulukyn) | ae33eb99bf | 3 years ago |
Nuno Gonçalves (Ulukyn) | 2b88fd66ba | 3 years ago |
Ben Saine | be5bfd992c | 3 years ago |
Nuno Gonçalves (Ulukyn) | 9a24e7557f | 3 years ago |
Nuno Gonçalves (Ulukyn) | 8708fd74c6 | 3 years ago |
Nuno | db86219eab | 3 years ago |
Nuno Gonçalves (Ulukyn) | c6ec8a8d7d | 3 years ago |
Ben Saine | 357934fcde | 3 years ago |
Nuno Gonçalves (Ulukyn) | e784c3aab1 | 3 years ago |
Nuno Gonçalves (Ulukyn) | 22b4c074e8 | 3 years ago |
Nuno Gonçalves (Ulukyn) | 255257a7f5 | 3 years ago |
Nuno Gonçalves (Ulukyn) | 855410f3d0 | 3 years ago |
Nuno Gonçalves (Ulukyn) | 71a2c6f6e8 | 3 years ago |
Ben Saine | 3b2553e3dd | 3 years ago |
Nuno Gonçalves (Ulukyn) | 54c7e09a10 | 3 years ago |
Meelis Mägi | aebab35cad | 3 years ago |
Nuno Gonçalves (Ulukyn) | 7cb6d4287e | 3 years ago |
Meelis Mägi | 663de25cbe | 3 years ago |
Nuno | a7811f553e | 3 years ago |
Nuno | 743bf7f601 | 3 years ago |
Nuno Gonçalves (Ulukyn) | e891dddd1e | 3 years ago |
Meelis Mägi | e185ddc19f | 3 years ago |
Nuno Gonçalves (Ulukyn) | b12c7ac25c | 3 years ago |
Meelis Mägi | 9cff221a1e | 3 years ago |
Nuno Gonçalves (Ulukyn) | 219bf0e066 | 3 years ago |
Meelis Mägi | c012e7ffcf | 3 years ago |
Ben Saine | 82b724fe88 | 3 years ago |
Nuno Gonçalves (Ulukyn) | 9f2d2e7dda | 3 years ago |
Ben Saine | 5df8ec43a0 | 3 years ago |
Nimetu | 7c82f26bac | 3 years ago |
Nimetu | 3521d2d02e | 3 years ago |
Nuno | 88280ef02f | 3 years ago |
Nimetu | 7344c98e6e | 3 years ago |
Nimetu | 005e714f7d | 3 years ago |
Nimetu | 37abc25dcb | 3 years ago |
kaetemi | ec41ba753f | 3 years ago |
kaetemi | 63b4ea547a | 3 years ago |
Nimetu | c31747a939 | 3 years ago |
Nimetu | 8aa1aed3bd | 3 years ago |
Nimetu | 19c5b582bc | 3 years ago |
Nuno | 993d749dba | 3 years ago |
Nimetu | f6ac9bc4c1 | 3 years ago |
Nuno Gonçalves (Ulukyn) | 9e3064871a | 3 years ago |
Nimetu | 36e83e32f4 | 3 years ago |
Nuno | 0df3879358 | 3 years ago |
Nuno | b7e5ac18e9 | 3 years ago |
Nuno Gonçalves (Ulukyn) | 80623a20cc | 3 years ago |
Nuno Gonçalves (Ulukyn) | efbceec12e | 3 years ago |
Nimetu | 013aad73d2 | 3 years ago |
Nuno | de638dfe6c | 3 years ago |
Nuno | 177e2395a5 | 3 years ago |
Nuno | 0e2ec103ab | 3 years ago |
Nuno | 574efe0c36 | 3 years ago |
Nuno | e43515e88a | 3 years ago |
Nuno | 41794a1122 | 3 years ago |
Nimetu | c47db9bf94 | 3 years ago |
Nimetu | b325126b20 | 3 years ago |
Nuno | 35a7a6628b | 3 years ago |
Nimetu | aa34e88101 | 3 years ago |
Nuno | b667ccb6b6 | 3 years ago |
Nuno Gonçalves (Ulukyn) | 568d8ab895 | 3 years ago |
Nuno Gonçalves (Ulukyn) | 7f01b21d11 | 3 years ago |
Nuno Gonçalves (Ulukyn) | d436d5616a | 3 years ago |
Nuno Gonçalves (Ulukyn) | 973e183f2e | 3 years ago |
Nuno | 5c56c87d09 | 3 years ago |
Nuno | c616010246 | 3 years ago |
Nuno | 700a9aadb7 | 3 years ago |
Nuno Gonçalves (Ulukyn) | a246f3e5d0 | 3 years ago |
Meelis Mägi | bbc291b9d3 | 3 years ago |
Nuno Gonçalves (Ulukyn) | a64981a92a | 3 years ago |
Nuno Gonçalves (Ulukyn) | 17c9dd061a | 3 years ago |
Ben Saine | b72a71e87c | 3 years ago |
bensaine | b4ce38099f | 3 years ago |
Nimetu | 9eaf7d3550 | 3 years ago |
Nimetu | 26827d2c66 | 3 years ago |
Nuno Gonçalves (Ulukyn) | b6781af51e | 3 years ago |
Nuno Gonçalves (Ulukyn) | e1b611f219 | 3 years ago |
Nuno Gonçalves (Ulukyn) | 8d7932a271 | 3 years ago |
Nuno Gonçalves (Ulukyn) | 0cc7a35dad | 3 years ago |
Nuno | 2304445c39 | 3 years ago |
Ulu Kyn | 701d7309e5 | 3 years ago |
Ulu Kyn | f3d0c9dc5b | 3 years ago |
Ulu Kyn | a71f022c1a | 3 years ago |
Nuno | cc3d42737e | 3 years ago |
Nuno | 1e590f1a69 | 3 years ago |
Nuno | f450b57be0 | 3 years ago |
Nuno | fbb343ad51 | 3 years ago |
bensaine | e1527b724b | 3 years ago |
bensaine | c3a633ae50 | 3 years ago |
Nuno | a76e8e1a64 | 3 years ago |
Nuno | 2df441225c | 3 years ago |
Nuno | 56cbc51005 | 3 years ago |
Nuno | 7ce53abffe | 3 years ago |
Nuno | 4c4028822e | 3 years ago |
Nuno | b4323b6515 | 3 years ago |
Nuno | 9923062417 | 3 years ago |
Nuno | 8f74ba7851 | 3 years ago |
Nuno | d6f367b2ba | 3 years ago |
Nuno | 3f5c3c5d98 | 3 years ago |
Nuno | 514f4613a8 | 3 years ago |
Ben Saine | 24b0c99034 | 3 years ago |
Nuno | 3dc2aa1bb6 | 3 years ago |
Nuno | 543be4bc4c | 3 years ago |
Nuno | 80007bc602 | 3 years ago |
Nuno | cf9855a6d5 | 3 years ago |
Nuno | bec18c661d | 3 years ago |
Nimetu | 13eef096b4 | 3 years ago |
Nimetu | d8deff3f23 | 3 years ago |
Nimetu | 2efc16ce52 | 3 years ago |
Nimetu | 5064f0417b | 3 years ago |
Nimetu | d893d15daf | 3 years ago |
kaetemi | 82ef7e5e81 | 3 years ago |
kaetemi | 8f839dc9c7 | 3 years ago |
kaetemi | 5fcaafbc60 | 3 years ago |
kaetemi | 6d60cfee71 | 3 years ago |
kaetemi | 3076b62063 | 3 years ago |
kaetemi | 3d208e024d | 3 years ago |
kaetemi | af16f09d52 | 3 years ago |
kaetemi | b9d4aa2abd | 3 years ago |
Nimetu | 759ece01d0 | 3 years ago |
Nuno | 4a06fe15dd | 3 years ago |
Nuno | 575d5d9957 | 3 years ago |
Nuno | 0d68ca05e2 | 3 years ago |
Nuno | 6091e76516 | 3 years ago |
Nuno | 0fbbf10361 | 3 years ago |
Nuno | 557f5d3d6c | 3 years ago |
Nuno | d7d1bc60c2 | 3 years ago |
Nuno | 3709ea4520 | 3 years ago |
Nuno | 70286d36a9 | 3 years ago |
Ulu Kyn | 92ff9f12b0 | 3 years ago |
Nimetu | 8cbb306db8 | 3 years ago |
Nuno | 36c2ff5b86 | 3 years ago |
Nuno | 1a49c4cd0b | 3 years ago |
Ben Saine | 111d4a7a0a | 3 years ago |
bensaine | 6cfc9585f5 | 3 years ago |
Nimetu | f76ad7a3eb | 3 years ago |
Nimetu | ce0d1234cc | 3 years ago |
Nuno Gonçalves (Ulukyn) | 5d91c33ddd | 3 years ago |
Nimetu | 78478e32cd | 3 years ago |
Nimetu | ea6e4d91c3 | 3 years ago |
Nimetu | d388ff78ec | 3 years ago |
Nimetu | 0b503e352b | 3 years ago |
Nimetu | df4833bf0f | 3 years ago |
Nuno Gonçalves (Ulukyn) | 8ef89b80b0 | 3 years ago |
Nuno Gonçalves (Ulukyn) | bdea7d24d2 | 3 years ago |
Nuno Gonçalves (Ulukyn) | 90161cd121 | 3 years ago |
Nuno Gonçalves (Ulukyn) | 583a16d126 | 3 years ago |
Nimetu | 591ea6869e | 3 years ago |
Nuno Gonçalves (Ulukyn) | 01a2508567 | 3 years ago |
Nuno Gonçalves (Ulukyn) | b86b9283b2 | 3 years ago |
Nimetu | 0225beefa6 | 3 years ago |
Nimetu | 0de1580520 | 3 years ago |
Nimetu | d9dd9863b7 | 3 years ago |
Ulukyn | 7bed39665e | 3 years ago |
Nimetu | 9ecda65791 | 3 years ago |
Nimetu | fc6ecc7dbd | 3 years ago |
Nimetu | 5c53148907 | 3 years ago |
Nimetu | 028f6cdd3e | 3 years ago |
Nuno | 6a1ea5ff59 | 3 years ago |
Nuno Gonçalves (Ulukyn) | 72ccfc9a02 | 3 years ago |
Ulukyn | 0e2a14c822 | 3 years ago |
Nimetu | a4248d5fa1 | 3 years ago |
Nimetu | 984b2b3590 | 3 years ago |
Nimetu | 3f3991816b | 3 years ago |
Nimetu | e0d54f7897 | 3 years ago |
Nimetu | 37eec8cd7f | 3 years ago |
Nimetu | 2046c4bf6e | 3 years ago |
Nimetu | 12c515c264 | 3 years ago |
Nimetu | 285cfb163f | 3 years ago |
Nimetu | a40ddf7955 | 3 years ago |
Nimetu | dff191a7c2 | 3 years ago |
Nimetu | f26dc534c8 | 3 years ago |
Nimetu | dfe45029ab | 3 years ago |
Nimetu | 65edd9f95d | 3 years ago |
Nuno | 4331e35227 | 3 years ago |
Nuno Gonçalves (Ulukyn) | ce5817721a | 3 years ago |
Nuno Gonçalves (Ulukyn) | aae899b65a | 3 years ago |
Nimetu | 487f9f060e | 3 years ago |
Nimetu | 2e816ddf6e | 3 years ago |
Nimetu | 5d4a04169b | 3 years ago |
Nimetu | b2ec03d1a1 | 3 years ago |
Nimetu | 234465387b | 3 years ago |
Nimetu | 2133f6d2b7 | 3 years ago |
Nimetu | 63f1fb73dd | 3 years ago |
Nimetu | a040f7a2a8 | 3 years ago |
Nimetu | 565932c18d | 3 years ago |
Nimetu | cade609a3a | 3 years ago |
Nimetu | 093702a704 | 3 years ago |
Nuno Gonçalves (Ulukyn) | 4c66865de7 | 3 years ago |
Nimetu | c00a9be398 | 3 years ago |
Nuno Gonçalves (Ulukyn) | 458861951b | 3 years ago |
Nuno Gonçalves (Ulukyn) | 3f991d3781 | 3 years ago |
Nuno Gonçalves (Ulukyn) | 8d5c0facf8 | 3 years ago |
Nuno Gonçalves (Ulukyn) | 178a22d961 | 3 years ago |
Nuno Gonçalves (Ulukyn) | f9dafe720c | 3 years ago |
Nuno Gonçalves (Ulukyn) | 72691a3379 | 3 years ago |
Nuno Gonçalves (Ulukyn) | bc991c8146 | 3 years ago |
Riasan | 62a821bc1d | 3 years ago |
Riasan | 103179ece7 | 3 years ago |
Nimetu | 19d0162332 | 3 years ago |
Nimetu | 5bf139f690 | 3 years ago |
Nimetu | d0d38238a8 | 3 years ago |
Nimetu | 95716b65ca | 3 years ago |
Nimetu | 75f490d394 | 3 years ago |
Nuno | 64bff20e03 | 3 years ago |
Nuno | 1eb651a946 | 3 years ago |
Nuno | 7da7d8cbbe | 3 years ago |
Nuno | 0ee26a6488 | 3 years ago |
Nuno | 9e404a5965 | 3 years ago |
Nuno | 97099768dc | 3 years ago |
kaetemi | 7d1661df42 | 3 years ago |
kaetemi | 19a0d929bb | 3 years ago |
Nuno | a443848924 | 3 years ago |
Nuno | ca0dc24aa0 | 3 years ago |
Nuno | 6d68e96dd4 | 3 years ago |
kaetemi | 0c5f4cdc1a | 3 years ago |
kaetemi | 8a7e96f7a6 | 3 years ago |
kaetemi | a227dccbb8 | 4 years ago |
kaetemi | 6d4b58c281 | 4 years ago |
kaetemi | fcf97d93df | 4 years ago |
kaetemi | c5658cfe26 | 4 years ago |
Nimetu | bc0071ac57 | 4 years ago |
kaetemi | 37a729b5cc | 4 years ago |
Nuno Gonçalves (Ulukyn) | efc1883cca | 4 years ago |
Nuno | 83a021e1e6 | 4 years ago |
kaetemi | 9d303b2a9a | 4 years ago |
Nuno | 58b5941bbe | 4 years ago |
Nuno | 431b1ea339 | 4 years ago |
kaetemi | c70ca1f8ab | 4 years ago |
Nuno | 6c3d6403b0 | 4 years ago |
Nuno | 405974c9c0 | 4 years ago |
kaetemi | bb03f80d84 | 4 years ago |
kaetemi | c6f8baa058 | 4 years ago |
kaetemi | 2c167fb360 | 4 years ago |
kaetemi | b9bdabd1f0 | 4 years ago |
kaetemi | d4a3a5bc06 | 4 years ago |
kaetemi | cdc2cacfc0 | 4 years ago |
kaetemi | c5ed59638e | 4 years ago |
kaetemi | 85ec6e618e | 4 years ago |
kaetemi | 1aba4c13cb | 4 years ago |
kaetemi | 56d747fa02 | 4 years ago |
Nuno | cc5bd3ddae | 4 years ago |
Nuno | 5613eb855e | 4 years ago |
Nimetu | 5614028f63 | 4 years ago |
Nimetu | a28bda89e6 | 4 years ago |
Nimetu | b2d6c313db | 4 years ago |
Nuno | 74c643f147 | 4 years ago |
Nuno | 3d43c3c626 | 4 years ago |
Nimetu | 78fa873003 | 4 years ago |
Nimetu | 96a03d1cf5 | 4 years ago |
Nimetu | 52e0e71c4a | 4 years ago |
Nimetu | 3b91146d23 | 4 years ago |
Nimetu | 474802810b | 4 years ago |
Nuno | 6bd853f7bf | 4 years ago |
Nuno | 49b4295765 | 4 years ago |
Nimetu | 1e465b6cff | 4 years ago |
Nimetu | 5abdccfd63 | 4 years ago |
Nimetu | a7bc98b0b4 | 4 years ago |
Nimetu | 825d70a80e | 4 years ago |
Nimetu | acd12c7c37 | 4 years ago |
Nimetu | aaa699014e | 4 years ago |
Nimetu | 624d78fe1a | 4 years ago |
Nimetu | f8d498e4b2 | 4 years ago |
Nimetu | cd4914ab94 | 4 years ago |
Nimetu | 3362afaa4d | 4 years ago |
Nuno | c5b34c927e | 4 years ago |
Nuno | fa3eab3305 | 4 years ago |
Nuno | 7d1534fb31 | 4 years ago |
Nuno | 791eb639df | 4 years ago |
Nuno | 772990d421 | 4 years ago |
Nuno | c8fd716f8a | 4 years ago |
Nuno | 72f7cbe4fa | 4 years ago |
Nuno | 9d2fc8c630 | 4 years ago |
Nuno | b4e54d5ad4 | 4 years ago |
Nuno | 904daebd88 | 4 years ago |
Nuno | 9c996b5fe3 | 4 years ago |
Nuno | 7964a42927 | 4 years ago |
Nuno | 24cb13d744 | 4 years ago |
Nuno | c8f4a85f0c | 4 years ago |
Nuno | 7bd936ea24 | 4 years ago |
Nuno | 4bcea9a70e | 4 years ago |
Nuno | 762e3b603e | 4 years ago |
Nuno | 292e142319 | 4 years ago |
Nuno | cdb1786018 | 4 years ago |
Nimetu | 1299484163 | 4 years ago |
Nimetu | 668e15e394 | 4 years ago |
Sit Melai | cdf1bacee1 | 4 years ago |
Nuno | 1ec4f88471 | 4 years ago |
Sit Melai | 673ce18e72 | 4 years ago |
Nuno | 54fd022501 | 4 years ago |
Nuno | 5fe26ec6d6 | 4 years ago |
Nuno | 40a9e782c3 | 4 years ago |
Nuno | 155e268ece | 4 years ago |
Nuno | 649527039b | 4 years ago |
Nuno | d350b1621d | 4 years ago |
Nuno | 22bab29654 | 4 years ago |
Nuno | 5632fffa44 | 4 years ago |
Nuno | 1cc000cc6c | 4 years ago |
Nuno | e9b7345ba5 | 4 years ago |
Nuno | 6f4319bfcb | 4 years ago |
Nuno | ab958d1891 | 4 years ago |
Nuno | c3c7e15c81 | 4 years ago |
Nuno | 568a7a10a9 | 4 years ago |
Nuno | f886d5eac7 | 4 years ago |
Nuno | 540ab1ffc8 | 4 years ago |
Nuno | 629e8f5272 | 4 years ago |
Nuno | 868f462d5f | 4 years ago |
Nuno | 5a7d067a71 | 4 years ago |
Nuno | 17f818eace | 4 years ago |
Nuno | 5825332757 | 4 years ago |
Nimetu | c1170a0a4d | 4 years ago |
Nimetu | 291d332b56 | 4 years ago |
Nimetu | d8f54820c4 | 4 years ago |
Nimetu | 155418b20b | 4 years ago |
Nimetu | d665e1fc45 | 4 years ago |
Nimetu | 36f9888b91 | 4 years ago |
Nimetu | 17782d5d21 | 4 years ago |
Nimetu | 8f1db24504 | 4 years ago |
Nuno | 85e788da81 | 4 years ago |
Nimetu | 04b4ae5333 | 4 years ago |
Nimetu | cc44eaf935 | 4 years ago |
Nimetu | e1e7bd837c | 4 years ago |
Nimetu | e5c0c63e3e | 4 years ago |
Nimetu | dbc77c7fc0 | 4 years ago |
Nimetu | db7afb07bd | 4 years ago |
Nimetu | 95cacf75a6 | 4 years ago |
Nimetu | 92eb1dcdc7 | 4 years ago |
Nimetu | 89a921e140 | 4 years ago |
Nimetu | 87e88cee6f | 4 years ago |
Nimetu | 36d482e6d1 | 4 years ago |
Nimetu | 4505ecf8a2 | 4 years ago |
Nimetu | 2f5b4d7c5b | 4 years ago |
Nimetu | 27826eb448 | 4 years ago |
Nimetu | d210c23b26 | 4 years ago |
Nimetu | 9262302baa | 4 years ago |
Nuno | 54de87acf4 | 4 years ago |
Nuno | ebab993e3e | 4 years ago |
Nuno | 3613dfd305 | 4 years ago |
Nuno | c09f82db16 | 4 years ago |
Nuno | 6402a31e4e | 4 years ago |
Nuno | 27cdcf1e02 | 4 years ago |
Nuno | de90245f27 | 4 years ago |
Nuno | bf2f8e39a5 | 4 years ago |
Nimetu | 26482eef1b | 4 years ago |
Nimetu | 383e362ed7 | 4 years ago |
Nimetu | c09ed63120 | 4 years ago |
Nimetu | fdb271bdb3 | 4 years ago |
kaetemi | dba92deea5 | 4 years ago |
Nuno | 0fb9422426 | 4 years ago |
kaetemi | 2528e542cb | 4 years ago |
kaetemi | 719f178f70 | 4 years ago |
Riasan | f83d8a206e | 4 years ago |
Riasan | 8cd863ff44 | 4 years ago |
Nuno | 89065eee3f | 4 years ago |
Sit Melai | 91b3ff25b4 | 4 years ago |
Nimetu | 4bcf9270eb | 4 years ago |
Sit Melai | c75071b488 | 4 years ago |
Nimetu | 04a5aa372b | 4 years ago |
Nimetu | 65415dfc55 | 4 years ago |
Nimetu | 29ef76e537 | 4 years ago |
Nimetu | 040eee5c9e | 4 years ago |
Nimetu | c6ede4a8b4 | 4 years ago |
Nuno | adf9a646b7 | 4 years ago |
Nuno | 2aaa928cdc | 4 years ago |
Nuno | 83d0e600f1 | 4 years ago |
Nuno | df69a1706f | 4 years ago |
Nuno | 6651e839f3 | 4 years ago |
Nuno | 62be2ab1fb | 4 years ago |
Nuno | 8c62f4e64c | 4 years ago |
Nuno | 2075bf7443 | 4 years ago |
Nuno | 44caf59afd | 4 years ago |
Nuno | 057cf828f4 | 4 years ago |
Nuno | 8d2071524c | 4 years ago |
Nuno | 6db93a0ef0 | 4 years ago |
Nuno | f61d10c75e | 4 years ago |
Nuno | 90728f372a | 4 years ago |
Nuno | 8fa5de61e3 | 4 years ago |
Nuno | 74dbe1e52c | 4 years ago |
Nuno | 6adf44f0b0 | 4 years ago |
Nuno | 98124a3bd5 | 4 years ago |
Nuno | 46ecaac095 | 4 years ago |
Nuno | 06e2840be5 | 4 years ago |
Nuno | bbabe75247 | 4 years ago |
Nuno | b62ddc49d2 | 4 years ago |
Nuno | 690286b2c4 | 4 years ago |
Nuno | ada7dec7d3 | 4 years ago |
Nuno | 98b091ab63 | 4 years ago |
Nuno | 53252d40db | 4 years ago |
Nuno | 2b648934ea | 4 years ago |
Nuno | 46c7b0309d | 4 years ago |
Nuno | 347ed4b2fb | 4 years ago |
Nuno | b9d29d5cfe | 4 years ago |
Nuno | ea212bcba2 | 4 years ago |
Nuno | 281ec4ba60 | 4 years ago |
Nuno | 951f000be4 | 4 years ago |
Nuno | 4726e74dcd | 4 years ago |
Nuno | c5fffb9ff0 | 4 years ago |
Nuno | ae9989dfe4 | 4 years ago |
Nuno | d35ae0db80 | 4 years ago |
Nuno | 3dbdbad80a | 4 years ago |
Riasan | 0a81f40606 | 4 years ago |
kaetemi | 00037b3644 | 4 years ago |
Nuno | c63b21150e | 4 years ago |
Nuno | 9771d79bc3 | 4 years ago |
kaetemi | ea1b3dbc28 | 4 years ago |
kaetemi | 93ad5e469c | 4 years ago |
kaetemi | b6b05b595a | 4 years ago |
kaetemi | 46410206ad | 4 years ago |
Nimetu | b70573d1dc | 4 years ago |
Nimetu | 7111cf44b3 | 4 years ago |
Nimetu | cb77552121 | 4 years ago |
Nuno | 2bf8faf29e | 4 years ago |
Nuno | b984e2e3d8 | 4 years ago |
Nuno | 140c380eb5 | 4 years ago |
Nuno | 1225fc0fe8 | 4 years ago |
Nuno | 13cb05c732 | 4 years ago |
Nimetu | f39038f98d | 4 years ago |
Nimetu | 990c38ca81 | 4 years ago |
Nimetu | 661a2bdaf7 | 4 years ago |
Nuno | f84184af25 | 4 years ago |
Nuno | 4b6e0184a3 | 4 years ago |
kaetemi | 87b5a77d4f | 4 years ago |
Nuno | 269526e87f | 4 years ago |
kaetemi | 30ece314c5 | 4 years ago |
Nuno | b8668813df | 4 years ago |
Nuno | 6f9dce0fdc | 4 years ago |
kaetemi | 3164e5fe3e | 4 years ago |
kaetemi | 06be2d003c | 4 years ago |
kaetemi | 06006cffd3 | 4 years ago |
kaetemi | 8fff5b8754 | 4 years ago |
kaetemi | 00520d6c11 | 4 years ago |
Nuno | fd8b2436ff | 4 years ago |
Nuno | 588bd79535 | 4 years ago |
Nuno | ced0ca3e1c | 4 years ago |
Nimetu | 76d29b2eda | 4 years ago |
kaetemi | a1f1bd888c | 4 years ago |
kaetemi | e998d3a85c | 4 years ago |
kaetemi | 5c3b0cf14b | 4 years ago |
Nuno | c327303222 | 4 years ago |
Nuno | 864eba1629 | 4 years ago |
Nuno | 29c3651063 | 4 years ago |
Nimetu | d9d9c6e1e6 | 4 years ago |
Nimetu | 779f87d6e7 | 4 years ago |
Nimetu | 53437989d4 | 4 years ago |
Nuno | acfb37103f | 4 years ago |
Nuno | 3d38a8ca89 | 4 years ago |
Nuno | 4f34ce36ae | 4 years ago |
Nuno | 8d2b26b738 | 4 years ago |
Nuno | 79e65a6b9e | 4 years ago |
Nuno | 6e59af8dc9 | 4 years ago |
Nuno | d23166ae49 | 4 years ago |
Nuno | 0b110c6a88 | 4 years ago |
Nuno | 13398f094a | 4 years ago |
Nuno | 7018a4439c | 4 years ago |
Riasan | cbbbc74a60 | 4 years ago |
Nuno | dab6321caa | 4 years ago |
Nuno | 07390fed37 | 4 years ago |
Nuno | ec98cd2e65 | 4 years ago |
Nuno | ad52a23437 | 4 years ago |
Nuno | c78d1d934f | 4 years ago |
Nuno | 677933ed98 | 4 years ago |
Nuno | 541529bb3f | 4 years ago |
Nuno | a273f78851 | 4 years ago |
Nuno | cb207bdd9d | 4 years ago |
Nuno | 8ec332fefa | 4 years ago |
Nuno | 2f776eab9c | 4 years ago |
Nuno | 04aa097781 | 4 years ago |
Nuno | 3996327394 | 4 years ago |
Nuno | 27e553ccb5 | 4 years ago |
Nimetu | 6bed86797b | 4 years ago |
Nuno | 323be1612e | 4 years ago |
Nuno | 184582cfc9 | 4 years ago |
Nimetu | e39cd0a8d3 | 4 years ago |
Nuno | 0b9599c57b | 4 years ago |
Sit Melai | 9d7f2af1a7 | 4 years ago |
Nuno | e021c09051 | 4 years ago |
Nuno | 52ff736ee9 | 4 years ago |
Nuno | d2c56f4b7c | 4 years ago |
Nuno | 2bdc6fb7ae | 4 years ago |
Nuno | a848eab99c | 4 years ago |
kaetemi | abf2715fa3 | 4 years ago |
kaetemi | 147cb75a80 | 4 years ago |
kaetemi | 3df1fd3857 | 4 years ago |
kaetemi | 257f6a6e23 | 4 years ago |
kaetemi | aa7d667b10 | 4 years ago |
kaetemi | 813b4d72d1 | 4 years ago |
kaetemi | b3bed095f8 | 4 years ago |
kaetemi | 210515addd | 4 years ago |
kaetemi | 57fbaf1feb | 4 years ago |
kaetemi | d6fe42f6a0 | 4 years ago |
kaetemi | 47d6e09099 | 4 years ago |
kaetemi | 23110247de | 4 years ago |
Nimetu | f3f67af69e | 4 years ago |
kaetemi | b1ef06d900 | 4 years ago |
kaetemi | 470b48ea0d | 4 years ago |
kaetemi | b0f1c73d77 | 4 years ago |
kaetemi | 109ed7eba5 | 4 years ago |
Nuno | 9ae2df4527 | 4 years ago |
kaetemi | f9cc9a1abe | 4 years ago |
kaetemi | 2e0b00d93c | 4 years ago |
kaetemi | 14da4d1e61 | 4 years ago |
kaetemi | 66ef424af0 | 4 years ago |
kaetemi | b884360c0e | 4 years ago |
kaetemi | 5fed277adf | 4 years ago |
kaetemi | cb949ae13a | 4 years ago |
kaetemi | c770191bef | 4 years ago |
Nimetu | 762962ef25 | 4 years ago |
Nimetu | 9f3250f4db | 4 years ago |
kaetemi | 8809d39835 | 4 years ago |
kaetemi | 773f27dfcb | 4 years ago |
kaetemi | 99df03dad0 | 4 years ago |
kaetemi | e20af7828a | 4 years ago |
kaetemi | bb564a6302 | 4 years ago |
kaetemi | 3b6e27e800 | 4 years ago |
kaetemi | 297de1d19a | 4 years ago |
kaetemi | 2444d94f4f | 4 years ago |
kaetemi | 0d2633b697 | 4 years ago |
kaetemi | c9f967b52b | 4 years ago |
kaetemi | e9fdac30a2 | 4 years ago |
kaetemi | 64b978b77a | 4 years ago |
kaetemi | 0ba45054d0 | 4 years ago |
kaetemi | f50b59702e | 4 years ago |
kaetemi | b220dac7b3 | 4 years ago |
Nimetu | 465a36b250 | 4 years ago |
Nimetu | e8c18b1b44 | 4 years ago |
Nimetu | 73610be10d | 4 years ago |
Nimetu | 72098f624d | 4 years ago |
kaetemi | 91bceae902 | 4 years ago |
kaetemi | be60cf8978 | 4 years ago |
kaetemi | 5bb21d7aa0 | 4 years ago |
kaetemi | 745db95184 | 4 years ago |
kaetemi | 3dfc6d5807 | 4 years ago |
kaetemi | f8de4aff59 | 4 years ago |
kaetemi | 36c676e2b2 | 4 years ago |
kaetemi | 281630c280 | 4 years ago |
kaetemi | ffa6179b82 | 4 years ago |
kaetemi | 73b8ba9e4e | 4 years ago |
kaetemi | 11b453baaa | 4 years ago |
kaetemi | 0dfff69c6f | 4 years ago |
kaetemi | c27547c3a3 | 4 years ago |
kaetemi | 52e3ca024f | 4 years ago |
kaetemi | 298e912949 | 4 years ago |
kaetemi | c069b70ce8 | 4 years ago |
Jan Boon | f859a39da4 | 4 years ago |
Jan Boon | 9d3891f1aa | 4 years ago |
Jan Boon | 2bb13937e8 | 4 years ago |
Jan Boon | afa22ee22b | 4 years ago |
Jan Boon | 6c247256d2 | 4 years ago |
Jan Boon | da9254e748 | 4 years ago |
Jan Boon | a1337dbda9 | 4 years ago |
kaetemi | 04805ec38c | 4 years ago |
Jan Boon | cd8ed8ab57 | 4 years ago |
kaetemi | 1a6e5e6e2b | 4 years ago |
kaetemi | 7249546db6 | 4 years ago |
kaetemi | 7adbb84514 | 4 years ago |
kaetemi | eac2aed175 | 4 years ago |
Jan Boon | 3a2922021e | 4 years ago |
kaetemi | 32ce3667a3 | 4 years ago |
kaetemi | e2afa4db5b | 4 years ago |
kaetemi | d201b8a392 | 4 years ago |
kaetemi | 72d9f8ea4f | 4 years ago |
kaetemi | ad0e970785 | 4 years ago |
kaetemi | 5fe2fae8b0 | 4 years ago |
kaetemi | 2d9f10bee3 | 4 years ago |
kaetemi | ecabc00ec5 | 4 years ago |
kaetemi | 5a470a7b16 | 4 years ago |
kaetemi | 9d534882e8 | 4 years ago |
kaetemi | 246ea2f603 | 4 years ago |
kaetemi | 7e8f84462f | 4 years ago |
kaetemi | 22fd1132ed | 4 years ago |
kaetemi | 0629951ba6 | 4 years ago |
kaetemi | 1c09d2ea4b | 4 years ago |
kaetemi | 13f99b393f | 4 years ago |
kaetemi | c061f3df3a | 4 years ago |
kaetemi | d238d2122b | 4 years ago |
kaetemi | 2a7bf997b9 | 4 years ago |
kaetemi | 39fc4895d2 | 4 years ago |
kaetemi | 7812ccafc1 | 4 years ago |
kaetemi | ff49b89b73 | 4 years ago |
kaetemi | 47c0c8cc07 | 4 years ago |
kaetemi | 0bd43913e1 | 4 years ago |
kaetemi | 182a917338 | 4 years ago |
kaetemi | 38e5dfe007 | 4 years ago |
Ryzom Pipeline | 19e00522d9 | 4 years ago |
kaetemi | 4fba8cc18d | 4 years ago |
kaetemi | 7ea4b2b989 | 4 years ago |
kaetemi | 592ec2aaf1 | 4 years ago |
kaetemi | 8dc777495a | 4 years ago |
Jan Boon | 7c028d7a83 | 4 years ago |
Jan Boon | e5fce11618 | 4 years ago |
Jan Boon | ce9c7aae84 | 4 years ago |
Jan Boon | 396f0d808e | 4 years ago |
Jan Boon | 850b8e0158 | 4 years ago |
Jan Boon | bc66f3a464 | 4 years ago |
kaetemi | 9ff5eee1e8 | 4 years ago |
kaetemi | 560a19e6f7 | 4 years ago |
kaetemi | 2450f95c03 | 4 years ago |
Jan Boon | 856f7e88f2 | 4 years ago |
kaetemi | 632f8133a2 | 4 years ago |
kaetemi | 376dd2aff1 | 4 years ago |
kaetemi | ac799e444d | 4 years ago |
kaetemi | 0b191bc6db | 4 years ago |
kaetemi | 079f9dff25 | 4 years ago |
kaetemi | 051c46b95a | 4 years ago |
kaetemi | 1963bdedcc | 4 years ago |
kaetemi | 6cd52d7871 | 4 years ago |
kaetemi | f8ef5743e3 | 4 years ago |
kaetemi | 2eb088ef1c | 4 years ago |
kaetemi | 2de4907b83 | 4 years ago |
kaetemi | 54337b757b | 4 years ago |
kaetemi | e1195fe34e | 4 years ago |
kaetemi | 506f9f26bd | 4 years ago |
kaetemi | c3ef0fc91c | 4 years ago |
kaetemi | c129ce87df | 4 years ago |
kaetemi | 9021ce465f | 4 years ago |
kaetemi | 698bfff501 | 4 years ago |
kaetemi | 6ff5ddd790 | 4 years ago |
kaetemi | 1ec9f16de4 | 4 years ago |
kaetemi | 993c37f56d | 4 years ago |
kaetemi | 55d83c9486 | 4 years ago |
kaetemi | 1d696b8921 | 4 years ago |
kaetemi | 932a612f53 | 4 years ago |
kaetemi | 1a045e437e | 4 years ago |
kaetemi | dca59073aa | 4 years ago |
kaetemi | 25049eaead | 4 years ago |
kaetemi | 8fc6ec3b35 | 4 years ago |
kaetemi | 81143cdf43 | 4 years ago |
kaetemi | 973531f461 | 4 years ago |
kaetemi | a3780e307e | 4 years ago |
kaetemi | c252b56c93 | 4 years ago |
kaetemi | 2568b6f321 | 4 years ago |
kaetemi | 06b430349c | 4 years ago |
kaetemi | 78917354d9 | 4 years ago |
kaetemi | 8c6609943b | 4 years ago |
kaetemi | 639b432817 | 4 years ago |
kaetemi | 8d94baaf14 | 4 years ago |
kaetemi | c068d757eb | 4 years ago |
kaetemi | c68c3746dd | 4 years ago |
kaetemi | 9896eae64d | 4 years ago |
kaetemi | 0367e4f7c3 | 4 years ago |
kaetemi | 8be138931d | 4 years ago |
kaetemi | 771248fcf4 | 4 years ago |
kaetemi | dd28130617 | 4 years ago |
kaetemi | 1300d5d4d4 | 4 years ago |
kaetemi | 3dddc5ab40 | 4 years ago |
kaetemi | bbf4a0ac8a | 4 years ago |
kaetemi | 6531fb0a2e | 4 years ago |
kaetemi | c4b142f770 | 4 years ago |
kaetemi | 8bf18d2e1d | 4 years ago |
kaetemi | b1056ee5ca | 4 years ago |
kaetemi | 2bd4c24a5e | 4 years ago |
kaetemi | e74e229ad9 | 4 years ago |
Nimetu | ae91cc4179 | 4 years ago |
Nimetu | b4901bf267 | 4 years ago |
Nimetu | 720f6da8b9 | 4 years ago |
Nimetu | 6ccd8853db | 4 years ago |
Nuno | cc7793202b | 4 years ago |
Nuno | 0bb160545f | 4 years ago |
Nuno | 0e1b464e98 | 4 years ago |
Nuno | dfe051a8df | 4 years ago |
Nuno Gonçalves (Ulukyn) | 2f6133c8ba | 4 years ago |
Nuno Gonçalves (Ulukyn) | 95f8cefecc | 4 years ago |
Nuno Gonçalves (Ulukyn) | b98cd5e345 | 4 years ago |
Nuno Gonçalves (Ulukyn) | bca2a28187 | 4 years ago |
Sit Melai | b7cbeeb2ae | 4 years ago |
Ulukyn | 5d4e81e24c | 4 years ago |
Ulukyn | c73fff2ca6 | 4 years ago |
Nimetu | 9532fc3a81 | 4 years ago |
Nimetu | 6b59fc0081 | 4 years ago |
Sit Melai | 47bf9ecbc8 | 4 years ago |
Sit Melai | 02732c1241 | 4 years ago |
Sit Melai | f96f0b41b9 | 4 years ago |
Sit Melai | 5dc85db8b1 | 4 years ago |
Sit Melai | 49fcec5759 | 4 years ago |
Sit Melai | b8b21914f6 | 4 years ago |
Sit Melai | bccc86bd99 | 4 years ago |
Sit Melai | e5b3b752d5 | 4 years ago |
Sit Melai | c06469b2a0 | 4 years ago |
Ulukyn | 6fa74cd5c2 | 4 years ago |
Riasan | 8cd685d1f4 | 4 years ago |
Riasan | f31eeff8fc | 4 years ago |
Sit Melai | 7e10c697eb | 4 years ago |
Nimetu | f7be62eb3d | 4 years ago |
Nimetu | 2a4b16ab1b | 4 years ago |
Ulukyn | f7e8e3f516 | 4 years ago |
Ulukyn | 107dbc1987 | 4 years ago |
Ulukyn | 97dc744759 | 4 years ago |
Ulukyn | 012339dcf1 | 4 years ago |
Ulukyn | 884c65fc26 | 4 years ago |
Ulukyn | 07f9a55e48 | 4 years ago |
Ulukyn | a87b0f4c97 | 4 years ago |
Nimetu | d367e32a40 | 4 years ago |
Ulukyn | 4138a99fb7 | 4 years ago |
Nimetu | 5e3cd0321a | 4 years ago |
Nimetu | 4fd3f59b9a | 4 years ago |
Ulukyn | 7be52a10fe | 4 years ago |
Ulukyn | f4a104bf3f | 4 years ago |
Ulukyn | 80a6bf72a9 | 4 years ago |
Ulukyn | 17e539132b | 4 years ago |
Ulukyn | 27bd2cec01 | 4 years ago |
Ulukyn | 6597f32fc1 | 4 years ago |
Ulukyn | 9e2872d15e | 4 years ago |
Ulukyn | 901f33d9a7 | 4 years ago |
Ulukyn | 421de3fa91 | 4 years ago |
Ulukyn | 08fb509d99 | 4 years ago |
Sit Melai | 6c8aeb6ae3 | 4 years ago |
Sit Melai | 59c794f716 | 4 years ago |
Heernis | 3c052d5fcc | 4 years ago |
Sit Melai | c2e7807f99 | 4 years ago |
Riasan | d130a7f826 | 5 years ago |
Ulukyn | fd2cc53d68 | 5 years ago |
Ulukyn | 6ae34e08d9 | 5 years ago |
Ulukyn | 80568ade1c | 5 years ago |
Ulukyn | a8016b6a59 | 5 years ago |
Ulukyn | d0fdfe175d | 5 years ago |
Ulukyn | 4254b6788a | 5 years ago |
Riasan | ada46dfabc | 5 years ago |
Nimetu | c09736a08a | 5 years ago |
Nimetu | e9f63f2556 | 5 years ago |
Nimetu | 334d1d2af1 | 5 years ago |
Nimetu | 3aa0493570 | 5 years ago |
kaetemi | fc197880a4 | 5 years ago |
Ulukyn | ada3c09a51 | 5 years ago |
Ulukyn | 83061f7f03 | 5 years ago |
Ulukyn | 3c6bed32fd | 5 years ago |
Nimetu | 92b3a31f0b | 5 years ago |
Ulukyn | f396858ea9 | 5 years ago |
Ulukyn | eae8f9999d | 5 years ago |
Ulukyn | b8885cd661 | 5 years ago |
Ulukyn | f67a1cde32 | 5 years ago |
Ulukyn | feb1a5647d | 5 years ago |
Ulukyn | f3009c4178 | 5 years ago |
Ulukyn | 820bd23cf6 | 5 years ago |
Ulukyn | c883ea63e0 | 5 years ago |
Ulukyn | 791a6641d9 | 5 years ago |
Ulukyn | 521a5c8fb7 | 5 years ago |
Ulukyn | da876dcf7c | 5 years ago |
Ulukyn | 0069db15a6 | 5 years ago |
Ulukyn | 3da2f45363 | 5 years ago |
Ulukyn | 1143ecaae0 | 5 years ago |
Heernis | bcc107e187 | 5 years ago |
karu | da890311bb | 5 years ago |
Nimetu | 4ebca98559 | 5 years ago |
Nimetu | 98709e55db | 5 years ago |
Nimetu | 36187626a9 | 5 years ago |
Nimetu | bde8d008d1 | 5 years ago |
Nimetu | 6993a2731f | 5 years ago |
kaetemi | 3cbfa82a6e | 5 years ago |
kaetemi | ec61fa02b6 | 5 years ago |
Nimetu | 52d6f89e1e | 5 years ago |
Nimetu | 5bddfcfb22 | 5 years ago |
kaetemi | d0068265fb | 5 years ago |
kaetemi | 8b8308c354 | 5 years ago |
kaetemi | c00701eee1 | 5 years ago |
kaetemi | db92cbc6bb | 5 years ago |
kaetemi | 1ab8fe06de | 5 years ago |
Ulukyn | aa15fd4e98 | 5 years ago |
Ulukyn | 0f8673beac | 5 years ago |
Ulukyn | 219914b4bf | 5 years ago |
Ulukyn | fb4aebf506 | 5 years ago |
Ulukyn | 81832ae0af | 5 years ago |
kaetemi | 5c0c6d2417 | 5 years ago |
kaetemi | 9b0852a91d | 5 years ago |
kaetemi | 05d6b16b9c | 5 years ago |
kaetemi | 39d6ca285a | 5 years ago |
kaetemi | c8fc110a9e | 5 years ago |
kaetemi | a9fc9c2015 | 5 years ago |
Ulukyn | e32c852d96 | 5 years ago |
Ulukyn | f3a02d4f2a | 5 years ago |
Ulukyn | bd99cd8aed | 5 years ago |
Ulukyn | 77d8cce15a | 5 years ago |
Ulukyn | aa0d9d0be9 | 5 years ago |
Ulukyn | 0845e19408 | 5 years ago |
Ulukyn | ece240448d | 5 years ago |
Ulukyn | 07ff703de2 | 5 years ago |
Ulukyn | f6116a813b | 5 years ago |
kaetemi | d293b3ef02 | 5 years ago |
kaetemi | a4aafa410a | 5 years ago |
kaetemi | 56ee772548 | 5 years ago |
kaetemi | 1a037ad3eb | 5 years ago |
kaetemi | a82df91bba | 5 years ago |
kaetemi | 900ec1a69a | 5 years ago |
kaetemi | 491d39ff08 | 5 years ago |
Ulukyn | 422a8bb744 | 5 years ago |
Nimetu | 0f5dbc318c | 5 years ago |
Nimetu | 2a2431b1d3 | 5 years ago |
Nimetu | 505283a17c | 5 years ago |
Nimetu | 1ab44cf123 | 5 years ago |
Ulukyn | 25d4cca3a9 | 5 years ago |
Ulukyn | 6a40fcf12d | 5 years ago |
Ulukyn | bf0042173f | 5 years ago |
Ulukyn | 681568ce08 | 5 years ago |
Ulukyn | 47863be96e | 5 years ago |
Ulukyn | ade5b6e702 | 5 years ago |
Ulukyn | ecd8b952a2 | 5 years ago |
Ulukyn | 272f91210b | 5 years ago |
Ulukyn | 24d4fb8253 | 5 years ago |
Nimetu | 24fd5a6230 | 5 years ago |
Riasan | 9043e78794 | 5 years ago |
Nimetu | 5250d22706 | 5 years ago |
Nimetu | 682985978d | 5 years ago |
Nimetu | b3f8f307b0 | 5 years ago |
Ulukyn | b5ffa8becd | 5 years ago |
kaetemi | 87cd9f19a4 | 5 years ago |
kaetemi | 83210ce17b | 5 years ago |
kaetemi | bcac1e7955 | 5 years ago |
kaetemi | 75777b3497 | 5 years ago |
kaetemi | e020c9f0d0 | 5 years ago |
Ulukyn | 92090056ea | 5 years ago |
Nimetu | a6c7b3dd37 | 5 years ago |
Ulukyn | 1e54da83ef | 5 years ago |
Ulukyn | 6ec06b29ab | 5 years ago |
Ulukyn | 7b15da1018 | 5 years ago |
Nimetu | 67b74ad2b7 | 5 years ago |
Nimetu | ddd16d4851 | 5 years ago |
Nimetu | 110f1715ea | 5 years ago |
Nimetu | 598be95efd | 5 years ago |
kaetemi | 4f0bbbad69 | 5 years ago |
kaetemi | 50be041116 | 5 years ago |
Nimetu | 7f373a904e | 5 years ago |
Nimetu | 983475ff7c | 5 years ago |
kaetemi | b713dccdc9 | 5 years ago |
Jan Boon | c9163412ad | 5 years ago |
Jan Boon | d2d89ac44f | 5 years ago |
Jan Boon | d036b616b5 | 5 years ago |
Jan Boon | 7b8f1b9a61 | 5 years ago |
Ulukyn | 44824414b1 | 5 years ago |
Ulukyn | 95b0f63622 | 5 years ago |
Ulukyn | 264b50a5ec | 5 years ago |
Ulukyn | 143b96c214 | 5 years ago |
Ulukyn | d4e5af7df2 | 5 years ago |
Ulukyn | 8dc9b89f94 | 5 years ago |
Nimetu | 2d86c5377d | 5 years ago |
Ulukyn | 04f9d593e0 | 5 years ago |
Nimetu | 3be969a73d | 5 years ago |
Ulukyn | ce8b05b284 | 5 years ago |
Ulukyn | 42b291c73e | 5 years ago |
Nimetu | 4aa94b3ae9 | 5 years ago |
Nimetu | c0110133d7 | 5 years ago |
Nimetu | c36faf2d61 | 5 years ago |
Ulukyn | fef0cad61a | 5 years ago |
Ulukyn | debb6b7d0c | 5 years ago |
Heernis | f11ed5ea49 | 5 years ago |
Ulukyn | 050d9fea2f | 5 years ago |
Ulukyn | 9a8f29bb67 | 5 years ago |
Ulukyn | c2e879ebcc | 5 years ago |
Ulukyn | 11086f9b44 | 5 years ago |
Ulukyn | 311e739d98 | 5 years ago |
Ulukyn | f6f7e553fc | 5 years ago |
Ulukyn | 255271cde5 | 5 years ago |
Ulukyn | 6d233cdc2c | 5 years ago |
Ulukyn | f337a28ae2 | 5 years ago |
Ulukyn | a36694614f | 5 years ago |
Ulukyn | bcb8080d42 | 5 years ago |
Ulukyn | 2c9193fa74 | 5 years ago |
Ulukyn | 7e84ee9ec9 | 5 years ago |
Ulukyn | ff5d4e941c | 5 years ago |
Nimetu | f853adfcba | 5 years ago |
Nimetu | 1f736fc347 | 5 years ago |
Ulukyn | 8f3aaee987 | 5 years ago |
Ulukyn | 8d0172e1fb | 5 years ago |
Ulukyn | f06eebf26c | 5 years ago |
Ulukyn | 31ecfdf181 | 5 years ago |
Ulukyn | 4997576923 | 5 years ago |
Ulukyn | 9b6693763f | 5 years ago |
Ulukyn | b9d1cf26b7 | 5 years ago |
Ulukyn | ae25e054d4 | 5 years ago |
Ulukyn | 269f8c4b2d | 5 years ago |
Ulukyn | a3db3c6ba6 | 5 years ago |
Nimetu | 4d9aa3e684 | 5 years ago |
Nimetu | e99b7e257d | 5 years ago |
Nimetu | 94873c3d3f | 5 years ago |
Nimetu | 586e49282f | 5 years ago |
Nimetu | ca20d582b3 | 5 years ago |
Nimetu | 7cb5c817a6 | 5 years ago |
Nimetu | ec1dfca0c5 | 5 years ago |
Ulukyn | df6c0969c2 | 5 years ago |
Ulukyn | 590abe8bfd | 5 years ago |
Ulukyn | b31fa09af7 | 5 years ago |
Ulukyn | 3220a2aa47 | 5 years ago |
Ulukyn | c639bb3c07 | 5 years ago |
Nimetu | 2f635117f7 | 5 years ago |
Ulukyn | 0cf26cbdf8 | 5 years ago |
Nimetu | 34083dee80 | 5 years ago |
Nimetu | edb0c1fe73 | 5 years ago |
Nimetu | 9aabe0bf35 | 5 years ago |
Nimetu | 3b08d50b83 | 5 years ago |
Ulukyn | 523c07d9d9 | 5 years ago |
Ulukyn | e89d3233dc | 5 years ago |
Ulukyn | 96e95c19ee | 5 years ago |
Ulukyn | e10f79dbf2 | 5 years ago |
Ulukyn | 0aff3b4365 | 5 years ago |
Ulukyn | b0fa434c05 | 5 years ago |
Ulukyn | e349cb4399 | 5 years ago |
Ulukyn | f9cf9db049 | 5 years ago |
Ulukyn | 92f3c01a74 | 5 years ago |
Ulukyn | 3ffab7c1a1 | 5 years ago |
Ulukyn | 4df2489f59 | 5 years ago |
Ulukyn | de6418bb9a | 5 years ago |
Ulukyn | 1db0300515 | 5 years ago |
Ulukyn | 435b4362d3 | 5 years ago |
Ulukyn | f9d37a390a | 5 years ago |
Ulukyn | 99413cff48 | 5 years ago |
Ulukyn | d45f6efcef | 5 years ago |
Ulukyn | 01cb2cfdd8 | 5 years ago |
Ulukyn | 5f762edac4 | 5 years ago |
Ulukyn | bfadcfaff5 | 5 years ago |
Ulukyn | 55172c93b5 | 5 years ago |
Ulukyn | c950373782 | 5 years ago |
Ulukyn | b1d18ddb53 | 5 years ago |
Ulukyn | b869cd07d6 | 5 years ago |
Ulukyn | aaa24fd0f4 | 5 years ago |
Ulukyn | 6747613b03 | 5 years ago |
Ulukyn | ac6afb7b2f | 5 years ago |
Ulukyn | 4048ef29db | 5 years ago |
Ulukyn | b5b395c127 | 5 years ago |
Ulukyn | a7d2175f93 | 5 years ago |
Ulukyn | b16d132e1d | 5 years ago |
Ulukyn | e3cef8803e | 5 years ago |
Ulukyn | cb2201a69a | 5 years ago |
Nimetu | dfeba1426a | 5 years ago |
Ulukyn | c9bec465bc | 5 years ago |
Nimetu | 7856e93723 | 5 years ago |
Nimetu | 8f59a71e3c | 5 years ago |
Nimetu | 15433b263b | 5 years ago |
Ulukyn | 58a731628b | 5 years ago |
Ulukyn | eb8daeb652 | 5 years ago |
Ulukyn | c6d5163c1d | 5 years ago |
Ulukyn | 2c63a3aa96 | 5 years ago |
Ulukyn | 4709e766b9 | 5 years ago |
Ulukyn | b2207337fa | 5 years ago |
Ulukyn | 47dc707c91 | 5 years ago |
Ulukyn | 232af164ed | 5 years ago |
Ulukyn | f18101d97e | 5 years ago |
Ulukyn | 0df2bdec2b | 5 years ago |
Ulukyn | ed17e66d97 | 5 years ago |
Ulukyn | 7f149563f6 | 5 years ago |
Nimetu | e22d271408 | 5 years ago |
Ulukyn | d77d3b7102 | 5 years ago |
Ulukyn | e049c34c8d | 5 years ago |
Ulukyn | 6114cb1044 | 5 years ago |
Ulukyn | 609d6b470f | 5 years ago |
Ulukyn | 414011ee37 | 5 years ago |
Ulukyn | b558a1a18b | 5 years ago |
Ulukyn | b033942d36 | 5 years ago |
Ulukyn | de8c9dddcb | 5 years ago |
Ulukyn | 6e00000b9b | 5 years ago |
Ulukyn | 15ce2cd39c | 5 years ago |
Ulukyn | f9738713a7 | 5 years ago |
Ulukyn | 20b1f3a4c5 | 5 years ago |
Ulukyn | 586d84bc20 | 5 years ago |
Ulukyn | b88341792a | 5 years ago |
Ulukyn | 1c562ddbe6 | 5 years ago |
Ulukyn | 4675b8b8b9 | 5 years ago |
Ulukyn | d2edcbf4ee | 5 years ago |
Ulukyn | 954151ca73 | 5 years ago |
Ulukyn | 45b1bab23f | 5 years ago |
Ulukyn | 123197b90b | 5 years ago |
Ulukyn | 4b847a086a | 5 years ago |
Ulukyn | 9f61f08e74 | 5 years ago |
Ulukyn | aacbcf1e65 | 5 years ago |
Ulukyn | c838136d1a | 5 years ago |
Ulukyn | 0455d07125 | 5 years ago |
Ulukyn | 6785217b3a | 5 years ago |
Ulukyn | cc5423fdd5 | 5 years ago |
Ulukyn | c22f8776f4 | 5 years ago |
Nimetu | f5c0cbcdf3 | 5 years ago |
Nimetu | 8b2108af2f | 5 years ago |
Ulukyn | a7ca6f4499 | 5 years ago |
Ulukyn | 9e5f20a679 | 5 years ago |
Ulukyn | 11573ee85a | 5 years ago |
Ulukyn | 48a9a84d0e | 5 years ago |
Ulukyn | 2f27af125e | 5 years ago |
Ulukyn | 10f864b234 | 5 years ago |
Ulukyn | 0ac92bc08b | 5 years ago |
Ulukyn | 34c1265bce | 5 years ago |
Ulukyn | a6ee9fec63 | 5 years ago |
Ulukyn | fe008c0e52 | 5 years ago |
Ulukyn | 935c5df73a | 5 years ago |
Ulukyn | 7a0737e759 | 5 years ago |
Ulukyn | 09d8346558 | 5 years ago |
Ulukyn | 7f53767d85 | 5 years ago |
karu | 6a7fc98a52 | 5 years ago |
Ulukyn | 3d919974cf | 5 years ago |
Ulukyn | 691bf67c4d | 5 years ago |
Ulukyn | f053eaa157 | 5 years ago |
Ulukyn | 30fabcbd0a | 5 years ago |
Ulukyn | 3966020294 | 5 years ago |
Ulukyn | eeac201cf3 | 5 years ago |
Ulukyn | 357e3f07e4 | 5 years ago |
Ulukyn | 188c3494fa | 5 years ago |
Ulukyn | 51776f9203 | 5 years ago |
Ulukyn | 7b8a4e2210 | 5 years ago |
Ulukyn | 762dcd15e2 | 5 years ago |
Ulukyn | ac43b90ba0 | 5 years ago |
Ulukyn | df3c7c2f2e | 5 years ago |
Ulukyn | 780b9c7e63 | 5 years ago |
Ulukyn | f4ee795fde | 5 years ago |
Ulukyn | c521de1d48 | 5 years ago |
Riasan | d5ceb97fa0 | 5 years ago |
Ulukyn | cdc33730ad | 5 years ago |
Ulukyn | 305a27f0db | 5 years ago |
Nimetu | 4c1daee42c | 5 years ago |
Ulu Kyn | b5b8de283b | 5 years ago |
Ulu Kyn | 7b3c09f873 | 5 years ago |
Ulu Kyn | 3f7fc2e870 | 5 years ago |
Ulu Kyn | 4c0438d702 | 5 years ago |
Ulu Kyn | 139b03f0f1 | 5 years ago |
Ulu Kyn | 99caf036ff | 5 years ago |
Ulu Kyn | 6c35550c83 | 5 years ago |
Ulu Kyn | 8221ee2eb9 | 5 years ago |
Ulu Kyn | fd1f151504 | 5 years ago |
Ulu Kyn | c43b4b8bc0 | 5 years ago |
Ulu Kyn | a806758fad | 5 years ago |
Ulu Kyn | 58e24f9c58 | 5 years ago |
Herrah | 99ededcfcb | 5 years ago |
Ulu Kyn | e32e4492ce | 5 years ago |
Ulu Kyn | e3dc99e078 | 5 years ago |
Nuno Gonçalves | 9e406019d8 | 5 years ago |
Nuno Gonçalves | 19789a2544 | 5 years ago |
Nimetu | e4cce24f80 | 5 years ago |
Nimetu | 2e3fa918d4 | 5 years ago |
Nuno Gonçalves | 89973681a2 | 5 years ago |
Nuno Gonçalves | 683af88cb9 | 5 years ago |
Nimetu | da5b7212f8 | 5 years ago |
Nimetu | 14b1c1232a | 5 years ago |
Nuno Gonçalves | de69dfc285 | 5 years ago |
Nuno Gonçalves | f5776610f1 | 5 years ago |
Inky | 11f2044c7d | 5 years ago |
Nimetu | b53d797745 | 5 years ago |
Nimetu | 8b4c179a15 | 5 years ago |
ulukyn | 959d52fd80 | 5 years ago |
Nimetu | b423c0f057 | 5 years ago |
Nimetu | 7148d476ad | 5 years ago |
Nimetu | c9a5fbacd9 | 5 years ago |
Inky | bfbb8e1292 | 5 years ago |
Inky | 045a80b59e | 5 years ago |
Inky | 1ad5cf7a8e | 5 years ago |
Inky | c752619f13 | 5 years ago |
Inky | 26aef169b1 | 5 years ago |
Inky | 8006dbeabe | 5 years ago |
Inky | 6fdbdc9ed1 | 5 years ago |
Inky | f75e413994 | 5 years ago |
Inky | 3acbf83058 | 5 years ago |
Inky | 77496daef4 | 5 years ago |
Inky | c545629a10 | 5 years ago |
Inky | 1910f7bc86 | 5 years ago |
Inky | c1e76fcbb2 | 5 years ago |
Inky | 20fe11c53f | 5 years ago |
Inky | 6fcb6f0669 | 5 years ago |
Inky | a7cdf29463 | 5 years ago |
Inky | b2b16e3cce | 5 years ago |
Inky | 0f3f64cdc2 | 5 years ago |
Inky | c8927c9c4b | 5 years ago |
Inky | 5d1233e805 | 5 years ago |
Inky | f5e9b7703c | 5 years ago |
Inky | 098df688b9 | 5 years ago |
Inky | 6d16b46890 | 5 years ago |
Inky | 331b0d8718 | 5 years ago |
Inky | d9cb317667 | 5 years ago |
Inky | 90e508032c | 5 years ago |
Inky | 4a5de4cb13 | 5 years ago |
Inky | 9d294ef242 | 5 years ago |
Inky | 860d6e2abb | 6 years ago |
Inky | bfab92082b | 6 years ago |
Inky | 64e26124f8 | 6 years ago |
Inky | 21dfa80b73 | 6 years ago |
Inky | ac4d9efd8b | 6 years ago |
Inky | 00f850f143 | 6 years ago |
Nimetu | a4b3e57fd0 | 6 years ago |
Nimetu | 8b2aef9317 | 6 years ago |
Nimetu | c123f63afd | 6 years ago |
Nimetu | a22767af76 | 6 years ago |
ulukyn | f8af0da354 | 6 years ago |
Riasan | 4f08aa3082 | 6 years ago |
ulukyn | 72d636ded1 | 6 years ago |
Riasan | cba4d7948d | 6 years ago |
ulukyn | 739d000055 | 6 years ago |
ulukyn | 963162855c | 6 years ago |
ulukyn | 89ef083460 | 6 years ago |
Inky | 795606628f | 6 years ago |
Inky | e572cc3e83 | 6 years ago |
ulukyn | bf34575037 | 6 years ago |
ulukyn | 57a32f10ee | 6 years ago |
ulukyn | 6c9a8da387 | 6 years ago |
Riasan | 2aa065d109 | 6 years ago |
ulukyn | 41b0fac726 | 6 years ago |
ulukyn | b7ec1c68ac | 6 years ago |
ulukyn | cc6159a9d5 | 6 years ago |
Inky | 438b521ece | 6 years ago |
Ulukyn | f5f4411a00 | 6 years ago |
Riasan | 29cb0c579f | 6 years ago |
ulukyn | 8434cb1a34 | 6 years ago |
ulukyn | 39004eb54b | 6 years ago |
Riasan | d2df2043c5 | 6 years ago |
Riasan | d8cfde63f8 | 6 years ago |
Nuno Gonçalves | 617682afe6 | 6 years ago |
Nuno Gonçalves | c9d19b4879 | 6 years ago |
ulukyn | 0b507cba7b | 6 years ago |
ulukyn | db5a7b141a | 6 years ago |
ulukyn | 478e2a646f | 6 years ago |
ulukyn | 020c59153d | 6 years ago |
ulukyn | 4f1008a413 | 6 years ago |
Riasan | f14c4d7746 | 6 years ago |
ulukyn | 23fe859e19 | 6 years ago |
Riasan | c6978f769f | 6 years ago |
Riasan | 319ae23064 | 6 years ago |
Riasan | 3e2e6cb696 | 6 years ago |
Riasan | 3c66bf2ba2 | 6 years ago |
Riasan | 1390a45f71 | 6 years ago |
ulukyn | d599fa4c14 | 6 years ago |
ulukyn | b4d09e0774 | 6 years ago |
ulukyn | 6f65197479 | 6 years ago |
ulukyn | 569599281b | 6 years ago |
ulukyn | 10562b720b | 6 years ago |
ulukyn | 1fc73a8079 | 6 years ago |
ulukyn | f821ff6973 | 6 years ago |
Riasan | d51b3b2eae | 6 years ago |
Riasan | 90c99b0b0e | 6 years ago |
Riasan | 48b2e9799e | 6 years ago |
Riasan | 9c680f43ce | 6 years ago |
Riasan | 537865cdb9 | 6 years ago |
ulukyn | 60feb8bc57 | 6 years ago |
ulukyn | dd6057ad71 | 6 years ago |
Riasan | 882e067fc0 | 6 years ago |
Riasan | a82a018f40 | 6 years ago |
Riasan | eb1c367464 | 6 years ago |
teanwen | 4ca7ea8957 | 6 years ago |
ulukyn | 6c731f049e | 6 years ago |
ulukyn | 363a59d238 | 6 years ago |
Riasan | b59b8a51a9 | 6 years ago |
ulukyn | 5648981968 | 6 years ago |
Riasan | c1510a8fb8 | 6 years ago |
Riasan | beb3dca614 | 6 years ago |
Riasan | 80204090d4 | 6 years ago |
Riasan | 57e55ed250 | 6 years ago |
Riasan | 5601d84d60 | 6 years ago |
Riasan | 2b24a51439 | 6 years ago |
Riasan | 3343f46e11 | 6 years ago |
Riasan | 82e5e1a4fc | 6 years ago |
Riasan | 19285bc8e9 | 6 years ago |
Riasan | cdbd2e1f47 | 6 years ago |
Riasan | f8a252abcf | 6 years ago |
Ul U'Kyn | 453c81bc7c | 6 years ago |
Riasan | 56f450782f | 6 years ago |
Riasan | dda9dff6ba | 6 years ago |
Riasan | e0266dedcb | 6 years ago |
Riasan | 28fd5a7265 | 6 years ago |
ulukyn | 085770a098 | 6 years ago |
ulukyn | a5f98add80 | 6 years ago |
ulukyn | bb667c736c | 6 years ago |
ulukyn | d824ff5baf | 7 years ago |
ulukyn | 6cc550732b | 7 years ago |
ulukyn | fcfb17c784 | 7 years ago |
Riasan | 22b06fdb3e | 7 years ago |
Riasan | 05baa720e9 | 7 years ago |
Riasan | 8be4abf0fe | 7 years ago |
Riasan | f47f2b4801 | 7 years ago |
Riasan | 7c8eb4b3c6 | 7 years ago |
Riasan | 146ccbbe4c | 7 years ago |
Ul U'Kyn | eaf08e863e | 7 years ago |
Riasan | 5afbc26916 | 7 years ago |
Ul U'Kyn | b5234633b4 | 7 years ago |
Riasan | c60705a297 | 7 years ago |
Ul U'Kyn | 9d4829ec54 | 7 years ago |
Ul U'Kyn | c37ef9592e | 7 years ago |
Ul U'Kyn | af3fe227c8 | 8 years ago |
Ul U'Kyn | 0e122c76ba | 8 years ago |
Nuno Gonçalves | 14c7013348 | 8 years ago |
Nuno Gonçalves | fbf0d664fc | 8 years ago |
Nuno Gonçalves | 0fd0934111 | 8 years ago |
Nuno Gonçalves | aadf864e4e | 8 years ago |
vl | f86da6ec78 | 9 years ago |
@ -1,27 +1,28 @@
|
|||||||
4eddbaff0c5e5d685db96ee3e8427aa0fd96ac83 v0.8.0
|
4eddbaff0c5e5d685db96ee3e8427aa0fd96ac83 ryzomcore/v0.8.0
|
||||||
00d9b6e29e95f56785fbf85abe60afd34674f402 v0.9.0
|
00d9b6e29e95f56785fbf85abe60afd34674f402 ryzomcore/v0.9.0
|
||||||
79776c337176dd5b02e1a74fe5dfb703b91747aa v0.9.1
|
79776c337176dd5b02e1a74fe5dfb703b91747aa ryzomcore/v0.9.1
|
||||||
fedf2aa443d09707beed814b0f499c6a5519cc84 v0.10.0
|
fedf2aa443d09707beed814b0f499c6a5519cc84 ryzomcore/v0.10.0
|
||||||
edaa3624a56420b02ccc64c26059801a389927ee v0.11.0
|
edaa3624a56420b02ccc64c26059801a389927ee ryzomcore/v0.11.0
|
||||||
e3fe4855f22c3e75722e015dc33c091c340b3ad7 v0.11.1
|
e3fe4855f22c3e75722e015dc33c091c340b3ad7 ryzomcore/v0.11.1
|
||||||
9e583b717fd63be0be9fd60b99087abf1691ea49 v0.11.2
|
9e583b717fd63be0be9fd60b99087abf1691ea49 ryzomcore/v0.11.2
|
||||||
bfe5628e14a024ba7ea32e4b326ae433a07856b9 v0.11.3
|
bfe5628e14a024ba7ea32e4b326ae433a07856b9 ryzomcore/v0.11.3
|
||||||
9a6120735daa97c96ac5d85ca35c7f21f607bd87 v0.12.0
|
9a6120735daa97c96ac5d85ca35c7f21f607bd87 ryzomcore/v0.12.0
|
||||||
3e92c7104c20d6bc6c2147b4b5fc289e8621d322 v1.0.0
|
3e17907af67e8d66d80e6b714707bbf912607f2a ryzom-patch-3.0.0
|
||||||
8eb94c3549be898fdc4a7c6d791d2477bdc11a18 v1.0.1
|
153e0b605c9e0c83ba05b6428c62838b49cc84b2 ryzom-patch-3.0.1
|
||||||
3e17907af67e8d66d80e6b714707bbf912607f2a ryzom/3.0.0
|
9d41f2994d44b9aad92b83f945f114e4b6bed44a ryzom-patch-3.0.2
|
||||||
153e0b605c9e0c83ba05b6428c62838b49cc84b2 ryzom/3.0.1
|
4300cc14aad098b1f86ea4c55577b7fa4a4cb5d2 ryzom-patch-3.1.0
|
||||||
9d41f2994d44b9aad92b83f945f114e4b6bed44a ryzom/3.0.2
|
d4060f217f4f834cc62a33f2f1ccdf3c28298066 ryzom-patch-3.1.0-hotfix
|
||||||
4300cc14aad098b1f86ea4c55577b7fa4a4cb5d2 ryzom/3.1.0
|
043aaeb3d8a2a54177581b57bda87a9deaad510e ryzom-patch-3.1.0-april_patch
|
||||||
d4060f217f4f834cc62a33f2f1ccdf3c28298066 ryzom/3.1.0-hotfix
|
4036ecf59e83960f03acebc2089eb2ff5eeaed0a ryzom-patch-3.2.0
|
||||||
043aaeb3d8a2a54177581b57bda87a9deaad510e ryzom/3.1.0-april_patch
|
18403bb9485da3d9742c6f007a16d5619ebfb196 ryzom-patch-3.2.1
|
||||||
4036ecf59e83960f03acebc2089eb2ff5eeaed0a ryzom/3.2.0
|
822ff8f8917ad66e09e2c21c983282f6f693b9f6 ryzom-patch-3.3.0
|
||||||
18403bb9485da3d9742c6f007a16d5619ebfb196 ryzom/3.2.1
|
00dde390a394fce9da06c2f3264140282158d39f ryzom-patch-3.3.0
|
||||||
822ff8f8917ad66e09e2c21c983282f6f693b9f6 ryzom/3.3.0
|
dcd4c4d161ef775136e18c7e8f5072b75dede27e ryzom-patch-3.3.1
|
||||||
00dde390a394fce9da06c2f3264140282158d39f ryzom/3.3.0
|
fc4be8ebec5ca754ef4453bc6a9faef90837c674 ryzom-patch-3.4.0
|
||||||
dcd4c4d161ef775136e18c7e8f5072b75dede27e ryzom/3.3.1
|
70eba02e8eab6920586dbabf74e9e8180c729980 ryzom-patch-3.4.0 Steam Fix
|
||||||
fc4be8ebec5ca754ef4453bc6a9faef90837c674 ryzom/3.4.0
|
3941482843f9cd130cfc16634efc08d34a98ed35 ryzom-patch-3.4.0 Atysmas
|
||||||
70eba02e8eab6920586dbabf74e9e8180c729980 ryzom/3.4.0-steam_fix
|
ecae9feb4cceb78103e5d7236caccaf450796cdb ryzom-patch-3.5.0
|
||||||
3941482843f9cd130cfc16634efc08d34a98ed35 ryzom/3.4.0-atysmas
|
95783afa226f241062134eb62f4323295d29ac84 ryzom-patch-3.5.0.9637
|
||||||
ecae9feb4cceb78103e5d7236caccaf450796cdb ryzom/3.5.0
|
2102fb276eb69d49ed4923042215312a63c47c08 Live-746
|
||||||
95783afa226f241062134eb62f4323295d29ac84 ryzom/3.5.0.9637
|
8eb94c3549be898fdc4a7c6d791d2477bdc11a18 ryzomcore/v1.0.1
|
||||||
|
3e92c7104c20d6bc6c2147b4b5fc289e8621d322 ryzomcore/v1.0.0
|
||||||
|
@ -0,0 +1,8 @@
|
|||||||
|
# This file is parsed by HunterGate command
|
||||||
|
|
||||||
|
hunter_config(luabind
|
||||||
|
VERSION 0.9.1
|
||||||
|
URL "https://github.com/nimetu/luabind/tarball/2fa4606"
|
||||||
|
SHA1 "3b4646bab9f0b2362d7b8d71d78e40deaf3cc747"
|
||||||
|
)
|
||||||
|
|
@ -0,0 +1,537 @@
|
|||||||
|
# Copyright (c) 2013-2019, Ruslan Baratov
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without
|
||||||
|
# modification, are permitted provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# * Redistributions of source code must retain the above copyright notice, this
|
||||||
|
# list of conditions and the following disclaimer.
|
||||||
|
#
|
||||||
|
# * Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
# this list of conditions and the following disclaimer in the documentation
|
||||||
|
# and/or other materials provided with the distribution.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||||
|
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||||
|
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||||
|
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
# This is a gate file to Hunter package manager.
|
||||||
|
# Include this file using `include` command and add package you need, example:
|
||||||
|
#
|
||||||
|
# cmake_minimum_required(VERSION 3.2)
|
||||||
|
#
|
||||||
|
# include("cmake/HunterGate.cmake")
|
||||||
|
# HunterGate(
|
||||||
|
# URL "https://github.com/path/to/hunter/archive.tar.gz"
|
||||||
|
# SHA1 "798501e983f14b28b10cda16afa4de69eee1da1d"
|
||||||
|
# )
|
||||||
|
#
|
||||||
|
# project(MyProject)
|
||||||
|
#
|
||||||
|
# hunter_add_package(Foo)
|
||||||
|
# hunter_add_package(Boo COMPONENTS Bar Baz)
|
||||||
|
#
|
||||||
|
# Projects:
|
||||||
|
# * https://github.com/hunter-packages/gate/
|
||||||
|
# * https://github.com/ruslo/hunter
|
||||||
|
|
||||||
|
option(HUNTER_ENABLED "Enable Hunter package manager support" ON)
|
||||||
|
|
||||||
|
if(HUNTER_ENABLED)
|
||||||
|
if(CMAKE_VERSION VERSION_LESS "3.2")
|
||||||
|
message(
|
||||||
|
FATAL_ERROR
|
||||||
|
"At least CMake version 3.2 required for Hunter dependency management."
|
||||||
|
" Update CMake or set HUNTER_ENABLED to OFF."
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
include(CMakeParseArguments) # cmake_parse_arguments
|
||||||
|
|
||||||
|
option(HUNTER_STATUS_PRINT "Print working status" ON)
|
||||||
|
option(HUNTER_STATUS_DEBUG "Print a lot info" OFF)
|
||||||
|
option(HUNTER_TLS_VERIFY "Enable/disable TLS certificate checking on downloads" ON)
|
||||||
|
set(HUNTER_ROOT "" CACHE FILEPATH "Override the HUNTER_ROOT.")
|
||||||
|
|
||||||
|
set(HUNTER_ERROR_PAGE "https://hunter.readthedocs.io/en/latest/reference/errors")
|
||||||
|
|
||||||
|
function(hunter_gate_status_print)
|
||||||
|
if(HUNTER_STATUS_PRINT OR HUNTER_STATUS_DEBUG)
|
||||||
|
foreach(print_message ${ARGV})
|
||||||
|
message(STATUS "[hunter] ${print_message}")
|
||||||
|
endforeach()
|
||||||
|
endif()
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
function(hunter_gate_status_debug)
|
||||||
|
if(HUNTER_STATUS_DEBUG)
|
||||||
|
foreach(print_message ${ARGV})
|
||||||
|
string(TIMESTAMP timestamp)
|
||||||
|
message(STATUS "[hunter *** DEBUG *** ${timestamp}] ${print_message}")
|
||||||
|
endforeach()
|
||||||
|
endif()
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
function(hunter_gate_error_page error_page)
|
||||||
|
message("------------------------------ ERROR ------------------------------")
|
||||||
|
message(" ${HUNTER_ERROR_PAGE}/${error_page}.html")
|
||||||
|
message("-------------------------------------------------------------------")
|
||||||
|
message("")
|
||||||
|
message(FATAL_ERROR "")
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
function(hunter_gate_internal_error)
|
||||||
|
message("")
|
||||||
|
foreach(print_message ${ARGV})
|
||||||
|
message("[hunter ** INTERNAL **] ${print_message}")
|
||||||
|
endforeach()
|
||||||
|
message("[hunter ** INTERNAL **] [Directory:${CMAKE_CURRENT_LIST_DIR}]")
|
||||||
|
message("")
|
||||||
|
hunter_gate_error_page("error.internal")
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
function(hunter_gate_fatal_error)
|
||||||
|
cmake_parse_arguments(hunter "" "ERROR_PAGE" "" "${ARGV}")
|
||||||
|
if("${hunter_ERROR_PAGE}" STREQUAL "")
|
||||||
|
hunter_gate_internal_error("Expected ERROR_PAGE")
|
||||||
|
endif()
|
||||||
|
message("")
|
||||||
|
foreach(x ${hunter_UNPARSED_ARGUMENTS})
|
||||||
|
message("[hunter ** FATAL ERROR **] ${x}")
|
||||||
|
endforeach()
|
||||||
|
message("[hunter ** FATAL ERROR **] [Directory:${CMAKE_CURRENT_LIST_DIR}]")
|
||||||
|
message("")
|
||||||
|
hunter_gate_error_page("${hunter_ERROR_PAGE}")
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
function(hunter_gate_user_error)
|
||||||
|
hunter_gate_fatal_error(${ARGV} ERROR_PAGE "error.incorrect.input.data")
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
function(hunter_gate_self root version sha1 result)
|
||||||
|
string(COMPARE EQUAL "${root}" "" is_bad)
|
||||||
|
if(is_bad)
|
||||||
|
hunter_gate_internal_error("root is empty")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
string(COMPARE EQUAL "${version}" "" is_bad)
|
||||||
|
if(is_bad)
|
||||||
|
hunter_gate_internal_error("version is empty")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
string(COMPARE EQUAL "${sha1}" "" is_bad)
|
||||||
|
if(is_bad)
|
||||||
|
hunter_gate_internal_error("sha1 is empty")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
string(SUBSTRING "${sha1}" 0 7 archive_id)
|
||||||
|
|
||||||
|
if(EXISTS "${root}/cmake/Hunter")
|
||||||
|
set(hunter_self "${root}")
|
||||||
|
else()
|
||||||
|
set(
|
||||||
|
hunter_self
|
||||||
|
"${root}/_Base/Download/Hunter/${version}/${archive_id}/Unpacked"
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set("${result}" "${hunter_self}" PARENT_SCOPE)
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
# Set HUNTER_GATE_ROOT cmake variable to suitable value.
|
||||||
|
function(hunter_gate_detect_root)
|
||||||
|
# Check CMake variable
|
||||||
|
if(HUNTER_ROOT)
|
||||||
|
set(HUNTER_GATE_ROOT "${HUNTER_ROOT}" PARENT_SCOPE)
|
||||||
|
hunter_gate_status_debug("HUNTER_ROOT detected by cmake variable")
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Check environment variable
|
||||||
|
if(DEFINED ENV{HUNTER_ROOT})
|
||||||
|
set(HUNTER_GATE_ROOT "$ENV{HUNTER_ROOT}" PARENT_SCOPE)
|
||||||
|
hunter_gate_status_debug("HUNTER_ROOT detected by environment variable")
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Check HOME environment variable
|
||||||
|
if(DEFINED ENV{HOME})
|
||||||
|
set(HUNTER_GATE_ROOT "$ENV{HOME}/.hunter" PARENT_SCOPE)
|
||||||
|
hunter_gate_status_debug("HUNTER_ROOT set using HOME environment variable")
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Check SYSTEMDRIVE and USERPROFILE environment variable (windows only)
|
||||||
|
if(WIN32)
|
||||||
|
if(DEFINED ENV{SYSTEMDRIVE})
|
||||||
|
set(HUNTER_GATE_ROOT "$ENV{SYSTEMDRIVE}/.hunter" PARENT_SCOPE)
|
||||||
|
hunter_gate_status_debug(
|
||||||
|
"HUNTER_ROOT set using SYSTEMDRIVE environment variable"
|
||||||
|
)
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(DEFINED ENV{USERPROFILE})
|
||||||
|
set(HUNTER_GATE_ROOT "$ENV{USERPROFILE}/.hunter" PARENT_SCOPE)
|
||||||
|
hunter_gate_status_debug(
|
||||||
|
"HUNTER_ROOT set using USERPROFILE environment variable"
|
||||||
|
)
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
hunter_gate_fatal_error(
|
||||||
|
"Can't detect HUNTER_ROOT"
|
||||||
|
ERROR_PAGE "error.detect.hunter.root"
|
||||||
|
)
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
function(hunter_gate_download dir)
|
||||||
|
string(
|
||||||
|
COMPARE
|
||||||
|
NOTEQUAL
|
||||||
|
"$ENV{HUNTER_DISABLE_AUTOINSTALL}"
|
||||||
|
""
|
||||||
|
disable_autoinstall
|
||||||
|
)
|
||||||
|
if(disable_autoinstall AND NOT HUNTER_RUN_INSTALL)
|
||||||
|
hunter_gate_fatal_error(
|
||||||
|
"Hunter not found in '${dir}'"
|
||||||
|
"Set HUNTER_RUN_INSTALL=ON to auto-install it from '${HUNTER_GATE_URL}'"
|
||||||
|
"Settings:"
|
||||||
|
" HUNTER_ROOT: ${HUNTER_GATE_ROOT}"
|
||||||
|
" HUNTER_SHA1: ${HUNTER_GATE_SHA1}"
|
||||||
|
ERROR_PAGE "error.run.install"
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
string(COMPARE EQUAL "${dir}" "" is_bad)
|
||||||
|
if(is_bad)
|
||||||
|
hunter_gate_internal_error("Empty 'dir' argument")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
string(COMPARE EQUAL "${HUNTER_GATE_SHA1}" "" is_bad)
|
||||||
|
if(is_bad)
|
||||||
|
hunter_gate_internal_error("HUNTER_GATE_SHA1 empty")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
string(COMPARE EQUAL "${HUNTER_GATE_URL}" "" is_bad)
|
||||||
|
if(is_bad)
|
||||||
|
hunter_gate_internal_error("HUNTER_GATE_URL empty")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(done_location "${dir}/DONE")
|
||||||
|
set(sha1_location "${dir}/SHA1")
|
||||||
|
|
||||||
|
set(build_dir "${dir}/Build")
|
||||||
|
set(cmakelists "${dir}/CMakeLists.txt")
|
||||||
|
|
||||||
|
hunter_gate_status_debug("Locking directory: ${dir}")
|
||||||
|
file(LOCK "${dir}" DIRECTORY GUARD FUNCTION)
|
||||||
|
hunter_gate_status_debug("Lock done")
|
||||||
|
|
||||||
|
if(EXISTS "${done_location}")
|
||||||
|
# while waiting for lock other instance can do all the job
|
||||||
|
hunter_gate_status_debug("File '${done_location}' found, skip install")
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
file(REMOVE_RECURSE "${build_dir}")
|
||||||
|
file(REMOVE_RECURSE "${cmakelists}")
|
||||||
|
|
||||||
|
file(MAKE_DIRECTORY "${build_dir}") # check directory permissions
|
||||||
|
|
||||||
|
# Disabling languages speeds up a little bit, reduces noise in the output
|
||||||
|
# and avoids path too long windows error
|
||||||
|
file(
|
||||||
|
WRITE
|
||||||
|
"${cmakelists}"
|
||||||
|
"cmake_minimum_required(VERSION 3.2)\n"
|
||||||
|
"project(HunterDownload LANGUAGES NONE)\n"
|
||||||
|
"include(ExternalProject)\n"
|
||||||
|
"ExternalProject_Add(\n"
|
||||||
|
" Hunter\n"
|
||||||
|
" URL\n"
|
||||||
|
" \"${HUNTER_GATE_URL}\"\n"
|
||||||
|
" URL_HASH\n"
|
||||||
|
" SHA1=${HUNTER_GATE_SHA1}\n"
|
||||||
|
" DOWNLOAD_DIR\n"
|
||||||
|
" \"${dir}\"\n"
|
||||||
|
" TLS_VERIFY\n"
|
||||||
|
" ${HUNTER_TLS_VERIFY}\n"
|
||||||
|
" SOURCE_DIR\n"
|
||||||
|
" \"${dir}/Unpacked\"\n"
|
||||||
|
" CONFIGURE_COMMAND\n"
|
||||||
|
" \"\"\n"
|
||||||
|
" BUILD_COMMAND\n"
|
||||||
|
" \"\"\n"
|
||||||
|
" INSTALL_COMMAND\n"
|
||||||
|
" \"\"\n"
|
||||||
|
")\n"
|
||||||
|
)
|
||||||
|
|
||||||
|
if(HUNTER_STATUS_DEBUG)
|
||||||
|
set(logging_params "")
|
||||||
|
else()
|
||||||
|
set(logging_params OUTPUT_QUIET)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
hunter_gate_status_debug("Run generate")
|
||||||
|
|
||||||
|
# Need to add toolchain file too.
|
||||||
|
# Otherwise on Visual Studio + MDD this will fail with error:
|
||||||
|
# "Could not find an appropriate version of the Windows 10 SDK installed on this machine"
|
||||||
|
if(EXISTS "${CMAKE_TOOLCHAIN_FILE}")
|
||||||
|
get_filename_component(absolute_CMAKE_TOOLCHAIN_FILE "${CMAKE_TOOLCHAIN_FILE}" ABSOLUTE)
|
||||||
|
set(toolchain_arg "-DCMAKE_TOOLCHAIN_FILE=${absolute_CMAKE_TOOLCHAIN_FILE}")
|
||||||
|
else()
|
||||||
|
# 'toolchain_arg' can't be empty
|
||||||
|
set(toolchain_arg "-DCMAKE_TOOLCHAIN_FILE=")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
string(COMPARE EQUAL "${CMAKE_MAKE_PROGRAM}" "" no_make)
|
||||||
|
if(no_make)
|
||||||
|
set(make_arg "")
|
||||||
|
else()
|
||||||
|
# Test case: remove Ninja from PATH but set it via CMAKE_MAKE_PROGRAM
|
||||||
|
set(make_arg "-DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
execute_process(
|
||||||
|
COMMAND
|
||||||
|
"${CMAKE_COMMAND}"
|
||||||
|
"-H${dir}"
|
||||||
|
"-B${build_dir}"
|
||||||
|
"-G${CMAKE_GENERATOR}"
|
||||||
|
"${toolchain_arg}"
|
||||||
|
${make_arg}
|
||||||
|
WORKING_DIRECTORY "${dir}"
|
||||||
|
RESULT_VARIABLE download_result
|
||||||
|
${logging_params}
|
||||||
|
)
|
||||||
|
|
||||||
|
if(NOT download_result EQUAL 0)
|
||||||
|
hunter_gate_internal_error(
|
||||||
|
"Configure project failed."
|
||||||
|
"To reproduce the error run: ${CMAKE_COMMAND} -H${dir} -B${build_dir} -G${CMAKE_GENERATOR} ${toolchain_arg} ${make_arg}"
|
||||||
|
"In directory ${dir}"
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
hunter_gate_status_print(
|
||||||
|
"Initializing Hunter workspace (${HUNTER_GATE_SHA1})"
|
||||||
|
" ${HUNTER_GATE_URL}"
|
||||||
|
" -> ${dir}"
|
||||||
|
)
|
||||||
|
execute_process(
|
||||||
|
COMMAND "${CMAKE_COMMAND}" --build "${build_dir}"
|
||||||
|
WORKING_DIRECTORY "${dir}"
|
||||||
|
RESULT_VARIABLE download_result
|
||||||
|
${logging_params}
|
||||||
|
)
|
||||||
|
|
||||||
|
if(NOT download_result EQUAL 0)
|
||||||
|
hunter_gate_internal_error("Build project failed")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
file(REMOVE_RECURSE "${build_dir}")
|
||||||
|
file(REMOVE_RECURSE "${cmakelists}")
|
||||||
|
|
||||||
|
file(WRITE "${sha1_location}" "${HUNTER_GATE_SHA1}")
|
||||||
|
file(WRITE "${done_location}" "DONE")
|
||||||
|
|
||||||
|
hunter_gate_status_debug("Finished")
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
# Must be a macro so master file 'cmake/Hunter' can
|
||||||
|
# apply all variables easily just by 'include' command
|
||||||
|
# (otherwise PARENT_SCOPE magic needed)
|
||||||
|
macro(HunterGate)
|
||||||
|
if(HUNTER_GATE_DONE)
|
||||||
|
# variable HUNTER_GATE_DONE set explicitly for external project
|
||||||
|
# (see `hunter_download`)
|
||||||
|
set_property(GLOBAL PROPERTY HUNTER_GATE_DONE YES)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# First HunterGate command will init Hunter, others will be ignored
|
||||||
|
get_property(_hunter_gate_done GLOBAL PROPERTY HUNTER_GATE_DONE SET)
|
||||||
|
|
||||||
|
if(NOT HUNTER_ENABLED)
|
||||||
|
# Empty function to avoid error "unknown function"
|
||||||
|
function(hunter_add_package)
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
set(
|
||||||
|
_hunter_gate_disabled_mode_dir
|
||||||
|
"${CMAKE_CURRENT_LIST_DIR}/cmake/Hunter/disabled-mode"
|
||||||
|
)
|
||||||
|
if(EXISTS "${_hunter_gate_disabled_mode_dir}")
|
||||||
|
hunter_gate_status_debug(
|
||||||
|
"Adding \"disabled-mode\" modules: ${_hunter_gate_disabled_mode_dir}"
|
||||||
|
)
|
||||||
|
list(APPEND CMAKE_PREFIX_PATH "${_hunter_gate_disabled_mode_dir}")
|
||||||
|
endif()
|
||||||
|
elseif(_hunter_gate_done)
|
||||||
|
hunter_gate_status_debug("Secondary HunterGate (use old settings)")
|
||||||
|
hunter_gate_self(
|
||||||
|
"${HUNTER_CACHED_ROOT}"
|
||||||
|
"${HUNTER_VERSION}"
|
||||||
|
"${HUNTER_SHA1}"
|
||||||
|
_hunter_self
|
||||||
|
)
|
||||||
|
include("${_hunter_self}/cmake/Hunter")
|
||||||
|
else()
|
||||||
|
set(HUNTER_GATE_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}")
|
||||||
|
|
||||||
|
string(COMPARE NOTEQUAL "${PROJECT_NAME}" "" _have_project_name)
|
||||||
|
if(_have_project_name)
|
||||||
|
hunter_gate_fatal_error(
|
||||||
|
"Please set HunterGate *before* 'project' command. "
|
||||||
|
"Detected project: ${PROJECT_NAME}"
|
||||||
|
ERROR_PAGE "error.huntergate.before.project"
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
cmake_parse_arguments(
|
||||||
|
HUNTER_GATE "LOCAL" "URL;SHA1;GLOBAL;FILEPATH" "" ${ARGV}
|
||||||
|
)
|
||||||
|
|
||||||
|
string(COMPARE EQUAL "${HUNTER_GATE_SHA1}" "" _empty_sha1)
|
||||||
|
string(COMPARE EQUAL "${HUNTER_GATE_URL}" "" _empty_url)
|
||||||
|
string(
|
||||||
|
COMPARE
|
||||||
|
NOTEQUAL
|
||||||
|
"${HUNTER_GATE_UNPARSED_ARGUMENTS}"
|
||||||
|
""
|
||||||
|
_have_unparsed
|
||||||
|
)
|
||||||
|
string(COMPARE NOTEQUAL "${HUNTER_GATE_GLOBAL}" "" _have_global)
|
||||||
|
string(COMPARE NOTEQUAL "${HUNTER_GATE_FILEPATH}" "" _have_filepath)
|
||||||
|
|
||||||
|
if(_have_unparsed)
|
||||||
|
hunter_gate_user_error(
|
||||||
|
"HunterGate unparsed arguments: ${HUNTER_GATE_UNPARSED_ARGUMENTS}"
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
if(_empty_sha1)
|
||||||
|
hunter_gate_user_error("SHA1 suboption of HunterGate is mandatory")
|
||||||
|
endif()
|
||||||
|
if(_empty_url)
|
||||||
|
hunter_gate_user_error("URL suboption of HunterGate is mandatory")
|
||||||
|
endif()
|
||||||
|
if(_have_global)
|
||||||
|
if(HUNTER_GATE_LOCAL)
|
||||||
|
hunter_gate_user_error("Unexpected LOCAL (already has GLOBAL)")
|
||||||
|
endif()
|
||||||
|
if(_have_filepath)
|
||||||
|
hunter_gate_user_error("Unexpected FILEPATH (already has GLOBAL)")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
if(HUNTER_GATE_LOCAL)
|
||||||
|
if(_have_global)
|
||||||
|
hunter_gate_user_error("Unexpected GLOBAL (already has LOCAL)")
|
||||||
|
endif()
|
||||||
|
if(_have_filepath)
|
||||||
|
hunter_gate_user_error("Unexpected FILEPATH (already has LOCAL)")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
if(_have_filepath)
|
||||||
|
if(_have_global)
|
||||||
|
hunter_gate_user_error("Unexpected GLOBAL (already has FILEPATH)")
|
||||||
|
endif()
|
||||||
|
if(HUNTER_GATE_LOCAL)
|
||||||
|
hunter_gate_user_error("Unexpected LOCAL (already has FILEPATH)")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
hunter_gate_detect_root() # set HUNTER_GATE_ROOT
|
||||||
|
|
||||||
|
# Beautify path, fix probable problems with windows path slashes
|
||||||
|
get_filename_component(
|
||||||
|
HUNTER_GATE_ROOT "${HUNTER_GATE_ROOT}" ABSOLUTE
|
||||||
|
)
|
||||||
|
hunter_gate_status_debug("HUNTER_ROOT: ${HUNTER_GATE_ROOT}")
|
||||||
|
if(NOT HUNTER_ALLOW_SPACES_IN_PATH)
|
||||||
|
string(FIND "${HUNTER_GATE_ROOT}" " " _contain_spaces)
|
||||||
|
if(NOT _contain_spaces EQUAL -1)
|
||||||
|
hunter_gate_fatal_error(
|
||||||
|
"HUNTER_ROOT (${HUNTER_GATE_ROOT}) contains spaces."
|
||||||
|
"Set HUNTER_ALLOW_SPACES_IN_PATH=ON to skip this error"
|
||||||
|
"(Use at your own risk!)"
|
||||||
|
ERROR_PAGE "error.spaces.in.hunter.root"
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
string(
|
||||||
|
REGEX
|
||||||
|
MATCH
|
||||||
|
"[0-9]+\\.[0-9]+\\.[0-9]+[-_a-z0-9]*"
|
||||||
|
HUNTER_GATE_VERSION
|
||||||
|
"${HUNTER_GATE_URL}"
|
||||||
|
)
|
||||||
|
string(COMPARE EQUAL "${HUNTER_GATE_VERSION}" "" _is_empty)
|
||||||
|
if(_is_empty)
|
||||||
|
set(HUNTER_GATE_VERSION "unknown")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
hunter_gate_self(
|
||||||
|
"${HUNTER_GATE_ROOT}"
|
||||||
|
"${HUNTER_GATE_VERSION}"
|
||||||
|
"${HUNTER_GATE_SHA1}"
|
||||||
|
_hunter_self
|
||||||
|
)
|
||||||
|
|
||||||
|
set(_master_location "${_hunter_self}/cmake/Hunter")
|
||||||
|
if(EXISTS "${HUNTER_GATE_ROOT}/cmake/Hunter")
|
||||||
|
# Hunter downloaded manually (e.g. by 'git clone')
|
||||||
|
set(_unused "xxxxxxxxxx")
|
||||||
|
set(HUNTER_GATE_SHA1 "${_unused}")
|
||||||
|
set(HUNTER_GATE_VERSION "${_unused}")
|
||||||
|
else()
|
||||||
|
get_filename_component(_archive_id_location "${_hunter_self}/.." ABSOLUTE)
|
||||||
|
set(_done_location "${_archive_id_location}/DONE")
|
||||||
|
set(_sha1_location "${_archive_id_location}/SHA1")
|
||||||
|
|
||||||
|
# Check Hunter already downloaded by HunterGate
|
||||||
|
if(NOT EXISTS "${_done_location}")
|
||||||
|
hunter_gate_download("${_archive_id_location}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(NOT EXISTS "${_done_location}")
|
||||||
|
hunter_gate_internal_error("hunter_gate_download failed")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(NOT EXISTS "${_sha1_location}")
|
||||||
|
hunter_gate_internal_error("${_sha1_location} not found")
|
||||||
|
endif()
|
||||||
|
file(READ "${_sha1_location}" _sha1_value)
|
||||||
|
string(TOLOWER "${_sha1_value}" _sha1_value_lower)
|
||||||
|
string(TOLOWER "${HUNTER_GATE_SHA1}" _HUNTER_GATE_SHA1_lower)
|
||||||
|
string(COMPARE EQUAL "${_sha1_value_lower}" "${_HUNTER_GATE_SHA1_lower}" _is_equal)
|
||||||
|
if(NOT _is_equal)
|
||||||
|
hunter_gate_internal_error(
|
||||||
|
"Short SHA1 collision:"
|
||||||
|
" ${_sha1_value} (from ${_sha1_location})"
|
||||||
|
" ${HUNTER_GATE_SHA1} (HunterGate)"
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
if(NOT EXISTS "${_master_location}")
|
||||||
|
hunter_gate_user_error(
|
||||||
|
"Master file not found:"
|
||||||
|
" ${_master_location}"
|
||||||
|
"try to update Hunter/HunterGate"
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
include("${_master_location}")
|
||||||
|
set_property(GLOBAL PROPERTY HUNTER_GATE_DONE YES)
|
||||||
|
endif()
|
||||||
|
endmacro()
|
@ -1,42 +1,164 @@
|
|||||||
jobs:
|
jobs:
|
||||||
- job: ubuntu16
|
- job: ubuntu18
|
||||||
timeoutInMinutes: 120
|
timeoutInMinutes: 120
|
||||||
pool:
|
pool:
|
||||||
vmImage: 'Ubuntu-16.04'
|
vmImage: 'ubuntu-18.04'
|
||||||
steps:
|
steps:
|
||||||
- script: |
|
- script: |
|
||||||
sudo apt-get update
|
sudo apt update
|
||||||
sudo apt-get install -y software-properties-common
|
sudo apt install -y software-properties-common
|
||||||
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
|
# sudo add-apt-repository ppa:ubuntu-toolchain-r/test
|
||||||
sudo apt-get update
|
sudo apt update
|
||||||
sudo apt-get install cmake build-essential -y
|
sudo apt install cmake build-essential -y
|
||||||
sudo apt-get install gcc-8 g++-8 -y
|
sudo apt install gcc-8 g++-8 -y
|
||||||
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 60
|
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 60
|
||||||
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-8 60
|
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-8 60
|
||||||
sudo apt-get install bison autoconf automake -y
|
sudo apt install bison autoconf automake -y
|
||||||
sudo apt-get install libpng12-dev -y
|
sudo apt install libpng-dev -y
|
||||||
sudo apt-get install libjpeg-dev -y
|
sudo apt install libjpeg-dev -y
|
||||||
sudo apt-get install libgif-dev libfreetype6-dev -y
|
sudo apt install libgif-dev libfreetype6-dev -y
|
||||||
sudo apt-get install freeglut3-dev -y
|
sudo apt install freeglut3-dev -y
|
||||||
sudo apt-get install liblua5.1-dev libluabind-dev libcpptest-dev -y
|
sudo apt install liblua5.2-dev libluabind-dev libcpptest-dev -y
|
||||||
sudo apt-get install libogg-dev libvorbis-dev libopenal-dev -y
|
sudo apt install libogg-dev libvorbis-dev libopenal-dev -y
|
||||||
sudo apt-get install libavcodec-dev libavformat-dev libavdevice-dev libswscale-dev libpostproc-dev -y
|
sudo apt install libavcodec-dev libavformat-dev libavdevice-dev libswscale-dev libpostproc-dev -y
|
||||||
sudo apt-get install libmysqlclient-dev -y
|
sudo apt install libmysqlclient-dev -y
|
||||||
sudo apt-get install libxml2-dev -y
|
sudo apt install libxml2-dev -y
|
||||||
sudo apt-get install libcurl4-openssl-dev libssl-dev -y
|
sudo apt install libcurl4-openssl-dev libssl-dev -y
|
||||||
sudo apt-get install libsquish-dev -y
|
sudo apt install libsquish-dev -y
|
||||||
sudo apt-get install liblzma-dev -y
|
sudo apt install liblzma-dev -y
|
||||||
sudo apt-get install libgsf-1-dev -y
|
sudo apt install libgsf-1-dev -y
|
||||||
sudo apt-get install qtbase5-dev qttools5-dev qttools5-dev-tools
|
sudo apt install qtbase5-dev qttools5-dev qttools5-dev-tools
|
||||||
|
displayName: 'Dependencies'
|
||||||
|
- script: |
|
||||||
|
mkdir build
|
||||||
|
cmake --version
|
||||||
|
cd build
|
||||||
|
cmake -DWITH_STATIC=ON -DWITH_NEL_TESTS=OFF -DWITH_NEL_SAMPLES=ON -DWITH_LUA51=OFF -DWITH_LUA52=ON -DWITH_RYZOM=ON -DWITH_RYZOM_SERVER=ON -DWITH_RYZOM_CLIENT=ON -DWITH_RYZOM_TOOLS=ON -DWITH_NEL_TOOLS=ON -DWITH_NELNS=ON -DWITH_NELNS_LOGIN_SYSTEM=ON -DWITH_NELNS_SERVER=ON -DWITH_QT5=ON -DWITH_LIBGSF=ON ..
|
||||||
|
cat CMakeCache.txt
|
||||||
|
displayName: 'CMake'
|
||||||
|
- script: |
|
||||||
|
cd build
|
||||||
|
make -j`nproc`
|
||||||
|
displayName: 'Make'
|
||||||
|
- job: ubuntu20
|
||||||
|
timeoutInMinutes: 120
|
||||||
|
pool:
|
||||||
|
vmImage: 'ubuntu-20.04'
|
||||||
|
steps:
|
||||||
|
- script: |
|
||||||
|
sudo apt update
|
||||||
|
sudo apt install -y software-properties-common
|
||||||
|
sudo apt update
|
||||||
|
sudo apt install cmake build-essential -y
|
||||||
|
sudo apt install bison autoconf automake -y
|
||||||
|
sudo apt install libpng-dev -y
|
||||||
|
sudo apt install libjpeg-dev -y
|
||||||
|
sudo apt install libgif-dev libfreetype6-dev -y
|
||||||
|
sudo apt install freeglut3-dev -y
|
||||||
|
sudo apt install liblua5.2-dev libluabind-dev libcpptest-dev -y
|
||||||
|
sudo apt install libogg-dev libvorbis-dev libopenal-dev -y
|
||||||
|
sudo apt install libavcodec-dev libavformat-dev libavdevice-dev libswscale-dev libpostproc-dev -y
|
||||||
|
sudo apt install libmysqlclient-dev -y
|
||||||
|
sudo apt install libxml2-dev -y
|
||||||
|
sudo apt install libcurl4-openssl-dev libssl-dev -y
|
||||||
|
sudo apt install libsquish-dev -y
|
||||||
|
sudo apt install liblzma-dev -y
|
||||||
|
sudo apt install libgsf-1-dev -y
|
||||||
|
sudo apt install qtbase5-dev qttools5-dev qttools5-dev-tools
|
||||||
displayName: 'Dependencies'
|
displayName: 'Dependencies'
|
||||||
- script: |
|
- script: |
|
||||||
mkdir build
|
mkdir build
|
||||||
cmake --version
|
cmake --version
|
||||||
cd build
|
cd build
|
||||||
cmake -DWITH_STATIC=ON -DWITH_NEL_TESTS=OFF -DWITH_NEL_SAMPLES=ON -DWITH_LUA51=ON -DWITH_RYZOM=ON -DWITH_RYZOM_SERVER=ON -DWITH_RYZOM_CLIENT=ON -DWITH_RYZOM_TOOLS=ON -DWITH_NEL_TOOLS=ON -DWITH_NELNS=ON -DWITH_NELNS_LOGIN_SYSTEM=ON -DWITH_NELNS_SERVER=ON -DWITH_QT5=ON -DWITH_LIBGSF=ON ../code
|
cmake -DWITH_STATIC=ON -DWITH_NEL_TESTS=OFF -DWITH_NEL_SAMPLES=ON -DWITH_LUA51=OFF -DWITH_LUA52=ON -DWITH_RYZOM=ON -DWITH_RYZOM_SERVER=ON -DWITH_RYZOM_CLIENT=ON -DWITH_RYZOM_TOOLS=ON -DWITH_NEL_TOOLS=ON -DWITH_NELNS=ON -DWITH_NELNS_LOGIN_SYSTEM=ON -DWITH_NELNS_SERVER=ON -DWITH_QT5=ON -DWITH_LIBGSF=ON ..
|
||||||
cat CMakeCache.txt
|
cat CMakeCache.txt
|
||||||
displayName: 'CMake'
|
displayName: 'CMake'
|
||||||
- script: |
|
- script: |
|
||||||
cd build
|
cd build
|
||||||
make -j`nproc`
|
make -j`nproc`
|
||||||
displayName: 'Make'
|
displayName: 'Make'
|
||||||
|
- job: windows2019
|
||||||
|
timeoutInMinutes: 120
|
||||||
|
pool:
|
||||||
|
vmImage: 'windows-2019'
|
||||||
|
steps:
|
||||||
|
- checkout: self
|
||||||
|
fetchDepth: 1
|
||||||
|
- task: Cache@2
|
||||||
|
inputs:
|
||||||
|
key: 'hunter-win2019-x64-rel'
|
||||||
|
path: "c:/.hunter/_Base/Cache"
|
||||||
|
- task: CmdLine@2
|
||||||
|
inputs:
|
||||||
|
script: |
|
||||||
|
aria2c https://download.microsoft.com/download/A/E/7/AE743F1F-632B-4809-87A9-AA1BB3458E31/DXSDK_Jun10.exe
|
||||||
|
7z x DXSDK_Jun10.exe -oC:\ -r -y
|
||||||
|
del DXSDK_Jun10.exe
|
||||||
|
- task: CMake@1
|
||||||
|
inputs:
|
||||||
|
workingDirectory: build.release
|
||||||
|
cmakeArgs: '-DCMAKE_CONFIGURATION_TYPES=Release -DHUNTER_ENABLED=ON -DHUNTER_CONFIGURATION_TYPES=Release -DFINAL_VERSION=OFF -DWITH_NEL_TESTS=OFF -DWITH_NEL_SAMPLES=OFF -DWITH_NEL_TOOLS=OFF -DWITH_RYZOM_TOOLS=OFF -DWITH_RYZOM_SERVER=OFF -DWITH_RYZOM_CLIENT=ON -DWITH_DRIVER_OPENGL=ON -DWITH_DRIVER_OPENAL=ON -DWITH_DRIVER_DIRECT3D=ON -DWITH_DRIVER_XAUDIO2=ON -DDXSDK_DIR=C:/DXSDK ..'
|
||||||
|
- task: MSBuild@1
|
||||||
|
inputs:
|
||||||
|
solution: build.release/ALL_BUILD.vcxproj
|
||||||
|
maximumCpuCount: true
|
||||||
|
configuration: release
|
||||||
|
platform: 'x64'
|
||||||
|
- job: ubuntu18hunter
|
||||||
|
timeoutInMinutes: 120
|
||||||
|
pool:
|
||||||
|
vmImage: ubuntu-18.04
|
||||||
|
steps:
|
||||||
|
- checkout: self
|
||||||
|
fetchDepth: 0
|
||||||
|
- script: |
|
||||||
|
sudo apt-get update
|
||||||
|
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends libasound2-dev libgl1-mesa-dev libjack-dev libpulse-dev libxrandr-dev libxrender-dev libxxf86vm-dev
|
||||||
|
displayName: 'Dependencies'
|
||||||
|
- task: Cache@2
|
||||||
|
inputs:
|
||||||
|
key: 'hunter317-ubuntu18-rel"'
|
||||||
|
path: "$(Pipeline.Workspace)/.hunter/_Base/Cache"
|
||||||
|
- script: |
|
||||||
|
mkdir build.release
|
||||||
|
cmake --version
|
||||||
|
cd build.release
|
||||||
|
unset SYSTEM
|
||||||
|
export MAKEFLAGS=-j`nproc`
|
||||||
|
cmake -DCMAKE_BUILD_TYPE=Release -DHUNTER_ENABLED=ON -DHUNTER_CONFIGURATION_TYPES=Release -DHUNTER_ROOT="$(Pipeline.Workspace)/.hunter" -DFINAL_VERSION=OFF -DWITH_NEL_TESTS=OFF -DWITH_NEL_SAMPLES=OFF -DWITH_NEL_TOOLS=OFF -DWITH_RYZOM_TOOLS=OFF -DWITH_RYZOM_SERVER=OFF -DWITH_RYZOM_CLIENT=ON -DWITH_DRIVER_OPENGL=ON -DWITH_DRIVER_OPENAL=ON ..
|
||||||
|
displayName: 'CMake, release'
|
||||||
|
- script: |
|
||||||
|
cd build.release
|
||||||
|
make -j`nproc`
|
||||||
|
displayName: 'Make, release'
|
||||||
|
#- task: PublishPipelineArtifact@1
|
||||||
|
# inputs:
|
||||||
|
# targetPath: build.release/bin
|
||||||
|
# artifactName: RyzomUbuntu18Release
|
||||||
|
- job: macOS11
|
||||||
|
timeoutInMinutes: 120
|
||||||
|
pool:
|
||||||
|
vmImage: 'macOS-11'
|
||||||
|
steps:
|
||||||
|
- checkout: self
|
||||||
|
fetchDepth: 0
|
||||||
|
- task: Cache@2
|
||||||
|
inputs:
|
||||||
|
key: 'hunter317-macOS11-rel"'
|
||||||
|
path: "$(Pipeline.Workspace)/.hunter/_Base/Cache"
|
||||||
|
- task: CMake@1
|
||||||
|
inputs:
|
||||||
|
workingDirectory: build.release
|
||||||
|
cmakeArgs: '-GXcode -DCMAKE_CONFIGURATION_TYPES=Release -DHUNTER_ENABLED=ON -DHUNTER_STATUS_DEBUG=ON -DHUNTER_CONFIGURATION_TYPES=Release -DHUNTER_ROOT="$(Pipeline.Workspace)/.hunter" -DWITH_LIBXML2_ICONV=OFF -DFINAL_VERSION=OFF -DWITH_NEL_TESTS=OFF -DWITH_NEL_SAMPLES=OFF -DWITH_NEL_TOOLS=OFF -DWITH_RYZOM_TOOLS=OFF -DWITH_RYZOM_SERVER=OFF -DWITH_RYZOM_CLIENT=ON -DWITH_DRIVER_OPENGL=ON -DWITH_DRIVER_OPENAL=ON -DWITH_DRIVER_DIRECT3D=OFF -DWITH_DRIVER_XAUDIO2=OFF ..'
|
||||||
|
- task: Xcode@5
|
||||||
|
inputs:
|
||||||
|
actions: 'build'
|
||||||
|
configuration: Release
|
||||||
|
sdk: macosx12.0
|
||||||
|
xcWorkspacePath: 'build.release/RyzomCore.xcodeproj'
|
||||||
|
scheme: 'ALL_BUILD'
|
||||||
|
packageApp: false
|
||||||
|
#- task: PublishPipelineArtifact@1
|
||||||
|
# inputs:
|
||||||
|
# targetPath: build.release/bin/
|
||||||
|
# artifactName: RyzomClientMacOS11Release
|
||||||
|
@ -0,0 +1,83 @@
|
|||||||
|
// Ryzom - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
|
||||||
|
// Copyright (C) 2010-2019 Winch Gate Property Limited
|
||||||
|
//
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU Affero General Public License as
|
||||||
|
// published by the Free Software Foundation, either version 3 of the
|
||||||
|
// License, or (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU Affero General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU Affero General Public License
|
||||||
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
#ifndef CL_CSS_BACKGROUND_H
|
||||||
|
#define CL_CSS_BACKGROUND_H
|
||||||
|
|
||||||
|
#include "nel/misc/types_nl.h"
|
||||||
|
#include "nel/misc/rgba.h"
|
||||||
|
#include "nel/gui/css_types.h"
|
||||||
|
#include "nel/gui/css_length.h"
|
||||||
|
|
||||||
|
namespace NLGUI
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* \brief CSS background info
|
||||||
|
* \date 2021-07-02 11:36 GMT
|
||||||
|
* \author Meelis Mägi (Nimetu)
|
||||||
|
*/
|
||||||
|
class CSSBackground
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CSSBackground()
|
||||||
|
:color(NLMISC::CRGBA::Transparent),
|
||||||
|
repeatX(CSS_VALUE_REPEAT), repeatY(CSS_VALUE_REPEAT), attachment(CSS_VALUE_SCROLL),
|
||||||
|
xAnchor(CSS_VALUE_LEFT), yAnchor(CSS_VALUE_TOP),
|
||||||
|
clip(CSS_VALUE_BORDER_BOX), origin(CSS_VALUE_PADDING_BOX), size(CSS_VALUE_AUTO)
|
||||||
|
{}
|
||||||
|
|
||||||
|
void setImage(const std::string &value);
|
||||||
|
void setPosition(const std::string &value);
|
||||||
|
void setSize(const std::string &value);
|
||||||
|
void setRepeat(const std::string &value);
|
||||||
|
void setOrigin(const std::string &value);
|
||||||
|
void setClip(const std::string &value);
|
||||||
|
void setAttachment(const std::string &value);
|
||||||
|
void setColor(const std::string &value);
|
||||||
|
|
||||||
|
public:
|
||||||
|
// TODO: only final layer has color
|
||||||
|
NLMISC::CRGBA color;
|
||||||
|
std::string image;
|
||||||
|
|
||||||
|
CSSValueType repeatX;
|
||||||
|
CSSValueType repeatY;
|
||||||
|
CSSValueType attachment;
|
||||||
|
|
||||||
|
CSSValueType xAnchor;
|
||||||
|
CSSValueType yAnchor;
|
||||||
|
CSSLength xPosition;
|
||||||
|
CSSLength yPosition;
|
||||||
|
|
||||||
|
CSSValueType clip;
|
||||||
|
CSSValueType origin;
|
||||||
|
|
||||||
|
CSSValueType size;
|
||||||
|
CSSLength width;
|
||||||
|
CSSLength height;
|
||||||
|
|
||||||
|
private:
|
||||||
|
void positionFromOne(const std::vector<std::string> &parts);
|
||||||
|
void positionFromTwo(const std::vector<std::string> &parts);
|
||||||
|
void positionFromThree(const std::vector<std::string> &parts);
|
||||||
|
void positionFromFour(const std::vector<std::string> &parts);
|
||||||
|
};
|
||||||
|
|
||||||
|
}//namespace
|
||||||
|
|
||||||
|
#endif // CL_CSS_BACKGROUND_H
|
||||||
|
|
||||||
|
|
@ -0,0 +1,193 @@
|
|||||||
|
// Ryzom - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
|
||||||
|
// Copyright (C) 2010-2019 Winch Gate Property Limited
|
||||||
|
//
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU Affero General Public License as
|
||||||
|
// published by the Free Software Foundation, either version 3 of the
|
||||||
|
// License, or (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU Affero General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU Affero General Public License
|
||||||
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef NL_CSS_BACKGROUND_RENDERER_H
|
||||||
|
#define NL_CSS_BACKGROUND_RENDERER_H
|
||||||
|
|
||||||
|
#include "nel/misc/types_nl.h"
|
||||||
|
#include "nel/misc/rgba.h"
|
||||||
|
#include "nel/misc/geom_ext.h"
|
||||||
|
#include "nel/gui/css_types.h"
|
||||||
|
#include "nel/gui/css_background.h"
|
||||||
|
|
||||||
|
namespace NLGUI
|
||||||
|
{
|
||||||
|
class CInterfaceElement;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Border renderer for GUI classes
|
||||||
|
* \date 2021-06-29 15:17 GMT
|
||||||
|
* \author Meelis Mägi (Nimetu)
|
||||||
|
*/
|
||||||
|
class CSSBackgroundRenderer
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// alpha value from parent
|
||||||
|
uint8 CurrentAlpha;
|
||||||
|
|
||||||
|
// TODO: should be moved to CSSBackground
|
||||||
|
sint32 TextureId;
|
||||||
|
|
||||||
|
public:
|
||||||
|
CSSBackgroundRenderer();
|
||||||
|
~CSSBackgroundRenderer();
|
||||||
|
|
||||||
|
// return true if no background is set
|
||||||
|
bool isEmpty() const
|
||||||
|
{
|
||||||
|
return m_Background.image.empty() && m_Background.color.A == 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void setModulateGlobalColor(bool m) { m_ModulateGlobalColor = m; }
|
||||||
|
|
||||||
|
void updateCoords();
|
||||||
|
void invalidateCoords() { m_Dirty = true; }
|
||||||
|
void invalidateContent() { m_Dirty = true; };
|
||||||
|
|
||||||
|
void clear();
|
||||||
|
void setBackground(const CSSBackground &bg);
|
||||||
|
|
||||||
|
// helper function to change background image
|
||||||
|
void setImage(const std::string &bgtex);
|
||||||
|
void setImageRepeat(bool b);
|
||||||
|
void setImageCover(bool b);
|
||||||
|
|
||||||
|
// helper function to change background color
|
||||||
|
void setColor(const NLMISC::CRGBA &color)
|
||||||
|
{
|
||||||
|
m_Dirty = true;
|
||||||
|
m_Background.color = color;
|
||||||
|
}
|
||||||
|
|
||||||
|
NLMISC::CRGBA getColor() const
|
||||||
|
{
|
||||||
|
return m_Background.color;
|
||||||
|
}
|
||||||
|
|
||||||
|
// override painting area to be at least the size of viewport (ie, <html> background)
|
||||||
|
void setFillViewport(bool b) {
|
||||||
|
m_Dirty = true;
|
||||||
|
m_FillViewport = b;
|
||||||
|
}
|
||||||
|
|
||||||
|
void setViewport(CInterfaceElement *root)
|
||||||
|
{
|
||||||
|
m_Dirty = true;
|
||||||
|
m_Viewport = root;
|
||||||
|
}
|
||||||
|
|
||||||
|
void setBorderArea(sint32 x, sint32 y, sint32 w, sint32 h)
|
||||||
|
{
|
||||||
|
m_Dirty = true;
|
||||||
|
m_BorderX = x;
|
||||||
|
m_BorderY = y;
|
||||||
|
m_BorderW = w;
|
||||||
|
m_BorderH = h;
|
||||||
|
}
|
||||||
|
|
||||||
|
void setPaddingArea(sint32 x, sint32 y, sint32 w, sint32 h)
|
||||||
|
{
|
||||||
|
m_Dirty = true;
|
||||||
|
m_PaddingX = x;
|
||||||
|
m_PaddingY = y;
|
||||||
|
m_PaddingW = w;
|
||||||
|
m_PaddingH = h;
|
||||||
|
}
|
||||||
|
|
||||||
|
void setContentArea(sint32 x, sint32 y, sint32 w, sint32 h)
|
||||||
|
{
|
||||||
|
m_Dirty = true;
|
||||||
|
m_ContentX = x;
|
||||||
|
m_ContentY = y;
|
||||||
|
m_ContentW = w;
|
||||||
|
m_ContentH = h;
|
||||||
|
}
|
||||||
|
|
||||||
|
// sizes for em, rem units
|
||||||
|
void setFontSize(float rootFontSize, float fontSize)
|
||||||
|
{
|
||||||
|
m_Dirty = true;
|
||||||
|
m_RootFontSize = rootFontSize;
|
||||||
|
m_FontSize = fontSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
void draw();
|
||||||
|
|
||||||
|
private:
|
||||||
|
sint32 m_BorderX, m_BorderY, m_BorderW, m_BorderH;
|
||||||
|
sint32 m_PaddingX, m_PaddingY, m_PaddingW, m_PaddingH;
|
||||||
|
sint32 m_ContentX, m_ContentY, m_ContentW, m_ContentH;
|
||||||
|
|
||||||
|
// font size for 'rem'
|
||||||
|
float m_RootFontSize;
|
||||||
|
|
||||||
|
// font size for 'em'
|
||||||
|
float m_FontSize;
|
||||||
|
|
||||||
|
// viewport element for vw,wh,vmin,vmax
|
||||||
|
CInterfaceElement* m_Viewport;
|
||||||
|
|
||||||
|
struct SDrawQueue
|
||||||
|
{
|
||||||
|
sint32 TextureId;
|
||||||
|
NLMISC::CQuadUV Quad;
|
||||||
|
NLMISC::CRGBA Color;
|
||||||
|
};
|
||||||
|
std::vector<SDrawQueue> m_DrawQueue;
|
||||||
|
|
||||||
|
const sint8 m_RenderLayer;
|
||||||
|
bool m_ModulateGlobalColor;
|
||||||
|
// if true, painting area returns area at least the size of viewport (ie, <html> background)
|
||||||
|
bool m_FillViewport;
|
||||||
|
|
||||||
|
// if true, then updateCoords() is called from draw()
|
||||||
|
bool m_Dirty;
|
||||||
|
|
||||||
|
CSSBackground m_Background;
|
||||||
|
|
||||||
|
// get clip area based on background-clip
|
||||||
|
void getPaintingArea(const CSSBackground &bg, sint32 &areaX, sint32 &areaY, sint32 &areaW, sint32 &areaH) const;
|
||||||
|
|
||||||
|
// get positioning area based on background-origin
|
||||||
|
void getPositioningArea(const CSSBackground &bg, sint32 &areaX, sint32 &areaY, sint32 &areaW, sint32 &areaH) const;
|
||||||
|
|
||||||
|
// calculate image size based on background-size
|
||||||
|
void calculateSize(const CSSBackground &bg, sint32 &texW, sint32 &texH) const;
|
||||||
|
|
||||||
|
// calculate image position based on background-position
|
||||||
|
void calculatePosition(const CSSBackground &bg, sint32 &texX, sint32 &texY, sint32 &texW, sint32 &texH) const;
|
||||||
|
|
||||||
|
// calculate image tile position, size, count, and spacing based on background-repeat
|
||||||
|
void calculateTiles(const CSSBackground &bg, sint32 &texX, sint32 &texY, sint32 &texW, sint32 &texH, sint32 &tilesX, sint32 &tilesY, sint32 &spacingX, sint32 &spacingY) const;
|
||||||
|
|
||||||
|
// position, size, and count for first tile to cover an area
|
||||||
|
void getImageTile(sint32 &tilePos, sint32 &tileSize, sint32 &spacing, sint32 &tiles, sint32 areaPos, sint32 areaSize, CSSValueType repeat) const;
|
||||||
|
|
||||||
|
// push background color to draw queue
|
||||||
|
void buildColorQuads(const CSSBackground &bg);
|
||||||
|
|
||||||
|
// push background image to draw quque
|
||||||
|
void buildImageQuads(const CSSBackground &bg, sint32 textureId);
|
||||||
|
|
||||||
|
}; // CSSBackgroundRenderer
|
||||||
|
|
||||||
|
}//namespace
|
||||||
|
|
||||||
|
#endif // NL_CSS_BACKGROUND_RENDERER_H
|
||||||
|
|
||||||
|
|
@ -0,0 +1,72 @@
|
|||||||
|
// Ryzom - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
|
||||||
|
// Copyright (C) 2010-2019 Winch Gate Property Limited
|
||||||
|
//
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU Affero General Public License as
|
||||||
|
// published by the Free Software Foundation, either version 3 of the
|
||||||
|
// License, or (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU Affero General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU Affero General Public License
|
||||||
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
#ifndef CL_CSS_BORDER_H
|
||||||
|
#define CL_CSS_BORDER_H
|
||||||
|
|
||||||
|
#include "nel/misc/types_nl.h"
|
||||||
|
#include "nel/misc/rgba.h"
|
||||||
|
#include "nel/gui/css_types.h"
|
||||||
|
#include "nel/gui/css_length.h"
|
||||||
|
|
||||||
|
namespace NLGUI
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* \brief CSS border info
|
||||||
|
* \date 2021-07-23 09:51 GMT
|
||||||
|
* \author Meelis Mägi (Nimetu)
|
||||||
|
*/
|
||||||
|
class CSSBorder
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CSSBorder()
|
||||||
|
{
|
||||||
|
reset();
|
||||||
|
}
|
||||||
|
|
||||||
|
CSSBorder(uint width, CSSLineStyle style, NLMISC::CRGBA color)
|
||||||
|
{
|
||||||
|
set(width, style, color);
|
||||||
|
}
|
||||||
|
|
||||||
|
void reset()
|
||||||
|
{
|
||||||
|
set(CSS_LINE_WIDTH_MEDIUM, CSS_LINE_STYLE_NONE, NLMISC::CRGBA::Transparent);
|
||||||
|
}
|
||||||
|
|
||||||
|
void set(uint width, CSSLineStyle style, NLMISC::CRGBA color)
|
||||||
|
{
|
||||||
|
Width.setFloatValue(width, "px");
|
||||||
|
Style = style;
|
||||||
|
Color = color;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool empty() const
|
||||||
|
{
|
||||||
|
return Style == CSS_LINE_STYLE_NONE || Style == CSS_LINE_STYLE_HIDDEN
|
||||||
|
|| Width.getFloat() == 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
CSSLength Width;
|
||||||
|
CSSLineStyle Style;
|
||||||
|
NLMISC::CRGBA Color;
|
||||||
|
};
|
||||||
|
|
||||||
|
}//namespace
|
||||||
|
|
||||||
|
#endif // CL_CSS_BORDER_H
|
||||||
|
|
||||||
|
|
@ -0,0 +1,76 @@
|
|||||||
|
// Ryzom - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
|
||||||
|
// Copyright (C) 2010-2021 Winch Gate Property Limited
|
||||||
|
//
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU Affero General Public License as
|
||||||
|
// published by the Free Software Foundation, either version 3 of the
|
||||||
|
// License, or (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU Affero General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU Affero General Public License
|
||||||
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
#ifndef CL_CSS_LENGTH_H
|
||||||
|
#define CL_CSS_LENGTH_H
|
||||||
|
|
||||||
|
#include "nel/misc/types_nl.h"
|
||||||
|
#include "nel/gui/css_types.h"
|
||||||
|
|
||||||
|
namespace NLGUI
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* \brief CSS types used in GUI classes
|
||||||
|
* \date 2021-07-02 11:36 GMT
|
||||||
|
* \author Meelis Mägi (Nimetu)
|
||||||
|
*/
|
||||||
|
|
||||||
|
class CSSLength
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
enum Kind {
|
||||||
|
Auto, Relative, Fixed
|
||||||
|
};
|
||||||
|
|
||||||
|
CSSLength(float value = 0, CSSUnitType unit = CSS_UNIT_NONE, Kind kind = Auto)
|
||||||
|
: m_Value(value), m_Unit(unit), m_Kind(Auto)
|
||||||
|
{}
|
||||||
|
|
||||||
|
void setAuto() { m_Kind = Auto; }
|
||||||
|
bool parseValue(const std::string &value, bool allowPercent = true, bool allowNegative = false);
|
||||||
|
void setFloatValue(float f, const std::string &unit);
|
||||||
|
|
||||||
|
float getValue() const;
|
||||||
|
float getFloat() const { return m_Value; }
|
||||||
|
|
||||||
|
bool isPercent() const { return m_Unit == CSS_UNIT_PERCENT; }
|
||||||
|
|
||||||
|
bool isAuto() const { return m_Kind == Auto; }
|
||||||
|
bool isRelative() const { return m_Kind == Relative; }
|
||||||
|
|
||||||
|
// % uses relValue
|
||||||
|
// em uses emSize
|
||||||
|
// rem uses remSize
|
||||||
|
// vw,vh,vi,vb,vmin,vmax uses vwSize/vhSize
|
||||||
|
float calculate(uint32 relValue, uint32 emSize, uint32 remSize, uint32 vwSize, uint32 whSize) const;
|
||||||
|
|
||||||
|
CSSUnitType getUnit() const { return m_Unit; }
|
||||||
|
|
||||||
|
std::string toString() const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
void setUnit(const std::string &unit);
|
||||||
|
|
||||||
|
float m_Value;
|
||||||
|
CSSUnitType m_Unit;
|
||||||
|
Kind m_Kind;
|
||||||
|
};
|
||||||
|
|
||||||
|
}//namespace
|
||||||
|
|
||||||
|
#endif // CL_CSS_LENGTH_H
|
||||||
|
|
||||||
|
|
@ -0,0 +1,83 @@
|
|||||||
|
// NeL - MMORPG Framework <https://wiki.ryzom.dev/>
|
||||||
|
// Copyright (C) 2020 Jan BOON (Kaetemi) <jan.boon@kaetemi.be>
|
||||||
|
//
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU Affero General Public License as
|
||||||
|
// published by the Free Software Foundation, either version 3 of the
|
||||||
|
// License, or (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU Affero General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU Affero General Public License
|
||||||
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
#ifndef NLMISC_DEEP_PTR_H
|
||||||
|
#define NLMISC_DEEP_PTR_H
|
||||||
|
|
||||||
|
#include <nel/misc/types_nl.h>
|
||||||
|
|
||||||
|
namespace NLMISC {
|
||||||
|
|
||||||
|
/// Pointer template with deep copy and move semantics
|
||||||
|
template<class T>
|
||||||
|
class CDeepPtr
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
NL_FORCE_INLINE CDeepPtr() : m(NULL) { } //< Null
|
||||||
|
NL_FORCE_INLINE ~CDeepPtr() { delete m; }
|
||||||
|
|
||||||
|
NL_FORCE_INLINE CDeepPtr(const CDeepPtr &p) : m(p.m ? new T(*p) : NULL) { } //< Copy operator
|
||||||
|
NL_FORCE_INLINE CDeepPtr &operator=(const CDeepPtr &p) { if (p.m) { if (!m) m = new T(*p); else *m = *p; } else { delete m; m = NULL; } return *this; } //< Copy operator
|
||||||
|
|
||||||
|
#ifdef NL_CPP14
|
||||||
|
NL_FORCE_INLINE CDeepPtr(CDeepPtr &&p) noexcept : m(p.m) { p.m = NULL; } //< Move operator
|
||||||
|
NL_FORCE_INLINE CDeepPtr &operator=(CDeepPtr &&p) noexcept { delete m; m = p.m; p.m = NULL; return *this; } //< Move operator
|
||||||
|
#endif
|
||||||
|
|
||||||
|
NL_FORCE_INLINE CDeepPtr(T *p) : m(p) { } //< Initializer
|
||||||
|
NL_FORCE_INLINE CDeepPtr &operator=(T *p) { delete m; m = p; return *this; } //< Initializer
|
||||||
|
|
||||||
|
NL_FORCE_INLINE bool operator==(const CDeepPtr &p) const { return /* (m == p.m) || */ (m && p.m && *m == *p); }
|
||||||
|
NL_FORCE_INLINE bool operator!=(const CDeepPtr &p) const { return !(*this == p); }
|
||||||
|
|
||||||
|
NL_FORCE_INLINE bool operator==(const T *p) const { return (m == p) || (m && p && *m == *p); }
|
||||||
|
NL_FORCE_INLINE bool operator!=(const T *p) const { return !(*this == p); }
|
||||||
|
|
||||||
|
NL_FORCE_INLINE bool operator==(const T &p) const { return (m == &p) || (m && *m == p); }
|
||||||
|
NL_FORCE_INLINE bool operator!=(const T &p) const { return !(*this == p); }
|
||||||
|
|
||||||
|
NL_FORCE_INLINE bool operator==(long int p) const { return (*this == (const T *)(ptrdiff_t)p); } //< == NULL
|
||||||
|
NL_FORCE_INLINE bool operator!=(long int p) const { return (*this != (const T *)(ptrdiff_t)p); } //< != NULL
|
||||||
|
|
||||||
|
NL_FORCE_INLINE bool operator==(int p) const { return (*this == (const T *)(ptrdiff_t)p); } //< == 0
|
||||||
|
NL_FORCE_INLINE bool operator!=(int p) const { return (*this != (const T *)(ptrdiff_t)p); } //< != 0
|
||||||
|
|
||||||
|
#ifdef NL_CPP14
|
||||||
|
NL_FORCE_INLINE bool operator==(nullptr_t p) const { return (*this == (const T *)(ptrdiff_t)p); } //< == nullptr
|
||||||
|
NL_FORCE_INLINE bool operator!=(nullptr_t p) const { return (*this != (const T *)(ptrdiff_t)p); } //< != nullptr
|
||||||
|
#endif
|
||||||
|
|
||||||
|
NL_FORCE_INLINE T &operator*() { return *m; }
|
||||||
|
NL_FORCE_INLINE const T &operator*() const { return *m; }
|
||||||
|
NL_FORCE_INLINE T *operator->() { return m; }
|
||||||
|
NL_FORCE_INLINE const T *operator->() const { return m; }
|
||||||
|
|
||||||
|
NL_FORCE_INLINE operator bool() const { return m; }
|
||||||
|
NL_FORCE_INLINE bool operator!() const { return !m; }
|
||||||
|
|
||||||
|
NL_FORCE_INLINE T *ptr() { return m; }
|
||||||
|
NL_FORCE_INLINE const T *ptr() const { return m; }
|
||||||
|
|
||||||
|
private:
|
||||||
|
T *m;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
} /* namespace NLMISC */
|
||||||
|
|
||||||
|
#endif /* #ifndef NLMISC_DEEP_PTR_H */
|
||||||
|
|
||||||
|
/* end of file */
|
@ -0,0 +1,131 @@
|
|||||||
|
// NeL - MMORPG Framework <https://wiki.ryzom.dev/>
|
||||||
|
// Copyright (C) 2020 Jan BOON (Kaetemi) <jan.boon@kaetemi.be>
|
||||||
|
//
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU Affero General Public License as
|
||||||
|
// published by the Free Software Foundation, either version 3 of the
|
||||||
|
// License, or (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU Affero General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU Affero General Public License
|
||||||
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
#ifndef NLMISC_STRING_VIEW_H
|
||||||
|
#define NLMISC_STRING_VIEW_H
|
||||||
|
|
||||||
|
#include <nel/misc/types_nl.h>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
#ifdef NL_CPP14
|
||||||
|
using namespace std::string_literals;
|
||||||
|
#ifdef NL_CPP17
|
||||||
|
#include <string_view>
|
||||||
|
using namespace std::string_view_literals;
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef NL_CPP14
|
||||||
|
/// Obtain an std::string from a string literal.
|
||||||
|
#define nlstr(strLit) (strLit##s)
|
||||||
|
#else
|
||||||
|
/// Obtain an std::string from a string literal.
|
||||||
|
#define nlstr(strLit) (std::string(strLit))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef NL_CPP17
|
||||||
|
/// Obtain a string view from a string literal.
|
||||||
|
#define nlsv(strLit) (strLit##sv)
|
||||||
|
/// Obtain an std::string from a string view.
|
||||||
|
#define nlsvs(strView) (std::string(strView))
|
||||||
|
#else
|
||||||
|
/// Obtain a string view from a string literal.
|
||||||
|
#define nlsv(strLit) (CStringView(strLit, ::strlen(strLit)))
|
||||||
|
/// Obtain an std::string from a string view.
|
||||||
|
#define nlsvs(strView) (std::string(strView.data(), strView.size()))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/// Obtain a temporary C-string from a string view. Use directly in argument, do not store.
|
||||||
|
#define nlsvc(strView) ((strView.data()[strView.size()]) ? nlsvs(strView).c_str() : strView.data())
|
||||||
|
|
||||||
|
namespace NLMISC {
|
||||||
|
|
||||||
|
/// String view literals allow bypassing allocation and strlen calls.
|
||||||
|
/// CStringView is a 100% drop-in replacement for (const char *str, size_t len) tuples. It's a non-owning reference.
|
||||||
|
/// Always use `CStringView` where previously `const std::string &` would have been used. It avoids accidental copy.
|
||||||
|
/// Gotcha: CStringView doesn't need to end with \0, so there's no guarantee with functions that expect \0 terminated strings,
|
||||||
|
/// use the `nlsvc` macro to get a temporary C-string from a CStringView.
|
||||||
|
/// Use the `nlsv` macro to get a CStringView from a string literal.
|
||||||
|
/// Use the `nlstr` macro to get an std::string from a string literal.
|
||||||
|
/// Use the `nlsvs` macro to get an std::string from a CStringView.
|
||||||
|
#ifdef NL_CPP17
|
||||||
|
typedef std::string_view CStringView;
|
||||||
|
#else
|
||||||
|
class CStringView
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CStringView(const std::string &str) : m_Str(&str[0]), m_Len(str.size()) {}
|
||||||
|
CStringView(const char *const str, const size_t len) : m_Str(str), m_Len(len) {}
|
||||||
|
CStringView(const char *const str) : m_Str(str), m_Len(sizeof(str)) {}
|
||||||
|
|
||||||
|
inline const char *data() const { return m_Str; }
|
||||||
|
inline size_t length() const { return m_Len; }
|
||||||
|
inline size_t size() const { return m_Len; }
|
||||||
|
|
||||||
|
inline CStringView substr(const size_t offset, const size_t count = -1) { return CStringView(m_Str + offset, std::min(m_Len - offset, count)); }
|
||||||
|
|
||||||
|
inline bool operator==(const CStringView o) { if (m_Len != o.m_Len) return false; return memcmp(m_Str, o.m_Str, m_Len) == 0; }
|
||||||
|
inline bool operator!=(const CStringView o) { if (m_Len != o.m_Len) return true; return memcmp(m_Str, o.m_Str, m_Len) != 0; }
|
||||||
|
|
||||||
|
struct const_iterator
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
const_iterator() : m_Addr(NULL) { }
|
||||||
|
|
||||||
|
inline void operator++()
|
||||||
|
{
|
||||||
|
++m_Addr;
|
||||||
|
}
|
||||||
|
inline void operator+=(ptrdiff_t v)
|
||||||
|
{
|
||||||
|
m_Addr += v;
|
||||||
|
}
|
||||||
|
inline void operator--()
|
||||||
|
{
|
||||||
|
--m_Addr;
|
||||||
|
}
|
||||||
|
inline void operator-=(ptrdiff_t v)
|
||||||
|
{
|
||||||
|
m_Addr -= v;
|
||||||
|
}
|
||||||
|
inline bool operator!=(const const_iterator &o) const { return m_Addr != o.m_Addr; }
|
||||||
|
inline bool operator==(const const_iterator &o) const { return m_Addr == o.m_Addr; }
|
||||||
|
inline const char &operator*() const { return *m_Addr; }
|
||||||
|
|
||||||
|
private:
|
||||||
|
friend class CStringView;
|
||||||
|
inline const_iterator(const char *addr) : m_Addr(addr) {}
|
||||||
|
const char *m_Addr;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef const_iterator iterator;
|
||||||
|
|
||||||
|
iterator begin() const { return iterator(m_Str); }
|
||||||
|
inline iterator end() const { return iterator(m_Str + m_Len); }
|
||||||
|
|
||||||
|
private:
|
||||||
|
const char *m_Str;
|
||||||
|
size_t m_Len;
|
||||||
|
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* #ifndef NLMISC_STRING_VIEW_H */
|
||||||
|
|
||||||
|
/* end of file */
|
@ -0,0 +1,178 @@
|
|||||||
|
// NeL - MMORPG Framework <https://wiki.ryzom.dev/>
|
||||||
|
// Copyright (C) 2020 Jan BOON (Kaetemi) <jan.boon@kaetemi.be>
|
||||||
|
//
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU Affero General Public License as
|
||||||
|
// published by the Free Software Foundation, either version 3 of the
|
||||||
|
// License, or (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU Affero General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU Affero General Public License
|
||||||
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
#ifndef NLMISC_UTF_STRING_VIEW_H
|
||||||
|
#define NLMISC_UTF_STRING_VIEW_H
|
||||||
|
|
||||||
|
#include <nel/misc/types_nl.h>
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
#include <nel/misc/string_view.h>
|
||||||
|
#include <nel/misc/ucstring.h>
|
||||||
|
|
||||||
|
namespace NLMISC {
|
||||||
|
|
||||||
|
class IStream;
|
||||||
|
|
||||||
|
/// String view for UTF-8 and UTF-32 iteration as 32-bit codepoints.
|
||||||
|
/// This string view keeps the string as a reference, it does not make a copy.
|
||||||
|
/// Only use this for iterating a string's codepoints.
|
||||||
|
/// String must be NUL terminated, but its size may specify a substring.
|
||||||
|
class CUtfStringView
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
inline CUtfStringView() : m_Str(NULL), m_Size(0), m_Iterator(utf32Iterator) {}
|
||||||
|
|
||||||
|
inline CUtfStringView(const std::string &utf8Str) : m_Str(utf8Str.c_str()), m_Size(utf8Str.size()), m_Iterator(utf8Iterator) {}
|
||||||
|
inline CUtfStringView(const char *utf8Str) : m_Str(utf8Str), m_Size(strlen(utf8Str)), m_Iterator(utf8Iterator) {}
|
||||||
|
inline CUtfStringView(const char *utf8Str, size_t len): m_Str(utf8Str), m_Size(len), m_Iterator(utf8Iterator)
|
||||||
|
{
|
||||||
|
nlassert(len <= strlen(utf8Str));
|
||||||
|
}
|
||||||
|
|
||||||
|
inline CUtfStringView(CStringView utf8Str) : m_Str(utf8Str.data()), m_Size(utf8Str.size()), m_Iterator(utf8Iterator) {}
|
||||||
|
|
||||||
|
#if defined(NL_OS_WINDOWS)
|
||||||
|
inline CUtfStringView(const wchar_t *utf16Str) : m_Str(utf16Str), m_Size(wcslen(utf16Str)), m_Iterator(utf16Iterator) {}
|
||||||
|
inline CUtfStringView(const wchar_t *utf16Str, size_t len): m_Str(utf16Str), m_Size(len), m_Iterator(utf16Iterator)
|
||||||
|
{
|
||||||
|
nlassert(len <= wcslen(utf16Str));
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
inline CUtfStringView(const wchar_t *utf32Str) : m_Str(utf32Str), m_Size(wcslen(utf32Str)), m_Iterator(utf32Iterator) {}
|
||||||
|
inline CUtfStringView(const wchar_t *utf32Str, size_t len): m_Str(utf32Str), m_Size(len), m_Iterator(utf32Iterator)
|
||||||
|
{
|
||||||
|
nlassert(len <= wcslen(utf32Str));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
inline CUtfStringView(const ucstring &utf16Str) : m_Str(utf16Str.c_str()), m_Size(utf16Str.size() << 1), m_Iterator(utf16Iterator) {}
|
||||||
|
inline CUtfStringView(const ucchar *utf16Str) : m_Str(utf16Str), m_Size(strlen((const char *)utf16Str) & (ptrdiff_t)(-2)), m_Iterator(utf16Iterator) {}
|
||||||
|
inline CUtfStringView(const ::u32string &utf32Str) : m_Str(utf32Str.c_str()), m_Size(utf32Str.size() << 2), m_Iterator(utf32Iterator) {}
|
||||||
|
|
||||||
|
std::string toUtf8(bool reEncode = false) const; // Makes a copy
|
||||||
|
ucstring toUtf16(bool reEncode = false) const; // Makes a copy
|
||||||
|
::u32string toUtf32() const; // Makes a copy
|
||||||
|
|
||||||
|
std::wstring toWide() const; // Platform dependent, UTF-16 or UTF-32. Makes a copy.
|
||||||
|
std::string toAscii() const; // Returns only values 0-127, 7-bit ASCII. Makes a copy.
|
||||||
|
|
||||||
|
inline bool isUtf8() const { return m_Iterator == utf8Iterator; }
|
||||||
|
inline bool isUtf16() const { return m_Iterator == utf16Iterator; }
|
||||||
|
inline bool isUtf32() const { return m_Iterator == utf32Iterator; }
|
||||||
|
|
||||||
|
struct const_iterator
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
inline void operator++()
|
||||||
|
{
|
||||||
|
if ((ptrdiff_t)m_Next > ((ptrdiff_t)m_View.m_Str + m_View.m_Size))
|
||||||
|
m_Next = (void *)((ptrdiff_t)m_View.m_Str + m_View.m_Size);
|
||||||
|
m_Addr = m_Next;
|
||||||
|
m_Char = m_View.m_Iterator(&m_Next);
|
||||||
|
}
|
||||||
|
inline void operator+=(ptrdiff_t a)
|
||||||
|
{
|
||||||
|
while ((ptrdiff_t)m_Addr < ((ptrdiff_t)m_View.m_Str + m_View.m_Size))
|
||||||
|
{
|
||||||
|
++(*this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
inline bool operator!=(const const_iterator &o) const { return m_Addr != o.m_Addr; }
|
||||||
|
inline bool operator==(const const_iterator &o) const { return m_Addr == o.m_Addr; }
|
||||||
|
inline const u32char &operator*() const { return m_Char; }
|
||||||
|
const_iterator() : m_View(*(CUtfStringView *)NULL), m_Addr(NULL), m_Char(0) { }
|
||||||
|
|
||||||
|
const_iterator &operator=(const const_iterator &other)
|
||||||
|
{
|
||||||
|
if (this == &other) return *this;
|
||||||
|
this->~const_iterator();
|
||||||
|
return *new(this) const_iterator(other);
|
||||||
|
}
|
||||||
|
|
||||||
|
const void *ptr() const { return m_Addr; }
|
||||||
|
private:
|
||||||
|
friend class CUtfStringView;
|
||||||
|
inline const_iterator(const CUtfStringView &view, const void *addr) : m_View(view), m_Addr(addr), m_Next(addr), m_Char(view.m_Iterator(&m_Next))
|
||||||
|
{
|
||||||
|
if ((ptrdiff_t)m_Next > ((ptrdiff_t)m_View.m_Str + m_View.m_Size))
|
||||||
|
m_Next = (void *)((ptrdiff_t)m_View.m_Str + m_View.m_Size);
|
||||||
|
}
|
||||||
|
inline const_iterator(const CUtfStringView &view) : m_View(view), m_Addr((char *)view.m_Str + view.m_Size), m_Next((char *)view.m_Str + view.m_Size + 1), m_Char(0) { }
|
||||||
|
const CUtfStringView &m_View;
|
||||||
|
const void *m_Addr; // Current address
|
||||||
|
const void *m_Next; // Next address
|
||||||
|
u32char m_Char;
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef const_iterator iterator;
|
||||||
|
|
||||||
|
iterator begin() const { return iterator(*this, m_Str); }
|
||||||
|
inline iterator end() const { return iterator(*this); }
|
||||||
|
|
||||||
|
/// Largest possible number of characters in this string.
|
||||||
|
/// Number of actual characters may be less or equal.
|
||||||
|
inline size_t largestSize() const { return m_Size; }
|
||||||
|
|
||||||
|
inline bool empty() const { return !m_Size; }
|
||||||
|
const void *ptr() const { return m_Str; }
|
||||||
|
|
||||||
|
size_t count() const; //< Slow count of UTF-32 codepoints
|
||||||
|
ptrdiff_t offset(ptrdiff_t i); const //< Get byte offset by utf-32 codepoint index
|
||||||
|
|
||||||
|
inline CUtfStringView substr(const iterator &begin, const iterator &end) const
|
||||||
|
{
|
||||||
|
return CUtfStringView(begin.m_Addr, (ptrdiff_t)end.m_Addr - (ptrdiff_t)begin.m_Addr, m_Iterator);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline bool endsWith(char c) { nlassert(c < 0x80); return *((char *)m_Str + m_Size - 1) == c; }
|
||||||
|
|
||||||
|
CUtfStringView &operator=(const CUtfStringView &other)
|
||||||
|
{
|
||||||
|
if(this == &other) return *this;
|
||||||
|
this->~CUtfStringView();
|
||||||
|
return *new(this) CUtfStringView(other);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void append(std::string &str, u32char c);
|
||||||
|
|
||||||
|
/// Encode or decode a single UTF-8 character in a stream (also useful for packing unsigned 20-bit integers)
|
||||||
|
static void append(IStream &s, u32char c);
|
||||||
|
static u32char get(IStream &s);
|
||||||
|
|
||||||
|
/// Get an UTF-8 string from an undefined ASCII-based codepage, without attempting to convert non-7-bit characters
|
||||||
|
static std::string fromAscii(const std::string &str);
|
||||||
|
|
||||||
|
private:
|
||||||
|
typedef u32char (*TIterator)(const void **addr);
|
||||||
|
static u32char utf8Iterator(const void **addr);
|
||||||
|
static u32char utf16Iterator(const void **addr);
|
||||||
|
static u32char utf32Iterator(const void **addr);
|
||||||
|
|
||||||
|
inline CUtfStringView(const void *str, size_t len, TIterator it) : m_Str(str), m_Size(len), m_Iterator(it) { }
|
||||||
|
|
||||||
|
const void *const m_Str; // String
|
||||||
|
const size_t m_Size; // Size in bytes
|
||||||
|
const TIterator m_Iterator;
|
||||||
|
|
||||||
|
}; /* class CUtfStringView */
|
||||||
|
|
||||||
|
} /* namespace NLMISC */
|
||||||
|
|
||||||
|
#endif /* #ifndef NLMISC_UTF_STRING_VIEW_H */
|
||||||
|
|
||||||
|
/* end of file */
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue