Compare commits
911 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a455ed64f7 | ||
|
|
aff0355d7d | ||
|
|
af16a8a0ee | ||
|
|
0b5e5066fd | ||
|
|
3a52021c82 | ||
|
|
d0f522b283 | ||
|
|
4012455795 | ||
|
|
9b426ac548 | ||
|
|
371bc771e4 | ||
|
|
75d9eaae52 | ||
|
|
df381b57b8 | ||
|
|
1d2077007a | ||
|
|
06e2b14fd1 | ||
|
|
6079ea5038 | ||
|
|
16fc6a75d0 | ||
|
|
7e67e38b8e | ||
|
|
ba3791bb44 | ||
|
|
134a6b8dbb | ||
|
|
05d2cc8f31 | ||
|
|
481bbfbc26 | ||
|
|
3e8b2ca3b0 | ||
|
|
f1a9d53813 | ||
|
|
88078076ef | ||
|
|
f60f545fa5 | ||
|
|
49d514f321 | ||
|
|
3fafa96849 | ||
|
|
c274424147 | ||
|
|
e7b81bd36c | ||
|
|
4b7471f518 | ||
|
|
079b1cf22a | ||
|
|
e21c4b63af | ||
|
|
778d41bb49 | ||
|
|
8dbeb2b9c6 | ||
|
|
439b322b14 | ||
|
|
be084357fc | ||
|
|
daa8fbd32a | ||
|
|
c48c08742a | ||
|
|
4f8b51613d | ||
|
|
aae2cc7d22 | ||
|
|
090a69e693 | ||
|
|
3ea59b261f | ||
|
|
8f4a87264f | ||
|
|
2239f1d3ab | ||
|
|
6326066d8e | ||
|
|
8aac298197 | ||
|
|
d1836daa92 | ||
|
|
d966117cf3 | ||
|
|
e78ef13df7 | ||
|
|
bc93fc7c27 | ||
|
|
1f5ec24faa | ||
|
|
7301184475 | ||
|
|
88233991ea | ||
|
|
3f938a97b8 | ||
|
|
b536ef43e6 | ||
|
|
41e6739cb0 | ||
|
|
c7402cbb58 | ||
|
|
d39e64c570 | ||
|
|
5c10ee8d6f | ||
|
|
029a1bc9f6 | ||
|
|
fd9395c498 | ||
|
|
46b42b5726 | ||
|
|
073586cbcd | ||
|
|
b1876c13a4 | ||
|
|
f436e8748a | ||
|
|
b6eb057091 | ||
|
|
e229c2f9b6 | ||
|
|
c46542dbe6 | ||
|
|
97c7bb96e7 | ||
|
|
5da31d21a5 | ||
|
|
e8d459610c | ||
|
|
68b4b4290c | ||
|
|
285f4d18e7 | ||
|
|
78e525533f | ||
|
|
46776157af | ||
|
|
f11715fe0e | ||
|
|
c3d64c7a76 | ||
|
|
f1bb792287 | ||
|
|
52c2bf4dec | ||
|
|
6516c6460e | ||
|
|
c621c66177 | ||
|
|
074eead909 | ||
|
|
8a8210272b | ||
|
|
b5e6f50f53 | ||
|
|
4261d4927e | ||
|
|
ca87b9a721 | ||
|
|
927a7535a0 | ||
|
|
a62f5ff309 | ||
|
|
d0e403c5eb | ||
|
|
cedf05d94a | ||
|
|
8c25559745 | ||
|
|
cece22a490 | ||
|
|
924c7c09dc | ||
|
|
b0d806a17b | ||
|
|
018dbd73a2 | ||
|
|
1905193c5e | ||
|
|
2ca6d9cd2a | ||
|
|
d809befe80 | ||
|
|
02fb9c1b0c | ||
|
|
5350f4e665 | ||
|
|
1e0e37aa5a | ||
|
|
accce7df2f | ||
|
|
0d6d6aecb8 | ||
|
|
069e78cdde | ||
|
|
1d9902c74e | ||
|
|
5bd6a52963 | ||
|
|
9c08a120f2 | ||
|
|
71d2318303 | ||
|
|
c4701b590f | ||
|
|
d219aeb2b5 | ||
|
|
d605bab828 | ||
|
|
dfee96e1d7 | ||
|
|
d422fe52cb | ||
|
|
bab5f069d9 | ||
|
|
d1f755e38c | ||
|
|
8fbf0650a0 | ||
|
|
7def69b96e | ||
|
|
1f573639b1 | ||
|
|
0c178d12b3 | ||
|
|
c92fbe1619 | ||
|
|
9dd0a6962e | ||
|
|
1ecc0755f9 | ||
|
|
a25aeac530 | ||
|
|
f506a58b01 | ||
|
|
6ec1f7b723 | ||
|
|
55b89962e1 | ||
|
|
21733c0391 | ||
|
|
b5e078c810 | ||
|
|
0c8105d9be | ||
|
|
45f4847ab2 | ||
|
|
b2d4ef59eb | ||
|
|
ce208807f8 | ||
|
|
8f66d1a94a | ||
|
|
93666b7dee | ||
|
|
26e17dc6b1 | ||
|
|
25adfbac15 | ||
|
|
7772b85c2d | ||
|
|
15b5f42dca | ||
|
|
9e20934f6d | ||
|
|
cac7055f52 | ||
|
|
36d4bfb9e5 | ||
|
|
d3fde27a50 | ||
|
|
dcfaa7cbac | ||
|
|
2bc5bc0c8e | ||
|
|
5c6d570368 | ||
|
|
1f8b2a746f | ||
|
|
3940aa6c6a | ||
|
|
c3134f85b1 | ||
|
|
2563e5fa4a | ||
|
|
a260cdf5c9 | ||
|
|
6b226c1d1a | ||
|
|
5c28a54a40 | ||
|
|
33795ce0fd | ||
|
|
25ec466ce6 | ||
|
|
56b9975804 | ||
|
|
e353872dfb | ||
|
|
ed2f692447 | ||
|
|
3e1d816d59 | ||
|
|
a84118c8f7 | ||
|
|
912f23acee | ||
|
|
6980167b6f | ||
|
|
526b18f924 | ||
|
|
d2407c3faa | ||
|
|
33b07a5c96 | ||
|
|
fccdf61283 | ||
|
|
970058c729 | ||
|
|
7941617dfd | ||
|
|
122ebea0f7 | ||
|
|
ad4d77f4e8 | ||
|
|
7fd74e0742 | ||
|
|
6e4a0f113b | ||
|
|
1e3b630043 | ||
|
|
d33dfc4570 | ||
|
|
ce46925237 | ||
|
|
653d9b52ca | ||
|
|
d74711580b | ||
|
|
2a164bee4e | ||
|
|
70f51b7ba7 | ||
|
|
74a37fb2c1 | ||
|
|
f6f4797483 | ||
|
|
4ace576eb2 | ||
|
|
0b3084964c | ||
|
|
d3b6ab00a3 | ||
|
|
f4527705aa | ||
|
|
ae4c4a1f02 | ||
|
|
b5fa3955dd | ||
|
|
f7e3b71b94 | ||
|
|
ebd5557620 | ||
|
|
84c2846033 | ||
|
|
29e8fbfda8 | ||
|
|
9dc00aa39b | ||
|
|
cd7692cdc1 | ||
|
|
0d604bfd1d | ||
|
|
10257c5034 | ||
|
|
1b3cd9a11b | ||
|
|
125850f150 | ||
|
|
e6ab186571 | ||
|
|
c5e6c9608c | ||
|
|
576da864fb | ||
|
|
7606d014e2 | ||
|
|
0f37b84027 | ||
|
|
845f5863f9 | ||
|
|
fe6b57811c | ||
|
|
a583431a03 | ||
|
|
c4ad99c913 | ||
|
|
8e06c1de5c | ||
|
|
45c38ab3ec | ||
|
|
9005b25723 | ||
|
|
aece6108aa | ||
|
|
d2e7a8908a | ||
|
|
9287326291 | ||
|
|
a4ef4f64b3 | ||
|
|
c6bf32b0d2 | ||
|
|
578fcb1518 | ||
|
|
8a455a0077 | ||
|
|
e2331637af | ||
|
|
2de0f88d10 | ||
|
|
a1e7d262fd | ||
|
|
75056fa9c2 | ||
|
|
e5d7341e43 | ||
|
|
a8cede0052 | ||
|
|
036cf0b745 | ||
|
|
41964c458e | ||
|
|
a7ae8713d8 | ||
|
|
e80118de1e | ||
|
|
aa32586f94 | ||
|
|
c3dafa0af8 | ||
|
|
2078608012 | ||
|
|
5e4e1962bd | ||
|
|
95ecc1876d | ||
|
|
8dc07e2282 | ||
|
|
b9ac6ce4c4 | ||
|
|
7541b830ea | ||
|
|
1f83927462 | ||
|
|
14d55bdfe3 | ||
|
|
26f0a6bd4c | ||
|
|
5a1b42330f | ||
|
|
413a6b611f | ||
|
|
34276cf9ff | ||
|
|
45a4924686 | ||
|
|
cc085d4fb4 | ||
|
|
dbf6098e84 | ||
|
|
752b30166c | ||
|
|
443903b528 | ||
|
|
fc408c794c | ||
|
|
ddd5e41659 | ||
|
|
f63b140c14 | ||
|
|
f84424da44 | ||
|
|
21a4e9862a | ||
|
|
fc9bc61d9c | ||
|
|
90fd18f8a0 | ||
|
|
49335e62cf | ||
|
|
fd31261ec4 | ||
|
|
8c00238409 | ||
|
|
52389e9897 | ||
|
|
23322f4e47 | ||
|
|
f22918b494 | ||
|
|
3ff35270fc | ||
|
|
45bb80e92e | ||
|
|
582c63b042 | ||
|
|
53e2bfa06a | ||
|
|
46e103dea3 | ||
|
|
fb06395bf9 | ||
|
|
110264beb8 | ||
|
|
579005ae2e | ||
|
|
bd208273bc | ||
|
|
a587857b2c | ||
|
|
6b94ce24de | ||
|
|
bbb7f6a423 | ||
|
|
cc83b80022 | ||
|
|
069e9def30 | ||
|
|
6790cc4190 | ||
|
|
5171a20852 | ||
|
|
153a2d162b | ||
|
|
cc35ca76ff | ||
|
|
7f7aa6383e | ||
|
|
54ffda99c5 | ||
|
|
d0a1e792d6 | ||
|
|
cdc464b6cf | ||
|
|
62118654f7 | ||
|
|
a17080bde7 | ||
|
|
85e186bdd5 | ||
|
|
e6495beec7 | ||
|
|
69c4415452 | ||
|
|
076d08afc8 | ||
|
|
785af96859 | ||
|
|
46b02faac7 | ||
|
|
da8aed3f25 | ||
|
|
fa79f3b501 | ||
|
|
008c040171 | ||
|
|
eb73e209b4 | ||
|
|
1ecb99420c | ||
|
|
ef82d423b6 | ||
|
|
69e9807990 | ||
|
|
abd6560faf | ||
|
|
74eecb999e | ||
|
|
789078f86e | ||
|
|
09f7a56fdd | ||
|
|
3ffc6d1354 | ||
|
|
69d2788bfd | ||
|
|
b4656ca0f6 | ||
|
|
813c8de968 | ||
|
|
f5077b89a2 | ||
|
|
aa40d7f7c3 | ||
|
|
97e4d11dd2 | ||
|
|
3816be8336 | ||
|
|
353c99a182 | ||
|
|
b8ab9968f8 | ||
|
|
1d8663942e | ||
|
|
1b8dd87843 | ||
|
|
0ce1700dfc | ||
|
|
8167c67f35 | ||
|
|
6e0a168230 | ||
|
|
91fcca962d | ||
|
|
3e0d507a2a | ||
|
|
a864d5c889 | ||
|
|
dc0064ad70 | ||
|
|
8e893e3b9e | ||
|
|
d7def66cf3 | ||
|
|
5adc17d7bb | ||
|
|
bf82fd23e2 | ||
|
|
41d29c3bc0 | ||
|
|
1bd10f98c8 | ||
|
|
d302c35221 | ||
|
|
d460b380c1 | ||
|
|
9a2d98f7ca | ||
|
|
e5fa2afe3c | ||
|
|
5144e92e89 | ||
|
|
234f9b4aaa | ||
|
|
6b06d0a190 | ||
|
|
04d2ef8127 | ||
|
|
3829792e68 | ||
|
|
3eeebd274b | ||
|
|
1f2b5d0bf2 | ||
|
|
d53463f14e | ||
|
|
edfab46685 | ||
|
|
0050c7fedd | ||
|
|
eff9150f24 | ||
|
|
807ad0f957 | ||
|
|
6142843f4b | ||
|
|
b4d1019e71 | ||
|
|
cc1f36af2f | ||
|
|
790493b6d1 | ||
|
|
38c6cd28fa | ||
|
|
18d471be2c | ||
|
|
feb7f53e2c | ||
|
|
b7cd8aa30f | ||
|
|
1d02e3131d | ||
|
|
adcdb71894 | ||
|
|
2ee84a0c47 | ||
|
|
44219f008e | ||
|
|
0ef9c297cb | ||
|
|
b256912dee | ||
|
|
47c9f0a88f | ||
|
|
164341bedf | ||
|
|
dcf9ed7d26 | ||
|
|
fa248c5be1 | ||
|
|
fe5b1d8bf6 | ||
|
|
e6ed7d7cc4 | ||
|
|
c839beac25 | ||
|
|
67af8bb65f | ||
|
|
8350d3c609 | ||
|
|
a8c6f3a0dc | ||
|
|
ead5a9d46a | ||
|
|
0eadfdab00 | ||
|
|
b2deb54012 | ||
|
|
6bf310daae | ||
|
|
267fd50f24 | ||
|
|
d3c668f046 | ||
|
|
5a149166f8 | ||
|
|
6fe0f3a32c | ||
|
|
33a129a416 | ||
|
|
bbaab90515 | ||
|
|
c172289354 | ||
|
|
418631ee69 | ||
|
|
7aa89ed23b | ||
|
|
87c4f5f89a | ||
|
|
48e8d33c1f | ||
|
|
fd3f86a54b | ||
|
|
7de970fd69 | ||
|
|
e5d4045860 | ||
|
|
bcc81716ca | ||
|
|
a61c9e26be | ||
|
|
346a5326a6 | ||
|
|
b136a79bf3 | ||
|
|
7a8027e827 | ||
|
|
5c63257572 | ||
|
|
2969ef4e5b | ||
|
|
2d711fb2a5 | ||
|
|
7fdeeaab0a | ||
|
|
39df53117e | ||
|
|
04c66f735d | ||
|
|
38068bfa54 | ||
|
|
66367489f0 | ||
|
|
42f7a2647b | ||
|
|
6658f7e68e | ||
|
|
9def534470 | ||
|
|
a06f865151 | ||
|
|
aafa56c074 | ||
|
|
d94f2b6c06 | ||
|
|
5a626ed1cd | ||
|
|
f277d12854 | ||
|
|
06783b77ce | ||
|
|
66233e04e7 | ||
|
|
9391253fe7 | ||
|
|
a7938bb06c | ||
|
|
d3c6a5c832 | ||
|
|
4c571e5c75 | ||
|
|
e56af247a3 | ||
|
|
7894b9200c | ||
|
|
d0e693e35b | ||
|
|
4c7a09e531 | ||
|
|
ba61f9106c | ||
|
|
0184accc29 | ||
|
|
7c5a3204f9 | ||
|
|
a313071f90 | ||
|
|
3d4823f595 | ||
|
|
3363bac1e7 | ||
|
|
2fe197ea13 | ||
|
|
57f3631687 | ||
|
|
eb2288bdd4 | ||
|
|
140fdcb101 | ||
|
|
0a5f3f2ed8 | ||
|
|
ca47551edb | ||
|
|
119c53f3b2 | ||
|
|
646db05c55 | ||
|
|
931006ffa3 | ||
|
|
f2f99fe90d | ||
|
|
4621b1a295 | ||
|
|
9cb8d2ef4d | ||
|
|
5f7f6e3c1a | ||
|
|
535b597104 | ||
|
|
6228089962 | ||
|
|
ee35d4bf8a | ||
|
|
354951203d | ||
|
|
6fe7b317bd | ||
|
|
63cdef5285 | ||
|
|
bb6c8cfd67 | ||
|
|
e0807829c3 | ||
|
|
68b7272403 | ||
|
|
382da09901 | ||
|
|
b9722459c1 | ||
|
|
fe8d54ec2d | ||
|
|
e24ee26ed3 | ||
|
|
6c20164125 | ||
|
|
6596d3ad61 | ||
|
|
06d63407e5 | ||
|
|
da29d5ccf8 | ||
|
|
fd0b2c1f11 | ||
|
|
a28ce0f536 | ||
|
|
accd8565af | ||
|
|
330b02c955 | ||
|
|
da5a8d41bf | ||
|
|
52b6438159 | ||
|
|
cc1de06909 | ||
|
|
e58a5ff4d9 | ||
|
|
c92f2dc477 | ||
|
|
b8f5b935f2 | ||
|
|
eec36411ad | ||
|
|
460fb61766 | ||
|
|
a4b70dce82 | ||
|
|
cc6db36420 | ||
|
|
a75bdfc3cb | ||
|
|
fca8a760f5 | ||
|
|
6bd7be2389 | ||
|
|
34d29a5a11 | ||
|
|
bcc454e2c2 | ||
|
|
7911a949ad | ||
|
|
99cfb5d5d3 | ||
|
|
237b641a39 | ||
|
|
d69504de05 | ||
|
|
03a21b3bf4 | ||
|
|
c8d923204d | ||
|
|
21845d5179 | ||
|
|
bd949f2522 | ||
|
|
0aebf69193 | ||
|
|
e843f1a3a0 | ||
|
|
1731dbbbea | ||
|
|
b608145590 | ||
|
|
74de23cf5d | ||
|
|
49747a0e5c | ||
|
|
268dbfc437 | ||
|
|
b4e03627d9 | ||
|
|
d12a050c7a | ||
|
|
4da95789b5 | ||
|
|
9c53d95554 | ||
|
|
4c8a42c1c9 | ||
|
|
786fa303f9 | ||
|
|
8b69d2897a | ||
|
|
f030d16ded | ||
|
|
edce5fa76c | ||
|
|
48a04113b9 | ||
|
|
229460983e | ||
|
|
c383889d05 | ||
|
|
ade62dcdc0 | ||
|
|
e57eaf7f6b | ||
|
|
cbcef4c720 | ||
|
|
e9104c16a0 | ||
|
|
983942405c | ||
|
|
634a7af8cd | ||
|
|
993171cc92 | ||
|
|
5b665477fa | ||
|
|
7ce454ab5b | ||
|
|
1b331765a4 | ||
|
|
929e77f9fd | ||
|
|
ad1e4e98b9 | ||
|
|
b935ab305f | ||
|
|
74998e6057 | ||
|
|
f655805bbb | ||
|
|
5a96117b3d | ||
|
|
9b7b220a3d | ||
|
|
4f3b8596f2 | ||
|
|
e12e2653db | ||
|
|
3660b2e40e | ||
|
|
109d71e4f3 | ||
|
|
17c33e51cc | ||
|
|
307ef3a66f | ||
|
|
5f2c266cc1 | ||
|
|
3f7539d31f | ||
|
|
15f04c16de | ||
|
|
163b738c73 | ||
|
|
33b55b29e4 | ||
|
|
25cc70bee5 | ||
|
|
9fb7bd8750 | ||
|
|
e5199a8618 | ||
|
|
cd4fe6a60e | ||
|
|
091d2d7e59 | ||
|
|
a2ab4bc18f | ||
|
|
d41e3621a8 | ||
|
|
155483f40f | ||
|
|
a8168e41f7 | ||
|
|
fad303be9a | ||
|
|
2f22d74e21 | ||
|
|
d2ddc96a2b | ||
|
|
755941098e | ||
|
|
d28a6f66e0 | ||
|
|
2406863437 | ||
|
|
ac067f2b5a | ||
|
|
31d123edbc | ||
|
|
5eb7a78f1a | ||
|
|
bfbda999c0 | ||
|
|
01ca5acb99 | ||
|
|
b4cd30eb6b | ||
|
|
e1235cf14d | ||
|
|
0c9feecb21 | ||
|
|
2b3dacfa76 | ||
|
|
419692b3dc | ||
|
|
895b92b7b7 | ||
|
|
6850220b9c | ||
|
|
d75a7a3adb | ||
|
|
5da7a6aeec | ||
|
|
4f00ec2aa8 | ||
|
|
b56d1096be | ||
|
|
dc9d19f521 | ||
|
|
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 |
822
CHANGELOG.md
822
CHANGELOG.md
@@ -1,5 +1,827 @@
|
||||
# ZeroBrane Studio Changelog
|
||||
|
||||
## v1.30 (Jan 21 2016)
|
||||
|
||||
### Highlights
|
||||
- Added `markers` panel to show and navigate bookmarks and breakpoints.
|
||||
- Added saving/restoring bookmarks and breakpoints.
|
||||
- Added breakpoint prev/next navigation (`Project | Breakpoint` menu).
|
||||
- Added find/replace in selection to search operations.
|
||||
- Added printing of editor tabs and Console/Output windows (available on Windows and OSX).
|
||||
- Added recursive processing of configuration files (using `include` command).
|
||||
- Added `outline.showcompact` setting to keep outline more compact for large files.
|
||||
- Added opening multiple files from the `Open` dialog.
|
||||
- Updated Corona API for v2015.2731 and added handling of type inheritance.
|
||||
- Updated love2d API for v0.10.0.
|
||||
|
||||
### Special thanks
|
||||
- To [tmiv](https://github.com/tmiv) for allowing shortcuts to be added to tools menu items.
|
||||
- To [Yonaba](https://github.com/Yonaba/) for French translation update.
|
||||
- To [Leo Bartoloni](https://github.com/bartoleo) for Italian translation update.
|
||||
- To [Inigo Sola](https://github.com/inigosola) for Spanish translation update.
|
||||
|
||||
### Improvements
|
||||
- Added `CloneMenu` package method (#166).
|
||||
- Added Torch and Redis debugging links.
|
||||
- Added `IsNew` method for documents (#166).
|
||||
- Added `Print` method and updated core components to use it during launch.
|
||||
- Added skipping `UPDATE_CONTENT` events on cursor blinks in `UPDATEUI` (#419).
|
||||
- Added preserving markers after sorting/reindentation operations.
|
||||
- Added editor `MarkerGetAll` method (#166).
|
||||
- Added example on how to set breakpoint shortcuts used in v1.20 or earlier (#419).
|
||||
- Added processing of `include` command without extension in config (#555).
|
||||
- Added reporting of missing packages when using `package` command in config (#555).
|
||||
- Added processing of `package` command without extension in config (#555).
|
||||
- Added hint on using updated breakpoint shortcut (#419).
|
||||
- Added breakpoint prev/next navigation (#419).
|
||||
- Added `AttachMenu` package method (#166).
|
||||
- Added `MarkerToggle` editor method (#166).
|
||||
- Added `MarkerGotoNext` and `MarkerGotoPrev` editor methods (#166).
|
||||
- Added local menu to the `Markers` panel to toggle markers (#419).
|
||||
- Added saving/restoring bookmarks and breakpoints (#419).
|
||||
- Added `BookmarkToggle` method to the editor (#166).
|
||||
- Added `BreakpointToggle` method to the editor (#166).
|
||||
- Added `markers` panel to show bookmarks and breakpoints (#419).
|
||||
- Added `onEditorMarkerUpdate` event (#166).
|
||||
- Added unfolding fragments that include activated line during debugging (closes #575).
|
||||
- Added skipping comment when none is provided in the Stack (instead of showing `nil`).
|
||||
- Added skipping comments in the lexer to avoid splitting statements (fixes #568).
|
||||
- Added `GetExePath` method for the interpreter (#166).
|
||||
- Added package `GetFilePath` method (#166).
|
||||
- Added `showhiddenfiles` option to show hidden files in the filetree (closes #561).
|
||||
- Added package `RemovePanel` method (#166).
|
||||
- Added loading of custom package from the config file (closes #555).
|
||||
- Added `Alt-Enter` to "replace all" when replace field is selected in the search panel.
|
||||
- Added setting project directory to the selected directory to the project tree menu.
|
||||
- Added ignoring `Ctrl-CapsLock` in the editor that was shrinking the font.
|
||||
- Added recursive processing of configuration files with relative names (#555).
|
||||
- Added moving cursor to the end of the pasted fragment (#556).
|
||||
- Added workaround for copying UTF-8 invalid data to/from clipboard (#260, #556).
|
||||
- Added `CloseAll` and `CloseAllExcept` document methods (#166).
|
||||
- Added warning in the interpreter when a short name not generated on Windows (closes #559).
|
||||
- Added check for recover record to be fully present.
|
||||
- Added using `*Raw` methods when available for handling of invalid UTF-8 chars (#260, #556).
|
||||
- Added `FileRemove` method (#166).
|
||||
- Added package `onAppDone` method (#166).
|
||||
- Added sorting the list of known extensions.
|
||||
- Added `outline.showcompact` setting to keep outline more compact for large files (closes #549).
|
||||
- Added updating selection boundaries after replace-in-selection (#547).
|
||||
- Added resizing toolbar background after resizing the application window.
|
||||
- Added timing to the tests.
|
||||
- Added context menu item to clear text in the Console window.
|
||||
- Added context menu to select a (clicked on) command in the Console window.
|
||||
- Added `onMenuConsole` event (#166).
|
||||
- Added reporting printing progress (#540).
|
||||
- Added package `IsValidProperty` method (#166).
|
||||
- Added separator to the print-related menu items on OSX (#540).
|
||||
- Added header/footer printing (#540).
|
||||
- Added printing of the current editor tab (closes #540).
|
||||
- Add package `GetIndicators` method (#166).
|
||||
- Added `editor.wrapmode` to configure wrapping mode in the editor.
|
||||
- Added reporting of another instance running under a different user (closes #542).
|
||||
- Added opening multiple files from the `Open` dialog (closes #541).
|
||||
- Allowed reading input in the Output window without printing something first (closes #538).
|
||||
- Allow shortcuts to be added to tools menu items
|
||||
- Extended PATH on OSX with `/usr/local/bin` to provide access to tools in that folder (#356).
|
||||
- Improved compatibility when running the IDE using Lua 5.2.
|
||||
- Improved handling of names with Unicode chars during debugging on Windows (#559).
|
||||
- Limited requesting attention on debugging starts to happen when debugging is suspended.
|
||||
- Moved wxlua version number to a better location in the About screen.
|
||||
- Optimized path generation in directory traversal (#260).
|
||||
- Removed a workaround for wxlua build issue as it's no longer needed.
|
||||
- Replaced `ConsoleClear` with `Erase` methods for the Console object.
|
||||
- Removed search panel from the list of floated panels as it shouldn't be there.
|
||||
- Removed `allowinteractivescript` setting as it doesn't need to be configurable (#538).
|
||||
- Replaced `EditorIsModified` with document method calls.
|
||||
- Spanish translation updated
|
||||
- Switched to using client size instead of system metric to get screen width (#260).
|
||||
- Switched to using `KEY` event in search panel to make it work with wxwidgets 3.1+ (#260).
|
||||
- Switched to per-editor tracking in `UPDATEUI` event.
|
||||
- Updated `interpreter` menu to use a clone to avoid Linux assertion.
|
||||
- Updated Italian Translation (closes #586).
|
||||
- Updated french translation as of df381b5 (see #70)
|
||||
- Updated Russian translation (#70).
|
||||
- Updated translation files with new messages (#70).
|
||||
- Updated LuaForWindows interpreter to accept command line parameters (#582).
|
||||
- Updated LuaForWindows interpreter to properly pass `arg` to the script (closes #582).
|
||||
- Updated `GetDocument` to not fail when no editor is passed.
|
||||
- Updated live coding to group number updates together for `Undo`/`Redo` purposes.
|
||||
- Updated `Toggle Breakpoint` and `Break` shortcuts for consistency (#419).
|
||||
- Updated love2d API for v0.10.0 (#247).
|
||||
- Updated script to process new love2d API format (with `variants`).
|
||||
- Updated showing filename of the missing interpreter in the project list (#570).
|
||||
- Updated build scripts to use own wxwidgets repository to better sync build versions (#260).
|
||||
- Updated build scripts to remove an error from the check for missing methods in wxlua.
|
||||
- Updated README to remove outdated .ini reference from Estrela section.
|
||||
- Updated instructions in the `estrela` configuration file to reference `include` command.
|
||||
- Updated luasec build script to use the latest openSSL version (1.0.2d).
|
||||
- Updated UTF-8 validation to use wxwidgets libraries for better performance (#556).
|
||||
- Updated clipboard copy to make non-UTF-8 data to work on OSX (#260, #556).
|
||||
- Updated Console history to work with UTF-8 invalid strings (#260, #556).
|
||||
- Updated `Ctrl/Shift-Ins` and `Shift-Del` to work in all editors (#260, #556).
|
||||
- Updated `Output` and `Console` to display invalid characters as is (#260, #556).
|
||||
- Updated config sample to remove no longer needed `G` references.
|
||||
- Updated config processing to simplify access to global functions.
|
||||
- Updated config processing to allow use of `package` field.
|
||||
- Updated windows launcher code to use manifest for hidpi awareness.
|
||||
- Updated `AddConfig` method to accept single filename in addition to a list (#166).
|
||||
- Updated event handling to better handle events that are executed once (#260).
|
||||
- Updated `sample` package events for more accurate output.
|
||||
- Updated default size/position for the first launch without saved settings.
|
||||
- Updated tests to use a separate .ini file to minimize conflicts.
|
||||
- Updated Corona API for v2015.2731.
|
||||
- Updated Corona API processing script to follow Lua guidelines.
|
||||
- Updated Corona API processing script to handle type inheritance.
|
||||
- Updated `Save As`/`Open` command to use editor specific extensions instead of all.
|
||||
- Updated capturing editor information during search to work with selections (#547, #416).
|
||||
- Updated `Replace` and `Replace All` to take selection into account (#547, #416).
|
||||
- Updated toolbar icons to fix black color in some images.
|
||||
- Updated `SetDllDirectory` handling to avoid breaking dlopen with wxwidgets 3.1+ (#260).
|
||||
- Updated Corona interpreter to avoid caching specified path.
|
||||
- Updated tests to handle platform-specific tests.
|
||||
- Updated directory traversing tests to work with smaller directories.
|
||||
- Updated default file mask to match files without extension (#260).
|
||||
- Updated tests to use a package instead of the obsolete app method.
|
||||
- Updated wxwidget path in the build script to use git repository after wxwidgets migration.
|
||||
- Updated menu shortcuts to avoid conflicts in the `File` menu (#540).
|
||||
- Updated README with features in 1.20.
|
||||
|
||||
### Fixes
|
||||
- Fixed showing cursor in search panel fields after file search.
|
||||
- Fixed reapplying markers after reloading modified file (#419).
|
||||
- Fixed setting interpreter after launching with non-existing project.
|
||||
- Fixed showing package errors during project switches (#555).
|
||||
- Fixed `include` command not checking needed `packages` folders to load from (#555).
|
||||
- Fixed resetting the default interpreter after selecting a non-existent one.
|
||||
- Fixed restoring project-specific interpreter when switching projects (#570).
|
||||
- Fixed restoring project-specific interpreter after relaunch (fixes #570).
|
||||
- Fixed expanding sub-trees in project directory when set to the disk root on Windows.
|
||||
- Fixed search navigation after selecting one variable instance (fixes #565).
|
||||
- Fixed editing fragments in folded text (follow-up to d2ddc96a; #564).
|
||||
- Fixed editing multiple selections when selection is in folded fragments (fixes #564).
|
||||
- Fixed copy/paste on Windows when UTF-8 invalid strings end in new line (#260, #556).
|
||||
- Fixed debugging of Busted scripts (closes #552).
|
||||
- Fixed skipping editor tabs when clicked in some cases on OSX (closes #546).
|
||||
- Fixed toolbar size not being adjusted on the very first launch.
|
||||
|
||||
### Incompatibilities
|
||||
- Changed `Toggle Breakpoint` shortcut from `F9` to `Ctrl/Cmd-F9`.
|
||||
- Removed `Project | Break` shortcut to avoid conflict with breakpoint navigation.
|
||||
- Removed `allowinteractivescript` setting as no longer needs to be configurable (#538).
|
||||
|
||||
## v1.20 (Oct 08 2015)
|
||||
|
||||
### Highlights
|
||||
- Added symbol indexing of project files for project-wide search.
|
||||
- Added support for `file@symbol` fuzzy search (#385).
|
||||
- Added processing of `ini` setting relative to the IDE location (#483).
|
||||
- Improved memory handling for large files.
|
||||
- Improved application performance and memory usage.
|
||||
- Improved auto-complete order of results and suggestions for case-sensitive matches.
|
||||
- Updated Windows launcher to add dpi awareness for high dpi monitors.
|
||||
- Upgraded Lua 5.3 interpreter to 5.3.1.
|
||||
- Fixed a memory leak after a search panel is opened.
|
||||
- Fixed an occasional crash from the filetree on Linux (#425, #464).
|
||||
- Fixed recursive file traversal to skip directories when mask is specified.
|
||||
|
||||
### Special thanks
|
||||
- To [riidom](https://github.com/riidom) for German translation update.
|
||||
- To [Yonaba](https://github.com/Yonaba/) for French translation update.
|
||||
- To [Leo Bartoloni](https://github.com/bartoleo) for Italian translation update.
|
||||
- To [Christoph Kubisch](https://github.com/pixeljetstream) for glslc updates.
|
||||
- To Brigham Toskin for auto-complete improvements.
|
||||
- To Joergen von Bargen for optimized UTF8 validation.
|
||||
- To Nick Smith for Marmalade interpreter updates.
|
||||
|
||||
### Improvements
|
||||
- Added handling of translation messages that require pluralization (#70).
|
||||
- Added check for non-zero file size before reporting load progress (#530).
|
||||
- Added switching interpreters by clicking on the interpreter label in the status bar.
|
||||
- Added handling of editor commands (Copy/Paste/SelectAll/Undo/Redo) in search panel controls.
|
||||
- Added position to the end-of-file lexer token (closes #529).
|
||||
- Added reporting when a file can't be removed from a project tree.
|
||||
- Added explicit initialization for `editor.autoactivate` default setting.
|
||||
- Added allowing `editor.saveallonrun` with `infervalue` static analyzer (closes #524).
|
||||
- Added support for `include` command in config files.
|
||||
- Added document `Close` method (#166).
|
||||
- Added descriptions for new Lua 5.3 `math.*` and `coroutine.*` functions.
|
||||
- Added functions new to Lua 5.3 to the list of keywords.
|
||||
- Added reporting of deserialization failures for saved package data.
|
||||
- Added collapsing white spaces from names shown in the Outline.
|
||||
- Added workaround for a memory leak in wxlua after a search panel is opened.
|
||||
- Added jumping to the current function in the outline (#515).
|
||||
- Added highlighting current functions for better visibility (#515).
|
||||
- Added skipping unneded fields from the symbol index to reduce memory usage (#515).
|
||||
- Added showing position of the current function in the Outline (closes #515).
|
||||
- Added explicit editor destroy during find and replace to conserve memory.
|
||||
- Added explicit editor destroy during symbol indexing to conserve memory.
|
||||
- Added turning jitting on when running under LuaJIT.
|
||||
- Added `Run to Cursor` to the popup menu in the editor (#413).
|
||||
- Added showing memory usage stats in the status bar configured by `showmemoryusage`.
|
||||
- Added skipping opening a file from symbol search when nothing is matched.
|
||||
- Added skipping directories during directory traversal (#499).
|
||||
- Added `SetStatusFor` package method to set temporary status (#166).
|
||||
- Added forcing immediate refresh of symbol index when requested from the menu (#499).
|
||||
- Added `onMenuOutput` event (#166).
|
||||
- Added `onMenuWatch` event (#166).
|
||||
- Added disabling symbol indexing for directories/projects (#499).
|
||||
- Added refreshing of symbol index to the project menu (#499).
|
||||
- Added reporting of the number of files queued for indexing (#499).
|
||||
- Added reporting when indexing is completed (#499).
|
||||
- Added `GetOutline` package method (#166, #499).
|
||||
- Added exclusion to not report `arg` as global in static analysis (closes #503).
|
||||
- Added `commandbar.width` to set the width of command bar.
|
||||
- Added skipping symbol index queue when symbol inactivity is not set (#499).
|
||||
- Added setting different types of indentation guides.
|
||||
- Added optimization with prefiltering for short patterns (#31, #499).
|
||||
- Added status message during index update (#499).
|
||||
- Added purging of outdated cache for symbol indexing (#499).
|
||||
- Added symbol processing of tabs that are not saved yet (#499).
|
||||
- Added indexing of project files (#499).
|
||||
- Added `commandbar.maxitems` configuration setting (#499).
|
||||
- Added caching of symbols for open files (#499).
|
||||
- Added support for `file.lua@symbol` fuzzy search (#385).
|
||||
- Added symbol search in all open files (#385).
|
||||
- Added check to avoid loops in type assignment during auto-complete (#498).
|
||||
- Added primitive handling of `require` in type assignments for known APIs (fixes #498).
|
||||
- Added support for aborting file reading callback (#491).
|
||||
- Added progress display when loading large files (#491).
|
||||
- Added status methods: `GetStatus`, `PushStatus`, and `PopStatus` (#166).
|
||||
- Added `onMenuOutline` callback (#166, #337).
|
||||
- Added ability to toggle outline sorting from the local menu (#337, #494).
|
||||
- Added activating Output panel after compilation errors.
|
||||
- Added package `SetStatus` method (#166).
|
||||
- Added `Ctrl/Cmd-Enter`/`Ctrl/Cmd-Shift-Enter` to add line after/before the current one (#334).
|
||||
- Added ignoring current selection in auto-complete with `Shift-Enter` (closes #494).
|
||||
- Added hiding auto-complete after typing one of the offered options (#494).
|
||||
- Added activating Output notebook to show search results if it's hidden (#416).
|
||||
- Added reporting of errors when unable to open file for static analysis.
|
||||
- Added collapsing whitespaces in function parameters in the outline (#337).
|
||||
- Added emphasis for the preference type in the config file template.
|
||||
- Added `FileSize` method as the default one returns non-zero result for non-existing files.
|
||||
- Added reporting of `FileWrite` failing to write the entire content.
|
||||
- Added package methods `AddIndicator`, `GetIndicator`, and `RemoveIndicator` (#166).
|
||||
- Added missing `Detach Process` id to keymap (pkulchenko/MobDebug#19).
|
||||
- Added a check for `ini` setting pointing to a path with a writeable directory (#483).
|
||||
- Added a check for `ini` setting pointing to a directory (#483).
|
||||
- Added processing of `ini` setting relative to the IDE location (closes #483).
|
||||
- Added Watch view refresh after switching focus when needed.
|
||||
- Added Stack view refresh after switching focus when needed.
|
||||
- Added forced `Refresh`/`Update` to improve redrawing of commandbar on Windows 8.
|
||||
- Added a check for a window to be shown to avoid callback recursion on OSX (fixes #473).
|
||||
- Added package `IsWindowShown` method (#166).
|
||||
- Added package `onEditorPreClose` event (#166, closes #461).
|
||||
- Added deleting the rest of the word on auto-complete (`acandtip.droprest`).
|
||||
- Added closing editor tab when renaming to an open file from the project tree.
|
||||
- Added refresh of the target file after renaming from the project tree.
|
||||
- Added a check for object with a focus (occasionally triggered on Linux).
|
||||
- Added workaround to fix crash on Linux from the project tree (#425, #464).
|
||||
- Added `DoWhenIdle` package method (#166).
|
||||
- Disabled unhiding one of wxwidgets windows that is only used for message passing (Windows).
|
||||
- Disabled initial highlight when showing current function disabled in the outline (#515).
|
||||
- Disabled dragging out search results tab to avoid unexpected results (#416).
|
||||
- Enabled compilation during running/debugging (closes #479).
|
||||
- Enabled static analysis during running/debugging (#479).
|
||||
- Integrate ZeroBrane with Marmalade's Hub GUI
|
||||
- Improved auto-complete suggestions for case-sensitive matches.
|
||||
- Improved compactness of saved package settings (#166, #499).
|
||||
- Improved performance of saving symbol index data (#499).
|
||||
- Improved memory usage when closing large files (#491).
|
||||
- Improved handling of large files (#491).
|
||||
- Improved the order of results in auto-complete (closes #469).
|
||||
- glslc tool: add menu option for pre-process mode
|
||||
- Optimized saving package settings (#166, #499).
|
||||
- Optimized UTF8 validation (thanks to Joergen von Bargen).
|
||||
- Optimized handling of multi-line changes in the editor (closes #477).
|
||||
- Removed forced garbage collection as it led to crashes on Linux (#425, closes #464).
|
||||
- Revised: auto-complete results (amends #469, w/@pkulchenko patch)
|
||||
- Switched to the bottom location for the search results by default (#416).
|
||||
- Updated italian translations (thanks to Leo Bartoloni)
|
||||
- Updated Russian translation (#70).
|
||||
- Update de.lua (thanks to riidom)
|
||||
- Updated french translation as of commit (thanks to Yonaba)
|
||||
- Updated translation files for new messages (#70).
|
||||
- Updated translation logic to accept empty tables for pluralization values (#70).
|
||||
- Updated build scripts to use the most recent releases of LuaJIT and Lua 5.2.
|
||||
- Updated OSX launcher to keep `DYLD_LIBRARY_PATH` if already set.
|
||||
- Updated build scripts to use the most recent releases of LuaJIT and Lua 5.2.
|
||||
- Update marmalade API definition to 7.9
|
||||
- Updated static analyzer (luainspect) to take globals in 'required' files into account (#520).
|
||||
- Updated static analyzer to refresh cache of 'required' modules (#520).
|
||||
- Updated C/cpp spec to skip `if(...)` from the list of functions.
|
||||
- Updated C/cpp spec to properly handle functions at the beginning of a file.
|
||||
- Updated package data serialization to use simpler dumper for faster processing.
|
||||
- Updated saving symbol index to be called less frequently (#499).
|
||||
- Updated list of fields to skip from saved symbol index (#499).
|
||||
- Updated Run/Debug to not force saving new tabs when `Start` file is set.
|
||||
- Updated interpreter handling to allow setting of default value in the config (closes #518).
|
||||
- Updated highlighting of the current function in the Outline to select one item (#515).
|
||||
- Updated auto-complete to close when one of the options matches the current input.
|
||||
- Updated applying limit to the commandbar results to allow them to be resorted.
|
||||
- Updated status messages for better visibility on OSX during index refresh (#499).
|
||||
- Updated tracking of editor updates to skip unneeded notifications on OSX (#499).
|
||||
- Updated symbol refresh to do processing as soon as the path is known (#499).
|
||||
- Updated symbol index to skip unused elements in serialization (#499).
|
||||
- Updated prefiltering to limit prefix to avoid penalty for long `s.*s.*s...` (#31).
|
||||
- Updated package `SetSettings` method to allow passing of additional parameters (#166).
|
||||
- Updated status of files indexing for symbol search (#499).
|
||||
- Updated `DoWhenIdle` handling to gracefully handle a long queue.
|
||||
- Updated `Go To Symbol` to refresh files loaded in the preview (#499, #385).
|
||||
- Updated symbol search to only refresh outline when it's not populated (#385).
|
||||
- Updated search logic to avoid showing search results in recent files (#416).
|
||||
- Updated line number handling to adjust for large files (#491).
|
||||
- Updated `busted` interpreter to check for proper extension on Windows (closes #495).
|
||||
- Updated handling of binary and utf8 validness checks for large files (#491).
|
||||
- Updated build scripts for Lua 5.3 to use 5.3.1.
|
||||
- Updated toolbar to show large icons by default on large screens.
|
||||
- Updated outline to only retrieve entry text when there are tokens to process (#337).
|
||||
- Updated getting text length without requesting editor content.
|
||||
- Updated showing function indicator handling to allow for easier enabling.
|
||||
- Updated indicator processing to use new API.
|
||||
- Updated ID references in toolbar to use the new access method.
|
||||
- Updated ID references in keymap to use the new access method.
|
||||
- Updated `Detach Process` to allow access to it while the process is running.
|
||||
- Updated metalua/static analyzer to accept long integer and imaginary numbers (closes #482).
|
||||
- Updated internal parser to accept long integer, imaginary, and floating point hex numbers (#482).
|
||||
- Updated internal parser to accept numbers that start with a period (#482).
|
||||
- Updated compilation and static analysis to keep output when running/debugging (#479).
|
||||
- Updated indentation after strings with brackets and escaped quotes (#324).
|
||||
- Updated `AnalyzeString` to add filename parameter (closes #463).
|
||||
- Updated Windows launcher to add dpi awareness for high dpi monitors.
|
||||
- Upgraded Lua 5.3 interpreter to 5.3.1 on Linux (x86 and x64).
|
||||
- Upgraded Lua 5.3 interpreter to 5.3.1 on OSX.
|
||||
- Upgraded Lua 5.3 interpreter to 5.3.1 on Windows (closes #453, closes #460).
|
||||
- Upgraded Mobdebug (0.628) to include `keyignore` serializer option.
|
||||
- Upgraded Mobdebug (0.627) to improve debugging of code with overloaded `string` methods.
|
||||
- Upgraded Mobdebug (0.624) to make `DONE` async and to add `__tostring` protection (closes #446).
|
||||
|
||||
### Fixes
|
||||
- Fixed text search and fuzzy symbol search in symlinks (#458, #530).
|
||||
- Fixed opening only one tab for external debugging of dynamic code on Linux (closes #526).
|
||||
- Fix live picking up debug vs release binaries (Marmalade)
|
||||
- Fixed highlighting for those specs that don't have information on where functions end (#515).
|
||||
- Fixed highlighting the current function when anonymous functions are hidden (#515).
|
||||
- Fixed styling of comments that include markup inside markup (fixes #514).
|
||||
- Fixed updating symbols in new files that haven't been indexed yet (#499).
|
||||
- Fixed opening empty files (fixes #510).
|
||||
- Fixed autocomplete for words that may include underscores in suggestions.
|
||||
- Fixed crash on OSX during symbol indexing when filetree menu is open (#499).
|
||||
- Fixed crash on Linux during symbol indexing when filetree menu is open (fixes #507).
|
||||
- Fixed duplicates between variables and dynamic words in auto-complete.
|
||||
- Fixed uncommenting of the last line in the selection to keep un/comment reversible (fixes #509).
|
||||
- Fixed assignment parsing when the type value is re-assigned (#498).
|
||||
- Fixed mouse selection in auto-complete on OSX (fixes #496).
|
||||
- Fixed fuzzy file search to not double open already opened files (#31).
|
||||
- Fixed indentation of lines that end with partial long strings with opening brackets (#324).
|
||||
- Fixed indentation of lines with long strings that include opening brackets (#324).
|
||||
- Fixed indicators on table fields after variables that look like multiple assignments (#492).
|
||||
- Fixed indicators on table fields after variables (fixes #492).
|
||||
- Fixed variable usage based on static analysis.
|
||||
- Fixed initial select-and-find search.
|
||||
- Fixed returning focus to the editor after find-in-files followed by page search (#416).
|
||||
- Fixed performance of initial fuzzy search for line numbers (closes #476).
|
||||
- Fixed Output tab name when debugging aborted after run-time error.
|
||||
- Fixed recursive file traversal to skip directories when mask is specified.
|
||||
- Fixed crash in `collectgarbage` from the filetree on Linux (#425, #464).
|
||||
|
||||
## v1.10 (May 13 2015)
|
||||
|
||||
### Highlights
|
||||
- Redesigned search functionality; added incremental search and replace-in-files preview.
|
||||
- Updated love2d API for v0.9.2.
|
||||
- Upgraded Mobdebug (0.62) to add vararg processing.
|
||||
- Added `excludelist`/`binarylist` to exclude files and folders.
|
||||
- Added skipping binary files during find-in-files and fuzzy search.
|
||||
|
||||
### Special thanks
|
||||
- To [David Feng](https://github.com/DavidFeng) for fixing a broken symbolic link.
|
||||
- To [Robert Machmer](https://github.com/rm-code) for updated German translation and fixes for love2d engine name/description.
|
||||
- To [Derek Bailey](https://github.com/dbaileychess) for adding context menu item to update the contents of the tree.
|
||||
|
||||
### Improvements
|
||||
- Added closing search results with `Close Page` for consistency (#416).
|
||||
- Added option to show search results in multipe tabs (#416).
|
||||
- Added package `IsValidCtrl` method (#166).
|
||||
- Added skipping binary files in commandbar (#31, #455).
|
||||
- Added handling of `**` in exclusion masks (#455).
|
||||
- Added `excludelist`/`binarylist` to exclude files and folders (closes #455).
|
||||
- Added `search.autohide` option to hide search panel after search (#416).
|
||||
- Added `debugger.requestattention` to configure focus switch (closes #449).
|
||||
- Added closing search panel on `Escape` in the editor (closes #450, #416).
|
||||
- Added `search.zoom` setting to zoom search results (#416).
|
||||
- Added warning when interpreter can't be loaded and the default one is used.
|
||||
- Added support for `wxImage` used in `imagemap` (#436).
|
||||
- Added icon tint processing (`imagetint` option).
|
||||
- Added `search.contextlinesbefore`/`search.contextlinesafter` settings (#416).
|
||||
- Added `search.autocomplete` setting do configure search autocomplete (#416).
|
||||
- Added auto-complete for find and replace fields (#416).
|
||||
- Added saving search settings between restarts (#416).
|
||||
- Added deleting of protected text in Cut/Paste operations (closes #412).
|
||||
- Added refresh context menu item to update the contents of the tree (thanks to Derek Bailey).
|
||||
- Added ignoring assignment in comments for auto-complete.
|
||||
- Added preview screen to check changes in replace-in-files (#416).
|
||||
- Added search toolbar button to set/unset context in search results (#416).
|
||||
- Allowed for larger default size of docked panels (#424).
|
||||
- Allowed closing `Search Results` tab while search is in progress (#416).
|
||||
- Disabled refresh when `outlineinactivity=nil` and `showonefile=true` (#337).
|
||||
- Improved incremental processing to avoid marking table fields as variables.
|
||||
- Improved logic to skip binary files during search (#416).
|
||||
- Moved cancelling auto-complete popup to idle event (fixed #447).
|
||||
- Moved winapi dll to `clibs` folder to avoid conflict with other winapi versions.
|
||||
- Optimized `Go To File` file traversal in commandbar (#31).
|
||||
- Redesigned the search panel (closes #416; closes #398).
|
||||
- Removed option to request attention from breakpoint activation (#449, closes #454).
|
||||
- Removed warnings from loose parser to stop polluting stderr on Linux (#425).
|
||||
- Removed hardcoded references to menu positions to simplify adding new items.
|
||||
- Removed saving .bak files as it's replaced by replace-in-files preview (#416).
|
||||
- Reorganized folding to allow more editor-like components to be foldable.
|
||||
- Switched to using `wxFileSize` instead of `Length` (fixes #458).
|
||||
- Updated event documentation.
|
||||
- Upgraded Mobdebug (0.62) to add vararg processing.
|
||||
- Updated build files to use release version of Lua 5.3 (#453).
|
||||
- Updated Corona interpreter to allow debugging on Linux using Wine.
|
||||
- Updated folder traversing logic to limit number of open folders (fixes #441).
|
||||
- Update Readme.md to use correct name for the LOVE framework (thanks to Robert Machmer).
|
||||
- Updated Linux build scripts to add `debug` option.
|
||||
- Updated love2d interpreter to use proper engine name/description (closes #433) (thanks to Robert Machmer).
|
||||
- Updated german translation (#432, #70).
|
||||
- Updated love2d APU for v0.9.2 (#247).
|
||||
- Update german translation (thanks to Robert Machmer).
|
||||
- Updated `Select and Find` to capture selection for subsequent use (#416).
|
||||
- Updated `Find Next/Prev` to continue search using the current find text (#416).
|
||||
- Updated unfolding of folded lines before delete or overwrite.
|
||||
- Updated folding to collapse only when clicked on the header.
|
||||
- Updated config samples to use `ID.code` instead of obsolete `G.ID_code`.
|
||||
|
||||
### Fixes
|
||||
- Fixed crash on Windows by disabling events in Outline refresh (fixes #442).
|
||||
- Fixed file traversing not to match `foo.bar!` for `*.bar' mask (#416).
|
||||
- Fixed showing of not translated messages that require pluralization.
|
||||
- fix broken symbolic link (thanks to David Feng).
|
||||
- Fixed an empty popup (that could lead to a crash) when dynamic words is on.
|
||||
- Fixed commandbar positioning on Linux affected by 5b665477 (#31).
|
||||
- Fixed loose parser to handle multiple assignments (fixes #430).
|
||||
- Fixed editor activation after dragging of inactive tab (fixes #427).
|
||||
- Fixed indentation after comment with markdown markup (closes #428, #324).
|
||||
- Fixed auto-complete issue causing looping warning (#143).
|
||||
- Fix commandbar position with split editor tabs (#31).
|
||||
- Fixed re-indenting of selection with comments at the top of the file (#324).
|
||||
- Fixed restoring pane size after hide/show operations (fixes #424).
|
||||
|
||||
### Incompatibilities
|
||||
- Removed saving .bak files as it's replaced by replace-in-files preview.
|
||||
|
||||
## 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
|
||||
|
||||
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
|
||||
|
||||
68
README.md
68
README.md
@@ -2,16 +2,24 @@
|
||||
|
||||
[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 (LuaJIT,
|
||||
[Löve 2D](http://notebook.kulchenko.com/zerobrane/love2d-debugging),
|
||||
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](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),
|
||||
[OpenResty/Nginx](http://notebook.kulchenko.com/zerobrane/debugging-openresty-nginx-lua-scripts-with-zerobrane-studio),
|
||||
[Torch7](http://notebook.kulchenko.com/zerobrane/torch-debugging-with-zerobrane-studio),
|
||||
[Redis](http://notebook.kulchenko.com/zerobrane/redis-lua-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/).
|
||||
|
||||

|
||||
@@ -22,32 +30,36 @@ and others). It originated from the [Estrela Editor](http://www.luxinia.de/index
|
||||
* 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 local and [remote debugging](http://studio.zerobrane.com/doc-remote-debugging.html) for Lua 5.1,
|
||||
[Lua 5.2](http://studio.zerobrane.com/doc-lua52-debugging.html),
|
||||
[LuaJIT](http://studio.zerobrane.com/doc-luajit-debugging.html),
|
||||
and [other Lua engines](http://studio.zerobrane.com/documentation.html#debugging).
|
||||
* [Live coding](http://studio.zerobrane.com/documentation.html#live_coding)
|
||||
* 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),
|
||||
[LÖVE](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`, project-wide `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.html);
|
||||
- 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.html) that provide additional functionality;
|
||||
- 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.html) of the menus and messages to other languages;
|
||||
- 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.
|
||||
* [Tips and tricks](http://studio.zerobrane.com/doc-tips-and-tricks.html).
|
||||
* 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).
|
||||
|
||||
## Installation
|
||||
|
||||
@@ -58,24 +70,28 @@ No compilation is needed, although the scripts to compile required libraries for
|
||||
|
||||
```
|
||||
Open file(s):
|
||||
zbstudio <filename> [<filename>...]
|
||||
any non-option will be treated as a file to open or a directory to set as the project directory
|
||||
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
|
||||
@@ -88,14 +104,10 @@ If you are loading a file, you can also request the cursor to be set on a partic
|
||||
|
||||
## Where is Estrela?
|
||||
|
||||
The projects have been merged and ZeroBrane Studio will lead the future.
|
||||
Please reassociate files with ZeroBrane Studio. To keep your history of files
|
||||
and projects copy the contents of the `EstrelaEditor.ini` in your HOME
|
||||
directory to `ZeroBraneStudio.ini`. If you have used Estrela for graphics
|
||||
shader authoring or luxinia, create/modify the `cfg/user.lua` to include the
|
||||
content of `cfg/estrela.lua` to load all tools and specifications by default
|
||||
again.
|
||||
The Estrela project has been merged into ZeroBrane Studio. If you have used Estrela
|
||||
for graphics shader authoring or luxinia, create/modify the `cfg/user.lua` and
|
||||
add `include "estrela"` (1.21+) to load all tools and specifications by default again.
|
||||
|
||||
## License
|
||||
|
||||
See LICENSE file.
|
||||
See [LICENSE](LICENSE).
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
This directory contains API definitions.
|
||||
|
||||
An API definition is a set of functions that are used
|
||||
for displaying tooltip information on function calls or
|
||||
autocomplete information.
|
||||
|
||||
@@ -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)",
|
||||
@@ -166,6 +172,7 @@ imageAtomicCompSwap = fn "performs atomic operation on individual texels returns
|
||||
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)",
|
||||
@@ -180,6 +187,7 @@ atomicExchange = fn "performs atomic operation on memory location (ssbo/shared)
|
||||
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])",
|
||||
@@ -248,6 +256,7 @@ local keyw =
|
||||
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
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
return {
|
||||
-- covers both Lua 5.1 and Lua 5.2; All Lua 5.2 specific items are marked
|
||||
-- with FUNCTION/ARGUMENT/ARGS/VALUE ADDED/DEPRECATED IN Lua 5.2.
|
||||
-- covers Lua 5.1, Lua 5.2, and Lua 5.3;
|
||||
-- Lua 5.2 and Lua 5.3 specific items are marked with
|
||||
-- FUNCTION/ARGUMENT/ARGS/VALUE ADDED/DEPRECATED IN Lua 5.2 or Lua 5.3.
|
||||
|
||||
-- Keywords
|
||||
["and"] = {type = "keyword"},
|
||||
@@ -206,7 +207,7 @@ return {
|
||||
type = "lib",
|
||||
description = "The operations related to coroutines comprise a sub-library of the basic library and come inside the table coroutine.\nLua supports coroutines, also called collaborative multithreading. A coroutine in Lua represents an independent thread of execution. Unlike threads in multithread systems, however, a coroutine only suspends its execution by explicitly calling a yield function.",
|
||||
childs = {
|
||||
getfenv = {
|
||||
create = {
|
||||
type = "function",
|
||||
description = "Creates a new coroutine, with body f.\nf must be a Lua function. Returns this new coroutine, an object with type \"thread\".",
|
||||
args = "(f: function)",
|
||||
@@ -242,6 +243,12 @@ return {
|
||||
args = "(...)",
|
||||
returns = "()",
|
||||
},
|
||||
isyieldable = {
|
||||
type = "function",
|
||||
description = "Returns true when the running coroutine can yield. A running coroutine is yieldable if it is not the main thread and it is not inside a non-yieldable C function.\nFUNCTION ADDED IN Lua 5.3.",
|
||||
args = "()",
|
||||
returns = "(boolean)",
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
@@ -264,7 +271,7 @@ return {
|
||||
childs = {
|
||||
config = {
|
||||
type = "value",
|
||||
description = "A string describing some compile-time configurations for packages.\nThis string is a sequence of lines:\n* The first line is the directory separator string. Default is '\\' for Windows and '/' for all other systems.\n* The second line is the character that separates templates in a path. Default is ';'.\n* The third line is the string that marks the substitution points in a template. Default is '?'.\n* The fourth line is a string that, in a path in Windows, is replaced by the executable's directory. Default is '!'.\n* The fifth line is a mark to ignore all text before it when building the luaopen_ function name. Default is '-'.\nVALUE ADDED IN Lua 5.2.",
|
||||
description = "A string describing some compile-time configurations for packages.\nThis string is a sequence of lines:\n* The first line is the directory separator string. Default is '\\' for Windows and '/' for all other systems.\n* The second line is the character that separates templates in a path. Default is ';'.\n* The third line is the string that marks the substitution points in a template. Default is '?'.\n* The fourth line is a string that, in a path in Windows, is replaced by the executable's directory. Default is '!'.\n* The fifth line is a mark to ignore all text before it when building the luaopen_ function name. Default is '-'.",
|
||||
},
|
||||
cpath = {
|
||||
type = "value",
|
||||
@@ -355,6 +362,25 @@ return {
|
||||
args = "(s: string, pattern: string)",
|
||||
returns = "(function)",
|
||||
},
|
||||
pack = {
|
||||
type = "function",
|
||||
description = "Returns a binary string containing the values v1, v2, etc. packed (that is, serialized in binary form) according to the format string fmt.\nFUNCTION ADDED IN Lua 5.3.",
|
||||
args = "(fmt: string, v1, v2, ...)",
|
||||
returns = "(string)",
|
||||
valuetype = "string",
|
||||
},
|
||||
unpack = {
|
||||
type = "function",
|
||||
description = "Returns the values packed in string s (see string.pack) according to the format string fmt. An optional pos marks where to start reading in s (default is 1). After the read values, this function also returns the index of the first unread byte in s.\nFUNCTION ADDED IN Lua 5.3.",
|
||||
args = "(fmt: string, s: string [, pos: number])",
|
||||
returns = "(values)",
|
||||
},
|
||||
packsize = {
|
||||
type = "function",
|
||||
description = "Returns the size of a string resulting from string.pack with the given format. The format string cannot have the variable-length options 's' or 'z'.\nFUNCTION ADDED IN Lua 5.3.",
|
||||
args = "(fmt: string)",
|
||||
returns = "(number)",
|
||||
},
|
||||
gsub = {
|
||||
type = "function",
|
||||
description = "Returns a copy of s in which all (or the first n, if given) occurrences of the pattern have been replaced by a replacement string specified by repl, which can be a string, a table, or a function.\ngsub also returns, as its second value, the total number of matches that occurred. The name gsub comes from Global SUBstitution.\nIf repl is a string, then its value is used for replacement. The character % works as an escape character: any sequence in repl of the form %d, with d between 1 and 9, stands for the value of the d-th captured substring. The sequence %0 stands for the whole match. The sequence %% stands for a single %.\nIf repl is a table, then the table is queried for every match, using the first capture as the key.\nIf repl is a function, then this function is called every time a match occurs, with all captured substrings passed as arguments, in order.\nIn any case, if the pattern specifies no captures, then it behaves as if the whole pattern was inside a capture.\nIf the value returned by the table query or by the function call is a string or a number, then it is used as the replacement string; otherwise, if it is false or nil, then there is no replacement (that is, the original match is kept in the string).",
|
||||
@@ -443,6 +469,12 @@ return {
|
||||
args = "(...)",
|
||||
returns = "(table)",
|
||||
},
|
||||
move = {
|
||||
type = "function",
|
||||
description = "Moves elements from table a1 to table a2. This function performs the equivalent to the following multiple assignment: a2[t],··· = a1[f],···,a1[e]. The default for a2 is a1. The destination range can overlap with the source range. Index f must be positive.\nFUNCTION ADDED IN Lua 5.3.",
|
||||
args = "(a1: table, f, e, t [,a2: table])",
|
||||
returns = "()",
|
||||
},
|
||||
remove = {
|
||||
type = "function",
|
||||
description = "Removes from list the element at position pos, shifting down the elements list[pos+1], list[pos+2], ···, list[#list] and erasing element list[#list].\nReturns the value of the removed element.\nThe default value for pos is #list, so that a call table.remove(t) removes the last element of list t.",
|
||||
@@ -591,6 +623,14 @@ return {
|
||||
type = "value",
|
||||
description = "The value of pi.",
|
||||
},
|
||||
mininteger = {
|
||||
type = "value",
|
||||
description = "An integer with the minimum value for an integer.\nVALUE ADDED IN Lua 5.3.",
|
||||
},
|
||||
maxinteger = {
|
||||
type = "value",
|
||||
description = "An integer with the maximum value for an integer.\nVALUE ADDED IN Lua 5.3.",
|
||||
},
|
||||
pow = {
|
||||
type = "function",
|
||||
description = "Returns x^y.\n(You can also use the expression x^y to compute this value.)",
|
||||
@@ -645,6 +685,24 @@ return {
|
||||
args = "(x: number)",
|
||||
returns = "(number)",
|
||||
},
|
||||
type = {
|
||||
type = "function",
|
||||
description = [[Returns "integer" if x is an integer, "float" if it is a float, or nil if x is not a number.\nFUNCTION ADDED IN Lua 5.3.]],
|
||||
args = "(x: number)",
|
||||
returns = "(string)",
|
||||
},
|
||||
tointeger = {
|
||||
type = "function",
|
||||
description = "If the value x is convertible to an integer, returns that integer. Otherwise, returns nil.\nFUNCTION ADDED IN Lua 5.3.",
|
||||
args = "(x: number)",
|
||||
returns = "(number)",
|
||||
},
|
||||
ult = {
|
||||
type = "function",
|
||||
description = "Returns a boolean, true if integer m is below integer n when they are compared as unsigned integers.\nFUNCTION ADDED IN Lua 5.3.",
|
||||
args = "(m: number, n: number)",
|
||||
returns = "(boolean)",
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
|
||||
1719
api/lua/corona.lua
1719
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
1835
api/lua/love2d.lua
1835
api/lua/love2d.lua
File diff suppressed because it is too large
Load Diff
@@ -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,
|
||||
},
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
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/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/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/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.
@@ -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"
|
||||
@@ -22,7 +29,7 @@ BUILD_FLAGS="-O2 -shared -s -I $INSTALL_DIR/include -L $INSTALL_DIR/lib $FPIC"
|
||||
|
||||
# paths configuration
|
||||
WXWIDGETS_BASENAME="wxWidgets"
|
||||
WXWIDGETS_URL="http://svn.wxwidgets.org/svn/wx/wxWidgets/trunk"
|
||||
WXWIDGETS_URL="https://github.com/pkulchenko/wxWidgets.git"
|
||||
|
||||
WXLUA_BASENAME="wxlua"
|
||||
WXLUA_URL="https://svn.code.sf.net/p/wxlua/svn/trunk"
|
||||
@@ -37,12 +44,20 @@ if [ $# -eq 0 ]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
WXLUASTRIP="/strip"
|
||||
WXWIDGETSDEBUG="--disable-debug"
|
||||
WXLUABUILD="MinSizeRel"
|
||||
|
||||
# iterate through the command line arguments
|
||||
for ARG in "$@"; do
|
||||
case $ARG in
|
||||
5.2)
|
||||
BUILD_52=true
|
||||
;;
|
||||
5.3)
|
||||
BUILD_53=true
|
||||
BUILD_FLAGS="$BUILD_FLAGS -DLUA_COMPAT_APIINTCASTS"
|
||||
;;
|
||||
jit)
|
||||
BUILD_JIT=true
|
||||
;;
|
||||
@@ -58,6 +73,11 @@ for ARG in "$@"; do
|
||||
luasocket)
|
||||
BUILD_LUASOCKET=true
|
||||
;;
|
||||
debug)
|
||||
WXLUASTRIP=""
|
||||
WXWIDGETSDEBUG="--enable-debug=max --enable-debug_gdb"
|
||||
WXLUABUILD="Debug"
|
||||
;;
|
||||
all)
|
||||
BUILD_WXWIDGETS=true
|
||||
BUILD_LUA=true
|
||||
@@ -105,24 +125,32 @@ LUA_BASENAME="lua-5.1.5"
|
||||
if [ $BUILD_52 ]; then
|
||||
LUAV="52"
|
||||
LUAS=$LUAV
|
||||
LUA_BASENAME="lua-5.2.2"
|
||||
LUA_BASENAME="lua-5.2.4"
|
||||
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.1"
|
||||
LUA_FILENAME="$LUA_BASENAME.tar.gz"
|
||||
LUA_URL="http://www.lua.org/ftp/$LUA_FILENAME"
|
||||
fi
|
||||
|
||||
if [ $BUILD_JIT ]; then
|
||||
LUA_BASENAME="LuaJIT-2.0.2"
|
||||
LUA_BASENAME="LuaJIT-2.0.4"
|
||||
LUA_FILENAME="$LUA_BASENAME.tar.gz"
|
||||
LUA_URL="http://luajit.org/download/$LUA_FILENAME"
|
||||
fi
|
||||
|
||||
# build wxWidgets
|
||||
if [ $BUILD_WXWIDGETS ]; then
|
||||
svn co "$WXWIDGETS_URL" "$WXWIDGETS_BASENAME" || { echo "Error: failed to checkout wxWidgets"; exit 1; }
|
||||
git clone "$WXWIDGETS_URL" "$WXWIDGETS_BASENAME" || { echo "Error: failed to get wxWidgets"; exit 1; }
|
||||
|
||||
cd "$WXWIDGETS_BASENAME"
|
||||
./configure --prefix="$INSTALL_DIR" --disable-debug --disable-shared --enable-unicode \
|
||||
./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 --with-gtk=2 \
|
||||
@@ -165,16 +193,17 @@ if [ $BUILD_WXLUA ]; then
|
||||
# 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
|
||||
# remove "Unable to call an unknown method..." error as it leads to a leak
|
||||
# see http://sourceforge.net/p/wxlua/mailman/message/34629522/ for details
|
||||
sed -i '/Unable to call an unknown method/{N;s/.*/ \/\/ removed by ZBS build process/}' modules/wxlua/wxlbind.cpp
|
||||
|
||||
cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$INSTALL_DIR" -DCMAKE_BUILD_TYPE=MinSizeRel -DBUILD_SHARED_LIBS=FALSE \
|
||||
cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$INSTALL_DIR" -DCMAKE_BUILD_TYPE=$WXLUABUILD -DBUILD_SHARED_LIBS=FALSE \
|
||||
-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 \
|
||||
-DwxLua_LUA_INCLUDE_DIR="$INSTALL_DIR/include" -DwxLua_LUA_LIBRARY="$INSTALL_DIR/lib/liblua.a" .
|
||||
(cd modules/luamodule; make $MAKEFLAGS) || { echo "Error: failed to build wxLua"; exit 1; }
|
||||
(cd modules/luamodule; make install/strip)
|
||||
(cd modules/luamodule; make install$WXLUASTRIP)
|
||||
[ -f "$INSTALL_DIR/lib/libwx.so" ] || { echo "Error: libwx.so isn't found"; exit 1; }
|
||||
cd ../..
|
||||
rm -rf "$WXLUA_BASENAME"
|
||||
|
||||
@@ -24,7 +24,7 @@ BUILD_FLAGS="-O2 -arch x86_64 -dynamiclib -undefined dynamic_lookup $MACOSX_FLAG
|
||||
|
||||
# paths configuration
|
||||
WXWIDGETS_BASENAME="wxWidgets"
|
||||
WXWIDGETS_URL="http://svn.wxwidgets.org/svn/wx/wxWidgets/trunk"
|
||||
WXWIDGETS_URL="https://github.com/pkulchenko/wxWidgets.git"
|
||||
|
||||
WXLUA_BASENAME="wxlua"
|
||||
WXLUA_URL="https://svn.code.sf.net/p/wxlua/svn/trunk"
|
||||
@@ -49,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
|
||||
;;
|
||||
@@ -116,21 +120,29 @@ LUA_BASENAME="lua-5.1.5"
|
||||
if [ $BUILD_52 ]; then
|
||||
LUAV="52"
|
||||
LUAS=$LUAV
|
||||
LUA_BASENAME="lua-5.2.2"
|
||||
LUA_BASENAME="lua-5.2.4"
|
||||
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.1"
|
||||
LUA_FILENAME="$LUA_BASENAME.tar.gz"
|
||||
LUA_URL="http://www.lua.org/ftp/$LUA_FILENAME"
|
||||
fi
|
||||
|
||||
if [ $BUILD_JIT ]; then
|
||||
LUA_BASENAME="LuaJIT-2.0.2"
|
||||
LUA_BASENAME="LuaJIT-2.0.4"
|
||||
LUA_FILENAME="$LUA_BASENAME.tar.gz"
|
||||
LUA_URL="http://luajit.org/download/$LUA_FILENAME"
|
||||
fi
|
||||
|
||||
# build wxWidgets
|
||||
if [ $BUILD_WXWIDGETS ]; then
|
||||
svn co "$WXWIDGETS_URL" "$WXWIDGETS_BASENAME" || { echo "Error: failed to checkout wxWidgets"; exit 1; }
|
||||
git clone "$WXWIDGETS_URL" "$WXWIDGETS_BASENAME" || { echo "Error: failed to get wxWidgets"; exit 1; }
|
||||
cd "$WXWIDGETS_BASENAME"
|
||||
MINSDK=""
|
||||
if [ -d $MACOSX_SDK_PATH ]; then
|
||||
@@ -192,8 +204,9 @@ if [ $BUILD_WXLUA ]; then
|
||||
# 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
|
||||
# remove "Unable to call an unknown method..." error as it leads to a leak
|
||||
# see http://sourceforge.net/p/wxlua/mailman/message/34629522/ for details
|
||||
sed -i '/Unable to call an unknown method/{N;s/.*/ \/\/ removed by ZBS build process/}' modules/wxlua/wxlbind.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 $MINSDK \
|
||||
|
||||
@@ -14,7 +14,7 @@ BUILD_FLAGS="-O2 -shared -s -I $INSTALL_DIR/include -L $INSTALL_DIR/lib"
|
||||
|
||||
# paths configuration
|
||||
WXWIDGETS_BASENAME="wxWidgets"
|
||||
WXWIDGETS_URL="http://svn.wxwidgets.org/svn/wx/wxWidgets/trunk"
|
||||
WXWIDGETS_URL="https://github.com/pkulchenko/wxWidgets.git"
|
||||
|
||||
WXLUA_BASENAME="wxlua"
|
||||
WXLUA_URL="https://svn.code.sf.net/p/wxlua/svn/trunk"
|
||||
@@ -23,14 +23,18 @@ LUASOCKET_BASENAME="luasocket-3.0-rc1"
|
||||
LUASOCKET_FILENAME="v3.0-rc1.zip"
|
||||
LUASOCKET_URL="https://github.com/diegonehab/luasocket/archive/$LUASOCKET_FILENAME"
|
||||
|
||||
OPENSSL_BASENAME="openssl-1.0.1e"
|
||||
OPENSSL_BASENAME="openssl-1.0.2d"
|
||||
OPENSSL_FILENAME="$OPENSSL_BASENAME.tar.gz"
|
||||
OPENSSL_URL="http://www.openssl.org/source/$OPENSSL_FILENAME"
|
||||
|
||||
LUASEC_BASENAME="luasec-0.4.1"
|
||||
LUASEC_BASENAME="luasec-0.5"
|
||||
LUASEC_FILENAME="$LUASEC_BASENAME.zip"
|
||||
LUASEC_URL="https://github.com/brunoos/luasec/archive/$LUASEC_FILENAME"
|
||||
|
||||
LFS_BASENAME="v_1_6_3"
|
||||
LFS_FILENAME="$LFS_BASENAME.tar.gz"
|
||||
LFS_URL="https://github.com/keplerproject/luafilesystem/archive/$LFS_FILENAME"
|
||||
|
||||
WINAPI_BASENAME="winapi"
|
||||
WINAPI_URL="https://github.com/stevedonovan/winapi.git"
|
||||
|
||||
@@ -50,6 +54,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
|
||||
;;
|
||||
@@ -71,6 +79,9 @@ for ARG in "$@"; do
|
||||
winapi)
|
||||
BUILD_WINAPI=true
|
||||
;;
|
||||
lfs)
|
||||
BUILD_LFS=true
|
||||
;;
|
||||
zbstudio)
|
||||
BUILD_ZBSTUDIO=true
|
||||
;;
|
||||
@@ -128,28 +139,38 @@ fi
|
||||
mkdir -p "$INSTALL_DIR" || { echo "Error: cannot create directory $INSTALL_DIR"; exit 1; }
|
||||
|
||||
LUAV="51"
|
||||
LUAD="5.1"
|
||||
LUAS=""
|
||||
LUA_BASENAME="lua-5.1.5"
|
||||
|
||||
if [ $BUILD_52 ]; then
|
||||
LUAV="52"
|
||||
LUAD="5.2"
|
||||
LUAS=$LUAV
|
||||
LUA_BASENAME="lua-5.2.2"
|
||||
LUA_BASENAME="lua-5.2.4"
|
||||
fi
|
||||
|
||||
LUA_FILENAME="$LUA_BASENAME.tar.gz"
|
||||
LUA_URL="http://www.lua.org/ftp/$LUA_FILENAME"
|
||||
|
||||
if [ $BUILD_53 ]; then
|
||||
LUAV="53"
|
||||
LUAD="5.3"
|
||||
LUAS=$LUAV
|
||||
LUA_BASENAME="lua-5.3.1"
|
||||
LUA_FILENAME="$LUA_BASENAME.tar.gz"
|
||||
LUA_URL="http://www.lua.org/ftp/$LUA_FILENAME"
|
||||
fi
|
||||
|
||||
if [ $BUILD_JIT ]; then
|
||||
LUA_BASENAME="LuaJIT-2.0.2"
|
||||
LUA_BASENAME="LuaJIT-2.0.4"
|
||||
LUA_FILENAME="$LUA_BASENAME.tar.gz"
|
||||
LUA_URL="http://luajit.org/download/$LUA_FILENAME"
|
||||
fi
|
||||
|
||||
# build wxWidgets
|
||||
if [ $BUILD_WXWIDGETS ]; then
|
||||
svn co "$WXWIDGETS_URL" "$WXWIDGETS_BASENAME" || { echo "Error: failed to checkout wxWidgets"; exit 1; }
|
||||
svn revert -R "$WXWIDGETS_BASENAME"
|
||||
git clone "$WXWIDGETS_URL" "$WXWIDGETS_BASENAME" || { echo "Error: failed to get wxWidgets"; exit 1; }
|
||||
cd "$WXWIDGETS_BASENAME"
|
||||
./configure --prefix="$INSTALL_DIR" $WXWIDGETSDEBUG --disable-shared --enable-unicode \
|
||||
--enable-compat28 \
|
||||
@@ -174,6 +195,16 @@ if [ $BUILD_LUA ]; then
|
||||
# move luajit to lua as it's expected by luasocket and other components
|
||||
cp "$INSTALL_DIR"/include/luajit*/* "$INSTALL_DIR/include/"
|
||||
else
|
||||
# need to patch Lua io to support large (>2GB) files on Windows:
|
||||
# http://lua-users.org/lists/lua-l/2015-05/msg00370.html
|
||||
cat <<EOF >>src/luaconf.h
|
||||
#if defined(liolib_c) && defined(__MINGW32__)
|
||||
#include <sys/types.h>
|
||||
#define l_fseek(f,o,w) fseeko64(f,o,w)
|
||||
#define l_ftell(f) ftello64(f)
|
||||
#define l_seeknum off64_t
|
||||
#endif
|
||||
EOF
|
||||
make mingw || { echo "Error: failed to build Lua"; exit 1; }
|
||||
make install INSTALL_TOP="$INSTALL_DIR"
|
||||
fi
|
||||
@@ -202,8 +233,9 @@ 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
|
||||
|
||||
# (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
|
||||
# remove "Unable to call an unknown method..." error as it leads to a leak
|
||||
# see http://sourceforge.net/p/wxlua/mailman/message/34629522/ for details
|
||||
sed -i '/Unable to call an unknown method/{N;s/.*/ \/\/ removed by ZBS build process/}' modules/wxlua/wxlbind.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"
|
||||
@@ -226,21 +258,35 @@ if [ $BUILD_LUASOCKET ]; then
|
||||
wget --no-check-certificate -c "$LUASOCKET_URL" -O "$LUASOCKET_FILENAME" || { echo "Error: failed to download LuaSocket"; exit 1; }
|
||||
unzip "$LUASOCKET_FILENAME"
|
||||
cd "$LUASOCKET_BASENAME"
|
||||
mkdir -p "$INSTALL_DIR/lib/lua/$LUAV/"{mime,socket}
|
||||
gcc $BUILD_FLAGS -o "$INSTALL_DIR/lib/lua/$LUAV/mime/core.dll" src/mime.c -llua$LUAV \
|
||||
mkdir -p "$INSTALL_DIR/lib/lua/$LUAD/"{mime,socket}
|
||||
gcc $BUILD_FLAGS -o "$INSTALL_DIR/lib/lua/$LUAD/mime/core.dll" src/mime.c -llua$LUAV \
|
||||
|| { echo "Error: failed to build LuaSocket"; exit 1; }
|
||||
gcc $BUILD_FLAGS -DLUASOCKET_INET_PTON -D_WIN32_WINNT=0x0501 -o "$INSTALL_DIR/lib/lua/$LUAV/socket/core.dll" \
|
||||
gcc $BUILD_FLAGS -DLUASOCKET_INET_PTON -D_WIN32_WINNT=0x0501 -o "$INSTALL_DIR/lib/lua/$LUAD/socket/core.dll" \
|
||||
src/{auxiliar.c,buffer.c,except.c,inet.c,io.c,luasocket.c,options.c,select.c,tcp.c,timeout.c,udp.c,wsocket.c} -lwsock32 -lws2_32 -llua$LUAV \
|
||||
|| { echo "Error: failed to build LuaSocket"; exit 1; }
|
||||
mkdir -p "$INSTALL_DIR/share/lua/$LUAV/socket"
|
||||
cp src/{ftp.lua,http.lua,smtp.lua,tp.lua,url.lua} "$INSTALL_DIR/share/lua/$LUAV/socket"
|
||||
cp src/{ltn12.lua,mime.lua,socket.lua} "$INSTALL_DIR/share/lua/$LUAV"
|
||||
[ -f "$INSTALL_DIR/lib/lua/$LUAV/mime/core.dll" ] || { echo "Error: mime/core.dll isn't found"; exit 1; }
|
||||
[ -f "$INSTALL_DIR/lib/lua/$LUAV/socket/core.dll" ] || { echo "Error: socket/core.dll isn't found"; exit 1; }
|
||||
mkdir -p "$INSTALL_DIR/share/lua/$LUAD/socket"
|
||||
cp src/{ftp.lua,http.lua,smtp.lua,tp.lua,url.lua} "$INSTALL_DIR/share/lua/$LUAD/socket"
|
||||
cp src/{ltn12.lua,mime.lua,socket.lua} "$INSTALL_DIR/share/lua/$LUAD"
|
||||
[ -f "$INSTALL_DIR/lib/lua/$LUAD/mime/core.dll" ] || { echo "Error: mime/core.dll isn't found"; exit 1; }
|
||||
[ -f "$INSTALL_DIR/lib/lua/$LUAD/socket/core.dll" ] || { echo "Error: socket/core.dll isn't found"; exit 1; }
|
||||
cd ..
|
||||
rm -rf "$LUASOCKET_FILENAME" "$LUASOCKET_BASENAME"
|
||||
fi
|
||||
|
||||
# build lfs
|
||||
if [ $BUILD_LFS ]; then
|
||||
wget --no-check-certificate -c "$LFS_URL" -O "$LFS_FILENAME" || { echo "Error: failed to download lfs"; exit 1; }
|
||||
tar -xzf "$LFS_FILENAME"
|
||||
mv "luafilesystem-$LFS_BASENAME" "$LFS_BASENAME"
|
||||
cd "$LFS_BASENAME/src"
|
||||
mkdir -p "$INSTALL_DIR/lib/lua/$LUAD/"
|
||||
gcc $BUILD_FLAGS -o "$INSTALL_DIR/lib/lua/$LUAD/lfs.dll" lfs.c -llua$LUAV \
|
||||
|| { echo "Error: failed to build lfs"; exit 1; }
|
||||
[ -f "$INSTALL_DIR/lib/lua/$LUAD/lfs.dll" ] || { echo "Error: lfs.dll isn't found"; exit 1; }
|
||||
cd ../..
|
||||
rm -rf "$LFS_FILENAME" "$LFS_BASENAME"
|
||||
fi
|
||||
|
||||
# build LuaSec
|
||||
if [ $BUILD_LUASEC ]; then
|
||||
# build openSSL
|
||||
@@ -259,11 +305,13 @@ if [ $BUILD_LUASEC ]; then
|
||||
# the folder in the archive is "luasec-luasec-....", so need to fix
|
||||
mv "luasec-$LUASEC_BASENAME" $LUASEC_BASENAME
|
||||
cd "$LUASEC_BASENAME"
|
||||
gcc $BUILD_FLAGS -o "$INSTALL_DIR/lib/lua/5.1/ssl.dll" \
|
||||
src/{timeout.c,buffer.c,io.c,context.c,ssl.c,wsocket.c} -lssl -lcrypto -lws2_32 -lgdi32 -llua51 \
|
||||
gcc $BUILD_FLAGS -o "$INSTALL_DIR/lib/lua/$LUAD/ssl.dll" \
|
||||
src/luasocket/{timeout.c,buffer.c,io.c,wsocket.c} src/{context.c,x509.c,ssl.c} -Isrc -lssl -lcrypto -lws2_32 -lgdi32 -llua$LUAV \
|
||||
|| { echo "Error: failed to build LuaSec"; exit 1; }
|
||||
cp src/{ssl.lua,https.lua} "$INSTALL_DIR/share/lua/5.1"
|
||||
[ -f "$INSTALL_DIR/lib/lua/5.1/ssl.dll" ] || { echo "Error: luasec.dll isn't found"; exit 1; }
|
||||
cp src/ssl.lua "$INSTALL_DIR/share/lua/$LUAD"
|
||||
mkdir -p "$INSTALL_DIR/share/lua/$LUAD/ssl"
|
||||
cp src/https.lua "$INSTALL_DIR/share/lua/$LUAD/ssl"
|
||||
[ -f "$INSTALL_DIR/lib/lua/$LUAD/ssl.dll" ] || { echo "Error: luasec.dll isn't found"; exit 1; }
|
||||
cd ..
|
||||
rm -rf "$LUASEC_FILENAME" "$LUASEC_BASENAME"
|
||||
fi
|
||||
@@ -272,9 +320,9 @@ fi
|
||||
if [ $BUILD_WINAPI ]; then
|
||||
git clone "$WINAPI_URL" "$WINAPI_BASENAME"
|
||||
cd "$WINAPI_BASENAME"
|
||||
gcc $BUILD_FLAGS -DPSAPI_VERSION=1 -o "$INSTALL_DIR/lib/lua/5.1/winapi.dll" winapi.c wutils.c -lpsapi -lmpr -llua51 \
|
||||
gcc $BUILD_FLAGS -DPSAPI_VERSION=1 -o "$INSTALL_DIR/lib/lua/$LUAD/winapi.dll" winapi.c wutils.c -lpsapi -lmpr -llua$LUAV \
|
||||
|| { echo "Error: failed to build winapi"; exit 1; }
|
||||
[ -f "$INSTALL_DIR/lib/lua/5.1/winapi.dll" ] || { echo "Error: winapi.dll isn't found"; exit 1; }
|
||||
[ -f "$INSTALL_DIR/lib/lua/$LUAD/winapi.dll" ] || { echo "Error: winapi.dll isn't found"; exit 1; }
|
||||
cd ..
|
||||
rm -rf "$WINAPI_BASENAME"
|
||||
fi
|
||||
@@ -292,13 +340,14 @@ mkdir -p "$BIN_DIR" || { echo "Error: cannot create directory $BIN_DIR"; exit 1;
|
||||
|
||||
[ $BUILD_LUA ] && cp "$INSTALL_DIR/bin/lua$LUAS.exe" "$INSTALL_DIR/lib/lua$LUAV.dll" "$BIN_DIR"
|
||||
[ $BUILD_WXLUA ] && cp "$INSTALL_DIR/bin/libwx.dll" "$BIN_DIR/wx.dll"
|
||||
[ $BUILD_WINAPI ] && cp "$INSTALL_DIR/lib/lua/5.1/winapi.dll" "$BIN_DIR"
|
||||
[ $BUILD_LUASEC ] && cp "$INSTALL_DIR/lib/lua/5.1/ssl.dll" "$BIN_DIR"
|
||||
[ $BUILD_WINAPI ] && cp "$INSTALL_DIR/lib/lua/$LUAD/winapi.dll" "$BIN_DIR/clibs$LUAS"
|
||||
[ $BUILD_LUASEC ] && cp "$INSTALL_DIR/lib/lua/$LUAD/ssl.dll" "$BIN_DIR/clibs$LUAS"
|
||||
[ $BUILD_LFS ] && cp "$INSTALL_DIR/lib/lua/$LUAD/lfs.dll" "$BIN_DIR/clibs$LUAS"
|
||||
|
||||
if [ $BUILD_LUASOCKET ]; then
|
||||
mkdir -p "$BIN_DIR/clibs$LUAS/"{mime,socket}
|
||||
cp "$INSTALL_DIR/lib/lua/$LUAV/mime/core.dll" "$BIN_DIR/clibs$LUAS/mime"
|
||||
cp "$INSTALL_DIR/lib/lua/$LUAV/socket/core.dll" "$BIN_DIR/clibs$LUAS/socket"
|
||||
cp "$INSTALL_DIR/lib/lua/$LUAD/mime/core.dll" "$BIN_DIR/clibs$LUAS/mime"
|
||||
cp "$INSTALL_DIR/lib/lua/$LUAD/socket/core.dll" "$BIN_DIR/clibs$LUAS/socket"
|
||||
fi
|
||||
|
||||
# To build lua5.1.dll proxy:
|
||||
|
||||
@@ -54,15 +54,20 @@ end
|
||||
|
||||
local file = ... -- pass an existing file name as a parameter
|
||||
local messages = {}
|
||||
for _, mask in ipairs({"zbstudio/*.lua", "src/main.lua", "src/editor/*.lua"}) do
|
||||
for _, mask in ipairs({"src/main.lua", "src/editor/*.lua"}) do
|
||||
for _, file in ipairs(FileSysGet(mask, wx.wxFILE)) do
|
||||
local content = FileRead(file)
|
||||
for msg in content:gmatch("[^%w]TR(%b())") 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
|
||||
@@ -78,9 +83,12 @@ end
|
||||
local plural = existing[0] and (" [0] = "..existing[0].."\n") or ""
|
||||
existing[0] = nil
|
||||
|
||||
local en = loadfile("cfg/i18n/en.lua")() -- load 'en' with translations that require pluralization
|
||||
|
||||
local msgs = {}
|
||||
for m, files in pairs(messages) do
|
||||
local str = " ["..m.."] = "..(existing[m] or 'nil, --')
|
||||
local str = " ["..m.."] = "
|
||||
..(existing[m] or (en[m:gsub([=[^['"]]=],''):gsub([=[['"]$]=],'')] and '{}, --' or 'nil, --'))
|
||||
str = str:gsub(" %-%-.*$", "").." -- "
|
||||
for f in pairs(files) do str = str .. f .. ", " end
|
||||
msgs[#msgs+1] = str:gsub(", $", "")
|
||||
@@ -90,7 +98,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
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
#define _WIN32_WINNT 0x0502
|
||||
#endif
|
||||
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#include <windows.h>
|
||||
#include <winbase.h>
|
||||
#include <stdlib.h>
|
||||
@@ -154,17 +155,11 @@ int main (int argc, char *argv[])
|
||||
MB_OK|MB_ICONERROR);
|
||||
return 0;
|
||||
}
|
||||
if (file!=NULL)
|
||||
*file = 0; // finish the string, I don't need the appname
|
||||
//int i;
|
||||
//for (i=0;i<argc; i++)
|
||||
// printf("%d %s\n",i,argv[i]);
|
||||
if (file!=NULL) *file = 0; // finish the string, don't need the appname
|
||||
|
||||
SetCurrentDirectory(buffer);
|
||||
|
||||
|
||||
SetDllDirectory(".\\bin\\");
|
||||
hinstLib = LoadLibrary("lua51.dll");
|
||||
hinstLib = LoadLibrary(".\\bin\\lua51.dll");
|
||||
if (hinstLib != NULL)
|
||||
{
|
||||
luaL_newstate = (voidfunc*) GetProcAddress(hinstLib, "luaL_newstate");
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
-- If you have used Estrela before, please copy this content
|
||||
-- to your user.lua file in the cfg/ directory
|
||||
-- If you have used Estrela for graphics shader authoring or luxinia,
|
||||
-- create/modify the `user.lua` file in the current folder
|
||||
-- and add `include "estrela"` (1.21+) to load all tools and specifications by default again.
|
||||
|
||||
-- load all tools, specs, and interpreters
|
||||
local all = function() return true end
|
||||
@@ -9,8 +10,6 @@ load.interpreters(all)
|
||||
|
||||
-- this flag means that toggling between projects, will not affect the
|
||||
-- list of opened files (old estrela default).
|
||||
-- zbstudio defaults here to true, meaning that you get
|
||||
-- per-project list of openend files
|
||||
projectautoopen = false
|
||||
|
||||
-- default search paths for luxinia
|
||||
|
||||
218
cfg/i18n/cn.lua
218
cfg/i18n/cn.lua
@@ -1,56 +1,53 @@
|
||||
return {
|
||||
["%d instance"] = "%d 个体", -- src\editor\findreplace.lua
|
||||
["%s event failed: %s"] = nil, -- src\editor\package.lua
|
||||
["%s%% formatted..."] = nil, -- src\editor\print.lua
|
||||
["%s%% loaded..."] = nil, -- src\editor\commands.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\gui.lua, src\editor\menu_file.lua
|
||||
["&Community"] = nil, -- src\editor\menu_help.lua
|
||||
["&Compile"] = "编译", -- src\editor\menu_project.lua
|
||||
["&Copy"] = "复制", -- src\editor\menu_edit.lua, src\editor\editor.lua
|
||||
["&Copy Value"] = nil, -- src\editor\debugger.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
|
||||
["&Find All"] = "查找全部", -- src\editor\findreplace.lua
|
||||
["&Find Next"] = "查找下一个", -- src\editor\findreplace.lua
|
||||
["&Find"] = "查找", -- src\editor\menu_search.lua
|
||||
["&Fold/Unfold All"] = "全 折叠/展开", -- src\editor\menu_edit.lua
|
||||
["&Frequently Asked Questions"] = nil, -- src\editor\menu_help.lua
|
||||
["&Getting Started Guide"] = nil, -- src\editor\menu_help.lua
|
||||
["&Go To Line..."] = "到...行", -- src\editor\menu_search.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\menu_edit.lua, src\editor\editor.lua
|
||||
["&Paste"] = "粘贴", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Print..."] = nil, -- src\editor\print.lua
|
||||
["&Project Page"] = nil, -- src\editor\menu_help.lua
|
||||
["&Project"] = "项目", -- src\editor\inspect.lua, src\editor\menu_project.lua
|
||||
["&Redo"] = "重做", -- src\editor\menu_edit.lua, src\editor\editor.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
|
||||
["&Replace"] = "替换", -- src\editor\menu_search.lua
|
||||
["&Run"] = "执行", -- src\editor\menu_project.lua
|
||||
["&Save"] = "保存", -- src\editor\gui.lua, src\editor\menu_file.lua
|
||||
["&Search"] = "搜索", -- src\editor\menu_search.lua
|
||||
["&Select Command"] = nil, -- src\editor\gui.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
|
||||
["&Tool Bar"] = nil, -- src\editor\menu_view.lua
|
||||
["&Tutorials"] = nil, -- src\editor\menu_help.lua
|
||||
["&Undo"] = "撤消", -- src\editor\menu_edit.lua, src\editor\editor.lua
|
||||
["&Up"] = "往上", -- src\editor\findreplace.lua
|
||||
["&Undo"] = "撤消", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.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
|
||||
@@ -60,23 +57,29 @@ return {
|
||||
["Analyze"] = "分析", -- src\editor\inspect.lua
|
||||
["Auto Complete Identifiers"] = "自动补全标识符", -- src\editor\menu_edit.lua
|
||||
["Auto complete while typing"] = "当输入时自动补全", -- src\editor\menu_edit.lua
|
||||
["Binary file is shown as read-only as it is only partially loaded."] = nil, -- src\editor\commands.lua
|
||||
["Bookmark"] = nil, -- src\editor\menu_edit.lua
|
||||
["Break execution at the next executed line of code"] = "执行下一语句之后中断执行", -- src\editor\gui.lua, src\editor\menu_project.lua
|
||||
["C&lear Output Window"] = "清除输出视窗", -- src\editor\menu_project.lua
|
||||
["Break execution at the next executed line of code"] = "执行下一语句之后中断执行", -- src\editor\toolbar.lua, src\editor\menu_project.lua
|
||||
["Breakpoint"] = nil, -- src\editor\menu_project.lua
|
||||
["C&lear Console Window"] = nil, -- src\editor\gui.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."] = nil, -- src\editor\debugger.lua
|
||||
["Can't open file '%s': %s"] = nil, -- src\editor\findreplace.lua, src\editor\singleinstance.lua, src\editor\inspect.lua, src\editor\outline.lua
|
||||
["Can't process auto-recovery record; invalid format: %s."] = "不能处理自动恢复存档: %s", -- src\editor\commands.lua
|
||||
["Can't replace in read-only text."] = nil, -- src\editor\findreplace.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 for '%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
|
||||
["Cancelled by the user."] = nil, -- src\editor\findreplace.lua
|
||||
["Choose a project directory"] = "选择项目文件夹", -- src\editor\findreplace.lua, src\editor\menu_project.lua, src\editor\gui.lua, src\editor\filetree.lua
|
||||
["Choose..."] = "请选...", -- src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Clear Items"] = nil, -- src\editor\menu_file.lua
|
||||
["Choose a directory to map"] = nil, -- src\editor\filetree.lua
|
||||
["Choose a project directory"] = "选择项目文件夹", -- src\editor\toolbar.lua, src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Choose a search directory"] = nil, -- src\editor\findreplace.lua
|
||||
["Choose..."] = "请选...", -- src\editor\findreplace.lua, src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Clear Items"] = nil, -- src\editor\findreplace.lua, 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
|
||||
@@ -93,27 +96,29 @@ return {
|
||||
["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\filetree.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\gui.lua, src\editor\menu_file.lua
|
||||
["Cu&t"] = "剪切", -- src\editor\menu_edit.lua, src\editor\editor.lua
|
||||
["Create an empty document"] = "新建空文档", -- src\editor\toolbar.lua, 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
|
||||
["Disable Indexing For '%s'"] = nil, -- src\editor\outline.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
|
||||
["Enable Indexing"] = nil, -- src\editor\outline.lua
|
||||
["Enter Lua code and press Enter to run it."] = "输入Lua代码然后按 <Enter> 以执行", -- src\editor\shellbox.lua
|
||||
["Enter command line parameters (use Cancel to clear)"] = nil, -- src\editor\menu_project.lua
|
||||
["Enter line number"] = "输入行号码", -- src\editor\menu_search.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
|
||||
@@ -121,60 +126,79 @@ return {
|
||||
["Error"] = "错误", -- src\editor\commands.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
|
||||
["Execute the current project/file"] = "执行当前项目/文档", -- src\editor\toolbar.lua, 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' 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\gui.lua, src\editor\menu_search.lua
|
||||
["Find and replace text"] = "查找text然后更换", -- src\editor\toolbar.lua, src\editor\menu_search.lua
|
||||
["Find in files"] = "在文档中查找", -- src\editor\toolbar.lua
|
||||
["Find text in files"] = "在文档中查找text", -- src\editor\menu_search.lua
|
||||
["Find text"] = "查找text", -- src\editor\gui.lua, src\editor\menu_search.lua
|
||||
["Find text"] = "查找text", -- src\editor\toolbar.lua, 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
|
||||
["Find"] = "查找", -- src\editor\toolbar.lua
|
||||
["Fold or unfold all code folds"] = "折叠/展开所有代码折叠", -- src\editor\menu_edit.lua
|
||||
["Formatting page %d..."] = nil, -- src\editor\print.lua
|
||||
["Found %d instance."] = {}, -- src\editor\findreplace.lua
|
||||
["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 Definition"] = nil, -- src\editor\editor.lua
|
||||
["Go To Line"] = "到...行", -- src\editor\menu_search.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 Next Breakpoint"] = nil, -- src\editor\menu_project.lua
|
||||
["Go To Previous Bookmark"] = nil, -- src\editor\menu_edit.lua
|
||||
["Go to a selected line"] = "到所选的行", -- src\editor\menu_search.lua
|
||||
["Go To Previous Breakpoint"] = nil, -- src\editor\menu_project.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
|
||||
["In Files"] = "在档案里", -- src\editor\findreplace.lua
|
||||
["Jump to a function definition..."] = "跳到函数定义", -- src\editor\editor.lua
|
||||
["Ignore and don't index symbols from files in the selected directory"] = nil, -- src\editor\outline.lua
|
||||
["Ignored error in debugger initialization code: %s."] = nil, -- src\editor\debugger.lua
|
||||
["Indexing %d files: '%s'..."] = nil, -- src\editor\outline.lua
|
||||
["Indexing completed."] = nil, -- src\editor\outline.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\gui.lua, src\editor\shellbox.lua
|
||||
["Lua &Interpreter"] = "Lua 解释器", -- src\editor\menu_project.lua
|
||||
["Map Directory..."] = nil, -- src\editor\filetree.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
|
||||
["Markers Window"] = nil, -- src\editor\menu_view.lua
|
||||
["Markers"] = nil, -- src\editor\markers.lua
|
||||
["Match case"] = "case匹配", -- src\editor\toolbar.lua
|
||||
["Match whole word"] = "全句匹配", -- src\editor\toolbar.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 With Default Program"] = nil, -- src\editor\filetree.lua
|
||||
["Open an existing document"] = "打开现存文档", -- src\editor\gui.lua, src\editor\menu_file.lua
|
||||
["Open an existing document"] = "打开现存文档", -- src\editor\toolbar.lua, 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\gui.lua, src\editor\output.lua, src\editor\settings.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
|
||||
["Page Setup..."] = nil, -- src\editor\print.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
|
||||
["Print the current document"] = nil, -- src\editor\print.lua
|
||||
["Program '%s' started in '%s' (pid: %d)."] = "程式 '%s' 执行于 '%s' (pid: %d).", -- src\editor\output.lua
|
||||
["Program can't start because conflicting process is running as '%s'."] = "程序不能启动因为有名为 '%s' 的冲突进程", -- src\editor\output.lua
|
||||
["Program completed in %.2f seconds (pid: %d)."] = "程序于 %.2f 秒完成 (pid: %d).", -- src\editor\output.lua
|
||||
@@ -183,98 +207,132 @@ return {
|
||||
["Program unable to run as '%s'."] = "程式不能以 '%s' 执行", -- src\editor\output.lua
|
||||
["Project Directory"] = "项目文件夹", -- src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Project history"] = nil, -- src\editor\menu_file.lua
|
||||
["Project"] = "项目", -- src\editor\gui.lua
|
||||
["Project"] = "项目", -- src\editor\filetree.lua
|
||||
["Project/&FileTree Window"] = "项目/文档树 视窗", -- src\editor\menu_view.lua
|
||||
["Provide command line parameters"] = nil, -- src\editor\menu_project.lua
|
||||
["Queued %d files to index."] = nil, -- src\editor\menu_search.lua
|
||||
["R/O"] = "唯读", -- src\editor\editor.lua
|
||||
["R/W"] = "读写", -- src\editor\editor.lua
|
||||
["Re&place In Files"] = "在文档中替换", -- src\editor\menu_search.lua
|
||||
["Recent &Projects"] = nil, -- src\editor\menu_file.lua
|
||||
["Re-indent selected lines"] = nil, -- src\editor\menu_edit.lua
|
||||
["Reached end of selection and wrapped around."] = nil, -- src\editor\findreplace.lua
|
||||
["Reached end of text and wrapped around."] = nil, -- src\editor\findreplace.lua
|
||||
["Recent Files"] = "最近的文档", -- src\editor\menu_file.lua
|
||||
["Recent Projects"] = nil, -- src\editor\menu_file.lua
|
||||
["Redo last edit undone"] = "重做最后被取消的编辑", -- src\editor\menu_edit.lua
|
||||
["Refresh Index"] = nil, -- src\editor\outline.lua
|
||||
["Refresh indexed symbols from files in the selected directory"] = nil, -- src\editor\outline.lua
|
||||
["Refresh"] = "刷新", -- src\editor\filetree.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
|
||||
["Regular expression"] = "正则表达式", -- src\editor\toolbar.lua
|
||||
["Remote console"] = "远程主控台", -- src\editor\shellbox.lua
|
||||
["Rename All Instances"] = nil, -- src\editor\editor.lua
|
||||
["Replace A&ll"] = "更换全部", -- src\editor\findreplace.lua
|
||||
["Replace"] = "更换", -- src\editor\findreplace.lua
|
||||
["Replace All Selections"] = nil, -- src\editor\editor.lua
|
||||
["Replace all"] = "更换全部", -- src\editor\toolbar.lua
|
||||
["Replace next instance"] = nil, -- src\editor\toolbar.lua
|
||||
["Replaced %d instance."] = {}, -- 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
|
||||
["Run as Scratchpad"] = "以Scratchpad执行", -- src\editor\menu_project.lua
|
||||
["Run As Scratchpad"] = "以Scratchpad执行", -- src\editor\menu_project.lua
|
||||
["Run To Cursor"] = nil, -- src\editor\menu_project.lua, src\editor\editor.lua
|
||||
["Run as Scratchpad"] = "以Scratchpad执行", -- src\editor\toolbar.lua
|
||||
["Run to cursor"] = nil, -- src\editor\toolbar.lua, 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\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\gui.lua, src\editor\menu_file.lua
|
||||
["Save all open documents"] = "保存所有开启的文档", -- src\editor\toolbar.lua, 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\gui.lua, src\editor\menu_file.lua
|
||||
["Save the current document"] = "保存当前文档", -- src\editor\toolbar.lua, 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
|
||||
["Search direction"] = nil, -- src\editor\toolbar.lua
|
||||
["Search in selection"] = nil, -- src\editor\toolbar.lua
|
||||
["Search in subdirectories"] = nil, -- src\editor\toolbar.lua
|
||||
["Searching for '%s'."] = nil, -- src\editor\findreplace.lua
|
||||
["Sel: %d/%d"] = nil, -- src\editor\editor.lua
|
||||
["Select &All"] = "选全部", -- src\editor\menu_edit.lua, src\editor\editor.lua
|
||||
["Select &All"] = "选全部", -- src\editor\gui.lua, src\editor\editor.lua, 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 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 As Start File"] = nil, -- src\editor\filetree.lua
|
||||
["Set From Current File"] = "从当前文档设置", -- src\editor\menu_project.lua
|
||||
["Set project directory from current file"] = "从当前文档设置项目文件夹", -- src\editor\gui.lua, src\editor\menu_project.lua
|
||||
["Set To Project Directory"] = nil, -- src\editor\findreplace.lua
|
||||
["Set To Selected Directory"] = nil, -- src\editor\filetree.lua
|
||||
["Set project directory from current file"] = "从当前文档设置项目文件夹", -- src\editor\toolbar.lua, src\editor\menu_project.lua
|
||||
["Set project directory to the selected one"] = nil, -- src\editor\filetree.lua
|
||||
["Set search directory"] = nil, -- src\editor\toolbar.lua
|
||||
["Set the interpreter 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 context"] = nil, -- src\editor\toolbar.lua
|
||||
["Show files previously hidden"] = nil, -- src\editor\filetree.lua
|
||||
["Show multiple result windows"] = nil, -- src\editor\toolbar.lua
|
||||
["Show tooltip for current position; place cursor after opening bracket of function"] = "在当前的位置展现tooltip; 把游标放置于函数的开括号之后", -- src\editor\menu_edit.lua
|
||||
["Show/Hide the status bar"] = nil, -- src\editor\menu_view.lua
|
||||
["Show/Hide the toolbar"] = nil, -- src\editor\menu_view.lua
|
||||
["Sort By Name"] = nil, -- src\editor\outline.lua
|
||||
["Sort selected lines"] = "对被选的行进行排列", -- src\editor\menu_edit.lua
|
||||
["Stack"] = "堆栈", -- src\editor\debugger.lua, src\editor\gui.lua
|
||||
["Source"] = nil, -- src\editor\menu_edit.lua
|
||||
["Stack"] = "堆栈", -- src\editor\debugger.lua
|
||||
["Start &Debugging"] = "开始除错", -- src\editor\menu_project.lua
|
||||
["Start or Continue debugging"] = nil, -- src\editor\gui.lua
|
||||
["Start or continue debugging"] = nil, -- src\editor\menu_project.lua
|
||||
["Start or continue debugging"] = nil, -- src\editor\toolbar.lua, 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\gui.lua, src\editor\menu_project.lua
|
||||
["Step out of the current function"] = "除错运行 离开当前的函数", -- src\editor\gui.lua, src\editor\menu_project.lua
|
||||
["Step over"] = "除错运行 掠过子程序/函数", -- src\editor\gui.lua, src\editor\menu_project.lua
|
||||
["Stop debugging and continue running the process"] = nil, -- src\editor\gui.lua, src\editor\menu_project.lua
|
||||
["Stop the currently running process"] = "终止目前进行着的进程", -- src\editor\gui.lua, src\editor\menu_project.lua
|
||||
["Step into"] = "除错运行 进入子程序/函数", -- src\editor\toolbar.lua, src\editor\menu_project.lua
|
||||
["Step out of the current function"] = "除错运行 离开当前的函数", -- src\editor\toolbar.lua, src\editor\menu_project.lua
|
||||
["Step over"] = "除错运行 掠过子程序/函数", -- src\editor\toolbar.lua, src\editor\menu_project.lua
|
||||
["Stop debugging and continue running the process"] = nil, -- src\editor\toolbar.lua, src\editor\menu_project.lua
|
||||
["Stop the currently running process"] = "终止目前进行着的进程", -- src\editor\toolbar.lua, src\editor\menu_project.lua
|
||||
["Switch to or from full screen mode"] = "切换全屏模式", -- src\editor\menu_view.lua
|
||||
["Symbol Index"] = nil, -- src\editor\outline.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\gui.lua, src\editor\menu_project.lua
|
||||
["Toggle Bookmark"] = nil, -- src\editor\markers.lua, src\editor\menu_edit.lua
|
||||
["Toggle Breakpoint"] = "切换中断点", -- src\editor\markers.lua, src\editor\menu_project.lua
|
||||
["Toggle bookmark"] = nil, -- src\editor\toolbar.lua, src\editor\menu_edit.lua, src\editor\markers.lua
|
||||
["Toggle breakpoint"] = "切换中断点", -- src\editor\markers.lua, src\editor\toolbar.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 delete file '%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
|
||||
["Unmap Directory"] = nil, -- src\editor\filetree.lua
|
||||
["Unset '%s' As Start File"] = nil, -- src\editor\filetree.lua
|
||||
["Updated %d file."] = {}, -- src\editor\findreplace.lua
|
||||
["Updating symbol index and settings..."] = nil, -- src\editor\outline.lua
|
||||
["Use %s to close."] = nil, -- src\editor\findreplace.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' 来清除shell的输出和历史", -- src\editor\shellbox.lua
|
||||
["Use Shift-Enter for multiline code."] = "用 <Shift-Enter> 来处理多行代码", -- src\editor\shellbox.lua
|
||||
["Value"] = "数值", -- src\editor\debugger.lua
|
||||
["View the markers window"] = nil, -- src\editor\menu_view.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\gui.lua, src\editor\menu_view.lua
|
||||
["View the watch window"] = "查看监视视窗", -- src\editor\gui.lua, src\editor\menu_view.lua
|
||||
["Watch"] = "监视", -- src\editor\debugger.lua, src\editor\gui.lua
|
||||
["View the stack window"] = "查看堆栈视窗", -- src\editor\toolbar.lua, src\editor\menu_view.lua
|
||||
["View the watch window"] = "查看监视视窗", -- src\editor\toolbar.lua, 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
|
||||
["Wrap around"] = "卷绕", -- src\editor\toolbar.lua
|
||||
["You must save the program first."] = "必须先保存程序", -- src\editor\commands.lua
|
||||
["Zoom In"] = nil, -- src\editor\menu_view.lua
|
||||
["Zoom Out"] = nil, -- src\editor\menu_view.lua
|
||||
|
||||
226
cfg/i18n/de.lua
226
cfg/i18n/de.lua
@@ -1,57 +1,54 @@
|
||||
return {
|
||||
[0] = function(c) return c == 1 and 1 or 2 end, -- plural
|
||||
["%d instance"] = {"%d Instanz", "%d Instanzen"}, -- src\editor\findreplace.lua
|
||||
["%s event failed: %s"] = "Ereignis fehlgeschlagen : %s", -- src\editor\package.lua
|
||||
["%s%% formatted..."] = nil, -- src\editor\print.lua
|
||||
["%s%% loaded..."] = "%s%% geladen...", -- src\editor\commands.lua
|
||||
["&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\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\menu_edit.lua, src\editor\editor.lua
|
||||
["&Copy Value"] = "Wert kopieren", -- src\editor\debugger.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
|
||||
["&Find All"] = "&Alle finden", -- src\editor\findreplace.lua
|
||||
["&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
|
||||
["&Frequently Asked Questions"] = "&FAQ", -- src\editor\menu_help.lua
|
||||
["&Getting Started Guide"] = "&Anfängerleitfaden", -- src\editor\menu_help.lua
|
||||
["&Go To Line..."] = "&Gehe zu Zeile...", -- src\editor\menu_search.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\menu_edit.lua, src\editor\editor.lua
|
||||
["&Paste"] = "&Einfügen", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Print..."] = nil, -- src\editor\print.lua
|
||||
["&Project Page"] = "&Projektseite", -- src\editor\menu_help.lua
|
||||
["&Project"] = "&Projekt", -- src\editor\inspect.lua, src\editor\menu_project.lua
|
||||
["&Redo"] = "&Wiederholen", -- src\editor\menu_edit.lua, src\editor\editor.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
|
||||
["&Replace"] = "&Ersetzen", -- src\editor\menu_search.lua
|
||||
["&Run"] = "&Starten", -- src\editor\menu_project.lua
|
||||
["&Save"] = "&Speichern", -- src\editor\gui.lua, src\editor\menu_file.lua
|
||||
["&Search"] = "&Suchen", -- src\editor\menu_search.lua
|
||||
["&Select Command"] = nil, -- src\editor\gui.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
|
||||
["&Tool Bar"] = "&Werkzeugleiste", -- src\editor\menu_view.lua
|
||||
["&Tutorials"] = "&Tutorien", -- src\editor\menu_help.lua
|
||||
["&Undo"] = "&Rückgängig", -- src\editor\menu_edit.lua, src\editor\editor.lua
|
||||
["&Up"] = "&Hoch", -- src\editor\findreplace.lua
|
||||
["&Undo"] = "&Rückgängig", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.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 To Scratchpad"] = "Zu Entwurf hinzufügen", -- src\editor\editor.lua
|
||||
["Add Watch Expression"] = "Beobachtungspunkt hinzufügen", -- src\editor\editor.lua
|
||||
@@ -61,23 +58,29 @@ return {
|
||||
["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
|
||||
["Binary file is shown as read-only as it is only partially loaded."] = "Binärdatei ist als schreibgeschützt angezeigt, da sie nur teilweise geladen wurde.", -- src\editor\commands.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\gui.lua, src\editor\menu_project.lua
|
||||
["C&lear Output Window"] = "Ausgabefenster l&öschen", -- src\editor\menu_project.lua
|
||||
["Break execution at the next executed line of code"] = "Programmausführung bei der nächsten ausgeführten Zeile stoppen", -- src\editor\toolbar.lua, src\editor\menu_project.lua
|
||||
["Breakpoint"] = nil, -- src\editor\menu_project.lua
|
||||
["C&lear Console Window"] = nil, -- src\editor\gui.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 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 evaluate the expression while the application is running."] = "Kann den Ausdruck nicht auswerten solange die Anwendung läuft.", -- src\editor\debugger.lua
|
||||
["Can't open file '%s': %s"] = "Kann Datei '%s' nicht öffnen: %s", -- src\editor\findreplace.lua, src\editor\singleinstance.lua, src\editor\inspect.lua, src\editor\outline.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 replace in read-only text."] = "Ersetzen in schreibgeschütztem Text nicht möglich.", -- src\editor\findreplace.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 for '%s'."] = "Kann Debuggen nicht starten für '%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 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
|
||||
["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\gui.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
|
||||
["Choose a directory to map"] = "Bitte Verzeichnis wählen zum virtuellen Einbinden", -- src\editor\filetree.lua
|
||||
["Choose a project directory"] = "Projektverzeichnis auswählen", -- src\editor\toolbar.lua, src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Choose a search directory"] = "Bitte Verzeichnis zum Durchsuchen auswählen.", -- src\editor\findreplace.lua
|
||||
["Choose..."] = "Wählen...", -- src\editor\findreplace.lua, src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Clear Items"] = "Liste &löschen", -- src\editor\findreplace.lua, 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
|
||||
@@ -94,27 +97,29 @@ return {
|
||||
["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\filetree.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\gui.lua, src\editor\menu_file.lua
|
||||
["Cu&t"] = "A&usschneiden", -- src\editor\menu_edit.lua, src\editor\editor.lua
|
||||
["Create an empty document"] = "Leeres Dokument anlegen", -- src\editor\toolbar.lua, 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 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
|
||||
["Disable Indexing For '%s'"] = "Indizieren ausschalten für '%s'", -- src\editor\outline.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
|
||||
["Enable Indexing"] = "Indizieren aktivieren", -- src\editor\outline.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 command line parameters (use Cancel to clear)"] = "Kommandozeilenparameter eingeben (Cancel zum löschen)", -- src\editor\menu_project.lua
|
||||
["Enter line number"] = "Zeilennummer eingeben", -- src\editor\menu_search.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
|
||||
@@ -122,60 +127,79 @@ return {
|
||||
["Error"] = "Fehler", -- src\editor\commands.lua
|
||||
["Evaluate In Console"] = "In Konsole auswerten", -- src\editor\editor.lua
|
||||
["Execute the current project/file and keep updating the code to see immediate results"] = "Aktuelles Projekt/ aktuelle Datei ausführen und Quellcode ändern, um Ergebnisse in Echtzeit zu sehen", -- src\editor\menu_project.lua
|
||||
["Execute the current project/file"] = "Aktuelles Projekt/ aktuelle Datei ausführen", -- src\editor\menu_project.lua
|
||||
["Execute the current project/file"] = "Aktuelles Projekt/ aktuelle Datei ausführen", -- src\editor\toolbar.lua, 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' 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\gui.lua, src\editor\menu_search.lua
|
||||
["Find and replace text"] = "Finde und ersetze Text", -- src\editor\toolbar.lua, src\editor\menu_search.lua
|
||||
["Find in files"] = "Finde in dateien", -- src\editor\toolbar.lua
|
||||
["Find text in files"] = "Finde Text in Dateien", -- src\editor\menu_search.lua
|
||||
["Find text"] = "Finde Text", -- src\editor\gui.lua, src\editor\menu_search.lua
|
||||
["Find text"] = "Finde Text", -- src\editor\toolbar.lua, 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
|
||||
["Find"] = "Finden", -- src\editor\toolbar.lua
|
||||
["Fold or unfold all code folds"] = "Alle Stellen im Code ein-/ausklappen ", -- src\editor\menu_edit.lua
|
||||
["Formatting page %d..."] = nil, -- src\editor\print.lua
|
||||
["Found %d instance."] = {"Eine Instanz gefunden", "%d Instanzen gefunden."}, -- src\editor\findreplace.lua
|
||||
["Found auto-recovery record and restored saved session."] = "Autowiederherstellen-Aufzeichnung gefunden und vorherige Sitzung wiederhergestellt.", -- src\editor\commands.lua
|
||||
["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 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 Next Breakpoint"] = nil, -- src\editor\menu_project.lua
|
||||
["Go To Previous Bookmark"] = "Zu vorherigem Lesezeichen", -- src\editor\menu_edit.lua
|
||||
["Go to a selected line"] = "Gehe zu ausgewählter Zeile", -- src\editor\menu_search.lua
|
||||
["Go To Previous Breakpoint"] = nil, -- src\editor\menu_project.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
|
||||
["In Files"] = "In Dateien", -- src\editor\findreplace.lua
|
||||
["Jump to a function definition..."] = "Springe zu Funktions-Definition...", -- src\editor\editor.lua
|
||||
["Ignore and don't index symbols from files in the selected directory"] = "Dateien im ausgewählten Verzeichnis ignorieren und keine Symbole indizieren.", -- src\editor\outline.lua
|
||||
["Ignored error in debugger initialization code: %s."] = "Ignorierter Fehler im Debugger-Init-Code: %s.", -- src\editor\debugger.lua
|
||||
["Indexing %d files: '%s'..."] = "%d Dateien indizieren: '%s'...", -- src\editor\outline.lua
|
||||
["Indexing completed."] = "Indizierung abgeschlossen.", -- src\editor\outline.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\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
|
||||
["Map Directory..."] = "Verzeichnis virtuell einbinden...", -- src\editor\filetree.lua
|
||||
["Mapped remote request for '%s' to '%s'."] = "Fern-Aufforderung für '%s' auf '%s' abgebildet.", -- src\editor\debugger.lua
|
||||
["Markers Window"] = nil, -- src\editor\menu_view.lua
|
||||
["Markers"] = nil, -- src\editor\markers.lua
|
||||
["Match case"] = "Groß-/Kleinschreibung", -- src\editor\toolbar.lua
|
||||
["Match whole word"] = "Ganzes Wort", -- src\editor\toolbar.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 With Default Program"] = "Mit Standardanwendung öffnen", -- src\editor\filetree.lua
|
||||
["Open an existing document"] = "Öffne existierendes Dokument", -- src\editor\gui.lua, src\editor\menu_file.lua
|
||||
["Open an existing document"] = "Öffne existierendes Dokument", -- src\editor\toolbar.lua, 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\gui.lua, src\editor\output.lua, src\editor\settings.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
|
||||
["Page Setup..."] = nil, -- src\editor\print.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
|
||||
["Print the current document"] = nil, -- src\editor\print.lua
|
||||
["Program '%s' started in '%s' (pid: %d)."] = "Programm '%s' gestartet in '%s' (pid : %d).", -- src\editor\output.lua
|
||||
["Program can't start because conflicting process is running as '%s'."] = "Programm kann nicht starten, da blockierender Prozeß als '%s' läuft.", -- src\editor\output.lua
|
||||
["Program completed in %.2f seconds (pid: %d)."] = "Programm beendet nach %.2f Sekunden (pid : %d).", -- src\editor\output.lua
|
||||
@@ -184,98 +208,132 @@ return {
|
||||
["Program unable to run as '%s'."] = "Programm kann nicht als '%s' laufen.", -- src\editor\output.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\gui.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
|
||||
["Queued %d files to index."] = "%d Dateien zum Indizieren vorgemerkt.", -- src\editor\menu_search.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
|
||||
["Recent &Projects"] = "Letzte &Projekte", -- src\editor\menu_file.lua
|
||||
["Re-indent selected lines"] = "Ausgewählte Zeilen neu einrücken", -- src\editor\menu_edit.lua
|
||||
["Reached end of selection and wrapped around."] = nil, -- src\editor\findreplace.lua
|
||||
["Reached end of text and wrapped around."] = "Ende des Textes erreicht, setze am Beginn fort.", -- src\editor\findreplace.lua
|
||||
["Recent Files"] = "Letzte Dateien", -- src\editor\menu_file.lua
|
||||
["Recent Projects"] = "Letzte Projekte", -- src\editor\menu_file.lua
|
||||
["Redo last edit undone"] = "Stelle letzte rückgängig gemachte Bearbeitung wieder her", -- src\editor\menu_edit.lua
|
||||
["Refresh Index"] = "Index erneuern", -- src\editor\outline.lua
|
||||
["Refresh indexed symbols from files in the selected directory"] = "Erneuere indizierte Symbole in Dateien des ausgewählten Verzeichnisses", -- src\editor\outline.lua
|
||||
["Refresh"] = "Aktualisieren", -- src\editor\filetree.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
|
||||
["Regular expression"] = "Regulärer Ausdruck", -- src\editor\toolbar.lua
|
||||
["Remote console"] = "Fernsteuerungs-Konsole", -- src\editor\shellbox.lua
|
||||
["Rename All Instances"] = "Umbenennen aller Instanzen", -- src\editor\editor.lua
|
||||
["Replace A&ll"] = "A&lles ersetzen", -- src\editor\findreplace.lua
|
||||
["Replace"] = "Ersetzen", -- src\editor\findreplace.lua
|
||||
["Replace All Selections"] = "Alle Auswahlen ersetzen", -- src\editor\editor.lua
|
||||
["Replace all"] = "Alles ersetzen", -- src\editor\toolbar.lua
|
||||
["Replace next instance"] = "Nächste Instanz ersetzen", -- src\editor\toolbar.lua
|
||||
["Replaced %d instance."] = {"Eine Instanz ersetzt.", "%d Instanzen ersetzt."}, -- 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
|
||||
["Run as Scratchpad"] = "Als &Entwurf starten", -- src\editor\menu_project.lua
|
||||
["Run As Scratchpad"] = "Als &Entwurf starten", -- src\editor\menu_project.lua
|
||||
["Run To Cursor"] = "Stoppe Ausführung an Cursorposition", -- src\editor\menu_project.lua, src\editor\editor.lua
|
||||
["Run as Scratchpad"] = "Als &Entwurf starten", -- src\editor\toolbar.lua
|
||||
["Run to cursor"] = "Stoppe Ausführung an Cursorposition", -- src\editor\toolbar.lua, 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\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\gui.lua, src\editor\menu_file.lua
|
||||
["Save all open documents"] = "Alle offenen Dokumente speichern", -- src\editor\toolbar.lua, 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\gui.lua, src\editor\menu_file.lua
|
||||
["Save the current document"] = "Aktuelles Dokument speichern", -- src\editor\toolbar.lua, 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
|
||||
["Search direction"] = "Suchrichtung", -- src\editor\toolbar.lua
|
||||
["Search in selection"] = nil, -- src\editor\toolbar.lua
|
||||
["Search in subdirectories"] = "Suche in Unterverzeichnissen", -- src\editor\toolbar.lua
|
||||
["Searching for '%s'."] = "Suche nach '%s'.", -- src\editor\findreplace.lua
|
||||
["Sel: %d/%d"] = "Ausgew.: %d/%d", -- src\editor\editor.lua
|
||||
["Select &All"] = "&Alles Auswählen", -- src\editor\menu_edit.lua, src\editor\editor.lua
|
||||
["Select &All"] = "&Alles Auswählen", -- src\editor\gui.lua, src\editor\editor.lua, 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 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 As Start File"] = "Als Startdatei definieren.", -- src\editor\filetree.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\gui.lua, src\editor\menu_project.lua
|
||||
["Set To Project Directory"] = "Setze als Projektverzeichnis", -- src\editor\findreplace.lua
|
||||
["Set To Selected Directory"] = nil, -- src\editor\filetree.lua
|
||||
["Set project directory from current file"] = "Lege Projektverzeichnis anhand der aktuellen Datei fest", -- src\editor\toolbar.lua, src\editor\menu_project.lua
|
||||
["Set project directory to the selected one"] = nil, -- src\editor\filetree.lua
|
||||
["Set search directory"] = "Setze Suchverzeichnis", -- src\editor\toolbar.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, 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 context"] = "Zeige Kontext", -- src\editor\toolbar.lua
|
||||
["Show files previously hidden"] = "Zeige Dateien die zuvor versteckt wurden", -- src\editor\filetree.lua
|
||||
["Show multiple result windows"] = "Zeige mehrere Ergebnisfenster", -- src\editor\toolbar.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
|
||||
["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 By Name"] = "Sortiere nach Namen", -- src\editor\outline.lua
|
||||
["Sort selected lines"] = "Ausgewählte Zeilen sortieren", -- src\editor\menu_edit.lua
|
||||
["Stack"] = "Stack", -- src\editor\debugger.lua, src\editor\gui.lua
|
||||
["Source"] = "Source", -- src\editor\menu_edit.lua
|
||||
["Stack"] = "Stack", -- src\editor\debugger.lua
|
||||
["Start &Debugging"] = "&Debugging starten", -- src\editor\menu_project.lua
|
||||
["Start or Continue debugging"] = "Debuggen starten/fortsetzen", -- src\editor\gui.lua
|
||||
["Start or continue debugging"] = "Debuggen starten/fortsetzen", -- src\editor\menu_project.lua
|
||||
["Start or continue debugging"] = "Debuggen starten/fortsetzen", -- src\editor\toolbar.lua, 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\gui.lua, src\editor\menu_project.lua
|
||||
["Step out of the current function"] = "Schritt aus der aktuellen Funktion heraus", -- src\editor\gui.lua, src\editor\menu_project.lua
|
||||
["Step over"] = "Überspringen", -- src\editor\gui.lua, src\editor\menu_project.lua
|
||||
["Stop debugging and continue running the process"] = "Beende debuggen und setze den Prozeß fort", -- src\editor\gui.lua, src\editor\menu_project.lua
|
||||
["Stop the currently running process"] = "Aktuell laufenden Prozeß stoppen", -- src\editor\gui.lua, src\editor\menu_project.lua
|
||||
["Step into"] = "Schritt hinein", -- src\editor\toolbar.lua, src\editor\menu_project.lua
|
||||
["Step out of the current function"] = "Schritt aus der aktuellen Funktion heraus", -- src\editor\toolbar.lua, src\editor\menu_project.lua
|
||||
["Step over"] = "Überspringen", -- src\editor\toolbar.lua, src\editor\menu_project.lua
|
||||
["Stop debugging and continue running the process"] = "Beende debuggen und setze den Prozeß fort", -- src\editor\toolbar.lua, src\editor\menu_project.lua
|
||||
["Stop the currently running process"] = "Aktuell laufenden Prozeß stoppen", -- src\editor\toolbar.lua, src\editor\menu_project.lua
|
||||
["Switch to or from full screen mode"] = "Vollbild an/aus", -- src\editor\menu_view.lua
|
||||
["Symbol Index"] = "Symbolindex", -- src\editor\outline.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\gui.lua, src\editor\menu_project.lua
|
||||
["The API file must be located in a subdirectory of the API directory."] = "Die API-Datei muß sich in einem Unterverzeichnis des API-Verzeichnisses befinden.", -- src\editor\autocomplete.lua
|
||||
["Toggle Bookmark"] = "Lesezeichen setzen/löschen", -- src\editor\markers.lua, src\editor\menu_edit.lua
|
||||
["Toggle Breakpoint"] = "Haltepunkt an/aus", -- src\editor\markers.lua, src\editor\menu_project.lua
|
||||
["Toggle bookmark"] = "Lesezeichen setzen/löschen", -- src\editor\toolbar.lua, src\editor\menu_edit.lua, src\editor\markers.lua
|
||||
["Toggle breakpoint"] = "Haltepunkt an/aus", -- src\editor\markers.lua, src\editor\toolbar.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 delete file '%s': %s"] = "Kann Datei '%s' nicht löschen: %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'."] = "Kann Datei '%s' nicht umbenennen.", -- src\editor\filetree.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
|
||||
["Unmap Directory"] = "virtuelle Einbindung beenden", -- src\editor\filetree.lua
|
||||
["Unset '%s' As Start File"] = "'%s' ist nicht mehr Startdatei", -- src\editor\filetree.lua
|
||||
["Updated %d file."] = {"Eine Datei aktualisiert", "%d Dateien aktualisiert."}, -- src\editor\findreplace.lua
|
||||
["Updating symbol index and settings..."] = "Aktualisiere Symbolindex und Einstellungen...", -- src\editor\outline.lua
|
||||
["Use %s to close."] = "%s zum Schließen.", -- src\editor\findreplace.lua
|
||||
["Use '%s' to see full description."] = "'%s' für eine komplette Beschreibung.", -- src\editor\editor.lua
|
||||
["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 markers window"] = nil, -- src\editor\menu_view.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\gui.lua, src\editor\menu_view.lua
|
||||
["View the watch window"] = "Fenster für Beobachtungspunkte ansehen", -- src\editor\gui.lua, src\editor\menu_view.lua
|
||||
["Watch"] = "Beobachtungspunkte", -- src\editor\debugger.lua, src\editor\gui.lua
|
||||
["View the stack window"] = "Stapel/Stack-Fenster ansehen", -- src\editor\toolbar.lua, src\editor\menu_view.lua
|
||||
["View the watch window"] = "Fenster für Beobachtungspunkte ansehen", -- src\editor\toolbar.lua, 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
|
||||
["Wrap around"] = "Am Anfang fortsetzen", -- src\editor\toolbar.lua
|
||||
["You must save the program first."] = "Erst das Programm speichern.", -- src\editor\commands.lua
|
||||
["Zoom In"] = "Hineinzoomen", -- src\editor\menu_view.lua
|
||||
["Zoom Out"] = "Herauszoomen", -- src\editor\menu_view.lua
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
return {
|
||||
[0] = function(c) return c == 1 and 1 or 2 end, -- plural
|
||||
["traced %d instruction"] = {"traced %d instruction", "traced %d instructions"}, -- src\editor\debugger.lua
|
||||
["%d instance"] = {"%d instance", "%d instances"}, -- src\editor\findreplace.lua
|
||||
["Found %d instance."] = {"Found %d instance.", "Found %d instances."}, -- src\editor\findreplace.lua
|
||||
["Replaced %d instance."] = {"Replaced %d instance.", "Replaced %d instances."}, -- src\editor\findreplace.lua
|
||||
["Updated %d file."] = {"Updated %d file.", "Updated %d files."}, -- src\editor\findreplace.lua
|
||||
}
|
||||
|
||||
346
cfg/i18n/eo.lua
Normal file
346
cfg/i18n/eo.lua
Normal file
@@ -0,0 +1,346 @@
|
||||
--- Traduko fare de cosmotect
|
||||
return {
|
||||
[0] = function(c) return c == 1 and 1 or 2 end, -- plural
|
||||
["%s event failed: %s"] = "%s evento malplenumiĝas: %s", -- src\editor\package.lua
|
||||
["%s%% formatted..."] = nil, -- src\editor\print.lua
|
||||
["%s%% loaded..."] = nil, -- src\editor\commands.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 Value"] = nil, -- src\editor\debugger.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
|
||||
["&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"] = "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
|
||||
["&Print..."] = nil, -- src\editor\print.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"] = "&Anstataŭi", -- 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
|
||||
["&Select Command"] = nil, -- src\editor\gui.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
|
||||
["&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
|
||||
["&View"] = "&Vidi", -- src\editor\menu_view.lua
|
||||
["&Watch Window"] = "&Observada fenestro", -- src\editor\menu_view.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
|
||||
["Binary file is shown as read-only as it is only partially loaded."] = nil, -- src\editor\commands.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\toolbar.lua, src\editor\menu_project.lua
|
||||
["Breakpoint"] = nil, -- src\editor\menu_project.lua
|
||||
["C&lear Console Window"] = nil, -- src\editor\gui.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 evaluate the expression while the application is running."] = "Ne povas malkodi la esprimon dum funkciatas la aplikaĵo.", -- src\editor\debugger.lua
|
||||
["Can't open file '%s': %s"] = "Ne povas malfermi la dosieron '%s': %s", -- src\editor\findreplace.lua, src\editor\singleinstance.lua, src\editor\inspect.lua, src\editor\outline.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 replace in read-only text."] = nil, -- src\editor\findreplace.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 for '%s'."] = nil, -- 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
|
||||
["Cancelled by the user."] = "Nuligita per la uzanto", -- src\editor\findreplace.lua
|
||||
["Choose a directory to map"] = nil, -- src\editor\filetree.lua
|
||||
["Choose a project directory"] = "Elekti projektan dosierujon", -- src\editor\toolbar.lua, src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Choose a search directory"] = nil, -- src\editor\findreplace.lua
|
||||
["Choose..."] = "Elekti...", -- src\editor\findreplace.lua, src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Clear Items"] = "Viŝi anojn", -- src\editor\findreplace.lua, 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\toolbar.lua, 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
|
||||
["Disable Indexing For '%s'"] = nil, -- src\editor\outline.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
|
||||
["Enable Indexing"] = nil, -- src\editor\outline.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\toolbar.lua, 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 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 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\toolbar.lua, src\editor\menu_search.lua
|
||||
["Find in files"] = "Traserĉi en dosieroj", -- src\editor\toolbar.lua
|
||||
["Find text in files"] = "Traserĉi tekston en dosieroj", -- src\editor\menu_search.lua
|
||||
["Find text"] = "Traserĉi tekston", -- src\editor\toolbar.lua, 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\toolbar.lua
|
||||
["Fold or unfold all code folds"] = "Kaŝi aŭ malkaŝi ĉiujn faldaĵojn da fontkodoj", -- src\editor\menu_edit.lua
|
||||
["Formatting page %d..."] = nil, -- src\editor\print.lua
|
||||
["Found %d instance."] = {}, -- src\editor\findreplace.lua
|
||||
["Found auto-recovery record and restored saved session."] = "Trovis aŭtomatrestaŭran dosieron kaj riparis konservitan seancon.", -- src\editor\commands.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 Next Breakpoint"] = nil, -- src\editor\menu_project.lua
|
||||
["Go To Previous Bookmark"] = "Iri al antaŭanta legosigno", -- src\editor\menu_edit.lua
|
||||
["Go To Previous Breakpoint"] = nil, -- src\editor\menu_project.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
|
||||
["Ignore and don't index symbols from files in the selected directory"] = nil, -- src\editor\outline.lua
|
||||
["Ignored error in debugger initialization code: %s."] = "Ignoris eraron en pravaloriza kodo de la sencimigilo: %s.", -- src\editor\debugger.lua
|
||||
["Indexing %d files: '%s'..."] = nil, -- src\editor\outline.lua
|
||||
["Indexing completed."] = nil, -- src\editor\outline.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
|
||||
["Map Directory..."] = nil, -- src\editor\filetree.lua
|
||||
["Mapped remote request for '%s' to '%s'."] = "Mapi faran peton pri '%s' al '%s'.", -- src\editor\debugger.lua
|
||||
["Markers Window"] = nil, -- src\editor\menu_view.lua
|
||||
["Markers"] = nil, -- src\editor\markers.lua
|
||||
["Match case"] = "Atenti usklecon", -- src\editor\toolbar.lua
|
||||
["Match whole word"] = "Atenti plenan vorton", -- src\editor\toolbar.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\toolbar.lua, src\editor\menu_file.lua
|
||||
["Open file"] = "Malfermi dosieron", -- src\editor\commands.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
|
||||
["Page Setup..."] = nil, -- src\editor\print.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
|
||||
["Print the current document"] = nil, -- src\editor\print.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
|
||||
["Queued %d files to index."] = nil, -- src\editor\menu_search.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
|
||||
["Reached end of selection and wrapped around."] = nil, -- src\editor\findreplace.lua
|
||||
["Reached end of text and wrapped around."] = nil, -- src\editor\findreplace.lua
|
||||
["Recent Files"] = "Antaŭnelongaj dosieroj", -- src\editor\menu_file.lua
|
||||
["Recent Projects"] = "Antaŭnelongaj projektoj", -- src\editor\menu_file.lua
|
||||
["Redo last edit undone"] = "Refari lastan redakton", -- src\editor\menu_edit.lua
|
||||
["Refresh Index"] = nil, -- src\editor\outline.lua
|
||||
["Refresh indexed symbols from files in the selected directory"] = nil, -- src\editor\outline.lua
|
||||
["Refresh"] = "Refreŝigu", -- src\editor\filetree.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\toolbar.lua
|
||||
["Remote console"] = "Fora konzolo", -- src\editor\shellbox.lua
|
||||
["Rename All Instances"] = "Renomigi ĉiujn aperaĵojn", -- src\editor\editor.lua
|
||||
["Replace All Selections"] = "Anstataŭi ĉiujn elektojn", -- src\editor\editor.lua
|
||||
["Replace all"] = "Anstataŭi ĉion", -- src\editor\toolbar.lua
|
||||
["Replace next instance"] = nil, -- src\editor\toolbar.lua
|
||||
["Replaced %d instance."] = {}, -- src\editor\findreplace.lua
|
||||
["Replaced an invalid UTF8 character with %s."] = "Anstataŭis UTF8-an signon per %s.", -- src\editor\commands.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 To Cursor"] = nil, -- src\editor\menu_project.lua, src\editor\editor.lua
|
||||
["Run as Scratchpad"] = "Plenumi kiel malnetdosieron", -- src\editor\toolbar.lua
|
||||
["Run to cursor"] = nil, -- src\editor\toolbar.lua, 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\toolbar.lua, 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\toolbar.lua, src\editor\menu_file.lua
|
||||
["Saved auto-recover at %s."] = "Konservis aŭtomatrestaŭron je %s.", -- src\editor\commands.lua
|
||||
["Scratchpad error"] = "Eraro de malnetdosiero", -- src\editor\debugger.lua
|
||||
["Search direction"] = nil, -- src\editor\toolbar.lua
|
||||
["Search in selection"] = nil, -- src\editor\toolbar.lua
|
||||
["Search in subdirectories"] = nil, -- src\editor\toolbar.lua
|
||||
["Searching for '%s'."] = nil, -- 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 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 all text in the editor"] = "Elekti la tekston en la redaktilo", -- src\editor\menu_edit.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 As Start File"] = nil, -- src\editor\filetree.lua
|
||||
["Set From Current File"] = "Precizigi per la kuranta dosiero", -- src\editor\menu_project.lua
|
||||
["Set To Project Directory"] = nil, -- src\editor\findreplace.lua
|
||||
["Set To Selected Directory"] = nil, -- src\editor\filetree.lua
|
||||
["Set project directory from current file"] = "Precizigi la projektan dosierujon per la kurantan dosieron", -- src\editor\toolbar.lua, src\editor\menu_project.lua
|
||||
["Set project directory to the selected one"] = nil, -- src\editor\filetree.lua
|
||||
["Set search directory"] = nil, -- src\editor\toolbar.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 context"] = nil, -- src\editor\toolbar.lua
|
||||
["Show files previously hidden"] = nil, -- src\editor\filetree.lua
|
||||
["Show multiple result windows"] = nil, -- src\editor\toolbar.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 By Name"] = nil, -- src\editor\outline.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\toolbar.lua, 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\toolbar.lua, src\editor\menu_project.lua
|
||||
["Step out of the current function"] = "Eliri el la kuranta funkcio", -- src\editor\toolbar.lua, src\editor\menu_project.lua
|
||||
["Step over"] = "Transsalti", -- src\editor\toolbar.lua, src\editor\menu_project.lua
|
||||
["Stop debugging and continue running the process"] = "Fini sencimigon kaj plenumadi la procezon", -- src\editor\toolbar.lua, src\editor\menu_project.lua
|
||||
["Stop the currently running process"] = "Fini la nunfunkciatan procezon", -- src\editor\toolbar.lua, 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
|
||||
["Symbol Index"] = nil, -- src\editor\outline.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\markers.lua, src\editor\menu_edit.lua
|
||||
["Toggle Breakpoint"] = "Baskuli haltopunkto", -- src\editor\markers.lua, src\editor\menu_project.lua
|
||||
["Toggle bookmark"] = "Baskuli legosignon", -- src\editor\toolbar.lua, src\editor\menu_edit.lua, src\editor\markers.lua
|
||||
["Toggle breakpoint"] = "Baskuli haltopunkto", -- src\editor\markers.lua, src\editor\toolbar.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 delete file '%s': %s"] = nil, -- 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
|
||||
["Unmap Directory"] = nil, -- src\editor\filetree.lua
|
||||
["Unset '%s' As Start File"] = nil, -- src\editor\filetree.lua
|
||||
["Updated %d file."] = {}, -- src\editor\findreplace.lua
|
||||
["Updating symbol index and settings..."] = nil, -- src\editor\outline.lua
|
||||
["Use %s to close."] = nil, -- src\editor\findreplace.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 markers window"] = nil, -- src\editor\menu_view.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\toolbar.lua, src\editor\menu_view.lua
|
||||
["View the watch window"] = "Vidi la observado-fenestron", -- src\editor\toolbar.lua, 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 around"] = "Ĉirkaŭflui", -- src\editor\toolbar.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
|
||||
}
|
||||
370
cfg/i18n/es.lua
370
cfg/i18n/es.lua
@@ -1,288 +1,346 @@
|
||||
-- Traducción realiazada por Iñigo Sola
|
||||
--- Traducción realiazada por Iñigo Sola
|
||||
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
|
||||
["%s event failed: %s"] = "El evento %s ha fallado: %s", -- src\editor\package.lua
|
||||
["%s%% formatted..."] = "%s%% formateado...", -- src\editor\print.lua
|
||||
["%s%% loaded..."] = "%s%% cargado...", -- src\editor\commands.lua
|
||||
["&About"] = "&Acerca de...", -- src\editor\menu_help.lua
|
||||
["&Add Watch"] = "Añadir observación", -- src\editor\debugger.lua
|
||||
["&Add Watch"] = "&Añadir inspección", -- src\editor\debugger.lua
|
||||
["&Break"] = "Ruptura", -- src\editor\menu_project.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\menu_edit.lua, src\editor\editor.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 Watch"] = "Editar observación", -- src\editor\debugger.lua
|
||||
["&Edit"] = "Editar", -- src\editor\menu_edit.lua
|
||||
["&Close Page"] = "&Cerrar página", -- src\editor\gui.lua, src\editor\menu_file.lua
|
||||
["&Community"] = "&Comunidad", -- src\editor\menu_help.lua
|
||||
["&Compile"] = "&Compilar", -- src\editor\menu_project.lua
|
||||
["&Copy Value"] = "&Copiar valor", -- src\editor\debugger.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 inspección", -- src\editor\debugger.lua
|
||||
["&Delete"] = "Eliminar", -- src\editor\filetree.lua
|
||||
["&Documentation"] = "&Documentación", -- src\editor\menu_help.lua
|
||||
["&Edit Project Directory"] = "&Editar directorio del proyecto", -- src\editor\filetree.lua
|
||||
["&Edit Value"] = "&Editar valor", -- src\editor\debugger.lua
|
||||
["&Edit Watch"] = "&Editar inspecció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
|
||||
["&Frequently Asked Questions"] = nil, -- src\editor\menu_help.lua
|
||||
["&Getting Started Guide"] = nil, -- src\editor\menu_help.lua
|
||||
["&Go To Line..."] = "Ir a línea...", -- src\editor\menu_search.lua
|
||||
["&Frequently Asked Questions"] = "Preguntas &Frecuentes", -- src\editor\menu_help.lua
|
||||
["&Getting Started Guide"] = "&Guía de iniciación", -- src\editor\menu_help.lua
|
||||
["&Help"] = "Ayuda", -- src\editor\menu_help.lua
|
||||
["&New Directory"] = nil, -- src\editor\filetree.lua
|
||||
["&New Directory"] = "&Nuevo directorio", -- 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\menu_edit.lua, src\editor\editor.lua
|
||||
["&Project Page"] = nil, -- src\editor\menu_help.lua
|
||||
["&Project"] = "Proyecto", -- src\editor\inspect.lua, src\editor\menu_project.lua
|
||||
["&Redo"] = "Rehacer", -- src\editor\menu_edit.lua, src\editor\editor.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
|
||||
["&Paste"] = "Pegar", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Print..."] = "Im&primir", -- src\editor\print.lua
|
||||
["&Project Page"] = "&Página de proyecto", -- 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"] = "&Renombrar", -- src\editor\filetree.lua
|
||||
["&Replace"] = "Remplazar", -- src\editor\menu_search.lua
|
||||
["&Run"] = "Ejecutar", -- src\editor\menu_project.lua
|
||||
["&Save"] = "Guardar", -- src\editor\gui.lua, src\editor\menu_file.lua
|
||||
["&Search"] = "Buscar", -- src\editor\menu_search.lua
|
||||
["&Select Command"] = "&Seleccionar comando", -- src\editor\gui.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
|
||||
["&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\menu_edit.lua, src\editor\editor.lua
|
||||
["&Up"] = nil, -- src\editor\findreplace.lua
|
||||
["&Status Bar"] = "Barra de e&stado", -- src\editor\menu_view.lua
|
||||
["&Tool Bar"] = "Barra de herramientas", -- src\editor\menu_view.lua
|
||||
["&Tutorials"] = "&Tutoriales", -- src\editor\menu_help.lua
|
||||
["&Undo"] = "Deshacer", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.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
|
||||
["&Watch Window"] = "Ventana de inspección", -- src\editor\menu_view.lua
|
||||
["About %s"] = "Acerca de %s", -- src\editor\menu_help.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
|
||||
["Add Watch Expression"] = "Añadir expresión de inspecció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
|
||||
["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\gui.lua, src\editor\menu_project.lua
|
||||
["C&lear Output Window"] = "Limpiar ventana de Salida", -- src\editor\menu_project.lua
|
||||
["Binary file is shown as read-only as it is only partially loaded."] = "El archivo binario es mostrado como solo lectura ya que solo ha sido cargado parcialmente.", -- src\editor\commands.lua
|
||||
["Bookmark"] = "Marcador", -- 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\toolbar.lua, src\editor\menu_project.lua
|
||||
["Breakpoint"] = "Punto de ruptura", -- src\editor\menu_project.lua
|
||||
["C&lear Console Window"] = "Limpiar ventana de Consola", -- src\editor\gui.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 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 evaluate the expression while the application is running."] = "No se puede evaluar la expresión mientras la aplicación se está ejecutando.", -- src\editor\debugger.lua
|
||||
["Can't open file '%s': %s"] = "No se puede abrir el archivo '%s': %s", -- src\editor\findreplace.lua, src\editor\singleinstance.lua, src\editor\inspect.lua, src\editor\outline.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 replace in read-only text."] = "No se puede remplazar en modo solo lectura.", -- src\editor\findreplace.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 debugger server at %s:%d: %s."] = "No se puede iniciar el servidor de depuración %s:%d: %s.", -- src\editor\debugger.lua
|
||||
["Can't start debugging for '%s'."] = "No se puede iniciar la depuración para '%s'.", -- 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
|
||||
["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\gui.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
|
||||
["Can't stop debugger server as it is not started."] = "No se puede parar el servidor de puración ya que no se ha iniciado.", -- src\editor\debugger.lua
|
||||
["Cancelled by the user."] = "Cancelado por el usuario.", -- src\editor\findreplace.lua
|
||||
["Choose a directory to map"] = "Elegir un directorio para mapear", -- src\editor\filetree.lua
|
||||
["Choose a project directory"] = "Elegir un directorio de proyecto", -- src\editor\toolbar.lua, src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Choose a search directory"] = "Elegir un directorio de búsqueda", -- src\editor\findreplace.lua
|
||||
["Choose..."] = "Elegir...", -- src\editor\findreplace.lua, src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Clear Items"] = "Limpiar objetos", -- src\editor\findreplace.lua, src\editor\menu_file.lua
|
||||
["Clear items from this list"] = "Limpiar objectos de esta lista", -- 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 &Other Pages"] = "Cerrar &Otras Páginas", -- src\editor\gui.lua
|
||||
["Close A&ll Pages"] = "Cerrar todas las páginas", -- 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
|
||||
["Command Line Parameters..."] = "Parámetros de línea de comandos...", -- src\editor\menu_project.lua
|
||||
["Command line parameters"] = "Parámetros de línea de comandos", -- 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\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\filetree.lua
|
||||
["Consider removing backslash from escape sequence '%s'."] = "Considerar la eliminación de las barras invertidas de la secuencia de escape '%s'.", -- src\editor\commands.lua
|
||||
["Copy Full Path"] = "Copiar ruta completa", -- 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"] = "Corregir &Identación", -- 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\gui.lua, src\editor\menu_file.lua
|
||||
["Cu&t"] = "Cortar", -- src\editor\menu_edit.lua, src\editor\editor.lua
|
||||
["Create an empty document"] = "Crear un documento en blanco", -- src\editor\toolbar.lua, 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
|
||||
["Debugger server started at %s:%d."] = "Servidor de depuración inciado en %s:%d.", -- src\editor\debugger.lua
|
||||
["Debugger server stopped at %s:%d."] = "Seridor de depuración parado en %s:%d.", -- 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
|
||||
["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
|
||||
["Debugging suspended at '%s:%s' (couldn't activate the file)."] = "Depuración suspendida en '%s:%s' (no se pudo activar el archivo)", -- src\editor\debugger.lua
|
||||
["Detach &Process"] = "Separar &Proceso", -- src\editor\menu_project.lua
|
||||
["Disable Indexing For '%s'"] = "Deshabilitar indexación para '%s'", -- src\editor\outline.lua
|
||||
["Do you want to delete '%s'?"] = "¿Quieres borrar '%s'?", -- src\editor\filetree.lua
|
||||
["Do you want to overwrite it?"] = "¿Quieres sobrescribirlo?", -- 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
|
||||
["Enable Indexing"] = "Habilitar indexación", -- src\editor\outline.lua
|
||||
["Enter Lua code and press Enter to run it."] = "Introduce código Lua y pulsa <Entrer> para ejecutarlo.", -- src\editor\shellbox.lua
|
||||
["Enter command line parameters (use Cancel to clear)"] = nil, -- src\editor\menu_project.lua
|
||||
["Enter line number"] = "Introduce número de línea", -- src\editor\menu_search.lua
|
||||
["Enter command line parameters (use Cancel to clear)"] = "Introduce parámetros de línea de comandos (usa Cancel para limpiar)", -- src\editor\menu_project.lua
|
||||
["Enter replacement text"] = "Introduce el texto de remplazo", -- 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 loading configuration file: %s"] = "Error mientras se cargaba el fichero de configuración: %s", -- src\editor\style.lua
|
||||
["Error while processing API file: %s"] = "Error mientras se procesaba el archivo de API: %s", -- src\editor\autocomplete.lua
|
||||
["Error while processing configuration file: %s"] = nil, -- src\editor\style.lua
|
||||
["Error while processing configuration file: %s"] = "Error mientras se procesaba el fichero de configuración: %s", -- src\editor\style.lua
|
||||
["Error"] = "Error", -- src\editor\commands.lua
|
||||
["Evaluate In Console"] = "Evaluar en consola", -- src\editor\editor.lua
|
||||
["Execute the current project/file and keep updating the code to see immediate results"] = "Ejecutar el proyecto/archivo actual y manteniendo actualizado el código para ver resultados en tiempo real", -- src\editor\menu_project.lua
|
||||
["Execute the current project/file"] = "Ejecutar el proyecto/archivo actual", -- src\editor\menu_project.lua
|
||||
["Execute the current project/file"] = "Ejecutar el proyecto/archivo actual", -- src\editor\toolbar.lua, 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' is missing and can't be recovered."] = "El archivo '%s' no se encuenta y no puede ser recuperado.", -- 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 already exists."] = "El fichero ya existe", -- 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"] = "Buscar e insertar función de librería", -- 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\gui.lua, src\editor\menu_search.lua
|
||||
["Find and replace text"] = "Buscar y rempleazar texto", -- src\editor\toolbar.lua, src\editor\menu_search.lua
|
||||
["Find in files"] = "Buscar en ficheros", -- src\editor\toolbar.lua
|
||||
["Find text in files"] = "Buscar texto en archivos", -- src\editor\menu_search.lua
|
||||
["Find text"] = "Buscar texto", -- src\editor\gui.lua, src\editor\menu_search.lua
|
||||
["Find text"] = "Buscar texto", -- src\editor\toolbar.lua, 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
|
||||
["Find"] = "Buscar", -- src\editor\toolbar.lua
|
||||
["Fold or unfold all code folds"] = "Plegar o desplegar todo el código plegado", -- src\editor\menu_edit.lua
|
||||
["Formatting page %d..."] = "Formateando página %d...", -- src\editor\print.lua
|
||||
["Found %d instance."] = {"Encontrada una instancia", "Encontradas %d instancias"}, -- src\editor\findreplace.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 Definition"] = nil, -- src\editor\editor.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 a selected line"] = "Ir a línea seleccionada", -- src\editor\menu_search.lua
|
||||
["Go To Definition"] = "Ir a definición", -- src\editor\editor.lua
|
||||
["Go To File..."] = "Ir a fichero...", -- src\editor\menu_search.lua
|
||||
["Go To Line..."] = "Ir a línea...", -- src\editor\menu_search.lua
|
||||
["Go To Next Bookmark"] = "Ir al siguiente marcador", -- src\editor\menu_edit.lua
|
||||
["Go To Next Breakpoint"] = "Ir al siguiente punto de ruptura", -- src\editor\menu_project.lua
|
||||
["Go To Previous Bookmark"] = "Ir al marcador anterior", -- src\editor\menu_edit.lua
|
||||
["Go To Previous Breakpoint"] = "Ir al punto de ruptura anterior", -- src\editor\menu_project.lua
|
||||
["Go To Symbol..."] = "Ir a símbolo...", -- src\editor\menu_search.lua
|
||||
["Go to file"] = "Ir a archivo", -- src\editor\menu_search.lua
|
||||
["Go to line"] = "Ir a línea", -- src\editor\menu_search.lua
|
||||
["Go to symbol"] = "Ir a símbolo", -- src\editor\menu_search.lua
|
||||
["Hide '.%s' Files"] = "Ocultar archivos '.%s'", -- src\editor\filetree.lua
|
||||
["INS"] = "INS", -- src\editor\editor.lua
|
||||
["In Files"] = nil, -- src\editor\findreplace.lua
|
||||
["Jump to a function definition..."] = "Saltar a la definición de la función...", -- src\editor\editor.lua
|
||||
["Ignore and don't index symbols from files in the selected directory"] = "Ignorar y no indexar símbolos de archivos en el directorio seleccionado", -- src\editor\outline.lua
|
||||
["Ignored error in debugger initialization code: %s."] = "Error ignorado en código de inicialización de depurador: %s.", -- src\editor\debugger.lua
|
||||
["Indexing %d files: '%s'..."] = "Indexando %d archivos: '%s'...", -- src\editor\outline.lua
|
||||
["Indexing completed."] = "Indexado completado.", -- src\editor\outline.lua
|
||||
["Insert Library Function..."] = "Insertar función de librería...", -- 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\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
|
||||
["New &File"] = nil, -- src\editor\filetree.lua
|
||||
["Map Directory..."] = "Mapeo de directorio...", -- src\editor\filetree.lua
|
||||
["Mapped remote request for '%s' to '%s'."] = "Mapeada petición remota de '%s' a '%s'.", -- src\editor\debugger.lua
|
||||
["Markers Window"] = "Ventana de marcas", -- src\editor\menu_view.lua
|
||||
["Markers"] = "Marcas", -- src\editor\markers.lua
|
||||
["Match case"] = "Emparejar mayúsculas/minúsuclas", -- src\editor\toolbar.lua
|
||||
["Match whole word"] = "Emparejar palabras completas", -- src\editor\toolbar.lua
|
||||
["Mixed end-of-line encodings detected."] = "Detectadas condificaciones de final de línea distintas", -- src\editor\commands.lua
|
||||
["Navigate"] = "Navegar", -- src\editor\menu_search.lua
|
||||
["New &File"] = "Nuevo %Fichero", -- src\editor\filetree.lua
|
||||
["OVR"] = "OVR", -- src\editor\editor.lua
|
||||
["Open With Default Program"] = nil, -- src\editor\filetree.lua
|
||||
["Open an existing document"] = "Abrir un documento existente", -- src\editor\gui.lua, src\editor\menu_file.lua
|
||||
["Open With Default Program"] = "Abrir con programa por defecto", -- src\editor\filetree.lua
|
||||
["Open an existing document"] = "Abrir un documento existente", -- src\editor\toolbar.lua, src\editor\menu_file.lua
|
||||
["Open file"] = "Abrir archivo", -- src\editor\commands.lua
|
||||
["Options"] = nil, -- src\editor\findreplace.lua
|
||||
["Output (running)"] = "Salida (en ejecución)", -- src\editor\output.lua
|
||||
["Output"] = "Salida", -- src\editor\gui.lua, src\editor\output.lua, src\editor\settings.lua
|
||||
["Outline Window"] = "Ventana de esquema", -- src\editor\menu_view.lua
|
||||
["Outline"] = "Esquema", -- src\editor\outline.lua
|
||||
["Output (running)"] = "Salida (en ejecución)", -- src\editor\debugger.lua, src\editor\output.lua
|
||||
["Output (suspended)"] = "Salida (suspendida)", -- src\editor\debugger.lua
|
||||
["Output"] = "Salida", -- src\editor\debugger.lua, src\editor\output.lua, src\editor\gui.lua, src\editor\settings.lua
|
||||
["Page Setup..."] = "Configuración de página", -- src\editor\print.lua
|
||||
["Paste text from the clipboard"] = "Pegar texto desde el portapapeles", -- src\editor\menu_edit.lua
|
||||
["Preferences"] = nil, -- src\editor\menu_edit.lua
|
||||
["Preferences"] = "Preferencias", -- src\editor\menu_edit.lua
|
||||
["Prepend '!' to force local execution."] = "Antepón '!' para forzar una ejecución local.", -- 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
|
||||
["Print the current document"] = "Imprimir el documento actual", -- src\editor\print.lua
|
||||
["Program '%s' started in '%s' (pid: %d)."] = "Programa '%s' iniciado en '%s' (pid: %d).", -- src\editor\output.lua
|
||||
["Program can't start because conflicting process is running as '%s'."] = "El programa no puede iniciarse porque hay un proceso conflictivo en ejecución como '%s'.", -- src\editor\output.lua
|
||||
["Program completed in %.2f seconds (pid: %d)."] = "Programa completado en %.2f segundos (pid: %d).", -- src\editor\output.lua
|
||||
["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, src\editor\filetree.lua
|
||||
["Project history"] = nil, -- src\editor\menu_file.lua
|
||||
["Project"] = "Proyecto", -- src\editor\gui.lua
|
||||
["Project Directory"] = "Directorio de proyecto", -- src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Project history"] = "Historial de proyecto", -- 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
|
||||
["Provide command line parameters"] = "Proveer parámetros de línea de comandos", -- src\editor\menu_project.lua
|
||||
["Queued %d files to index."] = "Encolar %d ficheros al índice", -- src\editor\menu_search.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
|
||||
["Recent &Projects"] = nil, -- src\editor\menu_file.lua
|
||||
["Re-indent selected lines"] = "Volver a indentar las líneas seleccionadas", -- src\editor\menu_edit.lua
|
||||
["Reached end of selection and wrapped around."] = "Alcanzado el final de la selección y vuelta a empezar.", -- src\editor\findreplace.lua
|
||||
["Reached end of text and wrapped around."] = "Alcanzado el final del texto y vuelta a empezar", -- src\editor\findreplace.lua
|
||||
["Recent Files"] = "Archivos recientes", -- src\editor\menu_file.lua
|
||||
["Recent Projects"] = "Projectos recientes", -- src\editor\menu_file.lua
|
||||
["Redo last edit undone"] = "Rehacer la última edición deshecha", -- src\editor\menu_edit.lua
|
||||
["Refresh Index"] = "Refrescar índice", -- src\editor\outline.lua
|
||||
["Refresh indexed symbols from files in the selected directory"] = "Refrescar símbolos indexados en los ficheros del directorio seleccionado", -- src\editor\outline.lua
|
||||
["Refresh"] = "Refrescar", -- src\editor\filetree.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
|
||||
["Regular expression"] = "Expresión regular", -- src\editor\toolbar.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"] = 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
|
||||
["Rename All Instances"] = "Renombrar rodas las instancias", -- src\editor\editor.lua
|
||||
["Replace All Selections"] = "Remplazar todas las selecciones", -- src\editor\editor.lua
|
||||
["Replace all"] = "Remplazar todo", -- src\editor\toolbar.lua
|
||||
["Replace next instance"] = "Reemplazar siguiente instancia", -- src\editor\toolbar.lua
|
||||
["Replaced %d instance."] = {"Remplazada una instancia", "Remplazada %d instancias."}, -- src\editor\findreplace.lua
|
||||
["Replaced an invalid UTF8 character with %s."] = "Remplazado un caracter UTF8 inválido con %s.", -- src\editor\commands.lua
|
||||
["Reset to default layout"] = "Restablecer el diseño por defecto", -- src\editor\menu_view.lua
|
||||
["Run as Scratchpad"] = "Ejecutar como borrador", -- src\editor\menu_project.lua
|
||||
["Run As Scratchpad"] = "Ejecutar como borrador", -- src\editor\menu_project.lua
|
||||
["Run To Cursor"] = "Ejecutar hasta cursor", -- src\editor\menu_project.lua, src\editor\editor.lua
|
||||
["Run as Scratchpad"] = "Ejecutar como borrador", -- src\editor\toolbar.lua
|
||||
["Run to cursor"] = "Ejecutar hasta cursor", -- src\editor\toolbar.lua, 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\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\gui.lua, src\editor\menu_file.lua
|
||||
["Save all open documents"] = "Guardar todos los documentos abiertos", -- src\editor\toolbar.lua, 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\gui.lua, src\editor\menu_file.lua
|
||||
["Save the current document"] = "Guardar el documento actual", -- src\editor\toolbar.lua, 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
|
||||
["Searching for"] = nil, -- src\editor\findreplace.lua
|
||||
["Sel: %d/%d"] = nil, -- src\editor\editor.lua
|
||||
["Select &All"] = "Seleccionar todo", -- src\editor\menu_edit.lua, src\editor\editor.lua
|
||||
["Search direction"] = "Dirección de búsqueda", -- src\editor\toolbar.lua
|
||||
["Search in selection"] = "Buscar en selección", -- src\editor\toolbar.lua
|
||||
["Search in subdirectories"] = "Buscar en subdirectorios", -- src\editor\toolbar.lua
|
||||
["Searching for '%s'."] = "Buscando para '%s'.", -- src\editor\findreplace.lua
|
||||
["Sel: %d/%d"] = "Sel: %d/%d", -- src\editor\editor.lua
|
||||
["Select &All"] = "Seleccionar todo", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["Select And Find Next"] = "Seleccionar y buscar siguiente", -- src\editor\menu_search.lua
|
||||
["Select And Find Previous"] = "Seleccionar y buscar anterior", -- src\editor\menu_search.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\gui.lua, src\editor\menu_project.lua
|
||||
["Select the word under cursor and find its next occurrence"] = "Seleccionar palabra bajo cursor y encontrar la siguiente aparición", -- src\editor\menu_search.lua
|
||||
["Select the word under cursor and find its previous occurrence"] = "Seleccionar palabra bajo cursor y encontar la anterior aparición", -- src\editor\menu_search.lua
|
||||
["Set As Start File"] = "Establecer como fchero de inicio", -- src\editor\filetree.lua
|
||||
["Set From Current File"] = "Establecer fichero actual", -- src\editor\menu_project.lua
|
||||
["Set To Project Directory"] = "Establecer a directorio de proyecto", -- src\editor\findreplace.lua
|
||||
["Set To Selected Directory"] = "Establcer a directorio seleccionado", -- src\editor\filetree.lua
|
||||
["Set project directory from current file"] = "Establecer el directorio del proyecto del archivo actual", -- src\editor\toolbar.lua, src\editor\menu_project.lua
|
||||
["Set project directory to the selected one"] = "Configurar el directorio de proyecto al seleccionado", -- src\editor\filetree.lua
|
||||
["Set search directory"] = "Establecer directorio de búsqueda", -- src\editor\toolbar.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, src\editor\filetree.lua
|
||||
["Settings: System"] = nil, -- src\editor\menu_edit.lua
|
||||
["Settings: User"] = nil, -- src\editor\menu_edit.lua
|
||||
["Set the project directory to be used"] = "Establecer el directorio de proyecto para ser utilizado", -- src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Settings: System"] = "Configuración: Sistema", -- src\editor\menu_edit.lua
|
||||
["Settings: User"] = "Configuración: Usuario", -- src\editor\menu_edit.lua
|
||||
["Show &Tooltip"] = "Ver tooltip", -- src\editor\menu_edit.lua
|
||||
["Show Location"] = nil, -- src\editor\gui.lua, src\editor\filetree.lua
|
||||
["Show All Files"] = "Ver todos los ficheros", -- src\editor\filetree.lua
|
||||
["Show Hidden Files"] = "Ver ficheros ocultos", -- src\editor\filetree.lua
|
||||
["Show Location"] = "Ver ubicación", -- src\editor\gui.lua, src\editor\filetree.lua
|
||||
["Show all files"] = "Ver todos los ficheros", -- src\editor\filetree.lua
|
||||
["Show context"] = "Ver contexto", -- src\editor\toolbar.lua
|
||||
["Show files previously hidden"] = "Ver fichero previamente ocultados", -- src\editor\filetree.lua
|
||||
["Show multiple result windows"] = "Ver múltiples ventanas de resultados", -- src\editor\toolbar.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
|
||||
["Show/Hide the status bar"] = nil, -- src\editor\menu_view.lua
|
||||
["Show/Hide the toolbar"] = nil, -- src\editor\menu_view.lua
|
||||
["Show/Hide the status bar"] = "Ver/Ocultar la barra de estado", -- src\editor\menu_view.lua
|
||||
["Show/Hide the toolbar"] = "Ver/Ocultar la barra de herramientas", -- src\editor\menu_view.lua
|
||||
["Sort By Name"] = "Ordenar por nombre", -- src\editor\outline.lua
|
||||
["Sort selected lines"] = "Clasificar las líneas seleccionadas", -- src\editor\menu_edit.lua
|
||||
["Stack"] = nil, -- src\editor\debugger.lua, src\editor\gui.lua
|
||||
["Source"] = "Fuente", -- src\editor\menu_edit.lua
|
||||
["Stack"] = "Pila", -- src\editor\debugger.lua
|
||||
["Start &Debugging"] = "Comenzar depuración", -- src\editor\menu_project.lua
|
||||
["Start or Continue debugging"] = nil, -- src\editor\gui.lua
|
||||
["Start or continue debugging"] = nil, -- src\editor\menu_project.lua
|
||||
["Start or continue debugging"] = "Inciar o continuar depuración", -- src\editor\toolbar.lua, 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\gui.lua, src\editor\menu_project.lua
|
||||
["Step out of the current function"] = "Hasta salir de la función actual", -- src\editor\gui.lua, src\editor\menu_project.lua
|
||||
["Step over"] = "Paso sin entrar", -- src\editor\gui.lua, src\editor\menu_project.lua
|
||||
["Stop debugging and continue running the process"] = nil, -- src\editor\gui.lua, src\editor\menu_project.lua
|
||||
["Stop the currently running process"] = "Parar el proceso en ejecución", -- src\editor\gui.lua, src\editor\menu_project.lua
|
||||
["Step into"] = "Paso dentro", -- src\editor\toolbar.lua, src\editor\menu_project.lua
|
||||
["Step out of the current function"] = "Hasta salir de la función actual", -- src\editor\toolbar.lua, src\editor\menu_project.lua
|
||||
["Step over"] = "Paso sin entrar", -- src\editor\toolbar.lua, src\editor\menu_project.lua
|
||||
["Stop debugging and continue running the process"] = "Parar depuración y continuar ejecutando el proceso", -- src\editor\toolbar.lua, src\editor\menu_project.lua
|
||||
["Stop the currently running process"] = "Parar el proceso en ejecución", -- src\editor\toolbar.lua, 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
|
||||
["Symbol Index"] = "Índice de símbolo", -- src\editor\outline.lua
|
||||
["Text not found."] = "Texto no encontrado.", -- 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\gui.lua, src\editor\menu_project.lua
|
||||
["Toggle Bookmark"] = "Conmutar marcador", -- src\editor\markers.lua, src\editor\menu_edit.lua
|
||||
["Toggle Breakpoint"] = "Conmutar punto de ruptura", -- src\editor\markers.lua, src\editor\menu_project.lua
|
||||
["Toggle bookmark"] = "Conmutar marcador", -- src\editor\toolbar.lua, src\editor\menu_edit.lua, src\editor\markers.lua
|
||||
["Toggle breakpoint"] = "Conmutar punto de ruptura", -- src\editor\markers.lua, src\editor\toolbar.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 create directory '%s'."] = "No se pudo crear el directorio '%s'.", -- src\editor\filetree.lua
|
||||
["Unable to create file '%s'."] = "No se pudo crear el fichero '%s'.", -- src\editor\filetree.lua
|
||||
["Unable to delete directory '%s': %s"] = "No se pudo borrar el directorio '%s': %s", -- src\editor\filetree.lua
|
||||
["Unable to delete file '%s': %s"] = "No se pudo borrar el ficheor '%s': %s", -- 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 rename file '%s'."] = "No se pudo renombrar el fichero '%s'", -- 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
|
||||
["Use '%s' to see full description."] = nil, -- src\editor\editor.lua
|
||||
["Use '%s' to show line endings and '%s' to convert them."] = nil, -- src\editor\commands.lua
|
||||
["Unmap Directory"] = "Desmapear directorio", -- src\editor\filetree.lua
|
||||
["Unset '%s' As Start File"] = "Quitar '%s' como fichero de inicio", -- src\editor\filetree.lua
|
||||
["Updated %d file."] = {"Un fichero actualizado", "%d ficheros actualizados"}, -- src\editor\findreplace.lua
|
||||
["Updating symbol index and settings..."] = "Actualizando índice de símbolos y configurando...", -- src\editor\outline.lua
|
||||
["Use %s to close."] = "Usa %s para cerrar.", -- src\editor\findreplace.lua
|
||||
["Use '%s' to see full description."] = "Usa '%s' para ver la descripción completa.", -- src\editor\editor.lua
|
||||
["Use '%s' to show line endings and '%s' to convert them."] = "Usa '%s' para ver los finales de línea y '%s' para convertirlos", -- 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 markers window"] = "Ver la ventana de marcas", -- src\editor\menu_view.lua
|
||||
["View the outline window"] = "Ver la ventana de esquema", -- 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\gui.lua, src\editor\menu_view.lua
|
||||
["View the watch window"] = "Ver la ventana de observación", -- src\editor\gui.lua, src\editor\menu_view.lua
|
||||
["Watch"] = nil, -- src\editor\debugger.lua, src\editor\gui.lua
|
||||
["View the stack window"] = "Ver la ventana de la pila de ejecución", -- src\editor\toolbar.lua, src\editor\menu_view.lua
|
||||
["View the watch window"] = "Ver la ventana de observación", -- src\editor\toolbar.lua, src\editor\menu_view.lua
|
||||
["Watch"] = "Inspeccionar", -- 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
|
||||
["Wrap around"] = "Vuelta a empezar", -- src\editor\toolbar.lua
|
||||
["You must save the program first."] = "Debes guardar el programa primero", -- 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
|
||||
["Zoom In"] = "Acercar zoom", -- src\editor\menu_view.lua
|
||||
["Zoom Out"] = "Alejar zoom", -- src\editor\menu_view.lua
|
||||
["Zoom to 100%"] = "Zoom al 100%", -- src\editor\menu_view.lua
|
||||
["Zoom"] = "Zoom", -- 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
|
||||
["unknown error"] = "Error desconocido", -- src\editor\debugger.lua
|
||||
}
|
||||
|
||||
334
cfg/i18n/fr.lua
334
cfg/i18n/fr.lua
@@ -1,181 +1,205 @@
|
||||
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
|
||||
["%s%% formatted..."] = "%s%% formattés...", -- src\editor\print.lua
|
||||
["%s%% loaded..."] = "%s%% chargé", -- src\editor\commands.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\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\menu_edit.lua, src\editor\editor.lua
|
||||
["&Copy Value"] = "Copier la &valeur", -- src\editor\debugger.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
|
||||
["&Find All"] = "&Rechercher tout", -- src\editor\findreplace.lua
|
||||
["&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
|
||||
["&Frequently Asked Questions"] = "&Questions Fréquemment Posées" , -- src\editor\menu_help.lua
|
||||
["&Getting Started Guide"] = "&Guide de Prise en Main", -- src\editor\menu_help.lua
|
||||
["&Go To 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 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\menu_edit.lua, src\editor\editor.lua
|
||||
["&Project Page"] = "&Site Web de ZeroBrane", -- src\editor\menu_help.lua
|
||||
["&Project"] = "&Projet", -- src\editor\inspect.lua, src\editor\menu_project.lua
|
||||
["&Redo"] = "&Rétablir", -- src\editor\menu_edit.lua, src\editor\editor.lua
|
||||
["&Paste"] = "Co&ller", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Print..."] = "&Imprimer", -- src\editor\print.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
|
||||
["&Replace"] = "Re&mplacer", -- src\editor\menu_search.lua
|
||||
["&Run"] = "&Exécuter", -- src\editor\menu_project.lua
|
||||
["&Save"] = "&Enregistrer", -- src\editor\gui.lua, src\editor\menu_file.lua
|
||||
["&Search"] = "&Recherche", -- src\editor\menu_search.lua
|
||||
["&Select Command"] = "Selectionner la &Commande", -- src\editor\gui.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
|
||||
["&Tool Bar"] = "&Barre d'outils", -- src\editor\menu_view.lua
|
||||
["&Status Bar"] = "Barre d'&état", -- src\editor\menu_view.lua
|
||||
["&Tool Bar"] = "Barre d'&outils", -- src\editor\menu_view.lua
|
||||
["&Tutorials"] = "&Tutoriels", -- src\editor\menu_help.lua
|
||||
["&Undo"] = "&Annuler", -- src\editor\menu_edit.lua, src\editor\editor.lua
|
||||
["&Up"] = "Vers le &haut", -- src\editor\findreplace.lua
|
||||
["&Undo"] = "&Annuler", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&View"] = "&Affichage", -- src\editor\menu_view.lua
|
||||
["&Watch Window"] = "&Expressions espionnes", -- src\editor\menu_view.lua
|
||||
[".&bak on Replace"] = ".&bak avant remplacement", -- src\editor\findreplace.lua
|
||||
["&Watch Window"] = "E&xpressions espionnes", -- src\editor\menu_view.lua
|
||||
["About %s"] = "À propos de %s", -- src\editor\menu_help.lua
|
||||
["Add To Scratchpad"] = "Ajouter au brouillon", -- src\editor\editor.lua
|
||||
["Add Watch Expression"] = "Ajouter une expression", -- 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
|
||||
["Bookmark"] = "&Marque-pages", -- src\editor\menu_edit.lua
|
||||
["Break execution at the next executed line of code"] = "Interrompre l'exécution à la ligne suivante", -- src\editor\gui.lua, src\editor\menu_project.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
|
||||
["Binary file is shown as read-only as it is only partially loaded."] = "Le fichier binaire est affiché en lecture seule parce qu'il a été chargé partiellement.", -- src\editor\commands.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\toolbar.lua, src\editor\menu_project.lua
|
||||
["Breakpoint"] = "Point d'arrêt", -- src\editor\menu_project.lua
|
||||
["C&lear Console Window"] = "E&ffacer la fenêtre console", -- src\editor\gui.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 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 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 open file '%s': %s"] = "Impossible d'ouvrir le fichier '%s': %s", -- src\editor\findreplace.lua, src\editor\singleinstance.lua, src\editor\inspect.lua, src\editor\outline.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 replace in read-only text."] = "Impossible de remplacer dans un texte en lecture seule.", -- src\editor\findreplace.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 for '%s'."] = "Impossible de lancer le débogage pour '%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
|
||||
["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
|
||||
["Cancelled by the user."] = "Annulé par l'utilisateur.", -- src\editor\findreplace.lua
|
||||
["Choose a project directory"] = "Choisissez un répertoire de projet", -- src\editor\findreplace.lua, src\editor\menu_project.lua, src\editor\gui.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"] = "Effacer les éléments de cette liste", -- src\editor\menu_file.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
|
||||
["Choose a directory to map"] = "Choisir un répertoire à mapper", -- src\editor\filetree.lua
|
||||
["Choose a project directory"] = "Choisir un répertoire de projet", -- src\editor\toolbar.lua, src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Choose a search directory"] = "Choisir un répertoire dans lequel rechercher", -- src\editor\findreplace.lua
|
||||
["Choose..."] = "Choisir...", -- src\editor\findreplace.lua, src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Clear Items"] = "Effacer les éléments", -- src\editor\findreplace.lua, 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
|
||||
["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
|
||||
["Command line parameters"] = "Paramètres de ligne de commande", -- src\editor\menu_project.lua
|
||||
["Comment or uncomment current or selected lines"] = "Commenter ou décommenter les lignes courantes ou sélectionnées", -- src\editor\menu_edit.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
|
||||
["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\filetree.lua
|
||||
["Copy selected text to clipboard"] = "Copier le texte sélectionné dans le presse-papiers", -- src\editor\menu_edit.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\gui.lua, src\editor\menu_file.lua
|
||||
["Cu&t"] = "&Couper", -- src\editor\menu_edit.lua, src\editor\editor.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\toolbar.lua, 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
|
||||
["Detach &Process"] = "Détacher le &processus", -- 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
|
||||
["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
|
||||
["Disable Indexing For '%s'"] = "Désactiver l'indexation pour '%s'", -- src\editor\outline.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
|
||||
["Enable Indexing"] = "Activer l'indexation", -- src\editor\outline.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 command line parameters (use Cancel to clear)"] = "Entrez des paramètres de ligne de commande (pressez Annuler pour effacer)", -- src\editor\menu_project.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\toolbar.lua, 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' 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 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\gui.lua, src\editor\menu_search.lua
|
||||
["Find text in files"] = "Rechercher le texte dans les fichiers", -- src\editor\menu_search.lua
|
||||
["Find text"] = "Rechercher le texte", -- src\editor\gui.lua, 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 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\toolbar.lua, src\editor\menu_search.lua
|
||||
["Find in files"] = "Rechercher dans les fichiers", -- src\editor\toolbar.lua
|
||||
["Find text in files"] = "Recherche le texte dans les fichiers", -- src\editor\menu_search.lua
|
||||
["Find text"] = "Recherche le texte", -- src\editor\toolbar.lua, 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
|
||||
["Found"] = "Occurrences trouvées :", -- src\editor\findreplace.lua
|
||||
["Full &Screen"] = "&Plein écran", -- src\editor\menu_view.lua
|
||||
["Find"] = "Rechercher ", -- src\editor\toolbar.lua
|
||||
["Fold or unfold all code folds"] = "Replie ou déplie tous les blocs de code", -- src\editor\menu_edit.lua
|
||||
["Formatting page %d..."] = "Formattage de la page %d en cours...", -- src\editor\print.lua
|
||||
["Found %d instance."] = {"%d occurence trouvée.", "%d occurences trouvées."}, -- src\editor\findreplace.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
|
||||
["Full &Screen"] = "Plein é&cran", -- src\editor\menu_view.lua
|
||||
["Go To Definition"] = "Aller à la définition", -- src\editor\editor.lua
|
||||
["Go To 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 Next Breakpoint"] = "Aller au prochain point d'arrêt", -- src\editor\menu_project.lua
|
||||
["Go To Previous Bookmark"] = "Aller au marque-page précédent", -- src\editor\menu_edit.lua
|
||||
["Go to a selected line"] = "Aller à la ligne sélectionnée", -- src\editor\menu_search.lua
|
||||
["Go To Previous Breakpoint"] = "Aller au point d'arrêt précédent", -- src\editor\menu_project.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
|
||||
["In Files"] = "Dans les fichiers", -- src\editor\findreplace.lua
|
||||
["Jump to a function definition..."] = "Aller à la définition de fonction...", -- src\editor\editor.lua
|
||||
["Ignore and don't index symbols from files in the selected directory"] = "Ignorer et ne pas indexer les symboles dans les fichiers provenant du répertoire sélectionné", -- src\editor\outline.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
|
||||
["Indexing %d files: '%s'..."] = "%d fichiers indexés: '%s'...", -- src\editor\outline.lua
|
||||
["Indexing completed."] = "Indexation terminée.", -- src\editor\outline.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\gui.lua, src\editor\shellbox.lua
|
||||
["Lua &Interpreter"] = "Interpréteur L&ua", -- src\editor\menu_project.lua
|
||||
["Map Directory..."] = "Mapper un répertoire...", -- src\editor\filetree.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
|
||||
["New &File"] = "Nouveau &Fichier", -- src\editor\filetree.lua
|
||||
["Markers Window"] = "Fenêtre des marqueurs", -- src\editor\menu_view.lua
|
||||
["Markers"] = "Marqueurs", -- src\editor\markers.lua
|
||||
["Match case"] = "Respecter la casse", -- src\editor\toolbar.lua
|
||||
["Match whole word"] = "Mot entier uniquement", -- src\editor\toolbar.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 With Default Program"] = "Ouvrir avec le programme par défaut", -- src\editor\filetree.lua
|
||||
["Open an existing document"] = "Ouvrir un document existant", -- src\editor\gui.lua, src\editor\menu_file.lua
|
||||
["Open an existing document"] = "Ouvre un document existant", -- src\editor\toolbar.lua, 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\gui.lua, src\editor\output.lua, src\editor\settings.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
|
||||
["Page Setup..."] = "Configuration de la page...", -- src\editor\print.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
|
||||
["Print the current document"] = "Imprimer le document courant", -- src\editor\print.lua
|
||||
["Program '%s' started in '%s' (pid: %d)."] = "Programme '%s' démarré dans '%s' (pid : %d).", -- src\editor\output.lua
|
||||
["Program can't start because conflicting process is running as '%s'."] = "Le programme ne peut démarrer à cause d'un conflit de processus avec '%s' (en cours d'exécution).", -- src\editor\output.lua
|
||||
["Program completed in %.2f seconds (pid: %d)."] = "Programme terminé en %.2f secondes (pid : %d).", -- src\editor\output.lua
|
||||
@@ -184,98 +208,132 @@ return {
|
||||
["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, src\editor\filetree.lua
|
||||
["Project history"] = "Historique de projet", -- src\editor\menu_file.lua
|
||||
["Project"] = "Projet", -- src\editor\gui.lua
|
||||
["Project"] = "Projet", -- src\editor\filetree.lua
|
||||
["Project/&FileTree Window"] = "&Explorateur de projet", -- src\editor\menu_view.lua
|
||||
["Provide command line parameters"] = "Renseignez les paramètres de ligne de commande", -- src\editor\menu_project.lua
|
||||
["Provide command line parameters"] = "Définit les paramètres de ligne de commande", -- src\editor\menu_project.lua
|
||||
["Queued %d files to index."] = "%d fichiers mis en attente pour l'indexation.", -- src\editor\menu_search.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
|
||||
["Recent &Projects"] = "&Projets récents", -- src\editor\menu_file.lua
|
||||
["Re-indent selected lines"] = "Ré-indente les lignes sélectionnées", -- src\editor\menu_edit.lua
|
||||
["Reached end of selection and wrapped around."] = "Fin de sélection atteinte et repositionnement en début de sélection.", -- src\editor\findreplace.lua
|
||||
["Reached end of text and wrapped around."] = "Fin de texte atteinte et repositionnement en début de texte.", -- src\editor\findreplace.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
|
||||
["Recent Projects"] = "Projets récents", -- src\editor\menu_file.lua
|
||||
["Redo last edit undone"] = "Rétablit la dernière modification", -- src\editor\menu_edit.lua
|
||||
["Refresh Index"] = "Actualiser l'index", -- src\editor\outline.lua
|
||||
["Refresh indexed symbols from files in the selected directory"] = "Actualiser les symboles indexés à partir des fichiers du répertoire sélectionné", -- src\editor\outline.lua
|
||||
["Refresh"] = "Rafraîchir", -- src\editor\filetree.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
|
||||
["Regular expression"] = "Expression régulière", -- src\editor\toolbar.lua
|
||||
["Remote console"] = "Console à distance", -- src\editor\shellbox.lua
|
||||
["Rename All Instances"] = "Renommer toutes les occurrences", -- src\editor\editor.lua
|
||||
["Replace A&ll"] = "Remplacer &tout", -- src\editor\findreplace.lua
|
||||
["Replace"] = "Remplacer par ", -- src\editor\findreplace.lua
|
||||
["Replace All Selections"] = "Remplacer toutes les sélections", -- src\editor\editor.lua
|
||||
["Replace all"] = "Remplacer tout", -- src\editor\toolbar.lua
|
||||
["Replace next instance"] = "Remplacer l'occurence suivante", -- src\editor\toolbar.lua
|
||||
["Replaced %d instance."] = {"%d occurence remplacée.","%d occurences remplacées."}, -- 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
|
||||
["Run as Scratchpad"] = "Exécuter comme brouillon", -- src\editor\menu_project.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 To Cursor"] = "Exécuter jusqu'au curseur", -- src\editor\menu_project.lua, src\editor\editor.lua
|
||||
["Run as Scratchpad"] = "Exécuter comme brouillon", -- src\editor\toolbar.lua
|
||||
["Run to cursor"] = "Exécuter jusqu'au curseur", -- src\editor\toolbar.lua, 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\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\gui.lua, src\editor\menu_file.lua
|
||||
["Save all open documents"] = "Enregistre tous les documents ouverts", -- src\editor\toolbar.lua, 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\gui.lua, src\editor\menu_file.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\toolbar.lua, 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
|
||||
["Search direction"] = "Direction de recherche", -- src\editor\toolbar.lua
|
||||
["Search in selection"] = "Rechercher dans la sélection", -- src\editor\toolbar.lua
|
||||
["Search in subdirectories"] = "Rechercher dans les sous-répertoires", -- src\editor\toolbar.lua
|
||||
["Searching for '%s'."] = "Recherche de '%s'.", -- src\editor\findreplace.lua
|
||||
["Sel: %d/%d"] = "Sel: %d/%d", -- src\editor\editor.lua
|
||||
["Select &All"] = "Sélectionner &tout", -- src\editor\menu_edit.lua, src\editor\editor.lua
|
||||
["Select all text in the editor"] = "Sélectionner tout le texte dans l'éditeur", -- src\editor\menu_edit.lua
|
||||
["Select and Find Next"] = "Sélectionner et chercher le suivant", -- src\editor\menu_search.lua
|
||||
["Select and Find Previous"] = "Sélectionner et chercher le précédent", -- src\editor\menu_search.lua
|
||||
["Select the word under cursor and find its next occurrence"] = "Sélectionner le mot sous le curseur et chercher son occurence suivante", -- src\editor\menu_search.lua
|
||||
["Select the word under cursor and find its previous occurrence"] = "Sélectionner le mot sous le curseur et chercher son occurence précédente", -- src\editor\menu_search.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\gui.lua, src\editor\menu_project.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, src\editor\filetree.lua
|
||||
["Select &All"] = "Sélectionner &tout", -- src\editor\gui.lua, src\editor\editor.lua, 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 all text in the editor"] = "Sélectionne tout le texte dans l'éditeur", -- src\editor\menu_edit.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 As Start File"] = "Définir le fichier en tant que point d'entrée", -- src\editor\filetree.lua
|
||||
["Set From Current File"] = "Définir à partir du fichier courant", -- src\editor\menu_project.lua
|
||||
["Set To Project Directory"] = "Utiliser le répertoire de projet", -- src\editor\findreplace.lua
|
||||
["Set To Selected Directory"] = "Utiliser le répertoire sélectionné", -- src\editor\filetree.lua
|
||||
["Set project directory from current file"] = "Définit le répertoire de projet à partir du chemin du fichier courant", -- src\editor\toolbar.lua, src\editor\menu_project.lua
|
||||
["Set project directory to the selected one"] = "Faire du répertoire sélectionné le répertoire de projet", -- src\editor\filetree.lua
|
||||
["Set search directory"] = "Définir le répertoire de recherche", -- src\editor\toolbar.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
|
||||
["Show/Hide the status bar"] = "Afficher/Masquer la barre de statut", -- src\editor\menu_view.lua
|
||||
["Show/Hide the toolbar"] = "Afficher/Masquer la barre d'outils", -- src\editor\menu_view.lua
|
||||
["Sort selected lines"] = "Trier les lignes sélectionnées", -- src\editor\menu_edit.lua
|
||||
["Stack"] = "Pile d'exécution", -- src\editor\debugger.lua, src\editor\gui.lua
|
||||
["Show all files"] = "Affiche tous les fichiers", -- src\editor\filetree.lua
|
||||
["Show context"] = "Affiche le contexte", -- src\editor\toolbar.lua
|
||||
["Show files previously hidden"] = "Affiche les fichiers précédemment masqués", -- src\editor\filetree.lua
|
||||
["Show multiple result windows"] = "Affiche les multiples fenêtres de résultat", -- src\editor\toolbar.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 By Name"] = "Trie par nom", -- src\editor\outline.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 or Continue debugging"] = "Démarrer ou Continuer le debogage", -- src\editor\gui.lua
|
||||
["Start or continue debugging"] = "Démarrer ou continuer le debogage", -- src\editor\menu_project.lua
|
||||
["Start or continue debugging"] = "Démarre ou continue le debogage", -- src\editor\toolbar.lua, 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\gui.lua, src\editor\menu_project.lua
|
||||
["Step out of the current function"] = "Sortir de la fonction courante", -- src\editor\gui.lua, src\editor\menu_project.lua
|
||||
["Step over"] = "Enjamber l'instruction suivante", -- src\editor\gui.lua, src\editor\menu_project.lua
|
||||
["Stop debugging and continue running the process"] = "Arrêter le débogage et continuer l'exécution du processus", -- src\editor\gui.lua, src\editor\menu_project.lua
|
||||
["Stop the currently running process"] = "Arrêter le processus en cours d'exécution", -- src\editor\gui.lua, src\editor\menu_project.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\toolbar.lua, src\editor\menu_project.lua
|
||||
["Step out of the current function"] = "Sort de la fonction courante", -- src\editor\toolbar.lua, src\editor\menu_project.lua
|
||||
["Step over"] = "Enjambe l'instruction suivante", -- src\editor\toolbar.lua, 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\toolbar.lua, src\editor\menu_project.lua
|
||||
["Stop the currently running process"] = "Arrête le processus en cours d'exécution", -- src\editor\toolbar.lua, 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
|
||||
["Symbol Index"] = "Index des symboles", -- src\editor\outline.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\gui.lua, src\editor\menu_project.lua
|
||||
["Toggle Bookmark"] = "Créer/Supprimer un marque-page", -- src\editor\markers.lua, src\editor\menu_edit.lua
|
||||
["Toggle Breakpoint"] = "Créer/Supprimer un point d'arrêt", -- src\editor\markers.lua, src\editor\menu_project.lua
|
||||
["Toggle bookmark"] = "Crée ou supprime un marque-page", -- src\editor\toolbar.lua, src\editor\menu_edit.lua, src\editor\markers.lua
|
||||
["Toggle breakpoint"] = "Crée ou supprime un point d'arrêt", -- src\editor\markers.lua, src\editor\toolbar.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 delete file '%s': %s"] = "Impossible de supprimer le fichier '%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
|
||||
["Unmap Directory"] = "Démapper le répertoire", -- src\editor\filetree.lua
|
||||
["Unset '%s' As Start File"] = "Ne plus utiliser le fichier '%s' en tant que point d'entrée", -- src\editor\filetree.lua
|
||||
["Updated %d file."] = {"%d fichier mis à jour.","%d fichiers mis à jour."}, -- src\editor\findreplace.lua
|
||||
["Updating symbol index and settings..."] = "Mise à jour en cours de l'index des symboles et des paramètres...", -- src\editor\outline.lua
|
||||
["Use %s to close."] = "Utiliser %s pour fermer.", -- src\editor\findreplace.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\gui.lua, src\editor\menu_view.lua
|
||||
["View the watch window"] = "Afficher la fenêtre d'expressions espionnes", -- src\editor\gui.lua, src\editor\menu_view.lua
|
||||
["Watch"] = "Expressions espionnes", -- src\editor\debugger.lua, src\editor\gui.lua
|
||||
["View the markers window"] = "Afficher la fenêtre des marqueurs", -- src\editor\menu_view.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\toolbar.lua, src\editor\menu_view.lua
|
||||
["View the watch window"] = "Affiche la fenêtre d'expressions espionnes", -- src\editor\toolbar.lua, 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
|
||||
["Wrap around"] = "Boucler", -- src\editor\toolbar.lua
|
||||
["You must save the program first."] = "Vous devez d'abord enregistrer le programme.", -- src\editor\commands.lua
|
||||
["Zoom In"] = "Zoomer", -- src\editor\menu_view.lua
|
||||
["Zoom Out"] = "Dézoomer", -- src\editor\menu_view.lua
|
||||
|
||||
220
cfg/i18n/it.lua
220
cfg/i18n/it.lua
@@ -1,57 +1,54 @@
|
||||
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
|
||||
["%s%% formatted..."] = "%s%% formattato...", -- src\editor\print.lua
|
||||
["%s%% loaded..."] = "%s%% caricato...", -- src\editor\commands.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\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\menu_edit.lua, src\editor\editor.lua
|
||||
["&Copy Value"] = "&Copia Valore", -- src\editor\debugger.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
|
||||
["&Frequently Asked Questions"] = "Domande &Frequenti", -- src\editor\menu_help.lua
|
||||
["&Getting Started Guide"] = "&Guida Introduttiva", -- src\editor\menu_help.lua
|
||||
["&Go To Line..."] = "Vai a riga...", -- src\editor\menu_search.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\menu_edit.lua, src\editor\editor.lua
|
||||
["&Paste"] = "Incolla", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Print..."] = "Stampa...", -- src\editor\print.lua
|
||||
["&Project Page"] = "&Pagina di Progetto", -- src\editor\menu_help.lua
|
||||
["&Project"] = "&Progetto", -- src\editor\inspect.lua, src\editor\menu_project.lua
|
||||
["&Redo"] = "&Ripeti", -- src\editor\menu_edit.lua, src\editor\editor.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
|
||||
["&Replace"] = "Sostituisci", -- src\editor\menu_search.lua
|
||||
["&Run"] = "Lancia", -- src\editor\menu_project.lua
|
||||
["&Save"] = "&Salva", -- src\editor\gui.lua, src\editor\menu_file.lua
|
||||
["&Search"] = "Ricerca", -- src\editor\menu_search.lua
|
||||
["&Select Command"] = "Seleziona Comando", -- src\editor\gui.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
|
||||
["&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\menu_edit.lua, src\editor\editor.lua
|
||||
["&Up"] = "Verso l'alto", -- src\editor\findreplace.lua
|
||||
["&Undo"] = "Annulla", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.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 To Scratchpad"] = "Aggiungi a Scratchpad ", -- src\editor\editor.lua
|
||||
["Add Watch Expression"] = "Aggiungi Espressione di Controllo", -- src\editor\editor.lua
|
||||
@@ -61,23 +58,29 @@ return {
|
||||
["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
|
||||
["Binary file is shown as read-only as it is only partially loaded."] = "Il file binario è aperto in sola lettura, poichè caricato solo parzialmente.", -- src\editor\commands.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\gui.lua, src\editor\menu_project.lua
|
||||
["C&lear Output Window"] = "Pulisci finestra di output", -- src\editor\menu_project.lua
|
||||
["Break execution at the next executed line of code"] = "Interrompi l'esecuzione alla successiva riga di codice ", -- src\editor\toolbar.lua, src\editor\menu_project.lua
|
||||
["Breakpoint"] = "Punto di Interruzione", -- src\editor\menu_project.lua
|
||||
["C&lear Console Window"] = "Pulisci finestra console", -- src\editor\gui.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 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 evaluate the expression while the application is running."] = "Impossibile interpretare l'espressione se l'applicazione è in esecuzione.", -- src\editor\debugger.lua
|
||||
["Can't open file '%s': %s"] = "Impossibile aprire il file '%s': %s", -- src\editor\findreplace.lua, src\editor\singleinstance.lua, src\editor\inspect.lua, src\editor\outline.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 replace in read-only text."] = "Impossibile sostituire in un testo in sola lettura", -- src\editor\findreplace.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 for '%s'."] = "Impossibile iniziare il debug perchè '%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
|
||||
["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\gui.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
|
||||
["Choose a directory to map"] = "Scegli una directory da mappare", -- src\editor\filetree.lua
|
||||
["Choose a project directory"] = "Scegli la directory di un progetto", -- src\editor\toolbar.lua, src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Choose a search directory"] = "Scegli una directory di ricerca", -- src\editor\findreplace.lua
|
||||
["Choose..."] = "Scegli...", -- src\editor\findreplace.lua, src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Clear Items"] = "Pulisci elementi", -- src\editor\findreplace.lua, 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
|
||||
@@ -94,27 +97,29 @@ return {
|
||||
["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\filetree.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\gui.lua, src\editor\menu_file.lua
|
||||
["Cu&t"] = "&Taglia", -- src\editor\menu_edit.lua, src\editor\editor.lua
|
||||
["Create an empty document"] = "Crea un documento vuoto", -- src\editor\toolbar.lua, 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:%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
|
||||
["Disable Indexing For '%s'"] = "Disabilita Indicizzazione per '%s'", -- src\editor\outline.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
|
||||
["Enable Indexing"] = "Abilita Indicizzazione", -- src\editor\outline.lua
|
||||
["Enter Lua code and press Enter to run it."] = "Inserisci codice Lua e premi <Enter> per eseguirlo.", -- src\editor\shellbox.lua
|
||||
["Enter command line parameters (use Cancel to clear)"] = "Inserisci i parametri riga di comando (Annulla per pulire)", -- src\editor\menu_project.lua
|
||||
["Enter line number"] = "Inserisci il numero di linea", -- src\editor\menu_search.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
|
||||
@@ -122,60 +127,79 @@ return {
|
||||
["Error"] = "Errore", -- src\editor\commands.lua
|
||||
["Evaluate In Console"] = "Elabora in console", -- src\editor\editor.lua
|
||||
["Execute the current project/file and keep updating the code to see immediate results"] = "Esegue il progetto/file corrente e permette di modificare il codice per vedere i risultati in tempo reale", -- src\editor\menu_project.lua
|
||||
["Execute the current project/file"] = "Esegue il progetto/file corrente", -- src\editor\menu_project.lua
|
||||
["Execute the current project/file"] = "Esegue il progetto/file corrente", -- src\editor\toolbar.lua, 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' 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\gui.lua, src\editor\menu_search.lua
|
||||
["Find and replace text"] = "Cerca e sostituisci testo", -- src\editor\toolbar.lua, src\editor\menu_search.lua
|
||||
["Find in files"] = "Ricerca nei files", -- src\editor\toolbar.lua
|
||||
["Find text in files"] = "Cerca testo nei files", -- src\editor\menu_search.lua
|
||||
["Find text"] = "Cerca testo", -- src\editor\gui.lua, src\editor\menu_search.lua
|
||||
["Find text"] = "Cerca testo", -- src\editor\toolbar.lua, 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
|
||||
["Find"] = "Ricerca", -- src\editor\toolbar.lua
|
||||
["Fold or unfold all code folds"] = "Apri o chiudi tutti i blocchi di codice", -- src\editor\menu_edit.lua
|
||||
["Formatting page %d..."] = "Formattazione pagina %d...", -- src\editor\print.lua
|
||||
["Found %d instance."] = {"Trovata %d istanza.", "Trovate %d istanze."}, -- src\editor\findreplace.lua
|
||||
["Found auto-recovery record and restored saved session."] = "Trovato punto di auto-revcovery e ripristinata la sessione salvata", -- src\editor\commands.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 Line"] = "Vai alla riga", -- src\editor\menu_search.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 Next Breakpoint"] = "Vai al Prossimo Punto di Interruzione", -- src\editor\menu_project.lua
|
||||
["Go To Previous Bookmark"] = "Vai al Precedente Segnalibro", -- src\editor\menu_edit.lua
|
||||
["Go to a selected line"] = "Vai alla riga selezionata", -- src\editor\menu_search.lua
|
||||
["Go To Previous Breakpoint"] = "Vail al Precedente Punto di Interruzione", -- src\editor\menu_project.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
|
||||
["In Files"] = "Nei Files", -- src\editor\findreplace.lua
|
||||
["Jump to a function definition..."] = "Salta alla definizione della funzione...", -- src\editor\editor.lua
|
||||
["Ignore and don't index symbols from files in the selected directory"] = "Ignora e non indicizzare simboli nella directory selezionata", -- src\editor\outline.lua
|
||||
["Ignored error in debugger initialization code: %s."] = "Errore ignorato durante l'inizializzaione del debugger codice: %s.", -- src\editor\debugger.lua
|
||||
["Indexing %d files: '%s'..."] = "Indicizzazione %d file: '%s'...", -- src\editor\outline.lua
|
||||
["Indexing completed."] = "Indicizzazione completata", -- src\editor\outline.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\gui.lua, src\editor\shellbox.lua
|
||||
["Lua &Interpreter"] = "&Interprete Lua", -- src\editor\menu_project.lua
|
||||
["Map Directory..."] = "Mappa directory...", -- src\editor\filetree.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
|
||||
["Markers Window"] = "Finestra Marcatori", -- src\editor\menu_view.lua
|
||||
["Markers"] = "Marcatori", -- src\editor\markers.lua
|
||||
["Match case"] = "Maiuscole/Minuscole", -- src\editor\toolbar.lua
|
||||
["Match whole word"] = "Intera parola", -- src\editor\toolbar.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 With Default Program"] = "Apri con programma predefinito", -- src\editor\filetree.lua
|
||||
["Open an existing document"] = "Apri un documento esistente", -- src\editor\gui.lua, src\editor\menu_file.lua
|
||||
["Open an existing document"] = "Apri un documento esistente", -- src\editor\toolbar.lua, src\editor\menu_file.lua
|
||||
["Open file"] = "Apri un file", -- src\editor\commands.lua
|
||||
["Options"] = "Opzioni", -- src\editor\findreplace.lua
|
||||
["Output (running)"] = "Output (in corso d'esecuzione)", -- src\editor\output.lua
|
||||
["Output"] = "Output", -- src\editor\gui.lua, src\editor\output.lua, src\editor\settings.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
|
||||
["Page Setup..."] = "Impostazione Pagina...", -- src\editor\print.lua
|
||||
["Paste text from the clipboard"] = "Incolla testo dagli appunti", -- src\editor\menu_edit.lua
|
||||
["Preferences"] = "Preferenze", -- 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
|
||||
["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
|
||||
["Print the current document"] = "Stampa il documento corrente", -- src\editor\print.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
|
||||
["Program completed in %.2f seconds (pid: %d)."] = "Programma completato in %.2f secondi (pid: %d).", -- src\editor\output.lua
|
||||
@@ -184,98 +208,132 @@ return {
|
||||
["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, src\editor\filetree.lua
|
||||
["Project history"] = "Storia del Progetto", -- src\editor\menu_file.lua
|
||||
["Project"] = "Progetto", -- src\editor\gui.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
|
||||
["Queued %d files to index."] = "Accodati %d file per indicizzazione.", -- src\editor\menu_search.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
|
||||
["Recent &Projects"] = "Progetti Recenti", -- src\editor\menu_file.lua
|
||||
["Re-indent selected lines"] = "Re-indenta le linee selezionate", -- src\editor\menu_edit.lua
|
||||
["Reached end of selection and wrapped around."] = "Raggiunta la fine della selezione e ricominciato da inizio ", -- src\editor\findreplace.lua
|
||||
["Reached end of text and wrapped around."] = "Raggiunta la fine del testo e ricominciato da inizio", -- src\editor\findreplace.lua
|
||||
["Recent Files"] = "Files recenti", -- src\editor\menu_file.lua
|
||||
["Recent Projects"] = "Progetti Recenti", -- src\editor\menu_file.lua
|
||||
["Redo last edit undone"] = "Ripeti l'ultima azione annullata", -- src\editor\menu_edit.lua
|
||||
["Refresh Index"] = "Aggiorna Indici", -- src\editor\outline.lua
|
||||
["Refresh indexed symbols from files in the selected directory"] = "Aggiorna simboli indicizzati dai files nella directory selezionata", -- src\editor\outline.lua
|
||||
["Refresh"] = "Rinfrescare", -- src\editor\filetree.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
|
||||
["Regular expression"] = "Regular expression", -- src\editor\toolbar.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"] = "Sostituisci", -- src\editor\findreplace.lua
|
||||
["Replace All Selections"] = "Sostituisci Tutte le Selezioni", -- src\editor\editor.lua
|
||||
["Replace all"] = "Sostituisci Tutto", -- src\editor\toolbar.lua
|
||||
["Replace next instance"] = "Sostituisci istanza successiva", -- src\editor\toolbar.lua
|
||||
["Replaced %d instance."] = {"Sostituita %d istanza.", "Sostituite %d istanze."}, -- 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
|
||||
["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
|
||||
["Run To Cursor"] = "Esegui fino al Cursore", -- src\editor\menu_project.lua, src\editor\editor.lua
|
||||
["Run as Scratchpad"] = "Esegui in Scratchpad (Live coding)", -- src\editor\toolbar.lua
|
||||
["Run to cursor"] = "Esegui fino al cursore", -- src\editor\toolbar.lua, 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\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\gui.lua, src\editor\menu_file.lua
|
||||
["Save all open documents"] = "Salva tutti i documenti aperti", -- src\editor\toolbar.lua, 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\gui.lua, src\editor\menu_file.lua
|
||||
["Save the current document"] = "Salva il documento corrente", -- src\editor\toolbar.lua, 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
|
||||
["Searching for"] = "Ricerca di", -- src\editor\findreplace.lua
|
||||
["Search direction"] = "Direzione ricerca", -- src\editor\toolbar.lua
|
||||
["Search in selection"] = "Ricerca nella selezione", -- src\editor\toolbar.lua
|
||||
["Search in subdirectories"] = "Ricerca nelle sotto-directory", -- src\editor\toolbar.lua
|
||||
["Searching for '%s'."] = "Ricerca di '%s'.", -- src\editor\findreplace.lua
|
||||
["Sel: %d/%d"] = "Sel: %d/%d", -- src\editor\editor.lua
|
||||
["Select &All"] = "Selezion&a Tutto", -- src\editor\menu_edit.lua, src\editor\editor.lua
|
||||
["Select &All"] = "Selezion&a Tutto", -- src\editor\gui.lua, src\editor\editor.lua, 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 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 As Start File"] = "Imposta come File di Partenza", -- src\editor\filetree.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\gui.lua, src\editor\menu_project.lua
|
||||
["Set To Project Directory"] = "Imposta a Directory di Progetto", -- src\editor\findreplace.lua
|
||||
["Set To Selected Directory"] = "Imposta a Directory Selezionata", -- src\editor\filetree.lua
|
||||
["Set project directory from current file"] = "Definisci la directory del progeetto dal file corrente", -- src\editor\toolbar.lua, src\editor\menu_project.lua
|
||||
["Set project directory to the selected one"] = "Imposta la directory di progetto dalla directory selezionata", -- src\editor\filetree.lua
|
||||
["Set search directory"] = "Imposta directory ricerca", -- src\editor\toolbar.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, 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 context"] = "Mostra contesto", -- src\editor\toolbar.lua
|
||||
["Show files previously hidden"] = "Mostra i file precedentemente nascosti", -- src\editor\filetree.lua
|
||||
["Show multiple result windows"] = "Mostra più finestre dei risultati", -- src\editor\toolbar.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
|
||||
["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 By Name"] = "Ordina per Nome", -- src\editor\outline.lua
|
||||
["Sort selected lines"] = "Ordina le righe selezionate", -- src\editor\menu_edit.lua
|
||||
["Stack"] = "Stack", -- src\editor\debugger.lua, src\editor\gui.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 or Continue debugging"] = "Inizia o continua il debug", -- src\editor\gui.lua
|
||||
["Start or continue debugging"] = "Inizia o continua il debug", -- src\editor\menu_project.lua
|
||||
["Start or continue debugging"] = "Inizia o continua il debug", -- src\editor\toolbar.lua, 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\gui.lua, src\editor\menu_project.lua
|
||||
["Step out of the current function"] = "Contina fino all'uscita della funzione", -- src\editor\gui.lua, src\editor\menu_project.lua
|
||||
["Step over"] = "Continua senza entrare nella funzione", -- src\editor\gui.lua, src\editor\menu_project.lua
|
||||
["Stop debugging and continue running the process"] = "Ferma il debug e continua l'esecuzione del processo", -- src\editor\gui.lua, src\editor\menu_project.lua
|
||||
["Stop the currently running process"] = "Ferma il processo in esecuzione", -- src\editor\gui.lua, src\editor\menu_project.lua
|
||||
["Step into"] = "Step into", -- src\editor\toolbar.lua, src\editor\menu_project.lua
|
||||
["Step out of the current function"] = "Contina fino all'uscita della funzione", -- src\editor\toolbar.lua, src\editor\menu_project.lua
|
||||
["Step over"] = "Continua senza entrare nella funzione", -- src\editor\toolbar.lua, src\editor\menu_project.lua
|
||||
["Stop debugging and continue running the process"] = "Ferma il debug e continua l'esecuzione del processo", -- src\editor\toolbar.lua, src\editor\menu_project.lua
|
||||
["Stop the currently running process"] = "Ferma il processo in esecuzione", -- src\editor\toolbar.lua, src\editor\menu_project.lua
|
||||
["Switch to or from full screen mode"] = "Passa da tutto schermo a finestra", -- src\editor\menu_view.lua
|
||||
["Symbol Index"] = "Indice Simboli", -- src\editor\outline.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\gui.lua, src\editor\menu_project.lua
|
||||
["Toggle Bookmark"] = "Attiva/Disattiva Segnalibro", -- src\editor\markers.lua, src\editor\menu_edit.lua
|
||||
["Toggle Breakpoint"] = "Attiva/Disattiva Breakpoint", -- src\editor\markers.lua, src\editor\menu_project.lua
|
||||
["Toggle bookmark"] = "Attiva/Disattiva Segnalibro", -- src\editor\toolbar.lua, src\editor\menu_edit.lua, src\editor\markers.lua
|
||||
["Toggle breakpoint"] = "Attiva/Disattiva Breakpoint", -- src\editor\markers.lua, src\editor\toolbar.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 delete file '%s': %s"] = "Impossibile cancellare file '%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
|
||||
["Unmap Directory"] = "Togli mappatura Directory", -- src\editor\filetree.lua
|
||||
["Unset '%s' As Start File"] = "Togli '%s' come File di Partenza", -- src\editor\filetree.lua
|
||||
["Updated %d file."] = {"Aggiornato %d file.", "Aggiornati %d file."}, -- src\editor\findreplace.lua
|
||||
["Updating symbol index and settings..."] = "Aggiornamento indice simbili e impostazioni...", -- src\editor\outline.lua
|
||||
["Use %s to close."] = "Utilizza %s per chiudere.", -- src\editor\findreplace.lua
|
||||
["Use '%s' to see full description."] = "Utilizza '%s' per vedere la descrizione completa.", -- src\editor\editor.lua
|
||||
["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 markers window"] = "Visualizza la finestra dei marcatori", -- src\editor\menu_view.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\gui.lua, src\editor\menu_view.lua
|
||||
["View the watch window"] = "Mostra la finestra delle Espressioni di Controllo", -- src\editor\gui.lua, src\editor\menu_view.lua
|
||||
["Watch"] = "Watch", -- src\editor\debugger.lua, src\editor\gui.lua
|
||||
["View the stack window"] = "Mostra la finestra dello Stack", -- src\editor\toolbar.lua, src\editor\menu_view.lua
|
||||
["View the watch window"] = "Mostra la finestra delle Espressioni di Controllo", -- src\editor\toolbar.lua, 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
|
||||
["Wrap around"] = "Wrap around", -- src\editor\toolbar.lua
|
||||
["You must save the program first."] = "Devi prima salvare il programma", -- src\editor\commands.lua
|
||||
["Zoom In"] = "Zoom In", -- src\editor\menu_view.lua
|
||||
["Zoom Out"] = "Zoom Out", -- src\editor\menu_view.lua
|
||||
|
||||
347
cfg/i18n/pt-br.lua
Normal file
347
cfg/i18n/pt-br.lua
Normal file
@@ -0,0 +1,347 @@
|
||||
--- @author Evandro Costa <evandro.co>
|
||||
--- @date 26/12/2014
|
||||
return {
|
||||
[0] = function(c) return c == 1 and 1 or 2 end, -- plural
|
||||
["%s event failed: %s"] = "Evento %s falhou: %s", -- src\editor\package.lua
|
||||
["%s%% formatted..."] = nil, -- src\editor\print.lua
|
||||
["%s%% loaded..."] = nil, -- src\editor\commands.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 Value"] = nil, -- src\editor\debugger.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
|
||||
["&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"] = "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
|
||||
["&Print..."] = nil, -- src\editor\print.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"] = "Substitui&r", -- 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
|
||||
["&Select Command"] = nil, -- src\editor\gui.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
|
||||
["&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
|
||||
["&View"] = "Exibir", -- src\editor\menu_view.lua
|
||||
["&Watch Window"] = "Observador", -- src\editor\menu_view.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
|
||||
["Binary file is shown as read-only as it is only partially loaded."] = nil, -- src\editor\commands.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\toolbar.lua, src\editor\menu_project.lua
|
||||
["Breakpoint"] = nil, -- src\editor\menu_project.lua
|
||||
["C&lear Console Window"] = nil, -- src\editor\gui.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 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 open file '%s': %s"] = "Impossível abrir o arquivo '%s': %s", -- src\editor\findreplace.lua, src\editor\singleinstance.lua, src\editor\inspect.lua, src\editor\outline.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 replace in read-only text."] = nil, -- src\editor\findreplace.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 for '%s'."] = nil, -- 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
|
||||
["Cancelled by the user."] = "Cancelado pelo usuário", -- src\editor\findreplace.lua
|
||||
["Choose a directory to map"] = nil, -- src\editor\filetree.lua
|
||||
["Choose a project directory"] = "Selecionar pasta do projeto", -- src\editor\toolbar.lua, src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Choose a search directory"] = nil, -- src\editor\findreplace.lua
|
||||
["Choose..."] = "Selecionar...", -- src\editor\findreplace.lua, src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Clear Items"] = "Limpar itens", -- src\editor\findreplace.lua, 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\toolbar.lua, 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
|
||||
["Disable Indexing For '%s'"] = nil, -- src\editor\outline.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
|
||||
["Enable Indexing"] = nil, -- src\editor\outline.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\toolbar.lua, 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 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 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\toolbar.lua, src\editor\menu_search.lua
|
||||
["Find in files"] = "Localizar em arquivos", -- src\editor\toolbar.lua
|
||||
["Find text in files"] = "Localizar texto em arquivos", -- src\editor\menu_search.lua
|
||||
["Find text"] = "Localizar texto", -- src\editor\toolbar.lua, 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\toolbar.lua
|
||||
["Fold or unfold all code folds"] = "Expandir ou recolher todos os blocos do código", -- src\editor\menu_edit.lua
|
||||
["Formatting page %d..."] = nil, -- src\editor\print.lua
|
||||
["Found %d instance."] = {}, -- src\editor\findreplace.lua
|
||||
["Found auto-recovery record and restored saved session."] = "Registro de autorrecuperação encontrado e sessão restaurada.", -- src\editor\commands.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 Next Breakpoint"] = nil, -- src\editor\menu_project.lua
|
||||
["Go To Previous Bookmark"] = "Ir para o marcador anterior", -- src\editor\menu_edit.lua
|
||||
["Go To Previous Breakpoint"] = nil, -- src\editor\menu_project.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
|
||||
["Ignore and don't index symbols from files in the selected directory"] = nil, -- src\editor\outline.lua
|
||||
["Ignored error in debugger initialization code: %s."] = "Erro ignorado no código de inicialização do depurador: %s.", -- src\editor\debugger.lua
|
||||
["Indexing %d files: '%s'..."] = nil, -- src\editor\outline.lua
|
||||
["Indexing completed."] = nil, -- src\editor\outline.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
|
||||
["Map Directory..."] = nil, -- src\editor\filetree.lua
|
||||
["Mapped remote request for '%s' to '%s'."] = "Solicitação remota '%s' mapeada para '%s'.", -- src\editor\debugger.lua
|
||||
["Markers Window"] = nil, -- src\editor\menu_view.lua
|
||||
["Markers"] = nil, -- src\editor\markers.lua
|
||||
["Match case"] = "Diferenciar maiúsc/minúsc", -- src\editor\toolbar.lua
|
||||
["Match whole word"] = "Somente palavras inteiras", -- src\editor\toolbar.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\toolbar.lua, src\editor\menu_file.lua
|
||||
["Open file"] = "Abrir arquivo", -- src\editor\commands.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
|
||||
["Page Setup..."] = nil, -- src\editor\print.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
|
||||
["Print the current document"] = nil, -- src\editor\print.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
|
||||
["Queued %d files to index."] = nil, -- src\editor\menu_search.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
|
||||
["Reached end of selection and wrapped around."] = nil, -- src\editor\findreplace.lua
|
||||
["Reached end of text and wrapped around."] = nil, -- src\editor\findreplace.lua
|
||||
["Recent Files"] = "Arquivos recentes", -- src\editor\menu_file.lua
|
||||
["Recent Projects"] = "Projetos recentes", -- src\editor\menu_file.lua
|
||||
["Redo last edit undone"] = "Refazer última edição desfeita", -- src\editor\menu_edit.lua
|
||||
["Refresh Index"] = nil, -- src\editor\outline.lua
|
||||
["Refresh indexed symbols from files in the selected directory"] = nil, -- src\editor\outline.lua
|
||||
["Refresh"] = "Refrescar", -- src\editor\filetree.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\toolbar.lua
|
||||
["Remote console"] = "Console remoto", -- src\editor\shellbox.lua
|
||||
["Rename All Instances"] = "Renomear todas as instâncias", -- src\editor\editor.lua
|
||||
["Replace All Selections"] = "Substituir todas as seleções", -- src\editor\editor.lua
|
||||
["Replace all"] = "Substituir tudo", -- src\editor\toolbar.lua
|
||||
["Replace next instance"] = nil, -- src\editor\toolbar.lua
|
||||
["Replaced %d instance."] = {}, -- src\editor\findreplace.lua
|
||||
["Replaced an invalid UTF8 character with %s."] = "Caractere UTF8 inválido susbtituído por %s.", -- src\editor\commands.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 To Cursor"] = nil, -- src\editor\menu_project.lua, src\editor\editor.lua
|
||||
["Run as Scratchpad"] = "Executar como rascunho", -- src\editor\toolbar.lua
|
||||
["Run to cursor"] = nil, -- src\editor\toolbar.lua, 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\toolbar.lua, 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\toolbar.lua, src\editor\menu_file.lua
|
||||
["Saved auto-recover at %s."] = "Autorrecuperação salvo às %s.", -- src\editor\commands.lua
|
||||
["Scratchpad error"] = "Erro no rascunho", -- src\editor\debugger.lua
|
||||
["Search direction"] = nil, -- src\editor\toolbar.lua
|
||||
["Search in selection"] = nil, -- src\editor\toolbar.lua
|
||||
["Search in subdirectories"] = nil, -- src\editor\toolbar.lua
|
||||
["Searching for '%s'."] = nil, -- 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 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 all text in the editor"] = "Selecionar todo o texto do editor", -- src\editor\menu_edit.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 As Start File"] = nil, -- src\editor\filetree.lua
|
||||
["Set From Current File"] = "Alterar para o arquivo atual", -- src\editor\menu_project.lua
|
||||
["Set To Project Directory"] = nil, -- src\editor\findreplace.lua
|
||||
["Set To Selected Directory"] = nil, -- src\editor\filetree.lua
|
||||
["Set project directory from current file"] = "Alterar pasta do projeto para a pasta do arquivo atual", -- src\editor\toolbar.lua, src\editor\menu_project.lua
|
||||
["Set project directory to the selected one"] = nil, -- src\editor\filetree.lua
|
||||
["Set search directory"] = nil, -- src\editor\toolbar.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 context"] = nil, -- src\editor\toolbar.lua
|
||||
["Show files previously hidden"] = "Exibir arquivos anteriormente ocultos", -- src\editor\filetree.lua
|
||||
["Show multiple result windows"] = nil, -- src\editor\toolbar.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 By Name"] = nil, -- src\editor\outline.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\toolbar.lua, 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\toolbar.lua, src\editor\menu_project.lua
|
||||
["Step out of the current function"] = "Passar para fora da função atual", -- src\editor\toolbar.lua, src\editor\menu_project.lua
|
||||
["Step over"] = "Passar para fora", -- src\editor\toolbar.lua, src\editor\menu_project.lua
|
||||
["Stop debugging and continue running the process"] = "Interromper depuração e continuar executando o processo", -- src\editor\toolbar.lua, src\editor\menu_project.lua
|
||||
["Stop the currently running process"] = "Interromper o processo atual em execução", -- src\editor\toolbar.lua, src\editor\menu_project.lua
|
||||
["Switch to or from full screen mode"] = "Entrar/Sair do modo tela inteira", -- src\editor\menu_view.lua
|
||||
["Symbol Index"] = nil, -- src\editor\outline.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\markers.lua, src\editor\menu_edit.lua
|
||||
["Toggle Breakpoint"] = "Alternar ponto de interrupção", -- src\editor\markers.lua, src\editor\menu_project.lua
|
||||
["Toggle bookmark"] = "Alternar marcador", -- src\editor\toolbar.lua, src\editor\menu_edit.lua, src\editor\markers.lua
|
||||
["Toggle breakpoint"] = "Alternar ponto de interrupção", -- src\editor\markers.lua, src\editor\toolbar.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 delete file '%s': %s"] = nil, -- 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
|
||||
["Unmap Directory"] = nil, -- src\editor\filetree.lua
|
||||
["Unset '%s' As Start File"] = nil, -- src\editor\filetree.lua
|
||||
["Updated %d file."] = {}, -- src\editor\findreplace.lua
|
||||
["Updating symbol index and settings..."] = nil, -- src\editor\outline.lua
|
||||
["Use %s to close."] = nil, -- src\editor\findreplace.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 markers window"] = nil, -- src\editor\menu_view.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\toolbar.lua, src\editor\menu_view.lua
|
||||
["View the watch window"] = "Exibir janela do observador", -- src\editor\toolbar.lua, 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 around"] = "Repetir direção", -- src\editor\toolbar.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
|
||||
}
|
||||
218
cfg/i18n/ru.lua
218
cfg/i18n/ru.lua
@@ -1,57 +1,54 @@
|
||||
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
|
||||
["%s%% formatted..."] = "%s%% отформатировано...", -- src\editor\print.lua
|
||||
["%s%% loaded..."] = "%s%% загружено...", -- src\editor\commands.lua
|
||||
["&About"] = "&О программе", -- src\editor\menu_help.lua
|
||||
["&Add Watch"] = "&Добавить выражение", -- src\editor\debugger.lua
|
||||
["&Break"] = "Пр&ервать", -- src\editor\menu_project.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\menu_edit.lua, src\editor\editor.lua
|
||||
["&Copy Value"] = "Копировать значение", -- src\editor\debugger.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
|
||||
["&Find All"] = "Найти все", -- src\editor\findreplace.lua
|
||||
["&Find Next"] = "Найти далее", -- src\editor\findreplace.lua
|
||||
["&Find"] = "&Найти", -- src\editor\menu_search.lua
|
||||
["&Fold/Unfold All"] = "Св&ернуть/развернуть все", -- src\editor\menu_edit.lua
|
||||
["&Frequently Asked Questions"] = "&Часто задаваемые вопросы", -- src\editor\menu_help.lua
|
||||
["&Getting Started Guide"] = nil, -- src\editor\menu_help.lua
|
||||
["&Go To Line..."] = "&Перейти к строке...", -- src\editor\menu_search.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\menu_edit.lua, src\editor\editor.lua
|
||||
["&Paste"] = "В&ставить", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Print..."] = "Печать...", -- src\editor\print.lua
|
||||
["&Project Page"] = "Страница проекта", -- src\editor\menu_help.lua
|
||||
["&Project"] = "Пр&оект", -- src\editor\inspect.lua, src\editor\menu_project.lua
|
||||
["&Redo"] = "Верну&ть", -- src\editor\menu_edit.lua, src\editor\editor.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
|
||||
["&Replace"] = "За&менить", -- src\editor\menu_search.lua
|
||||
["&Run"] = "За&пустить", -- src\editor\menu_project.lua
|
||||
["&Save"] = "&Сохранить", -- src\editor\gui.lua, src\editor\menu_file.lua
|
||||
["&Search"] = "По&иск", -- src\editor\menu_search.lua
|
||||
["&Select Command"] = "Выбрать команду", -- src\editor\gui.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
|
||||
["&Tool Bar"] = "Панель инструментов", -- src\editor\menu_view.lua
|
||||
["&Tutorials"] = "&Обучающие материалы", -- src\editor\menu_help.lua
|
||||
["&Undo"] = "&Отменить", -- src\editor\menu_edit.lua, src\editor\editor.lua
|
||||
["&Up"] = "Вверх", -- src\editor\findreplace.lua
|
||||
["&Undo"] = "&Отменить", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.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 To Scratchpad"] = "Добавить в черновик", -- src\editor\editor.lua
|
||||
["Add Watch Expression"] = "Добавить выражение", -- src\editor\editor.lua
|
||||
@@ -61,23 +58,29 @@ return {
|
||||
["Analyze"] = "Анализировать", -- src\editor\inspect.lua
|
||||
["Auto Complete Identifiers"] = "Автодополнение идентификаторов", -- src\editor\menu_edit.lua
|
||||
["Auto complete while typing"] = "Автоматически дополнять идентификаторы при наборе", -- src\editor\menu_edit.lua
|
||||
["Binary file is shown as read-only as it is only partially loaded."] = "Двоичный файл открыт только для чтения, так как загружен частично.", -- src\editor\commands.lua
|
||||
["Bookmark"] = "Закладка", -- src\editor\menu_edit.lua
|
||||
["Break execution at the next executed line of code"] = "Прервать выполнение на следующей строке", -- src\editor\gui.lua, src\editor\menu_project.lua
|
||||
["C&lear Output Window"] = "Очистка ок&на вывода", -- src\editor\menu_project.lua
|
||||
["Break execution at the next executed line of code"] = "Прервать выполнение на следующей строке", -- src\editor\toolbar.lua, src\editor\menu_project.lua
|
||||
["Breakpoint"] = "Точка останова", -- src\editor\menu_project.lua
|
||||
["C&lear Console Window"] = "Очистить ок&но консоли", -- src\editor\gui.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\findreplace.lua, src\editor\singleinstance.lua, src\editor\inspect.lua, src\editor\outline.lua
|
||||
["Can't process auto-recovery record; invalid format: %s."] = "Ошибка обработки записи автоматического восстановления; неверный формат: %s.", -- src\editor\commands.lua
|
||||
["Can't replace in read-only text."] = "Ошибка замены в тексте не доступном для записи.", -- src\editor\findreplace.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
|
||||
["Cancelled by the user."] = "Отменено пользователем.", -- src\editor\findreplace.lua
|
||||
["Choose a project directory"] = "Выберите папку проекта", -- src\editor\findreplace.lua, src\editor\menu_project.lua, src\editor\gui.lua, src\editor\filetree.lua
|
||||
["Choose..."] = "Выбрать...", -- src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Clear Items"] = "Очистить список", -- src\editor\menu_file.lua
|
||||
["Choose a directory to map"] = "Выберите папку для добавления в список", -- src\editor\filetree.lua
|
||||
["Choose a project directory"] = "Выберите папку проекта", -- src\editor\toolbar.lua, src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Choose a search directory"] = "Выберите папку поиска", -- src\editor\findreplace.lua
|
||||
["Choose..."] = "Выбрать...", -- src\editor\findreplace.lua, src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Clear Items"] = "Очистить список", -- src\editor\findreplace.lua, 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
|
||||
@@ -94,27 +97,29 @@ return {
|
||||
["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\filetree.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\gui.lua, src\editor\menu_file.lua
|
||||
["Cu&t"] = "Вы&резать", -- src\editor\menu_edit.lua, src\editor\editor.lua
|
||||
["Create an empty document"] = "Создать новый документ", -- src\editor\toolbar.lua, 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
|
||||
["Disable Indexing For '%s'"] = "Запретить индексирование для '%s'", -- src\editor\outline.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
|
||||
["Enable Indexing"] = "Разрешить индекcирование", -- src\editor\outline.lua
|
||||
["Enter Lua code and press Enter to run it."] = "Введите код на Lua и нажмите Enter для выполнения.", -- src\editor\shellbox.lua
|
||||
["Enter command line parameters (use Cancel to clear)"] = "Введите параметры командной строки (Cancel чтобы очистить)", -- src\editor\menu_project.lua
|
||||
["Enter line number"] = "Введите номер строки", -- src\editor\menu_search.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
|
||||
@@ -122,60 +127,79 @@ return {
|
||||
["Error"] = "Ошибка", -- src\editor\commands.lua
|
||||
["Evaluate In Console"] = "Выполнить в консоли", -- 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
|
||||
["Execute the current project/file"] = "Запустить текущий проект/файл", -- src\editor\toolbar.lua, 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' 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\gui.lua, src\editor\menu_search.lua
|
||||
["Find and replace text"] = "Найти и заменить текст", -- src\editor\toolbar.lua, src\editor\menu_search.lua
|
||||
["Find in files"] = "Найти в файлах", -- src\editor\toolbar.lua
|
||||
["Find text in files"] = "Найти текст в файлах", -- src\editor\menu_search.lua
|
||||
["Find text"] = "Найти текст", -- src\editor\gui.lua, src\editor\menu_search.lua
|
||||
["Find text"] = "Найти текст", -- src\editor\toolbar.lua, 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
|
||||
["Find"] = "Найти", -- src\editor\toolbar.lua
|
||||
["Fold or unfold all code folds"] = "Свернуть или развернуть все блоки кода", -- src\editor\menu_edit.lua
|
||||
["Formatting page %d..."] = "Отформатировано страницы %d...", -- src\editor\print.lua
|
||||
["Found %d instance."] = {"Найдено %d совпадение.", "Найдено %d совпадения.", "Найдено %d совпадений."}, -- src\editor\findreplace.lua
|
||||
["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 Definition"] = "Перейти к определению", -- src\editor\editor.lua
|
||||
["Go To Line"] = "Перейти к строке", -- src\editor\menu_search.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 Next Breakpoint"] = "Перейти к следующей точке останова", -- src\editor\menu_project.lua
|
||||
["Go To Previous Bookmark"] = "Перейти к предыдущей закладке", -- src\editor\menu_edit.lua
|
||||
["Go to a selected line"] = "Перейти к заданной строке", -- src\editor\menu_search.lua
|
||||
["Go To Previous Breakpoint"] = "Перейти к предыдущей точке останова", -- src\editor\menu_project.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
|
||||
["In Files"] = "Установки файлов", -- src\editor\findreplace.lua
|
||||
["Jump to a function definition..."] = "Перейти к определению функции...", -- src\editor\editor.lua
|
||||
["Ignore and don't index symbols from files in the selected directory"] = "Игнорировать и не индексировать файлы в выбранной папке", -- src\editor\outline.lua
|
||||
["Ignored error in debugger initialization code: %s."] = "Проигнорирована ошибка в коде инициализации отладчика: %s.", -- src\editor\debugger.lua
|
||||
["Indexing %d files: '%s'..."] = "Индексировано %d: '%s'...", -- src\editor\outline.lua
|
||||
["Indexing completed."] = "Индексирование закончено.", -- src\editor\outline.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\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
|
||||
["Markers Window"] = "Окно маркеров", -- src\editor\menu_view.lua
|
||||
["Markers"] = "Маркеры", -- src\editor\markers.lua
|
||||
["Match case"] = "Совпадение регистра", -- src\editor\toolbar.lua
|
||||
["Match whole word"] = "Совпадение целого слова", -- src\editor\toolbar.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 With Default Program"] = "Открыть используя программу по умолчанию", -- src\editor\filetree.lua
|
||||
["Open an existing document"] = "Открыть существующий документ", -- src\editor\gui.lua, src\editor\menu_file.lua
|
||||
["Open an existing document"] = "Открыть существующий документ", -- src\editor\toolbar.lua, 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\gui.lua, src\editor\output.lua, src\editor\settings.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
|
||||
["Page Setup..."] = "Параметры страницы...", -- src\editor\print.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
|
||||
["Print the current document"] = "Печать текущего документа", -- src\editor\print.lua
|
||||
["Program '%s' started in '%s' (pid: %d)."] = "Программа '%s' запущена в '%s' (pid: %d).", -- src\editor\output.lua
|
||||
["Program can't start because conflicting process is running as '%s'."] = "Программа не может быть запущена из-за конфликтующего процесса, выполняющегося как '%s'.", -- src\editor\output.lua
|
||||
["Program completed in %.2f seconds (pid: %d)."] = "Программа завершена за %.2f секунд (pid: %d).", -- src\editor\output.lua
|
||||
@@ -184,98 +208,132 @@ return {
|
||||
["Program unable to run as '%s'."] = "Программа не может быть запущена как '%s'.", -- src\editor\output.lua
|
||||
["Project Directory"] = "Папка проекта", -- src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Project history"] = "История проектов", -- src\editor\menu_file.lua
|
||||
["Project"] = "Проект", -- src\editor\gui.lua
|
||||
["Project"] = "Проект", -- src\editor\filetree.lua
|
||||
["Project/&FileTree Window"] = "Окно &проекта/списка файлов", -- src\editor\menu_view.lua
|
||||
["Provide command line parameters"] = "Установить параметры командной строки", -- src\editor\menu_project.lua
|
||||
["Queued %d files to index."] = "Помещено %d файлов в очередь на индексирование.", -- src\editor\menu_search.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
|
||||
["Recent &Projects"] = "Недавние &проекты", -- src\editor\menu_file.lua
|
||||
["Re-indent selected lines"] = "Исправить отступ в выделенных строчках", -- src\editor\menu_edit.lua
|
||||
["Reached end of selection and wrapped around."] = "Достигнут конец выделенного текста и произведен возврат к началу.", -- src\editor\findreplace.lua
|
||||
["Reached end of text and wrapped around."] = "Достигнут конец текста и произведен возврат к началу.", -- src\editor\findreplace.lua
|
||||
["Recent Files"] = "Недавние файлы", -- src\editor\menu_file.lua
|
||||
["Recent Projects"] = "Недавние проекты", -- src\editor\menu_file.lua
|
||||
["Redo last edit undone"] = "Вернуть последнее отмененное изменение", -- src\editor\menu_edit.lua
|
||||
["Refresh Index"] = "Обновить индекс", -- src\editor\outline.lua
|
||||
["Refresh indexed symbols from files in the selected directory"] = "Обновить индекс символов из файлов в выбранной папке", -- src\editor\outline.lua
|
||||
["Refresh"] = "Oбновление", -- src\editor\filetree.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
|
||||
["Regular expression"] = "Регулярное выражение", -- src\editor\toolbar.lua
|
||||
["Remote console"] = "Удаленная консоль", -- src\editor\shellbox.lua
|
||||
["Rename All Instances"] = "Переименовать все совпадения", -- src\editor\editor.lua
|
||||
["Replace A&ll"] = "Заменить все", -- src\editor\findreplace.lua
|
||||
["Replace"] = "Заменить", -- src\editor\findreplace.lua
|
||||
["Replace All Selections"] = "Заменить все выделенные фрагменты", -- src\editor\editor.lua
|
||||
["Replace all"] = "Заменить все", -- src\editor\toolbar.lua
|
||||
["Replace next instance"] = "Заменить следующее совпадение", -- src\editor\toolbar.lua
|
||||
["Replaced %d instance."] = {"Заменено %d совпадение.", "Заменено %d совпадения.", "Заменено %d совпадений."}, -- 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
|
||||
["Run as Scratchpad"] = "Запустить как черновик", -- src\editor\menu_project.lua
|
||||
["Run As Scratchpad"] = "Запустить как черновик", -- src\editor\menu_project.lua
|
||||
["Run To Cursor"] = "Выполнить до курсора", -- src\editor\menu_project.lua, src\editor\editor.lua
|
||||
["Run as Scratchpad"] = "Запустить как черновик", -- src\editor\toolbar.lua
|
||||
["Run to cursor"] = "Выполнить до курсора", -- src\editor\toolbar.lua, 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\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\gui.lua, src\editor\menu_file.lua
|
||||
["Save all open documents"] = "Сохранить все открытые документы", -- src\editor\toolbar.lua, 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\gui.lua, src\editor\menu_file.lua
|
||||
["Save the current document"] = "Сохранить текущий документ", -- src\editor\toolbar.lua, 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
|
||||
["Search direction"] = "Направление поиска", -- src\editor\toolbar.lua
|
||||
["Search in selection"] = "Поиск в выделенном тексте", -- src\editor\toolbar.lua
|
||||
["Search in subdirectories"] = "Поиск во вложенных папках", -- src\editor\toolbar.lua
|
||||
["Searching for '%s'."] = "Искать '%s'.", -- src\editor\findreplace.lua
|
||||
["Sel: %d/%d"] = "Выд: %d/%d", -- src\editor\editor.lua
|
||||
["Select &All"] = "Выделить &все", -- src\editor\menu_edit.lua, 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 and Find Next"] = "Выделить и найти далее", -- src\editor\menu_search.lua
|
||||
["Select and Find Previous"] = "Выделить и найти ранее", -- src\editor\menu_search.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\gui.lua, src\editor\menu_project.lua
|
||||
["Set To Project Directory"] = "Установить папку проекта", -- src\editor\findreplace.lua
|
||||
["Set To Selected Directory"] = "Установить выбранную папку как проект", -- src\editor\filetree.lua
|
||||
["Set project directory from current file"] = "Установить папку проекта по текущему файлу", -- src\editor\toolbar.lua, src\editor\menu_project.lua
|
||||
["Set project directory to the selected one"] = "Установить выбранную папку как папку проекта", -- src\editor\filetree.lua
|
||||
["Set search directory"] = "Установить папку поиска", -- src\editor\toolbar.lua
|
||||
["Set the interpreter 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 context"] = "Показать контекст", -- src\editor\toolbar.lua
|
||||
["Show files previously hidden"] = "Показать ранее спрятанные файлы", -- src\editor\filetree.lua
|
||||
["Show multiple result windows"] = "Показать результаты поиска в разных окнах", -- src\editor\toolbar.lua
|
||||
["Show tooltip for current position; place cursor after opening bracket of function"] = "Показать подсказку в текущей позиции; переместите курсор в позицию после открывающей скобки функции", -- src\editor\menu_edit.lua
|
||||
["Show/Hide the status bar"] = "Показать/спрятать панель состояния", -- src\editor\menu_view.lua
|
||||
["Show/Hide the toolbar"] = "Показать/спрятать панель инструментов", -- src\editor\menu_view.lua
|
||||
["Sort By Name"] = "Сортировать по имени", -- src\editor\outline.lua
|
||||
["Sort selected lines"] = "Отсортировать выделенные строки", -- src\editor\menu_edit.lua
|
||||
["Stack"] = "Стек", -- src\editor\debugger.lua, src\editor\gui.lua
|
||||
["Source"] = "Исходный код", -- src\editor\menu_edit.lua
|
||||
["Stack"] = "Стек", -- src\editor\debugger.lua
|
||||
["Start &Debugging"] = "Начать &отладку", -- src\editor\menu_project.lua
|
||||
["Start or Continue debugging"] = "Начать или продолжить отладку", -- src\editor\gui.lua
|
||||
["Start or continue debugging"] = "Начать или продолжить отладку", -- src\editor\menu_project.lua
|
||||
["Start or continue debugging"] = "Начать или продолжить отладку", -- src\editor\toolbar.lua, 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\gui.lua, src\editor\menu_project.lua
|
||||
["Step out of the current function"] = "Выйти из текущей функции", -- src\editor\gui.lua, src\editor\menu_project.lua
|
||||
["Step over"] = "Перейти на следующую строку", -- src\editor\gui.lua, src\editor\menu_project.lua
|
||||
["Stop debugging and continue running the process"] = "Завершить отладку и продолжить текущий процесс", -- src\editor\gui.lua, src\editor\menu_project.lua
|
||||
["Stop the currently running process"] = "Завершить текущий процесс", -- src\editor\gui.lua, src\editor\menu_project.lua
|
||||
["Step into"] = "Войти в функцию", -- src\editor\toolbar.lua, src\editor\menu_project.lua
|
||||
["Step out of the current function"] = "Выйти из текущей функции", -- src\editor\toolbar.lua, src\editor\menu_project.lua
|
||||
["Step over"] = "Перейти на следующую строку", -- src\editor\toolbar.lua, src\editor\menu_project.lua
|
||||
["Stop debugging and continue running the process"] = "Завершить отладку и продолжить текущий процесс", -- src\editor\toolbar.lua, src\editor\menu_project.lua
|
||||
["Stop the currently running process"] = "Завершить текущий процесс", -- src\editor\toolbar.lua, src\editor\menu_project.lua
|
||||
["Switch to or from full screen mode"] = "Переключить полноэкранный режим", -- src\editor\menu_view.lua
|
||||
["Symbol Index"] = "Индекс символов", -- src\editor\outline.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\gui.lua, src\editor\menu_project.lua
|
||||
["Toggle Bookmark"] = "Установить/Снять закладку", -- src\editor\markers.lua, src\editor\menu_edit.lua
|
||||
["Toggle Breakpoint"] = "Установить/Снять точку останова", -- src\editor\markers.lua, src\editor\menu_project.lua
|
||||
["Toggle bookmark"] = "Установить/Снять закладку", -- src\editor\toolbar.lua, src\editor\menu_edit.lua, src\editor\markers.lua
|
||||
["Toggle breakpoint"] = "Установить/Снять точку останова", -- src\editor\markers.lua, src\editor\toolbar.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 delete file '%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
|
||||
["Updated %d file."] = {"Обновлен %d файл.", "Обновлено %d файла.", "Обновлено %d файлов."}, -- src\editor\findreplace.lua
|
||||
["Updating symbol index and settings..."] = "Обновляется индекс символов и установки...", -- src\editor\outline.lua
|
||||
["Use %s to close."] = "Используйте %s для закрытия.", -- src\editor\findreplace.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 markers window"] = "Показать окно маркеров", -- src\editor\menu_view.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\gui.lua, src\editor\menu_view.lua
|
||||
["View the watch window"] = "Показать окно выражений", -- src\editor\gui.lua, src\editor\menu_view.lua
|
||||
["Watch"] = "Выражение", -- src\editor\debugger.lua, src\editor\gui.lua
|
||||
["View the stack window"] = "Показать окно стека", -- src\editor\toolbar.lua, src\editor\menu_view.lua
|
||||
["View the watch window"] = "Показать окно выражений", -- src\editor\toolbar.lua, 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
|
||||
["Wrap around"] = "Продолжить сначала", -- src\editor\toolbar.lua
|
||||
["You must save the program first."] = "Вы должны сначала сохранить программу.", -- src\editor\commands.lua
|
||||
["Zoom In"] = "Приблизить", -- src\editor\menu_view.lua
|
||||
["Zoom Out"] = "Удалить", -- src\editor\menu_view.lua
|
||||
|
||||
@@ -19,8 +19,7 @@
|
||||
2. Add the following code with the scheme you selected to `cfg/user.lua`.
|
||||
--]]
|
||||
|
||||
local G = ...
|
||||
styles = G.loadfile('cfg/tomorrow.lua')('TomorrowNightBlue')
|
||||
styles = loadfile('cfg/tomorrow.lua')('TomorrowNightBlue')
|
||||
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
|
||||
|
||||
@@ -10,14 +10,14 @@ See [configuration](http://studio.zerobrane.com/doc-configuration.html) page for
|
||||
--]]--
|
||||
|
||||
-- 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']
|
||||
-- (no longer needed in v1.21+) local G = ... -- this now points to the global environment
|
||||
local luaspec = ide.specs.lua
|
||||
luaspec.exts[#luaspec.exts+1] = "luaz"
|
||||
luaspec.keywords[1] = luaspec.keywords[1] .. ' foo'
|
||||
|
||||
-- to modify a key mapping; see the full list of IDs in src/editor/keymap.lua
|
||||
local G = ...
|
||||
keymap[G.ID_STARTDEBUG] = "Ctrl-Shift-D"
|
||||
-- starting from v0.95, ID.<menuid> can be used instead of G.ID_<menuid>
|
||||
keymap[ID.STARTDEBUG] = "Ctrl-Shift-D"
|
||||
|
||||
-- to change font size to 12
|
||||
editor.fontsize = 12 -- this is mapped to ide.config.editor.fontsize
|
||||
@@ -82,8 +82,8 @@ styles.text = {bg = {240,240,220}}
|
||||
|
||||
-- to change the default color scheme; check tomorrow.lua for the list
|
||||
-- of supported schemes or use cfg/scheme-picker.lua to pick a scheme.
|
||||
local G = ...
|
||||
styles = G.loadfile('cfg/tomorrow.lua')('Tomorrow')
|
||||
-- (no longer needed in v1.21+) local G = ... -- this now points to the global environment
|
||||
styles = loadfile('cfg/tomorrow.lua')('Tomorrow')
|
||||
-- also apply the same scheme to Output and Console windows
|
||||
stylesoutshell = styles
|
||||
|
||||
@@ -95,7 +95,7 @@ styles.marker.prompt = {ch = wxstc.wxSTC_MARK_CHARACTER+('>'):byte(), fg = {0, 0
|
||||
stylesoutshell = styles
|
||||
|
||||
-- to disable indicators (underlining) on function calls
|
||||
styles.indicator.fncall = nil
|
||||
-- styles.indicator.fncall = nil
|
||||
|
||||
-- to change the color of the indicator used for function calls
|
||||
styles.indicator.fncall.fg = {240,0,0}
|
||||
@@ -112,8 +112,8 @@ styles.indicator.fncall.st = wxstc.wxSTC_INDIC_PLAIN
|
||||
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`;
|
||||
@@ -142,8 +142,8 @@ editor.nomousezoom = true
|
||||
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
|
||||
-- (no longer needed in v1.21+) local G = ... -- this now points to the global environment
|
||||
local luaspec = ide.specs.lua
|
||||
|
||||
local num = #luaspec.keywords
|
||||
-- take a new slot in the list of keywords (starting from 1)
|
||||
@@ -153,3 +153,18 @@ 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`
|
||||
|
||||
-- updated shortcuts to use them as of v1.20
|
||||
keymap[ID.BREAK] = "Shift-F9"
|
||||
keymap[ID.BREAKPOINTTOGGLE] = "F9"
|
||||
keymap[ID.BREAKPOINTNEXT] = ""
|
||||
keymap[ID.BREAKPOINTPREV] = ""
|
||||
|
||||
@@ -1,74 +1,73 @@
|
||||
-- Copy the content of this file to user.lua;
|
||||
-- see the [configuration](http://studio.zerobrane.com/doc-configuration.html) page for details.
|
||||
|
||||
local G = ...
|
||||
-- Alt-Shift-Cmd-X (Alt maps to Option, Ctrl maps to Command)
|
||||
-- The mapping is largely based on [Xcode Keyboard Shortcuts](http://developer.apple.com/library/mac/#documentation/IDEs/Conceptual/xcode_help-command_shortcuts/MenuCommands/MenuCommands014.html).
|
||||
local xcode = {
|
||||
-- File menu
|
||||
[G.ID_NEW] = "Ctrl-N",
|
||||
[G.ID_OPEN] = "Ctrl-O",
|
||||
[G.ID_CLOSE] = "Ctrl-W",
|
||||
[G.ID_SAVE] = "Ctrl-S",
|
||||
[G.ID_SAVEAS] = "Shift-Ctrl-S",
|
||||
[G.ID_SAVEALL] = "Alt-Ctrl-S",
|
||||
[G.ID_RECENTFILES] = "",
|
||||
[G.ID_EXIT] = "Ctrl-Q",
|
||||
[ID.NEW] = "Ctrl-N",
|
||||
[ID.OPEN] = "Ctrl-O",
|
||||
[ID.CLOSE] = "Ctrl-W",
|
||||
[ID.SAVE] = "Ctrl-S",
|
||||
[ID.SAVEAS] = "Shift-Ctrl-S",
|
||||
[ID.SAVEALL] = "Alt-Ctrl-S",
|
||||
[ID.RECENTFILES] = "",
|
||||
[ID.EXIT] = "Ctrl-Q",
|
||||
-- Edit menu
|
||||
[G.ID_CUT] = "Ctrl-X",
|
||||
[G.ID_COPY] = "Ctrl-C",
|
||||
[G.ID_PASTE] = "Ctrl-V",
|
||||
[G.ID_SELECTALL] = "Ctrl-A",
|
||||
[G.ID_UNDO] = "Ctrl-Z",
|
||||
[G.ID_REDO] = "Shift-Ctrl-Z",
|
||||
[G.ID_SHOWTOOLTIP] = "Ctrl-T",
|
||||
[G.ID_AUTOCOMPLETE] = "Ctrl-K",
|
||||
[G.ID_AUTOCOMPLETEENABLE] = "",
|
||||
[G.ID_COMMENT] = "Ctrl-U",
|
||||
[G.ID_FOLD] = "F12",
|
||||
[G.ID_CLEARDYNAMICWORDS] = "",
|
||||
[ID.CUT] = "Ctrl-X",
|
||||
[ID.COPY] = "Ctrl-C",
|
||||
[ID.PASTE] = "Ctrl-V",
|
||||
[ID.SELECTALL] = "Ctrl-A",
|
||||
[ID.UNDO] = "Ctrl-Z",
|
||||
[ID.REDO] = "Shift-Ctrl-Z",
|
||||
[ID.SHOWTOOLTIP] = "Ctrl-T",
|
||||
[ID.AUTOCOMPLETE] = "Ctrl-K",
|
||||
[ID.AUTOCOMPLETEENABLE] = "",
|
||||
[ID.COMMENT] = "Ctrl-U",
|
||||
[ID.FOLD] = "F12",
|
||||
[ID.CLEARDYNAMICWORDS] = "",
|
||||
-- Search menu
|
||||
[G.ID_FIND] = "Ctrl-F",
|
||||
[G.ID_FINDNEXT] = "Ctrl-G",
|
||||
[G.ID_FINDPREV] = "Shift-Ctrl-G",
|
||||
[G.ID_REPLACE] = "Alt-Ctrl-F",
|
||||
[G.ID_FINDINFILES] = "Shift-Ctrl-F",
|
||||
[G.ID_REPLACEINFILES] = "Alt-Shift-Ctrl-F",
|
||||
[G.ID_GOTOLINE] = "",
|
||||
[G.ID_SORT] = "",
|
||||
[ID.FIND] = "Ctrl-F",
|
||||
[ID.FINDNEXT] = "Ctrl-G",
|
||||
[ID.FINDPREV] = "Shift-Ctrl-G",
|
||||
[ID.REPLACE] = "Alt-Ctrl-F",
|
||||
[ID.FINDINFILES] = "Shift-Ctrl-F",
|
||||
[ID.REPLACEINFILES] = "Alt-Shift-Ctrl-F",
|
||||
[ID.SORT] = "",
|
||||
-- View menu
|
||||
[G.ID_VIEWFILETREE] = "Shift-Ctrl-P",
|
||||
[G.ID_VIEWOUTPUT] = "Shift-Ctrl-O",
|
||||
[G.ID_VIEWWATCHWINDOW] = "Shift-Ctrl-W",
|
||||
[G.ID_VIEWCALLSTACK] = "Shift-Ctrl-S",
|
||||
[G.ID_VIEWDEFAULTLAYOUT] = "",
|
||||
[G.ID_VIEWFULLSCREEN] = "Shift-Ctrl-A",
|
||||
[ID.VIEWFILETREE] = "Shift-Ctrl-P",
|
||||
[ID.VIEWOUTPUT] = "Shift-Ctrl-O",
|
||||
[ID.VIEWWATCHWINDOW] = "Shift-Ctrl-W",
|
||||
[ID.VIEWCALLSTACK] = "Shift-Ctrl-S",
|
||||
[ID.VIEWDEFAULTLAYOUT] = "",
|
||||
[ID.VIEWFULLSCREEN] = "Shift-Ctrl-A",
|
||||
-- Project menu
|
||||
[G.ID_RUN] = "Ctrl-R",
|
||||
[G.ID_RUNNOW] = "Shift-Ctrl-R",
|
||||
[G.ID_COMPILE] = "Ctrl-B",
|
||||
[G.ID_ANALYZE] = "Shift-Ctrl-B",
|
||||
[G.ID_STARTDEBUG] = "F5",
|
||||
[G.ID_ATTACHDEBUG] = "",
|
||||
[G.ID_STOPDEBUG] = "Ctrl-.",
|
||||
[G.ID_STEP] = "F7",
|
||||
[G.ID_STEPOVER] = "F6",
|
||||
[G.ID_STEPOUT] = "F8",
|
||||
[G.ID_TRACE] = "",
|
||||
[G.ID_BREAK] = "Ctrl-Y",
|
||||
[G.ID_TOGGLEBREAKPOINT] = "Ctrl-\\",
|
||||
[G.ID_CLEAROUTPUT] = "",
|
||||
[G.ID_INTERPRETER] = "",
|
||||
[G.ID_PROJECTDIR] = "",
|
||||
[ID.RUN] = "Ctrl-R",
|
||||
[ID.RUNNOW] = "Shift-Ctrl-R",
|
||||
[ID.COMPILE] = "Ctrl-B",
|
||||
[ID.ANALYZE] = "Shift-Ctrl-B",
|
||||
[ID.STARTDEBUG] = "F5",
|
||||
[ID.ATTACHDEBUG] = "",
|
||||
[ID.STOPDEBUG] = "Ctrl-.",
|
||||
[ID.STEP] = "F7",
|
||||
[ID.STEPOVER] = "F6",
|
||||
[ID.STEPOUT] = "F8",
|
||||
[ID.TRACE] = "",
|
||||
[ID.BREAK] = "Ctrl-Y",
|
||||
[ID.BREAKPOINTTOGGLE] = "Ctrl-\\",
|
||||
[ID.CLEAROUTPUT] = "",
|
||||
[ID.INTERPRETER] = "",
|
||||
[ID.PROJECTDIR] = "",
|
||||
-- Help menu
|
||||
[G.ID_ABOUT] = "F1",
|
||||
[ID.ABOUT] = "F1",
|
||||
-- Watch window menu items
|
||||
[G.ID_ADDWATCH] = "Ins",
|
||||
[G.ID_EDITWATCH] = "F2",
|
||||
[G.ID_DELETEWATCH] = "Del",
|
||||
[ID.ADDWATCH] = "Ins",
|
||||
[ID.EDITWATCH] = "F2",
|
||||
[ID.DELETEWATCH] = "Del",
|
||||
-- Editor popup menu items
|
||||
[G.ID_QUICKADDWATCH] = "",
|
||||
[G.ID_QUICKEVAL] = "",
|
||||
[ID.QUICKADDWATCH] = "",
|
||||
[ID.QUICKEVAL] = "",
|
||||
}
|
||||
|
||||
local G = ...
|
||||
for id, key in G.pairs(xcode) do keymap[id] = key end
|
||||
|
||||
@@ -11,55 +11,46 @@ return {
|
||||
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
|
||||
local default =
|
||||
win and GenerateProgramFilesPath('LuaRocks\\systree\\bin', sep)..sep
|
||||
or ''
|
||||
local path = default
|
||||
..(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')
|
||||
busted = busted or GetFullPathIfExists(p, win and 'busted.bat' or 'busted')
|
||||
table.insert(paths, p)
|
||||
end
|
||||
if not busted then
|
||||
DisplayOutput("Can't find busted executable in any of the folders in PATH: "
|
||||
..table.concat(paths, ", ").."\n")
|
||||
DisplayOutputLn("Can't find busted executable in any of the folders in PATH: "
|
||||
..table.concat(paths, ", "))
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
local file
|
||||
local file = wfilename:GetFullPath()
|
||||
local helper
|
||||
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())
|
||||
DebuggerAttachDefault({runstart = ide.config.debugger.runonstart ~= false})
|
||||
local tmpfile = wx.wxFileName()
|
||||
tmpfile:AssignTempFileName(".")
|
||||
file = tmpfile:GetFullPath()
|
||||
local f = io.open(file, "w")
|
||||
helper = tmpfile:GetFullPath()..".lua" -- busted likes .lua files more than .tmp files
|
||||
local f = io.open(helper, "w")
|
||||
if not f then
|
||||
DisplayOutput("Can't open temporary file '"..file.."' for writing\n")
|
||||
DisplayOutputLn("Can't open temporary file '"..helper.."' for writing.")
|
||||
return
|
||||
end
|
||||
f:write(code)
|
||||
f:write("require('mobdebug').start()")
|
||||
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)
|
||||
local options = ide.config.busted and ide.config.busted.options or "--output=TAP"
|
||||
local cmd = ('"%s" %s %s "%s"'):format(busted, helper and "--helper="..helper or "", 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,
|
||||
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 helper then wx.wxRemoveFile(helper) end end)
|
||||
end,
|
||||
hasdebugger = true,
|
||||
fattachdebug = function(self) DebuggerAttachDefault() end,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
-- Copyright 2011-13 Paul Kulchenko, ZeroBrane LLC
|
||||
|
||||
local corona
|
||||
local pathcache
|
||||
local win = ide.osname == "Windows"
|
||||
local mac = ide.osname == "Macintosh"
|
||||
|
||||
@@ -9,7 +9,7 @@ return {
|
||||
description = "Corona SDK mobile framework",
|
||||
api = {"baselib", "corona"},
|
||||
frun = function(self,wfilename,rundebug)
|
||||
corona = corona or ide.config.path.corona -- check if the path is configured
|
||||
local corona = ide.config.path.corona or pathcache -- check if the path is configured
|
||||
if not corona then
|
||||
local sep = win and ';' or ':'
|
||||
local default =
|
||||
@@ -26,21 +26,23 @@ 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
|
||||
pathcache = corona
|
||||
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)
|
||||
@@ -79,19 +81,20 @@ return {
|
||||
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 "..cfg.skin) or ""
|
||||
local noconsole = (cfg.showconsole and ""
|
||||
or (mac and "-no-console YES " or "-no-console "))
|
||||
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)
|
||||
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,
|
||||
}
|
||||
|
||||
@@ -135,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,
|
||||
|
||||
@@ -22,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
|
||||
@@ -57,7 +57,7 @@ return {
|
||||
filepath = tmpfile:GetFullPath()
|
||||
local f = io.open(filepath, "w")
|
||||
if not f then
|
||||
DisplayOutput("Can't open temporary file '"..filepath.."' for writing\n")
|
||||
DisplayOutputLn("Can't open temporary file '"..filepath.."' for writing.")
|
||||
return
|
||||
end
|
||||
f:write(rundebug)
|
||||
@@ -81,12 +81,6 @@ return {
|
||||
return CommandLineRun(cmd,self:fworkdir(wfilename),true,false,nil,nil,
|
||||
function() if rundebug then wx.wxRemoveFile(filepath) 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)
|
||||
end,
|
||||
hasdebugger = true,
|
||||
fattachdebug = function(self) DebuggerAttachDefault() end,
|
||||
skipcompile = true,
|
||||
|
||||
@@ -17,11 +17,23 @@ return {
|
||||
frun = function(self,wfilename,rundebug)
|
||||
exe = exe or exePath()
|
||||
local filepath = wfilename:GetFullPath()
|
||||
local script
|
||||
if rundebug then
|
||||
DebuggerAttachDefault({basedir = self:fworkdir(wfilename),
|
||||
runstart = ide.config.debugger.runonstart == true})
|
||||
script = rundebug
|
||||
|
||||
-- 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,11 +44,10 @@ return {
|
||||
winapi.set_encoding(winapi.CP_UTF8)
|
||||
filepath = winapi.short_path(filepath)
|
||||
end
|
||||
|
||||
script = ('dofile [[%s]]'):format(filepath)
|
||||
end
|
||||
local code = ([[xpcall(function() io.stdout:setvbuf('no'); %s end,function(err) print(debug.traceback(err)) end)]]):format(script)
|
||||
local cmd = '"'..exe..'" -e "'..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 "")
|
||||
|
||||
-- add "LUA_DEV\clibs" to PATH to allow required DLLs to load
|
||||
local _, path = wx.wxGetEnv("PATH")
|
||||
@@ -46,15 +57,13 @@ return {
|
||||
end
|
||||
|
||||
-- CommandLineRun(cmd,wdir,tooutput,nohide,stringcallback,uid,endcallback)
|
||||
local pid = CommandLineRun(cmd,self:fworkdir(wfilename),true,false)
|
||||
local pid = CommandLineRun(cmd,self:fworkdir(wfilename),true,false,nil,nil,
|
||||
function() if rundebug then wx.wxRemoveFile(filepath) end end)
|
||||
|
||||
-- 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 (not ide.config.lfw or ide.config.lfw.chdirtofile ~= true)
|
||||
and ide.config.path.projectdir or wfilename:GetPath(wx.wxPATH_GET_VOLUME)
|
||||
@@ -63,4 +72,5 @@ return {
|
||||
fattachdebug = function(self) DebuggerAttachDefault() end,
|
||||
scratchextloop = false,
|
||||
unhideanywindow = true,
|
||||
takeparameters = true,
|
||||
}
|
||||
|
||||
@@ -5,8 +5,8 @@ local win = ide.osname == "Windows"
|
||||
local mac = ide.osname == "Macintosh"
|
||||
|
||||
return {
|
||||
name = "Love2d",
|
||||
description = "Love2d game engine",
|
||||
name = "LÖVE",
|
||||
description = "LÖVE game engine",
|
||||
api = {"baselib", "love2d"},
|
||||
frun = function(self,wfilename,rundebug)
|
||||
love2d = love2d or ide.config.path.love2d -- check if the path is configured
|
||||
@@ -26,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
|
||||
|
||||
@@ -41,17 +42,17 @@ return {
|
||||
DebuggerAttachDefault({runstart = ide.config.debugger.runonstart == true})
|
||||
end
|
||||
|
||||
-- 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,true)
|
||||
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,
|
||||
|
||||
@@ -13,12 +13,34 @@ 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)
|
||||
local exe = self:fexepath(version or "")
|
||||
local filepath = wfilename:GetFullPath()
|
||||
|
||||
do
|
||||
-- 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)
|
||||
local shortpath = winapi.short_path(filepath)
|
||||
if shortpath == filepath then
|
||||
DisplayOutputLn(
|
||||
("Can't get short path for a Unicode file name '%s' to open the file.")
|
||||
:format(filepath))
|
||||
DisplayOutputLn(
|
||||
("You can enable short names by using `fsutil 8dot3name set %s: 0` and recreate the file or directory.")
|
||||
:format(wfilename:GetVolume()))
|
||||
end
|
||||
filepath = shortpath
|
||||
end
|
||||
end
|
||||
|
||||
if rundebug then
|
||||
DebuggerAttachDefault({runstart = ide.config.debugger.runonstart == true})
|
||||
|
||||
@@ -30,50 +52,43 @@ return {
|
||||
filepath = tmpfile:GetFullPath()
|
||||
local f = io.open(filepath, "w")
|
||||
if not f then
|
||||
DisplayOutput("Can't open temporary file '"..filepath.."' for writing\n")
|
||||
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.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 clibs = ('/clibs%s/'):format(version and tostring(version):gsub('%.','') or '')
|
||||
local _, cpath = wx.wxGetEnv("LUA_CPATH")
|
||||
if rundebug and cpath then
|
||||
wx.wxSetEnv("LUA_CPATH", ide.osclibs..';'..cpath)
|
||||
local envname = "LUA_CPATH"
|
||||
if version then
|
||||
local env = "LUA_CPATH_"..string.gsub(version, '%.', '_')
|
||||
if os.getenv(env) then envname = env end
|
||||
end
|
||||
if version and cpath and not cpath:find(clibs, 1, true) then
|
||||
local _, cpath = wx.wxGetEnv("LUA_CPATH")
|
||||
wx.wxSetEnv("LUA_CPATH", cpath:gsub('/clibs/', clibs))
|
||||
|
||||
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() if rundebug then wx.wxRemoveFile(filepath) end end)
|
||||
|
||||
if (rundebug or version) and cpath 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,
|
||||
|
||||
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,12 +1,13 @@
|
||||
|
||||
return {
|
||||
name = "Luxinia2",
|
||||
description = "Luxinia2",
|
||||
api = {"baselib","glfw","glewgl","assimp20","luxmath","luxscene","luajit2",},
|
||||
api = {"baselib","glfw","glewgl","assimp20","luajit2",},
|
||||
|
||||
frun = function(self,wfilename,rundebug)
|
||||
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 or os.getenv("LUXINIA2")
|
||||
local luxDir = ide.config.path.luxinia2
|
||||
local scratchpad = rundebug and rundebug:match("scratchpad")
|
||||
local filename = wfilename:GetFullName()
|
||||
|
||||
@@ -63,12 +64,6 @@ return {
|
||||
return CommandLineRun(cmd,wdir,true,true,nil,self:fuid(wfilename))
|
||||
end,
|
||||
fuid = function(self,wfilename) return "luxinia2: luajit "..wfilename:GetFullName() 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,
|
||||
|
||||
@@ -1,19 +1,141 @@
|
||||
-- Copyright 2011-13 Paul Kulchenko, ZeroBrane LLC
|
||||
|
||||
--[[
|
||||
|
||||
Support for Hub added by Marmalade.
|
||||
|
||||
--]]
|
||||
|
||||
local quick
|
||||
local win = ide.osname == "Windows"
|
||||
local mac = ide.osname == "Macintosh"
|
||||
local exe = win and [[win32\s3e_simulator_debug.exe]] or [[loader/osx/s3e_simulator_debug]]
|
||||
local exe = win and [[win32\s3e_simulator_release.exe]] or [[loader/osx/s3e_simulator_release]]
|
||||
local exe_d = win and [[win32\s3e_simulator_debug.exe]] or [[loader/osx/s3e_simulator_debug]]
|
||||
local s3e = os.getenv("S3E_DIR")
|
||||
local prev_debug_loader
|
||||
|
||||
--[[
|
||||
Parse project file
|
||||
--]]
|
||||
function ProjectSettings(hub_project)
|
||||
local project_settings = {}
|
||||
local in_section = false
|
||||
for line in io.lines(hub_project) do
|
||||
-- Ignore comments and blank lines
|
||||
if not line:find('^%s*;') and not line:match('^%s*$') then
|
||||
section = line:match('^%s*%[([^%]]+)%]%s*$')
|
||||
if section then
|
||||
in_section = "GENERAL" == section:upper()
|
||||
elseif in_section then
|
||||
local key, value = line:match('^%s*(%w+)%s*=%s*(.-)%s*$')
|
||||
if tonumber(value) then
|
||||
project_settings[key] = tonumber(value)
|
||||
elseif value:upper() == "TRUE" then
|
||||
project_settings[key] = true
|
||||
elseif value:upper() == "FALSE" then
|
||||
project_settings[key] = false
|
||||
else
|
||||
project_settings[key] = value
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
return project_settings
|
||||
end
|
||||
|
||||
function GetFileName(filePath)
|
||||
if (not filePath) then return end
|
||||
local wxn = wx.wxFileName(filePath)
|
||||
return wxn:GetName()
|
||||
end
|
||||
|
||||
function GetQuickBuildFolder(mkb_quick)
|
||||
for line in io.lines(mkb_quick) do
|
||||
if line:find('^QUICK') then
|
||||
local dir = line:match('^QUICK;([^;]+);')
|
||||
return dir
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local project_settings = {}
|
||||
|
||||
function LauncherFromHubProject(projdir, project_name)
|
||||
|
||||
local sep = GetPathSeparator()
|
||||
|
||||
local mkb_quick = projdir..sep.."project_"..project_name..sep.."mkb-quick.txt"
|
||||
|
||||
if not mkb_quick or not wx.wxFileExists(mkb_quick) then
|
||||
DisplayOutputLn(("Warning: can't find '%s' file."):format(mkb_quick))
|
||||
return
|
||||
end
|
||||
|
||||
local build_folder = GetQuickBuildFolder(mkb_quick)
|
||||
|
||||
if not build_folder or not wx.wxDirExists(projdir..sep..build_folder) then
|
||||
DisplayOutputLn(("Warning: can't find '%s' Quick build folder."):format(build_folder))
|
||||
return
|
||||
end
|
||||
|
||||
local project_file = projdir..sep.."project_"..project_name..sep.."project.ini"
|
||||
|
||||
if not project_file or not wx.wxFileExists(project_file) then
|
||||
DisplayOutputLn(("Warning: can't find '%s' Hub project file."):format(project_file))
|
||||
else
|
||||
project_settings = ProjectSettings(project_file)
|
||||
end
|
||||
|
||||
if next(project_settings) == nil then
|
||||
DisplayOutputLn(("Warning: can't read settings from '%s' project file. Using defaults."):format(project_file))
|
||||
project_settings = {}
|
||||
end
|
||||
|
||||
-- Use simulator config
|
||||
local via = projdir..sep..build_folder..sep..project_name.."_"..(project_settings.isDebug and 'debug' or 'release')..".via"
|
||||
|
||||
if not via or not wx.wxFileExists(via) then
|
||||
DisplayOutputLn(("Warning: can't find '%s' via file."):format(via))
|
||||
via = projdir..sep..build_folder..sep.."web_"..(project_settings.isDebug and 'debug' or 'release')..".via"
|
||||
end
|
||||
|
||||
if not via or not wx.wxFileExists(via) then
|
||||
DisplayOutputLn(("Warning: can't find '%s' via file."):format(via))
|
||||
via = nil
|
||||
end
|
||||
|
||||
return via
|
||||
end
|
||||
|
||||
return {
|
||||
name = "Marmalade Quick",
|
||||
description = "Marmalade Quick mobile framework",
|
||||
api = {"baselib", "marmalade"},
|
||||
frun = function(self,wfilename,rundebug)
|
||||
quick = quick or ide.config.path.quick or (s3e and GetFullPathIfExists(s3e, exe))
|
||||
local projdir = self:fworkdir(wfilename)
|
||||
-- check for *.mkb file; it can be in the same or in the parent folder
|
||||
local mproj, mfile = MergeFullPath(projdir, "./")
|
||||
for _, file in ipairs(FileSysGetRecursive(mproj, false, "*.mkb")) do mfile = file end
|
||||
if not mfile then
|
||||
mproj, mfile = MergeFullPath(projdir, "../")
|
||||
for _, file in ipairs(FileSysGetRecursive(mproj, false, "*.mkb")) do mfile = file end
|
||||
end
|
||||
if not mfile then
|
||||
DisplayOutputLn(("Can't find '%s' project file."):format(mproj))
|
||||
return
|
||||
end
|
||||
|
||||
-- Check Marmalade project configuration
|
||||
local via = LauncherFromHubProject(mproj, GetFileName(mfile))
|
||||
|
||||
quick = prev_debug_loader == project_settings.isDebugLoader and quick or nil
|
||||
|
||||
quick = quick or ide.config.path.quick or (project_settings.isDebugLoader and (s3e and GetFullPathIfExists(s3e, exe_d)) or (s3e and GetFullPathIfExists(s3e, exe)))
|
||||
|
||||
prev_debug_loader = project_settings.isDebugLoader
|
||||
|
||||
if not quick then
|
||||
local sep = win and ';' or ':'
|
||||
local sep = wx.wxPATH_SEP
|
||||
local path =
|
||||
win and ([[C:\Marmalade]]..sep..[[D:\Marmalade]]..sep..
|
||||
GenerateProgramFilesPath('Marmalade', sep)..sep)
|
||||
@@ -47,38 +169,45 @@ return {
|
||||
|
||||
if not s3e then s3e = quick:gsub(exe, '') end
|
||||
|
||||
local projdir = self:fworkdir(wfilename)
|
||||
local file = GetFullPathIfExists(projdir, 'main.lua')
|
||||
if not file then
|
||||
DisplayOutputLn("Can't find 'main.lua' file in the current project folder.")
|
||||
local options
|
||||
local datadir
|
||||
|
||||
if via then
|
||||
options = ([[--via="%s"]]):format(via)
|
||||
datadir = FileRead(via):match('--data="([^"]+)"')
|
||||
else
|
||||
local mkb = FileRead(mfile)
|
||||
datadir = mkb:match("options%s*%{[^%}]*s3e%-data%-dir%s*=%s*(.-)%s*[\r\n%}]")
|
||||
datadir = datadir and datadir:gsub("^['\"]", ""):gsub("['\"][\r\n]*$", "")
|
||||
local icf1, icf2 = mkb:match("options%s*%{[^%}]*app%-icf%s*=%s*(.-)%s*[\r\n%}]")
|
||||
icf1 = icf1 and icf1:gsub("^['\"]", ""):gsub("['\"][\r\n]*$", "")
|
||||
if icf1 and icf1:find(",") then
|
||||
icf1, icf2 = icf1:match("(.+),(.*)")
|
||||
end
|
||||
|
||||
datadir = datadir and (wx.wxIsAbsolutePath(datadir) and datadir or MergeFullPath(mproj, datadir))
|
||||
icf1 = icf1 and (wx.wxIsAbsolutePath(icf1) and icf1 or MergeFullPath(mproj, icf1))
|
||||
icf2 = icf2 and (wx.wxIsAbsolutePath(icf2) and icf2 or MergeFullPath(mproj, icf2))
|
||||
|
||||
local quick_prebuilt = project_settings.isDebug and "quick_prebuilt_d.s86" or "quick_prebuilt.s86"
|
||||
|
||||
local dll = GetFullPathIfExists(s3e, "../quick/target/"..quick_prebuilt)
|
||||
or MergeFullPath(s3e, ("../quick/target/%s/"..quick_prebuilt):format(mac and 'osx' or 'win'))
|
||||
options = table.concat({
|
||||
([[--dll="%s"]]):format(dll),
|
||||
(datadir and ([[--data="%s"]]):format(datadir) or ''),
|
||||
-- Quick doesn't handle correctly spaces in quoted parameters on OSX,
|
||||
-- so replace those with escaped spaces; still quote on Windows
|
||||
(icf1 and ([[--app-icf1=%s]]):format(mac and icf1:gsub(" ", "\\ ") or '"'..icf1..'"') or ''),
|
||||
(icf2 and ([[--app-icf2=%s]]):format(mac and icf2:gsub(" ", "\\ ") or '"'..icf2..'"') or nil),
|
||||
}, " ")
|
||||
end
|
||||
|
||||
if not datadir then
|
||||
DisplayOutputLn("Failed to determine data dir")
|
||||
return
|
||||
end
|
||||
|
||||
-- check for *.mkb file; it can be in the same or in the parent folder
|
||||
local mproj, mfile = MergeFullPath(projdir, "./")
|
||||
for _, file in ipairs(FileSysGetRecursive(mproj, false, "*.mkb")) do mfile = file end
|
||||
if not mfile then
|
||||
mproj, mfile = MergeFullPath(projdir, "../")
|
||||
for _, file in ipairs(FileSysGetRecursive(mproj, false, "*.mkb")) do mfile = file end
|
||||
end
|
||||
if not mfile then
|
||||
DisplayOutputLn(("Can't find '%s' project file."):format(mproj))
|
||||
return
|
||||
end
|
||||
|
||||
local mkb = FileRead(mfile)
|
||||
local datadir = mkb:match("options%s*%{[^%}]*s3e%-data%-dir%s*=%s*(.-)%s*[\r\n%}]")
|
||||
datadir = datadir and datadir:gsub("^['\"]", ""):gsub("['\"][\r\n]*$", "")
|
||||
local icf1, icf2 = mkb:match("options%s*%{[^%}]*app%-icf%s*=%s*(.-)%s*[\r\n%}]")
|
||||
icf1 = icf1 and icf1:gsub("^['\"]", ""):gsub("['\"][\r\n]*$", "")
|
||||
if icf1 and icf1:find(",") then
|
||||
icf1, icf2 = icf1:match("(.+),(.*)")
|
||||
end
|
||||
|
||||
datadir = datadir and (wx.wxIsAbsolutePath(datadir) and datadir or MergeFullPath(mproj, datadir))
|
||||
icf1 = icf1 and (wx.wxIsAbsolutePath(icf1) and icf1 or MergeFullPath(mproj, icf1))
|
||||
icf2 = icf2 and (wx.wxIsAbsolutePath(icf2) and icf2 or MergeFullPath(mproj, icf2))
|
||||
|
||||
if rundebug then
|
||||
-- start running the application right away
|
||||
DebuggerAttachDefault({redirect = mac and "r" or "c", basedir = datadir,
|
||||
@@ -99,27 +228,10 @@ return {
|
||||
end
|
||||
end
|
||||
|
||||
local dll = GetFullPathIfExists(s3e, "../quick/target/quick_prebuilt_d.s86")
|
||||
or MergeFullPath(s3e, ("../quick/target/%s/quick_prebuilt_d.s86"):format(mac and 'osx' or 'win'))
|
||||
local options = table.concat({
|
||||
([[--dll="%s"]]):format(dll),
|
||||
(datadir and ([[--data="%s"]]):format(datadir) or ''),
|
||||
-- Quick doesn't handle correctly spaces in quoted parameters on OSX,
|
||||
-- so replace those with escaped spaces; still quote on Windows
|
||||
(icf1 and ([[--app-icf1=%s]]):format(mac and icf1:gsub(" ", "\\ ") or '"'..icf1..'"') or ''),
|
||||
(icf2 and ([[--app-icf2=%s]]):format(mac and icf2:gsub(" ", "\\ ") or '"'..icf2..'"') or nil),
|
||||
}, " ")
|
||||
|
||||
local cmd = ('"%s" %s'):format(quick, options)
|
||||
-- CommandLineRun(cmd,wdir,tooutput,nohide,stringcallback,uid,endcallback)
|
||||
return CommandLineRun(cmd,GetPathWithSep(projdir),true,true)
|
||||
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,
|
||||
}
|
||||
|
||||
@@ -22,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
|
||||
@@ -37,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
|
||||
|
||||
@@ -58,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)
|
||||
@@ -86,12 +86,6 @@ return {
|
||||
return CommandLineRun(cmd,self:fworkdir(wfilename),true,false,nil,nil,
|
||||
function() 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)
|
||||
end,
|
||||
hasdebugger = true,
|
||||
fattachdebug = function(self) DebuggerAttachDefault() end,
|
||||
scratchextloop = true,
|
||||
|
||||
@@ -57,17 +57,27 @@ local function match_comment(s, pos)
|
||||
return '--' .. part, pos
|
||||
end
|
||||
|
||||
-- note: matches invalid numbers too
|
||||
-- note: matches invalid numbers too (for example, 0x)
|
||||
local function match_numberlike(s, pos)
|
||||
local tok = s:match('^0[xX][0-9A-Fa-f]*', pos)
|
||||
if tok then return tok end
|
||||
local tok = s:match('^[0-9%.]+', pos)
|
||||
if tok then
|
||||
local tok2 = s:match('^[eE][+-]?[0-9]*', pos + #tok)
|
||||
if tok2 then tok = tok .. tok2 end
|
||||
return tok
|
||||
local hex = s:match('^0[xX]', pos)
|
||||
if hex then pos = pos + #hex end
|
||||
|
||||
local longint = (hex and '^%x+' or '^%d+') .. '[uU]?[lL][lL]'
|
||||
local mantissa1 = hex and '^%x+%.?%x*' or '^%d+%.?%d*'
|
||||
local mantissa2 = hex and '^%.%x+' or '^%.%d+'
|
||||
local exponent = hex and '^[pP][+%-]?%x*' or '^[eE][+%-]?%d*'
|
||||
local imaginary = '^[iI]'
|
||||
local tok = s:match(longint, pos)
|
||||
if not tok then
|
||||
tok = s:match(mantissa1, pos) or s:match(mantissa2, pos)
|
||||
if tok then
|
||||
local tok2 = s:match(exponent, pos + #tok)
|
||||
if tok2 then tok = tok..tok2 end
|
||||
tok2 = s:match(imaginary, pos + #tok)
|
||||
if tok2 then tok = tok..tok2 end
|
||||
end
|
||||
end
|
||||
return nil
|
||||
return tok and (hex or '') .. tok or hex
|
||||
end
|
||||
|
||||
local function newset(s)
|
||||
@@ -83,6 +93,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,23 +101,26 @@ 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
|
||||
local tok = code:match('^#![^\n]*\n', pos) -- shebang
|
||||
if tok then f('Shebang', tok, 1) pos = pos + #tok end
|
||||
while pos <= #code do
|
||||
local p2, n2, n1 = code:match('^%s*()((%S)%S?)', pos)
|
||||
local p2, n2, n1, n3 = code:match('^%s*()((%S)(%S?))', pos)
|
||||
if not p2 then assert(code:sub(pos):match('^%s*$')); break end
|
||||
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 +133,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
|
||||
@@ -128,7 +151,7 @@ function M.lex(code, f, pos)
|
||||
f('Unknown', code:sub(pos), pos) -- unterminated string
|
||||
pos = #code + 1
|
||||
end
|
||||
elseif dig[n1] then
|
||||
elseif dig[n1] or (n1 == '.' and dig[n3]) then
|
||||
local tok = match_numberlike(code, pos)
|
||||
assert(tok)
|
||||
f('Number', tok, pos)
|
||||
@@ -178,9 +201,10 @@ function M.lexc(code, f, pos)
|
||||
local yield = coroutine.yield
|
||||
local func = coroutine.wrap(f or function()
|
||||
M.lex(code, function(tag, name, pos)
|
||||
yield {tag=tag, name, lineinfo=pos}
|
||||
-- skip Comment tags as they may arbitrarily split statements and affects their processing
|
||||
if tag ~= 'Comment' then yield {tag=tag, name, lineinfo=pos} end
|
||||
end, pos)
|
||||
yield {tag='Eof'}
|
||||
yield {tag='Eof', lineinfo = #code+1}
|
||||
end)
|
||||
return setmetatable({f=func}, Stream)
|
||||
end
|
||||
|
||||
@@ -6,12 +6,9 @@
|
||||
|
||||
local PARSE = {}
|
||||
|
||||
local unpack = table.unpack or unpack
|
||||
local LEX = require 'lua_lexer_loose'
|
||||
|
||||
local function warn(message, position)
|
||||
io.stderr:write('WARNING: ', tostring(position), ': ', message, '\n')
|
||||
end
|
||||
|
||||
--[[
|
||||
Loose parser.
|
||||
|
||||
@@ -31,6 +28,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 +37,46 @@ 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
|
||||
warn("'end' without opening block", lineinfo)
|
||||
else
|
||||
table.remove(scopes)
|
||||
local scope = #scopes
|
||||
if scope > 1 then table.remove(scopes) end
|
||||
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)
|
||||
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 +95,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 +111,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'.
|
||||
@@ -156,18 +173,40 @@ function PARSE.parse_scope(lx, f, level)
|
||||
scopes[#scopes].inside_table = newval
|
||||
end
|
||||
elseif c.tag == 'Id' then
|
||||
local scope = #scopes
|
||||
local inside_local = scopes[scope].inside_local ~= nil
|
||||
local inside_table = scopes[scope].inside_table
|
||||
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, inside_local)
|
||||
end
|
||||
if scopes[#scopes].inside_table and cnext.tag == 'Keyword' and cnext[1] == '=' then
|
||||
-- table field
|
||||
f('String', c[1], c.lineinfo)
|
||||
-- either this is inside a table or it continues from a comma,
|
||||
-- which may be a field assignment, so assume it's in a table
|
||||
if (inside_table or cprev[1] == ',') and cnext.tag == 'Keyword' and cnext[1] == '=' then
|
||||
-- table field; table fields are tricky to handle during incremental
|
||||
-- processing as "a = 1" may be either an assignment (in which case
|
||||
-- 'a' is Id) or a field initialization (in which case it's a String).
|
||||
-- Since it's not possible to decide between two cases in isolation,
|
||||
-- this is not a good place to insert a break; instead, the break is
|
||||
-- inserted at the location of the previous keyword, which allows
|
||||
-- to properly handle those cases. The desired location of
|
||||
-- the restart point is returned as the `nobreak` value.
|
||||
f('String', c[1], c.lineinfo,
|
||||
inside_local or cprev and cprev.tag == 'Keyword' and cprev.lineinfo)
|
||||
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, true)
|
||||
-- this looks like the left side of (multi-variable) assignment
|
||||
-- unless it's a part of `= var, field = value`, so skip if inside a table
|
||||
if not inside_table and not (cprev and cprev.tag == 'Keyword' and cprev[1] == '=') then
|
||||
while lx:peek().tag == 'Keyword' and lx:peek()[1] == ',' do
|
||||
local c = lx:next(); if lx:peek().tag ~= 'Id' then break end
|
||||
c = lx:next()
|
||||
f('Id', c[1], c.lineinfo, true)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -203,7 +242,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
|
||||
@@ -221,14 +260,9 @@ function PARSE.parse_scope_resolve(lx, f, vars)
|
||||
vars = newscope(vars, name, lineinfo)
|
||||
elseif op == 'EndScope' then
|
||||
local mt = getmetatable(vars)
|
||||
if mt == nil then
|
||||
warn("'end' without opening block.", lineinfo)
|
||||
else
|
||||
vars = mt.__index
|
||||
end
|
||||
elseif op == 'Id' then
|
||||
-- Just make callback
|
||||
elseif op == 'String' or op == 'FunctionCall' then
|
||||
if mt ~= nil then vars = mt.__index end
|
||||
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 +274,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
|
||||
|
||||
|
||||
@@ -365,14 +365,14 @@ function M.get_keywords(ast, src)
|
||||
-- Get position range [fpos,lpos] between subsequent children.
|
||||
local fpos
|
||||
if i == 0 then -- before first child
|
||||
fpos = tostring(ast.lineinfo.first):match('|L(%d+)')
|
||||
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 tostring(last):match('|L(%d+)')) + 1
|
||||
end
|
||||
local lpos
|
||||
if j == #ast+1 then -- after last child
|
||||
lpos = tostring(ast.lineinfo.last):match('|L(%d+)')
|
||||
lpos = tonumber(tostring(ast.lineinfo.last):match('|L(%d+)'))
|
||||
else
|
||||
local first = oast[j].lineinfo.first; local c = first.comments
|
||||
lpos = (c and #c > 0 and c[1][2] or tostring(first):match('|L(%d+)')) - 1
|
||||
@@ -388,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
|
||||
@@ -424,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 = tostring(ast.lineinfo.first):match('|L(%d+)'), tostring(ast.lineinfo.last):match('|L(%d+)'), 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
|
||||
@@ -443,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
|
||||
@@ -515,7 +515,7 @@ function M.require_inspect(name, report, spath)
|
||||
vinfo = T.error'module not found' --IMPROVE: include search paths?
|
||||
end
|
||||
M.package_loaded[name] = {vinfo, mast}
|
||||
return vinfo
|
||||
return vinfo, mast
|
||||
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
|
||||
@@ -771,11 +790,12 @@ function M.infer_values(top_ast, tokenlist, src, report)
|
||||
-- Any call to require is handled specially (source analysis).
|
||||
if func == require and type(argvalues[1]) == 'string' then
|
||||
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('[^\\/]+$', ''))
|
||||
local val, mast = M.require_inspect(argvalues[1], report, spath:gsub('[^\\/]+$', ''))
|
||||
if known(val) and val ~= nil then
|
||||
ast.value = val
|
||||
found = true
|
||||
end -- note: on nil value, assumes analysis failed (not found). This is a heuristic only.
|
||||
if mast and mast.valueglobals then ast.valueglobals = mast.valueglobals end
|
||||
end
|
||||
-- Attempt call if safe.
|
||||
if not found and (LS.safe_function[func] or func == pcall and LS.safe_function[argvalues[1]]) then
|
||||
@@ -820,8 +840,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 = tostring(ast.lineinfo.first):gsub('<C|','<'):match('<([^|]+)') -- 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?
|
||||
@@ -1071,10 +1090,10 @@ function M.uninspect(top_ast)
|
||||
ast.note = nil
|
||||
|
||||
ast.nocollect = nil
|
||||
end)
|
||||
|
||||
-- undo infer_values
|
||||
top_ast.valueglobals = nil
|
||||
-- undo infer_values
|
||||
ast.valueglobals = nil
|
||||
end)
|
||||
end
|
||||
|
||||
|
||||
@@ -1125,6 +1144,10 @@ function M.inspect(top_ast, tokenlist, src, report)
|
||||
end
|
||||
|
||||
LA.walk(top_ast, function(ast)
|
||||
if top_ast ~= ast and ast.valueglobals then
|
||||
for k in pairs(ast.valueglobals) do globals[k] = {set = ast} end
|
||||
ast.valueglobals = nil
|
||||
end
|
||||
if ast.tag == 'Id' or ast.isfield then
|
||||
local vname = ast[1]
|
||||
--TODO: rename definedglobal to definedfield for clarity
|
||||
|
||||
@@ -169,6 +169,12 @@ return function(M)
|
||||
{ "/", prec = 70, builder = opf2 "div" },
|
||||
{ "%", prec = 70, builder = opf2 "mod" },
|
||||
{ "^", prec = 90, builder = opf2 "pow", assoc = "right" },
|
||||
{ "//", prec = 70, builder = opf2 "idiv" },
|
||||
{ "&", prec = 36, builder = opf2 "band" },
|
||||
{ "|", prec = 32, builder = opf2 "bor" },
|
||||
{ "~", prec = 34, builder = opf2 "bxor" },
|
||||
{ "<<", prec = 38, builder = opf2 "shl" },
|
||||
{ ">>", prec = 38, builder = opf2 "shr" },
|
||||
{ "..", prec = 40, builder = opf2 "concat", assoc = "right" },
|
||||
{ "==", prec = 30, builder = opf2 "eq" },
|
||||
{ "~=", prec = 30, builder = op_ne },
|
||||
@@ -183,6 +189,7 @@ return function(M)
|
||||
name = "expr prefix op",
|
||||
{ "not", prec = 80, builder = opf1 "not" },
|
||||
{ "#", prec = 80, builder = opf1 "len" },
|
||||
{ "~", prec = 80, builder = opf2 "bnot" },
|
||||
{ "-", prec = 80, builder = opf1 "unm" } },
|
||||
|
||||
suffix = {
|
||||
|
||||
@@ -34,7 +34,8 @@ return function()
|
||||
"in", "local", "nil", "not", "or", "repeat",
|
||||
"return", "then", "true", "until", "while",
|
||||
"...", "..", "==", ">=", "<=", "~=",
|
||||
"::", -- Lua5,2
|
||||
"<<", ">>", "//", -- Lua5.3
|
||||
"::", -- Lua5.2
|
||||
"+{", "-{" } -- Metalua
|
||||
|
||||
for _, w in ipairs(keywords) do lexer :add (w) end
|
||||
|
||||
@@ -263,6 +263,10 @@ return function(M)
|
||||
{ "local", _M.local_stat_parser, builder = unpack },
|
||||
{ "return", return_expr_list_parser, builder =
|
||||
function(x) x[1].tag='Return'; return x[1] end },
|
||||
{ "goto", _M.id, builder =
|
||||
function(x) x[1].tag='Goto'; return x[1] end },
|
||||
{ "::", _M.id, "::", builder =
|
||||
function(x) x[1].tag='Label'; return x[1] end },
|
||||
{ "break", builder = function() return { tag="Break" } end },
|
||||
{ "-{", gg.future(M, 'meta').splice_content, "}", builder = unpack },
|
||||
{ "if", gg.nonempty(elseifs_parser), gg.onkeyword{ "else", M.block }, "end",
|
||||
|
||||
@@ -202,12 +202,15 @@ lexer.patterns = {
|
||||
--final_short_comment = "^%-%-([^\n]*)()$",
|
||||
long_comment = "^%-%-%[(=*)%[\n?(.-)%]%1%]()",
|
||||
long_string = "^%[(=*)%[\n?(.-)%]%1%]()",
|
||||
number_longint = "^%d+[uU]?[lL][lL]()",
|
||||
number_longint_hex = "^%x+[uU]?[lL][lL]()",
|
||||
number_mantissa = { "^%d+%.?%d*()", "^%d*%.%d+()" },
|
||||
number_mantissa_hex = { "^%x+%.?%x*()", "^%x*%.%x+()" }, --Lua5.1 and Lua5.2
|
||||
number_exponant = "^[eE][%+%-]?%d+()",
|
||||
number_exponant_hex = "^[pP][%+%-]?%d+()", --Lua5.2
|
||||
number_exponent = "^[eE][%+%-]?%d+()",
|
||||
number_exponent_hex = "^[pP][%+%-]?%d+()", --Lua5.2
|
||||
number_hex = "^0[xX]()",
|
||||
word = "^([%a_][%w_]*)()"
|
||||
number_imaginary = "^[iI]()",
|
||||
word = "^([%a_][%w_]*)()",
|
||||
}
|
||||
|
||||
----------------------------------------------------------------------
|
||||
@@ -411,28 +414,31 @@ end
|
||||
-- Extract Number.
|
||||
----------------------------------------------------------------------
|
||||
function lexer :extract_number()
|
||||
local j = self.src:match(self.patterns.number_hex, self.i)
|
||||
if j then
|
||||
j = self.src:match (self.patterns.number_mantissa_hex[1], j) or
|
||||
self.src:match (self.patterns.number_mantissa_hex[2], j)
|
||||
if j then
|
||||
j = self.src:match (self.patterns.number_exponant_hex, j) or j
|
||||
end
|
||||
local patt = self.patterns
|
||||
local s = self.src
|
||||
local j = s:match(patt.number_hex, self.i)
|
||||
local hex = j ~= nil
|
||||
local longint = hex and patt.number_longint_hex or patt.number_longint
|
||||
local mantissa1 = hex and patt.number_mantissa_hex[1] or patt.number_mantissa[1]
|
||||
local mantissa2 = hex and patt.number_mantissa_hex[2] or patt.number_mantissa[2]
|
||||
local exponent = hex and patt.number_exponent_hex or patt.number_exponent
|
||||
if not hex then j = self.i end
|
||||
|
||||
local t = s:match(longint, j)
|
||||
if t then
|
||||
j = t
|
||||
else
|
||||
j = self.src:match (self.patterns.number_mantissa[1], self.i) or
|
||||
self.src:match (self.patterns.number_mantissa[2], self.i)
|
||||
if j then
|
||||
j = self.src:match (self.patterns.number_exponant, j) or j
|
||||
end
|
||||
j = s:match(mantissa1, j) or s:match(mantissa2, j)
|
||||
if not j then return end
|
||||
j = s:match(exponent, j) or j
|
||||
j = s:match(patt.number_imaginary, j) or j
|
||||
end
|
||||
if not j then return end
|
||||
-- Number found, interpret with tonumber() and return it
|
||||
|
||||
local str = self.src:sub (self.i, j-1)
|
||||
-- :TODO: tonumber on Lua5.2 floating hex may or may not work on Lua5.1
|
||||
local n = tonumber (str)
|
||||
if not n then error(str.." is not a valid number according to tonumber()") end
|
||||
self.i = j
|
||||
return 'Number', n
|
||||
-- Number found, interpret with tonumber() and return it
|
||||
-- return str as the fallback when processing formats not supported by the current interpreter
|
||||
return 'Number', (tonumber (str) or str)
|
||||
end
|
||||
|
||||
----------------------------------------------------------------------
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
--
|
||||
-- MobDebug 0.60
|
||||
-- Copyright 2011-14 Paul Kulchenko
|
||||
-- MobDebug -- Lua remote debugger
|
||||
-- Copyright 2011-15 Paul Kulchenko
|
||||
-- Based on RemDebug 1.0 Copyright Kepler Project 2005
|
||||
--
|
||||
|
||||
@@ -10,6 +10,7 @@ local io = io or require "io"
|
||||
local table = table or require "table"
|
||||
local string = string or require "string"
|
||||
local coroutine = coroutine or require "coroutine"
|
||||
local debug = require "debug"
|
||||
-- protect require "os" as it may fail on embedded systems without os module
|
||||
local os = os or (function(module)
|
||||
local ok, res = pcall(require, module)
|
||||
@@ -18,12 +19,13 @@ end)("os")
|
||||
|
||||
local mobdebug = {
|
||||
_NAME = "mobdebug",
|
||||
_VERSION = 0.60,
|
||||
_VERSION = 0.628,
|
||||
_COPYRIGHT = "Paul Kulchenko",
|
||||
_DESCRIPTION = "Mobile Remote Debugger for the Lua programming language",
|
||||
port = os and os.getenv and tonumber((os.getenv("MOBDEBUG_PORT"))) or 8172,
|
||||
checkcount = 200,
|
||||
yieldtimeout = 0.02,
|
||||
yieldtimeout = 0.02, -- yield timeout (s)
|
||||
connecttimeout = 2, -- connect timeout (s)
|
||||
}
|
||||
|
||||
local error = error
|
||||
@@ -35,6 +37,7 @@ local setmetatable = setmetatable
|
||||
local tonumber = tonumber
|
||||
local unpack = table.unpack or unpack
|
||||
local rawget = rawget
|
||||
local gsub, sub, find = string.gsub, string.sub, string.find
|
||||
|
||||
-- if strict.lua is used, then need to avoid referencing some global
|
||||
-- variables, as they can be undefined;
|
||||
@@ -59,8 +62,9 @@ local corocreate = ngx and coroutine._create or coroutine.create
|
||||
local cororesume = ngx and coroutine._resume or coroutine.resume
|
||||
local coroyield = ngx and coroutine._yield or coroutine.yield
|
||||
local corostatus = ngx and coroutine._status or coroutine.status
|
||||
local corowrap = coroutine.wrap
|
||||
|
||||
if not setfenv then -- Lua 5.2
|
||||
if not setfenv then -- Lua 5.2+
|
||||
-- based on http://lua-users.org/lists/lua-l/2010-06/msg00314.html
|
||||
-- this assumes f is a function
|
||||
local function findenv(f)
|
||||
@@ -95,7 +99,6 @@ local iscasepreserving = win or (mac and io.open('/library') ~= nil)
|
||||
if jit and jit.off then jit.off() end
|
||||
|
||||
local socket = require "socket"
|
||||
local debug = require "debug"
|
||||
local coro_debugger
|
||||
local coro_debugee
|
||||
local coroutines = {}; setmetatable(coroutines, {__mode = "k"}) -- "weak" keys
|
||||
@@ -123,34 +126,36 @@ local debugee = function ()
|
||||
for _ = 1, 10 do a = a + 1 end
|
||||
error(deferror)
|
||||
end
|
||||
local function q(s) return s:gsub('([%(%)%.%%%+%-%*%?%[%^%$%]])','%%%1') end
|
||||
local function q(s) return string.gsub(s, '([%(%)%.%%%+%-%*%?%[%^%$%]])','%%%1') end
|
||||
|
||||
local serpent = (function() ---- include Serpent module for serialization
|
||||
local n, v = "serpent", 0.272 -- (C) 2012-13 Paul Kulchenko; MIT License
|
||||
local n, v = "serpent", 0.285 -- (C) 2012-15 Paul Kulchenko; MIT License
|
||||
local c, d = "Paul Kulchenko", "Lua serializer and pretty printer"
|
||||
local snum = {[tostring(1/0)]='1/0 --[[math.huge]]',[tostring(-1/0)]='-1/0 --[[-math.huge]]',[tostring(0/0)]='0/0'}
|
||||
local badtype = {thread = true, userdata = true, cdata = true}
|
||||
local getmetatable = debug and debug.getmetatable or getmetatable
|
||||
local keyword, globals, G = {}, {}, (_G or _ENV)
|
||||
for _,k in ipairs({'and', 'break', 'do', 'else', 'elseif', 'end', 'false',
|
||||
'for', 'function', 'goto', 'if', 'in', 'local', 'nil', 'not', 'or', 'repeat',
|
||||
'return', 'then', 'true', 'until', 'while'}) do keyword[k] = true end
|
||||
for k,v in pairs(G) do globals[v] = k end -- build func to name mapping
|
||||
for _,g in ipairs({'coroutine', 'debug', 'io', 'math', 'string', 'table', 'os'}) do
|
||||
for k,v in pairs(G[g] or {}) do globals[v] = g..'.'..k end end
|
||||
for k,v in pairs(type(G[g]) == 'table' and G[g] or {}) do globals[v] = g..'.'..k end end
|
||||
|
||||
local function s(t, opts)
|
||||
local name, indent, fatal, maxnum = opts.name, opts.indent, opts.fatal, opts.maxnum
|
||||
local sparse, custom, huge = opts.sparse, opts.custom, not opts.nohuge
|
||||
local space, maxl = (opts.compact and '' or ' '), (opts.maxlevel or math.huge)
|
||||
local iname, comm = '_'..(name or ''), opts.comment and (tonumber(opts.comment) or math.huge)
|
||||
local numformat = opts.numformat or "%.17g"
|
||||
local seen, sref, syms, symn = {}, {'local '..iname..'={}'}, {}, 0
|
||||
local function gensym(val) return '_'..(tostring(tostring(val)):gsub("[^%w]",""):gsub("(%d%w+)",
|
||||
-- tostring(val) is needed because __tostring may return a non-string value
|
||||
function(s) if not syms[s] then symn = symn+1; syms[s] = symn end return syms[s] end)) end
|
||||
local function safestr(s) return type(s) == "number" and (huge and snum[tostring(s)] or s)
|
||||
function(s) if not syms[s] then symn = symn+1; syms[s] = symn end return tostring(syms[s]) end)) end
|
||||
local function safestr(s) return type(s) == "number" and tostring(huge and snum[tostring(s)] or numformat:format(s))
|
||||
or type(s) ~= "string" and tostring(s) -- escape NEWLINE/010 and EOF/026
|
||||
or ("%q"):format(s):gsub("\010","n"):gsub("\026","\\026") end
|
||||
local function comment(s,l) return comm and (l or 0) < comm and ' --[['..tostring(s)..']]' or '' end
|
||||
local function comment(s,l) return comm and (l or 0) < comm and ' --[['..select(2, pcall(tostring, s))..']]' or '' end
|
||||
local function globerr(s,l) return globals[s] and globals[s]..comment(s,l) or not fatal
|
||||
and safestr(select(2, pcall(tostring, s))) or error("Can't serialize "..tostring(s)) end
|
||||
local function safename(path, name) -- generates foo.bar, foo[3], or foo['b a r']
|
||||
@@ -160,7 +165,7 @@ local function s(t, opts)
|
||||
return (path or '')..(plain and path and '.' or '')..safe, safe end
|
||||
local alphanumsort = type(opts.sortkeys) == 'function' and opts.sortkeys or function(k, o, n) -- k=keys, o=originaltable, n=padding
|
||||
local maxn, to = tonumber(n) or 12, {number = 'a', string = 'b'}
|
||||
local function padnum(d) return ("%0"..maxn.."d"):format(d) end
|
||||
local function padnum(d) return ("%0"..tostring(maxn).."d"):format(tonumber(d)) end
|
||||
table.sort(k, function(a,b)
|
||||
-- sort numeric keys first: k[key] is not nil for numerical keys
|
||||
return (k[a] ~= nil and 0 or to[type(a)] or 'z')..(tostring(a):gsub("%d+",padnum))
|
||||
@@ -174,7 +179,9 @@ local function s(t, opts)
|
||||
if seen[t] then -- already seen this element
|
||||
sref[#sref+1] = spath..space..'='..space..seen[t]
|
||||
return tag..'nil'..comment('ref', level) end
|
||||
if type(mt) == 'table' and (mt.__serialize or mt.__tostring) then -- knows how to serialize itself
|
||||
-- protect from those cases where __tostring may fail
|
||||
if type(mt) == 'table' and pcall(function() return mt.__tostring and mt.__tostring(t) end)
|
||||
and (mt.__serialize or mt.__tostring) then -- knows how to serialize itself
|
||||
seen[t] = insref or spath
|
||||
if mt.__serialize then t = mt.__serialize(t) else t = tostring(t) end
|
||||
ttype = type(t) end -- new value falls through to be serialized
|
||||
@@ -194,6 +201,7 @@ local function s(t, opts)
|
||||
local value, ktype, plainindex = t[key], type(key), n <= maxn and not sparse
|
||||
if opts.valignore and opts.valignore[value] -- skip ignored values; do nothing
|
||||
or opts.keyallow and not opts.keyallow[key]
|
||||
or opts.keyignore and opts.keyignore[key]
|
||||
or opts.valtypeignore and opts.valtypeignore[type(value)] -- skipping ignored value types
|
||||
or sparse and value == nil then -- skipping nils; do nothing
|
||||
elseif ktype == 'table' or ktype == 'function' or badtype[ktype] then
|
||||
@@ -202,8 +210,8 @@ local function s(t, opts)
|
||||
local sname = safename(iname, gensym(key)) -- iname is table for local variables
|
||||
sref[#sref] = val2str(key,sname,indent,sname,iname,true) end
|
||||
sref[#sref+1] = 'placeholder'
|
||||
local path = seen[t]..'['..(seen[key] or globals[key] or gensym(key))..']'
|
||||
sref[#sref] = path..space..'='..space..(seen[value] or val2str(value,nil,indent,path))
|
||||
local path = seen[t]..'['..tostring(seen[key] or globals[key] or gensym(key))..']'
|
||||
sref[#sref] = path..space..'='..space..tostring(seen[value] or val2str(value,nil,indent,path))
|
||||
else
|
||||
out[#out+1] = val2str(value,key,indent,insref,seen[t],plainindex,level+1)
|
||||
end
|
||||
@@ -232,20 +240,16 @@ local function s(t, opts)
|
||||
end
|
||||
|
||||
local function deserialize(data, opts)
|
||||
local f, res = (loadstring or load)('return '..data)
|
||||
if not f then f, res = (loadstring or load)(data) end
|
||||
local env = (opts and opts.safe == false) and G
|
||||
or setmetatable({}, {
|
||||
__index = function(t,k) return t end,
|
||||
__call = function(t,...) error("cannot call functions") end
|
||||
})
|
||||
local f, res = (loadstring or load)('return '..data, nil, nil, env)
|
||||
if not f then f, res = (loadstring or load)(data, nil, nil, env) end
|
||||
if not f then return f, res end
|
||||
if opts and opts.safe == false then return pcall(f) end
|
||||
|
||||
local count, thread = 0, coroutine.running()
|
||||
local h, m, c = debug.gethook(thread)
|
||||
debug.sethook(function (e, l) count = count + 1
|
||||
if count >= 3 then error("cannot call functions") end
|
||||
end, "c")
|
||||
local res = {pcall(f)}
|
||||
count = 0 -- set again, otherwise it's tripped on the next sethook
|
||||
debug.sethook(thread, h, m, c)
|
||||
return (table.unpack or unpack)(res)
|
||||
if setfenv then setfenv(f, env) end
|
||||
return pcall(f)
|
||||
end
|
||||
|
||||
local function merge(a, b) if b then for k,v in pairs(b) do a[k] = v end end; return a; end
|
||||
@@ -277,12 +281,22 @@ local function stack(start)
|
||||
local func = debug.getinfo(f, "f").func
|
||||
local i = 1
|
||||
local locals = {}
|
||||
-- get locals
|
||||
while true do
|
||||
local name, value = debug.getlocal(f, i)
|
||||
if not name then break end
|
||||
if string.sub(name, 1, 1) ~= '(' then locals[name] = {value, tostring(value)} end
|
||||
i = i + 1
|
||||
end
|
||||
-- get varargs (these use negative indices)
|
||||
i = 1
|
||||
while true do
|
||||
local name, value = debug.getlocal(f, -i)
|
||||
if not name then break end
|
||||
locals[name:gsub("%)$"," "..i..")")] = {value, tostring(value)}
|
||||
i = i + 1
|
||||
end
|
||||
-- get upvalues
|
||||
i = 1
|
||||
local ups = {}
|
||||
while func and true do -- check for func as it may be nil for tail calls
|
||||
@@ -326,6 +340,7 @@ end
|
||||
|
||||
local function remove_breakpoint(file, line)
|
||||
if file == '-' and lastfile then file = lastfile
|
||||
elseif file == '*' and line == 0 then breakpoints = {}
|
||||
elseif iscasepreserving then file = string.lower(file) end
|
||||
if breakpoints[line] then breakpoints[line][file] = nil end
|
||||
end
|
||||
@@ -565,26 +580,26 @@ local function debug_hook(event, line)
|
||||
-- Unfortunately, there is no reliable/quick way to figure out
|
||||
-- what is the filename and what is the source code.
|
||||
-- The following will work if the supplied filename uses Unix path.
|
||||
if file:find("^@") then
|
||||
file = file:gsub("^@", ""):gsub("\\", "/")
|
||||
if find(file, "^@") then
|
||||
file = gsub(gsub(file, "^@", ""), "\\", "/")
|
||||
-- need this conversion to be applied to relative and absolute
|
||||
-- file names as you may write "require 'Foo'" to
|
||||
-- load "foo.lua" (on a case insensitive file system) and breakpoints
|
||||
-- set on foo.lua will not work if not converted to the same case.
|
||||
if iscasepreserving then file = string.lower(file) end
|
||||
if file:find("%./") == 1 then file = file:sub(3)
|
||||
else file = file:gsub("^"..q(basedir), "") end
|
||||
if find(file, "%./") == 1 then file = sub(file, 3)
|
||||
else file = gsub(file, "^"..q(basedir), "") end
|
||||
-- some file systems allow newlines in file names; remove these.
|
||||
file = file:gsub("\n", ' ')
|
||||
file = gsub(file, "\n", ' ')
|
||||
else
|
||||
-- this is either a file name coming from loadstring("chunk", "file"),
|
||||
-- or the actual source code that needs to be serialized (as it may
|
||||
-- include newlines); assume it's a file name if it's all on one line.
|
||||
if file:find("[\r\n]") then
|
||||
if find(file, "[\r\n]") then
|
||||
file = mobdebug.line(file)
|
||||
else
|
||||
if iscasepreserving then file = string.lower(file) end
|
||||
file = file:gsub("\\", "/"):gsub(file:find("^%./") and "^%./" or "^"..q(basedir), "")
|
||||
file = gsub(gsub(file, "\\", "/"), find(file, "^%./") and "^%./" or "^"..q(basedir), "")
|
||||
end
|
||||
end
|
||||
|
||||
@@ -640,7 +655,8 @@ local function debug_hook(event, line)
|
||||
-- need to recheck once more as resume after 'stack' command may
|
||||
-- return something else (for example, 'exit'), which needs to be handled
|
||||
if status and res and res ~= 'stack' then
|
||||
if abort == nil and res == "exit" then os.exit(1, true); return end
|
||||
if not abort and res == "exit" then mobdebug.onexit(1, true); return end
|
||||
if not abort and res == "done" then mobdebug.done(); return end
|
||||
abort = res
|
||||
-- only abort if safe; if not, there is another (earlier) check inside
|
||||
-- debug_hook, which will abort execution at the first safe opportunity
|
||||
@@ -671,7 +687,7 @@ local function stringify_results(status, ...)
|
||||
end
|
||||
|
||||
local function isrunning()
|
||||
return coro_debugger and corostatus(coro_debugger) == 'suspended'
|
||||
return coro_debugger and (corostatus(coro_debugger) == 'suspended' or corostatus(coro_debugger) == 'running')
|
||||
end
|
||||
|
||||
-- this is a function that removes all hooks and closes the socket to
|
||||
@@ -731,7 +747,7 @@ local function debugger_loop(sev, svars, sfile, sline)
|
||||
elseif mobdebug.yield then mobdebug.yield()
|
||||
end
|
||||
elseif not line and err == "closed" then
|
||||
error("Debugger connection unexpectedly closed", 0)
|
||||
error("Debugger connection closed", 0)
|
||||
else
|
||||
-- if there is something in the pending buffer, prepend it to the line
|
||||
if buf then line = buf .. line; buf = nil end
|
||||
@@ -766,10 +782,12 @@ local function debugger_loop(sev, svars, sfile, sline)
|
||||
status, res = stringify_results(pcall(func))
|
||||
end
|
||||
if status then
|
||||
server:send("200 OK " .. #res .. "\n")
|
||||
server:send("200 OK " .. tostring(#res) .. "\n")
|
||||
server:send(res)
|
||||
else
|
||||
server:send("401 Error in Expression " .. #res .. "\n")
|
||||
-- fix error if not set (for example, when loadstring is not present)
|
||||
if not res then res = "Unknown error" end
|
||||
server:send("401 Error in Expression " .. tostring(#res) .. "\n")
|
||||
server:send(res)
|
||||
end
|
||||
else
|
||||
@@ -782,7 +800,7 @@ local function debugger_loop(sev, svars, sfile, sline)
|
||||
if abort == nil then -- no LOAD/RELOAD allowed inside start()
|
||||
if size > 0 then server:receive(size) end
|
||||
if sfile and sline then
|
||||
server:send("201 Started " .. sfile .. " " .. sline .. "\n")
|
||||
server:send("201 Started " .. sfile .. " " .. tostring(sline) .. "\n")
|
||||
else
|
||||
server:send("200 OK 0\n")
|
||||
end
|
||||
@@ -806,7 +824,7 @@ local function debugger_loop(sev, svars, sfile, sline)
|
||||
debugee = func
|
||||
coroyield("load")
|
||||
else
|
||||
server:send("401 Error in Expression " .. #res .. "\n")
|
||||
server:send("401 Error in Expression " .. tostring(#res) .. "\n")
|
||||
server:send(res)
|
||||
end
|
||||
else
|
||||
@@ -822,9 +840,9 @@ local function debugger_loop(sev, svars, sfile, sline)
|
||||
watchescnt = watchescnt + 1
|
||||
local newidx = #watches + 1
|
||||
watches[newidx] = func
|
||||
server:send("200 OK " .. newidx .. "\n")
|
||||
server:send("200 OK " .. tostring(newidx) .. "\n")
|
||||
else
|
||||
server:send("401 Error in Expression " .. #res .. "\n")
|
||||
server:send("401 Error in Expression " .. tostring(#res) .. "\n")
|
||||
server:send(res)
|
||||
end
|
||||
else
|
||||
@@ -846,13 +864,13 @@ local function debugger_loop(sev, svars, sfile, sline)
|
||||
local ev, vars, file, line, idx_watch = coroyield()
|
||||
eval_env = vars
|
||||
if ev == events.BREAK then
|
||||
server:send("202 Paused " .. file .. " " .. line .. "\n")
|
||||
server:send("202 Paused " .. file .. " " .. tostring(line) .. "\n")
|
||||
elseif ev == events.WATCH then
|
||||
server:send("203 Paused " .. file .. " " .. line .. " " .. idx_watch .. "\n")
|
||||
server:send("203 Paused " .. file .. " " .. tostring(line) .. " " .. tostring(idx_watch) .. "\n")
|
||||
elseif ev == events.RESTART then
|
||||
-- nothing to do
|
||||
else
|
||||
server:send("401 Error in Execution " .. #file .. "\n")
|
||||
server:send("401 Error in Execution " .. tostring(#file) .. "\n")
|
||||
server:send(file)
|
||||
end
|
||||
elseif command == "STEP" then
|
||||
@@ -862,13 +880,13 @@ local function debugger_loop(sev, svars, sfile, sline)
|
||||
local ev, vars, file, line, idx_watch = coroyield()
|
||||
eval_env = vars
|
||||
if ev == events.BREAK then
|
||||
server:send("202 Paused " .. file .. " " .. line .. "\n")
|
||||
server:send("202 Paused " .. file .. " " .. tostring(line) .. "\n")
|
||||
elseif ev == events.WATCH then
|
||||
server:send("203 Paused " .. file .. " " .. line .. " " .. idx_watch .. "\n")
|
||||
server:send("203 Paused " .. file .. " " .. tostring(line) .. " " .. tostring(idx_watch) .. "\n")
|
||||
elseif ev == events.RESTART then
|
||||
-- nothing to do
|
||||
else
|
||||
server:send("401 Error in Execution " .. #file .. "\n")
|
||||
server:send("401 Error in Execution " .. tostring(#file) .. "\n")
|
||||
server:send(file)
|
||||
end
|
||||
elseif command == "OVER" or command == "OUT" then
|
||||
@@ -883,13 +901,13 @@ local function debugger_loop(sev, svars, sfile, sline)
|
||||
local ev, vars, file, line, idx_watch = coroyield()
|
||||
eval_env = vars
|
||||
if ev == events.BREAK then
|
||||
server:send("202 Paused " .. file .. " " .. line .. "\n")
|
||||
server:send("202 Paused " .. file .. " " .. tostring(line) .. "\n")
|
||||
elseif ev == events.WATCH then
|
||||
server:send("203 Paused " .. file .. " " .. line .. " " .. idx_watch .. "\n")
|
||||
server:send("203 Paused " .. file .. " " .. tostring(line) .. " " .. tostring(idx_watch) .. "\n")
|
||||
elseif ev == events.RESTART then
|
||||
-- nothing to do
|
||||
else
|
||||
server:send("401 Error in Execution " .. #file .. "\n")
|
||||
server:send("401 Error in Execution " .. tostring(#file) .. "\n")
|
||||
server:send(file)
|
||||
end
|
||||
elseif command == "BASEDIR" then
|
||||
@@ -905,8 +923,7 @@ local function debugger_loop(sev, svars, sfile, sline)
|
||||
elseif command == "SUSPEND" then
|
||||
-- do nothing; it already fulfilled its role
|
||||
elseif command == "DONE" then
|
||||
server:send("200 OK\n")
|
||||
done()
|
||||
coroyield("done")
|
||||
return -- done with all the debugging
|
||||
elseif command == "STACK" then
|
||||
-- first check if we can execute the stack command
|
||||
@@ -918,14 +935,14 @@ local function debugger_loop(sev, svars, sfile, sline)
|
||||
ev, vars = coroyield("stack")
|
||||
end
|
||||
if ev and ev ~= events.STACK then
|
||||
server:send("401 Error in Execution " .. #vars .. "\n")
|
||||
server:send("401 Error in Execution " .. tostring(#vars) .. "\n")
|
||||
server:send(vars)
|
||||
else
|
||||
local ok, res = pcall(mobdebug.dump, vars, {nocode = true, sparse = false})
|
||||
if ok then
|
||||
server:send("200 OK " .. res .. "\n")
|
||||
server:send("200 OK " .. tostring(res) .. "\n")
|
||||
else
|
||||
server:send("401 Error in Execution " .. #res .. "\n")
|
||||
server:send("401 Error in Execution " .. tostring(#res) .. "\n")
|
||||
server:send(res)
|
||||
end
|
||||
end
|
||||
@@ -934,7 +951,7 @@ local function debugger_loop(sev, svars, sfile, sline)
|
||||
if stream and mode and stream == "stdout" then
|
||||
-- assign "print" in the global environment
|
||||
local default = mode == 'd'
|
||||
genv.print = default and iobase.print or coroutine.wrap(function()
|
||||
genv.print = default and iobase.print or corowrap(function()
|
||||
-- wrapping into coroutine.wrap protects this function from
|
||||
-- being stepped through in the debugger.
|
||||
-- don't use vararg (...) as it adds a reference for its values,
|
||||
@@ -945,7 +962,7 @@ local function debugger_loop(sev, svars, sfile, sline)
|
||||
for n = 1, #tbl do
|
||||
tbl[n] = select(2, pcall(mobdebug.line, tbl[n], {nocode = true, comment = false})) end
|
||||
local file = table.concat(tbl, "\t").."\n"
|
||||
server:send("204 Output " .. stream .. " " .. #file .. "\n" .. file)
|
||||
server:send("204 Output " .. stream .. " " .. tostring(#file) .. "\n" .. file)
|
||||
end
|
||||
end)
|
||||
if not default then genv.print() end -- "fake" print to start printing loop
|
||||
@@ -963,7 +980,15 @@ local function debugger_loop(sev, svars, sfile, sline)
|
||||
end
|
||||
|
||||
local function connect(controller_host, controller_port)
|
||||
return (socket.connect4 or socket.connect)(controller_host, controller_port)
|
||||
local sock, err = socket.tcp()
|
||||
if not sock then return nil, err end
|
||||
|
||||
if sock.settimeout then sock:settimeout(mobdebug.connecttimeout) end
|
||||
local res, err = sock:connect(controller_host, tostring(controller_port))
|
||||
if sock.settimeout then sock:settimeout() end
|
||||
|
||||
if not res then return nil, err end
|
||||
return sock
|
||||
end
|
||||
|
||||
local lasthost, lastport
|
||||
@@ -980,7 +1005,7 @@ local function start(controller_host, controller_port)
|
||||
controller_port = lastport or mobdebug.port
|
||||
|
||||
local err
|
||||
server, err = (socket.connect4 or socket.connect)(controller_host, controller_port)
|
||||
server, err = mobdebug.connect(controller_host, controller_port)
|
||||
if server then
|
||||
-- correct stack depth which already has some calls on it
|
||||
-- so it doesn't go into negative when those calls return
|
||||
@@ -1034,11 +1059,11 @@ local function controller(controller_host, controller_port, scratchpad)
|
||||
|
||||
local exitonerror = not scratchpad
|
||||
local err
|
||||
server, err = (socket.connect4 or socket.connect)(controller_host, controller_port)
|
||||
server, err = mobdebug.connect(controller_host, controller_port)
|
||||
if server then
|
||||
local function report(trace, err)
|
||||
local msg = err .. "\n" .. trace
|
||||
server:send("401 Error in Execution " .. #msg .. "\n")
|
||||
server:send("401 Error in Execution " .. tostring(#msg) .. "\n")
|
||||
server:send(msg)
|
||||
return err
|
||||
end
|
||||
@@ -1062,11 +1087,13 @@ local function controller(controller_host, controller_port, scratchpad)
|
||||
else
|
||||
if status then -- normal execution is done
|
||||
break
|
||||
elseif err and not tostring(err):find(deferror) then
|
||||
elseif err and not string.find(tostring(err), deferror) then
|
||||
-- report the error back
|
||||
-- err is not necessarily a string, so convert to string to report
|
||||
report(debug.traceback(coro_debugee), tostring(err))
|
||||
if exitonerror then break end
|
||||
-- check if the debugging is done (coro_debugger is nil)
|
||||
if not coro_debugger then break end
|
||||
-- resume once more to clear the response the debugger wants to send
|
||||
-- need to use capture_vars(2) as three would be the level of
|
||||
-- the caller for controller(), but because of the tail call,
|
||||
@@ -1153,8 +1180,7 @@ local function handle(params, client, options)
|
||||
local breakpoint = client:receive()
|
||||
if not breakpoint then
|
||||
print("Program finished")
|
||||
os.exit(0, true)
|
||||
return -- use return here for those cases where os.exit() is not wanted
|
||||
return
|
||||
end
|
||||
local _, _, status = string.find(breakpoint, "^(%d+)")
|
||||
if status == "200" then
|
||||
@@ -1183,24 +1209,17 @@ local function handle(params, client, options)
|
||||
if size then
|
||||
local msg = client:receive(tonumber(size))
|
||||
print("Error in remote application: " .. msg)
|
||||
os.exit(1, true)
|
||||
return nil, nil, msg -- use return here for those cases where os.exit() is not wanted
|
||||
return nil, nil, msg
|
||||
end
|
||||
else
|
||||
print("Unknown error")
|
||||
os.exit(1, true)
|
||||
-- use return here for those cases where os.exit() is not wanted
|
||||
return nil, nil, "Debugger error: unexpected response '" .. breakpoint .. "'"
|
||||
end
|
||||
if done then break end
|
||||
end
|
||||
elseif command == "done" then
|
||||
client:send(string.upper(command) .. "\n")
|
||||
if client:receive() ~= "200 OK" then
|
||||
print("Unknown error")
|
||||
os.exit(1, true)
|
||||
return nil, nil, "Debugger error: unexpected response after 'done'"
|
||||
end
|
||||
-- no response is expected
|
||||
elseif command == "setb" or command == "asetb" then
|
||||
_, _, _, file, line = string.find(params, "^([a-z]+)%s+(.-)%s+(%d+)%s*$")
|
||||
if file and line then
|
||||
@@ -1257,15 +1276,12 @@ local function handle(params, client, options)
|
||||
print("Invalid command")
|
||||
end
|
||||
elseif command == "delallb" then
|
||||
for line, breaks in pairs(breakpoints) do
|
||||
for file, _ in pairs(breaks) do
|
||||
client:send("DELB " .. file .. " " .. line .. "\n")
|
||||
if client:receive() == "200 OK" then
|
||||
remove_breakpoint(file, line)
|
||||
else
|
||||
print("Error: breakpoint at file " .. file .. " line " .. line .. " not removed")
|
||||
end
|
||||
end
|
||||
local file, line = "*", 0
|
||||
client:send("DELB " .. file .. " " .. tostring(line) .. "\n")
|
||||
if client:receive() == "200 OK" then
|
||||
remove_breakpoint(file, line)
|
||||
else
|
||||
print("Error: all breakpoints not removed")
|
||||
end
|
||||
elseif command == "delw" then
|
||||
local _, _, index = string.find(params, "^[a-z]+%s+(%d+)%s*$")
|
||||
@@ -1306,7 +1322,7 @@ local function handle(params, client, options)
|
||||
if not file then
|
||||
_, _, file, lines = string.find(exp, "^(%S+)%s+(.+)")
|
||||
end
|
||||
client:send("LOAD " .. #lines .. " " .. file .. "\n")
|
||||
client:send("LOAD " .. tostring(#lines) .. " " .. file .. "\n")
|
||||
client:send(lines)
|
||||
else
|
||||
local file = io.open(exp, "r")
|
||||
@@ -1324,7 +1340,7 @@ local function handle(params, client, options)
|
||||
|
||||
local file = string.gsub(exp, "\\", "/") -- convert slash
|
||||
file = removebasedir(file, basedir)
|
||||
client:send("LOAD " .. #lines .. " " .. file .. "\n")
|
||||
client:send("LOAD " .. tostring(#lines) .. " " .. file .. "\n")
|
||||
if #lines > 0 then client:send(lines) end
|
||||
end
|
||||
while true do
|
||||
@@ -1451,7 +1467,11 @@ local function handle(params, client, options)
|
||||
basedir = dir
|
||||
|
||||
client:send("BASEDIR "..(remdir or dir).."\n")
|
||||
local resp = client:receive()
|
||||
local resp, err = client:receive()
|
||||
if not resp then
|
||||
print("Unknown error: "..err)
|
||||
return nil, nil, "Debugger connection closed"
|
||||
end
|
||||
local _, _, status = string.find(resp, "^(%d+)%s+%w+%s*$")
|
||||
if status == "200" then
|
||||
print("New base directory is " .. basedir)
|
||||
@@ -1486,7 +1506,9 @@ local function handle(params, client, options)
|
||||
print("exit -- exits debugger and the application")
|
||||
else
|
||||
local _, _, spaces = string.find(params, "^(%s*)$")
|
||||
if not spaces then
|
||||
if spaces then
|
||||
return nil, nil, "Empty command"
|
||||
else
|
||||
print("Invalid command")
|
||||
return nil, nil, "Invalid command"
|
||||
end
|
||||
@@ -1525,9 +1547,11 @@ local function listen(host, port)
|
||||
|
||||
while true do
|
||||
io.write("> ")
|
||||
local line = io.read("*line")
|
||||
handle(line, client)
|
||||
local file, line, err = handle(io.read("*line"), client)
|
||||
if not file and not err then break end -- completed debugging
|
||||
end
|
||||
|
||||
client:close()
|
||||
end
|
||||
|
||||
local cocreate
|
||||
@@ -1579,9 +1603,7 @@ mobdebug.coro = coro
|
||||
mobdebug.done = done
|
||||
mobdebug.pause = function() step_into = true end
|
||||
mobdebug.yield = nil -- callback
|
||||
|
||||
-- this is needed to make "require 'modebug'" to work when mobdebug
|
||||
-- module is loaded manually
|
||||
package.loaded.mobdebug = mobdebug
|
||||
mobdebug.onexit = os and os.exit or done
|
||||
mobdebug.basedir = function(b) if b then basedir = b end return basedir end
|
||||
|
||||
return mobdebug
|
||||
|
||||
@@ -10,6 +10,7 @@ local P = {
|
||||
-- Events that are marked with "return false" can return `false` to
|
||||
-- abort further processing.
|
||||
-- For `onEditorPreSave` event it means that file saving will be aborted.
|
||||
-- For `onEditorPreClose` event it means that closing an editor tab will be aborted.
|
||||
-- For `onEditorKeyDown` event it means that the key will be "eaten".
|
||||
-- For `onEditorAction` event it means that the action will not be executed.
|
||||
-- For `onFiletreeActivate` event it means that no further processing is done.
|
||||
@@ -20,6 +21,7 @@ local events = {
|
||||
onRegister = function(self) end,
|
||||
onUnRegister = function(self) end,
|
||||
onEditorLoad = function(self, editor) end,
|
||||
onEditorPreClose = function(self, editor) end, -- return false
|
||||
onEditorClose = function(self, editor) end,
|
||||
onEditorNew = function(self, editor) end,
|
||||
onEditorPreSave = function(self, editor, filepath) end, -- return false
|
||||
@@ -30,14 +32,20 @@ local events = {
|
||||
onEditorKeyDown = function(self, editor, event) end, -- return false
|
||||
onEditorCharAdded = function(self, editor, event) end, -- return false
|
||||
onEditorUserlistSelection = function(self, editor, event) end, -- return false
|
||||
onEditorUpdateUI = function(self, editor, event) end, -- return false
|
||||
onEditorPainted = function(self, editor, event) end, -- return false
|
||||
onEditorMarkerUpdate = function(self, editor, marker, line, value) end,
|
||||
onEditorUpdateUI = function(self, editor, event) end,
|
||||
onEditorPainted = function(self, editor, event) end,
|
||||
onEditorCallTip = function(self, editor, tip, value, eval) end, -- return false
|
||||
onFiletreeActivate = function(self, tree, event, item) end, -- return false
|
||||
onFiletreeLDown = function(self, tree, event, item) end,
|
||||
onFiletreeRDown = function(self, tree, event, item) end,
|
||||
onMenuEditor = function(self, menu, editor, event) end,
|
||||
onMenuEditorTab = function(self, menu, notebook, event, index) end,
|
||||
onMenuOutput = function(self, menu, editor, event) end,
|
||||
onMenuConsole = function(self, menu, editor, event) end,
|
||||
onMenuFiletree = function(self, menu, tree, event) end,
|
||||
onMenuOutline = function(self, menu, tree, event) end,
|
||||
onMenuWatch = function(self, menu, tree, event) end,
|
||||
onProjectPreLoad = function(self, project) end, -- before project is changed
|
||||
onProjectLoad = function(self, project) end, -- after project is changed
|
||||
onProjectClose = function(self, project) end,
|
||||
@@ -49,11 +57,13 @@ local events = {
|
||||
onAppFocusSet = function(self, app) end,
|
||||
onAppLoad = function(self, app) end,
|
||||
onAppClose = function(self, app) end,
|
||||
onAppDone = function(self, app) end, -- the last event right before exiting
|
||||
}
|
||||
|
||||
--[[ Uncomment this to see event names printed in the Output window
|
||||
local skipEvents = {onIdle = true, onEditorPainted = true, onEditorUpdateUI = true}
|
||||
for k in pairs(events) do
|
||||
if k:find("^on") then
|
||||
if not skipEvents[k] then
|
||||
P[k] = k:find("^onEditor")
|
||||
and function(self, ed)
|
||||
-- document can be empty for newly added documents
|
||||
@@ -107,11 +117,11 @@ local events = {
|
||||
end
|
||||
|
||||
P.onEditorPreSave = function(self, editor, filepath)
|
||||
if filepath:find("%.txt$") then
|
||||
if filepath and filepath:find("%.txt$") then
|
||||
DisplayOutputLn(self:GetFileName(), "onEditorPreSave", "Aborted saving a .txt file")
|
||||
return false
|
||||
else
|
||||
DisplayOutputLn(self:GetFileName(), "onEditorPreSave", filepath)
|
||||
DisplayOutputLn(self:GetFileName(), "onEditorPreSave", filepath or "New file")
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
34
spec/cbase.lua
Normal file
34
spec/cbase.lua
Normal file
@@ -0,0 +1,34 @@
|
||||
function CMarkSymbols(code, pos, vars)
|
||||
local idtmpl = "[A-Za-z_][A-Za-z0-9_ ]*"
|
||||
local funcdeftmpl = "("..idtmpl.."%s+%*?"..idtmpl..")%s*%(([A-Za-z0-9_ %*,]*)%)%s*%{"
|
||||
local isfndef = function(str, pos)
|
||||
local s,e,pref,cap
|
||||
while true do
|
||||
s,e,pref,cap,parms = str:find("^(%s*)"..funcdeftmpl, pos)
|
||||
if (not s) then
|
||||
s,e,pref,cap,parms = str:find("([\r\n]%s*)"..funcdeftmpl, pos)
|
||||
end
|
||||
-- skip strange parameters and things of `else if ()` variety
|
||||
if parms and #parms > 0 and not parms:find(idtmpl)
|
||||
or cap and cap:find("%sif%s*$") then
|
||||
pos = s+#pref+#cap+#parms
|
||||
else
|
||||
break
|
||||
end
|
||||
end
|
||||
if s then return s+#pref,s+#pref+#cap-1,cap end
|
||||
end
|
||||
|
||||
return coroutine.wrap(function()
|
||||
-- return a dummy token to produce faster result for quick typing
|
||||
coroutine.yield("String", "dummy", 1, {})
|
||||
while true do
|
||||
local fpos, lpos, name = isfndef(code, pos)
|
||||
if not fpos then return end
|
||||
coroutine.yield("Function", name, fpos, {}, 1)
|
||||
pos = fpos + #name
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
return nil -- not a real spec
|
||||
11
spec/cg.lua
11
spec/cg.lua
@@ -3,6 +3,7 @@
|
||||
|
||||
local funccall = "([A-Za-z_][A-Za-z0-9_]*)%s*"
|
||||
|
||||
if not CMarkSymbols then dofile "spec/cbase.lua" end
|
||||
return {
|
||||
exts = {"cg","cgh","cgfx","cgfxh",},
|
||||
lexer = wxstc.wxSTC_LEX_CPP,
|
||||
@@ -14,15 +15,7 @@ return {
|
||||
return string.find(str, funccall .. "%(")
|
||||
end,
|
||||
|
||||
isfndef = function(str)
|
||||
local l
|
||||
local s,e,cap = string.find(str,"^%s*([A-Za-z0-9_]+%s+[A-Za-z0-9_]+%s*%(.+%))")
|
||||
if (not s) then
|
||||
s,e,cap = string.find(str,"^%s*([A-Za-z0-9_]+%s+[A-Za-z0-9_]+)%s*%(")
|
||||
end
|
||||
if (cap and (string.find(cap,"^return") or string.find(cap,"else"))) then return end
|
||||
return s,e,cap,l
|
||||
end,
|
||||
marksymbols = CMarkSymbols,
|
||||
|
||||
lexerstyleconvert = {
|
||||
text = {wxstc.wxSTC_C_IDENTIFIER,},
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
|
||||
local funccall = "([A-Za-z_][A-Za-z0-9_]*)%s*"
|
||||
|
||||
if not CMarkSymbols then dofile "spec/cbase.lua" end
|
||||
return {
|
||||
exts = {"cpp", "c", "hpp", "h"},
|
||||
lexer = wxstc.wxSTC_LEX_CPP,
|
||||
@@ -14,6 +15,8 @@ return {
|
||||
return string.find(str, funccall .. "%(")
|
||||
end,
|
||||
|
||||
marksymbols = CMarkSymbols,
|
||||
|
||||
lexerstyleconvert = {
|
||||
text = {wxstc.wxSTC_C_IDENTIFIER,},
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
|
||||
local funccall = "([A-Za-z_][A-Za-z0-9_]*)%s*"
|
||||
|
||||
if not CMarkSymbols then dofile "spec/cbase.lua" end
|
||||
return {
|
||||
exts = {"glsl","vert","frag","geom","cont","eval", "glslv", "glslf"},
|
||||
lexer = wxstc.wxSTC_LEX_CPP,
|
||||
@@ -14,15 +15,7 @@ return {
|
||||
return string.find(str, funccall .. "%(")
|
||||
end,
|
||||
|
||||
isfndef = function(str)
|
||||
local l
|
||||
local s,e,cap = string.find(str,"^%s*([A-Za-z0-9_]+%s+[A-Za-z0-9_]+%s*%(.+%))")
|
||||
if (not s) then
|
||||
s,e,cap = string.find(str,"^%s*([A-Za-z0-9_]+%s+[A-Za-z0-9_]+)%s*%(")
|
||||
end
|
||||
if (cap and (string.find(cap,"^return") or string.find(cap,"else"))) then return end
|
||||
return s,e,cap,l
|
||||
end,
|
||||
marksymbols = CMarkSymbols,
|
||||
|
||||
lexerstyleconvert = {
|
||||
text = {wxstc.wxSTC_C_IDENTIFIER,},
|
||||
@@ -90,6 +83,7 @@ return {
|
||||
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
|
||||
|
||||
coherent volatile restrict readonly writeonly
|
||||
image1D image2D image3D image2DRect imageCube imageBuffer image1DArray image2DArray imageCubeArray image2DMS image2DMSArray
|
||||
@@ -120,16 +114,17 @@ return {
|
||||
uaddCarry usubBorrow umulExtended imulExtended
|
||||
bitfeldExtract bitfieldInsert bitfeldReverse bitCount
|
||||
findLSB findMSB
|
||||
dFdx dFdy fwidth
|
||||
dFdx dFdy fwidth dFdxFine dFdyFine fwidthFine dFdxCoarse dFdyCoarse fwidthCoarse
|
||||
interpolateAtCentroid interpolateAtSample interpolateAtOffset
|
||||
noise1 noise2 noise3 noise4
|
||||
EmitStreamVertex EndStreamPrimitive EmitVertex EndPrimitive
|
||||
barrier
|
||||
textureSize textureQueryLod texture textureOffset textureProj
|
||||
textureSize textureSamples textureQueryLod texture textureOffset textureProj
|
||||
textureLod textureProjOffset textureLodOffset
|
||||
texelFetchOffset texelFetch textureProjLod textureProjLodOffset
|
||||
textureGrad textureGradOffset textureProjGrad textureProjGradOffset
|
||||
textureGather textureGatherOffset
|
||||
|
||||
texture2D texture1D texture3D textureCube texture2DRect
|
||||
texture1DProj texture1DLod texture1DProjLod
|
||||
texture2DProj texture2DLod texture2DProjLod
|
||||
@@ -158,7 +153,7 @@ return {
|
||||
imageAtomicAdd imageAtomicMin imageAtomicMax
|
||||
imageAtomicIncWrap imageAtomicDecWrap imageAtomicAnd
|
||||
imageAtomicOr imageAtomixXor imageAtomicExchange
|
||||
imageAtomicCompSwap imageSize
|
||||
imageAtomicCompSwap imageSize imageSamples
|
||||
|
||||
memoryBarrier groupMemoryBarrier memoryBarrierAtomicCounter memoryBarrierShared memoryBarrierBuffer memoryBarrierImage
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
|
||||
local funccall = "([A-Za-z_][A-Za-z0-9_]*)%s*"
|
||||
|
||||
if not CMarkSymbols then dofile "spec/cbase.lua" end
|
||||
return {
|
||||
exts = {"hlsl","fx","fxh","usf",},
|
||||
lexer = wxstc.wxSTC_LEX_CPP,
|
||||
@@ -14,15 +15,7 @@ return {
|
||||
return string.find(str, funccall .. "%(")
|
||||
end,
|
||||
|
||||
isfndef = function(str)
|
||||
local l
|
||||
local s,e,cap = string.find(str,"^%s*([A-Za-z0-9_]+%s+[A-Za-z0-9_]+%s*%(.+%))")
|
||||
if (not s) then
|
||||
s,e,cap = string.find(str,"^%s*([A-Za-z0-9_]+%s+[A-Za-z0-9_]+)%s*%(")
|
||||
end
|
||||
if (cap and (string.find(cap,"^return") or string.find(cap,"else"))) then return end
|
||||
return s,e,cap,l
|
||||
end,
|
||||
marksymbols = CMarkSymbols,
|
||||
|
||||
lexerstyleconvert = {
|
||||
text = {wxstc.wxSTC_C_IDENTIFIER,},
|
||||
|
||||
200
spec/lua.lua
200
spec/lua.lua
@@ -2,7 +2,6 @@
|
||||
---------------------------------------------------------
|
||||
|
||||
local funcdef = "([A-Za-z_][A-Za-z0-9_%.%:]*)%s*"
|
||||
local funccall = "([A-Za-z_][A-Za-z0-9_]*)%s*"
|
||||
local decindent = {
|
||||
['else'] = true, ['elseif'] = true, ['until'] = true, ['end'] = true}
|
||||
local incindent = {
|
||||
@@ -25,19 +24,32 @@ local function isfndef(str)
|
||||
end
|
||||
return s,e,cap,l
|
||||
end
|
||||
|
||||
local q = EscapeMagic
|
||||
|
||||
local function ldoc(tx, typepatt)
|
||||
local varname = "([%w_]+)"
|
||||
-- <type> == ?string, ?|T1|T2
|
||||
-- anything that follows optional "|..." is ignored
|
||||
local typename = "%??"..typepatt
|
||||
-- @tparam[...] <type> <paramname>
|
||||
-- @param[type=<type>] <paramname>
|
||||
-- @string[...] <paramname>; not handled
|
||||
local t, v = tx:match("--%s*@tparam%b[]%s+"..typename.."%s+"..varname)
|
||||
if not t then -- try without optional [...] part
|
||||
t, v = tx:match("--%s*@tparam%s+"..typename.."%s+"..varname)
|
||||
end
|
||||
if not t then
|
||||
t, v = tx:match("--%s*@param%s*%[type="..typename.."%]%s+"..varname)
|
||||
end
|
||||
return t, v
|
||||
end
|
||||
|
||||
return {
|
||||
exts = {"lua", "rockspec", "wlua"},
|
||||
lexer = wxstc.wxSTC_LEX_LUA,
|
||||
apitype = "lua",
|
||||
linecomment = "--",
|
||||
sep = ".:",
|
||||
isfncall = function(str)
|
||||
return string.find(str, funccall .. "[%({'\"]")
|
||||
end,
|
||||
isfndef = isfndef,
|
||||
isdecindent = function(str)
|
||||
str = str:gsub('%-%-%[=*%[.*%]=*%]',''):gsub('%-%-.*','')
|
||||
-- this handles three different cases:
|
||||
@@ -58,12 +70,21 @@ return {
|
||||
return match and 1 or 0, match and term and 1 or 0
|
||||
end,
|
||||
isincindent = function(str)
|
||||
str = (str:gsub('%-%-%[=*%[.*%]=*%]','')
|
||||
:gsub("'.-\\'","'"):gsub("'.-'","")
|
||||
:gsub('".-\\"','"'):gsub('".-"','')
|
||||
-- remove "long" comments and escaped slashes (to process \' and \" below)
|
||||
str = str:gsub('%-%-%[=*%[.-%]=*%]',''):gsub('\\[\\\'"]','')
|
||||
while true do
|
||||
local num, sep = nil, str:match("['\"]")
|
||||
if not sep then break end
|
||||
str, num = str:gsub(sep..".-\\"..sep,sep):gsub(sep..".-"..sep,"")
|
||||
if num == 0 then break end
|
||||
end
|
||||
str = (str
|
||||
:gsub('%[=*%[.-%]=*%]','') -- remove long strings
|
||||
:gsub('%[=*%[.*','') -- remove partial long strings
|
||||
:gsub('%-%-.*','') -- strip comments after strings are processed
|
||||
:gsub("%b()","()") -- remove all function calls
|
||||
)
|
||||
|
||||
local term = str:match("^%s*(%w+)%W*")
|
||||
local terminc = term and incindent[term] and 1 or 0
|
||||
-- fix 'if' not terminated with 'then'
|
||||
@@ -86,14 +107,15 @@ return {
|
||||
|
||||
return opened - closed + func + terminc - ended
|
||||
end,
|
||||
markvars = function(code, pos, vars)
|
||||
marksymbols = function(code, pos, vars)
|
||||
local PARSE = require 'lua_parser_loose'
|
||||
local LEX = require 'lua_lexer_loose'
|
||||
local lx = LEX.lexc(code, nil, pos)
|
||||
return coroutine.wrap(function()
|
||||
local varnext = {}
|
||||
PARSE.parse_scope_resolve(lx, function(op, name, lineinfo, vars)
|
||||
PARSE.parse_scope_resolve(lx, function(op, name, lineinfo, vars, nobreak)
|
||||
if not(op == 'Id' or op == 'Statement' or op == 'Var'
|
||||
or op == 'Function' or op == 'String'
|
||||
or op == 'VarNext' or op == 'VarInside' or op == 'VarSelf'
|
||||
or op == 'FunctionCall' or op == 'Scope' or op == 'EndScope') then
|
||||
return end -- "normal" return; not interested in other events
|
||||
@@ -105,117 +127,94 @@ return {
|
||||
for _, token in pairs(varnext) do coroutine.yield(unpack(token)) end
|
||||
varnext = {}
|
||||
elseif op == 'VarNext' or op == 'VarInside' then
|
||||
table.insert(varnext, {'Var', name, lineinfo, vars, at})
|
||||
table.insert(varnext, {'Var', name, lineinfo, vars, at, nobreak})
|
||||
end
|
||||
|
||||
coroutine.yield(op, name, lineinfo, vars, at)
|
||||
coroutine.yield(op, name, lineinfo, vars, op == 'Function' and at-1 or at, nobreak)
|
||||
end, vars)
|
||||
end)
|
||||
end,
|
||||
|
||||
typeassigns = function(editor)
|
||||
local line = editor:GetCurrentLine()-1
|
||||
local maxlines = 48 -- scan up to this many lines back
|
||||
|
||||
local scopestart = {"if", "do", "while", "function", "local%s+function", "for", "else", "elseif"}
|
||||
local scopeend = {"end"}
|
||||
local iscomment = editor.spec.iscomment
|
||||
|
||||
local assigns = {}
|
||||
|
||||
-- iterate up until a line starts with scopestart
|
||||
-- always ignore lines whose first symbol is styled as comment
|
||||
local endline = line
|
||||
while (line > math.max(endline-maxlines, 0)) do
|
||||
local ls = editor:PositionFromLine(line)
|
||||
local s = bit.band(editor:GetStyleAt(ls),31)
|
||||
|
||||
if (not iscomment[s]) then
|
||||
local tx = editor:GetLine(line)
|
||||
local sstart, send
|
||||
|
||||
for _, v in ipairs(scopestart) do
|
||||
if (tx:match("^%s*"..v.."%f[^%w]")) then sstart = true end
|
||||
end
|
||||
for _, v in ipairs(scopeend) do
|
||||
if (tx:match("%f[%w]"..v.."%s*$")) then send = true end
|
||||
end
|
||||
-- if the scope starts, but doesn't end on one line, stop searching
|
||||
if sstart and not send then break end
|
||||
end
|
||||
line = line -1
|
||||
end
|
||||
local endline = editor:GetCurrentLine()-1
|
||||
local line = math.max(endline-maxlines, 0)
|
||||
|
||||
while (line <= endline) do
|
||||
local ls = editor:PositionFromLine(line)
|
||||
local s = bit.band(editor:GetStyleAt(ls),31)
|
||||
local tx = editor:GetLine(line) --= string
|
||||
local s = bit.band(editor:GetStyleAt(ls + #tx:match("^%s*") + 2),31)
|
||||
|
||||
if (not iscomment[s]) then
|
||||
local tx = editor:GetLine(line) --= string
|
||||
-- check for assignments
|
||||
local sep = editor.spec.sep
|
||||
local varname = "([%w_][%w_"..q(sep:sub(1,1)).."]*)"
|
||||
local identifier = "([%w_][%w_"..q(sep).."%s]*)"
|
||||
|
||||
-- check for assignments
|
||||
local sep = editor.spec.sep
|
||||
local varname = "([%w_][%w_"..q(sep:sub(1,1)).."]*)"
|
||||
local identifier = "([%w_][%w_"..q(sep).."%s]*)"
|
||||
-- special hint
|
||||
local typ, var = tx:match("%s*%-%-=%s*"..varname.."%s+"..identifier)
|
||||
local ldoctype, ldocvar = ldoc(tx, varname)
|
||||
if var and typ then
|
||||
assigns[var] = typ:gsub("%s","")
|
||||
elseif ldoctype and ldocvar then
|
||||
assigns[ldocvar] = ldoctype
|
||||
elseif not iscomment[s] then
|
||||
-- real assignments
|
||||
local var,typ = tx:match("%s*"..identifier.."%s*=%s*([^;]+)")
|
||||
|
||||
-- special hint
|
||||
local typ,var = tx:match("%s*%-%-=%s*"..varname.."%s+"..identifier)
|
||||
if (var and typ) then
|
||||
typ = typ:gsub("%s","")
|
||||
assigns[var] = typ
|
||||
else
|
||||
-- real assignments
|
||||
local var,typ = tx:match("%s*"..identifier.."%s*=%s*([^;]+)")
|
||||
|
||||
var = var and var:gsub("local","")
|
||||
var = var and var:gsub("%s","")
|
||||
typ = typ and typ
|
||||
:gsub("%b()","")
|
||||
:gsub("%b{}","")
|
||||
:gsub("%b[]",".0")
|
||||
-- remove comments; they may be in strings, but that's okay here
|
||||
:gsub("%-%-.*","")
|
||||
if (typ and (typ:match(",") or typ:match("%sor%s") or typ:match("%sand%s"))) then
|
||||
typ = nil
|
||||
end
|
||||
typ = typ and typ:gsub("%s","")
|
||||
typ = typ and typ:gsub(".+", function(s)
|
||||
var = var and var:gsub("local",""):gsub("%s","")
|
||||
-- handle `require` as a special case that returns a type that matches its parameter
|
||||
-- (this is without deeper analysis on loaded files and should work most of the time)
|
||||
local req = typ and typ:match("^require%s*%(?%s*['\"](.+)['\"]%s*%)?")
|
||||
typ = req or typ
|
||||
typ = (typ and typ
|
||||
:gsub("%b()","")
|
||||
:gsub("%b{}","")
|
||||
:gsub("%b[]",".0")
|
||||
-- replace concatenation with addition to avoid misidentifying types
|
||||
:gsub("%.%.+","+")
|
||||
-- remove comments; they may be in strings, but that's okay here
|
||||
:gsub("%-%-.*",""))
|
||||
if (typ and (typ:match(",") or typ:match("%sor%s") or typ:match("%sand%s"))) then
|
||||
typ = nil
|
||||
end
|
||||
typ = typ and typ:gsub("%s","")
|
||||
typ = typ and typ:gsub(".+", function(s)
|
||||
return (s:find("^'[^']*'$")
|
||||
or s:find('^"[^"]*"$')
|
||||
or s:find('^%[=*%[.*%]=*%]$')) and 'string' or s
|
||||
or s:find('^"[^"]*"$')
|
||||
or s:find('^%[=*%[.*%]=*%]$')) and 'string' or s
|
||||
end)
|
||||
|
||||
-- filter out everything that is not needed
|
||||
if typ and typ ~= 'string' -- special value for all strings
|
||||
and (not typ:match('^'..identifier..'$') -- not an identifier
|
||||
or typ:match('^%d') -- or a number
|
||||
or editor.api.tip.keys[typ] -- or a keyword
|
||||
) then
|
||||
typ = nil
|
||||
end
|
||||
-- filter out everything that is not needed
|
||||
if typ and typ ~= 'string' -- special value for all strings
|
||||
and (not typ:match('^'..identifier..'$') -- not an identifier
|
||||
or typ:match('^%d') -- or a number
|
||||
or editor.api.tip.keys[typ] -- or a keyword
|
||||
) then
|
||||
typ = nil
|
||||
end
|
||||
|
||||
if (var and typ) then
|
||||
class,func = typ:match(varname.."["..q(sep).."]"..varname)
|
||||
if (assigns[typ]) then
|
||||
assigns[var] = assigns[typ]
|
||||
elseif (func) then
|
||||
-- FIXME remove this, in favor of proper api definitions
|
||||
local added
|
||||
local funcnames = {"new","load","create"}
|
||||
for i,v in ipairs(funcnames) do
|
||||
if (func == v) then
|
||||
assigns[var] = class
|
||||
added = true
|
||||
break
|
||||
end
|
||||
if (var and typ) then
|
||||
local class,func = typ:match(varname.."["..q(sep).."]"..varname)
|
||||
if (assigns[typ] and not req) then
|
||||
assigns[var] = assigns[typ]
|
||||
elseif (func) then
|
||||
local added
|
||||
local funcnames = {"new","load","create"}
|
||||
for _,v in ipairs(funcnames) do
|
||||
if (func == v) then
|
||||
assigns[var] = class
|
||||
added = true
|
||||
break
|
||||
end
|
||||
if (not added) then
|
||||
-- let's hope autocomplete info can resolve this
|
||||
assigns[var] = typ
|
||||
end
|
||||
else
|
||||
end
|
||||
if (not added) then
|
||||
-- let's hope autocomplete info can resolve this
|
||||
assigns[var] = typ
|
||||
end
|
||||
else
|
||||
assigns[var] = typ
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -262,6 +261,7 @@ return {
|
||||
[[bit32.arshift bit32.band bit32.bnot bit32.bor bit32.btest bit32.bxor bit32.extract
|
||||
bit32.lrotate bit32.lshift bit32.replace bit32.rrotate bit32.rshift
|
||||
coroutine.create coroutine.resume coroutine.running coroutine.status coroutine.wrap coroutine.yield
|
||||
coroutine.isyieldable
|
||||
debug.debug debug.getfenv debug.gethook debug.getinfo debug.getlocal
|
||||
debug.getmetatable debug.getregistry debug.getupvalue debug.getuservalue debug.setfenv
|
||||
debug.sethook debug.setlocal debug.setmetatable debug.setupvalue debug.setuservalue
|
||||
@@ -271,12 +271,14 @@ return {
|
||||
math.abs math.acos math.asin math.atan math.atan2 math.ceil math.cos math.cosh math.deg math.exp
|
||||
math.floor math.fmod math.frexp math.ldexp math.log math.log10 math.max math.min math.modf
|
||||
math.pow math.rad math.random math.randomseed math.sin math.sinh math.sqrt math.tan math.tanh
|
||||
math.type math.tointeger math.maxinteger math.mininteger math.ult
|
||||
os.clock os.date os.difftime os.execute os.exit os.getenv os.remove os.rename os.setlocale os.time os.tmpname
|
||||
package.loadlib package.searchpath package.seeall package.config
|
||||
package.cpath package.loaded package.loaders package.path package.preload package.searchers
|
||||
string.byte string.char string.dump string.find string.format string.gmatch string.gsub string.len
|
||||
string.lower string.match string.rep string.reverse string.sub string.upper
|
||||
byte find format gmatch gsub len lower match rep reverse sub upper
|
||||
table.move, string.pack, string.unpack, string.packsize
|
||||
table.concat table.insert table.maxn table.pack table.remove table.sort table.unpack]]
|
||||
},
|
||||
}
|
||||
|
||||
@@ -38,6 +38,7 @@ astypeout = table.concat(astypeout, " ")
|
||||
|
||||
local funccall = "([A-Za-z_][A-Za-z0-9_]*)%s*"
|
||||
|
||||
if not CMarkSymbols then dofile "spec/cbase.lua" end
|
||||
return {
|
||||
exts = {"cl","ocl","clh",},
|
||||
lexer = wxstc.wxSTC_LEX_CPP,
|
||||
@@ -49,15 +50,7 @@ return {
|
||||
return string.find(str, funccall .. "%(")
|
||||
end,
|
||||
|
||||
isfndef = function(str)
|
||||
local l
|
||||
local s,e,cap = string.find(str,"^%s*([A-Za-z0-9_]+%s+[A-Za-z0-9_]+%s*%(.+%))")
|
||||
if (not s) then
|
||||
s,e,cap = string.find(str,"^%s*([A-Za-z0-9_]+%s+[A-Za-z0-9_]+)%s*%(")
|
||||
end
|
||||
if (cap and (string.find(cap,"^return") or string.find(cap,"else"))) then return end
|
||||
return s,e,cap,l
|
||||
end,
|
||||
marksymbols = CMarkSymbols,
|
||||
|
||||
lexerstyleconvert = {
|
||||
text = {wxstc.wxSTC_C_IDENTIFIER,
|
||||
|
||||
11
spec/ptx.lua
11
spec/ptx.lua
@@ -1,6 +1,7 @@
|
||||
-- author: Christoph Kubisch
|
||||
---------------------------------------------------------
|
||||
|
||||
if not CMarkSymbols then dofile "spec/cbase.lua" end
|
||||
return {
|
||||
exts = {"ptx",},
|
||||
lexer = wxstc.wxSTC_LEX_CPP,
|
||||
@@ -8,15 +9,7 @@ return {
|
||||
sep = ".",
|
||||
linecomment = "//",
|
||||
|
||||
isfndef = function(str)
|
||||
local l
|
||||
local s,e,cap = string.find(str,"^%s*([A-Za-z0-9_]+%s+[A-Za-z0-9_]+%s*%(.+%))")
|
||||
if (not s) then
|
||||
s,e,cap = string.find(str,"^%s*([A-Za-z0-9_]+%s+[A-Za-z0-9_]+)%s*%(")
|
||||
end
|
||||
if (cap and (string.find(cap,"^return") or string.find(cap,"else"))) then return end
|
||||
return s,e,cap,l
|
||||
end,
|
||||
marksymbols = CMarkSymbols,
|
||||
|
||||
lexerstyleconvert = {
|
||||
text = {wxstc.wxSTC_C_IDENTIFIER,
|
||||
|
||||
18
src/defs.lua
18
src/defs.lua
@@ -64,12 +64,6 @@ style = {
|
||||
caretlinebg = nil,
|
||||
fold = nil,
|
||||
whitespace = nil,
|
||||
|
||||
-- special, functioncall indicator
|
||||
fncall = {
|
||||
fg = {r,g,b},
|
||||
st = wxstc.wxSTC_INDIC_BOX,
|
||||
},
|
||||
}
|
||||
|
||||
-- config definition
|
||||
@@ -78,11 +72,8 @@ style = {
|
||||
-- content is optional
|
||||
-- config is loaded into existing config table
|
||||
config = {
|
||||
appname = "zbstudio", -- by default the launcher name
|
||||
|
||||
path = { -- path for tools/interpreters
|
||||
luxinia = "C:/luxbin/", -- path to luxinia exe
|
||||
projectdir = "", -- the project directory, used by some tools/interpreters
|
||||
lua = "C:/lua/lua.exe", -- path to lua exe
|
||||
},
|
||||
editor = {
|
||||
fontname = "Courier New", -- default font
|
||||
@@ -108,6 +99,8 @@ config = {
|
||||
nomousezoom = nil, -- disable zooming using mouse wheel
|
||||
autoreload = nil, -- trigger auto-reload when file is updated
|
||||
saveallonrun = nil, -- save all modified files before Run/Debug
|
||||
indentguide = true, -- show indentation guides
|
||||
backspaceunindent = true, -- unindent when backspace is used
|
||||
},
|
||||
|
||||
default = {
|
||||
@@ -155,12 +148,14 @@ config = {
|
||||
shorttip = false, -- tooltips are compact during typing
|
||||
nodynwords = false, -- no dynamic words (user entered words)
|
||||
ignorecase = false, -- ignores case when performing comparison with autocomplete list
|
||||
symbols = true, -- include local/global symbols
|
||||
startat = 2, -- start suggesting dynamic words after 2 characters
|
||||
strategy = 0,
|
||||
strategy = 2,
|
||||
-- 0: is string comparison
|
||||
-- 1: substring leading characters (camel case or _ separated)
|
||||
-- 2: leading + any correctly ordered fragments (default)
|
||||
width = 60, -- width of the tooltip text (in characters)
|
||||
maxlength = 450, -- max length of the tooltip on the screen
|
||||
},
|
||||
|
||||
arg = {}, -- command line arguments
|
||||
@@ -176,7 +171,6 @@ config = {
|
||||
|
||||
activateoutput = false, -- activate output/console on Run/Debug/Compile
|
||||
unhidewindow = false, -- to unhide a gui window
|
||||
allowinteractivescript = false, -- allow interaction in the output window
|
||||
projectautoopen = false, -- allow auto open/close files on a project switch
|
||||
autorecoverinactivity = nil, -- period of inactivity (s) for autorecover
|
||||
hidpi = false, -- HiDPI/Retina display support
|
||||
|
||||
@@ -1,10 +1,8 @@
|
||||
-- Copyright 2011-14 Paul Kulchenko, ZeroBrane LLC
|
||||
-- Copyright 2011-15 Paul Kulchenko, ZeroBrane LLC
|
||||
-- authors: Luxinia Dev (Eike Decker & Christoph Kubisch)
|
||||
---------------------------------------------------------
|
||||
|
||||
local ide = ide
|
||||
local statusBar = ide.frame.statusBar
|
||||
|
||||
local q = EscapeMagic
|
||||
|
||||
-- api loading depends on Lua interpreter
|
||||
@@ -111,24 +109,9 @@ end
|
||||
-- ToolTip and reserved words list
|
||||
-- also fixes function descriptions
|
||||
|
||||
local function formatUpToX(s, x)
|
||||
local splitstr = "([ \t]*)(%S*)([ \t]*)(\n?)"
|
||||
local t = {""}
|
||||
for prefix, word, suffix, newline in s:gmatch(splitstr) do
|
||||
if #(t[#t]) + #prefix + #word > x and #t > 0 then
|
||||
table.insert(t, word..suffix)
|
||||
else
|
||||
t[#t] = t[#t]..prefix..word..suffix
|
||||
end
|
||||
if #newline > 0 then table.insert(t, "") end
|
||||
end
|
||||
return table.concat(t, "\n")
|
||||
end
|
||||
|
||||
local function fillTips(api,apibasename)
|
||||
local apiac = api.ac
|
||||
local tclass = api.tip
|
||||
local tipwidth = math.max(20, ide.config.acandtip.width)
|
||||
|
||||
tclass.staticnames = {}
|
||||
tclass.keys = {}
|
||||
@@ -144,16 +127,17 @@ local function fillTips(api,apibasename)
|
||||
local shortfinfo = tclass.shortfinfo
|
||||
local shortfinfoclass = tclass.shortfinfoclass
|
||||
|
||||
local function traverse (tab,libname)
|
||||
local function traverse (tab, libname, format)
|
||||
if not tab.childs then return end
|
||||
format = tab.format or format
|
||||
for key,info in pairs(tab.childs) do
|
||||
local fullkey = (libname ~= "" and libname.."." or "")..key
|
||||
traverse(info, fullkey)
|
||||
traverse(info, fullkey, format)
|
||||
|
||||
if info.type == "function" or info.type == "method" or info.type == "value" then
|
||||
local frontname = (info.returns or "(?)").." "..fullkey.." "..(info.args or "(?)")
|
||||
frontname = formatUpToX(frontname:gsub("\n"," "):gsub("\t",""), tipwidth)
|
||||
local description = formatUpToX(info.description or "", tipwidth)
|
||||
frontname = frontname:gsub("\n"," "):gsub("\t","")
|
||||
local description = info.description or ""
|
||||
|
||||
-- build info
|
||||
local inf = ((info.type == "value" and "" or frontname.."\n")
|
||||
@@ -161,6 +145,10 @@ local function fillTips(api,apibasename)
|
||||
local sentence = description:match("^(.-)%. ?\n")
|
||||
local infshort = ((info.type == "value" and "" or frontname.."\n")
|
||||
..(sentence and sentence.."..." or description))
|
||||
if type(format) == 'function' then -- apply custom formatting if requested
|
||||
inf = format(fullkey, info, inf)
|
||||
infshort = format(fullkey, info, infshort)
|
||||
end
|
||||
local infshortbatch = (info.returns and info.args) and frontname or infshort
|
||||
|
||||
-- add to infoclass
|
||||
@@ -199,12 +187,12 @@ end
|
||||
local function generateAPIInfo(only)
|
||||
for i,api in pairs(apis) do
|
||||
if ((not only) or i == only) then
|
||||
fillTips(api,"",i)
|
||||
fillTips(api,"")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function UpdateAssignCache(editor)
|
||||
local function updateAssignCache(editor)
|
||||
if (editor.spec.typeassigns and not editor.assignscache) then
|
||||
local assigns = editor.spec.typeassigns(editor)
|
||||
editor.assignscache = {
|
||||
@@ -236,8 +224,19 @@ local function resolveAssign(editor,tx)
|
||||
local c
|
||||
if (assigns) then
|
||||
-- find assign
|
||||
local change = true
|
||||
local change, n, refs, stopat = true, 0, {}, os.clock() + 0.2
|
||||
while (change) do
|
||||
-- abort the check if the auto-complete is taking too long
|
||||
if n > 50 and os.clock() > stopat then
|
||||
if ide.config.acandtip.warning then
|
||||
DisplayOutputLn("Warning: Auto-complete was aborted after taking too long to complete."
|
||||
.. " Please report this warning along with the text you were typing to support@zerobrane.com.")
|
||||
end
|
||||
break
|
||||
else
|
||||
n = n + 1
|
||||
end
|
||||
|
||||
local classname = nil
|
||||
c = ""
|
||||
change = false
|
||||
@@ -254,7 +253,12 @@ local function resolveAssign(editor,tx)
|
||||
c = c..w..s
|
||||
end
|
||||
end
|
||||
-- check for loops in type assignment
|
||||
if refs[tx] then break end
|
||||
refs[tx] = c
|
||||
tx = c
|
||||
-- if there is any class duplication, abort the loop
|
||||
if classname and select(2, c:gsub(classname, classname)) > 1 then break end
|
||||
end
|
||||
else
|
||||
c = tx
|
||||
@@ -267,7 +271,7 @@ end
|
||||
function GetTipInfo(editor, content, short, fullmatch)
|
||||
if not content then return end
|
||||
|
||||
UpdateAssignCache(editor)
|
||||
updateAssignCache(editor)
|
||||
|
||||
-- try to resolve the class
|
||||
content = content:gsub("%b[]",".0")
|
||||
@@ -302,16 +306,18 @@ local function reloadAPI(only,subapis)
|
||||
end
|
||||
|
||||
function ReloadLuaAPI()
|
||||
local interpreterapi = ide.interpreter
|
||||
interpreterapi = interpreterapi and interpreterapi.api
|
||||
if (interpreterapi) then
|
||||
local apinames = {}
|
||||
for _, v in ipairs(interpreterapi) do
|
||||
apinames[v] = true
|
||||
end
|
||||
interpreterapi = apinames
|
||||
end
|
||||
reloadAPI("lua",interpreterapi)
|
||||
local interp = ide.interpreter
|
||||
local cfgapi = ide.config.api
|
||||
local fname = interp and interp.fname
|
||||
local intapi = cfgapi and fname and cfgapi[fname]
|
||||
local apinames = {}
|
||||
-- general APIs as configured
|
||||
for _, v in ipairs(type(cfgapi) == 'table' and cfgapi or {}) do apinames[v] = true end
|
||||
-- interpreter-specific APIs as configured
|
||||
for _, v in ipairs(type(intapi) == 'table' and intapi or {}) do apinames[v] = true end
|
||||
-- interpreter APIs
|
||||
for _, v in ipairs(interp and interp.api or {}) do apinames[v] = true end
|
||||
reloadAPI("lua",apinames)
|
||||
end
|
||||
|
||||
do
|
||||
@@ -385,7 +391,7 @@ function DynamicWordsReset ()
|
||||
end
|
||||
|
||||
local function getEditorLines(editor,line,numlines)
|
||||
return editor:GetTextRange(
|
||||
return editor:GetTextRangeDyn(
|
||||
editor:PositionFromLine(line),editor:PositionFromLine(line+numlines+1))
|
||||
end
|
||||
|
||||
@@ -410,7 +416,8 @@ function DynamicWordsRem(editor,content,line,numlines)
|
||||
end
|
||||
|
||||
function DynamicWordsRemoveAll(editor)
|
||||
DynamicWordsRem(editor,editor:GetText())
|
||||
if ide.config.acandtip.nodynwords then return end
|
||||
DynamicWordsRem(editor,editor:GetTextDyn())
|
||||
end
|
||||
|
||||
------------
|
||||
@@ -461,7 +468,7 @@ local function getAutoCompApiList(childs,fragment,method)
|
||||
return ret
|
||||
end
|
||||
|
||||
if cache[childs] then
|
||||
if cache[childs] and cache[childs][fragment] then
|
||||
return cache[childs][fragment]
|
||||
end
|
||||
|
||||
@@ -477,7 +484,6 @@ local function getAutoCompApiList(childs,fragment,method)
|
||||
((method and v.type ~= "value")
|
||||
or (not method and v.type ~= "method"))) then
|
||||
local used = {}
|
||||
--
|
||||
local kl = key:lower()
|
||||
for i=0,#key do
|
||||
local k = kl:sub(1,i)
|
||||
@@ -507,8 +513,7 @@ local function getAutoCompApiList(childs,fragment,method)
|
||||
return t
|
||||
end
|
||||
|
||||
-- make syntype dependent
|
||||
function CreateAutoCompList(editor,key)
|
||||
function CreateAutoCompList(editor,key,pos)
|
||||
local api = editor.api
|
||||
local tip = api.tip
|
||||
local ac = api.ac
|
||||
@@ -519,12 +524,12 @@ function CreateAutoCompList(editor,key)
|
||||
-- ignore keywords
|
||||
if tip.keys[key] then return end
|
||||
|
||||
UpdateAssignCache(editor)
|
||||
updateAssignCache(editor)
|
||||
|
||||
local tab,rest = resolveAssign(editor,key)
|
||||
local progress = tab and tab.childs
|
||||
statusBar:SetStatusText(progress and tab.classname or "",1)
|
||||
if not (progress) then return end
|
||||
ide:SetStatusFor(progress and tab.classname and ("Auto-completing '%s'..."):format(tab.classname) or "")
|
||||
if not progress then return end
|
||||
|
||||
if (tab == ac) then
|
||||
local _, krest = rest:match("([%w_]+)["..q(sep).."]([%w_]*)%s*$")
|
||||
@@ -538,33 +543,6 @@ function CreateAutoCompList(editor,key)
|
||||
rest = rest:gsub("[^%w_]","")
|
||||
end
|
||||
|
||||
local last = key:match("([%w_]+)%s*$")
|
||||
|
||||
-- build dynamic word list
|
||||
-- only if api search couldnt descend
|
||||
-- ie we couldnt find matching sub items
|
||||
local dw = ""
|
||||
if (last and #last >= (ide.config.acandtip.startat or 2)) then
|
||||
last = last:lower()
|
||||
if dynamicwords[last] then
|
||||
local list = dynamicwords[last]
|
||||
table.sort(list,function(a,b)
|
||||
local ma,mb = a:sub(1,#last)==last, b:sub(1,#last)==last
|
||||
if (ma and mb) or (not ma and not mb) then return a<b end
|
||||
return ma
|
||||
end)
|
||||
-- ignore if word == last and sole user
|
||||
for i,v in ipairs(list) do
|
||||
if (v:lower() == last and dywordentries[v] == 1) then
|
||||
table.remove(list,i)
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
dw = table.concat(list," ")
|
||||
end
|
||||
end
|
||||
|
||||
-- list from api
|
||||
local apilist = getAutoCompApiList(tab.childs or tab,rest,method)
|
||||
|
||||
@@ -588,33 +566,65 @@ function CreateAutoCompList(editor,key)
|
||||
-- handle (multiple) inheritance; add matches from the parent class/lib
|
||||
addInheritance(tab, apilist, {[tab] = true})
|
||||
|
||||
local compstr = ""
|
||||
-- include local/global variables
|
||||
if ide.config.acandtip.symbols and not key:find(q(sep)) then
|
||||
local vars, context = {}
|
||||
local tokens = editor:GetTokenList()
|
||||
for _, token in ipairs(tokens) do
|
||||
if token.fpos and pos and token.fpos > pos then break end
|
||||
if token[1] == 'Id' or token[1] == 'Var' then
|
||||
local var = token.name
|
||||
if var:find(key, 1, true) == 1
|
||||
-- skip the variable formed by what's being typed
|
||||
and (not token.fpos or not pos or token.fpos < pos-#key) then
|
||||
-- if it's a global variable, store in the auto-complete list,
|
||||
-- but if it's local, store separately as it needs to be checked
|
||||
table.insert(token.context[var] and vars or apilist, var)
|
||||
end
|
||||
context = token.context
|
||||
end
|
||||
end
|
||||
for _, var in pairs(context and vars or {}) do
|
||||
if context[var] then table.insert(apilist, var) end
|
||||
end
|
||||
end
|
||||
|
||||
-- include dynamic words
|
||||
local last = key:match("([%w_]+)%s*$")
|
||||
if (last and #last >= (ide.config.acandtip.startat or 2)) then
|
||||
last = last:lower()
|
||||
for i,v in ipairs(dynamicwords[last] or {}) do
|
||||
-- ignore if word == last and sole user
|
||||
if (v:lower() == last and dywordentries[v] == 1) then break end
|
||||
table.insert(apilist, v)
|
||||
end
|
||||
end
|
||||
|
||||
local li
|
||||
if apilist then
|
||||
if (#rest > 0) then
|
||||
local strategy = ide.config.acandtip.strategy
|
||||
|
||||
if (strategy == 2 and #apilist < 128) then
|
||||
local pat = rest:gsub(".",function(c)
|
||||
local l = c:lower()..c:upper()
|
||||
return "["..l.."]([^"..l.." ]*)"
|
||||
end)
|
||||
|
||||
local g = string.gsub
|
||||
-- when matching "ret": "ret." < "re.t" < "r.et"
|
||||
local patany = rest:gsub(".", function(c) return "["..c:lower()..c:upper().."](.-)" end)
|
||||
local patcase = rest:gsub(".", function(c) return c.."(.-)" end)
|
||||
local weights = {}
|
||||
local penalty = 0.1
|
||||
local function weight(str)
|
||||
if not weights[str] then
|
||||
local w = 0
|
||||
str:gsub(patany,function(...)
|
||||
local l = {...}
|
||||
-- penalize gaps between matches, more so at the beginning
|
||||
for n, v in ipairs(l) do w = w + #v * (1 + (#l-n)*penalty) end
|
||||
end)
|
||||
weights[str] = w + (str:find(patcase) and 0 or penalty)
|
||||
end
|
||||
return weights[str]
|
||||
end
|
||||
table.sort(apilist,function(a,b)
|
||||
local ma,mb = 0,0
|
||||
g(a,pat,function(...)
|
||||
local l = {...}
|
||||
for _, v in ipairs(l) do
|
||||
ma = ma + ((v=="") and 0 or 1)
|
||||
end
|
||||
end)
|
||||
g(b,pat,function(...)
|
||||
local l = {...}
|
||||
for _, v in ipairs(l) do
|
||||
mb = mb + ((v=="") and 0 or 1)
|
||||
end
|
||||
end)
|
||||
|
||||
local ma, mb = weight(a), weight(b)
|
||||
if (ma == mb) then return a:lower()<b:lower() end
|
||||
return ma<mb
|
||||
end)
|
||||
@@ -636,11 +646,7 @@ function CreateAutoCompList(editor,key)
|
||||
else prev = apilist[i] end
|
||||
end
|
||||
|
||||
compstr = table.concat(apilist," ")
|
||||
li = table.concat(apilist," ")
|
||||
end
|
||||
|
||||
-- concat final, list complete first
|
||||
local li = compstr .. (#compstr > 0 and #dw > 0 and " " or "") .. dw
|
||||
|
||||
return li ~= "" and (#li > 1024 and li:sub(1,1024).."..." or li) or nil
|
||||
return li and #li > 1024 and li:sub(1,1024).."..." or li
|
||||
end
|
||||
|
||||
359
src/editor/commandbar.lua
Normal file
359
src/editor/commandbar.lua
Normal file
@@ -0,0 +1,359 @@
|
||||
-- Copyright 2011-15 Paul Kulchenko, ZeroBrane LLC
|
||||
---------------------------------------------------------
|
||||
|
||||
local unpack = table.unpack or unpack
|
||||
local maxlines = 8
|
||||
local row_height = 46
|
||||
|
||||
function CommandBarShow(params)
|
||||
local onDone, onUpdate, onItem, onSelection, defaultText, selectedText =
|
||||
params.onDone, params.onUpdate, params.onItem, params.onSelection,
|
||||
params.defaultText, params.selectedText
|
||||
local row_width = ide.config.commandbar.width or 0
|
||||
if row_width < 1 then
|
||||
row_width = math.max(450, math.floor(row_width * ide:GetMainFrame():GetClientSize():GetWidth()))
|
||||
end
|
||||
|
||||
local lines = {}
|
||||
local linesnow = #lines
|
||||
local linenow = 0
|
||||
|
||||
local nb = ide:GetEditorNotebook()
|
||||
local pos = nb:GetScreenPosition()
|
||||
if pos then
|
||||
local miny
|
||||
for p = 0, nb:GetPageCount()-1 do
|
||||
local y = nb:GetPage(p):GetScreenPosition():GetY()
|
||||
-- just in case, compare with the position of the notebook itself;
|
||||
-- this is needed because the tabs that haven't been refreshed yet
|
||||
-- may report 0 as their screen position on Linux, which is incorrect.
|
||||
if y > pos:GetY() and (not miny or y < miny) then miny = y end
|
||||
end
|
||||
pos:SetX(pos:GetX()+nb:GetClientSize():GetWidth()-row_width-16)
|
||||
pos:SetY((miny or pos:GetY())+2)
|
||||
else
|
||||
pos = wx.wxDefaultPosition
|
||||
end
|
||||
|
||||
local frame = wx.wxFrame(ide:GetMainFrame(), wx.wxID_ANY, "Command Bar",
|
||||
pos, wx.wxDefaultSize,
|
||||
wx.wxFRAME_NO_TASKBAR + wx.wxFRAME_FLOAT_ON_PARENT + wx.wxNO_BORDER)
|
||||
local panel = wx.wxPanel(frame or ide:GetMainFrame(), wx.wxID_ANY,
|
||||
wx.wxDefaultPosition, wx.wxDefaultSize, wx.wxFULL_REPAINT_ON_RESIZE)
|
||||
local search = wx.wxTextCtrl(panel, wx.wxID_ANY, "\1",
|
||||
wx.wxDefaultPosition,
|
||||
-- make the text control a bit smaller on OSX
|
||||
wx.wxSize(row_width, ide.osname == 'Macintosh' and 20 or 24),
|
||||
wx.wxTE_PROCESS_ENTER + wx.wxTE_PROCESS_TAB + wx.wxNO_BORDER)
|
||||
local results = wx.wxScrolledWindow(panel, wx.wxID_ANY,
|
||||
wx.wxDefaultPosition, wx.wxSize(0, 0))
|
||||
|
||||
local style, styledef = ide.config.styles, StylesGetDefault()
|
||||
local textcolor = wx.wxColour(unpack(style.text.fg or styledef.text.fg))
|
||||
local backcolor = wx.wxColour(unpack(style.text.bg or styledef.text.bg))
|
||||
local selcolor = wx.wxColour(unpack(style.caretlinebg.bg or styledef.caretlinebg.bg))
|
||||
local pancolor = ide:GetUIManager():GetArtProvider():GetColor(wxaui.wxAUI_DOCKART_SASH_COLOUR)
|
||||
local borcolor = ide:GetUIManager():GetArtProvider():GetColor(wxaui.wxAUI_DOCKART_BORDER_COLOUR)
|
||||
|
||||
search:SetBackgroundColour(backcolor)
|
||||
search:SetForegroundColour(textcolor)
|
||||
|
||||
local nbrush = wx.wxBrush(backcolor, wx.wxSOLID)
|
||||
local sbrush = wx.wxBrush(selcolor, wx.wxSOLID)
|
||||
local bbrush = wx.wxBrush(pancolor, wx.wxSOLID)
|
||||
local lpen = wx.wxPen(borcolor, 1, wx.wxDOT)
|
||||
local bpen = wx.wxPen(borcolor, 1, wx.wxSOLID)
|
||||
|
||||
local sash = ide:GetUIManager():GetArtProvider():GetMetric(wxaui.wxAUI_DOCKART_SASH_SIZE)
|
||||
local border = sash + 2
|
||||
local hoffset = 4
|
||||
local voffset = 4
|
||||
|
||||
local topSizer = wx.wxFlexGridSizer(2, 1, -border*2, 0)
|
||||
topSizer:SetFlexibleDirection(wx.wxVERTICAL)
|
||||
topSizer:AddGrowableRow(1, 1)
|
||||
topSizer:Add(search, wx.wxSizerFlags(0):Expand():Border(wx.wxALL, border))
|
||||
topSizer:Add(results, wx.wxSizerFlags(1):Expand():Border(wx.wxALL, border))
|
||||
panel:SetSizer(topSizer)
|
||||
topSizer:Fit(frame) -- fit the frame/panel around the controls
|
||||
|
||||
local minheight = frame:GetClientSize():GetHeight()
|
||||
|
||||
local tfont = ide:GetProjectTree():GetFont()
|
||||
local ffont = (ide:GetEditor() or ide:CreateBareEditor()):GetFont()
|
||||
ffont:SetPointSize(ffont:GetPointSize()+2)
|
||||
local sfont = wx.wxFont(tfont)
|
||||
tfont:SetPointSize(tfont:GetPointSize()+2)
|
||||
search:SetFont(tfont)
|
||||
|
||||
-- make a one-time callback;
|
||||
-- needed because KILL_FOCUS handler can be called after closing window
|
||||
local function onExit(index)
|
||||
onExit = function() end
|
||||
onDone(index and lines[index], index, search:GetValue())
|
||||
frame:Close()
|
||||
end
|
||||
|
||||
local function onPaint(event)
|
||||
-- adjust the scrollbar before working with the canvas
|
||||
local _, starty = results:GetViewStart()
|
||||
if #lines ~= linesnow then
|
||||
-- adjust the starting line when the current line is the last one
|
||||
if linenow > starty+maxlines then starty = starty + 1 end
|
||||
results:SetScrollbars(1, row_height, 1, #lines, 0, starty*row_height, false)
|
||||
linesnow = #lines
|
||||
end
|
||||
|
||||
local dc = wx.wxMemoryDC(results)
|
||||
results:PrepareDC(dc)
|
||||
|
||||
local size = results:GetVirtualSize()
|
||||
local w,h = size:GetWidth(),size:GetHeight()
|
||||
local bitmap = wx.wxBitmap(w,h)
|
||||
dc:SelectObject(bitmap)
|
||||
|
||||
-- clear the background
|
||||
dc:SetBackground(nbrush)
|
||||
dc:Clear()
|
||||
|
||||
dc:SetTextForeground(textcolor)
|
||||
dc:SetBrush(sbrush)
|
||||
for r = 1, #lines do
|
||||
if r == linenow then
|
||||
dc:SetPen(wx.wxTRANSPARENT_PEN)
|
||||
dc:DrawRectangle(0, row_height*(r-1), row_width, row_height+1)
|
||||
end
|
||||
dc:SetPen(lpen)
|
||||
dc:DrawLine(hoffset, row_height*(r-1), row_width-hoffset*2, row_height*(r-1))
|
||||
|
||||
local fline, sline = onItem(lines[r])
|
||||
if fline then
|
||||
dc:SetFont(ffont)
|
||||
dc:DrawText(fline, hoffset, row_height*(r-1)+voffset)
|
||||
end
|
||||
if sline then
|
||||
dc:SetFont(sfont)
|
||||
dc:DrawText(sline, hoffset, row_height*(r-1)+row_height/2+voffset)
|
||||
end
|
||||
end
|
||||
|
||||
dc:SetPen(wx.wxNullPen)
|
||||
dc:SetBrush(wx.wxNullBrush)
|
||||
dc:SelectObject(wx.wxNullBitmap)
|
||||
dc:delete()
|
||||
|
||||
dc = wx.wxPaintDC(results)
|
||||
dc:DrawBitmap(bitmap, 0, 0, true)
|
||||
dc:delete()
|
||||
end
|
||||
|
||||
local function onPanelPaint(event)
|
||||
local dc = wx.wxBufferedPaintDC(panel)
|
||||
dc:SetBrush(bbrush)
|
||||
dc:SetPen(bpen)
|
||||
|
||||
local psize = panel:GetClientSize()
|
||||
dc:DrawRectangle(0, 0, psize:GetWidth(), psize:GetHeight())
|
||||
dc:DrawRectangle(sash+1, sash+1, psize:GetWidth()-2*(sash+1), psize:GetHeight()-2*(sash+1))
|
||||
|
||||
dc:SetPen(wx.wxNullPen)
|
||||
dc:SetBrush(wx.wxNullBrush)
|
||||
dc:delete()
|
||||
end
|
||||
|
||||
local linewas -- line that was reported when updated
|
||||
local function onTextUpdated(event)
|
||||
local text = search:GetValue()
|
||||
lines = onUpdate(text)
|
||||
linenow = #text > 0 and #lines > 0 and 1 or 0
|
||||
linewas = nil
|
||||
|
||||
local size = frame:GetClientSize()
|
||||
local height = minheight + row_height*math.min(maxlines,#lines)
|
||||
if height ~= size:GetHeight() then
|
||||
results:SetScrollbars(1, 1, 1, 1, 0, 0, false)
|
||||
size:SetHeight(height)
|
||||
frame:SetClientSize(size)
|
||||
end
|
||||
|
||||
results:Refresh()
|
||||
end
|
||||
|
||||
local function onKeyDown(event)
|
||||
local keycode = event:GetKeyCode()
|
||||
if keycode == wx.WXK_RETURN then
|
||||
onExit(linenow)
|
||||
return
|
||||
elseif event:GetModifiers() ~= wx.wxMOD_NONE then
|
||||
event:Skip()
|
||||
return
|
||||
elseif keycode == wx.WXK_UP then
|
||||
if linesnow > 0 then
|
||||
linenow = linenow - 1
|
||||
if linenow <= 0 then linenow = linesnow end
|
||||
end
|
||||
elseif keycode == wx.WXK_DOWN then
|
||||
if linesnow > 0 then
|
||||
linenow = linenow % linesnow + 1
|
||||
end
|
||||
elseif keycode == wx.WXK_PAGEDOWN then
|
||||
if linesnow > 0 then
|
||||
linenow = linenow + maxlines
|
||||
if linenow > linesnow then linenow = linesnow end
|
||||
end
|
||||
elseif keycode == wx.WXK_PAGEUP then
|
||||
if linesnow > 0 then
|
||||
linenow = linenow - maxlines
|
||||
if linenow <= 0 then linenow = 1 end
|
||||
end
|
||||
elseif keycode == wx.WXK_ESCAPE then
|
||||
onExit(false)
|
||||
return
|
||||
else
|
||||
event:Skip()
|
||||
return
|
||||
end
|
||||
|
||||
local _, starty = results:GetViewStart()
|
||||
if linenow < starty+1 then results:Scroll(-1, linenow-1)
|
||||
elseif linenow > starty+maxlines then results:Scroll(-1, linenow-maxlines) end
|
||||
results:Refresh()
|
||||
end
|
||||
|
||||
local function onMouseLeftDown(event)
|
||||
local pos = event:GetPosition()
|
||||
local _, y = results:CalcUnscrolledPosition(pos.x, pos.y)
|
||||
onExit(math.floor(y / row_height)+1)
|
||||
end
|
||||
|
||||
local function onIdle(event)
|
||||
if linewas == linenow then return end
|
||||
linewas = linenow
|
||||
if linenow == 0 then return end
|
||||
|
||||
-- save the selection/insertion point as it's reset on Linux (wxwidgets 2.9.5)
|
||||
local ip = search:GetInsertionPoint()
|
||||
local f, t = search:GetSelection()
|
||||
|
||||
-- this may set focus to a different object/tab,
|
||||
-- so disable the focus event and then set the focus back
|
||||
search:SetEvtHandlerEnabled(false)
|
||||
onSelection(lines[linenow], search:GetValue())
|
||||
search:SetFocus()
|
||||
search:SetEvtHandlerEnabled(true)
|
||||
if ide.osname == 'Unix' then
|
||||
search:SetInsertionPoint(ip)
|
||||
search:SetSelection(f, t)
|
||||
end
|
||||
end
|
||||
|
||||
frame:Connect(wx.wxEVT_CLOSE_WINDOW, function() frame:Destroy() end)
|
||||
|
||||
panel:Connect(wx.wxEVT_PAINT, onPanelPaint)
|
||||
panel:Connect(wx.wxEVT_ERASE_BACKGROUND, function() end)
|
||||
panel:Connect(wx.wxEVT_IDLE, onIdle)
|
||||
|
||||
results:Connect(wx.wxEVT_PAINT, onPaint)
|
||||
results:Connect(wx.wxEVT_LEFT_DOWN, onMouseLeftDown)
|
||||
results:Connect(wx.wxEVT_ERASE_BACKGROUND, function() end)
|
||||
|
||||
search:SetFocus()
|
||||
search:Connect(wx.wxEVT_KEY_DOWN, onKeyDown)
|
||||
search:Connect(wx.wxEVT_COMMAND_TEXT_UPDATED, onTextUpdated)
|
||||
search:Connect(wx.wxEVT_COMMAND_TEXT_ENTER, function() onExit(linenow) end)
|
||||
search:Connect(wx.wxEVT_KILL_FOCUS, function() onExit() end)
|
||||
|
||||
frame:Show(true)
|
||||
frame:Update()
|
||||
frame:Refresh()
|
||||
|
||||
search:SetValue((defaultText or "")..(selectedText or ""))
|
||||
search:SetSelection(#(defaultText or ""), -1)
|
||||
end
|
||||
|
||||
local sep = "[/\\%-_ ]+"
|
||||
local weights = {onegram = 0.1, digram = 0.4, trigram = 0.5}
|
||||
local cache = {}
|
||||
local missing = 3 -- penalty for missing symbols (1 missing == N matching)
|
||||
local casemismatch = 0.9 -- score for case mismatch (%% of full match)
|
||||
local function score(p, v)
|
||||
local function ngrams(str, num, low, needcache)
|
||||
local key = str..'\1'..num
|
||||
if cache[key] then return unpack(cache[key]) end
|
||||
|
||||
local t, l, p = {}, {}, 0
|
||||
for i = 1, #str-num+1 do
|
||||
local pair = str:sub(i, i+num-1)
|
||||
p = p + (t[pair] and 0 or 1)
|
||||
if low and pair:find('%u') then l[pair:lower()] = casemismatch end
|
||||
t[pair] = 1
|
||||
end
|
||||
if needcache then cache[key] = {t, p, l} end
|
||||
return t, p, l
|
||||
end
|
||||
|
||||
local function overlap(pattern, value, num)
|
||||
local ph, ps = ngrams(pattern, num, false, true)
|
||||
local vh, vs, vl = ngrams(value, num, true)
|
||||
if ps + vs == 0 then return 0 end
|
||||
|
||||
local is = 0 -- intersection of two sets of ngrams
|
||||
for k in pairs(ph) do is = is + (vh[k] or vl[k:lower()] or 0) end
|
||||
return is / (ps + vs) - (num == 1 and missing * (ps - is) / (ps + vs) or 0)
|
||||
end
|
||||
|
||||
local key = p..'\2'..v
|
||||
if not cache[key] then
|
||||
local score = weights.onegram * overlap(p, v, 1)
|
||||
if score > 0 then -- don't bother with those that can't even score 1grams
|
||||
p = ' '..(p:gsub(sep, ' '))
|
||||
v = ' '..(v:gsub(sep, ' '))
|
||||
score = score + weights.digram * overlap(p, v, 2)
|
||||
score = score + weights.trigram * overlap(' '..p, ' '..v, 3)
|
||||
end
|
||||
cache[key] = 2 * 100 * score
|
||||
end
|
||||
return cache[key]
|
||||
end
|
||||
|
||||
function CommandBarScoreItems(t, pattern, limit)
|
||||
local r, plen = {}, #pattern
|
||||
local maxp = 0
|
||||
local num = 0
|
||||
local prefilter = ide.config.commandbar and ide.config.commandbar.prefilter
|
||||
-- anchor for 1-2 symbol patterns to speed up search
|
||||
local needanchor = prefilter and prefilter * 4 <= #t and plen <= 2
|
||||
local filter = prefilter and prefilter <= #t
|
||||
-- expand `abc` into `a.*b.*c`, but limit the prefix to avoid penalty for `s.*s.*s.*....`
|
||||
and pattern:gsub("[^%w_]+",""):sub(1,4):lower():gsub(".", "%1.*"):gsub("%.%*$","")
|
||||
or nil
|
||||
for _, v in ipairs(t) do
|
||||
if #v >= plen then
|
||||
local match = filter and v:lower():find(filter)
|
||||
-- check if the current name needs to be prefiltered or anchored (for better performance);
|
||||
-- if it needs to be anchored, then anchor it at the beginning of the string or the word
|
||||
if not filter or (match and (not needanchor or match == 1 or v:find("^[%p%s]", match-1))) then
|
||||
local p = score(pattern, v)
|
||||
maxp = math.max(p, maxp)
|
||||
if p > 1 and p > maxp / 4 then
|
||||
num = num + 1
|
||||
r[num] = {v, p}
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
table.sort(r, function(a, b) return a[2] > b[2] end)
|
||||
-- limit the list to be displayed
|
||||
-- `r[limit+1] = nil` is not desired as the resulting table may be sorted incorrectly
|
||||
if tonumber(limit) and limit < #r then
|
||||
local tmp = r
|
||||
r = {}
|
||||
for i = 1, limit do r[i] = tmp[i] end
|
||||
end
|
||||
return r
|
||||
end
|
||||
|
||||
ide:AddPackage('core.commandbar', {
|
||||
-- reset ngram cache when switching projects to conserve memory
|
||||
onProjectLoad = function() cache = {} end
|
||||
})
|
||||
@@ -40,10 +40,14 @@ local function findUnusedEditor()
|
||||
end
|
||||
|
||||
function LoadFile(filePath, editor, file_must_exist, skipselection)
|
||||
local filePath = wx.wxFileName(filePath)
|
||||
filePath = filePath:gsub("%s+$","")
|
||||
filePath = wx.wxFileName(filePath)
|
||||
filePath:Normalize() -- make it absolute and remove all .. and . if possible
|
||||
filePath = filePath:GetFullPath()
|
||||
|
||||
-- if the file name is empty or is a directory, don't do anything
|
||||
if filePath == '' or wx.wxDirExists(filePath) then return nil end
|
||||
|
||||
-- prevent files from being reopened again
|
||||
if (not editor) then
|
||||
local doc = ide:FindDocument(filePath)
|
||||
@@ -57,56 +61,73 @@ function LoadFile(filePath, editor, file_must_exist, skipselection)
|
||||
end
|
||||
end
|
||||
|
||||
-- if not opened yet, try open now
|
||||
local file_text = FileRead(filePath)
|
||||
if file_text then
|
||||
if GetConfigIOFilter("input") then
|
||||
file_text = GetConfigIOFilter("input")(filePath,file_text)
|
||||
end
|
||||
elseif file_must_exist then
|
||||
return nil
|
||||
end
|
||||
local filesize = FileSize(filePath)
|
||||
if not filesize and file_must_exist then return nil end
|
||||
|
||||
local current = editor and editor:GetCurrentPos()
|
||||
editor = editor or findUnusedEditor() or CreateEditor()
|
||||
|
||||
editor:Freeze()
|
||||
editor:SetupKeywords(GetFileExt(filePath))
|
||||
editor:MarkerDeleteAll(-1)
|
||||
|
||||
-- remove BOM from UTF-8 encoded files; store BOM to add back when saving
|
||||
if filesize then editor:Allocate(filesize) end
|
||||
editor:SetTextDyn("")
|
||||
editor.bom = string.char(0xEF,0xBB,0xBF)
|
||||
if file_text and editor:GetCodePage() == wxstc.wxSTC_CP_UTF8
|
||||
and file_text:find("^"..editor.bom) then
|
||||
file_text = file_text:gsub("^"..editor.bom, "")
|
||||
else
|
||||
-- set to 'false' as checks for nil on wxlua objects may fail at run-time
|
||||
editor.bom = false
|
||||
end
|
||||
editor:SetText(file_text or "")
|
||||
|
||||
-- check the editor as it can be empty if the file has malformed UTF8;
|
||||
-- skip binary files with unknown extensions as they may have any sequences;
|
||||
-- can't show them anyway.
|
||||
if file_text and #file_text > 0 and #(editor:GetText()) == 0
|
||||
and (editor.spec ~= ide.specs.none or not isBinary(file_text)) then
|
||||
local replacement, invalid = "\022"
|
||||
file_text, invalid = FixUTF8(file_text, replacement)
|
||||
if #invalid > 0 then
|
||||
editor:AppendText(file_text)
|
||||
local lastline = nil
|
||||
for _, n in ipairs(invalid) do
|
||||
local line = editor:LineFromPosition(n)
|
||||
if line ~= lastline then
|
||||
DisplayOutputLn(("%s:%d: %s")
|
||||
:format(filePath, line+1, TR("Replaced an invalid UTF8 character with %s."):format(replacement)))
|
||||
lastline = line
|
||||
local inputfilter = GetConfigIOFilter("input")
|
||||
local file_text
|
||||
ide:PushStatus("")
|
||||
FileRead(filePath, 1024*1024, function(s)
|
||||
if not file_text then
|
||||
-- remove BOM from UTF-8 encoded files; store BOM to add back when saving
|
||||
if s and editor:GetCodePage() == wxstc.wxSTC_CP_UTF8 and s:find("^"..editor.bom) then
|
||||
s = s:gsub("^"..editor.bom, "")
|
||||
else
|
||||
-- set to 'false' as checks for nil on wxlua objects may fail at run-time
|
||||
editor.bom = false
|
||||
end
|
||||
file_text = s
|
||||
end
|
||||
if inputfilter then s = inputfilter(filePath, s) end
|
||||
local expected = editor:GetLength() + #s
|
||||
editor:AppendTextDyn(s)
|
||||
-- if the length is not as expected, then either it's a binary file or invalid UTF8
|
||||
if editor:GetLength() ~= expected then
|
||||
-- skip binary files with unknown extensions as they may have any sequences
|
||||
-- when using Raw methods, this can only happen for binary files (that include \0 chars)
|
||||
if editor.useraw or editor.spec == ide.specs.none and IsBinary(s) then
|
||||
DisplayOutputLn(("%s: %s"):format(filePath,
|
||||
TR("Binary file is shown as read-only as it is only partially loaded.")))
|
||||
file_text = ''
|
||||
editor:SetReadOnly(true)
|
||||
return false
|
||||
end
|
||||
|
||||
-- handle invalid UTF8 characters
|
||||
-- fix: doesn't handle characters split by callback buffer
|
||||
local replacement, invalid = "\022"
|
||||
s, invalid = FixUTF8(s, replacement)
|
||||
if #invalid > 0 then
|
||||
editor:AppendTextDyn(s)
|
||||
local lastline = nil
|
||||
for _, n in ipairs(invalid) do
|
||||
local line = editor:LineFromPosition(n)
|
||||
if line ~= lastline then
|
||||
DisplayOutputLn(("%s:%d: %s"):format(filePath, line+1,
|
||||
TR("Replaced an invalid UTF8 character with %s."):format(replacement)))
|
||||
lastline = line
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
if filesize and filesize > 0 then
|
||||
ide:PopStatus()
|
||||
ide:PushStatus(TR("%s%% loaded..."):format(math.floor(100*editor:GetLength()/filesize)))
|
||||
end
|
||||
end)
|
||||
ide:PopStatus()
|
||||
|
||||
editor:Colourise(0, -1)
|
||||
editor:ResetTokenList() -- reset list of tokens if this is a reused editor
|
||||
editor:Thaw()
|
||||
|
||||
local edcfg = ide.config.editor
|
||||
@@ -127,7 +148,7 @@ function LoadFile(filePath, editor, file_must_exist, skipselection)
|
||||
DisplayOutputLn(("%s: %s")
|
||||
:format(filePath, TR("Mixed end-of-line encodings detected.")..' '..
|
||||
TR("Use '%s' to show line endings and '%s' to convert them.")
|
||||
:format("GetEditor():SetViewEOL(1)", "GetEditor():ConvertEOLs(GetEditor():GetEOLMode())")))
|
||||
:format("ide:GetEditor():SetViewEOL(1)", "ide:GetEditor():ConvertEOLs(ide:GetEditor():GetEOLMode())")))
|
||||
elseif foundcrlf then
|
||||
editor:SetEOLMode(wxstc.wxSTC_EOL_CRLF)
|
||||
elseif foundlf then
|
||||
@@ -137,18 +158,19 @@ function LoadFile(filePath, editor, file_must_exist, skipselection)
|
||||
end
|
||||
|
||||
editor:EmptyUndoBuffer()
|
||||
local id = editor:GetId()
|
||||
if openDocuments[id] then -- existing editor; switch to the tab
|
||||
notebook:SetSelection(openDocuments[id].index)
|
||||
local doc = ide:GetDocument(editor)
|
||||
if doc then -- existing editor; switch to the tab
|
||||
notebook:SetSelection(doc:GetTabIndex())
|
||||
else -- the editor has not been added to notebook
|
||||
AddEditor(editor, wx.wxFileName(filePath):GetFullName()
|
||||
doc = AddEditor(editor, wx.wxFileName(filePath):GetFullName()
|
||||
or ide.config.default.fullname)
|
||||
end
|
||||
openDocuments[id].filePath = filePath
|
||||
openDocuments[id].fileName = wx.wxFileName(filePath):GetFullName()
|
||||
openDocuments[id].modTime = GetFileModTime(filePath)
|
||||
doc.filePath = filePath
|
||||
doc.fileName = wx.wxFileName(filePath):GetFullName()
|
||||
doc.modTime = GetFileModTime(filePath)
|
||||
|
||||
SetDocumentModified(id, false, openDocuments[id].fileName)
|
||||
doc:SetModified(false)
|
||||
doc:SetTabText(doc:GetFileName())
|
||||
|
||||
-- activate the editor; this is needed for those cases when the editor is
|
||||
-- created from some other element, for example, from a project tree.
|
||||
@@ -163,13 +185,9 @@ function ReLoadFile(filePath, editor, ...)
|
||||
if not editor then return LoadFile(filePath, editor, ...) end
|
||||
|
||||
-- save all markers
|
||||
local maskany = 2^24-1
|
||||
local markers = {}
|
||||
local line = editor:MarkerNext(0, maskany)
|
||||
while line > -1 do
|
||||
table.insert(markers, {line, editor:MarkerGet(line), editor:GetLine(line)})
|
||||
line = editor:MarkerNext(line + 1, maskany)
|
||||
end
|
||||
local markers = editor:MarkerGetAll()
|
||||
-- add the current line content to retrieved markers to compare later if needed
|
||||
for _, marker in ipairs(markers) do marker[3] = editor:GetLineDyn(marker[1]) end
|
||||
local lines = editor:GetLineCount()
|
||||
|
||||
-- load file into the same editor
|
||||
@@ -177,6 +195,9 @@ function ReLoadFile(filePath, editor, ...)
|
||||
if not editor then return end
|
||||
|
||||
if #markers > 0 then -- restore all markers
|
||||
-- delete all markers as they may be restored by a different mechanism,
|
||||
-- which may be limited to only restoring some markers
|
||||
editor:MarkerDeleteAll(-1)
|
||||
local samelinecount = lines == editor:GetLineCount()
|
||||
for _, marker in ipairs(markers) do
|
||||
local line, mask, text = unpack(marker)
|
||||
@@ -186,13 +207,14 @@ function ReLoadFile(filePath, editor, ...)
|
||||
else
|
||||
-- find matching line in the surrounding area and restore marker there
|
||||
for _, l in ipairs({line, line-1, line-2, line+1, line+2}) do
|
||||
if text == editor:GetLine(l) then
|
||||
if text == editor:GetLineDyn(l) then
|
||||
editor:MarkerAddSet(l, mask)
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
PackageEventHandle("onEditorMarkerUpdate", editor)
|
||||
end
|
||||
|
||||
return editor
|
||||
@@ -200,8 +222,12 @@ end
|
||||
|
||||
function ActivateFile(filename)
|
||||
local name, suffix, value = filename:match('(.+):([lLpP]?)(%d+)$')
|
||||
if name and not wx.wxFileExists(filename) and wx.wxFileExists(name) then
|
||||
filename = name
|
||||
if name and not wx.wxFileExists(filename) then filename = name end
|
||||
|
||||
-- check if non-existing file can be loaded from the project folder;
|
||||
-- this is to handle: "project file" used on the command line
|
||||
if not wx.wxFileExists(filename) and not wx.wxIsAbsolutePath(filename) then
|
||||
filename = GetFullPathIfExists(ide:GetProject(), filename) or filename
|
||||
end
|
||||
|
||||
local opened = LoadFile(filename, nil, true)
|
||||
@@ -213,19 +239,11 @@ function ActivateFile(filename)
|
||||
return opened
|
||||
end
|
||||
|
||||
local function getExtsString()
|
||||
local knownexts = ""
|
||||
for _,spec in pairs(ide.specs) do
|
||||
if (spec.exts) then
|
||||
for _,ext in ipairs(spec.exts) do
|
||||
knownexts = knownexts.."*."..ext..";"
|
||||
end
|
||||
end
|
||||
end
|
||||
knownexts = knownexts:len() > 0 and knownexts:sub(1,-2) or nil
|
||||
|
||||
local exts = knownexts and TR("Known Files").." ("..knownexts..")|"..knownexts.."|" or ""
|
||||
return exts..TR("All files").." (*)|*"
|
||||
local function getExtsString(ed)
|
||||
local exts = ed and ed.spec and ed.spec.exts or {}
|
||||
local knownexts = #exts > 0 and "*."..table.concat(exts, ";*.") or nil
|
||||
return (knownexts and TR("Known Files").." ("..knownexts..")|"..knownexts.."|" or "")
|
||||
.. TR("All files").." (*)|*"
|
||||
end
|
||||
|
||||
function ReportError(msg)
|
||||
@@ -238,11 +256,13 @@ function OpenFile(event)
|
||||
local fileDialog = wx.wxFileDialog(ide.frame, TR("Open file"),
|
||||
(path and GetPathWithSep(path) or FileTreeGetDir() or ""),
|
||||
"",
|
||||
getExtsString(),
|
||||
wx.wxFD_OPEN + wx.wxFD_FILE_MUST_EXIST)
|
||||
getExtsString(editor),
|
||||
wx.wxFD_OPEN + wx.wxFD_FILE_MUST_EXIST + wx.wxFD_MULTIPLE)
|
||||
if fileDialog:ShowModal() == wx.wxID_OK then
|
||||
if not LoadFile(fileDialog:GetPath(), nil, true) then
|
||||
ReportError(TR("Unable to load file '%s'."):format(fileDialog:GetPath()))
|
||||
for _, path in ipairs(fileDialog:GetPaths()) do
|
||||
if not LoadFile(path, nil, true) then
|
||||
ReportError(TR("Unable to load file '%s'."):format(path))
|
||||
end
|
||||
end
|
||||
end
|
||||
fileDialog:Destroy()
|
||||
@@ -268,8 +288,8 @@ function SaveFile(editor, filePath)
|
||||
end
|
||||
end
|
||||
|
||||
local st = (editor:GetCodePage() == wxstc.wxSTC_CP_UTF8 and editor.bom or "")
|
||||
.. editor:GetText()
|
||||
local st = ((editor:GetCodePage() == wxstc.wxSTC_CP_UTF8 and editor.bom or "")
|
||||
.. editor:GetTextDyn())
|
||||
if GetConfigIOFilter("output") then
|
||||
st = GetConfigIOFilter("output")(filePath,st)
|
||||
end
|
||||
@@ -277,12 +297,14 @@ function SaveFile(editor, filePath)
|
||||
local ok, err = FileWrite(filePath, st)
|
||||
if ok then
|
||||
editor:SetSavePoint()
|
||||
local id = editor:GetId()
|
||||
openDocuments[id].filePath = filePath
|
||||
openDocuments[id].fileName = wx.wxFileName(filePath):GetFullName()
|
||||
openDocuments[id].modTime = GetFileModTime(filePath)
|
||||
SetDocumentModified(id, false, openDocuments[id].fileName)
|
||||
local doc = ide:GetDocument(editor)
|
||||
doc.filePath = filePath
|
||||
doc.fileName = wx.wxFileName(filePath):GetFullName()
|
||||
doc.modTime = GetFileModTime(filePath)
|
||||
doc:SetModified(false)
|
||||
doc:SetTabText(doc:GetFileName())
|
||||
SetAutoRecoveryMark()
|
||||
FileTreeMarkSelected(filePath)
|
||||
|
||||
PackageEventHandle("onEditorSave", editor)
|
||||
|
||||
@@ -323,7 +345,7 @@ function SaveFileAs(editor)
|
||||
fn:GetPath(wx.wxPATH_GET_VOLUME),
|
||||
fn:GetFullName(),
|
||||
-- specify the current extension plus all other extensions based on specs
|
||||
(ext and #ext > 0 and "*."..ext.."|*."..ext.."|" or "")..getExtsString(),
|
||||
(ext and #ext > 0 and "*."..ext.."|*."..ext.."|" or "")..getExtsString(editor),
|
||||
wx.wxFD_SAVE)
|
||||
|
||||
if fileDialog:ShowModal() == wx.wxID_OK then
|
||||
@@ -337,12 +359,12 @@ function SaveFileAs(editor)
|
||||
|
||||
if cansave and SaveFile(editor, filePath) then
|
||||
SetEditorSelection() -- update title of the editor
|
||||
FileTreeMarkSelected(filePath)
|
||||
if ext ~= GetFileExt(filePath) then
|
||||
-- new extension, so setup new keywords and re-apply indicators
|
||||
editor:ClearDocumentStyle() -- remove styles from the document
|
||||
editor:SetupKeywords(GetFileExt(filePath))
|
||||
IndicateAll(editor)
|
||||
IndicateFunctionsOnly(editor)
|
||||
MarkupStyle(editor)
|
||||
end
|
||||
saved = true
|
||||
@@ -426,6 +448,11 @@ end
|
||||
function ClosePage(selection)
|
||||
local editor = GetEditor(selection)
|
||||
local id = editor:GetId()
|
||||
|
||||
if PackageEventHandle("onEditorPreClose", editor) == false then
|
||||
return false
|
||||
end
|
||||
|
||||
if SaveModifiedDialog(editor, true) ~= wx.wxID_CANCEL then
|
||||
DynamicWordsRemoveAll(editor)
|
||||
local debugger = ide.debugger
|
||||
@@ -445,7 +472,9 @@ function ClosePage(selection)
|
||||
|
||||
-- disable full screen if the last tab is closed
|
||||
if not (notebook:GetSelection() >= 0) then ShowFullScreen(false) end
|
||||
return true
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
function CloseAllPagesExcept(selection)
|
||||
@@ -501,62 +530,13 @@ function SaveOnExit(allow_cancel)
|
||||
-- if all documents have been saved or refused to save, then mark those that
|
||||
-- are still modified as not modified (they don't need to be saved)
|
||||
-- to keep their tab names correct
|
||||
for id, document in pairs(openDocuments) do
|
||||
if document.isModified then SetDocumentModified(id, false) end
|
||||
for _, document in pairs(openDocuments) do
|
||||
if document.isModified then document:SetModified(false) end
|
||||
end
|
||||
|
||||
return true
|
||||
end
|
||||
|
||||
-- circle through "fold all" => "hide base lines" => "unfold all"
|
||||
function FoldSome()
|
||||
local editor = GetEditor()
|
||||
editor:Colourise(0, -1) -- update doc's folding info
|
||||
local foldall = false -- at least on header unfolded => fold all
|
||||
local hidebase = false -- at least one base is visible => hide all
|
||||
|
||||
for ln = 0, editor.LineCount - 1 do
|
||||
local foldRaw = editor:GetFoldLevel(ln)
|
||||
local foldLvl = foldRaw % 4096
|
||||
local foldHdr = (math.floor(foldRaw / 8192) % 2) == 1
|
||||
|
||||
-- at least one header is expanded
|
||||
foldall = foldall or (foldHdr and editor:GetFoldExpanded(ln))
|
||||
|
||||
-- at least one base can be hidden
|
||||
hidebase = hidebase or (
|
||||
not foldHdr
|
||||
and ln > 1 -- first line can't be hidden, so ignore it
|
||||
and foldLvl == wxstc.wxSTC_FOLDLEVELBASE
|
||||
and bit.band(foldRaw, wxstc.wxSTC_FOLDLEVELWHITEFLAG) == 0
|
||||
and editor:GetLineVisible(ln))
|
||||
end
|
||||
|
||||
-- shows lines; this doesn't change fold status for folded lines
|
||||
if not foldall and not hidebase then editor:ShowLines(0, editor.LineCount-1) end
|
||||
|
||||
for ln = 0, editor.LineCount-1 do
|
||||
local foldRaw = editor:GetFoldLevel(ln)
|
||||
local foldLvl = foldRaw % 4096
|
||||
local foldHdr = (math.floor(foldRaw / 8192) % 2) == 1
|
||||
|
||||
if foldall then
|
||||
if foldHdr and editor:GetFoldExpanded(ln) then
|
||||
editor:ToggleFold(ln)
|
||||
end
|
||||
elseif hidebase then
|
||||
if not foldHdr and (foldLvl == wxstc.wxSTC_FOLDLEVELBASE) then
|
||||
editor:HideLines(ln, ln)
|
||||
end
|
||||
else -- unfold all
|
||||
if foldHdr and not editor:GetFoldExpanded(ln) then
|
||||
editor:ToggleFold(ln)
|
||||
end
|
||||
end
|
||||
end
|
||||
editor:EnsureCaretVisible()
|
||||
end
|
||||
|
||||
function SetAllEditorsReadOnly(enable)
|
||||
for _, document in pairs(openDocuments) do
|
||||
document.editor:SetReadOnly(enable)
|
||||
@@ -569,6 +549,7 @@ end
|
||||
function ClearAllCurrentLineMarkers()
|
||||
for _, document in pairs(openDocuments) do
|
||||
document.editor:MarkerDeleteAll(CURRENT_LINE_MARKER)
|
||||
document.editor:Refresh() -- needed for background markers that don't get refreshed (wx2.9.5)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -586,12 +567,10 @@ function CompileProgram(editor, params)
|
||||
}
|
||||
local doc = ide:GetDocument(editor)
|
||||
local filePath = doc:GetFilePath() or doc:GetFileName()
|
||||
local func, err = loadstring(StripShebang(editor:GetText()), '@'..filePath)
|
||||
local func, err = loadstring(StripShebang(editor:GetTextDyn()), '@'..filePath)
|
||||
local line = not func and tonumber(err:match(":(%d+)%s*:")) or nil
|
||||
|
||||
if not params.keepoutput and ide.frame.menuBar:IsChecked(ID_CLEAROUTPUT) then
|
||||
ClearOutput()
|
||||
end
|
||||
if not params.keepoutput then ClearOutput() end
|
||||
|
||||
compileTotal = compileTotal + 1
|
||||
if func then
|
||||
@@ -601,11 +580,12 @@ function CompileProgram(editor, params)
|
||||
:format(compileOk/compileTotal*100, compileOk, compileTotal))
|
||||
end
|
||||
else
|
||||
ActivateOutput()
|
||||
DisplayOutputLn(TR("Compilation error").." "..TR("on line %d"):format(line)..":")
|
||||
DisplayOutputLn((err:gsub("\n$", "")))
|
||||
-- check for escapes invalid in LuaJIT/Lua 5.2 that are allowed in Lua 5.1
|
||||
if err:find('invalid escape sequence') then
|
||||
local s = editor:GetLine(line-1)
|
||||
local s = editor:GetLineDyn(line-1)
|
||||
local cleaned = s
|
||||
:gsub('\\[abfnrtv\\"\']', ' ')
|
||||
:gsub('(\\x[0-9a-fA-F][0-9a-fA-F])', function(s) return string.rep(' ', #s) end)
|
||||
@@ -729,7 +709,7 @@ end
|
||||
|
||||
function SetOpenTabs(params)
|
||||
local recovery, nametab = LoadSafe("return "..params.recovery)
|
||||
if not recovery then
|
||||
if not recovery or not nametab then
|
||||
DisplayOutputLn(TR("Can't process auto-recovery record; invalid format: %s."):format(nametab))
|
||||
return
|
||||
end
|
||||
@@ -737,20 +717,21 @@ function SetOpenTabs(params)
|
||||
DisplayOutputLn(TR("Found auto-recovery record and restored saved session."))
|
||||
end
|
||||
for _,doc in ipairs(nametab) do
|
||||
-- check for missing file is no content is stored
|
||||
-- check for missing file if no content is stored
|
||||
if doc.filepath and not doc.content and not wx.wxFileExists(doc.filepath) then
|
||||
DisplayOutputLn(TR("File '%s' is missing and can't be recovered.")
|
||||
:format(doc.filepath))
|
||||
else
|
||||
local editor = doc.filepath and LoadFile(doc.filepath,nil,true,true) or NewFile(doc.filename)
|
||||
local opendoc = openDocuments[editor:GetId()]
|
||||
local editor = (doc.filepath and LoadFile(doc.filepath,nil,true,true)
|
||||
or findUnusedEditor() or NewFile(doc.filename))
|
||||
local opendoc = ide:GetDocument(editor)
|
||||
if doc.content then
|
||||
editor:SetText(doc.content)
|
||||
editor:SetTextDyn(doc.content)
|
||||
if doc.filepath and opendoc.modTime and doc.modified < opendoc.modTime:GetTicks() then
|
||||
DisplayOutputLn(TR("File '%s' has more recent timestamp than restored '%s'; please review before saving.")
|
||||
:format(doc.filepath, doc.tabname))
|
||||
:format(doc.filepath, opendoc:GetTabText()))
|
||||
end
|
||||
SetDocumentModified(editor:GetId(), true)
|
||||
opendoc:SetModified(true)
|
||||
end
|
||||
editor:GotoPosDelayed(doc.cursorpos or 0)
|
||||
end
|
||||
@@ -762,21 +743,23 @@ end
|
||||
local function getOpenTabs()
|
||||
local opendocs = {}
|
||||
for _, document in pairs(ide.openDocuments) do
|
||||
local editor = document:GetEditor()
|
||||
table.insert(opendocs, {
|
||||
filename = document.fileName,
|
||||
filepath = document.filePath,
|
||||
tabname = notebook:GetPageText(document.index),
|
||||
modified = document.modTime and document.modTime:GetTicks(), -- get number of seconds
|
||||
content = document.isModified and document.editor:GetText() or nil,
|
||||
id = document.index, cursorpos = document.editor:GetCurrentPos()})
|
||||
filename = document:GetFileName(),
|
||||
filepath = document:GetFilePath(),
|
||||
tabname = document:GetTabText(),
|
||||
modified = document:GetModTime() and document:GetModTime():GetTicks(), -- get number of seconds
|
||||
content = document:IsModified() and editor:GetTextDyn() or nil,
|
||||
id = document:GetTabIndex(),
|
||||
cursorpos = editor:GetCurrentPos()})
|
||||
end
|
||||
|
||||
-- to keep tab order
|
||||
table.sort(opendocs, function(a,b) return (a.id < b.id) end)
|
||||
|
||||
local id = GetEditor()
|
||||
id = id and id:GetId()
|
||||
return opendocs, {index = (id and openDocuments[id].index or 0)}
|
||||
local ed = GetEditor()
|
||||
local doc = ed and ide:GetDocument(ed)
|
||||
return opendocs, {index = (doc and doc:GetTabIndex() or 0)}
|
||||
end
|
||||
|
||||
function SetAutoRecoveryMark()
|
||||
@@ -816,8 +799,7 @@ local function saveAutoRecovery(force)
|
||||
ide.settings:Flush()
|
||||
end
|
||||
ide.session.lastsaved = now
|
||||
ide.frame.statusBar:SetStatusText(
|
||||
TR("Saved auto-recover at %s."):format(os.date("%H:%M:%S")), 1)
|
||||
ide:SetStatus(TR("Saved auto-recover at %s."):format(os.date("%H:%M:%S")))
|
||||
end
|
||||
|
||||
local function fastWrap(func, ...)
|
||||
@@ -829,9 +811,9 @@ local function fastWrap(func, ...)
|
||||
SetEditorSelection = SES
|
||||
end
|
||||
|
||||
function StoreRestoreProjectTabs(curdir, newdir)
|
||||
function StoreRestoreProjectTabs(curdir, newdir, intfname)
|
||||
local win = ide.osname == 'Windows'
|
||||
local interpreter = ide.interpreter.fname
|
||||
local interpreter = intfname or ide.interpreter.fname
|
||||
local current, closing, restore = notebook:GetSelection(), 0, false
|
||||
|
||||
if ide.osname ~= 'Macintosh' then notebook:Freeze() end
|
||||
@@ -874,8 +856,9 @@ function StoreRestoreProjectTabs(curdir, newdir)
|
||||
fastWrap(SetOpenFiles, files, {index = #files + notebook:GetPageCount()})
|
||||
end
|
||||
|
||||
if params and params.interpreter then
|
||||
ProjectSetInterpreter(params.interpreter) -- set the interpreter
|
||||
-- either interpreter is chosen for the project or the default value is set
|
||||
if (params and params.interpreter) or (not params and ide.config.interpreter) then
|
||||
ProjectSetInterpreter(params and params.interpreter or ide.config.interpreter)
|
||||
end
|
||||
|
||||
if ide.osname ~= 'Macintosh' then notebook:Thaw() end
|
||||
@@ -936,9 +919,12 @@ local function closeWindow(event)
|
||||
frame.uimgr:UnInit()
|
||||
frame:Hide() -- hide the main frame while the IDE exits
|
||||
|
||||
if ide.session.timer then ide.session.timer:Stop() end
|
||||
-- stop all the timers
|
||||
for _, timer in pairs(ide.timers) do timer:Stop() end
|
||||
|
||||
event:Skip()
|
||||
|
||||
PackageEventHandle("onAppDone")
|
||||
end
|
||||
frame:Connect(wx.wxEVT_CLOSE_WINDOW, closeWindow)
|
||||
|
||||
@@ -954,7 +940,6 @@ frame:Connect(wx.wxEVT_TIMER, function() saveAutoRecovery() end)
|
||||
-- tickets: http://trac.wxwidgets.org/ticket/14142
|
||||
-- and http://trac.wxwidgets.org/ticket/14269)
|
||||
|
||||
local infocus
|
||||
ide.editorApp:Connect(wx.wxEVT_SET_FOCUS, function(event)
|
||||
if ide.exitingProgram then return end
|
||||
|
||||
@@ -962,8 +947,10 @@ ide.editorApp:Connect(wx.wxEVT_SET_FOCUS, function(event)
|
||||
if win then
|
||||
local class = win:GetClassInfo():GetClassName()
|
||||
-- don't set focus on the main frame or toolbar
|
||||
if infocus and (class == 'wxAuiToolBar' or class == 'wxFrame') then
|
||||
pcall(function() infocus:SetFocus() end)
|
||||
if ide.infocus and (class == 'wxAuiToolBar' or class == 'wxFrame') then
|
||||
-- check if the window is shown before returning focus to it,
|
||||
-- as it may lead to a recursion in event handlers on OSX (wxwidgets 2.9.5).
|
||||
pcall(function() if ide:IsWindowShown(ide.infocus) then ide.infocus:SetFocus() end end)
|
||||
return
|
||||
end
|
||||
|
||||
@@ -983,43 +970,50 @@ ide.editorApp:Connect(wx.wxEVT_SET_FOCUS, function(event)
|
||||
parent = parent:GetParent()
|
||||
end
|
||||
if mainwin then
|
||||
if infocus and infocus ~= win and ide.osname == 'Macintosh' then
|
||||
if ide.infocus and ide.infocus ~= win and ide.osname == 'Macintosh' then
|
||||
-- kill focus on the control that had the focus as wxwidgets on OSX
|
||||
-- doesn't do it: http://trac.wxwidgets.org/ticket/14142;
|
||||
-- wrap into pcall in case the window is already deleted
|
||||
local ev = wx.wxFocusEvent(wx.wxEVT_KILL_FOCUS)
|
||||
pcall(function() infocus:GetEventHandler():ProcessEvent(ev) end)
|
||||
pcall(function() ide.infocus:GetEventHandler():ProcessEvent(ev) end)
|
||||
end
|
||||
infocus = win
|
||||
ide.infocus = win
|
||||
end
|
||||
end
|
||||
|
||||
event:Skip()
|
||||
end)
|
||||
|
||||
local updateInterval = 250 -- time in ms
|
||||
wx.wxUpdateUIEvent.SetUpdateInterval(updateInterval)
|
||||
|
||||
ide.editorApp:Connect(wx.wxEVT_ACTIVATE_APP,
|
||||
function(event)
|
||||
if not ide.exitingProgram then
|
||||
if ide.osname == 'Macintosh' and infocus and event:GetActive() then
|
||||
if ide.osname == 'Macintosh' and ide.infocus and event:GetActive() then
|
||||
-- restore focus to the last element that received it;
|
||||
-- wrap into pcall in case the element has disappeared
|
||||
-- while the application was out of focus
|
||||
pcall(function() infocus:SetFocus() end)
|
||||
pcall(function() if ide:IsWindowShown(ide.infocus) then ide.infocus:SetFocus() end end)
|
||||
end
|
||||
|
||||
local active = event:GetActive()
|
||||
-- save auto-recovery record when making the app inactive
|
||||
if not event:GetActive() then saveAutoRecovery(true) end
|
||||
if not active then saveAutoRecovery(true) end
|
||||
|
||||
local event = event:GetActive() and "onAppFocusSet" or "onAppFocusLost"
|
||||
PackageEventHandle(event, ide.editorApp)
|
||||
-- disable UI refresh when app is inactive, but only when not running
|
||||
wx.wxUpdateUIEvent.SetUpdateInterval(
|
||||
(active or ide:GetLaunchedProcess()) and updateInterval or -1)
|
||||
|
||||
PackageEventHandle(active and "onAppFocusSet" or "onAppFocusLost", ide.editorApp)
|
||||
end
|
||||
event:Skip()
|
||||
end)
|
||||
|
||||
if ide.config.autorecoverinactivity then
|
||||
ide.session.timer = wx.wxTimer(frame)
|
||||
ide.timers.session = wx.wxTimer(frame)
|
||||
-- check at least 5s to be never more than 5s off
|
||||
ide.session.timer:Start(math.min(5, ide.config.autorecoverinactivity)*1000)
|
||||
ide.timers.session:Start(math.min(5, ide.config.autorecoverinactivity)*1000)
|
||||
end
|
||||
|
||||
function PaneFloatToggle(window)
|
||||
@@ -1033,3 +1027,28 @@ function PaneFloatToggle(window)
|
||||
end
|
||||
uimgr:Update()
|
||||
end
|
||||
|
||||
local cma, cman = 0, 1
|
||||
frame:Connect(wx.wxEVT_IDLE,
|
||||
function(event)
|
||||
local debugger = ide.debugger
|
||||
if (debugger.update) then debugger.update() end
|
||||
if (debugger.scratchpad) then DebuggerRefreshScratchpad() end
|
||||
if IndicateIfNeeded() then event:RequestMore(true) end
|
||||
PackageEventHandleOnce("onIdleOnce", event)
|
||||
PackageEventHandle("onIdle", event)
|
||||
|
||||
-- process onidle events if any
|
||||
if #ide.onidle > 0 then table.remove(ide.onidle)() end
|
||||
if #ide.onidle > 0 then event:RequestMore(true) end -- request more if anything left
|
||||
|
||||
if ide.config.showmemoryusage then
|
||||
local mem = collectgarbage("count")
|
||||
local alpha = math.max(tonumber(ide.config.showmemoryusage) or 0, 1/cman)
|
||||
cman = cman + 1
|
||||
cma = alpha * mem + (1-alpha) * cma
|
||||
ide:SetStatus(("cur: %sKb; avg: %sKb"):format(math.floor(mem), math.floor(cma)))
|
||||
end
|
||||
|
||||
event:Skip() -- let other EVT_IDLE handlers to work on the event
|
||||
end)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
-- Copyright 2011-14 Paul Kulchenko, ZeroBrane LLC
|
||||
-- Copyright 2011-15 Paul Kulchenko, ZeroBrane LLC
|
||||
-- Original authors: Lomtik Software (J. Winwood & John Labenski)
|
||||
-- Luxinia Dev (Eike Decker & Christoph Kubisch)
|
||||
-- Integration with MobDebug
|
||||
@@ -18,24 +18,16 @@ debugger.portnumber = ide.config.debugger.port or mobdebug.port -- the port # to
|
||||
debugger.watchCtrl = nil -- the watch ctrl that shows watch information
|
||||
debugger.stackCtrl = nil -- the stack ctrl that shows stack information
|
||||
debugger.toggleview = {
|
||||
bottomnotebook = true, -- output/console is "on" by default
|
||||
stackpanel = false, watchpanel = false, toolbar = false }
|
||||
debugger.needrefresh = {} -- track components that may need a refresh
|
||||
debugger.hostname = ide.config.debugger.hostname or (function()
|
||||
local hostname = socket.dns.gethostname()
|
||||
return hostname and socket.dns.toip(hostname) and hostname or "localhost"
|
||||
end)()
|
||||
debugger.imglist = ide:CreateImageList("STACK", "VALUE-CALL", "VALUE-LOCAL", "VALUE-UP")
|
||||
|
||||
local image = { STACK = 0, LOCAL = 1, UPVALUE = 2 }
|
||||
|
||||
do
|
||||
local getBitmap = (ide.app.createbitmap or wx.wxArtProvider.GetBitmap)
|
||||
local size = wx.wxSize(16,16)
|
||||
local imglist = wx.wxImageList(16,16)
|
||||
imglist:Add(getBitmap("GO-FORWARD", "OTHER", size)) -- 0 = stack call
|
||||
imglist:Add(getBitmap("LIST-VIEW", "OTHER", size)) -- 1 = local variables
|
||||
imglist:Add(getBitmap("REPORT-VIEW", "OTHER", size)) -- 2 = upvalues
|
||||
debugger.imglist = imglist
|
||||
end
|
||||
|
||||
local notebook = ide.frame.notebook
|
||||
|
||||
local CURRENT_LINE_MARKER = StylesGetMarker("currentline")
|
||||
@@ -47,9 +39,9 @@ local activate = {CHECKONLY = 1, NOREPORT = 2}
|
||||
|
||||
local function serialize(value, options) return mobdebug.line(value, options) end
|
||||
|
||||
local stackmaxlength = ide.config.debugger.stackmaxlength or 400
|
||||
local stackmaxnum = ide.config.debugger.stackmaxnum or 400
|
||||
local stackmaxlevel = ide.config.debugger.stackmaxlevel or 3
|
||||
local stackmaxlength = ide.config.debugger.maxdatalength
|
||||
local stackmaxnum = ide.config.debugger.maxdatanum
|
||||
local stackmaxlevel = ide.config.debugger.maxdatalevel
|
||||
local params = {comment = false, nocode = true, maxlevel = stackmaxlevel, maxnum = stackmaxnum}
|
||||
|
||||
local function fixUTF8(...)
|
||||
@@ -74,8 +66,9 @@ local function updateWatchesSync(onlyitem)
|
||||
local watchCtrl = debugger.watchCtrl
|
||||
local pane = ide.frame.uimgr:GetPane("watchpanel")
|
||||
local shown = watchCtrl and (pane:IsOk() and pane:IsShown() or not pane:IsOk() and watchCtrl:IsShown())
|
||||
if shown and debugger.server and not debugger.running
|
||||
and not debugger.scratchpad and not (debugger.options or {}).noeval then
|
||||
local canupdate = (debugger.server and not debugger.running and not debugger.scratchpad
|
||||
and not (debugger.options or {}).noeval)
|
||||
if shown and canupdate then
|
||||
local bgcl = watchCtrl:GetBackgroundColour()
|
||||
local hicl = wx.wxColour(math.floor(bgcl:Red()*.9),
|
||||
math.floor(bgcl:Green()*.9), math.floor(bgcl:Blue()*.9))
|
||||
@@ -96,7 +89,7 @@ local function updateWatchesSync(onlyitem)
|
||||
watchCtrl:SetItemValueIfExpandable(item, nil)
|
||||
else
|
||||
if #values == 0 then values = {'nil'} end
|
||||
local ok, res = LoadSafe("return "..values[1])
|
||||
local _, res = LoadSafe("return "..values[1])
|
||||
watchCtrl:SetItemValueIfExpandable(item, res)
|
||||
end
|
||||
|
||||
@@ -123,6 +116,8 @@ local function updateWatchesSync(onlyitem)
|
||||
if onlyitem then break end
|
||||
item = watchCtrl:GetNextSibling(item)
|
||||
end
|
||||
elseif not shown and canupdate then
|
||||
debugger.needrefresh.watches = true
|
||||
end
|
||||
end
|
||||
|
||||
@@ -133,8 +128,8 @@ local function updateStackSync()
|
||||
local stackCtrl = debugger.stackCtrl
|
||||
local pane = ide.frame.uimgr:GetPane("stackpanel")
|
||||
local shown = stackCtrl and (pane:IsOk() and pane:IsShown() or not pane:IsOk() and stackCtrl:IsShown())
|
||||
if shown and debugger.server and not debugger.running
|
||||
and not debugger.scratchpad then
|
||||
local canupdate = debugger.server and not debugger.running and not debugger.scratchpad
|
||||
if shown and canupdate then
|
||||
local stack, _, err = debugger.stack()
|
||||
if not stack or #stack == 0 then
|
||||
stackCtrl:DeleteAll()
|
||||
@@ -184,7 +179,7 @@ local function updateStackSync()
|
||||
local value, comment = val[1], fixUTF8(trimToMaxLength(tostring(val[2])))
|
||||
local text = ("%s = %s%s"):
|
||||
format(name, fixUTF8(trimToMaxLength(serialize(value, params))),
|
||||
simpleType[type(value)] and "" or (" --[["..comment.."]]"))
|
||||
(simpleType[type(value)] or not val[2]) and "" or (" --[["..comment.."]]"))
|
||||
local item = stackCtrl:AppendItem(callitem, text, image.LOCAL)
|
||||
stackCtrl:SetItemValueIfExpandable(item, value)
|
||||
end
|
||||
@@ -194,7 +189,7 @@ local function updateStackSync()
|
||||
local value, comment = val[1], fixUTF8(trimToMaxLength(tostring(val[2])))
|
||||
local text = ("%s = %s%s"):
|
||||
format(name, fixUTF8(trimToMaxLength(serialize(value, params))),
|
||||
simpleType[type(value)] and "" or (" --[["..comment.."]]"))
|
||||
(simpleType[type(value)] or not val[2]) and "" or (" --[["..comment.."]]"))
|
||||
local item = stackCtrl:AppendItem(callitem, text, image.UPVALUE)
|
||||
stackCtrl:SetItemValueIfExpandable(item, value)
|
||||
end
|
||||
@@ -205,12 +200,14 @@ local function updateStackSync()
|
||||
stackCtrl:EnsureVisible(stackCtrl:GetFirstChild(root))
|
||||
stackCtrl:SetScrollPos(wx.wxHORIZONTAL, 0, true)
|
||||
stackCtrl:Thaw()
|
||||
elseif not shown and canupdate then
|
||||
debugger.needrefresh.stack = true
|
||||
end
|
||||
end
|
||||
|
||||
local function updateStackAndWatches()
|
||||
-- check if the debugger is running and may be waiting for a response.
|
||||
-- allow that request to finish, otherwise updateWatchesSync() does nothing.
|
||||
-- allow that request to finish, otherwise this function does nothing.
|
||||
if debugger.running then debugger.update() end
|
||||
if debugger.server and not debugger.running then
|
||||
copas.addthread(function() updateStackSync() updateWatchesSync() end)
|
||||
@@ -219,14 +216,29 @@ end
|
||||
|
||||
local function updateWatches(item)
|
||||
-- check if the debugger is running and may be waiting for a response.
|
||||
-- allow that request to finish, otherwise updateWatchesSync() does nothing.
|
||||
-- allow that request to finish, otherwise this function does nothing.
|
||||
if debugger.running then debugger.update() end
|
||||
if debugger.server and not debugger.running then
|
||||
copas.addthread(function() updateWatchesSync(item) end)
|
||||
end
|
||||
end
|
||||
|
||||
local function updateStack()
|
||||
-- check if the debugger is running and may be waiting for a response.
|
||||
-- allow that request to finish, otherwise this function does nothing.
|
||||
if debugger.running then debugger.update() end
|
||||
if debugger.server and not debugger.running then
|
||||
copas.addthread(function() updateStackSync() end)
|
||||
end
|
||||
end
|
||||
|
||||
local function debuggerToggleViews(show)
|
||||
-- don't toggle if the current state is the same as the new one
|
||||
local shown = debugger.toggleview.shown
|
||||
if (show and shown) or (not show and not shown) then return end
|
||||
|
||||
debugger.toggleview.shown = nil
|
||||
|
||||
local mgr = ide.frame.uimgr
|
||||
local refresh = false
|
||||
for view, needed in pairs(debugger.toggleview) do
|
||||
@@ -248,10 +260,11 @@ local function debuggerToggleViews(show)
|
||||
end
|
||||
end
|
||||
if refresh then mgr:Update() end
|
||||
if show then debugger.toggleview.shown = true end
|
||||
end
|
||||
|
||||
local function killClient()
|
||||
if (debugger.pid) then
|
||||
if (debugger.pid and wx.wxProcess.Exists(debugger.pid)) then
|
||||
-- using SIGTERM for some reason kills not only the debugee process,
|
||||
-- but also some system processes, which leads to a blue screen crash
|
||||
-- (at least on Windows Vista SP2)
|
||||
@@ -262,8 +275,8 @@ local function killClient()
|
||||
DisplayOutputLn(TR("Unable to stop program (pid: %d), code %d.")
|
||||
:format(debugger.pid, ret))
|
||||
end
|
||||
debugger.pid = nil
|
||||
end
|
||||
debugger.pid = nil
|
||||
end
|
||||
|
||||
local function activateDocument(file, line, activatehow)
|
||||
@@ -299,12 +312,12 @@ local function activateDocument(file, line, activatehow)
|
||||
-- when checking for the content remove all newlines as they may be
|
||||
-- reported differently from the original by the Lua engine.
|
||||
if document.filePath and fileName:SameAs(wx.wxFileName(document.filePath))
|
||||
or content and content:gsub("[\n\r]","") == editor:GetText():gsub("[\n\r]","") then
|
||||
or content and content:gsub("[\n\r]","") == editor:GetTextDyn():gsub("[\n\r]","") then
|
||||
ClearAllCurrentLineMarkers()
|
||||
if line then
|
||||
if line == 0 then -- special case; find the first executable line
|
||||
line = math.huge
|
||||
local func = loadstring(editor:GetText())
|
||||
local func = loadstring(editor:GetTextDyn())
|
||||
if func then -- .activelines == {[3] = true, [4] = true, ...}
|
||||
for l in pairs(debug.getinfo(func, "L").activelines) do
|
||||
if l < line then line = l end
|
||||
@@ -313,7 +326,18 @@ local function activateDocument(file, line, activatehow)
|
||||
if line == math.huge then line = 1 end
|
||||
end
|
||||
local line = line - 1 -- editor line operations are zero-based
|
||||
if debugger.runtocursor then
|
||||
local ed, ln = unpack(debugger.runtocursor)
|
||||
if ed:GetId() == editor:GetId() and ln == line then
|
||||
DebuggerToggleBreakpoint(ed, ln)
|
||||
debugger.runtocursor = nil
|
||||
end
|
||||
end
|
||||
editor:MarkerAdd(line, CURRENT_LINE_MARKER)
|
||||
editor:Refresh() -- needed for background markers that don't get refreshed (wx2.9.5)
|
||||
|
||||
-- expand fold if the activated line is in a folded fragment
|
||||
if not editor:GetLineVisible(line) then editor:ToggleFold(editor:GetFoldParent(line)) end
|
||||
|
||||
-- found and marked what we are looking for;
|
||||
-- don't need to activate with CHECKONLY (this assumes line is given)
|
||||
@@ -401,7 +425,7 @@ end
|
||||
|
||||
debugger.shell = function(expression, isstatement)
|
||||
-- check if the debugger is running and may be waiting for a response.
|
||||
-- allow that request to finish, otherwise updateWatchesSync() does nothing.
|
||||
-- allow that request to finish, otherwise this function does nothing.
|
||||
if debugger.running then debugger.update() end
|
||||
if debugger.server and not debugger.running
|
||||
and (not debugger.scratchpad or debugger.scratchpad.paused) then
|
||||
@@ -441,7 +465,7 @@ debugger.shell = function(expression, isstatement)
|
||||
if #values == 0 and (forceexpression or not isstatement) then
|
||||
values = {'nil'}
|
||||
end
|
||||
DisplayShell(fixUTF8(unpack(values)))
|
||||
DisplayShell(unpack(values))
|
||||
end
|
||||
|
||||
-- refresh Stack and Watch windows if executed a statement (and no err)
|
||||
@@ -526,8 +550,11 @@ debugger.listen = function(start)
|
||||
end
|
||||
DisplayOutputLn(TR("Debugger server started at %s:%d.")
|
||||
:format(debugger.hostname, debugger.portnumber))
|
||||
|
||||
copas.autoclose = false
|
||||
copas.addserver(server, function (skt)
|
||||
-- pull any pending data not processed yet
|
||||
if debugger.running then debugger.update() end
|
||||
if debugger.server then
|
||||
DisplayOutputLn(TR("Refused a request to start a new debugging session as there is one in progress already."))
|
||||
return
|
||||
@@ -561,9 +588,10 @@ debugger.listen = function(start)
|
||||
debugger.stats = {line = 0}
|
||||
debugger.missing = {}
|
||||
debugger.editormap = {}
|
||||
debugger.runtocursor = nil
|
||||
|
||||
local wxfilepath = GetEditorFileAndCurInfo()
|
||||
local startfile = options.startwith
|
||||
local startfile = ide:GetProjectStartFile() or options.startwith
|
||||
or (wxfilepath and wxfilepath:GetFullPath())
|
||||
|
||||
if not startfile then
|
||||
@@ -627,10 +655,14 @@ debugger.listen = function(start)
|
||||
.." "..TR("Compilation error")
|
||||
..":\n"..err)
|
||||
return debugger.terminate()
|
||||
elseif options.runstart and not debugger.scratchpad
|
||||
and stoppedAtBreakpoint(file, line) then
|
||||
activateDocument(file, line)
|
||||
options.runstart = false
|
||||
elseif options.runstart and not debugger.scratchpad then
|
||||
if stoppedAtBreakpoint(file, line) then
|
||||
activateDocument(file, line)
|
||||
options.runstart = false
|
||||
end
|
||||
elseif file and line then
|
||||
DisplayOutputLn(TR("Debugging suspended at '%s:%s' (couldn't activate the file).")
|
||||
:format(file, line))
|
||||
end
|
||||
elseif not (options.run or debugger.scratchpad) then
|
||||
local file, line, err = debugger.loadfile(startfile)
|
||||
@@ -639,7 +671,7 @@ debugger.listen = function(start)
|
||||
-- with start() method, which can't load new files
|
||||
-- if file and line are set, this indicates option #2
|
||||
if err then
|
||||
DisplayOutputLn(TR("Can't debug the script in the active editor window.")
|
||||
DisplayOutputLn(TR("Can't start debugging for '%s'."):format(startfile)
|
||||
.." "..TR("Compilation error")
|
||||
..":\n"..err)
|
||||
return debugger.terminate()
|
||||
@@ -677,9 +709,8 @@ debugger.listen = function(start)
|
||||
end
|
||||
|
||||
if not activated then
|
||||
DisplayOutputLn(TR("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.")
|
||||
:format(file))
|
||||
return debugger.terminate()
|
||||
DisplayOutputLn(TR("Debugging suspended at '%s:%s' (couldn't activate the file).")
|
||||
:format(file, line))
|
||||
end
|
||||
|
||||
-- debugger may still be available for scratchpad,
|
||||
@@ -687,7 +718,11 @@ debugger.listen = function(start)
|
||||
debugger.scratchable = ide.interpreter.scratchextloop ~= nil
|
||||
else
|
||||
debugger.scratchable = true
|
||||
activateDocument(startfile, 0) -- find the appropriate line
|
||||
local activated = activateDocument(startfile, 0) -- find the appropriate line
|
||||
if not activated then
|
||||
DisplayOutputLn(TR("Debugging suspended at '%s:%s' (couldn't activate the file).")
|
||||
:format(startfile, '?'))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -713,6 +748,12 @@ debugger.listen = function(start)
|
||||
activateDocument(file, line)
|
||||
end
|
||||
end
|
||||
|
||||
-- request attention if the debugging is stopped
|
||||
if not debugger.running then RequestAttention() end
|
||||
-- refresh toolbar and menus in case the main app is not active
|
||||
ide:GetMainFrame():UpdateWindowUI(wx.wxUPDATE_UI_FROMIDLE)
|
||||
ide:GetToolBar():UpdateWindowUI(wx.wxUPDATE_UI_FROMIDLE)
|
||||
end)
|
||||
debugger.listening = server
|
||||
end
|
||||
@@ -720,16 +761,13 @@ end
|
||||
local function nameOutputTab(name)
|
||||
local nbk = ide.frame.bottomnotebook
|
||||
local index = nbk:GetPageIndex(ide:GetOutput())
|
||||
if index then nbk:SetPageText(index, name) end
|
||||
if index ~= -1 then nbk:SetPageText(index, name) end
|
||||
end
|
||||
|
||||
debugger.handle = function(command, server, options)
|
||||
local verbose = ide.config.debugger.verbose
|
||||
local osexit, gprint
|
||||
osexit, os.exit = os.exit, function () end
|
||||
gprint, _G.print = _G.print, function (...)
|
||||
if verbose then DisplayOutputLn(...) end
|
||||
end
|
||||
local gprint = _G.print
|
||||
_G.print = function (...) if verbose then DisplayOutputLn(...) end end
|
||||
|
||||
nameOutputTab(TR("Output (running)"))
|
||||
debugger.running = true
|
||||
@@ -740,14 +778,15 @@ debugger.handle = function(command, server, options)
|
||||
-- only set suspended if the debugging hasn't been terminated
|
||||
if debugger.server then nameOutputTab(TR("Output (suspended)")) end
|
||||
|
||||
os.exit = osexit
|
||||
_G.print = gprint
|
||||
return file, line, err
|
||||
end
|
||||
|
||||
debugger.exec = function(command)
|
||||
debugger.exec = function(command, func)
|
||||
if debugger.server and not debugger.running then
|
||||
copas.addthread(function ()
|
||||
-- execute a custom function (if any) in the context of this thread
|
||||
if type(func) == 'function' then func() end
|
||||
local out
|
||||
local attempts = 0
|
||||
while true do
|
||||
@@ -783,7 +822,7 @@ debugger.exec = function(command)
|
||||
-- If this happens, stop and report allowing users to set
|
||||
-- breakpoints and step through.
|
||||
if debugger.breaking then
|
||||
DisplayOutputLn(TR("Debugging suspended at %s:%s (couldn't activate the file).")
|
||||
DisplayOutputLn(TR("Debugging suspended at '%s:%s' (couldn't activate the file).")
|
||||
:format(file, line))
|
||||
updateStackAndWatches()
|
||||
return
|
||||
@@ -828,7 +867,12 @@ debugger.handleDirect = function(command)
|
||||
end
|
||||
|
||||
debugger.loadfile = function(file)
|
||||
return debugger.handle("load " .. file)
|
||||
local f, l, err = debugger.handle("load " .. file)
|
||||
if not f and wx.wxFileExists(file) and err and err:find("Cannot open file") then
|
||||
local content = FileRead(file)
|
||||
if content then return debugger.loadstring(file, content) end
|
||||
end
|
||||
return f, l, err
|
||||
end
|
||||
debugger.loadstring = function(file, string)
|
||||
return debugger.handle("loadstring '" .. file .. "' " .. string)
|
||||
@@ -854,9 +898,10 @@ do
|
||||
-- if there is any pending activation
|
||||
if debugger.activate then
|
||||
local file, line, content = unpack(debugger.activate)
|
||||
debugger.activate = nil
|
||||
if content then
|
||||
local editor = NewFile()
|
||||
editor:SetText(content)
|
||||
editor:SetTextDyn(content)
|
||||
if not ide.config.debugger.allowediting
|
||||
and not (debugger.options or {}).allowediting then
|
||||
editor:SetReadOnly(true)
|
||||
@@ -870,11 +915,16 @@ do
|
||||
activateDocument(file, line)
|
||||
end
|
||||
end
|
||||
debugger.activate = nil
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function isemptyline(editor, line)
|
||||
local text = editor:GetLineDyn(line-1)
|
||||
return not text:find("%S")
|
||||
or (text:find("^%s*%-%-") ~= nil and text:find("^%s*%-%-%[=*%[") == nil)
|
||||
end
|
||||
|
||||
debugger.terminate = function()
|
||||
if debugger.server then
|
||||
if debugger.pid then -- if there is PID, try local kill
|
||||
@@ -890,10 +940,53 @@ debugger.trace = function()
|
||||
debugger.loop = true
|
||||
debugger.exec("step")
|
||||
end
|
||||
debugger.runto = function(editor, line)
|
||||
-- check if the location is valid for a breakpoint
|
||||
if isemptyline(editor, line+1) then return end
|
||||
|
||||
local ed, ln = unpack(debugger.runtocursor or {})
|
||||
local same = ed and ln and ed:GetId() == editor:GetId() and ln == line
|
||||
|
||||
-- check if there is already a breakpoint in the "run to" location;
|
||||
-- if so, don't mark the location as "run to" as it will stop there anyway
|
||||
if bit.band(editor:MarkerGet(line), BREAKPOINT_MARKER_VALUE) > 0
|
||||
and not same then
|
||||
debugger.runtocursor = nil
|
||||
debugger.run()
|
||||
return
|
||||
end
|
||||
|
||||
-- save the location of the breakpoint
|
||||
debugger.runtocursor = {editor, line}
|
||||
-- set breakpoint and execute run
|
||||
debugger.exec("run", function()
|
||||
-- if run-to-cursor location is already set, then remove the breakpoint,
|
||||
-- but only if this location is different
|
||||
if ed and ln and not same then
|
||||
DebuggerToggleBreakpoint(ed, ln)
|
||||
debugger.wait()
|
||||
end
|
||||
if not same then
|
||||
DebuggerToggleBreakpoint(editor, line)
|
||||
debugger.wait()
|
||||
end
|
||||
end)
|
||||
end
|
||||
debugger.wait = function()
|
||||
-- wait for all results to come back
|
||||
while debugger.running do debugger.update() end
|
||||
end
|
||||
debugger.over = function() debugger.exec("over") end
|
||||
debugger.out = function() debugger.exec("out") end
|
||||
debugger.run = function() debugger.exec("run") end
|
||||
debugger.detach = function() debugger.exec("done") end
|
||||
debugger.detach = function()
|
||||
if debugger.running then
|
||||
debugger.handleDirect("done")
|
||||
debugger.server = nil
|
||||
else
|
||||
debugger.exec("done")
|
||||
end
|
||||
end
|
||||
debugger.evaluate = function(expression) return debugger.handle('eval ' .. expression) end
|
||||
debugger.execute = function(expression) return debugger.handle('exec ' .. expression) end
|
||||
debugger.stack = function() return debugger.handle('stack') end
|
||||
@@ -938,14 +1031,6 @@ debugger.quickeval = function(var, callback)
|
||||
end
|
||||
end
|
||||
|
||||
function DebuggerAddStackWindow()
|
||||
return ide:AddPanel(debugger.stackCtrl, "stackpanel", TR("Stack"))
|
||||
end
|
||||
|
||||
function DebuggerAddWatchWindow()
|
||||
return ide:AddPanel(debugger.watchCtrl, "watchpanel", TR("Watch"))
|
||||
end
|
||||
|
||||
local width, height = 360, 200
|
||||
|
||||
local keyword = {}
|
||||
@@ -965,7 +1050,8 @@ end
|
||||
local function debuggerCreateStackWindow()
|
||||
local stackCtrl = wx.wxTreeCtrl(ide.frame, wx.wxID_ANY,
|
||||
wx.wxDefaultPosition, wx.wxSize(width, height),
|
||||
wx.wxTR_LINES_AT_ROOT + wx.wxTR_HAS_BUTTONS + wx.wxTR_SINGLE + wx.wxTR_HIDE_ROOT)
|
||||
wx.wxTR_LINES_AT_ROOT + wx.wxTR_HAS_BUTTONS + wx.wxTR_SINGLE
|
||||
+ wx.wxTR_HIDE_ROOT + wx.wxNO_BORDER)
|
||||
|
||||
debugger.stackCtrl = stackCtrl
|
||||
|
||||
@@ -1009,6 +1095,13 @@ local function debuggerCreateStackWindow()
|
||||
return true
|
||||
end)
|
||||
|
||||
stackCtrl:Connect(wx.wxEVT_SET_FOCUS, function(event)
|
||||
if debugger.needrefresh.stack then
|
||||
updateStack()
|
||||
debugger.needrefresh.stack = false
|
||||
end
|
||||
end)
|
||||
|
||||
-- register navigation callback
|
||||
stackCtrl:Connect(wx.wxEVT_LEFT_DCLICK, function (event)
|
||||
local item_id = stackCtrl:HitTest(event:GetPosition())
|
||||
@@ -1023,23 +1116,23 @@ local function debuggerCreateStackWindow()
|
||||
if file then
|
||||
local editor = LoadFile(file,nil,true)
|
||||
editor:SetFocus()
|
||||
if line then editor:GotoPos(editor:PositionFromLine(line-1)) end
|
||||
if line then editor:GotoLine(line-1) end
|
||||
end
|
||||
end)
|
||||
|
||||
local layout = ide:GetSetting("/view", "uimgrlayout")
|
||||
if layout and not layout:find("stackpanel") then
|
||||
ide.frame.bottomnotebook:AddPage(stackCtrl, TR("Stack"), true)
|
||||
return
|
||||
ide:AddPanelDocked(ide.frame.bottomnotebook, stackCtrl, "stackpanel", TR("Stack"))
|
||||
else
|
||||
ide:AddPanel(stackCtrl, "stackpanel", TR("Stack"))
|
||||
end
|
||||
DebuggerAddStackWindow()
|
||||
end
|
||||
|
||||
local function debuggerCreateWatchWindow()
|
||||
local watchCtrl = wx.wxTreeCtrl(ide.frame, wx.wxID_ANY,
|
||||
wx.wxDefaultPosition, wx.wxSize(width, height),
|
||||
wx.wxTR_LINES_AT_ROOT + wx.wxTR_HAS_BUTTONS + wx.wxTR_SINGLE
|
||||
+ wx.wxTR_HIDE_ROOT + wx.wxTR_EDIT_LABELS)
|
||||
+ wx.wxTR_HIDE_ROOT + wx.wxTR_EDIT_LABELS + wx.wxNO_BORDER)
|
||||
|
||||
debugger.watchCtrl = watchCtrl
|
||||
|
||||
@@ -1093,9 +1186,8 @@ local function debuggerCreateWatchWindow()
|
||||
and (watchCtrl:IsWatch(item) or watchCtrl:GetItemName(item) ~= nil))
|
||||
end
|
||||
|
||||
function watchCtrl:UpdateItemValue(item, value)
|
||||
function watchCtrl:GetItemFullExpression(item)
|
||||
local expr = ''
|
||||
local origitem = item
|
||||
while true do
|
||||
local name = watchCtrl:GetItemName(item)
|
||||
expr = (watchCtrl:IsWatch(item)
|
||||
@@ -1106,6 +1198,25 @@ local function debuggerCreateWatchWindow()
|
||||
item = watchCtrl:GetItemParent(item)
|
||||
if not item:IsOk() then break end
|
||||
end
|
||||
return expr, item:IsOk() and item or nil
|
||||
end
|
||||
|
||||
function watchCtrl:CopyItemValue(item)
|
||||
local expr = self:GetItemFullExpression(item)
|
||||
|
||||
if debugger.running then debugger.update() end
|
||||
if debugger.server and not debugger.running
|
||||
and (not debugger.scratchpad or debugger.scratchpad.paused) then
|
||||
copas.addthread(function ()
|
||||
local _, values, error = debugger.evaluate(expr)
|
||||
ide:CopyToClipboard(error and error:gsub("%[.-%]:%d+:%s+","")
|
||||
or (#values == 0 and 'nil' or values[1]))
|
||||
end)
|
||||
end
|
||||
end
|
||||
|
||||
function watchCtrl:UpdateItemValue(item, value)
|
||||
local expr, itemupd = self:GetItemFullExpression(item)
|
||||
|
||||
if debugger.running then debugger.update() end
|
||||
if debugger.server and not debugger.running
|
||||
@@ -1113,9 +1224,9 @@ local function debuggerCreateWatchWindow()
|
||||
copas.addthread(function ()
|
||||
local _, _, err = debugger.execute(expr..'='..value)
|
||||
if err then
|
||||
watchCtrl:SetItemText(origitem, 'error: '..err:gsub("%[.-%]:%d+:%s+",""))
|
||||
else
|
||||
updateWatchesSync(item)
|
||||
watchCtrl:SetItemText(item, 'error: '..err:gsub("%[.-%]:%d+:%s+",""))
|
||||
elseif itemupd then
|
||||
updateWatchesSync(itemupd)
|
||||
end
|
||||
updateStackSync()
|
||||
end)
|
||||
@@ -1151,6 +1262,14 @@ local function debuggerCreateWatchWindow()
|
||||
names[value] = nil
|
||||
end)
|
||||
|
||||
watchCtrl:Connect(wx.wxEVT_SET_FOCUS, function(event)
|
||||
if debugger.needrefresh.watches then
|
||||
updateWatches()
|
||||
debugger.needrefresh.watches = false
|
||||
end
|
||||
end)
|
||||
|
||||
|
||||
local item
|
||||
-- wx.wxEVT_CONTEXT_MENU is only triggered over tree items on OSX,
|
||||
-- but it needs to be also triggered below any item to add a watch,
|
||||
@@ -1160,11 +1279,14 @@ local function debuggerCreateWatchWindow()
|
||||
-- store the item to be used in edit/delete actions
|
||||
item = watchCtrl:HitTest(watchCtrl:ScreenToClient(wx.wxGetMousePosition()))
|
||||
local editlabel = watchCtrl:IsWatch(item) and TR("&Edit Watch") or TR("&Edit Value")
|
||||
watchCtrl:PopupMenu(wx.wxMenu {
|
||||
local menu = wx.wxMenu {
|
||||
{ ID_ADDWATCH, TR("&Add Watch")..KSC(ID_ADDWATCH) },
|
||||
{ ID_EDITWATCH, editlabel..KSC(ID_EDITWATCH) },
|
||||
{ ID_DELETEWATCH, TR("&Delete Watch")..KSC(ID_DELETEWATCH) },
|
||||
})
|
||||
{ ID_COPYWATCHVALUE, TR("&Copy Value")..KSC(ID_COPYWATCHVALUE) },
|
||||
}
|
||||
PackageEventHandle("onMenuWatch", menu, watchCtrl, event)
|
||||
watchCtrl:PopupMenu(menu)
|
||||
item = nil
|
||||
end)
|
||||
|
||||
@@ -1181,6 +1303,14 @@ local function debuggerCreateWatchWindow()
|
||||
watchCtrl:Connect(ID_DELETEWATCH, wx.wxEVT_UPDATE_UI,
|
||||
function (event) event:Enable(watchCtrl:IsWatch(item or watchCtrl:GetSelection())) end)
|
||||
|
||||
watchCtrl:Connect(ID_COPYWATCHVALUE, wx.wxEVT_COMMAND_MENU_SELECTED,
|
||||
function (event) watchCtrl:CopyItemValue(item or watchCtrl:GetSelection()) end)
|
||||
watchCtrl:Connect(ID_COPYWATCHVALUE, wx.wxEVT_UPDATE_UI, function (event)
|
||||
-- allow copying only when the debugger is available
|
||||
event:Enable(item:IsOk() and debugger.server and not debugger.running
|
||||
and (not debugger.scratchpad or debugger.scratchpad.paused))
|
||||
end)
|
||||
|
||||
local label
|
||||
watchCtrl:Connect(wx.wxEVT_COMMAND_TREE_BEGIN_LABEL_EDIT,
|
||||
function (event)
|
||||
@@ -1229,10 +1359,10 @@ local function debuggerCreateWatchWindow()
|
||||
|
||||
local layout = ide:GetSetting("/view", "uimgrlayout")
|
||||
if layout and not layout:find("watchpanel") then
|
||||
ide.frame.bottomnotebook:AddPage(watchCtrl, TR("Watch"), true)
|
||||
return
|
||||
ide:AddPanelDocked(ide.frame.bottomnotebook, watchCtrl, "watchpanel", TR("Watch"))
|
||||
else
|
||||
ide:AddPanel(watchCtrl, "watchpanel", TR("Watch"))
|
||||
end
|
||||
DebuggerAddWatchWindow()
|
||||
end
|
||||
|
||||
debuggerCreateStackWindow()
|
||||
@@ -1264,6 +1394,11 @@ function DebuggerStop(resetpid)
|
||||
debuggerToggleViews(false)
|
||||
local lines = TR("traced %d instruction", debugger.stats.line):format(debugger.stats.line)
|
||||
DisplayOutputLn(TR("Debugging session completed (%s)."):format(lines))
|
||||
nameOutputTab(debugger.pid and TR("Output (running)") or TR("Output"))
|
||||
if debugger.runtocursor then
|
||||
local ed, ln = unpack(debugger.runtocursor)
|
||||
DebuggerToggleBreakpoint(ed, ln)
|
||||
end
|
||||
else
|
||||
-- it's possible that the application couldn't start, or that the
|
||||
-- debugger in the application didn't start, which means there is
|
||||
@@ -1280,17 +1415,26 @@ local function debuggerMakeFileName(editor)
|
||||
or ide.config.default.fullname
|
||||
end
|
||||
|
||||
function DebuggerToggleBreakpoint(editor, line)
|
||||
local markers = editor:MarkerGet(line)
|
||||
function DebuggerToggleBreakpoint(editor, line, value)
|
||||
local isset = bit.band(editor:MarkerGet(line), BREAKPOINT_MARKER_VALUE) > 0
|
||||
if value ~= nil and isset == value then return end
|
||||
local filePath = debugger.editormap and debugger.editormap[editor]
|
||||
or debuggerMakeFileName(editor)
|
||||
if bit.band(markers, BREAKPOINT_MARKER_VALUE) > 0 then
|
||||
if isset then
|
||||
-- if there is pending "run-to-cursor" call at this location, remove it
|
||||
local ed, ln = unpack(debugger.runtocursor or {})
|
||||
local same = ed and ln and ed:GetId() == editor:GetId() and ln == line
|
||||
if same then debugger.runtocursor = nil end
|
||||
|
||||
editor:MarkerDelete(line, BREAKPOINT_MARKER)
|
||||
if debugger.server then debugger.breakpoint(filePath, line+1, false) end
|
||||
else
|
||||
if isemptyline(editor, line+1) then return end
|
||||
|
||||
editor:MarkerAdd(line, BREAKPOINT_MARKER)
|
||||
if debugger.server then debugger.breakpoint(filePath, line+1, true) end
|
||||
end
|
||||
PackageEventHandle("onEditorMarkerUpdate", editor, BREAKPOINT_MARKER, line+1, not isset)
|
||||
end
|
||||
|
||||
-- scratchpad functions
|
||||
@@ -1305,7 +1449,7 @@ function DebuggerRefreshScratchpad()
|
||||
and not CompileProgram(scratchpadEditor, { jumponerror = false, reportstats = false })
|
||||
then return end
|
||||
|
||||
local code = StripShebang(scratchpadEditor:GetText())
|
||||
local code = StripShebang(scratchpadEditor:GetTextDyn())
|
||||
if debugger.scratchpad.running then
|
||||
-- break the current execution first
|
||||
-- don't try too frequently to avoid overwhelming the debugger
|
||||
@@ -1315,7 +1459,7 @@ function DebuggerRefreshScratchpad()
|
||||
debugger.scratchpad.running = now
|
||||
end
|
||||
else
|
||||
local clear = ide.frame.menuBar:IsChecked(ID_CLEAROUTPUT)
|
||||
local clear = ide:GetMenuBar():IsChecked(ID_CLEAROUTPUT)
|
||||
local filePath = debuggerMakeFileName(scratchpadEditor)
|
||||
|
||||
-- wrap into a function call to make "return" to work with scratchpad
|
||||
@@ -1334,7 +1478,7 @@ function DebuggerRefreshScratchpad()
|
||||
debugger.scratchpad.updated = false
|
||||
debugger.scratchpad.runs = (debugger.scratchpad.runs or 0) + 1
|
||||
|
||||
if clear then ClearOutput() end
|
||||
if clear then ClearOutput(true) end
|
||||
|
||||
-- the code can be running in two ways under scratchpad:
|
||||
-- 1. controlled by the application, requires stopper (most apps)
|
||||
@@ -1431,7 +1575,7 @@ function DebuggerScratchpadOn(editor)
|
||||
end
|
||||
|
||||
-- find start position and length of the number
|
||||
local text = scratchpadEditor:GetText()
|
||||
local text = scratchpadEditor:GetTextDyn()
|
||||
|
||||
local nstart = pos
|
||||
while nstart >= 0
|
||||
@@ -1444,14 +1588,15 @@ function DebuggerScratchpadOn(editor)
|
||||
do nend = nend + 1 end
|
||||
|
||||
-- check if there is minus sign right before the number and include it
|
||||
if nstart >= 0 and scratchpadEditor:GetTextRange(nstart,nstart+1) == '-' then
|
||||
if nstart >= 0 and scratchpadEditor:GetTextRangeDyn(nstart,nstart+1) == '-' then
|
||||
nstart = nstart - 1
|
||||
end
|
||||
scratchpad.start = nstart + 1
|
||||
scratchpad.length = nend - nstart - 1
|
||||
scratchpad.origin = scratchpadEditor:GetTextRange(nstart+1,nend)
|
||||
scratchpad.origin = scratchpadEditor:GetTextRangeDyn(nstart+1,nend)
|
||||
if tonumber(scratchpad.origin) then
|
||||
scratchpad.point = point
|
||||
scratchpadEditor:BeginUndoAction()
|
||||
scratchpadEditor:CaptureMouse()
|
||||
end
|
||||
end)
|
||||
@@ -1459,6 +1604,7 @@ function DebuggerScratchpadOn(editor)
|
||||
scratchpadEditor:Connect(wx.wxEVT_LEFT_UP, function(event)
|
||||
if debugger.scratchpad and debugger.scratchpad.point then
|
||||
debugger.scratchpad.point = nil
|
||||
scratchpadEditor:EndUndoAction()
|
||||
scratchpadEditor:ReleaseMouse()
|
||||
wx.wxSetCursor(wx.wxNullCursor) -- restore cursor
|
||||
else event:Skip() end
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,36 +1,40 @@
|
||||
-- Copyright 2011-14 Paul Kulchenko, ZeroBrane LLC
|
||||
-- Copyright 2011-16 Paul Kulchenko, ZeroBrane LLC
|
||||
-- authors: Luxinia Dev (Eike Decker & Christoph Kubisch)
|
||||
---------------------------------------------------------
|
||||
|
||||
local ide = ide
|
||||
--
|
||||
-- filetree, treectrl for drive & project
|
||||
--
|
||||
|
||||
ide.filetree = {
|
||||
projdir = "",
|
||||
projdirlist = {},
|
||||
projdirpartmap = {},
|
||||
projtree = nil,
|
||||
projtreeCtrl = nil,
|
||||
imglist = ide:CreateImageList("PROJECT",
|
||||
"FOLDER", "FILE-KNOWN", "FILE-NORMAL", "FILE-NORMAL-START",
|
||||
"FOLDER-MAPPED"),
|
||||
settings = {extensionignore = {}, startfile = {}, mapped = {}},
|
||||
}
|
||||
local filetree = ide.filetree
|
||||
|
||||
local iscaseinsensitive = wx.wxFileName("A"):SameAs(wx.wxFileName("a"))
|
||||
local pathsep = GetPathSeparator()
|
||||
local q = EscapeMagic
|
||||
local image = {
|
||||
DIRECTORY = 0, FILEKNOWN = 1, FILEOTHER = 2, FILEOTHERSTART = 3,
|
||||
DIRECTORYMAPPED = 4,
|
||||
}
|
||||
|
||||
MergeSettings(filetree.settings, ide:AddPackage('core.filetree', {}):GetSettings())
|
||||
|
||||
-- generic tree
|
||||
-- ------------
|
||||
|
||||
local image = { DIRECTORY = 0, FILEKNOWN = 1, FILEOTHER = 2 }
|
||||
|
||||
do
|
||||
local getBitmap = (ide.app.createbitmap or wx.wxArtProvider.GetBitmap)
|
||||
local size = wx.wxSize(16, 16)
|
||||
filetree.imglist = wx.wxImageList(16,16)
|
||||
filetree.imglist:Add(getBitmap("FOLDER", "OTHER", size)) -- 0 = directory
|
||||
filetree.imglist:Add(getBitmap("HELP-PAGE", "OTHER", size)) -- 1 = file known spec
|
||||
filetree.imglist:Add(getBitmap("NORMAL-FILE", "OTHER", size)) -- 2 = file other
|
||||
local function getIcon(name, isdir)
|
||||
local startfile = GetFullPathIfExists(FileTreeGetDir(),
|
||||
filetree.settings.startfile[FileTreeGetDir()])
|
||||
local known = GetSpec(GetFileExt(name))
|
||||
local icon = isdir and image.DIRECTORY or known and image.FILEKNOWN or image.FILEOTHER
|
||||
if startfile and startfile == name then icon = image.FILEOTHERSTART end
|
||||
return icon
|
||||
end
|
||||
|
||||
local function treeAddDir(tree,parent_id,rootdir)
|
||||
@@ -43,31 +47,48 @@ local function treeAddDir(tree,parent_id,rootdir)
|
||||
|
||||
local cache = {}
|
||||
local curr
|
||||
|
||||
for _, file in ipairs(FileSysGetRecursive(rootdir)) do
|
||||
local name, dir = file:match("([^"..pathsep.."]+)("..pathsep.."?)$")
|
||||
local known = GetSpec(GetFileExt(name))
|
||||
local icon = #dir>0 and image.DIRECTORY or known and image.FILEKNOWN or image.FILEOTHER
|
||||
local item = items[name .. icon]
|
||||
if item then -- existing item
|
||||
-- keep deleting items until we find item
|
||||
while true do
|
||||
local next = (curr
|
||||
and tree:GetNextSibling(curr)
|
||||
or tree:GetFirstChild(parent_id))
|
||||
if not next:IsOk() or name == tree:GetItemText(next) then
|
||||
curr = next
|
||||
break
|
||||
end
|
||||
tree:Delete(next)
|
||||
end
|
||||
else -- new item
|
||||
curr = (curr
|
||||
and tree:InsertItem(parent_id, curr, name, icon)
|
||||
or tree:PrependItem(parent_id, name, icon))
|
||||
if #dir>0 then tree:SetItemHasChildren(curr, FileDirHasContent(file)) end
|
||||
local files = FileSysGetRecursive(rootdir)
|
||||
local dirmapped = {}
|
||||
if tree:IsRoot(parent_id) then
|
||||
local mapped = filetree.settings.mapped[FileTreeGetDir()] or {}
|
||||
table.sort(mapped)
|
||||
-- insert into files at the sorted order
|
||||
for i, v in ipairs(mapped) do
|
||||
table.insert(files, i, v)
|
||||
dirmapped[v] = true
|
||||
end
|
||||
end
|
||||
|
||||
for _, file in ipairs(files) do
|
||||
local name, dir = file:match("([^"..pathsep.."]+)("..pathsep.."?)$")
|
||||
local isdir = #dir>0
|
||||
if isdir or not filetree.settings.extensionignore[GetFileExt(name)] then
|
||||
local icon = getIcon(file, isdir)
|
||||
|
||||
-- keep full name for the mapped directories
|
||||
if dirmapped[file] then name, icon = file, image.DIRECTORYMAPPED end
|
||||
|
||||
local item = items[name .. icon]
|
||||
if item then -- existing item
|
||||
-- keep deleting items until we find item
|
||||
while true do
|
||||
local next = (curr
|
||||
and tree:GetNextSibling(curr)
|
||||
or tree:GetFirstChild(parent_id))
|
||||
if not next:IsOk() or name == tree:GetItemText(next) then
|
||||
curr = next
|
||||
break
|
||||
end
|
||||
tree:Delete(next)
|
||||
end
|
||||
else -- new item
|
||||
curr = (curr
|
||||
and tree:InsertItem(parent_id, curr, name, icon)
|
||||
or tree:PrependItem(parent_id, name, icon))
|
||||
if isdir then tree:SetItemHasChildren(curr, FileDirHasContent(file)) end
|
||||
end
|
||||
if curr:IsOk() then cache[iscaseinsensitive and name:lower() or name] = curr end
|
||||
end
|
||||
if curr:IsOk() then cache[iscaseinsensitive and name:lower() or name] = curr end
|
||||
end
|
||||
|
||||
-- delete any leftovers (something that exists in the tree, but not on disk)
|
||||
@@ -143,12 +164,14 @@ local function treeSetConnectorsAndIcons(tree)
|
||||
local function isIt(item, imgtype) return tree:GetItemImage(item) == imgtype end
|
||||
|
||||
function tree:IsDirectory(item_id) return isIt(item_id, image.DIRECTORY) end
|
||||
function tree:IsDirMapped(item_id) return isIt(item_id, image.DIRECTORYMAPPED) end
|
||||
function tree:IsFileKnown(item_id) return isIt(item_id, image.FILEKNOWN) end
|
||||
function tree:IsFileOther(item_id) return isIt(item_id, image.FILEOTHER) end
|
||||
function tree:IsFileStart(item_id) return isIt(item_id, image.FILEOTHERSTART) end
|
||||
function tree:IsRoot(item_id) return not tree:GetItemParent(item_id):IsOk() end
|
||||
|
||||
function tree:FindItem(match)
|
||||
return findItem(self, wx.wxIsAbsolutePath(match) and match
|
||||
return findItem(self, (wx.wxIsAbsolutePath(match) or match == '') and match
|
||||
or MergeFullPath(ide:GetProject(), match))
|
||||
end
|
||||
|
||||
@@ -161,7 +184,7 @@ local function treeSetConnectorsAndIcons(tree)
|
||||
item_id = tree:GetItemParent(item_id)
|
||||
if not item_id:IsOk() then break end
|
||||
cur = tree:GetItemText(item_id)
|
||||
if cur and string.len(cur) > 0 then str = cur..pathsep..str end
|
||||
if cur and #cur > 0 then str = MergeFullPath(cur, str) end
|
||||
end
|
||||
-- as root may already include path separator, normalize the path
|
||||
local fullPath = wx.wxFileName(str)
|
||||
@@ -169,6 +192,17 @@ local function treeSetConnectorsAndIcons(tree)
|
||||
return fullPath:GetFullPath()
|
||||
end
|
||||
|
||||
function tree:RefreshChildren(node)
|
||||
node = node or tree:GetRootItem()
|
||||
treeAddDir(tree,node,tree:GetItemFullName(node))
|
||||
local item, cookie = tree:GetFirstChild(node)
|
||||
while true do
|
||||
if not item:IsOk() then return end
|
||||
if tree:IsExpanded(item) then tree:RefreshChildren(item) end
|
||||
item, cookie = tree:GetNextChild(node, cookie)
|
||||
end
|
||||
end
|
||||
|
||||
local function refreshAncestors(node)
|
||||
-- when this method is called from END_EDIT, it causes infinite loop
|
||||
-- on OSX (wxwidgets 2.9.5) as Delete in treeAddDir calls END_EDIT again.
|
||||
@@ -191,7 +225,7 @@ local function treeSetConnectorsAndIcons(tree)
|
||||
end
|
||||
|
||||
-- refresh the folder
|
||||
if (tree:IsDirectory(item_id)) then
|
||||
if (tree:IsDirectory(item_id) or tree:IsDirMapped(item_id)) then
|
||||
if wx.wxDirExists(name) then treeAddDir(tree,item_id,name)
|
||||
else refreshAncestors(tree:GetItemParent(item_id)) end -- stale content
|
||||
else -- open file
|
||||
@@ -200,14 +234,42 @@ local function treeSetConnectorsAndIcons(tree)
|
||||
end
|
||||
end
|
||||
|
||||
local function unMapDir(dir)
|
||||
local project = FileTreeGetDir()
|
||||
local mapped = filetree.settings.mapped[project] or {}
|
||||
for k, m in ipairs(mapped) do
|
||||
if m == dir then table.remove(mapped, k) end
|
||||
end
|
||||
filetree.settings.mapped[project] = mapped
|
||||
refreshAncestors(tree:GetRootItem())
|
||||
end
|
||||
local function mapDir()
|
||||
local project = FileTreeGetDir()
|
||||
local dirPicker = wx.wxDirDialog(ide.frame, TR("Choose a directory to map"),
|
||||
project ~= "" and project or wx.wxGetCwd(), wx.wxDIRP_DIR_MUST_EXIST)
|
||||
if dirPicker:ShowModal(true) ~= wx.wxID_OK then return end
|
||||
local dir = wx.wxFileName.DirName(FixDir(dirPicker:GetPath())):GetFullPath()
|
||||
local mapped = filetree.settings.mapped[project] or {}
|
||||
for _, m in ipairs(mapped) do
|
||||
if m == dir then return end -- already on the list
|
||||
end
|
||||
table.insert(mapped, dir)
|
||||
filetree.settings.mapped[project] = mapped
|
||||
refreshAncestors(tree:GetRootItem())
|
||||
end
|
||||
|
||||
local empty = ""
|
||||
local function renameItem(itemsrc, target)
|
||||
local isdir = tree:GetItemImage(itemsrc) == image.DIRECTORY
|
||||
local isnew = tree:GetItemText(itemsrc) == empty
|
||||
local source = tree:GetItemFullName(itemsrc)
|
||||
local cache = type(itemsrc) == 'table' and itemsrc or nil
|
||||
local isdir = not cache and tree:IsDirectory(itemsrc) or cache and cache.isdir or false
|
||||
local isnew = not cache and tree:GetItemText(itemsrc) == empty or cache and cache.isnew or false
|
||||
local source = cache and cache.fullname or tree:GetItemFullName(itemsrc)
|
||||
local fn = wx.wxFileName(target)
|
||||
|
||||
if wx.wxFileName(source):SameAs(fn) then return false end
|
||||
-- check if the target is the same as the source;
|
||||
-- SameAs check is not used here as "Test" and "test" are the same
|
||||
-- on case insensitive systems, but need to be allowed in renaming.
|
||||
if source == target then return end
|
||||
|
||||
local docs = {}
|
||||
if not isnew then -- find if source is already opened in the editor
|
||||
@@ -215,13 +277,17 @@ local function treeSetConnectorsAndIcons(tree)
|
||||
and ide:FindDocumentsByPartialPath(source)
|
||||
or {ide:FindDocument(source)})
|
||||
for _, doc in ipairs(docs) do
|
||||
if not isdir and PackageEventHandle("onEditorPreSave", doc.editor, source) == false then
|
||||
return false
|
||||
end
|
||||
if SaveModifiedDialog(doc.editor, true) == wx.wxID_CANCEL then return end
|
||||
end
|
||||
end
|
||||
|
||||
-- check if existing file/dir is going to be overwritten
|
||||
if (wx.wxFileExists(target) or wx.wxDirExists(target))
|
||||
and not ApproveFileOverwrite() then return false end
|
||||
local overwrite = ((wx.wxFileExists(target) or wx.wxDirExists(target))
|
||||
and not wx.wxFileName(source):SameAs(fn))
|
||||
if overwrite and not ApproveFileOverwrite() then return false end
|
||||
|
||||
if not fn:Mkdir(tonumber(755,8), wx.wxPATH_MKDIR_FULL) then
|
||||
ReportError(TR("Unable to create directory '%s'."):format(target))
|
||||
@@ -243,7 +309,7 @@ local function treeSetConnectorsAndIcons(tree)
|
||||
end
|
||||
end
|
||||
|
||||
refreshAncestors(tree:GetItemParent(itemsrc))
|
||||
refreshAncestors(cache and cache.parent or tree:GetItemParent(itemsrc))
|
||||
-- load file(s) into the same editor (if any); will also refresh the tree
|
||||
if #docs > 0 then
|
||||
for _, doc in ipairs(docs) do
|
||||
@@ -251,7 +317,14 @@ local function treeSetConnectorsAndIcons(tree)
|
||||
doc.filePath = nil -- remove path to avoid "file no longer exists" message
|
||||
-- when moving folders, /foo/bar/file.lua can be replaced with
|
||||
-- /foo/baz/bar/file.lua, so change /foo/bar to /foo/baz/bar
|
||||
LoadFile(fullpath:gsub(q(source), target), doc.editor)
|
||||
local path = (not iscaseinsensitive and fullpath:gsub(q(source), target)
|
||||
or fullpath:lower():gsub(q(source:lower()), target))
|
||||
local editor = LoadFile(path)
|
||||
-- check if the file was loaded into another editor;
|
||||
-- this is possible if "foo" is renamed to "bar" and both are opened;
|
||||
-- if this happens, then "bar" is refreshed and "foo" can be closed.
|
||||
if doc.editor:GetId() ~= editor:GetId() then ClosePage(doc.index) end
|
||||
if not isdir and editor then PackageEventHandle("onEditorSave", editor) end
|
||||
end
|
||||
else -- refresh the tree and select the new item
|
||||
local itemdst = tree:FindItem(target)
|
||||
@@ -262,10 +335,23 @@ local function treeSetConnectorsAndIcons(tree)
|
||||
tree:SetScrollPos(wx.wxHORIZONTAL, 0, true)
|
||||
end
|
||||
end
|
||||
|
||||
-- refresh the target if it's open and has been overwritten
|
||||
if overwrite and not isdir then
|
||||
local doc = ide:FindDocument(target)
|
||||
if doc then LoadFile(doc:GetFilePath(), doc:GetEditor()) end
|
||||
end
|
||||
|
||||
return true
|
||||
end
|
||||
local function deleteItem(item_id)
|
||||
local isdir = tree:GetItemImage(item_id) == image.DIRECTORY
|
||||
-- if delete is for mapped directory, unmap it instead
|
||||
if tree:IsDirMapped(item_id) then
|
||||
unMapDir(tree:GetItemText(item_id))
|
||||
return
|
||||
end
|
||||
|
||||
local isdir = tree:IsDirectory(item_id)
|
||||
local source = tree:GetItemFullName(item_id)
|
||||
|
||||
if isdir and FileDirHasContent(source..pathsep) then return false end
|
||||
@@ -282,7 +368,10 @@ local function treeSetConnectorsAndIcons(tree)
|
||||
else
|
||||
local doc = ide:FindDocument(source)
|
||||
if doc then ClosePage(doc.index) end
|
||||
wx.wxRemoveFile(source)
|
||||
if not wx.wxRemoveFile(source) then
|
||||
ReportError(TR("Unable to delete file '%s': %s")
|
||||
:format(source, wx.wxSysErrorMsg()))
|
||||
end
|
||||
end
|
||||
refreshAncestors(tree:GetItemParent(item_id))
|
||||
return true
|
||||
@@ -301,9 +390,21 @@ local function treeSetConnectorsAndIcons(tree)
|
||||
tree:ActivateItem(event:GetItem())
|
||||
end)
|
||||
|
||||
local function saveSettings()
|
||||
ide:AddPackage('core.filetree', {}):SetSettings(filetree.settings)
|
||||
end
|
||||
|
||||
-- refresh the tree
|
||||
local function refreshChildren()
|
||||
tree:RefreshChildren()
|
||||
-- now mark the current file (if it was previously disabled)
|
||||
local editor = ide:GetEditor()
|
||||
if editor then FileTreeMarkSelected(ide:GetDocument(editor):GetFilePath()) end
|
||||
end
|
||||
|
||||
-- handle context menu
|
||||
local function addItem(item_id, name, img)
|
||||
local isdir = tree:GetItemImage(item_id) == image.DIRECTORY
|
||||
local isdir = tree:IsDirectory(item_id)
|
||||
local parent = isdir and item_id or tree:GetItemParent(item_id)
|
||||
if isdir then tree:Expand(item_id) end -- expand to populate if needed
|
||||
|
||||
@@ -316,6 +417,25 @@ local function treeSetConnectorsAndIcons(tree)
|
||||
return item
|
||||
end
|
||||
|
||||
local function unsetStartFile()
|
||||
local project = FileTreeGetDir()
|
||||
local startfile = filetree.settings.startfile[project]
|
||||
filetree.settings.startfile[project] = nil
|
||||
if startfile then
|
||||
local item_id = tree:FindItem(startfile)
|
||||
if item_id and item_id:IsOk() then
|
||||
tree:SetItemImage(item_id, getIcon(tree:GetItemFullName(item_id)))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function setStartFile(item_id)
|
||||
local project = FileTreeGetDir()
|
||||
local startfile = tree:GetItemFullName(item_id):gsub(project, "")
|
||||
filetree.settings.startfile[project] = startfile
|
||||
tree:SetItemImage(item_id, getIcon(tree:GetItemFullName(item_id)))
|
||||
end
|
||||
|
||||
tree:Connect(ID_NEWFILE, wx.wxEVT_COMMAND_MENU_SELECTED,
|
||||
function()
|
||||
tree:EditLabel(addItem(tree:GetSelection(), empty, image.FILEOTHER))
|
||||
@@ -329,13 +449,7 @@ local function treeSetConnectorsAndIcons(tree)
|
||||
tree:Connect(ID_DELETEFILE, wx.wxEVT_COMMAND_MENU_SELECTED,
|
||||
function() deleteItem(tree:GetSelection()) end)
|
||||
tree:Connect(ID_COPYFULLPATH, wx.wxEVT_COMMAND_MENU_SELECTED,
|
||||
function()
|
||||
local tdo = wx.wxTextDataObject(tree:GetItemFullName(tree:GetSelection()))
|
||||
if wx.wxClipboard:Get():Open() then
|
||||
wx.wxClipboard:Get():SetData(tdo)
|
||||
wx.wxClipboard:Get():Close()
|
||||
end
|
||||
end)
|
||||
function() ide:CopyToClipboard(tree:GetItemFullName(tree:GetSelection())) end)
|
||||
tree:Connect(ID_OPENEXTENSION, wx.wxEVT_COMMAND_MENU_SELECTED,
|
||||
function()
|
||||
local fname = tree:GetItemFullName(tree:GetSelection())
|
||||
@@ -357,8 +471,48 @@ local function treeSetConnectorsAndIcons(tree)
|
||||
end
|
||||
end
|
||||
end)
|
||||
tree:Connect(ID_REFRESH, wx.wxEVT_COMMAND_MENU_SELECTED,
|
||||
function() refreshChildren() end)
|
||||
tree:Connect(ID_SHOWLOCATION, wx.wxEVT_COMMAND_MENU_SELECTED,
|
||||
function() ShowLocation(tree:GetItemFullName(tree:GetSelection())) end)
|
||||
tree:Connect(ID_HIDEEXTENSION, wx.wxEVT_COMMAND_MENU_SELECTED,
|
||||
function()
|
||||
local ext = GetFileExt(tree:GetItemText(tree:GetSelection()))
|
||||
filetree.settings.extensionignore[ext] = true
|
||||
saveSettings()
|
||||
refreshChildren()
|
||||
end)
|
||||
tree:Connect(ID_SHOWEXTENSIONALL, wx.wxEVT_COMMAND_MENU_SELECTED,
|
||||
function()
|
||||
filetree.settings.extensionignore = {}
|
||||
saveSettings()
|
||||
refreshChildren()
|
||||
end)
|
||||
tree:Connect(ID_SETSTARTFILE, wx.wxEVT_COMMAND_MENU_SELECTED,
|
||||
function()
|
||||
unsetStartFile()
|
||||
setStartFile(tree:GetSelection())
|
||||
saveSettings()
|
||||
end)
|
||||
tree:Connect(ID_UNSETSTARTFILE, wx.wxEVT_COMMAND_MENU_SELECTED,
|
||||
function()
|
||||
unsetStartFile()
|
||||
saveSettings()
|
||||
end)
|
||||
tree:Connect(ID_MAPDIRECTORY, wx.wxEVT_COMMAND_MENU_SELECTED,
|
||||
function()
|
||||
mapDir()
|
||||
saveSettings()
|
||||
end)
|
||||
tree:Connect(ID_UNMAPDIRECTORY, wx.wxEVT_COMMAND_MENU_SELECTED,
|
||||
function()
|
||||
unMapDir(tree:GetItemText(tree:GetSelection()))
|
||||
saveSettings()
|
||||
end)
|
||||
tree:Connect(ID_PROJECTDIRFROMDIR, wx.wxEVT_COMMAND_MENU_SELECTED,
|
||||
function()
|
||||
ProjectUpdateProjectDir(tree:GetItemFullName(tree:GetSelection()))
|
||||
end)
|
||||
|
||||
tree:Connect(wx.wxEVT_COMMAND_TREE_ITEM_MENU,
|
||||
function (event)
|
||||
@@ -368,43 +522,97 @@ local function treeSetConnectorsAndIcons(tree)
|
||||
local renamelabel = (tree:IsRoot(item_id)
|
||||
and TR("&Edit Project Directory")
|
||||
or TR("&Rename"))
|
||||
local fname = tree:GetItemText(item_id)
|
||||
local ext = GetFileExt(fname)
|
||||
local startfile = filetree.settings.startfile[FileTreeGetDir()]
|
||||
local menu = wx.wxMenu {
|
||||
{ ID_NEWFILE, TR("New &File") },
|
||||
{ ID_NEWDIRECTORY, TR("&New Directory") },
|
||||
{ },
|
||||
{ ID_RENAMEFILE, renamelabel..KSC(ID_RENAMEFILE) },
|
||||
{ ID_DELETEFILE, TR("&Delete")..KSC(ID_DELETEFILE) },
|
||||
{ ID_REFRESH, TR("Refresh") },
|
||||
{ },
|
||||
{ ID_HIDEEXTENSION, TR("Hide '.%s' Files"):format(ext) },
|
||||
{ },
|
||||
{ ID_SETSTARTFILE, TR("Set As Start File") },
|
||||
{ ID_UNSETSTARTFILE, TR("Unset '%s' As Start File"):format(startfile or "<none>") },
|
||||
{ },
|
||||
{ ID_MAPDIRECTORY, TR("Map Directory...") },
|
||||
{ ID_UNMAPDIRECTORY, TR("Unmap Directory") },
|
||||
{ ID_OPENEXTENSION, TR("Open With Default Program") },
|
||||
{ ID_COPYFULLPATH, TR("Copy Full Path") },
|
||||
{ ID_SHOWLOCATION, TR("Show Location") },
|
||||
}
|
||||
local extlist = {
|
||||
{},
|
||||
{ ID_SHOWEXTENSIONALL, TR("Show All Files"), TR("Show all files") },
|
||||
}
|
||||
for ext in pairs(filetree.settings.extensionignore) do
|
||||
local id = ID("filetree.showextension."..ext)
|
||||
table.insert(extlist, 1, {id, '.'..ext})
|
||||
menu:Connect(id, wx.wxEVT_COMMAND_MENU_SELECTED, function()
|
||||
filetree.settings.extensionignore[ext] = nil
|
||||
saveSettings()
|
||||
refreshChildren()
|
||||
end)
|
||||
end
|
||||
local _, _, hideextpos = ide:FindMenuItem(ID_HIDEEXTENSION, menu)
|
||||
assert(hideextpos, "Can't find HideExtension menu item")
|
||||
menu:Insert(hideextpos+1, wx.wxMenuItem(menu, ID_SHOWEXTENSION,
|
||||
TR("Show Hidden Files"), TR("Show files previously hidden"),
|
||||
wx.wxITEM_NORMAL, wx.wxMenu(extlist)))
|
||||
|
||||
local projectdirectorymenu = wx.wxMenu {
|
||||
{ },
|
||||
{ID_PROJECTDIRCHOOSE, TR("Choose...")..KSC(ID_PROJECTDIRCHOOSE), TR("Choose a project directory")},
|
||||
{ID_PROJECTDIRFROMDIR, TR("Set To Selected Directory")..KSC(ID_PROJECTDIRFROMDIR), TR("Set project directory to the selected one")},
|
||||
}
|
||||
local projectdirectory = wx.wxMenuItem(menu, ID_PROJECTDIR,
|
||||
TR("Project Directory"), TR("Set the project directory to be used"),
|
||||
wx.wxITEM_NORMAL, projectdirectorymenu)
|
||||
menu:Insert(6, projectdirectory)
|
||||
local _, _, unmapdirpos = ide:FindMenuItem(ID_UNMAPDIRECTORY, menu)
|
||||
assert(unmapdirpos, "Can't find UnMapDirectory menu item")
|
||||
menu:Insert(unmapdirpos+1, projectdirectory)
|
||||
FileTreeProjectListUpdate(projectdirectorymenu, 0)
|
||||
|
||||
-- disable Delete on non-empty directories
|
||||
local isdir = tree:GetItemImage(item_id) == image.DIRECTORY
|
||||
local isdir = tree:IsDirectory(item_id)
|
||||
local ismapped = tree:IsDirMapped(item_id)
|
||||
menu:Destroy(ismapped and ID_MAPDIRECTORY or ID_UNMAPDIRECTORY)
|
||||
if not startfile then menu:Destroy(ID_UNSETSTARTFILE) end
|
||||
if ismapped then menu:Enable(ID_RENAMEFILE, false) end
|
||||
if isdir then
|
||||
local source = tree:GetItemFullName(item_id)
|
||||
menu:Enable(ID_DELETEFILE, not FileDirHasContent(source..pathsep))
|
||||
menu:Enable(ID_OPENEXTENSION, false)
|
||||
menu:Enable(ID_HIDEEXTENSION, false)
|
||||
else
|
||||
local fname = tree:GetItemText(item_id)
|
||||
local ext = '.'..wx.wxFileName(fname):GetExt()
|
||||
local ft = wx.wxTheMimeTypesManager:GetFileTypeFromExtension(ext)
|
||||
local ft = wx.wxTheMimeTypesManager:GetFileTypeFromExtension('.'..ext)
|
||||
menu:Enable(ID_OPENEXTENSION, ft and #ft:GetOpenCommand("") > 0)
|
||||
menu:Enable(ID_HIDEEXTENSION, not filetree.settings.extensionignore[ext])
|
||||
menu:Enable(ID_PROJECTDIRFROMDIR, false)
|
||||
end
|
||||
menu:Enable(ID_SETSTARTFILE, tree:IsFileOther(item_id) or tree:IsFileKnown(item_id))
|
||||
menu:Enable(ID_SHOWEXTENSION, next(filetree.settings.extensionignore) ~= nil)
|
||||
|
||||
PackageEventHandle("onMenuFiletree", menu, tree, event)
|
||||
|
||||
-- stopping/restarting garbage collection is generally not needed,
|
||||
-- but on Linux not stopping is causing crashes (wxwidgets 2.9.5 and 3.1.0)
|
||||
-- when symbol indexing is done while popup menu is open (with gc methods in the trace).
|
||||
-- this only happens when EVT_IDLE is called when popup menu is open.
|
||||
collectgarbage("stop")
|
||||
|
||||
-- stopping UI updates is generally not needed as well,
|
||||
-- but it's causing a crash on OSX (wxwidgets 2.9.5 and 3.1.0)
|
||||
-- when symbol indexing is done while popup menu is open, so it's disabled
|
||||
local interval = wx.wxUpdateUIEvent.GetUpdateInterval()
|
||||
wx.wxUpdateUIEvent.SetUpdateInterval(-1) -- don't update
|
||||
|
||||
tree:PopupMenu(menu)
|
||||
wx.wxUpdateUIEvent.SetUpdateInterval(interval)
|
||||
collectgarbage("restart")
|
||||
end)
|
||||
|
||||
tree:Connect(wx.wxEVT_RIGHT_DOWN,
|
||||
@@ -430,7 +638,7 @@ local function treeSetConnectorsAndIcons(tree)
|
||||
end
|
||||
|
||||
if item_id and bit.band(flags, mask) > 0 then
|
||||
if tree:GetItemImage(item_id) == image.DIRECTORY then
|
||||
if tree:IsDirectory(item_id) then
|
||||
tree:Toggle(item_id)
|
||||
tree:SelectItem(item_id)
|
||||
else
|
||||
@@ -447,7 +655,7 @@ local function treeSetConnectorsAndIcons(tree)
|
||||
function (event)
|
||||
local itemsrc = event:GetItem()
|
||||
parent = tree:GetItemParent(itemsrc)
|
||||
if not itemsrc:IsOk() then event:Veto() end
|
||||
if not itemsrc:IsOk() or tree:IsDirMapped(itemsrc) then event:Veto() end
|
||||
end)
|
||||
tree:Connect(wx.wxEVT_COMMAND_TREE_END_LABEL_EDIT,
|
||||
function (event)
|
||||
@@ -461,19 +669,36 @@ local function treeSetConnectorsAndIcons(tree)
|
||||
local label = event:GetLabel():gsub("^%s+$","") -- clean all spaces
|
||||
|
||||
-- edited the root element; set the new project directory if needed
|
||||
local cancelled = event:IsEditCancelled()
|
||||
if tree:IsRoot(itemsrc) then
|
||||
if not event:IsEditCancelled() and wx.wxDirExists(label) then
|
||||
if not cancelled and wx.wxDirExists(label) then
|
||||
ProjectUpdateProjectDir(label)
|
||||
end
|
||||
return
|
||||
end
|
||||
|
||||
if not parent or not parent:IsOk() then return end
|
||||
local sourcedir = tree:GetItemFullName(parent)
|
||||
local target = MergeFullPath(sourcedir, label)
|
||||
if event:IsEditCancelled() or label == empty
|
||||
or target and not renameItem(itemsrc, target)
|
||||
then refreshAncestors(parent) end
|
||||
local target = MergeFullPath(tree:GetItemFullName(parent), label)
|
||||
if cancelled or label == empty then refreshAncestors(parent)
|
||||
elseif target then
|
||||
-- normally, none of this caching would be needed as `renameItem`
|
||||
-- would be called to check if the item can be renamed;
|
||||
-- however, as it may open a dialog box, on Linux it's causing a crash
|
||||
-- (caused by the same END_LABEL_EDIT even triggered one more time),
|
||||
-- so to protect from that, `renameItem` is called from IDLE event.
|
||||
-- Unfortunately, by that time, the filetree item (`itemsrc`) may
|
||||
-- already have incorrect state (as it's removed from the tree),
|
||||
-- so its properties need to be cached to be used from IDLE event.
|
||||
local cache = {
|
||||
isdir = tree:IsDirectory(itemsrc),
|
||||
isnew = tree:GetItemText(itemsrc) == empty,
|
||||
fullname = tree:GetItemFullName(itemsrc),
|
||||
parent = parent,
|
||||
}
|
||||
ide:DoWhenIdle(function()
|
||||
if not renameItem(cache, target) then refreshAncestors(parent) end
|
||||
end)
|
||||
end
|
||||
end)
|
||||
|
||||
local itemsrc
|
||||
@@ -504,12 +729,11 @@ end
|
||||
local projtree = wx.wxTreeCtrl(ide.frame, wx.wxID_ANY,
|
||||
wx.wxDefaultPosition, wx.wxDefaultSize,
|
||||
wx.wxTR_HAS_BUTTONS + wx.wxTR_SINGLE + wx.wxTR_LINES_AT_ROOT
|
||||
+ wx.wxTR_EDIT_LABELS)
|
||||
+ wx.wxTR_EDIT_LABELS + wx.wxNO_BORDER)
|
||||
projtree:SetFont(ide.font.fNormal)
|
||||
filetree.projtree = projtree
|
||||
filetree.projtreeCtrl = projtree
|
||||
|
||||
local projnotebook = ide.frame.projnotebook
|
||||
projnotebook:AddPage(projtree, "Project", true)
|
||||
ide:GetProjectNotebook():AddPage(projtree, TR("Project"), true)
|
||||
|
||||
-- proj connectors
|
||||
-- ---------------
|
||||
@@ -529,6 +753,10 @@ function filetree:updateProjectDir(newdir)
|
||||
-- strip the last path separator if any
|
||||
local newdir = dirname:GetPath(wx.wxPATH_GET_VOLUME)
|
||||
|
||||
-- save the current interpreter as it may be reset in onProjectClose
|
||||
-- when the project event handlers manipulates interpreters
|
||||
local intfname = ide.interpreter and ide.interpreter.fname
|
||||
|
||||
if filetree.projdir and #filetree.projdir > 0 then
|
||||
PackageEventHandle("onProjectClose", filetree.projdir)
|
||||
end
|
||||
@@ -536,7 +764,7 @@ function filetree:updateProjectDir(newdir)
|
||||
PackageEventHandle("onProjectPreLoad", newdir)
|
||||
|
||||
if ide.config.projectautoopen and filetree.projdir then
|
||||
StoreRestoreProjectTabs(filetree.projdir, newdir)
|
||||
StoreRestoreProjectTabs(filetree.projdir, newdir, intfname)
|
||||
end
|
||||
|
||||
filetree.projdir = newdir
|
||||
@@ -587,7 +815,7 @@ local function getProjectLabels()
|
||||
local parts = wx.wxFileName(proj..pathsep):GetDirs()
|
||||
table.insert(labels, ExpandPlaceholders(fmt, {
|
||||
f = proj,
|
||||
i = interpreter and interpreter:GetName() or '?',
|
||||
i = interpreter and interpreter:GetName() or (intfname or '')..'?',
|
||||
s = parts[#parts] or '',
|
||||
}))
|
||||
end
|
||||
@@ -630,7 +858,7 @@ local curr_file
|
||||
function FileTreeMarkSelected(file)
|
||||
if not file or not filetree.projdir or #filetree.projdir == 0 then return end
|
||||
|
||||
local item_id = projtree:FindItem(file)
|
||||
local item_id = wx.wxIsAbsolutePath(file) and projtree:FindItem(file)
|
||||
|
||||
-- if the select item is different from the current one
|
||||
-- or the current one is the same, but not bold (which may happen when
|
||||
@@ -638,7 +866,7 @@ function FileTreeMarkSelected(file)
|
||||
if curr_file ~= file
|
||||
or item_id and not projtree:IsBold(item_id) then
|
||||
if curr_file then
|
||||
local curr_id = projtree:FindItem(curr_file)
|
||||
local curr_id = wx.wxIsAbsolutePath(curr_file) and projtree:FindItem(curr_file)
|
||||
if curr_id and projtree:IsBold(curr_id) then
|
||||
projtree:SetItemBold(curr_id, false)
|
||||
end
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,4 +1,4 @@
|
||||
-- Copyright 2011-14 Paul Kulchenko, ZeroBrane LLC
|
||||
-- Copyright 2011-15 Paul Kulchenko, ZeroBrane LLC
|
||||
-- authors: Luxinia Dev (Eike Decker & Christoph Kubisch)
|
||||
-- Lomtik Software (J. Winwood & John Labenski)
|
||||
---------------------------------------------------------
|
||||
@@ -25,19 +25,13 @@ do local gui, config = wx.wxTreeCtrl():GetFont(), ide.config.filetree
|
||||
ide.font.fNormal = gui
|
||||
end
|
||||
|
||||
-- funcList font requires similar handling
|
||||
do local gui, config = wx.wxTreeCtrl():GetFont(), ide.config.funclist
|
||||
if config.fontsize then gui:SetPointSize(config.fontsize) end
|
||||
if config.fontname then gui:SetFaceName(config.fontname) end
|
||||
ide.font.dNormal = gui
|
||||
end
|
||||
|
||||
-- ----------------------------------------------------------------------------
|
||||
-- Create the wxFrame
|
||||
-- ----------------------------------------------------------------------------
|
||||
local function createFrame()
|
||||
local frame = wx.wxFrame(wx.NULL, wx.wxID_ANY, GetIDEString("editor"),
|
||||
wx.wxDefaultPosition, wx.wxSize(1000, 700))
|
||||
wx.wxDefaultPosition, wx.wxSize(1100, 700))
|
||||
frame:Center()
|
||||
-- wrap into protected call as DragAcceptFiles fails on MacOS with
|
||||
-- wxwidgets 2.8.12 even though it should work according to change notes
|
||||
-- for 2.8.10: "Implemented wxWindow::DragAcceptFiles() on all platforms."
|
||||
@@ -45,22 +39,43 @@ local function createFrame()
|
||||
frame:Connect(wx.wxEVT_DROP_FILES,function(evt)
|
||||
local files = evt:GetFiles()
|
||||
if not files or #files == 0 then return end
|
||||
for i,f in ipairs(files) do
|
||||
for _, f in ipairs(files) do
|
||||
LoadFile(f,nil,true)
|
||||
end
|
||||
end)
|
||||
|
||||
-- update best size of the toolbar after resizing
|
||||
frame:Connect(wx.wxEVT_SIZE, function(event)
|
||||
local mgr = ide:GetUIManager()
|
||||
local toolbar = mgr:GetPane("toolbar")
|
||||
if toolbar and toolbar:IsOk() then
|
||||
toolbar:BestSize(event:GetSize():GetWidth(), ide:GetToolBar():GetClientSize():GetHeight())
|
||||
mgr:Update()
|
||||
end
|
||||
end)
|
||||
|
||||
local menuBar = wx.wxMenuBar()
|
||||
local statusBar = frame:CreateStatusBar(6)
|
||||
local statusBar = frame:CreateStatusBar(5)
|
||||
local section_width = statusBar:GetTextExtent("OVRW")
|
||||
statusBar:SetStatusStyles({wx.wxSB_FLAT, wx.wxSB_FLAT, wx.wxSB_FLAT,
|
||||
wx.wxSB_FLAT, wx.wxSB_FLAT, wx.wxSB_FLAT})
|
||||
statusBar:SetStatusWidths(
|
||||
{-1, section_width*6, section_width, section_width, section_width*5, section_width*4})
|
||||
statusBar:SetStatusStyles({wx.wxSB_FLAT, wx.wxSB_FLAT, wx.wxSB_FLAT, wx.wxSB_FLAT, wx.wxSB_FLAT})
|
||||
statusBar:SetStatusWidths({-1, section_width, section_width, section_width*5, section_width*4})
|
||||
statusBar:SetStatusText(GetIDEString("statuswelcome"))
|
||||
statusBar:Connect(wx.wxEVT_LEFT_DOWN, function (event)
|
||||
local rect = wx.wxRect()
|
||||
statusBar:GetFieldRect(4, rect)
|
||||
if rect:Contains(event:GetPosition()) then -- click on the interpreter
|
||||
local menuitem = ide:FindMenuItem(ID.INTERPRETER)
|
||||
if menuitem then
|
||||
local menu = ide:CloneMenu(menuitem:GetSubMenu())
|
||||
if menu then statusBar:PopupMenu(menu) end
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
local mgr = wxaui.wxAuiManager()
|
||||
mgr:SetManagedWindow(frame)
|
||||
-- allow the panes to be larger than the defalt 1/3 of the main window size
|
||||
mgr:SetDockSizeConstraint(0.8,0.8)
|
||||
|
||||
frame.menuBar = menuBar
|
||||
frame.statusBar = statusBar
|
||||
@@ -81,8 +96,9 @@ local function menuDropDownPosition(event)
|
||||
end
|
||||
|
||||
local function tbIconSize()
|
||||
-- use large icons by default on OSX and on large screens
|
||||
local iconsize = (tonumber(ide.config.toolbar and ide.config.toolbar.iconsize)
|
||||
or (ide.osname == 'Macintosh' and 24 or 16))
|
||||
or ((ide.osname == 'Macintosh' or wx.wxGetClientDisplayRect():GetWidth() >= 1500) and 24 or 16))
|
||||
if iconsize ~= 24 then iconsize = 16 end
|
||||
return iconsize
|
||||
end
|
||||
@@ -90,14 +106,10 @@ end
|
||||
local function createToolBar(frame)
|
||||
local toolBar = wxaui.wxAuiToolBar(frame, wx.wxID_ANY, wx.wxDefaultPosition, wx.wxDefaultSize,
|
||||
wxaui.wxAUI_TB_PLAIN_BACKGROUND)
|
||||
-- wxChoice is a bit too narrow on Linux, so make it a bit larger
|
||||
local funclist = wx.wxChoice.new(toolBar, ID "toolBar.funclist",
|
||||
wx.wxDefaultPosition, wx.wxSize.new(240, ide.osname == 'Unix' and 28 or 24))
|
||||
|
||||
-- there are two sets of icons: use 24 on OSX and 16 on others.
|
||||
local iconsize = tbIconSize()
|
||||
local toolBmpSize = wx.wxSize(iconsize, iconsize)
|
||||
local getBitmap = (ide.app.createbitmap or wx.wxArtProvider.GetBitmap)
|
||||
local icons, prev = ide.config.toolbar.icons
|
||||
for _, id in ipairs(icons) do
|
||||
if icons[id] ~= false then -- skip explicitly disabled icons
|
||||
@@ -110,14 +122,13 @@ local function createToolBar(frame)
|
||||
if iconmap then
|
||||
local icon, description = unpack(iconmap)
|
||||
local isbitmap = type(icon) == "userdata" and icon:GetClassInfo():GetClassName() == "wxBitmap"
|
||||
local bitmap = isbitmap and icon or getBitmap(icon, "TOOLBAR", toolBmpSize)
|
||||
toolBar:AddTool(id, "", bitmap, TR(description)..SCinB(id))
|
||||
local bitmap = isbitmap and icon or ide:GetBitmap(icon, "TOOLBAR", toolBmpSize)
|
||||
toolBar:AddTool(id, "", bitmap, (TR)(description)..SCinB(id))
|
||||
end
|
||||
end
|
||||
prev = id
|
||||
end
|
||||
end
|
||||
toolBar:AddControl(funclist)
|
||||
|
||||
toolBar:SetToolDropDown(ID_OPEN, true)
|
||||
toolBar:Connect(ID_OPEN, wxaui.wxEVT_COMMAND_AUITOOLBAR_TOOL_DROPDOWN, function(event)
|
||||
@@ -144,7 +155,6 @@ local function createToolBar(frame)
|
||||
toolBar:GetArtProvider():SetElementSize(wxaui.wxAUI_TBART_GRIPPER_SIZE, 0)
|
||||
toolBar:Realize()
|
||||
|
||||
toolBar.funclist = funclist
|
||||
frame.toolBar = toolBar
|
||||
return toolBar
|
||||
end
|
||||
@@ -214,6 +224,8 @@ local function createNotebook(frame)
|
||||
local editor = GetEditor(page)
|
||||
if editor then ide.openDocuments[editor:GetId()].index = page end
|
||||
end
|
||||
-- first set the selection on the dragged tab to reset its state
|
||||
notebook:SetSelection(event:GetSelection())
|
||||
-- select the content of the tab after drag is done
|
||||
SetEditorSelection(event:GetSelection())
|
||||
event:Skip()
|
||||
@@ -255,13 +267,14 @@ local function createNotebook(frame)
|
||||
or event:GetId() == ID_CLOSE and notebook:GetPageCount() <= 1)
|
||||
then event:Enable(false) end
|
||||
end
|
||||
local function IfModified(event) event:Enable(EditorIsModified(GetEditor(selection))) end
|
||||
|
||||
notebook:Connect(ID_SAVE, wx.wxEVT_COMMAND_MENU_SELECTED, function ()
|
||||
local editor = GetEditor(selection)
|
||||
SaveFile(editor, ide.openDocuments[editor:GetId()].filePath)
|
||||
ide:GetDocument(GetEditor(selection)):Save()
|
||||
end)
|
||||
notebook:Connect(ID_SAVE, wx.wxEVT_UPDATE_UI, function(event)
|
||||
local doc = ide:GetDocument(GetEditor(selection))
|
||||
event:Enable(doc:IsModified() or doc:IsNew())
|
||||
end)
|
||||
notebook:Connect(ID_SAVE, wx.wxEVT_UPDATE_UI, IfModified)
|
||||
notebook:Connect(ID_SAVEAS, wx.wxEVT_COMMAND_MENU_SELECTED, function()
|
||||
SaveFileAs(GetEditor(selection))
|
||||
end)
|
||||
@@ -286,29 +299,29 @@ local function createNotebook(frame)
|
||||
notebook:Connect(ID_SHOWLOCATION, wx.wxEVT_UPDATE_UI, IfAtLeastOneTab)
|
||||
|
||||
notebook:Connect(ID_COPYFULLPATH, wx.wxEVT_COMMAND_MENU_SELECTED, function()
|
||||
local tdo = wx.wxTextDataObject(ide:GetDocument(GetEditor(selection)):GetFilePath())
|
||||
if wx.wxClipboard:Get():Open() then
|
||||
wx.wxClipboard:Get():SetData(tdo)
|
||||
wx.wxClipboard:Get():Close()
|
||||
end
|
||||
ide:CopyToClipboard(ide:GetDocument(GetEditor(selection)):GetFilePath())
|
||||
end)
|
||||
|
||||
frame.notebook = notebook
|
||||
return notebook
|
||||
end
|
||||
|
||||
local function createBottomNotebook(frame)
|
||||
-- bottomnotebook (errorlog,shellbox)
|
||||
local bottomnotebook = wxaui.wxAuiNotebook(frame, wx.wxID_ANY,
|
||||
wx.wxDefaultPosition, wx.wxDefaultSize,
|
||||
wxaui.wxAUI_NB_DEFAULT_STYLE + wxaui.wxAUI_NB_TAB_EXTERNAL_MOVE
|
||||
- wxaui.wxAUI_NB_CLOSE_ON_ACTIVE_TAB + wx.wxNO_BORDER)
|
||||
|
||||
-- this handler allows dragging tabs into this bottom notebook
|
||||
bottomnotebook:Connect(wxaui.wxEVT_COMMAND_AUINOTEBOOK_ALLOW_DND,
|
||||
local function addDND(notebook)
|
||||
-- this handler allows dragging tabs into this notebook
|
||||
notebook:Connect(wxaui.wxEVT_COMMAND_AUINOTEBOOK_ALLOW_DND,
|
||||
function (event)
|
||||
local notebookfrom = event:GetDragSource()
|
||||
if notebookfrom ~= ide.frame.notebook then
|
||||
-- disable cross-notebook movement of specific tabs
|
||||
local win = notebookfrom:GetPage(event:GetSelection())
|
||||
if not win then return end
|
||||
local winid = win:GetId()
|
||||
if winid == ide:GetOutput():GetId()
|
||||
or winid == ide:GetConsole():GetId()
|
||||
or winid == ide:GetProjectTree():GetId()
|
||||
or ide.findReplace:IsPreview(win) -- search results preview
|
||||
then return end
|
||||
|
||||
local mgr = ide.frame.uimgr
|
||||
local pane = mgr:GetPane(notebookfrom)
|
||||
if not pane:IsOk() then return end -- not a managed window
|
||||
@@ -331,19 +344,19 @@ local function createBottomNotebook(frame)
|
||||
end
|
||||
end)
|
||||
|
||||
-- these handlers allow dragging tabs out of this bottom notebook.
|
||||
-- these handlers allow dragging tabs out of this notebook.
|
||||
-- I couldn't find a good way to stop dragging event as it's not known
|
||||
-- where the event is going to end when it's started, so we manipulate
|
||||
-- the flag that allows splits and disable it when needed.
|
||||
-- It is then enabled in BEGIN_DRAG event.
|
||||
bottomnotebook:Connect(wxaui.wxEVT_COMMAND_AUINOTEBOOK_BEGIN_DRAG,
|
||||
notebook:Connect(wxaui.wxEVT_COMMAND_AUINOTEBOOK_BEGIN_DRAG,
|
||||
function (event)
|
||||
event:Skip()
|
||||
|
||||
-- allow dragging if it was disabled earlier
|
||||
local flags = bottomnotebook:GetWindowStyleFlag()
|
||||
local flags = notebook:GetWindowStyleFlag()
|
||||
if bit.band(flags, wxaui.wxAUI_NB_TAB_SPLIT) == 0 then
|
||||
bottomnotebook:SetWindowStyleFlag(flags + wxaui.wxAUI_NB_TAB_SPLIT)
|
||||
notebook:SetWindowStyleFlag(flags + wxaui.wxAUI_NB_TAB_SPLIT)
|
||||
end
|
||||
end)
|
||||
|
||||
@@ -352,12 +365,12 @@ local function createBottomNotebook(frame)
|
||||
-- recreating it with the right control. This is complicated by the fact
|
||||
-- that tabs can be split, so if the destination is withing the area where
|
||||
-- splits happen, the tab is not removed.
|
||||
bottomnotebook:Connect(wxaui.wxEVT_COMMAND_AUINOTEBOOK_END_DRAG,
|
||||
notebook:Connect(wxaui.wxEVT_COMMAND_AUINOTEBOOK_END_DRAG,
|
||||
function (event)
|
||||
event:Skip()
|
||||
|
||||
local mgr = ide.frame.uimgr
|
||||
local win = mgr:GetPane(bottomnotebook).window
|
||||
local win = mgr:GetPane(notebook).window
|
||||
local x = win:GetScreenPosition():GetX()
|
||||
local y = win:GetScreenPosition():GetY()
|
||||
local w, h = win:GetSize():GetWidth(), win:GetSize():GetHeight()
|
||||
@@ -368,50 +381,69 @@ local function createBottomNotebook(frame)
|
||||
if mx >= x and mx <= x + w and my >= y and my <= y + h then return end
|
||||
|
||||
-- disallow split as the target is outside the notebook
|
||||
local flags = bottomnotebook:GetWindowStyleFlag()
|
||||
local flags = notebook:GetWindowStyleFlag()
|
||||
if bit.band(flags, wxaui.wxAUI_NB_TAB_SPLIT) ~= 0 then
|
||||
bottomnotebook:SetWindowStyleFlag(flags - wxaui.wxAUI_NB_TAB_SPLIT)
|
||||
notebook:SetWindowStyleFlag(flags - wxaui.wxAUI_NB_TAB_SPLIT)
|
||||
end
|
||||
|
||||
-- don't allow any dragging to the are of the pane header as it
|
||||
-- splits already split notebooks incorrectly (wxwidgets bug).
|
||||
if my >= y - 30 then return end
|
||||
|
||||
-- don't allow dragging out single tabs from tab ctrl
|
||||
-- as wxwidgets doesn't like removing pages from split notebooks.
|
||||
local tabctrl = event:GetEventObject():DynamicCast("wxAuiTabCtrl")
|
||||
if tabctrl:GetPageCount() == 1 then return end
|
||||
|
||||
local idx = event:GetSelection() -- index within the current tab ctrl
|
||||
local selection = bottomnotebook:GetPageIndex(tabctrl:GetPage(idx).window)
|
||||
local label = bottomnotebook:GetPageText(selection)
|
||||
local selection = notebook:GetPageIndex(tabctrl:GetPage(idx).window)
|
||||
local label = notebook:GetPageText(selection)
|
||||
local pane = ide:RestorePanelByLabel(label)
|
||||
if not pane then return end
|
||||
|
||||
-- names are translated on labels, so need to translate here as well
|
||||
local dragout = ({
|
||||
[TR("Watch")] = DebuggerAddWatchWindow,
|
||||
[TR("Stack")] = DebuggerAddStackWindow,
|
||||
})[label]
|
||||
if not dragout then return end
|
||||
|
||||
bottomnotebook:RemovePage(selection)
|
||||
|
||||
local pane = mgr:GetPane(dragout())
|
||||
pane:FloatingPosition(mx-10, my-10)
|
||||
pane:Show()
|
||||
notebook:RemovePage(selection)
|
||||
mgr:Update()
|
||||
end)
|
||||
end
|
||||
|
||||
local function createBottomNotebook(frame)
|
||||
-- bottomnotebook (errorlog,shellbox)
|
||||
local bottomnotebook = wxaui.wxAuiNotebook(frame, wx.wxID_ANY,
|
||||
wx.wxDefaultPosition, wx.wxDefaultSize,
|
||||
wxaui.wxAUI_NB_DEFAULT_STYLE + wxaui.wxAUI_NB_TAB_EXTERNAL_MOVE
|
||||
- wxaui.wxAUI_NB_CLOSE_ON_ACTIVE_TAB + wx.wxNO_BORDER)
|
||||
|
||||
addDND(bottomnotebook)
|
||||
|
||||
bottomnotebook:Connect(wxaui.wxEVT_COMMAND_AUINOTEBOOK_PAGE_CHANGED,
|
||||
function (event)
|
||||
if not ide.findReplace then return end
|
||||
local nb = event:GetEventObject():DynamicCast("wxAuiNotebook")
|
||||
local preview = ide.findReplace:IsPreview(nb:GetPage(nb:GetSelection()))
|
||||
local flags = nb:GetWindowStyleFlag()
|
||||
if preview and bit.band(flags, wxaui.wxAUI_NB_CLOSE_ON_ACTIVE_TAB) == 0 then
|
||||
nb:SetWindowStyleFlag(flags + wxaui.wxAUI_NB_CLOSE_ON_ACTIVE_TAB)
|
||||
elseif not preview and bit.band(flags, wxaui.wxAUI_NB_CLOSE_ON_ACTIVE_TAB) ~= 0 then
|
||||
nb:SetWindowStyleFlag(flags - wxaui.wxAUI_NB_CLOSE_ON_ACTIVE_TAB)
|
||||
end
|
||||
end)
|
||||
|
||||
-- disallow tabs closing
|
||||
bottomnotebook:Connect(wxaui.wxEVT_COMMAND_AUINOTEBOOK_PAGE_CLOSE,
|
||||
function (event) event:Veto() end)
|
||||
function (event)
|
||||
local nb = event:GetEventObject():DynamicCast("wxAuiNotebook")
|
||||
if ide.findReplace
|
||||
and ide.findReplace:IsPreview(nb:GetPage(nb:GetSelection())) then
|
||||
event:Skip()
|
||||
else
|
||||
event:Veto()
|
||||
end
|
||||
end)
|
||||
|
||||
local errorlog = wxstc.wxStyledTextCtrl(bottomnotebook, wx.wxID_ANY,
|
||||
local errorlog = ide:CreateStyledTextCtrl(bottomnotebook, wx.wxID_ANY,
|
||||
wx.wxDefaultPosition, wx.wxDefaultSize, wx.wxBORDER_NONE)
|
||||
|
||||
errorlog:Connect(wx.wxEVT_CONTEXT_MENU,
|
||||
function (event)
|
||||
errorlog:PopupMenu(
|
||||
wx.wxMenu {
|
||||
local menu = wx.wxMenu {
|
||||
{ ID_UNDO, TR("&Undo") },
|
||||
{ ID_REDO, TR("&Redo") },
|
||||
{ },
|
||||
@@ -422,16 +454,40 @@ local function createBottomNotebook(frame)
|
||||
{ },
|
||||
{ ID_CLEAROUTPUT, TR("C&lear Output Window") },
|
||||
}
|
||||
)
|
||||
PackageEventHandle("onMenuOutput", menu, errorlog, event)
|
||||
errorlog:PopupMenu(menu)
|
||||
end)
|
||||
|
||||
errorlog:Connect(ID_CLEAROUTPUT, wx.wxEVT_COMMAND_MENU_SELECTED,
|
||||
function(event)
|
||||
ClearOutput()
|
||||
function(event) ClearOutput(true) end)
|
||||
|
||||
local shellbox = ide:CreateStyledTextCtrl(bottomnotebook, wx.wxID_ANY,
|
||||
wx.wxDefaultPosition, wx.wxDefaultSize, wx.wxBORDER_NONE)
|
||||
|
||||
local menupos
|
||||
shellbox:Connect(wx.wxEVT_CONTEXT_MENU,
|
||||
function (event)
|
||||
local menu = wx.wxMenu {
|
||||
{ ID_UNDO, TR("&Undo") },
|
||||
{ ID_REDO, TR("&Redo") },
|
||||
{ },
|
||||
{ ID_CUT, TR("Cu&t") },
|
||||
{ ID_COPY, TR("&Copy") },
|
||||
{ ID_PASTE, TR("&Paste") },
|
||||
{ ID_SELECTALL, TR("Select &All") },
|
||||
{ },
|
||||
{ ID_SELECTCONSOLECOMMAND, TR("&Select Command") },
|
||||
{ ID_CLEARCONSOLE, TR("C&lear Console Window") },
|
||||
}
|
||||
menupos = event:GetPosition()
|
||||
PackageEventHandle("onMenuConsole", menu, shellbox, event)
|
||||
shellbox:PopupMenu(menu)
|
||||
end)
|
||||
|
||||
local shellbox = wxstc.wxStyledTextCtrl(bottomnotebook, wx.wxID_ANY,
|
||||
wx.wxDefaultPosition, wx.wxDefaultSize, wx.wxBORDER_NONE)
|
||||
shellbox:Connect(ID_SELECTCONSOLECOMMAND, wx.wxEVT_COMMAND_MENU_SELECTED,
|
||||
function(event) ConsoleSelectCommand(menupos) end)
|
||||
shellbox:Connect(ID_CLEARCONSOLE, wx.wxEVT_COMMAND_MENU_SELECTED,
|
||||
function(event) ide:GetConsole():Erase() end)
|
||||
|
||||
bottomnotebook:AddPage(errorlog, TR("Output"), true)
|
||||
bottomnotebook:AddPage(shellbox, TR("Local console"), false)
|
||||
@@ -446,9 +502,11 @@ end
|
||||
local function createProjNotebook(frame)
|
||||
local projnotebook = wxaui.wxAuiNotebook(frame, wx.wxID_ANY,
|
||||
wx.wxDefaultPosition, wx.wxDefaultSize,
|
||||
wxaui.wxAUI_NB_DEFAULT_STYLE
|
||||
wxaui.wxAUI_NB_DEFAULT_STYLE + wxaui.wxAUI_NB_TAB_EXTERNAL_MOVE
|
||||
- wxaui.wxAUI_NB_CLOSE_ON_ACTIVE_TAB + wx.wxNO_BORDER)
|
||||
|
||||
addDND(projnotebook)
|
||||
|
||||
-- disallow tabs closing
|
||||
projnotebook:Connect(wxaui.wxEVT_COMMAND_AUINOTEBOOK_PAGE_CLOSE,
|
||||
function (event) event:Veto() end)
|
||||
@@ -479,7 +537,7 @@ do
|
||||
Name("notebook"):
|
||||
CenterPane():PaneBorder(false))
|
||||
mgr:AddPane(frame.projnotebook, wxaui.wxAuiPaneInfo():
|
||||
Name("projpanel"):CaptionVisible(false):Caption(TR("Project")):
|
||||
Name("projpanel"):CaptionVisible(false):
|
||||
MinSize(200,200):FloatingSize(200,400):
|
||||
Left():Layer(1):Position(1):PaneBorder(false):
|
||||
CloseButton(true):MaximizeButton(false):PinButton(true))
|
||||
@@ -489,9 +547,12 @@ do
|
||||
Bottom():Layer(1):Position(1):PaneBorder(false):
|
||||
CloseButton(true):MaximizeButton(false):PinButton(true))
|
||||
|
||||
for _, uimgr in pairs {mgr, frame.notebook:GetAuiManager(),
|
||||
frame.bottomnotebook:GetAuiManager(), frame.projnotebook:GetAuiManager()} do
|
||||
uimgr:GetArtProvider():SetMetric(wxaui.wxAUI_DOCKART_SASH_SIZE, 2)
|
||||
if type(ide.config.bordersize) == 'number' then
|
||||
for _, uimgr in pairs {mgr, frame.notebook:GetAuiManager(),
|
||||
frame.bottomnotebook:GetAuiManager(), frame.projnotebook:GetAuiManager()} do
|
||||
uimgr:GetArtProvider():SetMetric(wxaui.wxAUI_DOCKART_SASH_SIZE,
|
||||
ide.config.bordersize)
|
||||
end
|
||||
end
|
||||
|
||||
for _, nb in pairs {frame.bottomnotebook, frame.projnotebook} do
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
-- Copyright 2011-14 Paul Kulchenko, ZeroBrane LLC
|
||||
-- Copyright 2011-15 Paul Kulchenko, ZeroBrane LLC
|
||||
-- authors: Lomtik Software (J. Winwood & John Labenski)
|
||||
-- Luxinia Dev (Eike Decker & Christoph Kubisch)
|
||||
---------------------------------------------------------
|
||||
@@ -25,9 +25,6 @@ ID_NEWFILE = NewID()
|
||||
ID_NEWDIRECTORY = NewID()
|
||||
ID_RENAMEFILE = NewID()
|
||||
ID_DELETEFILE = NewID()
|
||||
ID_OPENEXTENSION = NewID()
|
||||
ID_COPYFULLPATH = NewID()
|
||||
ID_SHOWLOCATION = NewID()
|
||||
ID_SAVE = linux and NewID() or wx.wxID_SAVE
|
||||
ID_SAVEAS = linux and NewID() or wx.wxID_SAVEAS
|
||||
ID_SAVEALL = NewID()
|
||||
@@ -38,6 +35,8 @@ ID_RECENTFILESNEXT = NewID()
|
||||
ID_RECENTPROJECTS = NewID()
|
||||
ID_RECENTPROJECTSCLEAR = NewID()
|
||||
ID_RECENTPROJECTSPREV = NewID()
|
||||
ID_PRINT = NewID()
|
||||
ID_PAGESETUP = NewID()
|
||||
ID_EXIT = linux and NewID() or wx.wxID_EXIT
|
||||
-- Edit menu
|
||||
ID_CUT = linux and NewID() or wx.wxID_CUT
|
||||
@@ -58,6 +57,11 @@ ID_BOOKMARK = NewID()
|
||||
ID_BOOKMARKTOGGLE = NewID()
|
||||
ID_BOOKMARKNEXT = NewID()
|
||||
ID_BOOKMARKPREV = NewID()
|
||||
ID_NAVIGATE = NewID()
|
||||
ID_NAVIGATETOFILE = NewID()
|
||||
ID_NAVIGATETOLINE = NewID()
|
||||
ID_NAVIGATETOSYMBOL = NewID()
|
||||
ID_NAVIGATETOMETHOD = NewID()
|
||||
-- don't use wx.wxID_PREFERENCES to avoid merging with OSX app menu, because
|
||||
-- Apple guidelines describe Preferences as a "normal" item without submenus.
|
||||
ID_PREFERENCES = NewID()
|
||||
@@ -72,13 +76,14 @@ ID_FINDSELECTPREV = NewID()
|
||||
ID_REPLACE = NewID()
|
||||
ID_FINDINFILES = NewID()
|
||||
ID_REPLACEINFILES = NewID()
|
||||
ID_GOTOLINE = NewID()
|
||||
ID_SORT = NewID()
|
||||
-- View menu
|
||||
ID_VIEWFILETREE = NewID()
|
||||
ID_VIEWOUTPUT = NewID()
|
||||
ID_VIEWCALLSTACK = NewID()
|
||||
ID_VIEWWATCHWINDOW = NewID()
|
||||
ID_VIEWOUTLINE = NewID()
|
||||
ID_VIEWMARKERS = NewID()
|
||||
ID_VIEWTOOLBAR = NewID()
|
||||
ID_VIEWSTATUSBAR = NewID()
|
||||
ID_VIEWDEFAULTLAYOUT = NewID()
|
||||
@@ -89,7 +94,11 @@ ID_ZOOMRESET = NewID()
|
||||
ID_ZOOMIN = NewID()
|
||||
ID_ZOOMOUT = NewID()
|
||||
-- Project menu
|
||||
ID_TOGGLEBREAKPOINT = NewID()
|
||||
ID_BREAKPOINT = NewID()
|
||||
ID_BREAKPOINTTOGGLE = NewID()
|
||||
ID_BREAKPOINTNEXT = NewID()
|
||||
ID_BREAKPOINTPREV = NewID()
|
||||
ID_TOGGLEBREAKPOINT = ID_BREAKPOINTTOGGLE -- for compatibility; to remove after v1.30
|
||||
ID_COMPILE = NewID()
|
||||
ID_ANALYZE = NewID()
|
||||
ID_RUN = NewID()
|
||||
@@ -101,13 +110,16 @@ ID_DETACHDEBUG = NewID()
|
||||
ID_STEP = NewID()
|
||||
ID_STEPOVER = NewID()
|
||||
ID_STEPOUT = NewID()
|
||||
ID_RUNTO = NewID()
|
||||
ID_BREAK = NewID()
|
||||
ID_TRACE = NewID()
|
||||
ID_CLEAROUTPUT = NewID()
|
||||
ID_CLEARCONSOLE = NewID()
|
||||
ID_COMMANDLINEPARAMETERS = NewID()
|
||||
ID_INTERPRETER = NewID()
|
||||
ID_PROJECTDIR = NewID()
|
||||
ID_PROJECTDIRFROMFILE = NewID()
|
||||
ID_PROJECTDIRFROMDIR = NewID()
|
||||
ID_PROJECTDIRCHOOSE = NewID()
|
||||
-- Help menu
|
||||
ID_ABOUT = linux and NewID() or wx.wxID_ABOUT
|
||||
@@ -121,6 +133,7 @@ ID_HELPCOMMUNITY = NewID()
|
||||
ID_ADDWATCH = NewID()
|
||||
ID_EDITWATCH = NewID()
|
||||
ID_DELETEWATCH = NewID()
|
||||
ID_COPYWATCHVALUE = NewID()
|
||||
-- Editor popup menu items
|
||||
ID_GOTODEFINITION = NewID()
|
||||
ID_RENAMEALLINSTANCES = NewID()
|
||||
@@ -128,13 +141,50 @@ ID_REPLACEALLSELECTIONS = NewID()
|
||||
ID_QUICKADDWATCH = NewID()
|
||||
ID_QUICKEVAL = NewID()
|
||||
ID_ADDTOSCRATCHPAD = NewID()
|
||||
-- filetree menu
|
||||
ID_HIDEEXTENSION = NewID()
|
||||
ID_SETSTARTFILE = NewID()
|
||||
ID_UNSETSTARTFILE = NewID()
|
||||
ID_SHOWEXTENSION = NewID()
|
||||
ID_SHOWEXTENSIONALL = NewID()
|
||||
ID_MAPDIRECTORY = NewID()
|
||||
ID_UNMAPDIRECTORY = NewID()
|
||||
ID_OPENEXTENSION = NewID()
|
||||
ID_COPYFULLPATH = NewID()
|
||||
ID_SHOWLOCATION = NewID()
|
||||
ID_REFRESH = NewID()
|
||||
ID_SYMBOLDIRREFRESH = NewID()
|
||||
ID_SYMBOLDIRINDEX = NewID()
|
||||
ID_SYMBOLDIRDISABLE = NewID()
|
||||
ID_SYMBOLDIRENABLE = NewID()
|
||||
-- outline menu
|
||||
ID_OUTLINESORT = NewID()
|
||||
-- console menu
|
||||
ID_SELECTCONSOLECOMMAND = NewID()
|
||||
-- search toolbar
|
||||
ID_FINDALL = NewID()
|
||||
ID_FINDREPLACENEXT = NewID()
|
||||
ID_FINDREPLACEALL = NewID()
|
||||
ID_FINDSETDIR = NewID()
|
||||
ID_FINDSETTOPROJDIR = NewID()
|
||||
ID_FINDOPTSCOPE = NewID()
|
||||
ID_FINDOPTSTATUS = NewID()
|
||||
ID_FINDOPTDIRECTION = NewID()
|
||||
ID_FINDOPTWRAPWROUND = NewID()
|
||||
ID_FINDOPTSELECTION = NewID()
|
||||
ID_FINDOPTWORD = NewID()
|
||||
ID_FINDOPTCASE = NewID()
|
||||
ID_FINDOPTREGEX = NewID()
|
||||
ID_FINDOPTCONTEXT = NewID()
|
||||
ID_FINDOPTSUBDIR = NewID()
|
||||
ID_FINDOPTMULTIRESULTS = NewID()
|
||||
ID_RECENTSCOPECLEAR = NewID()
|
||||
|
||||
local ids = {}
|
||||
function ID (name)
|
||||
ids[name] = ids[name] or NewID()
|
||||
return ids[name]
|
||||
function IDgen (name)
|
||||
ids[name] = ids[name] or NewID()
|
||||
return ids[name]
|
||||
end
|
||||
function IDget (name) return ids[name] end
|
||||
|
||||
function IDget (name)
|
||||
return ids[name]
|
||||
end
|
||||
ID = setmetatable({}, ide.proto.ID)
|
||||
|
||||
@@ -1,9 +1,8 @@
|
||||
-- Copyright 2012-14 Paul Kulchenko, ZeroBrane LLC
|
||||
-- Copyright 2012-15 Paul Kulchenko, ZeroBrane LLC
|
||||
-- Integration with LuaInspect
|
||||
---------------------------------------------------------
|
||||
|
||||
local M, LA, LI, T = {}
|
||||
local FAST = true
|
||||
|
||||
local function init()
|
||||
if LA then return end
|
||||
@@ -16,34 +15,43 @@ local function init()
|
||||
LA = require "luainspect.ast"
|
||||
LI = require "luainspect.init"
|
||||
T = require "luainspect.types"
|
||||
end
|
||||
|
||||
if FAST then
|
||||
LI.eval_comments = function () end
|
||||
LI.infer_values = function () end
|
||||
end
|
||||
function M.pos2line(pos)
|
||||
return pos and 1 + select(2, M.src:sub(1,pos):gsub(".-\n[^\n]*", ""))
|
||||
end
|
||||
|
||||
function M.warnings_from_string(src, file)
|
||||
init()
|
||||
|
||||
local ast, err, linenum, colnum = LA.ast_from_string(src, file)
|
||||
if err then return nil, err, linenum, colnum end
|
||||
if not ast and err then return nil, err, linenum, colnum end
|
||||
|
||||
if FAST then
|
||||
LI.inspect(ast, nil, src)
|
||||
LA.ensure_parents_marked(ast)
|
||||
else
|
||||
LI.uninspect(ast)
|
||||
if ide.config.staticanalyzer.infervalue then
|
||||
local tokenlist = LA.ast_to_tokenlist(ast, src)
|
||||
LI.clear_cache()
|
||||
LI.inspect(ast, tokenlist, src)
|
||||
LI.mark_related_keywords(ast, tokenlist, src)
|
||||
else
|
||||
-- stub out LI functions that depend on tokenlist,
|
||||
-- which is not built in the "fast" mode
|
||||
local ec, iv = LI.eval_comments, LI.infer_values
|
||||
LI.eval_comments, LI.infer_values = function() end, function() end
|
||||
|
||||
LI.inspect(ast, nil, src)
|
||||
LA.ensure_parents_marked(ast)
|
||||
|
||||
LI.eval_comments, LI.infer_values = ec, iv
|
||||
end
|
||||
|
||||
local globinit = {}
|
||||
local globinit = {arg = true} -- skip `arg` global variable
|
||||
local spec = GetSpec(wx.wxFileName(file):GetExt())
|
||||
for k in pairs(spec and GetApi(spec.apitype or "none").ac.childs or {}) do
|
||||
globinit[k] = true
|
||||
end
|
||||
|
||||
M.src, M.file = src, file
|
||||
return M.show_warnings(ast, globinit)
|
||||
end
|
||||
|
||||
@@ -52,31 +60,40 @@ local function cleanError(err)
|
||||
end
|
||||
|
||||
function AnalyzeFile(file)
|
||||
local warn, err, line, pos = M.warnings_from_string(FileRead(file), file)
|
||||
local src, err = FileRead(file)
|
||||
if not src and err then return nil, TR("Can't open file '%s': %s"):format(file, err) end
|
||||
|
||||
local warn, err, line, pos = M.warnings_from_string(src, file)
|
||||
return warn, cleanError(err), line, pos
|
||||
end
|
||||
|
||||
function AnalyzeString(src)
|
||||
local warn, err, line, pos = M.warnings_from_string(src, "<string>")
|
||||
function AnalyzeString(src, file)
|
||||
local warn, err, line, pos = M.warnings_from_string(src, file or "<string>")
|
||||
return warn, cleanError(err), line, pos
|
||||
end
|
||||
|
||||
function M.show_warnings(top_ast, globinit)
|
||||
local warnings = {}
|
||||
local function warn(msg, linenum, path)
|
||||
warnings[#warnings+1] = (path or "?") .. ":" .. (linenum or 0) .. ": " .. msg
|
||||
warnings[#warnings+1] = (path or M.file or "?") .. ":" .. (linenum or M.pos2line(M.ast.pos) or 0) .. ": " .. msg
|
||||
end
|
||||
local function known(o) return not T.istype[o] end
|
||||
local function index(f) -- build abc.def.xyz name recursively
|
||||
return (f[1].tag == 'Id' and f[1][1] or index(f[1])) .. '.' .. f[2][1] end
|
||||
if not f or f.tag ~= 'Index' or not f[1] or not f[2] then return end
|
||||
local main = f[1].tag == 'Id' and f[1][1] or index(f[1])
|
||||
return main and type(f[2][1]) == "string" and (main .. '.' .. f[2][1]) or nil
|
||||
end
|
||||
local globseen, isseen, fieldseen = globinit or {}, {}, {}
|
||||
LA.walk(top_ast, function(ast)
|
||||
M.ast = ast
|
||||
local path, line = tostring(ast.lineinfo):gsub('<C|','<'):match('<([^|]+)|L(%d+)')
|
||||
local name = ast[1]
|
||||
-- check if we're masking a variable in the same scope
|
||||
if ast.localmasking and name ~= '_' and
|
||||
ast.level == ast.localmasking.level then
|
||||
local linenum = tostring(ast.localmasking.lineinfo.first):match('|L(%d+)')
|
||||
local linenum = ast.localmasking.lineinfo
|
||||
and tostring(ast.localmasking.lineinfo.first):match('|L(%d+)')
|
||||
or M.pos2line(ast.localmasking.pos)
|
||||
local parent = ast.parent and ast.parent.parent
|
||||
local func = parent and parent.tag == 'Localrec'
|
||||
warn("local " .. (func and 'function' or 'variable') .. " '" ..
|
||||
@@ -118,7 +135,7 @@ function M.show_warnings(top_ast, globinit)
|
||||
line, path)
|
||||
end
|
||||
else
|
||||
if parent.tag == 'Localrec' then -- local function foo...
|
||||
if parent and parent.tag == 'Localrec' then -- local function foo...
|
||||
warn("unused local function '" .. name .. "'", line, path)
|
||||
else
|
||||
warn("unused local variable '" .. name .. "'; "..
|
||||
@@ -126,16 +143,24 @@ function M.show_warnings(top_ast, globinit)
|
||||
end
|
||||
end
|
||||
end
|
||||
-- added check for FAST as ast.seevalue relies on value evaluation,
|
||||
-- added check for "fast" mode as ast.seevalue relies on value evaluation,
|
||||
-- which is very slow even on simple and short scripts
|
||||
if not FAST and ast.isfield and not(known(ast.seevalue.value) and ast.seevalue.value ~= nil) then
|
||||
if ide.config.staticanalyzer.infervalue and ast.isfield
|
||||
and not(known(ast.seevalue.value) and ast.seevalue.value ~= nil) then
|
||||
if not fieldseen[name] then
|
||||
fieldseen[name] = true
|
||||
local parent = ast.parent
|
||||
and (" in '"..index(ast.parent):gsub("%."..name.."$","").."'")
|
||||
local var = index(ast.parent)
|
||||
local parent = ast.parent and var
|
||||
and (" in '"..var:gsub("%."..name.."$","").."'")
|
||||
or ""
|
||||
warn("first use of unknown field '" .. name .."'"..parent,
|
||||
tostring(ast.lineinfo.first):match('|L(%d+)'), path)
|
||||
|
||||
local tblref = ast.parent and ast.parent[1]
|
||||
local localparam = (tblref and tblref.localdefinition
|
||||
and tblref.localdefinition.isparam)
|
||||
if not localparam then
|
||||
warn("first use of unknown field '" .. name .."'"..parent,
|
||||
ast.lineinfo and tostring(ast.lineinfo.first):match('|L(%d+)'), path)
|
||||
end
|
||||
end
|
||||
elseif ast.tag == 'Id' and not ast.localdefinition and not ast.definedglobal then
|
||||
if not globseen[name] then
|
||||
@@ -183,26 +208,25 @@ if compilepos then
|
||||
menu:Insert(compilepos+1, ID_ANALYZE, TR("Analyze")..KSC(ID_ANALYZE), TR("Analyze the source code"))
|
||||
end
|
||||
|
||||
local debugger = ide.debugger
|
||||
local openDocuments = ide.openDocuments
|
||||
|
||||
local function analyzeProgram(editor)
|
||||
if ide:GetMenuBar():IsChecked(ID_CLEAROUTPUT) then ClearOutput() end
|
||||
-- save all files (if requested) for "infervalue" analysis to keep the changes on disk
|
||||
if ide.config.editor.saveallonrun and ide.config.staticanalyzer.infervalue then SaveAll(true) end
|
||||
if ide:GetLaunchedProcess() == nil and not ide:GetDebugger():IsConnected() then ClearOutput() end
|
||||
DisplayOutput("Analyzing the source code")
|
||||
frame:Update()
|
||||
|
||||
local editorText = editor:GetText()
|
||||
local editorText = editor:GetTextDyn()
|
||||
local doc = ide:GetDocument(editor)
|
||||
local filePath = doc:GetFilePath() or doc:GetFileName()
|
||||
local warn, err = M.warnings_from_string(editorText, filePath)
|
||||
if err then -- report compilation error
|
||||
DisplayOutput((": not completed.\n%s\n"):format(cleanError(err)))
|
||||
DisplayOutputLn((": not completed.\n%s"):format(cleanError(err)))
|
||||
return false
|
||||
end
|
||||
|
||||
DisplayOutput((": %s warning%s.\n")
|
||||
DisplayOutputLn((": %s warning%s.")
|
||||
:format(#warn > 0 and #warn or 'no', #warn == 1 and '' or 's'))
|
||||
DisplayOutputNoMarker(table.concat(warn, "\n") .. "\n")
|
||||
DisplayOutputNoMarker(table.concat(warn, "\n") .. (#warn > 0 and "\n" or ""))
|
||||
|
||||
return true -- analyzed ok
|
||||
end
|
||||
@@ -216,7 +240,4 @@ frame:Connect(ID_ANALYZE, wx.wxEVT_COMMAND_MENU_SELECTED,
|
||||
end
|
||||
end)
|
||||
frame:Connect(ID_ANALYZE, wx.wxEVT_UPDATE_UI,
|
||||
function (event)
|
||||
local editor = GetEditor()
|
||||
event:Enable((debugger.server == nil and debugger.pid == nil) and (editor ~= nil))
|
||||
end)
|
||||
function (event) event:Enable(GetEditor() ~= nil) end)
|
||||
|
||||
@@ -25,84 +25,91 @@ listed below (again, case doesn't matter):
|
||||
|
||||
ide.config.keymap = {
|
||||
-- File menu
|
||||
[ID_NEW] = "Ctrl-N",
|
||||
[ID_OPEN] = "Ctrl-O",
|
||||
[ID_CLOSE] = "Ctrl-W",
|
||||
[ID_SAVE] = "Ctrl-S",
|
||||
[ID_SAVEAS] = "Alt-Shift-S",
|
||||
[ID_SAVEALL] = "",
|
||||
[ID_RECENTFILES] = "",
|
||||
[ID_RECENTFILESPREV] = "Ctrl-,",
|
||||
[ID_RECENTFILESNEXT] = "Ctrl-.",
|
||||
[ID_EXIT] = "Ctrl-Q",
|
||||
[ID_RECENTPROJECTSPREV] = "Ctrl-Shift-<",
|
||||
[ID.NEW] = "Ctrl-N",
|
||||
[ID.OPEN] = "Ctrl-O",
|
||||
[ID.CLOSE] = "Ctrl-W",
|
||||
[ID.SAVE] = "Ctrl-S",
|
||||
[ID.SAVEAS] = "Alt-Shift-S",
|
||||
[ID.SAVEALL] = "",
|
||||
[ID.RECENTFILES] = "",
|
||||
[ID.RECENTFILESPREV] = "Ctrl-,",
|
||||
[ID.RECENTFILESNEXT] = "Ctrl-.",
|
||||
[ID.EXIT] = "Ctrl-Q",
|
||||
[ID.RECENTPROJECTSPREV] = "Ctrl-Shift-<",
|
||||
-- Edit menu
|
||||
[ID_CUT] = "Ctrl-X",
|
||||
[ID_COPY] = "Ctrl-C",
|
||||
[ID_PASTE] = "Ctrl-V",
|
||||
[ID_SELECTALL] = "Ctrl-A",
|
||||
[ID_UNDO] = "Ctrl-Z",
|
||||
[ID_REDO] = "Ctrl-Y",
|
||||
[ID_SHOWTOOLTIP] = "Ctrl-T",
|
||||
[ID_AUTOCOMPLETE] = "Ctrl-K",
|
||||
[ID_AUTOCOMPLETEENABLE] = "",
|
||||
[ID_COMMENT] = "Ctrl-U",
|
||||
[ID_FOLD] = "F12",
|
||||
[ID_CLEARDYNAMICWORDS] = "",
|
||||
[ID_REINDENT] = "Ctrl-I",
|
||||
[ID_BOOKMARKTOGGLE] = "Ctrl-F2",
|
||||
[ID_BOOKMARKNEXT] = "F2",
|
||||
[ID_BOOKMARKPREV] = "Shift-F2",
|
||||
[ID.CUT] = "Ctrl-X",
|
||||
[ID.COPY] = "Ctrl-C",
|
||||
[ID.PASTE] = "Ctrl-V",
|
||||
[ID.SELECTALL] = "Ctrl-A",
|
||||
[ID.UNDO] = "Ctrl-Z",
|
||||
[ID.REDO] = "Ctrl-Y",
|
||||
[ID.SHOWTOOLTIP] = "Ctrl-T",
|
||||
[ID.AUTOCOMPLETE] = "Ctrl-K",
|
||||
[ID.AUTOCOMPLETEENABLE] = "",
|
||||
[ID.COMMENT] = "Ctrl-U",
|
||||
[ID.FOLD] = "F12",
|
||||
[ID.CLEARDYNAMICWORDS] = "",
|
||||
[ID.REINDENT] = "Ctrl-I",
|
||||
[ID.BOOKMARKTOGGLE] = "Ctrl-F2",
|
||||
[ID.BOOKMARKNEXT] = "F2",
|
||||
[ID.BOOKMARKPREV] = "Shift-F2",
|
||||
[ID.NAVIGATETOFILE] = "Ctrl-P",
|
||||
[ID.NAVIGATETOLINE] = "Ctrl-G",
|
||||
[ID.NAVIGATETOSYMBOL] = "Ctrl-B",
|
||||
[ID.NAVIGATETOMETHOD] = "Ctrl-;",
|
||||
-- Search menu
|
||||
[ID_FIND] = "Ctrl-F",
|
||||
[ID_FINDNEXT] = "F3",
|
||||
[ID_FINDPREV] = "Shift-F3",
|
||||
[ID_FINDSELECTNEXT] = "Ctrl-F3",
|
||||
[ID_FINDSELECTPREV] = "Ctrl-Shift-F3",
|
||||
[ID_REPLACE] = "Ctrl-R",
|
||||
[ID_FINDINFILES] = "Ctrl-Shift-F",
|
||||
[ID_REPLACEINFILES] = "Ctrl-Shift-R",
|
||||
[ID_GOTOLINE] = "Ctrl-G",
|
||||
[ID_SORT] = "",
|
||||
[ID.FIND] = "Ctrl-F",
|
||||
[ID.FINDNEXT] = "F3",
|
||||
[ID.FINDPREV] = "Shift-F3",
|
||||
[ID.FINDSELECTNEXT] = "Ctrl-F3",
|
||||
[ID.FINDSELECTPREV] = "Ctrl-Shift-F3",
|
||||
[ID.REPLACE] = "Ctrl-R",
|
||||
[ID.FINDINFILES] = "Ctrl-Shift-F",
|
||||
[ID.REPLACEINFILES] = "Ctrl-Shift-R",
|
||||
[ID.SORT] = "",
|
||||
-- View menu
|
||||
[ID_VIEWFILETREE] = "Ctrl-Shift-P",
|
||||
[ID_VIEWOUTPUT] = "Ctrl-Shift-O",
|
||||
[ID_VIEWWATCHWINDOW] = "Ctrl-Shift-W",
|
||||
[ID_VIEWCALLSTACK] = "Ctrl-Shift-S",
|
||||
[ID_VIEWDEFAULTLAYOUT] = "",
|
||||
[ID_VIEWFULLSCREEN] = "Ctrl-Shift-A",
|
||||
[ID_ZOOMRESET] = "Ctrl-0",
|
||||
[ID_ZOOMIN] = "Ctrl-+",
|
||||
[ID_ZOOMOUT] = "Ctrl--",
|
||||
[ID.VIEWFILETREE] = "Ctrl-Shift-P",
|
||||
[ID.VIEWOUTPUT] = "Ctrl-Shift-O",
|
||||
[ID.VIEWWATCHWINDOW] = "Ctrl-Shift-W",
|
||||
[ID.VIEWCALLSTACK] = "Ctrl-Shift-S",
|
||||
[ID.VIEWDEFAULTLAYOUT] = "",
|
||||
[ID.VIEWFULLSCREEN] = "Ctrl-Shift-A",
|
||||
[ID.ZOOMRESET] = "Ctrl-0",
|
||||
[ID.ZOOMIN] = "Ctrl-+",
|
||||
[ID.ZOOMOUT] = "Ctrl--",
|
||||
-- Project menu
|
||||
[ID_RUN] = "F6",
|
||||
[ID_RUNNOW] = "Ctrl-F6",
|
||||
[ID_COMPILE] = "F7",
|
||||
[ID_ANALYZE] = "Shift-F7",
|
||||
[ID_STARTDEBUG] = "F5",
|
||||
[ID_ATTACHDEBUG] = "",
|
||||
[ID_STOPDEBUG] = "Shift-F5",
|
||||
[ID_STEP] = "F10",
|
||||
[ID_STEPOVER] = "Shift-F10",
|
||||
[ID_STEPOUT] = "Ctrl-F10",
|
||||
[ID_TRACE] = "",
|
||||
[ID_BREAK] = "Shift-F9",
|
||||
[ID_TOGGLEBREAKPOINT] = "F9",
|
||||
[ID_CLEAROUTPUT] = "",
|
||||
[ID_INTERPRETER] = "",
|
||||
[ID_PROJECTDIR] = "",
|
||||
[ID.RUN] = "F6",
|
||||
[ID.RUNNOW] = "Ctrl-F6",
|
||||
[ID.COMPILE] = "F7",
|
||||
[ID.ANALYZE] = "Shift-F7",
|
||||
[ID.STARTDEBUG] = "F5",
|
||||
[ID.ATTACHDEBUG] = "",
|
||||
[ID.DETACHDEBUG] = "",
|
||||
[ID.STOPDEBUG] = "Shift-F5",
|
||||
[ID.STEP] = "F10",
|
||||
[ID.STEPOVER] = "Shift-F10",
|
||||
[ID.STEPOUT] = "Ctrl-F10",
|
||||
[ID.RUNTO] = "Ctrl-Shift-F10",
|
||||
[ID.TRACE] = "",
|
||||
[ID.BREAK] = "",
|
||||
[ID.BREAKPOINTTOGGLE] = "Ctrl-F9",
|
||||
[ID.BREAKPOINTNEXT] = "F9",
|
||||
[ID.BREAKPOINTPREV] = "Shift-F9",
|
||||
[ID.CLEAROUTPUT] = "",
|
||||
[ID.INTERPRETER] = "",
|
||||
[ID.PROJECTDIR] = "",
|
||||
-- Help menu
|
||||
[ID_ABOUT] = "F1",
|
||||
[ID.ABOUT] = "F1",
|
||||
-- Watch window menu items
|
||||
[ID_ADDWATCH] = "Ins",
|
||||
[ID_EDITWATCH] = "F2",
|
||||
[ID_DELETEWATCH] = "Del",
|
||||
[ID.ADDWATCH] = "Ins",
|
||||
[ID.EDITWATCH] = "F2",
|
||||
[ID.DELETEWATCH] = "Del",
|
||||
-- Editor popup menu items
|
||||
[ID_QUICKADDWATCH] = "",
|
||||
[ID_QUICKEVAL] = "",
|
||||
[ID.QUICKADDWATCH] = "",
|
||||
[ID.QUICKEVAL] = "",
|
||||
-- Filetree popup menu items
|
||||
[ID_RENAMEFILE] = "F2",
|
||||
[ID_DELETEFILE] = "Del",
|
||||
[ID.RENAMEFILE] = "F2",
|
||||
[ID.DELETEFILE] = "Del",
|
||||
}
|
||||
|
||||
function KSC(id, default)
|
||||
|
||||
247
src/editor/markers.lua
Normal file
247
src/editor/markers.lua
Normal file
@@ -0,0 +1,247 @@
|
||||
-- Copyright 2015 Paul Kulchenko, ZeroBrane LLC
|
||||
|
||||
local ide = ide
|
||||
ide.markers = {
|
||||
markersCtrl = nil,
|
||||
imglist = ide:CreateImageList("MARKERS", "FILE-NORMAL", "DEBUG-BREAKPOINT-TOGGLE", "BOOKMARK-TOGGLE"),
|
||||
needrefresh = {},
|
||||
settings = {markers = {}},
|
||||
}
|
||||
|
||||
local unpack = table.unpack or unpack
|
||||
local markers = ide.markers
|
||||
local caches = {}
|
||||
local image = { FILE = 0, BREAKPOINT = 1, BOOKMARK = 2 }
|
||||
local markertypes = {breakpoint = 0, bookmark = 0}
|
||||
local maskall = 0
|
||||
for markertype in pairs(markertypes) do
|
||||
markertypes[markertype] = 2^ide:GetMarker(markertype)
|
||||
maskall = maskall + markertypes[markertype]
|
||||
end
|
||||
|
||||
local function resetMarkersTimer()
|
||||
if ide.config.markersinactivity then
|
||||
ide.timers.markers:Start(ide.config.markersinactivity*1000, wx.wxTIMER_ONE_SHOT)
|
||||
end
|
||||
end
|
||||
|
||||
local function needRefresh(editor)
|
||||
ide.markers.needrefresh[editor] = true
|
||||
resetMarkersTimer()
|
||||
end
|
||||
|
||||
local function getMarkers(editor)
|
||||
local edmarkers = {}
|
||||
local line = editor:MarkerNext(0, maskall)
|
||||
while line > -1 do
|
||||
local markerval = editor:MarkerGet(line)
|
||||
for markertype, val in pairs(markertypes) do
|
||||
if bit.band(markerval, val) > 0 then
|
||||
table.insert(edmarkers, {line, markertype})
|
||||
end
|
||||
end
|
||||
line = editor:MarkerNext(line + 1, maskall)
|
||||
end
|
||||
return edmarkers
|
||||
end
|
||||
|
||||
local function markersRefresh()
|
||||
local ctrl = ide.markers.markersCtrl
|
||||
local win = ide:GetMainFrame():FindFocus()
|
||||
ctrl:Freeze()
|
||||
|
||||
for editor in pairs(ide.markers.needrefresh) do
|
||||
local cache = caches[editor]
|
||||
if cache then
|
||||
local fileitem = cache.fileitem
|
||||
if not fileitem then
|
||||
local filename = ide:GetDocument(editor):GetTabText()
|
||||
local root = ctrl:GetRootItem()
|
||||
if not root or not root:IsOk() then return end
|
||||
fileitem = ctrl:AppendItem(root, filename, image.FILE)
|
||||
ctrl:SortChildren(root)
|
||||
cache.fileitem = fileitem
|
||||
end
|
||||
|
||||
-- disabling event handlers is not strictly necessary, but it's expected
|
||||
-- to fix a crash on Windows that had DeleteChildren in the trace (#442).
|
||||
ctrl:SetEvtHandlerEnabled(false)
|
||||
ctrl:DeleteChildren(fileitem)
|
||||
ctrl:SetEvtHandlerEnabled(true)
|
||||
|
||||
for _, edmarker in ipairs(getMarkers(editor)) do
|
||||
local line, markertype = unpack(edmarker)
|
||||
local text = ("%d: %s"):format(line+1, FixUTF8(editor:GetLineDyn(line)))
|
||||
ctrl:AppendItem(fileitem, text:gsub("[\r\n]+$",""), image[markertype:upper()])
|
||||
end
|
||||
|
||||
-- if no markers added, then remove the file from the markers list
|
||||
ctrl:Expand(fileitem)
|
||||
if not ctrl:ItemHasChildren(fileitem) then
|
||||
ctrl:Delete(fileitem)
|
||||
cache.fileitem = nil
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
ctrl:Thaw()
|
||||
if win and win ~= ide:GetMainFrame():FindFocus() then win:SetFocus() end
|
||||
end
|
||||
|
||||
local function item2editor(item_id)
|
||||
for editor, cache in pairs(caches) do
|
||||
if cache.fileitem and cache.fileitem:GetValue() == item_id:GetValue() then return editor end
|
||||
end
|
||||
end
|
||||
|
||||
local function createMarkersWindow()
|
||||
local width, height = 360, 200
|
||||
local ctrl = wx.wxTreeCtrl(ide.frame, wx.wxID_ANY,
|
||||
wx.wxDefaultPosition, wx.wxSize(width, height),
|
||||
wx.wxTR_LINES_AT_ROOT + wx.wxTR_HAS_BUTTONS + wx.wxTR_HIDE_ROOT + wx.wxNO_BORDER)
|
||||
|
||||
markers.markersCtrl = ctrl
|
||||
ide.timers.markers = wx.wxTimer(ctrl)
|
||||
|
||||
ctrl:AddRoot("Markers")
|
||||
ctrl:SetImageList(markers.imglist)
|
||||
ctrl:SetFont(ide.font.fNormal)
|
||||
|
||||
function ctrl:ActivateItem(item_id, toggle)
|
||||
local itemimage = ctrl:GetItemImage(item_id)
|
||||
if itemimage == image.FILE then
|
||||
-- activate editor tab
|
||||
local editor = item2editor(item_id)
|
||||
if editor then ide:GetDocument(editor):SetActive() end
|
||||
else -- clicked on the marker item
|
||||
local parent = ctrl:GetItemParent(item_id)
|
||||
if parent:IsOk() and ctrl:GetItemImage(parent) == image.FILE then
|
||||
local editor = item2editor(parent)
|
||||
if editor then
|
||||
local line = tonumber(ctrl:GetItemText(item_id):match("^(%d+):"))
|
||||
if line then
|
||||
if toggle then
|
||||
local _ = (itemimage == image.BOOKMARK and editor:BookmarkToggle(line-1, false)
|
||||
or itemimage == image.BREAKPOINT and editor:BreakpointToggle(line-1, false))
|
||||
ctrl:Delete(item_id)
|
||||
return -- don't activate the editor when the breakpoint is toggled
|
||||
end
|
||||
editor:GotoLine(line-1)
|
||||
end
|
||||
ide:GetDocument(editor):SetActive()
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function activateByPosition(event)
|
||||
local mask = (wx.wxTREE_HITTEST_ONITEMINDENT + wx.wxTREE_HITTEST_ONITEMLABEL
|
||||
+ wx.wxTREE_HITTEST_ONITEMICON + wx.wxTREE_HITTEST_ONITEMRIGHT)
|
||||
local item_id, flags = ctrl:HitTest(event:GetPosition())
|
||||
|
||||
if item_id and item_id:IsOk() and bit.band(flags, mask) > 0 then
|
||||
ctrl:ActivateItem(item_id, bit.band(flags, wx.wxTREE_HITTEST_ONITEMICON) > 0)
|
||||
else
|
||||
event:Skip()
|
||||
end
|
||||
return true
|
||||
end
|
||||
|
||||
ctrl:Connect(wx.wxEVT_TIMER, function() markersRefresh() end)
|
||||
ctrl:Connect(wx.wxEVT_LEFT_DOWN, activateByPosition)
|
||||
ctrl:Connect(wx.wxEVT_LEFT_DCLICK, activateByPosition)
|
||||
ctrl:Connect(wx.wxEVT_COMMAND_TREE_ITEM_ACTIVATED, function(event)
|
||||
ctrl:ActivateItem(event:GetItem())
|
||||
end)
|
||||
|
||||
ctrl:Connect(wx.wxEVT_COMMAND_TREE_ITEM_MENU,
|
||||
function (event)
|
||||
local item_id = event:GetItem()
|
||||
local ID_BOOKMARKTOGGLE = ID("markers.bookmarktoggle")
|
||||
local ID_BREAKPOINTTOGGLE = ID("markers.breakpointtoggle")
|
||||
local menu = wx.wxMenu {
|
||||
{ ID_BOOKMARKTOGGLE, TR("Toggle Bookmark"), TR("Toggle bookmark") },
|
||||
{ ID_BREAKPOINTTOGGLE, TR("Toggle Breakpoint"), TR("Toggle breakpoint") },
|
||||
}
|
||||
local activate = function() ctrl:ActivateItem(item_id, true) end
|
||||
menu:Enable(ID_BOOKMARKTOGGLE, ctrl:GetItemImage(item_id) == image.BOOKMARK)
|
||||
menu:Connect(ID_BOOKMARKTOGGLE, wx.wxEVT_COMMAND_MENU_SELECTED, activate)
|
||||
|
||||
menu:Enable(ID_BREAKPOINTTOGGLE, ctrl:GetItemImage(item_id) == image.BREAKPOINT)
|
||||
menu:Connect(ID_BREAKPOINTTOGGLE, wx.wxEVT_COMMAND_MENU_SELECTED, activate)
|
||||
|
||||
PackageEventHandle("onMenuMarkers", menu, ctrl, event)
|
||||
|
||||
ctrl:PopupMenu(menu)
|
||||
end)
|
||||
|
||||
local function reconfigure(pane)
|
||||
pane:TopDockable(false):BottomDockable(false)
|
||||
:MinSize(150,-1):BestSize(300,-1):FloatingSize(200,300)
|
||||
end
|
||||
|
||||
local layout = ide:GetSetting("/view", "uimgrlayout")
|
||||
if not layout or not layout:find("markerspanel") then
|
||||
ide:AddPanelDocked(ide:GetOutputNotebook(), ctrl, "markerspanel", TR("Markers"), reconfigure, false)
|
||||
else
|
||||
ide:AddPanel(ctrl, "markerspanel", TR("Markers"), reconfigure)
|
||||
end
|
||||
end
|
||||
|
||||
createMarkersWindow()
|
||||
|
||||
local package = ide:AddPackage('core.markers', {
|
||||
-- save markers; remove tab from the list
|
||||
onEditorClose = function(self, editor)
|
||||
local cache = caches[editor]
|
||||
if not cache then return end
|
||||
if cache.fileitem then markers.markersCtrl:Delete(cache.fileitem) end
|
||||
caches[editor] = nil
|
||||
end,
|
||||
|
||||
-- schedule marker update if the change is for one of the editors with markers
|
||||
onEditorUpdateUI = function(self, editor, event)
|
||||
if not caches[editor] then return end
|
||||
if bit.band(event:GetUpdated(), wxstc.wxSTC_UPDATE_CONTENT) == 0 then return end
|
||||
needRefresh(editor)
|
||||
end,
|
||||
|
||||
onEditorMarkerUpdate = function(self, editor)
|
||||
-- if no marker, then all markers in a file need to be refreshed
|
||||
if not caches[editor] then caches[editor] = {} end
|
||||
needRefresh(editor)
|
||||
markers:SaveMarkers(editor)
|
||||
end,
|
||||
|
||||
onEditorSave = function(self, editor) markers:SaveMarkers(editor) end,
|
||||
onEditorLoad = function(self, editor) markers:LoadMarkers(editor) end,
|
||||
})
|
||||
|
||||
function markers:SaveSettings() package:SetSettings(self.settings) end
|
||||
|
||||
function markers:SaveMarkers(editor, force)
|
||||
-- if the file has the name and has not been modified, save the breakpoints
|
||||
-- this also works when the file is saved as the modified flag is already set to `false`
|
||||
local doc = ide:GetDocument(editor)
|
||||
local filepath = doc:GetFilePath()
|
||||
if filepath and (force or not doc:IsModified()) then
|
||||
-- remove it from the list if it has no breakpoints
|
||||
local edmarkers = getMarkers(editor)
|
||||
self.settings.markers[filepath] = #edmarkers > 0 and edmarkers or nil
|
||||
self:SaveSettings()
|
||||
end
|
||||
end
|
||||
|
||||
function markers:LoadMarkers(editor)
|
||||
local doc = ide:GetDocument(editor)
|
||||
local filepath = doc:GetFilePath()
|
||||
if filepath then
|
||||
for _, edmarker in ipairs(self.settings.markers[filepath] or {}) do
|
||||
local line, markertype = unpack(edmarker)
|
||||
local _ = (markertype == "bookmark" and editor:BookmarkToggle(line, true)
|
||||
or markertype == "breakpoint" and editor:BreakpointToggle(line, true))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
MergeSettings(markers.settings, package:GetSettings())
|
||||
@@ -1,4 +1,4 @@
|
||||
-- Copyright 2011-14 Paul Kulchenko, ZeroBrane LLC
|
||||
-- Copyright 2011-15 Paul Kulchenko, ZeroBrane LLC
|
||||
-- styles for comment markup
|
||||
---------------------------------------------------------
|
||||
|
||||
@@ -14,13 +14,13 @@ local MD_MARK_BOXD = '|' -- highlight
|
||||
local MD_MARK_MARK = ' ' -- separator
|
||||
local MD_LINK_NEWWINDOW = '+' -- indicator to open a new window for links
|
||||
local markup = {
|
||||
[MD_MARK_BOXD] = {st=25, fg={127,0,127}, b=true},
|
||||
[MD_MARK_CODE] = {st=26, fg={127,127,127}, fs=10},
|
||||
[MD_MARK_HEAD] = {st=27, fn="Lucida Console", b=true},
|
||||
[MD_MARK_LINK] = {st=28, u=true, hs={32,32,127}},
|
||||
[MD_MARK_BOLD] = {st=29, b=true},
|
||||
[MD_MARK_ITAL] = {st=30, i=true},
|
||||
[MD_MARK_MARK] = {st=31, v=false},
|
||||
[MD_MARK_BOXD] = {st=ide:AddIndicator("markup.boxd", 25), fg={127,0,127}, b=true},
|
||||
[MD_MARK_CODE] = {st=ide:AddIndicator("markup.code", 26), fg={127,127,127}, fs=10},
|
||||
[MD_MARK_HEAD] = {st=ide:AddIndicator("markup.head", 27), fn="Lucida Console", b=true},
|
||||
[MD_MARK_LINK] = {st=ide:AddIndicator("markup.link", 28), u=true, hs={32,32,127}},
|
||||
[MD_MARK_BOLD] = {st=ide:AddIndicator("markup.bold", 29), b=true},
|
||||
[MD_MARK_ITAL] = {st=ide:AddIndicator("markup.ital", 30), i=true},
|
||||
[MD_MARK_MARK] = {st=ide:AddIndicator("markup.mark", 31), v=false},
|
||||
}
|
||||
|
||||
-- allow other editor features to recognize this special markup
|
||||
@@ -55,15 +55,15 @@ function MarkupHotspotClick(pos, editor)
|
||||
return
|
||||
end
|
||||
local line = editor:LineFromPosition(pos)
|
||||
local tx = editor:GetLine(line)
|
||||
local tx = editor:GetLineDyn(line)
|
||||
pos = pos + #MD_MARK_LINK - editor:PositionFromLine(line) -- turn into relative position
|
||||
|
||||
-- extract the URL/command on the right side of the separator
|
||||
local _,_,text = string.find(tx, q(MD_MARK_LINZ).."(%b"..MD_MARK_LINA..MD_MARK_LINT..")", pos)
|
||||
if text then
|
||||
text = text:gsub("^"..q(MD_MARK_LINA), ""):gsub(q(MD_MARK_LINT).."$", "")
|
||||
local filepath = ide.openDocuments[editor:GetId()].filePath
|
||||
or FileTreeGetDir()
|
||||
local doc = ide:GetDocument(editor)
|
||||
local filepath = doc and doc.filePath or FileTreeGetDir()
|
||||
local _,_,http = string.find(text, [[^(https?:%S+)$]])
|
||||
local _,_,command,code = string.find(text, [[^macro:(%w+)%((.*%S)%)$]])
|
||||
if not command then _,_,command = string.find(text, [[^macro:(%w+)$]]) end
|
||||
@@ -80,7 +80,7 @@ function MarkupHotspotClick(pos, editor)
|
||||
wx.wxLaunchDefaultBrowser(http, 0)
|
||||
elseif filepath then -- only check for saved files
|
||||
-- check if requested to open in a new window
|
||||
local newwindow = string.find(text, MD_LINK_NEWWINDOW, 1, true) -- plain search
|
||||
local newwindow = not doc or string.find(text, MD_LINK_NEWWINDOW, 1, true)
|
||||
if newwindow then text = string.gsub(text, "^%" .. MD_LINK_NEWWINDOW, "") end
|
||||
local filename = GetFullPathIfExists(
|
||||
wx.wxFileName(filepath):GetPath(wx.wxPATH_GET_VOLUME), text)
|
||||
@@ -155,7 +155,7 @@ function MarkupStyle(editor, lines, linee)
|
||||
local needfix = false
|
||||
|
||||
for line=lines,linee do
|
||||
local tx = editor:GetLine(line)
|
||||
local tx = editor:GetLineDyn(line)
|
||||
local ls = editor:PositionFromLine(line)
|
||||
|
||||
local from = 1
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
-- Copyright 2011-14 Paul Kulchenko, ZeroBrane LLC
|
||||
-- Copyright 2011-15 Paul Kulchenko, ZeroBrane LLC
|
||||
-- authors: Lomtik Software (J. Winwood & John Labenski)
|
||||
-- Luxinia Dev (Eike Decker & Christoph Kubisch)
|
||||
---------------------------------------------------------
|
||||
|
||||
local ide = ide
|
||||
|
||||
-- ---------------------------------------------------------------------------
|
||||
-- Create the Edit menu and attach the callback functions
|
||||
|
||||
@@ -26,13 +27,13 @@ local editMenu = wx.wxMenu {
|
||||
}
|
||||
|
||||
editMenu:Append(ID_SOURCE, TR("Source"), wx.wxMenu {
|
||||
{ ID_COMMENT, TR("&Comment/Uncomment")..KSC(ID_COMMENT), TR("Comment or uncomment current or selected lines") },
|
||||
{ ID_COMMENT, TR("C&omment/Uncomment")..KSC(ID_COMMENT), TR("Comment or uncomment current or selected lines") },
|
||||
{ ID_REINDENT, TR("Correct &Indentation")..KSC(ID_REINDENT), TR("Re-indent selected lines") },
|
||||
{ ID_FOLD, TR("&Fold/Unfold All")..KSC(ID_FOLD), TR("Fold or unfold all code folds") },
|
||||
{ ID_SORT, TR("&Sort")..KSC(ID_SORT), TR("Sort selected lines") },
|
||||
})
|
||||
editMenu:Append(ID_BOOKMARK, TR("Bookmark"), wx.wxMenu {
|
||||
{ ID_BOOKMARKTOGGLE, TR("Toggle Bookmark")..KSC(ID_BOOKMARKTOGGLE) },
|
||||
{ ID_BOOKMARKTOGGLE, TR("Toggle Bookmark")..KSC(ID_BOOKMARKTOGGLE), TR("Toggle bookmark") },
|
||||
{ ID_BOOKMARKNEXT, TR("Go To Next Bookmark")..KSC(ID_BOOKMARKNEXT) },
|
||||
{ ID_BOOKMARKPREV, TR("Go To Previous Bookmark")..KSC(ID_BOOKMARKPREV) },
|
||||
})
|
||||
@@ -45,22 +46,41 @@ menuBar:Append(editMenu, TR("&Edit"))
|
||||
|
||||
editMenu:Check(ID_AUTOCOMPLETEENABLE, ide.config.autocomplete)
|
||||
|
||||
local function getCtrlWithFocus(edType)
|
||||
local ctrl = ide:GetMainFrame():FindFocus()
|
||||
return ctrl and ctrl:GetClassInfo():GetClassName() == edType and ctrl:DynamicCast(edType) or nil
|
||||
end
|
||||
|
||||
local function onUpdateUIEditorInFocus(event)
|
||||
event:Enable(GetEditorWithFocus(GetEditor()) ~= nil)
|
||||
end
|
||||
|
||||
local function onUpdateUIEditMenu(event)
|
||||
local menu_id = event:GetId()
|
||||
local editor = GetEditorWithFocus()
|
||||
if editor == nil then event:Enable(false); return end
|
||||
if editor == nil then
|
||||
local editor = getCtrlWithFocus("wxTextCtrl")
|
||||
event:Enable(editor and (
|
||||
menu_id == ID_PASTE and editor:CanPaste() or
|
||||
menu_id == ID_UNDO and editor:CanUndo() or
|
||||
menu_id == ID_REDO and editor:CanRedo() or
|
||||
menu_id == ID_CUT and editor:CanCut() or
|
||||
menu_id == ID_COPY and editor:CanCopy() or
|
||||
menu_id == ID_SELECTALL and true
|
||||
) or false)
|
||||
return
|
||||
end
|
||||
|
||||
local alwaysOn = {
|
||||
[ID_SELECTALL] = true,
|
||||
-- allow Cut and Copy commands as these work on a line if no selection
|
||||
[ID_COPY] = true, [ID_CUT] = true,
|
||||
}
|
||||
local menu_id = event:GetId()
|
||||
local enable =
|
||||
menu_id == ID_PASTE and editor:CanPaste() or
|
||||
-- pasting is allowed when the document is not read-only and the selection
|
||||
-- (if any) has no protected text; since pasting handles protected text,
|
||||
-- use GetReadOnly() instead of CanPaste()
|
||||
menu_id == ID_PASTE and (not editor:GetReadOnly()) or
|
||||
menu_id == ID_UNDO and editor:CanUndo() or
|
||||
menu_id == ID_REDO and editor:CanRedo() or
|
||||
alwaysOn[menu_id]
|
||||
@@ -68,34 +88,55 @@ local function onUpdateUIEditMenu(event)
|
||||
end
|
||||
|
||||
local function onEditMenu(event)
|
||||
local menu_id = event:GetId()
|
||||
local editor = GetEditorWithFocus()
|
||||
if editor == nil then event:Skip(); return end
|
||||
if editor == nil then
|
||||
local editor = getCtrlWithFocus("wxTextCtrl")
|
||||
if not editor or not (
|
||||
menu_id == ID_PASTE and editor:Paste() or
|
||||
menu_id == ID_UNDO and editor:Undo() or
|
||||
menu_id == ID_REDO and editor:Redo() or
|
||||
menu_id == ID_CUT and editor:Cut() or
|
||||
menu_id == ID_COPY and editor:Copy() or
|
||||
menu_id == ID_SELECTALL and editor:SetSelection(-1, -1) or
|
||||
true
|
||||
) then event:Skip() end
|
||||
return
|
||||
end
|
||||
|
||||
if PackageEventHandle("onEditorAction", editor, event) == false then
|
||||
return
|
||||
end
|
||||
|
||||
local menu_id = event:GetId()
|
||||
local copytext
|
||||
if (menu_id == ID_CUT or menu_id == ID_COPY)
|
||||
and ide.wxver >= "2.9.5" and editor:GetSelections() > 1 then
|
||||
local main = editor:GetMainSelection()
|
||||
copytext = editor:GetTextRange(editor:GetSelectionNStart(main), editor:GetSelectionNEnd(main))
|
||||
copytext = editor:GetTextRangeDyn(editor:GetSelectionNStart(main), editor:GetSelectionNEnd(main))
|
||||
for s = 0, editor:GetSelections()-1 do
|
||||
if copytext ~= editor:GetTextRange(editor:GetSelectionNStart(s), editor:GetSelectionNEnd(s)) then
|
||||
if copytext ~= editor:GetTextRangeDyn(editor:GetSelectionNStart(s), editor:GetSelectionNEnd(s)) then
|
||||
copytext = nil
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local spos, epos = editor:GetSelectionStart(), editor:GetSelectionEnd()
|
||||
if menu_id == ID_CUT then
|
||||
if editor:GetSelectionStart() == editor:GetSelectionEnd()
|
||||
then editor:LineCut() else editor:Cut() end
|
||||
if spos == epos then editor:LineCopy() else editor:CopyDyn() end
|
||||
if spos == epos then
|
||||
local line = editor:LineFromPosition(spos)
|
||||
spos, epos = editor:PositionFromLine(line), editor:PositionFromLine(line+1)
|
||||
editor:SetSelectionStart(spos)
|
||||
editor:SetSelectionEnd(epos)
|
||||
end
|
||||
if spos ~= epos then editor:ClearAny() end
|
||||
elseif menu_id == ID_COPY then
|
||||
if editor:GetSelectionStart() == editor:GetSelectionEnd()
|
||||
then editor:LineCopy() else editor:Copy() end
|
||||
elseif menu_id == ID_PASTE then editor:Paste()
|
||||
if spos == epos then editor:LineCopy() else editor:CopyDyn() end
|
||||
elseif menu_id == ID_PASTE then
|
||||
-- first clear the text in case there is any hidden markup
|
||||
if spos ~= epos then editor:ClearAny() end
|
||||
editor:PasteDyn()
|
||||
elseif menu_id == ID_SELECTALL then editor:SelectAll()
|
||||
elseif menu_id == ID_UNDO then editor:Undo()
|
||||
elseif menu_id == ID_REDO then editor:Redo()
|
||||
@@ -116,23 +157,17 @@ for _, event in pairs({
|
||||
frame:Connect(event, wx.wxEVT_UPDATE_UI, onUpdateUIEditorInFocus)
|
||||
end
|
||||
|
||||
frame:Connect(ID_FOLD, wx.wxEVT_UPDATE_UI,
|
||||
function(event)
|
||||
local editor = GetEditorWithFocus(GetEditor())
|
||||
event:Enable(ide.config.editor.fold and editor ~= nil)
|
||||
end)
|
||||
|
||||
frame:Connect(ID_COMMENT, wx.wxEVT_UPDATE_UI,
|
||||
function(event)
|
||||
local editor = GetEditorWithFocus(GetEditor())
|
||||
event:Enable(editor ~= nil
|
||||
and pcall(function() return editor.spec end) and editor.spec
|
||||
and ide:IsValidProperty(editor, "spec") and editor.spec
|
||||
and editor.spec.linecomment and true or false)
|
||||
end)
|
||||
|
||||
local function generateConfigMessage(type)
|
||||
return ([==[--[[--
|
||||
Use this file to specify %s preferences.
|
||||
Use this file to specify **%s** preferences.
|
||||
Review [examples](+%s) or check [online documentation](%s) for details.
|
||||
--]]--
|
||||
]==])
|
||||
@@ -143,15 +178,15 @@ end
|
||||
frame:Connect(ID_PREFERENCESSYSTEM, wx.wxEVT_COMMAND_MENU_SELECTED,
|
||||
function ()
|
||||
local editor = LoadFile(ide.configs.system)
|
||||
if editor and #editor:GetText() == 0 then
|
||||
editor:AddText(generateConfigMessage("System")) end
|
||||
if editor and editor:GetLength() == 0 then
|
||||
editor:AddTextDyn(generateConfigMessage("System")) end
|
||||
end)
|
||||
|
||||
frame:Connect(ID_PREFERENCESUSER, wx.wxEVT_COMMAND_MENU_SELECTED,
|
||||
function ()
|
||||
local editor = LoadFile(ide.configs.user)
|
||||
if editor and #editor:GetText() == 0 then
|
||||
editor:AddText(generateConfigMessage("User")) end
|
||||
if editor and editor:GetLength() == 0 then
|
||||
editor:AddTextDyn(generateConfigMessage("User")) end
|
||||
end)
|
||||
frame:Connect(ID_PREFERENCESUSER, wx.wxEVT_UPDATE_UI,
|
||||
function (event) event:Enable(ide.configs.user ~= nil) end)
|
||||
@@ -183,11 +218,6 @@ frame:Connect(ID_COMMENT, wx.wxEVT_COMMAND_MENU_SELECTED,
|
||||
local lc = editor.spec.linecomment
|
||||
if not lc then return end
|
||||
|
||||
-- capture the current position in line to restore later
|
||||
local curline = editor:GetCurrentLine()
|
||||
local curlen = #editor:GetLine(curline)
|
||||
local curpos = editor:GetCurrentPos()-editor:PositionFromLine(curline)
|
||||
|
||||
-- for multi-line selection, always start the first line at the beginning
|
||||
local ssel, esel = editor:GetSelectionStart(), editor:GetSelectionEnd()
|
||||
local sline = editor:LineFromPosition(ssel)
|
||||
@@ -202,7 +232,7 @@ frame:Connect(ID_COMMENT, wx.wxEVT_COMMAND_MENU_SELECTED,
|
||||
for line = sline, eline do
|
||||
local pos = sel and (sline == eline or rect)
|
||||
and ssel-editor:PositionFromLine(sline)+1 or 1
|
||||
local text = editor:GetLine(line)
|
||||
local text = editor:GetLineDyn(line)
|
||||
local _, cpos = text:find("^%s*"..qlc, pos)
|
||||
if not cpos and text:find("%S")
|
||||
-- ignore last line when the end of selection is at the first position
|
||||
@@ -216,26 +246,19 @@ frame:Connect(ID_COMMENT, wx.wxEVT_COMMAND_MENU_SELECTED,
|
||||
-- go last to first as selection positions we captured may be affected
|
||||
-- by text changes
|
||||
for line = eline, sline, -1 do
|
||||
local pos = sel and (sline == eline or rect)
|
||||
and ssel-editor:PositionFromLine(sline)+1 or 1
|
||||
local text = editor:GetLine(line)
|
||||
local pos = sel and (sline == eline or rect) and ssel-editor:PositionFromLine(sline)+1 or 1
|
||||
local text = editor:GetLineDyn(line)
|
||||
local validline = (line == sline or line < eline or esel-editor:PositionFromLine(line) > 0)
|
||||
local _, cpos = text:find("^%s*"..qlc, pos)
|
||||
if not comment and cpos then
|
||||
if not comment and cpos and validline then
|
||||
editor:DeleteRange(cpos-#lc+editor:PositionFromLine(line), #lc)
|
||||
elseif comment and text:find("%S")
|
||||
and (line == sline or line < eline or esel-editor:PositionFromLine(line) > 0) then
|
||||
editor:InsertText(pos+editor:PositionFromLine(line)-1, lc)
|
||||
elseif comment and text:find("%S") and validline then
|
||||
editor:SetTargetStart(pos+editor:PositionFromLine(line)-1)
|
||||
editor:SetTargetEnd(editor:GetTargetStart())
|
||||
editor:ReplaceTarget(lc)
|
||||
end
|
||||
end
|
||||
editor:EndUndoAction()
|
||||
|
||||
-- fix position if it was after where the selection started
|
||||
if editor:PositionFromLine(curline)+curpos > ssel then
|
||||
-- position the cursor exactly where its position was, which
|
||||
-- could have shifted depending on whether the text was added or removed.
|
||||
editor:GotoPos(editor:PositionFromLine(curline)
|
||||
+ math.max(0, curpos+#editor:GetLine(curline)-curlen))
|
||||
end
|
||||
end)
|
||||
|
||||
local function processSelection(editor, func)
|
||||
@@ -246,15 +269,15 @@ local function processSelection(editor, func)
|
||||
editor:SelectAll()
|
||||
text = editor:GetSelectedText()
|
||||
end
|
||||
local wholeline = text:find('\n$')
|
||||
local wholeline = text:find("\n$")
|
||||
local buf = {}
|
||||
for line in string.gmatch(text..(wholeline and '' or '\n'), "(.-\r?\n)") do
|
||||
for line in string.gmatch(text..(wholeline and "" or "\n"), "(.-\r?\n)") do
|
||||
table.insert(buf, line)
|
||||
end
|
||||
if #buf > 0 then
|
||||
if func then func(buf) end
|
||||
-- add new line at the end if it was there
|
||||
local newtext = table.concat(buf, ''):gsub('(\r?\n)$', wholeline and '%1' or '')
|
||||
local newtext = table.concat(buf, ""):gsub("(\r?\n)$", wholeline and "%1" or "")
|
||||
-- straightforward editor:ReplaceSelection() doesn't work reliably as
|
||||
-- it sometimes doubles the context when the entire file is selected.
|
||||
-- this seems like Scintilla issue, so use ReplaceTarget instead.
|
||||
@@ -262,8 +285,24 @@ local function processSelection(editor, func)
|
||||
-- ReplaceSelection should handle (after wxwidgets 3.x upgrade), this
|
||||
-- will need to be revisited when ReplaceSelection is updated.
|
||||
if newtext ~= text then
|
||||
editor:TargetFromSelection()
|
||||
editor:ReplaceTarget(newtext)
|
||||
editor:BeginUndoAction()
|
||||
-- if there is at least one marker, then use a different mechanism to preserve them
|
||||
-- simply saving markers, replacing text, and reapplying markers doesn't work as
|
||||
-- they get reset after `undo/redo` operations.
|
||||
local ssel, esel = editor:GetSelectionStart(), editor:GetSelectionEnd()
|
||||
local sline = editor:LineFromPosition(ssel)
|
||||
local eline = editor:LineFromPosition(esel)
|
||||
if #editor:MarkerGetAll(nil, sline, eline) > 0 then
|
||||
for line = #buf, 1, -1 do
|
||||
editor:SetTargetStart(line == 1 and ssel or editor:PositionFromLine(sline+line-1))
|
||||
editor:SetTargetEnd(line == eline-sline+1 and esel or editor:GetLineEndPosition(sline+line-1))
|
||||
editor:ReplaceTarget((buf[line]:gsub("\r?\n$", "")))
|
||||
end
|
||||
else
|
||||
editor:TargetFromSelection()
|
||||
editor:ReplaceTarget(newtext)
|
||||
end
|
||||
editor:EndUndoAction()
|
||||
end
|
||||
end
|
||||
editor:GotoPosEnforcePolicy(math.min(
|
||||
@@ -277,14 +316,14 @@ local function reIndent(editor, buf)
|
||||
local decindent, incindent = editor.spec.isdecindent, editor.spec.isincindent
|
||||
if not (decindent and incindent) then return end
|
||||
|
||||
local line = editor:LineFromPosition(editor:GetSelectionStart())
|
||||
local edline = editor:LineFromPosition(editor:GetSelectionStart())
|
||||
local indent = 0
|
||||
local text = ''
|
||||
local text = ""
|
||||
-- find the last non-empty line in the previous block (if any)
|
||||
for n = line-1, 1, -1 do
|
||||
for n = edline-1, 1, -1 do
|
||||
indent = editor:GetLineIndentation(n)
|
||||
text = editor:GetLine(n)
|
||||
if text:match('[^\r\n]') then break end
|
||||
text = editor:GetLineDyn(n)
|
||||
if text:match("[^\r\n]") then break end
|
||||
end
|
||||
|
||||
local ut = editor:GetUseTabs()
|
||||
@@ -293,9 +332,12 @@ local function reIndent(editor, buf)
|
||||
local indents = {}
|
||||
local isstatic = {}
|
||||
for line = 1, #buf+1 do
|
||||
local style = bit.band(editor:GetStyleAt(editor:PositionFromLine(line-1)), 31)
|
||||
local ls = editor:PositionFromLine(edline+line-1)
|
||||
local style = bit.band(editor:GetStyleAt(ls), 31)
|
||||
-- don't reformat multi-line comments or strings
|
||||
isstatic[line] = editor.spec.iscomment[style] or editor.spec.isstring[style]
|
||||
isstatic[line] = (editor.spec.iscomment[style]
|
||||
or editor.spec.isstring[style]
|
||||
or (MarkupIsAny and MarkupIsAny(style)))
|
||||
if not isstatic[line] or line == 1 or not isstatic[line-1] then
|
||||
local closed, blockend = decindent(text)
|
||||
local opened = incindent(text)
|
||||
@@ -318,7 +360,7 @@ local function reIndent(editor, buf)
|
||||
for line = 1, #buf do
|
||||
if not isstatic[line] then
|
||||
buf[line] = buf[line]:gsub("^[ \t]*",
|
||||
not buf[line]:match('%S') and ''
|
||||
not buf[line]:match("%S") and ""
|
||||
or ut and ("\t"):rep(indents[line] / tw) or (" "):rep(indents[line]))
|
||||
end
|
||||
end
|
||||
@@ -330,43 +372,19 @@ frame:Connect(ID_REINDENT, wx.wxEVT_COMMAND_MENU_SELECTED,
|
||||
processSelection(editor, function(buf) reIndent(editor, buf) end)
|
||||
end)
|
||||
|
||||
frame:Connect(ID_FOLD, wx.wxEVT_UPDATE_UI,
|
||||
function(event)
|
||||
local editor = GetEditorWithFocus()
|
||||
event:Enable(editor and editor:CanFold() or false)
|
||||
end)
|
||||
frame:Connect(ID_FOLD, wx.wxEVT_COMMAND_MENU_SELECTED,
|
||||
function (event) FoldSome() end)
|
||||
function (event) GetEditorWithFocus():FoldSome() end)
|
||||
|
||||
local BOOKMARK_MARKER = StylesGetMarker("bookmark")
|
||||
local BOOKMARK_MARKER_VALUE = 2^BOOKMARK_MARKER
|
||||
|
||||
local function bookmarkToggle()
|
||||
local editor = GetEditor()
|
||||
local line = editor:GetCurrentLine()
|
||||
local markers = editor:MarkerGet(line)
|
||||
if bit.band(markers, BOOKMARK_MARKER_VALUE) > 0 then
|
||||
editor:MarkerDelete(line, BOOKMARK_MARKER)
|
||||
else
|
||||
editor:MarkerAdd(line, BOOKMARK_MARKER)
|
||||
end
|
||||
end
|
||||
|
||||
local function bookmarkNext()
|
||||
local editor = GetEditor()
|
||||
local line = editor:MarkerNext(editor:GetCurrentLine()+1, BOOKMARK_MARKER_VALUE)
|
||||
if line == -1 then line = editor:MarkerNext(0, BOOKMARK_MARKER_VALUE) end
|
||||
if line ~= -1 then
|
||||
editor:GotoLine(line)
|
||||
editor:EnsureVisibleEnforcePolicy(line)
|
||||
end
|
||||
end
|
||||
|
||||
local function bookmarkPrev()
|
||||
local editor = GetEditor()
|
||||
local line = editor:MarkerPrevious(editor:GetCurrentLine()-1, BOOKMARK_MARKER_VALUE)
|
||||
if line == -1 then line = editor:MarkerPrevious(editor:GetLineCount(), BOOKMARK_MARKER_VALUE) end
|
||||
if line ~= -1 then
|
||||
editor:GotoLine(line)
|
||||
editor:EnsureVisibleEnforcePolicy(line)
|
||||
end
|
||||
end
|
||||
|
||||
frame:Connect(ID_BOOKMARKTOGGLE, wx.wxEVT_COMMAND_MENU_SELECTED, bookmarkToggle)
|
||||
frame:Connect(ID_BOOKMARKNEXT, wx.wxEVT_COMMAND_MENU_SELECTED, bookmarkNext)
|
||||
frame:Connect(ID_BOOKMARKPREV, wx.wxEVT_COMMAND_MENU_SELECTED, bookmarkPrev)
|
||||
frame:Connect(ID_BOOKMARKTOGGLE, wx.wxEVT_COMMAND_MENU_SELECTED,
|
||||
function() GetEditor():BookmarkToggle() end)
|
||||
frame:Connect(ID_BOOKMARKNEXT, wx.wxEVT_COMMAND_MENU_SELECTED,
|
||||
function() GetEditor():MarkerGotoNext(BOOKMARK_MARKER) end)
|
||||
frame:Connect(ID_BOOKMARKPREV, wx.wxEVT_COMMAND_MENU_SELECTED,
|
||||
function() GetEditor():MarkerGotoPrev(BOOKMARK_MARKER) end)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
-- Copyright 2011-14 Paul Kulchenko, ZeroBrane LLC
|
||||
-- Copyright 2011-15 Paul Kulchenko, ZeroBrane LLC
|
||||
-- authors: Lomtik Software (J. Winwood & John Labenski)
|
||||
-- Luxinia Dev (Eike Decker & Christoph Kubisch)
|
||||
---------------------------------------------------------
|
||||
@@ -6,7 +6,6 @@
|
||||
local ide = ide
|
||||
local frame = ide.frame
|
||||
local menuBar = frame.menuBar
|
||||
local notebook = frame.notebook
|
||||
local openDocuments = ide.openDocuments
|
||||
|
||||
local fileMenu = wx.wxMenu({
|
||||
@@ -18,7 +17,8 @@ local fileMenu = wx.wxMenu({
|
||||
{ ID_SAVEAS, TR("Save &As...")..KSC(ID_SAVEAS), TR("Save the current document to a file with a new name") },
|
||||
{ ID_SAVEALL, TR("Save A&ll")..KSC(ID_SAVEALL), TR("Save all open documents") },
|
||||
{ },
|
||||
-- placeholder for ID_RECENTFILES and ID_RECENTPROJECTS
|
||||
{ ID_RECENTFILES, TR("Recent Files")..KSC(ID_RECENTFILES), TR("File history") },
|
||||
{ ID_RECENTPROJECTS, TR("Recent Projects")..KSC(ID_RECENTPROJECTS), TR("Project history") },
|
||||
{ },
|
||||
{ ID_EXIT, TR("E&xit")..KSC(ID_EXIT), TR("Exit program") }})
|
||||
menuBar:Append(fileMenu, TR("&File"))
|
||||
@@ -27,17 +27,12 @@ local filehistorymenu = wx.wxMenu({
|
||||
{ },
|
||||
{ ID_RECENTFILESCLEAR, TR("Clear Items")..KSC(ID_RECENTFILESCLEAR), TR("Clear items from this list") },
|
||||
})
|
||||
local filehistory = wx.wxMenuItem(fileMenu, ID_RECENTFILES,
|
||||
TR("Recent Files")..KSC(ID_RECENTFILES), TR("File history"), wx.wxITEM_NORMAL, filehistorymenu)
|
||||
fileMenu:Insert(8,filehistory)
|
||||
|
||||
local projecthistorymenu = wx.wxMenu({
|
||||
{ },
|
||||
{ ID_RECENTPROJECTSCLEAR, TR("Clear Items")..KSC(ID_RECENTPROJECTSCLEAR), TR("Clear items from this list") },
|
||||
})
|
||||
local projecthistory = wx.wxMenuItem(fileMenu, ID_RECENTPROJECTS,
|
||||
TR("Recent &Projects")..KSC(ID_RECENTPROJECTS), TR("Project history"), wx.wxITEM_NORMAL, projecthistorymenu)
|
||||
fileMenu:Insert(9,projecthistory)
|
||||
ide:AttachMenu(ID_RECENTFILES, filehistorymenu)
|
||||
ide:AttachMenu(ID_RECENTPROJECTS, projecthistorymenu)
|
||||
|
||||
do -- recent file history
|
||||
local iscaseinsensitive = wx.wxFileName("A"):SameAs(wx.wxFileName("a"))
|
||||
@@ -186,12 +181,15 @@ frame:Connect(ID_NEW, wx.wxEVT_COMMAND_MENU_SELECTED, function() return NewFile(
|
||||
frame:Connect(ID_OPEN, wx.wxEVT_COMMAND_MENU_SELECTED, OpenFile)
|
||||
frame:Connect(ID_SAVE, wx.wxEVT_COMMAND_MENU_SELECTED,
|
||||
function ()
|
||||
local editor = GetEditor()
|
||||
SaveFile(editor, openDocuments[editor:GetId()].filePath)
|
||||
local editor = ide.findReplace:CanSave(GetEditorWithFocus()) or GetEditor()
|
||||
local doc = ide:GetDocument(editor)
|
||||
SaveFile(editor, doc and doc:GetFilePath() or nil)
|
||||
end)
|
||||
frame:Connect(ID_SAVE, wx.wxEVT_UPDATE_UI,
|
||||
function (event)
|
||||
event:Enable(EditorIsModified(GetEditor()))
|
||||
local doc = ide:GetDocument(GetEditor())
|
||||
event:Enable(ide.findReplace:CanSave(GetEditorWithFocus()) and true
|
||||
or doc and (doc:IsModified() or doc:IsNew()) or false)
|
||||
end)
|
||||
|
||||
frame:Connect(ID_SAVEAS, wx.wxEVT_COMMAND_MENU_SELECTED,
|
||||
@@ -210,7 +208,7 @@ frame:Connect(ID_SAVEALL, wx.wxEVT_COMMAND_MENU_SELECTED,
|
||||
frame:Connect(ID_SAVEALL, wx.wxEVT_UPDATE_UI,
|
||||
function (event)
|
||||
local atLeastOneModifiedDocument = false
|
||||
for id, document in pairs(openDocuments) do
|
||||
for _, document in pairs(openDocuments) do
|
||||
if document.isModified or not document.filePath then
|
||||
atLeastOneModifiedDocument = true
|
||||
break
|
||||
@@ -221,11 +219,18 @@ frame:Connect(ID_SAVEALL, wx.wxEVT_UPDATE_UI,
|
||||
|
||||
frame:Connect(ID_CLOSE, wx.wxEVT_COMMAND_MENU_SELECTED,
|
||||
function (event)
|
||||
ClosePage() -- this will find the current editor tab
|
||||
local editor = GetEditorWithFocus()
|
||||
local nb = ide:GetOutputNotebook()
|
||||
local index = editor and nb:GetPageIndex(editor)
|
||||
if index and ide.findReplace:IsPreview(editor) and index >= 0 then
|
||||
nb:DeletePage(index) -- close preview tab
|
||||
else
|
||||
ClosePage() -- this will find the current editor tab
|
||||
end
|
||||
end)
|
||||
frame:Connect(ID_CLOSE, wx.wxEVT_UPDATE_UI,
|
||||
function (event)
|
||||
event:Enable(GetEditor() ~= nil)
|
||||
event:Enable(ide.findReplace:IsPreview(GetEditorWithFocus()) or GetEditor() ~= nil)
|
||||
end)
|
||||
|
||||
frame:Connect(ID_EXIT, wx.wxEVT_COMMAND_MENU_SELECTED,
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
-- Copyright 2011-14 Paul Kulchenko, ZeroBrane LLC
|
||||
-- Copyright 2011-15 Paul Kulchenko, ZeroBrane LLC
|
||||
---------------------------------------------------------
|
||||
|
||||
local ide = ide
|
||||
@@ -32,8 +32,8 @@ local helpMenu = wx.wxMenu{
|
||||
-- do not translate Help menu on Mac as it won't merge with "standard" menus
|
||||
menuBar:Append(helpMenu, ide.osname == 'Macintosh' and "&Help" or TR("&Help"))
|
||||
|
||||
local function DisplayAbout(event)
|
||||
local logo = ide.config.path.app.."/"..GetIDEString("logo")
|
||||
local function displayAbout(event)
|
||||
local logo = ide:GetAppName().."/"..GetIDEString("logo")
|
||||
local logoimg = wx.wxFileName(logo):FileExists() and
|
||||
([[<tr><td><img src="%s"></td></tr>]]):format(logo) or ""
|
||||
local page = ([[
|
||||
@@ -46,7 +46,7 @@ local function DisplayAbout(event)
|
||||
<tr>
|
||||
<td>
|
||||
<b>ZeroBrane Studio (%s; MobDebug %s)</b><br>
|
||||
<b>Copyright © 2011-2014 ZeroBrane LLC</b><br>
|
||||
<b>Copyright © 2011-2015 ZeroBrane LLC</b><br>
|
||||
Paul Kulchenko<br>
|
||||
Licensed under the MIT License.
|
||||
</td>
|
||||
@@ -58,11 +58,11 @@ local function DisplayAbout(event)
|
||||
Christoph Kubisch, Eike Decker<br>
|
||||
Licensed under the MIT License.
|
||||
</td>
|
||||
<td><img align="right" src="zbstudio/res/estrela.png"></td>
|
||||
<td><img align="right" src="%s/res/estrela.png"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<b>Based on wxLua editor (%s)</b><br>
|
||||
<b>Based on wxLua editor</b><br>
|
||||
<b>Copyright © 2002-2005 Lomtick Software</b><br>
|
||||
J. Winwood, John Labenski<br>
|
||||
Licensed under wxWindows Library License, v3.
|
||||
@@ -70,15 +70,15 @@ local function DisplayAbout(event)
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<b>Built with %s</b>
|
||||
<b>Built with %s, %s</b>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td></tr></table>
|
||||
</body>
|
||||
</html>]])
|
||||
:format(logoimg, ide.VERSION, mobdebug._VERSION,
|
||||
wxlua.wxLUA_VERSION_STRING, wx.wxVERSION_STRING)
|
||||
:format(logoimg, ide.VERSION, mobdebug._VERSION, ide:GetAppName(),
|
||||
wx.wxVERSION_STRING, wxlua.wxLUA_VERSION_STRING)
|
||||
|
||||
local dlg = wx.wxDialog(frame, wx.wxID_ANY, TR("About %s"):format(GetIDEString("editor")))
|
||||
|
||||
@@ -111,7 +111,7 @@ local function DisplayAbout(event)
|
||||
dlg:Destroy()
|
||||
end
|
||||
|
||||
frame:Connect(ID_ABOUT, wx.wxEVT_COMMAND_MENU_SELECTED, DisplayAbout)
|
||||
frame:Connect(ID_ABOUT, wx.wxEVT_COMMAND_MENU_SELECTED, displayAbout)
|
||||
for item, page in pairs(urls) do
|
||||
frame:Connect(item, wx.wxEVT_COMMAND_MENU_SELECTED,
|
||||
function() wx.wxLaunchDefaultBrowser(url..page, 0) end)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
-- Copyright 2011-14 Paul Kulchenko, ZeroBrane LLC
|
||||
-- Copyright 2011-15 Paul Kulchenko, ZeroBrane LLC
|
||||
-- authors: Lomtik Software (J. Winwood & John Labenski)
|
||||
-- Luxinia Dev (Eike Decker & Christoph Kubisch)
|
||||
---------------------------------------------------------
|
||||
@@ -16,7 +16,7 @@ local uimgr = frame.uimgr
|
||||
|
||||
local debugTab = {
|
||||
{ ID_RUN, TR("&Run")..KSC(ID_RUN), TR("Execute the current project/file") },
|
||||
{ ID_RUNNOW, TR("Run as Scratchpad")..KSC(ID_RUNNOW), TR("Execute the current project/file and keep updating the code to see immediate results"), wx.wxITEM_CHECK },
|
||||
{ ID_RUNNOW, TR("Run As Scratchpad")..KSC(ID_RUNNOW), TR("Execute the current project/file and keep updating the code to see immediate results"), wx.wxITEM_CHECK },
|
||||
{ ID_COMPILE, TR("&Compile")..KSC(ID_COMPILE), TR("Compile the current file") },
|
||||
{ ID_STARTDEBUG, TR("Start &Debugging")..KSC(ID_STARTDEBUG), TR("Start or continue debugging") },
|
||||
{ ID_ATTACHDEBUG, TR("&Start Debugger Server")..KSC(ID_ATTACHDEBUG), TR("Allow external process to start debugging"), wx.wxITEM_CHECK },
|
||||
@@ -26,10 +26,11 @@ local debugTab = {
|
||||
{ ID_STEP, TR("Step &Into")..KSC(ID_STEP), TR("Step into") },
|
||||
{ ID_STEPOVER, TR("Step &Over")..KSC(ID_STEPOVER), TR("Step over") },
|
||||
{ ID_STEPOUT, TR("Step O&ut")..KSC(ID_STEPOUT), TR("Step out of the current function") },
|
||||
{ ID_RUNTO, TR("Run To Cursor")..KSC(ID_RUNTO), TR("Run to cursor") },
|
||||
{ ID_TRACE, TR("Tr&ace")..KSC(ID_TRACE), TR("Trace execution showing each executed line") },
|
||||
{ ID_BREAK, TR("&Break")..KSC(ID_BREAK), TR("Break execution at the next executed line of code") },
|
||||
{ },
|
||||
{ ID_TOGGLEBREAKPOINT, TR("Toggle Break&point")..KSC(ID_TOGGLEBREAKPOINT), TR("Toggle breakpoint") },
|
||||
{ ID_BREAKPOINT, TR("Breakpoint")..KSC(ID_BREAKPOINT) },
|
||||
{ },
|
||||
{ ID_CLEAROUTPUT, TR("C&lear Output Window")..KSC(ID_CLEAROUTPUT), TR("Clear the output window before compiling or debugging"), wx.wxITEM_CHECK },
|
||||
{ ID_COMMANDLINEPARAMETERS, TR("Command Line Parameters...")..KSC(ID_COMMANDLINEPARAMETERS), TR("Provide command line parameters") },
|
||||
@@ -49,6 +50,12 @@ debugMenu:Append(ID_PROJECTDIR, TR("Project Directory"), targetDirMenu, TR("Set
|
||||
debugMenu:Append(ID_INTERPRETER, TR("Lua &Interpreter"), targetMenu, TR("Set the interpreter to be used"))
|
||||
menuBar:Append(debugMenu, TR("&Project"))
|
||||
|
||||
ide:AttachMenu(ID_BREAKPOINT, wx.wxMenu {
|
||||
{ ID_BREAKPOINTTOGGLE, TR("Toggle Breakpoint")..KSC(ID_BREAKPOINTTOGGLE) },
|
||||
{ ID_BREAKPOINTNEXT, TR("Go To Next Breakpoint")..KSC(ID_BREAKPOINTNEXT) },
|
||||
{ ID_BREAKPOINTPREV, TR("Go To Previous Breakpoint")..KSC(ID_BREAKPOINTPREV) },
|
||||
})
|
||||
|
||||
local interpreters
|
||||
local function selectInterpreter(id)
|
||||
for id in pairs(interpreters) do
|
||||
@@ -60,29 +67,42 @@ local function selectInterpreter(id)
|
||||
|
||||
local changed = ide.interpreter ~= interpreters[id]
|
||||
if ide.interpreter and changed then
|
||||
PackageEventHandle("onInterpreterClose", ide.interpreter) end
|
||||
PackageEventHandle("onInterpreterClose", ide.interpreter)
|
||||
end
|
||||
if interpreters[id] and changed then
|
||||
PackageEventHandle("onInterpreterLoad", interpreters[id]) end
|
||||
PackageEventHandle("onInterpreterLoad", interpreters[id])
|
||||
end
|
||||
|
||||
ide.interpreter = interpreters[id]
|
||||
|
||||
DebuggerShutdown()
|
||||
|
||||
ide.frame.statusBar:SetStatusText(ide.interpreter.name or "", 5)
|
||||
ide:SetStatus(ide.interpreter.name or "", 4)
|
||||
if changed then ReloadLuaAPI() end
|
||||
end
|
||||
|
||||
function ProjectSetInterpreter(name)
|
||||
local id = IDget("debug.interpreter."..name)
|
||||
if (not interpreters[id]) then return end
|
||||
selectInterpreter(id)
|
||||
if id and interpreters[id] then
|
||||
selectInterpreter(id)
|
||||
else
|
||||
DisplayOutputLn(("Can't find interpreter '%s'; using the default interpreter instead.")
|
||||
:format(name))
|
||||
local id = (
|
||||
-- interpreter is set and is (still) on the list of known interpreters
|
||||
IDget("debug.interpreter."..(ide.config.interpreter or ide.config.default.interpreter)) or
|
||||
-- otherwise use default interpreter
|
||||
ID("debug.interpreter."..ide.config.default.interpreter)
|
||||
)
|
||||
selectInterpreter(id)
|
||||
end
|
||||
end
|
||||
|
||||
local function evSelectInterpreter(event)
|
||||
selectInterpreter(event:GetId())
|
||||
end
|
||||
|
||||
function UpdateInterpreters()
|
||||
function ProjectUpdateInterpreters()
|
||||
assert(ide.interpreters, "no interpreters defined")
|
||||
|
||||
-- delete all existing items (if any)
|
||||
@@ -96,7 +116,7 @@ function UpdateInterpreters()
|
||||
table.sort(names)
|
||||
|
||||
interpreters = {}
|
||||
for i, file in ipairs(names) do
|
||||
for _, file in ipairs(names) do
|
||||
local inter = ide.interpreters[file]
|
||||
local id = ID("debug.interpreter."..file)
|
||||
inter.fname = file
|
||||
@@ -109,33 +129,32 @@ function UpdateInterpreters()
|
||||
local id = (
|
||||
-- interpreter is set and is (still) on the list of known interpreters
|
||||
IDget("debug.interpreter."
|
||||
..(ide.interpreter and ide.interpreters[ide.interpreter.fname]
|
||||
and ide.interpreter.fname or ide.config.interpreter)) or
|
||||
..(ide.interpreter and ide.interpreters[ide.interpreter.fname] and ide.interpreter.fname
|
||||
or ide.config.interpreter or ide.config.default.interpreter)) or
|
||||
-- otherwise use default interpreter
|
||||
ID("debug.interpreter."..ide.config.default.interpreter)
|
||||
)
|
||||
selectInterpreter(id)
|
||||
end
|
||||
|
||||
UpdateInterpreters()
|
||||
|
||||
-----------------------------
|
||||
-- Project directory handling
|
||||
|
||||
function ProjectUpdateProjectDir(projdir,skiptree)
|
||||
-- strip trailing spaces as this may create issues with "path/ " on Windows
|
||||
projdir = projdir:gsub("%s+$","")
|
||||
local dir = wx.wxFileName.DirName(FixDir(projdir))
|
||||
dir:Normalize() -- turn into absolute path if needed
|
||||
if not wx.wxDirExists(dir:GetFullPath()) then return end
|
||||
|
||||
projdir = dir:GetPath(wx.wxPATH_GET_VOLUME) -- no trailing slash
|
||||
|
||||
ide.config.path.projectdir = projdir ~= "" and projdir or nil
|
||||
frame:SetStatusText(projdir)
|
||||
ide:SetStatus(projdir)
|
||||
frame:SetTitle(ExpandPlaceholders(ide.config.format.apptitle))
|
||||
if (not skiptree) then
|
||||
ide.filetree:updateProjectDir(projdir)
|
||||
end
|
||||
if (not skiptree) then ide.filetree:updateProjectDir(projdir) end
|
||||
return true
|
||||
end
|
||||
ProjectUpdateProjectDir(ide.config.path.projectdir)
|
||||
|
||||
local function projChoose(event)
|
||||
local editor = GetEditor()
|
||||
@@ -143,18 +162,16 @@ local function projChoose(event)
|
||||
editor and openDocuments[editor:GetId()].filePath or "")
|
||||
fn:Normalize() -- want absolute path for dialog
|
||||
|
||||
local projectdir = ide.config.path.projectdir
|
||||
|
||||
local projectdir = ide:GetProject()
|
||||
local filePicker = wx.wxDirDialog(frame, TR("Choose a project directory"),
|
||||
projectdir ~= "" and projectdir or wx.wxGetCwd(), wx.wxDIRP_DIR_MUST_EXIST)
|
||||
if filePicker:ShowModal(true) == wx.wxID_OK then
|
||||
ProjectUpdateProjectDir(filePicker:GetPath())
|
||||
return ProjectUpdateProjectDir(filePicker:GetPath())
|
||||
end
|
||||
return true
|
||||
return false
|
||||
end
|
||||
|
||||
frame:Connect(ID_PROJECTDIRCHOOSE, wx.wxEVT_COMMAND_MENU_SELECTED, projChoose)
|
||||
frame:Connect(ID_PROJECTDIRCHOOSE, wx.wxEVT_COMMAND_BUTTON_CLICKED, projChoose)
|
||||
|
||||
local function projFromFile(event)
|
||||
local editor = GetEditor()
|
||||
@@ -169,12 +186,18 @@ local function projFromFile(event)
|
||||
ProjectUpdateProjectDir(ide.interpreter:fprojdir(fn)) end
|
||||
end
|
||||
frame:Connect(ID_PROJECTDIRFROMFILE, wx.wxEVT_COMMAND_MENU_SELECTED, projFromFile)
|
||||
frame:Connect(ID_PROJECTDIRFROMFILE, wx.wxEVT_UPDATE_UI,
|
||||
function (event)
|
||||
local editor = GetEditor()
|
||||
event:Enable(editor ~= nil and ide:GetDocument(editor):GetFilePath() ~= nil)
|
||||
end)
|
||||
|
||||
----------------------
|
||||
-- Interpreter Running
|
||||
|
||||
local function getNameToRun(skipcheck)
|
||||
local editor = GetEditor()
|
||||
if not editor then return end
|
||||
|
||||
-- test compile it before we run it, if successful then ask to save
|
||||
-- only compile if lua api
|
||||
@@ -186,19 +209,20 @@ local function getNameToRun(skipcheck)
|
||||
return
|
||||
end
|
||||
|
||||
local id = editor:GetId()
|
||||
if not openDocuments[id].filePath then SetDocumentModified(id, true) end
|
||||
local doc = ide:GetDocument(editor)
|
||||
local name = ide:GetProjectStartFile() or doc:GetFilePath()
|
||||
if not name then doc:SetModified(true) end
|
||||
if not SaveIfModified(editor) then return end
|
||||
if ide.config.editor.saveallonrun then SaveAll(true) end
|
||||
|
||||
return wx.wxFileName(openDocuments[id].filePath)
|
||||
return wx.wxFileName(name or doc:GetFilePath())
|
||||
end
|
||||
|
||||
function ActivateOutput()
|
||||
if not ide.config.activateoutput then return end
|
||||
-- show output/errorlog pane
|
||||
if not uimgr:GetPane("bottomnotebook"):IsShown() then
|
||||
uimgr:GetPane("bottomnotebook"):Show(true)
|
||||
if not uimgr:GetPane(bottomnotebook):IsShown() then
|
||||
uimgr:GetPane(bottomnotebook):Show(true)
|
||||
uimgr:Update()
|
||||
end
|
||||
-- activate output/errorlog window
|
||||
@@ -209,12 +233,13 @@ function ActivateOutput()
|
||||
end
|
||||
|
||||
local function runInterpreter(wfilename, withdebugger)
|
||||
if ide.frame.menuBar:IsChecked(ID_CLEAROUTPUT) then ClearOutput() end
|
||||
ClearOutput()
|
||||
ActivateOutput()
|
||||
|
||||
ClearAllCurrentLineMarkers()
|
||||
if not wfilename then return end
|
||||
debugger.pid = ide.interpreter:frun(wfilename, withdebugger)
|
||||
if debugger.pid then OutputEnableInput() end
|
||||
return debugger.pid
|
||||
end
|
||||
|
||||
@@ -251,30 +276,45 @@ end
|
||||
-----------------------
|
||||
-- Actions
|
||||
|
||||
frame:Connect(ID_TOGGLEBREAKPOINT, wx.wxEVT_COMMAND_MENU_SELECTED,
|
||||
function ()
|
||||
local editor = GetEditor()
|
||||
local line = editor:LineFromPosition(editor:GetCurrentPos())
|
||||
DebuggerToggleBreakpoint(editor, line)
|
||||
end)
|
||||
frame:Connect(ID_TOGGLEBREAKPOINT, wx.wxEVT_UPDATE_UI,
|
||||
local BREAKPOINT_MARKER = StylesGetMarker("breakpoint")
|
||||
|
||||
frame:Connect(ID_BREAKPOINTTOGGLE, wx.wxEVT_COMMAND_MENU_SELECTED,
|
||||
function() GetEditor():BreakpointToggle() end)
|
||||
frame:Connect(ID_BREAKPOINTTOGGLE, wx.wxEVT_UPDATE_UI,
|
||||
function (event)
|
||||
local editor = GetEditorWithFocus(GetEditor())
|
||||
event:Enable((ide.interpreter) and (ide.interpreter.hasdebugger) and (editor ~= nil)
|
||||
and (not debugger.scratchpad))
|
||||
end)
|
||||
|
||||
frame:Connect(ID_BREAKPOINTNEXT, wx.wxEVT_COMMAND_MENU_SELECTED,
|
||||
function()
|
||||
local BPNSC = KSC(ID_BREAKPOINTNEXT):gsub("\t","")
|
||||
if not GetEditor():MarkerGotoNext(BREAKPOINT_MARKER) and BPNSC == "F9" then
|
||||
local osx = ide.osname == "Macintosh"
|
||||
DisplayOutputLn(("You used '%s' shortcut that has been changed from toggling a breakpoint to navigating to the next breakpoint in the document.")
|
||||
:format(BPNSC))
|
||||
DisplayOutputLn(("To toggle a breakpoint, use '%s' or click in the editor margin.")
|
||||
:format(KSC(ID_BREAKPOINTTOGGLE):gsub("\t",""):gsub("Ctrl", osx and "Cmd" or "Ctrl")))
|
||||
end
|
||||
end)
|
||||
frame:Connect(ID_BREAKPOINTPREV, wx.wxEVT_COMMAND_MENU_SELECTED,
|
||||
function() GetEditor():MarkerGotoPrev(BREAKPOINT_MARKER) end)
|
||||
|
||||
frame:Connect(ID_BREAKPOINTNEXT, wx.wxEVT_UPDATE_UI,
|
||||
function (event) event:Enable(GetEditor() ~= nil) end)
|
||||
frame:Connect(ID_BREAKPOINTPREV, wx.wxEVT_UPDATE_UI,
|
||||
function (event) event:Enable(GetEditor() ~= nil) end)
|
||||
|
||||
frame:Connect(ID_COMPILE, wx.wxEVT_COMMAND_MENU_SELECTED,
|
||||
function ()
|
||||
local editor = GetEditor()
|
||||
ActivateOutput()
|
||||
CompileProgram(editor)
|
||||
CompileProgram(GetEditor(), {
|
||||
keepoutput = ide:GetLaunchedProcess() ~= nil or ide:GetDebugger():IsConnected()
|
||||
})
|
||||
end)
|
||||
frame:Connect(ID_COMPILE, wx.wxEVT_UPDATE_UI,
|
||||
function (event)
|
||||
local editor = GetEditor()
|
||||
event:Enable((debugger.server == nil and debugger.pid == nil) and (editor ~= nil))
|
||||
end)
|
||||
function (event) event:Enable(GetEditor() ~= nil) end)
|
||||
|
||||
frame:Connect(ID_RUN, wx.wxEVT_COMMAND_MENU_SELECTED, function () ProjectRun() end)
|
||||
frame:Connect(ID_RUN, wx.wxEVT_UPDATE_UI,
|
||||
@@ -319,7 +359,6 @@ frame:Connect(ID_ATTACHDEBUG, wx.wxEVT_COMMAND_MENU_SELECTED,
|
||||
end)
|
||||
frame:Connect(ID_ATTACHDEBUG, wx.wxEVT_UPDATE_UI,
|
||||
function (event)
|
||||
local editor = GetEditor()
|
||||
event:Enable(ide.interpreter and ide.interpreter.fattachdebug and true or false)
|
||||
ide.frame.menuBar:Check(event:GetId(), debugger.listening and true or false)
|
||||
end)
|
||||
@@ -355,8 +394,19 @@ frame:Connect(ID_DETACHDEBUG, wx.wxEVT_COMMAND_MENU_SELECTED,
|
||||
function () debugger.detach() end)
|
||||
frame:Connect(ID_DETACHDEBUG, wx.wxEVT_UPDATE_UI,
|
||||
function (event)
|
||||
event:Enable((debugger.server ~= nil) and (not debugger.scratchpad))
|
||||
end)
|
||||
|
||||
frame:Connect(ID_RUNTO, wx.wxEVT_COMMAND_MENU_SELECTED,
|
||||
function ()
|
||||
local editor = GetEditor()
|
||||
debugger.runto(editor, editor:GetCurrentLine())
|
||||
end)
|
||||
frame:Connect(ID_RUNTO, wx.wxEVT_UPDATE_UI,
|
||||
function (event)
|
||||
local editor = GetEditor()
|
||||
event:Enable((debugger.server ~= nil) and (not debugger.running)
|
||||
and (not debugger.scratchpad))
|
||||
and (editor ~= nil) and (not debugger.scratchpad))
|
||||
end)
|
||||
|
||||
frame:Connect(ID_STEP, wx.wxEVT_COMMAND_MENU_SELECTED,
|
||||
@@ -422,13 +472,3 @@ frame:Connect(ID_COMMANDLINEPARAMETERS, wx.wxEVT_UPDATE_UI,
|
||||
function (event)
|
||||
event:Enable(ide.interpreter and ide.interpreter.takeparameters and true or false)
|
||||
end)
|
||||
|
||||
frame:Connect(wx.wxEVT_IDLE,
|
||||
function(event)
|
||||
if (debugger.update) then debugger.update() end
|
||||
if (debugger.scratchpad) then DebuggerRefreshScratchpad() end
|
||||
if IndicateIfNeeded() then event:RequestMore(true) end
|
||||
PackageEventHandleOnce("onIdleOnce", event)
|
||||
PackageEventHandle("onIdle", event)
|
||||
event:Skip() -- let other EVT_IDLE handlers to work on the event
|
||||
end)
|
||||
|
||||
@@ -1,29 +1,35 @@
|
||||
-- Copyright 2011-14 Paul Kulchenko, ZeroBrane LLC
|
||||
-- Copyright 2011-15 Paul Kulchenko, ZeroBrane LLC
|
||||
-- authors: Lomtik Software (J. Winwood & John Labenski)
|
||||
-- Luxinia Dev (Eike Decker & Christoph Kubisch)
|
||||
---------------------------------------------------------
|
||||
|
||||
local ide = ide
|
||||
-- Create the Search menu and attach the callback functions
|
||||
local q = EscapeMagic
|
||||
local unpack = table.unpack or unpack
|
||||
|
||||
local frame = ide.frame
|
||||
local menuBar = frame.menuBar
|
||||
|
||||
local findReplace = ide.findReplace
|
||||
|
||||
local findMenu = wx.wxMenu{
|
||||
{ ID_FIND, TR("&Find")..KSC(ID_FIND), TR("Find text") },
|
||||
{ ID_FINDNEXT, TR("Find &Next")..KSC(ID_FINDNEXT), TR("Find the next text occurrence") },
|
||||
{ ID_FINDPREV, TR("Find &Previous")..KSC(ID_FINDPREV), TR("Find the earlier text occurence") },
|
||||
{ ID_FINDSELECTNEXT, TR("Select and Find Next")..KSC(ID_FINDSELECTNEXT), TR("Select the word under cursor and find its next occurrence") },
|
||||
{ ID_FINDSELECTPREV, TR("Select and Find Previous")..KSC(ID_FINDSELECTPREV), TR("Select the word under cursor and find its previous occurrence") },
|
||||
{ ID_FINDSELECTNEXT, TR("Select And Find Next")..KSC(ID_FINDSELECTNEXT), TR("Select the word under cursor and find its next occurrence") },
|
||||
{ ID_FINDSELECTPREV, TR("Select And Find Previous")..KSC(ID_FINDSELECTPREV), TR("Select the word under cursor and find its previous occurrence") },
|
||||
{ ID_REPLACE, TR("&Replace")..KSC(ID_REPLACE), TR("Find and replace text") },
|
||||
{ },
|
||||
{ ID_FINDINFILES, TR("Find &In Files")..KSC(ID_FINDINFILES), TR("Find text in files") },
|
||||
{ ID_REPLACEINFILES, TR("Re&place In Files")..KSC(ID_REPLACEINFILES), TR("Find and replace text in files") },
|
||||
{ },
|
||||
{ ID_GOTOLINE, TR("&Go To Line...")..KSC(ID_GOTOLINE), TR("Go to a selected line") },
|
||||
}
|
||||
findMenu:Append(ID_NAVIGATE, TR("Navigate"), wx.wxMenu {
|
||||
{ ID_NAVIGATETOFILE, TR("Go To File...")..KSC(ID_NAVIGATETOFILE), TR("Go to file") },
|
||||
{ ID_NAVIGATETOLINE, TR("Go To Line...")..KSC(ID_NAVIGATETOLINE), TR("Go to line") },
|
||||
{ ID_NAVIGATETOSYMBOL, TR("Go To Symbol...")..KSC(ID_NAVIGATETOSYMBOL), TR("Go to symbol") },
|
||||
{ ID_NAVIGATETOMETHOD, TR("Insert Library Function...")..KSC(ID_NAVIGATETOMETHOD), TR("Find and insert library function") },
|
||||
})
|
||||
|
||||
menuBar:Append(findMenu, TR("&Search"))
|
||||
|
||||
local function onUpdateUISearchMenu(event) event:Enable(GetEditor() ~= nil) end
|
||||
@@ -56,10 +62,10 @@ frame:Connect(ID_FINDNEXT, wx.wxEVT_COMMAND_MENU_SELECTED,
|
||||
local selection = editor:GetMainSelection() + 1
|
||||
if selection >= editor:GetSelections() then selection = 0 end
|
||||
editor:SetMainSelection(selection)
|
||||
editor:EnsureCaretVisible()
|
||||
editor:ShowPosEnforcePolicy(editor:GetCurrentPos())
|
||||
else
|
||||
if findReplace:GetSelectedString() or findReplace:HasText() then
|
||||
findReplace:FindString()
|
||||
if findReplace:SetFind(findReplace:GetFind() or findReplace:GetSelection()) then
|
||||
findReplace:Find()
|
||||
else
|
||||
findReplace:Show(false)
|
||||
end
|
||||
@@ -74,10 +80,10 @@ frame:Connect(ID_FINDPREV, wx.wxEVT_COMMAND_MENU_SELECTED,
|
||||
local selection = editor:GetMainSelection() - 1
|
||||
if selection < 0 then selection = editor:GetSelections() - 1 end
|
||||
editor:SetMainSelection(selection)
|
||||
editor:EnsureCaretVisible()
|
||||
editor:ShowPosEnforcePolicy(editor:GetCurrentPos())
|
||||
else
|
||||
if findReplace:GetSelectedString() or findReplace:HasText() then
|
||||
findReplace:FindString(true) -- search up
|
||||
if findReplace:SetFind(findReplace:GetFind() or findReplace:GetSelection()) then
|
||||
findReplace:Find(true) -- search up
|
||||
else
|
||||
findReplace:Show(false)
|
||||
end
|
||||
@@ -88,61 +94,327 @@ frame:Connect(ID_FINDPREV, wx.wxEVT_UPDATE_UI, onUpdateUISearchMenu)
|
||||
-- Select and Find behaves like Find if there is a current selection;
|
||||
-- if not, it selects a word under cursor (if any) and does find.
|
||||
|
||||
local function selectWordUnderCaret(editor)
|
||||
local pos = editor:GetCurrentPos()
|
||||
local text = editor:GetTextRange( -- try to select a word under caret
|
||||
editor:WordStartPosition(pos, true), editor:WordEndPosition(pos, true))
|
||||
return #text > 0 and text or editor:GetTextRange( -- try to select a non-word under caret
|
||||
editor:WordStartPosition(pos, false), editor:WordEndPosition(pos, false))
|
||||
end
|
||||
frame:Connect(ID_FINDSELECTNEXT, wx.wxEVT_COMMAND_MENU_SELECTED,
|
||||
function (event)
|
||||
local editor = GetEditor()
|
||||
if editor:GetSelectionStart() ~= editor:GetSelectionEnd() then
|
||||
ide.frame:AddPendingEvent(
|
||||
wx.wxCommandEvent(wx.wxEVT_COMMAND_MENU_SELECTED, ID_FINDNEXT))
|
||||
return
|
||||
end
|
||||
|
||||
local text = selectWordUnderCaret(editor)
|
||||
if #text > 0 then
|
||||
findReplace.findText = text
|
||||
findReplace:FindString()
|
||||
if findReplace:SetFind(findReplace:GetSelection() or findReplace:GetWordAtCaret()) then
|
||||
findReplace:Find()
|
||||
end
|
||||
end)
|
||||
frame:Connect(ID_FINDSELECTNEXT, wx.wxEVT_UPDATE_UI, onUpdateUISearchMenu)
|
||||
|
||||
frame:Connect(ID_FINDSELECTPREV, wx.wxEVT_COMMAND_MENU_SELECTED,
|
||||
function (event)
|
||||
local editor = GetEditor()
|
||||
if editor:GetSelectionStart() ~= editor:GetSelectionEnd() then
|
||||
ide.frame:AddPendingEvent(
|
||||
wx.wxCommandEvent(wx.wxEVT_COMMAND_MENU_SELECTED, ID_FINDPREV))
|
||||
return
|
||||
end
|
||||
|
||||
local text = selectWordUnderCaret(editor)
|
||||
if #text > 0 then
|
||||
findReplace.findText = text
|
||||
findReplace:FindString(true)
|
||||
if findReplace:SetFind(findReplace:GetSelection() or findReplace:GetWordAtCaret()) then
|
||||
findReplace:Find(true)
|
||||
end
|
||||
end)
|
||||
frame:Connect(ID_FINDSELECTPREV, wx.wxEVT_UPDATE_UI, onUpdateUISearchMenu)
|
||||
|
||||
-------------------- Find replace end
|
||||
local markername = "commandbar.background"
|
||||
local mac = ide.osname == 'Macintosh'
|
||||
local win = ide.osname == 'Windows'
|
||||
local special = {SYMBOL = '@', LINE = ':', METHOD = ';'}
|
||||
local tabsep = "\0"
|
||||
local function name2index(name)
|
||||
local p = name:find(tabsep)
|
||||
return p and tonumber(name:sub(p + #tabsep)) or nil
|
||||
end
|
||||
local function navigateTo(default, selected)
|
||||
local styles = ide.config.styles
|
||||
local marker = ide:AddMarker(markername,
|
||||
wxstc.wxSTC_MARK_BACKGROUND, styles.text.fg, styles.caretlinebg.bg)
|
||||
|
||||
frame:Connect(ID_GOTOLINE, wx.wxEVT_COMMAND_MENU_SELECTED,
|
||||
function (event)
|
||||
local editor = GetEditor()
|
||||
local linecur = editor:LineFromPosition(editor:GetCurrentPos())
|
||||
local linemax = editor:LineFromPosition(editor:GetLength()) + 1
|
||||
local linenum = wx.wxGetNumberFromUser(TR("Enter line number"),
|
||||
"1 .. "..tostring(linemax),
|
||||
TR("Go To Line"),
|
||||
linecur, 1, linemax,
|
||||
frame)
|
||||
if linenum > 0 then
|
||||
editor:GotoLine(linenum-1)
|
||||
end
|
||||
local nb = ide:GetEditorNotebook()
|
||||
local selection = nb:GetSelection()
|
||||
local maxitems = ide.config.commandbar.maxitems
|
||||
local files, preview, origline, functions, methods
|
||||
|
||||
local function markLine(ed, toline)
|
||||
ed:MarkerDefine(ide:GetMarker(markername))
|
||||
ed:MarkerDeleteAll(marker)
|
||||
ed:MarkerAdd(toline-1, marker)
|
||||
-- store the original line if not stored yet
|
||||
origline = origline or (ed:GetCurrentLine()+1)
|
||||
ed:EnsureVisibleEnforcePolicy(toline-1)
|
||||
end
|
||||
|
||||
CommandBarShow({
|
||||
defaultText = default or "",
|
||||
selectedText = selected or "",
|
||||
onDone = function(t, enter, text)
|
||||
if not mac then nb:Freeze() end
|
||||
|
||||
-- delete all current line markers if any; restore line position
|
||||
local ed = ide:GetEditor()
|
||||
if ed and origline then
|
||||
ed:MarkerDeleteAll(marker)
|
||||
-- only restore original line if Escape was used (enter == false)
|
||||
if enter == false then ed:EnsureVisibleEnforcePolicy(origline-1) end
|
||||
end
|
||||
|
||||
local pindex = preview and nb:GetPageIndex(preview)
|
||||
if enter then
|
||||
local fline, sline, tabindex = unpack(t or {})
|
||||
|
||||
-- jump to symbol; tabindex has the position of the symbol
|
||||
if text and text:find(special.SYMBOL) then
|
||||
if sline and tabindex then
|
||||
local index = name2index(sline)
|
||||
local editor = index and nb:GetPage(index):DynamicCast("wxStyledTextCtrl")
|
||||
if not editor then
|
||||
local doc = ide:FindDocument(sline)
|
||||
-- reload the file (including the preview to refresh its symbols in the outline)
|
||||
editor = LoadFile(sline, (not doc or doc:GetTabIndex() == pindex) and preview or nil)
|
||||
end
|
||||
if editor then
|
||||
if pindex and pindex ~= ide:GetDocument(editor):GetTabIndex() then ClosePage(pindex) end
|
||||
editor:SetFocus() -- in case the focus is on some other panel
|
||||
editor:GotoPos(tabindex-1)
|
||||
editor:EnsureVisibleEnforcePolicy(editor:LineFromPosition(tabindex-1))
|
||||
end
|
||||
end
|
||||
-- insert selected method
|
||||
elseif text and text:find('^%s*'..special.METHOD) then
|
||||
if ed then -- clean up text and insert at the current location
|
||||
local method = sline
|
||||
local isfunc = methods.desc[method][1]:find(q(method).."%s*%(")
|
||||
local text = method .. (isfunc and "()" or "")
|
||||
local pos = ed:GetCurrentPos()
|
||||
ed:InsertTextDyn(pos, text)
|
||||
ed:EnsureVisibleEnforcePolicy(ed:LineFromPosition(pos))
|
||||
ed:GotoPos(pos + #method + (isfunc and 1 or 0))
|
||||
if isfunc then -- show the tooltip
|
||||
ide.frame:AddPendingEvent(wx.wxCommandEvent(
|
||||
wx.wxEVT_COMMAND_MENU_SELECTED, ID_SHOWTOOLTIP))
|
||||
end
|
||||
end
|
||||
-- set line position in the (current) editor if requested
|
||||
elseif text and text:find(special.LINE..'(%d+)%s*$') then
|
||||
local toline = tonumber(text:match(special.LINE..'(%d+)'))
|
||||
if toline and ed then
|
||||
ed:GotoLine(toline-1)
|
||||
ed:EnsureVisibleEnforcePolicy(toline-1)
|
||||
ed:SetFocus() -- in case the focus is on some other panel
|
||||
end
|
||||
elseif tabindex then -- switch to existing tab
|
||||
SetEditorSelection(tabindex)
|
||||
if pindex and pindex ~= tabindex then ClosePage(pindex) end
|
||||
-- load a new file (into preview if set)
|
||||
elseif sline or text then
|
||||
-- 1. use "text" if Ctrl/Cmd-Enter is used
|
||||
-- 2. otherwise use currently selected file
|
||||
-- 3. otherwise use "text"
|
||||
local file = (wx.wxGetKeyState(wx.WXK_CONTROL) and text) or sline or text
|
||||
local fullPath = MergeFullPath(ide:GetProject(), file)
|
||||
local doc = ide:FindDocument(fullPath)
|
||||
-- if the document is already opened (not in the preview)
|
||||
-- or can't be opened as a file or folder, then close the preview
|
||||
if doc and doc.index ~= pindex
|
||||
or not LoadFile(fullPath, preview or nil) and not ProjectUpdateProjectDir(fullPath) then
|
||||
if pindex then ClosePage(pindex) end
|
||||
end
|
||||
end
|
||||
elseif enter == nil then -- changed focus
|
||||
-- do nothing; keep everything as is
|
||||
else
|
||||
-- close preview
|
||||
if pindex then ClosePage(pindex) end
|
||||
-- restore original selection if canceled
|
||||
if nb:GetSelection() ~= selection then nb:SetSelection(selection) end
|
||||
end
|
||||
preview = nil
|
||||
if not mac then nb:Thaw() end
|
||||
end,
|
||||
onUpdate = function(text)
|
||||
local lines = {}
|
||||
local projdir = ide:GetProject()
|
||||
|
||||
-- delete all current line markers if any
|
||||
-- restore the original position if search text is updated
|
||||
local ed = ide:GetEditor()
|
||||
if ed and origline then ed:MarkerDeleteAll(marker) end
|
||||
|
||||
-- reset cached functions if no symbol search
|
||||
if text and not text:find(special.SYMBOL) then
|
||||
functions = nil
|
||||
if ed and origline then ed:EnsureVisibleEnforcePolicy(origline-1) end
|
||||
end
|
||||
-- reset cached methods if no method search
|
||||
if text and not text:find(special.METHOD) then methods = nil end
|
||||
|
||||
if text and text:find(special.SYMBOL) then
|
||||
local file, symbol = text:match('^(.*)'..special.SYMBOL..'(.*)')
|
||||
if not functions then
|
||||
local nums, paths = {}, {}
|
||||
functions = {pos = {}, src = {}}
|
||||
|
||||
local function populateSymbols(path, symbols)
|
||||
for _, func in ipairs(symbols) do
|
||||
table.insert(functions, func.name)
|
||||
nums[func.name] = (nums[func.name] or 0) + 1
|
||||
local num = nums[func.name]
|
||||
functions.src[func.name..num] = path
|
||||
functions.pos[func.name..num] = func.pos
|
||||
end
|
||||
end
|
||||
|
||||
local currentonly = #file > 0 and ed
|
||||
local outline = ide:GetOutline()
|
||||
for _, doc in pairs(currentonly and {ide:GetDocument(ed)} or ide:GetDocuments()) do
|
||||
local path, editor = doc:GetFilePath(), doc:GetEditor()
|
||||
if path then paths[path] = true end
|
||||
populateSymbols(path or doc:GetFileName()..tabsep..doc:GetTabIndex(), outline:GetEditorSymbols(editor))
|
||||
end
|
||||
|
||||
-- now add all other files in the project
|
||||
if not currentonly and ide.config.commandbar.showallsymbols then
|
||||
local n = 0
|
||||
outline:RefreshSymbols(projdir, function(path)
|
||||
local symbols = outline:GetFileSymbols(path)
|
||||
if not paths[path] and symbols then populateSymbols(path, symbols) end
|
||||
if not symbols then n = n + 1 end
|
||||
end)
|
||||
if n > 0 then ide:SetStatusFor(TR("Queued %d files to index."):format(n)) end
|
||||
end
|
||||
end
|
||||
local nums = {}
|
||||
if #symbol > 0 then
|
||||
local topscore
|
||||
for _, item in ipairs(CommandBarScoreItems(functions, symbol, maxitems)) do
|
||||
local func, score = unpack(item)
|
||||
topscore = topscore or score
|
||||
nums[func] = (nums[func] or 0) + 1
|
||||
local num = nums[func]
|
||||
if score > topscore / 4 and score > 1 then
|
||||
table.insert(lines, {("%2d %s"):format(score, func),
|
||||
functions.src[func..num], functions.pos[func..num]})
|
||||
end
|
||||
end
|
||||
else
|
||||
for n, name in ipairs(functions) do
|
||||
if n > maxitems then break end
|
||||
nums[name] = (nums[name] or 0) + 1
|
||||
local num = nums[name]
|
||||
lines[n] = {name, functions.src[name..num], functions.pos[name..num]}
|
||||
end
|
||||
end
|
||||
elseif ed and text and text:find('^%s*'..special.METHOD) then
|
||||
if not methods then
|
||||
methods = {desc = {}}
|
||||
local num = 1
|
||||
if ed.api and ed.api.tip and ed.api.tip.shortfinfoclass then
|
||||
for libname, lib in pairs(ed.api.tip.shortfinfoclass) do
|
||||
for method, val in pairs(lib) do
|
||||
local signature, desc = val:match('(.-)\n(.*)')
|
||||
local m = libname..'.'..method
|
||||
desc = desc and desc:gsub("\n", " ") or val
|
||||
methods[num] = m
|
||||
methods.desc[m] = {signature or (libname..'.'..method), desc}
|
||||
num = num + 1
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
local method = text:match(special.METHOD..'(.*)')
|
||||
if #method > 0 then
|
||||
local topscore
|
||||
for _, item in ipairs(CommandBarScoreItems(methods, method, maxitems)) do
|
||||
local method, score = unpack(item)
|
||||
topscore = topscore or score
|
||||
if score > topscore / 4 and score > 1 then
|
||||
table.insert(lines, { score, method })
|
||||
end
|
||||
end
|
||||
end
|
||||
elseif text and text:find(special.LINE..'(%d*)%s*$') then
|
||||
local toline = tonumber(text:match(special.LINE..'(%d+)'))
|
||||
if toline and ed then markLine(ed, toline) end
|
||||
elseif text and #text > 0 and projdir and #projdir > 0 then
|
||||
-- populate the list of files
|
||||
files = files or FileSysGetRecursive(projdir, true, "*",
|
||||
{sort = false, path = false, folder = false, skipbinary = true})
|
||||
local topscore
|
||||
for _, item in ipairs(CommandBarScoreItems(files, text, maxitems)) do
|
||||
local file, score = unpack(item)
|
||||
topscore = topscore or score
|
||||
if score > topscore / 4 and score > 1 then
|
||||
table.insert(lines, {
|
||||
("%2d %s"):format(score, wx.wxFileName(file):GetFullName()),
|
||||
file,
|
||||
})
|
||||
end
|
||||
end
|
||||
else
|
||||
for _, doc in pairs(ide:GetDocuments()) do
|
||||
lines[doc:GetTabIndex()+1] = {doc:GetFileName(), doc:GetFilePath(), doc:GetTabIndex()}
|
||||
end
|
||||
end
|
||||
return lines
|
||||
end,
|
||||
onItem = function(t)
|
||||
if methods then
|
||||
local score, method = unpack(t)
|
||||
return ("%2d %s"):format(score, methods.desc[method][1]), methods.desc[method][2]
|
||||
else
|
||||
return unpack(t)
|
||||
end
|
||||
end,
|
||||
onSelection = function(t, text)
|
||||
local _, file, tabindex = unpack(t)
|
||||
local pos
|
||||
if text and text:find(special.SYMBOL) then
|
||||
pos, tabindex = tabindex, name2index(file)
|
||||
elseif text and text:find(special.METHOD) then
|
||||
return
|
||||
end
|
||||
|
||||
if file then file = MergeFullPath(ide:GetProject(), file) end
|
||||
-- disabling event handlers for the notebook and the editor
|
||||
-- to minimize changes in the UI when editors are switched
|
||||
-- or files in the preview are updated.
|
||||
nb:SetEvtHandlerEnabled(false)
|
||||
local doc = file and ide:FindDocument(file)
|
||||
if doc and not tabindex then tabindex = doc:GetTabIndex() end
|
||||
if tabindex then
|
||||
local ed = nb:GetPage(tabindex)
|
||||
ed:SetEvtHandlerEnabled(false)
|
||||
if nb:GetSelection() ~= tabindex then nb:SetSelection(tabindex) end
|
||||
ed:SetEvtHandlerEnabled(true)
|
||||
elseif file then
|
||||
-- skip binary files with unknown extensions
|
||||
if #ide:GetKnownExtensions(GetFileExt(file)) > 0
|
||||
or not IsBinary(FileRead(file, 2048)) then
|
||||
preview = preview or NewFile()
|
||||
preview:SetEvtHandlerEnabled(false)
|
||||
LoadFile(file, preview, true, true)
|
||||
preview:SetFocus()
|
||||
-- force refresh since the panel covers the editor on OSX/Linux
|
||||
-- this fixes the preview window not always redrawn on Linux
|
||||
if not win then preview:Update() preview:Refresh() end
|
||||
preview:SetEvtHandlerEnabled(true)
|
||||
elseif preview then
|
||||
ClosePage(nb:GetPageIndex(preview))
|
||||
preview = nil
|
||||
end
|
||||
end
|
||||
nb:SetEvtHandlerEnabled(true)
|
||||
|
||||
if text and text:find(special.SYMBOL) then
|
||||
local ed = ide:GetEditor()
|
||||
if ed then markLine(ed, ed:LineFromPosition(pos-1)+1) end
|
||||
end
|
||||
end,
|
||||
})
|
||||
end
|
||||
|
||||
frame:Connect(ID_NAVIGATETOFILE, wx.wxEVT_COMMAND_MENU_SELECTED,
|
||||
function() navigateTo("") end)
|
||||
frame:Connect(ID_NAVIGATETOLINE, wx.wxEVT_COMMAND_MENU_SELECTED,
|
||||
function() navigateTo(special.LINE) end)
|
||||
frame:Connect(ID_NAVIGATETOMETHOD, wx.wxEVT_COMMAND_MENU_SELECTED,
|
||||
function() navigateTo(special.METHOD) end)
|
||||
frame:Connect(ID_NAVIGATETOSYMBOL, wx.wxEVT_COMMAND_MENU_SELECTED,
|
||||
function()
|
||||
local ed = GetEditor()
|
||||
navigateTo(special.SYMBOL, ed and ed:ValueFromPosition(ed:GetCurrentPos()))
|
||||
end)
|
||||
frame:Connect(ID_GOTOLINE, wx.wxEVT_UPDATE_UI, onUpdateUISearchMenu)
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user