Compare commits
911 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
41041733c4 | ||
|
|
16257035ca | ||
|
|
4fde42e919 | ||
|
|
d08ac51fee | ||
|
|
1116365a43 | ||
|
|
9c05c8e31a | ||
|
|
3ce020c0e3 | ||
|
|
27ea52e5bd | ||
|
|
cc598490fa | ||
|
|
b361a0b6a5 | ||
|
|
2b4c5eafc8 | ||
|
|
e910f945b5 | ||
|
|
7a838227c7 | ||
|
|
d86582ebc6 | ||
|
|
d8d1fc6f67 | ||
|
|
0ee46ba55f | ||
|
|
e179a63b8c | ||
|
|
0018964637 | ||
|
|
7010d51bc7 | ||
|
|
7b09399ede | ||
|
|
a36e746d45 | ||
|
|
f7ec693b03 | ||
|
|
056dd6dedf | ||
|
|
1c8b0d1101 | ||
|
|
bc5d2eed97 | ||
|
|
35692e3f00 | ||
|
|
bb06087881 | ||
|
|
9442292c0f | ||
|
|
b1eba7ff3c | ||
|
|
d69a3724ac | ||
|
|
353fa0dff5 | ||
|
|
af241fffe7 | ||
|
|
227db9a10f | ||
|
|
2cf79f22a8 | ||
|
|
798a31a64f | ||
|
|
59a90c7030 | ||
|
|
ee1a4a5752 | ||
|
|
01ef664895 | ||
|
|
2f339302d1 | ||
|
|
aaf7723014 | ||
|
|
89751b430d | ||
|
|
b9de69d4e9 | ||
|
|
b4c7d6deaa | ||
|
|
71667d2912 | ||
|
|
fa704f5e2c | ||
|
|
967a7fb8ad | ||
|
|
3e7fb7f8b8 | ||
|
|
3e0abc6953 | ||
|
|
216a1e5350 | ||
|
|
ea3c98c65f | ||
|
|
fb1c754532 | ||
|
|
3585de0f21 | ||
|
|
3bd4fc0305 | ||
|
|
0e355074cd | ||
|
|
7e6249ef3f | ||
|
|
af2a000af1 | ||
|
|
1a9efa6e5b | ||
|
|
dd97978d56 | ||
|
|
81aaaef538 | ||
|
|
205c71fcf9 | ||
|
|
3ea892018f | ||
|
|
6c14118f32 | ||
|
|
824cbdfec5 | ||
|
|
67e2a71e63 | ||
|
|
49e1e86457 | ||
|
|
9525511b61 | ||
|
|
51ce63c256 | ||
|
|
58ba572e21 | ||
|
|
bf6352936b | ||
|
|
3100e1022d | ||
|
|
2ea70b6d4b | ||
|
|
a6501ffb44 | ||
|
|
519ed0bd3a | ||
|
|
974726dac9 | ||
|
|
efc0b277fe | ||
|
|
23d1e03dde | ||
|
|
9d07d80b5b | ||
|
|
1829e78d05 | ||
|
|
a71df9a2ac | ||
|
|
62f72a7daa | ||
|
|
2601c3f562 | ||
|
|
1f7f96b8fd | ||
|
|
e142566496 | ||
|
|
9824a1290f | ||
|
|
a5d244f594 | ||
|
|
3b119a0efa | ||
|
|
c9898f7839 | ||
|
|
5ed5032c94 | ||
|
|
96c3f838d6 | ||
|
|
707c0d8f64 | ||
|
|
367a7abadb | ||
|
|
076a48c378 | ||
|
|
5cffb33c25 | ||
|
|
9107b369f9 | ||
|
|
a721217996 | ||
|
|
09599f8b7b | ||
|
|
c65d14f759 | ||
|
|
9aa0bf200f | ||
|
|
4fb73d0eef | ||
|
|
9bbf4308d5 | ||
|
|
e1d6f594d5 | ||
|
|
b609038b3f | ||
|
|
79e7695af4 | ||
|
|
fef069abd9 | ||
|
|
e1195631f4 | ||
|
|
63b018c321 | ||
|
|
9f2f1a1b9b | ||
|
|
8170111c9b | ||
|
|
812000751e | ||
|
|
8e59efb236 | ||
|
|
3b7b0891d9 | ||
|
|
e9b97650f3 | ||
|
|
661ecf094e | ||
|
|
f3d6188756 | ||
|
|
eeb44e6ba5 | ||
|
|
c8fa7b77ac | ||
|
|
3d54e08bee | ||
|
|
43b90458d9 | ||
|
|
be331ca054 | ||
|
|
c57ad47a0e | ||
|
|
be298b0741 | ||
|
|
0d4cd7821c | ||
|
|
e3d16402c1 | ||
|
|
ad044c9cc9 | ||
|
|
ce53c92e32 | ||
|
|
4a58901580 | ||
|
|
e0cbd25254 | ||
|
|
aacb686b55 | ||
|
|
38c466c839 | ||
|
|
64789b868d | ||
|
|
9914cf9943 | ||
|
|
9970e8194c | ||
|
|
93545f7b8e | ||
|
|
cf5c468267 | ||
|
|
c7a4967bde | ||
|
|
2ee9599863 | ||
|
|
bcc0d50562 | ||
|
|
d6593abda4 | ||
|
|
395fb2ee48 | ||
|
|
0f98d10af1 | ||
|
|
7b35439f4b | ||
|
|
7c5a63d97e | ||
|
|
a91ea001f2 | ||
|
|
29b9da14a1 | ||
|
|
c26e2f5f73 | ||
|
|
c2f2e2094a | ||
|
|
6f974cc680 | ||
|
|
223adbc385 | ||
|
|
931bd8173f | ||
|
|
d68de22496 | ||
|
|
51a539ae78 | ||
|
|
7c1b8c70c7 | ||
|
|
3bf164c109 | ||
|
|
42d9da815a | ||
|
|
36fbb1ca96 | ||
|
|
320fa6e89f | ||
|
|
bc78623d53 | ||
|
|
b171da7620 | ||
|
|
fd00ee6ee1 | ||
|
|
e9f4b654e8 | ||
|
|
0be23569f9 | ||
|
|
5504029af6 | ||
|
|
fb53b619b0 | ||
|
|
6ccc47c5c4 | ||
|
|
88572edfad | ||
|
|
9f8d5ae06c | ||
|
|
9b26cec444 | ||
|
|
db77afc787 | ||
|
|
71e78c3595 | ||
|
|
ce6a740530 | ||
|
|
23445bb2b9 | ||
|
|
0dac8a221f | ||
|
|
bcc17ca3ad | ||
|
|
5b882697c4 | ||
|
|
85043df0f6 | ||
|
|
d2a12c55e7 | ||
|
|
c66fc390b6 | ||
|
|
0ea7b9f281 | ||
|
|
02dff1e588 | ||
|
|
4acb113ab3 | ||
|
|
5f872039af | ||
|
|
66ae840e66 | ||
|
|
5441950fc7 | ||
|
|
5a312dee65 | ||
|
|
1bbf76d339 | ||
|
|
cf4e4a9edd | ||
|
|
e0ab26cb2b | ||
|
|
1ead741fe2 | ||
|
|
62bcc65337 | ||
|
|
fde1a8998f | ||
|
|
7ab528edd7 | ||
|
|
9f59dd5542 | ||
|
|
ff136b025f | ||
|
|
8e49682ea0 | ||
|
|
be4c0d646a | ||
|
|
9960b046f9 | ||
|
|
5d86cc51bc | ||
|
|
03c0677789 | ||
|
|
c7d43416cd | ||
|
|
6459b4ab05 | ||
|
|
3a3adf4d04 | ||
|
|
9ca4cf822c | ||
|
|
a6ca8f5ffc | ||
|
|
eb5dc5048a | ||
|
|
a9b0fcdf02 | ||
|
|
f252317c9e | ||
|
|
338ba9a139 | ||
|
|
10025ed2c0 | ||
|
|
e52164ec98 | ||
|
|
51868dd862 | ||
|
|
67e5628b61 | ||
|
|
7f4a06cc7c | ||
|
|
04f2dbba8f | ||
|
|
4bd2dc8d20 | ||
|
|
e84f01f690 | ||
|
|
b3d85bf15a | ||
|
|
d090daab37 | ||
|
|
03970faf71 | ||
|
|
19d50637ad | ||
|
|
adbea02202 | ||
|
|
a7c51efea2 | ||
|
|
3cac414712 | ||
|
|
f028443f28 | ||
|
|
4ec729a8f1 | ||
|
|
17c2b2dbce | ||
|
|
251c09cb81 | ||
|
|
2d55a81c5e | ||
|
|
60c23b1d64 | ||
|
|
f38530041a | ||
|
|
e25b86fbf1 | ||
|
|
67646c850a | ||
|
|
4bbdc6a80e | ||
|
|
c301f82672 | ||
|
|
f8202b119e | ||
|
|
51f42d6629 | ||
|
|
9d601bb2cf | ||
|
|
19a5f3d531 | ||
|
|
39256961f4 | ||
|
|
63d3045c45 | ||
|
|
0ec38f7ec5 | ||
|
|
9789ecb923 | ||
|
|
2f2d4c7211 | ||
|
|
08a06ecfce | ||
|
|
cba1b34f21 | ||
|
|
6f18722bcf | ||
|
|
f6694293ec | ||
|
|
ea2beab605 | ||
|
|
a6d87f191a | ||
|
|
fec0804996 | ||
|
|
25af9f0752 | ||
|
|
1079efdee3 | ||
|
|
5a5d3f8c02 | ||
|
|
2f9778a7bb | ||
|
|
a2db834383 | ||
|
|
af05c45752 | ||
|
|
83aadb7abf | ||
|
|
11dc1aa6ea | ||
|
|
12e2c10cff | ||
|
|
789321143a | ||
|
|
cfe214469b | ||
|
|
713d09354d | ||
|
|
974cd8b6e2 | ||
|
|
2bd2f896ca | ||
|
|
385582122d | ||
|
|
16f026813a | ||
|
|
79381bc5a3 | ||
|
|
40d4ee7582 | ||
|
|
9b8c89bc92 | ||
|
|
b114996f26 | ||
|
|
e71c197da1 | ||
|
|
84285ffebb | ||
|
|
b46b0a62e3 | ||
|
|
28e93b62b7 | ||
|
|
6019d29a2b | ||
|
|
208fdad134 | ||
|
|
415c3c20a5 | ||
|
|
4f81014a13 | ||
|
|
03df5c8e37 | ||
|
|
5c89560fd4 | ||
|
|
6f85d8bc71 | ||
|
|
89e012b38a | ||
|
|
8ec25b74b2 | ||
|
|
49b96a65b6 | ||
|
|
d349245890 | ||
|
|
266c242df7 | ||
|
|
09ece96e39 | ||
|
|
9f31af523f | ||
|
|
732ec73b86 | ||
|
|
0690e49ceb | ||
|
|
2f18ffeda0 | ||
|
|
87259150c7 | ||
|
|
5f274c5db4 | ||
|
|
ece092bfdc | ||
|
|
6da609c4d1 | ||
|
|
e8aa936898 | ||
|
|
710b7679f2 | ||
|
|
6fdbfc3398 | ||
|
|
0499bd6034 | ||
|
|
c1ab2105a5 | ||
|
|
28f9085c63 | ||
|
|
ad39453dca | ||
|
|
7a33783acf | ||
|
|
9edc54a019 | ||
|
|
404537f1eb | ||
|
|
665e2f9af1 | ||
|
|
30533acf5c | ||
|
|
a097557176 | ||
|
|
f7af2621dc | ||
|
|
3f293e2759 | ||
|
|
9702829b57 | ||
|
|
b2ebfa2bf4 | ||
|
|
f1636f4921 | ||
|
|
536241ea4a | ||
|
|
792342634e | ||
|
|
6407c58704 | ||
|
|
1b7039e858 | ||
|
|
ce86a8945f | ||
|
|
b047762803 | ||
|
|
1b92ed9234 | ||
|
|
dcbfed6b59 | ||
|
|
d1fb8837f7 | ||
|
|
34a374e1c2 | ||
|
|
29860fdae8 | ||
|
|
93dabed113 | ||
|
|
b73a5f71a9 | ||
|
|
11647b3508 | ||
|
|
524421cc22 | ||
|
|
3ec95ecbb2 | ||
|
|
112d679f83 | ||
|
|
97d8b30e17 | ||
|
|
4ac9376b19 | ||
|
|
98ba823e23 | ||
|
|
4a2c8e9167 | ||
|
|
8ebb89aaaf | ||
|
|
e892c91518 | ||
|
|
b048b57461 | ||
|
|
4ba15eb62f | ||
|
|
2b7cec04b9 | ||
|
|
79d15adc13 | ||
|
|
43e700d1e6 | ||
|
|
0d646677ce | ||
|
|
4e055d0d4a | ||
|
|
68d7fd70c8 | ||
|
|
1492c225d7 | ||
|
|
2bbffce9e1 | ||
|
|
76a0714638 | ||
|
|
e909158de5 | ||
|
|
4c7c9593de | ||
|
|
04d1fc8299 | ||
|
|
6174f924e0 | ||
|
|
5031c5f5c1 | ||
|
|
23f617d22a | ||
|
|
f33865ccc4 | ||
|
|
620466ad3a | ||
|
|
df6b9fe9b3 | ||
|
|
63bc899a97 | ||
|
|
5c84079283 | ||
|
|
64b14f4005 | ||
|
|
b0ce69da6a | ||
|
|
da7edc4580 | ||
|
|
31b7e4d788 | ||
|
|
c940b56459 | ||
|
|
dcc28d9ce2 | ||
|
|
334a071219 | ||
|
|
48ba4e26b8 | ||
|
|
8da70c6e75 | ||
|
|
61198caae5 | ||
|
|
4e8b9d41ba | ||
|
|
86af637781 | ||
|
|
08825ba79a | ||
|
|
f2b3161474 | ||
|
|
22f2f68a3a | ||
|
|
e3f666570a | ||
|
|
dc757d48e5 | ||
|
|
da6b7db0e6 | ||
|
|
ec218e1424 | ||
|
|
c178ec9ab4 | ||
|
|
9f87a780a7 | ||
|
|
40809b6396 | ||
|
|
6f04ef8921 | ||
|
|
a3235b23bb | ||
|
|
b3fdde036e | ||
|
|
1e86c3c2d6 | ||
|
|
57a89f0c45 | ||
|
|
710c49850c | ||
|
|
94662bbd4c | ||
|
|
fc1f9375ed | ||
|
|
7db6b1ad07 | ||
|
|
d70d6a0bd6 | ||
|
|
b130e68b51 | ||
|
|
fdbb835199 | ||
|
|
3cc2d861db | ||
|
|
e5ca96879a | ||
|
|
80248d2a77 | ||
|
|
400de47586 | ||
|
|
cfdbbff3c7 | ||
|
|
5235cc001b | ||
|
|
12fd9611f7 | ||
|
|
be323d555d | ||
|
|
11facf0acb | ||
|
|
4b13017620 | ||
|
|
7ddaaa20e6 | ||
|
|
b659dfaf79 | ||
|
|
20c73a9e92 | ||
|
|
dfca13b96d | ||
|
|
3c25189fdb | ||
|
|
a1c67447b5 | ||
|
|
6710758962 | ||
|
|
e761a5f7ef | ||
|
|
c8f84e4694 | ||
|
|
e40215a4d1 | ||
|
|
46d6ab8f9e | ||
|
|
377fbfab39 | ||
|
|
4c4259f5ca | ||
|
|
0e8b29936e | ||
|
|
54f16def09 | ||
|
|
e8d7235cfb | ||
|
|
bac1cbc028 | ||
|
|
94ceb8d9df | ||
|
|
6f1a0c0316 | ||
|
|
a225d7e7c7 | ||
|
|
e3f7719ca7 | ||
|
|
809e46eaf7 | ||
|
|
5450ad8311 | ||
|
|
68866eb2cb | ||
|
|
9ff569e8ce | ||
|
|
9375235fc6 | ||
|
|
a2cd63afa6 | ||
|
|
6052a86f0a | ||
|
|
75357d7f41 | ||
|
|
c493f62466 | ||
|
|
89ef72aab3 | ||
|
|
343423898e | ||
|
|
cf02a3ea55 | ||
|
|
811f2a7021 | ||
|
|
fe92bf89e5 | ||
|
|
c9ac9ca23f | ||
|
|
300c6b61c6 | ||
|
|
8678404b84 | ||
|
|
54b29472cc | ||
|
|
f0a3305753 | ||
|
|
d9ce3d0538 | ||
|
|
b457ccbccd | ||
|
|
1fb61028b1 | ||
|
|
98fc8e05bc | ||
|
|
03989f3fd8 | ||
|
|
b41eb364bb | ||
|
|
27708b4dd2 | ||
|
|
0d2ab45c6b | ||
|
|
0cfede0e7a | ||
|
|
2a404541e5 | ||
|
|
657526eab4 | ||
|
|
eb16a80515 | ||
|
|
e283bcb65d | ||
|
|
a1459ba494 | ||
|
|
042998dd71 | ||
|
|
717d46a332 | ||
|
|
b6fd404788 | ||
|
|
02a43a63a6 | ||
|
|
719b76ea80 | ||
|
|
eae8540708 | ||
|
|
539a74aa7a | ||
|
|
4b0bcaa20e | ||
|
|
486577524b | ||
|
|
c4567e769c | ||
|
|
7d956357c5 | ||
|
|
600a379622 | ||
|
|
afbe8cb307 | ||
|
|
9d1cba52ba | ||
|
|
3d29b5f188 | ||
|
|
38948cd2b6 | ||
|
|
d79035bf7a | ||
|
|
1fb919a6e6 | ||
|
|
227631f1df | ||
|
|
1006f7b165 | ||
|
|
44dc63dbad | ||
|
|
adc2532802 | ||
|
|
3937a134d5 | ||
|
|
f7329fb234 | ||
|
|
0775e1bcdc | ||
|
|
b0eabd6382 | ||
|
|
6955e1b3f4 | ||
|
|
3c4fc71249 | ||
|
|
a2dc2e9934 | ||
|
|
5b026e10a6 | ||
|
|
131fc63deb | ||
|
|
9ea833ce7d | ||
|
|
070111b06e | ||
|
|
a315b1a87b | ||
|
|
8e2257f8ac | ||
|
|
0c227c0ad6 | ||
|
|
0555fed7ad | ||
|
|
d3d6a7a485 | ||
|
|
58f86894e9 | ||
|
|
51c0443c9a | ||
|
|
ae6f7c5589 | ||
|
|
f5dc6f5018 | ||
|
|
c3c141fedf | ||
|
|
fcb7d2a2ad | ||
|
|
83b69ad8e8 | ||
|
|
a6db07d8e1 | ||
|
|
44f8d42156 | ||
|
|
b9a1bf27ac | ||
|
|
1a673ba7e5 | ||
|
|
c21746f1a7 | ||
|
|
41c38d0bcb | ||
|
|
a5cd585bcc | ||
|
|
c2c631c03e | ||
|
|
285a599dc9 | ||
|
|
f9903f3470 | ||
|
|
843a22e6e9 | ||
|
|
b90305efff | ||
|
|
64a9f7c701 | ||
|
|
64a68b443b | ||
|
|
8460abef86 | ||
|
|
63f76b6695 | ||
|
|
7d2884ebfe | ||
|
|
4efc725211 | ||
|
|
4d44f28a06 | ||
|
|
804567f6c3 | ||
|
|
b811a8dd39 | ||
|
|
638bc477d7 | ||
|
|
aa0ecdb4f4 | ||
|
|
dc1990c7b9 | ||
|
|
2e497bf831 | ||
|
|
e087186def | ||
|
|
715b7d06c4 | ||
|
|
d68da68c4b | ||
|
|
83088fe798 | ||
|
|
1d9a043c25 | ||
|
|
d67fcf931e | ||
|
|
379db00a5c | ||
|
|
d65acb2d40 | ||
|
|
c7041940f3 | ||
|
|
f7df30614d | ||
|
|
5db556849b | ||
|
|
471eaa9087 | ||
|
|
e54ee64d79 | ||
|
|
45c83f73db | ||
|
|
0ffd472396 | ||
|
|
adaca47bf6 | ||
|
|
d2d477b8f5 | ||
|
|
3cfc5f65c2 | ||
|
|
1ce791700c | ||
|
|
c28ef5000a | ||
|
|
61bb92950a | ||
|
|
b14198161e | ||
|
|
ad2dd2e40e | ||
|
|
d9fdbe0745 | ||
|
|
905d9cd75d | ||
|
|
d68b84f862 | ||
|
|
1e7f5de4db | ||
|
|
87d116a1c3 | ||
|
|
33b4641b63 | ||
|
|
9efb4454e4 | ||
|
|
02f7e24d33 | ||
|
|
e001386383 | ||
|
|
9257c03b07 | ||
|
|
6216ac37a2 | ||
|
|
476aa9d90a | ||
|
|
c665a0cc5c | ||
|
|
96397e66c5 | ||
|
|
758c5a8187 | ||
|
|
52e02f087c | ||
|
|
a02437dee1 | ||
|
|
3cd754b6b9 | ||
|
|
9a8f870ae4 | ||
|
|
ea5b78707d | ||
|
|
1d8b02bb41 | ||
|
|
83f52d0a57 | ||
|
|
d807accec2 | ||
|
|
430469ab3a | ||
|
|
e8978d8e89 | ||
|
|
aa0a0f8520 | ||
|
|
c089037e26 | ||
|
|
cf67ab3b6a | ||
|
|
5beccc0498 | ||
|
|
1e0e286682 | ||
|
|
b895f51beb | ||
|
|
4e5356670b | ||
|
|
7cbf2f99f6 | ||
|
|
84d7928b94 | ||
|
|
37b73d6c49 | ||
|
|
f1b74b9c2f | ||
|
|
9449650d47 | ||
|
|
b3bc39a8d5 | ||
|
|
ab4ae3e281 | ||
|
|
18dadbc001 | ||
|
|
b4f0635ab7 | ||
|
|
9a4ed47179 | ||
|
|
c314996902 | ||
|
|
3a49e4c37d | ||
|
|
23a874b5ae | ||
|
|
92b88a8d26 | ||
|
|
3a8cb8aa42 | ||
|
|
08d1d9f1f8 | ||
|
|
95fcf4aa79 | ||
|
|
9c47414635 | ||
|
|
8969abb43f | ||
|
|
ce933f4f81 | ||
|
|
b8de606bed | ||
|
|
9c60c1e37c | ||
|
|
e9a8a8bd9c | ||
|
|
a91426eb5c | ||
|
|
ab5bec082d | ||
|
|
e384146089 | ||
|
|
a5df5d63b6 | ||
|
|
11729813a6 | ||
|
|
e577d96a4e | ||
|
|
d61be1cf77 | ||
|
|
6698f43f76 | ||
|
|
51cd41ceba | ||
|
|
0480e9ca39 | ||
|
|
b67c509f30 | ||
|
|
168d65b411 | ||
|
|
a667b75177 | ||
|
|
91a8518db9 | ||
|
|
eb68425a25 | ||
|
|
eaa9aba068 | ||
|
|
95452706a0 | ||
|
|
a5eaa2fd8a | ||
|
|
445d90f50d | ||
|
|
36b8a414d5 | ||
|
|
21d0991b9b | ||
|
|
483c70bef2 | ||
|
|
1613675b31 | ||
|
|
2cea675c10 | ||
|
|
2723801604 | ||
|
|
fa6e8d1442 | ||
|
|
037476ac49 | ||
|
|
a457ed62b9 | ||
|
|
ae3ddb59f7 | ||
|
|
78c44e6060 | ||
|
|
9284a24750 | ||
|
|
c8df92f8a0 | ||
|
|
1ae6ffe7f7 | ||
|
|
ae561ff880 | ||
|
|
da584b9e0a | ||
|
|
809ba33187 | ||
|
|
844626c6f4 | ||
|
|
b498140958 | ||
|
|
68ccda4ef5 | ||
|
|
5632913e40 | ||
|
|
7496040f34 | ||
|
|
2b7f0f4ad6 | ||
|
|
f323cc967b | ||
|
|
9cd361989c | ||
|
|
c5df05f03e | ||
|
|
3709f61fc4 | ||
|
|
59caf6cae5 | ||
|
|
44df223ac5 | ||
|
|
2dd3209682 | ||
|
|
0c52cde070 | ||
|
|
b734637eb5 | ||
|
|
4c01a530a0 | ||
|
|
8d965cca32 | ||
|
|
01eab250eb | ||
|
|
6b9adf1527 | ||
|
|
68a8fcec47 | ||
|
|
13f1174bb7 | ||
|
|
d370279d24 | ||
|
|
1bbefcbf7b | ||
|
|
dd3ce4d1e7 | ||
|
|
fdc17f1579 | ||
|
|
02bbdf17f8 | ||
|
|
8492df40de | ||
|
|
8b9197552c | ||
|
|
377a4861ee | ||
|
|
241a5d13c3 | ||
|
|
344ed6fd80 | ||
|
|
bd03b4c4d1 | ||
|
|
4ba03afa8c | ||
|
|
cb6971e37d | ||
|
|
9c3b35d8fe | ||
|
|
82f62d4d7d | ||
|
|
38c56c4d31 | ||
|
|
683218a909 | ||
|
|
d68e7ff7ce | ||
|
|
c4c3e7e51e | ||
|
|
2460a82153 | ||
|
|
23a8d495f5 | ||
|
|
2ccd542610 | ||
|
|
1c66dc733f | ||
|
|
5934b9733d | ||
|
|
7ae28cc479 | ||
|
|
add8342f67 | ||
|
|
b89bb73476 | ||
|
|
a00fa953c2 | ||
|
|
1e623b1d65 | ||
|
|
c0ddad642f | ||
|
|
4f1286612b | ||
|
|
267e631933 | ||
|
|
0da23d376d | ||
|
|
bdbfd3d71a | ||
|
|
11edc26279 | ||
|
|
4171d1ce3b | ||
|
|
bc866f8375 | ||
|
|
42f0bae28f | ||
|
|
d0c712950f | ||
|
|
228b724f5b | ||
|
|
5fac7e15a8 | ||
|
|
1338204787 | ||
|
|
afcbcfb522 | ||
|
|
64a24768cd | ||
|
|
39c4cd6800 | ||
|
|
c854c97c22 | ||
|
|
35a5313e77 | ||
|
|
2525736bea | ||
|
|
102d470380 | ||
|
|
9ade820252 | ||
|
|
c2d6e7bed8 | ||
|
|
8a51d2512e | ||
|
|
542de89d16 | ||
|
|
6aafdf9a84 | ||
|
|
c9b82f55b6 | ||
|
|
0497ef686a | ||
|
|
476df369ba | ||
|
|
5c14fc1025 | ||
|
|
92da4732c7 | ||
|
|
c9c01ec769 | ||
|
|
ebb6a8525e | ||
|
|
4edbe7b491 | ||
|
|
a21c39e5c8 | ||
|
|
74a39850f2 | ||
|
|
c821336adf | ||
|
|
e36e455e1b | ||
|
|
7f675b34ad | ||
|
|
33ab4a1196 | ||
|
|
6cc90c2bd3 | ||
|
|
9ef4438b4f | ||
|
|
d19db6e50d | ||
|
|
93cfc76d78 | ||
|
|
e3ab970d5a | ||
|
|
7f00380fe1 | ||
|
|
f95a48212e | ||
|
|
033c781467 | ||
|
|
3be3f700f4 | ||
|
|
109972a5e7 | ||
|
|
a7cb89eda1 | ||
|
|
7cbef66b7d | ||
|
|
d15837a69e | ||
|
|
2690f3deea | ||
|
|
82517bc57e | ||
|
|
f74653aba3 | ||
|
|
879ab8f506 | ||
|
|
9b899b14b4 | ||
|
|
bf1d5c617e | ||
|
|
728beae0b2 | ||
|
|
ebe433a65a | ||
|
|
6d8c2650aa | ||
|
|
0f51d31daa | ||
|
|
0288253929 | ||
|
|
777690862d | ||
|
|
10828dce8b | ||
|
|
62df942569 | ||
|
|
059e093cb3 | ||
|
|
736c30a6bc | ||
|
|
c60770b2f5 | ||
|
|
fc4611e1fa | ||
|
|
01c6eeb782 | ||
|
|
cfb0b2f6bb | ||
|
|
24fe65848b | ||
|
|
5f2a6b1382 | ||
|
|
9f7b6c47ab | ||
|
|
1511c4c820 | ||
|
|
7c33e7bf55 | ||
|
|
570743a3da | ||
|
|
62833599f4 | ||
|
|
36f11ee2bd | ||
|
|
2580ce36a8 | ||
|
|
8a4c3693f2 | ||
|
|
d2cb1690cb | ||
|
|
c7b03095c4 | ||
|
|
92b02bbe0e | ||
|
|
f8ab060457 | ||
|
|
3fe98ed092 | ||
|
|
87fa5d1302 | ||
|
|
09b81d2796 | ||
|
|
2d9683675b | ||
|
|
d524f06429 | ||
|
|
8dfb5db642 | ||
|
|
cfc00e6c6b | ||
|
|
17522a2b16 | ||
|
|
902f40202a | ||
|
|
34d25acb74 | ||
|
|
b65757584b | ||
|
|
518c2ca90a | ||
|
|
005eb4b52c | ||
|
|
daa06ac8de | ||
|
|
fdd1a9acdb | ||
|
|
f42c69b158 | ||
|
|
991edfdac3 | ||
|
|
64552d2733 | ||
|
|
a7819bd022 | ||
|
|
529e8b910f | ||
|
|
e886befe4c | ||
|
|
df1583b9c2 | ||
|
|
a83f8bd5ac | ||
|
|
92d08a0393 | ||
|
|
63eb7164b2 | ||
|
|
23b37b397b | ||
|
|
cabc579b4b | ||
|
|
e08bb4f41d | ||
|
|
9e558fba3a | ||
|
|
22cf8f86d6 | ||
|
|
d1c49f065b | ||
|
|
5268b5fb0d | ||
|
|
df6ac05478 | ||
|
|
a71cd3494b | ||
|
|
28f443f665 | ||
|
|
1df2f42938 | ||
|
|
25d118c87d | ||
|
|
18498e0aae | ||
|
|
8819e337b8 | ||
|
|
ef52c9d328 | ||
|
|
e9d71b05b9 | ||
|
|
17fdbb3eda | ||
|
|
133ebe2435 | ||
|
|
bf8450afe3 | ||
|
|
ec2775bb5a | ||
|
|
c82d9d4f1b | ||
|
|
3bb2926c88 | ||
|
|
fe8b0eb7e8 | ||
|
|
7958ebc2eb | ||
|
|
9235722a76 | ||
|
|
caa8241ca9 | ||
|
|
aeb266c95b | ||
|
|
4cb9ab4662 | ||
|
|
8c3fde6755 | ||
|
|
a8cfd219ce | ||
|
|
f208454003 | ||
|
|
792f745832 | ||
|
|
1106d861ba | ||
|
|
355f72099e | ||
|
|
292f7b176b | ||
|
|
be03488583 | ||
|
|
83a663c369 | ||
|
|
5afa0fe4e8 | ||
|
|
838eae88f4 | ||
|
|
b253853241 | ||
|
|
d0584dd62f | ||
|
|
74b39853b2 | ||
|
|
6b0d279f37 | ||
|
|
2a0ff7b7f8 | ||
|
|
1f2ce466f5 | ||
|
|
30dfe9e99b | ||
|
|
3acb334623 | ||
|
|
27c0fb9c55 | ||
|
|
96005b74d9 | ||
|
|
8489658f7d | ||
|
|
9b0f9e52be | ||
|
|
bdee0aea26 | ||
|
|
7d2982fdbd | ||
|
|
f57d254136 | ||
|
|
fca8c25862 | ||
|
|
8a5e66cfae | ||
|
|
1ff0955c52 | ||
|
|
3f4b711efe | ||
|
|
e79016323d | ||
|
|
50f4daf0d5 | ||
|
|
2452f963b5 | ||
|
|
3c87a0a86a | ||
|
|
d818952900 | ||
|
|
799ee9061c | ||
|
|
ca32b04038 | ||
|
|
948c841552 | ||
|
|
f5ce0698de | ||
|
|
21f0fa18b4 | ||
|
|
ac02eac58a | ||
|
|
8a11400718 | ||
|
|
8d2ec214f0 | ||
|
|
68b5a625ec | ||
|
|
2f3de56dde | ||
|
|
dec1e9a534 | ||
|
|
c462ebfbcf | ||
|
|
85f3e5fa9b | ||
|
|
22d70d3e58 | ||
|
|
e1dc8b7085 | ||
|
|
0387661c67 | ||
|
|
5269f769c4 | ||
|
|
3e5fc7ddd0 | ||
|
|
e7415e30c6 | ||
|
|
124b570ad4 | ||
|
|
eda840d02d | ||
|
|
88612ba72e | ||
|
|
b9f82e6c38 | ||
|
|
bf3320b100 | ||
|
|
e95749e9f8 | ||
|
|
913244102a | ||
|
|
edc06b2a84 | ||
|
|
a15dd00a33 | ||
|
|
cde478baaf | ||
|
|
37a117a7c0 | ||
|
|
04e10efdc8 | ||
|
|
5c94f7b775 | ||
|
|
8e64765f42 | ||
|
|
abc5ee0ebe | ||
|
|
5c564a2d6e | ||
|
|
f539047802 | ||
|
|
58b6c80dcb | ||
|
|
4bce9e9b92 | ||
|
|
f4a48f5add | ||
|
|
230efa465c | ||
|
|
a6cd382a0f | ||
|
|
783eaf4241 | ||
|
|
3096b4dfc0 | ||
|
|
a4dad82b02 | ||
|
|
7e2ebfe88c | ||
|
|
1d72d7670a | ||
|
|
c33bd66fe7 | ||
|
|
49d7711b9b |
968
CHANGELOG.md
968
CHANGELOG.md
@@ -1,5 +1,973 @@
|
||||
# ZeroBrane Studio Changelog
|
||||
|
||||
## v1.00 (Mar 13 2015)
|
||||
|
||||
### Highlights
|
||||
- Added directory mapping to the project tree (closes #223).
|
||||
- Added `Run to Cursor` (closes #413).
|
||||
- Added support to set/unset start file for a project (closes #411).
|
||||
- Added opening/creating file from the command bar (#31).
|
||||
- Added `staticanalyzer.infervalue` to enable deeper/slower analysis (#414).
|
||||
- Updated Corona API for v2015.2576.
|
||||
|
||||
### Improvements
|
||||
- Added `staticanalyzer.infervalue` to enable deeper/slower analysis (#414).
|
||||
- Added project path in the error reporting for love2d/corona interpreters.
|
||||
- Added an example with enabling Emacs bindings in the editor.
|
||||
- Added Russian translations for new messages (#70).
|
||||
- Added a warning on class resolution taking too much time in auto-complete.
|
||||
- Added check for empty/comment lines when breakpoints are set.
|
||||
- Added directory mapping to the project tree (closes #223).
|
||||
- Added `Run to Cursor` (closes #413).
|
||||
- Added document method `GetTabText` (#166).
|
||||
- Added showing love2d console when requested.
|
||||
- Added support to set/unset start file for a project (closes #411).
|
||||
- Added requesting attention for debugger even when the file is not activated.
|
||||
- Added reporting of location in more cases when debugging is suspended.
|
||||
- Added starting debugging even when the file is not opened in the IDE.
|
||||
- Added switching project directory from the command bar (#31).
|
||||
- Added trimming of trailing spaces in the directory name when switching projects.
|
||||
- Added closing preview if the file failed to load in commandbar (#31).
|
||||
- Added handling of `Ctrl/Cmd-Enter` in commandbar to force open file (#31).
|
||||
- Added skipping loading files with empty and directory names.
|
||||
- Added trimming of trailing spaces in the file name when loading a file.
|
||||
- Added file selection in the project tree after saving a new file.
|
||||
- Added opening/creating file from the command bar (#31).
|
||||
- Disabled menu item for renaming/editing for mapped directories (#223).
|
||||
- Disabled field checks for local parameters in staic analyzer (closes #421).
|
||||
- Improved static analyzer to handle more cases with `infervalue` set (#414).
|
||||
- Refactored use of image constants in the project tree.
|
||||
- Refactored document modification tracking to remove `SetDocumentModified`.
|
||||
- Refactored path normalization for project directory.
|
||||
- Updated Corona API for v2015.2576.
|
||||
- Updated static analyzer output formatting.
|
||||
- Updated analyzer to also check value of `pairs` parameter (#414).
|
||||
- Updated `debugging suspended` message to not trigger with `runonstart`.
|
||||
- Updated messages in interpreters to fix line endings.
|
||||
- Updated lettercase in menu items for consistency.
|
||||
- Updated UpdateUI handling to fix multi-view refresh, as in DocumentMap (#352).
|
||||
- Updated Outline to use editor tab text (instead of a file name).
|
||||
- Updated message on failure to start debugging to add the file name.
|
||||
- Updated `debugging suspended` message to put location in quotes.
|
||||
- Updated line check in command bar to not trigger on Windows file names.
|
||||
- updated glewgl api (glew 1.12.0)
|
||||
|
||||
### Fixes
|
||||
- Fixed analyzer to check value of `ipairs` parameter (fixes #414).
|
||||
- Fixed OS detection on Linux that sets `DYLD_LIBRARY_PATH` (fixes #417).
|
||||
- Fixed saving auto-recovery record with no editor tabs opened (fixes #418).
|
||||
- Fixed looping in auto-complete when processing recursive assignments.
|
||||
- Fixed filename used in the recovery message.
|
||||
- Fixed Output/Console window to stay shown after failure to start debugging.
|
||||
- Fixed an issue with search initiated from Output/Console panels (fixes #406).
|
||||
- Fixed auto-complete for non-default `acandtip.strategy` values (fixed #409).
|
||||
- Fixed loading file with absolute name and line number (fixes #408).
|
||||
|
||||
## v0.95 (Jan 30 2015)
|
||||
|
||||
### Highlights
|
||||
- Added fuzzy search with `Go To File`, `Go To Symbol`, `Go To Line`, and `Insert Library Function`.
|
||||
- Added auto-complete support for LDoc '@tparam' and '@param[type=...]'.
|
||||
- Added armhf architecture support (thanks to Ard van Breemen).
|
||||
- Updated static analyzer to support `goto`/labels and bitops for Lua 5.2/5.3.
|
||||
- Updated internal parser to support Lua 5.2/5.3 syntax.
|
||||
- Updated Mobdebug to improve Lua 5.3 compatibility (thanks to Andrew Starks).
|
||||
- Update API descriptions with functions new in Lua 5.3.
|
||||
|
||||
### Special thanks
|
||||
- To [Ard van Breemen](https://github.com/ardje) for armhf architecture support.
|
||||
- To [Evandro Costa](https://github.com/evandro-costa) for Brazilian Portuguese (pt-br) translation.
|
||||
- To [Andrew Starks](https://github.com/andrewstarks) for Lua 5.3 compatibility improvements.
|
||||
- To [Alexis Jarreau](https://github.com/Fringale) for French translation update.
|
||||
- To [Leo Bartoloni](https://github.com/bartoleo) for Italian translation update.
|
||||
- To [riidom](https://github.com/riidom) for German translation update.
|
||||
|
||||
### Improvements
|
||||
- Added showing/hiding Output/Console panel during debugging.
|
||||
- Added `bordersize` to configure sash size.
|
||||
- Added package `LoadFile` method (#166).
|
||||
- Added Russian translation for new messages (#70).
|
||||
- Added syntax highlighting for functions new in Lua 5.3.
|
||||
- Added `commandbar.prefilter` to commandbar to improve performance (#31).
|
||||
- Added custom formatting for APIs.
|
||||
- Added `Insert Library Function` to `Navigate` menu.
|
||||
- Added hiding tooltip/auto-complete popup after undo/redo/delete operations.
|
||||
- Added `api` handling to the config to support custom APIs.
|
||||
- Added Lapis and Moonscript debugging links to README.
|
||||
- Added `Contributing` section to README.
|
||||
- Added LICENSE link to README.
|
||||
- Added Lua 5.3 links to README; updated links to remove '.html'.
|
||||
- Added `PgUp` and `PgDn` navigation for commandbar (#31).
|
||||
- Added auto-complete support for LDoc '@tparam' and '@param[type=...]'.
|
||||
- Added Brazilian Portuguese (pt-br) translation.
|
||||
- Added showing the symbol under cursor in `Go To Symbol` (#385).
|
||||
- Added `editor:ValueFromPosition` method (#166).
|
||||
- Added `Go To Symbol` support to the commandbar (#31, closes #385).
|
||||
- Allowed renaming of files with different case in the project tree.
|
||||
- Added update of file name in the Outline when editor tab is updated (#337).
|
||||
- Added check for `styles` being reset in the config file (closes #383).
|
||||
- Added loading file from project directory with "proj file" on command line.
|
||||
- Added skipping of binary files in commandbar preview (#31).
|
||||
- Added CONTRIBUTING file.
|
||||
- Added clearing Output window before showing Find-in-Files results.
|
||||
- Added default values for Outline config settings (#337).
|
||||
- Added package `GetProjectNotebook` method (#166).
|
||||
- Added saving Outline tab configuration in the Project notebook (#337).
|
||||
- Added `outline.sort` option to sort items in the outline (#337).
|
||||
- Added `outline.showflat` option to show flat outline (#337).
|
||||
- Added package `GetOutlineTree` method (#166).
|
||||
- Add support for armhf architecture
|
||||
- Added document `Save` method (#166).
|
||||
- Added `init.lua` to the search path (fixes `require 'dist'`).
|
||||
- Added forced garbage collection when switching from the app.
|
||||
- Added penalty for missing characters in fuzzy search (#31).
|
||||
- Added line navigation to `Navigate` menu (#31).
|
||||
- Added handling of line numbers in command bar (#31).
|
||||
- Added caching to improve commandbar performance on large folders (#31).
|
||||
- Added setting explicit focus on preview tab in commandbar (#31).
|
||||
- Added preview on first selection in commandbar (#31).
|
||||
- Added file preview to commandbar (#31).
|
||||
- Added fuzzy search for files in commandbar (closes #31).
|
||||
- Added displaying the list of current tabs for commandbar (#31).
|
||||
- Added commandbar prototype for file navigation (#31).
|
||||
- Added reset of tokens when editor content is reloaded (#337).
|
||||
- Enabled html and C/cpp specs by default (#395).
|
||||
- Improved handling of complex types in LDoc expressions in auto-complete.
|
||||
- Improved failed search 'shake' visualization by forcing window redraw.
|
||||
- Improved command line file check for relative files on Windows.
|
||||
- Split console output into shorter lines to improve memory usage and handling.
|
||||
- Renamed `debugger.stackmax*` settings to `debugger.maxdata*`.
|
||||
- Removed double check for invalid UTF-8 output in console.
|
||||
- Refactored ID handling to allow using `ID.COMMENT` in config files.
|
||||
- Removed `wxwidgets` from the list of default APIs for Lua interpreters.
|
||||
- Refactored handling of special symbols in commandbar (#31).
|
||||
- Removed border from tree controls (#305).
|
||||
- Updated language files with new messages (#70).
|
||||
- Update API descriptions with functions new in Lua 5.3.
|
||||
- Updated loose parser to support Lua 5.2+ labels.
|
||||
- Updated loose parser to support `goto` and Lua 5.3 bitops.
|
||||
- Updated Metalua to support Lua 5.3 bitops.
|
||||
- Updated Metalua to support `goto`/labels in static analysis for Lua 5.2/5.3.
|
||||
- Upgraded Mobdebug (v0.611) to fix tooltips during Corona debugging (closes #387).
|
||||
- Updated `CommandBarShow` to accept text fragment to select (#31).
|
||||
- Updated `GetKnownExtensions` to accept an optional extension to match against.
|
||||
- Updated `FileRead` to accept optional length.
|
||||
- Updated layout settings to use constants and new package API.
|
||||
- Updated parser to avoid splitting `foo.bar` in incremental processing.
|
||||
- Upgraded MobDebug (0.61) to add `basedir` support.
|
||||
- Updated status refresh to only happen for the active editor.
|
||||
- Updated toolbar UI checks to happen when running/debugging (#352).
|
||||
- Updated Corona integration to hide console on OSX (2014.2393+).
|
||||
- Upgraded Mobdebug to 0.613 to improve Lua 5.3 compatibility (#401); thanks to @andrewstarks.
|
||||
- Updated usage instructions in README.
|
||||
- Update de.lua
|
||||
|
||||
### Incompatibilities
|
||||
- Renamed `debugger.stackmax*` settings to `debugger.maxdata*`.
|
||||
- Removed `wxwidgets` from the list of default APIs for Lua interpreters; use `api` config setting to include it.
|
||||
|
||||
### Fixes
|
||||
- Fixed search navigation to shift horizontally when `usewrap` is off.
|
||||
- Fixed indentation for lines with mixed string separators (#324, #388).
|
||||
- Fixed indentation for lines with escaped slashes (#324, closes #388).
|
||||
- Fixed find-and-replace to replace in already selected fragment if matched.
|
||||
- Fixed refresh of files in command bar preview when selected (#31).
|
||||
- Fixed recovery of empty (`untitled`) tabs.
|
||||
- Fixed an auto-complete issue after `repeat until <var>`.
|
||||
- Fixed setting focus to the editor in commandbar with one tab (#31).
|
||||
- Fixed auto-complete after text not separated by a whitespace or bracket.
|
||||
- Fixed an error when disabling outline by setting `outlineinactivity=nil`.
|
||||
|
||||
## v0.90 (Nov 08 2014)
|
||||
|
||||
### Highlights
|
||||
- Added function outline.
|
||||
- Added Lua 5.3 (beta) binaries and debugging support.
|
||||
- Added scope-aware auto-complete for local/global variables.
|
||||
- Added hiding/showing files by type in the project/filetree.
|
||||
- Added Esperanto (eo) translation.
|
||||
- Improved compatibility with Lua 5.2 interpreter.
|
||||
- Improved compatibility with system/custom Lua interpreter.
|
||||
|
||||
### Special thanks
|
||||
- To [cosmotect](https://github.com/cosmotect) for added Esperanto translation.
|
||||
- To [riidom](https://github.com/riidom) for updated German translation.
|
||||
- To [Christoph Kubisch](https://github.com/pixeljetstream) for glsl improvements.
|
||||
- To [Wojciech Milkowski](https://github.com/milkowski) for making indentation guide configurable.
|
||||
- To [sclark39](https://github.com/sclark39) for adding project dir to find dialog paths.
|
||||
|
||||
### Improvements
|
||||
- Added Lua 5.3 (beta) support and binaries.
|
||||
- Added Russian translation for new messages (#70).
|
||||
- Added `AddPackage` and `RemovePackage` methods (#166).
|
||||
- Added `CreateBareEditor` package method (#166).
|
||||
- Added `GetAPI` method for interpreter (#166).
|
||||
- Added `GetOutputNotebook` package method (#166).
|
||||
- Added `IsPanelDocked` package method (#166).
|
||||
- Added `Run` and `Run as Scratchpad` buttons to the toolbar.
|
||||
- Added `acandtip.maxlength` option for setting the length of a tooltip.
|
||||
- Added `function` handling to the token processing.
|
||||
- Added `imagemap` setting to support custom images.
|
||||
- Added `onEditorCallTip` method (#166).
|
||||
- Added `showonefile` option for the outline to always show one file (#337).
|
||||
- Added an Esperanto (eo) translation.
|
||||
- Added build support for Lua 5.3-alpha and luasocket for Lua 5.3.
|
||||
- Added check for existing process id before stopping the process.
|
||||
- Added check for pending data to improve re-starting debugging session.
|
||||
- Added collapsing outlines for files in inactive tabs (#337).
|
||||
- Added creating italic font if only the main one is provided.
|
||||
- Added document `SetActive` method (#166).
|
||||
- Added drag-and-drop support for the Outline tab (#337).
|
||||
- Added example of enabling `Opt+Shift+Left/Right` shortcut on OSX.
|
||||
- Added function outline (closes #337, closes #222).
|
||||
- Added handling of `~` in launch command path.
|
||||
- Added hiding/showing files by type in the project/filetree (closes #375).
|
||||
- Added local/global indicators to function outline (#337).
|
||||
- Added marking file after showing files in the tree (#375).
|
||||
- Added navigation based on 'filename:line:pos' in the Output window.
|
||||
- Added option for not/showing anonymous functions in the outline (#337).
|
||||
- Added package `AddTool` and `RemoveTool` methods (#166).
|
||||
- Added package `CreateImageList` method (#166).
|
||||
- Added package `ExecuteCommand` method (#166).
|
||||
- Added package `FindTopMenu` method (#166).
|
||||
- Added package `GetAppName` method and removed hardcoded name references (#166).
|
||||
- Added package `GetConsole` method (#166).
|
||||
- Added package `GetKnownExtensions` method (#166).
|
||||
- Added project dir to find dialog paths; thanks to @sclark39 (closes #358).
|
||||
- Added rule to enable `Set From Current File` only when available.
|
||||
- Added scope-aware auto-complete for local/global variables (closes #291).
|
||||
- Added scrolling to the top of the outline when `showonefile` is set (#337).
|
||||
- Added sending Corona SDK simulator output to the Output window on Windows.
|
||||
- Added translation label for `Toggle Bookmark` toolbar icon (#70, #373).
|
||||
- Added unindent on backspace (controlled by `editor.backspaceunindent`).
|
||||
- Added view menu for the Outline window (#337).
|
||||
- bugfix in output callback for commandline tools
|
||||
- bugfix on extension change save-as, related to new indication handling
|
||||
- cg/hlsl/glsl refine isfndef capture, mostly to react on GLSL's layout mechanism
|
||||
- Disabled moving of Output/Console/Project tabs between panels.
|
||||
- Disabled closing tabs in floating panels.
|
||||
- Improved `ffitoapi` tool logic when no replacement is made.
|
||||
- Improved compatibility with Lua 5.2 interpreter (closes #357).
|
||||
- Improved scroll positioning in the outline after tab changes (#337).
|
||||
- Improved support for non-lua specs in the outline (#337).
|
||||
- Minor update to indentation guides handling (#371).
|
||||
- Moved 'default' search path to be searched first (#357).
|
||||
- Reduced rate of toolbar UI checks to improve performance (fixes #352).
|
||||
- Reduced the number of focus changes in the outline (#337).
|
||||
- Reduced unnecessary editor processing to improve performance (#352).
|
||||
- Refactored `GetBitmap` package method (#166).
|
||||
- Refactored `tools` interface to make it easy to add/remove tools.
|
||||
- Refactored adding editor tab to ensure callbacks have document data.
|
||||
- Refactored default `fprojdir` and `fworkdir` from the interpreter code.
|
||||
- Refactored drag-and-drop processing for Project/Output window tabs (#377).
|
||||
- Refactored panel docking; added `AddPanelDocked` package method (#166).
|
||||
- Refactored timer usage for consistency.
|
||||
- Remove function dropdown from the toolbar (#337).
|
||||
- Removed menu separator from the Tools menu.
|
||||
- Removed prepending libraries for debugging to LUA_CPATH when custom interpreter is specified.
|
||||
- Removed reference to `funclist`, which is no longer needed.
|
||||
- Removed unused image files.
|
||||
- Renamed `markvars` method used in spec files to `marksymbols`.
|
||||
- Renamed image files to have names correspond to the content.
|
||||
- Reorganized default config settings.
|
||||
- Reorganized token list processing to keep it within the editor.
|
||||
- Restored removed function in Lua spec (partial revert of 713d0935).
|
||||
- Switched to using `Is{Input|Error}Available` instead of `stream:CanRead`.
|
||||
- updated luxinia2 related files
|
||||
- Update de.lua
|
||||
- Updated C-based specs to handle function calls without parameters.
|
||||
- Updated C-based specs to use `marksymbols` to provide outline for C functions.
|
||||
- Updated Lua 5.3 build scripts.
|
||||
- Updated `AddPackage` to assign package file name (#166).
|
||||
- Updated `RemoveMenuItem` to disconnect handlers attached to the main frame (#166).
|
||||
- Updated `package.config` description to remove reference to Lua 5.2.
|
||||
- Updated `showanonymous` to a label for anon functions in the outline (#337).
|
||||
- Updated code based on static analysis suggestions.
|
||||
- Updated command launch handling to allow output suppression.
|
||||
- Updated function call indicator to support `isfncall` and `marksymbols`.
|
||||
- Updated function indicator processing to use ranges.
|
||||
- Updated handling of extensions to allow more symbols in extensions.
|
||||
- Updated images in the outline; added `showmethodindicator` option (#337).
|
||||
- Updated indicator processing to improve performance on large files.
|
||||
- Updated interpreter processing to run after packages are loaded.
|
||||
- Updated label for anonymous functions in the outline (#337).
|
||||
- Updated language files with new messages (#70).
|
||||
- Updated markup processing to allow for 3+ markup sequences.
|
||||
- Updated markup processing to support links in non-editor documents.
|
||||
- Updated messages for to match translations (#70).
|
||||
- Updated method of collapsing outline to fix crash on OSX (#337, fixes #368).
|
||||
- Updated outline logic to show on the very first launch (#337).
|
||||
- Updated outline to always expand functions in the current file (#337).
|
||||
- Updated outline to show files without functions (#337).
|
||||
- Updated outline to track filename changes after `Save As` (#337).
|
||||
- Updated outline to use `AddPackage` method (#337).
|
||||
- Updated output callback processing not to run when nothing to process.
|
||||
- Updated package `GetRootPath` to accept file/directory name (#166).
|
||||
- Updated parser to avoid 'breaking' statements during incremental processing.
|
||||
- Updated parser to handle `...` in function parameters.
|
||||
- Updated parser to report function token before parameters (#337).
|
||||
- Updated parser to store position for not-quite-valid function names.
|
||||
- Updated processing of function indicators when auto-analyzer is off.
|
||||
- Updated search/replace to always use the current editor/output/console tab.
|
||||
- Updated static analizer to accept typedlua parser in addition to metalua.
|
||||
- Updated tooltip processing to make it more consistent and better use space.
|
||||
- Updated translation building script to handle non-string parameters (#70).
|
||||
- Updated un/comment to keep the current selection and caret position (#360).
|
||||
- Upgraded MobDebug (0.606) for `Detach Process` to correctly close debugging.
|
||||
- Upgraded Mobdebug (0.607) to fix debugging after `Detach Process` command.
|
||||
|
||||
### Incompatibilities
|
||||
- Renamed `markvars` method used in spec files to `marksymbols`.
|
||||
|
||||
### Fixes
|
||||
- Fixed 'slow' mode of static analysis to work with Metalua 0.7.2.
|
||||
- Fixed `Output` tab name after stopping/completing remote debugging.
|
||||
- Fixed `Project` label shown untranslated in other languages (#70, #373).
|
||||
- Fixed `Run` toolbar label not being translated (#70, #373).
|
||||
- Fixed activation in `tree:FindItem` when new editor tab is opened (#166).
|
||||
- Fixed an error when dragging Stack/Watch/other tabs between notebooks.
|
||||
- Fixed an issue with removing first menu item in RemoveMenuItem (#166).
|
||||
- Fixed an issue with searching in Output and Console windows.
|
||||
- Fixed column indicator on lines with tabs (fixes #379).
|
||||
- Fixed disabling Stack/Watch icons in the toolbar.
|
||||
- Fixed error after using Enter multiple times in `Find in Files` on OSX.
|
||||
- Fixed file renaming in the filetree after using `SaveAs`.
|
||||
- Fixed flicker in the outline when auto-complete is shown (#337).
|
||||
- Fixed focus switch after selecting a function in the outline and editing (#337).
|
||||
- Fixed handling of remapped image files; improved error reporting.
|
||||
- Fixed incorrect `binary not` calculation with wxlua and LuaJIT 2.1.
|
||||
- Fixed index check during tab name update.
|
||||
- Fixed keeping toolbar status after hiding it.
|
||||
- Fixed localization in function outline (#337).
|
||||
- Fixed localization to avoid error in `SaveAs` processing.
|
||||
- Fixed navigation in function outline when `showonefile` is set (#337).
|
||||
- Fixed not hiding directories when files without extension are hidden (#375).
|
||||
- Fixed off-by-one error in function outline position tracking (#337).
|
||||
- Fixed outline refresh after quick tab switches (#337).
|
||||
- Fixed refresh of 'background' markers during debugging.
|
||||
- Fixed replacement when selection doesn't match the text being searched for.
|
||||
- Fixed search in files/directories with `%` in the name (fixes #369).
|
||||
- Fixed storing position in `function` handling.
|
||||
- Fixed stream reading for the Output to only include actually read chars.
|
||||
- Fixed unused variables and constants based on static analysis.
|
||||
|
||||
## v0.80 (Aug 31 2014)
|
||||
|
||||
### Highlights
|
||||
- Added support for expanding table elements in Watch window.
|
||||
- Added editing of values in Watch window.
|
||||
- Added highlighting all instances of selected text.
|
||||
- Added replacing all selected instances using a dialog.
|
||||
- Added saving (one-line) layout for editor tabs.
|
||||
- Added support for `filename:<line>` and `filename:p<pos>` on the command line.
|
||||
- Added search in Console and Output windows.
|
||||
- Improved compatibility with Lua 5.2 to run the IDE.
|
||||
|
||||
### Special thanks
|
||||
- To [Li Jia](https://github.com/tiwb) for fixing remote path map when 'runonstart' option is set.
|
||||
|
||||
### Improvements
|
||||
- Added default values for `hotexit` and `saveallonrun` settings.
|
||||
- Added debugger `GetHostName` and `GetPortNumber` methods (#166).
|
||||
- Added a check for a local shortcut (F2/Del) being enabled before triggering.
|
||||
- Added refresh of expanded Watch values.
|
||||
- Added support for expanding table elements in Watch window.
|
||||
- Added package `AddWatch` method (#166).
|
||||
- Added `toolbar.iconsize` to configure toolbar icon size.
|
||||
- Added `run-as-scratchpad` toolbar icon (hidden by default).
|
||||
- Added `run` toolbar icon (hidden by default).
|
||||
- Added `find-in-files` toolbar icon (hidden by default).
|
||||
- Added support for disabling individual icons in the toolbar.
|
||||
- Added replacing all selected instances using a dialog (closes #342).
|
||||
- Added highlighting all instances of selected text (closes #344).
|
||||
- Added `filetree.mousemove` option to disable drag-n-drop (closes #351).
|
||||
- Added `suspended` to Output panel title when debugger is stopped (closes #350).
|
||||
- Added a warning when remote console can't evaluate an expression (#350).
|
||||
- Added handling of `osname` to package dependencies (#166).
|
||||
- Added `onIdle` event (#166).
|
||||
- Added `tree:FindItem` method (#166).
|
||||
- Added package `Yield` method (#166).
|
||||
- Added ability to set location of `ini` file from config.
|
||||
- Added ability to load bitmap as toolbar icon.
|
||||
- Added package `RemoveMenuItem` method (#166).
|
||||
- Added ability to customize toolbar.
|
||||
- Added saving (one-line) layout for editor tabs.
|
||||
- Added centering of the screen after re-indenting and sorting (#337).
|
||||
- Added local to variable 'activated' in function mapRemotePath
|
||||
- Added centering of the screen after 'go to definition' and back (#337).
|
||||
- Added centering of the screen after selection from the function list (#337).
|
||||
- Added package `onEditorUpdateUI` event (#166).
|
||||
- Added package `AddPanel` method (#166).
|
||||
- Added package `GetUIManager` method (#166).
|
||||
- Added editor `SetupKeywords` method (#166).
|
||||
- Added document `GetFileExit` method (#166).
|
||||
- Added `onEditorPainted` event (#166).
|
||||
- Added support for `name:<line>` and `name:p<pos>` on the command line.
|
||||
- Added error reporting on failure to load file from the command line.
|
||||
- Added metalua components to MANIFEST (missing in packaging on OSX).
|
||||
- Added saving auto-recovery record on switching from the application.
|
||||
- Added `hotexit` option to exit without forcing to save files.
|
||||
- Added setting of margin properties to support their reordering.
|
||||
- Added error reporting on failure to delete directory from project tree.
|
||||
- Added check for shortcut in conflict being enabled before activating (#233).
|
||||
- Added workaround for missing `GetChildren` call in some wxlua configurations.
|
||||
- Added unfolding modified lines to avoid leaving hidden lines in the editor.
|
||||
- Added search in Console and Output windows (closes #313).
|
||||
- Allowed double-click selection in the Output window (#313).
|
||||
- Avoided system lib conflict when debugging by using bundled libs (fixes #355).
|
||||
- Disabled editing on non-root watch elements.
|
||||
- Disabled smart indentation for multi-line comments and strings (#324).
|
||||
- Disabled re-indentation of multi-line comments/strings (#324).
|
||||
- Disabled `Opt+Shift+Left/Right` shortcut as it conflicts with block selection.
|
||||
- Enabled editing of values in Watch window.
|
||||
- Enabled `editor.autoreload` by default.
|
||||
- Improved config handling when `editor` configuration is removed/empty.
|
||||
- Improved `autotabs` logic when the file starts with indentation.
|
||||
- Improved auto-complete logic that tracks variable assignments (fixes #343).
|
||||
- Improved cursor positioning after re-indenting or sorting.
|
||||
- Improved compatibility with Lua5.2 to run the IDE.
|
||||
- Increased default project history length to 20.
|
||||
- Removed check for multiple references in stack values.
|
||||
- Refactored stack processing to use methods to handle expandable table values.
|
||||
- Refactored file name generation for compilation and static analysis.
|
||||
- Removed erroneous message about failure to open '-psn...' file on OSX.
|
||||
- Renamed all image files to remove cruft from their names.
|
||||
- Simplified logic for watch processing.
|
||||
- Switched from using TreeItemData to Lua tables for watch expressions.
|
||||
- Switched to using tree control for watches.
|
||||
- Updated copas library to support non-blocking requests using socket.http.
|
||||
- Updated Stack and Watch views to better stringify keys.
|
||||
- Updated watch menu to handle item under mouse cursor.
|
||||
- Updated constants for image lists.
|
||||
- Updated `FindMenuItem` method to search in the main and specified menus (#166).
|
||||
- Updated `ide.config` to access wx, wxstc, and os through metatable.
|
||||
- Updated recent projects/files handling to allow menus to be removed.
|
||||
- Updated package `FindMenuItem` method (#166).
|
||||
- Updated `autotabs` to respect `usetabs` when no indentation is present.
|
||||
- Updated copy/cut to capture one instance when all are the same (closes #345).
|
||||
- Updated default marker colors for lighter border (#305).
|
||||
- Updated auto-recovery logic to skip missing files (fixes #323).
|
||||
|
||||
### Fixes
|
||||
- Fixed disabling auto-recovery on app switching.
|
||||
- Fixed find-in-files error when used with editor not in focus (fixes #354).
|
||||
- Fixed package `GetStack` method to return proper control (#166).
|
||||
- Fixed Watch window background color on some Mint Linux systems.
|
||||
- Fixed debugging error when `debugger.runonstart` is specified (fixes #348, #341).
|
||||
- Fixed keybinding for `Ctrl-<punctuation>` working on Linux (fixes #346).
|
||||
- Fixed localization based on static analysis.
|
||||
- Fixed remote path map when 'runonstart' option is set.
|
||||
- Fixed error reporting during Analyze (fixes #340).
|
||||
- Fixed using image lists for stack/filetree to keep them in memory.
|
||||
- Fixed indentation when Enter is hit at the middle of a line.
|
||||
- Fixed formatting of `until` statements (fixes #335).
|
||||
- Fixed formatting of strings including comments '--' (#335).
|
||||
- Fixed restoring proper file names for unsaved tabs during auto-recovery.
|
||||
- Fixed deleting 'dynamic words' when multiple lines are removed.
|
||||
- Fixed `love.update` description (#247).
|
||||
- Fixed indentation of strings starting from `endSomething` (#324).
|
||||
- Fixed use of '%' in replacement for Lua5.2 compatibility (#153, #156, #143).
|
||||
- Fixed warnings from static analysis.
|
||||
|
||||
## v0.70 (Jun 18 2014)
|
||||
|
||||
### Highlights
|
||||
- Added support for OpenResty/Nginx, moonscript, and Lapis debugging.
|
||||
- Added re-indentation of selected fragment or entire file.
|
||||
- Added line mapping support for debugging Lua-based languages (e.g. moonscript).
|
||||
- Added `editor.wrapindentmode` and `editor.wrapstartindent` settings.
|
||||
- Fixed debugger compatibility with Lua 5.2.
|
||||
- Fixed `F2` shortcut not working in file tree and watch panel.
|
||||
- Fixed replace-in-files when saving backup copy is turned off.
|
||||
|
||||
### Special thanks
|
||||
- To [sclark39](https://github.com/sclark39) for `format.apptitle` option to format IDE title.
|
||||
- To [Christoph Kubisch](https://github.com/pixeljetstream) for glslc improvements.
|
||||
- To [Yonaba](https://github.com/Yonaba/) for updated French translation.
|
||||
|
||||
### Improvements
|
||||
- Added support for nginx debugging (Mobdebug 0.564).
|
||||
- Added support for custom debugger initializer (global or interpreter-based).
|
||||
- Added line mapping support for debugging Lua-based languages (e.g. moonscript).
|
||||
- Added support to force local execution in console by prepending `!` (#326).
|
||||
- Added setting proper `arg[0]` value during debugging (fixes #329).
|
||||
- Added double click navigation in the Output window for unnamed files.
|
||||
- Added centering of line after double click in the Output window.
|
||||
- Added `editor.wrapindentmode` and `editor.wrapstartindent` settings.
|
||||
- Added a workaround for focus switching between controls on OSX (#89, #327).
|
||||
- Added assertion to ensure inserted editor is not in the notebook already.
|
||||
- Added `format.apptitle` option to format IDE title (thanks to @sclark39).
|
||||
- Added restoring cursor position after sorting/re-indenting.
|
||||
- Added `onEditorUserlistSelection` event for userlist selection (#166).
|
||||
- Added `onEditorAction` event for cut/copy/paste actions (#166).
|
||||
- Added package `GetEditorWithFocus` method (#166).
|
||||
- Added `editor.extradescent` option for line spacing (#305).
|
||||
- Added centering of line on page after re-loading file with a known position.
|
||||
- Added re-indentation of selected fragment or entire file (closes #324).
|
||||
- Added sorting of the entire file if nothing is selected.
|
||||
- Added `Edit | Source` sub-menu.
|
||||
- Added centering line on page after bookmark navigation.
|
||||
- Added `GetProjectTree`, `GetWatch`, and `GetStack` package calls (#166).
|
||||
- Added bookmark-toggle toolbar icon (#233).
|
||||
- Disabled message on failure to read symlinked folder content on Windows.
|
||||
- Disabled breakpoint toggling when editor is not in focus.
|
||||
- Disabled changing toolbar color with `auxwindow` as it only works for the dropdown.
|
||||
- Increase font size for code fragments in markup (#305).
|
||||
- glslc: change domain detection to be compatible with file.comp.glsl and file.tese
|
||||
- Removed checks for specific errors in Local/Remote console.
|
||||
- Removed focus handling workaround for editor tab changes (#89, #327).
|
||||
- Renamed `menuformatrecentprojects` to `format.menurecentprojects` (#305).
|
||||
- Removed handling of project dropdown in menu as it's no longer needed (#305).
|
||||
- Reorganized menu shortcut conflict handling (#233).
|
||||
- simplified glslc usage (compile and link based on file extensions)
|
||||
- treat unreal shaders as hlsl
|
||||
- Updated auto-complete logic to use configured spec separators.
|
||||
- Updated logic for populating placeholders in dropdown menus.
|
||||
- Updated french translation (thanks to @Yonaba)
|
||||
- Updated menu items to stay enabled only when appropriate object has focus.
|
||||
- Updated indentation logic for if/elseif/while/for split into 2+ lines (#324).
|
||||
- Updated indentation logic to ignore comments (#324).
|
||||
- Updated README with supported engines and installation instructions.
|
||||
- Updated breakpoint-toggle toolbar icon to better match other icons (#305).
|
||||
- Updated bookmark navigation to wrap around (#233).
|
||||
- Updating sorting to keep original line endings.
|
||||
- Upgraded metalua to v0.7.2.
|
||||
|
||||
### Fixes
|
||||
- Fixed setting control focus when the main frame is hidden.
|
||||
- Fixed loading packages with dashes in filenames (fixes #330).
|
||||
- Fixed toolbar to stay shown after failure to start debugging.
|
||||
- Fixed focus on the editor after closing a dialog on OSX (fixes #328).
|
||||
- Fixed crash on OSX when changing focus while the app is being closed (#327).
|
||||
- Fixed some toolbar buttons being enabled with no editor tab open.
|
||||
- Fixed toolbar stealing focus after closing floating panels and dropdowns (#327).
|
||||
- Fixed restoring control focus when the app gets focus on OSX (fixes #327).
|
||||
- Fixed activating editor when starting the app on OSX (#327).
|
||||
- Fixed auto-complete to not offer the word the cursor is on.
|
||||
- Fixed hiding auto-complete when the only option matches what's typed.
|
||||
- Fixed an error when all editor tabs are closed.
|
||||
- Fixed replace-in-files when saving backup copy is turned off.
|
||||
- Fixed re-indenting of anonymous functions in tables (#324).
|
||||
- Fixed `F2` shortcut not working in file tree and watch panel (#233).
|
||||
- Fixed debugger compatibility with Lua 5.2 (Mobdebug 0.561).
|
||||
|
||||
## v0.60 (May 11 2014)
|
||||
|
||||
### Highlights
|
||||
- Added support for switching breakpoints at run-time.
|
||||
- Added bookmark handling.
|
||||
- Added `Detach process` command to stop debugging and continue process.
|
||||
- Added detaching debugger server.
|
||||
- Added showing/hiding toolbar and status bar.
|
||||
- Simplified user interface and updated application icons.
|
||||
- Updated love2d API for v0.9.1.
|
||||
- Updated Moai API for v1.5.
|
||||
- Added `outputshell.usewrap` to set Output wrapping; on by default.
|
||||
- Added `editor.wrapflags` to configure line wrapping indicators.
|
||||
- Added `editor.foldflags`; set default to draw one line when folded.
|
||||
- Added `editor.foldtype` with box, cirle, arrow, and plus types.
|
||||
- Added `editor.extraascent` option to add line spacing.
|
||||
|
||||
### Special thanks
|
||||
- To [bartoleo](https://github.com/bartoleo) for italian translation update.
|
||||
- To [riidom](https://github.com/riidom) for german translation update.
|
||||
- To [sclark39](https://github.com/sclark39) for Copy Full Path implementation.
|
||||
- To [DanielSWolf](https://github.com/DanielSWolf) for Moai API update for v1.5.
|
||||
- To [madmaxoft](https://github.com/madmaxoft) for AnalyzeString patch.
|
||||
- To [crumblingstatue](https://github.com/crumblingstatue) for Zoom update.
|
||||
- To [SiENcE](https://github.com/SiENcE) for notepad++ colorscheme update.
|
||||
|
||||
### Improvements
|
||||
- Added new italian translations (thanks to @bartoleo)
|
||||
- Added Russian translation for new messages (#70).
|
||||
- Adding Copy Full Path to editor tabs, and a Clear Output Window option to the Output tab (thanks to @sclark39)
|
||||
- Added support for packages in config files (#166).
|
||||
- Added formatting for Recent Projects menu (#305).
|
||||
- Added `Detach process` command to stop debugging and continue process.
|
||||
- Added re/docking of Watch/Stack notebooks on tab background doubleclick (#305).
|
||||
- Added bookmark handling (closes #233).
|
||||
- Added `Clear items` to the Recent Files menu (ref #305).
|
||||
- Added recent files dropdown to the toolbar (ref #305).
|
||||
- Added applying new UI settings after upgrade (ref #305).
|
||||
- Added toolbar button dropdown with recent projects (ref #305).
|
||||
- Added `Choose Project Directory` to the toolbar (ref #305).
|
||||
- Added floating/docking of notebooks on tab background doubleclick (ref #305).
|
||||
- Added Recent Project menu refresh after switching projects (ref #305).
|
||||
- Added setting project directory by renaming the filetree root element (#305).
|
||||
- Added filetree popup menu with the list of projects (ref #305).
|
||||
- Added 'Recent Projects' menu (ref #305).
|
||||
- Added package `GetLaunchedProcess` call (ref #166).
|
||||
- Added `IsRunning` and `IsConnected` API calls for the debugger (ref #166).
|
||||
- Added `editor.wrapflags` to configure line wrapping indicators (ref #305).
|
||||
- Added explicit sorting of files in the filetree.
|
||||
- Added showing/hiding of the status bar (ref #305).
|
||||
- Added auto-showing toolbar when debugging starts (ref #305).
|
||||
- Added showing/hiding of the toolbar (ref #305).
|
||||
- Added `outputshell.usewrap` to set Output wrapping; on by default (ref #305).
|
||||
- Added `editor.foldflags`; set default to draw one line when folded (ref #305).
|
||||
- Added `editor.extraascent` option to add line spacing (ref #305).
|
||||
- Added explicit conversion to number for numeric settings.
|
||||
- Added `editor.foldtype` with box, cirle, arrow, and plus types (ref #305).
|
||||
- Added opening a new tab on double click on tab background (ref #305).
|
||||
- Added ActivateItem method to the filetree API (ref #166).
|
||||
- Added onFiletree* package events (ref #166).
|
||||
- Added setting margin mask to allow for different margin order.
|
||||
- Added support for switching breakpoints at run-time (closes #288).
|
||||
- Added stopping debugging when debugger server is detached/stopped.
|
||||
- Added opening file on one-click in icon/padding area in the filetree.
|
||||
- Added AnalyzeString function (thanks to @madmaxoft).
|
||||
- Added zooming for Output/Console windows (ref #290).
|
||||
- Added IDs for Zoom menu items (ref #290).
|
||||
- Add zoom actions with appropriate keyboard shortcuts to View menu (thanks to @crumblingstatue)
|
||||
- Added detaching debugger server.
|
||||
- Added skipping reporting for known globals in static analysis (closes #286).
|
||||
- Added support for running zbstudio script from any folder on OSX.
|
||||
- Adjusted `code` color in the comment markup for better visibility (#305).
|
||||
- Changed order of stopping debugger and saving settings (ref #305).
|
||||
- Cleaned unused variables and functions based on static analysis.
|
||||
- Disallowed closing Output/Console/Project tabs (fixes #310).
|
||||
- Disabled current project on the recent projects list (ref #305).
|
||||
- Disable function call indicator by default to reduce clutter (ref #305).
|
||||
- Disabled startng multiple find-in-files searches.
|
||||
- Disabled editing/dragging of the project directory in the filetree.
|
||||
- Enabled editor width auto-adjustment when wrapping is off.
|
||||
- Enable retina support (`hidpi=true`) by default on OSX (#305).
|
||||
- Increased default font size in the editor (ref #305).
|
||||
- Increased wait time for Gideros player to start for more reliable launching.
|
||||
- Made fold and marker margins wider (ref #305).
|
||||
- Made jump-to-line in the Output window to work faster and more reliably.
|
||||
- Moved `Project Directory` menu item lower to not activate on OSX (ref #305).
|
||||
- Moved code to populate `wx` and `wxstc` descriptions to API files.
|
||||
- Rearranged global functions in lua spec for simpler grouping (ref #79).
|
||||
- Reduced sash (border between subsections) in all notebooks (ref #305).
|
||||
- Reduced the line number margin width and default font size (ref #305).
|
||||
- Refactored editor config references.
|
||||
- Removed `Clear Dynamic Words` menu as it's rarely used.
|
||||
- Removed the gripper on the toolbar (ref #305).
|
||||
- Removed project selection dropdown from the filetree (ref #305).
|
||||
- Removed paragraph conversion from love2d API conversion script (ref #247).
|
||||
- Removed border around Output/Console panels (ref #305).
|
||||
- Removed deprecated `startfile` interpreter option.
|
||||
- Removed explicit margin numbers to make configuraton simpler.
|
||||
- Removed border around editor components.
|
||||
- Reordered markers to keep the curent line marker on top (#305).
|
||||
- Reorganized and updated configuration examples.
|
||||
- Set def linenumber font size as one smaller than editor font size (ref #305).
|
||||
- Switched to plain background for the toolbar (ref #305).
|
||||
- Switched to AuiToolBar as it provides buttons with dropdowns (ref #305).
|
||||
- Upgraded Mobdebug (0.56).
|
||||
- Upgraded debugger (mobdebug 0.553) to fix an issue with STEP command.
|
||||
- Upgraded copas to the current version (v1.2.1).
|
||||
- Updated default fonts for Windows and Linux for better looking ones (#305).
|
||||
- Update de.lua (thanks to @riidom)
|
||||
- Updated language files with new messages (#70).
|
||||
- Updated copyright messages.
|
||||
- Updated `Go To Line` menu item and its translations.
|
||||
- Updated build scripts with a fix for a wxlua compilation issue (#260).
|
||||
- Updated build prerequisites Linux install script.
|
||||
- Updated default indicator color to more neutral one (#305).
|
||||
- Updated OSX build script to use 10.7 SDK with 10.6 min-version (#260).
|
||||
- Updated Mobdebug (0.555) to add support for `pause` debugger call.
|
||||
- Updated lua interpreter to remove caching of executable path.
|
||||
- Updated resetting pid only after completing non-debbugged process.
|
||||
- Updated shortcut for Recent File navigation (ref #305).
|
||||
- Updated application icons (ref #305).
|
||||
- Updated stack/watch panel captions to be invisible (ref #305).
|
||||
- Updated interpreters to check `ProgramFiles` env variable on Windows.
|
||||
- Updated panel captions to be invisible (rev #305).
|
||||
- Updated 'window unhide' logic (Windows only) to be called less frequently.
|
||||
- Updated love2d interpreter to not hide the application window.
|
||||
- Updated file sorting to be case-insensitive on all platforms.
|
||||
- Updated filetree menu to use 'Edit Project Directory' on root element (#305).
|
||||
- Updated love2d API to fix typos in descriptions (ref #247).
|
||||
- Updated love2d API for v0.9.1 (ref #247).
|
||||
- Updated love2d API conversion script to handle top-level functions (ref #247).
|
||||
- Updated `PackageUnRegister` call to return the package on success (ref #166).
|
||||
- Updated fold/wrap flag handling to work with wxwidgets 2.8 (ref #305).
|
||||
- Updated breakpoint/currentline markers for less contrast colors (ref #305).
|
||||
- Updated default folding to use lighter colors (ref #305).
|
||||
- Updated default colors to have less contrast (ref #305).
|
||||
- Updated Open file dialog to use current file or project location (closes #303).
|
||||
- Updated Moai API for v1.5 (thanks to @DanielSWolf).
|
||||
- Updated `autoanalyzer` option to more common spelling (analizer -> analyzer).
|
||||
- Updated auto-complete to show in IDLE event for smoother processing.
|
||||
- -minor color changes to notepad++ colorscheme (thanks to @SiENcE).
|
||||
|
||||
### Incompatibilities
|
||||
- Added opening a new tab on double click on tab background.
|
||||
- Added re/docking of Watch/Stack notebooks on tab background doubleclick.
|
||||
- Enabled retina support (`hidpi=true`) by default on OSX.
|
||||
- Removed deprecated `startfile` interpreter option; use `startwith` option instead.
|
||||
- Updated file sorting to be case-insensitive on all platforms.
|
||||
- Updated `autoanalyzer` option to more common spelling (analizer -> analyzer).
|
||||
- wxwidgets 2.8 is no longer supported (wxwidgets 2.9.5+ required).
|
||||
|
||||
### Fixes
|
||||
- Fixed Corona interpreter to clean debugger in `plugin` folder (Win).
|
||||
- Fixed file tree activation of a deleted file.
|
||||
- Fixed switching to full screen and restoring status bar on OSX (ref #305).
|
||||
- Fixed right-click handling in filetree on OSX broken by 3709f61f (ref #166).
|
||||
- Fixed usage of `self` in one of package API calls (ref #166).
|
||||
- Fixed find dialog to stay on top after search directory selection on OSX.
|
||||
- Fixed search result navigation after clicking beyond the end of line.
|
||||
- Fixed an issue with running processes not terminated when closing IDE.
|
||||
- Fixed an error after manual canceling Find-in-files dialog.
|
||||
- Fixed an issue with deleting column-based selection (fixes #300).
|
||||
- Fixed an error in variable indicator processing.
|
||||
- Fixed looping when `valuetype` creates self-reference in APIs (ref #297).
|
||||
- Fixed `elseif` auto-indentation (fixes #294).
|
||||
- Fixed focus for Find field in the find dialog on some instances of OSX.
|
||||
|
||||
## v0.50 (Mar 10 2014)
|
||||
|
||||
### Highlights
|
||||
- Fixed opening files and launching on OSX 10.6.x and 10.9.1+.
|
||||
- Improved CPU utilization when idle on OSX.
|
||||
- Added handling of command-line parameters.
|
||||
- Implemented various auto-complete and tooltip improvements.
|
||||
- Updated Love2d API for 0.9.0.
|
||||
- Updated Corona API auto-complete/description to match v2014.2189 (G2.0).
|
||||
- Updated Marmalade Quick API for v7.2.
|
||||
- Updated French, German, Italian, and Russian translations.
|
||||
|
||||
### Special thanks
|
||||
- To [Asmageddon](https://github.com/Asmageddon) for fixed launching zbstudio from folders with spaces.
|
||||
- To [Christoph Kubisch](https://github.com/pixeljetstream) for various luxinia2 fixes.
|
||||
- To [Yonaba](https://github.com/Yonaba/) for updated French translation.
|
||||
- To [riidom](https://github.com/riidom/) for updated German translation.
|
||||
- To [bartoleo](https://github.com/bartoleo/) for updated Italian translations.
|
||||
|
||||
### Improvements
|
||||
- Added explicit focus for Find field in the find dialog on OSX.
|
||||
- Added version dependency check for loaded plugins.
|
||||
- Added `auxwindow` attribute to style auxiliary windows.
|
||||
- Added sha2 library to provide sha256 hashing.
|
||||
- Added package GetRootPath/GetPackagePath calls (ref #166).
|
||||
- Added package FindMenuItem API call (ref #166).
|
||||
- Added API call to analyze one file.
|
||||
- Added restoring markers after external modification and file reload.
|
||||
- Added displaying number of selected characters and instances (closes #274).
|
||||
- Added using safe load for external data instead of loadstring.
|
||||
- Added check for editor state during Edit menu display (ref #70).
|
||||
- added italian translations; thanks to [bartoleo](https://github.com/bartoleo/).
|
||||
- Added Russian translation for new items in the main menu (ref #70).
|
||||
- Added package GetApp method (ref #166).
|
||||
- Added package GetDebugger API call (ref #166).
|
||||
- Added setting project directory passed as a parameter (second instance).
|
||||
- Added Shift+Zoom to zoom all editors (closes #269).
|
||||
- Added `alpha` setting for sel/seladd/caretlinebg styles.
|
||||
- Added package GetToolBar API call (ref #166).
|
||||
- Added `seladd` setting for styling additional selections.
|
||||
- Added `Select and Find Next/Prev` (closes #268).
|
||||
- Added showing search dialog for Quick Find on first search (closes #265).
|
||||
- Added `nomousezoom` option for Console/Output windows (closes #266).
|
||||
- Added error reporting when debugger server fails to start (closes #263).
|
||||
- Added support for command line parameters for GSL-shell (ref #251).
|
||||
- Added support for editor shortcuts and included standard OSX ones (closes #252).
|
||||
- Added auto-complete for metamethods (closes #256).
|
||||
- Added Minimize shortcut on OSX (closes #254).
|
||||
- Added handling of command line parameters for love2d (ref #251).
|
||||
- Added handling of command line parameters (closes #251).
|
||||
- Added calling of end callback for detached processes.
|
||||
- Added skipping compile check for non-lua files in scratchpad.
|
||||
- Added handling of (optional) BOM in UTF-8 encoded files (closes #246).
|
||||
- Added hint about removing backslash for invalid escape sequences.
|
||||
- Adjusted tooltip position and content to always fit on the screen.
|
||||
- allow tool exe paths to be set in config prior load
|
||||
- Changed the order of applying styles to apply the main style last.
|
||||
- Disabled singleinstance check by default on OSX (ref #204).
|
||||
- Disable debugging termination when stack trace received from remote process.
|
||||
- glsl: added imageSize to spec and api
|
||||
- luxinia2 define some global vars if debugger is present
|
||||
- luxinia2 support 32 and 64 bit runtime
|
||||
- luxinia2: new setup, added support for debugging with main.lua and rudimentary scratchpad functionality
|
||||
- Reduced the number of inactivity checks and timer calls (ref #204).
|
||||
- Removed `calltipbg` attribute as it's replaced by `calltip.bg`.
|
||||
- Removed unused files from metalua.
|
||||
- Removed paragraph-to-newline conversion for API tooltips.
|
||||
- Resolved conflict for Opt+Left (ref #252 and #203).
|
||||
- Removed jumping to the current line after compilation errors.
|
||||
- Switched to using temp files instead of -e option for debugging (ref #251).
|
||||
- shader tools: allow relative directories for binaries
|
||||
- shader specs: add isfncall definition to allow indication style
|
||||
- Updated AddConfig/RemoveConfig to refresh styles after changes (ref #166).
|
||||
- Updated Marmalade Quick API for v7.2.
|
||||
- Updated Corona API for v2014.2189.
|
||||
- Updated scheme picker to apply styles to all windows.
|
||||
- Updated LfW interpreter to use project directory as current one (fixes #276).
|
||||
- Updated README.
|
||||
- Updated comment markup separators to apply markup in fewer cases.
|
||||
- Updated French translation; thanks to [Yonaba](https://github.com/Yonaba/).
|
||||
- Update de.lua; thanks to [riidom](https://github.com/riidom/).
|
||||
- Updated Linux scripts to remove custom libpng/zlib as it's fixed in wxwidgets.
|
||||
- Updated check for editor state during Edit menu display (ref #70).
|
||||
- Updated Corona API auto-complete/description to match v2013.2100 (ref #73).
|
||||
- Updated all language files with new messages (ref #70).
|
||||
- Updated messages for better translation (ref #70).
|
||||
- Updated love2d api with LineJoin and few other calls (ref #247).
|
||||
- Updated OSX build script for wxwidgets 3.x (ref #260).
|
||||
- Updated build script to compile wxwidgets 3.x on Windows (ref #260).
|
||||
- Updated love2d api with some missing calls (ref #247).
|
||||
- updated luxinia2 interpreter to reflect new luxinia2 structure
|
||||
- Updated Love2d API for 0.9.0. (closes #247).
|
||||
- Upgraded Mobdebug (0.551) to fix serialization of table/array indexes.
|
||||
- updates to shader apis (bugfix in GLSL atomic description)
|
||||
|
||||
### Incompatibilities
|
||||
- Updated LfW interpreter to use project directory as current one (fixes #276).
|
||||
- Removed `styles.calltipbg` as it is replaced by `styles.calltip.bg`.
|
||||
|
||||
### Fixes
|
||||
- Fixed shortcut menu generator to display default shortcuts.
|
||||
- Fixed removing focus from editor when IDE loses focus on OSX (ref #204).
|
||||
- Fixed hiding calltip and auto-complete when switching between tabs on OSX.
|
||||
- Fixed handling of getenv returning general message (Mobdebug v0.5511).
|
||||
- Fixed launching zbstudio from folders with spaces; thanks to @Asmageddon.
|
||||
- Fixed `calltip` attribute to use/enable proper style.
|
||||
- Fixed visibility of wrapped lines in console when going through history.
|
||||
- Fixed syntax issues in definitions of IDE tables.
|
||||
- Fixed an issue in metalua files when syntax error is reported.
|
||||
- Fixed arrow key handling in Local console (fixes #279).
|
||||
- Fixed removing temporary files in GSL-shell interpreter.
|
||||
- Fixed tooltip positioning for long messages.
|
||||
- Fixed current line in debugging after activation of files with wrapped lines.
|
||||
- Fixed spurious ESC after activation on Windows when modifiers are pressed.
|
||||
- Fixed skipping empty lines in tooltip formatting.
|
||||
- Fixed comment markup at the end of a file.
|
||||
- Fixed formatting calculations for tooltip to better fill the window.
|
||||
- Fixed stopping debugging when switching projects with the same interpreter.
|
||||
- Fixed auto-complete for classes with more than two levels.
|
||||
- Fixed removal of paragraph breaks in tooltips after interpreter switch.
|
||||
- Fixed API reloading that caused removal of paragraph breaks in tooltips.
|
||||
- Fixed translations for stock menu items on Ubuntu 13.10 (ref #70).
|
||||
- Fixed an issue with spec/tools/interpreters filters not working from config.
|
||||
- Fixed messages script to work with LuaJIT.
|
||||
- Fixed console output with multiple new lines at the end.
|
||||
- Fixed issues on OSX 10.6.x and 10.9.1+ caused by flat namespace (fix #270, fix #264).
|
||||
- Fixed an issue with `isfncall` spec property not being checked.
|
||||
- Fixed function localization in menu handlers.
|
||||
- Fixed default selection for search in case of multiple selections.
|
||||
- Fixed dependency of lfs/git dlls on lualib.dll.
|
||||
- Fixed an issue with activating proper tab after dragging.
|
||||
- Fixed displaying local console output with invalid unicode characters.
|
||||
- Fixed displaying script output with invalid unicode characters.
|
||||
- Fixed drawing artifacts on Windows when line wrapping disabled (fixes #250).
|
||||
- Fixed setting bom value for a new editor (fixes #258).
|
||||
- Fixed auto-complete for values returned by 'core' functions (ref #256).
|
||||
|
||||
## v0.40 (Dec 14 2013)
|
||||
|
||||
### Highlights
|
||||
- Added LuaDist integration.
|
||||
- Added live coding support for GSL-shell.
|
||||
- Added support for project settings.
|
||||
- Added filetree operations.
|
||||
- Added Busted interpreter.
|
||||
|
||||
### Special thanks
|
||||
- To Jayanth Acharya for SciTeLuaIDE color scheme.
|
||||
- To Mike Richards for adding edge handling and styles.
|
||||
- To [adamdmoss](https://github.com/adamdmoss) for Mobdebug API update.
|
||||
|
||||
### Improvements
|
||||
- Added live coding support for GSL-shell (closes #239).
|
||||
- Added support for product-specific links in the Help menu.
|
||||
- Added 'edge' style to the color schemes (ref #237).
|
||||
- Added ability to set 'edge' style properties individually (ref #237).
|
||||
- Add edge to styles
|
||||
- Add fold margin checker color to styles
|
||||
- Add edge line and fold margin checker color
|
||||
- Added changing directory when launching on Linux (closes #157).
|
||||
- Added setting PATH for LfW to allow loading of DLL dependencies.
|
||||
- Added logic to set architecture dynamically for luadist (ref #225).
|
||||
- Added luadist bootstrap dependencies for Linux (ref #225).
|
||||
- Added option to load luadist as a module (ref #225).
|
||||
- Added luadist bootstrap dependencies for OSX (ref #225).
|
||||
- Added proxy dll for Lua 5.2 (ref #225).
|
||||
- Added luadist bootstrap dependencies for Windows (ref #225).
|
||||
- Added package GetInterpreters method (ref #166, #225).
|
||||
- Added package AddConsoleAlias/RemoveConsoleAlias methods (ref #166, #225).
|
||||
- Added version property to the Lua interpreters.
|
||||
- Added new location for Marmalade Quick v7+ and s3e path logic (fixes #226).
|
||||
- Added directory creation (if needed) to file saving.
|
||||
- Added support for symlinks in the filetree (with recursion protection).
|
||||
- Added package AddConfig/RemoveConfig methods (ref #166).
|
||||
- Added package GetProject method (ref #166).
|
||||
- Added package onProjectPreLoad method (ref #166).
|
||||
- Added workaround for conflict with Scintilla shortcuts on Linux.
|
||||
- Added 'Open with Default Program' to file tree operations (ref #123).
|
||||
- Added toggling directory on Enter (ref #123).
|
||||
- Added 'Copy Full Path' to file tree operations (ref #123).
|
||||
- Added deleting file/directory to file tree operations (ref #123).
|
||||
- Added processing of packages from `$HOME/.zbstudio/packages` folder (#166).
|
||||
- Added 'New File' and 'New Directory' to file operations (ref #123).
|
||||
- Added error reporting for failed rename operations (ref #123).
|
||||
- Added re-opening editor tabs affected by directory move/rename (ref #123).
|
||||
- Added package FindDocumentsByPartialPath method (ref #166).
|
||||
- Added existing file overwrite confirmation when renaming (ref #123).
|
||||
- Added existing file overwrite confirmation when saving.
|
||||
- Added creating intermediate directories during file rename (ref #123).
|
||||
- Added in-place editing of file and folder names (ref #123).
|
||||
- Added refreshing editor tab after drag-n-drop operation (ref #123).
|
||||
- Added drag-n-drop operation to move files in the project tree (ref #123).
|
||||
- Added package AddMarker/RemoveMarker methods (ref #166).
|
||||
- Added package GetStatusBar method (ref #166).
|
||||
- Added package GetDocuments and document methods (ref #166).
|
||||
- Added `EscapeMagic` function to escape magic characters.
|
||||
- Added SciTeLuaIDE color scheme (thanks to Jayanth Acharya).
|
||||
- Changed glslc option to reflect new version
|
||||
- Disabled compilation check for scratchpad when `skipcompile` is set (ref #239).
|
||||
- Disabled output activation for messages redirected to Console (ref #225).
|
||||
- Disabled commenting for file types that don't specify line comments.
|
||||
- Moved restoring project before loading files (ref #107).
|
||||
- Reorganized loading configuration files (ref #107).
|
||||
- Removed 'file no longer exists' message after moving opened files (ref #123).
|
||||
- Removed some of the snippets as they are available as plugins.
|
||||
- Store os specific clibs path to make it available to plugins.
|
||||
- Tidy up estrela tools a bit (remove key strokes from cgc, remove luxinia res viewer, rename perforce files to get loaded again)
|
||||
- Updated README.
|
||||
- Updated samples with missing indicator constants (closes #243).
|
||||
- Updated OSX executables and added 'fake' proxy for lua-dist support (ref #225).
|
||||
- Updated handling of case-insensitive names during debugging on OSX (Mobdebug v0.545).
|
||||
- Updated package onEditorPreSave to be called on SaveAs events (ref #166).
|
||||
- Updated icon bundle to eliminate large icons.
|
||||
- Updated application icon to a bit brighter one on OSX (closes #196).
|
||||
- Updated build script on OSX to not require 10.6 SDK (closes #231).
|
||||
- Updated menu definitions for consistency.
|
||||
- Updated use of `unpack` for consistency and Lua 5.2 compatibility.
|
||||
- Updated 'Open with Default Program' on Windows to work with spaces in names (#123).
|
||||
- Updated cmake installation script to install to '/Applications' on OSX.
|
||||
- Updated OSX build script to revert wxwidgets commit to fix auto-complete crash.
|
||||
- Updated `Start debugging` hint to clarify.
|
||||
- Updated single-click toggle to allow rename/move directories (ref #123).
|
||||
- Updated normalization flags as some path parts were changed to dots.
|
||||
- Updated editor tab processing using FindDocument method.
|
||||
- Updated shortcut for Replace All to avoid conflict on OSX (fixes #220).
|
||||
- Updated `SetDocumentModified` to use current tab text.
|
||||
|
||||
### Fixes
|
||||
- Fixed values 'captured' by redirected 'print' and not collected (fixes #240).
|
||||
- Fixed typo in fold style definition (ref #237).
|
||||
- Fixed console output being limited in addition to stack result limit.
|
||||
- Fixed hang in auto-complete on expressions involving '...' (fixes #235).
|
||||
- Fixed auto-complete for string values (broken by 933aacc2).
|
||||
- Fixed crash when LUA_DEV environmental variable is not set (fixes #228).
|
||||
- Fixed cmake cache filename (ref #225).
|
||||
- Fixed incorrect UTF-8 sequence in UTF-8 validity check.
|
||||
- Fixed Un/Comment menu for Output/Console windows.
|
||||
- Fixed format of the file name reported after compilation errors.
|
||||
- Fixed jumping to compilation error (if any) after Run/Debug.
|
||||
- Fixed disabling 'Open with Default Program' on OSX (ref #123).
|
||||
- Fixed file tree update after changes on OSX (ref #123).
|
||||
- Fixed copying full path on OSX (ref #123).
|
||||
- Fixed 'Open with Default Program' for paths with spaces on Windows (ref #123).
|
||||
- Fixed folding issue (caused by `math.mod` not available in LuaJIT).
|
||||
- Fixed debugger marker calculations to avoid marker conflicts.
|
||||
- Fixed color references in marker config examples.
|
||||
- Fixed Step Over/Out to stay in the same coroutine; Mobdebug 0.543 (closes #217).
|
||||
- Fixed case sensitivity in matching of file name in error messages (fixes #216).
|
||||
- Fixed tab text after SaveAs and loading files into the same tab.
|
||||
|
||||
## v0.39 (Oct 06 2013)
|
||||
|
||||
### Highlights
|
||||
|
||||
30
CONTRIBUTING.md
Normal file
30
CONTRIBUTING.md
Normal file
@@ -0,0 +1,30 @@
|
||||
# Help
|
||||
|
||||
For questions and feature discussions, please use the the maillist or the IRC channel as described in the [community section](http://studio.zerobrane.com/community) of the project website.
|
||||
|
||||
# Bugs
|
||||
|
||||
When filing a bug, please help us reproduce the issue by including the following information:
|
||||
|
||||
* Steps to reproduce the issue as well as the expected result. Screenshots also help.
|
||||
* Your operating system and the IDE version (or the latest commit if you are using the development version).
|
||||
* Any relevant configuration from the config file, if you cannot reproduce the issue with an empty config.
|
||||
* Any relevant plugins, if you cannot reproduce the issue without plugins.
|
||||
|
||||
It always helps to make sure that the issue is still reproducible with the most recent version of the IDE.
|
||||
|
||||
If you think that the issue is with the *debugger* (this also includes serialization issues), then open an issue in the [MobDebug repository](https://github.com/pkulchenko/MobDebug/issues).
|
||||
If the issue is with one of the *plugins*, then open an issue in the [ZeroBranePackage repository](https://github.com/pkulchenko/ZeroBranePackage/issues).
|
||||
|
||||
# Contributing
|
||||
|
||||
_By contributing to ZeroBrane Studio you are agreeing to release your contribution under the MIT License._
|
||||
|
||||
Thank you for contributing to ZeroBrane Studio! Here are some things you can do to improve it:
|
||||
|
||||
* **Fixing issues**: If you have ideas or suggestions on [fixing existing issues](https://github.com/pkulchenko/ZeroBraneStudio/issues), please update the tickets directly or send a pull request.
|
||||
* **Adding translations**: See [translation documentation](http://studio.zerobrane.com/doc-translation) for details.
|
||||
* **Implementing new features**: Please [discuss with us](http://studio.zerobrane.com/community) any significant changes you plan as early as possible.
|
||||
Try to implement the changes as a plugin first; the project already provides [plugin API](http://studio.zerobrane.com/doc-plugin) with more than [45 plugins](https://github.com/pkulchenko/ZeroBranePackage) already available.
|
||||
* **Improving documentation**: All the existing documentation is generated based on pages in [gh-pages branch](https://github.com/pkulchenko/ZeroBraneStudio/tree/gh-pages). You can provide clarifications, check the documentation for errors/typos, or fill any gaps.
|
||||
* **Spreading the word**!
|
||||
2
LICENSE
2
LICENSE
@@ -2,7 +2,7 @@
|
||||
|
||||
ZeroBrane Studio sources are released under the MIT License
|
||||
|
||||
Copyright (c) 2011-2012 Paul Kulchenko (paul@kulchenko.com)
|
||||
Copyright (c) 2011-2015 Paul Kulchenko (paul@kulchenko.com)
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
|
||||
84
README.md
84
README.md
@@ -1,9 +1,26 @@
|
||||
# Project Description
|
||||
|
||||
[ZeroBrane Studio](http://studio.zerobrane.com/) is a lightweight Lua IDE with code completion, syntax
|
||||
highlighting, remote debugger, code analyzer, live coding, and debugging
|
||||
support for several Lua engines (LuaJIT, Löve 2D, Moai, Gideros, Corona, Marmalade Quick,
|
||||
MobileLua, GSL-shell, and others). It originated from the [Estrela Editor](http://www.luxinia.de/index.php/Estrela/).
|
||||
[ZeroBrane Studio](http://studio.zerobrane.com/) is a lightweight cross-platform Lua IDE with code completion,
|
||||
syntax highlighting, remote debugger, code analyzer, live coding,
|
||||
and debugging support for several Lua engines
|
||||
([Lua 5.1](http://studio.zerobrane.com/doc-lua-debugging),
|
||||
[Lua 5.2](http://studio.zerobrane.com/doc-lua52-debugging),
|
||||
[Lua 5.3](http://studio.zerobrane.com/doc-lua53-debugging),
|
||||
[LuaJIT](http://studio.zerobrane.com/doc-luajit-debugging),
|
||||
[Löve 2D](http://notebook.kulchenko.com/zerobrane/love2d-debugging),
|
||||
[Moai](http://notebook.kulchenko.com/zerobrane/moai-debugging-with-zerobrane-studio),
|
||||
[Gideros](http://notebook.kulchenko.com/zerobrane/gideros-debugging-with-zerobrane-studio-ide),
|
||||
[Corona](http://notebook.kulchenko.com/zerobrane/debugging-and-live-coding-with-corona-sdk-applications-and-zerobrane-studio),
|
||||
[Marmalade Quick](http://notebook.kulchenko.com/zerobrane/marmalade-quick-debugging-with-zerobrane-studio),
|
||||
[Cocos2d-x](http://notebook.kulchenko.com/zerobrane/cocos2d-x-simulator-and-on-device-debugging-with-zerobrane-studio),
|
||||
[GSL-shell](http://notebook.kulchenko.com/zerobrane/gsl-shell-debugging-with-zerobrane-studio),
|
||||
[Adobe Lightroom](http://notebook.kulchenko.com/zerobrane/debugging-lightroom-plugins-zerobrane-studio-ide),
|
||||
[OpenResty/Nginx](http://notebook.kulchenko.com/zerobrane/debugging-openresty-nginx-lua-scripts-with-zerobrane-studio),
|
||||
[Lapis](http://notebook.kulchenko.com/zerobrane/lapis-debugging-with-zerobrane-studio),
|
||||
[Moonscript](http://notebook.kulchenko.com/zerobrane/moonscript-debugging-with-zerobrane-studio),
|
||||
and others). It originated from the [Estrela Editor](http://www.luxinia.de/index.php/Estrela/).
|
||||
|
||||

|
||||
|
||||
## Features
|
||||
|
||||
@@ -11,45 +28,68 @@ MobileLua, GSL-shell, and others). It originated from the [Estrela Editor](http:
|
||||
* Small, portable, and cross-platform (Windows, Mac OSX, and Linux).
|
||||
* Auto-completion for functions, keywords, and custom APIs.
|
||||
* Interactive console to directly test code snippets with local and remote execution.
|
||||
* Integrated debugger (with support for local and remote debugging).
|
||||
* Live coding with Lua ([demo](http://notebook.kulchenko.com/zerobrane/live-coding-in-lua-bret-victor-style)), Löve 2D ([demo](http://notebook.kulchenko.com/zerobrane/live-coding-with-love)), Gideros ([demo](http://notebook.kulchenko.com/zerobrane/gideros-live-coding-with-zerobrane-studio-ide)), Moai ([demo](http://notebook.kulchenko.com/zerobrane/live-coding-with-moai-and-zerobrane-studio)), and Corona SDK ([demo](http://notebook.kulchenko.com/zerobrane/debugging-and-live-coding-with-corona-sdk-applications-and-zerobrane-studio)).
|
||||
* Support for plugin-like components:
|
||||
- specs (spec/): file syntax, lexer, keywords (e.g. glsl);
|
||||
- apis (api/): for code-completion and tool-tips;
|
||||
- interpreters (interpreters/): how a project is run;
|
||||
- config (cfg/): contains style and basic editor settings;
|
||||
- tools (tools/): additional tools (e.g. DirectX/Cg shader compiler...).
|
||||
* Integrated debugger with local and [remote debugging](http://studio.zerobrane.com/doc-remote-debugging)
|
||||
for [Lua 5.1](http://studio.zerobrane.com/doc-lua-debugging),
|
||||
[Lua 5.2](http://studio.zerobrane.com/doc-lua52-debugging),
|
||||
[Lua 5.3](http://studio.zerobrane.com/doc-lua53-debugging),
|
||||
[LuaJIT](http://studio.zerobrane.com/doc-luajit-debugging),
|
||||
and [other Lua engines](http://studio.zerobrane.com/documentation#debugging).
|
||||
* [Live coding](http://studio.zerobrane.com/documentation#live_coding)
|
||||
with [Lua](http://notebook.kulchenko.com/zerobrane/live-coding-in-lua-bret-victor-style),
|
||||
[Löve 2D](http://notebook.kulchenko.com/zerobrane/live-coding-with-love),
|
||||
[Gideros](http://notebook.kulchenko.com/zerobrane/gideros-live-coding-with-zerobrane-studio-ide),
|
||||
[Moai](http://notebook.kulchenko.com/zerobrane/live-coding-with-moai-and-zerobrane-studio),
|
||||
[Corona SDK](http://notebook.kulchenko.com/zerobrane/debugging-and-live-coding-with-corona-sdk-applications-and-zerobrane-studio),
|
||||
GSL-shell, and other engines.
|
||||
* Function outline.
|
||||
* Fuzzy search with `Go To File`, `Go To Symbol`, and `Insert Library Function`.
|
||||
* Several ways to extend the current functionality:
|
||||
- specs (`spec/`): specifications for file syntax, lexer, and keywords;
|
||||
- apis (`api/`): descriptions for [code completion and tooltips](http://studio.zerobrane.com/doc-api-auto-complete);
|
||||
- interpreters (`interpreters/`): components for setting debugging and run-time project environment;
|
||||
- packages (`packages/`): [plugins](http://studio.zerobrane.com/doc-plugin) that provide additional functionality;
|
||||
- config (`cfg/`): settings for styles, color themes, and other preferences;
|
||||
- translations (`cfg/i18n/`): [translations](http://studio.zerobrane.com/doc-translation) of the menus and messages to other languages;
|
||||
- tools (`tools/`): additional tools.
|
||||
|
||||
## Documentation
|
||||
|
||||
* A [short and simple overview](http://studio.zerobrane.com/doc-getting-started.html) for those who are new to this development environment.
|
||||
* A list of [frequently asked questions](http://studio.zerobrane.com/doc-faq.html) about the IDE.
|
||||
* [Tutorials and demos](http://studio.zerobrane.com/tutorials.html) that cover debugging and live coding for different environments.
|
||||
* A [short and simple overview](http://studio.zerobrane.com/doc-getting-started) for those who are new to this development environment.
|
||||
* A list of [frequently asked questions](http://studio.zerobrane.com/doc-faq) about the IDE.
|
||||
* [Tutorials and demos](http://studio.zerobrane.com/tutorials) that cover debugging and live coding for different environments.
|
||||
* [Tips and tricks](http://studio.zerobrane.com/doc-tips-and-tricks).
|
||||
|
||||
## Screenshot
|
||||
## Installation
|
||||
|
||||

|
||||
ZeroBrane Studio can be installed into and run from any folder.
|
||||
No compilation is needed, although the scripts to compile required libraries for Windows, OSX, and Linux platforms are available in the `build/` folder.
|
||||
|
||||
## Usage
|
||||
|
||||
```
|
||||
Open file(s):
|
||||
zbstudio <filename> [<filename>...]
|
||||
any non-option will be treated as filename
|
||||
zbstudio [option] [<project directory>] <filename> [<filename>...]
|
||||
non-options are treated as a project directory to set or a file to open
|
||||
|
||||
Set project directory:
|
||||
zbstudio <project directory> [<filename>...]
|
||||
(0.39+) a directory passed as a parameter will be set as the project directory
|
||||
|
||||
Overriding default configuration:
|
||||
Override default configuration:
|
||||
zbstudio -cfg "<luacode overriding config>" [<filename>]
|
||||
e.g.: zbstudio -cfg "editor.fontsize=12" somefile.lua
|
||||
|
||||
Loading custom configuration:
|
||||
Load custom configuration:
|
||||
zbstudio -cfg path/file.lua [<filename>]
|
||||
e.g.: zbstudio -cfg cfg/estrela.lua
|
||||
```
|
||||
|
||||
If you are loading a file, you can also request the cursor to be set on a particular line or at a particular position by using `filename:<line>` and `filename:p<pos>` syntax (0.71+).
|
||||
|
||||
## Contributing
|
||||
|
||||
See [CONTRIBUTING](CONTRIBUTING.md).
|
||||
|
||||
## Author
|
||||
|
||||
### ZeroBrane Studio and MobDebug
|
||||
@@ -72,4 +112,4 @@ again.
|
||||
|
||||
## License
|
||||
|
||||
See LICENSE file.
|
||||
See [LICENSE](LICENSE).
|
||||
|
||||
@@ -130,8 +130,14 @@ findMSB = fn "returns bit number of msb. - (intN)(intN)",
|
||||
|
||||
discard = fn "conditionally (<0) kill a pixel before output. - ()(vecN)",
|
||||
dFdx = fn "returns approximate partial derivative with respect to window-space X. - (vecN)(vecN)",
|
||||
dFdxCoarse = fn "returns approximate partial derivative with respect to window-space X. - (vecN)(vecN)",
|
||||
dFdxFine = fn "returns approximate partial derivative with respect to window-space X. - (vecN)(vecN)",
|
||||
dFdy = fn "returns approximate partial derivative with respect to window-space Y. - (vecN)(vecN)",
|
||||
fwidth = fn "returns sum of approximate window-space partial derivatives magnitudes. - (vecN)(vecN)",
|
||||
dFdyCoarse = fn "returns approximate partial derivative with respect to window-space Y. - (vecN)(vecN)",
|
||||
dFdyFine = fn "returns approximate partial derivative with respect to window-space Y. - (vecN)(vecN)",
|
||||
fwidth = fn "returns abs sum of approximate window-space partial derivatives magnitudes. - (vecN)(vecN)",
|
||||
fwidthFine = fn "returns abs sum of approximate window-space partial derivatives magnitudes. - (vecN)(vecN)",
|
||||
fwidthCoarse = fn "returns abs sum of approximate window-space partial derivatives magnitudes. - (vecN)(vecN)",
|
||||
interpolateAtCentroid = fn "Return value of interpolant sampled inside pixel and the primitive. - (floatN)(floatN)",
|
||||
interpolateAtSample = fn "Return value of interpolant at the location fo sample. - (floatN)(floatN, int sample)",
|
||||
interpolateAtOffset = fn "Return value of interpolant sampled at fixed offset offset from pixel center. - (floatN)(floatN, vec2 offset)",
|
||||
@@ -153,20 +159,35 @@ memoryBarrierShared = fn "control ordering of memory transactions issued by shad
|
||||
memoryBarrierBuffer = fn "control ordering of memory transactions issued by shader thread. - ()()",
|
||||
memoryBarrierImage = fn "control ordering of memory transactions issued by shader thread. - ()()",
|
||||
groupMemoryBarrier = fn "control ordering of memory transactions issued by shader thread. - ()()",
|
||||
imageAtomicAdd = fn "performs atomic operation on individual texels returns new value. - (uint)(imageN, intN coord, [int sample], uint data)",
|
||||
imageAtomicMin = fn "performs atomic operation on individual texels returns new value. - (uint)(imageN, intN coord, [int sample], uint data)",
|
||||
imageAtomicMax = fn "performs atomic operation on individual texels returns new value. - (uint)(imageN, intN coord, [int sample], uint data)",
|
||||
imageAtomicIncWrap = fn "performs atomic operation on individual texels returns new value. - (uint)(imageN, intN coord, [int sample], uint data)",
|
||||
imageAtomicDecWrap = fn "performs atomic operation on individual texels returns new value. - (uint)(imageN, intN coord, [int sample], uint data)",
|
||||
imageAtomicAnd = fn "performs atomic operation on individual texels returns new value. - (uint)(imageN, intN coord, [int sample], uint data)",
|
||||
imageAtomicOr = fn "performs atomic operation on individual texels returns new value. - (uint)(imageN, intN coord, [int sample], uint data)",
|
||||
imageAtomicXor = fn "performs atomic operation on individual texels returns new value. - (uint)(imageN, intN coord, [int sample], uint data)",
|
||||
imageAtomicExchange = fn "performs atomic operation on individual texels returns new value. - (uint)(imageN, intN coord, [int sample], uint data)",
|
||||
imageAtomicCompSwap = fn "performs atomic operation on individual texels returns new value. - (uint)(imageN, intN coord, [int sample], uint data)",
|
||||
imageAtomicAdd = fn "performs atomic operation on individual texels returns old value. - (uint)(imageN, intN coord, [int sample], uint data)",
|
||||
imageAtomicMin = fn "performs atomic operation on individual texels returns old value. - (uint)(imageN, intN coord, [int sample], uint data)",
|
||||
imageAtomicMax = fn "performs atomic operation on individual texels returns old value. - (uint)(imageN, intN coord, [int sample], uint data)",
|
||||
imageAtomicIncWrap = fn "performs atomic operation on individual texels returns old value. - (uint)(imageN, intN coord, [int sample], uint data)",
|
||||
imageAtomicDecWrap = fn "performs atomic operation on individual texels returns old value. - (uint)(imageN, intN coord, [int sample], uint data)",
|
||||
imageAtomicAnd = fn "performs atomic operation on individual texels returns old value. - (uint)(imageN, intN coord, [int sample], uint data)",
|
||||
imageAtomicOr = fn "performs atomic operation on individual texels returns old value. - (uint)(imageN, intN coord, [int sample], uint data)",
|
||||
imageAtomicXor = fn "performs atomic operation on individual texels returns old value. - (uint)(imageN, intN coord, [int sample], uint data)",
|
||||
imageAtomicExchange = fn "performs atomic operation on individual texels returns old value. - (uint)(imageN, intN coord, [int sample], uint data)",
|
||||
imageAtomicCompSwap = fn "performs atomic operation on individual texels returns old value. - (uint)(imageN, intN coord, [int sample], uint data)",
|
||||
imageStore = fn "stores the texel at the coordinate. - ()(imageN, intN coord, [int sample], vecN data)",
|
||||
imageLoad = fn "loads the texel at the coordinate. - (vecN)(imageN, intN coord, [int sample])",
|
||||
imageSize = fn "returns the size of the image. - (ivecN)(imageN)",
|
||||
imageSamples = fn "returns the samples of the multi-sampled image. - (int)(image2DMSN)",
|
||||
|
||||
atomicCounterIncrement = fn "increments counter and returns old value. - (uint)(atomic_uint)",
|
||||
atomicCounterDecrement = fn "decrements counter and returns old value. - (uint)(atomic_uint)",
|
||||
atomicCounter = fn "returns current counter value. - (uint)(atomic_uint)",
|
||||
atomicMin = fn "performs atomic operation on memory location (ssbo/shared) returns old value. - (uint)(inout uint mem, uint data)",
|
||||
atomicMax = fn "performs atomic operation on memory location (ssbo/shared) returns old value. - (uint)(inout uint mem, uint data)",
|
||||
atomicAdd = fn "performs atomic operation on memory location (ssbo/shared) returns old value. - (uint)(inout uint mem, uint data)",
|
||||
atomicAnd = fn "performs atomic operation on memory location (ssbo/shared) returns old value. - (uint)(inout uint mem, uint data)",
|
||||
atomicOr = fn "performs atomic operation on memory location (ssbo/shared) returns old value. - (uint)(inout uint mem, uint data)",
|
||||
atomicXor = fn "performs atomic operation on memory location (ssbo/shared) returns old value. - (uint)(inout uint mem, uint data)",
|
||||
atomicExchange = fn "performs atomic operation on memory location (ssbo/shared) returns old value. - (uint)(inout uint mem, uint data)",
|
||||
atomicCompSwap = fn "performs atomic operation on memory location (ssbo/shared) returns old value. - (uint)(inout uint mem, uint data)",
|
||||
|
||||
textureSize = fn "returns the size of the texture (no lod required: Rect, MS and Buffer). - (intN)(samplerN, [int lod])",
|
||||
textureSamples = fn "returns the samples of the multi-sampled texture. - (int)(texture2DMSN)",
|
||||
textureQueryLod = fn "returns the lod values for a given coordinate. - (vec2)(samplerN, vecN coord)",
|
||||
texture = fn "performs a texture lookup. Shadow samplers require base N+1 coordinate. Lod bias is optional (illegal for MS, Buffer, Rect). - (vec4)(samplerN, vecN coord, [float bias])",
|
||||
textureProj = fn "performas a projective texture lookup (only Nd samplers + Rect). Shadows require N+1 base coordinate, no Lod bias allowed for Rect. - (vec4)(samplerN, vecN+1 coord, [float bias])",
|
||||
@@ -234,6 +255,8 @@ local keyw =
|
||||
gl_NumWorkGroups gl_WorkGroupSize gl_WorkGroupID gl_LocalInvocationID gl_GlobalInvocationID gl_LocalInvocationIndex
|
||||
local_size_x local_size_y local_size_z
|
||||
gl_BaseVertexARB gl_BaseInstanceARB gl_DrawIDARB
|
||||
bindless_sampler bound_sampler bindless_image bound_image early_fragment_tests
|
||||
gl_HelperInvocation gl_CullDistance gl_MaxSamples
|
||||
|
||||
coherent volatile restrict readonly writeonly
|
||||
image1D image2D image3D image2DRect imageCube imageBuffer image1DArray image2DArray imageCubeArray image2DMS image2DMSArray
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
5560
api/lua/corona.lua
5560
api/lua/corona.lua
File diff suppressed because it is too large
Load Diff
2485
api/lua/glewgl.lua
2485
api/lua/glewgl.lua
File diff suppressed because it is too large
Load Diff
2637
api/lua/love2d.lua
2637
api/lua/love2d.lua
File diff suppressed because it is too large
Load Diff
2339
api/lua/luxgfx.lua
2339
api/lua/luxgfx.lua
File diff suppressed because one or more lines are too long
@@ -1,823 +0,0 @@
|
||||
--[[// lxm | Lux Math
|
||||
typedef float lxVector2 [ 2 ] ;
|
||||
typedef float lxVector3 [ 3 ] ;
|
||||
typedef float lxVector4 [ 4 ] ;
|
||||
typedef float lxPlane [ 4 ] ;
|
||||
typedef float lxMatrix44 [ 16 ] ;
|
||||
typedef float lxMatrix34 [ 12 ] ;
|
||||
typedef float lxQuat [ 4 ] ;
|
||||
typedef float * lxVector2PTR ;
|
||||
typedef float * lxVector3PTR ;
|
||||
typedef float * lxVector4PTR ;
|
||||
typedef float * lxPlanePTR ;
|
||||
typedef float * lxMatrix44PTR ;
|
||||
typedef float * lxMatrix34PTR ;
|
||||
typedef float * lxQuatPTR ;
|
||||
typedef const float * lxVector2CPTR ;
|
||||
typedef const float * lxVector3CPTR ;
|
||||
typedef const float * lxVector4CPTR ;
|
||||
typedef const float * lxPlaneCPTR ;
|
||||
typedef const float * lxMatrix44CPTR ;
|
||||
typedef const float * lxMatrix34CPTR ;
|
||||
typedef const float * lxQuatCPTR ;
|
||||
typedef __declspec ( align ( 16 ) ) lxMatrix44 lxMatrix44SIMD ;
|
||||
typedef __declspec ( align ( 16 ) ) lxVector4 lxVector4SIMD ;
|
||||
typedef __declspec ( align ( 16 ) ) lxVector4 lxVector3SIMD ;
|
||||
typedef struct lxFrustumPlane_s * lxFrustumPlanePTR ;
|
||||
typedef const struct lxFrustumPlane_s * lxFrustumPlaneCPTR ;
|
||||
typedef struct lxFrustum_s * lxFrustumPTR ;
|
||||
typedef const struct lxFrustum_s * lxFrustumCPTR ;
|
||||
typedef struct lxBoundingBox_s * lxBoundingBoxPTR ;
|
||||
typedef const struct lxBoundingBox_s * lxBoundingBoxCPTR ;
|
||||
typedef struct lxBoundingBoxCenter_s * lxBoundingBoxCenterPTR ;
|
||||
typedef const struct lxBoundingBoxCenter_s * lxBoundingBoxCenterCPTR ;
|
||||
typedef struct lxBoundingSphere_s * lxBoundingSpherePTR ;
|
||||
typedef const struct lxBoundingSphere_s * lxBoundingSphereCPTR ;
|
||||
typedef struct lxBoundingCone_s * lxBoundingConePTR ;
|
||||
typedef const struct lxBoundingCone_s * lxBoundingConeCPTR ;
|
||||
typedef struct lxBoundingCapsule_s * lxBoundingCapsulePTR ;
|
||||
typedef const struct lxBoundingCapsule_s * lxBoundingCapsuleCPTR ;
|
||||
typedef enum lxFrustumPlaneType_e
|
||||
{
|
||||
LUX_FRUSTUM_TOP , LUX_FRUSTUM_BOTTOM , LUX_FRUSTUM_NEAR , LUX_FRUSTUM_FAR , LUX_FRUSTUM_LEFT , LUX_FRUSTUM_RIGHT , LUX_FRUSTUM_PLANES , }
|
||||
lxFrustumPlaneType_t ;
|
||||
typedef enum lxFrustumCornerType_e
|
||||
{
|
||||
LUX_FRUSTUM_C_NTR , LUX_FRUSTUM_C_NTL , LUX_FRUSTUM_C_NBL , LUX_FRUSTUM_C_NBR , LUX_FRUSTUM_C_FTR , LUX_FRUSTUM_C_FTL , LUX_FRUSTUM_C_FBL , LUX_FRUSTUM_C_FBR , LUX_FRUSTUM_CORNERS , }
|
||||
lxFrustumCornerType_t ;
|
||||
typedef enum lxCullType_e
|
||||
{
|
||||
LUX_CULL_INTERSECT = - 1 , LUX_CULL_OUTSIDE = 0 , LUX_CULL_INSIDE = 1 , }
|
||||
lxCullType_t ;
|
||||
typedef struct lxFrustumPlane_s
|
||||
{
|
||||
lxPlane pvec ;
|
||||
union
|
||||
{
|
||||
int n [ 3 ] ;
|
||||
struct
|
||||
{
|
||||
int nx ;
|
||||
int ny ;
|
||||
int nz ;
|
||||
int _npad ;
|
||||
}
|
||||
;
|
||||
}
|
||||
;
|
||||
union
|
||||
{
|
||||
int p [ 3 ] ;
|
||||
struct
|
||||
{
|
||||
int px ;
|
||||
int py ;
|
||||
int pz ;
|
||||
int _ppad ;
|
||||
}
|
||||
;
|
||||
}
|
||||
;
|
||||
}
|
||||
lxFrustumPlane_t ;
|
||||
typedef struct lxFrustum_s
|
||||
{
|
||||
lxFrustumPlane_t fplanes [ LUX_FRUSTUM_PLANES ] ;
|
||||
}
|
||||
lxFrustum_t ;
|
||||
typedef struct lxBoundingBox_s
|
||||
{
|
||||
lxVector4 min ;
|
||||
lxVector4 max ;
|
||||
}
|
||||
lxBoundingBox_t ;
|
||||
typedef struct lxBoundingBoxCenter_s
|
||||
{
|
||||
lxVector4 center ;
|
||||
lxVector4 size ;
|
||||
}
|
||||
lxBoundingBoxCenter_t ;
|
||||
typedef struct lxBoundingSphere_s
|
||||
{
|
||||
lxVector3 center ;
|
||||
float radius ;
|
||||
}
|
||||
lxBoundingSphere_t ;
|
||||
typedef struct lxBoundingCone_s
|
||||
{
|
||||
lxVector4 top ;
|
||||
lxVector4 axis ;
|
||||
float sinDiv ;
|
||||
float sinSqr ;
|
||||
float cosSqr ;
|
||||
float _pad ;
|
||||
}
|
||||
lxBoundingCone_t ;
|
||||
typedef struct lxBoundingCapsule_s
|
||||
{
|
||||
lxVector4 origin ;
|
||||
lxVector4 toEnd ;
|
||||
float radius ;
|
||||
float radiusSqr ;
|
||||
float _pad [ 2 ] ;
|
||||
}
|
||||
lxBoundingCapsule_t ;
|
||||
booln lxMinMax_intersectsV ( const float selfminmax [ 6 ] , const float otherminmax [ 6 ] ) ;
|
||||
void lxBoundingBox_init ( lxBoundingBoxPTR bbox ) ;
|
||||
void lxBoundingBox_toCenter ( lxBoundingBoxCPTR bbox , lxVector3 center , lxVector3 size ) ;
|
||||
lxBoundingBoxPTR lxBoundingBox_copy ( lxBoundingBoxPTR dst , lxBoundingBoxCPTR src ) ;
|
||||
lxBoundingSpherePTR lxBoundingSphere_copy ( lxBoundingSpherePTR dst , lxBoundingSphereCPTR src ) ;
|
||||
lxBoundingBoxPTR lxBoundingBox_merge ( lxBoundingBoxPTR out , lxBoundingBoxCPTR a , lxBoundingBoxCPTR b ) ;
|
||||
booln lxBoundingBox_mergeChange ( lxBoundingBoxPTR out , lxBoundingBoxCPTR a , lxBoundingBoxCPTR b ) ;
|
||||
booln lxBoundingSphere_mergeChange ( lxBoundingSpherePTR out , lxBoundingSphereCPTR a , lxBoundingSphereCPTR b ) ;
|
||||
void lxBoundingBox_toCenterBox ( lxBoundingBoxCPTR box , lxBoundingBoxCenterPTR ctr ) ;
|
||||
void lxBoundingBox_fromCenterBox ( lxBoundingBoxPTR box , lxBoundingBoxCenterCPTR ctr ) ;
|
||||
lxBoundingSpherePTR lxBoundingBox_toSphere ( lxBoundingBoxCPTR bbox , lxBoundingSpherePTR sphere ) ;
|
||||
void lxBoundingBox_toSphereV ( const lxVector3 min , const lxVector3 max , lxVector3 center , float * radius ) ;
|
||||
lxBoundingCapsulePTR lxBoundingBox_toCapsule ( lxBoundingBoxCPTR bbox , lxBoundingCapsulePTR capsule ) ;
|
||||
lxBoundingBoxPTR lxBoundingBox_transform ( lxBoundingBoxPTR out , lxBoundingBoxCPTR in , lxMatrix44CPTR trans ) ;
|
||||
void lxBoundingBox_transformBoxCorners ( lxBoundingBoxCPTR in , lxMatrix44CPTR trans , lxVector3 box [ 8 ] ) ;
|
||||
void lxBoundingBox_transformV ( lxVector3 outmins , lxVector3 outmaxs , const lxVector3 mins , const lxVector3 maxs , lxMatrix44CPTR trans ) ;
|
||||
void lxBoundingBox_fromCorners ( lxBoundingBoxPTR bbox , const lxVector3 vecs [ 8 ] ) ;
|
||||
void lxBoundingCorners_fromCamera ( lxVector3 vecs [ 8 ] , lxMatrix44CPTR mat , const float fov , const float frontplane , const float backplane , const float aspect ) ;
|
||||
booln lxBoundingBox_intersect ( lxBoundingBoxCPTR a , lxBoundingBoxCPTR b ) ;
|
||||
booln lxBoundingBox_checkPoint ( lxBoundingBoxCPTR out , const lxVector3 point ) ;
|
||||
booln lxBoundingCone_checkSphere ( lxBoundingConeCPTR cone , lxBoundingSphereCPTR sphere ) ;
|
||||
void lxBoundingSphereCone_fromCamera ( lxBoundingSpherePTR sphere , lxBoundingConePTR cone , float frontplane , float backplane , const lxVector3 pos , const lxVector3 dir , float fov ) ;
|
||||
void lxBoundingCone_fromFrustumCorners ( lxBoundingConePTR cone , const lxVector3 box [ LUX_FRUSTUM_CORNERS ] ) ;
|
||||
void lxBoundingSphere_fromFrustumCorners ( lxBoundingSpherePTR sphere , const lxVector3 box [ LUX_FRUSTUM_CORNERS ] ) ;
|
||||
void lxFrustum_update ( lxFrustumPTR frustum , lxMatrix44CPTR viewproj ) ;
|
||||
booln lxFrustum_checkPoint ( lxFrustumCPTR frustum , lxVector3CPTR vec ) ;
|
||||
booln lxFrustum_checkSphere ( lxFrustumCPTR frustum , lxBoundingSphereCPTR ) ;
|
||||
booln lxFrustum_checkSphereCoherent ( lxFrustumCPTR pFrustum , lxBoundingSphereCPTR sphere , int * plane ) ;
|
||||
booln lxFrustum_checkSphereFull ( lxFrustumCPTR frustum , lxBoundingSphereCPTR ) ;
|
||||
booln lxFrustum_checkBoundingBox ( lxFrustumCPTR frustum , lxBoundingBoxCPTR bbox ) ;
|
||||
booln lxFrustum_checkBoundingBoxCoherent ( lxFrustumCPTR pFrustum , lxBoundingBoxCPTR bbox , int * plane ) ;
|
||||
lxCullType_t lxFrustum_cullBoundingBoxMaskedCoherent ( lxFrustumCPTR pFrustum , lxBoundingBoxCPTR bbox , int in_mask , int * out_mask , int * inoutstart_id ) ;
|
||||
lxCullType_t lxFrustum_cullPoints ( lxFrustumCPTR frustum , const lxVector4 * vecarray , const int numVec ) ;
|
||||
lxCullType_t lxFrustum_cullBoundingBox ( lxFrustumCPTR frustum , lxBoundingBoxCPTR bbox ) ;
|
||||
void lxFrustum_getCorners ( lxFrustumCPTR frustum , lxVector3 box [ LUX_FRUSTUM_CORNERS ] ) ;
|
||||
void lxFrustum_fromCorners ( lxFrustumPTR frustum , const lxVector3 box [ LUX_FRUSTUM_CORNERS ] ) ;
|
||||
void lxFrustum_updateSigns ( lxFrustumPTR frustum ) ;
|
||||
lxMatrix44CPTR lxMatrix44GetIdentity ( ) ;
|
||||
void lxMatrix44Identity ( lxMatrix44PTR dst ) ;
|
||||
void lxMatrix44Copy ( lxMatrix44PTR dst , lxMatrix44CPTR src ) ;
|
||||
void lxMatrix44CopyRot ( lxMatrix44PTR dst , lxMatrix44CPTR src ) ;
|
||||
void lxMatrix44CopyRotTransposed ( lxMatrix44PTR dst , lxMatrix44CPTR src ) ;
|
||||
void lxMatrix44SetTranslation ( lxMatrix44PTR dst , lxVector3CPTR translation ) ;
|
||||
void lxMatrix44SetInvTranslation ( lxMatrix44PTR dst , lxVector3CPTR translation ) ;
|
||||
void lxMatrix44SetScale ( lxMatrix44PTR dst , lxVector3CPTR scale ) ;
|
||||
void lxMatrix44PreScale ( lxMatrix44PTR dst , lxMatrix44CPTR mat , lxVector3CPTR scale ) ;
|
||||
void lxMatrix44SetRotRows ( lxMatrix44PTR dst , float a , float b , float c , float d , float e , float f , float g , float h , float i ) ;
|
||||
float * lxMatrix44GetTranslation ( lxMatrix44CPTR mat , lxVector3PTR vec ) ;
|
||||
void lxMatrix44Clear ( lxMatrix44PTR mat ) ;
|
||||
void lxMatrix44ClearRot ( lxMatrix44PTR mat ) ;
|
||||
void lxMatrix44ClearTranslation ( lxMatrix44PTR mat ) ;
|
||||
void lxMatrix44VectorTransform ( lxMatrix44CPTR mat , lxVector3PTR v1 ) ;
|
||||
void lxMatrix44VectorInvTransform ( lxMatrix44CPTR mat , lxVector3PTR pVect ) ;
|
||||
void lxMatrix44VectorRotate ( lxMatrix44CPTR mat , lxVector3PTR v1 ) ;
|
||||
void lxMatrix44VectorInvRotate ( lxMatrix44CPTR mat , lxVector3PTR pVect ) ;
|
||||
void lxMatrix44VectorTranslate ( lxMatrix44CPTR mat , lxVector3PTR pVect ) ;
|
||||
void lxMatrix44VectorInvTranslate ( lxMatrix44CPTR mat , lxVector3PTR pVect ) ;
|
||||
void lxMatrix44Multiply ( lxMatrix44PTR dst , lxMatrix44CPTR mat1 , lxMatrix44CPTR mat2 ) ;
|
||||
void lxMatrix44Multiply1 ( lxMatrix44PTR mat1 , lxMatrix44CPTR mat2 ) ;
|
||||
void lxMatrix44Multiply2 ( lxMatrix44CPTR mat1 , lxMatrix44PTR mat2 ) ;
|
||||
void lxMatrix44MultiplyFull ( lxMatrix44PTR clip , lxMatrix44CPTR proj , lxMatrix44CPTR modl ) ;
|
||||
void lxMatrix44MultiplyRot ( lxMatrix44PTR dst , lxMatrix44CPTR mat1 , lxMatrix44CPTR mat2 ) ;
|
||||
void lxMatrix44MultiplyRot1 ( lxMatrix44PTR mat1 , lxMatrix44CPTR mat2 ) ;
|
||||
void lxMatrix44MultiplyRot2 ( lxMatrix44CPTR mat1 , lxMatrix44PTR mat2 ) ;
|
||||
void lxMatrix44Orthonormalize ( lxMatrix44PTR dst , lxMatrix44PTR src ) ;
|
||||
void lxMatrix44Transpose ( lxMatrix44PTR dst , lxMatrix44CPTR src ) ;
|
||||
void lxMatrix44Transpose1 ( lxMatrix44PTR mat ) ;
|
||||
void lxMatrix44TransposeRot ( lxMatrix44PTR dst , lxMatrix44CPTR src ) ;
|
||||
void lxMatrix44TransposeRot1 ( lxMatrix44PTR mat ) ;
|
||||
void lxMatrix44TransposeRotIdentity ( lxMatrix44PTR dst , lxMatrix44CPTR src ) ;
|
||||
void lxMatrix44Invert ( lxMatrix44PTR dst , lxMatrix44CPTR src ) ;
|
||||
void lxMatrix44Invert1 ( lxMatrix44PTR mat ) ;
|
||||
void lxMatrix44AffineInvert ( lxMatrix44PTR dst , lxMatrix44CPTR src ) ;
|
||||
void lxMatrix44Orient ( lxMatrix44PTR mat , lxVector3CPTR forward , lxVector3CPTR up , int axis ) ;
|
||||
void lxMatrix44LookAt ( lxMatrix44PTR mat , lxVector3CPTR from , lxVector3CPTR to , lxVector3CPTR up ) ;
|
||||
void lxMatrix44FromEulerZYX ( lxMatrix44PTR mat , lxVector3CPTR angles ) ;
|
||||
void lxMatrix44FromEulerZYXFast ( lxMatrix44PTR mat , lxVector3CPTR angles ) ;
|
||||
void lxMatrix44FromEulerZYXdeg ( lxMatrix44PTR mat , lxVector3CPTR angles ) ;
|
||||
void lxMatrix44FromEulerXYZ ( lxMatrix44PTR mat , lxVector3PTR angles ) ;
|
||||
void lxMatrix44FromEulerXYZFast ( lxMatrix44PTR mat , lxVector3PTR angles ) ;
|
||||
void lxMatrix44FromAngleAxis ( lxMatrix44PTR mat , lxVector3CPTR axis , float cos , float sin , float oneminuscos ) ;
|
||||
void lxMatrix44FromAngleAxisFast ( lxMatrix44PTR mat , float anglerad , lxVector3CPTR axis ) ;
|
||||
void lxMatrix44RotateAngle ( lxMatrix44PTR mat , lxVector3PTR from , lxVector3PTR to ) ;
|
||||
void lxMatrix44RotateAroundVector ( lxMatrix44PTR mat , lxVector3PTR axis , float cos , float sin , float oneminuscos ) ;
|
||||
void lxMatrix44RotateAroundVectorFast ( lxMatrix44PTR mat , lxVector3PTR axis , float angleRad ) ;
|
||||
void lxMatrix44RotateAroundPointFast ( lxMatrix44PTR mat , lxVector3CPTR center , lxVector3CPTR angles ) ;
|
||||
void lxMatrix44ToEulerXYZ ( lxMatrix44CPTR mat , lxVector3PTR angles ) ;
|
||||
void lxMatrix44ToEulerZYX ( lxMatrix44CPTR mat , lxVector3PTR angles ) ;
|
||||
void lxMatrix44Perspective ( lxMatrix44PTR mat , const float fov , const float front , const float back , const float aspect ) ;
|
||||
void lxMatrix44PerspectiveInf ( lxMatrix44PTR mat , const float fov , const float front , const float aspect ) ;
|
||||
void lxMatrix44Ortho ( lxMatrix44PTR mat , const float height , const float front , const float back , const float aspect ) ;
|
||||
void lxMatrix44OrthoDirect ( lxMatrix44PTR mat , const float left , const float right , const float bottom , const float top , const float front , const float back ) ;
|
||||
void lxMatrix44PlaneProjection ( lxMatrix44PTR mat , lxVector3CPTR planenormal ) ;
|
||||
void lxMatrix44ModifyProjectionClipplane ( lxMatrix44PTR projmatrix , lxMatrix44CPTR mview , lxMatrix44CPTR mviewinv , lxVector4CPTR clipPlane ) ;
|
||||
void lxMatrix44Reflection ( lxMatrix44PTR mat , lxVector4PTR plane ) ;
|
||||
float lxMatrix44CompareRot ( lxMatrix44PTR mat1 , lxMatrix44PTR mat2 ) ;
|
||||
void lxMatrix44Swizzle1 ( lxMatrix44PTR mat , uint axis [ 3 ] , lxVector3PTR dirs ) ;
|
||||
extern const float lx_gMatrix44_ident [ 16 ] ;
|
||||
float16 lxFloat32To16 ( float fval ) ;
|
||||
float lxFloat16To32 ( float16 ival ) ;
|
||||
]]
|
||||
--auto-generated api from ffi headers
|
||||
local api =
|
||||
{
|
||||
["lx_gMatrix44_ident"] = { type ='value', description = "extern const float lx_gMatrix44_ident[16]", valuetype = nil, },
|
||||
["LUX_FRUSTUM_TOP"] = { type ='value', },
|
||||
["LUX_FRUSTUM_BOTTOM"] = { type ='value', },
|
||||
["LUX_FRUSTUM_NEAR"] = { type ='value', },
|
||||
["LUX_FRUSTUM_FAR"] = { type ='value', },
|
||||
["LUX_FRUSTUM_LEFT"] = { type ='value', },
|
||||
["LUX_FRUSTUM_RIGHT"] = { type ='value', },
|
||||
["LUX_FRUSTUM_PLANES"] = { type ='value', },
|
||||
["LUX_FRUSTUM_C_NTR"] = { type ='value', },
|
||||
["LUX_FRUSTUM_C_NTL"] = { type ='value', },
|
||||
["LUX_FRUSTUM_C_NBL"] = { type ='value', },
|
||||
["LUX_FRUSTUM_C_NBR"] = { type ='value', },
|
||||
["LUX_FRUSTUM_C_FTR"] = { type ='value', },
|
||||
["LUX_FRUSTUM_C_FTL"] = { type ='value', },
|
||||
["LUX_FRUSTUM_C_FBL"] = { type ='value', },
|
||||
["LUX_FRUSTUM_C_FBR"] = { type ='value', },
|
||||
["LUX_FRUSTUM_CORNERS"] = { type ='value', },
|
||||
["LUX_CULL_INTERSECT"] = { type ='value', },
|
||||
["LUX_CULL_OUTSIDE"] = { type ='value', },
|
||||
["LUX_CULL_INSIDE"] = { type ='value', },
|
||||
["lxMinMax_intersectsV"] = { type ='function',
|
||||
description = "",
|
||||
returns = "(booln)",
|
||||
valuetype = nil,
|
||||
args = "(const float selfminmax [ 6 ] , const float otherminmax [ 6 ])", },
|
||||
["lxBoundingBox_init"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(lxBoundingBoxPTR bbox)", },
|
||||
["lxBoundingBox_toCenter"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(lxBoundingBoxCPTR bbox , lxVector3 center , lxVector3 size)", },
|
||||
["lxBoundingBox_copy"] = { type ='function',
|
||||
description = "",
|
||||
returns = "(lxBoundingBoxPTR)",
|
||||
valuetype = "lxm.lxBoundingBox_t",
|
||||
args = "(lxBoundingBoxPTR dst , lxBoundingBoxCPTR src)", },
|
||||
["lxBoundingSphere_copy"] = { type ='function',
|
||||
description = "",
|
||||
returns = "(lxBoundingSpherePTR)",
|
||||
valuetype = "lxm.lxBoundingSphere_t",
|
||||
args = "(lxBoundingSpherePTR dst , lxBoundingSphereCPTR src)", },
|
||||
["lxBoundingBox_merge"] = { type ='function',
|
||||
description = "",
|
||||
returns = "(lxBoundingBoxPTR)",
|
||||
valuetype = "lxm.lxBoundingBox_t",
|
||||
args = "(lxBoundingBoxPTR out , lxBoundingBoxCPTR a , lxBoundingBoxCPTR b)", },
|
||||
["lxBoundingBox_mergeChange"] = { type ='function',
|
||||
description = "",
|
||||
returns = "(booln)",
|
||||
valuetype = nil,
|
||||
args = "(lxBoundingBoxPTR out , lxBoundingBoxCPTR a , lxBoundingBoxCPTR b)", },
|
||||
["lxBoundingSphere_mergeChange"] = { type ='function',
|
||||
description = "",
|
||||
returns = "(booln)",
|
||||
valuetype = nil,
|
||||
args = "(lxBoundingSpherePTR out , lxBoundingSphereCPTR a , lxBoundingSphereCPTR b)", },
|
||||
["lxBoundingBox_toCenterBox"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(lxBoundingBoxCPTR box , lxBoundingBoxCenterPTR ctr)", },
|
||||
["lxBoundingBox_fromCenterBox"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(lxBoundingBoxPTR box , lxBoundingBoxCenterCPTR ctr)", },
|
||||
["lxBoundingBox_toSphere"] = { type ='function',
|
||||
description = "",
|
||||
returns = "(lxBoundingSpherePTR)",
|
||||
valuetype = "lxm.lxBoundingSphere_t",
|
||||
args = "(lxBoundingBoxCPTR bbox , lxBoundingSpherePTR sphere)", },
|
||||
["lxBoundingBox_toSphereV"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(const lxVector3 min , const lxVector3 max , lxVector3 center , float * radius)", },
|
||||
["lxBoundingBox_toCapsule"] = { type ='function',
|
||||
description = "",
|
||||
returns = "(lxBoundingCapsulePTR)",
|
||||
valuetype = "lxm.lxBoundingCapsule_t",
|
||||
args = "(lxBoundingBoxCPTR bbox , lxBoundingCapsulePTR capsule)", },
|
||||
["lxBoundingBox_transform"] = { type ='function',
|
||||
description = "",
|
||||
returns = "(lxBoundingBoxPTR)",
|
||||
valuetype = "lxm.lxBoundingBox_t",
|
||||
args = "(lxBoundingBoxPTR out , lxBoundingBoxCPTR in , lxMatrix44CPTR trans)", },
|
||||
["lxBoundingBox_transformBoxCorners"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(lxBoundingBoxCPTR in , lxMatrix44CPTR trans , lxVector3 box [ 8 ])", },
|
||||
["lxBoundingBox_transformV"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(lxVector3 outmins , lxVector3 outmaxs , const lxVector3 mins , const lxVector3 maxs , lxMatrix44CPTR trans)", },
|
||||
["lxBoundingBox_fromCorners"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(lxBoundingBoxPTR bbox , const lxVector3 vecs [ 8 ])", },
|
||||
["lxBoundingCorners_fromCamera"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(lxVector3 vecs [ 8 ] , lxMatrix44CPTR mat , const float fov , const float frontplane , const float backplane , const float aspect)", },
|
||||
["lxBoundingBox_intersect"] = { type ='function',
|
||||
description = "",
|
||||
returns = "(booln)",
|
||||
valuetype = nil,
|
||||
args = "(lxBoundingBoxCPTR a , lxBoundingBoxCPTR b)", },
|
||||
["lxBoundingBox_checkPoint"] = { type ='function',
|
||||
description = "",
|
||||
returns = "(booln)",
|
||||
valuetype = nil,
|
||||
args = "(lxBoundingBoxCPTR out , const lxVector3 point)", },
|
||||
["lxBoundingCone_checkSphere"] = { type ='function',
|
||||
description = "",
|
||||
returns = "(booln)",
|
||||
valuetype = nil,
|
||||
args = "(lxBoundingConeCPTR cone , lxBoundingSphereCPTR sphere)", },
|
||||
["lxBoundingSphereCone_fromCamera"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(lxBoundingSpherePTR sphere , lxBoundingConePTR cone , float frontplane , float backplane , const lxVector3 pos , const lxVector3 dir , float fov)", },
|
||||
["lxBoundingCone_fromFrustumCorners"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(lxBoundingConePTR cone , const lxVector3 box [ LUX_FRUSTUM_CORNERS ])", },
|
||||
["lxBoundingSphere_fromFrustumCorners"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(lxBoundingSpherePTR sphere , const lxVector3 box [ LUX_FRUSTUM_CORNERS ])", },
|
||||
["lxFrustum_update"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(lxFrustumPTR frustum , lxMatrix44CPTR viewproj)", },
|
||||
["lxFrustum_checkPoint"] = { type ='function',
|
||||
description = "",
|
||||
returns = "(booln)",
|
||||
valuetype = nil,
|
||||
args = "(lxFrustumCPTR frustum , lxVector3CPTR vec)", },
|
||||
["lxFrustum_checkSphere"] = { type ='function',
|
||||
description = "",
|
||||
returns = "(booln)",
|
||||
valuetype = nil,
|
||||
args = "(lxFrustumCPTR frustum , lxBoundingSphereCPTR)", },
|
||||
["lxFrustum_checkSphereCoherent"] = { type ='function',
|
||||
description = "",
|
||||
returns = "(booln)",
|
||||
valuetype = nil,
|
||||
args = "(lxFrustumCPTR pFrustum , lxBoundingSphereCPTR sphere , int * plane)", },
|
||||
["lxFrustum_checkSphereFull"] = { type ='function',
|
||||
description = "",
|
||||
returns = "(booln)",
|
||||
valuetype = nil,
|
||||
args = "(lxFrustumCPTR frustum , lxBoundingSphereCPTR)", },
|
||||
["lxFrustum_checkBoundingBox"] = { type ='function',
|
||||
description = "",
|
||||
returns = "(booln)",
|
||||
valuetype = nil,
|
||||
args = "(lxFrustumCPTR frustum , lxBoundingBoxCPTR bbox)", },
|
||||
["lxFrustum_checkBoundingBoxCoherent"] = { type ='function',
|
||||
description = "",
|
||||
returns = "(booln)",
|
||||
valuetype = nil,
|
||||
args = "(lxFrustumCPTR pFrustum , lxBoundingBoxCPTR bbox , int * plane)", },
|
||||
["lxFrustum_cullBoundingBoxMaskedCoherent"] = { type ='function',
|
||||
description = "",
|
||||
returns = "(lxCullType_t)",
|
||||
valuetype = nil,
|
||||
args = "(lxFrustumCPTR pFrustum , lxBoundingBoxCPTR bbox , int in_mask , int * out_mask , int * inoutstart_id)", },
|
||||
["lxFrustum_cullPoints"] = { type ='function',
|
||||
description = "",
|
||||
returns = "(lxCullType_t)",
|
||||
valuetype = nil,
|
||||
args = "(lxFrustumCPTR frustum , const lxVector4 * vecarray , const int numVec)", },
|
||||
["lxFrustum_cullBoundingBox"] = { type ='function',
|
||||
description = "",
|
||||
returns = "(lxCullType_t)",
|
||||
valuetype = nil,
|
||||
args = "(lxFrustumCPTR frustum , lxBoundingBoxCPTR bbox)", },
|
||||
["lxFrustum_getCorners"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(lxFrustumCPTR frustum , lxVector3 box [ LUX_FRUSTUM_CORNERS ])", },
|
||||
["lxFrustum_fromCorners"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(lxFrustumPTR frustum , const lxVector3 box [ LUX_FRUSTUM_CORNERS ])", },
|
||||
["lxFrustum_updateSigns"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(lxFrustumPTR frustum)", },
|
||||
["lxMatrix44GetIdentity"] = { type ='function',
|
||||
description = "",
|
||||
returns = "(lxMatrix44CPTR)",
|
||||
valuetype = nil,
|
||||
args = "()", },
|
||||
["lxMatrix44Identity"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(lxMatrix44PTR dst)", },
|
||||
["lxMatrix44Copy"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(lxMatrix44PTR dst , lxMatrix44CPTR src)", },
|
||||
["lxMatrix44CopyRot"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(lxMatrix44PTR dst , lxMatrix44CPTR src)", },
|
||||
["lxMatrix44CopyRotTransposed"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(lxMatrix44PTR dst , lxMatrix44CPTR src)", },
|
||||
["lxMatrix44SetTranslation"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(lxMatrix44PTR dst , lxVector3CPTR translation)", },
|
||||
["lxMatrix44SetInvTranslation"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(lxMatrix44PTR dst , lxVector3CPTR translation)", },
|
||||
["lxMatrix44SetScale"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(lxMatrix44PTR dst , lxVector3CPTR scale)", },
|
||||
["lxMatrix44PreScale"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(lxMatrix44PTR dst , lxMatrix44CPTR mat , lxVector3CPTR scale)", },
|
||||
["lxMatrix44SetRotRows"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(lxMatrix44PTR dst , float a , float b , float c , float d , float e , float f , float g , float h , float i)", },
|
||||
["lxMatrix44GetTranslation"] = { type ='function',
|
||||
description = "",
|
||||
returns = "(float *)",
|
||||
valuetype = nil,
|
||||
args = "(lxMatrix44CPTR mat , lxVector3PTR vec)", },
|
||||
["lxMatrix44Clear"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(lxMatrix44PTR mat)", },
|
||||
["lxMatrix44ClearRot"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(lxMatrix44PTR mat)", },
|
||||
["lxMatrix44ClearTranslation"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(lxMatrix44PTR mat)", },
|
||||
["lxMatrix44VectorTransform"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(lxMatrix44CPTR mat , lxVector3PTR v1)", },
|
||||
["lxMatrix44VectorInvTransform"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(lxMatrix44CPTR mat , lxVector3PTR pVect)", },
|
||||
["lxMatrix44VectorRotate"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(lxMatrix44CPTR mat , lxVector3PTR v1)", },
|
||||
["lxMatrix44VectorInvRotate"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(lxMatrix44CPTR mat , lxVector3PTR pVect)", },
|
||||
["lxMatrix44VectorTranslate"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(lxMatrix44CPTR mat , lxVector3PTR pVect)", },
|
||||
["lxMatrix44VectorInvTranslate"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(lxMatrix44CPTR mat , lxVector3PTR pVect)", },
|
||||
["lxMatrix44Multiply"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(lxMatrix44PTR dst , lxMatrix44CPTR mat1 , lxMatrix44CPTR mat2)", },
|
||||
["lxMatrix44Multiply1"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(lxMatrix44PTR mat1 , lxMatrix44CPTR mat2)", },
|
||||
["lxMatrix44Multiply2"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(lxMatrix44CPTR mat1 , lxMatrix44PTR mat2)", },
|
||||
["lxMatrix44MultiplyFull"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(lxMatrix44PTR clip , lxMatrix44CPTR proj , lxMatrix44CPTR modl)", },
|
||||
["lxMatrix44MultiplyRot"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(lxMatrix44PTR dst , lxMatrix44CPTR mat1 , lxMatrix44CPTR mat2)", },
|
||||
["lxMatrix44MultiplyRot1"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(lxMatrix44PTR mat1 , lxMatrix44CPTR mat2)", },
|
||||
["lxMatrix44MultiplyRot2"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(lxMatrix44CPTR mat1 , lxMatrix44PTR mat2)", },
|
||||
["lxMatrix44Orthonormalize"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(lxMatrix44PTR dst , lxMatrix44PTR src)", },
|
||||
["lxMatrix44Transpose"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(lxMatrix44PTR dst , lxMatrix44CPTR src)", },
|
||||
["lxMatrix44Transpose1"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(lxMatrix44PTR mat)", },
|
||||
["lxMatrix44TransposeRot"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(lxMatrix44PTR dst , lxMatrix44CPTR src)", },
|
||||
["lxMatrix44TransposeRot1"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(lxMatrix44PTR mat)", },
|
||||
["lxMatrix44TransposeRotIdentity"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(lxMatrix44PTR dst , lxMatrix44CPTR src)", },
|
||||
["lxMatrix44Invert"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(lxMatrix44PTR dst , lxMatrix44CPTR src)", },
|
||||
["lxMatrix44Invert1"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(lxMatrix44PTR mat)", },
|
||||
["lxMatrix44AffineInvert"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(lxMatrix44PTR dst , lxMatrix44CPTR src)", },
|
||||
["lxMatrix44Orient"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(lxMatrix44PTR mat , lxVector3CPTR forward , lxVector3CPTR up , int axis)", },
|
||||
["lxMatrix44LookAt"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(lxMatrix44PTR mat , lxVector3CPTR from , lxVector3CPTR to , lxVector3CPTR up)", },
|
||||
["lxMatrix44FromEulerZYX"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(lxMatrix44PTR mat , lxVector3CPTR angles)", },
|
||||
["lxMatrix44FromEulerZYXFast"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(lxMatrix44PTR mat , lxVector3CPTR angles)", },
|
||||
["lxMatrix44FromEulerZYXdeg"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(lxMatrix44PTR mat , lxVector3CPTR angles)", },
|
||||
["lxMatrix44FromEulerXYZ"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(lxMatrix44PTR mat , lxVector3PTR angles)", },
|
||||
["lxMatrix44FromEulerXYZFast"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(lxMatrix44PTR mat , lxVector3PTR angles)", },
|
||||
["lxMatrix44FromAngleAxis"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(lxMatrix44PTR mat , lxVector3CPTR axis , float cos , float sin , float oneminuscos)", },
|
||||
["lxMatrix44FromAngleAxisFast"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(lxMatrix44PTR mat , float anglerad , lxVector3CPTR axis)", },
|
||||
["lxMatrix44RotateAngle"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(lxMatrix44PTR mat , lxVector3PTR from , lxVector3PTR to)", },
|
||||
["lxMatrix44RotateAroundVector"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(lxMatrix44PTR mat , lxVector3PTR axis , float cos , float sin , float oneminuscos)", },
|
||||
["lxMatrix44RotateAroundVectorFast"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(lxMatrix44PTR mat , lxVector3PTR axis , float angleRad)", },
|
||||
["lxMatrix44RotateAroundPointFast"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(lxMatrix44PTR mat , lxVector3CPTR center , lxVector3CPTR angles)", },
|
||||
["lxMatrix44ToEulerXYZ"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(lxMatrix44CPTR mat , lxVector3PTR angles)", },
|
||||
["lxMatrix44ToEulerZYX"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(lxMatrix44CPTR mat , lxVector3PTR angles)", },
|
||||
["lxMatrix44Perspective"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(lxMatrix44PTR mat , const float fov , const float front , const float back , const float aspect)", },
|
||||
["lxMatrix44PerspectiveInf"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(lxMatrix44PTR mat , const float fov , const float front , const float aspect)", },
|
||||
["lxMatrix44Ortho"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(lxMatrix44PTR mat , const float height , const float front , const float back , const float aspect)", },
|
||||
["lxMatrix44OrthoDirect"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(lxMatrix44PTR mat , const float left , const float right , const float bottom , const float top , const float front , const float back)", },
|
||||
["lxMatrix44PlaneProjection"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(lxMatrix44PTR mat , lxVector3CPTR planenormal)", },
|
||||
["lxMatrix44ModifyProjectionClipplane"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(lxMatrix44PTR projmatrix , lxMatrix44CPTR mview , lxMatrix44CPTR mviewinv , lxVector4CPTR clipPlane)", },
|
||||
["lxMatrix44Reflection"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(lxMatrix44PTR mat , lxVector4PTR plane)", },
|
||||
["lxMatrix44CompareRot"] = { type ='function',
|
||||
description = "",
|
||||
returns = "(float)",
|
||||
valuetype = nil,
|
||||
args = "(lxMatrix44PTR mat1 , lxMatrix44PTR mat2)", },
|
||||
["lxMatrix44Swizzle1"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(lxMatrix44PTR mat , uint axis [ 3 ] , lxVector3PTR dirs)", },
|
||||
["lxFloat32To16"] = { type ='function',
|
||||
description = "",
|
||||
returns = "(float16)",
|
||||
valuetype = nil,
|
||||
args = "(float fval)", },
|
||||
["lxFloat16To32"] = { type ='function',
|
||||
description = "",
|
||||
returns = "(float)",
|
||||
valuetype = nil,
|
||||
args = "(float16 ival)", },
|
||||
["lxFrustumPlane_t"] = { type ='class',
|
||||
description = "",
|
||||
childs = {
|
||||
["pvec"] = { type ='value', description = "lxPlane", valuetype = nil, },
|
||||
[""] = { type ='class',
|
||||
description = "",
|
||||
childs = {
|
||||
["nx"] = { type ='value', description = "int", valuetype = nil, },
|
||||
["ny"] = { type ='value', description = "int", valuetype = nil, },
|
||||
["nz"] = { type ='value', description = "int", valuetype = nil, },
|
||||
["_npad"] = { type ='value', description = "int", valuetype = nil, },
|
||||
}
|
||||
},
|
||||
[""] = { type ='class',
|
||||
description = "",
|
||||
childs = {
|
||||
["px"] = { type ='value', description = "int", valuetype = nil, },
|
||||
["py"] = { type ='value', description = "int", valuetype = nil, },
|
||||
["pz"] = { type ='value', description = "int", valuetype = nil, },
|
||||
["_ppad"] = { type ='value', description = "int", valuetype = nil, },
|
||||
}
|
||||
},
|
||||
}
|
||||
},
|
||||
["lxFrustum_t"] = { type ='class',
|
||||
description = "",
|
||||
childs = {
|
||||
["LUX_FRUSTUM_PLANES"] = { type ='value', description = "lxFrustumPlane_t fplanes]", valuetype = nil, },
|
||||
}
|
||||
},
|
||||
["lxBoundingBox_t"] = { type ='class',
|
||||
description = "",
|
||||
childs = {
|
||||
["min"] = { type ='value', description = "lxVector4", valuetype = nil, },
|
||||
["max"] = { type ='value', description = "lxVector4", valuetype = nil, },
|
||||
}
|
||||
},
|
||||
["lxBoundingBoxCenter_t"] = { type ='class',
|
||||
description = "",
|
||||
childs = {
|
||||
["center"] = { type ='value', description = "lxVector4", valuetype = nil, },
|
||||
["size"] = { type ='value', description = "lxVector4", valuetype = nil, },
|
||||
}
|
||||
},
|
||||
["lxBoundingSphere_t"] = { type ='class',
|
||||
description = "",
|
||||
childs = {
|
||||
["center"] = { type ='value', description = "lxVector3", valuetype = nil, },
|
||||
["radius"] = { type ='value', description = "float", valuetype = nil, },
|
||||
}
|
||||
},
|
||||
["lxBoundingCone_t"] = { type ='class',
|
||||
description = "",
|
||||
childs = {
|
||||
["top"] = { type ='value', description = "lxVector4", valuetype = nil, },
|
||||
["axis"] = { type ='value', description = "lxVector4", valuetype = nil, },
|
||||
["sinDiv"] = { type ='value', description = "float", valuetype = nil, },
|
||||
["sinSqr"] = { type ='value', description = "float", valuetype = nil, },
|
||||
["cosSqr"] = { type ='value', description = "float", valuetype = nil, },
|
||||
["_pad"] = { type ='value', description = "float", valuetype = nil, },
|
||||
}
|
||||
},
|
||||
["lxBoundingCapsule_t"] = { type ='class',
|
||||
description = "",
|
||||
childs = {
|
||||
["origin"] = { type ='value', description = "lxVector4", valuetype = nil, },
|
||||
["toEnd"] = { type ='value', description = "lxVector4", valuetype = nil, },
|
||||
["radius"] = { type ='value', description = "float", valuetype = nil, },
|
||||
["radiusSqr"] = { type ='value', description = "float", valuetype = nil, },
|
||||
["2"] = { type ='value', description = "float _pad]", valuetype = nil, },
|
||||
}
|
||||
},
|
||||
}
|
||||
return {
|
||||
lxm = {
|
||||
type = 'lib',
|
||||
description = "Lux Math",
|
||||
childs = api,
|
||||
},
|
||||
}
|
||||
@@ -1,130 +0,0 @@
|
||||
--[[// lxs | Lux Scene
|
||||
typedef enum lxMeshIndexType_e
|
||||
{
|
||||
LUX_MESH_INDEX_UINT16 , LUX_MESH_INDEX_UINT32 , LUX_MESH_INDICES , }
|
||||
lxMeshIndexType_t ;
|
||||
void lxMeshPlane_getCounts ( int segs [ 2 ] , int * numVertices , int * numTriangleIndices , int * numOutlineIndices ) ;
|
||||
void lxMeshPlane_initTriangles ( int segs [ 2 ] , lxVector3 * pos , lxVector3 * normal , lxVector2 * uv , uint32 * indices ) ;
|
||||
void lxMeshPlane_initOutline ( int segs [ 2 ] , uint32 * indices ) ;
|
||||
void lxMeshDisc_getCounts ( int segs [ 2 ] , int * numVertices , int * numTriangleIndices , int * numOutlineIndices ) ;
|
||||
void lxMeshDisc_initTriangles ( int segs [ 2 ] , lxVector3 * pos , lxVector3 * normal , lxVector2 * uv , uint32 * indices ) ;
|
||||
void lxMeshDisc_initOutline ( int segs [ 2 ] , uint32 * indices ) ;
|
||||
void lxMeshBox_getCounts ( int segs [ 3 ] , int * numVertices , int * numTriangleIndices , int * numOutlineIndices ) ;
|
||||
void lxMeshBox_initTriangles ( int segs [ 3 ] , lxVector3 * pos , lxVector3 * normal , lxVector2 * uv , uint32 * indices ) ;
|
||||
void lxMeshBox_initOutline ( int segs [ 3 ] , uint32 * indices ) ;
|
||||
void lxMeshSphere_getCounts ( int segs [ 2 ] , int * numVertices , int * numTriangleIndices , int * numOutlineIndices ) ;
|
||||
void lxMeshSphere_initTriangles ( int segs [ 2 ] , lxVector3 * pos , lxVector3 * normal , lxVector2 * uv , uint32 * indices ) ;
|
||||
void lxMeshSphere_initOutline ( int segs [ 2 ] , uint32 * indices ) ;
|
||||
void lxMeshCylinder_getCounts ( int segs [ 3 ] , int * numVertices , int * numTriangleIndices , int * numOutlineIndices ) ;
|
||||
void lxMeshCylinder_initTriangles ( int segs [ 3 ] , lxVector3 * pos , lxVector3 * normal , lxVector2 * uv , uint32 * indices ) ;
|
||||
void lxMeshCylinder_initOutline ( int segs [ 3 ] , uint32 * indices ) ;
|
||||
void * lxVertexCacheOptimize_tipsify ( void * indices , int nTriangles , int nVertices , int k , lxMeshIndexType_t type ) ;
|
||||
void * lxVertexCacheOptimize_forsyth ( void * indices , int nTriangles , int nVertices , int vcache , lxMeshIndexType_t type ) ;
|
||||
void * lxVertexCacheOptimize_grid_castano ( void * indices , int maxTriangles , int width , int height , int vcache , lxMeshIndexType_t type , int * writtenTriangles ) ;
|
||||
|
||||
|
||||
]]
|
||||
--auto-generated api from ffi headers
|
||||
local api =
|
||||
{
|
||||
["LUX_MESH_INDEX_UINT16"] = { type ='value', },
|
||||
["LUX_MESH_INDEX_UINT32"] = { type ='value', },
|
||||
["LUX_MESH_INDICES"] = { type ='value', },
|
||||
["lxMeshPlane_getCounts"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(int segs [ 2 ] , int * numVertices , int * numTriangleIndices , int * numOutlineIndices)", },
|
||||
["lxMeshPlane_initTriangles"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(int segs [ 2 ] , lxVector3 * pos , lxVector3 * normal , lxVector2 * uv , uint32 * indices)", },
|
||||
["lxMeshPlane_initOutline"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(int segs [ 2 ] , uint32 * indices)", },
|
||||
["lxMeshDisc_getCounts"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(int segs [ 2 ] , int * numVertices , int * numTriangleIndices , int * numOutlineIndices)", },
|
||||
["lxMeshDisc_initTriangles"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(int segs [ 2 ] , lxVector3 * pos , lxVector3 * normal , lxVector2 * uv , uint32 * indices)", },
|
||||
["lxMeshDisc_initOutline"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(int segs [ 2 ] , uint32 * indices)", },
|
||||
["lxMeshBox_getCounts"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(int segs [ 3 ] , int * numVertices , int * numTriangleIndices , int * numOutlineIndices)", },
|
||||
["lxMeshBox_initTriangles"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(int segs [ 3 ] , lxVector3 * pos , lxVector3 * normal , lxVector2 * uv , uint32 * indices)", },
|
||||
["lxMeshBox_initOutline"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(int segs [ 3 ] , uint32 * indices)", },
|
||||
["lxMeshSphere_getCounts"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(int segs [ 2 ] , int * numVertices , int * numTriangleIndices , int * numOutlineIndices)", },
|
||||
["lxMeshSphere_initTriangles"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(int segs [ 2 ] , lxVector3 * pos , lxVector3 * normal , lxVector2 * uv , uint32 * indices)", },
|
||||
["lxMeshSphere_initOutline"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(int segs [ 2 ] , uint32 * indices)", },
|
||||
["lxMeshCylinder_getCounts"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(int segs [ 3 ] , int * numVertices , int * numTriangleIndices , int * numOutlineIndices)", },
|
||||
["lxMeshCylinder_initTriangles"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(int segs [ 3 ] , lxVector3 * pos , lxVector3 * normal , lxVector2 * uv , uint32 * indices)", },
|
||||
["lxMeshCylinder_initOutline"] = { type ='function',
|
||||
description = "",
|
||||
returns = "()",
|
||||
valuetype = nil,
|
||||
args = "(int segs [ 3 ] , uint32 * indices)", },
|
||||
["lxVertexCacheOptimize_tipsify"] = { type ='function',
|
||||
description = "",
|
||||
returns = "(void *)",
|
||||
valuetype = nil,
|
||||
args = "(void * indices , int nTriangles , int nVertices , int k , lxMeshIndexType_t type)", },
|
||||
["lxVertexCacheOptimize_forsyth"] = { type ='function',
|
||||
description = "",
|
||||
returns = "(void *)",
|
||||
valuetype = nil,
|
||||
args = "(void * indices , int nTriangles , int nVertices , int vcache , lxMeshIndexType_t type)", },
|
||||
["lxVertexCacheOptimize_grid_castano"] = { type ='function',
|
||||
description = "",
|
||||
returns = "(void *)",
|
||||
valuetype = nil,
|
||||
args = "(void * indices , int maxTriangles , int width , int height , int vcache , lxMeshIndexType_t type , int * writtenTriangles)", },
|
||||
}
|
||||
return {
|
||||
lxs = {
|
||||
type = 'lib',
|
||||
description = "Lux Scene",
|
||||
childs = api,
|
||||
},
|
||||
}
|
||||
@@ -1,9 +1,15 @@
|
||||
-- Copyright 2013 Paul Kulchenko, ZeroBrane LLC
|
||||
-- Copyright 2013-14 Paul Kulchenko, ZeroBrane LLC
|
||||
|
||||
return {
|
||||
ads = {
|
||||
type = "class",
|
||||
childs = {
|
||||
init = {
|
||||
type = "method",
|
||||
description = "Initialise the ad system, must be called before the ad system can be used.",
|
||||
args = "()",
|
||||
returns = "()",
|
||||
},
|
||||
isAvailable = {
|
||||
type = "method",
|
||||
description = "Checks availability of ads.",
|
||||
@@ -27,6 +33,12 @@ return {
|
||||
analytics = {
|
||||
type = "class",
|
||||
childs = {
|
||||
endSession = {
|
||||
type = "method",
|
||||
description = "Ends a Flurry analytics session.",
|
||||
args = "()",
|
||||
returns = "()",
|
||||
},
|
||||
isAvailable = {
|
||||
type = "method",
|
||||
description = "Checks availability of analytics.",
|
||||
@@ -47,7 +59,7 @@ return {
|
||||
},
|
||||
startSession = {
|
||||
type = "method",
|
||||
description = "Starts a Flurry analytics session.\nyour app",
|
||||
description = "Starts a Flurry analytics session.",
|
||||
args = "(apiKey: string)",
|
||||
returns = "()",
|
||||
},
|
||||
@@ -263,7 +275,7 @@ return {
|
||||
},
|
||||
isAvailable = {
|
||||
type = "method",
|
||||
description = "Checks available of in-app purchasing.",
|
||||
description = "Checks availability of in-app purchasing.",
|
||||
args = "()",
|
||||
returns = "(boolean)",
|
||||
},
|
||||
@@ -519,6 +531,10 @@ return {
|
||||
director = {
|
||||
type = "class",
|
||||
childs = {
|
||||
addNodesToScene = {
|
||||
type = "value",
|
||||
description = "Whether or not the Director should automatically add newly-created display objects to the current scene.\nThe default value is true.",
|
||||
},
|
||||
addScene = {
|
||||
type = "method",
|
||||
description = "Add a Scene object to the Director. The added Scene object will become the current scene.\nTypically this function is not called directly: instead, the app calls director:createScene() which both creates the new Scene\nobject and adds it to the Director.",
|
||||
@@ -536,84 +552,84 @@ return {
|
||||
description = "Create an animation, specifying arbitrary input values.\nSee the Objects reference for details of all properties and functions on the Animation object.",
|
||||
valuetype = "animation",
|
||||
args = "(values: table)",
|
||||
returns = "(object)",
|
||||
returns = "(animation)",
|
||||
},
|
||||
createAtlas = {
|
||||
type = "method",
|
||||
description = "Create a texture atlas. Two different input types are permitted:\n| ``director:createAtlas(filename)``\n| ``director:createAtlas(values)``\nSee the Objects reference for details of all properties and functions on the Atlas object.",
|
||||
valuetype = "atlas",
|
||||
args = "(filename: string, values: table)",
|
||||
returns = "(object)",
|
||||
returns = "(atlas)",
|
||||
},
|
||||
createBBox = {
|
||||
type = "method",
|
||||
description = "Create a bounding box object, from x and y bounds. The object simply copies these values into the properties\nxMin, xMax, yMin, yMax respectively.\n----------\n**Scene functions**.",
|
||||
valuetype = "box",
|
||||
args = "(xMin: number, xMax: number, yMin: number, yMax: number)",
|
||||
returns = "(object)",
|
||||
returns = "(box)",
|
||||
},
|
||||
createCircle = {
|
||||
type = "method",
|
||||
description = "Create a Circle node. Two different input types are permitted:\n| ``director:createCircle(x, y, radius)``\n| ``director:createCircle(values)``\nSee the Objects reference for details of all properties and functions on the Circle object.",
|
||||
valuetype = "circle",
|
||||
args = "(x: number, y: number, radius: number, values: table)",
|
||||
returns = "(object)",
|
||||
returns = "(circle)",
|
||||
},
|
||||
createFont = {
|
||||
type = "method",
|
||||
description = "Create a Font object. Two different input types are permitted:\n| ``director:createFont(filename)``\n| ``director:createFont(values)``\nSee the Objects reference for details of all properties and functions on the Font object.",
|
||||
valuetype = "font",
|
||||
args = "(filename: string, values: table)",
|
||||
returns = "(object)",
|
||||
returns = "(font)",
|
||||
},
|
||||
createLabel = {
|
||||
type = "method",
|
||||
description = "Create a Label node. Two different input types are permitted:\n| ``director:createLabel(x, y, text, font)``\n| ``director:createLabel(values)``\nSee the Objects reference for details of all properties and functions on the Label object.",
|
||||
valuetype = "label",
|
||||
args = "(x: number, y: number, text: string, font: object or string, values: table)",
|
||||
returns = "(object)",
|
||||
returns = "(label)",
|
||||
},
|
||||
createLines = {
|
||||
type = "method",
|
||||
description = "Create a Lines node. Two different input types are permitted:\n| ``director:createLines(x, y, coords)``\n| ``director:createLines(values)``\nSee the Objects reference for details of all properties and functions on the Lines object.",
|
||||
valuetype = "lines",
|
||||
args = "(x: number, y: number, coords: table, values: table)",
|
||||
returns = "(object)",
|
||||
returns = "(lines)",
|
||||
},
|
||||
createNode = {
|
||||
type = "method",
|
||||
description = "Create a Node object, specifying a table of arbitrary input values.\nSee the Objects reference for details of all properties and functions on the Node object.",
|
||||
valuetype = "node",
|
||||
args = "(values: table)",
|
||||
returns = "(object)",
|
||||
returns = "(node)",
|
||||
},
|
||||
createParticles = {
|
||||
type = "method",
|
||||
description = "Create a Particles node. Three different input types are permitted:\n| ``director:createParticles(plist)``\n| ``director:createParticles(numParticles)``\n| ``director:createParticles(values)``\nThis file is output from the ParticleDesigner tool, or similar.\nThe app should then set up all other member variables explicitly.\nwritable properties of the Particles object. Additionally, the user \ncan specify the 'source' property, which can be a full pathname to a \ntexture, or an existing Atlas object. For example::\n-- Specify texture from filename\nlocal p1 = director:createParticles( { totalParticles=500, source=\"particles/fire.png\" } )\n-- Specify texture from Atlas object\nlocal atlas = director:createAtlas(\"textures/beachball.png\")\nlocal p2 = director:createParticles( { totalParticles=500, source=atlas } )\nSee the Objects reference for details of all properties and functions on the Particles object.",
|
||||
valuetype = "particles",
|
||||
args = "(plist: string, numParticles: number, values: table)",
|
||||
returns = "(object)",
|
||||
returns = "(particles)",
|
||||
},
|
||||
createRectangle = {
|
||||
type = "method",
|
||||
description = "Create a Rectangle node. Two different input types are permitted:\n| ``director:createRectangle(x, y, w, h)``\n| ``director:createRectangle(values)``\nSee the Objects reference for details of all properties and functions on the Rectangle object.",
|
||||
valuetype = "rectangle",
|
||||
args = "(x: number, y: number, w: number, h: number, values: table)",
|
||||
returns = "(object)",
|
||||
returns = "(rectangle)",
|
||||
},
|
||||
createScene = {
|
||||
type = "method",
|
||||
description = "Create a scene node, and set it to be the director's current scene.\nNote that no transition occurs from any previous scene, and no scene events are thrown.",
|
||||
valuetype = "scene",
|
||||
args = "()",
|
||||
returns = "(object)",
|
||||
returns = "(scene)",
|
||||
},
|
||||
createSprite = {
|
||||
type = "method",
|
||||
description = "Create a Sprite node. Two different input types are permitted:\n| ``director:createSprite(x, y, source)``\n| ``director:createSprite(values)``\nSee the Objects reference for details of all properties and functions on the Sprite object.",
|
||||
valuetype = "sprite",
|
||||
args = "(x: number, y: number, source: number or object, values: table)",
|
||||
returns = "(object)",
|
||||
returns = "(sprite)",
|
||||
},
|
||||
displayCenterX = {
|
||||
type = "value",
|
||||
@@ -637,6 +653,10 @@ return {
|
||||
args = "()",
|
||||
returns = "(object)",
|
||||
},
|
||||
isAlphaInherited = {
|
||||
type = "value",
|
||||
description = "Whether or not node alpha (and strokeAlpha) should be inherited (propogated) through the scene graph.\nThe default value is true.",
|
||||
},
|
||||
moveToScene = {
|
||||
type = "method",
|
||||
description = "Move to a new scene. The new scene receives the following events:\n- setUp - Called immediately, only if the new scene is not already set up.\n- enterPreTransition - Called BEFORE any transition, immediately after the check for sending of the setUp event.\n- enterPostTransition - Called AFTER any transition has completed.\nThe old scene receives the following events:\n- exitPreTransition - Called BEFORE any transition, immediately after the enterPreTransition event is sent to the new scene.\n- tearDown - Called AFTER any transition has completed, if the scene is currently set up.\n- exitPostTransition - Called AFTER any transition has completed, immediately after the tearDown event.\nThe options table can take the following properties:\n- transitionType (string) - Valid values are:\n- \"rotoZoom\"\n- \"jumpZoom\"\n- \"moveInR\"\n- \"moveInT\"\n- \"moveInB\"\n- \"slideInL\"\n- \"slideInR\"\n- \"slideInB\"\n- \"slideInT\"\n- \"shrinkGrow\"\n- \"flipX\"\n- \"flipY\"\n- \"flipAngular\"\n- \"zoomFlipX\"\n- \"zoomFlipY\"\n- \"zoomFlipAngular\"\n- \"crossFade\"\n- \"turnOffTiles\"\n- \"splitCols\"\n- \"splitRows\"\n- \"fadeTR\"\n- \"fadeBL\"\n- \"fadeUp\"\n- \"fadeDown\"\n- \"progressRadialCCW\"\n- \"progressRadialCW\"\n- \"progressHorizontal\"\n- \"progressVertical\"\n- \"progressInOut\"\n- \"progressOutIn\"\n- \"fade\"\n- \"pageTurn\"\nYou'll have to experiment with them to find out what they really do! \n- transitionTime (number) - The duration of the transition, in seconds.\n----------\n**Node functions**.",
|
||||
@@ -666,6 +686,12 @@ return {
|
||||
facebook = {
|
||||
type = "class",
|
||||
childs = {
|
||||
isAvailable = {
|
||||
type = "method",
|
||||
description = "Checks availability of the Facebook API.",
|
||||
args = "()",
|
||||
returns = "(boolean)",
|
||||
},
|
||||
login = {
|
||||
type = "method",
|
||||
description = "Log in to Facebook.\nDisplays the Facebook login dialog. If the user has already put in\ntheir Facebook details then this dialog may not be displayed.",
|
||||
@@ -743,7 +769,7 @@ return {
|
||||
description = "The null function allows one to specify a null value in an associative array (which is otherwise\ndiscarded if you set the value with 'nil' in Lua).",
|
||||
valuetype = "null",
|
||||
args = "()",
|
||||
returns = "(object)",
|
||||
returns = "(null)",
|
||||
},
|
||||
},
|
||||
},
|
||||
@@ -856,7 +882,7 @@ return {
|
||||
description = "Add a timed event to this node.",
|
||||
valuetype = "timer",
|
||||
args = "(funcortable: function or table, period: number, iterations: number, delay: number)",
|
||||
returns = "(object)",
|
||||
returns = "(timer)",
|
||||
},
|
||||
alpha = {
|
||||
type = "value",
|
||||
@@ -906,6 +932,18 @@ return {
|
||||
args = "()",
|
||||
returns = "(object)",
|
||||
},
|
||||
getPointInLocalSpace = {
|
||||
type = "method",
|
||||
description = "Given a point in the world (scene) space, return a point in the node's local space.\nNote that for this function to behave as expected, the node's local transform must\nbe up-to-date. For example, if trying to call this function directly after creating a node,\nyou should call Node:sync() to update the local transform first.\n:return: Returns an x,y pair for the point in local (node) space.",
|
||||
args = "(x: number, y: number)",
|
||||
returns = "()",
|
||||
},
|
||||
getPointInWorldSpace = {
|
||||
type = "method",
|
||||
description = "Given a point in the node's local space, return a point in the world (scene) space.\nNote that for this function to behave as expected, the node's local transform must\nbe up-to-date. For example, if trying to call this function directly after creating a node,\nyou should call Node:sync() to update the local transform first.\n:return: Returns an x,y pair for the point in world (scene) space.",
|
||||
args = "(x: number, y: number)",
|
||||
returns = "()",
|
||||
},
|
||||
getTimersTimeScale = {
|
||||
type = "method",
|
||||
description = "Get the time scaling factor currently applied to all timers on this node.",
|
||||
@@ -1026,6 +1064,12 @@ return {
|
||||
args = "(f: number)",
|
||||
returns = "()",
|
||||
},
|
||||
sync = {
|
||||
type = "method",
|
||||
description = "Synchronises the Cocos2d-x data with the Quick data for this Node. In most scenarios you do\nnot need to explicitly call this function - it is done automatically across the scene, as\npart of the Director's update.",
|
||||
args = "()",
|
||||
returns = "()",
|
||||
},
|
||||
timers = {
|
||||
type = "value",
|
||||
description = "The list (table) of timers attached to this node. The table can be queried for its length, and can be iterated over, but must\nnot be manipulated in any other way. Attempting to insert or remove elements from the table will result in undefined and almost\ncertainly undesirable behaviour.",
|
||||
@@ -1082,36 +1126,6 @@ return {
|
||||
},
|
||||
},
|
||||
},
|
||||
nui = {
|
||||
type = "class",
|
||||
childs = {
|
||||
createWebView = {
|
||||
type = "method",
|
||||
description = "Create a fullscreen or windowed web view. Two different input types are permitted:\n| ``director:createWebView(url)``\n| ``director:createWebView(values)``\nExamples::\n-- Create a fullscreen web view\nlocal view1 = director:createWebView(\"http://www.google.com/news\")\n-- Create a windowed web view\nlocal view2 = director:createWebView( {\nx=0, y=0, \nw=200, h=100, \ntransparentBackground=true, \nurl=\"http://www.google.com/news\", \n} )",
|
||||
valuetype = "webView",
|
||||
args = "(url: string, values: table)",
|
||||
returns = "(object)",
|
||||
},
|
||||
isReadStringAvailable = {
|
||||
type = "method",
|
||||
description = "Check whether \"readString\" functionality is available on the target device.\nNote that in Quick 1.0, \"readString\" functionality is not supported on Mac, so this function will return false.",
|
||||
args = "()",
|
||||
returns = "(boolean)",
|
||||
},
|
||||
isWebViewAvailable = {
|
||||
type = "method",
|
||||
description = "Check whether web views are available on the target device.",
|
||||
args = "()",
|
||||
returns = "(boolean)",
|
||||
},
|
||||
readString = {
|
||||
type = "method",
|
||||
description = "Creates a modal native dialog box for inputting a text string. The dialog box displays the string being entered, and\nthe native device Input Method Entry (IME) mechanism it used to capture the string (for mobile devices, this is usually\nin the form of a \"soft keyboard\" that slides onto the screen for touch-typing).\nThe user must specify a \"prompt\" string, that will be used as a title for the native dialog box. The user may optionally\nspecify a \"mode\" string, which can be used to configure the IME (e.g. the type of touch keyboard) depending on the type\nof string being captured - e.g to switch to an optimised touch keyboard for inputting URLs, if the device supports it.\nThe default is to use the standard IME (e.g. the standard type of touch keyboard)\nFinally, the user can optionally specify a \"default\" string that will pre-populate the dialog box. The user must then\nuse the IME to edit the string if required.\nAll strings (both input and output) are in UTF8 format.\n- \"email\" - Optimise for email address entry.\n- \"number\" - Optimise for number entry.\n- \"password\" - Optimise for password entry (e.g. hide characters after typing).\n- \"url\" - Optimise for URL entry.\n- \"\" or no input - Standard entry.\notherwise the return value is always of type 'string', even if the 'mode' input is specified as 'number'.",
|
||||
args = "(promptUTF8: string [, mode: string] [, defaultUTF8: string])",
|
||||
returns = "(string or nil)",
|
||||
},
|
||||
},
|
||||
},
|
||||
particles = {
|
||||
type = "class",
|
||||
childs = {
|
||||
@@ -1163,6 +1177,12 @@ return {
|
||||
type = "value",
|
||||
description = "The random variance, in degrees, to add to the final spin of each particle. The final spin\nof each particle will be a random value in the range [endSpin - endSpinVar, endSpin + endSpinVar].\nThe default value is 0.",
|
||||
},
|
||||
isActive = {
|
||||
type = "method",
|
||||
description = "Returns true only if there are any particles still alive.",
|
||||
args = "()",
|
||||
returns = "(boolean)",
|
||||
},
|
||||
isFull = {
|
||||
type = "method",
|
||||
description = "Returns true only if the number of living particles is equal to the total number of particles\npermitted by the particle system ('totalParticles').",
|
||||
@@ -1446,70 +1466,70 @@ return {
|
||||
description = "Creates a distance joint that constrains the two attached bodies to maintain a constant distance defined\nby the two anchor points. Two different input types are permitted:\n| ``physics:createDistanceJoint(nodeA, nodeB, x1, y1, x2, y2, collideConnected)``\n| ``physics:createDistanceJoint(values)``\nSupported properties, beyond those of the default constructor, include:\n- length (number) - The distance to maintain between the joints\n- frequency (number) - The frequency of any oscillation\n- dampingRatio (number) - The damping ratio of any oscillation",
|
||||
valuetype = "jointDistance",
|
||||
args = "(nodeA: object, nodeB: object [, x1: number] [, y1: number] [, x2: number] [, y2: number] [, collideConnected: boolean], values: table)",
|
||||
returns = "(object)",
|
||||
returns = "(jointDistance)",
|
||||
},
|
||||
createFrictionJoint = {
|
||||
type = "method",
|
||||
description = "Creates a friction joint: a special kind of revolute / prismatic joint that resists motion, and provides\n2D translational and angular friction. Two different input types are permitted:\n| ``physics:createFrictionJoint(nodeA, nodeB, collideConnected)``\n| ``physics:createFrictionJoint(values)``",
|
||||
valuetype = "jointFriction",
|
||||
args = "(nodeA: object, nodeB: object [, collideConnected: boolean], values: table)",
|
||||
returns = "(object)",
|
||||
returns = "(jointFriction)",
|
||||
},
|
||||
createGearJoint = {
|
||||
type = "method",
|
||||
description = "Creates a gear joint that can only connect revolute and/or prismatic joints.\nLike the pulley ratio, you can specify a gear ratio. \nHowever, in this case the gear ratio can be negative. \nAlso keep in mind that when one joint is a revolute joint (angular) and the other joint is prismatic (translation), \nthen the gear ratio will have units of length or one over length.\nCaution: Deleting one of the connected joints automatically deletes this joint.\nCaution: The \"nodeB\" of both the connected joints must not be the same, and must be non-static.\nTwo different input types are permitted:\n| ``physics:createGearJoint(jointA, jointB, collideConnected)``\n| ``physics:createGearJoint(values)``",
|
||||
valuetype = "jointGear",
|
||||
args = "(jointA: object, jointB: object [, ratio: number] [, collideConnected: boolean], values: table)",
|
||||
returns = "(object)",
|
||||
returns = "(jointGear)",
|
||||
},
|
||||
createPrismaticJoint = {
|
||||
type = "method",
|
||||
description = "Creates a prismatic (piston) joint. Two different input types are permitted:\n| ``physics:createPrismaticJoint(nodeA, nodeB, x, y, localAxisX, localAxisY, collideConnected)``\n| ``physics:createPrismaticJoint(values)``",
|
||||
valuetype = "jointPrismatic",
|
||||
args = "(nodeA: object, nodeB: object, x: number, y: number, localAxisX: number, localAxisY: number [, collideConnected: boolean], values: table)",
|
||||
returns = "(object)",
|
||||
returns = "(jointPrismatic)",
|
||||
},
|
||||
createPulleyJoint = {
|
||||
type = "method",
|
||||
description = "Creates a pulley joint that attaches two bodies with an imaginary rope whose length remains constant: if one body is pulled down, the other one will move up.\nTwo different input types are permitted:\n| ``physics:createPulleyJoint(nodeA, nodeB, x1, y1, x2, y2, collideConnected)``\n| ``physics:createPulleyJoint(values)``",
|
||||
valuetype = "jointPulley",
|
||||
args = "(nodeA: object, nodeB: object, groundAnchorAX: number, groundAnchorAY: number, groundAnchorBX: number, groundAnchorBY: number [, anchorAX: number] [, anchorAY: number] [, anchorBX: number] [, anchorBY: number] [, ratio: number] [, collideConnected: boolean], values: table)",
|
||||
returns = "(object)",
|
||||
returns = "(jointPulley)",
|
||||
},
|
||||
createRevoluteJoint = {
|
||||
type = "method",
|
||||
description = "Creates a revolute (pivot) joint that constrains the two attached bodies to rotate about a point.\nTwo different input types are permitted:\n| ``physics:createRevoluteJoint(nodeA, nodeB, x, y, collideConnected)``\n| ``physics:createRevoluteJoint(values)``",
|
||||
valuetype = "jointRevolute",
|
||||
args = "(nodeA: object, nodeB: object, x: number, y: number [, collideConnected: boolean], values: table)",
|
||||
returns = "(object)",
|
||||
returns = "(jointRevolute)",
|
||||
},
|
||||
createRopeJoint = {
|
||||
type = "method",
|
||||
description = "Creates a rope joint that restricts the maximum distance between two points. This can be useful to prevent chains of bodies from stretching, even under high load.\nTwo different input types are permitted:\n| ``physics:createRopeJoint(nodeA, nodeB, x1, y1, x2, y2, collideConnected)``\n| ``physics:createRopeJoint(values)``",
|
||||
valuetype = "jointRope",
|
||||
args = "(nodeA: object, nodeB: object [, anchorAX: number] [, anchorAY: number] [, anchorBX: number] [, anchorBY: number], values: table)",
|
||||
returns = "(object)",
|
||||
returns = "(jointRope)",
|
||||
},
|
||||
createTouchJoint = {
|
||||
type = "method",
|
||||
description = "Creates a \"touch\" (mouse) joint that attaches a body to the world through a spring.\nTwo different input types are permitted:\n| ``physics:createTouchJoint(nodeA, dampingRatio, frequency, maxForce)``\n| ``physics:createTouchJoint(values)``",
|
||||
valuetype = "jointTouch",
|
||||
args = "(nodeA: object [, dampingRatio: number] [, frequency: number] [, maxForce: number], values: table)",
|
||||
returns = "(object)",
|
||||
returns = "(jointTouch)",
|
||||
},
|
||||
createWeldJoint = {
|
||||
type = "method",
|
||||
description = "Creates a weld joint that literaly welds the two attached body in a point.\nTwo different input types are permitted:\n| ``physics:createWeldJoint(nodeA, nodeB, x, y, collideConnected)``\n| ``physics:createWeldJoint(values)``",
|
||||
valuetype = "jointWeld",
|
||||
args = "(nodeA: object, nodeB: object [, x: number] [, y: number] [, collideConnected: boolean], values: table)",
|
||||
returns = "(object)",
|
||||
returns = "(jointWeld)",
|
||||
},
|
||||
createWheelJoint = {
|
||||
type = "method",
|
||||
description = "Creates a wheel joint that combines a piston and a pivot joint. Two different input types are permitted:\n| ``physics:createWheelJoint(nodeA, nodeB, localAxisX, localAxisY, ax, ay, bx, by, collideConnected)``\n| ``physics:createWheelJoint(values)``",
|
||||
valuetype = "jointWheel",
|
||||
args = "(nodeA: object, nodeB: object, localAxisX: number, localAxisY: number [, ax: number] [, ay: number] [, bx: number] [, by: number] [, collideConnected: boolean], values: table)",
|
||||
returns = "(object)",
|
||||
returns = "(jointWheel)",
|
||||
},
|
||||
debugDraw = {
|
||||
type = "value",
|
||||
@@ -1636,7 +1656,7 @@ return {
|
||||
},
|
||||
},
|
||||
},
|
||||
jointdistance = {
|
||||
jointDistance = {
|
||||
type = "class",
|
||||
childs = {
|
||||
dampingRatio = {
|
||||
@@ -1654,7 +1674,7 @@ return {
|
||||
},
|
||||
inherits = "joint",
|
||||
},
|
||||
jointfriction = {
|
||||
jointFriction = {
|
||||
type = "class",
|
||||
childs = {
|
||||
maxForce = {
|
||||
@@ -1668,7 +1688,7 @@ return {
|
||||
},
|
||||
inherits = "joint",
|
||||
},
|
||||
jointgear = {
|
||||
jointGear = {
|
||||
type = "class",
|
||||
childs = {
|
||||
joint1 = {
|
||||
@@ -1686,7 +1706,7 @@ return {
|
||||
},
|
||||
inherits = "joint",
|
||||
},
|
||||
jointprismatic = {
|
||||
jointPrismatic = {
|
||||
type = "class",
|
||||
childs = {
|
||||
jointSpeed = {
|
||||
@@ -1728,7 +1748,7 @@ return {
|
||||
},
|
||||
inherits = "joint",
|
||||
},
|
||||
jointpulley = {
|
||||
jointPulley = {
|
||||
type = "class",
|
||||
childs = {
|
||||
lengthA = {
|
||||
@@ -1746,7 +1766,7 @@ return {
|
||||
},
|
||||
inherits = "joint",
|
||||
},
|
||||
jointrevolute = {
|
||||
jointRevolute = {
|
||||
type = "class",
|
||||
childs = {
|
||||
jointAngle = {
|
||||
@@ -1788,7 +1808,7 @@ return {
|
||||
},
|
||||
inherits = "joint",
|
||||
},
|
||||
jointrope = {
|
||||
jointRope = {
|
||||
type = "class",
|
||||
childs = {
|
||||
maxLength = {
|
||||
@@ -1798,7 +1818,7 @@ return {
|
||||
},
|
||||
inherits = "joint",
|
||||
},
|
||||
jointtouch = {
|
||||
jointTouch = {
|
||||
type = "class",
|
||||
childs = {
|
||||
dampingRatio = {
|
||||
@@ -1822,7 +1842,7 @@ return {
|
||||
},
|
||||
inherits = "joint",
|
||||
},
|
||||
jointweld = {
|
||||
jointWeld = {
|
||||
type = "class",
|
||||
childs = {
|
||||
dampingRatio = {
|
||||
@@ -1836,7 +1856,7 @@ return {
|
||||
},
|
||||
inherits = "joint",
|
||||
},
|
||||
jointwheel = {
|
||||
jointWheel = {
|
||||
type = "class",
|
||||
childs = {
|
||||
jointSpeed = {
|
||||
@@ -1874,6 +1894,36 @@ return {
|
||||
},
|
||||
inherits = "joint",
|
||||
},
|
||||
scene = {
|
||||
type = "class",
|
||||
childs = {
|
||||
releaseAnimation = {
|
||||
type = "method",
|
||||
description = "Clears the scene's references to the specified Animation object. If the app maintains any additional\nreferences to this objects then it will persist, otherwise it will become ready for garbage \ncollection.",
|
||||
args = "(animation: object)",
|
||||
returns = "()",
|
||||
},
|
||||
releaseAtlas = {
|
||||
type = "method",
|
||||
description = "Clears the scene's references to the specified Atlas object. If the app maintains any additional\nreferences to this objects then it will persist, otherwise it will become ready for garbage \ncollection.",
|
||||
args = "(atlas: object)",
|
||||
returns = "()",
|
||||
},
|
||||
releaseFont = {
|
||||
type = "method",
|
||||
description = "Clears the scene's references to the specified Font object. If the app maintains any additional\nreferences to this objects then it will persist, otherwise it will become ready for garbage \ncollection.",
|
||||
args = "(font: object)",
|
||||
returns = "()",
|
||||
},
|
||||
releaseResources = {
|
||||
type = "method",
|
||||
description = "Clears the scene's references to all owned Atlas, Animation and Font objects. If the app \nmaintains additional references to any specific objects of these types then they will persist, \notherwise the objects will become ready for garbage collection.",
|
||||
args = "()",
|
||||
returns = "()",
|
||||
},
|
||||
},
|
||||
inherits = "node",
|
||||
},
|
||||
sprite = {
|
||||
type = "class",
|
||||
childs = {
|
||||
@@ -1948,7 +1998,7 @@ return {
|
||||
description = "Add a global timed event.",
|
||||
valuetype = "timer",
|
||||
args = "(funcortable: function or table, period: number, iterations: number, delay: number)",
|
||||
returns = "(object)",
|
||||
returns = "(timer)",
|
||||
},
|
||||
debugTime = {
|
||||
type = "value",
|
||||
@@ -2355,7 +2405,7 @@ return {
|
||||
},
|
||||
to = {
|
||||
type = "method",
|
||||
description = "Tween a series of node properties over time.\nThe final property values are specified in the params table. To customize the\ntween, you can optionally specify the following non-animating properties in params:\n* params.time (number) - The duration of the tween, in seconds. Default value is 0.5. The duration refers\nto the length of a 'cycle'; see the 'mode' parameter below.\n* params.delay (number) - Any delay in seconds before the tween begins. Default value is 0. If this value is\ngreater than 0, then this period must elapse before any properties start tweening. The 'onStart' callback\nis called only when this period has elapsed.\n* params.delta (boolean) - Whether or not to interpret the specified values as absolute, or relative to the\ncurrent values. The default is false, meaning absolute values. If true, the 'current' values are those\nat the point at which any 'delay' period has elapsed.\n* params.mode (string) - Can be 'clamp', 'repeat' or 'mirror'. The default value is 'clamp'.\n* \"clamp\" - The interpolation value moves from 0 (after any 'delay') to 1 \n(after a further 'time'), whereby any 'onComplete' callback is fired. The function \n'isComplete()' will return true only after this point. The interpolation stays at 1 after \nthis point.\n* \"repeat\" - The interpolation value moves from 0 (after any 'delay') to 1 (after a further \n'time'), whereby any 'onComplete' callback is fired. The interpolation value then starts \nagain at 0, and moves to 1 after a further 'time'; i.e. it continually cycles with a \nperiod of 'time'. The 'onComplete' callback fires after each period. The function \n'isComplete()' NEVER returns true.\n* \"mirror\" - Like \"repeat\", except that the interpolation value alternately ramps up to 1 \nand back down to 0 for each pair of cycles (as opposed to ramping to 1 and then \nimmediately jumping back to 0). For each odd-numbered cycle, the interpolation value \nis (1-r), where r is the value that would be generated from the corresponding \"repeat\" \nmode. The 'onComplete' callback fires after each period. The function 'isComplete()' \nNEVER returns true.\n* params.easing (function) - The tween easing function. Default value is ease.linear. Easing functions\nallow the properties to be animated in a non-linear fashion, for example to slow down at the start or\nend of the animation period. A full list of easing functions is provided above.\n* params.easingValue (number) - The tween easing value. Depending on the easing function being used,\nthis value can affect the 'strength' of the function, for example the degree to which the animation\nspeeds up or slows down at the start or end of the period. Default value depends on the easing function.\n* params.onStart (function or table) - A function or table listener called before the tween \nbegins. Table listeners must have an 'onStart' method. When invoked, the listener function is\npassed the tween's owning node as an input. The 'onStart' listener is called only once any 'delay'\nperiod has elapsed.\n* params.onComplete (function or table) - A function or table listener called after the \ntween completes. Table listeners must have an 'onComplete' method. When invoked, the listener function is\npassed the tween's owning node as an input. The 'onComplete' listener is called at the end of each\ntween 'cycle': if mode is 'clamp', there is only a single cycle, otherwise cycles repeat indefinitely with\nthe period specified by 'time'.\nExample::\nlocal mySprite = director:createSprite(0, 0, \"textures/beachball.png\")\n-- Animate x and alpha properties, over 1 second, after a delay of 0.5 seconds, with the \"powIn\" easing function\ntween:to(mySprite, { time=1, transition=ease.powIn, delta=0.5, x=100, alpha=0 } )\nDifferent 'modes' can be combined with different easing functions to create standard waves. \nFor example:\n* mode=\"repeat\", easing=ease.linear -- sawtooth wave\n* mode=\"mirror\", easing=ease.linear -- triangle wave\n* mode=\"mirror\", easing=ease.zero -- square wave\nAny target value specified in the tween parameters must exist on the target object. Values can \nbe of type 'number' or 'table'. If of type 'table', the table must include values of type \n'number' and exist on the target object.\nExamples:\n* x=10 (type number)\n* xScale=2 (type number)\n* color={r=0} (type table, containing type number)\n* color={r=0, g=255} (type table, containing type number)\n* uvRect={x=1} (type table, containing type number)",
|
||||
description = "Tween a series of node properties over time.\nThe final property values are specified in the params table. To customize the\ntween, you can optionally specify the following non-animating properties in params:\n* params.time (number) - The duration of the tween, in seconds. Default value is 0.5. The duration refers\nto the length of a 'cycle'; see the 'mode' parameter below.\n* params.delay (number) - Any delay in seconds before the tween begins. Default value is 0. If this value is\ngreater than 0, then this period must elapse before any properties start tweening. The 'onStart' callback\nis called only when this period has elapsed.\n* params.delta (boolean) - Whether or not to interpret the specified values as absolute, or relative to the\ncurrent values. The default is false, meaning absolute values. If true, the 'current' values are those\nat the point at which any 'delay' period has elapsed.\n* params.mode (string) - Can be 'clamp', 'repeat' or 'mirror'. The default value is 'clamp'.\n* \"clamp\" - The interpolation value moves from 0 (after any 'delay') to 1 \n(after a further 'time'), whereby any 'onComplete' callback is fired. The function \n'isComplete()' will return true only after this point. The interpolation stays at 1 after \nthis point.\n* \"repeat\" - The interpolation value moves from 0 (after any 'delay') to 1 (after a further \n'time'), whereby any 'onComplete' callback is fired. The interpolation value then starts \nagain at 0, and moves to 1 after a further 'time'; i.e. it continually cycles with a \nperiod of 'time'. The 'onComplete' callback fires after each period. The function \n'isComplete()' NEVER returns true.\n* \"mirror\" - Like \"repeat\", except that the interpolation value alternately ramps up to 1 \nand back down to 0 for each pair of cycles (as opposed to ramping to 1 and then \nimmediately jumping back to 0). For each odd-numbered cycle, the interpolation value \nis (1-r), where r is the value that would be generated from the corresponding \"repeat\" \nmode. The 'onComplete' callback fires after each period. The function 'isComplete()' \nNEVER returns true.\n* params.easing (function) - The tween easing function. Default value is ease.linear. Easing functions\nallow the properties to be animated in a non-linear fashion, for example to slow down at the start or\nend of the animation period. A full list of easing functions is provided above.\n* params.easingValue (number) - The tween easing value. Depending on the easing function being used,\nthis value can affect the 'strength' of the function, for example the degree to which the animation\nspeeds up or slows down at the start or end of the period. Default value depends on the easing function.\n* params.onStart (function or table) - A function or table listener called before the tween \nbegins. Table listeners must have an 'onStart' method. When invoked, the listener function is\npassed the tween's owning node as an input. The 'onStart' listener is called only once any 'delay'\nperiod has elapsed.\n* params.onComplete (function or table) - A function or table listener called after the \ntween completes. Table listeners must have an 'onComplete' method. When invoked, the listener function is\npassed the tween's owning node as an input. The 'onComplete' listener is called at the end of each\ntween 'cycle': if mode is 'clamp', there is only a single cycle, otherwise cycles repeat indefinitely with\nthe period specified by 'time'.\nExample::\nlocal mySprite = director:createSprite(0, 0, \"textures/beachball.png\")\n-- Animate x and alpha properties, over 1 second, after a delay of 0.5 seconds, with the \"powIn\" easing function\ntween:to(mySprite, { time=1, easing=ease.powIn, delay=0.5, x=100, alpha=0 } )\nDifferent 'modes' can be combined with different easing functions to create standard waves. \nFor example:\n* mode=\"repeat\", easing=ease.linear -- sawtooth wave\n* mode=\"mirror\", easing=ease.linear -- triangle wave\n* mode=\"mirror\", easing=ease.zero -- square wave\nAny target value specified in the tween parameters must exist on the target object. Values can \nbe of type 'number' or 'table'. If of type 'table', the table must include values of type \n'number' and exist on the target object.\nExamples:\n* x=10 (type number)\n* xScale=2 (type number)\n* color={r=0} (type table, containing type number)\n* color={r=0, g=255} (type table, containing type number)\n* uvRect={x=1} (type table, containing type number)",
|
||||
args = "(target: object, params: table)",
|
||||
returns = "(object)",
|
||||
},
|
||||
|
||||
18168
api/lua/moai.lua
18168
api/lua/moai.lua
File diff suppressed because it is too large
Load Diff
@@ -1,16 +1,24 @@
|
||||
local api = {}
|
||||
for key in pairs(wx) do
|
||||
api[key] = {
|
||||
type = (type(wx[key]) == "function" and "function" or "value"),
|
||||
description = "",
|
||||
returns = "",
|
||||
}
|
||||
local function populateAPI(t)
|
||||
local api = {}
|
||||
for k,v in pairs(t) do
|
||||
api[k] = {
|
||||
type = (type(v) == "function" and "function" or "value"),
|
||||
description = "",
|
||||
returns = "",
|
||||
}
|
||||
end
|
||||
return api
|
||||
end
|
||||
|
||||
return {
|
||||
wx = {
|
||||
type = "lib",
|
||||
description = "WX lib",
|
||||
childs = api
|
||||
}
|
||||
}
|
||||
wx = {
|
||||
type = "lib",
|
||||
description = "wx lib",
|
||||
childs = populateAPI(wx),
|
||||
},
|
||||
wxstc = {
|
||||
type = "lib",
|
||||
description = "wxSTC lib",
|
||||
childs = populateAPI(wxstc),
|
||||
},
|
||||
}
|
||||
|
||||
BIN
bin/clibs/git/core.dll
Normal file
BIN
bin/clibs/git/core.dll
Normal file
Binary file not shown.
BIN
bin/clibs/git/core.dylib
Normal file
BIN
bin/clibs/git/core.dylib
Normal file
Binary file not shown.
BIN
bin/clibs/lfs.dll
Normal file
BIN
bin/clibs/lfs.dll
Normal file
Binary file not shown.
BIN
bin/clibs/lfs.dylib
Normal file
BIN
bin/clibs/lfs.dylib
Normal file
Binary file not shown.
BIN
bin/clibs/liblua.dll
Normal file
BIN
bin/clibs/liblua.dll
Normal file
Binary file not shown.
BIN
bin/clibs/libzlib.dll
Normal file
BIN
bin/clibs/libzlib.dll
Normal file
Binary file not shown.
0
bin/clibs/mime/core.dylib
Executable file → Normal file
0
bin/clibs/mime/core.dylib
Executable file → Normal file
0
bin/clibs/socket/core.dylib
Executable file → Normal file
0
bin/clibs/socket/core.dylib
Executable file → Normal file
BIN
bin/clibs52/liblua.dll
Normal file
BIN
bin/clibs52/liblua.dll
Normal file
Binary file not shown.
BIN
bin/clibs53/mime/core.dll
Normal file
BIN
bin/clibs53/mime/core.dll
Normal file
Binary file not shown.
BIN
bin/clibs53/mime/core.dylib
Normal file
BIN
bin/clibs53/mime/core.dylib
Normal file
Binary file not shown.
BIN
bin/clibs53/socket/core.dll
Normal file
BIN
bin/clibs53/socket/core.dll
Normal file
Binary file not shown.
BIN
bin/clibs53/socket/core.dylib
Normal file
BIN
bin/clibs53/socket/core.dylib
Normal file
Binary file not shown.
0
bin/liblua.dylib
Executable file → Normal file
0
bin/liblua.dylib
Executable file → Normal file
BIN
bin/liblua53.dylib
Normal file
BIN
bin/liblua53.dylib
Normal file
Binary file not shown.
0
bin/libwx.dylib
Executable file → Normal file
0
bin/libwx.dylib
Executable file → Normal file
BIN
bin/linux/x64/clibs/git/core.so
Normal file
BIN
bin/linux/x64/clibs/git/core.so
Normal file
Binary file not shown.
BIN
bin/linux/x64/clibs/lfs.so
Normal file
BIN
bin/linux/x64/clibs/lfs.so
Normal file
Binary file not shown.
BIN
bin/linux/x64/clibs53/mime/core.so
Normal file
BIN
bin/linux/x64/clibs53/mime/core.so
Normal file
Binary file not shown.
BIN
bin/linux/x64/clibs53/socket/core.so
Normal file
BIN
bin/linux/x64/clibs53/socket/core.so
Normal file
Binary file not shown.
BIN
bin/linux/x64/lua53
Executable file
BIN
bin/linux/x64/lua53
Executable file
Binary file not shown.
BIN
bin/linux/x86/clibs/git/core.so
Normal file
BIN
bin/linux/x86/clibs/git/core.so
Normal file
Binary file not shown.
BIN
bin/linux/x86/clibs/lfs.so
Normal file
BIN
bin/linux/x86/clibs/lfs.so
Normal file
Binary file not shown.
BIN
bin/linux/x86/clibs53/mime/core.so
Normal file
BIN
bin/linux/x86/clibs53/mime/core.so
Normal file
Binary file not shown.
BIN
bin/linux/x86/clibs53/socket/core.so
Normal file
BIN
bin/linux/x86/clibs53/socket/core.so
Normal file
Binary file not shown.
BIN
bin/linux/x86/lua53
Executable file
BIN
bin/linux/x86/lua53
Executable file
Binary file not shown.
BIN
bin/lua.app/Contents/MacOS/lua53
Executable file
BIN
bin/lua.app/Contents/MacOS/lua53
Executable file
Binary file not shown.
BIN
bin/lua53.dll
Normal file
BIN
bin/lua53.dll
Normal file
Binary file not shown.
BIN
bin/lua53.exe
Normal file
BIN
bin/lua53.exe
Normal file
Binary file not shown.
@@ -84,6 +84,8 @@ if(WIN32)
|
||||
install_from_manifest(FILES ${TOPDIR}/zbstudio/MANIFEST ${DATADIR} "^$")
|
||||
install_from_manifest(FILES ${TOPDIR}/zbstudio/MANIFEST-bin-win32 ${DATADIR} "^zbstudio.exe$")
|
||||
elseif(APPLE)
|
||||
set(OSX_INSTALL_PREFIX "/Applications" CACHE PATH "Default OSX prefix")
|
||||
set(CMAKE_INSTALL_PREFIX "${OSX_INSTALL_PREFIX}" CACHE INTERNAL "Prefix prepended to install directories")
|
||||
# setup the data directory
|
||||
set(ROOTDIR ZeroBraneStudio.app/Contents)
|
||||
set(DATADIR ${ROOTDIR}/ZeroBraneStudio)
|
||||
|
||||
@@ -6,6 +6,8 @@ sudo apt-get install git-core
|
||||
sudo apt-get install g++
|
||||
sudo apt-get install subversion
|
||||
sudo apt-get install libgtk2.0-dev
|
||||
sudo apt-get install cmake
|
||||
exit
|
||||
|
||||
# install cmake as wxwidgets needs 2.8.4+ but "sudo apt-get install cmake"
|
||||
# only installs 2.8.0 on some systems (like Ubuntu 10.4)
|
||||
|
||||
@@ -7,3 +7,5 @@ sudo yum install git
|
||||
sudo yum install svn
|
||||
sudo yum install cmake
|
||||
sudo yum install gtk2-devel
|
||||
sudo yum install wget
|
||||
sudo yum install sqlite
|
||||
|
||||
@@ -1,12 +1,19 @@
|
||||
#!/bin/bash
|
||||
|
||||
if [ "$(uname -m)" = "x86_64" ]; then
|
||||
FPIC="-fpic"
|
||||
ARCH="x64"
|
||||
else
|
||||
FPIC=""
|
||||
ARCH="x86"
|
||||
fi
|
||||
case "$(uname -m)" in
|
||||
x86_64)
|
||||
FPIC="-fpic"
|
||||
ARCH="x64"
|
||||
;;
|
||||
armv7l)
|
||||
FPIC="-fpic"
|
||||
ARCH="armhf"
|
||||
;;
|
||||
*)
|
||||
FPIC=""
|
||||
ARCH="x86"
|
||||
;;
|
||||
esac
|
||||
|
||||
# ZBS binary directory
|
||||
BIN_DIR="$(dirname "$PWD")/bin/linux/$ARCH"
|
||||
@@ -24,14 +31,6 @@ BUILD_FLAGS="-O2 -shared -s -I $INSTALL_DIR/include -L $INSTALL_DIR/lib $FPIC"
|
||||
WXWIDGETS_BASENAME="wxWidgets"
|
||||
WXWIDGETS_URL="http://svn.wxwidgets.org/svn/wx/wxWidgets/trunk"
|
||||
|
||||
LIBPNG_BASENAME="libpng-1.6.2"
|
||||
LIBPNG_FILENAME="$LIBPNG_BASENAME.tar.gz"
|
||||
LIBPNG_URL="http://sourceforge.net/projects/libpng/files/libpng16/1.6.2/libpng-1.6.2.tar.gz/download"
|
||||
|
||||
ZLIB_BASENAME="zlib-1.2.8"
|
||||
ZLIB_FILENAME="$ZLIB_BASENAME.tar.gz"
|
||||
ZLIB_URL="https://github.com/madler/zlib/archive/v1.2.8.tar.gz"
|
||||
|
||||
WXLUA_BASENAME="wxlua"
|
||||
WXLUA_URL="https://svn.code.sf.net/p/wxlua/svn/trunk"
|
||||
|
||||
@@ -51,6 +50,10 @@ for ARG in "$@"; do
|
||||
5.2)
|
||||
BUILD_52=true
|
||||
;;
|
||||
5.3)
|
||||
BUILD_53=true
|
||||
BUILD_FLAGS="$BUILD_FLAGS -DLUA_COMPAT_APIINTCASTS"
|
||||
;;
|
||||
jit)
|
||||
BUILD_JIT=true
|
||||
;;
|
||||
@@ -119,6 +122,14 @@ fi
|
||||
LUA_FILENAME="$LUA_BASENAME.tar.gz"
|
||||
LUA_URL="http://www.lua.org/ftp/$LUA_FILENAME"
|
||||
|
||||
if [ $BUILD_53 ]; then
|
||||
LUAV="53"
|
||||
LUAS=$LUAV
|
||||
LUA_BASENAME="lua-5.3.0-beta"
|
||||
LUA_FILENAME="$LUA_BASENAME.tar.gz"
|
||||
LUA_URL="http://www.lua.org/work/$LUA_FILENAME"
|
||||
fi
|
||||
|
||||
if [ $BUILD_JIT ]; then
|
||||
LUA_BASENAME="LuaJIT-2.0.2"
|
||||
LUA_FILENAME="$LUA_BASENAME.tar.gz"
|
||||
@@ -127,35 +138,18 @@ fi
|
||||
|
||||
# build wxWidgets
|
||||
if [ $BUILD_WXWIDGETS ]; then
|
||||
# first build get/configure libpng as v1.6 is needed
|
||||
wget -c "$LIBPNG_URL" -O "$LIBPNG_FILENAME" || { echo "Error: failed to download libpng"; exit 1; }
|
||||
tar -xzf "$LIBPNG_FILENAME"
|
||||
(cd "$LIBPNG_BASENAME"; ./configure --with-libpng-prefix=wxpng_; make $MAKEFLAGS)
|
||||
|
||||
wget -c "$ZLIB_URL" -O "$ZLIB_FILENAME" || { echo "Error: failed to download zlib"; exit 1; }
|
||||
tar -xzf "$ZLIB_FILENAME"
|
||||
(cd "$ZLIB_BASENAME"; ./configure; make $MAKEFLAGS)
|
||||
|
||||
svn co "$WXWIDGETS_URL" "$WXWIDGETS_BASENAME" || { echo "Error: failed to checkout wxWidgets"; exit 1; }
|
||||
# replace src/png with the libpng folder
|
||||
rm -rf "$WXWIDGETS_BASENAME/src/png"
|
||||
mv "$LIBPNG_BASENAME" "$WXWIDGETS_BASENAME/src/png"
|
||||
|
||||
# replace src/zlib with the zlib folder
|
||||
rm -rf "$WXWIDGETS_BASENAME/src/zlib"
|
||||
mv "$ZLIB_BASENAME" "$WXWIDGETS_BASENAME/src/zlib"
|
||||
|
||||
cd "$WXWIDGETS_BASENAME"
|
||||
./configure --prefix="$INSTALL_DIR" --disable-debug --disable-shared --enable-unicode \
|
||||
--enable-compat28 \
|
||||
--with-libjpeg=builtin --with-libpng=builtin --with-libtiff=no --with-expat=no \
|
||||
--with-zlib=builtin --disable-richtext --with-gtk=2 \
|
||||
CFLAGS="-Os -fPIC" CXXFLAGS="-Os -fPIC"
|
||||
# update gzio to gzlib as this has changed between zlib 1.2.3 to 1.2.8
|
||||
sed -i 's/gzio.c/gzlib.c/' Makefile
|
||||
make $MAKEFLAGS || { echo "Error: failed to build wxWidgets"; exit 1; }
|
||||
make install
|
||||
cd ..
|
||||
rm -rf "$WXWIDGETS_BASENAME" "$LIBPNG_FILENAME"
|
||||
rm -rf "$WXWIDGETS_BASENAME"
|
||||
fi
|
||||
|
||||
# build Lua
|
||||
@@ -189,6 +183,10 @@ if [ $BUILD_WXLUA ]; then
|
||||
# the following patches wxlua source to fix live coding support in wxlua apps
|
||||
# http://www.mail-archive.com/wxlua-users@lists.sourceforge.net/msg03225.html
|
||||
sed -i 's/\(m_wxlState = wxLuaState(wxlState.GetLuaState(), wxLUASTATE_GETSTATE|wxLUASTATE_ROOTSTATE);\)/\/\/ removed by ZBS build process \/\/ \1/' modules/wxlua/wxlcallb.cpp
|
||||
|
||||
# (temporary) fix for compilation issue in wxlua using wxwidgets 3.1+ (r238)
|
||||
sed -i 's/{ "wxSTC_COFFEESCRIPT_HASHQUOTEDSTRING", wxSTC_COFFEESCRIPT_HASHQUOTEDSTRING },/\/\/ removed by ZBS build process/' modules/wxbind/src/wxstc_bind.cpp
|
||||
|
||||
cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$INSTALL_DIR" -DCMAKE_BUILD_TYPE=MinSizeRel -DBUILD_SHARED_LIBS=FALSE \
|
||||
-DwxWidgets_CONFIG_EXECUTABLE="$INSTALL_DIR/bin/wx-config" \
|
||||
-DwxWidgets_COMPONENTS="stc;html;aui;adv;core;net;base" \
|
||||
|
||||
@@ -9,13 +9,17 @@ INSTALL_DIR="$PWD/deps"
|
||||
# Mac OS X global settings
|
||||
MACOSX_ARCH="i386"
|
||||
MACOSX_VERSION="10.6"
|
||||
MACOSX_SDK_PATH="/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.6.sdk"
|
||||
MACOSX_SDK_PATH="/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk"
|
||||
|
||||
# number of parallel jobs used for building
|
||||
MAKEFLAGS="-j4"
|
||||
|
||||
# flags for manual building with gcc; build universal binaries for luasocket
|
||||
MACOSX_FLAGS="-arch $MACOSX_ARCH -mmacosx-version-min=$MACOSX_VERSION -isysroot $MACOSX_SDK_PATH"
|
||||
MACOSX_FLAGS="-arch $MACOSX_ARCH -mmacosx-version-min=$MACOSX_VERSION"
|
||||
if [ -d "$MACOSX_SDK_PATH" ]; then
|
||||
echo "Building with $MACOSX_SDK_PATH"
|
||||
MACOSX_FLAGS="$MACOSX_FLAGS -isysroot $MACOSX_SDK_PATH"
|
||||
fi
|
||||
BUILD_FLAGS="-O2 -arch x86_64 -dynamiclib -undefined dynamic_lookup $MACOSX_FLAGS -I $INSTALL_DIR/include -L $INSTALL_DIR/lib"
|
||||
|
||||
# paths configuration
|
||||
@@ -45,6 +49,10 @@ for ARG in "$@"; do
|
||||
5.2)
|
||||
BUILD_52=true
|
||||
;;
|
||||
5.3)
|
||||
BUILD_53=true
|
||||
BUILD_FLAGS="$BUILD_FLAGS -DLUA_COMPAT_APIINTCASTS"
|
||||
;;
|
||||
jit)
|
||||
BUILD_JIT=true
|
||||
;;
|
||||
@@ -118,6 +126,14 @@ fi
|
||||
LUA_FILENAME="$LUA_BASENAME.tar.gz"
|
||||
LUA_URL="http://www.lua.org/ftp/$LUA_FILENAME"
|
||||
|
||||
if [ $BUILD_53 ]; then
|
||||
LUAV="53"
|
||||
LUAS=$LUAV
|
||||
LUA_BASENAME="lua-5.3.0-beta"
|
||||
LUA_FILENAME="$LUA_BASENAME.tar.gz"
|
||||
LUA_URL="http://www.lua.org/work/$LUA_FILENAME"
|
||||
fi
|
||||
|
||||
if [ $BUILD_JIT ]; then
|
||||
LUA_BASENAME="LuaJIT-2.0.2"
|
||||
LUA_FILENAME="$LUA_BASENAME.tar.gz"
|
||||
@@ -128,10 +144,15 @@ fi
|
||||
if [ $BUILD_WXWIDGETS ]; then
|
||||
svn co "$WXWIDGETS_URL" "$WXWIDGETS_BASENAME" || { echo "Error: failed to checkout wxWidgets"; exit 1; }
|
||||
cd "$WXWIDGETS_BASENAME"
|
||||
MINSDK=""
|
||||
if [ -d $MACOSX_SDK_PATH ]; then
|
||||
MINSDK="--with-macosx-sdk=$MACOSX_SDK_PATH"
|
||||
fi
|
||||
./configure --prefix="$INSTALL_DIR" $WXWIDGETSDEBUG --disable-shared --enable-unicode \
|
||||
--enable-compat28 \
|
||||
--with-libjpeg=builtin --with-libpng=builtin --with-libtiff=no --with-expat=no \
|
||||
--with-zlib=builtin --disable-richtext \
|
||||
--enable-macosx_arch=$MACOSX_ARCH --with-macosx-version-min=$MACOSX_VERSION --with-macosx-sdk="$MACOSX_SDK_PATH" \
|
||||
--enable-macosx_arch=$MACOSX_ARCH --with-macosx-version-min=$MACOSX_VERSION $MINSDK \
|
||||
--with-osx_cocoa CFLAGS="-Os" CXXFLAGS="-Os"
|
||||
make $MAKEFLAGS || { echo "Error: failed to build wxWidgets"; exit 1; }
|
||||
make install
|
||||
@@ -175,11 +196,19 @@ fi
|
||||
if [ $BUILD_WXLUA ]; then
|
||||
svn co "$WXLUA_URL" "$WXLUA_BASENAME" || { echo "Error: failed to checkout wxLua"; exit 1; }
|
||||
cd "$WXLUA_BASENAME/wxLua"
|
||||
MINSDK=""
|
||||
if [ -d $MACOSX_SDK_PATH ]; then
|
||||
MINSDK="CMAKE_OSX_SYSROOT=$MACOSX_SDK_PATH"
|
||||
fi
|
||||
# the following patches wxlua source to fix live coding support in wxlua apps
|
||||
# http://www.mail-archive.com/wxlua-users@lists.sourceforge.net/msg03225.html
|
||||
sed -i "" 's/\(m_wxlState = wxLuaState(wxlState.GetLuaState(), wxLUASTATE_GETSTATE|wxLUASTATE_ROOTSTATE);\)/\/\/ removed by ZBS build process \/\/ \1/' modules/wxlua/wxlcallb.cpp
|
||||
|
||||
# (temporary) fix for compilation issue in wxlua using wxwidgets 3.1+ (r238)
|
||||
sed -i 's/{ "wxSTC_COFFEESCRIPT_HASHQUOTEDSTRING", wxSTC_COFFEESCRIPT_HASHQUOTEDSTRING },/\/\/ removed by ZBS build process/' modules/wxbind/src/wxstc_bind.cpp
|
||||
|
||||
cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$INSTALL_DIR" -DCMAKE_BUILD_TYPE=$WXLUABUILD -DBUILD_SHARED_LIBS=FALSE \
|
||||
-DCMAKE_OSX_ARCHITECTURES=$MACOSX_ARCH -DCMAKE_OSX_DEPLOYMENT_TARGET=$MACOSX_VERSION CMAKE_OSX_SYSROOT="$MACOSX_SDK_PATH" \
|
||||
-DCMAKE_OSX_ARCHITECTURES=$MACOSX_ARCH -DCMAKE_OSX_DEPLOYMENT_TARGET=$MACOSX_VERSION $MINSDK \
|
||||
-DCMAKE_C_COMPILER=/usr/bin/gcc -DCMAKE_CXX_COMPILER=/usr/bin/g++ -DwxWidgets_CONFIG_EXECUTABLE="$INSTALL_DIR/bin/wx-config" \
|
||||
-DwxWidgets_COMPONENTS="stc;html;aui;adv;core;net;base" \
|
||||
-DwxLuaBind_COMPONENTS="stc;html;aui;adv;core;net;base" -DwxLua_LUA_LIBRARY_USE_BUILTIN=FALSE \
|
||||
|
||||
@@ -50,6 +50,10 @@ for ARG in "$@"; do
|
||||
5.2)
|
||||
BUILD_52=true
|
||||
;;
|
||||
5.3)
|
||||
BUILD_53=true
|
||||
BUILD_FLAGS="$BUILD_FLAGS -DLUA_COMPAT_APIINTCASTS"
|
||||
;;
|
||||
jit)
|
||||
BUILD_JIT=true
|
||||
;;
|
||||
@@ -140,6 +144,14 @@ fi
|
||||
LUA_FILENAME="$LUA_BASENAME.tar.gz"
|
||||
LUA_URL="http://www.lua.org/ftp/$LUA_FILENAME"
|
||||
|
||||
if [ $BUILD_53 ]; then
|
||||
LUAV="53"
|
||||
LUAS=$LUAV
|
||||
LUA_BASENAME="lua-5.3.0-beta"
|
||||
LUA_FILENAME="$LUA_BASENAME.tar.gz"
|
||||
LUA_URL="http://www.lua.org/work/$LUA_FILENAME"
|
||||
fi
|
||||
|
||||
if [ $BUILD_JIT ]; then
|
||||
LUA_BASENAME="LuaJIT-2.0.2"
|
||||
LUA_FILENAME="$LUA_BASENAME.tar.gz"
|
||||
@@ -152,6 +164,7 @@ if [ $BUILD_WXWIDGETS ]; then
|
||||
svn revert -R "$WXWIDGETS_BASENAME"
|
||||
cd "$WXWIDGETS_BASENAME"
|
||||
./configure --prefix="$INSTALL_DIR" $WXWIDGETSDEBUG --disable-shared --enable-unicode \
|
||||
--enable-compat28 \
|
||||
--with-libjpeg=builtin --with-libpng=builtin --with-libtiff=no --with-expat=no \
|
||||
--with-zlib=builtin --disable-richtext \
|
||||
CFLAGS="-Os -fno-keep-inline-dllexport" CXXFLAGS="-Os -fno-keep-inline-dllexport"
|
||||
@@ -201,8 +214,11 @@ if [ $BUILD_WXLUA ]; then
|
||||
# (temporary) fix for compilation issue in wxlua in Windows using mingw (r184)
|
||||
sed -i 's/defined(__MINGW32__) || defined(__GNUWIN32__)/0/' modules/wxbind/src/wxcore_bind.cpp
|
||||
|
||||
[ -f "$INSTALL_DIR/lib/libwxscintilla-2.9.a" ] && cp "$INSTALL_DIR/lib/libwxscintilla-2.9.a" "$INSTALL_DIR/lib/libwx_mswu_scintilla-2.9.a"
|
||||
# (temporary) fix for compilation issue in wxlua using wxwidgets 3.1+ (r238)
|
||||
sed -i 's/{ "wxSTC_COFFEESCRIPT_HASHQUOTEDSTRING", wxSTC_COFFEESCRIPT_HASHQUOTEDSTRING },/\/\/ removed by ZBS build process/' modules/wxbind/src/wxstc_bind.cpp
|
||||
|
||||
[ -f "$INSTALL_DIR/lib/libwxscintilla-3.0.a" ] && cp "$INSTALL_DIR/lib/libwxscintilla-3.0.a" "$INSTALL_DIR/lib/libwx_mswu_scintilla-3.0.a"
|
||||
[ -f "$INSTALL_DIR/lib/libwxscintilla-3.1.a" ] && cp "$INSTALL_DIR/lib/libwxscintilla-3.1.a" "$INSTALL_DIR/lib/libwx_mswu_scintilla-3.1.a"
|
||||
|
||||
echo "set_target_properties(wxLuaModule PROPERTIES LINK_FLAGS -static)" >> modules/luamodule/CMakeLists.txt
|
||||
cmake -G "MSYS Makefiles" -DCMAKE_INSTALL_PREFIX="$INSTALL_DIR" -DCMAKE_BUILD_TYPE=$WXLUABUILD -DBUILD_SHARED_LIBS=FALSE \
|
||||
@@ -300,6 +316,9 @@ fi
|
||||
# To build lua5.1.dll proxy:
|
||||
# (1) get mkforwardlib-gcc.lua from http://lua-users.org/wiki/LuaProxyDllThree
|
||||
# (2) run it as "lua mkforwardlib-gcc.lua lua51 lua5.1 X86"
|
||||
# To build lua5.2.dll proxy:
|
||||
# (1) get mkforwardlib-gcc-52.lua from http://lua-users.org/wiki/LuaProxyDllThree
|
||||
# (2) run it as "lua mkforwardlib-gcc-52.lua lua52 lua5.2 X86"
|
||||
|
||||
echo "*** Build has been successfully completed ***"
|
||||
exit 0
|
||||
|
||||
@@ -9,6 +9,10 @@
|
||||
-- You can also update an existing file with new messages by running:
|
||||
-- > bin\lua.exe build/messages.lua cfg/i18n/ru.lua
|
||||
|
||||
-- store `print` function as it's modified by wxlua and LuaJIT doesn't like
|
||||
-- what wxlua has done in that function.
|
||||
local print = print
|
||||
|
||||
local iswindows = os.getenv('WINDIR') or (os.getenv('OS') or ''):match('[Ww]indows')
|
||||
if iswindows or not pcall(require, "wx") then
|
||||
package.cpath = (iswindows and 'bin/?.dll;' or 'bin/lib?.dylib;') .. package.cpath
|
||||
@@ -57,8 +61,13 @@ for _, mask in ipairs({"zbstudio/*.lua", "src/main.lua", "src/editor/*.lua"}) do
|
||||
-- remove brackets aroung ("foo")
|
||||
-- extract message from ("foo", count)
|
||||
msg = msg:gsub("^%(", ""):gsub("%)$", ""):gsub([[(["']), .+]], "%1")
|
||||
messages[msg] = messages[msg] or {}
|
||||
messages[msg][file] = (messages[msg][file] or 0) + 1
|
||||
if not msg:find([=[^["']]=]) or not msg:find([=[["']$]=]) then
|
||||
io.stderr:write(("Call with a non-string 'TR(%s)' ignored in '%s'.\n")
|
||||
:format(msg, file))
|
||||
else
|
||||
messages[msg] = messages[msg] or {}
|
||||
messages[msg][file] = (messages[msg][file] or 0) + 1
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -86,7 +95,7 @@ end
|
||||
table.sort(msgs)
|
||||
print("return {\n"..plural..table.concat(msgs, "\n").."\n}")
|
||||
if next(existing) then
|
||||
local str = "-- no match found for the following elements: "
|
||||
local str = "No match found for the following elements: "
|
||||
for msg in pairs(existing) do str = str .. msg .. ", " end
|
||||
print((str:gsub(", $", "")))
|
||||
io.stderr:write((str:gsub(", $", "\n")))
|
||||
end
|
||||
|
||||
190
cfg/i18n/cn.lua
190
cfg/i18n/cn.lua
@@ -1,14 +1,20 @@
|
||||
return {
|
||||
["%d instance"] = "%d 个体", -- src\editor\findreplace.lua
|
||||
["%s event failed: %s"] = nil, -- src\editor\package.lua
|
||||
["&About"] = "关于(&A)", -- src\editor\menu_help.lua
|
||||
["&Add Watch"] = "添加监视(&A)", -- src\editor\debugger.lua
|
||||
["&Break"] = "中断", -- src\editor\menu_project.lua
|
||||
["&Close Page"] = "关闭页面", -- src\editor\menu_file.lua, src\editor\gui.lua
|
||||
["&Close Page"] = "关闭页面", -- src\editor\gui.lua, src\editor\menu_file.lua
|
||||
["&Community"] = nil, -- src\editor\menu_help.lua
|
||||
["&Compile"] = "编译", -- src\editor\menu_project.lua
|
||||
["&Copy"] = "复制", -- src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Copy"] = "复制", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Default Layout"] = "布局", -- src\editor\menu_view.lua
|
||||
["&Delete Watch"] = "删除监视", -- src\editor\debugger.lua
|
||||
["&Delete"] = nil, -- src\editor\filetree.lua
|
||||
["&Documentation"] = nil, -- src\editor\menu_help.lua
|
||||
["&Down"] = "往下", -- src\editor\findreplace.lua
|
||||
["&Edit Project Directory"] = nil, -- src\editor\filetree.lua
|
||||
["&Edit Value"] = nil, -- src\editor\debugger.lua
|
||||
["&Edit Watch"] = "编辑监视", -- src\editor\debugger.lua
|
||||
["&Edit"] = "编辑", -- src\editor\menu_edit.lua
|
||||
["&File"] = "文件", -- src\editor\menu_file.lua
|
||||
@@ -16,102 +22,127 @@ return {
|
||||
["&Find Next"] = "查找下一个", -- src\editor\findreplace.lua
|
||||
["&Find"] = "查找", -- src\editor\menu_search.lua
|
||||
["&Fold/Unfold All"] = "全 折叠/展开", -- src\editor\menu_edit.lua
|
||||
["&Goto Line"] = "到...行", -- src\editor\menu_search.lua
|
||||
["&Frequently Asked Questions"] = nil, -- src\editor\menu_help.lua
|
||||
["&Getting Started Guide"] = nil, -- src\editor\menu_help.lua
|
||||
["&Help"] = "帮助", -- src\editor\menu_help.lua
|
||||
["&New Directory"] = nil, -- src\editor\filetree.lua
|
||||
["&New"] = "新建", -- src\editor\menu_file.lua
|
||||
["&Open..."] = "打开...", -- src\editor\menu_file.lua
|
||||
["&Output/Console Window"] = "输出/主控台视窗", -- src\editor\menu_view.lua
|
||||
["&Paste"] = "粘贴", -- src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Project"] = "项目", -- src\editor\menu_project.lua, src\editor\inspect.lua
|
||||
["&Redo"] = "重做", -- src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Paste"] = "粘贴", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Project Page"] = nil, -- src\editor\menu_help.lua
|
||||
["&Project"] = "项目", -- src\editor\menu_project.lua
|
||||
["&Redo"] = "重做", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Rename"] = nil, -- src\editor\filetree.lua
|
||||
["&Replace All"] = "全替换", -- src\editor\findreplace.lua
|
||||
["&Replace"] = "替换", -- src\editor\findreplace.lua, src\editor\menu_search.lua
|
||||
["&Run"] = "执行", -- src\editor\menu_project.lua
|
||||
["&Save"] = "保存", -- src\editor\menu_file.lua, src\editor\gui.lua
|
||||
["&Save"] = "保存", -- src\editor\gui.lua, src\editor\menu_file.lua
|
||||
["&Search"] = "搜索", -- src\editor\menu_search.lua
|
||||
["&Sort"] = "分类", -- src\editor\menu_search.lua
|
||||
["&Sort"] = "分类", -- src\editor\menu_edit.lua
|
||||
["&Stack Window"] = "叠视窗/堆栈视窗", -- src\editor\menu_view.lua
|
||||
["&Start Debugger Server"] = "开启除错器伺服机", -- src\editor\menu_project.lua
|
||||
["&Status Bar"] = nil, -- src\editor\menu_view.lua
|
||||
["&Subdirectories"] = "子文件夹", -- src\editor\findreplace.lua
|
||||
["&Undo"] = "撤消", -- src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Tool Bar"] = nil, -- src\editor\menu_view.lua
|
||||
["&Tutorials"] = nil, -- src\editor\menu_help.lua
|
||||
["&Undo"] = "撤消", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Up"] = "往上", -- src\editor\findreplace.lua
|
||||
["&View"] = "视图", -- src\editor\menu_view.lua
|
||||
["&Watch Window"] = "监视视窗", -- src\editor\menu_view.lua
|
||||
[".&bak on Replace"] = nil, -- src\editor\findreplace.lua
|
||||
["About %s"] = "关于 %s", -- src\editor\menu_help.lua
|
||||
["Add To Scratchpad"] = nil, -- src\editor\editor.lua
|
||||
["Add Watch Expression"] = "添加监视表达式", -- src\editor\editor.lua
|
||||
["Add to Scratchpad"] = "添加至暂存器", -- src\editor\editor.lua
|
||||
["All files"] = "全部文件", -- src\editor\commands.lua
|
||||
["Allow external process to start debugging"] = "允许外部进程开启除错", -- src\editor\menu_project.lua
|
||||
["Analyze the source code"] = "分析源代码", -- src\editor\inspect.lua
|
||||
["Analyze"] = "分析", -- src\editor\inspect.lua
|
||||
["Auto Complete Identifiers"] = "自动补全标识符", -- src\editor\menu_edit.lua
|
||||
["Auto complete while typing"] = "当输入时自动补全", -- src\editor\menu_edit.lua
|
||||
["Break execution at the next executed line of code"] = "执行下一语句之后中断执行", -- src\editor\menu_project.lua, src\editor\gui.lua
|
||||
["C&lear Output Window"] = "清除输出视窗", -- src\editor\menu_project.lua
|
||||
["Bookmark"] = nil, -- src\editor\menu_edit.lua
|
||||
["Break execution at the next executed line of code"] = "执行下一语句之后中断执行", -- src\editor\menu_project.lua
|
||||
["C&lear Output Window"] = "清除输出视窗", -- src\editor\gui.lua, src\editor\menu_project.lua
|
||||
["C&omment/Uncomment"] = "注释/消除注释", -- src\editor\menu_edit.lua
|
||||
["Can't debug the script in the active editor window."] = "不能在现行编辑视窗对脚本进行除错", -- src\editor\debugger.lua
|
||||
["Can't evaluate the expression while the application is running."] = nil, -- src\editor\debugger.lua
|
||||
["Can't find file '%s' in the current project to activate for debugging. Update the project or open the file in the editor before debugging."] = "在当前项目中寻找不到文件 '%s' 以进行激活然后除错, 更新项目或是在编辑器里开启文件后再除错", -- src\editor\debugger.lua
|
||||
["Can't open file '%s': %s"] = nil, -- src\editor\singleinstance.lua
|
||||
["Can't process auto-recovery record; invalid format: %s."] = "不能处理自动恢复存档: %s", -- src\editor\commands.lua
|
||||
["Can't run the entry point script ('%s')."] = "不能执行entry point脚本 ('%s')", -- src\editor\debugger.lua
|
||||
["Can't start debugger server at %s:%d: %s."] = nil, -- src\editor\debugger.lua
|
||||
["Can't start debugging session due to internal error '%s'."] = "除错动作失败 '%s'.", -- src\editor\debugger.lua
|
||||
["Can't start debugging without an opened file or with the current file not being saved ('%s')."] = "不能启动除错,没有文档被开启或当前更改过的文档还没保存('%s')", -- src\editor\debugger.lua
|
||||
["Can't stop debugger server as it is not started."] = nil, -- src\editor\debugger.lua
|
||||
["Cancel"] = "取消", -- src\editor\findreplace.lua
|
||||
["Choose ..."] = "请选 ...", -- src\editor\menu_project.lua
|
||||
["Choose a project directory"] = "选择项目文件夹", -- src\editor\findreplace.lua, src\editor\menu_project.lua
|
||||
["Clear &Dynamic Words"] = "清除动态词汇", -- src\editor\menu_edit.lua
|
||||
["Cancelled by the user."] = nil, -- src\editor\findreplace.lua
|
||||
["Choose a project directory"] = "选择项目文件夹", -- src\editor\findreplace.lua, src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Choose..."] = "请选...", -- src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Clear Items"] = nil, -- src\editor\menu_file.lua
|
||||
["Clear items from this list"] = nil, -- src\editor\menu_file.lua
|
||||
["Clear the output window before compiling or debugging"] = "编译或除错前清除输出视窗", -- src\editor\menu_project.lua
|
||||
["Close &Other Pages"] = "关闭其他页面", -- src\editor\gui.lua
|
||||
["Close A&ll Pages"] = "关闭全部页面", -- src\editor\gui.lua
|
||||
["Close the current editor window"] = "关闭当前编译视窗", -- src\editor\menu_file.lua
|
||||
["Co&ntinue"] = "继续", -- src\editor\menu_project.lua
|
||||
["Col: %d"] = "列: %d", -- src\editor\editor.lua
|
||||
["Command Line Parameters..."] = nil, -- src\editor\menu_project.lua
|
||||
["Command line parameters"] = nil, -- src\editor\menu_project.lua
|
||||
["Comment or uncomment current or selected lines"] = "注释/消除注释 当前或被选的语句", -- src\editor\menu_edit.lua
|
||||
["Compilation error"] = "编译错误", -- src\editor\debugger.lua, src\editor\commands.lua
|
||||
["Compilation error"] = "编译错误", -- src\editor\commands.lua, src\editor\debugger.lua
|
||||
["Compilation successful; %.0f%% success rate (%d/%d)."] = "编译成功; 成功率: %.0f%% (%d/%d).", -- src\editor\commands.lua
|
||||
["Compile the current file"] = "编译当前的文档", -- src\editor\menu_project.lua
|
||||
["Complete &Identifier"] = "补全标识符", -- src\editor\menu_edit.lua
|
||||
["Complete the current identifier"] = "补全当前标识符", -- src\editor\menu_edit.lua
|
||||
["Consider removing backslash from escape sequence '%s'."] = nil, -- src\editor\commands.lua
|
||||
["Copy Full Path"] = nil, -- src\editor\gui.lua, src\editor\filetree.lua
|
||||
["Copy selected text to clipboard"] = "复制被选的text到clipboard", -- src\editor\menu_edit.lua
|
||||
["Correct &Indentation"] = nil, -- src\editor\menu_edit.lua
|
||||
["Couldn't activate file '%s' for debugging; continuing without it."] = "不能激活 '%s' 以除错; 省略后继续进行", -- src\editor\debugger.lua
|
||||
["Create an empty document"] = "新建空文档", -- src\editor\menu_file.lua, src\editor\gui.lua
|
||||
["Cu&t"] = "剪切", -- src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["Create an empty document"] = "新建空文档", -- src\editor\menu_file.lua
|
||||
["Cu&t"] = "剪切", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["Cut selected text to clipboard"] = "剪切被选的text到clipboard", -- src\editor\menu_edit.lua
|
||||
["Debugger server started at %s:%d."] = "除错伺服器起始于 %s:%d.", -- src\editor\debugger.lua
|
||||
["Debugger server stopped at %s:%d."] = nil, -- src\editor\debugger.lua
|
||||
["Debugging session completed (%s)."] = "除错会话完成 (%s)", -- src\editor\debugger.lua
|
||||
["Debugging session started in '%s'."] = "除错会话于 '%s' 起始", -- src\editor\debugger.lua
|
||||
["Debugging suspended at %s:%s (couldn't activate the file)."] = "除错挂起于 %s:%s (不能激活文档).", -- src\editor\debugger.lua
|
||||
["Debugging suspended at '%s:%s' (couldn't activate the file)."] = "除错挂起于 '%s:%s' (不能激活文档).", -- src\editor\debugger.lua
|
||||
["Detach &Process"] = nil, -- src\editor\menu_project.lua
|
||||
["Directory"] = "文件夹", -- src\editor\findreplace.lua
|
||||
["Do you want to delete '%s'?"] = nil, -- src\editor\filetree.lua
|
||||
["Do you want to overwrite it?"] = nil, -- src\editor\commands.lua
|
||||
["Do you want to reload it?"] = "需要重新导入吗?", -- src\editor\editor.lua
|
||||
["Do you want to save the changes to '%s'?"] = "需要把更改保存于 '%s'?", -- src\editor\commands.lua
|
||||
["E&xit"] = "离开", -- src\editor\menu_file.lua
|
||||
["Enter Lua code and press Enter to run it."] = "输入Lua代码然后按 <Enter> 以执行", -- src\editor\shellbox.lua
|
||||
["Enter line number"] = "输入行号码", -- src\editor\menu_search.lua
|
||||
["Enter command line parameters (use Cancel to clear)"] = nil, -- src\editor\menu_project.lua
|
||||
["Enter replacement text"] = nil, -- src\editor\editor.lua
|
||||
["Error while loading API file: %s"] = "导入API档时出错误: %s", -- src\editor\autocomplete.lua
|
||||
["Error while loading configuration file: %s"] = "导入configuration档时出错误: %s", -- src\editor\style.lua
|
||||
["Error while processing API file: %s"] = "处理API档时出错误: %s", -- src\editor\autocomplete.lua
|
||||
["Error while processing configuration file: %s"] = "处理configuration档时出错误: %s", -- src\editor\style.lua
|
||||
["Error"] = "错误", -- src\editor\commands.lua
|
||||
["Evaluate in Console"] = "在主控台中估值", -- src\editor\editor.lua
|
||||
["Evaluate In Console"] = nil, -- src\editor\editor.lua
|
||||
["Execute the current project/file and keep updating the code to see immediate results"] = "执行当前项目/文档和更新代码以便得到执行结果", -- src\editor\menu_project.lua
|
||||
["Execute the current project/file"] = "执行当前项目/文档", -- src\editor\menu_project.lua
|
||||
["Execution error"] = "执行出错误", -- src\editor\debugger.lua
|
||||
["Exit program"] = "离开程式", -- src\editor\menu_file.lua
|
||||
["Expr"] = "表达式", -- src\editor\debugger.lua
|
||||
["Expression"] = "表达式", -- src\editor\debugger.lua
|
||||
["File '%s' has been modified on disk."] = "磁碟上的文档 '%s' 已被更改", -- src\editor\editor.lua
|
||||
["File '%s' has more recent timestamp than restored '%s'; please review before saving."] =
|
||||
"文档 '%s' 的时间戳比 '%s' 更新近; 请检验后再保存", -- src\editor\commands.lua
|
||||
["File '%s' no longer exists."] = "文档 '%s' 已不存在", -- src\editor\editor.lua, src\editor\menu_file.lua
|
||||
["File '%s' has more recent timestamp than restored '%s'; please review before saving."] = "文档 '%s' 的时间戳比 '%s' 更新近; 请检验后再保存", -- src\editor\commands.lua
|
||||
["File '%s' is missing and can't be recovered."] = nil, -- src\editor\commands.lua
|
||||
["File '%s' no longer exists."] = "文档 '%s' 已不存在", -- src\editor\menu_file.lua, src\editor\editor.lua
|
||||
["File Type"] = "文档类", -- src\editor\findreplace.lua
|
||||
["File already exists."] = nil, -- src\editor\commands.lua
|
||||
["File history"] = "文档历史", -- src\editor\menu_file.lua
|
||||
["Find &In Files"] = "在文档中查找", -- src\editor\menu_search.lua
|
||||
["Find &Next"] = "查找下一个", -- src\editor\menu_search.lua
|
||||
["Find &Previous"] = "查找上一个", -- src\editor\menu_search.lua
|
||||
["Find In Files"] = "在文档中查找", -- src\editor\findreplace.lua
|
||||
["Find and insert library function"] = nil, -- src\editor\menu_search.lua
|
||||
["Find and replace text in files"] = "在文档中查找text然后更换", -- src\editor\menu_search.lua
|
||||
["Find and replace text"] = "查找text然后更换", -- src\editor\menu_search.lua, src\editor\gui.lua
|
||||
["Find and replace text"] = "查找text然后更换", -- src\editor\menu_search.lua
|
||||
["Find text in files"] = "在文档中查找text", -- src\editor\menu_search.lua
|
||||
["Find text"] = "查找text", -- src\editor\menu_search.lua, src\editor\gui.lua
|
||||
["Find text"] = "查找text", -- src\editor\menu_search.lua
|
||||
["Find the earlier text occurence"] = "查找之前出现的text", -- src\editor\menu_search.lua
|
||||
["Find the next text occurrence"] = "查找之後将出现的text", -- src\editor\menu_search.lua
|
||||
["Find"] = "查找", -- src\editor\findreplace.lua
|
||||
@@ -119,27 +150,43 @@ return {
|
||||
["Found auto-recovery record and restored saved session."] = "找到自动恢复存档和恢复已存对话", -- src\editor\commands.lua
|
||||
["Found"] = "找到", -- src\editor\findreplace.lua
|
||||
["Full &Screen"] = "全屏", -- src\editor\menu_view.lua
|
||||
["Go to a selected line"] = "到所选的行", -- src\editor\menu_search.lua
|
||||
["Goto Line"] = "到...行", -- src\editor\menu_search.lua
|
||||
["Go To Definition"] = nil, -- src\editor\editor.lua
|
||||
["Go To File..."] = nil, -- src\editor\menu_search.lua
|
||||
["Go To Line..."] = "到...行", -- src\editor\menu_search.lua
|
||||
["Go To Next Bookmark"] = nil, -- src\editor\menu_edit.lua
|
||||
["Go To Previous Bookmark"] = nil, -- src\editor\menu_edit.lua
|
||||
["Go To Symbol..."] = nil, -- src\editor\menu_search.lua
|
||||
["Go to file"] = nil, -- src\editor\menu_search.lua
|
||||
["Go to line"] = "到...行", -- src\editor\menu_search.lua
|
||||
["Go to symbol"] = nil, -- src\editor\menu_search.lua
|
||||
["Hide '.%s' Files"] = nil, -- src\editor\filetree.lua
|
||||
["INS"] = "INS", -- src\editor\editor.lua
|
||||
["Ignored error in debugger initialization code: %s."] = nil, -- src\editor\debugger.lua
|
||||
["In Files"] = "在档案里", -- src\editor\findreplace.lua
|
||||
["Jump to a function definition..."] = "跳到函数定义", -- src\editor\editor.lua
|
||||
["Insert Library Function..."] = nil, -- src\editor\menu_search.lua
|
||||
["Known Files"] = "所知的文档", -- src\editor\commands.lua
|
||||
["Ln: %d"] = "行: %d", -- src\editor\editor.lua
|
||||
["Local console"] = "本地主控台", -- src\editor\shellbox.lua, src\editor\gui.lua
|
||||
["Local console"] = "本地主控台", -- src\editor\gui.lua, src\editor\shellbox.lua
|
||||
["Lua &Interpreter"] = "Lua 解释器", -- src\editor\menu_project.lua
|
||||
["Mapped remote request for '%s' to '%s'."] = "映射远程请求 '%s' 至 '%s'", -- src\editor\debugger.lua
|
||||
["Match &case"] = "case匹配", -- src\editor\findreplace.lua
|
||||
["Match &whole word"] = "全句匹配", -- src\editor\findreplace.lua
|
||||
["Mixed end-of-line encodings detected."] = "发现混杂的EOL编码", -- src\editor\commands.lua
|
||||
["Navigate"] = nil, -- src\editor\menu_search.lua
|
||||
["New &File"] = nil, -- src\editor\filetree.lua
|
||||
["OVR"] = "OVR", -- src\editor\editor.lua
|
||||
["Open an existing document"] = "打开现存文档", -- src\editor\menu_file.lua, src\editor\gui.lua
|
||||
["Open With Default Program"] = nil, -- src\editor\filetree.lua
|
||||
["Open an existing document"] = "打开现存文档", -- src\editor\menu_file.lua
|
||||
["Open file"] = "打开文档", -- src\editor\commands.lua
|
||||
["Options"] = "选项", -- src\editor\findreplace.lua
|
||||
["Output (running)"] = "输出 (进行中)", -- src\editor\output.lua
|
||||
["Output"] = "输出", -- src\editor\output.lua, src\editor\settings.lua, src\editor\gui.lua
|
||||
["Outline Window"] = nil, -- src\editor\menu_view.lua
|
||||
["Outline"] = nil, -- src\editor\outline.lua
|
||||
["Output (running)"] = "输出 (进行中)", -- src\editor\debugger.lua, src\editor\output.lua
|
||||
["Output (suspended)"] = nil, -- src\editor\debugger.lua
|
||||
["Output"] = "输出", -- src\editor\debugger.lua, src\editor\output.lua, src\editor\gui.lua, src\editor\settings.lua
|
||||
["Paste text from the clipboard"] = "从clipboard粘贴text", -- src\editor\menu_edit.lua
|
||||
["Preferences"] = "首选项", -- src\editor\menu_edit.lua
|
||||
["Prepend '!' to force local execution."] = nil, -- src\editor\shellbox.lua
|
||||
["Prepend '=' to show complex values on multiple lines."] = "在多行展现复杂值请前置 '='", -- src\editor\shellbox.lua
|
||||
["Press cancel to abort."] = "按 <cancel> 以退出", -- src\editor\commands.lua
|
||||
["Program '%s' started in '%s' (pid: %d)."] = "程式 '%s' 执行于 '%s' (pid: %d).", -- src\editor\output.lua
|
||||
@@ -148,68 +195,94 @@ return {
|
||||
["Program starting as '%s'."] = "程式以 '%s' 执行", -- src\editor\output.lua
|
||||
["Program stopped (pid: %d)."] = "程式停止 (pid: %d).", -- src\editor\debugger.lua
|
||||
["Program unable to run as '%s'."] = "程式不能以 '%s' 执行", -- src\editor\output.lua
|
||||
["Project Directory"] = "项目文件夹", -- src\editor\menu_project.lua
|
||||
["Project"] = "项目", -- src\editor\settings.lua, src\editor\gui.lua
|
||||
["Project Directory"] = "项目文件夹", -- src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Project history"] = nil, -- src\editor\menu_file.lua
|
||||
["Project"] = "项目", -- src\editor\filetree.lua
|
||||
["Project/&FileTree Window"] = "项目/文档树 视窗", -- src\editor\menu_view.lua
|
||||
["Provide command line parameters"] = nil, -- src\editor\menu_project.lua
|
||||
["R/O"] = "唯读", -- src\editor\editor.lua
|
||||
["R/W"] = "读写", -- src\editor\editor.lua
|
||||
["Re&place In Files"] = "在文档中替换", -- src\editor\menu_search.lua
|
||||
["Re-indent selected lines"] = nil, -- src\editor\menu_edit.lua
|
||||
["Recent &Projects"] = nil, -- src\editor\menu_file.lua
|
||||
["Recent Files"] = "最近的文档", -- src\editor\menu_file.lua
|
||||
["Redo last edit undone"] = "重做最后被取消的编辑", -- src\editor\menu_edit.lua
|
||||
["Refused a request to start a new debugging session as there is one in progress already."] = "因为有另一个除错在进行,拒绝开启新的除错对话", -- src\editor\debugger.lua
|
||||
["Regular &expression"] = "正则表达式", -- src\editor\findreplace.lua
|
||||
["Remote console"] = "远程主控台", -- src\editor\shellbox.lua
|
||||
["Replace &All"] = "更换全部", -- src\editor\findreplace.lua
|
||||
["Rename All Instances"] = nil, -- src\editor\editor.lua
|
||||
["Replace A&ll"] = "更换全部", -- src\editor\findreplace.lua
|
||||
["Replace All Selections"] = nil, -- src\editor\editor.lua
|
||||
["Replace"] = "更换", -- src\editor\findreplace.lua
|
||||
["Replaced an invalid UTF8 character with %s."] = "以%s更换无效的UTF8字元", -- src\editor\commands.lua
|
||||
["Replaced"] = "更换", -- src\editor\findreplace.lua
|
||||
["Replacing"] = "更换中", -- src\editor\findreplace.lua
|
||||
["Reset to default layout"] = "重置缺省布局", -- src\editor\menu_view.lua
|
||||
["Resets the dynamic word list for autocompletion"] = "为自动补全重置动态word list", -- src\editor\menu_edit.lua
|
||||
["Run As Scratchpad"] = "以Scratchpad执行", -- src\editor\menu_project.lua
|
||||
["Run as Scratchpad"] = "以Scratchpad执行", -- src\editor\menu_project.lua
|
||||
["S&top Debugging"] = "停止除错", -- src\editor\menu_project.lua
|
||||
["S&top Process"] = "停止进程", -- src\editor\menu_project.lua
|
||||
["Save &As..."] = "另存为...", -- src\editor\menu_file.lua, src\editor\gui.lua
|
||||
["Save &As..."] = "另存为...", -- src\editor\gui.lua, src\editor\menu_file.lua
|
||||
["Save A&ll"] = "全部存档", -- src\editor\menu_file.lua
|
||||
["Save Changes?"] = "存档更新?", -- src\editor\commands.lua
|
||||
["Save all open documents"] = "保存所有开启的文档", -- src\editor\menu_file.lua, src\editor\gui.lua
|
||||
["Save all open documents"] = "保存所有开启的文档", -- src\editor\menu_file.lua
|
||||
["Save file as"] = "文档另存为", -- src\editor\commands.lua
|
||||
["Save file?"] = "保存文档?", -- src\editor\commands.lua
|
||||
["Save the current document to a file with a new name"] = "用新档案名称保存当前文档", -- src\editor\menu_file.lua
|
||||
["Save the current document"] = "保存当前文档", -- src\editor\menu_file.lua, src\editor\gui.lua
|
||||
["Save the current document"] = "保存当前文档", -- src\editor\menu_file.lua
|
||||
["Saved auto-recover at %s."] = "在 %s 存档自动恢复", -- src\editor\commands.lua
|
||||
["Scope"] = "范围", -- src\editor\findreplace.lua
|
||||
["Scratchpad error"] = "暂存器错误", -- src\editor\debugger.lua
|
||||
["Searching for"] = "搜索", -- src\editor\findreplace.lua
|
||||
["Select &All"] = "选全部", -- src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["Sel: %d/%d"] = nil, -- src\editor\editor.lua
|
||||
["Select &All"] = "选全部", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["Select all text in the editor"] = "选编辑器内的所有text", -- src\editor\menu_edit.lua
|
||||
["Select And Find Next"] = nil, -- src\editor\menu_search.lua
|
||||
["Select And Find Previous"] = nil, -- src\editor\menu_search.lua
|
||||
["Select the word under cursor and find its next occurrence"] = nil, -- src\editor\menu_search.lua
|
||||
["Select the word under cursor and find its previous occurrence"] = nil, -- src\editor\menu_search.lua
|
||||
["Set From Current File"] = "从当前文档设置", -- src\editor\menu_project.lua
|
||||
["Set project directory from current file"] = "从当前文档设置项目文件夹", -- src\editor\menu_project.lua, src\editor\gui.lua
|
||||
["Set project directory from current file"] = "从当前文档设置项目文件夹", -- src\editor\menu_project.lua
|
||||
["Set the interpreter to be used"] = "设置解释器", -- src\editor\menu_project.lua
|
||||
["Set the project directory to be used"] = "设置项目文件夹", -- src\editor\menu_project.lua
|
||||
["Set the project directory to be used"] = "设置项目文件夹", -- src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Settings: System"] = "设置: 系统", -- src\editor\menu_edit.lua
|
||||
["Settings: User"] = "设置: 用户", -- src\editor\menu_edit.lua
|
||||
["Show &Tooltip"] = "展现tooltip", -- src\editor\menu_edit.lua
|
||||
["Show All Files"] = nil, -- src\editor\filetree.lua
|
||||
["Show Hidden Files"] = nil, -- src\editor\filetree.lua
|
||||
["Show Location"] = nil, -- src\editor\gui.lua, src\editor\filetree.lua
|
||||
["Show all files"] = nil, -- src\editor\filetree.lua
|
||||
["Show files previously hidden"] = nil, -- src\editor\filetree.lua
|
||||
["Show tooltip for current position; place cursor after opening bracket of function"] = "在当前的位置展现tooltip; 把游标放置于函数的开括号之后", -- src\editor\menu_edit.lua
|
||||
["Sort selected lines"] = "对被选的行进行排列", -- src\editor\menu_search.lua
|
||||
["Show/Hide the status bar"] = nil, -- src\editor\menu_view.lua
|
||||
["Show/Hide the toolbar"] = nil, -- src\editor\menu_view.lua
|
||||
["Sort selected lines"] = "对被选的行进行排列", -- src\editor\menu_edit.lua
|
||||
["Source"] = nil, -- src\editor\menu_edit.lua
|
||||
["Stack"] = "堆栈", -- src\editor\debugger.lua
|
||||
["Start &Debugging"] = "开始除错", -- src\editor\menu_project.lua
|
||||
["Start debugging"] = "开始除错", -- src\editor\menu_project.lua, src\editor\gui.lua
|
||||
["Start or continue debugging"] = nil, -- src\editor\menu_project.lua
|
||||
["Step &Into"] = "除错运行 进入子程序/函数", -- src\editor\menu_project.lua
|
||||
["Step &Over"] = "除错运行 掠过子程序/函数", -- src\editor\menu_project.lua
|
||||
["Step O&ut"] = "除错运行 离开子程序/函数", -- src\editor\menu_project.lua
|
||||
["Step into"] = "除错运行 进入子程序/函数", -- src\editor\menu_project.lua, src\editor\gui.lua
|
||||
["Step out of the current function"] = "除错运行 离开当前的函数", -- src\editor\menu_project.lua, src\editor\gui.lua
|
||||
["Step over"] = "除错运行 掠过子程序/函数", -- src\editor\menu_project.lua, src\editor\gui.lua
|
||||
["Stop the currently running process"] = "终止目前进行着的进程", -- src\editor\menu_project.lua, src\editor\gui.lua
|
||||
["Step into"] = "除错运行 进入子程序/函数", -- src\editor\menu_project.lua
|
||||
["Step out of the current function"] = "除错运行 离开当前的函数", -- src\editor\menu_project.lua
|
||||
["Step over"] = "除错运行 掠过子程序/函数", -- src\editor\menu_project.lua
|
||||
["Stop debugging and continue running the process"] = nil, -- src\editor\menu_project.lua
|
||||
["Stop the currently running process"] = "终止目前进行着的进程", -- src\editor\menu_project.lua
|
||||
["Switch to or from full screen mode"] = "切换全屏模式", -- src\editor\menu_view.lua
|
||||
["Text not found."] = "寻找不到text", -- src\editor\findreplace.lua
|
||||
["The API file must be located in a subdirectory of the API directory."] = "API file必须存放在API文件夹中的子文件夹", -- src\editor\autocomplete.lua
|
||||
["Toggle Bookmark"] = nil, -- src\editor\menu_edit.lua
|
||||
["Toggle Break&point"] = "切换中断点", -- src\editor\menu_project.lua
|
||||
["Toggle breakpoint"] = "切换中断点", -- src\editor\menu_project.lua, src\editor\gui.lua
|
||||
["Toggle bookmark"] = nil, -- src\editor\menu_edit.lua
|
||||
["Toggle breakpoint"] = "切换中断点", -- src\editor\menu_project.lua
|
||||
["Tr&ace"] = "追踪", -- src\editor\menu_project.lua
|
||||
["Trace execution showing each executed line"] = "执行追踪展示每一执行过的语句", -- src\editor\menu_project.lua
|
||||
["Unable to create directory '%s'."] = nil, -- src\editor\filetree.lua
|
||||
["Unable to create file '%s'."] = nil, -- src\editor\filetree.lua
|
||||
["Unable to delete directory '%s': %s"] = nil, -- src\editor\filetree.lua
|
||||
["Unable to load file '%s'."] = "导出文件失败 '%s'.", -- src\editor\commands.lua
|
||||
["Unable to rename file '%s'."] = nil, -- src\editor\filetree.lua
|
||||
["Unable to save file '%s': %s"] = "保存文件失败 '%s': %s", -- src\editor\commands.lua
|
||||
["Unable to stop program (pid: %d), code %d."] = "停止程序失败 (pid: %d), 代码 %d.", -- src\editor\debugger.lua
|
||||
["Undo last edit"] = "清除前编辑动作", -- src\editor\menu_edit.lua
|
||||
@@ -217,15 +290,20 @@ return {
|
||||
["Use '%s' to show line endings and '%s' to convert them."] = "用 '%s' 来显示语句的终结和 '%s' 来进行转换", -- src\editor\commands.lua
|
||||
["Use 'clear' to clear the shell output and the history."] = "用 'clear' 来清除shell的输出和历史", -- src\editor\shellbox.lua
|
||||
["Use Shift-Enter for multiline code."] = "用 <Shift-Enter> 来处理多行代码", -- src\editor\shellbox.lua
|
||||
["Value"] = "数值", -- src\editor\debugger.lua
|
||||
["View the outline window"] = nil, -- src\editor\menu_view.lua
|
||||
["View the output/console window"] = "查看输出/主控台视窗", -- src\editor\menu_view.lua
|
||||
["View the project/filetree window"] = "查看项目/文件树视窗", -- src\editor\menu_view.lua
|
||||
["View the stack window"] = "查看堆栈视窗", -- src\editor\menu_view.lua, src\editor\gui.lua
|
||||
["View the watch window"] = "查看监视视窗", -- src\editor\menu_view.lua, src\editor\gui.lua
|
||||
["View the stack window"] = "查看堆栈视窗", -- src\editor\menu_view.lua
|
||||
["View the watch window"] = "查看监视视窗", -- src\editor\menu_view.lua
|
||||
["Watch"] = "监视", -- src\editor\debugger.lua
|
||||
["Welcome to the interactive Lua interpreter."] = "欢迎来到互动 Lua interpreter.", -- src\editor\shellbox.lua
|
||||
["Wrap ar&ound"] = "卷绕", -- src\editor\findreplace.lua
|
||||
["You must save the program first."] = "必须先保存程序", -- src\editor\commands.lua
|
||||
["on line %d"] = "在 %d 行", -- src\editor\debugger.lua, src\editor\commands.lua
|
||||
["Zoom In"] = nil, -- src\editor\menu_view.lua
|
||||
["Zoom Out"] = nil, -- src\editor\menu_view.lua
|
||||
["Zoom to 100%"] = nil, -- src\editor\menu_view.lua
|
||||
["Zoom"] = nil, -- src\editor\menu_view.lua
|
||||
["on line %d"] = "在 %d 行", -- src\editor\debugger.lua, src\editor\editor.lua, src\editor\commands.lua
|
||||
["traced %d instruction"] = "追踪 %d 指令", -- src\editor\debugger.lua
|
||||
["unknown error"] = nil, -- src\editor\debugger.lua
|
||||
}
|
||||
|
||||
190
cfg/i18n/de.lua
190
cfg/i18n/de.lua
@@ -5,12 +5,17 @@ return {
|
||||
["&About"] = "&Über", -- src\editor\menu_help.lua
|
||||
["&Add Watch"] = "&Beobachtungspunkt hinzufügen", -- src\editor\debugger.lua
|
||||
["&Break"] = "&Unterbrechung", -- src\editor\menu_project.lua
|
||||
["&Close Page"] = "S&eite schließen", -- src\editor\menu_file.lua, src\editor\gui.lua
|
||||
["&Close Page"] = "S&eite schließen", -- src\editor\gui.lua, src\editor\menu_file.lua
|
||||
["&Community"] = "&Community", -- src\editor\menu_help.lua
|
||||
["&Compile"] = "&Compiler", -- src\editor\menu_project.lua
|
||||
["&Copy"] = "&Kopieren", -- src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Copy"] = "&Kopieren", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Default Layout"] = "Standard-&Layout", -- src\editor\menu_view.lua
|
||||
["&Delete Watch"] = "&Beobachtungspunkt entfernen", -- src\editor\debugger.lua
|
||||
["&Delete"] = "&Entfernen", -- src\editor\filetree.lua
|
||||
["&Documentation"] = "&Dokumentation", -- src\editor\menu_help.lua
|
||||
["&Down"] = "&Runter", -- src\editor\findreplace.lua
|
||||
["&Edit Project Directory"] = "Projektverzeichnis ändern", -- src\editor\filetree.lua
|
||||
["&Edit Value"] = "Wert editieren", -- src\editor\debugger.lua
|
||||
["&Edit Watch"] = "&Beobachtungspunkt bearbeiten", -- src\editor\debugger.lua
|
||||
["&Edit"] = "&Bearbeiten", -- src\editor\menu_edit.lua
|
||||
["&File"] = "&Datei", -- src\editor\menu_file.lua
|
||||
@@ -18,77 +23,101 @@ return {
|
||||
["&Find Next"] = "&Nächsten finden", -- src\editor\findreplace.lua
|
||||
["&Find"] = "&Finden", -- src\editor\menu_search.lua
|
||||
["&Fold/Unfold All"] = "A&lles ein-/ausklappen", -- src\editor\menu_edit.lua
|
||||
["&Goto Line"] = "&Gehe zu Zeile", -- src\editor\menu_search.lua
|
||||
["&Frequently Asked Questions"] = "&FAQ", -- src\editor\menu_help.lua
|
||||
["&Getting Started Guide"] = "&Anfängerleitfaden", -- src\editor\menu_help.lua
|
||||
["&Help"] = "&Hilfe", -- src\editor\menu_help.lua
|
||||
["&New Directory"] = "&Neuer Ordner", -- src\editor\filetree.lua
|
||||
["&New"] = "&Neu", -- src\editor\menu_file.lua
|
||||
["&Open..."] = "&Öffnen...", -- src\editor\menu_file.lua
|
||||
["&Output/Console Window"] = "&Ausgabefenster/Konsole", -- src\editor\menu_view.lua
|
||||
["&Paste"] = "&Einfügen", -- src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Project"] = "&Projekt", -- src\editor\menu_project.lua, src\editor\inspect.lua
|
||||
["&Redo"] = "&Wiederholen", -- src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Paste"] = "&Einfügen", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Project Page"] = "&Projektseite", -- src\editor\menu_help.lua
|
||||
["&Project"] = "&Projekt", -- src\editor\menu_project.lua
|
||||
["&Redo"] = "&Wiederholen", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Rename"] = "&Umbenennen", -- src\editor\filetree.lua
|
||||
["&Replace All"] = "&Alles ersetzen", -- src\editor\findreplace.lua
|
||||
["&Replace"] = "&Ersetzen", -- src\editor\findreplace.lua, src\editor\menu_search.lua
|
||||
["&Run"] = "&Starten", -- src\editor\menu_project.lua
|
||||
["&Save"] = "&Speichern", -- src\editor\menu_file.lua, src\editor\gui.lua
|
||||
["&Save"] = "&Speichern", -- src\editor\gui.lua, src\editor\menu_file.lua
|
||||
["&Search"] = "&Suchen", -- src\editor\menu_search.lua
|
||||
["&Sort"] = "&Sortieren", -- src\editor\menu_search.lua
|
||||
["&Sort"] = "&Sortieren", -- src\editor\menu_edit.lua
|
||||
["&Stack Window"] = "&Stapel/Stack", -- src\editor\menu_view.lua
|
||||
["&Start Debugger Server"] = "De&bugserver starten", -- src\editor\menu_project.lua
|
||||
["&Status Bar"] = "S&tatuszeile", -- src\editor\menu_view.lua
|
||||
["&Subdirectories"] = "&Unterverzeichnisse", -- src\editor\findreplace.lua
|
||||
["&Undo"] = "&Rückgängig", -- src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Tool Bar"] = "&Werkzeugleiste", -- src\editor\menu_view.lua
|
||||
["&Tutorials"] = "&Tutorien", -- src\editor\menu_help.lua
|
||||
["&Undo"] = "&Rückgängig", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Up"] = "&Hoch", -- src\editor\findreplace.lua
|
||||
["&View"] = "&Ansicht", -- src\editor\menu_view.lua
|
||||
["&Watch Window"] = "&Beobachtungspunkte", -- src\editor\menu_view.lua
|
||||
[".&bak on Replace"] = ".&bak bei Ersetzen", -- src\editor\findreplace.lua
|
||||
["About %s"] = "Über %s", -- src\editor\menu_help.lua
|
||||
["Add Watch Expression"] = "Beobachtungspunkt hinzufügen", -- src\editor\editor.lua
|
||||
["Add To Scratchpad"] = "Zu Entwurf hinzufügen", -- src\editor\editor.lua
|
||||
["Add Watch Expression"] = "Beobachtungspunkt hinzufügen", -- src\editor\editor.lua
|
||||
["All files"] = "Alle Dateien", -- src\editor\commands.lua
|
||||
["Allow external process to start debugging"] = "Externem Prozeß erlauben, den Debugger zu starten", -- src\editor\menu_project.lua
|
||||
["Analyze the source code"] = "Quellcode analysieren", -- src\editor\inspect.lua
|
||||
["Analyze"] = "&Analyseroutine", -- src\editor\inspect.lua
|
||||
["Auto Complete Identifiers"] = "Auto-Vervollständigen von Bezeichnern", -- src\editor\menu_edit.lua
|
||||
["Auto complete while typing"] = "Auto-Vervollständigen beim Tippen", -- src\editor\menu_edit.lua
|
||||
["Break execution at the next executed line of code"] = "Programmausführung bei der nächsten ausgeführten Zeile stoppen", -- src\editor\menu_project.lua, src\editor\gui.lua
|
||||
["C&lear Output Window"] = "Ausgabefenster &löschen", -- src\editor\menu_project.lua
|
||||
["C&omment/Uncomment"] = "(Aus-)/&Kommentieren", -- src\editor\menu_edit.lua
|
||||
["Bookmark"] = "Lese&zeichen", -- src\editor\menu_edit.lua
|
||||
["Break execution at the next executed line of code"] = "Programmausführung bei der nächsten ausgeführten Zeile stoppen", -- src\editor\menu_project.lua
|
||||
["C&lear Output Window"] = "Ausgabefenster l&öschen", -- src\editor\gui.lua, src\editor\menu_project.lua
|
||||
["C&omment/Uncomment"] = "(Aus-)/K&ommentieren", -- src\editor\menu_edit.lua
|
||||
["Can't debug the script in the active editor window."] = "Script kann im aktiven Editorfenster nicht gedebuggt werden.", -- src\editor\debugger.lua
|
||||
["Can't evaluate the expression while the application is running."] = "Kann den Ausdruck nicht auswerten solange die Anwendung läuft.", -- src\editor\debugger.lua
|
||||
["Can't find file '%s' in the current project to activate for debugging. Update the project or open the file in the editor before debugging."] = "Kann Datei '%s' zwecks Debugging im aktuellen Projekt nicht finden. Bitte Projekt aktualisieren oder Datei in den Editor laden.", -- src\editor\debugger.lua
|
||||
["Can't open file '%s': %s"] = "Kann Datei '%s' nicht öffnen: %s", -- src\editor\singleinstance.lua
|
||||
["Can't process auto-recovery record; invalid format: %s."] = "Auto-Wiederherstellen nicht möglich; ungültiges Format: %s.", -- src\editor\commands.lua
|
||||
["Can't run the entry point script ('%s')."] = "Kann Script für Einsprungspunkt ('%s') nicht ausführen.", -- src\editor\debugger.lua
|
||||
["Can't start debugger server at %s:%d: %s."] = "Kann Debugserver nicht starten (%s:%d): %s.", -- src\editor\debugger.lua
|
||||
["Can't start debugging session due to internal error '%s'."] = "Debugging kann nicht gestartet werden wegen internem Fehler '%s'.", -- src\editor\debugger.lua
|
||||
["Can't start debugging without an opened file or with the current file not being saved ('%s')."] = "Debugging kann nicht gestartet werden ohne geöffnete Datei oder wenn die aktuelle Datei nicht gespeichert ist ('%s').", -- src\editor\debugger.lua
|
||||
["Can't start debugging without an opened file or with the current file not being saved ('%s')."] = "Debugging kann ohne geöffnete Datei nicht gestartet werden oder wenn die aktuelle Datei nicht gespeichert ist ('%s').", -- src\editor\debugger.lua
|
||||
["Can't stop debugger server as it is not started."] = "Kann Debugserver nicht stoppen wenn er vorher nicht gestartet wurde.", -- src\editor\debugger.lua
|
||||
["Cancel"] = "Abbrechen", -- src\editor\findreplace.lua
|
||||
["Choose ..."] = "Wählen...", -- src\editor\menu_project.lua
|
||||
["Choose a project directory"] = "Projektverzeichnis auswählen", -- src\editor\findreplace.lua, src\editor\menu_project.lua
|
||||
["Clear &Dynamic Words"] = "&Dynamic Words löschen", -- src\editor\menu_edit.lua
|
||||
["Cancelled by the user."] = "Durch Benutzer abgebrochen.", -- src\editor\findreplace.lua
|
||||
["Choose a project directory"] = "Projektverzeichnis auswählen", -- src\editor\findreplace.lua, src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Choose..."] = "Wählen...", -- src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Clear Items"] = "Liste &löschen", -- src\editor\menu_file.lua
|
||||
["Clear items from this list"] = "Diese Liste löschen", -- src\editor\menu_file.lua
|
||||
["Clear the output window before compiling or debugging"] = "Vor Kompilieren oder Debuggen das Ausgabefenster löschen", -- src\editor\menu_project.lua
|
||||
["Close &Other Pages"] = "A&ndere Seiten schließen", -- src\editor\gui.lua
|
||||
["Close A&ll Pages"] = "&Alle Seiten schließen", -- src\editor\gui.lua
|
||||
["Close the current editor window"] = "Aktuelles Editorfenster schließen", -- src\editor\menu_file.lua
|
||||
["Co&ntinue"] = "&Fortsetzen", -- src\editor\menu_project.lua
|
||||
["Col: %d"] = "Spalte: %d", -- src\editor\editor.lua
|
||||
["Command Line Parameters..."] = "Kommandozeilenparameter...", -- src\editor\menu_project.lua
|
||||
["Command line parameters"] = "Kommandozeilenparameter", -- src\editor\menu_project.lua
|
||||
["Comment or uncomment current or selected lines"] = "Ausgewählte bzw. aktive Zeile (un-)kommentieren", -- src\editor\menu_edit.lua
|
||||
["Compilation error"] = "Fehler beim Kompilieren", -- src\editor\debugger.lua, src\editor\commands.lua
|
||||
["Compilation error"] = "Fehler beim Kompilieren", -- src\editor\commands.lua, src\editor\debugger.lua
|
||||
["Compilation successful; %.0f%% success rate (%d/%d)."] = "Kompilieren erfolgreich; Erfolgsquote von %.0f%% (%d/%d).", -- src\editor\commands.lua
|
||||
["Compile the current file"] = "Aktuelle Datei kompilieren", -- src\editor\menu_project.lua
|
||||
["Complete &Identifier"] = "&Bezeichner vervollständigen", -- src\editor\menu_edit.lua
|
||||
["Complete the current identifier"] = " Aktuellen Bezeichner vervollständigen", -- src\editor\menu_edit.lua
|
||||
["Consider removing backslash from escape sequence '%s'."] = "Möglicherweise muß `\' aus '%s' entfernt werden.", -- src\editor\commands.lua
|
||||
["Copy Full Path"] = "Kopiere Pfadangabe", -- src\editor\gui.lua, src\editor\filetree.lua
|
||||
["Copy selected text to clipboard"] = "Text in Zwischenablage kopieren", -- src\editor\menu_edit.lua
|
||||
["Correct &Indentation"] = "E&inzug korrigieren", -- src\editor\menu_edit.lua
|
||||
["Couldn't activate file '%s' for debugging; continuing without it."] = "Konnte Datei '%s' zwecks nicht Debugging aktivieren; fahre ohne die Datei fort.", -- src\editor\debugger.lua
|
||||
["Create an empty document"] = "Leeres Dokument anlegen", -- src\editor\menu_file.lua, src\editor\gui.lua
|
||||
["Cu&t"] = "A&usschneiden", -- src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["Create an empty document"] = "Leeres Dokument anlegen", -- src\editor\menu_file.lua
|
||||
["Cu&t"] = "A&usschneiden", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["Cut selected text to clipboard"] = "Schneide ausgewählten Text in die Zwischenablage hinein", -- src\editor\menu_edit.lua
|
||||
["Debugger server started at %s:%d."] = "Debugserver gestartet an %s:%d.", -- src\editor\debugger.lua
|
||||
["Debugger server started at %s:%d."] = "Debugserver gestartet als %s:%d.", -- src\editor\debugger.lua
|
||||
["Debugger server stopped at %s:%d."] = "Debugserver gestoppt als %s:%d.", -- src\editor\debugger.lua
|
||||
["Debugging session completed (%s)."] = "Debugging Session beendet (%s).", -- src\editor\debugger.lua
|
||||
["Debugging session started in '%s'."] = "Debugging Session gestartet '%s'.", -- src\editor\debugger.lua
|
||||
["Debugging suspended at %s:%s (couldn't activate the file)."] = "Debugging angehalten bei %s:%s (konnte Datei nicht aktivieren).", -- src\editor\debugger.lua
|
||||
["Debugging suspended at '%s:%s' (couldn't activate the file)."] = "Debugging angehalten bei '%s:%s' (konnte Datei nicht aktivieren).", -- src\editor\debugger.lua
|
||||
["Detach &Process"] = "Prozeß abkoppeln", -- src\editor\menu_project.lua
|
||||
["Directory"] = "Verzeichnis", -- src\editor\findreplace.lua
|
||||
["Do you want to delete '%s'?"] = "Soll '%s' gelöscht werden?", -- src\editor\filetree.lua
|
||||
["Do you want to overwrite it?"] = "Überschreiben?", -- src\editor\commands.lua
|
||||
["Do you want to reload it?"] = "Neu laden?", -- src\editor\editor.lua
|
||||
["Do you want to save the changes to '%s'?"] = "Änderungen an '%s' speichern?", -- src\editor\commands.lua
|
||||
["E&xit"] = "&Beenden", -- src\editor\menu_file.lua
|
||||
["Enter Lua code and press Enter to run it."] = "Lua-Code eingeben und Enter drücken zum Ausführen.", -- src\editor\shellbox.lua
|
||||
["Enter line number"] = "Zeilennummer eingeben", -- src\editor\menu_search.lua
|
||||
["Enter command line parameters (use Cancel to clear)"] = "Kommandozeilenparameter eingeben (Cancel zum löschen)", -- src\editor\menu_project.lua
|
||||
["Enter replacement text"] = "Neuen Text eingeben", -- src\editor\editor.lua
|
||||
["Error while loading API file: %s"] = "Fehler beim Laden von API-Datei: %s", -- src\editor\autocomplete.lua
|
||||
["Error while loading configuration file: %s"] = "Fehler beim Laden von Konfigurationsdatei: %s", -- src\editor\style.lua
|
||||
["Error while processing API file: %s"] = "Fehler beim Lesen von API-Datei: %s", -- src\editor\autocomplete.lua
|
||||
@@ -99,21 +128,22 @@ return {
|
||||
["Execute the current project/file"] = "Aktuelles Projekt/ aktuelle Datei ausführen", -- src\editor\menu_project.lua
|
||||
["Execution error"] = "Fehler bei Ausführung", -- src\editor\debugger.lua
|
||||
["Exit program"] = "Programm beenden", -- src\editor\menu_file.lua
|
||||
["Expr"] = "Ausdr.", -- src\editor\debugger.lua
|
||||
["Expression"] = "Ausdruck", -- src\editor\debugger.lua
|
||||
["File '%s' has been modified on disk."] = "Datei '%s' wurde auf der Festplatte geändert.", -- src\editor\editor.lua
|
||||
["File '%s' has more recent timestamp than restored '%s'; please review before saving."] = "Datei '%s' hat neueren Zeitstempel als wiederhergestellte Datei '%s'; bitte vor dem Speichern kontrollieren.", -- src\editor\commands.lua
|
||||
["File '%s' no longer exists."] = "Datei '%s' existiert nicht mehr.", -- src\editor\editor.lua, src\editor\menu_file.lua
|
||||
["File '%s' is missing and can't be recovered."] = "Datei '%s' fehlt und kann nicht wiederhergestellt werden.", -- src\editor\commands.lua
|
||||
["File '%s' no longer exists."] = "Datei '%s' existiert nicht mehr.", -- src\editor\menu_file.lua, src\editor\editor.lua
|
||||
["File Type"] = "Dateityp", -- src\editor\findreplace.lua
|
||||
["File already exists."] = "Datei existiert bereits.", -- src\editor\commands.lua
|
||||
["File history"] = "Dateiverlauf", -- src\editor\menu_file.lua
|
||||
["Find &In Files"] = "Finde &in Dateien", -- src\editor\menu_search.lua
|
||||
["Find &Next"] = "Finde &Nächste", -- src\editor\menu_search.lua
|
||||
["Find &Previous"] = "Finde &Vorherige", -- src\editor\menu_search.lua
|
||||
["Find In Files"] = "Finde in Dateien", -- src\editor\findreplace.lua
|
||||
["Find and insert library function"] = "Suchen und Einfügen von Funktion aus Bibliothek", -- src\editor\menu_search.lua
|
||||
["Find and replace text in files"] = "Finde und ersetze Text in Dateien", -- src\editor\menu_search.lua
|
||||
["Find and replace text"] = "Finde und ersetze Text", -- src\editor\menu_search.lua, src\editor\gui.lua
|
||||
["Find and replace text"] = "Finde und ersetze Text", -- src\editor\menu_search.lua
|
||||
["Find text in files"] = "Finde Text in Dateien", -- src\editor\menu_search.lua
|
||||
["Find text"] = "Finde Text", -- src\editor\menu_search.lua, src\editor\gui.lua
|
||||
["Find text"] = "Finde Text", -- src\editor\menu_search.lua
|
||||
["Find the earlier text occurence"] = "Finde vorheriges Auftreten des Textes", -- src\editor\menu_search.lua
|
||||
["Find the next text occurrence"] = "Finde nächstes Auftreten des Textes", -- src\editor\menu_search.lua
|
||||
["Find"] = "Finden", -- src\editor\findreplace.lua
|
||||
@@ -122,27 +152,42 @@ return {
|
||||
["Found"] = "Gefunden", -- src\editor\findreplace.lua
|
||||
["Full &Screen"] = "&Vollbild", -- src\editor\menu_view.lua
|
||||
["Go To Definition"] = "Gehe zu Definition", -- src\editor\editor.lua
|
||||
["Go to a selected line"] = "Gehe zu ausgewählter Zeile", -- src\editor\menu_search.lua
|
||||
["Goto Line"] = "Gehe zu Zeile", -- src\editor\menu_search.lua
|
||||
["Go To File..."] = "Gehe zu Datei...", -- src\editor\menu_search.lua
|
||||
["Go To Line..."] = "Gehe zu Zeile...", -- src\editor\menu_search.lua
|
||||
["Go To Next Bookmark"] = "Zu nächstem Lesezeichen", -- src\editor\menu_edit.lua
|
||||
["Go To Previous Bookmark"] = "Zu vorherigem Lesezeichen", -- src\editor\menu_edit.lua
|
||||
["Go To Symbol..."] = "Gehe zu Symbol...", -- src\editor\menu_search.lua
|
||||
["Go to file"] = "Gehe zu Datei", -- src\editor\menu_search.lua
|
||||
["Go to line"] = "Gehe zu Zeile", -- src\editor\menu_search.lua
|
||||
["Go to symbol"] = "Gehe zu Symbol", -- src\editor\menu_search.lua
|
||||
["Hide '.%s' Files"] = "Verstecke '.%s' Dateien", -- src\editor\filetree.lua
|
||||
["INS"] = "INS", -- src\editor\editor.lua
|
||||
["Ignored error in debugger initialization code: %s."] = "Ignorierter Fehler im Debugger-Init-Code: %s.", -- src\editor\debugger.lua
|
||||
["In Files"] = "In Dateien", -- src\editor\findreplace.lua
|
||||
["Jump to a function definition..."] = "Springe zu Funktions-Definition...", -- src\editor\editor.lua
|
||||
["Insert Library Function..."] = "Füge Funktion aus Bibliothek ein", -- src\editor\menu_search.lua
|
||||
["Known Files"] = "Bekannte Dateien", -- src\editor\commands.lua
|
||||
["Ln: %d"] = "Zeile: %d", -- src\editor\editor.lua
|
||||
["Local console"] = "Lokale Konsole", -- src\editor\shellbox.lua, src\editor\gui.lua
|
||||
["Local console"] = "Lokale Konsole", -- src\editor\gui.lua, src\editor\shellbox.lua
|
||||
["Lua &Interpreter"] = "&Lua Interpreter", -- src\editor\menu_project.lua
|
||||
["Mapped remote request for '%s' to '%s'."] = "Mapped remote request for '%s' to '%s'.", -- src\editor\debugger.lua
|
||||
["Match &case"] = "&Groß-/Kleinschreibung", -- src\editor\findreplace.lua
|
||||
["Match &whole word"] = "Ganzes &Wort", -- src\editor\findreplace.lua
|
||||
["Mixed end-of-line encodings detected."] = "Gemischte End-of-Line Kodierung entdeckt.", -- src\editor\commands.lua
|
||||
["Navigate"] = "Navigieren", -- src\editor\menu_search.lua
|
||||
["New &File"] = "Neue &Datei", -- src\editor\filetree.lua
|
||||
["OVR"] = "OVR", -- src\editor\editor.lua
|
||||
["Open an existing document"] = "Öffne existierendes Dokument", -- src\editor\menu_file.lua, src\editor\gui.lua
|
||||
["Open With Default Program"] = "Mit Standardanwendung öffnen", -- src\editor\filetree.lua
|
||||
["Open an existing document"] = "Öffne existierendes Dokument", -- src\editor\menu_file.lua
|
||||
["Open file"] = "Öffne Datei", -- src\editor\commands.lua
|
||||
["Options"] = "Optionen", -- src\editor\findreplace.lua
|
||||
["Output (running)"] = "Ausgabe (ausgeführt)", -- src\editor\output.lua
|
||||
["Output"] = "Ausgabe", -- src\editor\output.lua, src\editor\settings.lua, src\editor\gui.lua
|
||||
["Outline Window"] = "Übersichtsfenster", -- src\editor\menu_view.lua
|
||||
["Outline"] = "Übersicht", -- src\editor\outline.lua
|
||||
["Output (running)"] = "Ausgabe (ausgeführt)", -- src\editor\debugger.lua, src\editor\output.lua
|
||||
["Output (suspended)"] = "Ausgabe (angehalten)", -- src\editor\debugger.lua
|
||||
["Output"] = "Ausgabe", -- src\editor\debugger.lua, src\editor\output.lua, src\editor\gui.lua, src\editor\settings.lua
|
||||
["Paste text from the clipboard"] = "Text aus Zwischenablage einfügen", -- src\editor\menu_edit.lua
|
||||
["Preferences"] = "Einstellungen", -- src\editor\menu_edit.lua
|
||||
["Prepend '!' to force local execution."] = "'!' voranstellen um lokale Ausführung zu erzwingen.", -- src\editor\shellbox.lua
|
||||
["Prepend '=' to show complex values on multiple lines."] = "'=' voranstellen, um komplexe Ausdrücke auf mehrere Zeilen zu verteilen.", -- src\editor\shellbox.lua
|
||||
["Press cancel to abort."] = "Abbrechen Drücken zum Beenden.", -- src\editor\commands.lua
|
||||
["Program '%s' started in '%s' (pid: %d)."] = "Programm '%s' gestartet in '%s' (pid : %d).", -- src\editor\output.lua
|
||||
@@ -151,70 +196,94 @@ return {
|
||||
["Program starting as '%s'."] = "Programm gestartet als '%s'.", -- src\editor\output.lua
|
||||
["Program stopped (pid: %d)."] = "Programm gestoppt (pid: %d).", -- src\editor\debugger.lua
|
||||
["Program unable to run as '%s'."] = "Programm kann nicht als '%s' laufen.", -- src\editor\output.lua
|
||||
["Project Directory"] = "&Projektverzeichnis", -- src\editor\menu_project.lua
|
||||
["Project"] = "Projekt", -- src\editor\settings.lua, src\editor\gui.lua
|
||||
["Project Directory"] = "&Projektverzeichnis", -- src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Project history"] = "Liste bisheriger Projekte", -- src\editor\menu_file.lua
|
||||
["Project"] = "Projekt", -- src\editor\filetree.lua
|
||||
["Project/&FileTree Window"] = "&Projekt/Datei Fenster", -- src\editor\menu_view.lua
|
||||
["Provide command line parameters"] = "Kommandozeilenparameter angeben", -- src\editor\menu_project.lua
|
||||
["R/O"] = "R/O", -- src\editor\editor.lua
|
||||
["R/W"] = "R/W", -- src\editor\editor.lua
|
||||
["Re&place In Files"] = "Ersetze in &Dateien", -- src\editor\menu_search.lua
|
||||
["Re-indent selected lines"] = "Ausgewählte Zeilen neu einrücken", -- src\editor\menu_edit.lua
|
||||
["Recent &Projects"] = "Letzte &Projekte", -- src\editor\menu_file.lua
|
||||
["Recent Files"] = "Letzte Dateien", -- src\editor\menu_file.lua
|
||||
["Redo last edit undone"] = "Stelle letzte rückgängig gemachte Bearbeitung wieder her", -- src\editor\menu_edit.lua
|
||||
["Refused a request to start a new debugging session as there is one in progress already."] = "Starten einer neuen Debuggingsession abgelehnt, da bereits eine läuft.", -- src\editor\debugger.lua
|
||||
["Regular &expression"] = "&Regulärer Ausdruck", -- src\editor\findreplace.lua
|
||||
["Remote console"] = "Fensteuerungs-Konsole", -- src\editor\shellbox.lua
|
||||
["Rename All Instances"] = "Umbenennen aller Instanzen", -- src\editor\editor.lua
|
||||
["Replace &All"] = "&Alles ersetzen", -- src\editor\findreplace.lua
|
||||
["Replace A&ll"] = "A&lles ersetzen", -- src\editor\findreplace.lua
|
||||
["Replace All Selections"] = "Alle Auswahlen ersetzen", -- src\editor\editor.lua
|
||||
["Replace"] = "Ersetzen", -- src\editor\findreplace.lua
|
||||
["Replaced an invalid UTF8 character with %s."] = "Unbekanntes UTF8-Symbol ersetzt mit %s.", -- src\editor\commands.lua
|
||||
["Replaced"] = "Ersetzt:", -- src\editor\findreplace.lua
|
||||
["Replacing"] = "Am Ersetzen", -- src\editor\findreplace.lua
|
||||
["Reset to default layout"] = "Standard-Layout wiederherstellen", -- src\editor\menu_view.lua
|
||||
["Resets the dynamic word list for autocompletion"] = "Zurücksetzen der Liste der dynamischen Wörter für Autovervollständigung", -- src\editor\menu_edit.lua
|
||||
["Run As Scratchpad"] = "Als &Entwurf starten", -- src\editor\menu_project.lua
|
||||
["Run as Scratchpad"] = "Als &Entwurf starten", -- src\editor\menu_project.lua
|
||||
["S&top Debugging"] = "Debugging a&nhalten", -- src\editor\menu_project.lua
|
||||
["S&top Process"] = "Prozeß &anhalten", -- src\editor\menu_project.lua
|
||||
["Save &As..."] = "S&peichern als...", -- src\editor\menu_file.lua, src\editor\gui.lua
|
||||
["Save &As..."] = "S&peichern als...", -- src\editor\gui.lua, src\editor\menu_file.lua
|
||||
["Save A&ll"] = "&Alle Speichern", -- src\editor\menu_file.lua
|
||||
["Save Changes?"] = "Änderungen speichern?", -- src\editor\commands.lua
|
||||
["Save all open documents"] = "Alle offenen Dokumente speichern", -- src\editor\menu_file.lua, src\editor\gui.lua
|
||||
["Save all open documents"] = "Alle offenen Dokumente speichern", -- src\editor\menu_file.lua
|
||||
["Save file as"] = "Datei speichern als", -- src\editor\commands.lua
|
||||
["Save file?"] = "Datei speichern?", -- src\editor\commands.lua
|
||||
["Save the current document to a file with a new name"] = "Aktuelles Dokument unter neuem Namen speichern", -- src\editor\menu_file.lua
|
||||
["Save the current document"] = "Aktuelles Dokument speichern", -- src\editor\menu_file.lua, src\editor\gui.lua
|
||||
["Saved auto-recover at %s."] = "Autowiederherstellen gespeichert unter %s.", -- src\editor\commands.lua
|
||||
["Save the current document"] = "Aktuelles Dokument speichern", -- src\editor\menu_file.lua
|
||||
["Saved auto-recover at %s."] = "%s Autowiederherstellen gespeichert.", -- src\editor\commands.lua
|
||||
["Scope"] = "Richtung", -- src\editor\findreplace.lua
|
||||
["Scratchpad error"] = "Fehler im Entwurf", -- src\editor\debugger.lua
|
||||
["Searching for"] = "Suchen nach", -- src\editor\findreplace.lua
|
||||
["Select &All"] = "&Alles Auswählen", -- src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["Sel: %d/%d"] = "Ausgew.: %d/%d", -- src\editor\editor.lua
|
||||
["Select &All"] = "&Alles Auswählen", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["Select all text in the editor"] = "Kompletten Text im Editor auswählen", -- src\editor\menu_edit.lua
|
||||
["Select And Find Next"] = "Auswählen und nächstes finden", -- src\editor\menu_search.lua
|
||||
["Select And Find Previous"] = "Auswählen und vorheriges finden", -- src\editor\menu_search.lua
|
||||
["Select the word under cursor and find its next occurrence"] = "Wort unter dem Cursor auswählen und nächstes Auftauchen finden", -- src\editor\menu_search.lua
|
||||
["Select the word under cursor and find its previous occurrence"] = "Wort unter dem Cursor auswählen und vorheriges Auftauchen finden", -- src\editor\menu_search.lua
|
||||
["Set From Current File"] = "Anhand der aktuellen Datei festlegen", -- src\editor\menu_project.lua
|
||||
["Set project directory from current file"] = "Lege Projektverzeichnis anhand der aktuellen Datei fest", -- src\editor\menu_project.lua, src\editor\gui.lua
|
||||
["Set project directory from current file"] = "Lege Projektverzeichnis anhand der aktuellen Datei fest", -- src\editor\menu_project.lua
|
||||
["Set the interpreter to be used"] = "Wähle zu benutzenden Interpreter aus", -- src\editor\menu_project.lua
|
||||
["Set the project directory to be used"] = "Lege zu benutzendes Projektverzeichnis fest", -- src\editor\menu_project.lua
|
||||
["Set the project directory to be used"] = "Lege zu benutzendes Projektverzeichnis fest", -- src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Settings: System"] = "Einstellungen: System", -- src\editor\menu_edit.lua
|
||||
["Settings: User"] = "Einstellungen: Nutzer", -- src\editor\menu_edit.lua
|
||||
["Show &Tooltip"] = "&Tooltip zeigen", -- src\editor\menu_edit.lua
|
||||
["Show All Files"] = "Zeige alle Dateien", -- src\editor\filetree.lua
|
||||
["Show Hidden Files"] = "Zeige versteckte Dateien", -- src\editor\filetree.lua
|
||||
["Show Location"] = "Ordner öffnen", -- src\editor\gui.lua, src\editor\filetree.lua
|
||||
["Show all files"] = "Zeige alle Dateien", -- src\editor\filetree.lua
|
||||
["Show files previously hidden"] = "Zeige Dateien die zuvor versteckt wurden", -- src\editor\filetree.lua
|
||||
["Show tooltip for current position; place cursor after opening bracket of function"] = "Zeige Tooltip für aktuelle Position; setze Cursor hinter die öffnende Klammer der Funktion", -- src\editor\menu_edit.lua
|
||||
["Sort selected lines"] = "Ausgewählte Zeilen sortieren", -- src\editor\menu_search.lua
|
||||
["Show/Hide the status bar"] = "Statuszeile zeigen/verstecken", -- src\editor\menu_view.lua
|
||||
["Show/Hide the toolbar"] = "Werkzeugleiste zeigen/verstecken", -- src\editor\menu_view.lua
|
||||
["Sort selected lines"] = "Ausgewählte Zeilen sortieren", -- src\editor\menu_edit.lua
|
||||
["Source"] = "Source", -- src\editor\menu_edit.lua
|
||||
["Stack"] = "Stack", -- src\editor\debugger.lua
|
||||
["Start &Debugging"] = "&Debugging starten", -- src\editor\menu_project.lua
|
||||
["Start debugging"] = "Debugging starten", -- src\editor\menu_project.lua, src\editor\gui.lua
|
||||
["Start or continue debugging"] = "Debuggen starten/fortsetzen", -- src\editor\menu_project.lua
|
||||
["Step &Into"] = "Schritt h&inein", -- src\editor\menu_project.lua
|
||||
["Step &Over"] = "&Überspringen", -- src\editor\menu_project.lua
|
||||
["Step O&ut"] = "Schritt &raus", -- src\editor\menu_project.lua
|
||||
["Step into"] = "Schritt hinein", -- src\editor\menu_project.lua, src\editor\gui.lua
|
||||
["Step out of the current function"] = "Schritt aus der aktuellen Funktion heraus", -- src\editor\menu_project.lua, src\editor\gui.lua
|
||||
["Step over"] = "Überspringen", -- src\editor\menu_project.lua, src\editor\gui.lua
|
||||
["Stop the currently running process"] = "Aktuell laufenden Prozeß stoppen", -- src\editor\menu_project.lua, src\editor\gui.lua
|
||||
["Step into"] = "Schritt hinein", -- src\editor\menu_project.lua
|
||||
["Step out of the current function"] = "Schritt aus der aktuellen Funktion heraus", -- src\editor\menu_project.lua
|
||||
["Step over"] = "Überspringen", -- src\editor\menu_project.lua
|
||||
["Stop debugging and continue running the process"] = "Beende debuggen und setze den Prozeß fort", -- src\editor\menu_project.lua
|
||||
["Stop the currently running process"] = "Aktuell laufenden Prozeß stoppen", -- src\editor\menu_project.lua
|
||||
["Switch to or from full screen mode"] = "Vollbild an/aus", -- src\editor\menu_view.lua
|
||||
["Text not found."] = "Text nicht gefunden.", -- src\editor\findreplace.lua
|
||||
["The API file must be located in a subdirectory of the API directory."] = "Die API-Datei muß sich in einem Unterverzeichnis des API-Vereichnisses befinden.", -- src\editor\autocomplete.lua
|
||||
["Toggle Bookmark"] = "Lesezeichen setzen/löschen", -- src\editor\menu_edit.lua
|
||||
["Toggle Break&point"] = "&Haltepunkt an/aus", -- src\editor\menu_project.lua
|
||||
["Toggle breakpoint"] = "Haltepunkt an/aus", -- src\editor\menu_project.lua, src\editor\gui.lua
|
||||
["Toggle bookmark"] = "Lesezeichen setzen/löschen", -- src\editor\menu_edit.lua
|
||||
["Toggle breakpoint"] = "Haltepunkt an/aus", -- src\editor\menu_project.lua
|
||||
["Tr&ace"] = "Ablauf &verfolgen", -- src\editor\menu_project.lua
|
||||
["Trace execution showing each executed line"] = "Ablaufverfolgung zeigt jede ausgeführte Zeile an", -- src\editor\menu_project.lua
|
||||
["Unable to create directory '%s'."] = "Kann kein Verzeichnis '%s' erstellen.", -- src\editor\filetree.lua
|
||||
["Unable to create file '%s'."] = "Kann Datei '%s' nicht erstellen.", -- src\editor\filetree.lua
|
||||
["Unable to delete directory '%s': %s"] = "Scheitern beim Löschen von Verzeichnis '%s': %s", -- src\editor\filetree.lua
|
||||
["Unable to load file '%s'."] = "Scheitern beim Laden von Datei '%s'.", -- src\editor\commands.lua
|
||||
["Unable to rename file '%s'."] = "Scheitern beim umbenennen von Datei '%s'.", -- src\editor\filetree.lua
|
||||
["Unable to save file '%s': %s"] = "Scheitern beim Speichern von Datei '%s' : %s", -- src\editor\commands.lua
|
||||
["Unable to stop program (pid: %d), code %d."] = "Scheitern beim Stoppen des Prozesses (pid : %d), code %d.", -- src\editor\debugger.lua
|
||||
["Undo last edit"] = "Letzte Änderung rückgängig machen", -- src\editor\menu_edit.lua
|
||||
@@ -222,15 +291,20 @@ return {
|
||||
["Use '%s' to show line endings and '%s' to convert them."] = "'%s' um Zeilenende-Codes zu sehen, und '%s' um sie zu konvertieren.", -- src\editor\commands.lua
|
||||
["Use 'clear' to clear the shell output and the history."] = "'clear' um Ausgabefenster und Verlauf zu löschen.", -- src\editor\shellbox.lua
|
||||
["Use Shift-Enter for multiline code."] = "<Umsch-Eingabetaste> für Code in mehreren Zeilen.", -- src\editor\shellbox.lua
|
||||
["Value"] = "Wert", -- src\editor\debugger.lua
|
||||
["View the outline window"] = "Übersichtsfenster ansehen", -- src\editor\menu_view.lua
|
||||
["View the output/console window"] = "Ausgabe-/Konsolenfenster ansehen", -- src\editor\menu_view.lua
|
||||
["View the project/filetree window"] = "Projekt-/Dateifenster ansehen", -- src\editor\menu_view.lua
|
||||
["View the stack window"] = "Stapel/Stack-Fenster ansehen", -- src\editor\menu_view.lua, src\editor\gui.lua
|
||||
["View the watch window"] = "Fenster für Beobachtungspunkte ansehen", -- src\editor\menu_view.lua, src\editor\gui.lua
|
||||
["View the stack window"] = "Stapel/Stack-Fenster ansehen", -- src\editor\menu_view.lua
|
||||
["View the watch window"] = "Fenster für Beobachtungspunkte ansehen", -- src\editor\menu_view.lua
|
||||
["Watch"] = "Beobachtungspunkte", -- src\editor\debugger.lua
|
||||
["Welcome to the interactive Lua interpreter."] = "Willkommen zum interaktiven Lua-Interpretr!", -- src\editor\shellbox.lua
|
||||
["Wrap ar&ound"] = "Am Anfang fortsetzen", -- src\editor\findreplace.lua
|
||||
["You must save the program first."] = "Erst das Programm speichern.", -- src\editor\commands.lua
|
||||
["on line %d"] = "in Zeile %d", -- src\editor\debugger.lua, src\editor\commands.lua, src\editor\editor.lua
|
||||
["traced %d instruction"] = {"%d Anweisung verfolgt", "%d Anweisungen verfolgt"} -- src\editor\debugger.lua
|
||||
["Zoom In"] = "Hineinzoomen", -- src\editor\menu_view.lua
|
||||
["Zoom Out"] = "Herauszoomen", -- src\editor\menu_view.lua
|
||||
["Zoom to 100%"] = "Zoom zurücksetzen (100%)", -- src\editor\menu_view.lua
|
||||
["Zoom"] = "Zoom", -- src\editor\menu_view.lua
|
||||
["on line %d"] = "in Zeile %d", -- src\editor\debugger.lua, src\editor\editor.lua, src\editor\commands.lua
|
||||
["traced %d instruction"] = {"%d Anweisung verfolgt", "%d Anweisungen verfolgt"}, -- src\editor\debugger.lua
|
||||
["unknown error"] = "Unbekannter Fehler", -- src\editor\debugger.lua
|
||||
}
|
||||
|
||||
311
cfg/i18n/eo.lua
Normal file
311
cfg/i18n/eo.lua
Normal file
@@ -0,0 +1,311 @@
|
||||
-- Traduko fare de cosmotect
|
||||
return {
|
||||
[0] = function(c) return c == 1 and 1 or 2 end, -- plural
|
||||
["%d instance"] = {"%d aperaĵo", "%d aperaĵoj"}, -- src\editor\findreplace.lua
|
||||
["%s event failed: %s"] = "%s evento malplenumiĝas: %s", -- src\editor\package.lua
|
||||
["&About"] = "&Pri", -- src\editor\menu_help.lua
|
||||
["&Add Watch"] = "&Aldoni observadaĵon", -- src\editor\debugger.lua
|
||||
["&Break"] = "&Haltigi", -- src\editor\menu_project.lua
|
||||
["&Close Page"] = "&Fermi paĝon", -- src\editor\gui.lua, src\editor\menu_file.lua
|
||||
["&Community"] = "&Komunumo", -- src\editor\menu_help.lua
|
||||
["&Compile"] = "&Kompili", -- src\editor\menu_project.lua
|
||||
["&Copy"] = "&Kopii", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Default Layout"] = "&Defaŭlta aranĝo", -- src\editor\menu_view.lua
|
||||
["&Delete Watch"] = "&Forigi observadaĵon", -- src\editor\debugger.lua
|
||||
["&Delete"] = "&Forigi", -- src\editor\filetree.lua
|
||||
["&Documentation"] = "&Dokumentado", -- src\editor\menu_help.lua
|
||||
["&Down"] = "&Malsupren", -- src\editor\findreplace.lua
|
||||
["&Edit Project Directory"] = "&Redakti projektan dosierujon", -- src\editor\filetree.lua
|
||||
["&Edit Value"] = "&Redakti valoron", -- src\editor\debugger.lua
|
||||
["&Edit Watch"] = "&Redakti observadaĵon", -- src\editor\debugger.lua
|
||||
["&Edit"] = "&Redakti", -- src\editor\menu_edit.lua
|
||||
["&File"] = "&Dosiero", -- src\editor\menu_file.lua
|
||||
["&Find All"] = "Tra&serĉi ĉion", -- src\editor\findreplace.lua
|
||||
["&Find Next"] = "&Pluserĉi", -- src\editor\findreplace.lua
|
||||
["&Find"] = "Tra&serĉi", -- src\editor\menu_search.lua
|
||||
["&Fold/Unfold All"] = "&Kaŝi/Malkaŝi ĉion", -- src\editor\menu_edit.lua
|
||||
["&Frequently Asked Questions"] = "&Oftaj demandoj", -- src\editor\menu_help.lua
|
||||
["&Getting Started Guide"] = "&Ekgvidilo", -- src\editor\menu_help.lua
|
||||
["&Help"] = "&Helpo", -- src\editor\menu_help.lua
|
||||
["&New Directory"] = "&Nova dosierujo", -- src\editor\filetree.lua
|
||||
["&New"] = "&Nova paĝo", -- src\editor\menu_file.lua
|
||||
["&Open..."] = "&Malfermi...", -- src\editor\menu_file.lua
|
||||
["&Output/Console Window"] = "&Eliga/Konzola fenestro", -- src\editor\menu_view.lua
|
||||
["&Paste"] = "&Alglui", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Project Page"] = "&Projektpaĝo", -- src\editor\menu_help.lua
|
||||
["&Project"] = "&Projekto", -- src\editor\menu_project.lua
|
||||
["&Redo"] = "&Refari", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Rename"] = "&Renomigi", -- src\editor\filetree.lua
|
||||
["&Replace All"] = "&Anstataŭi ĉion", -- src\editor\findreplace.lua
|
||||
["&Replace"] = "&Anstataŭi", -- src\editor\findreplace.lua, src\editor\menu_search.lua
|
||||
["&Run"] = "&Plenumi", -- src\editor\menu_project.lua
|
||||
["&Save"] = "&Konservi", -- src\editor\gui.lua, src\editor\menu_file.lua
|
||||
["&Search"] = "&Serĉi", -- src\editor\menu_search.lua
|
||||
["&Sort"] = "&Ordi", -- src\editor\menu_edit.lua
|
||||
["&Stack Window"] = "&Staka fenestro", -- src\editor\menu_view.lua
|
||||
["&Start Debugger Server"] = "&Ekfunkciigi sencimigilo-servilon", -- src\editor\menu_project.lua
|
||||
["&Status Bar"] = "&Stata breto", -- src\editor\menu_view.lua
|
||||
["&Subdirectories"] = "&Subdosierujoj", -- src\editor\findreplace.lua
|
||||
["&Tool Bar"] = "&Ilobreto", -- src\editor\menu_view.lua
|
||||
["&Tutorials"] = "&Lerniloj", -- src\editor\menu_help.lua
|
||||
["&Undo"] = "&Malfari", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Up"] = "&Supren", -- src\editor\findreplace.lua
|
||||
["&View"] = "&Vidi", -- src\editor\menu_view.lua
|
||||
["&Watch Window"] = "&Observada fenestro", -- src\editor\menu_view.lua
|
||||
[".&bak on Replace"] = ".&bak post anstataŭigo", -- src\editor\findreplace.lua
|
||||
["About %s"] = "Pri %s", -- src\editor\menu_help.lua
|
||||
["Add To Scratchpad"] = "Aldoni al malnetdosiero", -- src\editor\editor.lua
|
||||
["Add Watch Expression"] = "Aldoni observadaĵan esprimon", -- src\editor\editor.lua
|
||||
["All files"] = "Ĉiuj dosieroj", -- src\editor\commands.lua
|
||||
["Allow external process to start debugging"] = "Lasi eksteran procezon ek-sencimigi", -- src\editor\menu_project.lua
|
||||
["Analyze the source code"] = "Analizi fontkodon", -- src\editor\inspect.lua
|
||||
["Analyze"] = "Analizi", -- src\editor\inspect.lua
|
||||
["Auto Complete Identifiers"] = "Aŭtomate kompletigi fontkodnomojn", -- src\editor\menu_edit.lua
|
||||
["Auto complete while typing"] = "Aŭtomate kompletigi dumtajpe", -- src\editor\menu_edit.lua
|
||||
["Bookmark"] = "Legosigno", -- src\editor\menu_edit.lua
|
||||
["Break execution at the next executed line of code"] = "Haltigi plenumon ĉe la sekva plenumata linio da fontkodo", -- src\editor\menu_project.lua
|
||||
["C&lear Output Window"] = "Viŝi eligan fenestron", -- src\editor\gui.lua, src\editor\menu_project.lua
|
||||
["C&omment/Uncomment"] = "F&orkomenti/Eksforkomenti", -- src\editor\menu_edit.lua
|
||||
["Can't debug the script in the active editor window."] = "Ne povas sencimigi la skripton en la aktiva redaktila fenestro.", -- src\editor\debugger.lua
|
||||
["Can't evaluate the expression while the application is running."] = "Ne povas malkodi la esprimon dum funkciatas la aplikaĵo.", -- src\editor\debugger.lua
|
||||
["Can't find file '%s' in the current project to activate for debugging. Update the project or open the file in the editor before debugging."] = "Ne povas trovi la dosieron '%s' en la kuranta projekto por aktivi por sencimigo. Ĝisdatigu la projekton aŭ malfermu la dosieron en redaktilo antaŭ sencimigo.", -- src\editor\debugger.lua
|
||||
["Can't open file '%s': %s"] = "Ne povas malfermi la dosieron '%s': %s", -- src\editor\singleinstance.lua
|
||||
["Can't process auto-recovery record; invalid format: %s."] = "Ne povas analizi aŭtomatrestaŭran dosieron; neprava dosierformo: %s.", -- src\editor\commands.lua
|
||||
["Can't run the entry point script ('%s')."] = "Ne povas plenumi la enirejan skripton", -- src\editor\debugger.lua
|
||||
["Can't start debugger server at %s:%d: %s."] = "Ne povas ekfunkciigi sencimigilo-servilon ĉe %s:%d: %s.", -- src\editor\debugger.lua
|
||||
["Can't start debugging session due to internal error '%s'."] = "Ne povas komenci sencimigan seancon pro interna eraro", -- src\editor\debugger.lua
|
||||
["Can't start debugging without an opened file or with the current file not being saved ('%s')."] = "Ne povas ek-sencimigon sen malfermita dosiero aŭ kun la kuranta dosiero nekonserviĝas ('%s').", -- src\editor\debugger.lua
|
||||
["Can't stop debugger server as it is not started."] = "Ne povas malfunkciigi sencimigilo-servilon, ĉar ĝi ne funkciantas", -- src\editor\debugger.lua
|
||||
["Cancel"] = "Nuligi", -- src\editor\findreplace.lua
|
||||
["Cancelled by the user."] = "Nuligita per la uzanto", -- src\editor\findreplace.lua
|
||||
["Choose a project directory"] = "Elekti projektan dosierujon", -- src\editor\findreplace.lua, src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Choose..."] = "Elekti...", -- src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Clear Items"] = "Viŝi anojn", -- src\editor\menu_file.lua
|
||||
["Clear items from this list"] = "Senlistigi tiujn ĉi anojn", -- src\editor\menu_file.lua
|
||||
["Clear the output window before compiling or debugging"] = "Viŝi la eligan fenestron antaŭ kompilado aŭ sencimigado", -- src\editor\menu_project.lua
|
||||
["Close &Other Pages"] = "Fermi &aliajn paĝojn", -- src\editor\gui.lua
|
||||
["Close A&ll Pages"] = "Fermi ĉiujn paĝojn", -- src\editor\gui.lua
|
||||
["Close the current editor window"] = "Fermi la kurantan redaktilan fenestron", -- src\editor\menu_file.lua
|
||||
["Co&ntinue"] = "Daŭrigi", -- src\editor\menu_project.lua
|
||||
["Col: %d"] = "Kol: %d", -- src\editor\editor.lua
|
||||
["Command Line Parameters..."] = "Komandliniaj parametroj", -- src\editor\menu_project.lua
|
||||
["Command line parameters"] = "Komandliniaj parametroj", -- src\editor\menu_project.lua
|
||||
["Comment or uncomment current or selected lines"] = "Forkomenti aŭ eksforkomenti la kurantan aŭ la elektitajn liniojn", -- src\editor\menu_edit.lua
|
||||
["Compilation error"] = "Eraro de kompilo", -- src\editor\commands.lua, src\editor\debugger.lua
|
||||
["Compilation successful; %.0f%% success rate (%d/%d)."] = "Kompilo sukcesa; %.0f%% elcentaĵo da sukceso (%d/%d).", -- src\editor\commands.lua
|
||||
["Compile the current file"] = "Kompili la kurantan dosieron", -- src\editor\menu_project.lua
|
||||
["Complete &Identifier"] = "Finfari &fontkodnomon", -- src\editor\menu_edit.lua
|
||||
["Complete the current identifier"] = "Finfari la kurantan fontkodnomon", -- src\editor\menu_edit.lua
|
||||
["Consider removing backslash from escape sequence '%s'."] = "Kontemplu forigi maloblikvon el eskapsekvenco '%s'.", -- src\editor\commands.lua
|
||||
["Copy Full Path"] = "Kopii plenan vojon", -- src\editor\gui.lua, src\editor\filetree.lua
|
||||
["Copy selected text to clipboard"] = "Kopii elektitan tekston al la tondejo", -- src\editor\menu_edit.lua
|
||||
["Correct &Indentation"] = "Korekti &alineon", -- src\editor\menu_edit.lua
|
||||
["Couldn't activate file '%s' for debugging; continuing without it."] = "Ne povis aktivi la dosieron '%s' por sencimigi; daŭrantas sen ĝi.", -- src\editor\debugger.lua
|
||||
["Create an empty document"] = "Krei malplenan dokumenton", -- src\editor\menu_file.lua
|
||||
["Cu&t"] = "El&tondi", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["Cut selected text to clipboard"] = "Eltondi la elektitan tekston al la tondejo", -- src\editor\menu_edit.lua
|
||||
["Debugger server started at %s:%d."] = "Sencimigilo-servilon ekfunkciiĝis ĉe %s:%d.", -- src\editor\debugger.lua
|
||||
["Debugger server stopped at %s:%d."] = "Sencimigilo-servilon malfunkciiĝis ĉe %s:%d.", -- src\editor\debugger.lua
|
||||
["Debugging session completed (%s)."] = "Sencimiga seanco estas finita (%s).", -- src\editor\debugger.lua
|
||||
["Debugging session started in '%s'."] = "Sencimiga seanco komencitas en '%s'.", -- src\editor\debugger.lua
|
||||
["Debugging suspended at '%s:%s' (couldn't activate the file)."] = "La sencimigo estis finetita ĉe '%s:%s' (ne povis aktivi la dosieron).", -- src\editor\debugger.lua
|
||||
["Detach &Process"] = "Deigi &procezon", -- src\editor\menu_project.lua
|
||||
["Directory"] = "Dosierujo", -- src\editor\findreplace.lua
|
||||
["Do you want to delete '%s'?"] = "Ĉu vi volas forigi je '%s'?", -- src\editor\filetree.lua
|
||||
["Do you want to overwrite it?"] = "Ĉu vi volas superskribi ĉi tiun?", -- src\editor\commands.lua
|
||||
["Do you want to reload it?"] = "Ĉu vi volas reŝarĝi tiun ĉi?", -- src\editor\editor.lua
|
||||
["Do you want to save the changes to '%s'?"] = "Ĉu vi volas konservi ĉiujn ŝanĝojn, kiuj enfaris je '%s'?", -- src\editor\commands.lua
|
||||
["E&xit"] = "&Eliri", -- src\editor\menu_file.lua
|
||||
["Enter Lua code and press Enter to run it."] = "Enigu fontkodon de Lua kaj premu enenklavon por plenumi ĝin.", -- src\editor\shellbox.lua
|
||||
["Enter command line parameters (use Cancel to clear)"] = "Enigu komandliniajn parametrojn (uzu nulig-butonon por viŝi)", -- src\editor\menu_project.lua
|
||||
["Enter replacement text"] = "Enigu anstataŭigan tekston", -- src\editor\editor.lua
|
||||
["Error while loading API file: %s"] = "Eraro okazis dum ŝargado de API-a dosiero: %s", -- src\editor\autocomplete.lua
|
||||
["Error while loading configuration file: %s"] = "Eraro okazis dum ŝargado de agorda dosiero: %s", -- src\editor\style.lua
|
||||
["Error while processing API file: %s"] = "Eraro okazis dum analizado de API-a dosiero: %s", -- src\editor\autocomplete.lua
|
||||
["Error while processing configuration file: %s"] = "Eraro okazis dum analizado de agorda dosiero: %s", -- src\editor\style.lua
|
||||
["Error"] = "Eraro", -- src\editor\commands.lua
|
||||
["Evaluate In Console"] = "Malkodi en la konzolo", -- src\editor\editor.lua
|
||||
["Execute the current project/file and keep updating the code to see immediate results"] = "Plenumi la kurantan projekton/dosieron, kaj ĝisdatigadi la fontkodon por vidi tujajn rezultojn", -- src\editor\menu_project.lua
|
||||
["Execute the current project/file"] = "Plenumi la kurantan projekton/dosieron", -- src\editor\menu_project.lua
|
||||
["Execution error"] = "Eraro de plenumo", -- src\editor\debugger.lua
|
||||
["Exit program"] = "Eliri programon", -- src\editor\menu_file.lua
|
||||
["File '%s' has been modified on disk."] = "La dosiero nome de '%s' ŝanĝitis en disko.", -- src\editor\editor.lua
|
||||
["File '%s' has more recent timestamp than restored '%s'; please review before saving."] = "La dosiero nome de '%s' havas pli freŝan tempindikon, ol la ripardosiero '%s'; bonvolu ekzameni ĝin antaû konservi.", -- src\editor\commands.lua
|
||||
["File '%s' is missing and can't be recovered."] = "La dosiero nome de '%s' forestas kaj ne povas esti reakirita.", -- src\editor\commands.lua
|
||||
["File '%s' no longer exists."] = "La dosiero nome de '%s' ne plu ekzistas.", -- src\editor\menu_file.lua, src\editor\editor.lua
|
||||
["File Type"] = "Dosierspeco", -- src\editor\findreplace.lua
|
||||
["File already exists."] = "Jam ekzistas tiu ĉi dosiero.", -- src\editor\commands.lua
|
||||
["File history"] = "Dosiera historio", -- src\editor\menu_file.lua
|
||||
["Find &In Files"] = "Traserĉi &en dosieroj", -- src\editor\menu_search.lua
|
||||
["Find &Next"] = "&Pluserĉi", -- src\editor\menu_search.lua
|
||||
["Find &Previous"] = "Traserĉi &antaŭanta", -- src\editor\menu_search.lua
|
||||
["Find In Files"] = "Traserĉi en dosieroj", -- src\editor\findreplace.lua
|
||||
["Find and insert library function"] = nil, -- src\editor\menu_search.lua
|
||||
["Find and replace text in files"] = "Traserĉi kaj anstataŭi tekston en dosieroj", -- src\editor\menu_search.lua
|
||||
["Find and replace text"] = "Traserĉi kaj anstataŭi tekston", -- src\editor\menu_search.lua
|
||||
["Find text in files"] = "Traserĉi tekston en dosieroj", -- src\editor\menu_search.lua
|
||||
["Find text"] = "Traserĉi tekston", -- src\editor\menu_search.lua
|
||||
["Find the earlier text occurence"] = "Traserĉi la antaŭantan aperaĵon da teksto", -- src\editor\menu_search.lua
|
||||
["Find the next text occurrence"] = "Pluserĉi la aperaĵon da teksto", -- src\editor\menu_search.lua
|
||||
["Find"] = "Traserĉi", -- src\editor\findreplace.lua
|
||||
["Fold or unfold all code folds"] = "Kaŝi aŭ malkaŝi ĉiujn faldaĵojn da fontkodoj", -- src\editor\menu_edit.lua
|
||||
["Found auto-recovery record and restored saved session."] = "Trovis aŭtomatrestaŭran dosieron kaj riparis konservitan seancon.", -- src\editor\commands.lua
|
||||
["Found"] = "Trovis", -- src\editor\findreplace.lua
|
||||
["Full &Screen"] = "Plenekrana &reĝimo", -- src\editor\menu_view.lua
|
||||
["Go To Definition"] = "Iri al deklaro", -- src\editor\editor.lua
|
||||
["Go To File..."] = nil, -- src\editor\menu_search.lua
|
||||
["Go To Line..."] = "Iri al linio...", -- src\editor\menu_search.lua
|
||||
["Go To Next Bookmark"] = "Iri al sekvanta legosigno", -- src\editor\menu_edit.lua
|
||||
["Go To Previous Bookmark"] = "Iri al antaŭanta legosigno", -- src\editor\menu_edit.lua
|
||||
["Go To Symbol..."] = nil, -- src\editor\menu_search.lua
|
||||
["Go to file"] = nil, -- src\editor\menu_search.lua
|
||||
["Go to line"] = "Iri al linio", -- src\editor\menu_search.lua
|
||||
["Go to symbol"] = nil, -- src\editor\menu_search.lua
|
||||
["Hide '.%s' Files"] = nil, -- src\editor\filetree.lua
|
||||
["INS"] = "INS", -- src\editor\editor.lua
|
||||
["Ignored error in debugger initialization code: %s."] = "Ignoris eraron en pravaloriza kodo de la sencimigilo: %s.", -- src\editor\debugger.lua
|
||||
["In Files"] = "Ene de dosieroj", -- src\editor\findreplace.lua
|
||||
["Insert Library Function..."] = nil, -- src\editor\menu_search.lua
|
||||
["Known Files"] = "Konataj dosieroj", -- src\editor\commands.lua
|
||||
["Ln: %d"] = "Ln: %d", -- src\editor\editor.lua
|
||||
["Local console"] = "Loka konzolo", -- src\editor\gui.lua, src\editor\shellbox.lua
|
||||
["Lua &Interpreter"] = "Interpretilo de Lua", -- src\editor\menu_project.lua
|
||||
["Mapped remote request for '%s' to '%s'."] = "Mapi faran peton pri '%s' al '%s'.", -- src\editor\debugger.lua
|
||||
["Match &case"] = "Atenti &usklecon", -- src\editor\findreplace.lua
|
||||
["Match &whole word"] = "Atenti &plenan vorton", -- src\editor\findreplace.lua
|
||||
["Mixed end-of-line encodings detected."] = "Detektis kodoprezentojn miksitajn linifinajn", -- src\editor\commands.lua
|
||||
["Navigate"] = nil, -- src\editor\menu_search.lua
|
||||
["New &File"] = "Nova &dosiero", -- src\editor\filetree.lua
|
||||
["OVR"] = "SUS", -- src\editor\editor.lua
|
||||
["Open With Default Program"] = "Malfermi per la defaŭlta programo", -- src\editor\filetree.lua
|
||||
["Open an existing document"] = "Malfermi jaman dokumenton", -- src\editor\menu_file.lua
|
||||
["Open file"] = "Malfermi dosieron", -- src\editor\commands.lua
|
||||
["Options"] = "Opcioj", -- src\editor\findreplace.lua
|
||||
["Outline Window"] = "Skemo-fenestro", -- src\editor\menu_view.lua
|
||||
["Outline"] = "Skemo", -- src\editor\outline.lua
|
||||
["Output (running)"] = "Eligo (funkciata)", -- src\editor\debugger.lua, src\editor\output.lua
|
||||
["Output (suspended)"] = "Eligo (finetita)", -- src\editor\debugger.lua
|
||||
["Output"] = "Eligo", -- src\editor\debugger.lua, src\editor\output.lua, src\editor\gui.lua, src\editor\settings.lua
|
||||
["Paste text from the clipboard"] = "Alglui tekston el la tondejo", -- src\editor\menu_edit.lua
|
||||
["Preferences"] = "Preferoj", -- src\editor\menu_edit.lua
|
||||
["Prepend '!' to force local execution."] = "Antaŭdoni je '!' por altrudi lokan plenumon.", -- src\editor\shellbox.lua
|
||||
["Prepend '=' to show complex values on multiple lines."] = "Antaŭdoni je '=' por montri komplikajn valorojn sur multaj linioj.", -- src\editor\shellbox.lua
|
||||
["Press cancel to abort."] = "Premu nulig-butonon por fini.", -- src\editor\commands.lua
|
||||
["Program '%s' started in '%s' (pid: %d)."] = "La programo nome de '%s' komencitas en '%s' (pid: %d).", -- src\editor\output.lua
|
||||
["Program can't start because conflicting process is running as '%s'."] = "La programo ne povas komenci, ĉar konflikta procezo funkcias kiel je la '%s'.", -- src\editor\output.lua
|
||||
["Program completed in %.2f seconds (pid: %d)."] = "La programo finfaris post %.2f sekundoj", -- src\editor\output.lua
|
||||
["Program starting as '%s'."] = "La programo komencas kiel je '%s'.", -- src\editor\output.lua
|
||||
["Program stopped (pid: %d)."] = "La programo finis (pid: %d).", -- src\editor\debugger.lua
|
||||
["Program unable to run as '%s'."] = "La programo ne kapablas plenumi kiel je '%s'.", -- src\editor\output.lua
|
||||
["Project Directory"] = "Projekta dosierujo", -- src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Project history"] = "Projekta historio", -- src\editor\menu_file.lua
|
||||
["Project"] = "Projekto", -- src\editor\filetree.lua
|
||||
["Project/&FileTree Window"] = "Projekta/&Dosierarba Fenestro", -- src\editor\menu_view.lua
|
||||
["Provide command line parameters"] = "Doni komandliniajn parametrojn", -- src\editor\menu_project.lua
|
||||
["R/O"] = "L/A", -- src\editor\editor.lua
|
||||
["R/W"] = "L/S", -- src\editor\editor.lua
|
||||
["Re&place In Files"] = "Anstataŭi en dosieroj", -- src\editor\menu_search.lua
|
||||
["Re-indent selected lines"] = "Realinei elektitajn liniojn", -- src\editor\menu_edit.lua
|
||||
["Recent &Projects"] = "Antaŭnelongaj &projektoj", -- src\editor\menu_file.lua
|
||||
["Recent Files"] = "Antaŭnelongaj dosieroj", -- src\editor\menu_file.lua
|
||||
["Redo last edit undone"] = "Refari lastan redakton", -- src\editor\menu_edit.lua
|
||||
["Refused a request to start a new debugging session as there is one in progress already."] = "Peto por komenci novan sencimigan seancon malakceptis, ĉar seanco jam faratas.", -- src\editor\debugger.lua
|
||||
["Regular &expression"] = "Regul&esprimo", -- src\editor\findreplace.lua
|
||||
["Remote console"] = "Fora konzolo", -- src\editor\shellbox.lua
|
||||
["Rename All Instances"] = "Renomigi ĉiujn aperaĵojn", -- src\editor\editor.lua
|
||||
["Replace A&ll"] = "Anstataŭi ĉ&ion", -- src\editor\findreplace.lua
|
||||
["Replace All Selections"] = "Anstataŭi ĉiujn elektojn", -- src\editor\editor.lua
|
||||
["Replace"] = "Anstataŭi", -- src\editor\findreplace.lua
|
||||
["Replaced an invalid UTF8 character with %s."] = "Anstataŭis UTF8-an signon per %s.", -- src\editor\commands.lua
|
||||
["Replaced"] = "Anstataŭita", -- src\editor\findreplace.lua
|
||||
["Replacing"] = "Anstataŭanta", -- src\editor\findreplace.lua
|
||||
["Reset to default layout"] = "Rekomenciĝi al defaŭltan aranĝon", -- src\editor\menu_view.lua
|
||||
["Run As Scratchpad"] = "Plenumi kiel malnetdosieron", -- src\editor\menu_project.lua
|
||||
["Run as Scratchpad"] = "Plenumi kiel malnetdosieron", -- src\editor\menu_project.lua
|
||||
["S&top Debugging"] = "&Fini sencimigo", -- src\editor\menu_project.lua
|
||||
["S&top Process"] = "&Fini procezon", -- src\editor\menu_project.lua
|
||||
["Save &As..."] = "Konservi &kiel...", -- src\editor\gui.lua, src\editor\menu_file.lua
|
||||
["Save A&ll"] = "Konservi ĉ&ion", -- src\editor\menu_file.lua
|
||||
["Save Changes?"] = "Ĉu konservi ĉiujn ŝanĝojn?", -- src\editor\commands.lua
|
||||
["Save all open documents"] = "Konservi ĉiujn malfermajn dokumentojn", -- src\editor\menu_file.lua
|
||||
["Save file as"] = "Konservi dosieron kiel", -- src\editor\commands.lua
|
||||
["Save file?"] = "Ĉu konservi dosieron?", -- src\editor\commands.lua
|
||||
["Save the current document to a file with a new name"] = "Konservi la kurantan dokumenton kun dosiero novanome", -- src\editor\menu_file.lua
|
||||
["Save the current document"] = "Konservi la kurantan dokumenton", -- src\editor\menu_file.lua
|
||||
["Saved auto-recover at %s."] = "Konservis aŭtomatrestaŭron je %s.", -- src\editor\commands.lua
|
||||
["Scope"] = "Amplekso", -- src\editor\findreplace.lua
|
||||
["Scratchpad error"] = "Eraro de malnetdosiero", -- src\editor\debugger.lua
|
||||
["Searching for"] = "Serĉanti pri", -- src\editor\findreplace.lua
|
||||
["Sel: %d/%d"] = "Ele: %d/%d", -- src\editor\editor.lua
|
||||
["Select &All"] = "Elekti &ĉion", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["Select all text in the editor"] = "Elekti la tekston en la redaktilo", -- src\editor\menu_edit.lua
|
||||
["Select And Find Next"] = "Elekti kaj pluserĉi", -- src\editor\menu_search.lua
|
||||
["Select And Find Previous"] = "Elekti kaj traserĉi antaŭantan", -- src\editor\menu_search.lua
|
||||
["Select the word under cursor and find its next occurrence"] = "Elekti la vorton sub la tajpmontrilo, kaj pluserĉi", -- src\editor\menu_search.lua
|
||||
["Select the word under cursor and find its previous occurrence"] = "Elekti la vorton sub la tajpmontrilo, kaj traserĉi antaŭantan", -- src\editor\menu_search.lua
|
||||
["Set From Current File"] = "Precizigi per la kuranta dosiero", -- src\editor\menu_project.lua
|
||||
["Set project directory from current file"] = "Precizigi la projektan dosierujon per la kurantan dosieron", -- src\editor\menu_project.lua
|
||||
["Set the interpreter to be used"] = "Precizigi la interpretiloton", -- src\editor\menu_project.lua
|
||||
["Set the project directory to be used"] = "Precizigi la projekt-dosierujoton", -- src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Settings: System"] = "Agordoj de la sistemo", -- src\editor\menu_edit.lua
|
||||
["Settings: User"] = "Agordoj de la uzanto", -- src\editor\menu_edit.lua
|
||||
["Show &Tooltip"] = "Montri &ŝpruchelpilon", -- src\editor\menu_edit.lua
|
||||
["Show All Files"] = nil, -- src\editor\filetree.lua
|
||||
["Show Hidden Files"] = nil, -- src\editor\filetree.lua
|
||||
["Show Location"] = "Montri lokon", -- src\editor\gui.lua, src\editor\filetree.lua
|
||||
["Show all files"] = nil, -- src\editor\filetree.lua
|
||||
["Show files previously hidden"] = nil, -- src\editor\filetree.lua
|
||||
["Show tooltip for current position; place cursor after opening bracket of function"] = "Montri ŝpruchelpilon pri la kuranta pozicio; meti la tajpmontrilon preter la ronda ekkrampo de la funkcio", -- src\editor\menu_edit.lua
|
||||
["Show/Hide the status bar"] = "Montri/Kaŝi la statan breton", -- src\editor\menu_view.lua
|
||||
["Show/Hide the toolbar"] = "Montri/Kaŝi la ilobreton", -- src\editor\menu_view.lua
|
||||
["Sort selected lines"] = "Ordi la elektitajn liniojn", -- src\editor\menu_edit.lua
|
||||
["Source"] = "Fontkodo", -- src\editor\menu_edit.lua
|
||||
["Stack"] = "Stako", -- src\editor\debugger.lua
|
||||
["Start &Debugging"] = "Ek-&sencimigi", -- src\editor\menu_project.lua
|
||||
["Start or continue debugging"] = "Komenci aŭ pluigi sencimigon", -- src\editor\menu_project.lua
|
||||
["Step &Into"] = "Eniri &enen", -- src\editor\menu_project.lua
|
||||
["Step &Over"] = "Trans&salti", -- src\editor\menu_project.lua
|
||||
["Step O&ut"] = "Eliri el", -- src\editor\menu_project.lua
|
||||
["Step into"] = "Eniri enen", -- src\editor\menu_project.lua
|
||||
["Step out of the current function"] = "Eliri el la kuranta funkcio", -- src\editor\menu_project.lua
|
||||
["Step over"] = "Transsalti", -- src\editor\menu_project.lua
|
||||
["Stop debugging and continue running the process"] = "Fini sencimigon kaj plenumadi la procezon", -- src\editor\menu_project.lua
|
||||
["Stop the currently running process"] = "Fini la nunfunkciatan procezon", -- src\editor\menu_project.lua
|
||||
["Switch to or from full screen mode"] = "Interŝanĝi al aŭ el plenekrana reĝimo", -- src\editor\menu_view.lua
|
||||
["Text not found."] = "Teksto ne trovitis", -- src\editor\findreplace.lua
|
||||
["The API file must be located in a subdirectory of the API directory."] = "La dosiero de API devas troviĝi en subdosierujo de la API-a dosierujo.", -- src\editor\autocomplete.lua
|
||||
["Toggle Bookmark"] = "Baskuli legosignon", -- src\editor\menu_edit.lua
|
||||
["Toggle Break&point"] = "Baskuli halto&punkto", -- src\editor\menu_project.lua
|
||||
["Toggle bookmark"] = "Baskuli legosignon", -- src\editor\menu_edit.lua
|
||||
["Toggle breakpoint"] = "Baskuli haltopunkto", -- src\editor\menu_project.lua
|
||||
["Tr&ace"] = "Spuri", -- src\editor\menu_project.lua
|
||||
["Trace execution showing each executed line"] = "Spurili plenumon per montri ĉiun plenumitan linion", -- src\editor\menu_project.lua
|
||||
["Unable to create directory '%s'."] = "Ne kapablas krei je la dosierujo '%s'.", -- src\editor\filetree.lua
|
||||
["Unable to create file '%s'."] = "Ne kapablas krei je la dosiero '%s'.", -- src\editor\filetree.lua
|
||||
["Unable to delete directory '%s': %s"] = "Ne kapablas forigi je la dosierujo '%s': %s", -- src\editor\filetree.lua
|
||||
["Unable to load file '%s'."] = "Ne kapablas ŝarĝi je la dosiero '%s'.", -- src\editor\commands.lua
|
||||
["Unable to rename file '%s'."] = "Ne kapablas renomigi je la dosiero '%s'.", -- src\editor\filetree.lua
|
||||
["Unable to save file '%s': %s"] = "Ne kapablas konservi je la dosiero '%s': %s", -- src\editor\commands.lua
|
||||
["Unable to stop program (pid: %d), code %d."] = "Ne kapablas fini la programon (pid: %d), kodo %d.", -- src\editor\debugger.lua
|
||||
["Undo last edit"] = "Malfari la antaŭan redakton", -- src\editor\menu_edit.lua
|
||||
["Use '%s' to see full description."] = "Uzu je '%s' por vidi plenan priskribon", -- src\editor\editor.lua
|
||||
["Use '%s' to show line endings and '%s' to convert them."] = "Uzu je '%s' por montri linifinojn kaj je '%s' por konverti ilin", -- src\editor\commands.lua
|
||||
["Use 'clear' to clear the shell output and the history."] = "Tajpu 'clear' por viŝi la eligon kaj historion de la ŝelo.", -- src\editor\shellbox.lua
|
||||
["Use Shift-Enter for multiline code."] = "Uzu <Majuskligklavon-Enenklavon> por plurlinia fontkodo.", -- src\editor\shellbox.lua
|
||||
["View the outline window"] = "Vidi la skemo-fenestron", -- src\editor\menu_view.lua
|
||||
["View the output/console window"] = "Vidi la eligo/konzolo-fenestron", -- src\editor\menu_view.lua
|
||||
["View the project/filetree window"] = "Vidi la projekto/dosierarbo-fenestron", -- src\editor\menu_view.lua
|
||||
["View the stack window"] = "Vidi la stako-fenestron", -- src\editor\menu_view.lua
|
||||
["View the watch window"] = "Vidi la observado-fenestron", -- src\editor\menu_view.lua
|
||||
["Watch"] = "Observado", -- src\editor\debugger.lua
|
||||
["Welcome to the interactive Lua interpreter."] = "Bonvenon al la interaga interpretilo de Lua.", -- src\editor\shellbox.lua
|
||||
["Wrap ar&ound"] = "&Ĉirkaŭflui", -- src\editor\findreplace.lua
|
||||
["You must save the program first."] = "Vi unue devas konservi la programon.", -- src\editor\commands.lua
|
||||
["Zoom In"] = "Zomi", -- src\editor\menu_view.lua
|
||||
["Zoom Out"] = "Malzomi", -- src\editor\menu_view.lua
|
||||
["Zoom to 100%"] = "Zomi al 100%", -- src\editor\menu_view.lua
|
||||
["Zoom"] = "Zomo", -- src\editor\menu_view.lua
|
||||
["on line %d"] = "sur la linio %d", -- src\editor\debugger.lua, src\editor\editor.lua, src\editor\commands.lua
|
||||
["traced %d instruction"] = {"spuris je %d instrukcio", "spuris je %d instrukcioj"}, -- src\editor\debugger.lua
|
||||
["unknown error"] = "obskura eraro", -- src\editor\debugger.lua
|
||||
}
|
||||
218
cfg/i18n/es.lua
218
cfg/i18n/es.lua
@@ -1,86 +1,124 @@
|
||||
-- Traducción realiazada por Iñigo Sola
|
||||
-- para la versión ZeroBrane Studio 17bdb48
|
||||
-- 10 de Noviembre de 2012
|
||||
return {
|
||||
[0] = function(c) return c == 1 and 1 or 2 end, -- plural
|
||||
["%d instance"] = nil, -- src\editor\findreplace.lua
|
||||
["%s event failed: %s"] = nil, -- src\editor\package.lua
|
||||
["&About"] = "&Acerca de...", -- src\editor\menu_help.lua
|
||||
["&Add Watch"] = "Añadir observación", -- src\editor\debugger.lua
|
||||
["&Break"] = "Ruptura", -- src\editor\menu_project.lua
|
||||
["&Close Page"] = "Cerrar página", -- src\editor\menu_file.lua, src\editor\gui.lua
|
||||
["&Close Page"] = "Cerrar página", -- src\editor\gui.lua, src\editor\menu_file.lua
|
||||
["&Community"] = nil, -- src\editor\menu_help.lua
|
||||
["&Compile"] = "Compilar", -- src\editor\menu_project.lua
|
||||
["&Copy"] = "Copiar", -- src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Copy"] = "Copiar", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Default Layout"] = "Diseño por defecto", -- src\editor\menu_view.lua
|
||||
["&Delete Watch"] = "Eliminar observación", -- src\editor\debugger.lua
|
||||
["&Delete"] = nil, -- src\editor\filetree.lua
|
||||
["&Documentation"] = nil, -- src\editor\menu_help.lua
|
||||
["&Down"] = nil, -- src\editor\findreplace.lua
|
||||
["&Edit Project Directory"] = nil, -- src\editor\filetree.lua
|
||||
["&Edit Value"] = nil, -- src\editor\debugger.lua
|
||||
["&Edit Watch"] = "Editar observación", -- src\editor\debugger.lua
|
||||
["&Edit"] = "Editar", -- src\editor\menu_edit.lua
|
||||
["&File"] = "Archivo", -- src\editor\menu_file.lua
|
||||
["&Find All"] = nil, -- src\editor\findreplace.lua
|
||||
["&Find Next"] = nil, -- src\editor\findreplace.lua
|
||||
["&Find"] = "Buscar", -- src\editor\menu_search.lua
|
||||
["&Fold/Unfold All"] = "Plegar/desplegar todo", -- src\editor\menu_edit.lua
|
||||
["&Goto Line"] = "Ir a línea", -- src\editor\menu_search.lua
|
||||
["&Frequently Asked Questions"] = nil, -- src\editor\menu_help.lua
|
||||
["&Getting Started Guide"] = nil, -- src\editor\menu_help.lua
|
||||
["&Help"] = "Ayuda", -- src\editor\menu_help.lua
|
||||
["&New Directory"] = nil, -- src\editor\filetree.lua
|
||||
["&New"] = "&Nuevo", -- src\editor\menu_file.lua
|
||||
["&Open..."] = "&Abrir...", -- src\editor\menu_file.lua
|
||||
["&Output/Console Window"] = "Salida/Consola", -- src\editor\menu_view.lua
|
||||
["&Paste"] = "Pegar", -- src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Project"] = "Proyecto", -- src\editor\menu_project.lua, src\editor\inspect.lua
|
||||
["&Redo"] = "Rehacer", -- src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Replace"] = "Remplazar", -- src\editor\menu_search.lua
|
||||
["&Paste"] = "Pegar", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Project Page"] = nil, -- src\editor\menu_help.lua
|
||||
["&Project"] = "Proyecto", -- src\editor\menu_project.lua
|
||||
["&Redo"] = "Rehacer", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Rename"] = nil, -- src\editor\filetree.lua
|
||||
["&Replace All"] = nil, -- src\editor\findreplace.lua
|
||||
["&Replace"] = "Remplazar", -- src\editor\findreplace.lua, src\editor\menu_search.lua
|
||||
["&Run"] = "Ejecutar", -- src\editor\menu_project.lua
|
||||
["&Save"] = "Guardar", -- src\editor\menu_file.lua, src\editor\gui.lua
|
||||
["&Save"] = "Guardar", -- src\editor\gui.lua, src\editor\menu_file.lua
|
||||
["&Search"] = "Buscar", -- src\editor\menu_search.lua
|
||||
["&Sort"] = "Clasificar", -- src\editor\menu_search.lua
|
||||
["&Sort"] = "Clasificar", -- src\editor\menu_edit.lua
|
||||
["&Stack Window"] = "Ventana de la pila de ejecución", -- src\editor\menu_view.lua
|
||||
["&Start Debugger Server"] = "Lanzar servidor de depuración", -- src\editor\menu_project.lua
|
||||
["&Undo"] = "Deshacer", -- src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Status Bar"] = nil, -- src\editor\menu_view.lua
|
||||
["&Subdirectories"] = nil, -- src\editor\findreplace.lua
|
||||
["&Tool Bar"] = nil, -- src\editor\menu_view.lua
|
||||
["&Tutorials"] = nil, -- src\editor\menu_help.lua
|
||||
["&Undo"] = "Deshacer", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Up"] = nil, -- src\editor\findreplace.lua
|
||||
["&View"] = "Ver", -- src\editor\menu_view.lua
|
||||
["&Watch Window"] = "Ventana de observaciones", -- src\editor\menu_view.lua
|
||||
[".&bak on Replace"] = nil, -- src\editor\findreplace.lua
|
||||
["About %s"] = "Acerca de %s", -- src\editor\menu_help.lua
|
||||
["Add Watch Expression"] = "Añadir expresión de observación", -- src\editor\editor.lua
|
||||
["Add To Scratchpad"] = "Añadir al borrador", -- src\editor\editor.lua
|
||||
["Add Watch Expression"] = "Añadir expresión de observación", -- src\editor\editor.lua
|
||||
["All files"] = "Todos los archivos", -- src\editor\commands.lua
|
||||
["Allow external process to start debugging"] = "Permitir proceso externo para iniciar depuración", -- src\editor\menu_project.lua
|
||||
["Analyze the source code"] = "Analizar el código fuente", -- src\editor\inspect.lua
|
||||
["Analyze"] = "Analizar", -- src\editor\inspect.lua
|
||||
["Auto Complete Identifiers"] = "Autocompletar identificadores", -- src\editor\menu_edit.lua
|
||||
["Auto complete while typing"] = "Autocompletar mientras se escribe", -- src\editor\menu_edit.lua
|
||||
["Break execution at the next executed line of code"] = "Parar ejecución en la siguiente línea de código", -- src\editor\menu_project.lua, src\editor\gui.lua
|
||||
["C&lear Output Window"] = "Limpiar ventana de Salida", -- src\editor\menu_project.lua
|
||||
["Bookmark"] = nil, -- src\editor\menu_edit.lua
|
||||
["Break execution at the next executed line of code"] = "Parar ejecución en la siguiente línea de código", -- src\editor\menu_project.lua
|
||||
["C&lear Output Window"] = "Limpiar ventana de Salida", -- src\editor\gui.lua, src\editor\menu_project.lua
|
||||
["C&omment/Uncomment"] = "Comentar/descomentar", -- src\editor\menu_edit.lua
|
||||
["Can't debug the script in the active editor window."] = "No se puede depurar el script en la ventana activa del editor", -- src\editor\debugger.lua
|
||||
["Can't evaluate the expression while the application is running."] = nil, -- src\editor\debugger.lua
|
||||
["Can't find file '%s' in the current project to activate for debugging. Update the project or open the file in the editor before debugging."] = "No se puede encontrar el archivo '%s' en el proyecto actual para activar la depuración. Actualiza el proyecto o abre el archivo en el editor antes de depurar.", -- src\editor\debugger.lua
|
||||
["Can't open file '%s': %s"] = nil, -- src\editor\singleinstance.lua
|
||||
["Can't process auto-recovery record; invalid format: %s."] = "No se puede procesar la autorrecuperación; formato inválido: %s.", -- src\editor\commands.lua
|
||||
["Can't run the entry point script ('%s')."] = "No se pude ejecutar el punto de entrada del script (%s).", -- src\editor\debugger.lua
|
||||
["Can't start debugger server at %s:%d: %s."] = nil, -- src\editor\debugger.lua
|
||||
["Can't start debugging session due to internal error '%s'."] = "No se puede iniciar la sesión de depuración debido a un error interno '%s'.'", -- src\editor\debugger.lua
|
||||
["Can't start debugging without an opened file or with the current file not being saved ('%s')."] = "No se puede iniciar la depuración sin abrir un archivo o si no ha sido guardado ('%s').", -- src\editor\debugger.lua
|
||||
["Choose ..."] = nil, -- src\editor\menu_project.lua
|
||||
["Choose a project directory"] = "Elegir el directorio del proyecto", -- src\editor\menu_project.lua
|
||||
["Clear &Dynamic Words"] = "Limpiar las palabras dinámicas", -- src\editor\menu_edit.lua
|
||||
["Can't stop debugger server as it is not started."] = nil, -- src\editor\debugger.lua
|
||||
["Cancel"] = nil, -- src\editor\findreplace.lua
|
||||
["Cancelled by the user."] = nil, -- src\editor\findreplace.lua
|
||||
["Choose a project directory"] = "Elegir el directorio del proyecto", -- src\editor\findreplace.lua, src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Choose..."] = nil, -- src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Clear Items"] = nil, -- src\editor\menu_file.lua
|
||||
["Clear items from this list"] = nil, -- src\editor\menu_file.lua
|
||||
["Clear the output window before compiling or debugging"] = "Limpiar la ventana de salida antes de compilar o depurar", -- src\editor\menu_project.lua
|
||||
["Close &Other Pages"] = nil, -- src\editor\gui.lua
|
||||
["Close A&ll Pages"] = nil, -- src\editor\gui.lua
|
||||
["Close the current editor window"] = "Cerrar la ventana actual del editor", -- src\editor\menu_file.lua
|
||||
["Co&ntinue"] = "Continuar", -- src\editor\menu_project.lua
|
||||
["Col: %d"] = "Col: %d", -- src\editor\editor.lua
|
||||
["Command Line Parameters..."] = nil, -- src\editor\menu_project.lua
|
||||
["Command line parameters"] = nil, -- src\editor\menu_project.lua
|
||||
["Comment or uncomment current or selected lines"] = {"Comentar o descomentar la línea activa (seleccionada)","Comentar o descomentar las líneas activas (seleccionadas)"}, -- src\editor\menu_edit.lua
|
||||
["Compilation error"] = "Error de compilación", -- src\editor\debugger.lua, src\editor\commands.lua
|
||||
["Compilation error"] = "Error de compilación", -- src\editor\commands.lua, src\editor\debugger.lua
|
||||
["Compilation successful; %.0f%% success rate (%d/%d)."] = "Compilación exitosa; factor de éxito: %.0f%% (%d/%d).", -- src\editor\commands.lua
|
||||
["Compile the current file"] = "Compilar el archivo actual", -- src\editor\menu_project.lua
|
||||
["Complete &Identifier"] = "Completar identificador", -- src\editor\menu_edit.lua
|
||||
["Complete the current identifier"] = "Completar el actual identificador", -- src\editor\menu_edit.lua
|
||||
["Consider removing backslash from escape sequence '%s'."] = nil, -- src\editor\commands.lua
|
||||
["Copy Full Path"] = nil, -- src\editor\gui.lua, src\editor\filetree.lua
|
||||
["Copy selected text to clipboard"] = "Copiar el texto seleccionado al portapapeles", -- src\editor\menu_edit.lua
|
||||
["Correct &Indentation"] = nil, -- src\editor\menu_edit.lua
|
||||
["Couldn't activate file '%s' for debugging; continuing without it."] = "No se pudo activar el archivo '%s' para la depuración; continuar sin él.", -- src\editor\debugger.lua
|
||||
["Create an empty document"] = "Crear un documento en blanco", -- src\editor\menu_file.lua, src\editor\gui.lua
|
||||
["Cu&t"] = "Cortar", -- src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["Create an empty document"] = "Crear un documento en blanco", -- src\editor\menu_file.lua
|
||||
["Cu&t"] = "Cortar", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["Cut selected text to clipboard"] = "Cortar el texto selecionado al portapapeles", -- src\editor\menu_edit.lua
|
||||
["Debugger server started at %s:%d."] = "Servidor de depuración inciado en %s:%s", -- src\editor\debugger.lua
|
||||
["Debugger server stopped at %s:%d."] = nil, -- src\editor\debugger.lua
|
||||
["Debugging session completed (%s)."] = "Sesión de depuración completada (%s).", -- src\editor\debugger.lua
|
||||
["Debugging session started in '%s'."] = "Sesión de depuración iniciada en '%s'.", -- src\editor\debugger.lua
|
||||
["Debugging suspended at %s:%s (couldn't activate the file)."] = nil, -- src\editor\debugger.lua
|
||||
["Debugging suspended at '%s:%s' (couldn't activate the file)."] = nil, -- src\editor\debugger.lua
|
||||
["Detach &Process"] = nil, -- src\editor\menu_project.lua
|
||||
["Directory"] = nil, -- src\editor\findreplace.lua
|
||||
["Do you want to delete '%s'?"] = nil, -- src\editor\filetree.lua
|
||||
["Do you want to overwrite it?"] = nil, -- src\editor\commands.lua
|
||||
["Do you want to reload it?"] = "¿Quieres recargarlo?", -- src\editor\editor.lua
|
||||
["Do you want to save the changes to '%s'?"] = "¿Quieres guardar los cambios en '%s'?", -- src\editor\commands.lua
|
||||
["E&xit"] = "Salir", -- src\editor\menu_file.lua
|
||||
["Enter Lua code and press Enter to run it."] = "Introduce código Lua y pulsa <Entrer> para ejecutarlo.", -- src\editor\shellbox.lua
|
||||
["Enter line number"] = "Introduce número de línea", -- src\editor\menu_search.lua
|
||||
["Enter command line parameters (use Cancel to clear)"] = nil, -- src\editor\menu_project.lua
|
||||
["Enter replacement text"] = nil, -- src\editor\editor.lua
|
||||
["Error while loading API file: %s"] = "Error mientras se cargaba el archivo de API: %s", -- src\editor\autocomplete.lua
|
||||
["Error while loading configuration file: %s"] = nil, -- src\editor\style.lua
|
||||
["Error while processing API file: %s"] = "Error mientras se procesaba el archivo de API: %s", -- src\editor\autocomplete.lua
|
||||
@@ -91,40 +129,66 @@ return {
|
||||
["Execute the current project/file"] = "Ejecutar el proyecto/archivo actual", -- src\editor\menu_project.lua
|
||||
["Execution error"] = "Error de ejecución", -- src\editor\debugger.lua
|
||||
["Exit program"] = "Salir del programa", -- src\editor\menu_file.lua
|
||||
["Expr"] = "Expr.", -- src\editor\debugger.lua
|
||||
["Expression"] = "Expresión", -- src\editor\debugger.lua
|
||||
["File '%s' has been modified on disk."] = "El archivo '%s' ha sido modificado en el disco.", -- src\editor\editor.lua
|
||||
["File '%s' has more recent timestamp than restored '%s'; please review before saving."] = "El archivo '%s' tiene una fecha más reciente que el restaurado '%s'; por favor, revísalo antes de guardar.", -- src\editor\commands.lua
|
||||
["File '%s' no longer exists."] = "El archivo '%s' no existe.", -- src\editor\editor.lua
|
||||
["File '%s' is missing and can't be recovered."] = nil, -- src\editor\commands.lua
|
||||
["File '%s' no longer exists."] = "El archivo '%s' no existe.", -- src\editor\menu_file.lua, src\editor\editor.lua
|
||||
["File Type"] = nil, -- src\editor\findreplace.lua
|
||||
["File already exists."] = nil, -- src\editor\commands.lua
|
||||
["File history"] = "Historial de archivos", -- src\editor\menu_file.lua
|
||||
["Find &In Files"] = "Buscar en archivos", -- src\editor\menu_search.lua
|
||||
["Find &Next"] = "Buscar siguiente", -- src\editor\menu_search.lua
|
||||
["Find &Previous"] = "Buscar anterior", -- src\editor\menu_search.lua
|
||||
["Find In Files"] = nil, -- src\editor\findreplace.lua
|
||||
["Find and insert library function"] = nil, -- src\editor\menu_search.lua
|
||||
["Find and replace text in files"] = "Buscar y remplazar texto en archivos", -- src\editor\menu_search.lua
|
||||
["Find and replace text"] = "Buscar y rempleazar texto", -- src\editor\menu_search.lua, src\editor\gui.lua
|
||||
["Find and replace text"] = "Buscar y rempleazar texto", -- src\editor\menu_search.lua
|
||||
["Find text in files"] = "Buscar texto en archivos", -- src\editor\menu_search.lua
|
||||
["Find text"] = "Buscar texto", -- src\editor\menu_search.lua, src\editor\gui.lua
|
||||
["Find text"] = "Buscar texto", -- src\editor\menu_search.lua
|
||||
["Find the earlier text occurence"] = "Buscar la anterior aparición del texto", -- src\editor\menu_search.lua
|
||||
["Find the next text occurrence"] = "Buscar la siguiente aparecición del texto", -- src\editor\menu_search.lua
|
||||
["Find"] = nil, -- src\editor\findreplace.lua
|
||||
["Fold or unfold all code folds"] = "Plegar o desplegar todo el código plegado", -- src\editor\menu_edit.lua
|
||||
["Found auto-recovery record and restored saved session."] = "Encontrada autorrecuperación y sesión restaurada.", -- src\editor\commands.lua
|
||||
["Found"] = nil, -- src\editor\findreplace.lua
|
||||
["Full &Screen"] = "Pantalla completa", -- src\editor\menu_view.lua
|
||||
["Go to a selected line"] = "Ir a línea seleccionada", -- src\editor\menu_search.lua
|
||||
["Goto Line"] = "Ir a línea", -- src\editor\menu_search.lua
|
||||
["Go To Definition"] = nil, -- src\editor\editor.lua
|
||||
["Go To File..."] = nil, -- src\editor\menu_search.lua
|
||||
["Go To Line..."] = "Ir a línea...", -- src\editor\menu_search.lua
|
||||
["Go To Next Bookmark"] = nil, -- src\editor\menu_edit.lua
|
||||
["Go To Previous Bookmark"] = nil, -- src\editor\menu_edit.lua
|
||||
["Go To Symbol..."] = nil, -- src\editor\menu_search.lua
|
||||
["Go to file"] = nil, -- src\editor\menu_search.lua
|
||||
["Go to line"] = "Ir a línea", -- src\editor\menu_search.lua
|
||||
["Go to symbol"] = nil, -- src\editor\menu_search.lua
|
||||
["Hide '.%s' Files"] = nil, -- src\editor\filetree.lua
|
||||
["INS"] = "INS", -- src\editor\editor.lua
|
||||
["Jump to a function definition..."] = "Saltar a la definición de la función...", -- src\editor\editor.lua
|
||||
["Ignored error in debugger initialization code: %s."] = nil, -- src\editor\debugger.lua
|
||||
["In Files"] = nil, -- src\editor\findreplace.lua
|
||||
["Insert Library Function..."] = nil, -- src\editor\menu_search.lua
|
||||
["Known Files"] = "Archivos conocidos", -- src\editor\commands.lua
|
||||
["Ln: %d"] = "Ln: %d", -- src\editor\editor.lua
|
||||
["Local console"] = "Consola local", -- src\editor\shellbox.lua, src\editor\gui.lua
|
||||
["Local console"] = "Consola local", -- src\editor\gui.lua, src\editor\shellbox.lua
|
||||
["Lua &Interpreter"] = "Intérprete Lua", -- src\editor\menu_project.lua
|
||||
["Mapped remote request for '%s' to '%s'."] = nil, -- src\editor\debugger.lua
|
||||
["Match &case"] = nil, -- src\editor\findreplace.lua
|
||||
["Match &whole word"] = nil, -- src\editor\findreplace.lua
|
||||
["Mixed end-of-line encodings detected."] = nil, -- src\editor\commands.lua
|
||||
["Navigate"] = nil, -- src\editor\menu_search.lua
|
||||
["New &File"] = nil, -- src\editor\filetree.lua
|
||||
["OVR"] = "OVR", -- src\editor\editor.lua
|
||||
["Open an existing document"] = "Abrir un documento existente", -- src\editor\menu_file.lua, src\editor\gui.lua
|
||||
["Open With Default Program"] = nil, -- src\editor\filetree.lua
|
||||
["Open an existing document"] = "Abrir un documento existente", -- src\editor\menu_file.lua
|
||||
["Open file"] = "Abrir archivo", -- src\editor\commands.lua
|
||||
["Output (running)"] = "Salida (en ejecución)", -- src\editor\output.lua
|
||||
["Output"] = "Salida", -- src\editor\output.lua, src\editor\settings.lua, src\editor\gui.lua
|
||||
["Options"] = nil, -- src\editor\findreplace.lua
|
||||
["Outline Window"] = nil, -- src\editor\menu_view.lua
|
||||
["Outline"] = nil, -- src\editor\outline.lua
|
||||
["Output (running)"] = "Salida (en ejecución)", -- src\editor\debugger.lua, src\editor\output.lua
|
||||
["Output (suspended)"] = nil, -- src\editor\debugger.lua
|
||||
["Output"] = "Salida", -- src\editor\debugger.lua, src\editor\output.lua, src\editor\gui.lua, src\editor\settings.lua
|
||||
["Paste text from the clipboard"] = "Pegar texto desde el portapapeles", -- src\editor\menu_edit.lua
|
||||
["Preferences"] = nil, -- src\editor\menu_edit.lua
|
||||
["Prepend '!' to force local execution."] = nil, -- src\editor\shellbox.lua
|
||||
["Prepend '=' to show complex values on multiple lines."] = "Antepón '=' para ver valores complejos en líneas múltiples", -- src\editor\shellbox.lua
|
||||
["Press cancel to abort."] = "Presiona cancelar para abortar.", -- src\editor\commands.lua
|
||||
["Program '%s' started in '%s' (pid: %d)."] = "Programa '%s' iniciado en '%s' (pid: %d).", -- src\editor\output.lua
|
||||
@@ -133,58 +197,94 @@ return {
|
||||
["Program starting as '%s'."] = "Programa iniciado como '%s'.", -- src\editor\output.lua
|
||||
["Program stopped (pid: %d)."] = "Programa parado (pid: %d).", -- src\editor\debugger.lua
|
||||
["Program unable to run as '%s'."] = "No se puede ejecutar el programa como '%s'.", -- src\editor\output.lua
|
||||
["Project Directory"] = nil, -- src\editor\menu_project.lua
|
||||
["Project"] = "Proyecto", -- src\editor\settings.lua, src\editor\gui.lua
|
||||
["Project Directory"] = nil, -- src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Project history"] = nil, -- src\editor\menu_file.lua
|
||||
["Project"] = "Proyecto", -- src\editor\filetree.lua
|
||||
["Project/&FileTree Window"] = "Ventana de proyecto/árbol de archivos", -- src\editor\menu_view.lua
|
||||
["Provide command line parameters"] = nil, -- src\editor\menu_project.lua
|
||||
["R/O"] = "R/O", -- src\editor\editor.lua
|
||||
["R/W"] = "R/W", -- src\editor\editor.lua
|
||||
["Re&place In Files"] = "Remplazar en archivos", -- src\editor\menu_search.lua
|
||||
["Re-indent selected lines"] = nil, -- src\editor\menu_edit.lua
|
||||
["Recent &Projects"] = nil, -- src\editor\menu_file.lua
|
||||
["Recent Files"] = "Archivos recientes", -- src\editor\menu_file.lua
|
||||
["Redo last edit undone"] = "Rehacer la última edición deshecha", -- src\editor\menu_edit.lua
|
||||
["Refused a request to start a new debugging session as there is one in progress already."] = "No se pudo lanzar una nueva sesión de depuración porque ya hay una en curso.", -- src\editor\debugger.lua
|
||||
["Regular &expression"] = nil, -- src\editor\findreplace.lua
|
||||
["Remote console"] = "Consola remota", -- src\editor\shellbox.lua
|
||||
["Rename All Instances"] = nil, -- src\editor\editor.lua
|
||||
["Replace A&ll"] = nil, -- src\editor\findreplace.lua
|
||||
["Replace All Selections"] = nil, -- src\editor\editor.lua
|
||||
["Replace"] = nil, -- src\editor\findreplace.lua
|
||||
["Replaced an invalid UTF8 character with %s."] = nil, -- src\editor\commands.lua
|
||||
["Replaced"] = nil, -- src\editor\findreplace.lua
|
||||
["Replacing"] = nil, -- src\editor\findreplace.lua
|
||||
["Reset to default layout"] = "Restablecer el diseño por defecto", -- src\editor\menu_view.lua
|
||||
["Resets the dynamic word list for autocompletion"] = "Restablecer la lista dinámica de palabras para autocompletado", -- src\editor\menu_edit.lua
|
||||
["Run As Scratchpad"] = "Ejecutar como borrador", -- src\editor\menu_project.lua
|
||||
["Run as Scratchpad"] = "Ejecutar como borrador", -- src\editor\menu_project.lua
|
||||
["S&top Debugging"] = "Parar depuración", -- src\editor\menu_project.lua
|
||||
["S&top Process"] = "Parar proceso", -- src\editor\menu_project.lua
|
||||
["Save &As..."] = "Guardar como...", -- src\editor\menu_file.lua, src\editor\gui.lua
|
||||
["Save &As..."] = "Guardar como...", -- src\editor\gui.lua, src\editor\menu_file.lua
|
||||
["Save A&ll"] = "Guardar todo", -- src\editor\menu_file.lua
|
||||
["Save Changes?"] = "¿Guardar cambios?", -- src\editor\commands.lua
|
||||
["Save all open documents"] = "Guardar todos los documentos abiertos", -- src\editor\menu_file.lua, src\editor\gui.lua
|
||||
["Save all open documents"] = "Guardar todos los documentos abiertos", -- src\editor\menu_file.lua
|
||||
["Save file as"] = "Guardar archivo como", -- src\editor\commands.lua
|
||||
["Save file?"] = "¿Guardar archivo?", -- src\editor\commands.lua
|
||||
["Save the current document to a file with a new name"] = "Guardar el documento actual en un archivo con un nombre nuevo", -- src\editor\menu_file.lua
|
||||
["Save the current document"] = "Guardar el documento actual", -- src\editor\menu_file.lua, src\editor\gui.lua
|
||||
["Save the current document"] = "Guardar el documento actual", -- src\editor\menu_file.lua
|
||||
["Saved auto-recover at %s."] = "Guardar autorrecuperación en %s.", -- src\editor\commands.lua
|
||||
["Scope"] = nil, -- src\editor\findreplace.lua
|
||||
["Scratchpad error"] = "Error en el borrador", -- src\editor\debugger.lua
|
||||
["Select &All"] = "Seleccionar todo", -- src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["Searching for"] = nil, -- src\editor\findreplace.lua
|
||||
["Sel: %d/%d"] = nil, -- src\editor\editor.lua
|
||||
["Select &All"] = "Seleccionar todo", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["Select all text in the editor"] = "Seleccionar todo el texto en el editor", -- src\editor\menu_edit.lua
|
||||
["Select And Find Next"] = nil, -- src\editor\menu_search.lua
|
||||
["Select And Find Previous"] = nil, -- src\editor\menu_search.lua
|
||||
["Select the word under cursor and find its next occurrence"] = nil, -- src\editor\menu_search.lua
|
||||
["Select the word under cursor and find its previous occurrence"] = nil, -- src\editor\menu_search.lua
|
||||
["Set From Current File"] = nil, -- src\editor\menu_project.lua
|
||||
["Set project directory from current file"] = "Establecer el directorio del proyecto del archivo actual", -- src\editor\menu_project.lua, src\editor\gui.lua
|
||||
["Set project directory from current file"] = "Establecer el directorio del proyecto del archivo actual", -- src\editor\menu_project.lua
|
||||
["Set the interpreter to be used"] = "Establecer el intérprete a ser usado", -- src\editor\menu_project.lua
|
||||
["Set the project directory to be used"] = nil, -- src\editor\menu_project.lua
|
||||
["Set the project directory to be used"] = nil, -- src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Settings: System"] = nil, -- src\editor\menu_edit.lua
|
||||
["Settings: User"] = nil, -- src\editor\menu_edit.lua
|
||||
["Show &Tooltip"] = "Ver tooltip", -- src\editor\menu_edit.lua
|
||||
["Show All Files"] = nil, -- src\editor\filetree.lua
|
||||
["Show Hidden Files"] = nil, -- src\editor\filetree.lua
|
||||
["Show Location"] = nil, -- src\editor\gui.lua, src\editor\filetree.lua
|
||||
["Show all files"] = nil, -- src\editor\filetree.lua
|
||||
["Show files previously hidden"] = nil, -- src\editor\filetree.lua
|
||||
["Show tooltip for current position; place cursor after opening bracket of function"] = "Ver tooltip para la posición actual; posicionar el cursor después de abrir el paréntisis de los argumentos de la función", -- src\editor\menu_edit.lua
|
||||
["Sort selected lines"] = "Clasificar las líneas seleccionadas", -- src\editor\menu_search.lua
|
||||
["Show/Hide the status bar"] = nil, -- src\editor\menu_view.lua
|
||||
["Show/Hide the toolbar"] = nil, -- src\editor\menu_view.lua
|
||||
["Sort selected lines"] = "Clasificar las líneas seleccionadas", -- src\editor\menu_edit.lua
|
||||
["Source"] = nil, -- src\editor\menu_edit.lua
|
||||
["Stack"] = nil, -- src\editor\debugger.lua
|
||||
["Start &Debugging"] = "Comenzar depuración", -- src\editor\menu_project.lua
|
||||
["Start debugging"] = "Comenzar depuración", -- src\editor\menu_project.lua, src\editor\gui.lua
|
||||
["Start or continue debugging"] = nil, -- src\editor\menu_project.lua
|
||||
["Step &Into"] = "Paso dentro", -- src\editor\menu_project.lua
|
||||
["Step &Over"] = "Paso sin entrar", -- src\editor\menu_project.lua
|
||||
["Step O&ut"] = "Paso fuera", -- src\editor\menu_project.lua
|
||||
["Step into"] = "Paso dentro", -- src\editor\menu_project.lua, src\editor\gui.lua
|
||||
["Step out of the current function"] = "Hasta salir de la función actual", -- src\editor\menu_project.lua, src\editor\gui.lua
|
||||
["Step over"] = "Paso sin entrar", -- src\editor\menu_project.lua, src\editor\gui.lua
|
||||
["Stop the currently running process"] = "Parar el proceso en ejecución", -- src\editor\menu_project.lua, src\editor\gui.lua
|
||||
["Step into"] = "Paso dentro", -- src\editor\menu_project.lua
|
||||
["Step out of the current function"] = "Hasta salir de la función actual", -- src\editor\menu_project.lua
|
||||
["Step over"] = "Paso sin entrar", -- src\editor\menu_project.lua
|
||||
["Stop debugging and continue running the process"] = nil, -- src\editor\menu_project.lua
|
||||
["Stop the currently running process"] = "Parar el proceso en ejecución", -- src\editor\menu_project.lua
|
||||
["Switch to or from full screen mode"] = "Conmutar el modo de pantalla completa", -- src\editor\menu_view.lua
|
||||
["Text not found."] = nil, -- src\editor\findreplace.lua
|
||||
["The API file must be located in a subdirectory of the API directory."] = "El archivo de API debe ser almacenado en un subdirectorio del directorio de API.", -- src\editor\autocomplete.lua
|
||||
["Toggle Bookmark"] = nil, -- src\editor\menu_edit.lua
|
||||
["Toggle Break&point"] = "Conmutar punto de ruptura", -- src\editor\menu_project.lua
|
||||
["Toggle breakpoint"] = "Conmutar punto de ruptura", -- src\editor\menu_project.lua, src\editor\gui.lua
|
||||
["Toggle bookmark"] = nil, -- src\editor\menu_edit.lua
|
||||
["Toggle breakpoint"] = "Conmutar punto de ruptura", -- src\editor\menu_project.lua
|
||||
["Tr&ace"] = "Traza", -- src\editor\menu_project.lua
|
||||
["Trace execution showing each executed line"] = "Traza de ejecución mostrando cada línea ejecutada", -- src\editor\menu_project.lua
|
||||
["Unable to create directory '%s'."] = nil, -- src\editor\filetree.lua
|
||||
["Unable to create file '%s'."] = nil, -- src\editor\filetree.lua
|
||||
["Unable to delete directory '%s': %s"] = nil, -- src\editor\filetree.lua
|
||||
["Unable to load file '%s'."] = "No se pudo cargar el archivo '%s'.", -- src\editor\commands.lua
|
||||
["Unable to rename file '%s'."] = nil, -- src\editor\filetree.lua
|
||||
["Unable to save file '%s': %s"] = "No se pudo guardar el archivo '%s': %s", -- src\editor\commands.lua
|
||||
["Unable to stop program (pid: %d), code %d."] = "No se puedo parar el programa (pid: %d), código %d.", -- src\editor\debugger.lua
|
||||
["Undo last edit"] = "Deshacer la última edición", -- src\editor\menu_edit.lua
|
||||
@@ -192,14 +292,20 @@ return {
|
||||
["Use '%s' to show line endings and '%s' to convert them."] = nil, -- src\editor\commands.lua
|
||||
["Use 'clear' to clear the shell output and the history."] = "Usa 'clear' para limpiar la consola de salida y el historial.", -- src\editor\shellbox.lua
|
||||
["Use Shift-Enter for multiline code."] = "Usa <Shift-Enter> para código multilínea.", -- src\editor\shellbox.lua
|
||||
["Value"] = "Valor", -- src\editor\debugger.lua
|
||||
["View the outline window"] = nil, -- src\editor\menu_view.lua
|
||||
["View the output/console window"] = "Ver ventana de salida/consola", -- src\editor\menu_view.lua
|
||||
["View the project/filetree window"] = "Ver la ventana de proyecto/árbol de archivos", -- src\editor\menu_view.lua
|
||||
["View the stack window"] = "Ver la ventana de la pila de ejecución", -- src\editor\menu_view.lua, src\editor\gui.lua
|
||||
["View the watch window"] = "Ver la ventana de observación", -- src\editor\menu_view.lua, src\editor\gui.lua
|
||||
["View the stack window"] = "Ver la ventana de la pila de ejecución", -- src\editor\menu_view.lua
|
||||
["View the watch window"] = "Ver la ventana de observación", -- src\editor\menu_view.lua
|
||||
["Watch"] = nil, -- src\editor\debugger.lua
|
||||
["Welcome to the interactive Lua interpreter."] = "Bienvenido al intérprete interactico de Lua.", -- src\editor\shellbox.lua
|
||||
["Wrap ar&ound"] = nil, -- src\editor\findreplace.lua
|
||||
["You must save the program first."] = "Debes guardar el programa primero", -- src\editor\commands.lua
|
||||
["on line %d"] = "en la línea %d", -- src\editor\debugger.lua, src\editor\commands.lua
|
||||
["traced %d instruction"] = {"%d instrucción trazada", "%d instrucciones trazadas"} -- src\editor\debugger.lua
|
||||
["Zoom In"] = nil, -- src\editor\menu_view.lua
|
||||
["Zoom Out"] = nil, -- src\editor\menu_view.lua
|
||||
["Zoom to 100%"] = nil, -- src\editor\menu_view.lua
|
||||
["Zoom"] = nil, -- src\editor\menu_view.lua
|
||||
["on line %d"] = "en la línea %d", -- src\editor\debugger.lua, src\editor\editor.lua, src\editor\commands.lua
|
||||
["traced %d instruction"] = {"%d instrucción trazada", "%d instrucciones trazadas"}, -- src\editor\debugger.lua
|
||||
["unknown error"] = nil, -- src\editor\debugger.lua
|
||||
}
|
||||
|
||||
254
cfg/i18n/fr.lua
254
cfg/i18n/fr.lua
@@ -2,15 +2,20 @@ return {
|
||||
[0] = function(c) return c == 1 and 1 or 2 end, -- plural
|
||||
["%d instance"] = {"%d occurrence", "%d occurrences"}, -- src\editor\findreplace.lua
|
||||
["%s event failed: %s"] = "L'événement %s a échoué : %s", -- src\editor\package.lua
|
||||
["&About"] = "À &propos", -- src\editor\menu_help.lua
|
||||
["&About"] = "&À propos", -- src\editor\menu_help.lua
|
||||
["&Add Watch"] = "&Ajouter une expression", -- src\editor\debugger.lua
|
||||
["&Break"] = "&Interrompre", -- src\editor\menu_project.lua
|
||||
["&Close Page"] = "&Fermer la page", -- src\editor\menu_file.lua, src\editor\gui.lua
|
||||
["&Close Page"] = "&Fermer la page", -- src\editor\gui.lua, src\editor\menu_file.lua
|
||||
["&Community"] = "&Communauté", -- src\editor\menu_help.lua
|
||||
["&Compile"] = "&Compiler", -- src\editor\menu_project.lua
|
||||
["&Copy"] = "Co&pier", -- src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Copy"] = "Co&pier", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Default Layout"] = "Affichage par &défaut", -- src\editor\menu_view.lua
|
||||
["&Delete Watch"] = "&Supprimer une expression", -- src\editor\debugger.lua
|
||||
["&Delete"] = "&Supprimer", -- src\editor\filetree.lua
|
||||
["&Documentation"] = "&Documentation", -- src\editor\menu_help.lua
|
||||
["&Down"] = "Vers le &bas", -- src\editor\findreplace.lua
|
||||
["&Edit Project Directory"] = "&Modifier le répertoire de projet", -- src\editor\filetree.lua
|
||||
["&Edit Value"] = "&Modifier une valeur", -- src\editor\debugger.lua
|
||||
["&Edit Watch"] = "&Modifier une expression", -- src\editor\debugger.lua
|
||||
["&Edit"] = "É&dition", -- src\editor\menu_edit.lua
|
||||
["&File"] = "&Fichier", -- src\editor\menu_file.lua
|
||||
@@ -18,131 +23,171 @@ return {
|
||||
["&Find Next"] = "&Rechercher", -- src\editor\findreplace.lua
|
||||
["&Find"] = "&Rechercher", -- src\editor\menu_search.lua
|
||||
["&Fold/Unfold All"] = "Re&plier/Déplier tout", -- src\editor\menu_edit.lua
|
||||
["&Goto Line"] = "&Aller à la ligne", -- src\editor\menu_search.lua
|
||||
["&Frequently Asked Questions"] = "&Foire aux questions" , -- src\editor\menu_help.lua
|
||||
["&Getting Started Guide"] = "&Guide de prise en main", -- src\editor\menu_help.lua
|
||||
["&Help"] = "Aid&e", -- src\editor\menu_help.lua
|
||||
["&New Directory"] = "&Nouveau répertoire", -- src\editor\filetree.lua
|
||||
["&New"] = "&Nouveau", -- src\editor\menu_file.lua
|
||||
["&Open..."] = "&Ouvrir...", -- src\editor\menu_file.lua
|
||||
["&Output/Console Window"] = "&Sortie/Console", -- src\editor\menu_view.lua
|
||||
["&Paste"] = "Co&ller", -- src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Project"] = "&Projet", -- src\editor\menu_project.lua, src\editor\inspect.lua
|
||||
["&Redo"] = "&Rétablir", -- src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Paste"] = "Co&ller", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Project Page"] = "&Site web de ZeroBrane", -- src\editor\menu_help.lua
|
||||
["&Project"] = "&Projet", -- src\editor\menu_project.lua
|
||||
["&Redo"] = "&Rétablir", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Rename"] = "&Renommer", -- src\editor\filetree.lua
|
||||
["&Replace All"] = "Remplacer &tout", -- src\editor\findreplace.lua
|
||||
["&Replace"] = "Re&mplacer", -- src\editor\findreplace.lua, src\editor\menu_search.lua
|
||||
["&Run"] = "&Exécuter", -- src\editor\menu_project.lua
|
||||
["&Save"] = "&Enregistrer", -- src\editor\menu_file.lua, src\editor\gui.lua
|
||||
["&Save"] = "&Enregistrer", -- src\editor\gui.lua, src\editor\menu_file.lua
|
||||
["&Search"] = "&Recherche", -- src\editor\menu_search.lua
|
||||
["&Sort"] = "&Trier", -- src\editor\menu_search.lua
|
||||
["&Sort"] = "&Trier", -- src\editor\menu_edit.lua
|
||||
["&Stack Window"] = "&Pile d'exécution", -- src\editor\menu_view.lua
|
||||
["&Start Debugger Server"] = "Lancer le &serveur de débogage", -- src\editor\menu_project.lua
|
||||
["&Status Bar"] = "Barre d'&état", -- src\editor\menu_view.lua
|
||||
["&Subdirectories"] = "&Sous-répertoires", -- src\editor\findreplace.lua
|
||||
["&Undo"] = "&Annuler", -- src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Tool Bar"] = "Barre d'&outils", -- src\editor\menu_view.lua
|
||||
["&Tutorials"] = "&Tutoriels", -- src\editor\menu_help.lua
|
||||
["&Undo"] = "&Annuler", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Up"] = "Vers le &haut", -- src\editor\findreplace.lua
|
||||
["&View"] = "&Affichage", -- src\editor\menu_view.lua
|
||||
["&Watch Window"] = "&Expressions espionnes", -- src\editor\menu_view.lua
|
||||
["&Watch Window"] = "E&xpressions espionnes", -- src\editor\menu_view.lua
|
||||
[".&bak on Replace"] = ".&bak avant remplacement", -- src\editor\findreplace.lua
|
||||
["About %s"] = "À propos de %s", -- src\editor\menu_help.lua
|
||||
["Add Watch Expression"] = "Ajouter une expression", -- src\editor\editor.lua
|
||||
["Add To Scratchpad"] = "Ajouter au brouillon", -- src\editor\editor.lua
|
||||
["Add Watch Expression"] = "Ajouter une expression espionne", -- src\editor\editor.lua
|
||||
["All files"] = "Tous les fichiers", -- src\editor\commands.lua
|
||||
["Allow external process to start debugging"] = "Autoriser les processus externes à lancer le débogage", -- src\editor\menu_project.lua
|
||||
["Analyze the source code"] = "Analyser le code source", -- src\editor\inspect.lua
|
||||
["Allow external process to start debugging"] = "Autorise les processus externes à lancer le débogage", -- src\editor\menu_project.lua
|
||||
["Analyze the source code"] = "Analyse le code source", -- src\editor\inspect.lua
|
||||
["Analyze"] = "Analyser", -- src\editor\inspect.lua
|
||||
["Auto Complete Identifiers"] = "Auto-compléter les identifiants", -- src\editor\menu_edit.lua
|
||||
["Auto complete while typing"] = "Auto-compléter lors de la saisie", -- src\editor\menu_edit.lua
|
||||
["Break execution at the next executed line of code"] = "Interrompre l'exécution à la ligne suivante", -- src\editor\menu_project.lua, src\editor\gui.lua
|
||||
["C&lear Output Window"] = "E&ffacer la fenêtre de sortie", -- src\editor\menu_project.lua
|
||||
["Auto complete while typing"] = "Auto-complète lors de la saisie", -- src\editor\menu_edit.lua
|
||||
["Bookmark"] = "Marque-pages", -- src\editor\menu_edit.lua
|
||||
["Break execution at the next executed line of code"] = "Interrompt l'exécution à la ligne suivante", -- src\editor\menu_project.lua
|
||||
["C&lear Output Window"] = "E&ffacer la fenêtre de sortie", -- src\editor\gui.lua, src\editor\menu_project.lua
|
||||
["C&omment/Uncomment"] = "Co&mmenter/Décommenter", -- src\editor\menu_edit.lua
|
||||
["Can't debug the script in the active editor window."] = "Impossible de déboguer le script dans la fenêtre d'édition active.", -- src\editor\debugger.lua
|
||||
["Can't evaluate the expression while the application is running."] = "Impossible d'évaluer l'expression pendant que l'application est en cours d'exécution.", -- src\editor\debugger.lua
|
||||
["Can't find file '%s' in the current project to activate for debugging. Update the project or open the file in the editor before debugging."] = "Impossible de trouver le fichier '%s' dans le projet courant pour permettre le débogage. Mettez le projet à jour ou ouvrez le fichier dans l'éditeur avant débogage.", -- src\editor\debugger.lua
|
||||
["Can't open file '%s': %s"] = "Impossible d'ouvrir le fichier '%s': %s", -- src\editor\singleinstance.lua
|
||||
["Can't process auto-recovery record; invalid format: %s."] = "Impossible de lire la récupération automatique ; format invalide : %s.", -- src\editor\commands.lua
|
||||
["Can't run the entry point script ('%s')."] = "Impossible d'exécuter le point d'entrée du script ('%s').", -- src\editor\debugger.lua
|
||||
["Can't start debugger server at %s:%d: %s."] = "Impossible de lancer le serveur de débogage à %s:%d: %s." , -- src\editor\debugger.lua
|
||||
["Can't start debugging session due to internal error '%s'."] = "Impossible de lancer la session de débogage : erreur interne '%s'.", -- src\editor\debugger.lua
|
||||
["Can't start debugging without an opened file or with the current file not being saved ('%s')."] = "Impossible de lancer le débogage si aucun fichier n'est ouvert ou si le fichier courant n'a pas été enregistré ('%s').", -- src\editor\debugger.lua
|
||||
["Can't stop debugger server as it is not started."] = "Impossible d'arrêter le serveur de débogage car il n'a pas été démarré.", -- src\editor\debugger.lua
|
||||
["Cancel"] = "Annuler", -- src\editor\findreplace.lua
|
||||
["Choose ..."] = "Choisir...", -- src\editor\menu_project.lua
|
||||
["Choose a project directory"] = "Choisissez un répertoire de projet", -- src\editor\findreplace.lua, src\editor\menu_project.lua
|
||||
["Clear &Dynamic Words"] = "Effacer les mots &dynamiques", -- src\editor\menu_edit.lua
|
||||
["Clear the output window before compiling or debugging"] = "Effacer la fenêtre de sortie avant compilation ou débogage", -- src\editor\menu_project.lua
|
||||
["Cancelled by the user."] = "Annulé par l'utilisateur.", -- src\editor\findreplace.lua
|
||||
["Choose a project directory"] = "Choisir un répertoire de projet", -- src\editor\findreplace.lua, src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Choose..."] = "Choisir...", -- src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Clear Items"] = "Effacer les éléments", -- src\editor\menu_file.lua
|
||||
["Clear items from this list"] = "Efface les éléments de cette liste", -- src\editor\menu_file.lua
|
||||
["Clear the output window before compiling or debugging"] = "Efface la fenêtre de sortie avant compilation ou débogage", -- src\editor\menu_project.lua
|
||||
["Close &Other Pages"] = "Fermer les &autres pages", -- src\editor\gui.lua
|
||||
["Close A&ll Pages"] = "Fermer &toutes les pages", -- src\editor\gui.lua
|
||||
["Close the current editor window"] = "Fermer la fenêtre d'édition active", -- src\editor\menu_file.lua
|
||||
["Close the current editor window"] = "Ferme la fenêtre d'édition courante", -- src\editor\menu_file.lua
|
||||
["Co&ntinue"] = "Co&ntinuer", -- src\editor\menu_project.lua
|
||||
["Col: %d"] = "Col : %d", -- src\editor\editor.lua
|
||||
["Comment or uncomment current or selected lines"] = "Commenter ou décommenter les lignes courantes ou sélectionnées", -- src\editor\menu_edit.lua
|
||||
["Compilation error"] = "Erreur de compilation", -- src\editor\debugger.lua, src\editor\commands.lua
|
||||
["Command Line Parameters..."] = "Paramètres de ligne de commande...", -- src\editor\menu_project.lua
|
||||
["Command line parameters"] = "Paramètres de ligne de commande", -- src\editor\menu_project.lua
|
||||
["Comment or uncomment current or selected lines"] = "Commente ou décommente les lignes courantes ou sélectionnées", -- src\editor\menu_edit.lua
|
||||
["Compilation error"] = "Erreur de compilation", -- src\editor\commands.lua, src\editor\debugger.lua
|
||||
["Compilation successful; %.0f%% success rate (%d/%d)."] = "Compilation réussie ; taux de succès : %.0f%% (%d/%d).", -- src\editor\commands.lua
|
||||
["Compile the current file"] = "Сompiler le fichier courant", -- src\editor\menu_project.lua
|
||||
["Compile the current file"] = "Сompile le fichier courant", -- src\editor\menu_project.lua
|
||||
["Complete &Identifier"] = "Compléter l'&identifiant", -- src\editor\menu_edit.lua
|
||||
["Complete the current identifier"] = "Compléter l'identifiant courant", -- src\editor\menu_edit.lua
|
||||
["Copy selected text to clipboard"] = "Copier le texte sélectionné dans le presse-papiers", -- src\editor\menu_edit.lua
|
||||
["Complete the current identifier"] = "Complète l'identifiant courant", -- src\editor\menu_edit.lua
|
||||
["Consider removing backslash from escape sequence '%s'."] = "Essayez de supprimer les antislashs dans '%s'.", -- src\editor\commands.lua
|
||||
["Copy Full Path"] = "Copier le chemin absolu", -- src\editor\gui.lua, src\editor\filetree.lua
|
||||
["Copy selected text to clipboard"] = "Copie le texte sélectionné dans le presse-papiers", -- src\editor\menu_edit.lua
|
||||
["Correct &Indentation"] = "Corriger l'&indentation", -- src\editor\menu_edit.lua
|
||||
["Couldn't activate file '%s' for debugging; continuing without it."] = "Impossible d'activer le fichier '%s' pour débogage ; poursuite du processus en ignorant le fichier.", -- src\editor\debugger.lua
|
||||
["Create an empty document"] = "Créer un document vierge", -- src\editor\menu_file.lua, src\editor\gui.lua
|
||||
["Cu&t"] = "&Couper", -- src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["Cut selected text to clipboard"] = "Couper le texte sélectionné et copier dans le presse-papiers", -- src\editor\menu_edit.lua
|
||||
["Create an empty document"] = "Crée un document vierge", -- src\editor\menu_file.lua
|
||||
["Cu&t"] = "&Couper", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["Cut selected text to clipboard"] = "Coupe le texte sélectionné et le copie dans le presse-papiers", -- src\editor\menu_edit.lua
|
||||
["Debugger server started at %s:%d."] = "Serveur de débogage démarré à %s:%d.", -- src\editor\debugger.lua
|
||||
["Debugger server stopped at %s:%d."] = "Serveur de débogage stoppé à %s:%d.", -- src\editor\debugger.lua
|
||||
["Debugging session completed (%s)."] = "Session de débogage terminée (%s).", -- src\editor\debugger.lua
|
||||
["Debugging session started in '%s'."] = "Session de débogage démarrée dans '%s'.", -- src\editor\debugger.lua
|
||||
["Debugging suspended at %s:%s (couldn't activate the file)."] = "Débogage interrompu à %s:%s (impossible d'activer le fichier).", -- src\editor\debugger.lua
|
||||
["Debugging suspended at '%s:%s' (couldn't activate the file)."] = "Débogage interrompu à '%s:%s' (impossible d'activer le fichier).", -- src\editor\debugger.lua
|
||||
["Detach &Process"] = "Détacher le p&rocessus", -- src\editor\menu_project.lua
|
||||
["Directory"] = "Répertoire ", -- src\editor\findreplace.lua
|
||||
["Do you want to delete '%s'?"] = "Voulez-vous effacer '%s' ?", -- src\editor\filetree.lua
|
||||
["Do you want to overwrite it?"] = "Voulez-vous l'écraser ?", -- src\editor\commands.lua
|
||||
["Do you want to reload it?"] = "Voulez-vous le recharger ?", -- src\editor\editor.lua
|
||||
["Do you want to save the changes to '%s'?"] = "Voulez-vous enregistrer les modifications dans '%s' ?", -- src\editor\commands.lua
|
||||
["E&xit"] = "&Quitter", -- src\editor\menu_file.lua
|
||||
["Enter Lua code and press Enter to run it."] = "Saisissez du code Lua et appuyez sur <Entrée> pour l´exécuter.", -- src\editor\shellbox.lua
|
||||
["Enter line number"] = "Entrez le numéro de ligne", -- src\editor\menu_search.lua
|
||||
["Enter command line parameters (use Cancel to clear)"] = "Saisissez les paramètres de ligne de commande (cliquez sur Annuler pour effacer)", -- src\editor\menu_project.lua
|
||||
["Enter replacement text"] = "Saisissez le texte de remplacement", -- src\editor\editor.lua
|
||||
["Error while loading API file: %s"] = "Erreur lors du chargement du fichier d'API : %s", -- src\editor\autocomplete.lua
|
||||
["Error while loading configuration file: %s"] = "Erreur lors du chargement du fichier de configuration : %s", -- src\editor\style.lua
|
||||
["Error while processing API file: %s"] = "Erreur lors de la lecture du fichier d'API : %s", -- src\editor\autocomplete.lua
|
||||
["Error while processing configuration file: %s"] = "Erreur lors de la lecture du fichier de configuration : %s", -- src\editor\style.lua
|
||||
["Error"] = "Erreur", -- src\editor\commands.lua
|
||||
["Evaluate In Console"] = "Évaluer dans la console", -- src\editor\editor.lua
|
||||
["Execute the current project/file and keep updating the code to see immediate results"] = "Exécuter le projet/fichier courant en mettant le code à jour afin de voir les résultats en temps réel", -- src\editor\menu_project.lua
|
||||
["Execute the current project/file"] = "Exécuter le projet/fichier courant", -- src\editor\menu_project.lua
|
||||
["Execute the current project/file and keep updating the code to see immediate results"] = "Exécute le projet/fichier courant en prenant en compte à la volée les modifications de code", -- src\editor\menu_project.lua
|
||||
["Execute the current project/file"] = "Exécute le projet/fichier courant", -- src\editor\menu_project.lua
|
||||
["Execution error"] = "Erreur d'exécution", -- src\editor\debugger.lua
|
||||
["Exit program"] = "Quitter le programme", -- src\editor\menu_file.lua
|
||||
["Expr"] = "Expr.", -- src\editor\debugger.lua
|
||||
["Expression"] = "Expression", -- src\editor\debugger.lua
|
||||
["Exit program"] = "Quitte le programme", -- src\editor\menu_file.lua
|
||||
["File '%s' has been modified on disk."] = "Le fichier '%s' a été modifié sur le disque.", -- src\editor\editor.lua
|
||||
["File '%s' has more recent timestamp than restored '%s'; please review before saving."] = "Le fichier '%s' a un horodatage plus récent que celui restauré '%s' ; veuillez vérifier avant d'enregistrer.", -- src\editor\commands.lua
|
||||
["File '%s' no longer exists."] = "Le fichier '%s' n'existe plus.", -- src\editor\editor.lua, src\editor\menu_file.lua
|
||||
["File '%s' is missing and can't be recovered."] = "Le fichier '%s' est manquant et ne peut pas être récupéré.", -- src\editor\commands.lua
|
||||
["File '%s' no longer exists."] = "Le fichier '%s' n'existe plus.", -- src\editor\menu_file.lua, src\editor\editor.lua
|
||||
["File Type"] = "Type de fichier ", -- src\editor\findreplace.lua
|
||||
["File already exists."] = "Le fichier existe déjà.", -- src\editor\commands.lua
|
||||
["File history"] = "Historique de fichier", -- src\editor\menu_file.lua
|
||||
["Find &In Files"] = "Rec&hercher dans les fichiers", -- src\editor\menu_search.lua
|
||||
["Find &Next"] = "Rechercher l'occurrence &suivante", -- src\editor\menu_search.lua
|
||||
["Find &Previous"] = "Rechercher l'occurrence &précédente", -- src\editor\menu_search.lua
|
||||
["Find &Next"] = "Rechercher le &suivant", -- src\editor\menu_search.lua
|
||||
["Find &Previous"] = "Rechercher le &précédent", -- src\editor\menu_search.lua
|
||||
["Find In Files"] = "Rechercher dans les fichiers", -- src\editor\findreplace.lua
|
||||
["Find and replace text in files"] = "Rechercher et remplacer le texte dans les fichiers", -- src\editor\menu_search.lua
|
||||
["Find and replace text"] = "Rechercher et remplacer le texte", -- src\editor\menu_search.lua, src\editor\gui.lua
|
||||
["Find text in files"] = "Rechercher le texte dans les fichiers", -- src\editor\menu_search.lua
|
||||
["Find text"] = "Rechercher le texte", -- src\editor\menu_search.lua, src\editor\gui.lua
|
||||
["Find and insert library function"] = "Recherche et insère une fonction d'une bibliothèque", -- src\editor\menu_search.lua
|
||||
["Find and replace text in files"] = "Recherche et remplace le texte dans les fichiers", -- src\editor\menu_search.lua
|
||||
["Find and replace text"] = "Recherche et remplace le texte", -- src\editor\menu_search.lua
|
||||
["Find text in files"] = "Recherche le texte dans les fichiers", -- src\editor\menu_search.lua
|
||||
["Find text"] = "Recherche le texte", -- src\editor\menu_search.lua
|
||||
["Find the earlier text occurence"] = "Recherche l'occurrence précédente du texte", -- src\editor\menu_search.lua
|
||||
["Find the next text occurrence"] = "Recherche l'occurrence suivante du texte", -- src\editor\menu_search.lua
|
||||
["Find"] = "Rechercher ", -- src\editor\findreplace.lua
|
||||
["Fold or unfold all code folds"] = "Replier ou déplier tous les blocs de code", -- src\editor\menu_edit.lua
|
||||
["Found auto-recovery record and restored saved session."] = "Une récupération automatique a été trouvé et la session a été restaurée.", -- src\editor\commands.lua
|
||||
["Fold or unfold all code folds"] = "Replie ou déplie tous les blocs de code", -- src\editor\menu_edit.lua
|
||||
["Found auto-recovery record and restored saved session."] = "Une récupération automatique a été trouvée et la session a été restaurée.", -- src\editor\commands.lua
|
||||
["Found"] = "Occurrences trouvées :", -- src\editor\findreplace.lua
|
||||
["Full &Screen"] = "&Plein écran", -- src\editor\menu_view.lua
|
||||
["Full &Screen"] = "Plein é&cran", -- src\editor\menu_view.lua
|
||||
["Go To Definition"] = "Aller à la définition", -- src\editor\editor.lua
|
||||
["Go to a selected line"] = "Aller à la ligne sélectionnée", -- src\editor\menu_search.lua
|
||||
["Goto Line"] = "Aller à la ligne", -- src\editor\menu_search.lua
|
||||
["Go To File..."] = "Aller au fichier...", -- src\editor\menu_search.lua
|
||||
["Go To Line..."] = "Aller à la ligne...", -- src\editor\menu_search.lua
|
||||
["Go To Next Bookmark"] = "Aller au marque-page suivant", -- src\editor\menu_edit.lua
|
||||
["Go To Previous Bookmark"] = "Aller au marque-page précédent", -- src\editor\menu_edit.lua
|
||||
["Go To Symbol..."] = "Aller au symbole...", -- src\editor\menu_search.lua
|
||||
["Go to file"] = "Permet d'accéder directement à un fichier", -- src\editor\menu_search.lua
|
||||
["Go to line"] = "Permet d'accéder directement à une ligne", -- src\editor\menu_search.lua
|
||||
["Go to symbol"] = "Permet d'accéder directement à un symbole", -- src\editor\menu_search.lua
|
||||
["Hide '.%s' Files"] = "Masquer les fichiers '.%s'", -- src\editor\filetree.lua
|
||||
["INS"] = "INS", -- src\editor\editor.lua
|
||||
["Ignored error in debugger initialization code: %s."] = "Une erreur dans le code d'initialisation du debogage a été ignorée: %s.", -- src\editor\debugger.lua
|
||||
["In Files"] = "Dans les fichiers", -- src\editor\findreplace.lua
|
||||
["Jump to a function definition..."] = "Aller à la définition de fonction...", -- src\editor\editor.lua
|
||||
["Insert Library Function..."] = "Insérer une fonction d'une bibliothèque...", -- src\editor\menu_search.lua
|
||||
["Known Files"] = "Fichiers connus", -- src\editor\commands.lua
|
||||
["Ln: %d"] = "Lig : %d", -- src\editor\editor.lua
|
||||
["Local console"] = "Console locale", -- src\editor\shellbox.lua, src\editor\gui.lua
|
||||
["Local console"] = "Console locale", -- src\editor\gui.lua, src\editor\shellbox.lua
|
||||
["Lua &Interpreter"] = "Interpréteur L&ua", -- src\editor\menu_project.lua
|
||||
["Mapped remote request for '%s' to '%s'."] = "La requête distante pour '%s' a été associée à '%s'.", -- src\editor\debugger.lua
|
||||
["Match &case"] = "Respecter la &casse", -- src\editor\findreplace.lua
|
||||
["Match &whole word"] = "&Mot entier uniquement", -- src\editor\findreplace.lua
|
||||
["Mixed end-of-line encodings detected."] = "Plusieurs codages de fin de ligne détectés.", -- src\editor\commands.lua
|
||||
["Mixed end-of-line encodings detected."] = "Plusieurs codages de fin de ligne ont été détectés.", -- src\editor\commands.lua
|
||||
["Navigate"] = "Naviguer", -- src\editor\menu_search.lua
|
||||
["New &File"] = "Nouveau &fichier", -- src\editor\filetree.lua
|
||||
["OVR"] = "OVR", -- src\editor\editor.lua
|
||||
["Open an existing document"] = "Ouvrir un document existant", -- src\editor\menu_file.lua, src\editor\gui.lua
|
||||
["Open With Default Program"] = "Ouvrir avec le programme par défaut", -- src\editor\filetree.lua
|
||||
["Open an existing document"] = "Ouvre un document existant", -- src\editor\menu_file.lua
|
||||
["Open file"] = "Ouvrir un fichier", -- src\editor\commands.lua
|
||||
["Options"] = "Options", -- src\editor\findreplace.lua
|
||||
["Output (running)"] = "Sortie (en cours d'exécution)", -- src\editor\output.lua
|
||||
["Output"] = "Sortie", -- src\editor\output.lua, src\editor\settings.lua, src\editor\gui.lua
|
||||
["Paste text from the clipboard"] = "Coller le texte depuis le presse-papiers", -- src\editor\menu_edit.lua
|
||||
["Outline Window"] = "Structure", -- src\editor\menu_view.lua
|
||||
["Outline"] = "Structure", -- src\editor\outline.lua
|
||||
["Output (running)"] = "Sortie (en cours d'exécution)", -- src\editor\debugger.lua, src\editor\output.lua
|
||||
["Output (suspended)"] = "Sortie (interrompu)", -- src\editor\debugger.lua
|
||||
["Output"] = "Sortie", -- src\editor\debugger.lua, src\editor\output.lua, src\editor\gui.lua, src\editor\settings.lua
|
||||
["Paste text from the clipboard"] = "Colle le texte depuis le presse-papiers", -- src\editor\menu_edit.lua
|
||||
["Preferences"] = "Préférences", -- src\editor\menu_edit.lua
|
||||
["Prepend '!' to force local execution."] = "Préfixez par '!' pour forcer une execution locale.", -- src\editor\shellbox.lua
|
||||
["Prepend '=' to show complex values on multiple lines."] = "Préfixez par '=' pour afficher les valeurs complexes sur plusieurs lignes.", -- src\editor\shellbox.lua
|
||||
["Press cancel to abort."] = "Cliquez sur Annuler pour annuler.", -- src\editor\commands.lua
|
||||
["Program '%s' started in '%s' (pid: %d)."] = "Programme '%s' démarré dans '%s' (pid : %d).", -- src\editor\output.lua
|
||||
@@ -151,86 +196,115 @@ return {
|
||||
["Program starting as '%s'."] = "Programme démarré en tant que '%s'.", -- src\editor\output.lua
|
||||
["Program stopped (pid: %d)."] = "Programme stoppé (pid : %d).", -- src\editor\debugger.lua
|
||||
["Program unable to run as '%s'."] = "Impossible d'exécuter le programme en tant que '%s'.", -- src\editor\output.lua
|
||||
["Project Directory"] = "Répertoire de projet", -- src\editor\menu_project.lua
|
||||
["Project"] = "Projet", -- src\editor\settings.lua, src\editor\gui.lua
|
||||
["Project Directory"] = "Répertoire de projet", -- src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Project history"] = "Historique de projet", -- src\editor\menu_file.lua
|
||||
["Project"] = "Projet", -- src\editor\filetree.lua
|
||||
["Project/&FileTree Window"] = "&Explorateur de projet", -- src\editor\menu_view.lua
|
||||
["Provide command line parameters"] = "Définit les paramètres de ligne de commande", -- src\editor\menu_project.lua
|
||||
["R/O"] = "R/O", -- src\editor\editor.lua
|
||||
["R/W"] = "R/W", -- src\editor\editor.lua
|
||||
["Re&place In Files"] = "Remp&lacer dans les fichiers", -- src\editor\menu_search.lua
|
||||
["Re-indent selected lines"] = "Ré-indente les lignes sélectionnées", -- src\editor\menu_edit.lua
|
||||
["Recent &Projects"] = "&Projets récents", -- src\editor\menu_file.lua
|
||||
["Recent Files"] = "Fichiers récents", -- src\editor\menu_file.lua
|
||||
["Redo last edit undone"] = "Rétablir la dernière modification", -- src\editor\menu_edit.lua
|
||||
["Redo last edit undone"] = "Rétablit la dernière modification", -- src\editor\menu_edit.lua
|
||||
["Refused a request to start a new debugging session as there is one in progress already."] = "Une requête de lancement de débogage a été refusée car une session de débogage est déjà en cours.", -- src\editor\debugger.lua
|
||||
["Regular &expression"] = "&Expression régulière", -- src\editor\findreplace.lua
|
||||
["Remote console"] = "Console à distance", -- src\editor\shellbox.lua
|
||||
["Rename All Instances"] = "Renommer toutes les occurrences", -- src\editor\editor.lua
|
||||
["Replace &All"] = "Remplacer &tout", -- src\editor\findreplace.lua
|
||||
["Replace A&ll"] = "Remplacer &tout", -- src\editor\findreplace.lua
|
||||
["Replace All Selections"] = "Remplacer toutes les sélections", -- src\editor\editor.lua
|
||||
["Replace"] = "Remplacer par ", -- src\editor\findreplace.lua
|
||||
["Replaced an invalid UTF8 character with %s."] = "Un caractère UTF8 invalide a été remplacé par %s.", -- src\editor\commands.lua
|
||||
["Replaced"] = "Occurrences remplacées :", -- src\editor\findreplace.lua
|
||||
["Replacing"] = "Remplacement de", -- src\editor\findreplace.lua
|
||||
["Reset to default layout"] = "Restaurer l'affichage par défaut", -- src\editor\menu_view.lua
|
||||
["Resets the dynamic word list for autocompletion"] = "Réinitialiser la liste des mots dynamiques pour l'auto-complétion", -- src\editor\menu_edit.lua
|
||||
["Reset to default layout"] = "Restaure l'affichage par défaut", -- src\editor\menu_view.lua
|
||||
["Run As Scratchpad"] = "Exécuter comme brouillon", -- src\editor\menu_project.lua
|
||||
["Run as Scratchpad"] = "Exécuter comme brouillon", -- src\editor\menu_project.lua
|
||||
["S&top Debugging"] = "&Arrêter le débogage", -- src\editor\menu_project.lua
|
||||
["S&top Process"] = "&Arrêter le processus", -- src\editor\menu_project.lua
|
||||
["Save &As..."] = "Enregistrer &sous...", -- src\editor\menu_file.lua, src\editor\gui.lua
|
||||
["Save &As..."] = "Enregistrer &sous...", -- src\editor\gui.lua, src\editor\menu_file.lua
|
||||
["Save A&ll"] = "Enregistrer &tout", -- src\editor\menu_file.lua
|
||||
["Save Changes?"] = "Enregistrer les modifications ?", -- src\editor\commands.lua
|
||||
["Save all open documents"] = "Enregistrer tous les documents ouverts", -- src\editor\menu_file.lua, src\editor\gui.lua
|
||||
["Save all open documents"] = "Enregistre tous les documents ouverts", -- src\editor\menu_file.lua
|
||||
["Save file as"] = "Enregistrer le fichier sous", -- src\editor\commands.lua
|
||||
["Save file?"] = "Enregistrer le fichier ?", -- src\editor\commands.lua
|
||||
["Save the current document to a file with a new name"] = "Enregistrer le document courant sous un nouveau nom", -- src\editor\menu_file.lua
|
||||
["Save the current document"] = "Enregistrer le document courant", -- src\editor\menu_file.lua, src\editor\gui.lua
|
||||
["Save the current document to a file with a new name"] = "Enregistre le document courant sous un nouveau nom", -- src\editor\menu_file.lua
|
||||
["Save the current document"] = "Enregistre le document courant", -- src\editor\menu_file.lua
|
||||
["Saved auto-recover at %s."] = "Récup. auto enregistrée à %s.", -- src\editor\commands.lua
|
||||
["Scope"] = "Direction", -- src\editor\findreplace.lua
|
||||
["Scratchpad error"] = "Erreur dans le brouillon", -- src\editor\debugger.lua
|
||||
["Searching for"] = "Recherche de", -- src\editor\findreplace.lua
|
||||
["Select &All"] = "Sélectionner &tout", -- src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["Select all text in the editor"] = "Sélectionner tout le texte dans l'éditeur", -- src\editor\menu_edit.lua
|
||||
["Set From Current File"] = "Définir depuis le fichier courant", -- src\editor\menu_project.lua
|
||||
["Set project directory from current file"] = "Définir le répertoire de projet depuis le fichier courant", -- src\editor\menu_project.lua, src\editor\gui.lua
|
||||
["Set the interpreter to be used"] = "Définir l'interpréteur à utiliser", -- src\editor\menu_project.lua
|
||||
["Set the project directory to be used"] = "Définir le répertoire de projet à utiliser", -- src\editor\menu_project.lua
|
||||
["Sel: %d/%d"] = "Sel: %d/%d", -- src\editor\editor.lua
|
||||
["Select &All"] = "Sélectionner &tout", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["Select all text in the editor"] = "Sélectionne tout le texte dans l'éditeur", -- src\editor\menu_edit.lua
|
||||
["Select And Find Next"] = "Sélectionner et rechercher le suivant", -- src\editor\menu_search.lua
|
||||
["Select And Find Previous"] = "Sélectionner et rerchercher le précédent", -- src\editor\menu_search.lua
|
||||
["Select the word under cursor and find its next occurrence"] = "Sélectionne le mot sous le curseur et recherche son occurence suivante", -- src\editor\menu_search.lua
|
||||
["Select the word under cursor and find its previous occurrence"] = "Sélectionne le mot sous le curseur et recherche son occurence précédente", -- src\editor\menu_search.lua
|
||||
["Set From Current File"] = "Définir à partir du fichier courant", -- src\editor\menu_project.lua
|
||||
["Set project directory from current file"] = "Définit le répertoire de projet à partir du fichier courant", -- src\editor\menu_project.lua
|
||||
["Set the interpreter to be used"] = "Définit l'interpréteur à utiliser", -- src\editor\menu_project.lua
|
||||
["Set the project directory to be used"] = "Définit le répertoire de projet à utiliser", -- src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Settings: System"] = "Paramètres : Système", -- src\editor\menu_edit.lua
|
||||
["Settings: User"] = "Paramètres : Utilisateur", -- src\editor\menu_edit.lua
|
||||
["Show &Tooltip"] = "Afficher l'info-&bulle", -- src\editor\menu_edit.lua
|
||||
["Show All Files"] = "Afficher tous les fichiers", -- src\editor\filetree.lua
|
||||
["Show Hidden Files"] = "Afficher les fichiers masqués", -- src\editor\filetree.lua
|
||||
["Show Location"] = "Afficher l'emplacement", -- src\editor\gui.lua, src\editor\filetree.lua
|
||||
["Show tooltip for current position; place cursor after opening bracket of function"] = "Afficher l'info-bulle pour la position actuelle ; placez le curseur après la parenthèse ouvrante de la fonction", -- src\editor\menu_edit.lua
|
||||
["Sort selected lines"] = "Trier les lignes sélectionnées", -- src\editor\menu_search.lua
|
||||
["Show all files"] = "Affiche tous les fichiers", -- src\editor\filetree.lua
|
||||
["Show files previously hidden"] = "Affiche les fichiers précédemment masqués", -- src\editor\filetree.lua
|
||||
["Show tooltip for current position; place cursor after opening bracket of function"] = "Affiche l'info-bulle pour la position courante ; placez le curseur après la parenthèse ouvrante de la fonction", -- src\editor\menu_edit.lua
|
||||
["Show/Hide the status bar"] = "Affiche/Masque la barre d'état", -- src\editor\menu_view.lua
|
||||
["Show/Hide the toolbar"] = "Affiche/Masque la barre d'outils", -- src\editor\menu_view.lua
|
||||
["Sort selected lines"] = "Trie les lignes sélectionnées", -- src\editor\menu_edit.lua
|
||||
["Source"] = "Code", -- src\editor\menu_edit.lua
|
||||
["Stack"] = "Pile d'exécution", -- src\editor\debugger.lua
|
||||
["Start &Debugging"] = "Lancer le &débogage", -- src\editor\menu_project.lua
|
||||
["Start debugging"] = "Lancer le débogage", -- src\editor\menu_project.lua, src\editor\gui.lua
|
||||
["Start or continue debugging"] = "Démarre ou continue le debogage", -- src\editor\menu_project.lua
|
||||
["Step &Into"] = "Pas à pas détai&llé", -- src\editor\menu_project.lua
|
||||
["Step &Over"] = "Pas à pas so&mmaire", -- src\editor\menu_project.lua
|
||||
["Step O&ut"] = "Pas à pas so&rtant", -- src\editor\menu_project.lua
|
||||
["Step into"] = "Rentrer dans l'instruction suivante", -- src\editor\menu_project.lua, src\editor\gui.lua
|
||||
["Step out of the current function"] = "Sortir de la fonction courante", -- src\editor\menu_project.lua, src\editor\gui.lua
|
||||
["Step over"] = "Enjamber l'instruction suivante", -- src\editor\menu_project.lua, src\editor\gui.lua
|
||||
["Stop the currently running process"] = "Arrêter le processus en cours d'exécution", -- src\editor\menu_project.lua, src\editor\gui.lua
|
||||
["Switch to or from full screen mode"] = "Activer ou désactiver le mode plein écran", -- src\editor\menu_view.lua
|
||||
["Step into"] = "Rentre dans l'instruction suivante", -- src\editor\menu_project.lua
|
||||
["Step out of the current function"] = "Sort de la fonction courante", -- src\editor\menu_project.lua
|
||||
["Step over"] = "Enjambe l'instruction suivante", -- src\editor\menu_project.lua
|
||||
["Stop debugging and continue running the process"] = "Arrête le débogage et continue l'exécution du processus", -- src\editor\menu_project.lua
|
||||
["Stop the currently running process"] = "Arrête le processus en cours d'exécution", -- src\editor\menu_project.lua
|
||||
["Switch to or from full screen mode"] = "Active ou désactive le mode plein écran", -- src\editor\menu_view.lua
|
||||
["Text not found."] = "Texte non trouvé.", -- src\editor\findreplace.lua
|
||||
["The API file must be located in a subdirectory of the API directory."] = "Le fichier d'API doit être placé dans un sous-répertoire du répertoire d'API.", -- src\editor\autocomplete.lua
|
||||
["Toggle Bookmark"] = "Créer/Supprimer un marque-page", -- src\editor\menu_edit.lua
|
||||
["Toggle Break&point"] = "Créer/Supprimer un &point d'arrêt", -- src\editor\menu_project.lua
|
||||
["Toggle breakpoint"] = "Créer ou supprimer un point d'arrêt", -- src\editor\menu_project.lua, src\editor\gui.lua
|
||||
["Toggle bookmark"] = "Crée ou supprime un marque-page", -- src\editor\menu_edit.lua
|
||||
["Toggle breakpoint"] = "Crée ou supprime un point d'arrêt", -- src\editor\menu_project.lua
|
||||
["Tr&ace"] = "&Tracer", -- src\editor\menu_project.lua
|
||||
["Trace execution showing each executed line"] = "Tracer l'exécution en montrant chaque ligne de code exécutée", -- src\editor\menu_project.lua
|
||||
["Trace execution showing each executed line"] = "Trace l'exécution en affichant chaque ligne de code exécutée", -- src\editor\menu_project.lua
|
||||
["Unable to create directory '%s'."] = "Impossible de créer le répertoire '%s'.", -- src\editor\filetree.lua
|
||||
["Unable to create file '%s'."] = "Impossible de créer le fichier '%s'.", -- src\editor\filetree.lua
|
||||
["Unable to delete directory '%s': %s"] = "Impossible de supprimer le répertoire '%s': %s", -- src\editor\filetree.lua
|
||||
["Unable to load file '%s'."] = "Impossible de charger le le fichier '%s'.", -- src\editor\commands.lua
|
||||
["Unable to rename file '%s'."] = "Impossible de renommer le fichier '%s'.", -- src\editor\filetree.lua
|
||||
["Unable to save file '%s': %s"] = "Impossible d'enregistrer le fichier '%s' : %s", -- src\editor\commands.lua
|
||||
["Unable to stop program (pid: %d), code %d."] = "Impossible d'arrêter le programme (pid : %d), code %d.", -- src\editor\debugger.lua
|
||||
["Undo last edit"] = "Annuler la dernière modification", -- src\editor\menu_edit.lua
|
||||
["Undo last edit"] = "Annule la dernière modification", -- src\editor\menu_edit.lua
|
||||
["Use '%s' to see full description."] = "Utilisez '%s' pour voir la description complète.", -- src\editor\editor.lua
|
||||
["Use '%s' to show line endings and '%s' to convert them."] = "Utilisez '%s' pour afficher les fins de ligne et '%s' pour les convertir.", -- src\editor\commands.lua
|
||||
["Use 'clear' to clear the shell output and the history."] = "Utilisez 'clear' pour effacer la sortie console et l´historique.", -- src\editor\shellbox.lua
|
||||
["Use Shift-Enter for multiline code."] = "Appuyez sur <Shift-Entrée> pour du code multiligne.", -- src\editor\shellbox.lua
|
||||
["Value"] = "Valeur", -- src\editor\debugger.lua
|
||||
["View the output/console window"] = "Afficher la fenêtre de sortie/console", -- src\editor\menu_view.lua
|
||||
["View the project/filetree window"] = "Afficher la fenêtre d'explorateur de projet", -- src\editor\menu_view.lua
|
||||
["View the stack window"] = "Afficher la fenêtre de pile d'exécution", -- src\editor\menu_view.lua, src\editor\gui.lua
|
||||
["View the watch window"] = "Afficher la fenêtre d'expressions espionnes", -- src\editor\menu_view.lua, src\editor\gui.lua
|
||||
["View the outline window"] = "Affiche la fenêtre de structure", -- src\editor\menu_view.lua
|
||||
["View the output/console window"] = "Affiche la fenêtre de sortie/console", -- src\editor\menu_view.lua
|
||||
["View the project/filetree window"] = "Affiche la fenêtre d'explorateur de projet", -- src\editor\menu_view.lua
|
||||
["View the stack window"] = "Affiche la fenêtre de pile d'exécution", -- src\editor\menu_view.lua
|
||||
["View the watch window"] = "Affiche la fenêtre d'expressions espionnes", -- src\editor\menu_view.lua
|
||||
["Watch"] = "Expressions espionnes", -- src\editor\debugger.lua
|
||||
["Welcome to the interactive Lua interpreter."] = "Bienvenue dans l´interpréteur interactif Lua.", -- src\editor\shellbox.lua
|
||||
["Wrap ar&ound"] = "B&oucler", -- src\editor\findreplace.lua
|
||||
["You must save the program first."] = "Vous devez d'abord enregistrer le programme.", -- src\editor\commands.lua
|
||||
["on line %d"] = "à la ligne %d", -- src\editor\debugger.lua, src\editor\commands.lua, src\editor\editor.lua
|
||||
["traced %d instruction"] = {"%d instruction tracée", "%d instructions tracées"} -- src\editor\debugger.lua
|
||||
["Zoom In"] = "Zoomer", -- src\editor\menu_view.lua
|
||||
["Zoom Out"] = "Dézoomer", -- src\editor\menu_view.lua
|
||||
["Zoom to 100%"] = "Zoomer à 100%", -- src\editor\menu_view.lua
|
||||
["Zoom"] = "Zoom", -- src\editor\menu_view.lua
|
||||
["on line %d"] = "à la ligne %d", -- src\editor\debugger.lua, src\editor\editor.lua, src\editor\commands.lua
|
||||
["traced %d instruction"] = {"%d instruction tracée", "%d instructions tracées"}, -- src\editor\debugger.lua
|
||||
["unknown error"] = "erreur inconnue", -- src\editor\debugger.lua
|
||||
}
|
||||
|
||||
224
cfg/i18n/it.lua
224
cfg/i18n/it.lua
@@ -1,83 +1,123 @@
|
||||
return {
|
||||
[0] = function(c) return c == 1 and 1 or 2 end, -- plural
|
||||
["%d instance"] = {"%d occorrenza", "%d occorrenze"}, -- src\editor\findreplace.lua
|
||||
["%s event failed: %s"] = "L'evento %s è fallito : %s", -- src\editor\package.lua
|
||||
["&About"] = "Informazioni", -- src\editor\menu_help.lua
|
||||
["&Add Watch"] = "&Aggiungi Espressione di Controllo", -- src\editor\debugger.lua
|
||||
["&Break"] = "Interrompi", -- src\editor\menu_project.lua
|
||||
["&Close Page"] = "&Chiudi pagina", -- src\editor\menu_file.lua, src\editor\gui.lua
|
||||
["&Close Page"] = "&Chiudi pagina", -- src\editor\gui.lua, src\editor\menu_file.lua
|
||||
["&Community"] = "&Comunità", -- src\editor\menu_help.lua
|
||||
["&Compile"] = "&Compila", -- src\editor\menu_project.lua
|
||||
["&Copy"] = "&Copia", -- src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Copy"] = "&Copia", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Default Layout"] = "Visualizzazione di &Default", -- src\editor\menu_view.lua
|
||||
["&Delete Watch"] = "Elimina Espressione di Controllo", -- src\editor\debugger.lua
|
||||
["&Delete"] = "Elimina", -- src\editor\filetree.lua
|
||||
["&Documentation"] = "Documentazione", -- src\editor\menu_help.lua
|
||||
["&Down"] = "Verso il basso", -- src\editor\findreplace.lua
|
||||
["&Edit Project Directory"] = "Modifica directory di progetto", -- src\editor\filetree.lua
|
||||
["&Edit Value"] = "Modifica Valore", -- src\editor\debugger.lua
|
||||
["&Edit Watch"] = "Modifica Espressione di Controllo", -- src\editor\debugger.lua
|
||||
["&Edit"] = "Modifica", -- src\editor\menu_edit.lua
|
||||
["&File"] = "File", -- src\editor\menu_file.lua
|
||||
["&Find All"] = "Trova Tutti", -- src\editor\findreplace.lua
|
||||
["&Find Next"] = "Trova Successivo", -- src\editor\findreplace.lua
|
||||
["&Find"] = "Ricerca", -- src\editor\menu_search.lua
|
||||
["&Fold/Unfold All"] = "Apri/Chiudi tutto", -- src\editor\menu_edit.lua
|
||||
["&Goto Line"] = "Vai a riga", -- src\editor\menu_search.lua
|
||||
["&Frequently Asked Questions"] = "Domande &Frequenti", -- src\editor\menu_help.lua
|
||||
["&Getting Started Guide"] = "&Guida Introduttiva", -- src\editor\menu_help.lua
|
||||
["&Help"] = "Aiuto", -- src\editor\menu_help.lua
|
||||
["&New Directory"] = "&Nuova Directory", -- src\editor\filetree.lua
|
||||
["&New"] = "&Nuovo", -- src\editor\menu_file.lua
|
||||
["&Open..."] = "&Apri...", -- src\editor\menu_file.lua
|
||||
["&Output/Console Window"] = "Finestra di Output/Console", -- src\editor\menu_view.lua
|
||||
["&Paste"] = "Incolla", -- src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Project"] = "&Progetto", -- src\editor\menu_project.lua, src\editor\inspect.lua
|
||||
["&Redo"] = "&Ripeti", -- src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Replace"] = "Sostituisci", -- src\editor\menu_search.lua
|
||||
["&Paste"] = "Incolla", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Project Page"] = "&Pagina di Progetto", -- src\editor\menu_help.lua
|
||||
["&Project"] = "&Progetto", -- src\editor\menu_project.lua
|
||||
["&Redo"] = "&Ripeti", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Rename"] = "&Rinomina", -- src\editor\filetree.lua
|
||||
["&Replace All"] = "Sostituisci Tutti", -- src\editor\findreplace.lua
|
||||
["&Replace"] = "Sostituisci", -- src\editor\findreplace.lua, src\editor\menu_search.lua
|
||||
["&Run"] = "Lancia", -- src\editor\menu_project.lua
|
||||
["&Save"] = "&Salva", -- src\editor\menu_file.lua, src\editor\gui.lua
|
||||
["&Save"] = "&Salva", -- src\editor\gui.lua, src\editor\menu_file.lua
|
||||
["&Search"] = "Ricerca", -- src\editor\menu_search.lua
|
||||
["&Sort"] = "Ordina", -- src\editor\menu_search.lua
|
||||
["&Sort"] = "Ordina", -- src\editor\menu_edit.lua
|
||||
["&Stack Window"] = "Stack di chiamate", -- src\editor\menu_view.lua
|
||||
["&Start Debugger Server"] = "Avvia Debugger Server", -- src\editor\menu_project.lua
|
||||
["&Undo"] = "Annulla", -- src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Status Bar"] = "Barra di stato", -- src\editor\menu_view.lua
|
||||
["&Subdirectories"] = "Sotto Directory", -- src\editor\findreplace.lua
|
||||
["&Tool Bar"] = "Barra degli strumenti", -- src\editor\menu_view.lua
|
||||
["&Tutorials"] = "Guide", -- src\editor\menu_help.lua
|
||||
["&Undo"] = "Annulla", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Up"] = "Verso l'alto", -- src\editor\findreplace.lua
|
||||
["&View"] = "Visualizza", -- src\editor\menu_view.lua
|
||||
["&Watch Window"] = "Finestra Espressioni di Controllo", -- src\editor\menu_view.lua
|
||||
[".&bak on Replace"] = ".bak su Sostituisci", -- src\editor\findreplace.lua
|
||||
["About %s"] = "Informazioni su %s", -- src\editor\menu_help.lua
|
||||
["Add Watch Expression"] = "Aggiungi Espressione di Controllo", -- src\editor\editor.lua
|
||||
["Add To Scratchpad"] = "Aggiungi a Scratchpad ", -- src\editor\editor.lua
|
||||
["Add Watch Expression"] = "Aggiungi Espressione di Controllo", -- src\editor\editor.lua
|
||||
["All files"] = "Tutti i files", -- src\editor\commands.lua
|
||||
["Allow external process to start debugging"] = "Permetti a processi esterni di avviare il debug", -- src\editor\menu_project.lua
|
||||
["Analyze the source code"] = "Analizza il codice", -- src\editor\inspect.lua
|
||||
["Analyze"] = "Analizza", -- src\editor\inspect.lua
|
||||
["Auto Complete Identifiers"] = "Autocompletamento identificatori", -- src\editor\menu_edit.lua
|
||||
["Auto complete while typing"] = "Autocompletamento in linea", -- src\editor\menu_edit.lua
|
||||
["Break execution at the next executed line of code"] = "Interrompi l'esecuzione alla successiva riga di codice ", -- src\editor\menu_project.lua, src\editor\gui.lua
|
||||
["C&lear Output Window"] = "Pulisci finestra di output", -- src\editor\menu_project.lua
|
||||
["Bookmark"] = "Segnalibro", -- src\editor\menu_edit.lua
|
||||
["Break execution at the next executed line of code"] = "Interrompi l'esecuzione alla successiva riga di codice ", -- src\editor\menu_project.lua
|
||||
["C&lear Output Window"] = "Pulisci finestra di output", -- src\editor\gui.lua, src\editor\menu_project.lua
|
||||
["C&omment/Uncomment"] = "Commenta/Scommenta", -- src\editor\menu_edit.lua
|
||||
["Can't debug the script in the active editor window."] = "Impossibile farte debug dello script nella finestra attiva", -- src\editor\debugger.lua
|
||||
["Can't evaluate the expression while the application is running."] = "Impossibile interpretare l'espressione se l'applicazione è in esecuzione.", -- src\editor\debugger.lua
|
||||
["Can't find file '%s' in the current project to activate for debugging. Update the project or open the file in the editor before debugging."] = "File '%s' non trovato nel progetto per attivare il debug. Modificare il progetto o apire il file prima di lanciare il debug.", -- src\editor\debugger.lua
|
||||
["Can't open file '%s': %s"] = "Impossibile aprire il file '%s': %s", -- src\editor\singleinstance.lua
|
||||
["Can't process auto-recovery record; invalid format: %s."] = "Impossibile procedere all'auto-recovery; Formato non valido: %s.", -- src\editor\commands.lua
|
||||
["Can't run the entry point script ('%s')."] = "Impossibile eseguire il punto di ingresos dello script (%s).", -- src\editor\debugger.lua
|
||||
["Can't start debugger server at %s:%d: %s."] = "Impossibile lanciare il server debugger a %s:%d: %s.", -- src\editor\debugger.lua
|
||||
["Can't start debugging session due to internal error '%s'."] = "Impossibile lanciare la sessione di debug: errore interno '%s'.'", -- src\editor\debugger.lua
|
||||
["Can't start debugging without an opened file or with the current file not being saved ('%s')."] = "Impossibile lanciare il debug senza aver aperto un file o se il file corrente non è stato salvato ('%s').", -- src\editor\debugger.lua
|
||||
["Choose ..."] = "Scegli...", -- src\editor\menu_project.lua
|
||||
["Choose a project directory"] = "Scegli la directory di un progetto", -- src\editor\menu_project.lua
|
||||
["Clear &Dynamic Words"] = "Elimna le &Dynamic Words", -- src\editor\menu_edit.lua
|
||||
["Can't stop debugger server as it is not started."] = "Impossibile fermare il server debugger perchè non è stato avviato", -- src\editor\debugger.lua
|
||||
["Cancel"] = "Annulla", -- src\editor\findreplace.lua
|
||||
["Cancelled by the user."] = "Annullato dall'utente", -- src\editor\findreplace.lua
|
||||
["Choose a project directory"] = "Scegli la directory di un progetto", -- src\editor\findreplace.lua, src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Choose..."] = "Scegli...", -- src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Clear Items"] = "Pulisci elementi", -- src\editor\menu_file.lua
|
||||
["Clear items from this list"] = "Pulisci elementi della lista", -- src\editor\menu_file.lua
|
||||
["Clear the output window before compiling or debugging"] = "Pulisci la finestra di output prima di compilare o lanciare debug", -- src\editor\menu_project.lua
|
||||
["Close &Other Pages"] = "Chidi le Altre Pagine", -- src\editor\gui.lua
|
||||
["Close A&ll Pages"] = "Chiudi Tutte le Pagine", -- src\editor\gui.lua
|
||||
["Close the current editor window"] = "Chiude la finestra dell'edit corrente", -- src\editor\menu_file.lua
|
||||
["Co&ntinue"] = "Co&ntinua", -- src\editor\menu_project.lua
|
||||
["Col: %d"] = "Col: %d", -- src\editor\editor.lua
|
||||
["Command Line Parameters..."] = "Parametri Riga di Comando...", -- src\editor\menu_project.lua
|
||||
["Command line parameters"] = "Parametri Riga di Comando", -- src\editor\menu_project.lua
|
||||
["Comment or uncomment current or selected lines"] = "Commenta o scommenta la linea corrente o selezionat", -- src\editor\menu_edit.lua
|
||||
["Compilation error"] = "Errore di compilazione", -- src\editor\debugger.lua, src\editor\commands.lua
|
||||
["Compilation error"] = "Errore di compilazione", -- src\editor\commands.lua, src\editor\debugger.lua
|
||||
["Compilation successful; %.0f%% success rate (%d/%d)."] = "Compilazione riuscita; tasso di successo : %.0f%% (%d/%d).", -- src\editor\commands.lua
|
||||
["Compile the current file"] = "Compila il file corrente", -- src\editor\menu_project.lua
|
||||
["Complete &Identifier"] = "Completa l'&Identificatore", -- src\editor\menu_edit.lua
|
||||
["Complete the current identifier"] = "Completa l'identificatore corrente", -- src\editor\menu_edit.lua
|
||||
["Consider removing backslash from escape sequence '%s'."] = "Prova a rimuovere i backslash dalla sequenza di escape '%s'.", -- src\editor\commands.lua
|
||||
["Copy Full Path"] = "Copia Path Completo", -- src\editor\gui.lua, src\editor\filetree.lua
|
||||
["Copy selected text to clipboard"] = "Copia il testo selezionato negli appunti", -- src\editor\menu_edit.lua
|
||||
["Correct &Indentation"] = "Correggi &Indentazione", -- src\editor\menu_edit.lua
|
||||
["Couldn't activate file '%s' for debugging; continuing without it."] = "Impossibile attivare il file '%s' per debug; si prosegue senza.", -- src\editor\debugger.lua
|
||||
["Create an empty document"] = "Crea un documento vuoto", -- src\editor\menu_file.lua, src\editor\gui.lua
|
||||
["Cu&t"] = "&Taglia", -- src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["Create an empty document"] = "Crea un documento vuoto", -- src\editor\menu_file.lua
|
||||
["Cu&t"] = "&Taglia", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["Cut selected text to clipboard"] = "Taglia il testo selezionato e mette negli appunti", -- src\editor\menu_edit.lua
|
||||
["Debugger server started at %s:%d."] = "Server Debugger iniziato %s:%s", -- src\editor\debugger.lua
|
||||
["Debugger server started at %s:%d."] = "Server Debugger iniziato %s:%d.", -- src\editor\debugger.lua
|
||||
["Debugger server stopped at %s:%d."] = "Server Debugger fermato %s:%d.", -- src\editor\debugger.lua
|
||||
["Debugging session completed (%s)."] = "Sessione di debug completata (%s).", -- src\editor\debugger.lua
|
||||
["Debugging session started in '%s'."] = "Sessione di debug iniziata da '%s'.", -- src\editor\debugger.lua
|
||||
["Debugging suspended at %s:%s (couldn't activate the file)."] = "Debug sospeso a %s:%s (impossibile attivare il file).", -- src\editor\debugger.lua
|
||||
["Debugging suspended at '%s:%s' (couldn't activate the file)."] = "Debug sospeso a '%s:%s' (impossibile attivare il file).", -- src\editor\debugger.lua
|
||||
["Detach &Process"] = "Scollega Processo", -- src\editor\menu_project.lua
|
||||
["Directory"] = "Directory", -- src\editor\findreplace.lua
|
||||
["Do you want to delete '%s'?"] = "Vuoi eliminare '%s'?", -- src\editor\filetree.lua
|
||||
["Do you want to overwrite it?"] = "Vuoi sovrascrivere '%s'?", -- src\editor\commands.lua
|
||||
["Do you want to reload it?"] = "Vuoi ricaricarlo?", -- src\editor\editor.lua
|
||||
["Do you want to save the changes to '%s'?"] = "Vuoi salvare le modifiche a '%s'?", -- src\editor\commands.lua
|
||||
["E&xit"] = "Uscita", -- src\editor\menu_file.lua
|
||||
["Enter Lua code and press Enter to run it."] = "Inserisci codice Lua e premi <Enter> per eseguirlo.", -- src\editor\shellbox.lua
|
||||
["Enter line number"] = "Inserisci il numero di linea", -- src\editor\menu_search.lua
|
||||
["Enter command line parameters (use Cancel to clear)"] = "Inserisci i parametri riga di comando (Annulla per pulire)", -- src\editor\menu_project.lua
|
||||
["Enter replacement text"] = "Inserisci il testo da sostituire", -- src\editor\editor.lua
|
||||
["Error while loading API file: %s"] = "Errore durante il caricamento del file API: %s", -- src\editor\autocomplete.lua
|
||||
["Error while loading configuration file: %s"] = "Errore nel caricamento del file di configurazione: %s", -- src\editor\style.lua
|
||||
["Error while processing API file: %s"] = "Errore durante l'elaborazione del file API: %s", -- src\editor\autocomplete.lua
|
||||
@@ -88,41 +128,67 @@ return {
|
||||
["Execute the current project/file"] = "Esegue il progetto/file corrente", -- src\editor\menu_project.lua
|
||||
["Execution error"] = "Errore di esecuzione", -- src\editor\debugger.lua
|
||||
["Exit program"] = "Uscita dal programma", -- src\editor\menu_file.lua
|
||||
["Expr"] = "Expr.", -- src\editor\debugger.lua
|
||||
["Expression"] = "Espressione", -- src\editor\debugger.lua
|
||||
["File '%s' has been modified on disk."] = "Il file '%s' e' stato modificato sul disco.", -- src\editor\editor.lua
|
||||
["File '%s' has more recent timestamp than restored '%s'; please review before saving."] = "Il file '%s' ha un timestamp più recente di quello ripristinato '%s'; verificare prima di salvare.", -- src\editor\commands.lua
|
||||
["File '%s' no longer exists."] = "Il file '%s' non esiste piu'.", -- src\editor\editor.lua
|
||||
["File '%s' is missing and can't be recovered."] = "Il file '%s' non è stato trovato e non può essere recuperato.", -- src\editor\commands.lua
|
||||
["File '%s' no longer exists."] = "Il file '%s' non esiste piu'.", -- src\editor\menu_file.lua, src\editor\editor.lua
|
||||
["File Type"] = "File Type", -- src\editor\findreplace.lua
|
||||
["File already exists."] = "Il file esiste già.", -- src\editor\commands.lua
|
||||
["File history"] = "Storia del file", -- src\editor\menu_file.lua
|
||||
["Find &In Files"] = "Ricerca nei files", -- src\editor\menu_search.lua
|
||||
["Find &Next"] = "Cerca il successivo", -- src\editor\menu_search.lua
|
||||
["Find &Previous"] = "Cerca il precedente", -- src\editor\menu_search.lua
|
||||
["Find In Files"] = "Ricerca nei Files", -- src\editor\findreplace.lua
|
||||
["Find and insert library function"] = "Trova e inserisci funzione di libreria", -- src\editor\menu_search.lua
|
||||
["Find and replace text in files"] = "Cerca e sostituisci testo nei files", -- src\editor\menu_search.lua
|
||||
["Find and replace text"] = "Cerca e sostituisci testo", -- src\editor\menu_search.lua, src\editor\gui.lua
|
||||
["Find and replace text"] = "Cerca e sostituisci testo", -- src\editor\menu_search.lua
|
||||
["Find text in files"] = "Cerca testo nei files", -- src\editor\menu_search.lua
|
||||
["Find text"] = "Cerca testo", -- src\editor\menu_search.lua, src\editor\gui.lua
|
||||
["Find text"] = "Cerca testo", -- src\editor\menu_search.lua
|
||||
["Find the earlier text occurence"] = "Cerca la precedente occorrenza nel testo", -- src\editor\menu_search.lua
|
||||
["Find the next text occurrence"] = "Cerca la successiva occorrenza nel testo", -- src\editor\menu_search.lua
|
||||
["Find"] = "Ricerca", -- src\editor\findreplace.lua
|
||||
["Fold or unfold all code folds"] = "Apri o chiudi tutti i blocchi di codice", -- src\editor\menu_edit.lua
|
||||
["Found auto-recovery record and restored saved session."] = "Trovato punto di auto-revcovery e ripristinata la sessione salvata", -- src\editor\commands.lua
|
||||
["Full &Screen"] = "Schermo pieno", -- src\editor\menu_view.lua
|
||||
["Go to a selected line"] = "Vai alla riga selezionata", -- src\editor\menu_search.lua
|
||||
["Goto Line"] = "Vai alla riga", -- src\editor\menu_search.lua
|
||||
["Found"] = "Occorrenze trovate:", -- src\editor\findreplace.lua
|
||||
["Full &Screen"] = "Schermo intero", -- src\editor\menu_view.lua
|
||||
["Go To Definition"] = "Vai a Definizione", -- src\editor\editor.lua
|
||||
["Go To File..."] = "Vai al File...", -- src\editor\menu_search.lua
|
||||
["Go To Line..."] = "Vai a riga...", -- src\editor\menu_search.lua
|
||||
["Go To Next Bookmark"] = "Vai al Prossimo Segnalibro", -- src\editor\menu_edit.lua
|
||||
["Go To Previous Bookmark"] = "Vai al Precedente Segnalibro", -- src\editor\menu_edit.lua
|
||||
["Go To Symbol..."] = "Vai al Simbolo...", -- src\editor\menu_search.lua
|
||||
["Go to file"] = "Vai al file", -- src\editor\menu_search.lua
|
||||
["Go to line"] = "Vai alla riga", -- src\editor\menu_search.lua
|
||||
["Go to symbol"] = "Vai al simbolo", -- src\editor\menu_search.lua
|
||||
["Hide '.%s' Files"] = "Nascondi Files '.%s'", -- src\editor\filetree.lua
|
||||
["INS"] = "INS", -- src\editor\editor.lua
|
||||
["Jump to a function definition..."] = "Salta alla definizione della funzione...", -- src\editor\editor.lua
|
||||
["Ignored error in debugger initialization code: %s."] = "Errore ignorato durante l'inizializzaione del debugger codice: %s.", -- src\editor\debugger.lua
|
||||
["In Files"] = "Nei Files", -- src\editor\findreplace.lua
|
||||
["Insert Library Function..."] = "Inserisci Funzione di Libreria...", -- src\editor\menu_search.lua
|
||||
["Known Files"] = "Files conosciuti", -- src\editor\commands.lua
|
||||
["Ln: %d"] = "Ln: %d", -- src\editor\editor.lua
|
||||
["Local console"] = "Console locale", -- src\editor\shellbox.lua, src\editor\gui.lua
|
||||
["Local console"] = "Console locale", -- src\editor\gui.lua, src\editor\shellbox.lua
|
||||
["Lua &Interpreter"] = "&Interprete Lua", -- src\editor\menu_project.lua
|
||||
["Mapped remote request for '%s' to '%s'."] = "Richiesta remota '%s' mappata su '%s'.", -- src\editor\debugger.lua
|
||||
["Match &case"] = "Maiuscole/Minuscole", -- src\editor\findreplace.lua
|
||||
["Match &whole word"] = "Intera parola", -- src\editor\findreplace.lua
|
||||
["Mixed end-of-line encodings detected."] = "Trovata codifica Fine-Riga mista.", -- src\editor\commands.lua
|
||||
["Navigate"] = "Naviga", -- src\editor\menu_search.lua
|
||||
["New &File"] = "Nuovo &File", -- src\editor\filetree.lua
|
||||
["OVR"] = "OVR", -- src\editor\editor.lua
|
||||
["Open an existing document"] = "Apri un documento esistente", -- src\editor\menu_file.lua, src\editor\gui.lua
|
||||
["Open With Default Program"] = "Apri con programma predefinito", -- src\editor\filetree.lua
|
||||
["Open an existing document"] = "Apri un documento esistente", -- src\editor\menu_file.lua
|
||||
["Open file"] = "Apri un file", -- src\editor\commands.lua
|
||||
["Output (running)"] = "Output (in corso d'esecuzione)", -- src\editor\output.lua
|
||||
["Output"] = "Output", -- src\editor\output.lua, src\editor\settings.lua, src\editor\gui.lua
|
||||
["Options"] = "Opzioni", -- src\editor\findreplace.lua
|
||||
["Outline Window"] = "Finestra Outline", -- src\editor\menu_view.lua
|
||||
["Outline"] = "Outline", -- src\editor\outline.lua
|
||||
["Output (running)"] = "Output (in corso d'esecuzione)", -- src\editor\debugger.lua, src\editor\output.lua
|
||||
["Output (suspended)"] = "Output (sospeso)", -- src\editor\debugger.lua
|
||||
["Output"] = "Output", -- src\editor\debugger.lua, src\editor\output.lua, src\editor\gui.lua, src\editor\settings.lua
|
||||
["Paste text from the clipboard"] = "Incolla testo dagli appunti", -- src\editor\menu_edit.lua
|
||||
["Prepend '=' to show complex values on multiple lines."] = "Prefissa '=' per visualizzare valori complessi su piu` righe", -- src\editor\shellbox.lua
|
||||
["Preferences"] = "Preferenze", -- src\editor\menu_edit.lua
|
||||
["Prepend '!' to force local execution."] = "Prefissa con '!' per forzare l'esecuzione locale", -- src\editor\shellbox.lua
|
||||
["Prepend '=' to show complex values on multiple lines."] = "Prefissa con '=' per visualizzare valori complessi su piu` righe", -- src\editor\shellbox.lua
|
||||
["Press cancel to abort."] = "Premi cancel per bloccare.", -- src\editor\commands.lua
|
||||
["Program '%s' started in '%s' (pid: %d)."] = "Programma '%s' partito da '%s' (pid: %d).", -- src\editor\output.lua
|
||||
["Program can't start because conflicting process is running as '%s'."] = "Il programma non puo' partire perchè in conflitto con il processo in esecuzione '%s'.", -- src\editor\output.lua
|
||||
@@ -130,58 +196,94 @@ return {
|
||||
["Program starting as '%s'."] = "Programma partito da '%s'.", -- src\editor\output.lua
|
||||
["Program stopped (pid: %d)."] = "Programma fermato (pid: %d).", -- src\editor\debugger.lua
|
||||
["Program unable to run as '%s'."] = "Il programma non puo' partire '%s'.", -- src\editor\output.lua
|
||||
["Project Directory"] = "Directory del Progetto", -- src\editor\menu_project.lua
|
||||
["Project"] = "Progetto", -- src\editor\settings.lua, src\editor\gui.lua
|
||||
["Project Directory"] = "Directory del Progetto", -- src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Project history"] = "Storia del Progetto", -- src\editor\menu_file.lua
|
||||
["Project"] = "Progetto", -- src\editor\filetree.lua
|
||||
["Project/&FileTree Window"] = "Progetto/Explorer", -- src\editor\menu_view.lua
|
||||
["Provide command line parameters"] = "Fornire parametri riga di comando", -- src\editor\menu_project.lua
|
||||
["R/O"] = "R/O", -- src\editor\editor.lua
|
||||
["R/W"] = "R/W", -- src\editor\editor.lua
|
||||
["Re&place In Files"] = "Sostituisci nei files", -- src\editor\menu_search.lua
|
||||
["Re-indent selected lines"] = "Re-indenta le linee selezionate", -- src\editor\menu_edit.lua
|
||||
["Recent &Projects"] = "Progetti Recenti", -- src\editor\menu_file.lua
|
||||
["Recent Files"] = "Files recenti", -- src\editor\menu_file.lua
|
||||
["Redo last edit undone"] = "Ripeti l'ultima azione annullata", -- src\editor\menu_edit.lua
|
||||
["Refused a request to start a new debugging session as there is one in progress already."] = "Impossibile aprire una nuova sessione di debug in quanto ne esiste una in corso", -- src\editor\debugger.lua
|
||||
["Regular &expression"] = "Regular &expression", -- src\editor\findreplace.lua
|
||||
["Remote console"] = "Console remota", -- src\editor\shellbox.lua
|
||||
["Rename All Instances"] = "Rinomina tutte le occorrenze", -- src\editor\editor.lua
|
||||
["Replace A&ll"] = "Sostituisci Tutto", -- src\editor\findreplace.lua
|
||||
["Replace All Selections"] = "Sostituisci Tutte le Selezioni", -- src\editor\editor.lua
|
||||
["Replace"] = "Sostituisci", -- src\editor\findreplace.lua
|
||||
["Replaced an invalid UTF8 character with %s."] = "Sostituito un carattere UTF8 invalido con %s.", -- src\editor\commands.lua
|
||||
["Replaced"] = "Sostituiti :", -- src\editor\findreplace.lua
|
||||
["Replacing"] = "Sostituzione", -- src\editor\findreplace.lua
|
||||
["Reset to default layout"] = "Ritorna al default layout", -- src\editor\menu_view.lua
|
||||
["Resets the dynamic word list for autocompletion"] = "Azzera la lista di dynamic words per l'autocompletamento", -- src\editor\menu_edit.lua
|
||||
["Run As Scratchpad"] = "Esegui in Scratchpad (Live coding)", -- src\editor\menu_project.lua
|
||||
["Run as Scratchpad"] = "Esegui in Scratchpad (Live coding)", -- src\editor\menu_project.lua
|
||||
["S&top Debugging"] = "Ferma il debugger", -- src\editor\menu_project.lua
|
||||
["S&top Process"] = "Ferma il processo", -- src\editor\menu_project.lua
|
||||
["Save &As..."] = "S&alva con nome...", -- src\editor\menu_file.lua, src\editor\gui.lua
|
||||
["Save &As..."] = "S&alva con nome...", -- src\editor\gui.lua, src\editor\menu_file.lua
|
||||
["Save A&ll"] = "Sa&lva tutto", -- src\editor\menu_file.lua
|
||||
["Save Changes?"] = "Vuoi salvare le modifiche?", -- src\editor\commands.lua
|
||||
["Save all open documents"] = "Salva tutti i documenti aperti", -- src\editor\menu_file.lua, src\editor\gui.lua
|
||||
["Save all open documents"] = "Salva tutti i documenti aperti", -- src\editor\menu_file.lua
|
||||
["Save file as"] = "Salva il file con nome", -- src\editor\commands.lua
|
||||
["Save file?"] = "Vuoi salvare il file?", -- src\editor\commands.lua
|
||||
["Save the current document to a file with a new name"] = "Salva il documento corrente in un file con un nuovo nome", -- src\editor\menu_file.lua
|
||||
["Save the current document"] = "Salva il documento corrente", -- src\editor\menu_file.lua, src\editor\gui.lua
|
||||
["Save the current document"] = "Salva il documento corrente", -- src\editor\menu_file.lua
|
||||
["Saved auto-recover at %s."] = "Salvato auto-recover a %s.", -- src\editor\commands.lua
|
||||
["Scope"] = "Direzione", -- src\editor\findreplace.lua
|
||||
["Scratchpad error"] = "Errore durente Scratchpad", -- src\editor\debugger.lua
|
||||
["Select &All"] = "Selezion&a Tutto", -- src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["Searching for"] = "Ricerca di", -- src\editor\findreplace.lua
|
||||
["Sel: %d/%d"] = "Sel: %d/%d", -- src\editor\editor.lua
|
||||
["Select &All"] = "Selezion&a Tutto", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["Select all text in the editor"] = "Seleziona tutto il testo nell'editor", -- src\editor\menu_edit.lua
|
||||
["Select And Find Next"] = "Seleziona e trova successivo", -- src\editor\menu_search.lua
|
||||
["Select And Find Previous"] = "Seleziona e trova precedente", -- src\editor\menu_search.lua
|
||||
["Select the word under cursor and find its next occurrence"] = "Seleziona la parola e trova successivo", -- src\editor\menu_search.lua
|
||||
["Select the word under cursor and find its previous occurrence"] = "Seleziona la parola e trova precedente", -- src\editor\menu_search.lua
|
||||
["Set From Current File"] = "Impostato da file corrente", -- src\editor\menu_project.lua
|
||||
["Set project directory from current file"] = "Definisci la directory del progeetto dal file corrente", -- src\editor\menu_project.lua, src\editor\gui.lua
|
||||
["Set project directory from current file"] = "Definisci la directory del progeetto dal file corrente", -- src\editor\menu_project.lua
|
||||
["Set the interpreter to be used"] = "Definisci l'interprete da utilizzare", -- src\editor\menu_project.lua
|
||||
["Set the project directory to be used"] = "Imposta la directory di progetto da usare", -- src\editor\menu_project.lua
|
||||
["Show &Tooltip"] = "Mos&tra i consgli", -- src\editor\menu_edit.lua
|
||||
["Set the project directory to be used"] = "Imposta la directory di progetto da usare", -- src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Settings: System"] = "Impostazioni: Sistema", -- src\editor\menu_edit.lua
|
||||
["Settings: User"] = "Impostazioni: Utente", -- src\editor\menu_edit.lua
|
||||
["Show &Tooltip"] = "Mos&tra i consigli", -- src\editor\menu_edit.lua
|
||||
["Show All Files"] = "Mostra Tutti i File", -- src\editor\filetree.lua
|
||||
["Show Hidden Files"] = "Mostra File nascosti", -- src\editor\filetree.lua
|
||||
["Show Location"] = "Mostra posizione", -- src\editor\gui.lua, src\editor\filetree.lua
|
||||
["Show all files"] = "Mostra tutti i file", -- src\editor\filetree.lua
|
||||
["Show files previously hidden"] = "Mostra i file precedentemente nascosti", -- src\editor\filetree.lua
|
||||
["Show tooltip for current position; place cursor after opening bracket of function"] = "Mostra i consigli per la posizione corrente; muovi il cursore dopo la parentesi o la funzione", -- src\editor\menu_edit.lua
|
||||
["Sort selected lines"] = "Ordina le righe selezionate", -- src\editor\menu_search.lua
|
||||
["Show/Hide the status bar"] = "Mostra/Nascondi la barra di stato", -- src\editor\menu_view.lua
|
||||
["Show/Hide the toolbar"] = "Mostra/Nascondi la barra degli strumenti", -- src\editor\menu_view.lua
|
||||
["Sort selected lines"] = "Ordina le righe selezionate", -- src\editor\menu_edit.lua
|
||||
["Source"] = "Sorgente", -- src\editor\menu_edit.lua
|
||||
["Stack"] = "Stack", -- src\editor\debugger.lua
|
||||
["Start &Debugging"] = "Inizia il &Debug", -- src\editor\menu_project.lua
|
||||
["Start debugging"] = "Inizia il Debug", -- src\editor\menu_project.lua, src\editor\gui.lua
|
||||
["Start or continue debugging"] = "Inizia o continua il debug", -- src\editor\menu_project.lua
|
||||
["Step &Into"] = "Step &Into", -- src\editor\menu_project.lua
|
||||
["Step &Over"] = "Step &Over", -- src\editor\menu_project.lua
|
||||
["Step O&ut"] = "Step O&ut", -- src\editor\menu_project.lua
|
||||
["Step into"] = "Step into", -- src\editor\menu_project.lua, src\editor\gui.lua
|
||||
["Step out of the current function"] = "Contina fino all'uscita della funzione", -- src\editor\menu_project.lua, src\editor\gui.lua
|
||||
["Step over"] = "Continua senza entrare nella funzione", -- src\editor\menu_project.lua, src\editor\gui.lua
|
||||
["Stop the currently running process"] = "Ferma il processo in esecuzione", -- src\editor\menu_project.lua, src\editor\gui.lua
|
||||
["Step into"] = "Step into", -- src\editor\menu_project.lua
|
||||
["Step out of the current function"] = "Contina fino all'uscita della funzione", -- src\editor\menu_project.lua
|
||||
["Step over"] = "Continua senza entrare nella funzione", -- src\editor\menu_project.lua
|
||||
["Stop debugging and continue running the process"] = "Ferma il debug e continua l'esecuzione del processo", -- src\editor\menu_project.lua
|
||||
["Stop the currently running process"] = "Ferma il processo in esecuzione", -- src\editor\menu_project.lua
|
||||
["Switch to or from full screen mode"] = "Passa da tutto schermo a finestra", -- src\editor\menu_view.lua
|
||||
["Text not found."] = "Testo non trovato.", -- src\editor\findreplace.lua
|
||||
["The API file must be located in a subdirectory of the API directory."] = "Il file API deve essere presente in una sottodirectory o nella direcotory API.", -- src\editor\autocomplete.lua
|
||||
["Toggle Bookmark"] = "Attiva/Disattiva Segnalibro", -- src\editor\menu_edit.lua
|
||||
["Toggle Break&point"] = "Attiva/Disattiva Break&point", -- src\editor\menu_project.lua
|
||||
["Toggle breakpoint"] = "Attiva/Disattiva Breakpoint", -- src\editor\menu_project.lua, src\editor\gui.lua
|
||||
["Toggle bookmark"] = "Attiva/Disattiva Segnalibro", -- src\editor\menu_edit.lua
|
||||
["Toggle breakpoint"] = "Attiva/Disattiva Breakpoint", -- src\editor\menu_project.lua
|
||||
["Tr&ace"] = "Tr&ace", -- src\editor\menu_project.lua
|
||||
["Trace execution showing each executed line"] = "Traccia l'esecuzione mostrando le righe eseguite", -- src\editor\menu_project.lua
|
||||
["Unable to create directory '%s'."] = "Impossibile creare la directory '%s'.", -- src\editor\filetree.lua
|
||||
["Unable to create file '%s'."] = "Impossibile creare il file '%s'.", -- src\editor\filetree.lua
|
||||
["Unable to delete directory '%s': %s"] = "Impossibile cancellare la directory '%s': %s", -- src\editor\filetree.lua
|
||||
["Unable to load file '%s'."] = "Impossibile aprire il file '%s'.", -- src\editor\commands.lua
|
||||
["Unable to rename file '%s'."] = "Impossibile rinominare il file '%s'.", -- src\editor\filetree.lua
|
||||
["Unable to save file '%s': %s"] = "Impossibile salvare il file '%s': %s", -- src\editor\commands.lua
|
||||
["Unable to stop program (pid: %d), code %d."] = "Impossibile fermare il programma (pid: %d), code %d.", -- src\editor\debugger.lua
|
||||
["Undo last edit"] = "Annulla l'ultima azione di edit", -- src\editor\menu_edit.lua
|
||||
@@ -189,14 +291,20 @@ return {
|
||||
["Use '%s' to show line endings and '%s' to convert them."] = "Utilizza '%s' per vedere la fine della riga e '%s' per convertirli.", -- src\editor\commands.lua
|
||||
["Use 'clear' to clear the shell output and the history."] = "Utilizza 'clear' per pulire l`output e lo storico.", -- src\editor\shellbox.lua
|
||||
["Use Shift-Enter for multiline code."] = "Premi <Shift-Invio> per inserire piu` righe di codice.", -- src\editor\shellbox.lua
|
||||
["Value"] = "Valore", -- src\editor\debugger.lua
|
||||
["View the outline window"] = "Visualizza la finestra di outline", -- src\editor\menu_view.lua
|
||||
["View the output/console window"] = "Mostra la finestra di output/console", -- src\editor\menu_view.lua
|
||||
["View the project/filetree window"] = "Mostra la finestra di progetto/explorer", -- src\editor\menu_view.lua
|
||||
["View the stack window"] = "Mostra la finestra dello Stack", -- src\editor\menu_view.lua, src\editor\gui.lua
|
||||
["View the watch window"] = "Mostra la finestra delle Espressioni di Controllo", -- src\editor\menu_view.lua, src\editor\gui.lua
|
||||
["View the stack window"] = "Mostra la finestra dello Stack", -- src\editor\menu_view.lua
|
||||
["View the watch window"] = "Mostra la finestra delle Espressioni di Controllo", -- src\editor\menu_view.lua
|
||||
["Watch"] = "Watch", -- src\editor\debugger.lua
|
||||
["Welcome to the interactive Lua interpreter."] = "Benvenuti nell`interprete interattivo Lua.", -- src\editor\shellbox.lua
|
||||
["Wrap ar&ound"] = "Wrap ar&ound", -- src\editor\findreplace.lua
|
||||
["You must save the program first."] = "Devi prima salvare il programma", -- src\editor\commands.lua
|
||||
["on line %d"] = "alla linea %d", -- src\editor\debugger.lua, src\editor\commands.lua
|
||||
["traced %d instruction"] = {"tracciata %d istruzione", "%d istruzioni tracciate"} -- src\editor\debugger.lua
|
||||
["Zoom In"] = "Zoom In", -- src\editor\menu_view.lua
|
||||
["Zoom Out"] = "Zoom Out", -- src\editor\menu_view.lua
|
||||
["Zoom to 100%"] = "Zoom a 100%", -- src\editor\menu_view.lua
|
||||
["Zoom"] = "Zoom", -- src\editor\menu_view.lua
|
||||
["on line %d"] = "alla linea %d", -- src\editor\debugger.lua, src\editor\editor.lua, src\editor\commands.lua
|
||||
["traced %d instruction"] = {"tracciata %d istruzione", "%d istruzioni tracciate"}, -- src\editor\debugger.lua
|
||||
["unknown error"] = "errore sconosciuto", -- src\editor\debugger.lua
|
||||
}
|
||||
|
||||
313
cfg/i18n/pt-br.lua
Normal file
313
cfg/i18n/pt-br.lua
Normal file
@@ -0,0 +1,313 @@
|
||||
---
|
||||
-- @author Evandro Costa <evandro.co>
|
||||
-- @date 26/12/2014
|
||||
return {
|
||||
[0] = function(c) return c == 1 and 1 or 2 end, -- plural
|
||||
["%d instance"] = {"%d ocorrência", "%d ocorrências"}, -- src\editor\findreplace.lua
|
||||
["%s event failed: %s"] = "Evento %s falhou: %s", -- src\editor\package.lua
|
||||
["&About"] = "Sobre", -- src\editor\menu_help.lua
|
||||
["&Add Watch"] = "&Adicionar observador", -- src\editor\debugger.lua
|
||||
["&Break"] = "Interromper", -- src\editor\menu_project.lua
|
||||
["&Close Page"] = "Fe&char guia", -- src\editor\gui.lua, src\editor\menu_file.lua
|
||||
["&Community"] = "&Comunidade", -- src\editor\menu_help.lua
|
||||
["&Compile"] = "&Compilar", -- src\editor\menu_project.lua
|
||||
["&Copy"] = "&Copiar", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Default Layout"] = "Re&definir painéis", -- src\editor\menu_view.lua
|
||||
["&Delete Watch"] = "Remover observa&dor", -- src\editor\debugger.lua
|
||||
["&Delete"] = "Apagar", -- src\editor\filetree.lua
|
||||
["&Documentation"] = "&Documentação", -- src\editor\menu_help.lua
|
||||
["&Down"] = "&Descendente", -- src\editor\findreplace.lua
|
||||
["&Edit Project Directory"] = "&Editar pasta do projeto", -- src\editor\filetree.lua
|
||||
["&Edit Value"] = "&Editar valor", -- src\editor\debugger.lua
|
||||
["&Edit Watch"] = "&Editar observador", -- src\editor\debugger.lua
|
||||
["&Edit"] = "&Editar", -- src\editor\menu_edit.lua
|
||||
["&File"] = "Arquivo", -- src\editor\menu_file.lua
|
||||
["&Find All"] = "Localizar tudo", -- src\editor\findreplace.lua
|
||||
["&Find Next"] = "Localizar próxima", -- src\editor\findreplace.lua
|
||||
["&Find"] = "Localizar", -- src\editor\menu_search.lua
|
||||
["&Fold/Unfold All"] = "Expandir/Recolher tudo", -- src\editor\menu_edit.lua
|
||||
["&Frequently Asked Questions"] = "Perguntas &frequentes", -- src\editor\menu_help.lua
|
||||
["&Getting Started Guide"] = "Primeiros passos", -- src\editor\menu_help.lua
|
||||
["&Help"] = "Ajuda", -- src\editor\menu_help.lua
|
||||
["&New Directory"] = "&Nova pasta", -- src\editor\filetree.lua
|
||||
["&New"] = "&Novo", -- src\editor\menu_file.lua
|
||||
["&Open..."] = "Abrir...", -- src\editor\menu_file.lua
|
||||
["&Output/Console Window"] = "Saída/Console", -- src\editor\menu_view.lua
|
||||
["&Paste"] = "Colar", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Project Page"] = "&Página do projeto", -- src\editor\menu_help.lua
|
||||
["&Project"] = "&Projeto", -- src\editor\menu_project.lua
|
||||
["&Redo"] = "&Refazer", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Rename"] = "&Renomear", -- src\editor\filetree.lua
|
||||
["&Replace All"] = "Substitui&r tudo", -- src\editor\findreplace.lua
|
||||
["&Replace"] = "Substitui&r", -- src\editor\findreplace.lua, src\editor\menu_search.lua
|
||||
["&Run"] = "Executa&r", -- src\editor\menu_project.lua
|
||||
["&Save"] = "&Salvar", -- src\editor\gui.lua, src\editor\menu_file.lua
|
||||
["&Search"] = "Localizar", -- src\editor\menu_search.lua
|
||||
["&Sort"] = "Ordenar", -- src\editor\menu_edit.lua
|
||||
["&Stack Window"] = "Pilha de execução", -- src\editor\menu_view.lua
|
||||
["&Start Debugger Server"] = "Iniciar &servidor de depuração", -- src\editor\menu_project.lua
|
||||
["&Status Bar"] = "Barra de &status", -- src\editor\menu_view.lua
|
||||
["&Subdirectories"] = "&Subpastas", -- src\editor\findreplace.lua
|
||||
["&Tool Bar"] = "Barra de ferramen&tas", -- src\editor\menu_view.lua
|
||||
["&Tutorials"] = "&Tutoriais", -- src\editor\menu_help.lua
|
||||
["&Undo"] = "Desfazer", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Up"] = "Ascendente", -- src\editor\findreplace.lua
|
||||
["&View"] = "Exibir", -- src\editor\menu_view.lua
|
||||
["&Watch Window"] = "Observador", -- src\editor\menu_view.lua
|
||||
[".&bak on Replace"] = ".&bak ao substituir", -- src\editor\findreplace.lua
|
||||
["About %s"] = "Sobre %s", -- src\editor\menu_help.lua
|
||||
["Add To Scratchpad"] = "Adicionar ao rascunho", -- src\editor\editor.lua
|
||||
["Add Watch Expression"] = "Adicionar observador", -- src\editor\editor.lua
|
||||
["All files"] = "Todos os arquivos", -- src\editor\commands.lua
|
||||
["Allow external process to start debugging"] = "Permitir processo externo para iniciar a depuração", -- src\editor\menu_project.lua
|
||||
["Analyze the source code"] = "Analisar o código-fonte", -- src\editor\inspect.lua
|
||||
["Analyze"] = "Analisar", -- src\editor\inspect.lua
|
||||
["Auto Complete Identifiers"] = "Autocompletar identificadores", -- src\editor\menu_edit.lua
|
||||
["Auto complete while typing"] = "Autocompletar ao digitar", -- src\editor\menu_edit.lua
|
||||
["Bookmark"] = "Marcador", -- src\editor\menu_edit.lua
|
||||
["Break execution at the next executed line of code"] = "Interromper execução na próxima linha de código", -- src\editor\menu_project.lua
|
||||
["C&lear Output Window"] = "&Limpar janela de saída", -- src\editor\gui.lua, src\editor\menu_project.lua
|
||||
["C&omment/Uncomment"] = "C&omentar/Descomentar", -- src\editor\menu_edit.lua
|
||||
["Can't debug the script in the active editor window."] = "Impossível de depurar o script na janela ativa do editor.", -- src\editor\debugger.lua
|
||||
["Can't evaluate the expression while the application is running."] = "Impossível executar a expressão enquanto a aplicação estiver em execução.", -- src\editor\debugger.lua
|
||||
["Can't find file '%s' in the current project to activate for debugging. Update the project or open the file in the editor before debugging."] = "Impossível localizar o arquivo '%s' no projeto atual para iniciar a depuração. Atualize o projeto ou abra o arquivo no editor antes de depurar.", -- src\editor\debugger.lua
|
||||
["Can't open file '%s': %s"] = "Impossível abrir o arquivo '%s': %s", -- src\editor\singleinstance.lua
|
||||
["Can't process auto-recovery record; invalid format: %s."] = "Impossível de processar registro de autorrecuperação; formato inválido: %s.", -- src\editor\commands.lua
|
||||
["Can't run the entry point script ('%s')."] = "Impossível de executar o ponto de entrada do script ('%s').", -- src\editor\debugger.lua
|
||||
["Can't start debugger server at %s:%d: %s."] = "Impossível de iniciar o sevidor de depuração em %s:%d: %s.", -- src\editor\debugger.lua
|
||||
["Can't start debugging session due to internal error '%s'."] = "Impossível iniciar sessão de depuração devido ao erro interno '%s'.", -- src\editor\debugger.lua
|
||||
["Can't start debugging without an opened file or with the current file not being saved ('%s')."] = "Impossível iniciar depuração sem abrir um arquivo ou se o arquivo atual não foi salvo ainda ('%s').", -- src\editor\debugger.lua
|
||||
["Can't stop debugger server as it is not started."] = "Impossível interromper servidor de depuração se ele não foi iniciado.", -- src\editor\debugger.lua
|
||||
["Cancel"] = "Cancelar", -- src\editor\findreplace.lua
|
||||
["Cancelled by the user."] = "Cancelado pelo usuário", -- src\editor\findreplace.lua
|
||||
["Choose a project directory"] = "Selecionar pasta do projeto", -- src\editor\findreplace.lua, src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Choose..."] = "Selecionar...", -- src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Clear Items"] = "Limpar itens", -- src\editor\menu_file.lua
|
||||
["Clear items from this list"] = "Limpar itens desta lista", -- src\editor\menu_file.lua
|
||||
["Clear the output window before compiling or debugging"] = "Limpar janela de saída antes de compilar ou depurar", -- src\editor\menu_project.lua
|
||||
["Close &Other Pages"] = "Fechar &outras guias", -- src\editor\gui.lua
|
||||
["Close A&ll Pages"] = "Fechar todas as guias", -- src\editor\gui.lua
|
||||
["Close the current editor window"] = "Fechar janela do editor atual", -- src\editor\menu_file.lua
|
||||
["Co&ntinue"] = "Co&ntinuar", -- src\editor\menu_project.lua
|
||||
["Col: %d"] = "Col: %d", -- src\editor\editor.lua
|
||||
["Command Line Parameters..."] = "Parâmetros da linha de comandos...", -- src\editor\menu_project.lua
|
||||
["Command line parameters"] = "Parâmetros da linha de comandos", -- src\editor\menu_project.lua
|
||||
["Comment or uncomment current or selected lines"] = {"Comentar ou descomentar a linha atual", "Comentar ou descomentar as linhas selecionadas"}, -- src\editor\menu_edit.lua
|
||||
["Compilation error"] = "Erro na compilação", -- src\editor\commands.lua, src\editor\debugger.lua
|
||||
["Compilation successful; %.0f%% success rate (%d/%d)."] = "Compilação com êxito; taxa de sucesso: %.0f%% (%d/%d).", -- src\editor\commands.lua
|
||||
["Compile the current file"] = "Compilar arquivo atual", -- src\editor\menu_project.lua
|
||||
["Complete &Identifier"] = "Completar &identificador", -- src\editor\menu_edit.lua
|
||||
["Complete the current identifier"] = "Completar o identificador atual", -- src\editor\menu_edit.lua
|
||||
["Consider removing backslash from escape sequence '%s'."] = "Considere a remoção da contrabarra da sequência de escape '%s'.", -- src\editor\commands.lua
|
||||
["Copy Full Path"] = "Copiar o caminho completo", -- src\editor\gui.lua, src\editor\filetree.lua
|
||||
["Copy selected text to clipboard"] = "Copiar texto selecionado para a área de transfêrencia", -- src\editor\menu_edit.lua
|
||||
["Correct &Indentation"] = "Corr&igir recuo", -- src\editor\menu_edit.lua
|
||||
["Couldn't activate file '%s' for debugging; continuing without it."] = "Impossível ativar o arquivo '%s' para a depuração; continuando sem ele.", -- src\editor\debugger.lua
|
||||
["Create an empty document"] = "Criar um documento em branco", -- src\editor\menu_file.lua
|
||||
["Cu&t"] = "Recor&tar", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["Cut selected text to clipboard"] = "Recortar texto selecionado para a área de transfêrencia", -- src\editor\menu_edit.lua
|
||||
["Debugger server started at %s:%d."] = "Servidor de depuração iniciado em %s:%d.", -- src\editor\debugger.lua
|
||||
["Debugger server stopped at %s:%d."] = "Servidor de depuração interrompido em %s:%d.", -- src\editor\debugger.lua
|
||||
["Debugging session completed (%s)."] = "Sessão de depuração completada (%s).", -- src\editor\debugger.lua
|
||||
["Debugging session started in '%s'."] = "Sessão de depuração iniciada em '%s'.", -- src\editor\debugger.lua
|
||||
["Debugging suspended at '%s:%s' (couldn't activate the file)."] = "Depuração suspendida em '%s:%s' (impossível ativar o arquivo).", -- src\editor\debugger.lua
|
||||
["Detach &Process"] = "Separar &processo", -- src\editor\menu_project.lua
|
||||
["Directory"] = "Pasta", -- src\editor\findreplace.lua
|
||||
["Do you want to delete '%s'?"] = "Deseja mesmo apagar '%s'?", -- src\editor\filetree.lua
|
||||
["Do you want to overwrite it?"] = "Deseja mesmo sobrescrevê-lo?", -- src\editor\commands.lua
|
||||
["Do you want to reload it?"] = "Deseja mesmo atualizá-lo?", -- src\editor\editor.lua
|
||||
["Do you want to save the changes to '%s'?"] = "Deseja salvar as alterações em '%s'?", -- src\editor\commands.lua
|
||||
["E&xit"] = "Sair", -- src\editor\menu_file.lua
|
||||
["Enter Lua code and press Enter to run it."] = "Digite o código Lua e pressione Enter para executá-lo.", -- src\editor\shellbox.lua
|
||||
["Enter command line parameters (use Cancel to clear)"] = "Digite os parâmetros da linha de comandos (use Cancelar para limpar)", -- src\editor\menu_project.lua
|
||||
["Enter replacement text"] = "Digite o texto para substituir", -- src\editor\editor.lua
|
||||
["Error while loading API file: %s"] = "Erro ao carregar arquivo de API: %s", -- src\editor\autocomplete.lua
|
||||
["Error while loading configuration file: %s"] = "Erro ao carregar arquivo de configuração: %s", -- src\editor\style.lua
|
||||
["Error while processing API file: %s"] = "Erro ao processar arquivo de API: %s", -- src\editor\autocomplete.lua
|
||||
["Error while processing configuration file: %s"] = "Erro ao processar arquivo de configuração: %s", -- src\editor\style.lua
|
||||
["Error"] = "Erro", -- src\editor\commands.lua
|
||||
["Evaluate In Console"] = "Executar no console", -- src\editor\editor.lua
|
||||
["Execute the current project/file and keep updating the code to see immediate results"] = "Executar o projeto/arquivo atual, mantendo o código atualizado para ver os resultados em tempo real", -- src\editor\menu_project.lua
|
||||
["Execute the current project/file"] = "Executar o projeto/arquivo atual", -- src\editor\menu_project.lua
|
||||
["Execution error"] = "Erro na execução", -- src\editor\debugger.lua
|
||||
["Exit program"] = "Sair do programa", -- src\editor\menu_file.lua
|
||||
["File '%s' has been modified on disk."] = "Arquivo '%s' foi alterado no disco.", -- src\editor\editor.lua
|
||||
["File '%s' has more recent timestamp than restored '%s'; please review before saving."] = "Arquivo '%s' possui uma data mais recente do que o restaurado '%s'; verifique antes de salvar.", -- src\editor\commands.lua
|
||||
["File '%s' is missing and can't be recovered."] = "Arquivo '%s' está faltando e não pode ser restaurado.", -- src\editor\commands.lua
|
||||
["File '%s' no longer exists."] = "Arquivo '%s' não existe mais.", -- src\editor\menu_file.lua, src\editor\editor.lua
|
||||
["File Type"] = "Tipo de arquivo", -- src\editor\findreplace.lua
|
||||
["File already exists."] = "Arquivo já existe", -- src\editor\commands.lua
|
||||
["File history"] = "Histórico do arquivo", -- src\editor\menu_file.lua
|
||||
["Find &In Files"] = "Local&izar em arquivos", -- src\editor\menu_search.lua
|
||||
["Find &Next"] = "Localizar próximo", -- src\editor\menu_search.lua
|
||||
["Find &Previous"] = "Localizar anterior", -- src\editor\menu_search.lua
|
||||
["Find In Files"] = "Localizar em arquivos", -- src\editor\findreplace.lua
|
||||
["Find and insert library function"] = "Localizar e inserir função de biblioteca", -- src\editor\menu_search.lua
|
||||
["Find and replace text in files"] = "Localizar e substituir texto em arquivos", -- src\editor\menu_search.lua
|
||||
["Find and replace text"] = "Localizar e substituir texto", -- src\editor\menu_search.lua
|
||||
["Find text in files"] = "Localizar texto em arquivos", -- src\editor\menu_search.lua
|
||||
["Find text"] = "Localizar texto", -- src\editor\menu_search.lua
|
||||
["Find the earlier text occurence"] = "Localizar a ocorrência anterior do texto", -- src\editor\menu_search.lua
|
||||
["Find the next text occurrence"] = "Localizar a ocorrência posterior do texto", -- src\editor\menu_search.lua
|
||||
["Find"] = "Localizar", -- src\editor\findreplace.lua
|
||||
["Fold or unfold all code folds"] = "Expandir ou recolher todos os blocos do código", -- src\editor\menu_edit.lua
|
||||
["Found auto-recovery record and restored saved session."] = "Registro de autorrecuperação encontrado e sessão restaurada.", -- src\editor\commands.lua
|
||||
["Found"] = "Encontrado", -- src\editor\findreplace.lua
|
||||
["Full &Screen"] = "Tela inteira", -- src\editor\menu_view.lua
|
||||
["Go To Definition"] = "Ir para a definição", -- src\editor\editor.lua
|
||||
["Go To File..."] = "Ir para o arquivo...", -- src\editor\menu_search.lua
|
||||
["Go To Line..."] = "Ir para a linha...", -- src\editor\menu_search.lua
|
||||
["Go To Next Bookmark"] = "Ir para o próximo marcador", -- src\editor\menu_edit.lua
|
||||
["Go To Previous Bookmark"] = "Ir para o marcador anterior", -- src\editor\menu_edit.lua
|
||||
["Go To Symbol..."] = "Ir para o símbolo...", -- src\editor\menu_search.lua
|
||||
["Go to file"] = "Ir para o arquivo", -- src\editor\menu_search.lua
|
||||
["Go to line"] = "Ir para a linha", -- src\editor\menu_search.lua
|
||||
["Go to symbol"] = "Ir para o símbolo", -- src\editor\menu_search.lua
|
||||
["Hide '.%s' Files"] = "Ocultar arquivos '.%s'", -- src\editor\filetree.lua
|
||||
["INS"] = "INS", -- src\editor\editor.lua
|
||||
["Ignored error in debugger initialization code: %s."] = "Erro ignorado no código de inicialização do depurador: %s.", -- src\editor\debugger.lua
|
||||
["In Files"] = "Em arquivos", -- src\editor\findreplace.lua
|
||||
["Insert Library Function..."] = "Inserir função de biblioteca...", -- src\editor\menu_search.lua
|
||||
["Known Files"] = "Arquivos conhecidos", -- src\editor\commands.lua
|
||||
["Ln: %d"] = "Ln: %d", -- src\editor\editor.lua
|
||||
["Local console"] = "Console local", -- src\editor\gui.lua, src\editor\shellbox.lua
|
||||
["Lua &Interpreter"] = "&Interpretador Lua", -- src\editor\menu_project.lua
|
||||
["Mapped remote request for '%s' to '%s'."] = "Solicitação remota '%s' mapeada para '%s'.", -- src\editor\debugger.lua
|
||||
["Match &case"] = "Diferenciar maiúsc/minúsc", -- src\editor\findreplace.lua
|
||||
["Match &whole word"] = "Somente palavras inteiras", -- src\editor\findreplace.lua
|
||||
["Mixed end-of-line encodings detected."] = "Multíplas codificações de fim-de-linha encontradas.", -- src\editor\commands.lua
|
||||
["Navigate"] = "Navegar", -- src\editor\menu_search.lua
|
||||
["New &File"] = "Novo arquivo", -- src\editor\filetree.lua
|
||||
["OVR"] = "OVR", -- src\editor\editor.lua
|
||||
["Open With Default Program"] = "Abrir com o programa padrão", -- src\editor\filetree.lua
|
||||
["Open an existing document"] = "Abrir um documento existente", -- src\editor\menu_file.lua
|
||||
["Open file"] = "Abrir arquivo", -- src\editor\commands.lua
|
||||
["Options"] = "Opções", -- src\editor\findreplace.lua
|
||||
["Outline Window"] = "Saída", -- src\editor\menu_view.lua
|
||||
["Outline"] = "Definições", -- src\editor\outline.lua
|
||||
["Output (running)"] = "Saída (executando)", -- src\editor\debugger.lua, src\editor\output.lua
|
||||
["Output (suspended)"] = "Saída (suspendido)", -- src\editor\debugger.lua
|
||||
["Output"] = "Saída", -- src\editor\debugger.lua, src\editor\output.lua, src\editor\gui.lua, src\editor\settings.lua
|
||||
["Paste text from the clipboard"] = "Colar texto da área de transfêrencia", -- src\editor\menu_edit.lua
|
||||
["Preferences"] = "Preferências", -- src\editor\menu_edit.lua
|
||||
["Prepend '!' to force local execution."] = "Prefixe com '!' para forçar a execução local.", -- src\editor\shellbox.lua
|
||||
["Prepend '=' to show complex values on multiple lines."] = "Prefixe com '=' para exibir valores complexos em multíplas linhas.", -- src\editor\shellbox.lua
|
||||
["Press cancel to abort."] = "Pressionar cancelar para abortar.", -- src\editor\commands.lua
|
||||
["Program '%s' started in '%s' (pid: %d)."] = "Programa '%s' iniciado em '%s' (pid: %d).", -- src\editor\output.lua
|
||||
["Program can't start because conflicting process is running as '%s'."] = "Impossível iniciar programa porque um processo conflitante está em execução como '%s'.", -- src\editor\output.lua
|
||||
["Program completed in %.2f seconds (pid: %d)."] = "Programa completado em %.2f segundos (pid: %d).", -- src\editor\output.lua
|
||||
["Program starting as '%s'."] = "Iniciando programa como '%s'.", -- src\editor\output.lua
|
||||
["Program stopped (pid: %d)."] = "Programa interrompido (pid: %d).", -- src\editor\debugger.lua
|
||||
["Program unable to run as '%s'."] = "Impossível de executar programa como '%s'.", -- src\editor\output.lua
|
||||
["Project Directory"] = "Pasta do projeto", -- src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Project history"] = "Histórico do projeto", -- src\editor\menu_file.lua
|
||||
["Project"] = "Projeto", -- src\editor\filetree.lua
|
||||
["Project/&FileTree Window"] = "Projeto/Hierarquia de arquivos", -- src\editor\menu_view.lua
|
||||
["Provide command line parameters"] = "Informar os parâmetros da linha de comandos", -- src\editor\menu_project.lua
|
||||
["R/O"] = "R/O", -- src\editor\editor.lua
|
||||
["R/W"] = "R/W", -- src\editor\editor.lua
|
||||
["Re&place In Files"] = "Substituir em arquivos", -- src\editor\menu_search.lua
|
||||
["Re-indent selected lines"] = "Inserir recuos nas linhas selecionadas", -- src\editor\menu_edit.lua
|
||||
["Recent &Projects"] = "&Projetos recentes", -- src\editor\menu_file.lua
|
||||
["Recent Files"] = "Arquivos recentes", -- src\editor\menu_file.lua
|
||||
["Redo last edit undone"] = "Refazer última edição desfeita", -- src\editor\menu_edit.lua
|
||||
["Refused a request to start a new debugging session as there is one in progress already."] = "Solicitação de início de uma nova sessão de depuração recusado porque já existe um em progresso.", -- src\editor\debugger.lua
|
||||
["Regular &expression"] = "&Expressão regular", -- src\editor\findreplace.lua
|
||||
["Remote console"] = "Console remoto", -- src\editor\shellbox.lua
|
||||
["Rename All Instances"] = "Renomear todas as instâncias", -- src\editor\editor.lua
|
||||
["Replace A&ll"] = "Substituir tudo", -- src\editor\findreplace.lua
|
||||
["Replace All Selections"] = "Substituir todas as seleções", -- src\editor\editor.lua
|
||||
["Replace"] = "Substituir", -- src\editor\findreplace.lua
|
||||
["Replaced an invalid UTF8 character with %s."] = "Caractere UTF8 inválido susbtituído por %s.", -- src\editor\commands.lua
|
||||
["Replaced"] = "Substituído", -- src\editor\findreplace.lua
|
||||
["Replacing"] = "Substituindo", -- src\editor\findreplace.lua
|
||||
["Reset to default layout"] = "Redefinir painéis para o padrão", -- src\editor\menu_view.lua
|
||||
["Run As Scratchpad"] = "Executar como rascunho", -- src\editor\menu_project.lua
|
||||
["Run as Scratchpad"] = "Executar como rascunho", -- src\editor\menu_project.lua
|
||||
["S&top Debugging"] = "In&terromper depuração", -- src\editor\menu_project.lua
|
||||
["S&top Process"] = "In&terromper processo", -- src\editor\menu_project.lua
|
||||
["Save &As..."] = "S&alvar como...", -- src\editor\gui.lua, src\editor\menu_file.lua
|
||||
["Save A&ll"] = "Sa&lvar tudo", -- src\editor\menu_file.lua
|
||||
["Save Changes?"] = "Salvar alterações?", -- src\editor\commands.lua
|
||||
["Save all open documents"] = "Salvar todos os documentos abertos", -- src\editor\menu_file.lua
|
||||
["Save file as"] = "Salvar arquivo como", -- src\editor\commands.lua
|
||||
["Save file?"] = "Salvar arquivo?", -- src\editor\commands.lua
|
||||
["Save the current document to a file with a new name"] = "Salvar documento atual para um arquivo com outro nome", -- src\editor\menu_file.lua
|
||||
["Save the current document"] = "Salvar documento atual", -- src\editor\menu_file.lua
|
||||
["Saved auto-recover at %s."] = "Autorrecuperação salvo às %s.", -- src\editor\commands.lua
|
||||
["Scope"] = "Direção", -- src\editor\findreplace.lua
|
||||
["Scratchpad error"] = "Erro no rascunho", -- src\editor\debugger.lua
|
||||
["Searching for"] = "Localizando por", -- src\editor\findreplace.lua
|
||||
["Sel: %d/%d"] = "Sel: %d/%d", -- src\editor\editor.lua
|
||||
["Select &All"] = "Selecion&ar tudo", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["Select all text in the editor"] = "Selecionar todo o texto do editor", -- src\editor\menu_edit.lua
|
||||
["Select And Find Next"] = "Selecionar e localizar próxima", -- src\editor\menu_search.lua
|
||||
["Select And Find Previous"] = "Selecionar e localizar anterior", -- src\editor\menu_search.lua
|
||||
["Select the word under cursor and find its next occurrence"] = "Selecionar palavra no cursor e localizar sua próxima ocorrência", -- src\editor\menu_search.lua
|
||||
["Select the word under cursor and find its previous occurrence"] = "Selecionar palavra no cursor e localizar sua ocorrência anterior", -- src\editor\menu_search.lua
|
||||
["Set From Current File"] = "Alterar para o arquivo atual", -- src\editor\menu_project.lua
|
||||
["Set project directory from current file"] = "Alterar pasta do projeto para a pasta do arquivo atual", -- src\editor\menu_project.lua
|
||||
["Set the interpreter to be used"] = "Alterar interpretador a ser utilizado", -- src\editor\menu_project.lua
|
||||
["Set the project directory to be used"] = "Alterar pasta do projeto a ser utilizado", -- src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Settings: System"] = "Opções: Sistema", -- src\editor\menu_edit.lua
|
||||
["Settings: User"] = "Opções: Usuário", -- src\editor\menu_edit.lua
|
||||
["Show &Tooltip"] = "Exibir dica", -- src\editor\menu_edit.lua
|
||||
["Show All Files"] = "Exibir todos os arquivos", -- src\editor\filetree.lua
|
||||
["Show Hidden Files"] = "Exibir arquivos ocultos", -- src\editor\filetree.lua
|
||||
["Show Location"] = "Exibir pasta no sistema", -- src\editor\gui.lua, src\editor\filetree.lua
|
||||
["Show all files"] = "Exibir todos os arquivos", -- src\editor\filetree.lua
|
||||
["Show files previously hidden"] = "Exibir arquivos anteriormente ocultos", -- src\editor\filetree.lua
|
||||
["Show tooltip for current position; place cursor after opening bracket of function"] = "Exibir dica para a posição atual; posicione o cursor após abrir o parênteses da função", -- src\editor\menu_edit.lua
|
||||
["Show/Hide the status bar"] = "Exibir/Ocultar a barra de status", -- src\editor\menu_view.lua
|
||||
["Show/Hide the toolbar"] = "Exibir/Ocultar a barra de ferramentas", -- src\editor\menu_view.lua
|
||||
["Sort selected lines"] = "Ordenar linhas selecionadas", -- src\editor\menu_edit.lua
|
||||
["Source"] = "Código", -- src\editor\menu_edit.lua
|
||||
["Stack"] = "Pilha de execução", -- src\editor\debugger.lua
|
||||
["Start &Debugging"] = "Iniciar &depuração", -- src\editor\menu_project.lua
|
||||
["Start or continue debugging"] = "Iniciar ou continuar depuração", -- src\editor\menu_project.lua
|
||||
["Step &Into"] = "Passar para dentro", -- src\editor\menu_project.lua
|
||||
["Step &Over"] = "Passar s&obre", -- src\editor\menu_project.lua
|
||||
["Step O&ut"] = "Passar para fora", -- src\editor\menu_project.lua
|
||||
["Step into"] = "Passar para dentro", -- src\editor\menu_project.lua
|
||||
["Step out of the current function"] = "Passar para fora da função atual", -- src\editor\menu_project.lua
|
||||
["Step over"] = "Passar para fora", -- src\editor\menu_project.lua
|
||||
["Stop debugging and continue running the process"] = "Interromper depuração e continuar executando o processo", -- src\editor\menu_project.lua
|
||||
["Stop the currently running process"] = "Interromper o processo atual em execução", -- src\editor\menu_project.lua
|
||||
["Switch to or from full screen mode"] = "Entrar/Sair do modo tela inteira", -- src\editor\menu_view.lua
|
||||
["Text not found."] = "Texto não encontrado.", -- src\editor\findreplace.lua
|
||||
["The API file must be located in a subdirectory of the API directory."] = "O arquivo de API deve estar localizado em uma subpasta da pasta de API", -- src\editor\autocomplete.lua
|
||||
["Toggle Bookmark"] = "Alternar marcador", -- src\editor\menu_edit.lua
|
||||
["Toggle Break&point"] = "Alternar &ponto de interrupção", -- src\editor\menu_project.lua
|
||||
["Toggle bookmark"] = "Alternar marcador", -- src\editor\menu_edit.lua
|
||||
["Toggle breakpoint"] = "Alternar ponto de interrupção", -- src\editor\menu_project.lua
|
||||
["Tr&ace"] = "R&astrear", -- src\editor\menu_project.lua
|
||||
["Trace execution showing each executed line"] = "Rastrear execução exibindo cada linha de código executada", -- src\editor\menu_project.lua
|
||||
["Unable to create directory '%s'."] = "Impossível criar pasta '%s'.", -- src\editor\filetree.lua
|
||||
["Unable to create file '%s'."] = "Impossível criar arquivo '%s'.", -- src\editor\filetree.lua
|
||||
["Unable to delete directory '%s': %s"] = "Impossível apagar a pasta '%s': %s", -- src\editor\filetree.lua
|
||||
["Unable to load file '%s'."] = "Impossível carregar o arquivo '%s'.", -- src\editor\commands.lua
|
||||
["Unable to rename file '%s'."] = "Impossível renomear o arquivo '%s'.", -- src\editor\filetree.lua
|
||||
["Unable to save file '%s': %s"] = "Impossível salvar o arquivo '%s': %s", -- src\editor\commands.lua
|
||||
["Unable to stop program (pid: %d), code %d."] = "Impossível de interromper programa (pid: %d), código %d.", -- src\editor\debugger.lua
|
||||
["Undo last edit"] = "Refazer última edição", -- src\editor\menu_edit.lua
|
||||
["Use '%s' to see full description."] = "Use '%s' para ver a descrição completa.", -- src\editor\editor.lua
|
||||
["Use '%s' to show line endings and '%s' to convert them."] = "Use '%s' para exibir os finais de linha e '%s' para convertê-los.", -- src\editor\commands.lua
|
||||
["Use 'clear' to clear the shell output and the history."] = "Use 'clear' para limpar a saída e o histórico.", -- src\editor\shellbox.lua
|
||||
["Use Shift-Enter for multiline code."] = "Usar Shift-Enter para adicionar uma nova linha ao código.", -- src\editor\shellbox.lua
|
||||
["View the outline window"] = "Exibir a janela de definições", -- src\editor\menu_view.lua
|
||||
["View the output/console window"] = "Exibir a janela de saída/console", -- src\editor\menu_view.lua
|
||||
["View the project/filetree window"] = "Exibir janela do projeto/hierarquia de arquivos", -- src\editor\menu_view.lua
|
||||
["View the stack window"] = "Exibir janela da pilha de execução", -- src\editor\menu_view.lua
|
||||
["View the watch window"] = "Exibir janela do observador", -- src\editor\menu_view.lua
|
||||
["Watch"] = "Observador", -- src\editor\debugger.lua
|
||||
["Welcome to the interactive Lua interpreter."] = "Bem-vindo ao interpretador do Lua.", -- src\editor\shellbox.lua
|
||||
["Wrap ar&ound"] = "Repetir direção", -- src\editor\findreplace.lua
|
||||
["You must save the program first."] = "Você deve salvar o programa primeiro.", -- src\editor\commands.lua
|
||||
["Zoom In"] = "Ampliar", -- src\editor\menu_view.lua
|
||||
["Zoom Out"] = "Afastar", -- src\editor\menu_view.lua
|
||||
["Zoom to 100%"] = "Ir para 100%", -- src\editor\menu_view.lua
|
||||
["Zoom"] = "Zoom", -- src\editor\menu_view.lua
|
||||
["on line %d"] = "na linha %d", -- src\editor\debugger.lua, src\editor\editor.lua, src\editor\commands.lua
|
||||
["traced %d instruction"] = {"%d instrução rastreada", "%d instruções rastreadas"}, -- src\editor\debugger.lua
|
||||
["unknown error"] = "erro desconhecido", -- src\editor\debugger.lua
|
||||
}
|
||||
196
cfg/i18n/ru.lua
196
cfg/i18n/ru.lua
@@ -1,15 +1,21 @@
|
||||
return {
|
||||
[0] = function(c) c = (c-9)%100 < 9 and 9 or (c-1)%10 return c == 0 and 1 or c < 4 and 2 or 3 end, -- plural
|
||||
["%d instance"] = {"%d совпадение", "%d совпадения", "%d совпадений"}, -- src\editor\findreplace.lua
|
||||
["%s event failed: %s"] = "%s обработчик события вернул ошибку: %s", -- src\editor\package.lua
|
||||
["&About"] = "&О программе", -- src\editor\menu_help.lua
|
||||
["&Add Watch"] = "&Добавить выражение", -- src\editor\debugger.lua
|
||||
["&Break"] = "Пр&ервать", -- src\editor\menu_project.lua
|
||||
["&Close Page"] = "&Закрыть", -- src\editor\menu_file.lua, src\editor\gui.lua
|
||||
["&Close Page"] = "&Закрыть", -- src\editor\gui.lua, src\editor\menu_file.lua
|
||||
["&Community"] = nil, -- src\editor\menu_help.lua
|
||||
["&Compile"] = "&Компилировать", -- src\editor\menu_project.lua
|
||||
["&Copy"] = "&Копировать", -- src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Copy"] = "&Копировать", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Default Layout"] = "Вид по &умолчанию", -- src\editor\menu_view.lua
|
||||
["&Delete Watch"] = "&Удалить выражение", -- src\editor\debugger.lua
|
||||
["&Delete"] = "&Удалить", -- src\editor\filetree.lua
|
||||
["&Documentation"] = "Документация", -- src\editor\menu_help.lua
|
||||
["&Down"] = "Вниз", -- src\editor\findreplace.lua
|
||||
["&Edit Project Directory"] = "&Редактировать папку проекта", -- src\editor\filetree.lua
|
||||
["&Edit Value"] = "&Редактировать значение", -- src\editor\debugger.lua
|
||||
["&Edit Watch"] = "&Редактировать выражение", -- src\editor\debugger.lua
|
||||
["&Edit"] = "&Правка", -- src\editor\menu_edit.lua
|
||||
["&File"] = "&Файл", -- src\editor\menu_file.lua
|
||||
@@ -17,77 +23,101 @@ return {
|
||||
["&Find Next"] = "Найти далее", -- src\editor\findreplace.lua
|
||||
["&Find"] = "&Найти", -- src\editor\menu_search.lua
|
||||
["&Fold/Unfold All"] = "Св&ернуть/развернуть все", -- src\editor\menu_edit.lua
|
||||
["&Goto Line"] = "&Перейти к строке", -- src\editor\menu_search.lua
|
||||
["&Frequently Asked Questions"] = "&Часто задаваемые вопросы", -- src\editor\menu_help.lua
|
||||
["&Getting Started Guide"] = nil, -- src\editor\menu_help.lua
|
||||
["&Help"] = "&Справка", -- src\editor\menu_help.lua
|
||||
["&New Directory"] = "&Новая папка", -- src\editor\filetree.lua
|
||||
["&New"] = "Соз&дать", -- src\editor\menu_file.lua
|
||||
["&Open..."] = "&Открыть...", -- src\editor\menu_file.lua
|
||||
["&Output/Console Window"] = "Окно &вывода/консоли", -- src\editor\menu_view.lua
|
||||
["&Paste"] = "В&ставить", -- src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Project"] = "Пр&оект", -- src\editor\menu_project.lua, src\editor\inspect.lua
|
||||
["&Redo"] = "Верну&ть", -- src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Paste"] = "В&ставить", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Project Page"] = "Страница проекта", -- src\editor\menu_help.lua
|
||||
["&Project"] = "Пр&оект", -- src\editor\menu_project.lua
|
||||
["&Redo"] = "Верну&ть", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Rename"] = "Переименовать", -- src\editor\filetree.lua
|
||||
["&Replace All"] = "Заменить всe", -- src\editor\findreplace.lua
|
||||
["&Replace"] = "За&менить", -- src\editor\findreplace.lua, src\editor\menu_search.lua
|
||||
["&Run"] = "За&пустить", -- src\editor\menu_project.lua
|
||||
["&Save"] = "&Сохранить", -- src\editor\menu_file.lua, src\editor\gui.lua
|
||||
["&Save"] = "&Сохранить", -- src\editor\gui.lua, src\editor\menu_file.lua
|
||||
["&Search"] = "По&иск", -- src\editor\menu_search.lua
|
||||
["&Sort"] = "&Cортировать", -- src\editor\menu_search.lua
|
||||
["&Sort"] = "&Cортировать", -- src\editor\menu_edit.lua
|
||||
["&Stack Window"] = "Окно &стека", -- src\editor\menu_view.lua
|
||||
["&Start Debugger Server"] = "Запустить сервер отла&дки", -- src\editor\menu_project.lua
|
||||
["&Status Bar"] = "Панель состояния", -- src\editor\menu_view.lua
|
||||
["&Subdirectories"] = "В папках", -- src\editor\findreplace.lua
|
||||
["&Undo"] = "&Отменить", -- src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Tool Bar"] = "Панель инструментов", -- src\editor\menu_view.lua
|
||||
["&Tutorials"] = "&Обучающие материалы", -- src\editor\menu_help.lua
|
||||
["&Undo"] = "&Отменить", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Up"] = "Вверх", -- src\editor\findreplace.lua
|
||||
["&View"] = "&Вид", -- src\editor\menu_view.lua
|
||||
["&Watch Window"] = "Окно &выражений", -- src\editor\menu_view.lua
|
||||
[".&bak on Replace"] = ".&bak после замены", -- src\editor\findreplace.lua
|
||||
["About %s"] = "О %s", -- src\editor\menu_help.lua
|
||||
["Add Watch Expression"] = "Добавить выражение", -- src\editor\editor.lua
|
||||
["Add To Scratchpad"] = "Добавить в черновик", -- src\editor\editor.lua
|
||||
["Add Watch Expression"] = "Добавить выражение", -- src\editor\editor.lua
|
||||
["All files"] = "Все файлы", -- src\editor\commands.lua
|
||||
["Allow external process to start debugging"] = "Разрешить внешнему процессу начать отладку", -- src\editor\menu_project.lua
|
||||
["Analyze the source code"] = "Проанализировать исходный код", -- src\editor\inspect.lua
|
||||
["Analyze"] = "Анализировать", -- src\editor\inspect.lua
|
||||
["Auto Complete Identifiers"] = "Автодополнение идентификаторов", -- src\editor\menu_edit.lua
|
||||
["Auto complete while typing"] = "Автоматически дополнять идентификаторы при наборе", -- src\editor\menu_edit.lua
|
||||
["Break execution at the next executed line of code"] = "Прервать выполнение на следующей строке", -- src\editor\menu_project.lua, src\editor\gui.lua
|
||||
["C&lear Output Window"] = "Очистка ок&на вывода", -- src\editor\menu_project.lua
|
||||
["Bookmark"] = "Закладка", -- src\editor\menu_edit.lua
|
||||
["Break execution at the next executed line of code"] = "Прервать выполнение на следующей строке", -- src\editor\menu_project.lua
|
||||
["C&lear Output Window"] = "Очистка ок&на вывода", -- src\editor\gui.lua, src\editor\menu_project.lua
|
||||
["C&omment/Uncomment"] = "Зако&мментировать/раскомментировать", -- src\editor\menu_edit.lua
|
||||
["Can't debug the script in the active editor window."] = "Невозможно отладить скрипт в текущем окне редактирования.", -- src\editor\debugger.lua
|
||||
["Can't find file '%s' in the current project to activate for debugging. Update the project or open the file in the editor before debugging."] = "Файл '%s', необходимый для отладки, не найден в текущем проекте. Обновите проект или откройте файл в редакторе перед началом отладки.", -- src\editor\debugger.lua
|
||||
["Can't evaluate the expression while the application is running."] = "Невозможно вычеслить значение выражения пока приложение выполняется.", -- src\editor\debugger.lua
|
||||
["Can't open file '%s': %s"] = "Ошибка открытия файла '%s': %s", -- src\editor\singleinstance.lua
|
||||
["Can't process auto-recovery record; invalid format: %s."] = "Ошибка обработки записи автоматического восстановления; неверный формат: %s.", -- src\editor\commands.lua
|
||||
["Can't run the entry point script ('%s')."] = "Ошибка выполнения стартового скрипта ('%s').", -- src\editor\debugger.lua
|
||||
["Can't start debugger server at %s:%d: %s."] = "Невозможно запустить сервер отладки %s:%d: %s", -- src\editor\debugger.lua
|
||||
["Can't start debugging for '%s'."] = "Невозможно начать отладку для '%s'.", -- src\editor\debugger.lua
|
||||
["Can't start debugging session due to internal error '%s'."] = "Невозможно начать отладочную сессию из-за внутренней ошибки '%s'.", -- src\editor\debugger.lua
|
||||
["Can't start debugging without an opened file or with the current file not being saved ('%s')."] = "Невозможно начать отладку без открытого файла или с несохраненным текущим файлом ('%s').", -- src\editor\debugger.lua
|
||||
["Can't stop debugger server as it is not started."] = "Невозможно остановить сервер отладки пока он не запущен", -- src\editor\debugger.lua
|
||||
["Cancel"] = "Отмена", -- src\editor\findreplace.lua
|
||||
["Choose ..."] = "Выбрать ...", -- src\editor\menu_project.lua
|
||||
["Choose a project directory"] = "Выберите папку проекта", -- src\editor\findreplace.lua, src\editor\menu_project.lua
|
||||
["Clear &Dynamic Words"] = "Очистить &динамические слова", -- src\editor\menu_edit.lua
|
||||
["Cancelled by the user."] = "Отменено пользователем.", -- src\editor\findreplace.lua
|
||||
["Choose a directory to map"] = "Выберите папку для добавления в список", -- src\editor\filetree.lua
|
||||
["Choose a project directory"] = "Выберите папку проекта", -- src\editor\findreplace.lua, src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Choose..."] = "Выбрать...", -- src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Clear Items"] = "Очистить список", -- src\editor\menu_file.lua
|
||||
["Clear items from this list"] = "Удалить элементы из списка", -- src\editor\menu_file.lua
|
||||
["Clear the output window before compiling or debugging"] = "Очистить окно вывода перед компиляцией или отладкой", -- src\editor\menu_project.lua
|
||||
["Close &Other Pages"] = "Закрыть &остальные вкладки", -- src\editor\gui.lua
|
||||
["Close A&ll Pages"] = "Закрыть &все вкладки", -- src\editor\gui.lua
|
||||
["Close the current editor window"] = "Закрыть текущее окно редактирования", -- src\editor\menu_file.lua
|
||||
["Co&ntinue"] = "Пр&одолжить", -- src\editor\menu_project.lua
|
||||
["Col: %d"] = "Стб: %d", -- src\editor\editor.lua
|
||||
["Command Line Parameters..."] = "Параметры командной строки...", -- src\editor\menu_project.lua
|
||||
["Command line parameters"] = "Параметры командной строки", -- src\editor\menu_project.lua
|
||||
["Comment or uncomment current or selected lines"] = "Закомментировать или раскомментировать текущую или выделенные строки", -- src\editor\menu_edit.lua
|
||||
["Compilation error"] = "Ошибка компиляции", -- src\editor\debugger.lua, src\editor\commands.lua
|
||||
["Compilation error"] = "Ошибка компиляции", -- src\editor\commands.lua, src\editor\debugger.lua
|
||||
["Compilation successful; %.0f%% success rate (%d/%d)."] = "Компиляция завершена успешно; процент успеха: %.0f%% (%d/%d).", -- src\editor\commands.lua
|
||||
["Compile the current file"] = "Скомпилировать текущий файл", -- src\editor\menu_project.lua
|
||||
["Complete &Identifier"] = "Дополнить &идентификатор", -- src\editor\menu_edit.lua
|
||||
["Complete the current identifier"] = "Дополнить текущий идентификатор", -- src\editor\menu_edit.lua
|
||||
["Consider removing backslash from escape sequence '%s'."] = "Рассмотрите вариант удаления backslash из строки '%s'.", -- src\editor\commands.lua
|
||||
["Copy Full Path"] = "Скопировать полный путь", -- src\editor\gui.lua, src\editor\filetree.lua
|
||||
["Copy selected text to clipboard"] = "Скопировать выделенный текст в буфер обмена", -- src\editor\menu_edit.lua
|
||||
["Correct &Indentation"] = "Откорректировать отступ", -- src\editor\menu_edit.lua
|
||||
["Couldn't activate file '%s' for debugging; continuing without it."] = "Невозможно открыть файл '%s' для отладки; выполнение будет продолжено без него.", -- src\editor\debugger.lua
|
||||
["Create an empty document"] = "Создать новый документ", -- src\editor\menu_file.lua, src\editor\gui.lua
|
||||
["Cu&t"] = "Вы&резать", -- src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["Create an empty document"] = "Создать новый документ", -- src\editor\menu_file.lua
|
||||
["Cu&t"] = "Вы&резать", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["Cut selected text to clipboard"] = "Вырезать выделенный текст в буфер обмена", -- src\editor\menu_edit.lua
|
||||
["Debugger server started at %s:%d."] = "Сервер отладки запущен на %s:%d.", -- src\editor\debugger.lua
|
||||
["Debugger server stopped at %s:%d."] = "Сервер отладки остановлен %s:%d.", -- src\editor\debugger.lua
|
||||
["Debugging session completed (%s)."] = "Отладочная сессия завершена (%s).", -- src\editor\debugger.lua
|
||||
["Debugging session started in '%s'."] = "Отладочная сессия запущена в '%s'.", -- src\editor\debugger.lua
|
||||
["Debugging suspended at %s:%s (couldn't activate the file)."] = "Отладка остановлена на %s:%s (невозможно открыть файл).", -- src\editor\debugger.lua
|
||||
["Debugging suspended at '%s:%s' (couldn't activate the file)."] = "Отладка остановлена в '%s:%s' (невозможно активировать файл).", -- src\editor\debugger.lua
|
||||
["Detach &Process"] = "Отсоединить процесс", -- src\editor\menu_project.lua
|
||||
["Directory"] = "Папка", -- src\editor\findreplace.lua
|
||||
["Do you want to delete '%s'?"] = "Удалить '%s'?", -- src\editor\filetree.lua
|
||||
["Do you want to overwrite it?"] = "Переписать его?", -- src\editor\commands.lua
|
||||
["Do you want to reload it?"] = "Перезагрузить его?", -- src\editor\editor.lua
|
||||
["Do you want to save the changes to '%s'?"] = "Сохранить изменения в '%s'?", -- src\editor\commands.lua
|
||||
["E&xit"] = "Вы&ход", -- src\editor\menu_file.lua
|
||||
["Enter Lua code and press Enter to run it."] = "Введите код на Lua и нажмите Enter для выполнения.", -- src\editor\shellbox.lua
|
||||
["Enter line number"] = "Введите номер строки", -- src\editor\menu_search.lua
|
||||
["Enter command line parameters (use Cancel to clear)"] = "Введите параметры командной строки (Cancel чтобы очистить)", -- src\editor\menu_project.lua
|
||||
["Enter replacement text"] = "Введите текст замены", -- src\editor\editor.lua
|
||||
["Error while loading API file: %s"] = "Ошибка загрузки файла определений API: %s", -- src\editor\autocomplete.lua
|
||||
["Error while loading configuration file: %s"] = "Ошибка загрузки файла конфигурации: %s", -- src\editor\style.lua
|
||||
["Error while processing API file: %s"] = "Ошибка обработки файла определений API: %s", -- src\editor\autocomplete.lua
|
||||
@@ -98,21 +128,22 @@ return {
|
||||
["Execute the current project/file"] = "Запустить текущий проект/файл", -- src\editor\menu_project.lua
|
||||
["Execution error"] = "Ошибка выполнения", -- src\editor\debugger.lua
|
||||
["Exit program"] = "Выйти из программы", -- src\editor\menu_file.lua
|
||||
["Expr"] = "Выр.", -- src\editor\debugger.lua
|
||||
["Expression"] = "Выражение", -- src\editor\debugger.lua
|
||||
["File '%s' has been modified on disk."] = "Файл '%s' был изменен на диске.", -- src\editor\editor.lua
|
||||
["File '%s' has more recent timestamp than restored '%s'; please review before saving."] = "Файл '%s' имеет более позднее время модификации, чем восстановленный '%s'; пожалуйста просмотрите его перед сохранением.", -- src\editor\commands.lua
|
||||
["File '%s' no longer exists."] = "Файл '%s' больше не существует.", -- src\editor\editor.lua, src\editor\menu_file.lua
|
||||
["File '%s' is missing and can't be recovered."] = "Файл '%s' отсутствует и не может быть восстановлен.", -- src\editor\commands.lua
|
||||
["File '%s' no longer exists."] = "Файл '%s' больше не существует.", -- src\editor\menu_file.lua, src\editor\editor.lua
|
||||
["File Type"] = "Тип файла", -- src\editor\findreplace.lua
|
||||
["File already exists."] = "Файл уже существует.", -- src\editor\commands.lua
|
||||
["File history"] = "История файлов", -- src\editor\menu_file.lua
|
||||
["Find &In Files"] = "Н&айти в файлах", -- src\editor\menu_search.lua
|
||||
["Find &Next"] = "Найти &далее", -- src\editor\menu_search.lua
|
||||
["Find &Previous"] = "Найти &ранее", -- src\editor\menu_search.lua
|
||||
["Find In Files"] = "Найти в файлах", -- src\editor\findreplace.lua
|
||||
["Find and insert library function"] = "Найти и вставить библиотечную функцию", -- src\editor\menu_search.lua
|
||||
["Find and replace text in files"] = "Найти и заменить текст в файлах", -- src\editor\menu_search.lua
|
||||
["Find and replace text"] = "Найти и заменить текст", -- src\editor\menu_search.lua, src\editor\gui.lua
|
||||
["Find and replace text"] = "Найти и заменить текст", -- src\editor\menu_search.lua
|
||||
["Find text in files"] = "Найти текст в файлах", -- src\editor\menu_search.lua
|
||||
["Find text"] = "Найти текст", -- src\editor\menu_search.lua, src\editor\gui.lua
|
||||
["Find text"] = "Найти текст", -- src\editor\menu_search.lua
|
||||
["Find the earlier text occurence"] = "Найти предыдущее вхождение текста", -- src\editor\menu_search.lua
|
||||
["Find the next text occurrence"] = "Найти следующее вхождение текста", -- src\editor\menu_search.lua
|
||||
["Find"] = "Найти", -- src\editor\findreplace.lua
|
||||
@@ -120,27 +151,44 @@ return {
|
||||
["Found auto-recovery record and restored saved session."] = "Найдена запись авто-восстановления и восстановлена сохраненная сессия.", -- src\editor\commands.lua
|
||||
["Found"] = "Найдено", -- src\editor\findreplace.lua
|
||||
["Full &Screen"] = "Во весь экр&ан", -- src\editor\menu_view.lua
|
||||
["Go to a selected line"] = "Перейти к заданной строке", -- src\editor\menu_search.lua
|
||||
["Goto Line"] = "Перейти к строке", -- src\editor\menu_search.lua
|
||||
["Go To Definition"] = "Перейти к определению", -- src\editor\editor.lua
|
||||
["Go To File..."] = "Перейти к файлу...", -- src\editor\menu_search.lua
|
||||
["Go To Line..."] = "Перейти к строке...", -- src\editor\menu_search.lua
|
||||
["Go To Next Bookmark"] = "Перейти к следующей закладке", -- src\editor\menu_edit.lua
|
||||
["Go To Previous Bookmark"] = "Перейти к предыдущей закладке", -- src\editor\menu_edit.lua
|
||||
["Go To Symbol..."] = "Перейти к символу...", -- src\editor\menu_search.lua
|
||||
["Go to file"] = "Перейти к файлу", -- src\editor\menu_search.lua
|
||||
["Go to line"] = "Перейти к строке", -- src\editor\menu_search.lua
|
||||
["Go to symbol"] = "Перейти к символу", -- src\editor\menu_search.lua
|
||||
["Hide '.%s' Files"] = "Спрятать '.%s' файлы", -- src\editor\filetree.lua
|
||||
["INS"] = "ВСТ", -- src\editor\editor.lua
|
||||
["Ignored error in debugger initialization code: %s."] = nil, -- src\editor\debugger.lua
|
||||
["In Files"] = "Установки файлов", -- src\editor\findreplace.lua
|
||||
["Jump to a function definition..."] = "Перейти к определению функции...", -- src\editor\editor.lua
|
||||
["Insert Library Function..."] = "Вставить библиотечную функцию...", -- src\editor\menu_search.lua
|
||||
["Known Files"] = "Файлы Lua", -- src\editor\commands.lua
|
||||
["Ln: %d"] = "Стр: %d", -- src\editor\editor.lua
|
||||
["Local console"] = "Локальная консоль", -- src\editor\shellbox.lua, src\editor\gui.lua
|
||||
["Local console"] = "Локальная консоль", -- src\editor\gui.lua, src\editor\shellbox.lua
|
||||
["Lua &Interpreter"] = "&Интерпретатор Lua", -- src\editor\menu_project.lua
|
||||
["Map Directory..."] = "Добавить папку в список", -- src\editor\filetree.lua
|
||||
["Mapped remote request for '%s' to '%s'."] = "Удаленный запрос для '%s' отображен на '%s'.", -- src\editor\debugger.lua
|
||||
["Match &case"] = "Совпадение регистра", -- src\editor\findreplace.lua
|
||||
["Match &whole word"] = "Совпадение целого слова", -- src\editor\findreplace.lua
|
||||
["Mixed end-of-line encodings detected."] = "Обнаружены смешанные символы конца строки.", -- src\editor\commands.lua
|
||||
["Navigate"] = "Перейти", -- src\editor\menu_search.lua
|
||||
["New &File"] = "Новый файл", -- src\editor\filetree.lua
|
||||
["OVR"] = "ЗАМ", -- src\editor\editor.lua
|
||||
["Open an existing document"] = "Открыть существующий документ", -- src\editor\menu_file.lua, src\editor\gui.lua
|
||||
["Open With Default Program"] = "Открыть используя программу по умолчанию", -- src\editor\filetree.lua
|
||||
["Open an existing document"] = "Открыть существующий документ", -- src\editor\menu_file.lua
|
||||
["Open file"] = "Открыть файл", -- src\editor\commands.lua
|
||||
["Options"] = "Установки", -- src\editor\findreplace.lua
|
||||
["Output (running)"] = "Вывод (запущен)", -- src\editor\output.lua
|
||||
["Output"] = "Вывод", -- src\editor\output.lua, src\editor\settings.lua, src\editor\gui.lua
|
||||
["Outline Window"] = "Окно структуры", -- src\editor\menu_view.lua
|
||||
["Outline"] = "Структура", -- src\editor\outline.lua
|
||||
["Output (running)"] = "Вывод (запущен)", -- src\editor\debugger.lua, src\editor\output.lua
|
||||
["Output (suspended)"] = "Вывод (приостановлен)", -- src\editor\debugger.lua
|
||||
["Output"] = "Вывод", -- src\editor\debugger.lua, src\editor\output.lua, src\editor\gui.lua, src\editor\settings.lua
|
||||
["Paste text from the clipboard"] = "Вставить текст из буфера обмена", -- src\editor\menu_edit.lua
|
||||
["Preferences"] = "Настройки", -- src\editor\menu_edit.lua
|
||||
["Prepend '!' to force local execution."] = "Укажите '=' в начале выражения для выполнения в локальной консоли", -- src\editor\shellbox.lua
|
||||
["Prepend '=' to show complex values on multiple lines."] = "Укажите '=' в начале выражения для отображения сложных значений на нескольких строках.", -- src\editor\shellbox.lua
|
||||
["Press cancel to abort."] = "Нажмите Отмена для завершения.", -- src\editor\commands.lua
|
||||
["Program '%s' started in '%s' (pid: %d)."] = "Программа '%s' запущена в '%s' (pid: %d).", -- src\editor\output.lua
|
||||
@@ -149,84 +197,120 @@ return {
|
||||
["Program starting as '%s'."] = "Программа запускается как '%s'.", -- src\editor\output.lua
|
||||
["Program stopped (pid: %d)."] = "Программа завершена (pid: %d).", -- src\editor\debugger.lua
|
||||
["Program unable to run as '%s'."] = "Программа не может быть запущена как '%s'.", -- src\editor\output.lua
|
||||
["Project Directory"] = "Папка проекта", -- src\editor\menu_project.lua
|
||||
["Project"] = "Проект", -- src\editor\settings.lua, src\editor\gui.lua
|
||||
["Project Directory"] = "Папка проекта", -- src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Project history"] = "История проектов", -- src\editor\menu_file.lua
|
||||
["Project"] = "Проект", -- src\editor\filetree.lua
|
||||
["Project/&FileTree Window"] = "Окно &проекта/списка файлов", -- src\editor\menu_view.lua
|
||||
["Provide command line parameters"] = "Установить параметры командной строки", -- src\editor\menu_project.lua
|
||||
["R/O"] = "R/O", -- src\editor\editor.lua
|
||||
["R/W"] = "R/W", -- src\editor\editor.lua
|
||||
["Re&place In Files"] = "Замени&ть в файлах", -- src\editor\menu_search.lua
|
||||
["Re-indent selected lines"] = "Исправить отступ в выделенных строчках", -- src\editor\menu_edit.lua
|
||||
["Recent &Projects"] = "Недавние &проекты", -- src\editor\menu_file.lua
|
||||
["Recent Files"] = "Недавние файлы", -- src\editor\menu_file.lua
|
||||
["Redo last edit undone"] = "Вернуть последнее отмененное изменение", -- src\editor\menu_edit.lua
|
||||
["Refused a request to start a new debugging session as there is one in progress already."] = "Отказано в запросе на запуск новой отладочной сессии, поскольку одна сессия уже выполняется.", -- src\editor\debugger.lua
|
||||
["Regular &expression"] = "Регулярное выражение", -- src\editor\findreplace.lua
|
||||
["Remote console"] = "Удаленная консоль", -- src\editor\shellbox.lua
|
||||
["Replace &All"] = "Заменить все", -- src\editor\findreplace.lua
|
||||
["Rename All Instances"] = "Переименовать все совпадения", -- src\editor\editor.lua
|
||||
["Replace A&ll"] = "Заменить все", -- src\editor\findreplace.lua
|
||||
["Replace All Selections"] = "Заменить все выделенные фрагменты", -- src\editor\editor.lua
|
||||
["Replace"] = "Заменить", -- src\editor\findreplace.lua
|
||||
["Replaced an invalid UTF8 character with %s."] = "Некорректный символ UTF8 заменен на %s.", -- src\editor\commands.lua
|
||||
["Replaced"] = "Заменено", -- src\editor\findreplace.lua
|
||||
["Replacing"] = "Замена", -- src\editor\findreplace.lua
|
||||
["Reset to default layout"] = "Установить расположение окон по умолчанию", -- src\editor\menu_view.lua
|
||||
["Resets the dynamic word list for autocompletion"] = "Очистить список динамических слов для автодополнения", -- src\editor\menu_edit.lua
|
||||
["Run as Scratchpad"] = "Запустить как черновик", -- src\editor\menu_project.lua
|
||||
["Run As Scratchpad"] = "Запустить как черновик", -- src\editor\menu_project.lua
|
||||
["Run To Cursor"] = "Выполнить до курсора", -- src\editor\menu_project.lua
|
||||
["Run as Scratchpad"] = "Запустить как черновик", -- src\editor\toolbar.lua
|
||||
["Run to cursor"] = "Выполнить до курсора", -- src\editor\menu_project.lua
|
||||
["S&top Debugging"] = "&Завершить отладку", -- src\editor\menu_project.lua
|
||||
["S&top Process"] = "&Завершить процесс", -- src\editor\menu_project.lua
|
||||
["Save &As..."] = "Сохранить &как...", -- src\editor\menu_file.lua, src\editor\gui.lua
|
||||
["Save &As..."] = "Сохранить &как...", -- src\editor\gui.lua, src\editor\menu_file.lua
|
||||
["Save A&ll"] = "Сохранить &все", -- src\editor\menu_file.lua
|
||||
["Save Changes?"] = "Сохранить изменения?", -- src\editor\commands.lua
|
||||
["Save all open documents"] = "Сохранить все открытые документы", -- src\editor\menu_file.lua, src\editor\gui.lua
|
||||
["Save all open documents"] = "Сохранить все открытые документы", -- src\editor\menu_file.lua
|
||||
["Save file as"] = "Сохранить файл как", -- src\editor\commands.lua
|
||||
["Save file?"] = "Сохранить файл?", -- src\editor\commands.lua
|
||||
["Save the current document to a file with a new name"] = "Сохранить текущий документ в файл под новым именем", -- src\editor\menu_file.lua
|
||||
["Save the current document"] = "Сохранить текущий документ", -- src\editor\menu_file.lua, src\editor\gui.lua
|
||||
["Save the current document"] = "Сохранить текущий документ", -- src\editor\menu_file.lua
|
||||
["Saved auto-recover at %s."] = "Сохранено авто-восст в %s.", -- src\editor\commands.lua
|
||||
["Scope"] = "Направление", -- src\editor\findreplace.lua
|
||||
["Scratchpad error"] = "Ошибка в черновике", -- src\editor\debugger.lua
|
||||
["Searching for"] = "Поиск", -- src\editor\findreplace.lua
|
||||
["Select &All"] = "Выделить &все", -- src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["Sel: %d/%d"] = "Выд: %d/%d", -- src\editor\editor.lua
|
||||
["Select &All"] = "Выделить &все", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["Select And Find Next"] = "Выделить и найти далее", -- src\editor\menu_search.lua
|
||||
["Select And Find Previous"] = "Выделить и найти ранее", -- src\editor\menu_search.lua
|
||||
["Select all text in the editor"] = "Выделить весь текст в редакторе", -- src\editor\menu_edit.lua
|
||||
["Select the word under cursor and find its next occurrence"] = "Выделить слово под курсором и найти далее", -- src\editor\menu_search.lua
|
||||
["Select the word under cursor and find its previous occurrence"] = "Выделить слово под курсором и найти ранее", -- src\editor\menu_search.lua
|
||||
["Set As Start File"] = "Установить как файл запуска", -- src\editor\filetree.lua
|
||||
["Set From Current File"] = "Установить по текущему файлу", -- src\editor\menu_project.lua
|
||||
["Set project directory from current file"] = "Установить папку проекта по текущему файлу", -- src\editor\menu_project.lua, src\editor\gui.lua
|
||||
["Set project directory from current file"] = "Установить папку проекта по текущему файлу", -- src\editor\menu_project.lua
|
||||
["Set the interpreter to be used"] = "Установить используемый интерпретатор", -- src\editor\menu_project.lua
|
||||
["Set the project directory to be used"] = "Установить используемую папку проекта", -- src\editor\menu_project.lua
|
||||
["Set the project directory to be used"] = "Установить используемую папку проекта", -- src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Settings: System"] = "Установки: Системы", -- src\editor\menu_edit.lua
|
||||
["Settings: User"] = "Установки: Пользователя", -- src\editor\menu_edit.lua
|
||||
["Show &Tooltip"] = "Показать &подсказку", -- src\editor\menu_edit.lua
|
||||
["Show All Files"] = "Показать все файлы", -- src\editor\filetree.lua
|
||||
["Show Hidden Files"] = "Показать спрятанные файлы", -- src\editor\filetree.lua
|
||||
["Show Location"] = "Показать файл в папке", -- src\editor\gui.lua, src\editor\filetree.lua
|
||||
["Show all files"] = "Показать все файлы", -- src\editor\filetree.lua
|
||||
["Show files previously hidden"] = "Показать ранее спрятанные файлы", -- src\editor\filetree.lua
|
||||
["Show tooltip for current position; place cursor after opening bracket of function"] = "Показать подсказку в текущей позиции; переместите курсор в позицию после открывающей скобки функции", -- src\editor\menu_edit.lua
|
||||
["Sort selected lines"] = "Отсортировать выделенные строки", -- src\editor\menu_search.lua
|
||||
["Show/Hide the status bar"] = "Показать/спрятать панель состояния", -- src\editor\menu_view.lua
|
||||
["Show/Hide the toolbar"] = "Показать/спрятать панель инструментов", -- src\editor\menu_view.lua
|
||||
["Sort selected lines"] = "Отсортировать выделенные строки", -- src\editor\menu_edit.lua
|
||||
["Source"] = "Исходный код", -- src\editor\menu_edit.lua
|
||||
["Stack"] = "Стек", -- src\editor\debugger.lua
|
||||
["Start &Debugging"] = "Начать &отладку", -- src\editor\menu_project.lua
|
||||
["Start debugging"] = "Начать отладку", -- src\editor\menu_project.lua, src\editor\gui.lua
|
||||
["Start or continue debugging"] = "Начать или продолжить отладку", -- src\editor\menu_project.lua
|
||||
["Step &Into"] = "&Войти", -- src\editor\menu_project.lua
|
||||
["Step &Over"] = "&Следующая строка", -- src\editor\menu_project.lua
|
||||
["Step O&ut"] = "В&ыйти", -- src\editor\menu_project.lua
|
||||
["Step into"] = "Войти в функцию", -- src\editor\menu_project.lua, src\editor\gui.lua
|
||||
["Step out of the current function"] = "Выйти из текущей функции", -- src\editor\menu_project.lua, src\editor\gui.lua
|
||||
["Step over"] = "Перейти на следующую строку", -- src\editor\menu_project.lua, src\editor\gui.lua
|
||||
["Stop the currently running process"] = "Завершить текущий процесс", -- src\editor\menu_project.lua, src\editor\gui.lua
|
||||
["Step into"] = "Войти в функцию", -- src\editor\menu_project.lua
|
||||
["Step out of the current function"] = "Выйти из текущей функции", -- src\editor\menu_project.lua
|
||||
["Step over"] = "Перейти на следующую строку", -- src\editor\menu_project.lua
|
||||
["Stop debugging and continue running the process"] = "Завершить отладку и продолжить текущий процесс", -- src\editor\menu_project.lua
|
||||
["Stop the currently running process"] = "Завершить текущий процесс", -- src\editor\menu_project.lua
|
||||
["Switch to or from full screen mode"] = "Переключить полноэкранный режим", -- src\editor\menu_view.lua
|
||||
["Text not found."] = "Текст не найден.", -- src\editor\findreplace.lua
|
||||
["The API file must be located in a subdirectory of the API directory."] = "Файл определений API должен быть расположен внутри папки API.", -- src\editor\autocomplete.lua
|
||||
["Toggle Bookmark"] = "Установить/Снять закладку", -- src\editor\menu_edit.lua
|
||||
["Toggle Break&point"] = "&Точка останова", -- src\editor\menu_project.lua
|
||||
["Toggle breakpoint"] = "Переключить точку останова", -- src\editor\menu_project.lua, src\editor\gui.lua
|
||||
["Toggle bookmark"] = "Установить/Снять закладку", -- src\editor\menu_edit.lua
|
||||
["Toggle breakpoint"] = "Переключить точку останова", -- src\editor\menu_project.lua
|
||||
["Tr&ace"] = "Т&рассировка", -- src\editor\menu_project.lua
|
||||
["Trace execution showing each executed line"] = "Отслеживать выполнение, показывая каждую выполненную строку", -- src\editor\menu_project.lua
|
||||
["Unable to create directory '%s'."] = "Ошибка создания папки '%s'.", -- src\editor\filetree.lua
|
||||
["Unable to create file '%s'."] = "Ошибка создания файла '%s'.", -- src\editor\filetree.lua
|
||||
["Unable to delete directory '%s': %s"] = "Ошибка удаления директории '%s': %s", -- src\editor\filetree.lua
|
||||
["Unable to load file '%s'."] = "Ошибка загрузки файла '%s'.", -- src\editor\commands.lua
|
||||
["Unable to rename file '%s'."] = "Ошибка переименования файла '%s'.", -- src\editor\filetree.lua
|
||||
["Unable to save file '%s': %s"] = "Ошибка сохранения файла '%s': %s", -- src\editor\commands.lua
|
||||
["Unable to stop program (pid: %d), code %d."] = "Невозможно завершить программу (pid: %d), код %d.", -- src\editor\debugger.lua
|
||||
["Undo last edit"] = "Отменить последнее действие", -- src\editor\menu_edit.lua
|
||||
["Unmap Directory"] = "Убрать папку из списка", -- src\editor\filetree.lua
|
||||
["Unset '%s' As Start File"] = "Отменить '%s' как файл запуска", -- src\editor\filetree.lua
|
||||
["Use '%s' to see full description."] = "Используйте '%s' для полного описания.", -- src\editor\editor.lua
|
||||
["Use '%s' to show line endings and '%s' to convert them."] = "Используйте '%s' для отображения символов конца строки и '%s' для их преобразования.", -- src\editor\commands.lua
|
||||
["Use 'clear' to clear the shell output and the history."] = "Используйте команду 'clear' для очистки содержимого окна и истории.", -- src\editor\shellbox.lua
|
||||
["Use Shift-Enter for multiline code."] = "Используйте Shift-Enter для многострочного кода.", -- src\editor\shellbox.lua
|
||||
["Value"] = "Значение", -- src\editor\debugger.lua
|
||||
["View the outline window"] = "Показать окно структуры", -- src\editor\menu_view.lua
|
||||
["View the output/console window"] = "Показать окно вывода/консоли", -- src\editor\menu_view.lua
|
||||
["View the project/filetree window"] = "Показать окно проекта/списка файлов", -- src\editor\menu_view.lua
|
||||
["View the stack window"] = "Показать окно стека", -- src\editor\menu_view.lua, src\editor\gui.lua
|
||||
["View the watch window"] = "Показать окно выражений", -- src\editor\menu_view.lua, src\editor\gui.lua
|
||||
["View the stack window"] = "Показать окно стека", -- src\editor\menu_view.lua
|
||||
["View the watch window"] = "Показать окно выражений", -- src\editor\menu_view.lua
|
||||
["Watch"] = "Выражение", -- src\editor\debugger.lua
|
||||
["Welcome to the interactive Lua interpreter."] = "Добро пожаловать в интерактивный интерпретатор Lua.", -- src\editor\shellbox.lua
|
||||
["Wrap ar&ound"] = "Продолжить сначала", -- src\editor\findreplace.lua
|
||||
["You must save the program first."] = "Вы должны сначала сохранить программу.", -- src\editor\commands.lua
|
||||
["on line %d"] = "в строке %d", -- src\editor\debugger.lua, src\editor\commands.lua
|
||||
["Zoom In"] = "Приблизить", -- src\editor\menu_view.lua
|
||||
["Zoom Out"] = "Удалить", -- src\editor\menu_view.lua
|
||||
["Zoom to 100%"] = "Установить 100%", -- src\editor\menu_view.lua
|
||||
["Zoom"] = "Установить масштаб", -- src\editor\menu_view.lua
|
||||
["on line %d"] = "в строке %d", -- src\editor\debugger.lua, src\editor\editor.lua, src\editor\commands.lua
|
||||
["traced %d instruction"] = {"выполнена %d инструкция", "выполнено %d инструкции", "выполнено %d инструкций"}, -- src\editor\debugger.lua
|
||||
["unknown error"] = "неизвестная ошибка", -- src\editor\debugger.lua
|
||||
}
|
||||
|
||||
@@ -1,28 +1,29 @@
|
||||
--[[
|
||||
1. Pick a color scheme by clicking on its name:
|
||||
- [Tomorrow](macro:shell(ApplyStyleConfig('cfg/tomorrow.lua','Tomorrow')))
|
||||
- [TomorrowContrast](macro:shell(ApplyStyleConfig('cfg/tomorrow.lua','TomorrowContrast')))
|
||||
- [TomorrowNight](macro:shell(ApplyStyleConfig('cfg/tomorrow.lua','TomorrowNight')))
|
||||
- [TomorrowNightBlue](macro:shell(ApplyStyleConfig('cfg/tomorrow.lua','TomorrowNightBlue')))
|
||||
- [TomorrowNightBright](macro:shell(ApplyStyleConfig('cfg/tomorrow.lua','TomorrowNightBright')))
|
||||
- [TomorrowNightEighties](macro:shell(ApplyStyleConfig('cfg/tomorrow.lua','TomorrowNightEighties')))
|
||||
- [Zenburn](macro:shell(ApplyStyleConfig('cfg/tomorrow.lua','Zenburn')))
|
||||
- [Monokai](macro:shell(ApplyStyleConfig('cfg/tomorrow.lua','Monokai')))
|
||||
- [Molokai](macro:shell(ApplyStyleConfig('cfg/tomorrow.lua','Molokai')))
|
||||
- [SolarizedDark](macro:shell(ApplyStyleConfig('cfg/tomorrow.lua','SolarizedDark')))
|
||||
- [SolarizedLight](macro:shell(ApplyStyleConfig('cfg/tomorrow.lua','SolarizedLight')))
|
||||
- [Notepad++](macro:shell(ApplyStyleConfig('cfg/tomorrow.lua','NotepadPlusPlus')))
|
||||
- [Tomorrow](macro:inline(ApplyStyleConfig('cfg/tomorrow.lua','Tomorrow'); local c = ide.config; c.stylesoutshell = c.styles; c.styles.auxwindow = c.styles.text; ReApplySpecAndStyles()))
|
||||
- [TomorrowContrast](macro:inline(ApplyStyleConfig('cfg/tomorrow.lua','TomorrowContrast'); local c = ide.config; c.stylesoutshell = c.styles; c.styles.auxwindow = c.styles.text; ReApplySpecAndStyles()))
|
||||
- [TomorrowNight](macro:inline(ApplyStyleConfig('cfg/tomorrow.lua','TomorrowNight'); local c = ide.config; c.stylesoutshell = c.styles; c.styles.auxwindow = c.styles.text; ReApplySpecAndStyles()))
|
||||
- [TomorrowNightBlue](macro:inline(ApplyStyleConfig('cfg/tomorrow.lua','TomorrowNightBlue'); local c = ide.config; c.stylesoutshell = c.styles; c.styles.auxwindow = c.styles.text; ReApplySpecAndStyles()))
|
||||
- [TomorrowNightBright](macro:inline(ApplyStyleConfig('cfg/tomorrow.lua','TomorrowNightBright'); local c = ide.config; c.stylesoutshell = c.styles; c.styles.auxwindow = c.styles.text; ReApplySpecAndStyles()))
|
||||
- [TomorrowNightEighties](macro:inline(ApplyStyleConfig('cfg/tomorrow.lua','TomorrowNightEighties'); local c = ide.config; c.stylesoutshell = c.styles; c.styles.auxwindow = c.styles.text; ReApplySpecAndStyles()))
|
||||
- [Zenburn](macro:inline(ApplyStyleConfig('cfg/tomorrow.lua','Zenburn'); local c = ide.config; c.stylesoutshell = c.styles; c.styles.auxwindow = c.styles.text; ReApplySpecAndStyles()))
|
||||
- [Monokai](macro:inline(ApplyStyleConfig('cfg/tomorrow.lua','Monokai'); local c = ide.config; c.stylesoutshell = c.styles; c.styles.auxwindow = c.styles.text; ReApplySpecAndStyles()))
|
||||
- [Molokai](macro:inline(ApplyStyleConfig('cfg/tomorrow.lua','Molokai'); local c = ide.config; c.stylesoutshell = c.styles; c.styles.auxwindow = c.styles.text; ReApplySpecAndStyles()))
|
||||
- [SolarizedDark](macro:inline(ApplyStyleConfig('cfg/tomorrow.lua','SolarizedDark'); local c = ide.config; c.stylesoutshell = c.styles; c.styles.auxwindow = c.styles.text; ReApplySpecAndStyles()))
|
||||
- [SolarizedLight](macro:inline(ApplyStyleConfig('cfg/tomorrow.lua','SolarizedLight'); local c = ide.config; c.stylesoutshell = c.styles; c.styles.auxwindow = c.styles.text; ReApplySpecAndStyles()))
|
||||
- [Notepad++](macro:inline(ApplyStyleConfig('cfg/tomorrow.lua','NotepadPlusPlus'); local c = ide.config; c.stylesoutshell = c.styles; c.styles.auxwindow = c.styles.text; ReApplySpecAndStyles()))
|
||||
- [SciTeLuaIDE](macro:inline(ApplyStyleConfig('cfg/tomorrow.lua','SciTeLuaIDE'); local c = ide.config; c.stylesoutshell = c.styles; c.styles.auxwindow = c.styles.text; ReApplySpecAndStyles()))
|
||||
|
||||
- [ZeroBrane Studio](macro:shell(ide.config.styles = StylesGetDefault(); ReApplySpecAndStyles()))
|
||||
- [ZeroBrane Studio](macro:inline(ide.config.styles = StylesGetDefault(); local c = ide.config; c.stylesoutshell = c.styles; c.styles.auxwindow = {}; ReApplySpecAndStyles()))
|
||||
|
||||
2. [Apply the same scheme to Output/Console windows](macro:shell(ide.config.stylesoutshell = ide.config.styles; ReApplySpecAndStyles())).
|
||||
|
||||
3. Add the following code with the scheme you selected to `cfg/user.lua`.
|
||||
2. Add the following code with the scheme you selected to `cfg/user.lua`.
|
||||
--]]
|
||||
|
||||
local G = ...
|
||||
styles = G.loadfile('cfg/tomorrow.lua')('TomorrowNightBlue')
|
||||
stylesoutshell = styles -- also apply the same scheme to Output/Console windows
|
||||
stylesoutshell = styles -- apply the same scheme to Output/Console windows
|
||||
styles.auxwindow = styles.text -- apply text colors to auxiliary windows
|
||||
styles.calltip = styles.text -- apply text colors to tooltips
|
||||
|
||||
-- code example
|
||||
if false and true then func(1, 2, 3) end
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
-- This is a file that sets color scheme based on Tomorrow format.
|
||||
-- Copyright 2011-12 Paul Kulchenko, ZeroBrane LLC
|
||||
-- Copyright 2011-14 Paul Kulchenko, ZeroBrane LLC
|
||||
|
||||
-- Tomorrow colors from https://github.com/chriskempson/tomorrow-theme
|
||||
-- Zenburn colors from https://github.com/jnurmine/Zenburn/blob/master/colors/zenburn.vim (contributed by Srdjan Marković)
|
||||
-- Monokai colors from http://www.monokai.nl/blog/2006/07/15/textmate-color-theme/
|
||||
-- Molokai colors based on https://github.com/tomasr/molokai/blob/master/colors/molokai.vim
|
||||
-- Solarized colors from https://github.com/altercation/vim-colors-solarized
|
||||
|
||||
local theme = ...
|
||||
@@ -135,7 +136,7 @@ local colors = {
|
||||
Blue = H'F92672',
|
||||
Purple = H'A6E22E',
|
||||
},
|
||||
Molokai = { -- based on https://github.com/tomasr/molokai/blob/master/colors/molokai.vim
|
||||
Molokai = {
|
||||
Background = H'1B1D1E',
|
||||
CurrentLine = H'293739',
|
||||
Selection = H'49483E',
|
||||
@@ -180,16 +181,30 @@ local colors = {
|
||||
NotepadPlusPlus = { -- contributed by Florian (https://github.com/SiENcE)
|
||||
Background = H'FFFFFF',
|
||||
CurrentLine = H'E9E2FF',
|
||||
Selection = H'ADADA1',
|
||||
Selection = H'C0C0C0',
|
||||
Foreground = H'000000',
|
||||
Comment = H'008000',
|
||||
Red = H'FF6900',
|
||||
Orange = H'00FF00',
|
||||
Orange = H'FF0000',
|
||||
Yellow = H'FF4E00',
|
||||
Green = H'808080',
|
||||
Aqua = H'260099',
|
||||
Aqua = H'000080',
|
||||
Blue = H'2123FF',
|
||||
Purple = H'FFFFFF',
|
||||
Purple = H'8000FF',
|
||||
},
|
||||
SciTeLuaIDE = { -- contributed by Jayanth Acharya
|
||||
Background = H'1B1D1E',
|
||||
CurrentLine = H'293739',
|
||||
Selection = H'49483E',
|
||||
Foreground = H'F8F8F2', -- super-light-gray (everything else)
|
||||
Comment = H'00FF00', -- bright green (comments)
|
||||
Red = H'F92672', -- purple (numbers)
|
||||
Orange = H'AE81FF', -- lavendar?? (numbers)
|
||||
Yellow = H'F8F8F2', -- light-gray
|
||||
Green = H'FF8000', -- amber (string literal)
|
||||
Aqua = H'808080', -- gray (operators, separators etc.)
|
||||
Blue = H'0066FF', -- semi-blue (keywords)
|
||||
Purple = H'A6E22E', -- light-grass-green
|
||||
},
|
||||
}
|
||||
|
||||
@@ -245,15 +260,15 @@ return {
|
||||
calltip = nil,
|
||||
|
||||
-- common special (need custom fg & bg)
|
||||
calltipbg = nil,
|
||||
sel = {bg = C.Selection},
|
||||
caret = {fg = C.Foreground},
|
||||
caretlinebg = {bg = C.CurrentLine},
|
||||
fold = {fg = C.Comment, bg = C.Background, sel = mixer(C.Comment, 1, 96)},
|
||||
whitespace = {fg = C.Comment, bg = C.Background},
|
||||
edge = {},
|
||||
|
||||
indicator = {
|
||||
fncall = {fg = C.Purple, st = wxstc.wxSTC_INDIC_ROUNDBOX},
|
||||
fncall = {fg = C.Purple, st = wxstc.wxSTC_INDIC_HIDDEN},
|
||||
--[[ other possible values are:
|
||||
wxSTC_INDIC_PLAIN Single-line underline
|
||||
wxSTC_INDIC_SQUIGGLE Squiggly underline
|
||||
|
||||
@@ -9,7 +9,7 @@ See [configuration](http://studio.zerobrane.com/doc-configuration.html) page for
|
||||
|
||||
--]]--
|
||||
|
||||
-- an example of how loaded configuration can be modified from this file
|
||||
-- to modify loaded configuration for recognized extensions for lua files
|
||||
local G = ... -- this now points to the global environment in the script
|
||||
local luaspec = G.ide.specs['lua']
|
||||
luaspec.exts[#luaspec.exts+1] = "luaz"
|
||||
@@ -89,9 +89,9 @@ stylesoutshell = styles
|
||||
|
||||
-- to change markers used in console and output windows
|
||||
styles.marker = styles.marker or {}
|
||||
styles.marker.message = {ch = wxstc.wxSTC_MARK_ARROWS, {0, 0, 0}, {240, 240, 240}}
|
||||
styles.marker.output = {ch = wxstc.wxSTC_MARK_BACKGROUND, {0, 0, 0}, {240, 240, 240}}
|
||||
styles.marker.prompt = {ch = wxstc.wxSTC_MARK_CHARACTER+('>'):byte(), {0, 0, 0}, {240, 240, 240}}
|
||||
styles.marker.message = {ch = wxstc.wxSTC_MARK_ARROWS, fg = {0, 0, 0}, bg = {240, 240, 240}}
|
||||
styles.marker.output = {ch = wxstc.wxSTC_MARK_BACKGROUND, fg = {0, 0, 0}, bg = {240, 240, 240}}
|
||||
styles.marker.prompt = {ch = wxstc.wxSTC_MARK_CHARACTER+('>'):byte(), fg = {0, 0, 0}, bg = {240, 240, 240}}
|
||||
stylesoutshell = styles
|
||||
|
||||
-- to disable indicators (underlining) on function calls
|
||||
@@ -103,17 +103,17 @@ styles.indicator.fncall.fg = {240,0,0}
|
||||
-- to change the type of the indicator used for function calls
|
||||
styles.indicator.fncall.st = wxstc.wxSTC_INDIC_PLAIN
|
||||
--[[ other possible values are:
|
||||
wxSTC_INDIC_PLAIN Single-line underline
|
||||
wxSTC_INDIC_SQUIGGLE Squiggly underline
|
||||
wxSTC_INDIC_TT Line of small T-shapes
|
||||
wxSTC_INDIC_DIAGONAL Diagonal hatching
|
||||
wxSTC_INDIC_STRIKE Strike-out
|
||||
wxSTC_INDIC_BOX Box
|
||||
wxSTC_INDIC_ROUNDBOX Rounded Box
|
||||
wxSTC_INDIC_DOTS Dotted underline; wxSTC_INDIC_PLAIN Single-line underline
|
||||
wxSTC_INDIC_TT Line of Tshapes; wxSTC_INDIC_SQUIGGLE Squiggly underline
|
||||
wxSTC_INDIC_STRIKE Strike-out; wxSTC_INDIC_SQUIGGLELOW Squiggly underline (2 pixels)
|
||||
wxSTC_INDIC_BOX Box; wxSTC_INDIC_ROUNDBOX Rounded Box
|
||||
wxSTC_INDIC_DASH Dashed underline; wxSTC_INDIC_STRAIGHTBOX Box with trasparency
|
||||
wxSTC_INDIC_DOTBOX Dotted rectangle; wxSTC_INDIC_DIAGONAL Diagonal hatching
|
||||
wxSTC_INDIC_HIDDEN No visual effect;
|
||||
--]]
|
||||
|
||||
-- to enable additional spec files (like spec/cpp.lua)
|
||||
load.specs(function(file) return file:find('spec[/\\]cpp%.lua$') end)
|
||||
-- to enable additional spec files (like spec/glsl.lua)
|
||||
load.specs(function(file) return file:find('spec[/\\]glsl%.lua$') end)
|
||||
|
||||
-- to specify a default EOL encoding to be used for new files:
|
||||
-- `wxstc.wxSTC_EOL_CRLF` or `wxstc.wxSTC_EOL_LF`;
|
||||
@@ -140,3 +140,25 @@ editor.nomousezoom = true
|
||||
-- you can also change it between runs from Local Console by executing
|
||||
-- `ide.config.corona = {skin = 'iPad'}`
|
||||
corona = { skin = "iPad" }
|
||||
|
||||
-- to style individual keywords; `return` and `break` are shown in red
|
||||
local G = ... -- this now points to the global environment in the script
|
||||
local luaspec = G.ide.specs.lua
|
||||
|
||||
local num = #luaspec.keywords
|
||||
-- take a new slot in the list of keywords (starting from 1)
|
||||
luaspec.keywords[num+1] = 'return break'
|
||||
-- remove 'return' from the list of "regular" keywords
|
||||
luaspec.keywords[1] = luaspec.keywords[1]:gsub(' return', ''):gsub(' break', '')
|
||||
|
||||
-- assign new style to the added slot (starting from 0)
|
||||
styles["keywords"..num] = {fg = {240, 0, 0}, b = true}
|
||||
|
||||
-- enable `Opt+Shift+Left/Right` shortcut on OSX
|
||||
editor.keymap[#editor.keymap+1] = {wxstc.wxSTC_KEY_LEFT, wxstc.wxSTC_SCMOD_ALT+wxstc.wxSTC_SCMOD_SHIFT, wxstc.wxSTC_CMD_WORDLEFTEXTEND, "Macintosh"}
|
||||
editor.keymap[#editor.keymap+1] = {wxstc.wxSTC_KEY_RIGHT, wxstc.wxSTC_SCMOD_ALT+wxstc.wxSTC_SCMOD_SHIFT, wxstc.wxSTC_CMD_WORDRIGHTENDEXTEND, "Macintosh"}
|
||||
|
||||
-- enable Emacs bindings to use `Ctrl-A` and `Ctrl-E` to go to the line start/end
|
||||
editor.keymap[#editor.keymap+1] = {('A'):byte(), wxstc.wxSTC_SCMOD_CTRL, wxstc.wxSTC_CMD_HOME}
|
||||
editor.keymap[#editor.keymap+1] = {('E'):byte(), wxstc.wxSTC_SCMOD_CTRL, wxstc.wxSTC_CMD_LINEEND}
|
||||
keymap[ID.SELECTALL] = nil -- remove `Ctrl-A` shortcut from `SelectAll`
|
||||
|
||||
@@ -1,73 +0,0 @@
|
||||
--[[-- Copy snippets from this file to `user.lua` --]]--
|
||||
|
||||
--[[ Add a shortcut to generate `~` if your keyboard doesn't have one
|
||||
local G = ... -- this now points to the global environment in the script
|
||||
local ide, wx, TR, ID = G.ide, G.wx, G.TR, G.ID
|
||||
local postinit = ide.app.postinit
|
||||
ide.app.postinit = function()
|
||||
if postinit then postinit() end
|
||||
local menu = ide.frame.menuBar:GetMenu(ide.frame.menuBar:FindMenu(TR("&Edit")))
|
||||
menu:Append(ID "tilde", "Tilde\tAlt-'")
|
||||
ide.frame:Connect(ID "tilde", wx.wxEVT_COMMAND_MENU_SELECTED,
|
||||
function () GetEditor():AddText("~") end)
|
||||
end
|
||||
--]]
|
||||
|
||||
--[[ Add `Evaluate in Console` option to the Edit menu
|
||||
local G = ... -- this now points to the global environment in the script
|
||||
local ide, wx, TR, ID = G.ide, G.wx, G.TR, G.ID
|
||||
local postinit = ide.app.postinit
|
||||
ide.app.postinit = function()
|
||||
if postinit then postinit() end
|
||||
local menu = ide.frame.menuBar:GetMenu(ide.frame.menuBar:FindMenu(TR("&Edit")))
|
||||
menu:Append(ID "eval", "Evaluate in Console\tCtrl-E")
|
||||
ide.frame:Connect(ID "eval", wx.wxEVT_COMMAND_MENU_SELECTED,
|
||||
function () ShellExecuteCode(GetEditor():GetSelectedText()) end)
|
||||
ide.frame:Connect(ID "eval", wx.wxEVT_UPDATE_UI,
|
||||
function (event) event:Enable(GetEditor() and #GetEditor():GetSelectedText() > 0) end)
|
||||
end
|
||||
--]]
|
||||
|
||||
--[[ Add `Zoom` menu to increase/decrease/reset font in the editor
|
||||
local G = ... -- this now points to the global environment in the script
|
||||
local ide, wx, TR, ID = G.ide, G.wx, G.TR, G.ID
|
||||
local postinit = ide.app.postinit
|
||||
ide.app.postinit = function()
|
||||
if postinit then postinit() end
|
||||
|
||||
local zoomMenu = wx.wxMenu{
|
||||
{ID "zoomreset", "Zoom to 100%\tCtrl-0"},
|
||||
{ID "zoomin", "Zoom In\tCtrl-+"},
|
||||
{ID "zoomout", "Zoom Out\tCtrl--"},
|
||||
}
|
||||
local menu = ide.frame.menuBar:GetMenu(ide.frame.menuBar:FindMenu(TR("&View")))
|
||||
menu:Append(ID "zoom", "Zoom", zoomMenu)
|
||||
|
||||
ide.frame:Connect(ID "zoomreset", wx.wxEVT_COMMAND_MENU_SELECTED,
|
||||
function () GetEditor():SetZoom(1) end)
|
||||
ide.frame:Connect(ID "zoomin", wx.wxEVT_COMMAND_MENU_SELECTED,
|
||||
function () GetEditor():SetZoom(GetEditor():GetZoom()+1) end)
|
||||
ide.frame:Connect(ID "zoomout", wx.wxEVT_COMMAND_MENU_SELECTED,
|
||||
function () GetEditor():SetZoom(GetEditor():GetZoom()-1) end)
|
||||
|
||||
-- only enable if there is an editor
|
||||
for _, m in G.ipairs({"zoomreset", "zoomin", "zoomout"}) do
|
||||
ide.frame:Connect(ID(m), wx.wxEVT_UPDATE_UI,
|
||||
function (event) event:Enable(GetEditor() ~= nil) end)
|
||||
end
|
||||
end
|
||||
--]]
|
||||
|
||||
--[[ An example of how individual keywords can be styled
|
||||
local G = ... -- this now points to the global environment in the script
|
||||
local luaspec = G.ide.specs['lua']
|
||||
|
||||
local num = #luaspec.keywords
|
||||
-- take a new slot in the list of keywords (starting from 1)
|
||||
luaspec.keywords[num+1] = 'return'
|
||||
-- remove 'return' from the list of "regular" keywords
|
||||
luaspec.keywords[1] = luaspec.keywords[1]:gsub(' return', '')
|
||||
|
||||
-- assign new style to the added slot (starting from 0)
|
||||
styles["keywords"..num] = {fg = {240, 0, 0}, b = true}
|
||||
--]]
|
||||
60
interpreters/busted.lua
Normal file
60
interpreters/busted.lua
Normal file
@@ -0,0 +1,60 @@
|
||||
-- Copyright 2011-13 Paul Kulchenko, ZeroBrane LLC
|
||||
|
||||
local busted
|
||||
local win = ide.osname == "Windows"
|
||||
|
||||
return {
|
||||
name = "Busted",
|
||||
description = "Busted Lua testing",
|
||||
api = {"baselib"},
|
||||
frun = function(self,wfilename,rundebug)
|
||||
busted = busted or ide.config.path.busted -- check if the path is configured
|
||||
if not busted then
|
||||
local sep = win and ';' or ':'
|
||||
local path = (os.getenv('PATH') or '')..sep
|
||||
..(os.getenv('HOME') and os.getenv('HOME') .. '/bin' or '')
|
||||
local paths = {}
|
||||
for p in path:gmatch("[^"..sep.."]+") do
|
||||
busted = busted or GetFullPathIfExists(p, win and 'busted.exe' or 'busted')
|
||||
table.insert(paths, p)
|
||||
end
|
||||
if not busted then
|
||||
DisplayOutputLn("Can't find busted executable in any of the folders in PATH: "
|
||||
..table.concat(paths, ", "))
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
local file
|
||||
if rundebug then
|
||||
-- start running the application right away
|
||||
DebuggerAttachDefault({runstart = ide.config.debugger.runonstart == true})
|
||||
local code = (
|
||||
[=[xpcall(function() io.stdout:setvbuf('no')
|
||||
require('mobdebug').start(); dofile [[%s]]
|
||||
end, function(err) print(debug.traceback(err)) end)]=])
|
||||
:format(wfilename:GetFullPath())
|
||||
local tmpfile = wx.wxFileName()
|
||||
tmpfile:AssignTempFileName(".")
|
||||
file = tmpfile:GetFullPath()
|
||||
local f = io.open(file, "w")
|
||||
if not f then
|
||||
DisplayOutputLn("Can't open temporary file '"..file.."' for writing.")
|
||||
return
|
||||
end
|
||||
f:write(code)
|
||||
f:close()
|
||||
end
|
||||
|
||||
file = file or wfilename:GetFullPath()
|
||||
|
||||
local options = ide.config.busted and ide.config.busted.options
|
||||
or "--output=TAP"
|
||||
local cmd = ('"%s" %s "%s"'):format(busted, options, file)
|
||||
-- CommandLineRun(cmd,wdir,tooutput,nohide,stringcallback,uid,endcallback)
|
||||
return CommandLineRun(cmd,self:fworkdir(wfilename),true,false,nil,nil,
|
||||
function() if rundebug then wx.wxRemoveFile(file) end end)
|
||||
end,
|
||||
hasdebugger = true,
|
||||
fattachdebug = function(self) DebuggerAttachDefault() end,
|
||||
}
|
||||
@@ -13,10 +13,8 @@ return {
|
||||
if not corona then
|
||||
local sep = win and ';' or ':'
|
||||
local default =
|
||||
win and ([[C:\Program Files\Corona SDK]]..sep..[[D:\Program Files\Corona SDK]]..sep..
|
||||
[[C:\Program Files\Corona Labs\Corona SDK]]..sep..[[D:\Program Files\Corona Labs\Corona SDK]]..sep..
|
||||
[[C:\Program Files (x86)\Corona SDK]]..sep..[[D:\Program Files (x86)\Corona SDK]]..sep..
|
||||
[[C:\Program Files (x86)\Corona Labs\Corona SDK]]..sep..[[D:\Program Files (x86)\Corona Labs\Corona SDK]]..sep)
|
||||
win and (GenerateProgramFilesPath('Corona SDK', sep)..sep..
|
||||
GenerateProgramFilesPath('Corona Labs\\Corona SDK', sep)..sep)
|
||||
or mac and ('/Applications/CoronaSDK/Corona Simulator.app/Contents/MacOS'..sep)
|
||||
or ''
|
||||
local path = default
|
||||
@@ -28,21 +26,22 @@ return {
|
||||
table.insert(paths, p)
|
||||
end
|
||||
if not corona then
|
||||
DisplayOutput("Can't find corona executable in any of the folders in PATH: "
|
||||
..table.concat(paths, ", ").."\n")
|
||||
DisplayOutputLn("Can't find corona executable in any of the folders in PATH: "
|
||||
..table.concat(paths, ", "))
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
local file = GetFullPathIfExists(self:fworkdir(wfilename), 'main.lua')
|
||||
if not file then
|
||||
DisplayOutput("Can't find 'main.lua' file in the current project folder.\n")
|
||||
DisplayOutputLn(("Can't find 'main.lua' file in the current project folder: '%s'.")
|
||||
:format(self:fworkdir(wfilename)))
|
||||
return
|
||||
end
|
||||
|
||||
if rundebug then
|
||||
-- start running the application right away
|
||||
DebuggerAttachDefault({startwith = file, redirect = mac and "r" or "c",
|
||||
DebuggerAttachDefault({startwith = file, redirect = "r",
|
||||
runstart = ide.config.debugger.runonstart ~= false})
|
||||
|
||||
local function needRefresh(mdbl, mdbc)
|
||||
@@ -56,12 +55,13 @@ return {
|
||||
or MergeFullPath(GetPathWithSep(corona), "Resources/mobdebug.lua")
|
||||
local mdbl = MergeFullPath(GetPathWithSep(ide.editorFilename), "lualibs/mobdebug/mobdebug.lua")
|
||||
local needed = needRefresh(mdbl, mdbc)
|
||||
local mdbcplugin = win and MergeFullPath(wx.wxStandardPaths.Get():GetUserLocalDataDir(),
|
||||
"../../Roaming/Corona Labs/Corona Simulator/Plugins/mobdebug.lua")
|
||||
if needed then
|
||||
local copied = FileCopy(mdbl, mdbc)
|
||||
-- couldn't copy to the Resources/ folder; not have permissions?
|
||||
if not copied and win then
|
||||
mdbc = MergeFullPath(wx.wxStandardPaths.Get():GetUserLocalDataDir(),
|
||||
"../../Roaming/Corona Labs/Corona Simulator/Plugins/mobdebug.lua")
|
||||
mdbc = mdbcplugin
|
||||
needed = needRefresh(mdbl, mdbc)
|
||||
copied = needed and FileCopy(mdbl, mdbc)
|
||||
end
|
||||
@@ -74,22 +74,26 @@ return {
|
||||
if not copied then return end
|
||||
end
|
||||
end
|
||||
-- remove debugger if copied to plugin directory as it may be obsolete
|
||||
if mdbcplugin and mdbcplugin ~= mdbc and wx.wxFileExists(mdbcplugin) then
|
||||
wx.wxRemoveFile(mdbcplugin)
|
||||
end
|
||||
end
|
||||
|
||||
local cfg = ide.config.corona or {}
|
||||
local debugopt = mac and "-debug 1 -project " or "-debug "
|
||||
local skin = ide.config.corona and ide.config.corona.skin
|
||||
and (" -skin "..ide.config.corona.skin) or ""
|
||||
local cmd = ('"%s" %s"%s"%s')
|
||||
:format(corona, rundebug and debugopt or "", file, skin)
|
||||
local skin = cfg.skin and (" -skin "..ide.config.corona.skin) or ""
|
||||
local noconsole = (cfg.showconsole and ""
|
||||
or (win and "-no-console " or "-no-console YES "))
|
||||
local cmd = ('"%s" %s%s"%s"%s')
|
||||
:format(corona, noconsole, rundebug and debugopt or "", file, skin)
|
||||
|
||||
local uhw = ide.config.unhidewindow
|
||||
local cwc = uhw and uhw.ConsoleWindowClass
|
||||
if uhw and cfg.showconsole then uhw.ConsoleWindowClass = 0 end
|
||||
-- CommandLineRun(cmd,wdir,tooutput,nohide,stringcallback,uid,endcallback)
|
||||
return CommandLineRun(cmd,self:fworkdir(wfilename),true,false,nil,nil,
|
||||
function() ide.debugger.pid = nil end)
|
||||
end,
|
||||
fprojdir = function(self,wfilename)
|
||||
return wfilename:GetPath(wx.wxPATH_GET_VOLUME)
|
||||
end,
|
||||
fworkdir = function(self,wfilename)
|
||||
return ide.config.path.projectdir or wfilename:GetPath(wx.wxPATH_GET_VOLUME)
|
||||
return CommandLineRun(cmd,self:fworkdir(wfilename),true,true,nil,nil,
|
||||
function() if uhw and cfg.showconsole then uhw.ConsoleWindowClass = cwc end end)
|
||||
end,
|
||||
hasdebugger = true,
|
||||
fattachdebug = function(self) DebuggerAttachDefault() end,
|
||||
|
||||
@@ -9,7 +9,4 @@ return {
|
||||
|
||||
ShellExecuteFile(wfilename)
|
||||
end,
|
||||
fprojdir = function(self,wfilename)
|
||||
return wfilename:GetPath(wx.wxPATH_GET_VOLUME)
|
||||
end,
|
||||
}
|
||||
|
||||
@@ -29,8 +29,7 @@ return {
|
||||
if not gideros then
|
||||
local sep = win and ';' or ':'
|
||||
local default =
|
||||
win and ([[C:\Program Files\Gideros]]..sep..[[D:\Program Files\Gideros]]..sep..
|
||||
[[C:\Program Files (x86)\Gideros]]..sep..[[D:\Program Files (x86)\Gideros]]..sep)
|
||||
win and (GenerateProgramFilesPath('Gideros', sep)..sep)
|
||||
or mac and ('/Applications/Gideros Studio/Gideros Player.app/Contents/MacOS'..sep)
|
||||
or ''
|
||||
local path = default
|
||||
@@ -90,15 +89,14 @@ return {
|
||||
else
|
||||
local cmd = ('"%s"'):format(gideros)
|
||||
-- CommandLineRun(cmd,wdir,tooutput,nohide,stringcallback,uid,endcallback)
|
||||
pid = CommandLineRun(cmd,self:fworkdir(wfilename),not mac,true,nil,nil,
|
||||
function() ide.debugger.pid = nil end)
|
||||
pid = CommandLineRun(cmd,self:fworkdir(wfilename),not mac,true)
|
||||
if not pid then return end
|
||||
end
|
||||
|
||||
do
|
||||
DisplayOutputLn("Starting the player and waiting for the bridge to connect at '"..gdrbridge.."'.")
|
||||
local cmd = ('"%s" %s'):format(gdrbridge, 'isconnected')
|
||||
local attempts, connected = 12
|
||||
local attempts, connected = 15
|
||||
for _ = 1, attempts do
|
||||
local proc = wx.wxProcess()
|
||||
proc:Redirect()
|
||||
@@ -107,7 +105,7 @@ return {
|
||||
if not isValidPid(bid, cmd) then return end
|
||||
|
||||
local streamin = proc:GetInputStream()
|
||||
for _ = 1, 20 do
|
||||
for _ = 1, 30 do
|
||||
if streamin:CanRead() then
|
||||
connected = tonumber(streamin:Read(4096)) == 1
|
||||
break end
|
||||
@@ -137,12 +135,6 @@ return {
|
||||
end
|
||||
return pid
|
||||
end,
|
||||
fprojdir = function(self,wfilename)
|
||||
return wfilename:GetPath(wx.wxPATH_GET_VOLUME)
|
||||
end,
|
||||
fworkdir = function(self,wfilename)
|
||||
return ide.config.path.projectdir or wfilename:GetPath(wx.wxPATH_GET_VOLUME)
|
||||
end,
|
||||
hasdebugger = true,
|
||||
fattachdebug = function(self) DebuggerAttachDefault() end,
|
||||
scratchextloop = true,
|
||||
|
||||
@@ -11,10 +11,7 @@ return {
|
||||
gslshell = gslshell or ide.config.path.gslshell -- check if the path is configured
|
||||
if not gslshell then
|
||||
local sep = win and ';' or ':'
|
||||
local default =
|
||||
win and ([[C:\Program Files\gsl-shell]]..sep..[[D:\Program Files\gsl-shell]]..sep..
|
||||
[[C:\Program Files (x86)\gsl-shell]]..sep..[[D:\Program Files (x86)\gsl-shell]]..sep)
|
||||
or ''
|
||||
local default = win and GenerateProgramFilesPath('gsl-shell', sep)..sep or ''
|
||||
local path = default
|
||||
..(os.getenv('PATH') or '')..sep
|
||||
..(GetPathWithSep(self:fworkdir(wfilename)))..sep
|
||||
@@ -25,8 +22,8 @@ return {
|
||||
table.insert(paths, p)
|
||||
end
|
||||
if not gslshell then
|
||||
DisplayOutput("Can't find gsl-shell executable in any of the following folders: "
|
||||
..table.concat(paths, ", ").."\n")
|
||||
DisplayOutputLn("Can't find gsl-shell executable in any of the following folders: "
|
||||
..table.concat(paths, ", "))
|
||||
return
|
||||
end
|
||||
end
|
||||
@@ -51,23 +48,43 @@ return {
|
||||
end
|
||||
end
|
||||
|
||||
local filepath = wfilename:GetFullPath()
|
||||
if rundebug then
|
||||
DebuggerAttachDefault({runstart = ide.config.debugger.runonstart == true})
|
||||
end
|
||||
|
||||
local cmd = ('"%s" "%s"'):format(gslshell, wfilename:GetFullPath())
|
||||
local tmpfile = wx.wxFileName()
|
||||
tmpfile:AssignTempFileName(".")
|
||||
filepath = tmpfile:GetFullPath()
|
||||
local f = io.open(filepath, "w")
|
||||
if not f then
|
||||
DisplayOutputLn("Can't open temporary file '"..filepath.."' for writing.")
|
||||
return
|
||||
end
|
||||
f:write(rundebug)
|
||||
f:close()
|
||||
else
|
||||
-- if running on Windows and can't open the file, this may mean that
|
||||
-- the file path includes unicode characters that need special handling
|
||||
local fh = io.open(filepath, "r")
|
||||
if fh then fh:close() end
|
||||
if ide.osname == 'Windows' and pcall(require, "winapi")
|
||||
and wfilename:FileExists() and not fh then
|
||||
winapi.set_encoding(winapi.CP_UTF8)
|
||||
filepath = winapi.short_path(filepath)
|
||||
end
|
||||
end
|
||||
local params = ide.config.arg.any or ide.config.arg.gslshell
|
||||
local code = ([[-e "io.stdout:setvbuf('no')" "%s"]]):format(filepath)
|
||||
local cmd = '"'..gslshell..'" '..code..(params and " "..params or "")
|
||||
|
||||
-- CommandLineRun(cmd,wdir,tooutput,nohide,stringcallback,uid,endcallback)
|
||||
return CommandLineRun(cmd,self:fworkdir(wfilename),true,false,nil,nil,
|
||||
function() ide.debugger.pid = nil end)
|
||||
end,
|
||||
fprojdir = function(self,wfilename)
|
||||
return wfilename:GetPath(wx.wxPATH_GET_VOLUME)
|
||||
end,
|
||||
fworkdir = function(self,wfilename)
|
||||
return ide.config.path.projectdir or wfilename:GetPath(wx.wxPATH_GET_VOLUME)
|
||||
function() if rundebug then wx.wxRemoveFile(filepath) end end)
|
||||
end,
|
||||
hasdebugger = true,
|
||||
fattachdebug = function(self) DebuggerAttachDefault() end,
|
||||
skipcompile = true,
|
||||
unhideanywindow = true,
|
||||
scratchextloop = false,
|
||||
takeparameters = true,
|
||||
}
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
-- add `lfw = {chdirtofile = true}` to the configuration file to set file
|
||||
-- directory as the current one when Running or Debugging LuaForWindows projects.
|
||||
|
||||
if ide.osname ~= "Windows" or not os.getenv("LUA_DEV") then return end
|
||||
|
||||
local exe
|
||||
@@ -43,18 +46,15 @@ return {
|
||||
end
|
||||
|
||||
-- CommandLineRun(cmd,wdir,tooutput,nohide,stringcallback,uid,endcallback)
|
||||
local pid = CommandLineRun(cmd,self:fworkdir(wfilename),true,false,nil,nil,
|
||||
function() ide.debugger.pid = nil end)
|
||||
local pid = CommandLineRun(cmd,self:fworkdir(wfilename),true,false)
|
||||
|
||||
-- restore PATH
|
||||
wx.wxSetEnv("PATH", path)
|
||||
return pid
|
||||
end,
|
||||
fprojdir = function(self,wfilename)
|
||||
return wfilename:GetPath(wx.wxPATH_GET_VOLUME)
|
||||
end,
|
||||
fworkdir = function (self,wfilename)
|
||||
return wfilename:GetPath(wx.wxPATH_GET_VOLUME)
|
||||
return (not ide.config.lfw or ide.config.lfw.chdirtofile ~= true)
|
||||
and ide.config.path.projectdir or wfilename:GetPath(wx.wxPATH_GET_VOLUME)
|
||||
end,
|
||||
hasdebugger = true,
|
||||
fattachdebug = function(self) DebuggerAttachDefault() end,
|
||||
|
||||
@@ -13,8 +13,7 @@ return {
|
||||
if not love2d then
|
||||
local sep = win and ';' or ':'
|
||||
local default =
|
||||
win and ([[C:\Program Files\love]]..sep..[[D:\Program Files\love]]..sep..
|
||||
[[C:\Program Files (x86)\love]]..sep..[[D:\Program Files (x86)\love]]..sep)
|
||||
win and (GenerateProgramFilesPath('love', sep)..sep)
|
||||
or mac and ('/Applications/love.app/Contents/MacOS'..sep)
|
||||
or ''
|
||||
local path = default
|
||||
@@ -27,14 +26,15 @@ return {
|
||||
table.insert(paths, p)
|
||||
end
|
||||
if not love2d then
|
||||
DisplayOutput("Can't find love2d executable in any of the following folders: "
|
||||
..table.concat(paths, ", ").."\n")
|
||||
DisplayOutputLn("Can't find love2d executable in any of the following folders: "
|
||||
..table.concat(paths, ", "))
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
if not GetFullPathIfExists(self:fworkdir(wfilename), 'main.lua') then
|
||||
DisplayOutput("Can't find 'main.lua' file in the current project folder.\n")
|
||||
DisplayOutputLn(("Can't find 'main.lua' file in the current project folder: '%s'.")
|
||||
:format(self:fworkdir(wfilename)))
|
||||
return
|
||||
end
|
||||
|
||||
@@ -42,19 +42,20 @@ return {
|
||||
DebuggerAttachDefault({runstart = ide.config.debugger.runonstart == true})
|
||||
end
|
||||
|
||||
local cmd = ('"%s" "%s"%s'):format(love2d,
|
||||
self:fworkdir(wfilename), rundebug and ' -debug' or '')
|
||||
-- suppress hiding ConsoleWindowClass as this is used by Love console
|
||||
local uhw = ide.config.unhidewindow
|
||||
local cwc = uhw and uhw.ConsoleWindowClass
|
||||
if uhw then uhw.ConsoleWindowClass = 0 end
|
||||
|
||||
local params = ide.config.arg.any or ide.config.arg.love2d
|
||||
local cmd = ('"%s" "%s"%s%s'):format(love2d, self:fworkdir(wfilename),
|
||||
params and " "..params or "", rundebug and ' -debug' or '')
|
||||
-- CommandLineRun(cmd,wdir,tooutput,nohide,stringcallback,uid,endcallback)
|
||||
return CommandLineRun(cmd,self:fworkdir(wfilename),true,false,nil,nil,
|
||||
function() ide.debugger.pid = nil end)
|
||||
end,
|
||||
fprojdir = function(self,wfilename)
|
||||
return wfilename:GetPath(wx.wxPATH_GET_VOLUME)
|
||||
end,
|
||||
fworkdir = function(self,wfilename)
|
||||
return ide.config.path.projectdir or wfilename:GetPath(wx.wxPATH_GET_VOLUME)
|
||||
return CommandLineRun(cmd,self:fworkdir(wfilename),true,true,nil,nil,
|
||||
function() if uhw then uhw.ConsoleWindowClass = cwc end end)
|
||||
end,
|
||||
hasdebugger = true,
|
||||
fattachdebug = function(self) DebuggerAttachDefault() end,
|
||||
scratchextloop = true,
|
||||
takeparameters = true,
|
||||
}
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
function MakeLuaInterpreter(version, name)
|
||||
|
||||
local exe
|
||||
|
||||
local function exePath(self, version)
|
||||
local version = tostring(version):gsub('%.','')
|
||||
local mainpath = ide.editorFilename:gsub("[^/\\]+$","")
|
||||
local macExe = mainpath..([[bin/lua.app/Contents/MacOS/lua%s]]):format(version)
|
||||
return ide.config.path['lua'..version]
|
||||
@@ -14,13 +13,28 @@ end
|
||||
return {
|
||||
name = ("Lua%s"):format(name or version or ""),
|
||||
description = ("Lua%s interpreter with debugger"):format(name or version or ""),
|
||||
api = {"wxwidgets","baselib"},
|
||||
api = {"baselib"},
|
||||
luaversion = version or '5.1',
|
||||
fexepath = exePath,
|
||||
frun = function(self,wfilename,rundebug)
|
||||
exe = exe or self:fexepath(version or "")
|
||||
local exe = self:fexepath(version or "")
|
||||
local filepath = wfilename:GetFullPath()
|
||||
if rundebug then
|
||||
DebuggerAttachDefault({runstart = ide.config.debugger.runonstart == true})
|
||||
|
||||
-- update arg to point to the proper file
|
||||
rundebug = ('if arg then arg[0] = [[%s]] end '):format(filepath)..rundebug
|
||||
|
||||
local tmpfile = wx.wxFileName()
|
||||
tmpfile:AssignTempFileName(".")
|
||||
filepath = tmpfile:GetFullPath()
|
||||
local f = io.open(filepath, "w")
|
||||
if not f then
|
||||
DisplayOutputLn("Can't open temporary file '"..filepath.."' for writing.")
|
||||
return
|
||||
end
|
||||
f:write(rundebug)
|
||||
f:close()
|
||||
else
|
||||
-- if running on Windows and can't open the file, this may mean that
|
||||
-- the file path includes unicode characters that need special handling
|
||||
@@ -32,34 +46,42 @@ return {
|
||||
filepath = winapi.short_path(filepath)
|
||||
end
|
||||
end
|
||||
local code = rundebug
|
||||
and ([[-e "io.stdout:setvbuf('no'); %s"]]):format(rundebug)
|
||||
or ([[-e "io.stdout:setvbuf('no')" "%s"]]):format(filepath)
|
||||
local cmd = '"'..exe..'" '..code
|
||||
local params = ide.config.arg.any or ide.config.arg.lua
|
||||
local code = ([[-e "io.stdout:setvbuf('no')" "%s"]]):format(filepath)
|
||||
local cmd = '"'..exe..'" '..code..(params and " "..params or "")
|
||||
|
||||
-- modify CPATH to work with other Lua versions
|
||||
local _, cpath = wx.wxGetEnv("LUA_CPATH")
|
||||
if version and cpath and not cpath:find('clibs'..version, 1, true) then
|
||||
wx.wxSetEnv("LUA_CPATH", cpath:gsub('clibs', 'clibs'..version))
|
||||
local envname = "LUA_CPATH"
|
||||
if version then
|
||||
local env = "LUA_CPATH_"..string.gsub(version, '%.', '_')
|
||||
if os.getenv(env) then envname = env end
|
||||
end
|
||||
|
||||
local cpath = os.getenv(envname)
|
||||
if rundebug and cpath and not ide.config.path['lua'..(version or "")] then
|
||||
-- prepend osclibs as the libraries may be needed for debugging,
|
||||
-- but only if no path.lua is set as it may conflict with system libs
|
||||
wx.wxSetEnv(envname, ide.osclibs..';'..cpath)
|
||||
end
|
||||
if version and cpath then
|
||||
local cpath = os.getenv(envname)
|
||||
local clibs = string.format('/clibs%s/', version):gsub('%.','')
|
||||
if not cpath:find(clibs, 1, true) then cpath = cpath:gsub('/clibs/', clibs) end
|
||||
wx.wxSetEnv(envname, cpath)
|
||||
end
|
||||
|
||||
-- CommandLineRun(cmd,wdir,tooutput,nohide,stringcallback,uid,endcallback)
|
||||
local pid = CommandLineRun(cmd,self:fworkdir(wfilename),true,false,nil,nil,
|
||||
function() ide.debugger.pid = nil end)
|
||||
function() if rundebug then wx.wxRemoveFile(filepath) end end)
|
||||
|
||||
if version then wx.wxSetEnv("LUA_CPATH", cpath) end
|
||||
if (rundebug or version) and cpath then wx.wxSetEnv(envname, cpath) end
|
||||
return pid
|
||||
end,
|
||||
fprojdir = function(self,wfilename)
|
||||
return wfilename:GetPath(wx.wxPATH_GET_VOLUME)
|
||||
end,
|
||||
fworkdir = function (self,wfilename)
|
||||
return ide.config.path.projectdir or wfilename:GetPath(wx.wxPATH_GET_VOLUME)
|
||||
end,
|
||||
hasdebugger = true,
|
||||
fattachdebug = function(self) DebuggerAttachDefault() end,
|
||||
scratchextloop = false,
|
||||
unhideanywindow = true,
|
||||
takeparameters = true,
|
||||
}
|
||||
|
||||
end
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
dofile 'interpreters/luabase.lua'
|
||||
return MakeLuaInterpreter('52', ' 5.2')
|
||||
return MakeLuaInterpreter(5.2, ' 5.2')
|
||||
|
||||
4
interpreters/luadeb53.lua
Normal file
4
interpreters/luadeb53.lua
Normal file
@@ -0,0 +1,4 @@
|
||||
dofile 'interpreters/luabase.lua'
|
||||
local interpreter = MakeLuaInterpreter(5.3, ' 5.3')
|
||||
interpreter.skipcompile = true
|
||||
return interpreter
|
||||
@@ -1,95 +1,70 @@
|
||||
|
||||
return {
|
||||
name = "Luxinia2",
|
||||
description = "Luxinia2",
|
||||
api = {"baselib","glfw","glewgl","assimp20","luxmath","luxgfx","luxscene","luajit2",},
|
||||
|
||||
finitclient = function(self)
|
||||
if (not CommandLineRunning(self:fuid(wfilename))) then return end
|
||||
if not ide.config.path.luxinia2 then wx.wxMessageBox("Please define 'path.luxinia2' in your cfg/user.lua (see estrela.lua for examples)"); return end
|
||||
local init = dofile(ide.config.path.luxinia2.."/../comserver/client.lua")
|
||||
local fenv = {}
|
||||
setmetatable(fenv,{__index = _G})
|
||||
fenv.print = function(...) DisplayOutput(...); DisplayOutput("\n"); end
|
||||
|
||||
setfenv(init,fenv)
|
||||
local client = init()
|
||||
|
||||
self.fclient = client
|
||||
return client
|
||||
end,
|
||||
api = {"baselib","glfw","glewgl","assimp20","luajit2",},
|
||||
|
||||
frun = function(self,wfilename,rundebug)
|
||||
local luxdir = ide.config.path.luxinia2
|
||||
local projdir = ide.config.path.projectdir
|
||||
assert(projdir and projdir:len()>0,"no project directory")
|
||||
local basedir = luxdir
|
||||
local startfile = projdir.."/main.lua"
|
||||
local startargs = " -e "..startfile
|
||||
|
||||
if (CommandLineRunning(self:fuid(wfilename))) then
|
||||
if (not self.fclient) then
|
||||
self:finitclient()
|
||||
end
|
||||
-- try to communicate with server
|
||||
self.fclient("dofile([["..wfilename:GetFullPath().."]])")
|
||||
if not ide.config.path.luxinia2 then wx.wxMessageBox("Please define 'path.luxinia2' in your cfg/user.lua (see estrela.lua for examples)"); return end
|
||||
|
||||
local editorDir = string.gsub(ide.editorFilename:gsub("[^/\\]+$",""),"\\","/")
|
||||
local luxDir = ide.config.path.luxinia2
|
||||
local scratchpad = rundebug and rundebug:match("scratchpad")
|
||||
local filename = wfilename:GetFullName()
|
||||
|
||||
if (wx.wxFileName(luxDir):IsRelative()) then
|
||||
luxDir = editorDir..luxDir
|
||||
end
|
||||
|
||||
if (not luxDir) then
|
||||
DisplayOutputLn("Error: path.luxinia2 not set in config or LUXINIA2 environment missing")
|
||||
return
|
||||
end
|
||||
local exe = luxDir.."/luajit.exe"
|
||||
|
||||
local wdir = self:fworkdir(wfilename)
|
||||
if (wx.wxFileExists(wdir.."/main.lua")) then
|
||||
wfilename = wx.wxFileName(wdir.."/main.lua")
|
||||
DisplayOutputLn("luxinia2: using project main.lua")
|
||||
end
|
||||
|
||||
if (scratchpad and filename ~= wfilename:GetFullName()) then
|
||||
DisplayOutputLn("luxinia2: scratchpad currently requires starting with main.lua (if exists)\n However, do not edit its content, but add other files to scratchpad.\n In general you should start with the file that hosts the initialization\n and main loop, then edit other files.")
|
||||
return
|
||||
end
|
||||
|
||||
self.fclient = nil
|
||||
local fname = wfilename:GetFullName()
|
||||
local args = (fname and (" -f "..fname) or "")
|
||||
|
||||
local pid, proc
|
||||
if (CommandLineRunning(self:fuid(wfilename))) then
|
||||
-- kill process
|
||||
wx.wxProcess.Kill(pid)
|
||||
end
|
||||
|
||||
local filename = wfilename:GetFullName()
|
||||
local args = [[ -e "io.stdout:setvbuf('no');" ]]..(ide.config.luxinia2args or "")
|
||||
-- ensure luxinia's libs come first, to allow 32- and 64-bit debugging
|
||||
-- or running from zbstudio in general, as zbs modifies LUA_CPATH
|
||||
args = args..' -e "dofile [['..luxDir..'/../setup_package_paths.lua]];"'
|
||||
|
||||
if rundebug then
|
||||
DebuggerAttachDefault({
|
||||
basedir=basedir,
|
||||
startfile=startfile,
|
||||
run=true, noshell=true,}
|
||||
)
|
||||
local editorDir = string.gsub(ide.editorFilename:gsub("[^/\\]+$",""),"\\","/")
|
||||
script = ""..
|
||||
"package.path=package.path..';"..editorDir.."lualibs/?/?.lua';"..
|
||||
"io.stdout:setvbuf('no'); require('mobdebug').start('" .. ide.debugger.hostname.."',"..ide.debugger.portnumber..")"
|
||||
|
||||
args = args..' -es "'..script..'"'..startargs
|
||||
else
|
||||
args = " -s "..args..startargs
|
||||
end
|
||||
|
||||
local jitargs = ide.config.luxinia2jitargs
|
||||
jitargs = jitargs or ""
|
||||
local cmd = 'luajit.exe '..jitargs..' ../main.lua '..args
|
||||
|
||||
|
||||
local pid = CommandLineRun(cmd,ide.config.path.luxinia2,true,true,nil,self:fuid(wfilename),
|
||||
function()
|
||||
ShellSupportRemote(nil)
|
||||
if (rundebug) then
|
||||
DebuggerStop()
|
||||
end
|
||||
end)
|
||||
|
||||
if(not pid) then return end
|
||||
|
||||
if not rundebug then
|
||||
local client = self:finitclient()
|
||||
ShellSupportRemote(client,self:fuid(wfilename))
|
||||
pid = nil
|
||||
DebuggerAttachDefault({ runstart = ide.config.debugger.runonstart == true,
|
||||
startwith = wfilename:GetFullPath(),
|
||||
})
|
||||
if (scratchpad) then
|
||||
args = args..' -e "_IS_SCRATCH = true;"'
|
||||
else
|
||||
args = args..' -e "_IS_DEBUG = true;"'
|
||||
end
|
||||
end
|
||||
|
||||
return pid
|
||||
end,
|
||||
fuid = function(self,wfilename) return "luxinia2 "..(ide.config.path.projectdir or "") end,
|
||||
fprojdir = function(self,wfilename)
|
||||
local path = GetPathWithSep(wfilename)
|
||||
filepath = wx.wxFileName(path)
|
||||
args = args..(rundebug
|
||||
and ([[ -e "%s"]]):format(rundebug)
|
||||
or ([[ "%s"]]):format(filename))
|
||||
|
||||
local cmd = '"'..exe..'" '..args
|
||||
|
||||
while ((not wx.wxFileExists(path.."main.lua")) and (filepath:GetDirCount() > 0)) do
|
||||
filepath:RemoveDir(filepath:GetDirCount()-1)
|
||||
path = GetPathWithSep(filepath)
|
||||
end
|
||||
|
||||
return path:sub(0,-2)
|
||||
return CommandLineRun(cmd,wdir,true,true,nil,self:fuid(wfilename))
|
||||
end,
|
||||
fuid = function(self,wfilename) return "luxinia2: luajit "..wfilename:GetFullName() end,
|
||||
hasdebugger = true,
|
||||
fattachdebug = function(self) DebuggerAttachDefault() end,
|
||||
scratchextloop = true,
|
||||
}
|
||||
|
||||
@@ -16,9 +16,9 @@ return {
|
||||
local sep = win and ';' or ':'
|
||||
local path =
|
||||
win and ([[C:\Marmalade]]..sep..[[D:\Marmalade]]..sep..
|
||||
[[C:\Program Files\Marmalade]]..sep..[[D:\Program Files\Marmalade]]..sep..
|
||||
[[C:\Program Files (x86)\Marmalade]]..sep..[[D:\Program Files (x86)\Marmalade]]..sep)
|
||||
or mac and ([[/Developer/Marmalade]]..sep)
|
||||
GenerateProgramFilesPath('Marmalade', sep)..sep)
|
||||
or mac and ([[/Applications/Marmalade.app/Contents]]..sep..
|
||||
[[/Developer/Marmalade]]..sep)
|
||||
or ''
|
||||
-- Marmalade can be installed in a folder with version number or without
|
||||
-- so it may be c:\Marmalade\s3e\... or c:\Marmalade\6.2\s3e\...
|
||||
@@ -29,6 +29,8 @@ return {
|
||||
if GetFullPathIfExists(candidate, exe) then table.insert(candidates, candidate) end
|
||||
if GetFullPathIfExists(candidate.."/s3e", exe) then table.insert(candidates, candidate.."/s3e") end
|
||||
end
|
||||
-- stop on Mac if found something in /Applications (7.0+)
|
||||
if mac and #candidates > 0 then break end
|
||||
end
|
||||
-- multiple candidates may be present, so sort and use the latest.
|
||||
-- only happens if multiple versions are installed and S3E_DIR is not set.
|
||||
@@ -43,6 +45,8 @@ return {
|
||||
end
|
||||
end
|
||||
|
||||
if not s3e then s3e = quick:gsub(exe, '') end
|
||||
|
||||
local projdir = self:fworkdir(wfilename)
|
||||
local file = GetFullPathIfExists(projdir, 'main.lua')
|
||||
if not file then
|
||||
@@ -108,14 +112,7 @@ return {
|
||||
|
||||
local cmd = ('"%s" %s'):format(quick, options)
|
||||
-- CommandLineRun(cmd,wdir,tooutput,nohide,stringcallback,uid,endcallback)
|
||||
return CommandLineRun(cmd,GetPathWithSep(projdir),true,true,nil,nil,
|
||||
function() ide.debugger.pid = nil end)
|
||||
end,
|
||||
fprojdir = function(self,wfilename)
|
||||
return wfilename:GetPath(wx.wxPATH_GET_VOLUME)
|
||||
end,
|
||||
fworkdir = function(self,wfilename)
|
||||
return ide.config.path.projectdir or wfilename:GetPath(wx.wxPATH_GET_VOLUME)
|
||||
return CommandLineRun(cmd,GetPathWithSep(projdir),true,true)
|
||||
end,
|
||||
hasdebugger = true,
|
||||
fattachdebug = function(self) DebuggerAttachDefault() end,
|
||||
|
||||
@@ -11,10 +11,7 @@ return {
|
||||
moai = moai or ide.config.path.moai -- check if the path is configured
|
||||
if not moai then
|
||||
local sep = win and ';' or ':'
|
||||
local default =
|
||||
win and ([[C:\Program Files\moai]]..sep..[[D:\Program Files\moai]]..sep..
|
||||
[[C:\Program Files (x86)\moai]]..sep..[[D:\Program Files (x86)\moai]]..sep)
|
||||
or ''
|
||||
local default = win and GenerateProgramFilesPath('moai', sep)..sep or ''
|
||||
local path = default
|
||||
..(os.getenv('PATH') or '')..sep
|
||||
..(os.getenv('MOAI_BIN') or '')..sep
|
||||
@@ -25,8 +22,8 @@ return {
|
||||
table.insert(paths, p)
|
||||
end
|
||||
if not moai then
|
||||
DisplayOutput("Can't find moai executable in any of the folders in PATH or MOAI_BIN: "
|
||||
..table.concat(paths, ", ").."\n")
|
||||
DisplayOutputLn("Can't find moai executable in any of the folders in PATH or MOAI_BIN: "
|
||||
..table.concat(paths, ", "))
|
||||
return
|
||||
end
|
||||
end
|
||||
@@ -40,9 +37,9 @@ return {
|
||||
if file then break end
|
||||
end
|
||||
if not file then
|
||||
DisplayOutput("Can't find any of the specified entry points ("
|
||||
DisplayOutputLn("Can't find any of the specified entry points ("
|
||||
..table.concat(epoints, ", ")
|
||||
..") in the current project; continuing with the current file...\n")
|
||||
..") in the current project; continuing with the current file...")
|
||||
end
|
||||
end
|
||||
|
||||
@@ -61,7 +58,7 @@ return {
|
||||
file = tmpfile:GetFullPath()
|
||||
local f = io.open(file, "w")
|
||||
if not f then
|
||||
DisplayOutput("Can't open temporary file '"..file.."' for writing\n")
|
||||
DisplayOutputLn("Can't open temporary file '"..file.."' for writing.")
|
||||
return
|
||||
end
|
||||
f:write(code)
|
||||
@@ -87,13 +84,7 @@ return {
|
||||
or ('"%s" "%s"'):format(moai, file)
|
||||
-- CommandLineRun(cmd,wdir,tooutput,nohide,stringcallback,uid,endcallback)
|
||||
return CommandLineRun(cmd,self:fworkdir(wfilename),true,false,nil,nil,
|
||||
function() ide.debugger.pid = nil if rundebug then wx.wxRemoveFile(file) end end)
|
||||
end,
|
||||
fprojdir = function(self,wfilename)
|
||||
return wfilename:GetPath(wx.wxPATH_GET_VOLUME)
|
||||
end,
|
||||
fworkdir = function(self,wfilename)
|
||||
return ide.config.path.projectdir or wfilename:GetPath(wx.wxPATH_GET_VOLUME)
|
||||
function() if rundebug then wx.wxRemoveFile(file) end end)
|
||||
end,
|
||||
hasdebugger = true,
|
||||
fattachdebug = function(self) DebuggerAttachDefault() end,
|
||||
|
||||
@@ -18,7 +18,7 @@ if package.loaded["socket.http"] then
|
||||
end
|
||||
|
||||
local socket = require "socket"
|
||||
|
||||
local gettime = socket.gettime
|
||||
local coxpcall = require "coxpcall"
|
||||
|
||||
local WATCH_DOG_TIMEOUT = 120
|
||||
@@ -60,7 +60,7 @@ local copas = {}
|
||||
-- Meta information is public even if beginning with an "_"
|
||||
copas._COPYRIGHT = "Copyright (C) 2005-2010 Kepler Project"
|
||||
copas._DESCRIPTION = "Coroutine Oriented Portable Asynchronous Services"
|
||||
copas._VERSION = "Copas 1.1.7"
|
||||
copas._VERSION = "Copas 1.2.1"
|
||||
|
||||
-- Close the socket associated with the current connection after the handler finishes
|
||||
copas.autoclose = true
|
||||
@@ -117,6 +117,65 @@ local function newset()
|
||||
return set
|
||||
end
|
||||
|
||||
local fnil = function()end
|
||||
local _sleeping = {
|
||||
times = {}, -- list with wake-up times
|
||||
cos = {}, -- list with coroutines, index matches the 'times' list
|
||||
lethargy = {}, -- list of coroutines sleeping without a wakeup time
|
||||
|
||||
insert = fnil,
|
||||
remove = fnil,
|
||||
push = function(self, sleeptime, co)
|
||||
if not co then return end
|
||||
if sleeptime<0 then
|
||||
--sleep until explicit wakeup through copas.wakeup
|
||||
self.lethargy[co] = true
|
||||
return
|
||||
else
|
||||
sleeptime = gettime() + sleeptime
|
||||
end
|
||||
local t, c = self.times, self.cos
|
||||
local i, cou = 1, #t
|
||||
--TODO: do a binary search
|
||||
while i<=cou and t[i]<=sleeptime do i=i+1 end
|
||||
table.insert(t, i, sleeptime)
|
||||
table.insert(c, i, co)
|
||||
end,
|
||||
getnext = function(self) -- returns delay until next sleep expires, or nil if there is none
|
||||
local t = self.times
|
||||
local delay = t[1] and t[1] - gettime() or nil
|
||||
|
||||
return delay and math.max(delay, 0) or nil
|
||||
end,
|
||||
-- find the thread that should wake up to the time
|
||||
pop = function(self, time)
|
||||
local t, c = self.times, self.cos
|
||||
if #t==0 or time<t[1] then return end
|
||||
local co = c[1]
|
||||
table.remove(t, 1)
|
||||
table.remove(c, 1)
|
||||
return co
|
||||
end,
|
||||
wakeup = function(self, co)
|
||||
local let = self.lethargy
|
||||
if let[co] then
|
||||
self:push(0, co)
|
||||
let[co] = nil
|
||||
else
|
||||
let = self.cos
|
||||
for i=1,#let do
|
||||
if let[i]==co then
|
||||
table.remove(let, i)
|
||||
local tm = self.times[i]
|
||||
table.remove(self.times, i)
|
||||
self:push(0, co)
|
||||
return
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
} --_sleeping
|
||||
|
||||
local _servers = newset() -- servers being handled
|
||||
local _reading_log = {}
|
||||
local _writing_log = {}
|
||||
@@ -140,7 +199,7 @@ function copas.receive(client, pattern, part)
|
||||
_reading_log[client] = nil
|
||||
return s, err, part
|
||||
end
|
||||
_reading_log[client] = os.time()
|
||||
_reading_log[client] = gettime()
|
||||
coroutine.yield(client, _reading)
|
||||
until false
|
||||
end
|
||||
@@ -156,26 +215,26 @@ function copas.receivefrom(client, size)
|
||||
_reading_log[client] = nil
|
||||
return s, err, port
|
||||
end
|
||||
_reading_log[client] = os.time()
|
||||
_reading_log[client] = gettime()
|
||||
coroutine.yield(client, _reading)
|
||||
until false
|
||||
end
|
||||
|
||||
-- same as above but with special treatment when reading chunks,
|
||||
-- unblocks on any data received.
|
||||
function copas.receivePartial(client, pattern)
|
||||
local s, err, part
|
||||
function copas.receivePartial(client, pattern, part)
|
||||
local s, err
|
||||
pattern = pattern or "*l"
|
||||
repeat
|
||||
s, err, part = client:receive(pattern)
|
||||
s, err, part = client:receive(pattern, part)
|
||||
if s or ( (type(pattern)=="number") and part~="" and part ~=nil ) or
|
||||
err ~= "timeout" then
|
||||
_reading_log[client] = nil
|
||||
return s, err, part
|
||||
end
|
||||
_reading_log[client] = os.time()
|
||||
coroutine.yield(client, _reading)
|
||||
until false
|
||||
err ~= "timeout" then
|
||||
_reading_log[client] = nil
|
||||
return s, err, part
|
||||
end
|
||||
_reading_log[client] = gettime()
|
||||
coroutine.yield(client, _reading)
|
||||
until false
|
||||
end
|
||||
|
||||
-- sends data to a client. The operation is buffered and
|
||||
@@ -191,14 +250,14 @@ function copas.send(client, data, from, to)
|
||||
-- adds extra corrotine swap
|
||||
-- garantees that high throuput dont take other threads to starvation
|
||||
if (math.random(100) > 90) then
|
||||
_writing_log[client] = os.time()
|
||||
_writing_log[client] = gettime()
|
||||
coroutine.yield(client, _writing)
|
||||
end
|
||||
if s or err ~= "timeout" then
|
||||
_writing_log[client] = nil
|
||||
return s, err,lastIndex
|
||||
end
|
||||
_writing_log[client] = os.time()
|
||||
_writing_log[client] = gettime()
|
||||
coroutine.yield(client, _writing)
|
||||
until false
|
||||
end
|
||||
@@ -213,14 +272,14 @@ function copas.sendto(client, data, ip, port)
|
||||
-- adds extra corrotine swap
|
||||
-- garantees that high throuput dont take other threads to starvation
|
||||
if (math.random(100) > 90) then
|
||||
_writing_log[client] = os.time()
|
||||
_writing_log[client] = gettime()
|
||||
coroutine.yield(client, _writing)
|
||||
end
|
||||
if s or err ~= "timeout" then
|
||||
_writing_log[client] = nil
|
||||
return s, err
|
||||
end
|
||||
_writing_log[client] = os.time()
|
||||
_writing_log[client] = gettime()
|
||||
coroutine.yield(client, _writing)
|
||||
until false
|
||||
end
|
||||
@@ -235,7 +294,7 @@ function copas.connect(skt, host, port)
|
||||
_writing_log[skt] = nil
|
||||
return ret, err
|
||||
end
|
||||
_writing_log[skt] = os.time()
|
||||
_writing_log[skt] = gettime()
|
||||
coroutine.yield(skt, _writing)
|
||||
until false
|
||||
return ret, err
|
||||
@@ -251,11 +310,11 @@ local _skt_mt = {__index = {
|
||||
return copas.send (self.socket, data, from, to)
|
||||
end,
|
||||
|
||||
receive = function (self, pattern)
|
||||
receive = function (self, pattern, prefix)
|
||||
if (self.timeout==0) then
|
||||
return copas.receivePartial(self.socket, pattern)
|
||||
return copas.receivePartial(self.socket, pattern, prefix)
|
||||
end
|
||||
return copas.receive(self.socket, pattern)
|
||||
return copas.receive(self.socket, pattern, prefix)
|
||||
end,
|
||||
|
||||
flush = function (self)
|
||||
@@ -264,8 +323,12 @@ local _skt_mt = {__index = {
|
||||
|
||||
settimeout = function (self,time)
|
||||
self.timeout=time
|
||||
return
|
||||
return true
|
||||
end,
|
||||
|
||||
skip = function(self, ...) return self.socket:skip(...) end,
|
||||
|
||||
close = function(self, ...) return self.socket:close(...) end,
|
||||
}}
|
||||
|
||||
-- wraps a UDP socket, copy of TCP one adapted for UDP.
|
||||
@@ -293,7 +356,7 @@ local _skt_mt_udp = {__index = {
|
||||
|
||||
settimeout = function (self,time)
|
||||
self.timeout=time
|
||||
return
|
||||
return true
|
||||
end,
|
||||
}}
|
||||
|
||||
@@ -385,6 +448,13 @@ function copas.addserver(server, handler, timeout)
|
||||
addTCPserver(server, handler, timeout)
|
||||
end
|
||||
end
|
||||
|
||||
function copas.removeserver(server)
|
||||
_servers[server] = nil
|
||||
_reading:remove(server)
|
||||
return server:close()
|
||||
end
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
-- Adds an new courotine thread to Copas dispatcher
|
||||
-------------------------------------------------------------------------------
|
||||
@@ -464,6 +534,24 @@ local _writable_t = {
|
||||
}
|
||||
|
||||
addtaskWrite (_writable_t)
|
||||
--
|
||||
--sleeping threads task
|
||||
local _sleeping_t = {
|
||||
tick = function (self, time, ...)
|
||||
_doTick(_sleeping:pop(time), ...)
|
||||
end
|
||||
}
|
||||
|
||||
-- yields the current coroutine and wakes it after 'sleeptime' seconds.
|
||||
-- If sleeptime<0 then it sleeps until explicitly woken up using 'wakeup'
|
||||
function copas.sleep(sleeptime)
|
||||
coroutine.yield((sleeptime or 0), _sleeping)
|
||||
end
|
||||
|
||||
-- Wakes up a sleeping coroutine 'co'.
|
||||
function copas.wakeup(co)
|
||||
_sleeping:wakeup(co)
|
||||
end
|
||||
|
||||
local last_cleansing = 0
|
||||
|
||||
@@ -472,8 +560,8 @@ local last_cleansing = 0
|
||||
-------------------------------------------------------------------------------
|
||||
local function _select (timeout)
|
||||
local err
|
||||
local now = os.time()
|
||||
local duration = os.difftime
|
||||
local now = gettime()
|
||||
local duration = function(t2, t1) return t2-t1 end
|
||||
|
||||
_readable_t._evs, _writable_t._evs, err = socket.select(_reading, _writing, timeout)
|
||||
local r_evs, w_evs = _readable_t._evs, _writable_t._evs
|
||||
@@ -512,6 +600,14 @@ end
|
||||
-- handled (or nil + error message)
|
||||
-------------------------------------------------------------------------------
|
||||
function copas.step(timeout)
|
||||
_sleeping_t:tick(gettime())
|
||||
|
||||
-- Need to wake up the select call it time for the next sleeping event
|
||||
local nextwait = _sleeping:getnext()
|
||||
if nextwait then
|
||||
timeout = timeout and math.min(nextwait, timeout) or nextwait
|
||||
end
|
||||
|
||||
local err = _select (timeout)
|
||||
if err == "timeout" then return false end
|
||||
|
||||
@@ -537,4 +633,4 @@ function copas.loop(timeout)
|
||||
end
|
||||
end
|
||||
|
||||
return copas
|
||||
return copas
|
||||
|
||||
112
lualibs/dist/config.lua
vendored
Normal file
112
lualibs/dist/config.lua
vendored
Normal file
@@ -0,0 +1,112 @@
|
||||
-- Luadist configuration
|
||||
|
||||
module ("dist.config", package.seeall)
|
||||
|
||||
local sys = require "dist.sys"
|
||||
local utils = require "dist.utils"
|
||||
local win = (os.getenv('WINDIR') or (os.getenv('OS') or ''):match('[Ww]indows'))
|
||||
and not (os.getenv('OSTYPE') or ''):match('cygwin') -- exclude cygwin
|
||||
|
||||
-- System information ------------------------------------------------
|
||||
version = "0.2.7" -- Current LuaDist version
|
||||
-- set initial architecture as it's important for path separators
|
||||
arch = win and "Windows" or "Linux" -- Host architecture
|
||||
type = "x86" -- Host type
|
||||
|
||||
-- Directories -------------------------------------------------------
|
||||
root_dir = os.getenv("DIST_ROOT") or utils.get_luadist_location() or sys.path_separator()
|
||||
temp_dir = "tmp"
|
||||
cache_dir = sys.make_path(temp_dir, "cache")
|
||||
distinfos_dir = sys.make_path("share", "luadist-git", "dists")
|
||||
test_dir = sys.make_path("share", "luadist-git", "test")
|
||||
|
||||
-- Files -------------------------------------------------------------
|
||||
manifest_file = sys.make_path(cache_dir, ".gitmodules")
|
||||
dep_cache_file = sys.make_path(cache_dir, ".depcache")
|
||||
log_file = sys.make_path(temp_dir, "luadist.log")
|
||||
cache_file = ""
|
||||
|
||||
-- Repositories ------------------------------------------------------
|
||||
repos = {
|
||||
"git://github.com/LuaDist/Repository.git",
|
||||
}
|
||||
|
||||
upload_url = "git@github.com:LuaDist" -- must not contain trailing '/'
|
||||
|
||||
-- Settings ----------------------------------------------------------
|
||||
debug = false -- Use debug mode.
|
||||
verbose = false -- Print verbose output.
|
||||
simulate = false -- Only simulate installation of packages.
|
||||
binary = true -- Use binary version of modules.
|
||||
source = true -- Use source version of modules.
|
||||
test = false -- Run CTest before install.
|
||||
|
||||
cache = true -- Use cache.
|
||||
cache_timeout = 3 * 60 * 60 -- Cache timeout in seconds.
|
||||
|
||||
dep_cache = true -- Use cache for dependency information (tree functionality).
|
||||
|
||||
-- Components (of modules) that will be installed.
|
||||
components = {
|
||||
"Runtime", "Library", "Header", "Data", "Documentation", "Example", "Test", "Other", "Unspecified"
|
||||
}
|
||||
|
||||
-- Available log levels are: DEBUG, INFO, WARN, ERROR, FATAL (see dist.logger for more information).
|
||||
print_log_level = "WARN" -- Minimum level for log messages to be printed (nil to disable).
|
||||
write_log_level = "INFO" -- Minimum level for log messages to be logged (nil to disable).
|
||||
|
||||
|
||||
-- CMake variables ---------------------------------------------------
|
||||
variables = {
|
||||
--- Install defaults
|
||||
INSTALL_BIN = "bin",
|
||||
INSTALL_LIB = "lib",
|
||||
INSTALL_INC = "include",
|
||||
INSTALL_ETC = "etc",
|
||||
INSTALL_LMOD = "lib/lua",
|
||||
INSTALL_CMOD = "lib/lua",
|
||||
|
||||
--- LuaDist specific variables
|
||||
DIST_VERSION = version,
|
||||
DIST_ARCH = arch,
|
||||
DIST_TYPE = type,
|
||||
|
||||
-- CMake specific setup
|
||||
CMAKE_GENERATOR = win and "MinGW Makefiles" or "Unix Makefiles",
|
||||
CMAKE_BUILD_TYPE = "MinSizeRel",
|
||||
|
||||
-- RPath functionality
|
||||
CMAKE_SKIP_BUILD_RPATH = "FALSE",
|
||||
CMAKE_BUILD_WITH_INSTALL_RPATH = "FALSE",
|
||||
CMAKE_INSTALL_RPATH = "$ORIGIN/../lib",
|
||||
CMAKE_INSTALL_RPATH_USE_LINK_PATH = "TRUE",
|
||||
CMAKE_INSTALL_NAME_DIR = "@executable_path/../lib",
|
||||
|
||||
-- OSX specific
|
||||
CMAKE_OSX_ARCHITECTURES = "",
|
||||
}
|
||||
|
||||
-- Building ----------------------------------------------------------
|
||||
cmake = "cmake"
|
||||
ctest = "ctest"
|
||||
|
||||
cache_command = cmake .. " -C cache.cmake"
|
||||
build_command = cmake .. " --build . --clean-first"
|
||||
|
||||
install_component_command = " -DCOMPONENT=#COMPONENT# -P cmake_install.cmake"
|
||||
|
||||
test_command = ctest .. " -V ."
|
||||
|
||||
strip_option = " -DCMAKE_INSTALL_DO_STRIP=true"
|
||||
cache_debug_options = "-DCMAKE_VERBOSE_MAKEFILE=true -DCMAKE_BUILD_TYPE=Debug"
|
||||
build_debug_options = ""
|
||||
|
||||
-- Add -j option to make in case of unix makefiles to speed up builds
|
||||
if (variables.CMAKE_GENERATOR == "Unix Makefiles") then
|
||||
build_command = build_command .. " -- -j6"
|
||||
end
|
||||
|
||||
-- Add -j option to make in case of MinGW makefiles to speed up builds
|
||||
if (variables.CMAKE_GENERATOR == "MinGW Makefiles") then
|
||||
build_command = "set SHELL=cmd.exe && " .. build_command .. " -- -j"
|
||||
end
|
||||
271
lualibs/dist/constraints.lua
vendored
Normal file
271
lualibs/dist/constraints.lua
vendored
Normal file
@@ -0,0 +1,271 @@
|
||||
-- Note: the code of this module is borrowed from the original LuaDist project
|
||||
|
||||
|
||||
|
||||
--- LuaDist version constraints functions
|
||||
-- Peter Drahoš, LuaDist Project, 2010
|
||||
-- Original Code borrowed from LuaRocks Project
|
||||
|
||||
--- Version constraints handling functions.
|
||||
-- Dependencies are represented in LuaDist through strings with
|
||||
-- a dist name followed by a comma-separated list of constraints.
|
||||
-- Each constraint consists of an operator and a version number.
|
||||
-- In this string format, version numbers are represented as
|
||||
-- naturally as possible, like they are used by upstream projects
|
||||
-- (e.g. "2.0beta3"). Internally, LuaDist converts them to a purely
|
||||
-- numeric representation, allowing comparison following some
|
||||
-- "common sense" heuristics. The precise specification of the
|
||||
-- comparison criteria is the source code of this module, but the
|
||||
-- test/test_deps.lua file included with LuaDist provides some
|
||||
-- insights on what these criteria are.
|
||||
|
||||
module ("dist.constraints", package.seeall)
|
||||
|
||||
|
||||
local operators = {
|
||||
["=="] = "==",
|
||||
["~="] = "~=",
|
||||
[">"] = ">",
|
||||
["<"] = "<",
|
||||
[">="] = ">=",
|
||||
["<="] = "<=",
|
||||
["~>"] = "~>",
|
||||
-- plus some convenience translations
|
||||
[""] = "==",
|
||||
["-"] = "==",
|
||||
["="] = "==",
|
||||
["!="] = "~="
|
||||
}
|
||||
|
||||
local deltas = {
|
||||
scm = -100,
|
||||
rc = -1000,
|
||||
pre = -10000,
|
||||
beta = -100000,
|
||||
alpha = -1000000,
|
||||
work = -10000000,
|
||||
}
|
||||
|
||||
local version_mt = {
|
||||
--- Equality comparison for versions.
|
||||
-- All version numbers must be equal.
|
||||
-- If both versions have revision numbers, they must be equal;
|
||||
-- otherwise the revision number is ignored.
|
||||
-- @param v1 table: version table to compare.
|
||||
-- @param v2 table: version table to compare.
|
||||
-- @return boolean: true if they are considered equivalent.
|
||||
__eq = function(v1, v2)
|
||||
if #v1 ~= #v2 then
|
||||
return false
|
||||
end
|
||||
for i = 1, #v1 do
|
||||
if v1[i] ~= v2[i] then
|
||||
return false
|
||||
end
|
||||
end
|
||||
if v1.revision and v2.revision then
|
||||
return (v1.revision == v2.revision)
|
||||
end
|
||||
return true
|
||||
end,
|
||||
--- Size comparison for versions.
|
||||
-- All version numbers are compared.
|
||||
-- If both versions have revision numbers, they are compared;
|
||||
-- otherwise the revision number is ignored.
|
||||
-- @param v1 table: version table to compare.
|
||||
-- @param v2 table: version table to compare.
|
||||
-- @return boolean: true if v1 is considered lower than v2.
|
||||
__lt = function(v1, v2)
|
||||
for i = 1, math.max(#v1, #v2) do
|
||||
local v1i, v2i = v1[i] or 0, v2[i] or 0
|
||||
if v1i ~= v2i then
|
||||
return (v1i < v2i)
|
||||
end
|
||||
end
|
||||
if v1.revision and v2.revision then
|
||||
return (v1.revision < v2.revision)
|
||||
end
|
||||
return false
|
||||
end
|
||||
}
|
||||
|
||||
local version_cache = {}
|
||||
setmetatable(version_cache, {
|
||||
__mode = "kv"
|
||||
})
|
||||
|
||||
--- Parse a version string, converting to table format.
|
||||
-- A version table contains all components of the version string
|
||||
-- converted to numeric format, stored in the array part of the table.
|
||||
-- If the version contains a revision, it is stored numerically
|
||||
-- in the 'revision' field. The original string representation of
|
||||
-- the string is preserved in the 'string' field.
|
||||
-- Returned version tables use a metatable
|
||||
-- allowing later comparison through relational operators.
|
||||
-- @param vstring string: A version number in string format.
|
||||
-- @return table or nil: A version table or nil
|
||||
-- if the input string contains invalid characters.
|
||||
function parseVersion(vstring)
|
||||
if not vstring then return nil end
|
||||
assert(type(vstring) == "string")
|
||||
|
||||
local cached = version_cache[vstring]
|
||||
if cached then
|
||||
return cached
|
||||
end
|
||||
|
||||
local version = {}
|
||||
local i = 1
|
||||
|
||||
local function add_token(number)
|
||||
version[i] = version[i] and version[i] + number/100000 or number
|
||||
i = i + 1
|
||||
end
|
||||
|
||||
-- trim leading and trailing spaces
|
||||
vstring = vstring:match("^%s*(.*)%s*$")
|
||||
version.string = vstring
|
||||
-- store revision separately if any
|
||||
local main, revision = vstring:match("(.*)%-(%d+)$")
|
||||
if revision then
|
||||
vstring = main
|
||||
version.revision = tonumber(revision)
|
||||
end
|
||||
while #vstring > 0 do
|
||||
-- extract a number
|
||||
local token, rest = vstring:match("^(%d+)[%.%-%_]*(.*)")
|
||||
if token then
|
||||
add_token(tonumber(token))
|
||||
else
|
||||
-- extract a word
|
||||
token, rest = vstring:match("^(%a+)[%.%-%_]*(.*)")
|
||||
if not token then
|
||||
return nil
|
||||
end
|
||||
local last = #version
|
||||
version[i] = deltas[token] or (token:byte() / 1000)
|
||||
end
|
||||
vstring = rest
|
||||
end
|
||||
setmetatable(version, version_mt)
|
||||
version_cache[vstring] = version
|
||||
return version
|
||||
end
|
||||
|
||||
--- Utility function to compare version numbers given as strings.
|
||||
-- @param a string: one version.
|
||||
-- @param b string: another version.
|
||||
-- @return boolean: True if a > b.
|
||||
function compareVersions(a, b)
|
||||
return parseVersion(a) > parseVersion(b)
|
||||
end
|
||||
|
||||
--- Consumes a constraint from a string, converting it to table format.
|
||||
-- For example, a string ">= 1.0, > 2.0" is converted to a table in the
|
||||
-- format {op = ">=", version={1,0}} and the rest, "> 2.0", is returned
|
||||
-- back to the caller.
|
||||
-- @param input string: A list of constraints in string format.
|
||||
-- @return (table, string) or nil: A table representing the same
|
||||
-- constraints and the string with the unused input, or nil if the
|
||||
-- input string is invalid.
|
||||
local function parseConstraint(input)
|
||||
assert(type(input) == "string")
|
||||
|
||||
local op, version, rest = input:match("^([<>=~!]*)%s*([%w%.%_%-]+)[%s,]*(.*)")
|
||||
op = operators[op]
|
||||
version = parseVersion(version)
|
||||
if not op or not version then return nil end
|
||||
return { op = op, version = version }, rest
|
||||
end
|
||||
|
||||
--- Convert a list of constraints from string to table format.
|
||||
-- For example, a string ">= 1.0, < 2.0" is converted to a table in the format
|
||||
-- {{op = ">=", version={1,0}}, {op = "<", version={2,0}}}.
|
||||
-- Version tables use a metatable allowing later comparison through
|
||||
-- relational operators.
|
||||
-- @param input string: A list of constraints in string format.
|
||||
-- @return table or nil: A table representing the same constraints,
|
||||
-- or nil if the input string is invalid.
|
||||
function parseConstraints(input)
|
||||
assert(type(input) == "string")
|
||||
|
||||
local constraints, constraint = {}, nil
|
||||
while #input > 0 do
|
||||
constraint, input = parseConstraint(input)
|
||||
if constraint then
|
||||
table.insert(constraints, constraint)
|
||||
else
|
||||
return nil
|
||||
end
|
||||
end
|
||||
return constraints
|
||||
end
|
||||
|
||||
--- A more lenient check for equivalence between versions.
|
||||
-- This returns true if the requested components of a version
|
||||
-- match and ignore the ones that were not given. For example,
|
||||
-- when requesting "2", then "2", "2.1", "2.3.5-9"... all match.
|
||||
-- When requesting "2.1", then "2.1", "2.1.3" match, but "2.2"
|
||||
-- doesn't.
|
||||
-- @param version string or table: Version to be tested; may be
|
||||
-- in string format or already parsed into a table.
|
||||
-- @param requested string or table: Version requested; may be
|
||||
-- in string format or already parsed into a table.
|
||||
-- @return boolean: True if the tested version matches the requested
|
||||
-- version, false otherwise.
|
||||
local function partialMatch(version, requested)
|
||||
assert(type(version) == "string" or type(version) == "table")
|
||||
assert(type(requested) == "string" or type(version) == "table")
|
||||
|
||||
if type(version) ~= "table" then version = parseVersion(version) end
|
||||
if type(requested) ~= "table" then requested = parseVersion(requested) end
|
||||
if not version or not requested then return false end
|
||||
|
||||
for i = 1, #requested do
|
||||
if requested[i] ~= version[i] then return false end
|
||||
end
|
||||
if requested.revision then
|
||||
return requested.revision == version.revision
|
||||
end
|
||||
return true
|
||||
end
|
||||
|
||||
--- Check if a version satisfies a set of constraints.
|
||||
-- @param version table: A version in table format
|
||||
-- @param constraints table: An array of constraints in table format.
|
||||
-- @return boolean: True if version satisfies all constraints,
|
||||
-- false otherwise.
|
||||
function matchConstraints(version, constraints)
|
||||
assert(type(version) == "table")
|
||||
assert(type(constraints) == "table")
|
||||
local ok = true
|
||||
setmetatable(version, version_mt)
|
||||
for _, constr in pairs(constraints) do
|
||||
local constr_version = constr.version
|
||||
setmetatable(constr.version, version_mt)
|
||||
if constr.op == "==" then ok = version == constr_version
|
||||
elseif constr.op == "~=" then ok = version ~= constr_version
|
||||
elseif constr.op == ">" then ok = version > constr_version
|
||||
elseif constr.op == "<" then ok = version < constr_version
|
||||
elseif constr.op == ">=" then ok = version >= constr_version
|
||||
elseif constr.op == "<=" then ok = version <= constr_version
|
||||
elseif constr.op == "~>" then ok = partialMatch(version, constr_version)
|
||||
end
|
||||
if not ok then break end
|
||||
end
|
||||
return ok
|
||||
end
|
||||
|
||||
--- Check if a version string is satisfied by a constraint string.
|
||||
-- @param version string: A version in string format
|
||||
-- @param constraints string: Constraints in string format.
|
||||
-- @return boolean: True if version satisfies all constraints,
|
||||
-- false otherwise.
|
||||
function constraint_satisfied(version, constraints)
|
||||
local const = parseConstraints(constraints)
|
||||
local ver = parseVersion(version)
|
||||
if const and ver then
|
||||
return matchConstraints(ver, const)
|
||||
end
|
||||
return nil, "Error parsing versions."
|
||||
end
|
||||
770
lualibs/dist/depends.lua
vendored
Normal file
770
lualibs/dist/depends.lua
vendored
Normal file
@@ -0,0 +1,770 @@
|
||||
-- Utility functions for dependencies
|
||||
|
||||
module ("dist.depends", package.seeall)
|
||||
|
||||
local cfg = require "dist.config"
|
||||
local mf = require "dist.manifest"
|
||||
local sys = require "dist.sys"
|
||||
local const = require "dist.constraints"
|
||||
local utils = require "dist.utils"
|
||||
local package = require "dist.package"
|
||||
|
||||
-- Return all packages with specified names from manifest.
|
||||
-- Names can also contain version constraint (e.g. 'copas>=1.2.3', 'saci-1.0' etc.).
|
||||
function find_packages(package_names, manifest)
|
||||
if type(package_names) == "string" then package_names = {package_names} end
|
||||
manifest = manifest or mf.get_manifest()
|
||||
assert(type(package_names) == "table", "depends.find_packages: Argument 'package_names' is not a table or string.")
|
||||
assert(type(manifest) == "table", "depends.find_packages: Argument 'manifest' is not a table.")
|
||||
|
||||
local packages_found = {}
|
||||
-- find matching packages in manifest
|
||||
for _, pkg_to_find in pairs(package_names) do
|
||||
local pkg_name, pkg_constraint = split_name_constraint(pkg_to_find)
|
||||
pkg_name = utils.escape_magic(pkg_name):gsub("%%%*",".*")
|
||||
for _, repo_pkg in pairs(manifest) do
|
||||
if string.match(repo_pkg.name, "^" .. pkg_name .. "$") and (not pkg_constraint or satisfies_constraint(repo_pkg.version, pkg_constraint)) then
|
||||
table.insert(packages_found, repo_pkg)
|
||||
end
|
||||
end
|
||||
end
|
||||
return packages_found
|
||||
end
|
||||
|
||||
-- Return manifest consisting of packages installed in specified deploy_dir directory
|
||||
function get_installed(deploy_dir)
|
||||
deploy_dir = deploy_dir or cfg.root_dir
|
||||
assert(type(deploy_dir) == "string", "depends.get_installed: Argument 'deploy_dir' is not a string.")
|
||||
deploy_dir = sys.abs_path(deploy_dir)
|
||||
|
||||
local distinfos_path = sys.make_path(deploy_dir, cfg.distinfos_dir)
|
||||
local manifest = {}
|
||||
|
||||
if not sys.is_dir(distinfos_path) then return {} end
|
||||
|
||||
-- from all directories of packages installed in deploy_dir
|
||||
for dir in sys.get_directory(distinfos_path) do
|
||||
|
||||
if dir ~= "." and dir ~= ".." and sys.is_dir(sys.make_path(distinfos_path, dir)) then
|
||||
local pkg_dist_dir = sys.make_path(distinfos_path, dir)
|
||||
|
||||
-- load the dist.info file
|
||||
for file in sys.get_directory(pkg_dist_dir) do
|
||||
local pkg_dist_file = sys.make_path(pkg_dist_dir, file)
|
||||
|
||||
if sys.is_file(pkg_dist_file) then
|
||||
table.insert(manifest, mf.load_distinfo(pkg_dist_file))
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
return manifest
|
||||
end
|
||||
|
||||
-- If 'pkg.selected' == true then returns 'selected' else 'installed'.
|
||||
-- Used in error messages.
|
||||
local function selected_or_installed(pkg)
|
||||
assert(type(pkg) == "table", "depends.selected_or_installed: Argument 'pkg' is not a table.")
|
||||
if pkg.selected == true then
|
||||
return "selected"
|
||||
else
|
||||
return "installed"
|
||||
end
|
||||
end
|
||||
|
||||
-- Return whether the 'package_name' is installed according to the the manifest 'installed_pkgs'
|
||||
-- If optional 'version_wanted' constraint is specified, then installed packages must
|
||||
-- also satisfy specified version constraint.
|
||||
-- If package is installed but doesn't satisfy version constraint, error message
|
||||
-- is returned as the second value.
|
||||
function is_installed(package_name, installed_pkgs, version_wanted)
|
||||
assert(type(package_name) == "string", "depends.is_installed: Argument 'package_name' is not a string.")
|
||||
assert(type(installed_pkgs) == "table", "depends.is_installed: Argument 'installed_pkgs' is not a table.")
|
||||
assert(type(version_wanted) == "string" or type(version_wanted) == "nil", "depends.is_installed: Argument 'version_wanted' is not a string or nil.")
|
||||
|
||||
local pkg_is_installed, err = false, nil
|
||||
|
||||
for _, installed_pkg in pairs(installed_pkgs) do
|
||||
|
||||
-- check if package_name is in installed
|
||||
if package_name == installed_pkg.name then
|
||||
|
||||
-- check if package is installed in satisfying version
|
||||
if not version_wanted or satisfies_constraint(installed_pkg.version, version_wanted) then
|
||||
pkg_is_installed = true
|
||||
break
|
||||
else
|
||||
err = "Package '" .. package_name .. (version_wanted and " " .. version_wanted or "") .. "' needed, but " .. selected_or_installed(installed_pkg) .. " at version '" .. installed_pkg.version .. "'."
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
return pkg_is_installed, err
|
||||
end
|
||||
|
||||
-- Check whether the package 'pkg' conflicts with 'installed_pkg' and return
|
||||
-- false or error message.
|
||||
local function packages_conflicts(pkg, installed_pkg)
|
||||
assert(type(pkg) == "table", "depends.packages_conflicts: Argument 'pkg' is not a table.")
|
||||
assert(type(installed_pkg) == "table", "depends.packages_conflicts: Argument 'installed_pkg' is not a table.")
|
||||
|
||||
-- check if pkg doesn't provide an already installed_pkg
|
||||
if pkg.provides then
|
||||
-- for all of pkg's provides
|
||||
for _, provided_pkg in pairs(get_provides(pkg)) do
|
||||
if provided_pkg.name == installed_pkg.name then
|
||||
return "Package '" .. pkg_full_name(pkg.name, pkg.version, pkg.was_scm_version) .. "' provides '" .. pkg_full_name(provided_pkg.name, provided_pkg.version) .. "' but package '" .. pkg_full_name(installed_pkg.name, installed_pkg.version) .. "' is already " .. selected_or_installed(installed_pkg) .. "."
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- check for conflicts of package to install with installed package
|
||||
if pkg.conflicts then
|
||||
for _, conflict in pairs (pkg.conflicts) do
|
||||
if conflict == installed_pkg.name then
|
||||
return "Package '" .. pkg_full_name(pkg.name, pkg.version, pkg.was_scm_version) .. "' conflicts with already " .. selected_or_installed(installed_pkg) .. " package '" .. pkg_full_name(installed_pkg.name, installed_pkg.version) .. "'."
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- check for conflicts of installed package with package to install
|
||||
if installed_pkg.conflicts then
|
||||
|
||||
-- direct conflicts with 'pkg'
|
||||
for _, conflict in pairs (installed_pkg.conflicts) do
|
||||
if conflict == pkg.name then
|
||||
return "Already " .. selected_or_installed(installed_pkg) .. " package '" .. pkg_full_name(installed_pkg.name, installed_pkg.version) .. "' conflicts with package '" .. pkg_full_name(pkg.name, pkg.version, pkg.was_scm_version) .. "'."
|
||||
end
|
||||
end
|
||||
|
||||
-- conflicts with 'provides' of 'pkg' (packages provided by package to install)
|
||||
if pkg.provides then
|
||||
for _, conflict in pairs (installed_pkg.conflicts) do
|
||||
-- for all of pkg's provides
|
||||
for _, provided_pkg in pairs(get_provides(pkg)) do
|
||||
if conflict == provided_pkg.name then
|
||||
return "Already '" .. selected_or_installed(installed_pkg) .. " package '" .. pkg_full_name(installed_pkg.name, installed_pkg.version) .. "' conflicts with package '" .. pkg_full_name(provided_pkg.name, provided_pkg.version) .. "' provided by '" .. pkg_full_name(pkg.name, pkg.version, pkg.was_scm_version) .. "'."
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- no conflicts found
|
||||
return false
|
||||
end
|
||||
|
||||
-- Return table of package dependencies 'depends' with OS specific dependencies extracted.
|
||||
--
|
||||
-- OS specific dependencies are stored in a subtable with 'arch' as a key.
|
||||
-- E.g. this table containing OS specific dependencies:
|
||||
-- depends = {
|
||||
-- "lua~>5.1",
|
||||
-- "luadist-git>=0.1",
|
||||
-- Linux = {
|
||||
-- "iup>=3.6",
|
||||
-- "wxlua>=2.8.10.0",
|
||||
-- },
|
||||
-- Windows = {
|
||||
-- "luagd>=2.0.33r2",
|
||||
-- "luacom>=1.4.1",
|
||||
-- },
|
||||
-- }
|
||||
--
|
||||
-- ...will be on the 'Linux' architecture (determined by cfg.arch) converted into:
|
||||
-- depends = {
|
||||
-- "lua~>5.1",
|
||||
-- "luadist-git>=0.1",
|
||||
-- "iup>=3.6",
|
||||
-- "wxlua>=2.8.10.0",
|
||||
-- }
|
||||
function extract_os_specific_depends(depends)
|
||||
assert(type(depends) == "table", "depends.extract_os_specific_depends: Argument 'depends' is not a table.")
|
||||
local extracted = {}
|
||||
for k, depend in pairs(depends) do
|
||||
-- if 'depend' is a table, then it must be a table of OS specific
|
||||
-- dependencies, so extract it if it's for this architecture
|
||||
if type(depend) == "table" then
|
||||
if k == cfg.arch then
|
||||
for _, os_specific_depend in pairs(depend) do
|
||||
table.insert(extracted, os_specific_depend)
|
||||
end
|
||||
end
|
||||
else
|
||||
table.insert(extracted, depend)
|
||||
end
|
||||
end
|
||||
return extracted
|
||||
end
|
||||
|
||||
-- Return all packages needed in order to install package 'pkg'
|
||||
-- and with specified 'installed' packages in the system using 'manifest'.
|
||||
-- 'pkg' can also contain version constraint (e.g. 'copas>=1.2.3', 'saci-1.0' etc.).
|
||||
--
|
||||
-- This function also downloads packages to get information about their dependencies.
|
||||
-- Directory where the package was downloaded is stored in 'download_dir' attribute
|
||||
-- of that package in the table of packages returned by this function.
|
||||
--
|
||||
-- Optional argument 'dependency_manifest' is a table of dependencies examined
|
||||
-- from previous installations etc. It can be used to speed-up the dependency
|
||||
-- resolving procedure for example.
|
||||
--
|
||||
-- When optional 'force_no_download' parameter is set to true, then information
|
||||
-- about packages won't be downloaded during dependency resolving, assuming that
|
||||
-- entries in the provided manifest are already complete.
|
||||
--
|
||||
-- When optional 'suppress_printing' parameter is set to true, then messages
|
||||
-- for the user won't be printed during dependency resolving.
|
||||
--
|
||||
-- Optional argument 'deploy_dir' is used just as a temporary place to place
|
||||
-- the downloaded packages into.
|
||||
--
|
||||
-- 'dependency_parents' is table of all packages encountered so far when resolving dependencies
|
||||
-- and is used to detect and deal with circular dependencies. Leave it 'nil'
|
||||
-- and it will do its job just fine :-).
|
||||
--
|
||||
-- 'tmp_installed' is internal table used in recursion and should be left 'nil' when
|
||||
-- calling this function from other context. It is used for passing the changes
|
||||
-- in installed packages between the recursive calls of this function.
|
||||
--
|
||||
-- TODO: refactor this spaghetti code!
|
||||
local function get_packages_to_install(pkg, installed, manifest, dependency_manifest, force_no_download, suppress_printing, deploy_dir, dependency_parents, tmp_installed)
|
||||
manifest = manifest or mf.get_manifest()
|
||||
dependency_manifest = dependency_manifest or {}
|
||||
force_no_download = force_no_download or false
|
||||
suppress_printing = suppress_printing or false
|
||||
deploy_dir = deploy_dir or cfg.root_dir
|
||||
dependency_parents = dependency_parents or {}
|
||||
|
||||
-- set helper table 'tmp_installed'
|
||||
tmp_installed = tmp_installed or utils.deepcopy(installed)
|
||||
|
||||
assert(type(pkg) == "string", "depends.get_packages_to_install: Argument 'pkg' is not a string.")
|
||||
assert(type(installed) == "table", "depends.get_packages_to_install: Argument 'installed' is not a table.")
|
||||
assert(type(manifest) == "table", "depends.get_packages_to_install: Argument 'manifest' is not a table.")
|
||||
assert(type(dependency_manifest) == "table", "depends.get_packages_to_install: Argument 'dependency_manifest' is not a table.")
|
||||
assert(type(force_no_download) == "boolean", "depends.get_packages_to_install: Argument 'force_no_download' is not a boolean.")
|
||||
assert(type(suppress_printing) == "boolean", "depends.get_packages_to_install: Argument 'suppress_printing' is not a boolean.")
|
||||
assert(type(deploy_dir) == "string", "depends.get_packages_to_install: Argument 'deploy_dir' is not a string.")
|
||||
assert(type(dependency_parents) == "table", "depends.get_packages_to_install: Argument 'dependency_parents' is not a table.")
|
||||
assert(type(tmp_installed) == "table", "depends.get_packages_to_install: Argument 'tmp_installed' is not a table.")
|
||||
deploy_dir = sys.abs_path(deploy_dir)
|
||||
|
||||
--[[ for future debugging:
|
||||
print('resolving: '.. pkg)
|
||||
print(' installed: ', utils.table_tostring(installed))
|
||||
print(' tmp_installed: ', utils.table_tostring(tmp_installed))
|
||||
--]]
|
||||
|
||||
-- check if package is already installed
|
||||
local pkg_name, pkg_constraint = split_name_constraint(pkg)
|
||||
local pkg_is_installed, err = is_installed(pkg_name, tmp_installed, pkg_constraint)
|
||||
if pkg_is_installed then return {} end
|
||||
if err then return nil, err end
|
||||
|
||||
-- table of packages needed to be installed (will be returned)
|
||||
local to_install = {}
|
||||
|
||||
-- find out available versions of 'pkg' and insert them into manifest
|
||||
if not force_no_download then
|
||||
local versions, err = package.retrieve_versions(pkg, manifest, suppress_printing)
|
||||
if not versions then return nil, err end
|
||||
for _, version in pairs(versions) do
|
||||
table.insert(manifest, version)
|
||||
end
|
||||
end
|
||||
|
||||
-- find candidates & sort them
|
||||
local candidates_to_install = find_packages(pkg, manifest)
|
||||
if #candidates_to_install == 0 then
|
||||
return nil, "No suitable candidate for '" .. pkg .. "' found."
|
||||
end
|
||||
candidates_to_install = sort_by_versions(candidates_to_install)
|
||||
|
||||
for _, pkg in pairs(candidates_to_install) do
|
||||
|
||||
--[[ for future debugging:
|
||||
print(' candidate: '.. pkg.name..'-'..pkg.version)
|
||||
print(' installed: ', utils.table_tostring(installed))
|
||||
print(' tmp_installed: ', utils.table_tostring(tmp_installed))
|
||||
print(' to_install: ', utils.table_tostring(to_install))
|
||||
print(' -is installed: ', is_installed(pkg.name, tmp_installed, pkg_constraint))
|
||||
--]]
|
||||
|
||||
-- if there's an error from the previous candidate, print the reason for trying another one
|
||||
if not suppress_printing and err then print(" - trying another candidate due to: " .. err) end
|
||||
|
||||
-- clear the state from the previous candidate
|
||||
pkg_is_installed, err = false, nil
|
||||
|
||||
-- check whether this package has already been added to 'tmp_installed' by another of its candidates
|
||||
pkg_is_installed, err = is_installed(pkg.name, tmp_installed, pkg_constraint)
|
||||
if pkg_is_installed then break end
|
||||
|
||||
-- preserve information about the 'scm' version, because pkg.version
|
||||
-- will be rewritten by information taken from pkg's dist.info file
|
||||
local was_scm_version = (pkg.version == "scm")
|
||||
|
||||
-- Try to obtain cached dependency information from the dependency manifest
|
||||
if dependency_manifest[pkg.name .. "-" .. pkg.version] and cfg.dep_cache then
|
||||
pkg = dependency_manifest[pkg.name .. "-" .. pkg.version]
|
||||
else
|
||||
-- download info about the package if not already downloaded and downloading not prohibited
|
||||
if not (pkg.download_dir or force_no_download) then
|
||||
local path_or_err
|
||||
pkg, path_or_err = package.retrieve_pkg_info(pkg, deploy_dir, suppress_printing)
|
||||
if not pkg then
|
||||
err = "Error when resolving dependencies: " .. path_or_err
|
||||
else
|
||||
-- set path to downloaded package - used to indicate that the
|
||||
-- package was already downloaded, to delete unused but downloaded
|
||||
-- packages and also to install choosen packages
|
||||
pkg.download_dir = path_or_err
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if pkg and was_scm_version then pkg.was_scm_version = true end
|
||||
|
||||
-- check arch & type
|
||||
if not err then
|
||||
if not (pkg.arch == "Universal" or pkg.arch == cfg.arch) or
|
||||
not (pkg.type == "all" or pkg.type == "source" or pkg.type == cfg.type) then
|
||||
err = "Package '" .. pkg_full_name(pkg.name, pkg.version) .. "' doesn't have required arch and type."
|
||||
end
|
||||
end
|
||||
|
||||
-- checks for conflicts with other installed (or previously selected) packages
|
||||
if not err then
|
||||
for _, installed_pkg in pairs(tmp_installed) do
|
||||
err = packages_conflicts(pkg, installed_pkg)
|
||||
if err then break end
|
||||
end
|
||||
end
|
||||
|
||||
-- if pkg passed all of the above tests
|
||||
if not err then
|
||||
|
||||
-- check if pkg's dependencies are satisfied
|
||||
if pkg.depends then
|
||||
|
||||
-- insert pkg into the stack of circular dependencies detection
|
||||
table.insert(dependency_parents, pkg.name)
|
||||
|
||||
-- extract all OS specific dependencies of pkg
|
||||
pkg.depends = extract_os_specific_depends(pkg.depends)
|
||||
|
||||
-- for all dependencies of pkg
|
||||
for _, depend in pairs(pkg.depends) do
|
||||
local dep_name = split_name_constraint(depend)
|
||||
|
||||
-- detect circular dependencies using 'dependency_parents'
|
||||
local is_circular_dependency = false
|
||||
for _, parent in pairs(dependency_parents) do
|
||||
if dep_name == parent then
|
||||
is_circular_dependency = true
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
-- if circular dependencies not detected
|
||||
if not is_circular_dependency then
|
||||
|
||||
-- recursively call this function on the candidates of this pkg's dependency
|
||||
local depends_to_install, dep_err = get_packages_to_install(depend, installed, manifest, dependency_manifest, force_no_download, suppress_printing, deploy_dir, dependency_parents, tmp_installed)
|
||||
|
||||
-- if any suitable dependency packages were found, insert them to the 'to_install' table
|
||||
if depends_to_install then
|
||||
for _, depend_to_install in pairs(depends_to_install) do
|
||||
|
||||
-- add some meta information
|
||||
if not depend_to_install.selected_by then
|
||||
depend_to_install.selected_by = pkg.name .. "-" .. pkg.version
|
||||
end
|
||||
|
||||
table.insert(to_install, depend_to_install)
|
||||
table.insert(tmp_installed, depend_to_install)
|
||||
table.insert(installed, depend_to_install)
|
||||
end
|
||||
else
|
||||
err = "Error getting dependency of '" .. pkg_full_name(pkg.name, pkg.version) .. "': " .. dep_err
|
||||
break
|
||||
end
|
||||
|
||||
-- if circular dependencies detected
|
||||
else
|
||||
err = "Error getting dependency of '" .. pkg_full_name(pkg.name, pkg.version) .. "': '" .. dep_name .. "' is a circular dependency."
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
-- remove last package from the stack of circular dependencies detection
|
||||
table.remove(dependency_parents)
|
||||
end
|
||||
|
||||
-- if no error occured
|
||||
if not err then
|
||||
-- add pkg and it's provides to the fake table of installed packages, with
|
||||
-- property 'selected' set, indicating that the package isn't
|
||||
-- really installed in the system, just selected to be installed (this is used e.g. in error messages)
|
||||
pkg.selected = true
|
||||
table.insert(tmp_installed, pkg)
|
||||
if pkg.provides then
|
||||
for _, provided_pkg in pairs(get_provides(pkg)) do
|
||||
provided_pkg.selected = true
|
||||
table.insert(tmp_installed, provided_pkg)
|
||||
end
|
||||
end
|
||||
-- add pkg to the table of packages to install
|
||||
table.insert(to_install, pkg)
|
||||
|
||||
-- if some error occured
|
||||
else
|
||||
-- delete the downloaded package
|
||||
if pkg.download_dir and not cfg.debug then sys.delete(pkg.download_dir) end
|
||||
|
||||
-- set tables of 'packages to install' and 'installed packages' to their original state
|
||||
|
||||
to_install = {}
|
||||
tmp_installed = utils.deepcopy(installed)
|
||||
-- add provided packages to installed ones
|
||||
for _, installed_pkg in pairs(tmp_installed) do
|
||||
for _, pkg in pairs(get_provides(installed_pkg)) do
|
||||
table.insert(tmp_installed, pkg)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- if error occured
|
||||
else
|
||||
-- delete the downloaded package
|
||||
if pkg and pkg.download_dir and not cfg.debug then sys.delete(pkg.download_dir) end
|
||||
|
||||
-- if pkg is already installed, skip checking its other candidates
|
||||
if pkg_is_installed then break end
|
||||
end
|
||||
end
|
||||
|
||||
-- if package is not installed and no suitable candidates were found, return the last error
|
||||
if #to_install == 0 and not pkg_is_installed then
|
||||
return nil, err
|
||||
else
|
||||
return to_install
|
||||
end
|
||||
end
|
||||
|
||||
-- Resolve dependencies and return all packages needed in order to install
|
||||
-- 'packages' into the system with already 'installed' packages, using 'manifest'.
|
||||
-- Also return the table of the dependencies determined during the process
|
||||
-- as the second return value.
|
||||
--
|
||||
-- Optional argument 'dependency_manifest' is a table of dependencies examined
|
||||
-- from previous installations etc. It can be used to speed-up the dependency
|
||||
-- resolving procedure for example.
|
||||
--
|
||||
-- Optional argument 'deploy_dir' is used as a temporary place to place the
|
||||
-- downloaded packages into.
|
||||
--
|
||||
-- When optional 'force_no_download' parameter is set to true, then information
|
||||
-- about packages won't be downloaded during dependency resolving, assuming that
|
||||
-- entries in manifest are complete.
|
||||
--
|
||||
-- When optional 'suppress_printing' parameter is set to true, then messages
|
||||
-- for the user won't be printed during dependency resolving.
|
||||
function get_depends(packages, installed, manifest, dependency_manifest, deploy_dir, force_no_download, suppress_printing)
|
||||
if not packages then return {} end
|
||||
manifest = manifest or mf.get_manifest()
|
||||
dependency_manifest = dependency_manifest or {}
|
||||
deploy_dir = deploy_dir or cfg.root_dir
|
||||
force_no_download = force_no_download or false
|
||||
suppress_printing = suppress_printing or false
|
||||
if type(packages) == "string" then packages = {packages} end
|
||||
|
||||
assert(type(packages) == "table", "depends.get_depends: Argument 'packages' is not a table or string.")
|
||||
assert(type(installed) == "table", "depends.get_depends: Argument 'installed' is not a table.")
|
||||
assert(type(manifest) == "table", "depends.get_depends: Argument 'manifest' is not a table.")
|
||||
assert(type(dependency_manifest) == "table", "depends.get_depends: Argument 'dependency_manifest' is not a table.")
|
||||
assert(type(deploy_dir) == "string", "depends.get_depends: Argument 'deploy_dir' is not a string.")
|
||||
assert(type(force_no_download) == "boolean", "depends.get_depends: Argument 'force_no_download' is not a boolean.")
|
||||
assert(type(suppress_printing) == "boolean", "depends.get_depends: Argument 'suppress_printing' is not a boolean.")
|
||||
deploy_dir = sys.abs_path(deploy_dir)
|
||||
|
||||
local tmp_installed = utils.deepcopy(installed)
|
||||
|
||||
-- add provided packages to installed ones
|
||||
for _, installed_pkg in pairs(tmp_installed) do
|
||||
for _, pkg in pairs(get_provides(installed_pkg)) do
|
||||
table.insert(tmp_installed, pkg)
|
||||
end
|
||||
end
|
||||
|
||||
-- If 'pkg' contains valid (architecture specific) path separator,
|
||||
-- it is treated like a path to already downloaded package and
|
||||
-- we assume that user wants to use this specific version of the
|
||||
-- module to be installed. Hence, we will add information about
|
||||
-- this version into the manifest and also remove references to
|
||||
-- any other versions of this module from the manifest. This will
|
||||
-- enforce the version of the module required by the user.
|
||||
for k, pkg in pairs(packages) do
|
||||
if pkg:find(sys.path_separator()) then
|
||||
local pkg_dir = sys.abs_path(pkg)
|
||||
local pkg_info, err = mf.load_distinfo(sys.make_path(pkg_dir, "dist.info"))
|
||||
if not pkg_info then return nil, err end
|
||||
|
||||
-- add information about location of the package, also to prevent downloading it again
|
||||
pkg_info.download_dir = pkg_dir
|
||||
-- mark package to skip deleting its directory after installation
|
||||
pkg_info.preserve_pkg_dir = true
|
||||
|
||||
-- set default arch/type if not explicitly stated and package is of source type
|
||||
if package.is_source_type(pkg_dir) then
|
||||
pkg_info = package.ensure_source_arch_and_type(pkg_info)
|
||||
elseif not (pkg_info.arch and pkg_info.type) then
|
||||
return nil, pkg_dir .. ": binary package missing arch or type in 'dist.info'."
|
||||
end
|
||||
|
||||
-- update manifest
|
||||
manifest = utils.filter(manifest, function(p) return p.name ~= pkg_info.name and true end)
|
||||
table.insert(manifest, pkg_info)
|
||||
|
||||
-- update packages to install
|
||||
pkg = pkg_info.name .. "-" .. pkg_info.version
|
||||
packages[k] = pkg
|
||||
end
|
||||
end
|
||||
|
||||
local to_install = {}
|
||||
|
||||
-- get packages needed to satisfy the dependencies
|
||||
for _, pkg in pairs(packages) do
|
||||
|
||||
local needed_to_install, err = get_packages_to_install(pkg, tmp_installed, manifest, dependency_manifest, force_no_download, suppress_printing, deploy_dir)
|
||||
|
||||
-- if everything's fine
|
||||
if needed_to_install then
|
||||
|
||||
for _, needed_pkg in pairs(needed_to_install) do
|
||||
|
||||
-- TODO: why not to use 'installed' instead of 'tmp_installed'?
|
||||
-- It's because provides aren't searched for by find()
|
||||
-- function inside the update_dependency_manifest().
|
||||
dependency_manifest = update_dependency_manifest(needed_pkg, tmp_installed, needed_to_install, dependency_manifest)
|
||||
|
||||
table.insert(to_install, needed_pkg)
|
||||
table.insert(tmp_installed, needed_pkg)
|
||||
-- add provides of needed_pkg to installed ones
|
||||
for _, provided_pkg in pairs(get_provides(needed_pkg)) do
|
||||
-- copy 'selected' property
|
||||
provided_pkg.selected = needed_pkg.selected
|
||||
table.insert(tmp_installed, provided_pkg)
|
||||
end
|
||||
end
|
||||
-- if error occured
|
||||
else
|
||||
-- delete already downloaded packages
|
||||
for _, pkg in pairs(to_install) do
|
||||
if pkg.download_dir and not cfg.debug then sys.delete(pkg.download_dir) end
|
||||
end
|
||||
return nil, "Cannot resolve dependencies for '" .. pkg .. "': ".. err
|
||||
end
|
||||
end
|
||||
|
||||
return to_install, dependency_manifest
|
||||
end
|
||||
|
||||
-- Return table of packages provided by specified package (from it's 'provides' field)
|
||||
function get_provides(package)
|
||||
assert(type(package) == "table", "depends.get_provides: Argument 'package' is not a table.")
|
||||
if not package.provides then return {} end
|
||||
|
||||
local provided = {}
|
||||
for _, provided_name in pairs(package.provides) do
|
||||
local pkg = {}
|
||||
pkg.name, pkg.version = split_name_constraint(provided_name)
|
||||
pkg.type = package.type
|
||||
pkg.arch = package.arch
|
||||
pkg.provided = package.name .. "-" .. package.version
|
||||
table.insert(provided, pkg)
|
||||
end
|
||||
return provided
|
||||
end
|
||||
|
||||
-- Return package name and version constraint from full package version constraint specification
|
||||
-- E. g.:
|
||||
-- for 'luaexpat-1.2.3' return: 'luaexpat' , '1.2.3'
|
||||
-- for 'luajit >= 1.2' return: 'luajit' , '>=1.2'
|
||||
function split_name_constraint(version_constraint)
|
||||
assert(type(version_constraint) == "string", "depends.split_name_constraint: Argument 'version_constraint' is not a string.")
|
||||
|
||||
local split = version_constraint:find("[%s=~<>-]+%d") or version_constraint:find("[%s=~<>-]+scm")
|
||||
|
||||
if split then
|
||||
return version_constraint:sub(1, split - 1), version_constraint:sub(split):gsub("[%s-]", "")
|
||||
else
|
||||
return version_constraint, nil
|
||||
end
|
||||
end
|
||||
|
||||
-- Return only packages that can be installed on the specified architecture and type
|
||||
function filter_packages_by_arch_and_type(packages, req_arch, req_type)
|
||||
assert(type(packages) == "table", "depends.filter_packages_by_arch_and_type: Argument 'packages' is not a table.")
|
||||
assert(type(req_arch) == "string", "depends.filter_packages_by_arch_and_type: Argument 'req_arch' is not a string.")
|
||||
assert(type(req_type) == "string", "depends.filter_packages_by_arch_and_type: Argument 'pkg_type' is not a string.")
|
||||
|
||||
return utils.filter(packages,
|
||||
function (pkg)
|
||||
return (pkg.arch == "Universal" or pkg.arch == req_arch) and
|
||||
(pkg.type == "all" or pkg.type == "source" or pkg.type == req_type)
|
||||
end)
|
||||
end
|
||||
|
||||
-- Return only packages that contain one of the specified strings in their 'name-version'.
|
||||
-- Case is ignored. If no strings are specified, return all the packages.
|
||||
-- Argument 'search_in_desc' specifies if search also in description of packages.
|
||||
function filter_packages_by_strings(packages, strings, search_in_desc)
|
||||
if type(strings) == "string" then strings = {strings} end
|
||||
assert(type(packages) == "table", "depends.filter_packages_by_strings: Argument 'packages' is not a table.")
|
||||
assert(type(strings) == "table", "depends.filter_packages_by_strings: Argument 'strings' is not a string or table.")
|
||||
|
||||
if #strings ~= 0 then
|
||||
return utils.filter(packages,
|
||||
function (pkg)
|
||||
for _,str in pairs(strings) do
|
||||
local name = pkg.name .. "-" .. pkg.version
|
||||
if search_in_desc then
|
||||
name = name .. " " .. (pkg.desc or "")
|
||||
end
|
||||
if string.find(string.lower(name), string.lower(str), 1 ,true) ~= nil then return true end
|
||||
end
|
||||
end)
|
||||
else
|
||||
return packages
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
-- Return full package name and version string (e.g. 'luajit-2.0'). When version
|
||||
-- is nil or '' then return only name (e.g. 'luajit') and when name is nil or ''
|
||||
-- then return '<unknown>'. Optional 'was_scm_version' argument is a boolean,
|
||||
-- stating whether the package was originally selected for installation as a 'scm' version.
|
||||
function pkg_full_name(name, version, was_scm_version)
|
||||
name = name or ""
|
||||
version = version or ""
|
||||
was_scm_version = was_scm_version or false
|
||||
if type(version) == "number" then version = tostring(version) end
|
||||
|
||||
assert(type(name) == "string", "depends.pkg_full_name: Argument 'name' is not a string.")
|
||||
assert(type(version) == "string", "depends.pkg_full_name: Argument 'version' is not a string.")
|
||||
|
||||
if was_scm_version then version = version .. " [scm version]" end
|
||||
|
||||
if name == "" then
|
||||
return "<unknown>"
|
||||
else
|
||||
return name .. ((version ~= "") and "-" .. version or "")
|
||||
end
|
||||
end
|
||||
|
||||
-- Return table of packages, sorted descendingly by versions (newer ones are moved to the top).
|
||||
function sort_by_versions(packages)
|
||||
assert(type(packages) == "table", "depends.sort_by_versions: Argument 'packages' is not a table.")
|
||||
return utils.sort(packages, function (a, b) return compare_versions(a.version, b.version) end)
|
||||
end
|
||||
|
||||
-- Return table of packages, sorted alphabetically by name and then descendingly by version.
|
||||
function sort_by_names(packages)
|
||||
assert(type(packages) == "table", "depends.sort_by_names: Argument 'packages' is not a table.")
|
||||
return utils.sort(packages, function (a, b)
|
||||
if a.name == b.name then
|
||||
return compare_versions(a.version, b.version)
|
||||
else
|
||||
return a.name < b.name
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
-- Return if version satisfies the specified constraint
|
||||
function satisfies_constraint(version, constraint)
|
||||
assert(type(version) == "string", "depends.satisfies_constraint: Argument 'version' is not a string.")
|
||||
assert(type(constraint) == "string", "depends.satisfies_constraint: Argument 'constraint' is not a string.")
|
||||
return const.constraint_satisfied(version, constraint)
|
||||
end
|
||||
|
||||
-- For package versions, return whether: 'version_a' > 'version_b'
|
||||
function compare_versions(version_a, version_b)
|
||||
assert(type(version_a) == "string", "depends.compare_versions: Argument 'version_a' is not a string.")
|
||||
assert(type(version_b) == "string", "depends.compare_versions: Argument 'version_b' is not a string.")
|
||||
return const.compareVersions(version_a, version_b)
|
||||
end
|
||||
|
||||
-- Returns 'dep_manifest' updated with information about the 'pkg'.
|
||||
-- 'installed' is table with installed packages
|
||||
-- 'to_install' is table with packages that are selected for installation
|
||||
-- Packages satisfying the dependencies will be searched for in these two tables.
|
||||
function update_dependency_manifest(pkg, installed, to_install, dep_manifest)
|
||||
dep_manifest = dep_manifest or {}
|
||||
assert(type(pkg) == "table", "depends.update_dependency_manifest: Argument 'pkg' is not a table.")
|
||||
assert(type(installed) == "table", "depends.update_dependency_manifest: Argument 'installed' is not a table.")
|
||||
assert(type(to_install) == "table", "depends.update_dependency_manifest: Argument 'to_install' is not a table.")
|
||||
assert(type(dep_manifest) == "table", "depends.update_dependency_manifest: Argument 'dep_manifest' is not a table.")
|
||||
|
||||
local name_ver = pkg.name .. "-" .. (pkg.was_scm_version and "scm" or pkg.version)
|
||||
|
||||
-- add to manifest
|
||||
if not dep_manifest[name_ver] then
|
||||
dep_manifest[name_ver] = {}
|
||||
dep_manifest[name_ver].name = pkg.name
|
||||
dep_manifest[name_ver].version = pkg.version
|
||||
dep_manifest[name_ver].was_scm_version = pkg.was_scm_version
|
||||
dep_manifest[name_ver].arch = pkg.arch
|
||||
dep_manifest[name_ver].type = pkg.type
|
||||
dep_manifest[name_ver].path = pkg.path
|
||||
dep_manifest[name_ver].depends = pkg.depends
|
||||
dep_manifest[name_ver].conflicts = pkg.conflicts
|
||||
dep_manifest[name_ver].provides = pkg.provides
|
||||
dep_manifest[name_ver].license = pkg.license
|
||||
dep_manifest[name_ver].desc = pkg.desc
|
||||
dep_manifest[name_ver].url = pkg.url
|
||||
dep_manifest[name_ver].author = pkg.author
|
||||
dep_manifest[name_ver].maintainer = pkg.maintainer
|
||||
|
||||
-- add information which dependency is satisfied by which package
|
||||
if pkg.depends then
|
||||
|
||||
-- TODO: Won't it be better to add OS-specific 'satisfied_by' metadata in a format like OS-specific 'depends' ?
|
||||
local all_deps = extract_os_specific_depends(pkg.depends)
|
||||
|
||||
dep_manifest[name_ver].satisfied_by = {}
|
||||
for _, depend in pairs(all_deps) do
|
||||
|
||||
-- find package satisfying the dependency
|
||||
local satisfying = find_packages(depend, installed)[1] or find_packages(depend, to_install)[1]
|
||||
satisfying = satisfying.name .. "-" .. satisfying.version
|
||||
dep_manifest[name_ver].satisfied_by[depend] = satisfying
|
||||
|
||||
-- check whether the satisfying package isn't provided by other one
|
||||
local provided_by = utils.filter(installed, function(pkg)
|
||||
return pkg.provides and utils.contains(pkg.provides, satisfying)
|
||||
end)
|
||||
if #provided_by == 0 then
|
||||
provided_by = utils.filter(to_install, function(pkg)
|
||||
return pkg.provides and utils.contains(pkg.provides, satisfying)
|
||||
end)
|
||||
end
|
||||
|
||||
if #provided_by ~= 0 then
|
||||
if not dep_manifest[name_ver].satisfying_provided_by then
|
||||
dep_manifest[name_ver].satisfying_provided_by = {}
|
||||
end
|
||||
dep_manifest[name_ver].satisfying_provided_by[satisfying] = provided_by[1].name .. "-" .. provided_by[1].version
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
return dep_manifest
|
||||
end
|
||||
306
lualibs/dist/git.lua
vendored
Normal file
306
lualibs/dist/git.lua
vendored
Normal file
@@ -0,0 +1,306 @@
|
||||
-- Encapsulated Git functionality
|
||||
|
||||
module ("dist.git", package.seeall)
|
||||
|
||||
require "git"
|
||||
local sys = require "dist.sys"
|
||||
local cfg = require "dist.config"
|
||||
|
||||
|
||||
-- Clone the repository from url to dest_dir
|
||||
function clone(repository_url, dest_dir, depth, branch)
|
||||
assert(type(repository_url) == "string", "git.clone: Argument 'repository_url' is not a string.")
|
||||
assert(type(dest_dir) == "string", "git.clone: Argument 'dest_dir' is not a string.")
|
||||
dest_dir = sys.abs_path(dest_dir)
|
||||
|
||||
local command = "git clone " .. repository_url
|
||||
|
||||
if depth then
|
||||
assert(type(depth) == "number", "git.clone: Argument 'depth' is not a number.")
|
||||
command = command .. " --depth " .. depth
|
||||
end
|
||||
|
||||
if branch then
|
||||
assert(type(branch) == "string", "git.clone: Argument 'branch' is not a string.")
|
||||
command = command .. " -b " .. branch
|
||||
end
|
||||
|
||||
command = command .. " " .. sys.quote(dest_dir)
|
||||
if sys.exists(dest_dir) then sys.delete(dest_dir) end
|
||||
sys.make_dir(dest_dir)
|
||||
|
||||
-- change the current working directory to dest_dir
|
||||
local prev_current_dir = sys.current_dir()
|
||||
sys.change_dir(dest_dir)
|
||||
|
||||
-- execute git clone
|
||||
if not cfg.debug then command = command .. " -q " end
|
||||
local ok, err = sys.exec(command)
|
||||
|
||||
-- change the current working directory back
|
||||
sys.change_dir(prev_current_dir)
|
||||
|
||||
return ok, err
|
||||
end
|
||||
|
||||
-- Return table of all refs of the remote repository at the 'git_url'. Ref_type can be "tags" or "heads".
|
||||
local function get_remote_refs(git_url, ref_type)
|
||||
assert(type(git_url) == "string", "git.get_remote_refs: Argument 'git_url' is not a string.")
|
||||
assert(type(ref_type) == "string", "git.get_remote_refs: Argument 'ref_type' is not a string.")
|
||||
assert(ref_type == "tags" or ref_type == "heads", "git.get_remote_refs: Argument 'ref_type' is not \"tags\" or \"heads\".")
|
||||
|
||||
local refs = {}
|
||||
|
||||
local ok, refs_or_err = pcall(git.protocol.remotes, git_url)
|
||||
if not ok then return nil, "Error getting refs of the remote repository '" .. git_url .. "': " .. refs_or_err end
|
||||
|
||||
for ref, sha in pairs(refs_or_err) do
|
||||
if ref:match("%S+/" .. ref_type .. "/%S+") and not ref:match("%^{}") then
|
||||
table.insert(refs, ref:match("%S+/" .. ref_type .. "/(%S+)"))
|
||||
end
|
||||
end
|
||||
|
||||
return refs
|
||||
end
|
||||
|
||||
-- Return table of all tags of the repository at the 'git_url'
|
||||
function get_remote_tags(git_url)
|
||||
return get_remote_refs(git_url, "tags")
|
||||
end
|
||||
|
||||
-- Return table of all branches of the repository at the 'git_url'
|
||||
function get_remote_branches(git_url)
|
||||
return get_remote_refs(git_url, "heads")
|
||||
end
|
||||
|
||||
-- Checkout specified ref in specified git_repo_dir
|
||||
function checkout_ref(ref, git_repo_dir, orphaned)
|
||||
git_repo_dir = git_repo_dir or sys.current_dir()
|
||||
orphaned = orphaned or false
|
||||
assert(type(ref) == "string", "git.checkout_ref: Argument 'ref' is not a string.")
|
||||
assert(type(git_repo_dir) == "string", "git.checkout_ref: Argument 'git_repo_dir' is not a string.")
|
||||
assert(type(orphaned) == "boolean", "git.checkout_ref: Argument 'orphaned' is not a boolean.")
|
||||
git_repo_dir = sys.abs_path(git_repo_dir)
|
||||
|
||||
local command = "git checkout "
|
||||
if orphaned then command = command .. " --orphan " end
|
||||
command = command .. " " .. ref .. " -f"
|
||||
if not cfg.debug then command = command .. " -q " end
|
||||
|
||||
local ok, err
|
||||
if git_repo_dir ~= sys.current_dir() then
|
||||
local prev_current_dir = sys.current_dir()
|
||||
sys.change_dir(git_repo_dir)
|
||||
ok, err = sys.exec(command)
|
||||
sys.change_dir(prev_current_dir)
|
||||
else
|
||||
ok, err = sys.exec(command)
|
||||
end
|
||||
|
||||
return ok, err
|
||||
end
|
||||
|
||||
-- Checkout specified sha in specified git_repo_dir
|
||||
function checkout_sha(sha, git_repo_dir)
|
||||
git_repo_dir = git_repo_dir or sys.current_dir()
|
||||
assert(type(sha) == "string", "git.checkout_sha: Argument 'sha' is not a string.")
|
||||
assert(type(git_repo_dir) == "string", "git.checkout_sha: Argument 'git_repo_dir' is not a string.")
|
||||
git_repo_dir = sys.abs_path(git_repo_dir)
|
||||
|
||||
local dir_changed, prev_current_dir
|
||||
|
||||
if git_repo_dir ~= sys.current_dir() then
|
||||
prev_current_dir = sys.current_dir()
|
||||
sys.change_dir(git_repo_dir)
|
||||
dir_changed = true
|
||||
end
|
||||
|
||||
local ok, repo_or_err = pcall(git.repo.open, git_repo_dir)
|
||||
if not ok then return nil, "Error when opening the git repository '" .. git_repo_dir .. "': " .. repo_or_err end
|
||||
|
||||
local err
|
||||
ok, err = pcall(repo_or_err.checkout, repo_or_err, sha, git_repo_dir)
|
||||
if not ok then return nil, "Error when checking out the sha '" .. sha .. "' in the git repository '" .. git_repo_dir .. "': " .. err end
|
||||
|
||||
repo_or_err:close()
|
||||
if dir_changed then sys.change_dir(prev_current_dir) end
|
||||
|
||||
return true
|
||||
end
|
||||
|
||||
-- Create an empty git repository in given directory.
|
||||
function init(dir)
|
||||
dir = dir or sys.current_dir()
|
||||
assert(type(dir) == "string", "git.init: Argument 'dir' is not a string.")
|
||||
dir = sys.abs_path(dir)
|
||||
|
||||
-- create the 'dir' first, since it causes 'git init' to fail on Windows
|
||||
-- when the parent directory of 'dir' doesn't exist
|
||||
local ok, err = sys.make_dir(dir)
|
||||
if not ok then return nil, err end
|
||||
|
||||
local command = "git init " .. sys.quote(dir)
|
||||
if not cfg.debug then command = command .. " -q " end
|
||||
return sys.exec(command)
|
||||
end
|
||||
|
||||
-- Add all files in the 'repo_dir' to the git index. The 'repo_dir' must be
|
||||
-- in the initialized git repository.
|
||||
function add_all(repo_dir)
|
||||
repo_dir = repo_dir or sys.current_dir()
|
||||
assert(type(repo_dir) == "string", "git.add_all: Argument 'repo_dir' is not a string.")
|
||||
repo_dir = sys.abs_path(repo_dir)
|
||||
|
||||
local ok, prev_dir, msg
|
||||
ok, prev_dir = sys.change_dir(repo_dir);
|
||||
if not ok then return nil, err end
|
||||
|
||||
ok, msg = sys.exec("git add -A -f " .. sys.quote(repo_dir))
|
||||
sys.change_dir(prev_dir)
|
||||
|
||||
return ok, msg
|
||||
end
|
||||
|
||||
-- Commit all indexed files in 'repo_dir' with the given commit 'message'.
|
||||
-- The 'repo_dir' must be in the initialized git repository.
|
||||
function commit(message, repo_dir)
|
||||
repo_dir = repo_dir or sys.current_dir()
|
||||
message = message or "commit by luadist-git"
|
||||
assert(type(message) == "string", "git.commit: Argument 'message' is not a string.")
|
||||
assert(type(repo_dir) == "string", "git.commit: Argument 'repo_dir' is not a string.")
|
||||
repo_dir = sys.abs_path(repo_dir)
|
||||
|
||||
local ok, prev_dir, msg
|
||||
ok, prev_dir = sys.change_dir(repo_dir);
|
||||
if not ok then return nil, err end
|
||||
|
||||
local command = "git commit -m " .. sys.quote(message)
|
||||
if not cfg.debug then command = command .. " -q " end
|
||||
ok, msg = sys.exec(command)
|
||||
sys.change_dir(prev_dir)
|
||||
|
||||
return ok, msg
|
||||
end
|
||||
|
||||
|
||||
-- Rename branch 'old_name' to 'new_name'. -- The 'repo_dir' must be
|
||||
-- in the initialized git repository and the branch 'new_name' must
|
||||
-- not already exist in that repository.
|
||||
function rename_branch(old_name, new_name, repo_dir)
|
||||
repo_dir = repo_dir or sys.current_dir()
|
||||
assert(type(old_name) == "string", "git.rename_branch: Argument 'old_name' is not a string.")
|
||||
assert(type(new_name) == "string", "git.rename_branch: Argument 'new_name' is not a string.")
|
||||
assert(type(repo_dir) == "string", "git.rename_branch: Argument 'repo_dir' is not a string.")
|
||||
repo_dir = sys.abs_path(repo_dir)
|
||||
|
||||
local ok, prev_dir, msg
|
||||
ok, prev_dir = sys.change_dir(repo_dir);
|
||||
if not ok then return nil, err end
|
||||
|
||||
ok, msg = sys.exec("git branch -m " .. old_name .. " " .. new_name)
|
||||
sys.change_dir(prev_dir)
|
||||
|
||||
return ok, msg
|
||||
end
|
||||
|
||||
-- Push the ref 'ref_name' from the 'repo_dir' to the remote git
|
||||
-- repository 'git_repo_url'. If 'all_tags' is set to true, all tags
|
||||
-- will be pushed, in addition to the explicitly given ref.
|
||||
-- If 'delete' is set to 'true' then the explicitly given remote ref
|
||||
-- will be deleted, not pushed.
|
||||
function push_ref(repo_dir, ref_name, git_repo_url, all_tags, delete)
|
||||
repo_dir = repo_dir or sys.current_dir()
|
||||
all_tags = all_tags or false
|
||||
delete = delete or false
|
||||
assert(type(repo_dir) == "string", "git.push_ref: Argument 'repo_dir' is not a string.")
|
||||
assert(type(git_repo_url) == "string", "git.push_ref: Argument 'git_repo_url' is not a string.")
|
||||
assert(type(ref_name) == "string", "git.push_ref: Argument 'ref_name' is not a string.")
|
||||
assert(type(all_tags) == "boolean", "git.push_ref: Argument 'all_tags' is not a boolean.")
|
||||
assert(type(delete) == "boolean", "git.push_ref: Argument 'delete' is not a boolean.")
|
||||
repo_dir = sys.abs_path(repo_dir)
|
||||
|
||||
local ok, prev_dir, msg
|
||||
ok, prev_dir = sys.change_dir(repo_dir);
|
||||
if not ok then return nil, err end
|
||||
|
||||
local command = "git push " .. git_repo_url
|
||||
if all_tags then command = command .. " --tags " end
|
||||
if delete then command = command .. " --delete " end
|
||||
command = command .. " " .. ref_name .. " -f "
|
||||
if not cfg.debug then command = command .. " -q " end
|
||||
|
||||
ok, msg = sys.exec(command)
|
||||
sys.change_dir(prev_dir)
|
||||
|
||||
return ok, msg
|
||||
end
|
||||
|
||||
-- Creates the tag 'tag_name' in given 'repo_dir', which must be
|
||||
-- in the initialized git repository
|
||||
function create_tag(repo_dir, tag_name)
|
||||
repo_dir = repo_dir or sys.current_dir()
|
||||
assert(type(repo_dir) == "string", "git.create_tag: Argument 'repo_dir' is not a string.")
|
||||
assert(type(tag_name) == "string", "git.create_tag: Argument 'tag_name' is not a string.")
|
||||
repo_dir = sys.abs_path(repo_dir)
|
||||
|
||||
local ok, prev_dir, msg
|
||||
ok, prev_dir = sys.change_dir(repo_dir);
|
||||
if not ok then return nil, err end
|
||||
|
||||
ok, msg = sys.exec("git tag " .. tag_name .. " -f ")
|
||||
sys.change_dir(prev_dir)
|
||||
|
||||
return ok, msg
|
||||
end
|
||||
|
||||
-- Fetch given 'ref_name' from the remote 'git_repo_url' to the local repository
|
||||
-- 'repo_dir' and return its sha. 'ref_type' can be "tag" or "head".
|
||||
local function fetch_ref(repo_dir, git_repo_url, ref_name, ref_type)
|
||||
repo_dir = repo_dir or sys.current_dir()
|
||||
assert(type(repo_dir) == "string", "git.fetch_ref: Argument 'repo_dir' is not a string.")
|
||||
assert(type(git_repo_url) == "string", "git.fetch_ref: Argument 'git_repo_url' is not a string.")
|
||||
assert(type(ref_name) == "string", "git.fetch_ref: Argument 'ref_name' is not a string.")
|
||||
assert(type(ref_type) == "string", "git.fetch_ref: Argument 'ref_type' is not a string.")
|
||||
assert(ref_type == "tag" or ref_type == "head", "git.get_remote_refs: Argument 'ref_type' is not \"tag\" or \"head\".")
|
||||
repo_dir = sys.abs_path(repo_dir)
|
||||
|
||||
local refstring = "refs/" .. ref_type .. "s/" .. ref_name
|
||||
|
||||
local suppress_fetch_progress = not cfg.debug
|
||||
local ok, repo_or_err = pcall(git.repo.open, repo_dir)
|
||||
if not ok then return nil, "Error when opening the git repository '" .. repo_dir .. "': " .. repo_or_err end
|
||||
|
||||
local ok, pack_or_err, sha = pcall(git.protocol.fetch, git_repo_url, repo_or_err, refstring, suppress_fetch_progress)
|
||||
if not ok then return nil, "Error when fetching ref '" .. refstring .. "' from git repository '" .. git_repo_url .. "': " .. pack_or_err end
|
||||
|
||||
repo_or_err:close()
|
||||
pack_or_err:close()
|
||||
|
||||
return sha
|
||||
end
|
||||
|
||||
-- Fetch given 'tag_name' from the remote 'git_repo_url' to the local repository
|
||||
-- 'repo_dir' and save it as a tag with the same 'tag_name'.
|
||||
function fetch_tag(repo_dir, git_repo_url, tag_name)
|
||||
return fetch_ref(repo_dir, git_repo_url, tag_name, "tag")
|
||||
end
|
||||
|
||||
-- Fetch given 'branch_name' from the remote 'git_repo_url' to the local repository
|
||||
-- 'repo_dir' and save it as a branch with the same 'branch_name'.
|
||||
function fetch_branch(repo_dir, git_repo_url, branch_name)
|
||||
return fetch_ref(repo_dir, git_repo_url, branch_name, "head")
|
||||
end
|
||||
|
||||
-- Create the git repository and return the repo object (which can be used in checkout_sha etc.)
|
||||
-- If the 'dir' exists, it's deleted prior to creating the git repository.
|
||||
function create_repo(dir)
|
||||
assert(type(dir) == "string", "git.create_repo: Argument 'dir' is not a string.")
|
||||
|
||||
if sys.exists(dir) then sys.delete(dir) end
|
||||
|
||||
local ok, repo_or_err = pcall(git.repo.create, dir)
|
||||
if not ok then return nil, "Error when creating the git repository '" .. dir .. "': " .. repo_or_err end
|
||||
|
||||
repo_or_err:close()
|
||||
return true
|
||||
end
|
||||
349
lualibs/dist/init.lua
vendored
Normal file
349
lualibs/dist/init.lua
vendored
Normal file
@@ -0,0 +1,349 @@
|
||||
-- main API of LuaDist
|
||||
|
||||
module ("dist", package.seeall)
|
||||
|
||||
local cfg = require "dist.config"
|
||||
local depends = require "dist.depends"
|
||||
local git = require "dist.git"
|
||||
local sys = require "dist.sys"
|
||||
local package = require "dist.package"
|
||||
local mf = require "dist.manifest"
|
||||
local utils = require "dist.utils"
|
||||
|
||||
-- Return the deployment directory.
|
||||
function get_deploy_dir()
|
||||
return sys.abs_path(cfg.root_dir)
|
||||
end
|
||||
|
||||
-- Return packages deployed in 'deploy_dir' also with their provides.
|
||||
function get_deployed(deploy_dir)
|
||||
deploy_dir = deploy_dir or cfg.root_dir
|
||||
assert(type(deploy_dir) == "string", "dist.get_deployed: Argument 'deploy_dir' is not a string.")
|
||||
deploy_dir = sys.abs_path(deploy_dir)
|
||||
|
||||
local deployed = depends.get_installed(deploy_dir)
|
||||
local provided = {}
|
||||
|
||||
for _, pkg in pairs(deployed) do
|
||||
for _, provided_pkg in pairs(depends.get_provides(pkg)) do
|
||||
provided_pkg.provided_by = pkg.name .. "-" .. pkg.version
|
||||
table.insert(provided, provided_pkg)
|
||||
end
|
||||
end
|
||||
|
||||
for _, provided_pkg in pairs(provided) do
|
||||
table.insert(deployed, provided_pkg)
|
||||
end
|
||||
|
||||
deployed = depends.sort_by_names(deployed)
|
||||
return deployed
|
||||
end
|
||||
|
||||
-- Download new 'manifest_file' from repository and returns it.
|
||||
-- Return nil and error message on error.
|
||||
function update_manifest(deploy_dir)
|
||||
deploy_dir = deploy_dir or cfg.root_dir
|
||||
assert(type(deploy_dir) == "string", "dist.update_manifest: Argument 'deploy_dir' is not a string.")
|
||||
deploy_dir = sys.abs_path(deploy_dir)
|
||||
|
||||
-- TODO: use 'deploy_dir' argument in manifest functions
|
||||
|
||||
-- retrieve the new manifest (forcing no cache use)
|
||||
local manifest, err = mf.get_manifest(nil, true)
|
||||
|
||||
if manifest then
|
||||
return manifest
|
||||
else
|
||||
return nil, err
|
||||
end
|
||||
end
|
||||
|
||||
-- Install 'package_names' to 'deploy_dir', using optional CMake 'variables'.
|
||||
function install(package_names, deploy_dir, variables)
|
||||
if not package_names then return true end
|
||||
deploy_dir = deploy_dir or cfg.root_dir
|
||||
if type(package_names) == "string" then package_names = {package_names} end
|
||||
|
||||
assert(type(package_names) == "table", "dist.install: Argument 'package_names' is not a table or string.")
|
||||
assert(type(deploy_dir) == "string", "dist.install: Argument 'deploy_dir' is not a string.")
|
||||
deploy_dir = sys.abs_path(deploy_dir)
|
||||
|
||||
-- find installed packages
|
||||
local installed = depends.get_installed(deploy_dir)
|
||||
|
||||
-- get manifest
|
||||
local manifest, err = mf.get_manifest()
|
||||
if not manifest then return nil, "Error getting manifest: " .. err end
|
||||
|
||||
-- get dependency manifest
|
||||
-- TODO: Is it good that dep_manifest is deploy_dir-specific?
|
||||
-- Probably it'd be better not to be specific, but then there're
|
||||
-- problems with 'provides'. E.g. What to do if there's a module
|
||||
-- installed, that is provided by two different modules in two deploy_dirs?
|
||||
local dep_manifest_file = sys.abs_path(sys.make_path(deploy_dir, cfg.dep_cache_file))
|
||||
local dep_manifest, status = {}
|
||||
if sys.exists(dep_manifest_file) and not utils.cache_timeout_expired(cfg.cache_timeout, dep_manifest_file) then
|
||||
status, dep_manifest = mf.load_manifest(dep_manifest_file)
|
||||
if not dep_manifest then return nil, status end
|
||||
end
|
||||
|
||||
-- resolve dependencies
|
||||
local dependencies, dep_manifest_or_err = depends.get_depends(package_names, installed, manifest, dep_manifest, deploy_dir, false, false)
|
||||
if not dependencies then return nil, dep_manifest_or_err end
|
||||
if #dependencies == 0 then return nil, "No packages to install." end
|
||||
|
||||
-- save updated dependency manifest
|
||||
local ok, err = sys.make_dir(sys.parent_dir(dep_manifest_file))
|
||||
if not ok then return nil, err end
|
||||
ok, err = mf.save_manifest(dep_manifest_or_err, dep_manifest_file)
|
||||
if not ok then return nil, err end
|
||||
|
||||
-- fetch the packages from repository
|
||||
local fetched_pkgs = {}
|
||||
for _, pkg in pairs(dependencies) do
|
||||
local fetched_pkg, err = package.fetch_pkg(pkg, sys.make_path(deploy_dir, cfg.temp_dir))
|
||||
if not fetched_pkg then return nil, err end
|
||||
table.insert(fetched_pkgs, fetched_pkg)
|
||||
end
|
||||
|
||||
-- install fetched packages
|
||||
for _, pkg in pairs(fetched_pkgs) do
|
||||
local ok, err = package.install_pkg(pkg.download_dir, deploy_dir, variables, pkg.preserve_pkg_dir)
|
||||
if not ok then return nil, err end
|
||||
end
|
||||
|
||||
return true
|
||||
end
|
||||
|
||||
-- Manually deploy packages from 'package_dirs' to 'deploy_dir', using optional
|
||||
-- CMake 'variables'. The 'package_dirs' are preserved (will not be deleted).
|
||||
function make(deploy_dir, package_dirs, variables)
|
||||
deploy_dir = deploy_dir or cfg.root_dir
|
||||
package_dirs = package_dirs or {}
|
||||
|
||||
assert(type(deploy_dir) == "string", "dist.make: Argument 'deploy_dir' is not a string.")
|
||||
assert(type(package_dirs) == "table", "dist.make: Argument 'package_dirs' is not a table.")
|
||||
deploy_dir = sys.abs_path(deploy_dir)
|
||||
|
||||
for _, dir in pairs(package_dirs) do
|
||||
local ok, err = package.install_pkg(sys.abs_path(dir), deploy_dir, variables, true)
|
||||
if not ok then return nil, err end
|
||||
end
|
||||
return true
|
||||
end
|
||||
|
||||
-- Remove 'package_names' from 'deploy_dir' and return the number of removed
|
||||
-- packages.
|
||||
function remove(package_names, deploy_dir)
|
||||
deploy_dir = deploy_dir or cfg.root_dir
|
||||
if type(package_names) == "string" then package_names = {package_names} end
|
||||
|
||||
assert(type(package_names) == "table", "dist.remove: Argument 'package_names' is not a string or table.")
|
||||
assert(type(deploy_dir) == "string", "dist.remove: Argument 'deploy_dir' is not a string.")
|
||||
deploy_dir = sys.abs_path(deploy_dir)
|
||||
|
||||
local pkgs_to_remove = {}
|
||||
local installed = depends.get_installed(deploy_dir)
|
||||
|
||||
-- find packages to remove
|
||||
if #package_names == 0 then
|
||||
pkgs_to_remove = installed
|
||||
else
|
||||
pkgs_to_remove = depends.find_packages(package_names, installed)
|
||||
end
|
||||
|
||||
-- remove them
|
||||
for _, pkg in pairs(pkgs_to_remove) do
|
||||
local pkg_distinfo_dir = sys.make_path(cfg.distinfos_dir, pkg.name .. "-" .. pkg.version)
|
||||
local ok, err = package.remove_pkg(pkg_distinfo_dir, deploy_dir)
|
||||
if not ok then return nil, err end
|
||||
end
|
||||
|
||||
return #pkgs_to_remove
|
||||
end
|
||||
|
||||
-- Download 'pkg_names' to 'fetch_dir' and return the table of their directories.
|
||||
function fetch(pkg_names, fetch_dir)
|
||||
fetch_dir = fetch_dir or sys.current_dir()
|
||||
assert(type(pkg_names) == "table", "dist.fetch: Argument 'pkg_names' is not a string or table.")
|
||||
assert(type(fetch_dir) == "string", "dist.fetch: Argument 'fetch_dir' is not a string.")
|
||||
fetch_dir = sys.abs_path(fetch_dir)
|
||||
|
||||
local manifest = mf.get_manifest()
|
||||
|
||||
local pkgs_to_fetch = {}
|
||||
for _, pkg_name in pairs(pkg_names) do
|
||||
|
||||
-- retrieve available versions
|
||||
local versions, err = package.retrieve_versions(pkg_name, manifest)
|
||||
if not versions then return nil, err end
|
||||
for _, version in pairs(versions) do
|
||||
table.insert(manifest, version)
|
||||
end
|
||||
|
||||
local packages = depends.find_packages(pkg_name, manifest)
|
||||
if #packages == 0 then return nil, "No packages found for '" .. pkg_name .. "'." end
|
||||
|
||||
packages = depends.sort_by_versions(packages)
|
||||
table.insert(pkgs_to_fetch, packages[1])
|
||||
end
|
||||
|
||||
local fetched_dirs = {}
|
||||
for _, pkg in pairs(pkgs_to_fetch) do
|
||||
local fetched_pkg, err = package.fetch_pkg(pkg, fetch_dir)
|
||||
if not fetched_pkg then return nil, err end
|
||||
table.insert(fetched_dirs, fetched_pkg.download_dir)
|
||||
end
|
||||
|
||||
return fetched_dirs
|
||||
end
|
||||
|
||||
-- Upload binary version of given modules installed in the specified
|
||||
-- 'deploy_dir' to the repository specified by provided base url.
|
||||
-- Return the number of uploaded packages.
|
||||
--
|
||||
-- Organization of uploaded modules and their repositories is subject
|
||||
-- to the following conventions:
|
||||
-- - destination repository is: 'DEST_GIT_BASE_URL/MODULE_NAME'
|
||||
-- - module will be uploaded to the branch: 'ARCH-TYPE' according
|
||||
-- to the arch and type of the user's machine
|
||||
-- - the module will be tagged as: 'VERSION-ARCH-TYPE' (if the tag already
|
||||
-- exists, it will be overwritten)
|
||||
--
|
||||
-- E.g. assume that the module 'lua-5.1.4' is installed on the 32bit Linux
|
||||
-- system (Linux-i686). When this function is called with the module name
|
||||
-- 'lua' and base url 'git@github.com:LuaDist', then the binary version
|
||||
-- of the module 'lua', that is installed on the machine, will be uploaded
|
||||
-- to the branch 'Linux-i686' of the repository 'git@github.com:LuaDist/lua.git'
|
||||
-- and tagged as '5.1.4-Linux-i686'.
|
||||
function upload_modules(deploy_dir, module_names, dest_git_base_url)
|
||||
deploy_dir = deploy_dir or cfg.root_dir
|
||||
if type(module_names) == "string" then module_names = {module_names} end
|
||||
assert(type(deploy_dir) == "string", "dist.upload_module: Argument 'deploy_dir' is not a string.")
|
||||
assert(type(module_names) == "table", "dist.upload_module: Argument 'module_name' is not a string or table.")
|
||||
assert(type(dest_git_base_url) == "string", "dist.upload_module: Argument 'dest_git_base_url' is not a string.")
|
||||
deploy_dir = sys.abs_path(deploy_dir)
|
||||
|
||||
local modules_to_upload = {}
|
||||
local installed = depends.get_installed(deploy_dir)
|
||||
|
||||
-- find modules to upload
|
||||
if #module_names == 0 then
|
||||
modules_to_upload = installed
|
||||
else
|
||||
modules_to_upload = depends.find_packages(module_names, installed)
|
||||
end
|
||||
|
||||
for _, installed_module in pairs(modules_to_upload) do
|
||||
|
||||
-- set names
|
||||
local branch_name = cfg.arch .. "-" .. cfg.type
|
||||
local tag_name = installed_module.version .. "-" .. branch_name
|
||||
local full_name = installed_module.name .. "-" .. tag_name
|
||||
local tmp_dir = sys.make_path(deploy_dir, cfg.temp_dir, full_name .. "-to-upload")
|
||||
local dest_git_url = dest_git_base_url .. "/" .. installed_module.name .. ".git"
|
||||
local distinfo_file = sys.make_path(deploy_dir, cfg.distinfos_dir, installed_module.name .. "-" .. installed_module.version, "dist.info")
|
||||
|
||||
-- create temporary directory (delete previous if already exists)
|
||||
if sys.exists(tmp_dir) then sys.delete(tmp_dir) end
|
||||
local ok, err = sys.make_dir(tmp_dir)
|
||||
if not ok then return nil, err end
|
||||
|
||||
-- copy the module files for all enabled components
|
||||
for _, component in ipairs(cfg.components) do
|
||||
if installed_module.files[component] then
|
||||
for _, file in ipairs(installed_module.files[component]) do
|
||||
local file_path = sys.make_path(deploy_dir, file)
|
||||
local dest_dir = sys.parent_dir(sys.make_path(tmp_dir, file))
|
||||
if sys.is_file(file_path) then
|
||||
sys.make_dir(dest_dir)
|
||||
sys.copy(file_path, dest_dir)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- add module's dist.info file
|
||||
sys.copy(distinfo_file, tmp_dir)
|
||||
|
||||
-- create git repo
|
||||
ok, err = git.init(tmp_dir)
|
||||
if not ok then return nil, "Error initializing empty git repository in '" .. tmp_dir .. "': " .. err end
|
||||
|
||||
-- add all files
|
||||
ok, err = git.add_all(tmp_dir)
|
||||
if not ok then return nil, "Error adding all files to the git index in '" .. tmp_dir .. "': " .. err end
|
||||
|
||||
-- create commit
|
||||
ok, err = git.commit("[luadist-git] add " .. full_name .. " [ci skip]", tmp_dir)
|
||||
if not ok then return nil, "Error commiting changes in '" .. tmp_dir .. "': " .. err end
|
||||
|
||||
-- rename branch
|
||||
ok, err = git.rename_branch("master", branch_name, tmp_dir)
|
||||
if not ok then return nil, "Error renaming branch 'master' to '" .. branch_name .. "' in '" .. tmp_dir .. "': " .. err end
|
||||
|
||||
-- create tag
|
||||
ok, err = git.create_tag(tmp_dir, tag_name)
|
||||
if not ok then return nil, "Error creating tag '" .. tag_name .. "' in '" .. tmp_dir .. "': " .. err end
|
||||
|
||||
print("Uploading " .. full_name .. " to " .. dest_git_url .. "...")
|
||||
|
||||
-- push to the repository
|
||||
ok, err = git.push_ref(tmp_dir, branch_name, dest_git_url, true)
|
||||
if not ok then return nil, "Error when pushing branch '" .. branch_name .. "' and tag '" .. tag_name .. "' to '" .. dest_git_url .. "': " .. err end
|
||||
|
||||
-- delete temporary directory (if not in debug mode)
|
||||
if not cfg.debug then sys.delete(tmp_dir) end
|
||||
end
|
||||
|
||||
return #modules_to_upload
|
||||
end
|
||||
|
||||
-- Returns table with information about module's dependencies, using the cache.
|
||||
function dependency_info(module, deploy_dir)
|
||||
cache_file = cache_file or sys.abs_path(sys.make_path(cfg.root_dir, cfg.dep_cache_file))
|
||||
assert(type(module) == "string", "dist.dependency_info: Argument 'module' is not a string.")
|
||||
assert(type(deploy_dir) == "string", "dist.dependency_info: Argument 'deploy_dir' is not a string.")
|
||||
|
||||
-- get manifest
|
||||
local manifest, err = mf.get_manifest()
|
||||
if not manifest then return nil, "Error getting manifest: " .. err end
|
||||
|
||||
-- get dependency manifest
|
||||
-- TODO: Is it good that dep_manifest is deploy_dir-specific?
|
||||
-- Probably it'd be better not to be specific, but then there're
|
||||
-- problems with 'provides'. E.g. What to do if there's a module
|
||||
-- installed, that is provided by two different modules in two deploy_dirs?
|
||||
local dep_manifest_file = sys.abs_path(sys.make_path(deploy_dir, cfg.dep_cache_file))
|
||||
local dep_manifest, status = {}
|
||||
if sys.exists(dep_manifest_file) and cfg.cache and not utils.cache_timeout_expired(cfg.cache_timeout, dep_manifest_file) then
|
||||
status, dep_manifest = mf.load_manifest(dep_manifest_file)
|
||||
if not dep_manifest then return nil, status end
|
||||
end
|
||||
|
||||
-- force getting the dependency information
|
||||
local installed = {}
|
||||
|
||||
-- resolve dependencies
|
||||
local dependencies, dep_manifest_or_err = depends.get_depends(module, installed, manifest, dep_manifest, deploy_dir, false, true and not cfg.debug)
|
||||
if not dependencies then return nil, dep_manifest_or_err end
|
||||
|
||||
-- save updated dependency manifest
|
||||
local ok, err = sys.make_dir(sys.parent_dir(dep_manifest_file))
|
||||
if not ok then return nil, err end
|
||||
ok, err = mf.save_manifest(dep_manifest_or_err, dep_manifest_file)
|
||||
if not ok then return nil, err end
|
||||
|
||||
-- collect just relevant dependencies from dependency manifest
|
||||
local relevant_deps = {}
|
||||
for _, dep in pairs(dependencies) do
|
||||
local name_ver = dep.name .. "-" .. (dep.was_scm_version and "scm" or dep.version)
|
||||
if dep_manifest_or_err[name_ver] then
|
||||
table.insert(relevant_deps, dep_manifest_or_err[name_ver])
|
||||
else
|
||||
return nil, "Error: dependency information for '" .. name_ver .. "' not found in dependency manifest."
|
||||
end
|
||||
end
|
||||
|
||||
return relevant_deps
|
||||
end
|
||||
64
lualibs/dist/logger.lua
vendored
Normal file
64
lualibs/dist/logger.lua
vendored
Normal file
@@ -0,0 +1,64 @@
|
||||
-- Simple logger for LuaDist.
|
||||
|
||||
module ("dist.logger", package.seeall)
|
||||
|
||||
local cfg = require "dist.config"
|
||||
local sys = require "dist.sys"
|
||||
|
||||
-- Open 'log_file' and return a log, or nil and error msg on error.
|
||||
local function get_log(log_file)
|
||||
log_file = log_file or cfg.log_file
|
||||
assert(type(log_file) == "string", "log.get_log: Argument 'log_file' is not a string.")
|
||||
log_file = sys.abs_path(log_file)
|
||||
|
||||
sys.make_dir(sys.parent_dir(log_file))
|
||||
local log, err = io.open(log_file, "a")
|
||||
if not log then
|
||||
return nil, "Error: can't open a logfile '" .. log_file .. "': " .. err
|
||||
else
|
||||
return log
|
||||
end
|
||||
end
|
||||
|
||||
-- Set the default log.
|
||||
local log_file = get_log(cfg.log_file)
|
||||
|
||||
-- Log levels used.
|
||||
local log_levels = {
|
||||
DEBUG = 0, -- Fine-grained informational events that are most useful to debug an application.
|
||||
INFO = 1, -- Informational messages that highlight the progress of the application at coarse-grained level.
|
||||
WARN = 2, -- Potentially harmful situations.
|
||||
ERROR = 3, -- Error events that might still allow the application to continue running.
|
||||
FATAL = 4, -- Very severe error events that would presumably lead the application to abort.
|
||||
}
|
||||
|
||||
-- Write 'message' with 'level' to 'log'.
|
||||
local function write(level, ...)
|
||||
assert(type(level) == "string", "log.write: Argument 'level' is not a string.")
|
||||
assert(#arg > 0, "log.write: No message arguments provided.")
|
||||
assert(type(log_levels[level]) == "number", "log.write: Unknown log level used: '" .. level .. "'.")
|
||||
|
||||
level = level:upper()
|
||||
local message = table.concat(arg, " ")
|
||||
|
||||
-- Check if writing for this log level is enabled.
|
||||
if cfg.write_log_level and log_levels[level] >= log_levels[cfg.write_log_level] then
|
||||
log_file:write(os.date("%Y-%m-%d %H:%M:%S") .. " [" .. level .. "]\t" .. message .. "\n")
|
||||
log_file:flush()
|
||||
end
|
||||
|
||||
-- Check if printing for this log level is enabled.
|
||||
if cfg.print_log_level and log_levels[level] >= log_levels[cfg.print_log_level] then
|
||||
print(message)
|
||||
end
|
||||
end
|
||||
|
||||
-- Functions with defined log levels for simple use.
|
||||
function debug(...) return write("DEBUG", ...) end
|
||||
function info(...) return write("INFO", ...) end
|
||||
function warn(...) return write("WARN", ...) end
|
||||
function error(...) return write("ERROR", ...) end
|
||||
function fatal(...) return write("FATAL", ...) end
|
||||
|
||||
-- Function with explicitly specified log level.
|
||||
function log(level, ...) return write(level, ...) end
|
||||
248
lualibs/dist/manifest.lua
vendored
Normal file
248
lualibs/dist/manifest.lua
vendored
Normal file
@@ -0,0 +1,248 @@
|
||||
-- Working with manifest and dist.info files
|
||||
|
||||
module ("dist.manifest", package.seeall)
|
||||
|
||||
local cfg = require "dist.config"
|
||||
local git = require "dist.git"
|
||||
local sys = require "dist.sys"
|
||||
local utils = require "dist.utils"
|
||||
|
||||
-- Return the manifest table from 'manifest_file'. If the manifest is in cache,
|
||||
-- then the cached version is used. You can set the cache timeout value in
|
||||
-- 'config.cache_timeout' variable.
|
||||
-- If optional 'force_no_cache' parameter is true, then the cache is not used.
|
||||
function get_manifest(manifest_file, force_no_cache)
|
||||
manifest_file = manifest_file or sys.make_path(cfg.root_dir, cfg.manifest_file)
|
||||
force_no_cache = force_no_cache or false
|
||||
|
||||
assert(type(manifest_file) == "string", "manifest.get_manifest: Argument 'manifest_file' is not a string.")
|
||||
assert(type(force_no_cache) == "boolean", "manifest.get_manifest: Argument 'force_no_cache' is not a boolean.")
|
||||
manifest_file = sys.abs_path(manifest_file)
|
||||
|
||||
-- download new manifest to the cache if not present or cache not used or cache expired
|
||||
if not sys.exists(manifest_file) or force_no_cache or not cfg.cache or utils.cache_timeout_expired(cfg.cache_timeout, manifest_file) then
|
||||
local manifest_dest = sys.parent_dir(manifest_file) or sys.current_dir()
|
||||
local ok, err = download_manifest(manifest_dest, cfg.repos)
|
||||
if not ok then return nil, "Error when downloading manifest: " .. err end
|
||||
end
|
||||
|
||||
-- load manifest from cache
|
||||
local status, ret = load_manifest(manifest_file)
|
||||
if not status then return nil, "Error when loading manifest: " .. ret end
|
||||
|
||||
return ret
|
||||
end
|
||||
|
||||
-- Download manifest from the table of git 'repository_urls' to 'dest_dir' and return true on success
|
||||
-- and nil and error message on error.
|
||||
function download_manifest(dest_dir, repository_urls)
|
||||
dest_dir = dest_dir or sys.make_path(cfg.root_dir, cfg.cache_dir)
|
||||
repository_urls = repository_urls or cfg.repos
|
||||
if type(repository_urls) == "string" then repository_urls = {repository_urls} end
|
||||
|
||||
assert(type(dest_dir) == "string", "manifest.download_manifest: Argument 'dest_dir' is not a string.")
|
||||
assert(type(repository_urls) == "table", "manifest.download_manifest: Argument 'repository_urls' is not a table or string.")
|
||||
dest_dir = sys.abs_path(dest_dir)
|
||||
|
||||
-- define used files and directories
|
||||
local manifest_filename = sys.extract_name(cfg.manifest_file)
|
||||
local manifest_file = sys.make_path(dest_dir, manifest_filename)
|
||||
local temp_dir = sys.make_path(cfg.root_dir, cfg.temp_dir)
|
||||
|
||||
-- ensure that destination directory exists
|
||||
local ok, err = sys.make_dir(dest_dir)
|
||||
if not ok then return nil, err end
|
||||
|
||||
-- retrieve manifests from repositories and collect them into one manifest table
|
||||
local manifest = {}
|
||||
|
||||
if #repository_urls == 0 then return nil, "No repository url specified." end
|
||||
|
||||
print("Downloading repository information...")
|
||||
for k, repo in pairs(repository_urls) do
|
||||
local clone_dir = sys.make_path(temp_dir, "repository_" .. tostring(k))
|
||||
|
||||
-- clone the repo and add its '.gitmodules' file to the manifest table
|
||||
|
||||
ok, err = git.create_repo(clone_dir)
|
||||
|
||||
local sha
|
||||
if ok then sha, err = git.fetch_branch(clone_dir, repo, "master") end
|
||||
if sha then ok, err = git.checkout_sha(sha, clone_dir) end
|
||||
|
||||
if not (ok and sha) then
|
||||
if not cfg.debug then sys.delete(clone_dir) end
|
||||
return nil, "Error when downloading the manifest from repository with url: '" .. repo .. "': " .. err
|
||||
else
|
||||
for _, pkg in pairs(load_gitmodules(sys.make_path(clone_dir, ".gitmodules"))) do
|
||||
table.insert(manifest, pkg)
|
||||
end
|
||||
end
|
||||
if not cfg.debug then sys.delete(clone_dir) end
|
||||
end
|
||||
|
||||
-- save the new manifest table to the file
|
||||
ok, err = save_manifest(manifest, manifest_file)
|
||||
if not ok then return nil, err end
|
||||
|
||||
return true
|
||||
end
|
||||
|
||||
-- A secure loadfile function
|
||||
-- If file code chunk has upvalues, the first upvalue is set to the given
|
||||
-- environement, if that parameter is given, or to the value of the global environment.
|
||||
local function secure_loadfile(file, env)
|
||||
assert(type(file) == "string", "secure_loadfile: Argument 'file' is not a string.")
|
||||
|
||||
-- use the given (or create a new) restricted environment
|
||||
local env = env or {}
|
||||
|
||||
-- load the file and run in a protected call with the restricted env
|
||||
-- setfenv is deprecated in lua 5.2 in favor of giving env in arguments
|
||||
-- the additional loadfile arguments are simply ignored for previous lua versions
|
||||
local f, err = loadfile(file, 'bt', env)
|
||||
if f then
|
||||
if setfenv ~= nil then
|
||||
setfenv(f, env)
|
||||
end
|
||||
return pcall(f)
|
||||
else
|
||||
return nil, err
|
||||
end
|
||||
end
|
||||
|
||||
-- Load and return manifest table from the manifest file.
|
||||
-- If manifest file not present, return nil.
|
||||
function load_manifest(manifest_file)
|
||||
manifest_file = manifest_file or sys.make_path(cfg.root_dir, cfg.manifest_file)
|
||||
|
||||
return secure_loadfile(sys.abs_path(manifest_file))
|
||||
end
|
||||
|
||||
-- Load '.gitmodules' file and returns manifest table.
|
||||
-- If the file is not present, return nil.
|
||||
function load_gitmodules(gitmodules_file)
|
||||
gitmodules_file = gitmodules_file or sys.make_path(cfg.root_dir, cfg.manifest_file)
|
||||
assert(type(gitmodules_file) == "string", "manifest.load_gitmodules: Argument 'gitmodules_file' is not a string.")
|
||||
gitmodules_file = sys.abs_path(gitmodules_file)
|
||||
|
||||
if sys.exists(gitmodules_file) then
|
||||
-- load the .gitmodules file
|
||||
local file, err = io.open(gitmodules_file, "r")
|
||||
if not file then return nil, "Error when opening the .gitmodules file '" .. gitmodules_file .. "':" .. err end
|
||||
|
||||
local mf_text = file:read("*a")
|
||||
file:close()
|
||||
if not mf_text then return nil, "Error when reading the .gitmodules file '" .. gitmodules_file .. "':" .. err end
|
||||
|
||||
manifest = {}
|
||||
for url in mf_text:gmatch("git://%S+/%S+") do
|
||||
pkg = {name = url:match("git://%S+/(%S+)%.git") or url:match("git://%S+/(%S+)"), version = "scm", path = url}
|
||||
table.insert(manifest, pkg)
|
||||
end
|
||||
|
||||
return manifest
|
||||
else
|
||||
return nil, "Error when loading the .gitmodules: file '" .. gitmodules_file .. "' doesn't exist."
|
||||
end
|
||||
end
|
||||
|
||||
-- Save manifest table to the 'file'
|
||||
function save_manifest(manifest_table, file)
|
||||
assert(type(manifest_table) == "table", "manifest.save_distinfo: Argument 'manifest_table' is not a table.")
|
||||
assert(type(file) == "string", "manifest.save_distinfo: Argument 'file' is not a string.")
|
||||
file = sys.abs_path(file)
|
||||
|
||||
-- Print table 'tbl' to io stream 'file'.
|
||||
local function print_table(file, tbl, in_nested_table)
|
||||
for k, v in pairs(tbl) do
|
||||
-- print key
|
||||
if in_nested_table then file:write("\t\t") end
|
||||
if type(k) ~= "number" then
|
||||
file:write("['" .. k .. "']" .. " = ")
|
||||
end
|
||||
-- print value
|
||||
if type(v) == "table" then
|
||||
file:write("{\n")
|
||||
print_table(file, v, true)
|
||||
if in_nested_table then file:write("\t") end
|
||||
file:write("\t}")
|
||||
else
|
||||
if in_nested_table then file:write("\t") end
|
||||
if type(v) == "string" then
|
||||
file:write('[[' .. v .. ']]')
|
||||
else
|
||||
file:write(tostring(v))
|
||||
end
|
||||
end
|
||||
file:write(",\n")
|
||||
end
|
||||
end
|
||||
|
||||
local manifest_file = io.open(file, "w")
|
||||
if not manifest_file then return nil, "Error when saving manifest: cannot open the file '" .. file .. "'." end
|
||||
|
||||
manifest_file:write('return {\n')
|
||||
print_table(manifest_file, manifest_table)
|
||||
manifest_file:write('},\ntrue')
|
||||
manifest_file:close()
|
||||
|
||||
return true
|
||||
end
|
||||
|
||||
-- Load and return package info table from the distinfo_file file.
|
||||
-- If file not present, return nil.
|
||||
function load_distinfo(distinfo_file)
|
||||
assert(type(distinfo_file) == "string", "manifest.load_distinfo: Argument 'distinfo_file' is not a string.")
|
||||
distinfo_file = sys.abs_path(distinfo_file)
|
||||
|
||||
-- load the distinfo file
|
||||
local distinfo_env = {}
|
||||
local status, ret = secure_loadfile(distinfo_file, distinfo_env)
|
||||
if not status then return nil, "Error when loading package info: " .. ret end
|
||||
|
||||
return distinfo_env
|
||||
end
|
||||
|
||||
-- Save distinfo table to the 'file'
|
||||
function save_distinfo(distinfo_table, file)
|
||||
assert(type(distinfo_table) == "table", "manifest.save_distinfo: Argument 'distinfo_table' is not a table.")
|
||||
assert(type(file) == "string", "manifest.save_distinfo: Argument 'file' is not a string.")
|
||||
file = sys.abs_path(file)
|
||||
|
||||
-- Print table 'tbl' to io stream 'file'.
|
||||
local function print_table(file, tbl, in_nested_table)
|
||||
for k, v in pairs(tbl) do
|
||||
-- print key
|
||||
if type(k) ~= "number" then
|
||||
file:write(k .. " = ")
|
||||
end
|
||||
-- print value
|
||||
if type(v) == "table" then
|
||||
file:write("{\n")
|
||||
print_table(file, v, true)
|
||||
file:write("}\n")
|
||||
elseif type(v) == "string" then
|
||||
if in_nested_table then
|
||||
file:write('[[' .. v .. ']]')
|
||||
else
|
||||
file:write('"' .. v .. '"')
|
||||
end
|
||||
else
|
||||
file:write(v)
|
||||
end
|
||||
if in_nested_table then
|
||||
file:write(",")
|
||||
end
|
||||
file:write("\n")
|
||||
end
|
||||
end
|
||||
|
||||
local distinfo_file = io.open(file, "w")
|
||||
if not distinfo_file then return nil, "Error when saving dist-info table: cannot open the file '" .. file .. "'." end
|
||||
|
||||
print_table(distinfo_file, distinfo_table)
|
||||
distinfo_file:close()
|
||||
|
||||
return true
|
||||
end
|
||||
596
lualibs/dist/package.lua
vendored
Normal file
596
lualibs/dist/package.lua
vendored
Normal file
@@ -0,0 +1,596 @@
|
||||
-- Package functions
|
||||
|
||||
module ("dist.package", package.seeall)
|
||||
|
||||
local cfg = require "dist.config"
|
||||
local git = require "dist.git"
|
||||
local sys = require "dist.sys"
|
||||
local mf = require "dist.manifest"
|
||||
local utils = require "dist.utils"
|
||||
local depends = require "dist.depends"
|
||||
|
||||
-- Return whether the package in given 'pkg_dir' is of a source type.
|
||||
function is_source_type(pkg_dir)
|
||||
assert(type(pkg_dir) == "string", "package.is_source_type: Argument 'pkg_dir' is not a string.")
|
||||
pkg_dir = sys.abs_path(pkg_dir)
|
||||
return utils.to_boolean(sys.exists(sys.make_path(pkg_dir, "CMakeLists.txt")))
|
||||
end
|
||||
|
||||
-- Ensure proper arch and type for the given source 'dist_info' table and return it.
|
||||
-- WARNING: this function should be used only for 'dist_info' tables of modules that are of a source type!
|
||||
function ensure_source_arch_and_type(dist_info)
|
||||
assert(type(dist_info) == "table", "package.ensure_source_arch_and_type: Argument 'dist_info' is not a table.")
|
||||
dist_info.arch = dist_info.arch or "Universal"
|
||||
dist_info.type = dist_info.type or "source"
|
||||
return dist_info
|
||||
end
|
||||
|
||||
-- Remove package from 'pkg_distinfo_dir' of 'deploy_dir'.
|
||||
function remove_pkg(pkg_distinfo_dir, deploy_dir)
|
||||
deploy_dir = deploy_dir or cfg.root_dir
|
||||
assert(type(pkg_distinfo_dir) == "string", "package.remove_pkg: Argument 'pkg_distinfo_dir' is not a string.")
|
||||
assert(type(deploy_dir) == "string", "package.remove_pkg: Argument 'deploy_dir' is not a string.")
|
||||
deploy_dir = sys.abs_path(deploy_dir)
|
||||
|
||||
local abs_pkg_distinfo_dir = sys.make_path(deploy_dir, pkg_distinfo_dir)
|
||||
|
||||
-- check for 'dist.info'
|
||||
local info, err = mf.load_distinfo(sys.make_path(abs_pkg_distinfo_dir, "dist.info"))
|
||||
if not info then return nil, "Error removing package from '" .. pkg_distinfo_dir .. "' - it doesn't contain valid 'dist.info' file." end
|
||||
if not info.files then return nil, "File '" .. sys.make_path(pkg_distinfo_dir, "dist.info") .."' doesn't contain list of installed files." end
|
||||
|
||||
-- remove files installed as components of this package
|
||||
for _, component in ipairs(cfg.components) do
|
||||
if info.files[component] then
|
||||
for i = #info.files[component], 1, -1 do
|
||||
local f = info.files[component][i]
|
||||
f = sys.make_path(deploy_dir,f)
|
||||
if sys.is_file(f) then
|
||||
sys.delete(f)
|
||||
elseif sys.is_dir(f) then
|
||||
local dir_files, err = sys.get_file_list(f)
|
||||
if not dir_files then return nil, "Error removing package in '" .. abs_pkg_distinfo_dir .. "': " .. err end
|
||||
if #dir_files == 0 then sys.delete(f) end
|
||||
end
|
||||
-- delete also all parent directories if empty
|
||||
local parents = sys.parents_up_to(f, deploy_dir)
|
||||
for _, parent in ipairs(parents) do
|
||||
if sys.is_dir(parent) then
|
||||
local dir_files, err = sys.get_file_list(parent)
|
||||
if not dir_files then return nil, "Error removing package in '" .. abs_pkg_distinfo_dir .. "': " .. err end
|
||||
if #dir_files == 0 then
|
||||
sys.delete(parent)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- remove removed components also from 'dist.info'
|
||||
for _, component in ipairs(cfg.components) do
|
||||
info.files[component] = nil
|
||||
end
|
||||
|
||||
-- delete the package information from deploy_dir
|
||||
local ok = sys.delete(abs_pkg_distinfo_dir)
|
||||
if not ok then return nil, "Error removing package in '" .. abs_pkg_distinfo_dir .. "'." end
|
||||
|
||||
-- if the package was not completely removed (e.g. some components remain),
|
||||
-- save the new version of its 'dist.info'
|
||||
local comp_num = 0
|
||||
for _, _ in pairs(info.files) do comp_num = comp_num + 1 end
|
||||
if comp_num ~= 0 then
|
||||
sys.make_dir(abs_pkg_distinfo_dir)
|
||||
local ok, err = mf.save_distinfo(info, sys.make_path(abs_pkg_distinfo_dir, "dist.info"))
|
||||
if not ok then return nil, "Error resaving the 'dist.info': " .. err end
|
||||
end
|
||||
|
||||
return ok
|
||||
end
|
||||
|
||||
-- Install package from 'pkg_dir' to 'deploy_dir', using optional CMake 'variables'.
|
||||
-- Optional 'preserve_pkg_dir' argument specified whether to preserve the 'pkg_dir'.
|
||||
function install_pkg(pkg_dir, deploy_dir, variables, preserve_pkg_dir)
|
||||
deploy_dir = deploy_dir or cfg.root_dir
|
||||
variables = variables or {}
|
||||
preserve_pkg_dir = preserve_pkg_dir or false
|
||||
|
||||
assert(type(pkg_dir) == "string", "package.install_pkg: Argument 'pkg_dir' is not a string.")
|
||||
assert(type(deploy_dir) == "string", "package.install_pkg: Argument 'deploy_dir' is not a string.")
|
||||
assert(type(variables) == "table", "package.install_pkg: Argument 'variables' is not a table.")
|
||||
assert(type(preserve_pkg_dir) == "boolean", "package.install_pkg: Argument 'preserve_pkg_dir' is not a boolean.")
|
||||
|
||||
pkg_dir = sys.abs_path(pkg_dir)
|
||||
deploy_dir = sys.abs_path(deploy_dir)
|
||||
|
||||
-- check for dist.info
|
||||
local info, err = mf.load_distinfo(sys.make_path(pkg_dir, "dist.info"))
|
||||
if not info then return nil, "Error installing: the directory '" .. pkg_dir .. "' doesn't exist or doesn't contain valid 'dist.info' file." end
|
||||
|
||||
-- check if the package is source
|
||||
if is_source_type(pkg_dir) then info = ensure_source_arch_and_type(info) end
|
||||
|
||||
-- check package's architecture
|
||||
if not (info.arch == "Universal" or info.arch == cfg.arch) then
|
||||
return nil, "Error installing '" .. info.name .. "-" .. info.version .. "': architecture '" .. info.arch .. "' is not suitable for this machine."
|
||||
end
|
||||
|
||||
-- check package's type
|
||||
if not (info.type == "all" or info.type == "source" or info.type == cfg.type) then
|
||||
return nil, "Error installing '" .. info.name .. "-" .. info.version .. "': architecture type '" .. info.type .. "' is not suitable for this machine."
|
||||
end
|
||||
|
||||
local ok, err
|
||||
|
||||
-- if package is of binary type, just deploy it
|
||||
if info.type ~= "source" then
|
||||
ok, err = deploy_binary_pkg(pkg_dir, deploy_dir)
|
||||
|
||||
-- else build and then deploy
|
||||
else
|
||||
|
||||
-- check if we have cmake
|
||||
ok = utils.system_dependency_available("cmake", "cmake --version")
|
||||
if not ok then return nil, "Error when installing: Command 'cmake' not available on the system." end
|
||||
|
||||
-- set cmake variables
|
||||
local cmake_variables = {}
|
||||
|
||||
-- set variables from config file
|
||||
for k, v in pairs(cfg.variables) do
|
||||
cmake_variables[k] = v
|
||||
end
|
||||
|
||||
-- set variables specified as argument
|
||||
for k, v in pairs(variables) do
|
||||
cmake_variables[k] = v
|
||||
end
|
||||
|
||||
cmake_variables.CMAKE_INCLUDE_PATH = table.concat({cmake_variables.CMAKE_INCLUDE_PATH or "", sys.make_path(deploy_dir, "include")}, ";")
|
||||
cmake_variables.CMAKE_LIBRARY_PATH = table.concat({cmake_variables.CMAKE_LIBRARY_PATH or "", sys.make_path(deploy_dir, "lib"), sys.make_path(deploy_dir, "bin")}, ";")
|
||||
cmake_variables.CMAKE_PROGRAM_PATH = table.concat({cmake_variables.CMAKE_PROGRAM_PATH or "", sys.make_path(deploy_dir, "bin")}, ";")
|
||||
|
||||
-- build the package and deploy it
|
||||
ok, err = build_pkg(pkg_dir, deploy_dir, cmake_variables)
|
||||
if not ok then return nil, err end
|
||||
|
||||
end
|
||||
|
||||
-- delete directory of fetched package
|
||||
if not (cfg.debug or preserve_pkg_dir) then sys.delete(pkg_dir) end
|
||||
|
||||
return ok, err
|
||||
end
|
||||
|
||||
-- Build and deploy package from 'src_dir' to 'deploy_dir' using 'variables'.
|
||||
-- Return directory to which the package was built or nil on error.
|
||||
-- 'variables' is table of optional CMake variables.
|
||||
function build_pkg(src_dir, deploy_dir, variables)
|
||||
deploy_dir = deploy_dir or cfg.root_dir
|
||||
variables = variables or {}
|
||||
|
||||
assert(type(src_dir) == "string", "package.build_pkg: Argument 'src_dir' is not a string.")
|
||||
assert(type(deploy_dir) == "string", "package.build_pkg: Argument 'deploy_dir' is not a string.")
|
||||
assert(type(variables) == "table", "package.build_pkg: Argument 'variables' is not a table.")
|
||||
|
||||
src_dir = sys.abs_path(src_dir)
|
||||
deploy_dir = sys.abs_path(deploy_dir)
|
||||
|
||||
-- check for dist.info
|
||||
local info, err = mf.load_distinfo(sys.make_path(src_dir, "dist.info"))
|
||||
if not info then return nil, "Error building package from '" .. src_dir .. "': it doesn't contain valid 'dist.info' file." end
|
||||
local pkg_name = info.name .. "-" .. info.version
|
||||
|
||||
-- set machine information
|
||||
info.arch = cfg.arch
|
||||
info.type = cfg.type
|
||||
|
||||
-- create CMake build dir
|
||||
local cmake_build_dir = sys.abs_path(sys.make_path(deploy_dir, cfg.temp_dir, pkg_name .. "-CMake-build"))
|
||||
sys.make_dir(cmake_build_dir)
|
||||
|
||||
-- create cmake cache
|
||||
variables["CMAKE_INSTALL_PREFIX"] = deploy_dir
|
||||
local cache_file = io.open(sys.make_path(cmake_build_dir, "cache.cmake"), "w")
|
||||
if not cache_file then return nil, "Error creating CMake cache file in '" .. cmake_build_dir .. "'" end
|
||||
|
||||
-- Fill in cache variables
|
||||
for k,v in pairs(variables) do
|
||||
cache_file:write("SET(" .. k .. " " .. sys.quote(v):gsub("\\+", "/") .. " CACHE STRING \"\" FORCE)\n")
|
||||
end
|
||||
|
||||
-- If user cache file is provided then append it
|
||||
if cfg.cache_file ~= "" then
|
||||
local user_cache = io.open(sys.abs_path(cfg.cache_file), "r")
|
||||
if user_cache then
|
||||
cache_file:write(user_cache:read("*all").."\n")
|
||||
user_cache:close()
|
||||
end
|
||||
end
|
||||
cache_file:close()
|
||||
|
||||
src_dir = sys.abs_path(src_dir)
|
||||
print("Building " .. sys.extract_name(src_dir) .. "...")
|
||||
|
||||
-- set cmake cache command
|
||||
local cache_command = cfg.cache_command
|
||||
if cfg.debug then cache_command = cache_command .. " " .. cfg.cache_debug_options end
|
||||
|
||||
-- set cmake build command
|
||||
local build_command = cfg.build_command
|
||||
if cfg.debug then build_command = build_command .. " " .. cfg.build_debug_options end
|
||||
|
||||
-- set the cmake cache
|
||||
local ok = sys.exec("cd " .. sys.quote(cmake_build_dir) .. " && " .. cache_command .. " " .. sys.quote(src_dir))
|
||||
if not ok then return nil, "Error preloading the CMake cache script '" .. sys.make_path(cmake_build_dir, "cache.cmake") .. "'" end
|
||||
|
||||
-- build with cmake
|
||||
ok = sys.exec("cd " .. sys.quote(cmake_build_dir) .. " && " .. build_command)
|
||||
if not ok then return nil, "Error building with CMake in directory '" .. cmake_build_dir .. "'" end
|
||||
|
||||
-- if this is only simulation, exit sucessfully, skipping the next actions
|
||||
if cfg.simulate then
|
||||
return true, "Simulated build and deployment of package '" .. pkg_name .. "' sucessfull."
|
||||
end
|
||||
|
||||
-- table to collect files installed in the components
|
||||
info.files = {}
|
||||
|
||||
-- install the components
|
||||
for _, component in ipairs(cfg.components) do
|
||||
local strip_option = ""
|
||||
if not cfg.debug and component ~= "Library" then strip_option = cfg.strip_option end
|
||||
|
||||
local ok = sys.exec("cd " .. sys.quote(cmake_build_dir) .. " && " .. cfg.cmake .. " " .. strip_option .. " " ..cfg.install_component_command:gsub("#COMPONENT#", component))
|
||||
|
||||
if not ok then return nil, "Error when installing the component '" .. component .. "' with CMake in directory '" .. cmake_build_dir .. "'" end
|
||||
|
||||
local install_mf = sys.make_path(cmake_build_dir, "install_manifest_" .. component .. ".txt")
|
||||
local mf, err
|
||||
local component_files = {}
|
||||
|
||||
-- collect files installed in this component
|
||||
if sys.exists(install_mf) then
|
||||
mf, err = io.open(install_mf, "r")
|
||||
if not mf then return nil, "Error when opening the CMake installation manifest '" .. install_mf .. "': " .. err end
|
||||
for line in mf:lines() do
|
||||
line = sys.check_separators(line)
|
||||
local file = line:gsub(utils.escape_magic(deploy_dir .. sys.path_separator()), "")
|
||||
table.insert(component_files, file)
|
||||
end
|
||||
mf:close()
|
||||
|
||||
-- add list of component files to the 'dist.info'
|
||||
if #component_files > 0 then info.files[component] = component_files end
|
||||
end
|
||||
end
|
||||
-- if bookmark == 0 then return nil, "Package did not install any files!" end
|
||||
|
||||
-- test with ctest
|
||||
if cfg.test then
|
||||
print("Testing " .. sys.extract_name(src_dir) .. " ...")
|
||||
ok = sys.exec("cd " .. sys.quote(deploy_dir) .. " && " .. cfg.test_command)
|
||||
if not ok then return nil, "Error when testing the module '" .. pkg_name .. "' with CTest." end
|
||||
end
|
||||
|
||||
-- save modified 'dist.info' file
|
||||
local pkg_distinfo_dir = sys.make_path(deploy_dir, cfg.distinfos_dir, pkg_name)
|
||||
sys.make_dir(pkg_distinfo_dir)
|
||||
ok, err = mf.save_distinfo(info, sys.make_path(pkg_distinfo_dir, "dist.info"))
|
||||
if not ok then return nil, err end
|
||||
|
||||
-- clean up
|
||||
if not cfg.debug then sys.delete(cmake_build_dir) end
|
||||
|
||||
return true, "Package '" .. pkg_name .. "' successfully builded and deployed to '" .. deploy_dir .. "'."
|
||||
end
|
||||
|
||||
-- Deploy binary package from 'pkg_dir' to 'deploy_dir' by copying.
|
||||
function deploy_binary_pkg(pkg_dir, deploy_dir)
|
||||
deploy_dir = deploy_dir or cfg.root_dir
|
||||
|
||||
assert(type(pkg_dir) == "string", "package.deploy_binary_pkg: Argument 'pkg_dir' is not a string.")
|
||||
assert(type(deploy_dir) == "string", "package.deploy_binary_pkg: Argument 'deploy_dir' is not a string.")
|
||||
|
||||
pkg_dir = sys.abs_path(pkg_dir)
|
||||
deploy_dir = sys.abs_path(deploy_dir)
|
||||
|
||||
-- check for dist.info
|
||||
local info, err = mf.load_distinfo(sys.make_path(pkg_dir, "dist.info"))
|
||||
if not info then return nil, "Error deploying package from '" .. pkg_dir .. "': it doesn't contain valid 'dist.info' file." end
|
||||
local pkg_name = info.name .. "-" .. info.version
|
||||
|
||||
-- if this is only simulation, exit sucessfully, skipping the next actions
|
||||
if cfg.simulate then
|
||||
return true, "Simulated deployment of package '" .. pkg_name .. "' sucessfull."
|
||||
end
|
||||
|
||||
-- copy all components of the module to the deploy_dir
|
||||
for _, component in ipairs(cfg.components) do
|
||||
if info.files[component] then
|
||||
for _, file in ipairs(info.files[component]) do
|
||||
local dest_dir = sys.make_path(deploy_dir, sys.parent_dir(file))
|
||||
|
||||
local ok, err = sys.make_dir(dest_dir)
|
||||
if not ok then return nil, "Error when deploying package '" .. pkg_name .. "': cannot create directory '" .. dest_dir .. "': " .. err end
|
||||
|
||||
ok, err = sys.copy(sys.make_path(pkg_dir, file), dest_dir)
|
||||
if not ok then return nil, "Error when deploying package '" .. pkg_name .. "': cannot copy file '" .. file .. "' to the directory '" .. dest_dir .. "': " .. err end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- copy dist.info to register the module as installed
|
||||
local pkg_distinfo_dir = sys.make_path(deploy_dir, cfg.distinfos_dir, pkg_name)
|
||||
sys.make_dir(pkg_distinfo_dir)
|
||||
ok, err = mf.save_distinfo(info, sys.make_path(pkg_distinfo_dir, "dist.info"))
|
||||
if not ok then return nil, err end
|
||||
|
||||
return true, "Package '" .. pkg_name .. "' successfully deployed to '" .. deploy_dir .. "'."
|
||||
end
|
||||
|
||||
-- Fetch package (table 'pkg') to download_dir. Return the original 'pkg' table
|
||||
-- with 'pkg.download_dir' containing path to the directory of the
|
||||
-- downloaded package.
|
||||
--
|
||||
-- When optional 'suppress_printing' parameter is set to true, then messages
|
||||
-- for the user won't be printed during run of this function.
|
||||
--
|
||||
-- If the 'pkg' already contains the information about download directory (pkg.download_dir),
|
||||
-- we assume the package was already downloaded there and won't download it again.
|
||||
function fetch_pkg(pkg, download_dir, suppress_printing)
|
||||
download_dir = download_dir or sys.current_dir()
|
||||
suppress_printing = suppress_printing or false
|
||||
assert(type(pkg) == "table", "package.fetch_pkg: Argument 'pkg' is not a table.")
|
||||
assert(type(download_dir) == "string", "package.fetch_pkg: Argument 'download_dir' is not a string.")
|
||||
assert(type(suppress_printing) == "boolean", "package.fetch_pkg: Argument 'suppress_printing' is not a boolean.")
|
||||
assert(type(pkg.name) == "string", "package.fetch_pkg: Argument 'pkg.name' is not a string.")
|
||||
assert(type(pkg.version) == "string", "package.fetch_pkg: Argument 'pkg.version' is not a string.")
|
||||
|
||||
-- if the package is already downloaded don't download it again
|
||||
if pkg.download_dir then return pkg end
|
||||
|
||||
assert(type(pkg.path) == "string", "package.fetch_pkg: Argument 'pkg.path' is not a string.")
|
||||
download_dir = sys.abs_path(download_dir)
|
||||
|
||||
local pkg_full_name = pkg.name .. "-" .. pkg.version
|
||||
local repo_url = pkg.path
|
||||
local clone_dir = sys.abs_path(sys.make_path(download_dir, pkg_full_name))
|
||||
pkg.download_dir = clone_dir
|
||||
|
||||
-- check if download_dir already exists, assuming the package was already downloaded
|
||||
if sys.exists(sys.make_path(clone_dir, "dist.info")) then
|
||||
if cfg.cache and not utils.cache_timeout_expired(cfg.cache_timeout, clone_dir) then
|
||||
if not suppress_printing then print("'" .. pkg_full_name .. "' already in cache, skipping downloading (use '-cache=false' to force download).") end
|
||||
return pkg
|
||||
else
|
||||
sys.delete(sys.make_path(clone_dir))
|
||||
end
|
||||
end
|
||||
|
||||
local bin_tag = pkg.version .. "-" .. cfg.arch .. "-" .. cfg.type
|
||||
local use_binary = false
|
||||
|
||||
if cfg.binary then
|
||||
-- check if binary version of the module for this arch & type available
|
||||
local avail_tags, err = git.get_remote_tags(repo_url)
|
||||
if not avail_tags then return nil, err end
|
||||
|
||||
if utils.contains(avail_tags, bin_tag) then
|
||||
use_binary = true
|
||||
end
|
||||
end
|
||||
|
||||
-- init the git repository
|
||||
local ok, err = git.create_repo(clone_dir)
|
||||
if not ok then return nil, err end
|
||||
|
||||
-- Fetch the desired ref (from the pkg's remote repo) and checkout into it.
|
||||
|
||||
if use_binary then
|
||||
|
||||
if not suppress_printing then print("Getting " .. pkg_full_name .. " (binary)...") end
|
||||
|
||||
-- We fetch the binary tag.
|
||||
local sha
|
||||
if ok then sha, err = git.fetch_tag(clone_dir, repo_url, bin_tag) end
|
||||
if sha then ok, err = git.checkout_sha(sha, clone_dir) end
|
||||
|
||||
elseif cfg.source then
|
||||
|
||||
if not suppress_printing then print("Getting " .. pkg_full_name .. " (source)...") end
|
||||
|
||||
-- If we want the 'scm' version, we fetch the 'master' branch, otherwise
|
||||
-- we fetch the tag, matching the desired package version.
|
||||
if ok and pkg.version ~= "scm" then
|
||||
local sha
|
||||
sha, err = git.fetch_tag(clone_dir, repo_url, pkg.version)
|
||||
if sha then ok, err = git.checkout_sha(sha, clone_dir) end
|
||||
elseif ok then
|
||||
local sha
|
||||
sha, err = git.fetch_branch(clone_dir, repo_url, "master")
|
||||
if sha then ok, err = git.checkout_sha(sha, clone_dir) end
|
||||
end
|
||||
|
||||
else
|
||||
ok = false
|
||||
if cfg.binary then
|
||||
err = "Binary version of module not available and using source modules disabled."
|
||||
else
|
||||
err = "Using both binary and source modules disabled."
|
||||
end
|
||||
end
|
||||
|
||||
if not ok then
|
||||
-- clean up
|
||||
if not cfg.debug then sys.delete(clone_dir) end
|
||||
return nil, "Error fetching package '" .. pkg_full_name .. "' from '" .. pkg.path .. "' to '" .. download_dir .. "': " .. err
|
||||
end
|
||||
|
||||
-- delete '.git' directory
|
||||
if not cfg.debug then sys.delete(sys.make_path(clone_dir, ".git")) end
|
||||
|
||||
return pkg
|
||||
end
|
||||
|
||||
-- Return table with information about available versions of 'package'.
|
||||
--
|
||||
-- When optional 'suppress_printing' parameter is set to true, then messages
|
||||
-- for the user won't be printed during run of this function.
|
||||
function retrieve_versions(package, manifest, suppress_printing)
|
||||
suppress_printing = suppress_printing or false
|
||||
assert(type(package) == "string", "package.retrieve_versions: Argument 'string' is not a string.")
|
||||
assert(type(manifest) == "table", "package.retrieve_versions: Argument 'manifest' is not a table.")
|
||||
assert(type(suppress_printing) == "boolean", "package.retrieve_versions: Argument 'suppress_printing' is not a boolean.")
|
||||
|
||||
-- get package table
|
||||
local pkg_name = depends.split_name_constraint(package)
|
||||
local tmp_packages = depends.find_packages(pkg_name, manifest)
|
||||
|
||||
if #tmp_packages == 0 then
|
||||
return nil, "No suitable candidate for package '" .. package .. "' found."
|
||||
else
|
||||
package = tmp_packages[1]
|
||||
end
|
||||
|
||||
-- if the package's already downloaded, we assume it's desired to install the downloaded version
|
||||
if package.download_dir then
|
||||
local pkg_type = "binary"
|
||||
if is_source_type(package.download_dir) then pkg_type = "source" end
|
||||
if not suppress_printing then print("Using " .. package.name .. "-" .. package.version .. " (" .. pkg_type .. ") provided by " .. package.download_dir) end
|
||||
return {package}
|
||||
end
|
||||
|
||||
if not suppress_printing then print("Finding out available versions of " .. package.name .. "...") end
|
||||
|
||||
-- get available versions
|
||||
local tags, err = git.get_remote_tags(package.path)
|
||||
if not tags then return nil, "Error when retrieving versions of package '" .. package.name .. "': " .. err end
|
||||
|
||||
-- filter out tags of binary packages
|
||||
local versions = utils.filter(tags, function (tag) return tag:match("^[^%-]+%-?[^%-]*$") and true end)
|
||||
|
||||
packages = {}
|
||||
|
||||
-- create package information
|
||||
for _, version in pairs(versions) do
|
||||
pkg = {}
|
||||
pkg.name = package.name
|
||||
pkg.version = version
|
||||
pkg.path = package.path
|
||||
table.insert(packages, pkg)
|
||||
end
|
||||
|
||||
return packages
|
||||
end
|
||||
|
||||
-- Return table with information from package's dist.info and path to downloaded
|
||||
-- package. Optional argument 'deploy_dir' is used just as a temporary
|
||||
-- place to place the downloaded packages into.
|
||||
--
|
||||
-- When optional 'suppress_printing' parameter is set to true, then messages
|
||||
-- for the user won't be printed during the execution of this function.
|
||||
function retrieve_pkg_info(package, deploy_dir, suppress_printing)
|
||||
deploy_dir = deploy_dir or cfg.root_dir
|
||||
assert(type(package) == "table", "package.retrieve_pkg_info: Argument 'package' is not a table.")
|
||||
assert(type(deploy_dir) == "string", "package.retrieve_pkg_info: Argument 'deploy_dir' is not a string.")
|
||||
deploy_dir = sys.abs_path(deploy_dir)
|
||||
|
||||
local tmp_dir = sys.abs_path(sys.make_path(deploy_dir, cfg.temp_dir))
|
||||
|
||||
-- download the package
|
||||
local fetched_pkg, err = fetch_pkg(package, tmp_dir, suppress_printing)
|
||||
if not fetched_pkg then return nil, "Error when retrieving the info about '" .. package.name .. "': " .. err end
|
||||
|
||||
-- load information from 'dist.info'
|
||||
local info, err = mf.load_distinfo(sys.make_path(fetched_pkg.download_dir, "dist.info"))
|
||||
if not info then return nil, err end
|
||||
|
||||
-- add other attributes
|
||||
if package.path then info.path = package.path end
|
||||
if package.was_scm_version then info.was_scm_version = package.was_scm_version end
|
||||
|
||||
-- set default arch/type if not explicitly stated and package is of source type
|
||||
if is_source_type(fetched_pkg.download_dir) then
|
||||
info = ensure_source_arch_and_type(info)
|
||||
elseif not (info.arch and info.type) then
|
||||
return nil, fetched_pkg.download_dir .. ": binary package missing arch or type in 'dist.info'."
|
||||
end
|
||||
|
||||
return info, fetched_pkg.download_dir
|
||||
end
|
||||
|
||||
-- Return manifest, augmented with info about all available versions
|
||||
-- of package 'pkg'. Optional argument 'deploy_dir' is used just as a temporary
|
||||
-- place to place the downloaded packages into.
|
||||
-- Optional argument 'installed' is manifest of all installed packages. When
|
||||
-- specified, info from installed packages won't be downloaded from repo,
|
||||
-- but the dist.info from installed package will be used.
|
||||
function get_versions_info(pkg, manifest, deploy_dir, installed)
|
||||
deploy_dir = deploy_dir or cfg.root_dir
|
||||
assert(type(pkg) == "string", "package.get_versions_info: Argument 'pkg' is not a string.")
|
||||
assert(type(manifest) == "table", "package.get_versions_info: Argument 'manifest' is not a table.")
|
||||
assert(type(deploy_dir) == "string", "package.get_versions_info: Argument 'deploy_dir' is not a string.")
|
||||
deploy_dir = sys.abs_path(deploy_dir)
|
||||
|
||||
-- find all available versions of package
|
||||
local versions, err = retrieve_versions(pkg, manifest)
|
||||
if not versions then return nil, err end
|
||||
|
||||
-- collect info about all retrieved versions
|
||||
local infos = {}
|
||||
for _, version in pairs(versions) do
|
||||
|
||||
local info, path_or_err
|
||||
local installed_version = {}
|
||||
|
||||
-- find out whether this 'version' is installed so we can use it's dist.info
|
||||
if type(installed) == "table" then installed_version = depends.find_packages(version.name .. "-" .. version.version, installed) end
|
||||
|
||||
-- get info
|
||||
if #installed_version > 0 then
|
||||
print("Using dist.info from installed " .. version.name .. "-" .. version.version)
|
||||
info = installed_version[1]
|
||||
info.path = version.path
|
||||
info.from_installed = true -- flag that dist.info of installed package was used
|
||||
else
|
||||
info, path_or_err = retrieve_pkg_info(version, deploy_dir)
|
||||
if not info then return nil, path_or_err end
|
||||
sys.delete(path_or_err)
|
||||
end
|
||||
table.insert(infos, info)
|
||||
end
|
||||
|
||||
-- found and add an implicit 'scm' version
|
||||
local pkg_name = depends.split_name_constraint(pkg)
|
||||
local found = depends.find_packages(pkg_name, manifest)
|
||||
if #found == 0 then return nil, "No suitable candidate for package '" .. pkg .. "' found." end
|
||||
local scm_info, path_or_err = retrieve_pkg_info({name = pkg_name, version = "scm", path = found[1].path})
|
||||
if not scm_info then return nil, path_or_err end
|
||||
sys.delete(path_or_err)
|
||||
scm_info.version = "scm"
|
||||
table.insert(infos, scm_info)
|
||||
|
||||
local tmp_manifest = utils.deepcopy(manifest)
|
||||
|
||||
-- add collected info to the temp. manifest, replacing existing tables
|
||||
for _, info in pairs(infos) do
|
||||
local already_in_manifest = false
|
||||
-- find if this version is already in manifest
|
||||
for idx, pkg in ipairs(tmp_manifest) do
|
||||
-- if yes, replace it
|
||||
if pkg.name == info.name and pkg.version == info.version then
|
||||
tmp_manifest[idx] = info
|
||||
already_in_manifest = true
|
||||
break
|
||||
end
|
||||
end
|
||||
-- if not, just normally add to the manifest
|
||||
if not already_in_manifest then
|
||||
table.insert(tmp_manifest, info)
|
||||
end
|
||||
end
|
||||
|
||||
return tmp_manifest
|
||||
end
|
||||
386
lualibs/dist/sys.lua
vendored
Normal file
386
lualibs/dist/sys.lua
vendored
Normal file
@@ -0,0 +1,386 @@
|
||||
-- System functions
|
||||
|
||||
module ("dist.sys", package.seeall)
|
||||
|
||||
local cfg = require "dist.config"
|
||||
local utils = require "dist.utils"
|
||||
local lfs = require "lfs"
|
||||
|
||||
-- Return the path separator according to the platform.
|
||||
function path_separator()
|
||||
if cfg.arch == "Windows" then
|
||||
return "\\"
|
||||
else
|
||||
return "/"
|
||||
end
|
||||
end
|
||||
|
||||
-- Return path with wrong separators replaced with the right ones.
|
||||
function check_separators(path)
|
||||
assert(type(path) == "string", "sys.check_separators: Argument 'path' is not a string.")
|
||||
if cfg.arch == "Windows" then
|
||||
return path:gsub("/", "\\")
|
||||
else
|
||||
return path
|
||||
end
|
||||
end
|
||||
|
||||
-- Return the path with the unnecessary trailing separator removed.
|
||||
function remove_trailing(path)
|
||||
assert(type(path) == "string", "sys.remove_trailing: Argument 'path' is not a string.")
|
||||
if path:sub(-1) == path_separator() and not is_root(path) then path = path:sub(1,-2) end
|
||||
return path
|
||||
end
|
||||
|
||||
-- Return the path with the all occurences of '/.' or '\.' (representing
|
||||
-- the current directory) removed.
|
||||
function remove_curr_dir_dots(path)
|
||||
assert(type(path) == "string", "sys.remove_curr_dir_dots: Argument 'path' is not a string.")
|
||||
while path:match(path_separator() .. "%." .. path_separator()) do -- match("/%./")
|
||||
path = path:gsub(path_separator() .. "%." .. path_separator(), path_separator()) -- gsub("/%./", "/")
|
||||
end
|
||||
return path:gsub(path_separator() .. "%.$", "") -- gsub("/%.$", "")
|
||||
end
|
||||
|
||||
-- Return string argument quoted for a command line usage.
|
||||
function quote(argument)
|
||||
assert(type(argument) == "string", "sys.quote: Argument 'argument' is not a string.")
|
||||
|
||||
-- TODO: This seems like a not very nice hack. Why is it needed?
|
||||
-- Wouldn't it be better to fix the problem where it originates?
|
||||
-- replace '/' path separators for '\' on Windows
|
||||
if cfg.arch == "Windows" and argument:match("^[%u%U.]?:?[/\\].*") then
|
||||
argument = argument:gsub("//","\\"):gsub("/","\\")
|
||||
end
|
||||
|
||||
-- Windows doesn't recognize paths starting with two slashes or backslashes
|
||||
-- so we double every backslash except for the first one
|
||||
if cfg.arch == "Windows" and argument:match("^[/\\].*") then
|
||||
local prefix = argument:sub(1,1)
|
||||
argument = argument:sub(2):gsub("\\", "\\\\")
|
||||
argument = prefix .. argument
|
||||
else
|
||||
argument = argument:gsub("\\", "\\\\")
|
||||
end
|
||||
argument = argument:gsub('"', '\\"')
|
||||
|
||||
return '"' .. argument .. '"'
|
||||
end
|
||||
|
||||
-- Run the system command (in current directory).
|
||||
-- Return true on success, nil on fail and log string.
|
||||
-- When optional 'force_verbose' parameter is true, then the output will be shown
|
||||
-- even when not in debug or verbose mode.
|
||||
function exec(command, force_verbose)
|
||||
force_verbose = force_verbose or false
|
||||
assert(type(command) == "string", "sys.exec: Argument 'command' is not a string.")
|
||||
assert(type(force_verbose) == "boolean", "sys.exec: Argument 'force_verbose' is not a boolean.")
|
||||
|
||||
if not (cfg.verbose or cfg.debug or force_verbose) then
|
||||
if cfg.arch == "Windows" then
|
||||
command = command .. " > NUL 2>&1"
|
||||
else
|
||||
command = command .. " > /dev/null 2>&1"
|
||||
end
|
||||
end
|
||||
|
||||
if cfg.debug then print("Executing the command: " .. command) end
|
||||
local ok, str, status = os.execute(command)
|
||||
|
||||
-- os.execute returned values on failure are:
|
||||
-- nil or true, "exit", n or true, "signal", n for lua >= 5.2
|
||||
-- status ~= 0 for lua 5.x < 5.2
|
||||
if ok == nil or (str == "exit" and status ~= 0) or str == "signal" or (ok ~= 0 and ok ~= true) then
|
||||
return nil, "Error when running the command: " .. command
|
||||
else
|
||||
return true, "Sucessfully executed the command: " .. command
|
||||
end
|
||||
end
|
||||
|
||||
-- Execute the 'command' and returns its output as a string.
|
||||
function capture_output(command)
|
||||
assert(type(command) == "string", "sys.exec: Argument 'command' is not a string.")
|
||||
|
||||
local executed, err = io.popen(command, "r")
|
||||
if not executed then return nil, "Error running the command '" .. command .. "':" .. err end
|
||||
|
||||
local captured, err = executed:read("*a")
|
||||
if not captured then return nil, "Error reading the output of command '" .. command .. "':" .. err end
|
||||
|
||||
executed:close()
|
||||
return captured
|
||||
end
|
||||
|
||||
-- Return whether the path is a root.
|
||||
function is_root(path)
|
||||
assert(type(path) == "string", "sys.is_root: Argument 'path' is not a string.")
|
||||
return utils.to_boolean(path:find("^[a-zA-Z]:[/\\]$") or path:find("^[/\\]$"))
|
||||
end
|
||||
|
||||
-- Return whether the path is absolute.
|
||||
function is_abs(path)
|
||||
assert(type(path) == "string", "sys.is_abs: Argument 'path' is not a string.")
|
||||
return utils.to_boolean(path:find("^[a-zA-Z]:[/\\].*$") or path:find("^[/\\].*$"))
|
||||
end
|
||||
|
||||
-- Return whether the specified file or directory exists.
|
||||
function exists(path)
|
||||
assert(type(path) == "string", "sys.exists: Argument 'path' is not a string.")
|
||||
local attr, err = lfs.attributes(path)
|
||||
return utils.to_boolean(attr), err
|
||||
end
|
||||
|
||||
-- Return whether the 'file' exists and is a file.
|
||||
function is_file(file)
|
||||
assert(type(file) == "string", "sys.is_file: Argument 'file' is not a string.")
|
||||
return lfs.attributes(file, "mode") == "file"
|
||||
end
|
||||
|
||||
-- Return whether the 'dir' exists and is a directory.
|
||||
function is_dir(dir)
|
||||
assert(type(dir) == "string", "sys.is_dir: Argument 'dir' is not a string.")
|
||||
return lfs.attributes(dir, "mode") == "directory"
|
||||
end
|
||||
|
||||
-- Return the current working directory
|
||||
function current_dir()
|
||||
local dir, err = lfs.currentdir()
|
||||
if not dir then return nil, err end
|
||||
return dir
|
||||
end
|
||||
|
||||
-- Return an iterator over the directory 'dir'.
|
||||
-- If 'dir' doesn't exist or is not a directory, return nil and error message.
|
||||
function get_directory(dir)
|
||||
dir = dir or current_dir()
|
||||
assert(type(dir) == "string", "sys.get_directory: Argument 'dir' is not a string.")
|
||||
if is_dir(dir) then
|
||||
return lfs.dir(dir)
|
||||
else
|
||||
return nil, "Error: '".. dir .. "' is not a directory."
|
||||
end
|
||||
end
|
||||
|
||||
-- Extract file or directory name from its path.
|
||||
function extract_name(path)
|
||||
assert(type(path) == "string", "sys.extract_name: Argument 'path' is not a string.")
|
||||
if is_root(path) then return path end
|
||||
|
||||
path = remove_trailing(path)
|
||||
path = path:gsub("^.*" .. path_separator(), "")
|
||||
return path
|
||||
end
|
||||
|
||||
-- Return parent directory of the 'path' or nil if there's no parent directory.
|
||||
-- If 'path' is a path to file, return the directory the file is in.
|
||||
function parent_dir(path)
|
||||
assert(type(path) == "string", "sys.parent_dir: Argument 'path' is not a string.")
|
||||
path = remove_curr_dir_dots(path)
|
||||
path = remove_trailing(path)
|
||||
|
||||
local dir = path:gsub(utils.escape_magic(extract_name(path)) .. "$", "")
|
||||
if dir == "" then
|
||||
return nil
|
||||
else
|
||||
return make_path(dir)
|
||||
end
|
||||
end
|
||||
|
||||
-- Returns the table of all parent directories of 'path' up to the directory
|
||||
-- specified by 'boundary_path' (exclusive).
|
||||
function parents_up_to(path, boundary_path)
|
||||
assert(type(path) == "string", "sys.parents_up_to: Argument 'path' is not a string.")
|
||||
assert(type(boundary_path) == "string", "sys.parents_up_to: Argument 'boundary_path' is not a string.")
|
||||
boundary_path = remove_trailing(boundary_path)
|
||||
|
||||
-- helper function to recursively collect the parent directories
|
||||
local function collect_parents(_path, _parents)
|
||||
local _parent = parent_dir(_path)
|
||||
if _parent and _parent ~= boundary_path then
|
||||
table.insert(_parents, _parent)
|
||||
return collect_parents(_parent, _parents)
|
||||
else
|
||||
return _parents
|
||||
end
|
||||
end
|
||||
|
||||
return collect_parents(path, {})
|
||||
end
|
||||
|
||||
-- Compose path composed from specified parts or current
|
||||
-- working directory when no part specified.
|
||||
function make_path(...)
|
||||
-- arg is deprecated in lua 5.2 in favor of table.pack we mimic here
|
||||
local arg = {n=select('#',...),...}
|
||||
local parts = arg
|
||||
assert(type(parts) == "table", "sys.make_path: Argument 'parts' is not a table.")
|
||||
|
||||
local path, err
|
||||
if parts.n == 0 then
|
||||
path, err = current_dir()
|
||||
else
|
||||
path, err = table.concat(parts, path_separator())
|
||||
end
|
||||
if not path then return nil, err end
|
||||
|
||||
-- squeeze repeated occurences of a file separator
|
||||
path = path:gsub(path_separator() .. "+", path_separator())
|
||||
|
||||
-- remove unnecessary trailing path separator
|
||||
path = remove_trailing(path)
|
||||
|
||||
return path
|
||||
end
|
||||
|
||||
-- Return absolute path from 'path'
|
||||
function abs_path(path)
|
||||
assert(type(path) == "string", "sys.get_abs_path: Argument 'path' is not a string.")
|
||||
if is_abs(path) then return path end
|
||||
|
||||
local cur_dir, err = current_dir()
|
||||
if not cur_dir then return nil, err end
|
||||
|
||||
return make_path(cur_dir, path)
|
||||
end
|
||||
|
||||
-- Returns path to the temporary directory of OS.
|
||||
function tmp_dir()
|
||||
return os.getenv("TMPDIR") or os.getenv("TEMP") or os.getenv("TMP") or "/tmp"
|
||||
end
|
||||
|
||||
-- Returns temporary file (or directory) path (with optional prefix).
|
||||
function tmp_name(prefix)
|
||||
prefix = prefix or ""
|
||||
assert(type(prefix) == "string", "sys.tmp_name: Argument 'prefix' is not a string.")
|
||||
return make_path(tmp_dir(), prefix .. "luadist_" .. utils.rand(10000000000))
|
||||
end
|
||||
|
||||
-- Return table of all paths in 'dir'
|
||||
function get_file_list(dir)
|
||||
dir = dir or current_dir()
|
||||
assert(type(dir) == "string", "sys.get_directory: Argument 'dir' is not a string.")
|
||||
if not exists(dir) then return nil, "Error getting file list of '" .. dir .. "': directory doesn't exist." end
|
||||
|
||||
local function collect(path, all_paths)
|
||||
for item in get_directory(path) do
|
||||
|
||||
local item_path = make_path(path, item)
|
||||
local _, last = item_path:find(dir .. path_separator(), 1, true)
|
||||
local path_to_insert = item_path:sub(last + 1)
|
||||
|
||||
if is_file(item_path) then
|
||||
table.insert(all_paths, path_to_insert)
|
||||
elseif is_dir(item_path) and item ~= "." and item ~= ".." then
|
||||
table.insert(all_paths, path_to_insert)
|
||||
collect(item_path, all_paths)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local all_paths = {}
|
||||
collect(dir, all_paths)
|
||||
|
||||
return all_paths
|
||||
end
|
||||
|
||||
-- Return time of the last modification of 'file'.
|
||||
function last_modification_time(file)
|
||||
assert(type(file) == "string", "sys.last_modification_time: Argument 'file' is not a string.")
|
||||
return lfs.attributes(file, "modification")
|
||||
end
|
||||
|
||||
-- Return the current time (in seconds since epoch).
|
||||
function current_time()
|
||||
return os.time()
|
||||
end
|
||||
|
||||
-- Change the current working directory and return 'true' and previous working
|
||||
-- directory on success and 'nil' and error message on error.
|
||||
function change_dir(dir_name)
|
||||
assert(type(dir_name) == "string", "sys.change_dir: Argument 'dir_name' is not a string.")
|
||||
local prev_dir = current_dir()
|
||||
local ok, err = lfs.chdir(dir_name)
|
||||
if ok then
|
||||
return ok, prev_dir
|
||||
else
|
||||
return nil, err
|
||||
end
|
||||
end
|
||||
|
||||
-- Make a new directory, making also all of its parent directories that doesn't exist.
|
||||
function make_dir(dir_name)
|
||||
assert(type(dir_name) == "string", "sys.make_dir: Argument 'dir_name' is not a string.")
|
||||
if exists(dir_name) then
|
||||
return true
|
||||
else
|
||||
local par_dir = parent_dir(dir_name)
|
||||
if par_dir then
|
||||
local ok, err = make_dir(par_dir)
|
||||
if not ok then return nil, err end
|
||||
end
|
||||
return lfs.mkdir(dir_name)
|
||||
end
|
||||
end
|
||||
|
||||
-- Move file (or directory) to the destination directory
|
||||
function move_to(file_or_dir, dest_dir)
|
||||
assert(type(file_or_dir) == "string", "sys.move_to: Argument 'file_or_dir' is not a string.")
|
||||
assert(type(dest_dir) == "string", "sys.move_to: Argument 'dest_dir' is not a string.")
|
||||
assert(is_dir(dest_dir), "sys.move_to: Destination '" .. dest_dir .."' is not a directory.")
|
||||
|
||||
-- Extract file/dir name from its path
|
||||
local file_or_dir_name = extract_name(file_or_dir)
|
||||
|
||||
return os.rename(file_or_dir, make_path(dest_dir, file_or_dir_name))
|
||||
end
|
||||
|
||||
-- rename file (or directory) to the new name.
|
||||
function rename(file, new_name)
|
||||
assert(type(file) == "string", "sys.rename: Argument 'file' is not a string.")
|
||||
assert(type(new_name) == "string", "sys.rename: Argument 'new_name' is not a string.")
|
||||
assert(not exists(new_name), "sys.rename: desired filename already exists.")
|
||||
|
||||
return os.rename(file, new_name)
|
||||
end
|
||||
|
||||
-- Copy 'source' to the destination directory 'dest_dir'.
|
||||
-- If 'source' is a directory, then recursive copying is used.
|
||||
-- For non-recursive copying of directories use the make_dir() function.
|
||||
function copy(source, dest_dir)
|
||||
assert(type(source) == "string", "sys.copy: Argument 'file_or_dir' is not a string.")
|
||||
assert(type(dest_dir) == "string", "sys.copy: Argument 'dest_dir' is not a string.")
|
||||
assert(is_dir(dest_dir), "sys.copy: destination '" .. dest_dir .."' is not a directory.")
|
||||
|
||||
if cfg.arch == "Windows" then
|
||||
if is_dir(source) then
|
||||
make_dir(make_path(dest_dir, extract_name(source)))
|
||||
return exec("xcopy /E /I /Y /Q " .. quote(source) .. " " .. quote(dest_dir .. "\\" .. extract_name(source)))
|
||||
else
|
||||
return exec("copy /Y " .. quote(source) .. " " .. quote(dest_dir))
|
||||
end
|
||||
else
|
||||
if is_dir(source) then
|
||||
return exec("cp -fRH " .. quote(source) .. " " .. quote(dest_dir))
|
||||
else
|
||||
return exec("cp -fH " .. quote(source) .. " " .. quote(dest_dir))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Delete the specified file or directory
|
||||
function delete(path)
|
||||
assert(type(path) == "string", "sys.delete: Argument 'path' is not a string.")
|
||||
assert(is_abs(path), "sys.delete: Argument 'path' is not an absolute path.")
|
||||
|
||||
if cfg.arch == "Windows" then
|
||||
if not exists(path) then
|
||||
return true
|
||||
elseif is_file(path) then
|
||||
return os.remove(path)
|
||||
else
|
||||
return exec("rd /S /Q " .. quote(path))
|
||||
end
|
||||
else
|
||||
return exec("rm -rf " .. quote(path))
|
||||
end
|
||||
end
|
||||
151
lualibs/dist/utils.lua
vendored
Normal file
151
lualibs/dist/utils.lua
vendored
Normal file
@@ -0,0 +1,151 @@
|
||||
-- System functions
|
||||
|
||||
module ("dist.utils", package.seeall)
|
||||
|
||||
local sys = require "dist.sys"
|
||||
|
||||
-- Returns a deep copy of 'table' with reference to the same metadata table.
|
||||
-- Source: http://lua-users.org/wiki/CopyTable
|
||||
function deepcopy(object)
|
||||
local lookup_table = {}
|
||||
local function _copy(object)
|
||||
if type(object) ~= "table" then
|
||||
return object
|
||||
elseif lookup_table[object] then
|
||||
return lookup_table[object]
|
||||
end
|
||||
local new_table = {}
|
||||
lookup_table[object] = new_table
|
||||
for index, value in pairs(object) do
|
||||
new_table[_copy(index)] = _copy(value)
|
||||
end
|
||||
return setmetatable(new_table, getmetatable(object))
|
||||
end
|
||||
return _copy(object)
|
||||
end
|
||||
|
||||
-- Return deep copy of table 'array', containing only items for which 'predicate_fn' returns true.
|
||||
function filter(array, predicate_fn)
|
||||
assert(type(array) == "table", "utils.filter: Argument 'array' is not a table.")
|
||||
assert(type(predicate_fn) == "function", "utils.filter: Argument 'predicate_fn' is not a function.")
|
||||
local filtered = {}
|
||||
for _,v in pairs(array) do
|
||||
if predicate_fn(v) == true then table.insert(filtered, deepcopy(v)) end
|
||||
end
|
||||
return filtered
|
||||
end
|
||||
|
||||
-- Return deep copy of table 'array', sorted according to the 'compare_fn' function.
|
||||
function sort(array, compare_fn)
|
||||
assert(type(array) == "table", "utils.sort: Argument 'array' is not a table.")
|
||||
assert(type(compare_fn) == "function", "utils.sort: Argument 'compare_fn' is not a function.")
|
||||
local sorted = deepcopy(array)
|
||||
table.sort(sorted, compare_fn)
|
||||
return sorted
|
||||
end
|
||||
|
||||
-- Return whether the 'value' is in the table 'tbl'.
|
||||
function contains(tbl, value)
|
||||
assert(type(tbl) == "table", "utils.contains: Argument 'tbl' is not a table.")
|
||||
for _,v in pairs(tbl) do
|
||||
if v == value then return true end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
-- Return single line string consisting of values in 'tbl' separated by comma.
|
||||
-- Used for printing the dependencies/provides/conflicts.
|
||||
function table_tostring(tbl, label)
|
||||
assert(type(tbl) == "table", "utils.table_tostring: Argument 'tbl' is not a table.")
|
||||
local str = ""
|
||||
for k,v in pairs(tbl) do
|
||||
if type(v) == "table" then
|
||||
str = str .. table_tostring(v, k)
|
||||
else
|
||||
if label ~= nil then
|
||||
str = str .. tostring(v) .. " [" .. tostring(label) .. "]" .. ", "
|
||||
else
|
||||
str = str .. tostring(v) .. ", "
|
||||
end
|
||||
end
|
||||
end
|
||||
return str
|
||||
end
|
||||
|
||||
-- Return table made up from values of the string, separated by separator.
|
||||
function make_table(str, separator)
|
||||
assert(type(str) == "string", "utils.make_table: Argument 'str' is not a string.")
|
||||
assert(type(separator) == "string", "utils.make_table: Argument 'separator' is not a string.")
|
||||
|
||||
local tbl = {}
|
||||
for val in str:gmatch("(.-)" .. separator) do
|
||||
table.insert(tbl, val)
|
||||
end
|
||||
local last_val = str:gsub(".-" .. separator, "")
|
||||
if last_val and last_val ~= "" then
|
||||
table.insert(tbl, last_val)
|
||||
end
|
||||
return tbl
|
||||
end
|
||||
|
||||
-- Return whether the 'cache_timeout' for 'file' has expired.
|
||||
function cache_timeout_expired(cache_timeout, file)
|
||||
assert(type(cache_timeout) == "number", "utils.cache_timeout_expired: Argument 'cache_timeout' is not a number.")
|
||||
assert(type(file) == "string", "utils.cache_timeout_expired: Argument 'file' is not a string.")
|
||||
return sys.last_modification_time(file) + cache_timeout < sys.current_time()
|
||||
end
|
||||
|
||||
-- Return the string 'str', with all magic (pattern) characters escaped.
|
||||
function escape_magic(str)
|
||||
assert(type(str) == "string", "utils.escape: Argument 'str' is not a string.")
|
||||
local escaped = str:gsub('[%-%.%+%[%]%(%)%^%%%?%*%^%$]','%%%1')
|
||||
return escaped
|
||||
end
|
||||
|
||||
-- Return the boolean representation of an 'arg'.
|
||||
function to_boolean(arg)
|
||||
return not not arg
|
||||
end
|
||||
|
||||
|
||||
math.randomseed(os.time())
|
||||
|
||||
-- Return pseudo-random number in range [0, 1], [1, n] or [n, m].
|
||||
function rand(...)
|
||||
return math.random(...)
|
||||
end
|
||||
|
||||
-- Perform check of system dependency, which isn't provided in the LuaDist
|
||||
-- installation itself and if it is missing, print instructions how
|
||||
-- to install it. The 'command' is used for testing, 'name' when printing
|
||||
-- information to the user.
|
||||
function system_dependency_available(name, command)
|
||||
assert(type(name) == "string", "utils.system_dependency_available: Argument 'name' is not a string.")
|
||||
assert(type(command) == "string", "utils.system_dependency_available: Argument 'command' is not a string.")
|
||||
|
||||
if not sys.exec(command) then
|
||||
print("Error: command '" .. name .. "' not found on system. See installation instructions at\nhttps://github.com/LuaDist/Repository/wiki/Installation-of-System-Dependencies")
|
||||
return false
|
||||
end
|
||||
|
||||
return true
|
||||
end
|
||||
|
||||
-- Obtain LuaDist location by checking available package locations
|
||||
function get_luadist_location()
|
||||
local paths = {}
|
||||
local path = package.path:gsub("([^;]+)", function(c) table.insert(paths, c) end)
|
||||
|
||||
for _, path in pairs(paths) do
|
||||
if (sys.is_abs(path) and path:find("[/\\]lib[/\\]lua[/\\]%?.lua$")) then
|
||||
-- Remove path to lib/lua
|
||||
path = path:gsub("[/\\]lib[/\\]lua[/\\]%?.lua$", "")
|
||||
-- Clean the path up a bit
|
||||
path = path:gsub("[/\\]bin[/\\]%.[/\\]%.%.", "")
|
||||
path = path:gsub("[/\\]bin[/\\]%.%.", "")
|
||||
return path
|
||||
end
|
||||
end
|
||||
return nil
|
||||
end
|
||||
|
||||
5
lualibs/git.lua
Normal file
5
lualibs/git.lua
Normal file
@@ -0,0 +1,5 @@
|
||||
require 'git.util'
|
||||
require 'git.objects'
|
||||
require 'git.pack'
|
||||
require 'git.repo'
|
||||
require 'git.protocol'
|
||||
121
lualibs/git/objects.lua
Normal file
121
lualibs/git/objects.lua
Normal file
@@ -0,0 +1,121 @@
|
||||
local util = require 'git.util'
|
||||
|
||||
local assert, next, io, print, os, type, string, pairs, tostring =
|
||||
assert, next, io, print, os, type, string, pairs, tostring
|
||||
local join_path = git.util.join_path
|
||||
|
||||
local require = require
|
||||
|
||||
local isPosix = package.config:sub(1,1) == '/' -- wild guess
|
||||
|
||||
module(...)
|
||||
|
||||
Commit = {}
|
||||
Commit.__index = Commit
|
||||
|
||||
function Commit:tree()
|
||||
return self.repo:tree(self.tree_sha)
|
||||
end
|
||||
|
||||
function Commit:checkout(path)
|
||||
assert(path, 'path argument missing')
|
||||
self:tree():checkoutTo(path)
|
||||
end
|
||||
|
||||
|
||||
Tree = {}
|
||||
Tree.__index = function (t,k)
|
||||
if Tree[k] then return Tree[k] end
|
||||
return t:entry(k)
|
||||
end
|
||||
|
||||
function Tree:entries()
|
||||
return function(t, n)
|
||||
local n, entry = next(t, n)
|
||||
if entry then
|
||||
local object
|
||||
if entry.type == 'tree' then
|
||||
object = self.repo:tree(entry.id)
|
||||
elseif entry.type == 'blob' then
|
||||
object = self.repo:blob(entry.id)
|
||||
object.mode = entry.mode
|
||||
elseif entry.type == 'commit' then
|
||||
-- this is possibly a commit in a submodule,
|
||||
-- do not retrieve it from current repo
|
||||
object = entry
|
||||
else
|
||||
error('Unknown entry type: ' .. entry.type)
|
||||
end
|
||||
return n, entry.type, object
|
||||
end
|
||||
end, self._entries
|
||||
end
|
||||
|
||||
function Tree:entry(n)
|
||||
local e = self._entries[n]
|
||||
if not e then return end
|
||||
if e.type == 'tree' then
|
||||
return self.repo:tree(e.id)
|
||||
elseif e.type == 'commit' then
|
||||
return self.repo:commit(e.id)
|
||||
elseif e.type == 'blob' then
|
||||
return self.repo:blob(e.id)
|
||||
else
|
||||
error('Unknown entry type: ' .. e.type)
|
||||
end
|
||||
end
|
||||
|
||||
function Tree:walk(func, path)
|
||||
path = path or '.'
|
||||
assert(type(func) == "function", "argument is not a function")
|
||||
local function walk(tree, path)
|
||||
for name, type, entry in tree:entries() do
|
||||
local entry_path = join_path(path, name)
|
||||
func(entry, entry_path, type)
|
||||
|
||||
if type == "tree" then
|
||||
walk(entry, entry_path)
|
||||
end
|
||||
end
|
||||
end
|
||||
walk(self, path)
|
||||
end
|
||||
|
||||
function Tree:checkoutTo(path)
|
||||
util.make_dir(path)
|
||||
self:walk(function (entry, entry_path, type)
|
||||
if type == 'tree' then
|
||||
util.make_dir(entry_path)
|
||||
elseif type == 'blob' then
|
||||
local out = assert(io.open(entry_path, 'wb'))
|
||||
out:write(entry:content())
|
||||
out:close()
|
||||
if isPosix then
|
||||
local mode = entry.mode:sub(-3,-1) -- fixme: is this ok?
|
||||
local cmd = 'chmod '..mode..' "'..entry_path..'"'
|
||||
os.execute(cmd)
|
||||
end
|
||||
elseif type == 'commit' then
|
||||
-- this is a submodule referencing a commit,
|
||||
-- make a directory for it
|
||||
util.make_dir(entry_path)
|
||||
else
|
||||
error('Unknown entry type: ', type)
|
||||
end
|
||||
end, path)
|
||||
end
|
||||
|
||||
Blob = {}
|
||||
Blob.__index = Blob
|
||||
|
||||
function Blob:content()
|
||||
if self.stored then
|
||||
local f = self.repo:raw_object(self.id)
|
||||
local ret = f:read('*a') or ""
|
||||
f:close()
|
||||
return ret
|
||||
else
|
||||
return self.data
|
||||
end
|
||||
end
|
||||
|
||||
316
lualibs/git/pack.lua
Normal file
316
lualibs/git/pack.lua
Normal file
@@ -0,0 +1,316 @@
|
||||
local io = io
|
||||
local core = require 'git.core'
|
||||
|
||||
local assert, pcall, print, select, setmetatable, string, type, unpack =
|
||||
assert, pcall, print, select, setmetatable, string, type, unpack
|
||||
|
||||
local ord = string.byte
|
||||
local fmt = string.format
|
||||
local concat, insert = table.concat, table.insert
|
||||
|
||||
local band = core.band
|
||||
local rshift, lshift = core.rshift, core.lshift
|
||||
|
||||
local to_hex = git.util.to_hex
|
||||
local from_hex = git.util.from_hex
|
||||
local object_sha = git.util.object_sha
|
||||
local binary_sha = git.util.binary_sha
|
||||
local readable_sha = git.util.readable_sha
|
||||
local tmpfile = git.util.tmpfile
|
||||
local reader = git.util.reader
|
||||
|
||||
module(...)
|
||||
|
||||
-- read git/Documentation/technical/pack-format.txt for some inspiration
|
||||
|
||||
-- 1 = commit, 2 = tree ...
|
||||
local types = {'commit', 'tree', 'blob', 'tag', '???', 'ofs_delta', 'ref_delta'}
|
||||
|
||||
-- read a 4 byte unsigned integer stored in network order
|
||||
local function read_int(f)
|
||||
local s = f:read(4)
|
||||
local a,b,c,d = s:byte(1,4)
|
||||
return a*256^3 + b*256^2 + c*256 + d
|
||||
end
|
||||
|
||||
-- read in the type and file length
|
||||
local function read_object_header(f)
|
||||
local b = ord(f:read(1))
|
||||
local type = band(rshift(b, 4), 0x7)
|
||||
local len = band(b, 0xF)
|
||||
local ofs = 0
|
||||
while band(b, 0x80) ~= 0 do
|
||||
b = ord(f:read(1))
|
||||
len = len + lshift(band(b, 0x7F), ofs * 7 + 4)
|
||||
ofs = ofs + 1
|
||||
end
|
||||
return len, type
|
||||
end
|
||||
|
||||
-- reads in the delta header and returns the offset where original data is stored
|
||||
local function read_delta_header(f)
|
||||
local b = ord(f:read(1))
|
||||
local offset = band(b, 0x7F)
|
||||
while band(b, 0x80) ~= 0 do
|
||||
offset = offset + 1
|
||||
b = ord(f:read(1))
|
||||
offset = lshift(offset, 7) + band(b, 0x7F)
|
||||
end
|
||||
return offset
|
||||
end
|
||||
|
||||
-- read just enough of file `f` to uncompress `size` bytes
|
||||
local function uncompress_by_len(f, size)
|
||||
local z = core.inflate()
|
||||
local chunks = {}
|
||||
local CHUNK_SIZE = 1024
|
||||
local curr_pos = f:seek()
|
||||
local inflated, eof, total
|
||||
-- read until end of zlib-compresed stream
|
||||
while not eof do
|
||||
local data = f:read(CHUNK_SIZE)
|
||||
inflated, eof, total = z(data)
|
||||
insert(chunks, inflated)
|
||||
end
|
||||
-- repair the current position in stream
|
||||
f:seek('set', curr_pos + total)
|
||||
return concat(chunks)
|
||||
end
|
||||
|
||||
-- uncompress the object from the current location in `f`
|
||||
local function unpack_object(f, len, type)
|
||||
local data = uncompress_by_len(f, len)
|
||||
return data, len, type
|
||||
end
|
||||
|
||||
-- returns a size value encoded in delta data
|
||||
local function delta_size(f)
|
||||
local size = 0
|
||||
local i = 0
|
||||
repeat
|
||||
local b = ord(f:read(1))
|
||||
size = size + lshift(band(b, 0x7F), i)
|
||||
i = i + 7
|
||||
until band(b, 0x80) == 0
|
||||
return size
|
||||
end
|
||||
|
||||
-- returns a patched object from string `base` according to `delta` data
|
||||
local function patch_object(base, delta, base_type)
|
||||
-- insert delta codes into temporary file
|
||||
local df = reader(delta)
|
||||
|
||||
-- retrieve original and result size (for checks)
|
||||
local orig_size = delta_size(df)
|
||||
assert(#base == orig_size, fmt('#base(%d) ~= orig_size(%d)', #base, orig_size))
|
||||
|
||||
local result_size = delta_size(df)
|
||||
local size = result_size
|
||||
|
||||
local result = {}
|
||||
|
||||
-- process the delta codes
|
||||
local cmd = df:read(1)
|
||||
while cmd do
|
||||
cmd = ord(cmd)
|
||||
if cmd == 0 then
|
||||
error('unexpected delta code 0')
|
||||
elseif band(cmd, 0x80) ~= 0 then -- copy a selected part of base data
|
||||
local cp_off, cp_size = 0, 0
|
||||
-- retrieve offset
|
||||
if band(cmd, 0x01) ~= 0 then cp_off = ord(df:read(1)) end
|
||||
if band(cmd, 0x02) ~= 0 then cp_off = cp_off + ord(df:read(1))*256 end
|
||||
if band(cmd, 0x04) ~= 0 then cp_off = cp_off + ord(df:read(1))*256^2 end
|
||||
if band(cmd, 0x08) ~= 0 then cp_off = cp_off + ord(df:read(1))*256^3 end
|
||||
-- retrieve size
|
||||
if band(cmd, 0x10) ~= 0 then cp_size = ord(df:read(1)) end
|
||||
if band(cmd, 0x20) ~= 0 then cp_size = cp_size + ord(df:read(1))*256 end
|
||||
if band(cmd, 0x40) ~= 0 then cp_size = cp_size + ord(df:read(1))*256^2 end
|
||||
if cp_size == 0 then cp_size = 0x10000 end
|
||||
if cp_off + cp_size > #base or cp_size > size then break end
|
||||
-- get the data and append it to result
|
||||
local data = base:sub(cp_off + 1, cp_off + cp_size)
|
||||
insert(result, data)
|
||||
size = size - cp_size
|
||||
else -- insert new data
|
||||
if cmd > size then break end
|
||||
local data = df:read(cmd)
|
||||
insert(result, data)
|
||||
size = size - cmd
|
||||
end
|
||||
cmd = df:read(1)
|
||||
end
|
||||
|
||||
df:close()
|
||||
|
||||
result = concat(result)
|
||||
assert(#result == result_size, fmt('#result(%d) ~= result_size(%d)', #result, result_size))
|
||||
return result, result_size, base_type
|
||||
end
|
||||
|
||||
Pack = {}
|
||||
Pack.__index = Pack
|
||||
|
||||
-- read an object from the current location in pack, or from a specific `offset`
|
||||
-- if specified
|
||||
function Pack:read_object(offset, ignore_data)
|
||||
local f = self.pack_file
|
||||
if offset then
|
||||
f:seek('set', offset)
|
||||
end
|
||||
local curr_pos = f:seek()
|
||||
|
||||
local len, type = read_object_header(f)
|
||||
if type < 5 then -- commit, tree, blob, tag
|
||||
return unpack_object(f, len, type)
|
||||
elseif type == 6 then -- ofs_delta
|
||||
local offset = read_delta_header(f)
|
||||
local delta_data = uncompress_by_len(f, len)
|
||||
if not ignore_data then
|
||||
-- the offset is negative from the current location
|
||||
local base, base_len, base_type = self:read_object(curr_pos - offset)
|
||||
return patch_object(base, delta_data, base_type)
|
||||
end
|
||||
elseif type == 7 then -- ref_delta
|
||||
local sha = f:read(20)
|
||||
local delta_data = uncompress_by_len(f, len)
|
||||
if not ignore_data then
|
||||
-- lookup the object in the pack by sha
|
||||
-- FIXME: maybe lookup in repo/other packs
|
||||
local base_offset = self.index[binary_sha(sha)]
|
||||
local base, base_len, base_type = self:read_object(base_offset)
|
||||
return patch_object(base, delta_data, base_type)
|
||||
end
|
||||
else
|
||||
error('unknown object type: '..type)
|
||||
end
|
||||
end
|
||||
|
||||
-- returns true if this pack contains the given object
|
||||
function Pack:has_object(sha)
|
||||
return self.index[binary_sha(sha)] ~= nil
|
||||
end
|
||||
|
||||
-- if the object name `sha` exists in the pack, returns a temporary file with the
|
||||
-- object content, length and type, otherwise returns nil
|
||||
function Pack:get_object(sha)
|
||||
local offset = self.index[binary_sha(sha)]
|
||||
if not offset then
|
||||
print('!!! Failed to find object', readable_sha(sha))
|
||||
end
|
||||
|
||||
local data, len, type = self:read_object(offset)
|
||||
print(readable_sha(sha), len, type, data)
|
||||
local f = tmpfile()
|
||||
f:write(data)
|
||||
f:seek('set', 0)
|
||||
|
||||
return f, len, types[type]
|
||||
end
|
||||
|
||||
function Pack:unpack(repo)
|
||||
for i=1, self.nobjects do
|
||||
local offset = self.offsets[i]
|
||||
local data, len, type = self:read_object(offset)
|
||||
repo:store_object(data, len, types[type])
|
||||
end
|
||||
end
|
||||
|
||||
-- parses the index
|
||||
function Pack:parse_index(index_file)
|
||||
local f = index_file
|
||||
|
||||
local head = f:read(4)
|
||||
assert(head == '\255tOc', "Incorrect header: " .. head)
|
||||
local version = read_int(f)
|
||||
assert(version == 2, "Incorrect version: " .. version)
|
||||
|
||||
-- first the fanout table (how many objects are in the index, whose
|
||||
-- first byte is below or equal to i)
|
||||
local fanout = {}
|
||||
for i=0, 255 do
|
||||
local nobjs = read_int(f)
|
||||
fanout[i] = nobjs
|
||||
end
|
||||
|
||||
-- the last element in fanout is the number of all objects in index
|
||||
local count = fanout[255]
|
||||
|
||||
-- then come the sorted object names (=sha hash)
|
||||
local tmp = {}
|
||||
for i=1,count do
|
||||
local sha = f:read(20)
|
||||
tmp[i] = { sha = sha }
|
||||
end
|
||||
|
||||
-- then the CRCs (assume ok, skip them)
|
||||
for i=1, count do
|
||||
local crc = f:read(4)
|
||||
end
|
||||
|
||||
-- then come the offsets - read just the 32bit ones, does not handle packs > 2G
|
||||
for i=1, count do
|
||||
local offset = read_int(f)
|
||||
tmp[i].offset = offset
|
||||
end
|
||||
|
||||
-- construct the lookup table
|
||||
local lookup = {}
|
||||
for i=1, count do
|
||||
lookup[tmp[i].sha] = tmp[i].offset
|
||||
end
|
||||
self.index = lookup
|
||||
end
|
||||
|
||||
-- constructs the index/offsets if the index file is missing
|
||||
function Pack:construct_index(path)
|
||||
local index = {}
|
||||
for i=1, self.nobjects do
|
||||
local offset = self.offsets[i]
|
||||
local data, len, type = self:read_object(offset)
|
||||
local sha = object_sha(data, len, types[type])
|
||||
index[binary_sha(sha)] = offset
|
||||
end
|
||||
self.index = index
|
||||
end
|
||||
|
||||
function Pack:close()
|
||||
self.pack_file:close()
|
||||
end
|
||||
|
||||
function Pack.open(path)
|
||||
local fp = assert(io.open(path, 'rb')) -- stays open
|
||||
|
||||
-- read the pack header
|
||||
local head = fp:read(4)
|
||||
assert(head == 'PACK', "Incorrect header: " .. head)
|
||||
local version = read_int(fp)
|
||||
assert(version == 2, "Incorrect version: " .. version)
|
||||
local nobj = read_int(fp)
|
||||
|
||||
local pack = setmetatable({
|
||||
offsets = {},
|
||||
nobjects = nobj,
|
||||
pack_file = fp,
|
||||
}, Pack)
|
||||
|
||||
-- fill the offsets by traversing through the pack
|
||||
for i=1,nobj do
|
||||
pack.offsets[i] = fp:seek()
|
||||
-- ignore the object data, we only need the offset in the pack
|
||||
pack:read_object(nil, true)
|
||||
end
|
||||
|
||||
-- read the index
|
||||
local fi = io.open((path:gsub('%.pack$', '.idx')), 'rb')
|
||||
if fi then
|
||||
pack:parse_index(fi)
|
||||
fi:close()
|
||||
else
|
||||
pack:construct_index(path)
|
||||
end
|
||||
|
||||
return pack
|
||||
end
|
||||
|
||||
return Pack
|
||||
188
lualibs/git/protocol.lua
Normal file
188
lualibs/git/protocol.lua
Normal file
@@ -0,0 +1,188 @@
|
||||
local socket = require 'socket'
|
||||
local urllib = require 'socket.url'
|
||||
local lfs = require 'lfs'
|
||||
|
||||
local Repo = git.repo.Repo
|
||||
local Pack = git.pack.Pack
|
||||
local join_path = git.util.join_path
|
||||
local parent_dir = git.util.parent_dir
|
||||
local make_dir = git.util.make_dir
|
||||
local correct_separators = git.util.correct_separators
|
||||
|
||||
local assert, error, getmetatable, io, os, pairs, print, require, string, tonumber =
|
||||
assert, error, getmetatable, io, os, pairs, print, require, string, tonumber
|
||||
|
||||
local _VERSION, newproxy = _VERSION, newproxy
|
||||
|
||||
module(...)
|
||||
|
||||
local GIT_PORT = 9418
|
||||
|
||||
local function git_connect(host)
|
||||
local sock = assert(socket.connect(host, GIT_PORT))
|
||||
local gitsocket = {}
|
||||
|
||||
function gitsocket:send(data)
|
||||
if not data then -- flush packet
|
||||
sock:send('0000')
|
||||
else
|
||||
local len = #data + 4
|
||||
len = string.format("%04x", len)
|
||||
assert(sock:send(len .. data))
|
||||
end
|
||||
end
|
||||
|
||||
function gitsocket:receive()
|
||||
local len = assert(sock:receive(4))
|
||||
len = tonumber(len, 16)
|
||||
if len == 0 then return end -- flush packet
|
||||
local data = assert(sock:receive(len - 4))
|
||||
return data
|
||||
end
|
||||
|
||||
function gitsocket:close()
|
||||
sock:close()
|
||||
end
|
||||
|
||||
return gitsocket
|
||||
end
|
||||
|
||||
local function addFinalizer(object, finalizer)
|
||||
if _VERSION <= "Lua 5.1" then
|
||||
local gc = newproxy(true)
|
||||
getmetatable(gc).__gc = finalizer
|
||||
object.__gc = gc
|
||||
else
|
||||
local mt = getmetatable(object)
|
||||
if mt then mt.__gc = finalizer
|
||||
else setmetatable(object, {__gc = finalizer})
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function git_fetch(host, path, repo, head, supress_progress)
|
||||
local s = git_connect(host)
|
||||
s:send('git-upload-pack '..path..'\0host='..host..'\0')
|
||||
|
||||
local refs, refsbyname = {}, {}
|
||||
repeat
|
||||
local ref = s:receive()
|
||||
if ref then
|
||||
local sha, name = ref:sub(1,40), ref:sub(42, -2)
|
||||
refs[sha] = name
|
||||
refsbyname[name] = sha
|
||||
end
|
||||
until not ref
|
||||
|
||||
local wantedSha
|
||||
local headsha = head and refsbyname[head]
|
||||
|
||||
for sha, ref in pairs(refs) do
|
||||
-- we implicitly want this ref
|
||||
local wantObject = true
|
||||
-- unless we ask for a specific head
|
||||
if headsha then
|
||||
if sha ~= headsha then
|
||||
wantObject = false
|
||||
else
|
||||
wantedSha = sha
|
||||
end
|
||||
end
|
||||
-- or we already have it
|
||||
if repo and repo:has_object(sha) then
|
||||
wantObject = false
|
||||
end
|
||||
if wantObject then
|
||||
s:send('want '..sha..' multi_ack_detailed side-band-64k ofs-delta\n')
|
||||
end
|
||||
end
|
||||
|
||||
if head and not wantedSha then
|
||||
error("Server does not have "..head)
|
||||
end
|
||||
|
||||
s:send('deepen 1')
|
||||
s:send()
|
||||
while s:receive() do end
|
||||
s:send('done\n')
|
||||
|
||||
assert(s:receive() == "NAK\n")
|
||||
|
||||
local packname = os.tmpname() .. '.pack'
|
||||
local packfile = assert(io.open(packname, 'wb'))
|
||||
repeat
|
||||
local got = s:receive()
|
||||
if got then
|
||||
-- get sideband channel, 1=pack data, 2=progress, 3=error
|
||||
local cmd = string.byte(got:sub(1,1))
|
||||
local data = got:sub(2)
|
||||
if cmd == 1 then
|
||||
packfile:write(data)
|
||||
elseif cmd == 2 then
|
||||
if not supress_progress then io.write(data) end
|
||||
else
|
||||
error(data)
|
||||
end
|
||||
end
|
||||
until not got
|
||||
|
||||
packfile:close()
|
||||
s:close()
|
||||
|
||||
local pack = Pack.open(packname)
|
||||
if repo then
|
||||
pack:unpack(repo)
|
||||
repo.isShallow = true
|
||||
if wantedSha then
|
||||
local headfile = correct_separators(join_path(repo.dir, head))
|
||||
assert(make_dir(parent_dir(headfile)))
|
||||
local f = assert(io.open(headfile, 'wb'))
|
||||
f:write(wantedSha)
|
||||
f:close()
|
||||
end
|
||||
end
|
||||
|
||||
addFinalizer(pack, function()
|
||||
os.remove(packname)
|
||||
end)
|
||||
|
||||
return pack, wantedSha
|
||||
end
|
||||
|
||||
function fetch(url, repo, head, supress_progress)
|
||||
if repo then assert(getmetatable(repo) == Repo, "arg #2 is not a repository") end
|
||||
url = urllib.parse(url)
|
||||
if url.scheme == 'git' then
|
||||
local pack, sha = git_fetch(url.host, url.path, repo, head, supress_progress)
|
||||
return pack, sha
|
||||
else
|
||||
error('unsupported scheme: '..url.scheme)
|
||||
end
|
||||
end
|
||||
|
||||
function remotes(url)
|
||||
-- TODO: refactor common code
|
||||
url = assert(urllib.parse(url))
|
||||
|
||||
if url.scheme ~= 'git' then
|
||||
error('unsupported scheme: '..url.scheme)
|
||||
end
|
||||
|
||||
local host, path = url.host, url.path
|
||||
|
||||
local s = git_connect(host)
|
||||
s:send('git-upload-pack '..path..'\0host='..host..'\0')
|
||||
|
||||
local remote = {}
|
||||
repeat
|
||||
local ref = s:receive()
|
||||
if ref then
|
||||
local sha, name = ref:sub(1,40), ref:sub(42, -2)
|
||||
remote[name] = sha
|
||||
end
|
||||
until not ref
|
||||
|
||||
s:close()
|
||||
|
||||
return remote
|
||||
end
|
||||
283
lualibs/git/repo.lua
Normal file
283
lualibs/git/repo.lua
Normal file
@@ -0,0 +1,283 @@
|
||||
local util = require 'git.util'
|
||||
local objects = require 'git.objects'
|
||||
local core = require 'git.core'
|
||||
local pack = require 'git.pack'
|
||||
|
||||
local join_path = util.join_path
|
||||
local decompressed = util.decompressed
|
||||
local read_until_nul = util.read_until_nul
|
||||
local to_hex = util.to_hex
|
||||
local object_sha = util.object_sha
|
||||
local readable_sha = util.readable_sha
|
||||
|
||||
local deflate = core.deflate
|
||||
|
||||
local lfs = require 'lfs'
|
||||
local assert, error, io, ipairs, print, os, setmetatable, string, table =
|
||||
assert, error, io, ipairs, print, os, setmetatable, string, table
|
||||
|
||||
module(...)
|
||||
|
||||
Repo = {}
|
||||
Repo.__index = Repo
|
||||
|
||||
-- retrieves an object identified by `sha` from the repository or its packs
|
||||
-- returns a file-like object (supports 'read', 'seek' and 'close'), the size
|
||||
-- of the object and its type
|
||||
-- errors when the object does not exist
|
||||
function Repo:raw_object(sha)
|
||||
-- first, look in 'objects' directory
|
||||
-- first byte of sha is the directory, the rest is name of object file
|
||||
sha = readable_sha(sha)
|
||||
local dir = sha:sub(1,2)
|
||||
local file = sha:sub(3)
|
||||
local path = join_path(self.dir, 'objects', dir, file)
|
||||
|
||||
if not lfs.attributes(path, 'size') then
|
||||
-- then, try to look in packs
|
||||
for _, pack in ipairs(self.packs) do
|
||||
local obj, len, typ = pack:get_object(sha)
|
||||
if obj then
|
||||
return obj, len, typ
|
||||
end
|
||||
end
|
||||
error('Object not found in object neither in packs: '..sha)
|
||||
else
|
||||
-- the objects are zlib compressed
|
||||
local f = decompressed(path)
|
||||
|
||||
-- retrieve the type and length - <type> SP <len> \0 <data...>
|
||||
local content = read_until_nul(f)
|
||||
local typ, len = content:match('(%w+) (%d+)')
|
||||
|
||||
return f, len, typ
|
||||
end
|
||||
end
|
||||
|
||||
--- Store a new object into the repository in `objects` directory.
|
||||
-- @param data A string containing the contents of the new file.
|
||||
-- @param len The length of the data.
|
||||
-- @param type One of 'commit', 'blob', 'tree', 'tag'
|
||||
function Repo:store_object(data, len, type)
|
||||
local sha = readable_sha(object_sha(data, len, type))
|
||||
local dir = sha:sub(1,2)
|
||||
local file = sha:sub(3)
|
||||
util.make_dir(join_path(self.dir, 'objects', dir))
|
||||
local path = join_path(self.dir, 'objects', dir, file)
|
||||
local fo = assert(io.open(path, 'wb'))
|
||||
local header = type .. ' ' .. len .. '\0'
|
||||
local compressed = deflate()(header .. data, "finish")
|
||||
fo:write(compressed)
|
||||
fo:close()
|
||||
end
|
||||
|
||||
local function resolvetag(f)
|
||||
local tag
|
||||
local line = f:read()
|
||||
while line do
|
||||
tag = line:match('^object (%x+)$')
|
||||
if tag then break end
|
||||
line = f:read()
|
||||
end
|
||||
f:close()
|
||||
return tag
|
||||
end
|
||||
|
||||
function Repo:commit(sha)
|
||||
local f, len, typ = self:raw_object(sha)
|
||||
while typ == 'tag' do
|
||||
sha = assert(resolvetag(f), 'could not parse tag for '..readable_sha(sha))
|
||||
f, len, typ = self:raw_object(sha)
|
||||
end
|
||||
assert(typ == 'commit', string.format('%s (%s) is not a commit', sha, typ))
|
||||
|
||||
local commit = { id = sha, repo = self, stored = true, parents = {} }
|
||||
repeat
|
||||
local line = f:read()
|
||||
if not line then break end
|
||||
|
||||
local space = line:find(' ') or 0
|
||||
local word = line:sub(1, space - 1)
|
||||
local afterSpace = line:sub(space + 1)
|
||||
|
||||
if word == 'tree' then
|
||||
commit.tree_sha = afterSpace
|
||||
elseif word == 'parent' then
|
||||
table.insert(commit.parents, afterSpace)
|
||||
elseif word == 'author' then
|
||||
commit.author = afterSpace
|
||||
elseif word == 'committer' then
|
||||
commit.committer = afterSpace
|
||||
elseif commit.message then
|
||||
table.insert(commit.message, line)
|
||||
elseif line == '' then
|
||||
commit.message = {}
|
||||
end
|
||||
until false -- ends with break
|
||||
f:close()
|
||||
|
||||
commit.message = table.concat(commit.message, '\n')
|
||||
|
||||
return setmetatable(commit, objects.Commit)
|
||||
end
|
||||
|
||||
function Repo:tree(sha)
|
||||
local f, len, typ = self:raw_object(sha)
|
||||
assert(typ == 'tree', string.format('%s (%s) is not a tree', sha, typ))
|
||||
|
||||
local tree = { id = sha, repo = self, stored = true, _entries = {} }
|
||||
|
||||
while true do
|
||||
local info = read_until_nul(f)
|
||||
if not info then break end
|
||||
local entry_sha = to_hex(f:read(20))
|
||||
local mode, name = info:match('^(%d+)%s(.+)$')
|
||||
local entry_type = 'blob'
|
||||
if mode == '40000' then
|
||||
entry_type = 'tree'
|
||||
elseif mode == '160000' then
|
||||
entry_type = 'commit'
|
||||
end
|
||||
tree._entries[name] = { mode = mode, id = entry_sha, type = entry_type }
|
||||
end
|
||||
|
||||
f:close()
|
||||
|
||||
return setmetatable(tree, objects.Tree)
|
||||
end
|
||||
|
||||
-- retrieves a Blob
|
||||
function Repo:blob(sha)
|
||||
local f, len, typ = self:raw_object(sha)
|
||||
f:close() -- can be reopened in Blob:content()
|
||||
|
||||
assert(typ == 'blob', string.format('%s (%s) is not a blob', sha, typ))
|
||||
return setmetatable({
|
||||
id = sha,
|
||||
len = len,
|
||||
repo = self,
|
||||
stored = true }, objects.Blob)
|
||||
end
|
||||
|
||||
function Repo:head()
|
||||
return self:commit(self.refs.HEAD)
|
||||
end
|
||||
|
||||
function Repo:has_object(sha)
|
||||
local dir = sha:sub(1,2)
|
||||
local file = sha:sub(3)
|
||||
local path = join_path(self.dir, 'objects', dir, file)
|
||||
|
||||
if lfs.attributes(path, 'size') then return true end
|
||||
|
||||
for _, pack in ipairs(self.packs) do
|
||||
local has = pack:has_object(sha)
|
||||
if has then return true end
|
||||
end
|
||||
|
||||
return false
|
||||
end
|
||||
|
||||
function Repo:checkout(sha, target)
|
||||
if not target then target = self.workDir end
|
||||
assert(target, 'target directory not specified')
|
||||
|
||||
local commit = self:commit(sha)
|
||||
commit:checkout(target)
|
||||
|
||||
-- if the repo was checked out using the deepen command (one level of history only)
|
||||
-- mark the commit's parent as shalow, that is it has no history
|
||||
if self.isShallow then
|
||||
-- if it has a parent, mark it shallow
|
||||
if commit.parents[1] then
|
||||
local f = assert(io.open(self.dir .. '/shallow', "w"))
|
||||
f:write(commit.parents[1], '\n')
|
||||
f:close()
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function Repo:close()
|
||||
for _, pack in ipairs(self.packs) do
|
||||
pack:close()
|
||||
end
|
||||
end
|
||||
|
||||
function create(dir)
|
||||
if not dir:match('%.git.?$') then
|
||||
dir = join_path(dir, '.git')
|
||||
end
|
||||
|
||||
util.make_dir(dir)
|
||||
util.make_dir(dir .. '/branches')
|
||||
util.make_dir(dir .. '/hooks')
|
||||
util.make_dir(dir .. '/info')
|
||||
util.make_dir(dir .. '/objects/info')
|
||||
util.make_dir(dir .. '/objects/pack')
|
||||
util.make_dir(dir .. '/refs/heads')
|
||||
util.make_dir(dir .. '/refs/tags')
|
||||
util.make_dir(dir .. '/refs/remotes')
|
||||
|
||||
do
|
||||
local f = assert(io.open(dir .. "/HEAD", "w"))
|
||||
f:write("ref: refs/heads/master\n")
|
||||
f:close()
|
||||
end
|
||||
|
||||
local refs = {}
|
||||
local packs = {}
|
||||
|
||||
return setmetatable({
|
||||
dir = dir,
|
||||
refs = refs,
|
||||
packs = packs,
|
||||
}, Repo)
|
||||
end
|
||||
|
||||
-- opens a repository located in working directory `dir` or directly a .git repo
|
||||
function open(dir)
|
||||
local workDir = dir
|
||||
if not dir:match('%.git.?$') then
|
||||
dir = join_path(dir, '.git')
|
||||
else
|
||||
workDir = nil -- no working directory, working directly with repo
|
||||
end
|
||||
|
||||
local refs = {}
|
||||
for _,d in ipairs{'refs/heads', 'refs/tags'} do
|
||||
for fn in lfs.dir(join_path(dir, d)) do
|
||||
if fn ~= '.' and fn ~= '..' then
|
||||
local path = join_path(dir, d, fn)
|
||||
local f = assert(io.open(path), 'rb')
|
||||
local ref = f:read()
|
||||
refs[join_path(d, fn)] = ref
|
||||
f:close()
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local packs = {}
|
||||
for fn in lfs.dir(join_path(dir, 'objects/pack')) do
|
||||
if fn:match('%.pack$') then
|
||||
local path = join_path(dir, 'objects/pack', fn)
|
||||
table.insert(packs, pack.open(path))
|
||||
end
|
||||
end
|
||||
|
||||
local head = io.open(join_path(dir, 'HEAD'), 'rb')
|
||||
if head then
|
||||
local src = head:read()
|
||||
local HEAD = src:match('ref: (.-)$')
|
||||
refs.HEAD = refs[HEAD]
|
||||
head:close()
|
||||
end
|
||||
|
||||
return setmetatable({
|
||||
dir = dir,
|
||||
workDir = workDir,
|
||||
refs = refs,
|
||||
packs = packs,
|
||||
}, Repo)
|
||||
end
|
||||
|
||||
return Repo
|
||||
233
lualibs/git/util.lua
Normal file
233
lualibs/git/util.lua
Normal file
@@ -0,0 +1,233 @@
|
||||
local lfs = require 'lfs'
|
||||
local core = require 'git.core'
|
||||
local deflate = core.deflate
|
||||
local inflate = core.inflate
|
||||
local sha = core.sha
|
||||
|
||||
module(..., package.seeall)
|
||||
|
||||
local BUF_SIZE = 4096
|
||||
|
||||
local dirsep = package.config:sub(1,1)
|
||||
|
||||
-- replaces '/' path separators on Windows with the correct ones ('\\')
|
||||
function correct_separators(path)
|
||||
return path:gsub('/', dirsep)
|
||||
end
|
||||
|
||||
-- joins several path components into a single path, uses system-specific directory
|
||||
-- separator, cleans input, i.e. join_path('a/', 'b', 'c/') => 'a/b/c'
|
||||
function join_path(...)
|
||||
local n = select('#', ...)
|
||||
local args = {...}
|
||||
for i=1,n do
|
||||
args[i] = args[i]:gsub(dirsep..'?$', '')
|
||||
end
|
||||
return table.concat(args, dirsep, 1, n)
|
||||
end
|
||||
|
||||
-- Return the path with the all occurences of '/.' or '\.' (representing
|
||||
-- the current directory) removed.
|
||||
local function remove_curr_dir_dots(path)
|
||||
while path:match(dirsep .. "%." .. dirsep) do -- match("/%./")
|
||||
path = path:gsub(dirsep .. "%." .. dirsep, dirsep) -- gsub("/%./", "/")
|
||||
end
|
||||
return path:gsub(dirsep .. "%.$", "") -- gsub("/%.$", "")
|
||||
end
|
||||
|
||||
-- Return whether the path is a root.
|
||||
local function is_root(path)
|
||||
return path:find("^[%u%U.]?:?[/\\]$")
|
||||
end
|
||||
|
||||
-- Return the path with the unnecessary trailing separator removed.
|
||||
local function remove_trailing(path)
|
||||
if path:sub(-1) == dirsep and not is_root(path) then path = path:sub(1,-2) end
|
||||
return path
|
||||
end
|
||||
|
||||
-- Extract file or directory name from its path.
|
||||
local function extract_name(path)
|
||||
if is_root(path) then return path end
|
||||
|
||||
path = remove_trailing(path)
|
||||
path = path:gsub("^.*" .. dirsep, "")
|
||||
return path
|
||||
end
|
||||
|
||||
-- Return the string 'str', with all magic (pattern) characters escaped.
|
||||
local function escape_magic(str)
|
||||
local escaped = str:gsub('[%-%.%+%[%]%(%)%^%%%?%*%^%$]','%%%1')
|
||||
return escaped
|
||||
end
|
||||
|
||||
-- Return parent directory of the 'path' or nil if there's no parent directory.
|
||||
-- If 'path' is a path to file, return the directory the file is in.
|
||||
function parent_dir(path)
|
||||
path = remove_curr_dir_dots(path)
|
||||
path = remove_trailing(path)
|
||||
|
||||
local dir = path:gsub(escape_magic(extract_name(path)) .. "$", "")
|
||||
if dir == "" then
|
||||
return nil
|
||||
else
|
||||
return remove_trailing(dir)
|
||||
end
|
||||
end
|
||||
|
||||
-- Make a new directory, making also all of its parent directories that doesn't exist.
|
||||
function make_dir(path)
|
||||
if lfs.attributes(path) then
|
||||
return true
|
||||
else
|
||||
local par_dir = parent_dir(path)
|
||||
if par_dir then
|
||||
assert(make_dir(par_dir))
|
||||
end
|
||||
return lfs.mkdir(path)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
-- Reader class
|
||||
-- adapted from Penlight: https://raw.github.com/stevedonovan/Penlight/master/lua/pl/stringio.lua
|
||||
|
||||
local SR = {}
|
||||
SR.__index = SR
|
||||
|
||||
function SR:_read(fmt)
|
||||
local i,str = self.i,self.str
|
||||
local sz = #str
|
||||
if i > sz then return nil, "past end of file" end
|
||||
local res
|
||||
if fmt == '*l' or fmt == '*L' then
|
||||
local idx = str:find('\n',i) or (sz+1)
|
||||
res = str:sub(i,fmt == '*l' and idx-1 or idx)
|
||||
self.i = idx+1
|
||||
elseif fmt == '*a' then
|
||||
res = str:sub(i)
|
||||
self.i = sz+1
|
||||
elseif fmt == '*n' then
|
||||
local _,i2,i2,idx
|
||||
_,idx = str:find ('%s*%d+',i)
|
||||
_,i2 = str:find ('^%.%d+',idx+1)
|
||||
if i2 then idx = i2 end
|
||||
_,i2 = str:find ('^[eE][%+%-]*%d+',idx+1)
|
||||
if i2 then idx = i2 end
|
||||
local val = str:sub(i,idx)
|
||||
res = tonumber(val)
|
||||
self.i = idx+1
|
||||
elseif type(fmt) == 'number' then
|
||||
res = str:sub(i,i+fmt-1)
|
||||
self.i = i + fmt
|
||||
else
|
||||
error("bad read format",2)
|
||||
end
|
||||
return res
|
||||
end
|
||||
|
||||
function SR:read(...)
|
||||
if select('#',...) == 0 then
|
||||
return self:_read('*l')
|
||||
else
|
||||
local res, fmts = {},{...}
|
||||
for i = 1, #fmts do
|
||||
res[i] = self:_read(fmts[i])
|
||||
end
|
||||
return unpack(res)
|
||||
end
|
||||
end
|
||||
|
||||
function SR:seek(whence,offset)
|
||||
local base
|
||||
whence = whence or 'cur'
|
||||
offset = offset or 0
|
||||
if whence == 'set' then
|
||||
base = 1
|
||||
elseif whence == 'cur' then
|
||||
base = self.i
|
||||
elseif whence == 'end' then
|
||||
base = #self.str
|
||||
end
|
||||
self.i = base + offset
|
||||
return self.i
|
||||
end
|
||||
|
||||
function SR:close() -- for compatibility only
|
||||
end
|
||||
|
||||
--- create a file-like object for reading from a given string.
|
||||
-- @param s The input string.
|
||||
function reader(s)
|
||||
return setmetatable({str=s,i=1},SR)
|
||||
end
|
||||
|
||||
|
||||
-- decompress the file and return a handle to temporary uncompressed file
|
||||
function decompressed(path)
|
||||
local fi = assert(io.open(path, 'rb'))
|
||||
local result = {}
|
||||
|
||||
local z = inflate()
|
||||
repeat
|
||||
local str = fi:read(BUF_SIZE)
|
||||
local data = z(str)
|
||||
if type(data) == 'string' then
|
||||
result[#result+1] = data
|
||||
else print('!!!', data) end
|
||||
until not str
|
||||
fi:close()
|
||||
|
||||
return reader(table.concat(result))
|
||||
end
|
||||
|
||||
-- reads until the byte \0, consumes it and returns the string up to the \0
|
||||
function read_until_nul(f)
|
||||
local t = {}
|
||||
repeat
|
||||
local c = f:read(1)
|
||||
if c and c ~= '\0' then t[#t+1] = c end
|
||||
until not c or c == '\0'
|
||||
if #t > 0 then
|
||||
return table.concat(t)
|
||||
else
|
||||
return nil
|
||||
end
|
||||
end
|
||||
|
||||
-- converts a string to lowercase hex
|
||||
function to_hex(s)
|
||||
return (s:gsub('.', function(c)
|
||||
return string.format('%02x', string.byte(c))
|
||||
end))
|
||||
end
|
||||
|
||||
-- converts a string from hex to binary
|
||||
function from_hex(s)
|
||||
return (s:gsub('..', function(cc)
|
||||
return string.char(tonumber(cc, 16))
|
||||
end))
|
||||
end
|
||||
|
||||
-- always returns readable (hex) hash
|
||||
function readable_sha(s)
|
||||
if #s ~= 40 then return to_hex(s)
|
||||
else return s end
|
||||
end
|
||||
|
||||
-- always returns binary hash
|
||||
function binary_sha(s)
|
||||
if #s ~= 20 then return from_hex(s)
|
||||
else return s end
|
||||
end
|
||||
|
||||
function object_sha(data, len, type)
|
||||
local header = type .. ' ' .. len .. '\0'
|
||||
local res = sha(header .. data)
|
||||
return res
|
||||
end
|
||||
|
||||
function deflate(data)
|
||||
local c = deflate()
|
||||
return c(data, "finish")
|
||||
end
|
||||
@@ -83,6 +83,7 @@ end
|
||||
|
||||
local sym = newset("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_")
|
||||
local dig = newset('0123456789')
|
||||
local name = "([_A-Za-z][_A-Za-z0-9]*)"
|
||||
local op = newset('=~<>.+-*/%^#=<>;:,.{}[]()')
|
||||
|
||||
op['=='] = true
|
||||
@@ -90,11 +91,14 @@ op['<='] = true
|
||||
op['>='] = true
|
||||
op['~='] = true
|
||||
op['..'] = true
|
||||
op['<<'] = true
|
||||
op['>>'] = true
|
||||
op['//'] = true
|
||||
|
||||
local is_keyword = qws[[
|
||||
and break do else elseif end false for function if
|
||||
in local nil not or repeat return
|
||||
then true until while]]
|
||||
then true until while goto]]
|
||||
|
||||
function M.lex(code, f, pos)
|
||||
local pos = pos or 1
|
||||
@@ -106,7 +110,7 @@ function M.lex(code, f, pos)
|
||||
pos = p2
|
||||
|
||||
if sym[n1] then
|
||||
local tok = code:match('^([_A-Za-z][_A-Za-z0-9]*)', pos)
|
||||
local tok = code:match('^'..name, pos)
|
||||
assert(tok)
|
||||
if is_keyword[tok] then
|
||||
f('Keyword', tok, pos)
|
||||
@@ -119,6 +123,15 @@ function M.lex(code, f, pos)
|
||||
assert(tok)
|
||||
f('Comment', tok, pos)
|
||||
pos = pos2
|
||||
elseif n2 == '::' then
|
||||
local tok = code:match('^(::%s*'..name..'%s*::)', pos)
|
||||
if tok then
|
||||
f('Label', tok, pos)
|
||||
pos = pos + #tok
|
||||
else
|
||||
f('Unknown', code:sub(pos, pos+1), pos) -- unterminated label
|
||||
pos = pos + 2
|
||||
end
|
||||
elseif n1 == '\'' or n1 == '\"' or n2 == '[[' or n2 == '[=' then
|
||||
local tok = match_string(code, pos)
|
||||
if tok then
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
|
||||
local PARSE = {}
|
||||
|
||||
local unpack = table.unpack or unpack
|
||||
local LEX = require 'lua_lexer_loose'
|
||||
|
||||
local function warn(message, position)
|
||||
@@ -31,6 +32,7 @@ end
|
||||
'Scope', opt - beginning of scope block.
|
||||
'EndScope', nil, lineinfo - end of scope block.
|
||||
'FunctionCall', name, lineinfo - function call (in addition to other events).
|
||||
'Function', name, lineinfo - function definition.
|
||||
--]]
|
||||
function PARSE.parse_scope(lx, f, level)
|
||||
local cprev = {tag='Eof'}
|
||||
@@ -39,36 +41,50 @@ function PARSE.parse_scope(lx, f, level)
|
||||
local scopes = {{}}
|
||||
for l = 2, (level or 1) do scopes[l] = {} end
|
||||
|
||||
local function scope_begin(opt, lineinfo)
|
||||
local function scope_begin(opt, lineinfo, nobreak)
|
||||
scopes[#scopes+1] = {}
|
||||
f('Scope', opt, lineinfo)
|
||||
f('Scope', opt, lineinfo, nobreak)
|
||||
end
|
||||
local function scope_end(opt, lineinfo)
|
||||
if #scopes <= 1 then
|
||||
local scope = #scopes
|
||||
if scope <= 1 then
|
||||
warn("'end' without opening block", lineinfo)
|
||||
else
|
||||
table.remove(scopes)
|
||||
end
|
||||
f('EndScope', opt, lineinfo)
|
||||
local inside_local = false
|
||||
for scope = scope-1, 1, -1 do
|
||||
if scopes[scope].inside_local then inside_local = true; break end
|
||||
end
|
||||
f('EndScope', opt, lineinfo, inside_local)
|
||||
end
|
||||
|
||||
local function parse_function_list(has_self)
|
||||
local function parse_function_list(has_self, name, pos)
|
||||
local c = lx:next(); assert(c[1] == '(')
|
||||
f('Statement', c[1], c.lineinfo) -- generate Statement for function definition
|
||||
scope_begin(c[1], c.lineinfo)
|
||||
f('Statement', c[1], c.lineinfo, true) -- generate Statement for function definition
|
||||
scope_begin(c[1], c.lineinfo, true)
|
||||
|
||||
local vars = {} -- accumulate vars (if any) to send after 'Function'
|
||||
if has_self then
|
||||
local lineinfo = c.lineinfo+1 -- zero size
|
||||
f('VarSelf', 'self', lineinfo)
|
||||
table.insert(vars, {'VarSelf', 'self', lineinfo, true})
|
||||
end
|
||||
while lx:peek().tag == 'Id' do
|
||||
while true do
|
||||
local n = lx:peek()
|
||||
if not (n.tag == 'Id' or n.tag == 'Keyword' and n[1] == '...') then break end
|
||||
local c = lx:next()
|
||||
f('Var', c[1], c.lineinfo)
|
||||
if c.tag == 'Id' then table.insert(vars, {'Var', c[1], c.lineinfo, true}) end
|
||||
-- ignore '...' in this case
|
||||
if lx:peek()[1] == ',' then lx:next() end
|
||||
end
|
||||
if lx:peek()[1] == ')' then lx:next() end
|
||||
if lx:peek()[1] == ')' then
|
||||
lx:next()
|
||||
f('Function', name, pos or c.lineinfo, true)
|
||||
end
|
||||
for _, var in ipairs(vars) do f(unpack(var)) end
|
||||
end
|
||||
|
||||
while 1 do
|
||||
while true do
|
||||
local c = lx:next()
|
||||
|
||||
-- Detect end of previous statement
|
||||
@@ -87,7 +103,10 @@ function PARSE.parse_scope(lx, f, level)
|
||||
cprev.tag == 'Number' or cprev.tag == 'String')
|
||||
then
|
||||
if scopes[#scopes].inside_until then scope_end(nil, c.lineinfo) end
|
||||
f('Statement', c[1], c.lineinfo)
|
||||
local scope = #scopes
|
||||
if not scopes[scope].inside_table then scopes[scope].inside_local = nil end
|
||||
f('Statement', c[1], c.lineinfo,
|
||||
scopes[scope].inside_local or c[1] == 'local' or c[1] == 'function' or c[1] == 'end')
|
||||
end
|
||||
|
||||
if c.tag == 'Eof' then break end
|
||||
@@ -100,42 +119,48 @@ function PARSE.parse_scope(lx, f, level)
|
||||
local c = lx:next(); assert(c[1] == 'function')
|
||||
if lx:peek().tag == 'Id' then
|
||||
c = lx:next()
|
||||
f('Var', c[1], c.lineinfo)
|
||||
if lx:peek()[1] == '(' then parse_function_list() end
|
||||
f('Var', c[1], c.lineinfo, true)
|
||||
if lx:peek()[1] == '(' then parse_function_list(nil, c[1], c.lineinfo) end
|
||||
end
|
||||
elseif c[1] == 'function' then
|
||||
if lx:peek()[1] == '(' then -- inline function
|
||||
parse_function_list()
|
||||
elseif lx:peek().tag == 'Id' then -- function definition statement
|
||||
c = lx:next(); assert(c.tag == 'Id')
|
||||
f('Id', c[1], c.lineinfo)
|
||||
local name = c[1]
|
||||
local pos = c.lineinfo
|
||||
f('Id', name, pos, true)
|
||||
local has_self
|
||||
while lx:peek()[1] ~= '(' and lx:peek().tag ~= 'Eof' do
|
||||
c = lx:next()
|
||||
name = name .. c[1]
|
||||
if c.tag == 'Id' then
|
||||
f('String', c[1], c.lineinfo)
|
||||
f('String', c[1], c.lineinfo, true)
|
||||
elseif c.tag == 'Keyword' and c[1] == ':' then
|
||||
has_self = true
|
||||
end
|
||||
end
|
||||
if lx:peek()[1] == '(' then parse_function_list(has_self) end
|
||||
if lx:peek()[1] == '(' then parse_function_list(has_self, name, pos) end
|
||||
end
|
||||
elseif c[1] == 'local' and lx:peek().tag == 'Id' then
|
||||
scopes[#scopes].inside_local = true
|
||||
c = lx:next()
|
||||
f('VarNext', c[1], c.lineinfo)
|
||||
f('VarNext', c[1], c.lineinfo, true)
|
||||
while lx:peek().tag == 'Keyword' and lx:peek()[1] == ',' do
|
||||
c = lx:next(); if lx:peek().tag ~= 'Id' then break end
|
||||
c = lx:next()
|
||||
f('VarNext', c[1], c.lineinfo)
|
||||
f('VarNext', c[1], c.lineinfo, true)
|
||||
end
|
||||
elseif c[1] == 'for' and lx:peek().tag == 'Id' then
|
||||
c = lx:next()
|
||||
f('VarInside', c[1], c.lineinfo)
|
||||
while lx:peek().tag == 'Keyword' and lx:peek()[1] == ',' do
|
||||
c = lx:next()
|
||||
f('VarInside', c[1], c.lineinfo, true)
|
||||
while lx:peek().tag == 'Keyword' and lx:peek()[1] == ',' do
|
||||
c = lx:next(); if lx:peek().tag ~= 'Id' then break end
|
||||
c = lx:next()
|
||||
f('VarInside', c[1], c.lineinfo)
|
||||
f('VarInside', c[1], c.lineinfo, true)
|
||||
end
|
||||
elseif c[1] == 'goto' and lx:peek().tag == 'Id' then
|
||||
lx:next()
|
||||
elseif c[1] == 'do' then
|
||||
scope_begin('do', c.lineinfo)
|
||||
-- note: do/while/for statement scopes all begin at 'do'.
|
||||
@@ -159,15 +184,18 @@ function PARSE.parse_scope(lx, f, level)
|
||||
local cnext = lx:peek()
|
||||
if cnext.tag == 'Keyword' and (cnext[1] == '(' or cnext[1] == '{')
|
||||
or cnext.tag == 'String' then
|
||||
f('FunctionCall', c[1], c.lineinfo)
|
||||
f('FunctionCall', c[1], c.lineinfo, scopes[#scopes].inside_local ~= nil)
|
||||
end
|
||||
if scopes[#scopes].inside_table and cnext.tag == 'Keyword' and cnext[1] == '=' then
|
||||
local scope = #scopes
|
||||
local inside_local = scopes[scope].inside_local ~= nil
|
||||
if (scopes[scope].inside_table or cprev[1] == ',')
|
||||
and cnext.tag == 'Keyword' and cnext[1] == '=' then
|
||||
-- table field
|
||||
f('String', c[1], c.lineinfo)
|
||||
f('String', c[1], c.lineinfo, inside_local)
|
||||
elseif cprev.tag == 'Keyword' and (cprev[1] == ':' or cprev[1] == '.') then
|
||||
f('String', c[1], c.lineinfo)
|
||||
f('String', c[1], c.lineinfo, true)
|
||||
else
|
||||
f('Id', c[1], c.lineinfo)
|
||||
f('Id', c[1], c.lineinfo, inside_local)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -203,7 +231,7 @@ function PARSE.parse_scope_resolve(lx, f, vars)
|
||||
vars = vars or newscope({[0] = 0}, nil, 1)
|
||||
vars[NEXT] = false -- vars that come into scope upon next statement
|
||||
vars[INSIDE] = false -- vars that come into scope upon entering block
|
||||
PARSE.parse_scope(lx, function(op, name, lineinfo)
|
||||
PARSE.parse_scope(lx, function(op, name, lineinfo, nobreak)
|
||||
-- in some (rare) cases VarNext can follow Statement event (which copies
|
||||
-- vars[NEXT]). This may cause vars[0] to be `nil`, so default to 1.
|
||||
local var = op:find("^Var") and
|
||||
@@ -226,9 +254,8 @@ function PARSE.parse_scope_resolve(lx, f, vars)
|
||||
else
|
||||
vars = mt.__index
|
||||
end
|
||||
elseif op == 'Id' then
|
||||
-- Just make callback
|
||||
elseif op == 'String' or op == 'FunctionCall' then
|
||||
elseif op == 'Id'
|
||||
or op == 'String' or op == 'FunctionCall' or op == 'Function' then
|
||||
-- Just make callback
|
||||
elseif op == 'Statement' then -- beginning of statement
|
||||
-- Apply vars that come into scope upon beginning of statement.
|
||||
@@ -240,7 +267,7 @@ function PARSE.parse_scope_resolve(lx, f, vars)
|
||||
else
|
||||
assert(false)
|
||||
end
|
||||
f(op, name, lineinfo, vars)
|
||||
f(op, name, lineinfo, vars, nobreak)
|
||||
end, vars[0])
|
||||
end
|
||||
|
||||
|
||||
746
lualibs/luadist.lua
Normal file
746
lualibs/luadist.lua
Normal file
@@ -0,0 +1,746 @@
|
||||
#!/usr/bin/env lua
|
||||
|
||||
-- Command line interface to LuaDist-git.
|
||||
|
||||
local dist = require "dist"
|
||||
local utils = require "dist.utils"
|
||||
local depends = require "dist.depends"
|
||||
local package = require "dist.package"
|
||||
local mf = require "dist.manifest"
|
||||
local cfg = require "dist.config"
|
||||
local sys = require "dist.sys"
|
||||
|
||||
-- CLI commands of Luadist.
|
||||
local commands
|
||||
commands = {
|
||||
|
||||
-- Print help for this command line interface.
|
||||
["help"] = {
|
||||
help = [[
|
||||
Usage: luadist [DEPLOYMENT_DIRECTORY] <COMMAND> [ARGUMENTS...] [-VARIABLES...]
|
||||
|
||||
Commands:
|
||||
|
||||
help - print this help
|
||||
install - install modules
|
||||
remove - remove modules
|
||||
refresh - update information about modules in repositories
|
||||
list - list installed modules
|
||||
info - show information about modules
|
||||
search - search repositories for modules
|
||||
fetch - download modules
|
||||
make - manually deploy modules from local paths
|
||||
upload - upload installed modules to their repositories
|
||||
tree - print dependency tree of a module
|
||||
selftest - run the selftest of LuaDist
|
||||
|
||||
To get help on specific command, run:
|
||||
|
||||
luadist help <COMMAND>
|
||||
]],
|
||||
run = function (deploy_dir, help_item)
|
||||
deploy_dir = deploy_dir or dist.get_deploy_dir()
|
||||
help_item = help_item or {}
|
||||
assert(type(deploy_dir) == "string", "luadist.help: Argument 'deploy_dir' is not a string.")
|
||||
assert(type(help_item) == "table", "luadist.help: Argument 'help_item' is not a table.")
|
||||
deploy_dir = sys.abs_path(deploy_dir)
|
||||
|
||||
if not help_item or not commands[help_item[1]] then
|
||||
help_item = "help"
|
||||
else
|
||||
help_item = help_item[1]
|
||||
end
|
||||
|
||||
print_info()
|
||||
print(commands[help_item].help)
|
||||
return 0
|
||||
end
|
||||
},
|
||||
|
||||
-- Install modules.
|
||||
["install"] = {
|
||||
help = [[
|
||||
Usage: luadist [DEPLOYMENT_DIRECTORY] install MODULES... [-VARIABLES...]
|
||||
|
||||
The 'install' command will install specified MODULES to
|
||||
DEPLOYMENT_DIRECTORY. LuaDist will also automatically resolve, download
|
||||
and install all dependencies.
|
||||
|
||||
If DEPLOYMENT_DIRECTORY is not specified, the deployment directory
|
||||
of LuaDist is used.
|
||||
|
||||
You can use * (an asterisk sign) in the name of the module as a wildcard
|
||||
with the meaning 'any symbols' (in most shells, the module name then must
|
||||
be quoted to prevent the expansion of asterisk by the shell itself).
|
||||
|
||||
Optional CMake VARIABLES in -D format (e.g. -Dvariable=value) or LuaDist
|
||||
configuration VARIABLES (e.g. -variable=value) can be specified.
|
||||
|
||||
The -simulate configuration option makes LuaDist only to simulate the
|
||||
installation of modules (no modules will be really installed).
|
||||
]],
|
||||
|
||||
run = function (deploy_dir, modules, cmake_variables)
|
||||
deploy_dir = deploy_dir or dist.get_deploy_dir()
|
||||
if type(modules) == "string" then modules = {modules} end
|
||||
cmake_variables = cmake_variables or {}
|
||||
assert(type(deploy_dir) == "string", "luadist.install: Argument 'deploy_dir' is not a string.")
|
||||
assert(type(modules) == "table", "luadist.install: Argument 'modules' is not a string or table.")
|
||||
assert(type(cmake_variables) == "table", "luadist.install: Argument 'cmake_variables' is not a table.")
|
||||
deploy_dir = sys.abs_path(deploy_dir)
|
||||
|
||||
if cfg.simulate then
|
||||
print("NOTE: this is just simulation.")
|
||||
end
|
||||
|
||||
if #modules == 0 then
|
||||
print("No modules to install specified.")
|
||||
return 0
|
||||
end
|
||||
|
||||
local ok, err = dist.install(modules, deploy_dir, cmake_variables)
|
||||
if not ok then
|
||||
print(err)
|
||||
os.exit(1)
|
||||
else
|
||||
print((cfg.simulate and "Simulated installation" or "Installation") .. " successful.")
|
||||
return 0
|
||||
end
|
||||
end
|
||||
},
|
||||
|
||||
-- Remove modules.
|
||||
["remove"] = {
|
||||
help = [[
|
||||
Usage: luadist [DEPLOYMENT_DIRECTORY] remove MODULES... [-VARIABLES...]
|
||||
|
||||
The 'remove' command will remove specified MODULES from
|
||||
DEPLOYMENT_DIRECTORY. If no module is specified, all modules
|
||||
will be removed.
|
||||
|
||||
If DEPLOYMENT_DIRECTORY is not specified, the deployment directory
|
||||
of LuaDist is used. If no MODULES are specified, all installed modules
|
||||
will be removed.
|
||||
|
||||
You can use * (an asterisk sign) in the name of the module as a wildcard
|
||||
with the meaning 'any symbols' (in most shells, the module name then must
|
||||
be quoted to prevent the expansion of asterisk by the shell itself).
|
||||
|
||||
Optional LuaDist configuration VARIABLES (e.g. -variable=value) can be
|
||||
specified.
|
||||
|
||||
WARNING: dependencies between modules are NOT taken into account when
|
||||
removing modules!
|
||||
]],
|
||||
|
||||
run = function (deploy_dir, modules)
|
||||
deploy_dir = deploy_dir or dist.get_deploy_dir()
|
||||
if type(modules) == "string" then modules = {modules} end
|
||||
assert(type(deploy_dir) == "string", "luadist.remove: Argument 'deploy_dir' is not a string.")
|
||||
assert(type(modules) == "table", "luadist.remove: Argument 'modules' is not a string or table.")
|
||||
deploy_dir = sys.abs_path(deploy_dir)
|
||||
|
||||
local num, err = dist.remove(modules, deploy_dir)
|
||||
if not num then
|
||||
print(err)
|
||||
os.exit(1)
|
||||
else
|
||||
print("Removed modules: " .. num)
|
||||
return 0
|
||||
end
|
||||
end
|
||||
},
|
||||
|
||||
-- Update repositories.
|
||||
["refresh"] = {
|
||||
help = [[
|
||||
Usage: luadist [DEPLOYMENT_DIRECTORY] refresh [-VARIABLES...]
|
||||
|
||||
The 'refresh' command will update information about modules in all software
|
||||
repositories of specified DEPLOYMENT_DIRECTORY. Also, the cached dependency
|
||||
manifest, built from previous installations or invocations of 'tree'
|
||||
functionality will be deleted.
|
||||
|
||||
If DEPLOYMENT_DIRECTORY is not specified, the deployment directory
|
||||
of LuaDist is used.
|
||||
|
||||
Optional LuaDist configuration VARIABLES (e.g. -variable=value) can be
|
||||
specified.
|
||||
]],
|
||||
|
||||
run = function (deploy_dir)
|
||||
deploy_dir = deploy_dir or dist.get_deploy_dir()
|
||||
assert(type(deploy_dir) == "string", "luadist.refresh: Argument 'deploy_dir' is not a string.")
|
||||
deploy_dir = sys.abs_path(deploy_dir)
|
||||
|
||||
-- TODO: should be deleting the dep_manifest decoupled from refreshing the repository info?
|
||||
-- delete cached dependency manifest
|
||||
local dep_manifest_file = sys.abs_path(sys.make_path(deploy_dir, cfg.dep_cache_file))
|
||||
local dep_mf_deleted = false
|
||||
if sys.exists(dep_manifest_file) then
|
||||
sys.delete(dep_manifest_file)
|
||||
dep_mf_deleted = true
|
||||
end
|
||||
|
||||
-- refresh repository information
|
||||
local ok, err = dist.update_manifest(deploy_dir)
|
||||
if not ok then
|
||||
print(err)
|
||||
os.exit(1)
|
||||
else
|
||||
print("Repositories successfuly updated" .. (dep_mf_deleted and " and dependency cache deleted" or "") .. ".")
|
||||
return 0
|
||||
end
|
||||
end
|
||||
},
|
||||
|
||||
-- Manually deploy modules.
|
||||
["make"] = {
|
||||
help = [[
|
||||
Usage: luadist [DEPLOYMENT_DIRECTORY] make MODULE_PATHS... [-VARIABLES...]
|
||||
|
||||
The 'make' command will manually deploy modules from specified local
|
||||
MODULE_PATHS into the DEPLOYMENT_DIRECTORY.
|
||||
|
||||
The MODULE_PATHS will be preserved. If DEPLOYMENT_DIRECTORY is not
|
||||
specified, the deployment directory of LuaDist is used.
|
||||
|
||||
Optional CMake VARIABLES in -D format (e.g. -Dvariable=value) or LuaDist
|
||||
configuration VARIABLES (e.g. -variable=value) can be specified.
|
||||
|
||||
The -simulate configuration option makes LuaDist only to simulate the
|
||||
deployment of modules (no modules will be really deployed).
|
||||
|
||||
WARNING: this command does NOT check whether the dependencies of deployed
|
||||
modules are satisfied or not!
|
||||
]],
|
||||
|
||||
run = function (deploy_dir, module_paths, cmake_variables)
|
||||
deploy_dir = deploy_dir or dist.get_deploy_dir()
|
||||
module_paths = module_paths or {}
|
||||
cmake_variables = cmake_variables or {}
|
||||
assert(type(deploy_dir) == "string", "luadist.make: Argument 'deploy_dir' is not a string.")
|
||||
assert(type(module_paths) == "table", "luadist.make: Argument 'module_paths' is not a table.")
|
||||
assert(type(cmake_variables) == "table", "luadist.make: Argument 'cmake_variables' is not a table.")
|
||||
deploy_dir = sys.abs_path(deploy_dir)
|
||||
|
||||
if cfg.simulate then
|
||||
print("NOTE: this is just simulation.")
|
||||
end
|
||||
|
||||
if #module_paths == 0 then
|
||||
print("No module paths to deploy specified.")
|
||||
return 0
|
||||
end
|
||||
|
||||
local ok, err = dist.make(deploy_dir, module_paths, cmake_variables)
|
||||
if not ok then
|
||||
print(err)
|
||||
os.exit(1)
|
||||
end
|
||||
print((cfg.simulate and "Simulated deployment" or "Deployment") .. " successful.")
|
||||
return 0
|
||||
end
|
||||
},
|
||||
|
||||
-- Download modules.
|
||||
["fetch"] = {
|
||||
help = [[
|
||||
Usage: luadist [FETCH_DIRECTORY] fetch MODULES... [-VARIABLES...]
|
||||
|
||||
The 'fetch' command will download specified MODULES to the FETCH_DIRECTORY.
|
||||
|
||||
If no FETCH_DIRECTORY is specified, the temporary directory of LuaDist
|
||||
deployment directory (i.e. ']] .. cfg.temp_dir .. [[') is used.
|
||||
If the version is not specified in module name, the most recent version
|
||||
available will be downloaded.
|
||||
|
||||
Optional LuaDist configuration VARIABLES (e.g. -variable=value) can be
|
||||
specified.
|
||||
]],
|
||||
|
||||
run = function (fetch_dir, modules)
|
||||
fetch_dir = fetch_dir or dist.get_deploy_dir()
|
||||
modules = modules or {}
|
||||
assert(type(fetch_dir) == "string", "luadist.fetch: Argument 'fetch_dir' is not a string.")
|
||||
assert(type(modules) == "table", "luadist.fetch: Argument 'modules' is not a table.")
|
||||
fetch_dir = sys.abs_path(fetch_dir)
|
||||
|
||||
-- if the default parameter (i.e. deploy_dir) is passed, use the default temp_dir
|
||||
if fetch_dir == dist.get_deploy_dir() then
|
||||
fetch_dir = sys.make_path(fetch_dir, cfg.temp_dir)
|
||||
end
|
||||
|
||||
if #modules == 0 then
|
||||
print("No modules to download specified.")
|
||||
return 0
|
||||
end
|
||||
|
||||
local ok, err = dist.fetch(modules, fetch_dir)
|
||||
if not ok then
|
||||
print(err)
|
||||
os.exit(1)
|
||||
else
|
||||
print("Modules successfuly downloaded to '" .. fetch_dir .. "'.")
|
||||
return 0
|
||||
end
|
||||
end
|
||||
},
|
||||
|
||||
-- Upload modules.
|
||||
["upload"] = {
|
||||
help = [[
|
||||
Usage: luadist [DEPLOYMENT_DIRECTORY] upload MODULES... [-VARIABLES...]
|
||||
|
||||
The 'upload' command will upload the binary versions of specified MODULES,
|
||||
installed in the DEPLOYMENT_DIRECTORY, to their LuaDist repositories.
|
||||
|
||||
Base url of repositories is given by configuration variable 'upload_url'
|
||||
(by default ']] .. cfg.upload_url .. [[') which you can change.
|
||||
E.g.: Binary version of module 'lua', installed in DEPLOYMENT_DIRECTORY,
|
||||
will now be uploaded to repository ']] .. cfg.upload_url .. [[lua.git'.
|
||||
|
||||
Organization of uploaded modules and their repositories is subject
|
||||
to the conventions described in more detail in the source code
|
||||
of the 'dist.upload_modules()' function (file 'dist/init.lua').
|
||||
|
||||
If DEPLOYMENT_DIRECTORY is not specified, the deployment directory
|
||||
of LuaDist is used. If no MODULES are specified, all installed modules
|
||||
will be uploaded.
|
||||
|
||||
You can use * (an asterisk sign) in the name of the module as a wildcard
|
||||
with the meaning 'any symbols' (in most shells, the module name then must
|
||||
be quoted to prevent the expansion of asterisk by the shell itself).
|
||||
|
||||
Optional LuaDist configuration VARIABLES (e.g. -variable=value) can be
|
||||
specified.
|
||||
]],
|
||||
|
||||
run = function (deploy_dir, modules)
|
||||
-- check if we have git
|
||||
local ok = utils.system_dependency_available("git", "git --version")
|
||||
if not ok then os.exit(1) end
|
||||
|
||||
deploy_dir = deploy_dir or dist.get_deploy_dir()
|
||||
if type(modules) == "string" then modules = {modules} end
|
||||
assert(type(deploy_dir) == "string", "luadist.upload: Argument 'deploy_dir' is not a string.")
|
||||
assert(type(modules) == "table", "luadist.upload: Argument 'modules' is not a string or table.")
|
||||
deploy_dir = sys.abs_path(deploy_dir)
|
||||
|
||||
local num, err = dist.upload_modules(deploy_dir, modules, cfg.upload_url)
|
||||
if not num then
|
||||
print(err)
|
||||
os.exit(1)
|
||||
else
|
||||
print("Uploaded modules: " .. num)
|
||||
return 0
|
||||
end
|
||||
end
|
||||
},
|
||||
|
||||
-- List installed modules.
|
||||
["list"] = {
|
||||
help = [[
|
||||
Usage: luadist [DEPLOYMENT_DIRECTORY] list [STRINGS...] [-VARIABLES...]
|
||||
|
||||
The 'list' command will list all modules installed in specified
|
||||
DEPLOYMENT_DIRECTORY, which contain one or more optional STRINGS.
|
||||
|
||||
If DEPLOYMENT_DIRECTORY is not specified, the deployment directory
|
||||
of LuaDist is used. If STRINGS are not specified, all installed modules
|
||||
are listed.
|
||||
|
||||
Optional LuaDist configuration VARIABLES (e.g. -variable=value) can be
|
||||
specified.
|
||||
]],
|
||||
|
||||
run = function (deploy_dir, strings)
|
||||
deploy_dir = deploy_dir or dist.get_deploy_dir()
|
||||
strings = strings or {}
|
||||
assert(type(deploy_dir) == "string", "luadist.list: Argument 'deploy_dir' is not a string.")
|
||||
assert(type(strings) == "table", "luadist.list: Argument 'strings' is not a table.")
|
||||
deploy_dir = sys.abs_path(deploy_dir)
|
||||
|
||||
local deployed = dist.get_deployed(deploy_dir)
|
||||
deployed = depends.filter_packages_by_strings(deployed, strings)
|
||||
|
||||
print("\nInstalled modules:")
|
||||
print("==================\n")
|
||||
for _, pkg in pairs(deployed) do
|
||||
print(" " .. pkg.name .. "-" .. pkg.version .. "\t(" .. pkg.arch .. "-" .. pkg.type .. ")" .. (pkg.provided_by and "\t [provided by " .. pkg.provided_by .. "]" or ""))
|
||||
end
|
||||
print()
|
||||
return 0
|
||||
end
|
||||
},
|
||||
|
||||
-- Search for modules in repositories.
|
||||
["search"] = {
|
||||
help = [[
|
||||
Usage: luadist [DEPLOYMENT_DIRECTORY] search [STRINGS...] [-VARIABLES...]
|
||||
|
||||
The 'search' command will list all modules from repositories, which contain
|
||||
one or more STRINGS.
|
||||
|
||||
If no STRINGS are specified, all available modules are listed.
|
||||
|
||||
Optional LuaDist configuration VARIABLES (e.g. -variable=value) can be
|
||||
specified.
|
||||
]],
|
||||
|
||||
run = function (deploy_dir, strings)
|
||||
deploy_dir = deploy_dir or dist.get_deploy_dir()
|
||||
strings = strings or {}
|
||||
assert(type(deploy_dir) == "string", "luadist.search: Argument 'deploy_dir' is not a string.")
|
||||
assert(type(strings) == "table", "luadist.search: Argument 'strings' is not a table.")
|
||||
deploy_dir = sys.abs_path(deploy_dir)
|
||||
|
||||
local available, err = mf.get_manifest()
|
||||
if not available then
|
||||
print(err)
|
||||
os.exit(1)
|
||||
end
|
||||
|
||||
available = depends.filter_packages_by_strings(available, strings)
|
||||
available = depends.sort_by_names(available)
|
||||
|
||||
print("\nModules found:")
|
||||
print("==============\n")
|
||||
for _, pkg in pairs(available) do
|
||||
print(" " .. pkg.name)
|
||||
end
|
||||
print()
|
||||
return 0
|
||||
end
|
||||
},
|
||||
|
||||
-- Show information about modules.
|
||||
["info"] = {
|
||||
help = [[
|
||||
Usage: luadist [DEPLOYMENT_DIRECTORY] info [MODULES...] [-VARIABLES...]
|
||||
|
||||
The 'info' command shows information about specified modules from
|
||||
repositories. This command also shows whether modules are installed
|
||||
in DEPLOYMENT_DIRECTORY.
|
||||
|
||||
If no MODULES are specified, all available modules are shown.
|
||||
If DEPLOYMENT_DIRECTORY is not specified, the deployment directory
|
||||
of LuaDist is used.
|
||||
|
||||
Optional LuaDist configuration VARIABLES (e.g. -variable=value) can be
|
||||
specified.
|
||||
]],
|
||||
|
||||
run = function (deploy_dir, modules)
|
||||
deploy_dir = deploy_dir or dist.get_deploy_dir()
|
||||
modules = modules or {}
|
||||
assert(type(deploy_dir) == "string", "luadist.info: Argument 'deploy_dir' is not a string.")
|
||||
assert(type(modules) == "table", "luadist.info: Argument 'modules' is not a table.")
|
||||
deploy_dir = sys.abs_path(deploy_dir)
|
||||
|
||||
local manifest, err = mf.get_manifest()
|
||||
if not manifest then
|
||||
print(err)
|
||||
os.exit(1)
|
||||
end
|
||||
|
||||
-- if no packages specified explicitly, show just info from .gitmodules for all packages available
|
||||
if #modules == 0 then
|
||||
|
||||
modules = manifest
|
||||
modules = depends.sort_by_names(modules)
|
||||
local deployed = dist.get_deployed(deploy_dir)
|
||||
|
||||
print("")
|
||||
for _, pkg in pairs(modules) do
|
||||
print(" " .. pkg.name)
|
||||
print(" Repository url: " .. (pkg.path or "N/A"))
|
||||
print()
|
||||
end
|
||||
return 0
|
||||
|
||||
-- if some packages explicitly specified, retrieve and show detailed info about them
|
||||
else
|
||||
|
||||
if #modules > 5 then
|
||||
print("NOTE: More than 5 modules specified - operation may take a longer time.")
|
||||
end
|
||||
|
||||
local deployed = dist.get_deployed(deploy_dir)
|
||||
|
||||
for _, module in pairs(modules) do
|
||||
manifest, err = package.get_versions_info(module, manifest, deploy_dir, deployed)
|
||||
if not manifest then
|
||||
print(err)
|
||||
os.exit(1)
|
||||
end
|
||||
end
|
||||
|
||||
modules = depends.find_packages(modules, manifest)
|
||||
modules = depends.sort_by_names(modules)
|
||||
|
||||
print("")
|
||||
for _, pkg in pairs(modules) do
|
||||
print(" " .. pkg.name .. "-" .. pkg.version .. " (" .. pkg.arch .. "-" .. pkg.type ..")" .. (pkg.from_installed and " [info taken from installed version]" or ""))
|
||||
print(" Description: " .. (pkg.desc or "N/A"))
|
||||
print(" Author: " .. (pkg.author or "N/A"))
|
||||
print(" Homepage: " .. (pkg.url or "N/A"))
|
||||
print(" License: " .. (pkg.license or "N/A"))
|
||||
print(" Repository url: " .. (pkg.path or "N/A"))
|
||||
print(" Maintainer: " .. (pkg.maintainer or "N/A"))
|
||||
if pkg.provides then print(" Provides: " .. utils.table_tostring(pkg.provides)) end
|
||||
if pkg.depends then print(" Depends: " .. utils.table_tostring(pkg.depends)) end
|
||||
if pkg.conflicts then print(" Conflicts: " .. utils.table_tostring(pkg.conflicts)) end
|
||||
print(" State: " .. (depends.is_installed(pkg.name, deployed, pkg.version) and "installed" or "not installed"))
|
||||
print()
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
end
|
||||
},
|
||||
|
||||
-- Print dependency tree.
|
||||
["tree"] = {
|
||||
help = [[
|
||||
Usage: luadist [DEPLOYMENT_DIRECTORY] tree [MODULES...] [-VARIABLES...]
|
||||
|
||||
The 'tree' command prints dependency tree for specified modules.
|
||||
|
||||
If no MODULES are specified, trees for all available modules are printed.
|
||||
This information about modules is being cached in dependency manifest.
|
||||
|
||||
Optional LuaDist configuration VARIABLES (e.g. -variable=value) can be
|
||||
specified.
|
||||
]],
|
||||
|
||||
run = function (deploy_dir, modules)
|
||||
deploy_dir = deploy_dir or dist.get_deploy_dir()
|
||||
modules = modules or {}
|
||||
assert(type(deploy_dir) == "string", "luadist.info: Argument 'deploy_dir' is not a string.")
|
||||
assert(type(modules) == "table", "luadist.info: Argument 'modules' is not a table.")
|
||||
deploy_dir = sys.abs_path(deploy_dir)
|
||||
|
||||
local manifest, err = mf.get_manifest()
|
||||
if not manifest then
|
||||
print(err)
|
||||
os.exit(1)
|
||||
end
|
||||
|
||||
-- if no modules specified explicitly, assume all modules
|
||||
if #modules == 0 then modules = depends.sort_by_names(manifest) end
|
||||
print("Getting dependency information... (this may take a lot of time)")
|
||||
|
||||
for _, module in pairs(modules) do
|
||||
|
||||
-- if all modules are being queried, extract the name
|
||||
if type(module) == "table" then module = module.name end
|
||||
|
||||
local dep_manifest, err = dist.dependency_info(module, deploy_dir)
|
||||
if not dep_manifest then
|
||||
print(err)
|
||||
os.exit(1)
|
||||
else
|
||||
|
||||
-- print the dependency tree
|
||||
local heading = "Dependency tree for '" .. module .. "' (on " .. cfg.arch .. "-" .. cfg.type .. "):"
|
||||
print("\n" .. heading .. "")
|
||||
print(string.rep("=", #heading) .. "\n")
|
||||
|
||||
for _, pkg in pairs(dep_manifest) do
|
||||
|
||||
local pkg_version, pkg_tag = pkg.version, pkg.version
|
||||
if pkg.was_scm_version then
|
||||
pkg_version, pkg_tag = "scm", "HEAD"
|
||||
end
|
||||
print(" " .. pkg.name .. "-" .. pkg_version .. " (" .. pkg.path .. ", " .. pkg_tag .. ")")
|
||||
if pkg.depends then
|
||||
for _, dep in pairs(pkg.depends) do
|
||||
if type(dep) ~= "table" then
|
||||
local found = depends.sort_by_versions(depends.find_packages(dep, dep_manifest))[1]
|
||||
if not found then
|
||||
print("Could not find the dependency '" .. dep .. "' in the dependency manifest.")
|
||||
os.exit(1)
|
||||
end
|
||||
print(" * " .. found.name .. "-" .. found.version .. " (" .. found.path .. ", " .. found.version .. ")")
|
||||
end
|
||||
end
|
||||
end
|
||||
print()
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
return 0
|
||||
|
||||
end
|
||||
},
|
||||
|
||||
-- Selftest of LuaDist.
|
||||
["selftest"] = {
|
||||
help = [[
|
||||
Usage: luadist [TEST_DIRECTORY] selftest [-VARIABLES...]
|
||||
|
||||
The 'selftest' command runs tests of LuaDist, located in TEST_DIRECTORY and
|
||||
displays the results.
|
||||
|
||||
If no TEST_DIRECTORY is specified, the default test directory of LuaDist
|
||||
deployment directory (i.e. ']] .. cfg.test_dir .. [[') is used.
|
||||
|
||||
Optional LuaDist configuration VARIABLES (e.g. -variable=value) can be
|
||||
specified.
|
||||
]],
|
||||
|
||||
run = function (test_dir)
|
||||
test_dir = test_dir or dist.get_deploy_dir()
|
||||
assert(type(test_dir) == "string", "luadist.selftest: Argument 'deploy_dir' is not a string.")
|
||||
test_dir = sys.abs_path(test_dir)
|
||||
|
||||
-- if the default parameter (i.e. deploy_dir) is passed, use the default test_dir
|
||||
if test_dir == dist.get_deploy_dir() then
|
||||
test_dir = sys.make_path(test_dir, cfg.test_dir)
|
||||
end
|
||||
|
||||
-- try to get an iterator over test files and check it
|
||||
local test_iterator, err = sys.get_directory(test_dir)
|
||||
if not test_iterator then
|
||||
print("Running tests from '" .. test_dir .. "' failed: " .. err)
|
||||
os.exit(1)
|
||||
end
|
||||
|
||||
-- run the tests
|
||||
print("\nRunning tests:")
|
||||
print("==============")
|
||||
for test_file in sys.get_directory(test_dir) do
|
||||
test_file = sys.make_path(test_dir, test_file)
|
||||
if sys.is_file(test_file) then
|
||||
print()
|
||||
print(sys.extract_name(test_file) .. ":")
|
||||
dofile(test_file)
|
||||
end
|
||||
end
|
||||
print()
|
||||
return 0
|
||||
end
|
||||
},
|
||||
}
|
||||
|
||||
-- Run the functionality of LuaDist 'command' in the 'deploy_dir' with other items
|
||||
-- or settings/variables starting at 'other_idx' index of special variable 'arg'.
|
||||
local function run_command(deploy_dir, command, other_idx)
|
||||
deploy_dir = deploy_dir or dist.get_deploy_dir()
|
||||
assert(type(deploy_dir) == "string", "luadist.run_command: Argument 'deploy_dir' is not a string.")
|
||||
assert(type(command) == "string", "luadist.run_command: Argument 'command' is not a string.")
|
||||
assert(not other_idx or type(other_idx) == "number", "luadist.run_command: Argument 'other_idx' is not a number.")
|
||||
deploy_dir = sys.abs_path(deploy_dir)
|
||||
|
||||
local items = {}
|
||||
local cmake_variables = {}
|
||||
|
||||
-- parse items after the command (and LuaDist or CMake variables)
|
||||
if other_idx then
|
||||
for i = other_idx, #arg do
|
||||
|
||||
-- CMake variable
|
||||
if arg[i]:match("^%-D(.-)=(.*)$") then
|
||||
local variable, value = arg[i]:match("^%-D(.-)=(.*)$")
|
||||
cmake_variables[variable] = value
|
||||
|
||||
-- LuaDist variable
|
||||
elseif arg[i]:match("^%-(.-)=(.*)$") then
|
||||
local variable, value = arg[i]:match("^%-(.-)=(.*)$")
|
||||
apply_settings(variable, value)
|
||||
|
||||
-- LuaDist boolean variable with implicit 'true' value
|
||||
elseif arg[i]:match("^%-(.-)$") then
|
||||
local variable, value = arg[i]:match("^%-(.-)$")
|
||||
apply_settings(variable, "true")
|
||||
|
||||
-- not a LuaDist or CMake variable
|
||||
else
|
||||
table.insert(items, arg[i])
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- run the required LuaDist functionality
|
||||
return commands[command].run(sys.abs_path(deploy_dir), items, cmake_variables)
|
||||
end
|
||||
|
||||
-- Print information about Luadist (version, license, etc.).
|
||||
function print_info()
|
||||
print([[
|
||||
LuaDist-git ]].. cfg.version .. [[ - Lua package manager for the LuaDist deployment system.
|
||||
Released under the MIT License. See https://github.com/luadist/luadist-git
|
||||
]])
|
||||
return 0
|
||||
end
|
||||
|
||||
-- Convenience function for printing the main luadist help.
|
||||
function print_help()
|
||||
return run_command(nil, "help")
|
||||
end
|
||||
|
||||
-- Set the LuaDist 'variable' to the 'value'.
|
||||
-- See available settings in 'dist.config' module.
|
||||
function apply_settings(variable, value)
|
||||
assert(type(variable) == "string", "luadist.apply_settings: Argument 'variable' is not a string.")
|
||||
assert(type(value) == "string", "luadist.apply_settings: Argument 'value' is not a string.")
|
||||
|
||||
-- check whether the settings variable exists
|
||||
if cfg[variable] == nil then
|
||||
print("Unknown LuaDist configuration option: '" .. variable .. "'.")
|
||||
os.exit(1)
|
||||
|
||||
-- ensure the right type
|
||||
|
||||
elseif type(cfg[variable]) == "boolean" then
|
||||
value = value:lower()
|
||||
if value == "true" or value == "yes" or value == "on" or value == "1" then
|
||||
value = true
|
||||
elseif value == "false" or value == "no" or value == "off" or value == "0" then
|
||||
value = false
|
||||
else
|
||||
print("Value of LuaDist option '" .. variable .. "' must be a boolean.")
|
||||
os.exit(1)
|
||||
end
|
||||
|
||||
elseif type(cfg[variable]) == "number" then
|
||||
value = tonumber(value)
|
||||
if not value then
|
||||
print("Value of LuaDist option '" .. variable .. "' must be a number.")
|
||||
os.exit(1)
|
||||
end
|
||||
|
||||
elseif type(cfg[variable]) == "table" then
|
||||
local err
|
||||
value, err = utils.make_table(value, ",")
|
||||
if not value then
|
||||
print("Error when parsing the LuaDist variable '" .. variable .. "': " .. err)
|
||||
os.exit(1)
|
||||
end
|
||||
end
|
||||
|
||||
-- set the LuaDist variable
|
||||
cfg[variable] = value
|
||||
|
||||
end
|
||||
|
||||
-- Parse command line input and run the required command.
|
||||
if pcall(debug.getlocal, 4, 1) then
|
||||
return commands -- return commands when used as module
|
||||
elseif not commands[arg[1]] and commands[arg[2]] then
|
||||
-- deploy_dir specified
|
||||
return run_command(arg[1], arg[2], 3)
|
||||
elseif commands[arg[1]] then
|
||||
-- deploy_dir not specified
|
||||
return run_command(dist.get_deploy_dir(), arg[1], 2)
|
||||
else
|
||||
-- unknown command
|
||||
if arg[1] then
|
||||
print("Unknown command '" .. arg[1] .. "'. Printing help...\n")
|
||||
print_help()
|
||||
os.exit(1)
|
||||
end
|
||||
return print_help()
|
||||
end
|
||||
@@ -23,20 +23,7 @@
|
||||
|
||||
--! require 'luainspect.typecheck' (context)
|
||||
|
||||
-- boilerplate/utility
|
||||
-- LUA_PATH="?.lua;/path/to/metalua/src/compiler/?.lua;/path/to/metalua/src/lib/?.lua"
|
||||
-- import modules -- order is important
|
||||
require "lexer"
|
||||
require "gg"
|
||||
require "mlp_lexer"
|
||||
require "mlp_misc"
|
||||
require "mlp_table"
|
||||
require "mlp_meta"
|
||||
require "mlp_expr"
|
||||
require "mlp_stat"
|
||||
--require "mlp_ext"
|
||||
_G.mlc = {} -- make gg happy
|
||||
-- Metalua:IMPROVE: make above imports simpler
|
||||
local mlc = require 'metalua.compiler'.new()
|
||||
|
||||
local M = {}
|
||||
|
||||
@@ -102,10 +89,7 @@ end
|
||||
-- FIX? filename currently ignored in Metalua
|
||||
-- CATEGORY: Lua parsing
|
||||
local function ast_from_string_helper(src, filename)
|
||||
filename = filename or '(string)'
|
||||
local lx = mlp.lexer:newstream (src, filename)
|
||||
local ast = mlp.chunk(lx)
|
||||
return ast
|
||||
return mlc:src_to_ast(src, filename)
|
||||
end
|
||||
|
||||
|
||||
@@ -370,7 +354,7 @@ function M.get_keywords(ast, src)
|
||||
-- Some binary operations have arguments reversed from lexical order.
|
||||
-- For example, `a > b` becomes `Op{'lt', `Id 'b', `Id 'a'}
|
||||
local oast =
|
||||
(ast.tag == 'Op' and #ast == 3 and ast[2].lineinfo.first[3] > ast[3].lineinfo.first[3])
|
||||
(ast.tag == 'Op' and #ast == 3 and tostring(ast[2].lineinfo.first):match('|L(%d+)') > tostring(ast[3].lineinfo.first):match('|L(%d+)'))
|
||||
and {ast[1], ast[3], ast[2]} or ast
|
||||
|
||||
local i = 0
|
||||
@@ -381,18 +365,17 @@ function M.get_keywords(ast, src)
|
||||
-- Get position range [fpos,lpos] between subsequent children.
|
||||
local fpos
|
||||
if i == 0 then -- before first child
|
||||
fpos = ast.lineinfo.first[3]
|
||||
fpos = tonumber(tostring(ast.lineinfo.first):match('|L(%d+)'))
|
||||
else
|
||||
local last = oast[i].lineinfo.last; local c = last.comments
|
||||
fpos = (c and #c > 0 and c[#c][3] or last[3]) + 1
|
||||
fpos = (c and #c > 0 and c[#c][3] or tostring(last):match('|L(%d+)')) + 1
|
||||
end
|
||||
local lpos
|
||||
if j == #ast+1 then -- after last child
|
||||
lpos = ast.lineinfo.last[3]
|
||||
lpos = tonumber(tostring(ast.lineinfo.last):match('|L(%d+)'))
|
||||
else
|
||||
local first = oast[j].lineinfo.first; local c = first.comments
|
||||
--DEBUG('first', ast.tag, first[3], src:sub(first[3], first[3]+3))
|
||||
lpos = (c and #c > 0 and c[1][2] or first[3]) - 1
|
||||
lpos = (c and #c > 0 and c[1][2] or tostring(first):match('|L(%d+)')) - 1
|
||||
end
|
||||
|
||||
-- Find keyword in range.
|
||||
@@ -405,7 +388,6 @@ function M.get_keywords(ast, src)
|
||||
if mfpos then
|
||||
local mlpos = mlppos-1
|
||||
if mlpos > lpos then mlpos = lpos end
|
||||
--DEBUG('look', ast.tag, #ast,i,j,'*', mfpos, tok, mlppos, fpos, lpos, src:sub(fpos, fpos+5))
|
||||
if mlpos >= mfpos then
|
||||
list[#list+1] = mfpos
|
||||
list[#list+1] = mlpos
|
||||
@@ -441,7 +423,9 @@ function M.ast_to_tokenlist(top_ast, src)
|
||||
if isterminal[ast.tag] then -- Extract terminal
|
||||
local token = ast
|
||||
if ast.lineinfo then
|
||||
token.fpos, token.lpos, token.ast = ast.lineinfo.first[3], ast.lineinfo.last[3], ast
|
||||
token.fpos = tonumber(tostring(ast.lineinfo.first):match('|L(%d+)'))
|
||||
token.lpos = tonumber(tostring(ast.lineinfo.last):match('|L(%d+)'))
|
||||
token.ast = ast
|
||||
table.insert(tokens, token)
|
||||
end
|
||||
else -- Extract non-terminal
|
||||
@@ -460,7 +444,9 @@ function M.ast_to_tokenlist(top_ast, src)
|
||||
if not isseen[comment] then
|
||||
comment.tag = 'Comment'
|
||||
local token = comment
|
||||
token.fpos, token.lpos, token.ast = comment[2], comment[3], comment
|
||||
token.fpos = tonumber(tostring(comment.lineinfo.first):match('|L(%d+)'))
|
||||
token.lpos = tonumber(tostring(comment.lineinfo.last):match('|L(%d+)'))
|
||||
token.ast = comment
|
||||
table.insert(tokens, token)
|
||||
isseen[comment] = true
|
||||
end
|
||||
|
||||
@@ -330,7 +330,7 @@ function M.related_keywords(ast, top_ast, tokenlist, src)
|
||||
end
|
||||
elseif grand_ast.tag == 'Localrec' then
|
||||
local tidx = LA.ast_idx_range_in_tokenlist(tokenlist, grand_ast)
|
||||
repeat tidx = tidx + 1 until tokenlist[tidx].tag == 'Keyword' and tokenlist[tidx][1] == 'function'
|
||||
repeat tidx = tidx + 1 until not tokenlist[tidx] or (tokenlist[tidx].tag == 'Keyword' and tokenlist[tidx][1] == 'function')
|
||||
local token = tokenlist[tidx]
|
||||
keywords[#keywords+1] = token
|
||||
end
|
||||
@@ -703,12 +703,31 @@ function M.infer_values(top_ast, tokenlist, src, report)
|
||||
if #iter_ast == 1 and iter_ast[1].tag == 'Call' and iter_ast[1][1].value == ipairs then
|
||||
for i, var_ast in ipairs(varlist_ast) do
|
||||
if i == 1 then set_value(var_ast, T.number)
|
||||
elseif i == 2 then set_value(var_ast, T.universal)
|
||||
-- handle the type of the value as the type of the first element
|
||||
-- in the table that is a parameter for ipairs
|
||||
elseif i == 2 then
|
||||
local t_ast = iter_ast[1][2]
|
||||
local value = T.universal
|
||||
if (known(t_ast.value) or T.istabletype[t_ast.value]) then
|
||||
local ok; ok, value = pzcall(tindex, {t_ast, {tag='Number', 1}}, t_ast.value, 1)
|
||||
if not ok then value = T.error(t_ast.value) end
|
||||
end
|
||||
set_value(var_ast, value)
|
||||
else set_value(var_ast, nil) end
|
||||
end
|
||||
elseif #iter_ast == 1 and iter_ast[1].tag == 'Call' and iter_ast[1][1].value == pairs then
|
||||
local t_ast = iter_ast[1][2]
|
||||
local value = T.universal
|
||||
local key
|
||||
if t_ast.value and (known(t_ast.value) or T.istabletype[t_ast.value]) then
|
||||
key = next(t_ast.value)
|
||||
local ok; ok, value = pzcall(tindex, {t_ast, {tag='String', key}}, t_ast.value, key)
|
||||
if not ok then value = T.error(t_ast.value) end
|
||||
end
|
||||
|
||||
for i, var_ast in ipairs(varlist_ast) do
|
||||
if i <= 2 then set_value(var_ast, T.number)
|
||||
if i == 1 then set_value(var_ast, type(key))
|
||||
elseif i == 2 then set_value(var_ast, value)
|
||||
else set_value(var_ast, nil) end
|
||||
end
|
||||
else -- general case, unknown iterator
|
||||
@@ -770,7 +789,7 @@ function M.infer_values(top_ast, tokenlist, src, report)
|
||||
end
|
||||
-- Any call to require is handled specially (source analysis).
|
||||
if func == require and type(argvalues[1]) == 'string' then
|
||||
local spath = ast.lineinfo.first[4] -- a HACK? relies on AST lineinfo
|
||||
local spath = tostring(ast.lineinfo.first):gsub('<C|','<'):match('<([^|]+)') -- a HACK? relies on AST lineinfo
|
||||
local val = M.require_inspect(argvalues[1], report, spath:gsub('[^\\/]+$', ''))
|
||||
if known(val) and val ~= nil then
|
||||
ast.value = val
|
||||
@@ -820,8 +839,7 @@ function M.infer_values(top_ast, tokenlist, src, report)
|
||||
local x
|
||||
local val = function() x=nil end
|
||||
local fpos = LA.ast_pos_range(ast, tokenlist)
|
||||
local source = ast.lineinfo.first[4] -- a HACK? relies on AST lineinfo
|
||||
local linenum = LA.pos_to_linecol(fpos, src)
|
||||
local source, linenum = tostring(ast.lineinfo.first):gsub('<C|','<'):match('<([^|]+)|L(%d+)') -- a HACK? relies on AST lineinfo
|
||||
local retvals
|
||||
if ENABLE_RETURN_ANALYSIS then
|
||||
retvals = get_func_return_values(ast) --Q:move outside of containing conditional?
|
||||
@@ -1269,7 +1287,7 @@ function M.ast_to_definition_position(ast, tokenlist)
|
||||
if local_ast then
|
||||
local tidx = LA.ast_idx_range_in_tokenlist(tokenlist, local_ast)
|
||||
if tidx then
|
||||
local spath = ast.lineinfo.first[4] -- a HACK? using lineinfo
|
||||
local spath = tostring(ast.lineinfo.first):gsub('<C|','<'):match('<([^|]+)') -- a HACK? using lineinfo
|
||||
fpos = tokenlist[tidx].fpos; path = spath
|
||||
end
|
||||
end
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user