Compare commits
525 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
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 |
438
CHANGELOG.md
438
CHANGELOG.md
@@ -1,5 +1,443 @@
|
||||
# ZeroBrane Studio Changelog
|
||||
|
||||
## 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
|
||||
|
||||
56
README.md
56
README.md
@@ -2,8 +2,12 @@
|
||||
|
||||
[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),
|
||||
@@ -11,7 +15,9 @@ and debugging support for several Lua engines (LuaJIT,
|
||||
[Cocos2d-x](http://notebook.kulchenko.com/zerobrane/cocos2d-x-simulator-and-on-device-debugging-with-zerobrane-studio),
|
||||
[GSL-shell](http://notebook.kulchenko.com/zerobrane/gsl-shell-debugging-with-zerobrane-studio),
|
||||
[Adobe Lightroom](http://notebook.kulchenko.com/zerobrane/debugging-lightroom-plugins-zerobrane-studio-ide),
|
||||
[OpenResty/Nginx](http://notebook.kulchenko.com/zerobrane/debugging-openresty-nginx-lua-scripts-with-zerobrane-studio)
|
||||
[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 +28,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`, `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 +68,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
|
||||
@@ -98,4 +112,4 @@ again.
|
||||
|
||||
## License
|
||||
|
||||
See LICENSE file.
|
||||
See [LICENSE](LICENSE).
|
||||
|
||||
@@ -130,8 +130,14 @@ findMSB = fn "returns bit number of msb. - (intN)(intN)",
|
||||
|
||||
discard = fn "conditionally (<0) kill a pixel before output. - ()(vecN)",
|
||||
dFdx = fn "returns approximate partial derivative with respect to window-space X. - (vecN)(vecN)",
|
||||
dFdxCoarse = fn "returns approximate partial derivative with respect to window-space X. - (vecN)(vecN)",
|
||||
dFdxFine = fn "returns approximate partial derivative with respect to window-space X. - (vecN)(vecN)",
|
||||
dFdy = fn "returns approximate partial derivative with respect to window-space Y. - (vecN)(vecN)",
|
||||
fwidth = fn "returns sum of approximate window-space partial derivatives magnitudes. - (vecN)(vecN)",
|
||||
dFdyCoarse = fn "returns approximate partial derivative with respect to window-space Y. - (vecN)(vecN)",
|
||||
dFdyFine = fn "returns approximate partial derivative with respect to window-space Y. - (vecN)(vecN)",
|
||||
fwidth = fn "returns abs sum of approximate window-space partial derivatives magnitudes. - (vecN)(vecN)",
|
||||
fwidthFine = fn "returns abs sum of approximate window-space partial derivatives magnitudes. - (vecN)(vecN)",
|
||||
fwidthCoarse = fn "returns abs sum of approximate window-space partial derivatives magnitudes. - (vecN)(vecN)",
|
||||
interpolateAtCentroid = fn "Return value of interpolant sampled inside pixel and the primitive. - (floatN)(floatN)",
|
||||
interpolateAtSample = fn "Return value of interpolant at the location fo sample. - (floatN)(floatN, int sample)",
|
||||
interpolateAtOffset = fn "Return value of interpolant sampled at fixed offset offset from pixel center. - (floatN)(floatN, vec2 offset)",
|
||||
@@ -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)",
|
||||
@@ -264,7 +265,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 +356,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 +463,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.",
|
||||
|
||||
1228
api/lua/corona.lua
1228
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
@@ -1,7 +1,8 @@
|
||||
-- Copyright 2011-12 Paul Kulchenko, ZeroBrane LLC
|
||||
|
||||
-- converted from love_api.lua (http://love2d.org/forums/viewtopic.php?f=3&t=1796&start=50#p166908)
|
||||
-- (API for love 0.9.1; as of Apr 24, 2014)
|
||||
-- converted from love_api.lua in https://github.com/rm-code/love-api
|
||||
-- (API for love 0.9.2; as of Apr 02, 2015)
|
||||
-- Earlier versins used love_api.lua from http://love2d.org/forums/viewtopic.php?f=3&t=1796&start=50#p166908
|
||||
-- the conversion script is at the bottom of this file
|
||||
|
||||
local love = {
|
||||
@@ -68,6 +69,12 @@ local love = {
|
||||
returns = "(x: number, y: number, z: number)",
|
||||
type = "function"
|
||||
},
|
||||
getDopplerScale = {
|
||||
args = "()",
|
||||
description = "Gets the current global scale factor for velocity-based doppler effects.",
|
||||
returns = "(scale: number)",
|
||||
type = "function"
|
||||
},
|
||||
getPitch = {
|
||||
args = "()",
|
||||
description = "Gets the current pitch of the Source.",
|
||||
@@ -182,6 +189,12 @@ local love = {
|
||||
returns = "()",
|
||||
type = "function"
|
||||
},
|
||||
setDopplerScale = {
|
||||
args = "(scale: number)",
|
||||
description = "Sets a global scale factor for velocity-based doppler effects. The default scale value is 1.",
|
||||
returns = "()",
|
||||
type = "function"
|
||||
},
|
||||
setLooping = {
|
||||
args = "(loop: boolean)",
|
||||
description = "Sets whether the Source should loop.",
|
||||
@@ -594,6 +607,12 @@ local love = {
|
||||
description = "class constants",
|
||||
type = "class"
|
||||
},
|
||||
areSymlinksEnabled = {
|
||||
args = "()",
|
||||
description = "Gets whether love.filesystem follows symbolic links.",
|
||||
returns = "(enable: boolean)",
|
||||
type = "function"
|
||||
},
|
||||
createDirectory = {
|
||||
args = "(name: string)",
|
||||
description = "Creates a directory.",
|
||||
@@ -630,6 +649,12 @@ local love = {
|
||||
returns = "(modtime: number, errormsg: string)",
|
||||
type = "function"
|
||||
},
|
||||
getRealDirectory = {
|
||||
args = "(filepath: string)",
|
||||
description = "Gets the platform-specific absolute path of the directory containing a filepath.\n\nThis can be used to determine whether a file is inside the save directory or the game's source .love.",
|
||||
returns = "(realdir: string)",
|
||||
type = "function"
|
||||
},
|
||||
getSaveDirectory = {
|
||||
args = "()",
|
||||
description = "Gets the full path to the designated save directory. This can be useful if you want to use the standard io library (or something else) to read or write in the save directory.",
|
||||
@@ -642,6 +667,12 @@ local love = {
|
||||
returns = "(size: number, errormsg: string)",
|
||||
type = "function"
|
||||
},
|
||||
getSourceBaseDirectory = {
|
||||
args = "()",
|
||||
description = "Returns the full path to the directory containing the .love file. If the game is fused to the LÖVE executable, then the directory containing the executable is returned.\n\nIf love.filesystem.isFused is true, the path returned by this function can be passed to love.filesystem.mount, which will make the directory containing the main game (e.g. C:\\Program Files\\coolgame\\) readable by love.filesystem.",
|
||||
returns = "(path: string)",
|
||||
type = "function"
|
||||
},
|
||||
getUserDirectory = {
|
||||
args = "()",
|
||||
description = "Returns the path of the user's directory.",
|
||||
@@ -672,6 +703,12 @@ local love = {
|
||||
returns = "(fused: boolean)",
|
||||
type = "function"
|
||||
},
|
||||
isSymlink = {
|
||||
args = "(path: string)",
|
||||
description = "Gets whether a filepath is actually a symbolic link.\n\nIf symbolic links are not enabled (via love.filesystem.setSymlinksEnabled), this function will always return false.",
|
||||
returns = "(symlink: boolean)",
|
||||
type = "function"
|
||||
},
|
||||
lines = {
|
||||
args = "(name: string)",
|
||||
description = "Iterate over the lines in a file.",
|
||||
@@ -684,6 +721,12 @@ local love = {
|
||||
returns = "(chunk: function)",
|
||||
type = "function"
|
||||
},
|
||||
mount = {
|
||||
args = "(archive: string, mountpoint: string, appendToPath: string)",
|
||||
description = "Mounts a zip file or folder in the game's save directory for reading.",
|
||||
returns = "(success: boolean)",
|
||||
type = "function"
|
||||
},
|
||||
newFile = {
|
||||
args = "(filename: string, mode: FileMode)",
|
||||
description = "Creates a new File object. It needs to be opened before it can be accessed.",
|
||||
@@ -714,6 +757,24 @@ local love = {
|
||||
returns = "()",
|
||||
type = "function"
|
||||
},
|
||||
setSource = {
|
||||
args = "(path: string)",
|
||||
description = "Sets the source of the game, where the code is present. This function can only be called once, and is normally automatically done by LÖVE.",
|
||||
returns = "()",
|
||||
type = "function"
|
||||
},
|
||||
setSymlinksEnabled = {
|
||||
args = "(enable: boolean)",
|
||||
description = "Sets whether love.filesystem follows symbolic links. It is disabled by default.",
|
||||
returns = "()",
|
||||
type = "function"
|
||||
},
|
||||
unmount = {
|
||||
args = "(archive: string)",
|
||||
description = "Unmounts a zip file or folder previously mounted for reading with love.filesystem.mount.",
|
||||
returns = "(success: boolean)",
|
||||
type = "function"
|
||||
},
|
||||
write = {
|
||||
args = "(name: string, data: string, size: number)",
|
||||
description = "Write data to a file.\n\nIf you are getting the error message \"Could not set write directory\", try setting the save directory. This is done either with love.filesystem.setIdentity or by setting the identity field in love.conf.",
|
||||
@@ -898,6 +959,56 @@ local love = {
|
||||
description = "A Canvas is used for off-screen rendering. Think of it as an invisible screen that you can draw to, but that will not be visible until you draw it to the actual visible screen. It is also known as \"render to texture\".\n\nBy drawing things that do not change position often (such as background items) to the Canvas, and then drawing the entire Canvas instead of each item, you can reduce the number of draw operations performed each frame.",
|
||||
type = "lib"
|
||||
},
|
||||
CanvasFormat = {
|
||||
childs = {
|
||||
hdr = {
|
||||
description = "A format suitable for high dynamic range content - an alias for the rgba16f format, normally.",
|
||||
type = "value"
|
||||
},
|
||||
normal = {
|
||||
description = "The default Canvas format - an alias for the rgba8 format, normally.",
|
||||
type = "value"
|
||||
},
|
||||
rg11b10f = {
|
||||
description = "Floating point RGB with 11 bits in the red and green channels, and 10 bits in the blue channel (32 bpp.) There is no alpha channel. Color values can range from [0, +infinity].",
|
||||
type = "value"
|
||||
},
|
||||
rgb5a1 = {
|
||||
description = "RGB with 5 bits each, and a 1-bit alpha channel (16 bpp.)",
|
||||
type = "value"
|
||||
},
|
||||
rgb10a2 = {
|
||||
description = "RGB with 10 bits per channel, and a 2-bit alpha channel (32 bpp.)",
|
||||
type = "value"
|
||||
},
|
||||
rgb565 = {
|
||||
description = "RGB with 5, 6, and 5 bits each, respectively (16 bpp). There is no alpha channel in this format.",
|
||||
type = "value"
|
||||
},
|
||||
rgba4 = {
|
||||
description = "4 bits per channel (16 bpp) RGBA.",
|
||||
type = "value"
|
||||
},
|
||||
rgba8 = {
|
||||
description = "8 bits per channel (32 bpp) RGBA. Color channel values range from 0-255 (0-1 in shaders.)",
|
||||
type = "value"
|
||||
},
|
||||
rgba16f = {
|
||||
description = "Floating point RGBA with 16 bits per channel (64 bpp.) Color values can range from [-infinity, +infinity].",
|
||||
type = "value"
|
||||
},
|
||||
rgba32f = {
|
||||
description = "Floating point RGBA with 32 bits per channel (128 bpp.) Color values can range from [-infinity, +infinity].",
|
||||
type = "value"
|
||||
},
|
||||
srgb = {
|
||||
description = "The same as rgba8, but the Canvas is interpreted as being in the sRGB color space. Everything drawn to the Canvas will be converted from linear RGB to sRGB. When the Canvas is drawn (or used in a shader), it will be decoded from sRGB to linear RGB.",
|
||||
type = "value"
|
||||
}
|
||||
},
|
||||
description = "class constants",
|
||||
type = "class"
|
||||
},
|
||||
DrawMode = {
|
||||
childs = {
|
||||
fill = {
|
||||
@@ -1253,7 +1364,7 @@ local love = {
|
||||
type = "value"
|
||||
},
|
||||
strip = {
|
||||
description = "The vertices create a series of connected triangles using vertices v1, v2, v3, then v3, v2, v4 (note the order), then v3, v4, v5 and so on.",
|
||||
description = "The vertices create a series of connected triangles using vertices 1, 2, 3, then 3, 2, 4 (note the order), then 3, 4, 5 and so on.",
|
||||
type = "value"
|
||||
},
|
||||
triangles = {
|
||||
@@ -1344,6 +1455,12 @@ local love = {
|
||||
returns = "(xmin: number, ymin: number, xmax: number, ymax: number)",
|
||||
type = "function"
|
||||
},
|
||||
getLinearDamping = {
|
||||
args = "()",
|
||||
description = "Gets the amount of linear damping (constant deceleration) for particles.",
|
||||
returns = "(min: number, max: number)",
|
||||
type = "function"
|
||||
},
|
||||
getOffset = {
|
||||
args = "()",
|
||||
description = "Get the offget position which the particle sprite is rotated around. If this function is not used, the particles rotate around their center.",
|
||||
@@ -1512,6 +1629,12 @@ local love = {
|
||||
returns = "()",
|
||||
type = "function"
|
||||
},
|
||||
setLinearDamping = {
|
||||
args = "(min: number, max: number)",
|
||||
description = "Sets the amount of linear damping (constant deceleration) for particles.",
|
||||
returns = "()",
|
||||
type = "function"
|
||||
},
|
||||
setOffset = {
|
||||
args = "(x: number, y: number)",
|
||||
description = "Set the offset position which the particle sprite is rotated around. If this function is not used, the particles rotate around their center.",
|
||||
@@ -1530,6 +1653,12 @@ local love = {
|
||||
returns = "()",
|
||||
type = "function"
|
||||
},
|
||||
setQuads = {
|
||||
args = "(quad1: Quad, quad2: Quad)",
|
||||
description = "Sets a series of Quads to use for the particle sprites. Particles will choose a Quad from the list based on the particle's current lifetime, allowing for the use of animated sprite sheets with ParticleSystems.",
|
||||
returns = "()",
|
||||
type = "function"
|
||||
},
|
||||
setRadialAcceleration = {
|
||||
args = "(min: number, max: number)",
|
||||
description = "Set the radial acceleration (away from the emitter).",
|
||||
@@ -1639,10 +1768,22 @@ local love = {
|
||||
type = "function"
|
||||
},
|
||||
Shader = {
|
||||
args = "()",
|
||||
childs = {
|
||||
getWarnings = {
|
||||
args = "()",
|
||||
description = "Returns any warning and error messages from compiling the shader code. This can be used for debugging your shaders if there's anything the graphics hardware doesn't like.",
|
||||
returns = "(warnings: string)",
|
||||
type = "function"
|
||||
},
|
||||
send = {
|
||||
args = "(name: string, vector: table, ...: table)",
|
||||
description = "Sends one or more values to a special (extern) variable inside the shader.",
|
||||
returns = "()",
|
||||
type = "function"
|
||||
}
|
||||
},
|
||||
description = "A Shader is used for advanced hardware-accelerated pixel or vertex manipulation. These effects are written in a language based on GLSL (OpenGL Shading Language) with a few things simplified for easier coding.\n\nPotential uses for pixel effects include HDR/bloom, motion blur, grayscale/invert/sepia/any kind of color effect, reflection/refraction, distortions, and much more!",
|
||||
returns = "()",
|
||||
type = "function"
|
||||
type = "lib"
|
||||
},
|
||||
SpriteBatch = {
|
||||
childs = {
|
||||
@@ -1658,6 +1799,12 @@ local love = {
|
||||
returns = "()",
|
||||
type = "function"
|
||||
},
|
||||
flush = {
|
||||
args = "()",
|
||||
description = "Immediately sends all new and modified sprite data in the batch to the graphics card.",
|
||||
returns = "()",
|
||||
type = "function"
|
||||
},
|
||||
getBufferSize = {
|
||||
args = "()",
|
||||
description = "Gets the maximum number of sprites the SpriteBatch can hold.",
|
||||
@@ -1734,6 +1881,20 @@ local love = {
|
||||
description = "class constants",
|
||||
type = "class"
|
||||
},
|
||||
StackType = {
|
||||
childs = {
|
||||
all = {
|
||||
description = "All love.graphics state, including transform state.",
|
||||
type = "value"
|
||||
},
|
||||
transform = {
|
||||
description = "The transformation stack (love.graphics.translate, love.graphics.rotate, etc.)",
|
||||
type = "value"
|
||||
}
|
||||
},
|
||||
description = "class constants",
|
||||
type = "class"
|
||||
},
|
||||
TextureFormat = {
|
||||
childs = {
|
||||
hdr = {
|
||||
@@ -1758,6 +1919,10 @@ local love = {
|
||||
description = "Clamp the image. Appears only once.",
|
||||
type = "value"
|
||||
},
|
||||
mirroredrepeat = {
|
||||
description = "Repeat the image, flipping it each time it repeats. May produce better visual results than the repeat mode when the image doesn't seamlessly tile.",
|
||||
type = "value"
|
||||
},
|
||||
["repeat"] = {
|
||||
description = "Repeat the image. Fills the whole available extent.",
|
||||
type = "value"
|
||||
@@ -1802,6 +1967,12 @@ local love = {
|
||||
returns = "(canvas: Canvas)",
|
||||
type = "function"
|
||||
},
|
||||
getCanvasFormats = {
|
||||
args = "()",
|
||||
description = "Gets the available Canvas formats, and whether each is supported.",
|
||||
returns = "(formats: table)",
|
||||
type = "function"
|
||||
},
|
||||
getColor = {
|
||||
args = "()",
|
||||
description = "Gets the current color.",
|
||||
@@ -1814,6 +1985,12 @@ local love = {
|
||||
returns = "(r: boolean, g: boolean, b: boolean, a: boolean)",
|
||||
type = "function"
|
||||
},
|
||||
getCompressedImageFormats = {
|
||||
args = "()",
|
||||
description = "Gets the available compressed image formats, and whether each is supported.",
|
||||
returns = "(formats: table)",
|
||||
type = "function"
|
||||
},
|
||||
getDefaultFilter = {
|
||||
args = "()",
|
||||
description = "Returns the default scaling filters used with Images, Canvases, and Fonts.",
|
||||
@@ -1898,6 +2075,12 @@ local love = {
|
||||
returns = "(shader: Shader)",
|
||||
type = "function"
|
||||
},
|
||||
getStats = {
|
||||
args = "()",
|
||||
description = "Gets performance-related rendering statistics.",
|
||||
returns = "(drawcalls: number, canvasswitches: number, texturememory: number, images: number, canvases: number, fonts: number)",
|
||||
type = "function"
|
||||
},
|
||||
getSystemLimit = {
|
||||
args = "(limittype: GraphicsLimit)",
|
||||
description = "Gets the system-dependent maximum value for a love.graphics feature.",
|
||||
@@ -1953,7 +2136,7 @@ local love = {
|
||||
type = "function"
|
||||
},
|
||||
newMesh = {
|
||||
args = "(vertices: table, texture: Texture, mode: MeshDrawMode)",
|
||||
args = "(vertexcount: number, texture: Texture, mode: MeshDrawMode)",
|
||||
description = "Creates a new Mesh.",
|
||||
returns = "(mesh: Mesh)",
|
||||
type = "function"
|
||||
@@ -2031,7 +2214,7 @@ local love = {
|
||||
type = "function"
|
||||
},
|
||||
push = {
|
||||
args = "()",
|
||||
args = "(stack: StackType)",
|
||||
description = "Copies and pushes the current coordinate transformation to the transformation stack.\n\nThis function is always used to prepare for a corresponding pop operation later. It stores the current coordinate transformation state into the transformation stack and keeps it active. Later changes to the transformation can be undone by using the pop operation, which returns the coordinate transform to the state it was in before calling push.",
|
||||
returns = "()",
|
||||
type = "function"
|
||||
@@ -2456,6 +2639,12 @@ local love = {
|
||||
returns = "(name: string)",
|
||||
type = "function"
|
||||
},
|
||||
getVibration = {
|
||||
args = "()",
|
||||
description = "Gets the current vibration motor strengths on a Joystick with rumble support.",
|
||||
returns = "(left: number, right: number)",
|
||||
type = "function"
|
||||
},
|
||||
isConnected = {
|
||||
args = "()",
|
||||
description = "Gets whether the Joystick is connected.",
|
||||
@@ -2479,6 +2668,18 @@ local love = {
|
||||
description = "Checks if a virtual gamepad button on the Joystick is pressed. If the Joystick is not recognized as a Gamepad or isn't connected, then this function will always return false.",
|
||||
returns = "(anyDown: boolean)",
|
||||
type = "function"
|
||||
},
|
||||
isVibrationSupported = {
|
||||
args = "()",
|
||||
description = "Gets whether the Joystick supports vibration.",
|
||||
returns = "(supported: boolean)",
|
||||
type = "function"
|
||||
},
|
||||
setVibration = {
|
||||
args = "()",
|
||||
description = "Sets the vibration motor speeds on a Joystick with rumble support.",
|
||||
returns = "(success: boolean)",
|
||||
type = "function"
|
||||
}
|
||||
},
|
||||
description = "Represents a physical joystick.",
|
||||
@@ -2544,17 +2745,29 @@ local love = {
|
||||
description = "class constants",
|
||||
type = "class"
|
||||
},
|
||||
getJoystickCount = {
|
||||
args = "()",
|
||||
description = "Gets the number of connected joysticks.",
|
||||
returns = "(joystickcount: number)",
|
||||
type = "function"
|
||||
},
|
||||
getJoysticks = {
|
||||
args = "()",
|
||||
description = "Gets a list of connected Joysticks.",
|
||||
returns = "(joysticks: table)",
|
||||
type = "function"
|
||||
},
|
||||
loadGamepadMappings = {
|
||||
args = "(mappings: string)",
|
||||
description = "Loads a gamepad mappings string or file created with love.joystick.saveGamepadMappings.",
|
||||
returns = "()",
|
||||
type = "function"
|
||||
},
|
||||
saveGamepadMappings = {
|
||||
args = "()",
|
||||
description = "Saves the virtual gamepad mappings of all Joysticks that are recognized as gamepads and have either been recently used or their gamepad bindings have been modified.",
|
||||
returns = "(mappings: string)",
|
||||
type = "function"
|
||||
},
|
||||
setGamepadMapping = {
|
||||
args = "(guid: string, button: GamepadButton, inputtype: JoystickInputType, inputindex: number, hatdirection: JoystickHat)",
|
||||
description = "Binds a virtual gamepad input to a button, axis or hat for all Joysticks of a certain type. For example, if this function is used with a GUID returned by a Dualshock 3 controller in OS X, the binding will affect Joystick:getGamepadAxis and Joystick:isGamepadDown for all Dualshock 3 controllers used with the game when run in OS X.\n\nLÖVE includes built-in gamepad bindings for many common controllers. This function lets you change the bindings or add new ones for types of Joysticks which aren't recognized as gamepads by default.\n\nThe virtual gamepad buttons and axes are designed around the Xbox 360 controller layout.",
|
||||
returns = "(success: boolean)",
|
||||
type = "function"
|
||||
}
|
||||
},
|
||||
description = "Provides an interface to the user's joystick.",
|
||||
@@ -3184,6 +3397,18 @@ local love = {
|
||||
description = "class constants",
|
||||
type = "class"
|
||||
},
|
||||
getScancodeFromKey = {
|
||||
args = "(key: KeyConstant)",
|
||||
description = "Gets the hardware scancode corresponding to the given key.\n\nThe location of a key is based on the keyboard's current language layout, whereas scancodes are the layout-independent representations of where the physical keys are.\n\nFor example, the key located where \"q\" is on a U.S. keyboard has the scancode \"q\". When using a U.S. keyboard layout it produces the key \"q\", but when using a French keyboard layout it produces the key \"a\".\n\nScancodes are useful for creating default controls that have the same physical locations on on all systems.",
|
||||
returns = "(scancode: Scancode)",
|
||||
type = "function"
|
||||
},
|
||||
hasKeyRepeat = {
|
||||
args = "()",
|
||||
description = "Gets whether key repeat is enabled.",
|
||||
returns = "(enabled: boolean)",
|
||||
type = "function"
|
||||
},
|
||||
hasTextInput = {
|
||||
args = "()",
|
||||
description = "Gets whether text input events are enabled.",
|
||||
@@ -3516,6 +3741,12 @@ local love = {
|
||||
returns = "(x: number, y: number)",
|
||||
type = "function"
|
||||
},
|
||||
getRelativeMode = {
|
||||
args = "()",
|
||||
description = "Gets whether relative mode is enabled for the mouse.\n\nIf relative mode is enabled, the cursor is hidden and doesn't move when the mouse does, but relative mouse motion events are still generated via love.mousemoved. This lets the mouse move in any direction indefinitely without the cursor getting stuck at the edges of the screen.\n\nThe reported position of the mouse is not updated while relative mode is enabled, even when relative mouse motion events are generated.",
|
||||
returns = "(enabled: boolean)",
|
||||
type = "function"
|
||||
},
|
||||
getSystemCursor = {
|
||||
args = "(ctype: CursorType)",
|
||||
description = "Gets a Cursor object representing a system-native hardware cursor.\n\n Hardware cursors are framerate-independent and work the same way as normal operating system cursors. Unlike drawing an image at the mouse's current coordinates, hardware cursors never have visible lag between when the mouse is moved and when the cursor position updates, even at low framerates.",
|
||||
@@ -3576,6 +3807,12 @@ local love = {
|
||||
returns = "()",
|
||||
type = "function"
|
||||
},
|
||||
setRelativeMode = {
|
||||
args = "(enable: boolean)",
|
||||
description = "Sets whether relative mode is enabled for the mouse.\n\nWhen relative mode is enabled, the cursor is hidden and doesn't move when the mouse does, but relative mouse motion events are still generated via love.mousemoved. This lets the mouse move in any direction indefinitely without the cursor getting stuck at the edges of the screen.\n\nThe reported position of the mouse is not updated while relative mode is enabled, even when relative mouse motion events are generated.",
|
||||
returns = "()",
|
||||
type = "function"
|
||||
},
|
||||
setVisible = {
|
||||
args = "(visible: boolean)",
|
||||
description = "Sets the visibility of the cursor.",
|
||||
@@ -3604,6 +3841,12 @@ local love = {
|
||||
returns = "()",
|
||||
type = "function"
|
||||
},
|
||||
mousemoved = {
|
||||
args = "(x: number, y: number, dx: number, dy: number)",
|
||||
description = "Callback function triggered when the mouse is moved.",
|
||||
returns = "()",
|
||||
type = "function"
|
||||
},
|
||||
mousepressed = {
|
||||
args = "(x: number, y: number, button: MouseConstant)",
|
||||
description = "Callback function triggered when a mouse button is pressed.",
|
||||
@@ -3662,6 +3905,12 @@ local love = {
|
||||
returns = "(w: number)",
|
||||
type = "function"
|
||||
},
|
||||
getContactList = {
|
||||
args = "()",
|
||||
description = "Gets a list of all Contacts attached to the Body.",
|
||||
returns = "(contacts: table)",
|
||||
type = "function"
|
||||
},
|
||||
getFixtureList = {
|
||||
args = "()",
|
||||
description = "Returns a table with all fixtures.",
|
||||
@@ -3680,6 +3929,12 @@ local love = {
|
||||
returns = "(inertia: number)",
|
||||
type = "function"
|
||||
},
|
||||
getJointList = {
|
||||
args = "()",
|
||||
description = "Returns a table containing the Joints attached to this Body.",
|
||||
returns = "(joints: table)",
|
||||
type = "function"
|
||||
},
|
||||
getLinearDamping = {
|
||||
args = "()",
|
||||
description = "Gets the linear damping of the Body.\n\nThe linear damping is the rate of decrease of the linear velocity over time. A moving body with no damping and no external forces will continue moving indefinitely, as is the case in space. A moving body with damping will gradually stop moving.\n\nDamping is not the same as friction - they can be modelled together. However, only damping is provided by Box2D (and LÖVE).",
|
||||
@@ -3752,6 +4007,12 @@ local love = {
|
||||
returns = "(value: value)",
|
||||
type = "function"
|
||||
},
|
||||
getWorld = {
|
||||
args = "()",
|
||||
description = "Gets the World the body lives in.",
|
||||
returns = "(world: World)",
|
||||
type = "function"
|
||||
},
|
||||
getWorldCenter = {
|
||||
args = "()",
|
||||
description = "Get the center of mass position in world coordinates.\n\nUse Body:getLocalCenter to get the center of mass in local coordinates.",
|
||||
@@ -3806,6 +4067,12 @@ local love = {
|
||||
returns = "(status: boolean)",
|
||||
type = "function"
|
||||
},
|
||||
isDestroyed = {
|
||||
args = "()",
|
||||
description = "Gets whether the Body is destroyed. Destroyed bodies cannot be used.",
|
||||
returns = "(destroyed: boolean)",
|
||||
type = "function"
|
||||
},
|
||||
isDynamic = {
|
||||
args = "()",
|
||||
description = "Get the dynamic status of the body.\n\nA static body has no mass and a constant position. It will not react to collisions. Often used for walls.\n\nA dynamic body has mass and can move. It will react to collisions when the world is updated.",
|
||||
@@ -4046,6 +4313,12 @@ local love = {
|
||||
},
|
||||
Contact = {
|
||||
childs = {
|
||||
getFriction = {
|
||||
args = "()",
|
||||
description = "Get the friction between two shapes that are in contact.",
|
||||
returns = "(friction: number)",
|
||||
type = "function"
|
||||
},
|
||||
getNormal = {
|
||||
args = "()",
|
||||
description = "Get the normal vector between two shapes that are in contact.\n\nThis function returns the coordinates of a unit vector that points from the first shape to the second.",
|
||||
@@ -4226,6 +4499,12 @@ local love = {
|
||||
returns = "(value: mixed)",
|
||||
type = "function"
|
||||
},
|
||||
isDestroyed = {
|
||||
args = "()",
|
||||
description = "Gets whether the Fixture is destroyed. Destroyed fixtures cannot be used.",
|
||||
returns = "(destroyed: boolean)",
|
||||
type = "function"
|
||||
},
|
||||
isSensor = {
|
||||
args = "()",
|
||||
description = "Returns whether the fixture is a sensor.",
|
||||
@@ -4327,10 +4606,22 @@ local love = {
|
||||
type = "lib"
|
||||
},
|
||||
GearJoint = {
|
||||
args = "()",
|
||||
childs = {
|
||||
getRatio = {
|
||||
args = "()",
|
||||
description = "Get the ratio of a gear joint.",
|
||||
returns = "(ratio: number)",
|
||||
type = "function"
|
||||
},
|
||||
setRatio = {
|
||||
args = "(ratio: number)",
|
||||
description = "Set the ratio of a gear joint.",
|
||||
returns = "()",
|
||||
type = "function"
|
||||
}
|
||||
},
|
||||
description = "Keeps bodies together in such a way that they act like gears.",
|
||||
returns = "()",
|
||||
type = "function"
|
||||
type = "lib"
|
||||
},
|
||||
Joint = {
|
||||
childs = {
|
||||
@@ -4340,6 +4631,12 @@ local love = {
|
||||
returns = "(x1: number, y1: number, x2: number, y2: number)",
|
||||
type = "function"
|
||||
},
|
||||
getBodies = {
|
||||
args = "()",
|
||||
description = "Gets the bodies that the Joint is attached to.",
|
||||
returns = "(bodyA: Body, bodyB: Body)",
|
||||
type = "function"
|
||||
},
|
||||
getCollideConnected = {
|
||||
args = "()",
|
||||
description = "Gets whether the connected Bodies collide.",
|
||||
@@ -4364,11 +4661,29 @@ local love = {
|
||||
returns = "(type: JointType)",
|
||||
type = "function"
|
||||
},
|
||||
getUserData = {
|
||||
args = "()",
|
||||
description = "Returns the Lua value associated with this Joint.",
|
||||
returns = "(value: mixed)",
|
||||
type = "function"
|
||||
},
|
||||
isDestroyed = {
|
||||
args = "()",
|
||||
description = "Gets whether the Joint is destroyed. Destroyed joints cannot be used.",
|
||||
returns = "(destroyed: boolean)",
|
||||
type = "function"
|
||||
},
|
||||
setCollideConnected = {
|
||||
args = "(collide: boolean)",
|
||||
description = "Sets whether the connected Bodies should collide with eachother.",
|
||||
returns = "()",
|
||||
type = "function"
|
||||
},
|
||||
setUserData = {
|
||||
args = "(value: mixed)",
|
||||
description = "Associates a Lua value with the Joint.\n\nTo delete the reference, explicitly pass nil.",
|
||||
returns = "()",
|
||||
type = "function"
|
||||
}
|
||||
},
|
||||
description = "Attach multiple bodies together to interact in unique ways.",
|
||||
@@ -4932,6 +5247,12 @@ local love = {
|
||||
returns = "(joints: table)",
|
||||
type = "function"
|
||||
},
|
||||
isDestroyed = {
|
||||
args = "()",
|
||||
description = "Gets whether the World is destroyed. Destroyed worlds cannot be used.",
|
||||
returns = "(destroyed: boolean)",
|
||||
type = "function"
|
||||
},
|
||||
isLocked = {
|
||||
args = "()",
|
||||
description = "Returns if the world is updating its state.\n\nThis will return true inside the callbacks from World:setCallbacks.",
|
||||
@@ -5277,15 +5598,15 @@ local love = {
|
||||
type = "function"
|
||||
},
|
||||
push = {
|
||||
args = "()",
|
||||
args = "(value: value)",
|
||||
description = "Send a message to the thread Channel.\n\nThe value of the message can be a boolean, string, number, LÖVE userdata, or a simple flat table. Foreign userdata (Lua's files, LuaSocket, ENet, ...), functions, and tables inside tables are not supported.",
|
||||
returns = "(value: value)",
|
||||
returns = "()",
|
||||
type = "function"
|
||||
},
|
||||
supply = {
|
||||
args = "()",
|
||||
args = "(value: value)",
|
||||
description = "Send a message to the thread Channel and wait for a thread to accept it.\n\nThe value of the message can be a boolean, string, number, LÖVE userdata, or a simple flat table. Foreign userdata (Lua's files, LuaSocket, ENet, ...), functions, and tables inside tables are not supported.",
|
||||
returns = "(value: value)",
|
||||
returns = "()",
|
||||
type = "function"
|
||||
}
|
||||
},
|
||||
@@ -5294,8 +5615,14 @@ local love = {
|
||||
},
|
||||
Thread = {
|
||||
childs = {
|
||||
start = {
|
||||
isRunning = {
|
||||
args = "()",
|
||||
description = "Returns whether the thread is currently running.\n\nThreads which are not running can be (re)started with Thread:start.",
|
||||
returns = "()",
|
||||
type = "function"
|
||||
},
|
||||
start = {
|
||||
args = "(arg1: value, arg2: value, ...: value)",
|
||||
description = "Starts the thread.\n\nThreads can be restarted after they have completed their execution.",
|
||||
returns = "()",
|
||||
type = "function"
|
||||
@@ -5317,7 +5644,7 @@ local love = {
|
||||
type = "function"
|
||||
},
|
||||
newThread = {
|
||||
args = "(name: string, file: File)",
|
||||
args = "(fileData: FileData)",
|
||||
description = "Creates a new Thread from a File or Data object.",
|
||||
returns = "(thread: Thread)",
|
||||
type = "function"
|
||||
@@ -5370,7 +5697,7 @@ local love = {
|
||||
},
|
||||
update = {
|
||||
args = "(dt: number)",
|
||||
description = "Callback function used to update the state of the game every frame.",
|
||||
description = "Callback function triggered when a key is pressed.",
|
||||
returns = "()",
|
||||
type = "function"
|
||||
},
|
||||
@@ -5396,6 +5723,18 @@ local love = {
|
||||
description = "class constants",
|
||||
type = "class"
|
||||
},
|
||||
getDimensions = {
|
||||
args = "()",
|
||||
description = "Gets the width and height of the window.",
|
||||
returns = "(width: number, height: number)",
|
||||
type = "function"
|
||||
},
|
||||
getDisplayName = {
|
||||
args = "(displayindex: number)",
|
||||
description = "Gets the name of a display.",
|
||||
returns = "(name: string)",
|
||||
type = "function"
|
||||
},
|
||||
getFullscreen = {
|
||||
args = "()",
|
||||
description = "Gets whether the window is fullscreen.",
|
||||
@@ -5423,7 +5762,7 @@ local love = {
|
||||
getMode = {
|
||||
args = "()",
|
||||
description = "Returns the current display mode.",
|
||||
returns = "(width: number, height: number, fullscreen: boolean, vsync: boolean, fsaa: number)",
|
||||
returns = "(width: number, height: number, flags: table)",
|
||||
type = "function"
|
||||
},
|
||||
getPixelScale = {
|
||||
@@ -5432,6 +5771,18 @@ local love = {
|
||||
returns = "(scale: number)",
|
||||
type = "function"
|
||||
},
|
||||
getPosition = {
|
||||
args = "()",
|
||||
description = "Gets the position of the window on the screen.\n\nThe window position is in the coordinate space of the display it is currently in.",
|
||||
returns = "(x: number, y: number, display: number)",
|
||||
type = "function"
|
||||
},
|
||||
getTitle = {
|
||||
args = "()",
|
||||
description = "Gets the window title.",
|
||||
returns = "(title: string)",
|
||||
type = "function"
|
||||
},
|
||||
getWidth = {
|
||||
args = "()",
|
||||
description = "Gets the width of the window.",
|
||||
@@ -5462,6 +5813,12 @@ local love = {
|
||||
returns = "(visible: boolean)",
|
||||
type = "function"
|
||||
},
|
||||
minimize = {
|
||||
args = "()",
|
||||
description = "Minimizes the window to the system's task bar / dock.",
|
||||
returns = "()",
|
||||
type = "function"
|
||||
},
|
||||
setFullscreen = {
|
||||
args = "(fullscreen: boolean, fstype: FullscreenType)",
|
||||
description = "Enters or exits fullscreen. The display to use when entering fullscreen is chosen based on which display the window is currently in, if multiple monitors are connected.\n\nIf fullscreen mode is entered and the window size doesn't match one of the monitor's display modes (in normal fullscreen mode) or the window size doesn't match the desktop size (in 'desktop' fullscreen mode), the window will be resized appropriately. The window will revert back to its original size again when fullscreen mode is exited using this function.",
|
||||
@@ -5480,11 +5837,29 @@ local love = {
|
||||
returns = "(success: boolean)",
|
||||
type = "function"
|
||||
},
|
||||
setPosition = {
|
||||
args = "(x: number, y: number, display: number)",
|
||||
description = "Sets the position of the window on the screen.\n\nThe window position is in the coordinate space of the specified display.",
|
||||
returns = "()",
|
||||
type = "function"
|
||||
},
|
||||
setTitle = {
|
||||
args = "(title: string)",
|
||||
description = "Sets the window title.",
|
||||
returns = "()",
|
||||
type = "function"
|
||||
},
|
||||
showMessageBox = {
|
||||
args = "(title: string, message: string, buttonlist: table, type: MessageBoxType, attachtowindow: boolean)",
|
||||
description = "Displays a message box dialog above the love window. The message box contains a title, optional text, and buttons.",
|
||||
returns = "(pressedbutton: number)",
|
||||
type = "function"
|
||||
},
|
||||
toPixels = {
|
||||
args = "(x: number, y: number)",
|
||||
description = "Converts a number from density-independent units to pixels.\n\nIf the highdpi window flag is enabled in Mac OS X and the window is in a retina screen, density-independent units will be twice the size of pixels. Otherwise they will usually be the same. This function can be used to convert coordinates from the size users are expecting them to display at onscreen to pixels. love.window.fromPixels does the opposite.\n\nMost LÖVE functions return values and expect arguments in terms of pixels rather than density-independent units.",
|
||||
returns = "(px: number, py: number)",
|
||||
type = "function"
|
||||
}
|
||||
},
|
||||
description = "The primary responsibility for the love.graphics module is the drawing of lines, shapes, text, Images and other Drawable objects onto the screen. Its secondary responsibilities include loading external files (including Images and Fonts) into memory, creating specialized objects (such as ParticleSystems or Framebuffers) and managing screen geometry.\n\nLÖVE's coordinate system is rooted in the upper-left corner of the screen, which is at location (0, 0). The x-axis is horizontal: larger values are further to the right. The y-axis is vertical: larger values are further towards the bottom.\n\nIn many cases, you draw images or shapes in terms of their upper-left corner (See the picture above).\n\nMany of the functions are used to manipulate the graphics coordinate system, which is essentially the way coordinates are mapped to the display. You can change the position, scale, and even rotation in this way.",
|
||||
|
||||
@@ -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,
|
||||
},
|
||||
}
|
||||
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"
|
||||
@@ -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
|
||||
@@ -111,6 +131,14 @@ fi
|
||||
LUA_FILENAME="$LUA_BASENAME.tar.gz"
|
||||
LUA_URL="http://www.lua.org/ftp/$LUA_FILENAME"
|
||||
|
||||
if [ $BUILD_53 ]; then
|
||||
LUAV="53"
|
||||
LUAS=$LUAV
|
||||
LUA_BASENAME="lua-5.3.0"
|
||||
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_FILENAME="$LUA_BASENAME.tar.gz"
|
||||
@@ -122,7 +150,7 @@ if [ $BUILD_WXWIDGETS ]; then
|
||||
svn co "$WXWIDGETS_URL" "$WXWIDGETS_BASENAME" || { echo "Error: failed to checkout 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 \
|
||||
@@ -168,13 +196,13 @@ if [ $BUILD_WXLUA ]; then
|
||||
# (temporary) fix for compilation issue in wxlua using wxwidgets 3.1+ (r238)
|
||||
sed -i 's/{ "wxSTC_COFFEESCRIPT_HASHQUOTEDSTRING", wxSTC_COFFEESCRIPT_HASHQUOTEDSTRING },/\/\/ removed by ZBS build process/' modules/wxbind/src/wxstc_bind.cpp
|
||||
|
||||
cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$INSTALL_DIR" -DCMAKE_BUILD_TYPE=MinSizeRel -DBUILD_SHARED_LIBS=FALSE \
|
||||
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"
|
||||
|
||||
@@ -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
|
||||
;;
|
||||
@@ -122,6 +126,14 @@ fi
|
||||
LUA_FILENAME="$LUA_BASENAME.tar.gz"
|
||||
LUA_URL="http://www.lua.org/ftp/$LUA_FILENAME"
|
||||
|
||||
if [ $BUILD_53 ]; then
|
||||
LUAV="53"
|
||||
LUAS=$LUAV
|
||||
LUA_BASENAME="lua-5.3.0"
|
||||
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_FILENAME="$LUA_BASENAME.tar.gz"
|
||||
|
||||
@@ -50,6 +50,10 @@ for ARG in "$@"; do
|
||||
5.2)
|
||||
BUILD_52=true
|
||||
;;
|
||||
5.3)
|
||||
BUILD_53=true
|
||||
BUILD_FLAGS="$BUILD_FLAGS -DLUA_COMPAT_APIINTCASTS"
|
||||
;;
|
||||
jit)
|
||||
BUILD_JIT=true
|
||||
;;
|
||||
@@ -140,6 +144,14 @@ fi
|
||||
LUA_FILENAME="$LUA_BASENAME.tar.gz"
|
||||
LUA_URL="http://www.lua.org/ftp/$LUA_FILENAME"
|
||||
|
||||
if [ $BUILD_53 ]; then
|
||||
LUAV="53"
|
||||
LUAS=$LUAV
|
||||
LUA_BASENAME="lua-5.3.0"
|
||||
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_FILENAME="$LUA_BASENAME.tar.gz"
|
||||
|
||||
@@ -61,8 +61,13 @@ for _, mask in ipairs({"zbstudio/*.lua", "src/main.lua", "src/editor/*.lua"}) do
|
||||
-- remove brackets aroung ("foo")
|
||||
-- extract message from ("foo", count)
|
||||
msg = msg:gsub("^%(", ""):gsub("%)$", ""):gsub([[(["']), .+]], "%1")
|
||||
messages[msg] = messages[msg] or {}
|
||||
messages[msg][file] = (messages[msg][file] or 0) + 1
|
||||
if not msg:find([=[^["']]=]) or not msg:find([=[["']$]=]) then
|
||||
io.stderr:write(("Call with a non-string 'TR(%s)' ignored in '%s'.\n")
|
||||
:format(msg, file))
|
||||
else
|
||||
messages[msg] = messages[msg] or {}
|
||||
messages[msg][file] = (messages[msg][file] or 0) + 1
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -90,7 +95,7 @@ end
|
||||
table.sort(msgs)
|
||||
print("return {\n"..plural..table.concat(msgs, "\n").."\n}")
|
||||
if next(existing) then
|
||||
local str = "-- no match found for the following elements: "
|
||||
local str = "No match found for the following elements: "
|
||||
for msg in pairs(existing) do str = str .. msg .. ", " end
|
||||
print((str:gsub(", $", "")))
|
||||
io.stderr:write((str:gsub(", $", "\n")))
|
||||
end
|
||||
|
||||
124
cfg/i18n/cn.lua
124
cfg/i18n/cn.lua
@@ -7,13 +7,14 @@ return {
|
||||
["&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"] = "复制", -- 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
|
||||
@@ -23,16 +24,15 @@ return {
|
||||
["&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
|
||||
["&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
|
||||
@@ -46,11 +46,11 @@ return {
|
||||
["&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
|
||||
["&Undo"] = "撤消", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Up"] = "往上", -- src\editor\findreplace.lua
|
||||
["&View"] = "视图", -- src\editor\menu_view.lua
|
||||
["&Watch Window"] = "监视视窗", -- src\editor\menu_view.lua
|
||||
[".&bak on Replace"] = nil, -- src\editor\findreplace.lua
|
||||
[".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
|
||||
@@ -61,11 +61,13 @@ return {
|
||||
["Auto Complete Identifiers"] = "自动补全标识符", -- src\editor\menu_edit.lua
|
||||
["Auto complete while typing"] = "当输入时自动补全", -- src\editor\menu_edit.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\menu_project.lua
|
||||
["C&lear Output Window"] = "清除输出视窗", -- src\editor\gui.lua, src\editor\menu_project.lua
|
||||
["C&omment/Uncomment"] = "注释/消除注释", -- src\editor\menu_edit.lua
|
||||
["Can't debug the script in the active editor window."] = "不能在现行编辑视窗对脚本进行除错", -- src\editor\debugger.lua
|
||||
["Can't evaluate the expression while the application is running."] = nil, -- src\editor\debugger.lua
|
||||
["Can't find file '%s' in the current project to activate for debugging. Update the project or open the file in the editor before debugging."] = "在当前项目中寻找不到文件 '%s' 以进行激活然后除错, 更新项目或是在编辑器里开启文件后再除错", -- src\editor\debugger.lua
|
||||
["Can't open file '%s': %s"] = nil, -- src\editor\singleinstance.lua
|
||||
["Can't process auto-recovery record; invalid format: %s."] = "不能处理自动恢复存档: %s", -- src\editor\commands.lua
|
||||
["Can't run the entry point script ('%s')."] = "不能执行entry point脚本 ('%s')", -- src\editor\debugger.lua
|
||||
["Can't start debugger server at %s:%d: %s."] = nil, -- src\editor\debugger.lua
|
||||
@@ -74,7 +76,7 @@ return {
|
||||
["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 a project directory"] = "选择项目文件夹", -- src\editor\findreplace.lua, src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Choose..."] = "请选...", -- src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Clear Items"] = nil, -- src\editor\menu_file.lua
|
||||
["Clear items from this list"] = nil, -- src\editor\menu_file.lua
|
||||
@@ -93,17 +95,18 @@ 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\menu_file.lua
|
||||
["Cu&t"] = "剪切", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["Cut selected text to clipboard"] = "剪切被选的text到clipboard", -- src\editor\menu_edit.lua
|
||||
["Debugger server started at %s:%d."] = "除错伺服器起始于 %s:%d.", -- src\editor\debugger.lua
|
||||
["Debugger server stopped at %s:%d."] = nil, -- src\editor\debugger.lua
|
||||
["Debugging session completed (%s)."] = "除错会话完成 (%s)", -- src\editor\debugger.lua
|
||||
["Debugging session started in '%s'."] = "除错会话于 '%s' 起始", -- src\editor\debugger.lua
|
||||
["Debugging suspended at %s:%s (couldn't activate the file)."] = "除错挂起于 %s:%s (不能激活文档).", -- src\editor\debugger.lua
|
||||
["Debugging suspended at '%s:%s' (couldn't activate the file)."] = "除错挂起于 '%s:%s' (不能激活文档).", -- src\editor\debugger.lua
|
||||
["Detach &Process"] = nil, -- src\editor\menu_project.lua
|
||||
["Directory"] = "文件夹", -- src\editor\findreplace.lua
|
||||
["Do you want to delete '%s'?"] = nil, -- src\editor\filetree.lua
|
||||
@@ -113,7 +116,7 @@ return {
|
||||
["E&xit"] = "离开", -- src\editor\menu_file.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
|
||||
@@ -124,10 +127,9 @@ return {
|
||||
["Execute the current project/file"] = "执行当前项目/文档", -- src\editor\menu_project.lua
|
||||
["Execution error"] = "执行出错误", -- src\editor\debugger.lua
|
||||
["Exit program"] = "离开程式", -- src\editor\menu_file.lua
|
||||
["Expr"] = "表达式", -- src\editor\debugger.lua
|
||||
["Expression"] = "表达式", -- src\editor\debugger.lua
|
||||
["File '%s' has been modified on disk."] = "磁碟上的文档 '%s' 已被更改", -- src\editor\editor.lua
|
||||
["File '%s' has more recent timestamp than restored '%s'; please review before saving."] = "文档 '%s' 的时间戳比 '%s' 更新近; 请检验后再保存", -- src\editor\commands.lua
|
||||
["File '%s' 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
|
||||
@@ -135,11 +137,12 @@ return {
|
||||
["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 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\menu_search.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\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
|
||||
@@ -148,31 +151,42 @@ return {
|
||||
["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 Previous Bookmark"] = nil, -- src\editor\menu_edit.lua
|
||||
["Go to a selected line"] = "到所选的行", -- src\editor\menu_search.lua
|
||||
["Go To Symbol..."] = nil, -- src\editor\menu_search.lua
|
||||
["Go to file"] = nil, -- src\editor\menu_search.lua
|
||||
["Go to line"] = "到...行", -- src\editor\menu_search.lua
|
||||
["Go to symbol"] = nil, -- src\editor\menu_search.lua
|
||||
["Hide '.%s' Files"] = nil, -- src\editor\filetree.lua
|
||||
["INS"] = "INS", -- src\editor\editor.lua
|
||||
["Ignored error in debugger initialization code: %s."] = nil, -- src\editor\debugger.lua
|
||||
["In Files"] = "在档案里", -- src\editor\findreplace.lua
|
||||
["Jump to a function definition..."] = "跳到函数定义", -- src\editor\editor.lua
|
||||
["Insert Library Function..."] = nil, -- src\editor\menu_search.lua
|
||||
["Known Files"] = "所知的文档", -- src\editor\commands.lua
|
||||
["Ln: %d"] = "行: %d", -- src\editor\editor.lua
|
||||
["Local console"] = "本地主控台", -- src\editor\gui.lua, src\editor\shellbox.lua
|
||||
["Lua &Interpreter"] = "Lua 解释器", -- src\editor\menu_project.lua
|
||||
["Mapped remote request for '%s' to '%s'."] = "映射远程请求 '%s' 至 '%s'", -- src\editor\debugger.lua
|
||||
["Match &case"] = "case匹配", -- src\editor\findreplace.lua
|
||||
["Match &whole word"] = "全句匹配", -- src\editor\findreplace.lua
|
||||
["Match case"] = "case匹配", -- src\editor\findreplace.lua
|
||||
["Match whole word"] = "全句匹配", -- src\editor\findreplace.lua
|
||||
["Mixed end-of-line encodings detected."] = "发现混杂的EOL编码", -- src\editor\commands.lua
|
||||
["Navigate"] = nil, -- src\editor\menu_search.lua
|
||||
["New &File"] = nil, -- src\editor\filetree.lua
|
||||
["OVR"] = "OVR", -- src\editor\editor.lua
|
||||
["Open 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\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
|
||||
["Paste text from the clipboard"] = "从clipboard粘贴text", -- src\editor\menu_edit.lua
|
||||
["Preferences"] = "首选项", -- src\editor\menu_edit.lua
|
||||
["Prepend '!' to force local execution."] = nil, -- src\editor\shellbox.lua
|
||||
["Prepend '=' to show complex values on multiple lines."] = "在多行展现复杂值请前置 '='", -- src\editor\shellbox.lua
|
||||
["Press cancel to abort."] = "按 <cancel> 以退出", -- src\editor\commands.lua
|
||||
["Program '%s' started in '%s' (pid: %d)."] = "程式 '%s' 执行于 '%s' (pid: %d).", -- src\editor\output.lua
|
||||
@@ -183,81 +197,91 @@ 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
|
||||
["R/O"] = "唯读", -- src\editor\editor.lua
|
||||
["R/W"] = "读写", -- src\editor\editor.lua
|
||||
["Re&place In Files"] = "在文档中替换", -- src\editor\menu_search.lua
|
||||
["Re-indent selected lines"] = nil, -- src\editor\menu_edit.lua
|
||||
["Recent &Projects"] = nil, -- src\editor\menu_file.lua
|
||||
["Recent Files"] = "最近的文档", -- src\editor\menu_file.lua
|
||||
["Redo last edit undone"] = "重做最后被取消的编辑", -- src\editor\menu_edit.lua
|
||||
["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\findreplace.lua
|
||||
["Remote console"] = "远程主控台", -- src\editor\shellbox.lua
|
||||
["Rename All Instances"] = nil, -- src\editor\editor.lua
|
||||
["Replace A&ll"] = "更换全部", -- src\editor\findreplace.lua
|
||||
["Replace all"] = "更换全部", -- src\editor\findreplace.lua
|
||||
["Replace All Selections"] = nil, -- src\editor\editor.lua
|
||||
["Replace"] = "更换", -- src\editor\findreplace.lua
|
||||
["Replaced an invalid UTF8 character with %s."] = "以%s更换无效的UTF8字元", -- src\editor\commands.lua
|
||||
["Replaced"] = "更换", -- src\editor\findreplace.lua
|
||||
["Replacing"] = "更换中", -- src\editor\findreplace.lua
|
||||
["Reset to default layout"] = "重置缺省布局", -- src\editor\menu_view.lua
|
||||
["Run As Scratchpad"] = "以Scratchpad执行", -- src\editor\menu_project.lua
|
||||
["Run as Scratchpad"] = "以Scratchpad执行", -- src\editor\menu_project.lua
|
||||
["S&top Debugging"] = "停止除错", -- src\editor\menu_project.lua
|
||||
["S&top Process"] = "停止进程", -- src\editor\menu_project.lua
|
||||
["Save &As..."] = "另存为...", -- src\editor\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\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\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
|
||||
["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 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 And Find Next"] = nil, -- src\editor\menu_search.lua
|
||||
["Select And Find Previous"] = nil, -- src\editor\menu_search.lua
|
||||
["Select the word under cursor and find its next occurrence"] = nil, -- src\editor\menu_search.lua
|
||||
["Select the word under cursor and find its previous occurrence"] = nil, -- src\editor\menu_search.lua
|
||||
["Set From Current File"] = "从当前文档设置", -- src\editor\menu_project.lua
|
||||
["Set project directory from current file"] = "从当前文档设置项目文件夹", -- src\editor\gui.lua, src\editor\menu_project.lua
|
||||
["Set project directory from current file"] = "从当前文档设置项目文件夹", -- src\editor\menu_project.lua
|
||||
["Set the interpreter to be used"] = "设置解释器", -- src\editor\menu_project.lua
|
||||
["Set the project directory to be used"] = "设置项目文件夹", -- src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Settings: System"] = "设置: 系统", -- src\editor\menu_edit.lua
|
||||
["Settings: User"] = "设置: 用户", -- src\editor\menu_edit.lua
|
||||
["Show &Tooltip"] = "展现tooltip", -- src\editor\menu_edit.lua
|
||||
["Show All Files"] = nil, -- src\editor\filetree.lua
|
||||
["Show Hidden Files"] = nil, -- src\editor\filetree.lua
|
||||
["Show Location"] = nil, -- src\editor\gui.lua, src\editor\filetree.lua
|
||||
["Show all files"] = nil, -- src\editor\filetree.lua
|
||||
["Show files previously hidden"] = nil, -- src\editor\filetree.lua
|
||||
["Show tooltip for current position; place cursor after opening bracket of function"] = "在当前的位置展现tooltip; 把游标放置于函数的开括号之后", -- src\editor\menu_edit.lua
|
||||
["Show/Hide the status bar"] = nil, -- src\editor\menu_view.lua
|
||||
["Show/Hide the toolbar"] = nil, -- src\editor\menu_view.lua
|
||||
["Sort selected lines"] = "对被选的行进行排列", -- src\editor\menu_edit.lua
|
||||
["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
|
||||
["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\menu_project.lua
|
||||
["Step out of the current function"] = "除错运行 离开当前的函数", -- src\editor\menu_project.lua
|
||||
["Step over"] = "除错运行 掠过子程序/函数", -- src\editor\menu_project.lua
|
||||
["Stop debugging and continue running the process"] = nil, -- src\editor\menu_project.lua
|
||||
["Stop the currently running process"] = "终止目前进行着的进程", -- src\editor\menu_project.lua
|
||||
["Switch to or from full screen mode"] = "切换全屏模式", -- src\editor\menu_view.lua
|
||||
["Text not found."] = "寻找不到text", -- src\editor\findreplace.lua
|
||||
["The API file must be located in a subdirectory of the API directory."] = "API file必须存放在API文件夹中的子文件夹", -- src\editor\autocomplete.lua
|
||||
["Toggle Bookmark"] = nil, -- src\editor\menu_edit.lua
|
||||
["Toggle Break&point"] = "切换中断点", -- src\editor\menu_project.lua
|
||||
["Toggle breakpoint"] = "切换中断点", -- src\editor\gui.lua, src\editor\menu_project.lua
|
||||
["Toggle bookmark"] = nil, -- src\editor\menu_edit.lua
|
||||
["Toggle breakpoint"] = "切换中断点", -- src\editor\menu_project.lua
|
||||
["Tr&ace"] = "追踪", -- src\editor\menu_project.lua
|
||||
["Trace execution showing each executed line"] = "执行追踪展示每一执行过的语句", -- src\editor\menu_project.lua
|
||||
["Unable to create directory '%s'."] = nil, -- src\editor\filetree.lua
|
||||
["Unable to create file '%s'."] = nil, -- src\editor\filetree.lua
|
||||
["Unable to delete directory '%s': %s"] = nil, -- src\editor\filetree.lua
|
||||
["Unable to load file '%s'."] = "导出文件失败 '%s'.", -- src\editor\commands.lua
|
||||
["Unable to rename file '%s'."] = nil, -- src\editor\filetree.lua
|
||||
["Unable to save file '%s': %s"] = "保存文件失败 '%s': %s", -- src\editor\commands.lua
|
||||
@@ -267,14 +291,14 @@ return {
|
||||
["Use '%s' to show line endings and '%s' to convert them."] = "用 '%s' 来显示语句的终结和 '%s' 来进行转换", -- src\editor\commands.lua
|
||||
["Use 'clear' to clear the shell output and the history."] = "用 'clear' 来清除shell的输出和历史", -- src\editor\shellbox.lua
|
||||
["Use Shift-Enter for multiline code."] = "用 <Shift-Enter> 来处理多行代码", -- src\editor\shellbox.lua
|
||||
["Value"] = "数值", -- src\editor\debugger.lua
|
||||
["View the outline window"] = nil, -- src\editor\menu_view.lua
|
||||
["View the output/console window"] = "查看输出/主控台视窗", -- src\editor\menu_view.lua
|
||||
["View the project/filetree window"] = "查看项目/文件树视窗", -- src\editor\menu_view.lua
|
||||
["View the stack window"] = "查看堆栈视窗", -- src\editor\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\menu_view.lua
|
||||
["View the watch window"] = "查看监视视窗", -- src\editor\menu_view.lua
|
||||
["Watch"] = "监视", -- src\editor\debugger.lua
|
||||
["Welcome to the interactive Lua interpreter."] = "欢迎来到互动 Lua interpreter.", -- src\editor\shellbox.lua
|
||||
["Wrap ar&ound"] = "卷绕", -- src\editor\findreplace.lua
|
||||
["Wrap around"] = "卷绕", -- src\editor\findreplace.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
|
||||
|
||||
130
cfg/i18n/de.lua
130
cfg/i18n/de.lua
@@ -8,13 +8,14 @@ return {
|
||||
["&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"] = "&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
|
||||
@@ -24,16 +25,15 @@ return {
|
||||
["&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
|
||||
["&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
|
||||
@@ -47,11 +47,11 @@ return {
|
||||
["&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
|
||||
["&Undo"] = "&Rückgängig", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Up"] = "&Hoch", -- src\editor\findreplace.lua
|
||||
["&View"] = "&Ansicht", -- src\editor\menu_view.lua
|
||||
["&Watch Window"] = "&Beobachtungspunkte", -- src\editor\menu_view.lua
|
||||
[".&bak on Replace"] = ".&bak bei Ersetzen", -- src\editor\findreplace.lua
|
||||
[".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
|
||||
@@ -62,11 +62,13 @@ return {
|
||||
["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
|
||||
["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\menu_project.lua
|
||||
["C&lear Output Window"] = "Ausgabefenster l&öschen", -- src\editor\gui.lua, src\editor\menu_project.lua
|
||||
["C&omment/Uncomment"] = "(Aus-)/K&ommentieren", -- src\editor\menu_edit.lua
|
||||
["Can't debug the script in the active editor window."] = "Script kann im aktiven Editorfenster nicht gedebuggt werden.", -- src\editor\debugger.lua
|
||||
["Can't evaluate the expression while the application is running."] = "Kann den Ausdruck nicht auswerten solange die Anwendung läuft.", -- src\editor\debugger.lua
|
||||
["Can't find file '%s' in the current project to activate for debugging. Update the project or open the file in the editor before debugging."] = "Kann Datei '%s' zwecks Debugging im aktuellen Projekt nicht finden. Bitte Projekt aktualisieren oder Datei in den Editor laden.", -- src\editor\debugger.lua
|
||||
["Can't open file '%s': %s"] = "Kann Datei '%s' nicht öffnen: %s", -- src\editor\singleinstance.lua
|
||||
["Can't process auto-recovery record; invalid format: %s."] = "Auto-Wiederherstellen nicht möglich; ungültiges Format: %s.", -- src\editor\commands.lua
|
||||
["Can't run the entry point script ('%s')."] = "Kann Script für Einsprungspunkt ('%s') nicht ausführen.", -- src\editor\debugger.lua
|
||||
["Can't start debugger server at %s:%d: %s."] = "Kann Debugserver nicht starten (%s:%d): %s.", -- src\editor\debugger.lua
|
||||
@@ -75,7 +77,7 @@ return {
|
||||
["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 a project directory"] = "Projektverzeichnis auswählen", -- src\editor\findreplace.lua, src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Choose..."] = "Wählen...", -- src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Clear Items"] = "Liste &löschen", -- src\editor\menu_file.lua
|
||||
["Clear items from this list"] = "Diese Liste löschen", -- src\editor\menu_file.lua
|
||||
@@ -94,17 +96,18 @@ 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\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
|
||||
["Do you want to delete '%s'?"] = "Soll '%s' gelöscht werden?", -- src\editor\filetree.lua
|
||||
@@ -114,7 +117,7 @@ return {
|
||||
["E&xit"] = "&Beenden", -- src\editor\menu_file.lua
|
||||
["Enter Lua code and press Enter to run it."] = "Lua-Code eingeben und Enter drücken zum Ausführen.", -- src\editor\shellbox.lua
|
||||
["Enter 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
|
||||
@@ -125,10 +128,9 @@ return {
|
||||
["Execute the current project/file"] = "Aktuelles Projekt/ aktuelle Datei ausführen", -- src\editor\menu_project.lua
|
||||
["Execution error"] = "Fehler bei Ausführung", -- src\editor\debugger.lua
|
||||
["Exit program"] = "Programm beenden", -- src\editor\menu_file.lua
|
||||
["Expr"] = "Ausdr.", -- src\editor\debugger.lua
|
||||
["Expression"] = "Ausdruck", -- src\editor\debugger.lua
|
||||
["File '%s' has been modified on disk."] = "Datei '%s' wurde auf der Festplatte geändert.", -- src\editor\editor.lua
|
||||
["File '%s' has more recent timestamp than restored '%s'; please review before saving."] = "Datei '%s' hat neueren Zeitstempel als wiederhergestellte Datei '%s'; bitte vor dem Speichern kontrollieren.", -- src\editor\commands.lua
|
||||
["File '%s' 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
|
||||
@@ -136,11 +138,12 @@ return {
|
||||
["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 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\menu_search.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\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
|
||||
@@ -149,31 +152,42 @@ return {
|
||||
["Found"] = "Gefunden", -- src\editor\findreplace.lua
|
||||
["Full &Screen"] = "&Vollbild", -- src\editor\menu_view.lua
|
||||
["Go To Definition"] = "Gehe zu Definition", -- src\editor\editor.lua
|
||||
["Go To Line"] = "Gehe zu Zeile", -- src\editor\menu_search.lua
|
||||
["Go To File..."] = "Gehe zu Datei...", -- src\editor\menu_search.lua
|
||||
["Go To Line..."] = "Gehe zu Zeile...", -- src\editor\menu_search.lua
|
||||
["Go To Next Bookmark"] = "Zu nächstem Lesezeichen", -- src\editor\menu_edit.lua
|
||||
["Go To Previous Bookmark"] = "Zu vorherigem Lesezeichen", -- src\editor\menu_edit.lua
|
||||
["Go to a selected line"] = "Gehe zu ausgewählter Zeile", -- src\editor\menu_search.lua
|
||||
["Go To Symbol..."] = "Gehe zu Symbol...", -- src\editor\menu_search.lua
|
||||
["Go to file"] = "Gehe zu Datei", -- src\editor\menu_search.lua
|
||||
["Go to line"] = "Gehe zu Zeile", -- src\editor\menu_search.lua
|
||||
["Go to symbol"] = "Gehe zu Symbol", -- src\editor\menu_search.lua
|
||||
["Hide '.%s' Files"] = "Verstecke '.%s' Dateien", -- src\editor\filetree.lua
|
||||
["INS"] = "INS", -- src\editor\editor.lua
|
||||
["Ignored error in debugger initialization code: %s."] = "Ignorierter Fehler im Debugger-Init-Code: %s.", -- src\editor\debugger.lua
|
||||
["In Files"] = "In Dateien", -- src\editor\findreplace.lua
|
||||
["Jump to a function definition..."] = "Springe zu Funktions-Definition...", -- src\editor\editor.lua
|
||||
["Insert Library Function..."] = "Füge Funktion aus Bibliothek ein", -- src\editor\menu_search.lua
|
||||
["Known Files"] = "Bekannte Dateien", -- src\editor\commands.lua
|
||||
["Ln: %d"] = "Zeile: %d", -- src\editor\editor.lua
|
||||
["Local console"] = "Lokale Konsole", -- src\editor\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
|
||||
["Mapped remote request for '%s' to '%s'."] = "Fern-Aufforderung für '%s' auf '%s' abgebildet.", -- src\editor\debugger.lua
|
||||
["Match case"] = "Groß-/Kleinschreibung", -- src\editor\findreplace.lua
|
||||
["Match whole word"] = "Ganzes Wort", -- src\editor\findreplace.lua
|
||||
["Mixed end-of-line encodings detected."] = "Gemischte End-of-Line Kodierung entdeckt.", -- src\editor\commands.lua
|
||||
["Navigate"] = "Navigieren", -- src\editor\menu_search.lua
|
||||
["New &File"] = "Neue &Datei", -- src\editor\filetree.lua
|
||||
["OVR"] = "OVR", -- src\editor\editor.lua
|
||||
["Open 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\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
|
||||
["Paste text from the clipboard"] = "Text aus Zwischenablage einfügen", -- src\editor\menu_edit.lua
|
||||
["Preferences"] = "Einstellungen", -- src\editor\menu_edit.lua
|
||||
["Prepend '!' to force local execution."] = "'!' voranstellen um lokale Ausführung zu erzwingen.", -- src\editor\shellbox.lua
|
||||
["Prepend '=' to show complex values on multiple lines."] = "'=' voranstellen, um komplexe Ausdrücke auf mehrere Zeilen zu verteilen.", -- src\editor\shellbox.lua
|
||||
["Press cancel to abort."] = "Abbrechen Drücken zum Beenden.", -- src\editor\commands.lua
|
||||
["Program '%s' started in '%s' (pid: %d)."] = "Programm '%s' gestartet in '%s' (pid : %d).", -- src\editor\output.lua
|
||||
@@ -184,83 +198,93 @@ 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
|
||||
["R/O"] = "R/O", -- src\editor\editor.lua
|
||||
["R/W"] = "R/W", -- src\editor\editor.lua
|
||||
["Re&place In Files"] = "Ersetze in &Dateien", -- src\editor\menu_search.lua
|
||||
["Re-indent selected lines"] = "Ausgewählte Zeilen neu einrücken", -- src\editor\menu_edit.lua
|
||||
["Recent &Projects"] = "Letzte &Projekte", -- src\editor\menu_file.lua
|
||||
["Recent Files"] = "Letzte Dateien", -- src\editor\menu_file.lua
|
||||
["Redo last edit undone"] = "Stelle letzte rückgängig gemachte Bearbeitung wieder her", -- src\editor\menu_edit.lua
|
||||
["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\findreplace.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 all"] = "Alles ersetzen", -- src\editor\findreplace.lua
|
||||
["Replace All Selections"] = "Alle Auswahlen ersetzen", -- src\editor\editor.lua
|
||||
["Replace"] = "Ersetzen", -- src\editor\findreplace.lua
|
||||
["Replaced an invalid UTF8 character with %s."] = "Unbekanntes UTF8-Symbol ersetzt mit %s.", -- src\editor\commands.lua
|
||||
["Replaced"] = "Ersetzt:", -- src\editor\findreplace.lua
|
||||
["Replacing"] = "Am Ersetzen", -- src\editor\findreplace.lua
|
||||
["Reset to default layout"] = "Standard-Layout wiederherstellen", -- src\editor\menu_view.lua
|
||||
["Run As Scratchpad"] = "Als &Entwurf starten", -- src\editor\menu_project.lua
|
||||
["Run as Scratchpad"] = "Als &Entwurf starten", -- src\editor\menu_project.lua
|
||||
["S&top Debugging"] = "Debugging a&nhalten", -- src\editor\menu_project.lua
|
||||
["S&top Process"] = "Prozeß &anhalten", -- src\editor\menu_project.lua
|
||||
["Save &As..."] = "S&peichern als...", -- src\editor\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\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\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
|
||||
["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 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 And Find Next"] = "Auswählen und nächstes finden", -- src\editor\menu_search.lua
|
||||
["Select And Find Previous"] = "Auswählen und vorheriges finden", -- src\editor\menu_search.lua
|
||||
["Select the word under cursor and find its next occurrence"] = "Wort unter dem Cursor auswählen und nächstes Auftauchen finden", -- src\editor\menu_search.lua
|
||||
["Select the word under cursor and find its previous occurrence"] = "Wort unter dem Cursor auswählen und vorheriges Auftauchen finden", -- src\editor\menu_search.lua
|
||||
["Set From Current File"] = "Anhand der aktuellen Datei festlegen", -- src\editor\menu_project.lua
|
||||
["Set project directory from current file"] = "Lege Projektverzeichnis anhand der aktuellen Datei fest", -- src\editor\gui.lua, src\editor\menu_project.lua
|
||||
["Set project directory from current file"] = "Lege Projektverzeichnis anhand der aktuellen Datei fest", -- src\editor\menu_project.lua
|
||||
["Set the interpreter to be used"] = "Wähle zu benutzenden Interpreter aus", -- src\editor\menu_project.lua
|
||||
["Set the project directory to be used"] = "Lege zu benutzendes Projektverzeichnis fest", -- src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Settings: System"] = "Einstellungen: System", -- src\editor\menu_edit.lua
|
||||
["Settings: User"] = "Einstellungen: Nutzer", -- src\editor\menu_edit.lua
|
||||
["Show &Tooltip"] = "&Tooltip zeigen", -- src\editor\menu_edit.lua
|
||||
["Show All Files"] = "Zeige alle Dateien", -- src\editor\filetree.lua
|
||||
["Show Hidden Files"] = "Zeige versteckte Dateien", -- src\editor\filetree.lua
|
||||
["Show Location"] = "Ordner öffnen", -- src\editor\gui.lua, src\editor\filetree.lua
|
||||
["Show all files"] = "Zeige alle Dateien", -- src\editor\filetree.lua
|
||||
["Show files previously hidden"] = "Zeige Dateien die zuvor versteckt wurden", -- src\editor\filetree.lua
|
||||
["Show tooltip for current position; place cursor after opening bracket of function"] = "Zeige Tooltip für aktuelle Position; setze Cursor hinter die öffnende Klammer der Funktion", -- src\editor\menu_edit.lua
|
||||
["Show/Hide the status bar"] = "Statuszeile zeigen/verstecken", -- src\editor\menu_view.lua
|
||||
["Show/Hide the toolbar"] = "Werkzeugleiste zeigen/verstecken", -- src\editor\menu_view.lua
|
||||
["Sort selected lines"] = "Ausgewählte Zeilen sortieren", -- src\editor\menu_edit.lua
|
||||
["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
|
||||
["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\menu_project.lua
|
||||
["Step out of the current function"] = "Schritt aus der aktuellen Funktion heraus", -- src\editor\menu_project.lua
|
||||
["Step over"] = "Überspringen", -- src\editor\menu_project.lua
|
||||
["Stop debugging and continue running the process"] = "Beende debuggen und setze den Prozeß fort", -- src\editor\menu_project.lua
|
||||
["Stop the currently running process"] = "Aktuell laufenden Prozeß stoppen", -- src\editor\menu_project.lua
|
||||
["Switch to or from full screen mode"] = "Vollbild an/aus", -- src\editor\menu_view.lua
|
||||
["Text not found."] = "Text nicht gefunden.", -- src\editor\findreplace.lua
|
||||
["The API file must be located in a subdirectory of the API directory."] = "Die API-Datei muß sich in einem Unterverzeichnis des API-Vereichnisses befinden.", -- src\editor\autocomplete.lua
|
||||
["Toggle Bookmark"] = "Lesezeichen setzen/löschen", -- src\editor\menu_edit.lua
|
||||
["Toggle Break&point"] = "&Haltepunkt an/aus", -- src\editor\menu_project.lua
|
||||
["Toggle breakpoint"] = "Haltepunkt an/aus", -- src\editor\gui.lua, src\editor\menu_project.lua
|
||||
["Toggle bookmark"] = "Lesezeichen setzen/löschen", -- src\editor\menu_edit.lua
|
||||
["Toggle breakpoint"] = "Haltepunkt an/aus", -- src\editor\menu_project.lua
|
||||
["Tr&ace"] = "Ablauf &verfolgen", -- src\editor\menu_project.lua
|
||||
["Trace execution showing each executed line"] = "Ablaufverfolgung zeigt jede ausgeführte Zeile an", -- src\editor\menu_project.lua
|
||||
["Unable to create directory '%s'."] = "Kann kein Verzeichnis '%s' erstellen.", -- src\editor\filetree.lua
|
||||
["Unable to create file '%s'."] = "Kann Datei '%s' nicht erstellen.", -- src\editor\filetree.lua
|
||||
["Unable to delete directory '%s': %s"] = "Scheitern beim Löschen von Verzeichnis '%s': %s", -- src\editor\filetree.lua
|
||||
["Unable to load file '%s'."] = "Scheitern beim Laden von Datei '%s'.", -- src\editor\commands.lua
|
||||
["Unable to rename file '%s'."] = "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
|
||||
@@ -268,14 +292,14 @@ return {
|
||||
["Use '%s' to show line endings and '%s' to convert them."] = "'%s' um Zeilenende-Codes zu sehen, und '%s' um sie zu konvertieren.", -- src\editor\commands.lua
|
||||
["Use 'clear' to clear the shell output and the history."] = "'clear' um Ausgabefenster und Verlauf zu löschen.", -- src\editor\shellbox.lua
|
||||
["Use Shift-Enter for multiline code."] = "<Umsch-Eingabetaste> für Code in mehreren Zeilen.", -- src\editor\shellbox.lua
|
||||
["Value"] = "Wert", -- src\editor\debugger.lua
|
||||
["View the outline window"] = "Übersichtsfenster ansehen", -- src\editor\menu_view.lua
|
||||
["View the output/console window"] = "Ausgabe-/Konsolenfenster ansehen", -- src\editor\menu_view.lua
|
||||
["View the project/filetree window"] = "Projekt-/Dateifenster ansehen", -- src\editor\menu_view.lua
|
||||
["View the stack window"] = "Stapel/Stack-Fenster ansehen", -- src\editor\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\menu_view.lua
|
||||
["View the watch window"] = "Fenster für Beobachtungspunkte ansehen", -- src\editor\menu_view.lua
|
||||
["Watch"] = "Beobachtungspunkte", -- src\editor\debugger.lua
|
||||
["Welcome to the interactive Lua interpreter."] = "Willkommen zum interaktiven Lua-Interpretr!", -- src\editor\shellbox.lua
|
||||
["Wrap ar&ound"] = "Am Anfang fortsetzen", -- src\editor\findreplace.lua
|
||||
["Wrap around"] = "Am Anfang fortsetzen", -- src\editor\findreplace.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
|
||||
}
|
||||
|
||||
312
cfg/i18n/eo.lua
Normal file
312
cfg/i18n/eo.lua
Normal file
@@ -0,0 +1,312 @@
|
||||
-- Traduko fare de cosmotect
|
||||
return {
|
||||
[0] = function(c) return c == 1 and 1 or 2 end, -- plural
|
||||
["%d instance"] = {"%d aperaĵo", "%d aperaĵoj"}, -- src\editor\findreplace.lua
|
||||
["%s event failed: %s"] = "%s evento malplenumiĝas: %s", -- src\editor\package.lua
|
||||
["&About"] = "&Pri", -- src\editor\menu_help.lua
|
||||
["&Add Watch"] = "&Aldoni observadaĵon", -- src\editor\debugger.lua
|
||||
["&Break"] = "&Haltigi", -- src\editor\menu_project.lua
|
||||
["&Close Page"] = "&Fermi paĝon", -- src\editor\gui.lua, src\editor\menu_file.lua
|
||||
["&Community"] = "&Komunumo", -- src\editor\menu_help.lua
|
||||
["&Compile"] = "&Kompili", -- src\editor\menu_project.lua
|
||||
["&Copy"] = "&Kopii", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Default Layout"] = "&Defaŭlta aranĝo", -- src\editor\menu_view.lua
|
||||
["&Delete Watch"] = "&Forigi observadaĵon", -- src\editor\debugger.lua
|
||||
["&Delete"] = "&Forigi", -- src\editor\filetree.lua
|
||||
["&Documentation"] = "&Dokumentado", -- src\editor\menu_help.lua
|
||||
["&Down"] = "&Malsupren", -- src\editor\findreplace.lua
|
||||
["&Edit Project Directory"] = "&Redakti projektan dosierujon", -- src\editor\filetree.lua
|
||||
["&Edit Value"] = "&Redakti valoron", -- src\editor\debugger.lua
|
||||
["&Edit Watch"] = "&Redakti observadaĵon", -- src\editor\debugger.lua
|
||||
["&Edit"] = "&Redakti", -- src\editor\menu_edit.lua
|
||||
["&File"] = "&Dosiero", -- src\editor\menu_file.lua
|
||||
["&Find All"] = "Tra&serĉi ĉion", -- src\editor\findreplace.lua
|
||||
["&Find Next"] = "&Pluserĉi", -- src\editor\findreplace.lua
|
||||
["&Find"] = "Tra&serĉi", -- src\editor\menu_search.lua
|
||||
["&Fold/Unfold All"] = "&Kaŝi/Malkaŝi ĉion", -- src\editor\menu_edit.lua
|
||||
["&Frequently Asked Questions"] = "&Oftaj demandoj", -- src\editor\menu_help.lua
|
||||
["&Getting Started Guide"] = "&Ekgvidilo", -- src\editor\menu_help.lua
|
||||
["&Help"] = "&Helpo", -- src\editor\menu_help.lua
|
||||
["&New Directory"] = "&Nova dosierujo", -- src\editor\filetree.lua
|
||||
["&New"] = "&Nova paĝo", -- src\editor\menu_file.lua
|
||||
["&Open..."] = "&Malfermi...", -- src\editor\menu_file.lua
|
||||
["&Output/Console Window"] = "&Eliga/Konzola fenestro", -- src\editor\menu_view.lua
|
||||
["&Paste"] = "&Alglui", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Project Page"] = "&Projektpaĝo", -- src\editor\menu_help.lua
|
||||
["&Project"] = "&Projekto", -- src\editor\menu_project.lua
|
||||
["&Redo"] = "&Refari", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Rename"] = "&Renomigi", -- src\editor\filetree.lua
|
||||
["&Replace All"] = "&Anstataŭi ĉion", -- src\editor\findreplace.lua
|
||||
["&Replace"] = "&Anstataŭi", -- src\editor\findreplace.lua, src\editor\menu_search.lua
|
||||
["&Run"] = "&Plenumi", -- src\editor\menu_project.lua
|
||||
["&Save"] = "&Konservi", -- src\editor\gui.lua, src\editor\menu_file.lua
|
||||
["&Search"] = "&Serĉi", -- src\editor\menu_search.lua
|
||||
["&Sort"] = "&Ordi", -- src\editor\menu_edit.lua
|
||||
["&Stack Window"] = "&Staka fenestro", -- src\editor\menu_view.lua
|
||||
["&Start Debugger Server"] = "&Ekfunkciigi sencimigilo-servilon", -- src\editor\menu_project.lua
|
||||
["&Status Bar"] = "&Stata breto", -- src\editor\menu_view.lua
|
||||
["&Subdirectories"] = "&Subdosierujoj", -- src\editor\findreplace.lua
|
||||
["&Tool Bar"] = "&Ilobreto", -- src\editor\menu_view.lua
|
||||
["&Tutorials"] = "&Lerniloj", -- src\editor\menu_help.lua
|
||||
["&Undo"] = "&Malfari", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Up"] = "&Supren", -- src\editor\findreplace.lua
|
||||
["&View"] = "&Vidi", -- src\editor\menu_view.lua
|
||||
["&Watch Window"] = "&Observada fenestro", -- src\editor\menu_view.lua
|
||||
[".bak on replace"] = ".bak post anstataŭigo", -- src\editor\findreplace.lua
|
||||
["About %s"] = "Pri %s", -- src\editor\menu_help.lua
|
||||
["Add To Scratchpad"] = "Aldoni al malnetdosiero", -- src\editor\editor.lua
|
||||
["Add Watch Expression"] = "Aldoni observadaĵan esprimon", -- src\editor\editor.lua
|
||||
["All files"] = "Ĉiuj dosieroj", -- src\editor\commands.lua
|
||||
["Allow external process to start debugging"] = "Lasi eksteran procezon ek-sencimigi", -- src\editor\menu_project.lua
|
||||
["Analyze the source code"] = "Analizi fontkodon", -- src\editor\inspect.lua
|
||||
["Analyze"] = "Analizi", -- src\editor\inspect.lua
|
||||
["Auto Complete Identifiers"] = "Aŭtomate kompletigi fontkodnomojn", -- src\editor\menu_edit.lua
|
||||
["Auto complete while typing"] = "Aŭtomate kompletigi dumtajpe", -- src\editor\menu_edit.lua
|
||||
["Bookmark"] = "Legosigno", -- src\editor\menu_edit.lua
|
||||
["Break execution at the next executed line of code"] = "Haltigi plenumon ĉe la sekva plenumata linio da fontkodo", -- src\editor\menu_project.lua
|
||||
["C&lear Output Window"] = "Viŝi eligan fenestron", -- src\editor\gui.lua, src\editor\menu_project.lua
|
||||
["C&omment/Uncomment"] = "F&orkomenti/Eksforkomenti", -- src\editor\menu_edit.lua
|
||||
["Can't debug the script in the active editor window."] = "Ne povas sencimigi la skripton en la aktiva redaktila fenestro.", -- src\editor\debugger.lua
|
||||
["Can't evaluate the expression while the application is running."] = "Ne povas malkodi la esprimon dum funkciatas la aplikaĵo.", -- src\editor\debugger.lua
|
||||
["Can't find file '%s' in the current project to activate for debugging. Update the project or open the file in the editor before debugging."] = "Ne povas trovi la dosieron '%s' en la kuranta projekto por aktivi por sencimigo. Ĝisdatigu la projekton aŭ malfermu la dosieron en redaktilo antaŭ sencimigo.", -- src\editor\debugger.lua
|
||||
["Can't open file '%s': %s"] = "Ne povas malfermi la dosieron '%s': %s", -- src\editor\singleinstance.lua
|
||||
["Can't process auto-recovery record; invalid format: %s."] = "Ne povas analizi aŭtomatrestaŭran dosieron; neprava dosierformo: %s.", -- src\editor\commands.lua
|
||||
["Can't run the entry point script ('%s')."] = "Ne povas plenumi la enirejan skripton", -- src\editor\debugger.lua
|
||||
["Can't start debugger server at %s:%d: %s."] = "Ne povas ekfunkciigi sencimigilo-servilon ĉe %s:%d: %s.", -- src\editor\debugger.lua
|
||||
["Can't start debugging session due to internal error '%s'."] = "Ne povas komenci sencimigan seancon pro interna eraro", -- src\editor\debugger.lua
|
||||
["Can't start debugging without an opened file or with the current file not being saved ('%s')."] = "Ne povas ek-sencimigon sen malfermita dosiero aŭ kun la kuranta dosiero nekonserviĝas ('%s').", -- src\editor\debugger.lua
|
||||
["Can't stop debugger server as it is not started."] = "Ne povas malfunkciigi sencimigilo-servilon, ĉar ĝi ne funkciantas", -- src\editor\debugger.lua
|
||||
["Cancel"] = "Nuligi", -- src\editor\findreplace.lua
|
||||
["Cancelled by the user."] = "Nuligita per la uzanto", -- src\editor\findreplace.lua
|
||||
["Choose a project directory"] = "Elekti projektan dosierujon", -- src\editor\findreplace.lua, src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Choose..."] = "Elekti...", -- src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Clear Items"] = "Viŝi anojn", -- src\editor\menu_file.lua
|
||||
["Clear items from this list"] = "Senlistigi tiujn ĉi anojn", -- src\editor\menu_file.lua
|
||||
["Clear the output window before compiling or debugging"] = "Viŝi la eligan fenestron antaŭ kompilado aŭ sencimigado", -- src\editor\menu_project.lua
|
||||
["Close &Other Pages"] = "Fermi &aliajn paĝojn", -- src\editor\gui.lua
|
||||
["Close A&ll Pages"] = "Fermi ĉiujn paĝojn", -- src\editor\gui.lua
|
||||
["Close the current editor window"] = "Fermi la kurantan redaktilan fenestron", -- src\editor\menu_file.lua
|
||||
["Co&ntinue"] = "Daŭrigi", -- src\editor\menu_project.lua
|
||||
["Col: %d"] = "Kol: %d", -- src\editor\editor.lua
|
||||
["Command Line Parameters..."] = "Komandliniaj parametroj", -- src\editor\menu_project.lua
|
||||
["Command line parameters"] = "Komandliniaj parametroj", -- src\editor\menu_project.lua
|
||||
["Comment or uncomment current or selected lines"] = "Forkomenti aŭ eksforkomenti la kurantan aŭ la elektitajn liniojn", -- src\editor\menu_edit.lua
|
||||
["Compilation error"] = "Eraro de kompilo", -- src\editor\commands.lua, src\editor\debugger.lua
|
||||
["Compilation successful; %.0f%% success rate (%d/%d)."] = "Kompilo sukcesa; %.0f%% elcentaĵo da sukceso (%d/%d).", -- src\editor\commands.lua
|
||||
["Compile the current file"] = "Kompili la kurantan dosieron", -- src\editor\menu_project.lua
|
||||
["Complete &Identifier"] = "Finfari &fontkodnomon", -- src\editor\menu_edit.lua
|
||||
["Complete the current identifier"] = "Finfari la kurantan fontkodnomon", -- src\editor\menu_edit.lua
|
||||
["Consider removing backslash from escape sequence '%s'."] = "Kontemplu forigi maloblikvon el eskapsekvenco '%s'.", -- src\editor\commands.lua
|
||||
["Copy Full Path"] = "Kopii plenan vojon", -- src\editor\gui.lua, src\editor\filetree.lua
|
||||
["Copy selected text to clipboard"] = "Kopii elektitan tekston al la tondejo", -- src\editor\menu_edit.lua
|
||||
["Correct &Indentation"] = "Korekti &alineon", -- src\editor\menu_edit.lua
|
||||
["Couldn't activate file '%s' for debugging; continuing without it."] = "Ne povis aktivi la dosieron '%s' por sencimigi; daŭrantas sen ĝi.", -- src\editor\debugger.lua
|
||||
["Create an empty document"] = "Krei malplenan dokumenton", -- src\editor\menu_file.lua
|
||||
["Cu&t"] = "El&tondi", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["Cut selected text to clipboard"] = "Eltondi la elektitan tekston al la tondejo", -- src\editor\menu_edit.lua
|
||||
["Debugger server started at %s:%d."] = "Sencimigilo-servilon ekfunkciiĝis ĉe %s:%d.", -- src\editor\debugger.lua
|
||||
["Debugger server stopped at %s:%d."] = "Sencimigilo-servilon malfunkciiĝis ĉe %s:%d.", -- src\editor\debugger.lua
|
||||
["Debugging session completed (%s)."] = "Sencimiga seanco estas finita (%s).", -- src\editor\debugger.lua
|
||||
["Debugging session started in '%s'."] = "Sencimiga seanco komencitas en '%s'.", -- src\editor\debugger.lua
|
||||
["Debugging suspended at '%s:%s' (couldn't activate the file)."] = "La sencimigo estis finetita ĉe '%s:%s' (ne povis aktivi la dosieron).", -- src\editor\debugger.lua
|
||||
["Detach &Process"] = "Deigi &procezon", -- src\editor\menu_project.lua
|
||||
["Directory"] = "Dosierujo", -- src\editor\findreplace.lua
|
||||
["Do you want to delete '%s'?"] = "Ĉu vi volas forigi je '%s'?", -- src\editor\filetree.lua
|
||||
["Do you want to overwrite it?"] = "Ĉu vi volas superskribi ĉi tiun?", -- src\editor\commands.lua
|
||||
["Do you want to reload it?"] = "Ĉu vi volas reŝarĝi tiun ĉi?", -- src\editor\editor.lua
|
||||
["Do you want to save the changes to '%s'?"] = "Ĉu vi volas konservi ĉiujn ŝanĝojn, kiuj enfaris je '%s'?", -- src\editor\commands.lua
|
||||
["E&xit"] = "&Eliri", -- src\editor\menu_file.lua
|
||||
["Enter Lua code and press Enter to run it."] = "Enigu fontkodon de Lua kaj premu enenklavon por plenumi ĝin.", -- src\editor\shellbox.lua
|
||||
["Enter command line parameters (use Cancel to clear)"] = "Enigu komandliniajn parametrojn (uzu nulig-butonon por viŝi)", -- src\editor\menu_project.lua
|
||||
["Enter replacement text"] = "Enigu anstataŭigan tekston", -- src\editor\editor.lua
|
||||
["Error while loading API file: %s"] = "Eraro okazis dum ŝargado de API-a dosiero: %s", -- src\editor\autocomplete.lua
|
||||
["Error while loading configuration file: %s"] = "Eraro okazis dum ŝargado de agorda dosiero: %s", -- src\editor\style.lua
|
||||
["Error while processing API file: %s"] = "Eraro okazis dum analizado de API-a dosiero: %s", -- src\editor\autocomplete.lua
|
||||
["Error while processing configuration file: %s"] = "Eraro okazis dum analizado de agorda dosiero: %s", -- src\editor\style.lua
|
||||
["Error"] = "Eraro", -- src\editor\commands.lua
|
||||
["Evaluate In Console"] = "Malkodi en la konzolo", -- src\editor\editor.lua
|
||||
["Execute the current project/file and keep updating the code to see immediate results"] = "Plenumi la kurantan projekton/dosieron, kaj ĝisdatigadi la fontkodon por vidi tujajn rezultojn", -- src\editor\menu_project.lua
|
||||
["Execute the current project/file"] = "Plenumi la kurantan projekton/dosieron", -- src\editor\menu_project.lua
|
||||
["Execution error"] = "Eraro de plenumo", -- src\editor\debugger.lua
|
||||
["Exit program"] = "Eliri programon", -- src\editor\menu_file.lua
|
||||
["File '%s' has been modified on disk."] = "La dosiero nome de '%s' ŝanĝitis en disko.", -- src\editor\editor.lua
|
||||
["File '%s' has more recent timestamp than restored '%s'; please review before saving."] = "La dosiero nome de '%s' havas pli freŝan tempindikon, ol la ripardosiero '%s'; bonvolu ekzameni ĝin antaû konservi.", -- src\editor\commands.lua
|
||||
["File '%s' is missing and can't be recovered."] = "La dosiero nome de '%s' forestas kaj ne povas esti reakirita.", -- src\editor\commands.lua
|
||||
["File '%s' no longer exists."] = "La dosiero nome de '%s' ne plu ekzistas.", -- src\editor\menu_file.lua, src\editor\editor.lua
|
||||
["File Type"] = "Dosierspeco", -- src\editor\findreplace.lua
|
||||
["File already exists."] = "Jam ekzistas tiu ĉi dosiero.", -- src\editor\commands.lua
|
||||
["File history"] = "Dosiera historio", -- src\editor\menu_file.lua
|
||||
["Find &In Files"] = "Traserĉi &en dosieroj", -- src\editor\menu_search.lua
|
||||
["Find &Next"] = "&Pluserĉi", -- src\editor\menu_search.lua
|
||||
["Find &Previous"] = "Traserĉi &antaŭanta", -- src\editor\menu_search.lua
|
||||
["Find in files"] = "Traserĉi en dosieroj", -- src\editor\findreplace.lua
|
||||
["Find and insert library function"] = nil, -- src\editor\menu_search.lua
|
||||
["Find and replace text in files"] = "Traserĉi kaj anstataŭi tekston en dosieroj", -- src\editor\menu_search.lua
|
||||
["Find and replace text"] = "Traserĉi kaj anstataŭi tekston", -- src\editor\menu_search.lua
|
||||
["Find text in files"] = "Traserĉi tekston en dosieroj", -- src\editor\menu_search.lua
|
||||
["Find text"] = "Traserĉi tekston", -- src\editor\menu_search.lua
|
||||
["Find the earlier text occurence"] = "Traserĉi la antaŭantan aperaĵon da teksto", -- src\editor\menu_search.lua
|
||||
["Find the next text occurrence"] = "Pluserĉi la aperaĵon da teksto", -- src\editor\menu_search.lua
|
||||
["Find"] = "Traserĉi", -- src\editor\findreplace.lua
|
||||
["Fold or unfold all code folds"] = "Kaŝi aŭ malkaŝi ĉiujn faldaĵojn da fontkodoj", -- src\editor\menu_edit.lua
|
||||
["Found auto-recovery record and restored saved session."] = "Trovis aŭtomatrestaŭran dosieron kaj riparis konservitan seancon.", -- src\editor\commands.lua
|
||||
["Found"] = "Trovis", -- src\editor\findreplace.lua
|
||||
["Full &Screen"] = "Plenekrana &reĝimo", -- src\editor\menu_view.lua
|
||||
["Go To Definition"] = "Iri al deklaro", -- src\editor\editor.lua
|
||||
["Go To File..."] = nil, -- src\editor\menu_search.lua
|
||||
["Go To Line..."] = "Iri al linio...", -- src\editor\menu_search.lua
|
||||
["Go To Next Bookmark"] = "Iri al sekvanta legosigno", -- src\editor\menu_edit.lua
|
||||
["Go To Previous Bookmark"] = "Iri al antaŭanta legosigno", -- src\editor\menu_edit.lua
|
||||
["Go To Symbol..."] = nil, -- src\editor\menu_search.lua
|
||||
["Go to file"] = nil, -- src\editor\menu_search.lua
|
||||
["Go to line"] = "Iri al linio", -- src\editor\menu_search.lua
|
||||
["Go to symbol"] = nil, -- src\editor\menu_search.lua
|
||||
["Hide '.%s' Files"] = nil, -- src\editor\filetree.lua
|
||||
["INS"] = "INS", -- src\editor\editor.lua
|
||||
["Ignored error in debugger initialization code: %s."] = "Ignoris eraron en pravaloriza kodo de la sencimigilo: %s.", -- src\editor\debugger.lua
|
||||
["In Files"] = "Ene de dosieroj", -- src\editor\findreplace.lua
|
||||
["Insert Library Function..."] = nil, -- src\editor\menu_search.lua
|
||||
["Known Files"] = "Konataj dosieroj", -- src\editor\commands.lua
|
||||
["Ln: %d"] = "Ln: %d", -- src\editor\editor.lua
|
||||
["Local console"] = "Loka konzolo", -- src\editor\gui.lua, src\editor\shellbox.lua
|
||||
["Lua &Interpreter"] = "Interpretilo de Lua", -- src\editor\menu_project.lua
|
||||
["Mapped remote request for '%s' to '%s'."] = "Mapi faran peton pri '%s' al '%s'.", -- src\editor\debugger.lua
|
||||
["Match case"] = "Atenti usklecon", -- src\editor\findreplace.lua
|
||||
["Match whole word"] = "Atenti plenan vorton", -- src\editor\findreplace.lua
|
||||
["Mixed end-of-line encodings detected."] = "Detektis kodoprezentojn miksitajn linifinajn", -- src\editor\commands.lua
|
||||
["Navigate"] = nil, -- src\editor\menu_search.lua
|
||||
["New &File"] = "Nova &dosiero", -- src\editor\filetree.lua
|
||||
["OVR"] = "SUS", -- src\editor\editor.lua
|
||||
["Open With Default Program"] = "Malfermi per la defaŭlta programo", -- src\editor\filetree.lua
|
||||
["Open an existing document"] = "Malfermi jaman dokumenton", -- src\editor\menu_file.lua
|
||||
["Open file"] = "Malfermi dosieron", -- src\editor\commands.lua
|
||||
["Options"] = "Opcioj", -- src\editor\findreplace.lua
|
||||
["Outline Window"] = "Skemo-fenestro", -- src\editor\menu_view.lua
|
||||
["Outline"] = "Skemo", -- src\editor\outline.lua
|
||||
["Output (running)"] = "Eligo (funkciata)", -- src\editor\debugger.lua, src\editor\output.lua
|
||||
["Output (suspended)"] = "Eligo (finetita)", -- src\editor\debugger.lua
|
||||
["Output"] = "Eligo", -- src\editor\debugger.lua, src\editor\output.lua, src\editor\gui.lua, src\editor\settings.lua
|
||||
["Paste text from the clipboard"] = "Alglui tekston el la tondejo", -- src\editor\menu_edit.lua
|
||||
["Preferences"] = "Preferoj", -- src\editor\menu_edit.lua
|
||||
["Prepend '!' to force local execution."] = "Antaŭdoni je '!' por altrudi lokan plenumon.", -- src\editor\shellbox.lua
|
||||
["Prepend '=' to show complex values on multiple lines."] = "Antaŭdoni je '=' por montri komplikajn valorojn sur multaj linioj.", -- src\editor\shellbox.lua
|
||||
["Press cancel to abort."] = "Premu nulig-butonon por fini.", -- src\editor\commands.lua
|
||||
["Program '%s' started in '%s' (pid: %d)."] = "La programo nome de '%s' komencitas en '%s' (pid: %d).", -- src\editor\output.lua
|
||||
["Program can't start because conflicting process is running as '%s'."] = "La programo ne povas komenci, ĉar konflikta procezo funkcias kiel je la '%s'.", -- src\editor\output.lua
|
||||
["Program completed in %.2f seconds (pid: %d)."] = "La programo finfaris post %.2f sekundoj", -- src\editor\output.lua
|
||||
["Program starting as '%s'."] = "La programo komencas kiel je '%s'.", -- src\editor\output.lua
|
||||
["Program stopped (pid: %d)."] = "La programo finis (pid: %d).", -- src\editor\debugger.lua
|
||||
["Program unable to run as '%s'."] = "La programo ne kapablas plenumi kiel je '%s'.", -- src\editor\output.lua
|
||||
["Project Directory"] = "Projekta dosierujo", -- src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Project history"] = "Projekta historio", -- src\editor\menu_file.lua
|
||||
["Project"] = "Projekto", -- src\editor\filetree.lua
|
||||
["Project/&FileTree Window"] = "Projekta/&Dosierarba Fenestro", -- src\editor\menu_view.lua
|
||||
["Provide command line parameters"] = "Doni komandliniajn parametrojn", -- src\editor\menu_project.lua
|
||||
["R/O"] = "L/A", -- src\editor\editor.lua
|
||||
["R/W"] = "L/S", -- src\editor\editor.lua
|
||||
["Re&place In Files"] = "Anstataŭi en dosieroj", -- src\editor\menu_search.lua
|
||||
["Re-indent selected lines"] = "Realinei elektitajn liniojn", -- src\editor\menu_edit.lua
|
||||
["Recent &Projects"] = "Antaŭnelongaj &projektoj", -- src\editor\menu_file.lua
|
||||
["Recent Files"] = "Antaŭnelongaj dosieroj", -- src\editor\menu_file.lua
|
||||
["Redo last edit undone"] = "Refari lastan redakton", -- src\editor\menu_edit.lua
|
||||
["Refresh"] = "Refreŝigu", -- src\editor\menu_file.lua
|
||||
["Refused a request to start a new debugging session as there is one in progress already."] = "Peto por komenci novan sencimigan seancon malakceptis, ĉar seanco jam faratas.", -- src\editor\debugger.lua
|
||||
["Regular expression"] = "Regul&esprimo", -- src\editor\findreplace.lua
|
||||
["Remote console"] = "Fora konzolo", -- src\editor\shellbox.lua
|
||||
["Rename All Instances"] = "Renomigi ĉiujn aperaĵojn", -- src\editor\editor.lua
|
||||
["Replace all"] = "Anstataŭi ĉion", -- src\editor\findreplace.lua
|
||||
["Replace All Selections"] = "Anstataŭi ĉiujn elektojn", -- src\editor\editor.lua
|
||||
["Replace"] = "Anstataŭi", -- src\editor\findreplace.lua
|
||||
["Replaced an invalid UTF8 character with %s."] = "Anstataŭis UTF8-an signon per %s.", -- src\editor\commands.lua
|
||||
["Replaced"] = "Anstataŭita", -- src\editor\findreplace.lua
|
||||
["Replacing"] = "Anstataŭanta", -- src\editor\findreplace.lua
|
||||
["Reset to default layout"] = "Rekomenciĝi al defaŭltan aranĝon", -- src\editor\menu_view.lua
|
||||
["Run As Scratchpad"] = "Plenumi kiel malnetdosieron", -- src\editor\menu_project.lua
|
||||
["Run as Scratchpad"] = "Plenumi kiel malnetdosieron", -- src\editor\menu_project.lua
|
||||
["S&top Debugging"] = "&Fini sencimigo", -- src\editor\menu_project.lua
|
||||
["S&top Process"] = "&Fini procezon", -- src\editor\menu_project.lua
|
||||
["Save &As..."] = "Konservi &kiel...", -- src\editor\gui.lua, src\editor\menu_file.lua
|
||||
["Save A&ll"] = "Konservi ĉ&ion", -- src\editor\menu_file.lua
|
||||
["Save Changes?"] = "Ĉu konservi ĉiujn ŝanĝojn?", -- src\editor\commands.lua
|
||||
["Save all open documents"] = "Konservi ĉiujn malfermajn dokumentojn", -- src\editor\menu_file.lua
|
||||
["Save file as"] = "Konservi dosieron kiel", -- src\editor\commands.lua
|
||||
["Save file?"] = "Ĉu konservi dosieron?", -- src\editor\commands.lua
|
||||
["Save the current document to a file with a new name"] = "Konservi la kurantan dokumenton kun dosiero novanome", -- src\editor\menu_file.lua
|
||||
["Save the current document"] = "Konservi la kurantan dokumenton", -- src\editor\menu_file.lua
|
||||
["Saved auto-recover at %s."] = "Konservis aŭtomatrestaŭron je %s.", -- src\editor\commands.lua
|
||||
["Scope"] = "Amplekso", -- src\editor\findreplace.lua
|
||||
["Scratchpad error"] = "Eraro de malnetdosiero", -- src\editor\debugger.lua
|
||||
["Searching for"] = "Serĉanti pri", -- src\editor\findreplace.lua
|
||||
["Sel: %d/%d"] = "Ele: %d/%d", -- src\editor\editor.lua
|
||||
["Select &All"] = "Elekti &ĉion", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["Select all text in the editor"] = "Elekti la tekston en la redaktilo", -- src\editor\menu_edit.lua
|
||||
["Select And Find Next"] = "Elekti kaj pluserĉi", -- src\editor\menu_search.lua
|
||||
["Select And Find Previous"] = "Elekti kaj traserĉi antaŭantan", -- src\editor\menu_search.lua
|
||||
["Select the word under cursor and find its next occurrence"] = "Elekti la vorton sub la tajpmontrilo, kaj pluserĉi", -- src\editor\menu_search.lua
|
||||
["Select the word under cursor and find its previous occurrence"] = "Elekti la vorton sub la tajpmontrilo, kaj traserĉi antaŭantan", -- src\editor\menu_search.lua
|
||||
["Set From Current File"] = "Precizigi per la kuranta dosiero", -- src\editor\menu_project.lua
|
||||
["Set project directory from current file"] = "Precizigi la projektan dosierujon per la kurantan dosieron", -- src\editor\menu_project.lua
|
||||
["Set the interpreter to be used"] = "Precizigi la interpretiloton", -- src\editor\menu_project.lua
|
||||
["Set the project directory to be used"] = "Precizigi la projekt-dosierujoton", -- src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Settings: System"] = "Agordoj de la sistemo", -- src\editor\menu_edit.lua
|
||||
["Settings: User"] = "Agordoj de la uzanto", -- src\editor\menu_edit.lua
|
||||
["Show &Tooltip"] = "Montri &ŝpruchelpilon", -- src\editor\menu_edit.lua
|
||||
["Show All Files"] = nil, -- src\editor\filetree.lua
|
||||
["Show Hidden Files"] = nil, -- src\editor\filetree.lua
|
||||
["Show Location"] = "Montri lokon", -- src\editor\gui.lua, src\editor\filetree.lua
|
||||
["Show all files"] = nil, -- src\editor\filetree.lua
|
||||
["Show files previously hidden"] = nil, -- src\editor\filetree.lua
|
||||
["Show tooltip for current position; place cursor after opening bracket of function"] = "Montri ŝpruchelpilon pri la kuranta pozicio; meti la tajpmontrilon preter la ronda ekkrampo de la funkcio", -- src\editor\menu_edit.lua
|
||||
["Show/Hide the status bar"] = "Montri/Kaŝi la statan breton", -- src\editor\menu_view.lua
|
||||
["Show/Hide the toolbar"] = "Montri/Kaŝi la ilobreton", -- src\editor\menu_view.lua
|
||||
["Sort selected lines"] = "Ordi la elektitajn liniojn", -- src\editor\menu_edit.lua
|
||||
["Source"] = "Fontkodo", -- src\editor\menu_edit.lua
|
||||
["Stack"] = "Stako", -- src\editor\debugger.lua
|
||||
["Start &Debugging"] = "Ek-&sencimigi", -- src\editor\menu_project.lua
|
||||
["Start or continue debugging"] = "Komenci aŭ pluigi sencimigon", -- src\editor\menu_project.lua
|
||||
["Step &Into"] = "Eniri &enen", -- src\editor\menu_project.lua
|
||||
["Step &Over"] = "Trans&salti", -- src\editor\menu_project.lua
|
||||
["Step O&ut"] = "Eliri el", -- src\editor\menu_project.lua
|
||||
["Step into"] = "Eniri enen", -- src\editor\menu_project.lua
|
||||
["Step out of the current function"] = "Eliri el la kuranta funkcio", -- src\editor\menu_project.lua
|
||||
["Step over"] = "Transsalti", -- src\editor\menu_project.lua
|
||||
["Stop debugging and continue running the process"] = "Fini sencimigon kaj plenumadi la procezon", -- src\editor\menu_project.lua
|
||||
["Stop the currently running process"] = "Fini la nunfunkciatan procezon", -- src\editor\menu_project.lua
|
||||
["Switch to or from full screen mode"] = "Interŝanĝi al aŭ el plenekrana reĝimo", -- src\editor\menu_view.lua
|
||||
["Text not found."] = "Teksto ne trovitis", -- src\editor\findreplace.lua
|
||||
["The API file must be located in a subdirectory of the API directory."] = "La dosiero de API devas troviĝi en subdosierujo de la API-a dosierujo.", -- src\editor\autocomplete.lua
|
||||
["Toggle Bookmark"] = "Baskuli legosignon", -- src\editor\menu_edit.lua
|
||||
["Toggle Break&point"] = "Baskuli halto&punkto", -- src\editor\menu_project.lua
|
||||
["Toggle bookmark"] = "Baskuli legosignon", -- src\editor\menu_edit.lua
|
||||
["Toggle breakpoint"] = "Baskuli haltopunkto", -- src\editor\menu_project.lua
|
||||
["Tr&ace"] = "Spuri", -- src\editor\menu_project.lua
|
||||
["Trace execution showing each executed line"] = "Spurili plenumon per montri ĉiun plenumitan linion", -- src\editor\menu_project.lua
|
||||
["Unable to create directory '%s'."] = "Ne kapablas krei je la dosierujo '%s'.", -- src\editor\filetree.lua
|
||||
["Unable to create file '%s'."] = "Ne kapablas krei je la dosiero '%s'.", -- src\editor\filetree.lua
|
||||
["Unable to delete directory '%s': %s"] = "Ne kapablas forigi je la dosierujo '%s': %s", -- src\editor\filetree.lua
|
||||
["Unable to load file '%s'."] = "Ne kapablas ŝarĝi je la dosiero '%s'.", -- src\editor\commands.lua
|
||||
["Unable to rename file '%s'."] = "Ne kapablas renomigi je la dosiero '%s'.", -- src\editor\filetree.lua
|
||||
["Unable to save file '%s': %s"] = "Ne kapablas konservi je la dosiero '%s': %s", -- src\editor\commands.lua
|
||||
["Unable to stop program (pid: %d), code %d."] = "Ne kapablas fini la programon (pid: %d), kodo %d.", -- src\editor\debugger.lua
|
||||
["Undo last edit"] = "Malfari la antaŭan redakton", -- src\editor\menu_edit.lua
|
||||
["Use '%s' to see full description."] = "Uzu je '%s' por vidi plenan priskribon", -- src\editor\editor.lua
|
||||
["Use '%s' to show line endings and '%s' to convert them."] = "Uzu je '%s' por montri linifinojn kaj je '%s' por konverti ilin", -- src\editor\commands.lua
|
||||
["Use 'clear' to clear the shell output and the history."] = "Tajpu 'clear' por viŝi la eligon kaj historion de la ŝelo.", -- src\editor\shellbox.lua
|
||||
["Use Shift-Enter for multiline code."] = "Uzu <Majuskligklavon-Enenklavon> por plurlinia fontkodo.", -- src\editor\shellbox.lua
|
||||
["View the outline window"] = "Vidi la skemo-fenestron", -- src\editor\menu_view.lua
|
||||
["View the output/console window"] = "Vidi la eligo/konzolo-fenestron", -- src\editor\menu_view.lua
|
||||
["View the project/filetree window"] = "Vidi la projekto/dosierarbo-fenestron", -- src\editor\menu_view.lua
|
||||
["View the stack window"] = "Vidi la stako-fenestron", -- src\editor\menu_view.lua
|
||||
["View the watch window"] = "Vidi la observado-fenestron", -- src\editor\menu_view.lua
|
||||
["Watch"] = "Observado", -- src\editor\debugger.lua
|
||||
["Welcome to the interactive Lua interpreter."] = "Bonvenon al la interaga interpretilo de Lua.", -- src\editor\shellbox.lua
|
||||
["Wrap around"] = "Ĉirkaŭflui", -- src\editor\findreplace.lua
|
||||
["You must save the program first."] = "Vi unue devas konservi la programon.", -- src\editor\commands.lua
|
||||
["Zoom In"] = "Zomi", -- src\editor\menu_view.lua
|
||||
["Zoom Out"] = "Malzomi", -- src\editor\menu_view.lua
|
||||
["Zoom to 100%"] = "Zomi al 100%", -- src\editor\menu_view.lua
|
||||
["Zoom"] = "Zomo", -- src\editor\menu_view.lua
|
||||
["on line %d"] = "sur la linio %d", -- src\editor\debugger.lua, src\editor\editor.lua, src\editor\commands.lua
|
||||
["traced %d instruction"] = {"spuris je %d instrukcio", "spuris je %d instrukcioj"}, -- src\editor\debugger.lua
|
||||
["unknown error"] = "obskura eraro", -- src\editor\debugger.lua
|
||||
}
|
||||
124
cfg/i18n/es.lua
124
cfg/i18n/es.lua
@@ -9,13 +9,14 @@ return {
|
||||
["&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
|
||||
["&Copy"] = "Copiar", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Default Layout"] = "Diseño por defecto", -- src\editor\menu_view.lua
|
||||
["&Delete Watch"] = "Eliminar observación", -- src\editor\debugger.lua
|
||||
["&Delete"] = nil, -- src\editor\filetree.lua
|
||||
["&Documentation"] = nil, -- src\editor\menu_help.lua
|
||||
["&Down"] = nil, -- src\editor\findreplace.lua
|
||||
["&Edit Project Directory"] = nil, -- src\editor\filetree.lua
|
||||
["&Edit Value"] = nil, -- src\editor\debugger.lua
|
||||
["&Edit Watch"] = "Editar observación", -- src\editor\debugger.lua
|
||||
["&Edit"] = "Editar", -- src\editor\menu_edit.lua
|
||||
["&File"] = "Archivo", -- src\editor\menu_file.lua
|
||||
@@ -25,16 +26,15 @@ return {
|
||||
["&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
|
||||
["&Help"] = "Ayuda", -- src\editor\menu_help.lua
|
||||
["&New Directory"] = nil, -- src\editor\filetree.lua
|
||||
["&New"] = "&Nuevo", -- src\editor\menu_file.lua
|
||||
["&Open..."] = "&Abrir...", -- src\editor\menu_file.lua
|
||||
["&Output/Console Window"] = "Salida/Consola", -- src\editor\menu_view.lua
|
||||
["&Paste"] = "Pegar", -- src\editor\menu_edit.lua, src\editor\editor.lua
|
||||
["&Paste"] = "Pegar", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Project Page"] = nil, -- src\editor\menu_help.lua
|
||||
["&Project"] = "Proyecto", -- src\editor\inspect.lua, src\editor\menu_project.lua
|
||||
["&Redo"] = "Rehacer", -- src\editor\menu_edit.lua, src\editor\editor.lua
|
||||
["&Project"] = "Proyecto", -- src\editor\menu_project.lua
|
||||
["&Redo"] = "Rehacer", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Rename"] = nil, -- src\editor\filetree.lua
|
||||
["&Replace All"] = nil, -- src\editor\findreplace.lua
|
||||
["&Replace"] = "Remplazar", -- src\editor\findreplace.lua, src\editor\menu_search.lua
|
||||
@@ -48,11 +48,11 @@ return {
|
||||
["&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
|
||||
["&Undo"] = "Deshacer", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Up"] = nil, -- src\editor\findreplace.lua
|
||||
["&View"] = "Ver", -- src\editor\menu_view.lua
|
||||
["&Watch Window"] = "Ventana de observaciones", -- src\editor\menu_view.lua
|
||||
[".&bak on Replace"] = nil, -- src\editor\findreplace.lua
|
||||
[".bak on replace"] = nil, -- src\editor\findreplace.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
|
||||
@@ -63,11 +63,13 @@ return {
|
||||
["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
|
||||
["Break execution at the next executed line of code"] = "Parar ejecución en la siguiente línea de código", -- src\editor\menu_project.lua
|
||||
["C&lear Output Window"] = "Limpiar ventana de Salida", -- src\editor\gui.lua, src\editor\menu_project.lua
|
||||
["C&omment/Uncomment"] = "Comentar/descomentar", -- src\editor\menu_edit.lua
|
||||
["Can't debug the script in the active editor window."] = "No se puede depurar el script en la ventana activa del editor", -- src\editor\debugger.lua
|
||||
["Can't evaluate the expression while the application is running."] = nil, -- src\editor\debugger.lua
|
||||
["Can't find file '%s' in the current project to activate for debugging. Update the project or open the file in the editor before debugging."] = "No se puede encontrar el archivo '%s' en el proyecto actual para activar la depuración. Actualiza el proyecto o abre el archivo en el editor antes de depurar.", -- src\editor\debugger.lua
|
||||
["Can't open file '%s': %s"] = nil, -- src\editor\singleinstance.lua
|
||||
["Can't process auto-recovery record; invalid format: %s."] = "No se puede procesar la autorrecuperación; formato inválido: %s.", -- src\editor\commands.lua
|
||||
["Can't run the entry point script ('%s')."] = "No se pude ejecutar el punto de entrada del script (%s).", -- src\editor\debugger.lua
|
||||
["Can't start debugger server at %s:%d: %s."] = nil, -- src\editor\debugger.lua
|
||||
@@ -76,7 +78,7 @@ return {
|
||||
["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 a project directory"] = "Elegir el directorio del proyecto", -- src\editor\findreplace.lua, src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Choose..."] = nil, -- src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Clear Items"] = nil, -- src\editor\menu_file.lua
|
||||
["Clear items from this list"] = nil, -- src\editor\menu_file.lua
|
||||
@@ -95,17 +97,18 @@ return {
|
||||
["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
|
||||
["Copy Full Path"] = nil, -- src\editor\gui.lua, src\editor\filetree.lua
|
||||
["Copy selected text to clipboard"] = "Copiar el texto seleccionado al portapapeles", -- src\editor\menu_edit.lua
|
||||
["Correct &Indentation"] = nil, -- src\editor\menu_edit.lua
|
||||
["Couldn't activate file '%s' for debugging; continuing without it."] = "No se pudo activar el archivo '%s' para la depuración; continuar sin él.", -- src\editor\debugger.lua
|
||||
["Create an empty document"] = "Crear un documento en blanco", -- src\editor\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\menu_file.lua
|
||||
["Cu&t"] = "Cortar", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["Cut selected text to clipboard"] = "Cortar el texto selecionado al portapapeles", -- src\editor\menu_edit.lua
|
||||
["Debugger server started at %s:%d."] = "Servidor de depuración inciado en %s:%s", -- src\editor\debugger.lua
|
||||
["Debugger server stopped at %s:%d."] = nil, -- src\editor\debugger.lua
|
||||
["Debugging session completed (%s)."] = "Sesión de depuración completada (%s).", -- src\editor\debugger.lua
|
||||
["Debugging session started in '%s'."] = "Sesión de depuración iniciada en '%s'.", -- src\editor\debugger.lua
|
||||
["Debugging suspended at %s:%s (couldn't activate the file)."] = nil, -- src\editor\debugger.lua
|
||||
["Debugging suspended at '%s:%s' (couldn't activate the file)."] = nil, -- src\editor\debugger.lua
|
||||
["Detach &Process"] = nil, -- src\editor\menu_project.lua
|
||||
["Directory"] = nil, -- src\editor\findreplace.lua
|
||||
["Do you want to delete '%s'?"] = nil, -- src\editor\filetree.lua
|
||||
@@ -115,7 +118,7 @@ return {
|
||||
["E&xit"] = "Salir", -- src\editor\menu_file.lua
|
||||
["Enter Lua code and press Enter to run it."] = "Introduce código Lua y pulsa <Entrer> para ejecutarlo.", -- src\editor\shellbox.lua
|
||||
["Enter 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 replacement text"] = nil, -- src\editor\editor.lua
|
||||
["Error while loading API file: %s"] = "Error mientras se cargaba el archivo de API: %s", -- src\editor\autocomplete.lua
|
||||
["Error while loading configuration file: %s"] = nil, -- src\editor\style.lua
|
||||
["Error while processing API file: %s"] = "Error mientras se procesaba el archivo de API: %s", -- src\editor\autocomplete.lua
|
||||
@@ -126,10 +129,9 @@ return {
|
||||
["Execute the current project/file"] = "Ejecutar el proyecto/archivo actual", -- src\editor\menu_project.lua
|
||||
["Execution error"] = "Error de ejecución", -- src\editor\debugger.lua
|
||||
["Exit program"] = "Salir del programa", -- src\editor\menu_file.lua
|
||||
["Expr"] = "Expr.", -- src\editor\debugger.lua
|
||||
["Expression"] = "Expresión", -- src\editor\debugger.lua
|
||||
["File '%s' has been modified on disk."] = "El archivo '%s' ha sido modificado en el disco.", -- src\editor\editor.lua
|
||||
["File '%s' has more recent timestamp than restored '%s'; please review before saving."] = "El archivo '%s' tiene una fecha más reciente que el restaurado '%s'; por favor, revísalo antes de guardar.", -- src\editor\commands.lua
|
||||
["File '%s' is missing and can't be recovered."] = nil, -- src\editor\commands.lua
|
||||
["File '%s' no longer exists."] = "El archivo '%s' no existe.", -- src\editor\menu_file.lua, src\editor\editor.lua
|
||||
["File Type"] = nil, -- src\editor\findreplace.lua
|
||||
["File already exists."] = nil, -- src\editor\commands.lua
|
||||
@@ -137,11 +139,12 @@ return {
|
||||
["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 in files"] = nil, -- src\editor\findreplace.lua
|
||||
["Find and insert library function"] = nil, -- src\editor\menu_search.lua
|
||||
["Find and replace text in files"] = "Buscar y remplazar texto en archivos", -- src\editor\menu_search.lua
|
||||
["Find and replace text"] = "Buscar y rempleazar texto", -- src\editor\gui.lua, src\editor\menu_search.lua
|
||||
["Find and replace text"] = "Buscar y rempleazar texto", -- src\editor\menu_search.lua
|
||||
["Find text in files"] = "Buscar texto en archivos", -- src\editor\menu_search.lua
|
||||
["Find text"] = "Buscar texto", -- src\editor\gui.lua, src\editor\menu_search.lua
|
||||
["Find text"] = "Buscar texto", -- src\editor\menu_search.lua
|
||||
["Find the earlier text occurence"] = "Buscar la anterior aparición del texto", -- src\editor\menu_search.lua
|
||||
["Find the next text occurrence"] = "Buscar la siguiente aparecición del texto", -- src\editor\menu_search.lua
|
||||
["Find"] = nil, -- src\editor\findreplace.lua
|
||||
@@ -150,31 +153,42 @@ return {
|
||||
["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 File..."] = nil, -- src\editor\menu_search.lua
|
||||
["Go To Line..."] = "Ir a línea...", -- src\editor\menu_search.lua
|
||||
["Go To Next Bookmark"] = nil, -- src\editor\menu_edit.lua
|
||||
["Go To Previous Bookmark"] = nil, -- src\editor\menu_edit.lua
|
||||
["Go to a selected line"] = "Ir a línea seleccionada", -- src\editor\menu_search.lua
|
||||
["Go To Symbol..."] = nil, -- src\editor\menu_search.lua
|
||||
["Go to file"] = nil, -- src\editor\menu_search.lua
|
||||
["Go to line"] = "Ir a línea", -- src\editor\menu_search.lua
|
||||
["Go to symbol"] = nil, -- src\editor\menu_search.lua
|
||||
["Hide '.%s' Files"] = nil, -- src\editor\filetree.lua
|
||||
["INS"] = "INS", -- src\editor\editor.lua
|
||||
["Ignored error in debugger initialization code: %s."] = nil, -- src\editor\debugger.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
|
||||
["Insert Library Function..."] = nil, -- src\editor\menu_search.lua
|
||||
["Known Files"] = "Archivos conocidos", -- src\editor\commands.lua
|
||||
["Ln: %d"] = "Ln: %d", -- src\editor\editor.lua
|
||||
["Local console"] = "Consola local", -- src\editor\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
|
||||
["Match case"] = nil, -- src\editor\findreplace.lua
|
||||
["Match whole word"] = nil, -- src\editor\findreplace.lua
|
||||
["Mixed end-of-line encodings detected."] = nil, -- src\editor\commands.lua
|
||||
["Navigate"] = nil, -- src\editor\menu_search.lua
|
||||
["New &File"] = nil, -- src\editor\filetree.lua
|
||||
["OVR"] = "OVR", -- src\editor\editor.lua
|
||||
["Open 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 an existing document"] = "Abrir un documento existente", -- 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"] = nil, -- src\editor\menu_view.lua
|
||||
["Outline"] = nil, -- src\editor\outline.lua
|
||||
["Output (running)"] = "Salida (en ejecución)", -- src\editor\debugger.lua, src\editor\output.lua
|
||||
["Output (suspended)"] = nil, -- src\editor\debugger.lua
|
||||
["Output"] = "Salida", -- src\editor\debugger.lua, src\editor\output.lua, src\editor\gui.lua, src\editor\settings.lua
|
||||
["Paste text from the clipboard"] = "Pegar texto desde el portapapeles", -- src\editor\menu_edit.lua
|
||||
["Preferences"] = nil, -- src\editor\menu_edit.lua
|
||||
["Prepend '!' to force local execution."] = nil, -- src\editor\shellbox.lua
|
||||
["Prepend '=' to show complex values on multiple lines."] = "Antepón '=' para ver valores complejos en líneas múltiples", -- src\editor\shellbox.lua
|
||||
["Press cancel to abort."] = "Presiona cancelar para abortar.", -- src\editor\commands.lua
|
||||
["Program '%s' started in '%s' (pid: %d)."] = "Programa '%s' iniciado en '%s' (pid: %d).", -- src\editor\output.lua
|
||||
@@ -185,81 +199,91 @@ return {
|
||||
["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"] = "Proyecto", -- src\editor\filetree.lua
|
||||
["Project/&FileTree Window"] = "Ventana de proyecto/árbol de archivos", -- src\editor\menu_view.lua
|
||||
["Provide command line parameters"] = nil, -- src\editor\menu_project.lua
|
||||
["R/O"] = "R/O", -- src\editor\editor.lua
|
||||
["R/W"] = "R/W", -- src\editor\editor.lua
|
||||
["Re&place In Files"] = "Remplazar en archivos", -- src\editor\menu_search.lua
|
||||
["Re-indent selected lines"] = nil, -- src\editor\menu_edit.lua
|
||||
["Recent &Projects"] = nil, -- src\editor\menu_file.lua
|
||||
["Recent Files"] = "Archivos recientes", -- src\editor\menu_file.lua
|
||||
["Redo last edit undone"] = "Rehacer la última edición deshecha", -- src\editor\menu_edit.lua
|
||||
["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"] = nil, -- src\editor\findreplace.lua
|
||||
["Remote console"] = "Consola remota", -- src\editor\shellbox.lua
|
||||
["Rename All Instances"] = nil, -- src\editor\editor.lua
|
||||
["Replace A&ll"] = nil, -- src\editor\findreplace.lua
|
||||
["Replace all"] = nil, -- src\editor\findreplace.lua
|
||||
["Replace All Selections"] = nil, -- src\editor\editor.lua
|
||||
["Replace"] = nil, -- src\editor\findreplace.lua
|
||||
["Replaced an invalid UTF8 character with %s."] = nil, -- src\editor\commands.lua
|
||||
["Replaced"] = nil, -- src\editor\findreplace.lua
|
||||
["Replacing"] = nil, -- src\editor\findreplace.lua
|
||||
["Reset to default layout"] = "Restablecer el diseño por defecto", -- src\editor\menu_view.lua
|
||||
["Run As Scratchpad"] = "Ejecutar como borrador", -- src\editor\menu_project.lua
|
||||
["Run as Scratchpad"] = "Ejecutar como borrador", -- src\editor\menu_project.lua
|
||||
["S&top Debugging"] = "Parar depuración", -- src\editor\menu_project.lua
|
||||
["S&top Process"] = "Parar proceso", -- src\editor\menu_project.lua
|
||||
["Save &As..."] = "Guardar como...", -- src\editor\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\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\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
|
||||
["Select &All"] = "Seleccionar todo", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["Select all text in the editor"] = "Seleccionar todo el texto en el editor", -- src\editor\menu_edit.lua
|
||||
["Select and Find Next"] = nil, -- src\editor\menu_search.lua
|
||||
["Select and Find Previous"] = nil, -- src\editor\menu_search.lua
|
||||
["Select 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
|
||||
["Set project directory from current file"] = "Establecer el directorio del proyecto del archivo actual", -- src\editor\menu_project.lua
|
||||
["Set the interpreter to be used"] = "Establecer el intérprete a ser usado", -- src\editor\menu_project.lua
|
||||
["Set the project directory to be used"] = nil, -- src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Settings: System"] = nil, -- src\editor\menu_edit.lua
|
||||
["Settings: User"] = nil, -- src\editor\menu_edit.lua
|
||||
["Show &Tooltip"] = "Ver tooltip", -- src\editor\menu_edit.lua
|
||||
["Show All Files"] = nil, -- src\editor\filetree.lua
|
||||
["Show Hidden Files"] = nil, -- src\editor\filetree.lua
|
||||
["Show Location"] = nil, -- src\editor\gui.lua, src\editor\filetree.lua
|
||||
["Show all files"] = nil, -- src\editor\filetree.lua
|
||||
["Show files previously hidden"] = nil, -- src\editor\filetree.lua
|
||||
["Show tooltip for current position; place cursor after opening bracket of function"] = "Ver tooltip para la posición actual; posicionar el cursor después de abrir el paréntisis de los argumentos de la función", -- src\editor\menu_edit.lua
|
||||
["Show/Hide the status bar"] = nil, -- src\editor\menu_view.lua
|
||||
["Show/Hide the toolbar"] = nil, -- src\editor\menu_view.lua
|
||||
["Sort selected lines"] = "Clasificar las líneas seleccionadas", -- src\editor\menu_edit.lua
|
||||
["Stack"] = nil, -- src\editor\debugger.lua, src\editor\gui.lua
|
||||
["Source"] = nil, -- src\editor\menu_edit.lua
|
||||
["Stack"] = nil, -- src\editor\debugger.lua
|
||||
["Start &Debugging"] = "Comenzar depuración", -- src\editor\menu_project.lua
|
||||
["Start or Continue debugging"] = nil, -- src\editor\gui.lua
|
||||
["Start or continue debugging"] = nil, -- src\editor\menu_project.lua
|
||||
["Step &Into"] = "Paso dentro", -- src\editor\menu_project.lua
|
||||
["Step &Over"] = "Paso sin entrar", -- src\editor\menu_project.lua
|
||||
["Step O&ut"] = "Paso fuera", -- src\editor\menu_project.lua
|
||||
["Step into"] = "Paso dentro", -- src\editor\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\menu_project.lua
|
||||
["Step out of the current function"] = "Hasta salir de la función actual", -- src\editor\menu_project.lua
|
||||
["Step over"] = "Paso sin entrar", -- src\editor\menu_project.lua
|
||||
["Stop debugging and continue running the process"] = nil, -- src\editor\menu_project.lua
|
||||
["Stop the currently running process"] = "Parar el proceso en ejecución", -- src\editor\menu_project.lua
|
||||
["Switch to or from full screen mode"] = "Conmutar el modo de pantalla completa", -- src\editor\menu_view.lua
|
||||
["Text not found."] = nil, -- src\editor\findreplace.lua
|
||||
["The API file must be located in a subdirectory of the API directory."] = "El archivo de API debe ser almacenado en un subdirectorio del directorio de API.", -- src\editor\autocomplete.lua
|
||||
["Toggle Bookmark"] = nil, -- src\editor\menu_edit.lua
|
||||
["Toggle Break&point"] = "Conmutar punto de ruptura", -- src\editor\menu_project.lua
|
||||
["Toggle breakpoint"] = "Conmutar punto de ruptura", -- src\editor\gui.lua, src\editor\menu_project.lua
|
||||
["Toggle bookmark"] = nil, -- src\editor\menu_edit.lua
|
||||
["Toggle breakpoint"] = "Conmutar punto de ruptura", -- src\editor\menu_project.lua
|
||||
["Tr&ace"] = "Traza", -- src\editor\menu_project.lua
|
||||
["Trace execution showing each executed line"] = "Traza de ejecución mostrando cada línea ejecutada", -- src\editor\menu_project.lua
|
||||
["Unable to create directory '%s'."] = nil, -- src\editor\filetree.lua
|
||||
["Unable to create file '%s'."] = nil, -- src\editor\filetree.lua
|
||||
["Unable to delete directory '%s': %s"] = nil, -- src\editor\filetree.lua
|
||||
["Unable to load file '%s'."] = "No se pudo cargar el archivo '%s'.", -- src\editor\commands.lua
|
||||
["Unable to rename file '%s'."] = nil, -- src\editor\filetree.lua
|
||||
["Unable to save file '%s': %s"] = "No se pudo guardar el archivo '%s': %s", -- src\editor\commands.lua
|
||||
@@ -269,14 +293,14 @@ return {
|
||||
["Use '%s' to show line endings and '%s' to convert them."] = nil, -- src\editor\commands.lua
|
||||
["Use 'clear' to clear the shell output and the history."] = "Usa 'clear' para limpiar la consola de salida y el historial.", -- src\editor\shellbox.lua
|
||||
["Use Shift-Enter for multiline code."] = "Usa <Shift-Enter> para código multilínea.", -- src\editor\shellbox.lua
|
||||
["Value"] = "Valor", -- src\editor\debugger.lua
|
||||
["View the outline window"] = nil, -- src\editor\menu_view.lua
|
||||
["View the output/console window"] = "Ver ventana de salida/consola", -- src\editor\menu_view.lua
|
||||
["View the project/filetree window"] = "Ver la ventana de proyecto/árbol de archivos", -- src\editor\menu_view.lua
|
||||
["View the stack window"] = "Ver la ventana de la pila de ejecución", -- src\editor\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\menu_view.lua
|
||||
["View the watch window"] = "Ver la ventana de observación", -- src\editor\menu_view.lua
|
||||
["Watch"] = nil, -- src\editor\debugger.lua
|
||||
["Welcome to the interactive Lua interpreter."] = "Bienvenido al intérprete interactico de Lua.", -- src\editor\shellbox.lua
|
||||
["Wrap ar&ound"] = nil, -- src\editor\findreplace.lua
|
||||
["Wrap around"] = nil, -- src\editor\findreplace.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
|
||||
|
||||
244
cfg/i18n/fr.lua
244
cfg/i18n/fr.lua
@@ -2,19 +2,20 @@ return {
|
||||
[0] = function(c) return c == 1 and 1 or 2 end, -- plural
|
||||
["%d instance"] = {"%d occurrence", "%d occurrences"}, -- src\editor\findreplace.lua
|
||||
["%s event failed: %s"] = "L'événement %s a échoué : %s", -- src\editor\package.lua
|
||||
["&About"] = "À &propos", -- src\editor\menu_help.lua
|
||||
["&About"] = "&À propos", -- src\editor\menu_help.lua
|
||||
["&Add Watch"] = "&Ajouter une expression", -- src\editor\debugger.lua
|
||||
["&Break"] = "&Interrompre", -- src\editor\menu_project.lua
|
||||
["&Close Page"] = "&Fermer la page", -- src\editor\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"] = "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
|
||||
@@ -22,18 +23,17 @@ return {
|
||||
["&Find Next"] = "&Rechercher", -- src\editor\findreplace.lua
|
||||
["&Find"] = "&Rechercher", -- src\editor\menu_search.lua
|
||||
["&Fold/Unfold All"] = "Re&plier/Déplier tout", -- src\editor\menu_edit.lua
|
||||
["&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
|
||||
["&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
|
||||
@@ -43,137 +43,151 @@ return {
|
||||
["&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
|
||||
["&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
|
||||
["&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
|
||||
["&Undo"] = "&Annuler", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Up"] = "Vers le &haut", -- src\editor\findreplace.lua
|
||||
["&View"] = "&Affichage", -- src\editor\menu_view.lua
|
||||
["&Watch Window"] = "&Expressions espionnes", -- src\editor\menu_view.lua
|
||||
[".&bak on Replace"] = ".&bak avant remplacement", -- src\editor\findreplace.lua
|
||||
["&Watch Window"] = "E&xpressions espionnes", -- src\editor\menu_view.lua
|
||||
[".bak on replace"] = ".bak avant remplacement", -- src\editor\findreplace.lua
|
||||
["About %s"] = "À propos de %s", -- src\editor\menu_help.lua
|
||||
["Add 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
|
||||
["Bookmark"] = "Marque-pages", -- src\editor\menu_edit.lua
|
||||
["Break execution at the next executed line of code"] = "Interrompt l'exécution à la ligne suivante", -- src\editor\menu_project.lua
|
||||
["C&lear Output Window"] = "E&ffacer la fenêtre de sortie", -- src\editor\gui.lua, src\editor\menu_project.lua
|
||||
["C&omment/Uncomment"] = "Co&mmenter/Décommenter", -- src\editor\menu_edit.lua
|
||||
["Can't debug the script in the active editor window."] = "Impossible de déboguer le script dans la fenêtre d'édition active.", -- src\editor\debugger.lua
|
||||
["Can't evaluate the expression while the application is running."] = "Impossible d'évaluer l'expression pendant que l'application est en cours d'exécution.", -- src\editor\debugger.lua
|
||||
["Can't find file '%s' in the current project to activate for debugging. Update the project or open the file in the editor before debugging."] = "Impossible de trouver le fichier '%s' dans le projet courant pour permettre le débogage. Mettez le projet à jour ou ouvrez le fichier dans l'éditeur avant débogage.", -- src\editor\debugger.lua
|
||||
["Can't open file '%s': %s"] = "Impossible d'ouvrir le fichier '%s': %s", -- src\editor\singleinstance.lua
|
||||
["Can't process auto-recovery record; invalid format: %s."] = "Impossible de lire la récupération automatique ; format invalide : %s.", -- src\editor\commands.lua
|
||||
["Can't run the entry point script ('%s')."] = "Impossible d'exécuter le point d'entrée du script ('%s').", -- src\editor\debugger.lua
|
||||
["Can't start debugger server at %s:%d: %s."] = "Impossible de lancer le serveur de débogage à %s:%d: %s." , -- src\editor\debugger.lua
|
||||
["Can't start debugging session due to internal error '%s'."] = "Impossible de lancer la session de débogage : erreur interne '%s'.", -- src\editor\debugger.lua
|
||||
["Can't start debugging without an opened file or with the current file not being saved ('%s')."] = "Impossible de lancer le débogage si aucun fichier n'est ouvert ou si le fichier courant n'a pas été enregistré ('%s').", -- src\editor\debugger.lua
|
||||
["Can't stop debugger server as it is not started."] = "Impossible d'arrêter le serveur de débogage car il n'a pas été démarré", -- src\editor\debugger.lua
|
||||
["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
|
||||
["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 a project directory"] = "Choisir un répertoire de projet", -- src\editor\findreplace.lua, src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Choose..."] = "Choisir...", -- src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Clear Items"] = "Effacer les éléments", -- src\editor\menu_file.lua
|
||||
["Clear items from this list"] = "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
|
||||
["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\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
|
||||
["Debugging suspended at '%s:%s' (couldn't activate the file)."] = "Débogage interrompu à '%s:%s' (impossible d'activer le fichier).", -- src\editor\debugger.lua
|
||||
["Detach &Process"] = "Détacher le p&rocessus", -- src\editor\menu_project.lua
|
||||
["Directory"] = "Répertoire ", -- src\editor\findreplace.lua
|
||||
["Do you want to delete '%s'?"] = "Voulez-vous effacer '%s'?", -- src\editor\filetree.lua
|
||||
["Do you want to overwrite it?"] = "Voulez-vous l'écraser?", -- src\editor\commands.lua
|
||||
["Do you want to delete '%s'?"] = "Voulez-vous effacer '%s' ?", -- src\editor\filetree.lua
|
||||
["Do you want to overwrite it?"] = "Voulez-vous l'écraser ?", -- src\editor\commands.lua
|
||||
["Do you want to reload it?"] = "Voulez-vous le recharger ?", -- src\editor\editor.lua
|
||||
["Do you want to save the changes to '%s'?"] = "Voulez-vous enregistrer les modifications dans '%s' ?", -- src\editor\commands.lua
|
||||
["E&xit"] = "&Quitter", -- src\editor\menu_file.lua
|
||||
["Enter Lua code and press Enter to run it."] = "Saisissez du code Lua et appuyez sur <Entrée> pour l´exécuter.", -- src\editor\shellbox.lua
|
||||
["Enter 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\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 in files"] = "Rechercher dans les fichiers", -- src\editor\findreplace.lua
|
||||
["Find and insert library function"] = "Recherche et insère une fonction d'une bibliothèque", -- src\editor\menu_search.lua
|
||||
["Find and replace text in files"] = "Recherche et remplace le texte dans les fichiers", -- src\editor\menu_search.lua
|
||||
["Find and replace text"] = "Recherche et remplace le texte", -- src\editor\menu_search.lua
|
||||
["Find text in files"] = "Recherche le texte dans les fichiers", -- src\editor\menu_search.lua
|
||||
["Find text"] = "Recherche le texte", -- src\editor\menu_search.lua
|
||||
["Find the earlier text occurence"] = "Recherche l'occurrence précédente du texte", -- src\editor\menu_search.lua
|
||||
["Find the next text occurrence"] = "Recherche l'occurrence suivante du texte", -- src\editor\menu_search.lua
|
||||
["Find"] = "Rechercher ", -- src\editor\findreplace.lua
|
||||
["Fold or unfold all code folds"] = "Replier ou déplier tous les blocs de code", -- src\editor\menu_edit.lua
|
||||
["Found auto-recovery record and restored saved session."] = "Une récupération automatique a été trouvé et la session a été restaurée.", -- src\editor\commands.lua
|
||||
["Fold or unfold all code folds"] = "Replie ou déplie tous les blocs de code", -- src\editor\menu_edit.lua
|
||||
["Found auto-recovery record and restored saved session."] = "Une récupération automatique a été trouvée et la session a été restaurée.", -- src\editor\commands.lua
|
||||
["Found"] = "Occurrences trouvées :", -- src\editor\findreplace.lua
|
||||
["Full &Screen"] = "&Plein écran", -- src\editor\menu_view.lua
|
||||
["Full &Screen"] = "Plein é&cran", -- src\editor\menu_view.lua
|
||||
["Go To Definition"] = "Aller à la définition", -- src\editor\editor.lua
|
||||
["Go To Line"] = "Aller à la ligne", -- src\editor\menu_search.lua
|
||||
["Go To File..."] = "Aller au fichier...", -- src\editor\menu_search.lua
|
||||
["Go To Line..."] = "Aller à la ligne...", -- src\editor\menu_search.lua
|
||||
["Go To Next Bookmark"] = "Aller au marque-page suivant", -- src\editor\menu_edit.lua
|
||||
["Go To Previous Bookmark"] = "Aller au marque-page précédent", -- src\editor\menu_edit.lua
|
||||
["Go to a selected line"] = "Aller à la ligne sélectionnée", -- src\editor\menu_search.lua
|
||||
["Go To Symbol..."] = "Aller au symbole...", -- src\editor\menu_search.lua
|
||||
["Go to file"] = "Permet d'accéder directement à un fichier", -- src\editor\menu_search.lua
|
||||
["Go to line"] = "Permet d'accéder directement à une ligne", -- src\editor\menu_search.lua
|
||||
["Go to symbol"] = "Permet d'accéder directement à un symbole", -- src\editor\menu_search.lua
|
||||
["Hide '.%s' Files"] = "Masquer les fichiers '.%s'", -- src\editor\filetree.lua
|
||||
["INS"] = "INS", -- src\editor\editor.lua
|
||||
["Ignored error in debugger initialization code: %s."] = "Une erreur dans le code d'initialisation du debogage a été ignorée: %s.", -- src\editor\debugger.lua
|
||||
["In Files"] = "Dans les fichiers", -- src\editor\findreplace.lua
|
||||
["Jump to a function definition..."] = "Aller à la définition de fonction...", -- src\editor\editor.lua
|
||||
["Insert Library Function..."] = "Insérer une fonction d'une bibliothèque...", -- src\editor\menu_search.lua
|
||||
["Known Files"] = "Fichiers connus", -- src\editor\commands.lua
|
||||
["Ln: %d"] = "Lig : %d", -- src\editor\editor.lua
|
||||
["Local console"] = "Console locale", -- src\editor\gui.lua, src\editor\shellbox.lua
|
||||
["Lua &Interpreter"] = "Interpréteur L&ua", -- src\editor\menu_project.lua
|
||||
["Mapped remote request for '%s' to '%s'."] = "La requête distante pour '%s' a été associée à '%s'.", -- src\editor\debugger.lua
|
||||
["Match &case"] = "Respecter la &casse", -- src\editor\findreplace.lua
|
||||
["Match &whole word"] = "&Mot entier uniquement", -- src\editor\findreplace.lua
|
||||
["Mixed end-of-line encodings detected."] = "Plusieurs codages de fin de ligne détectés.", -- src\editor\commands.lua
|
||||
["New &File"] = "Nouveau &Fichier", -- src\editor\filetree.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 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\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
|
||||
["Paste text from the clipboard"] = "Colle le texte depuis le presse-papiers", -- src\editor\menu_edit.lua
|
||||
["Preferences"] = "Préférences", -- src\editor\menu_edit.lua
|
||||
["Prepend '!' to force local execution."] = "Préfixez par '!' pour forcer une execution locale.", -- src\editor\shellbox.lua
|
||||
["Prepend '=' to show complex values on multiple lines."] = "Préfixez par '=' pour afficher les valeurs complexes sur plusieurs lignes.", -- src\editor\shellbox.lua
|
||||
["Press cancel to abort."] = "Cliquez sur Annuler pour annuler.", -- src\editor\commands.lua
|
||||
["Program '%s' started in '%s' (pid: %d)."] = "Programme '%s' démarré dans '%s' (pid : %d).", -- src\editor\output.lua
|
||||
@@ -184,98 +198,108 @@ 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
|
||||
["R/O"] = "R/O", -- src\editor\editor.lua
|
||||
["R/W"] = "R/W", -- src\editor\editor.lua
|
||||
["Re&place In Files"] = "Remp&lacer dans les fichiers", -- src\editor\menu_search.lua
|
||||
["Re-indent selected lines"] = "Ré-indente les lignes sélectionnées", -- src\editor\menu_edit.lua
|
||||
["Recent &Projects"] = "&Projets récents", -- src\editor\menu_file.lua
|
||||
["Recent Files"] = "Fichiers récents", -- src\editor\menu_file.lua
|
||||
["Redo last edit undone"] = "Rétablir la dernière modification", -- src\editor\menu_edit.lua
|
||||
["Redo last edit undone"] = "Rétablit la dernière modification", -- src\editor\menu_edit.lua
|
||||
["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\findreplace.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 all"] = "Remplacer tout", -- src\editor\findreplace.lua
|
||||
["Replace All Selections"] = "Remplacer toutes les sélections", -- src\editor\editor.lua
|
||||
["Replace"] = "Remplacer par ", -- src\editor\findreplace.lua
|
||||
["Replaced an invalid UTF8 character with %s."] = "Un caractère UTF8 invalide a été remplacé par %s.", -- src\editor\commands.lua
|
||||
["Replaced"] = "Occurrences remplacées :", -- src\editor\findreplace.lua
|
||||
["Replacing"] = "Remplacement de", -- src\editor\findreplace.lua
|
||||
["Reset to default layout"] = "Restaurer l'affichage par défaut", -- src\editor\menu_view.lua
|
||||
["Reset to default layout"] = "Restaure l'affichage par défaut", -- src\editor\menu_view.lua
|
||||
["Run As Scratchpad"] = "Exécuter comme brouillon", -- src\editor\menu_project.lua
|
||||
["Run as Scratchpad"] = "Exécuter comme brouillon", -- src\editor\menu_project.lua
|
||||
["S&top Debugging"] = "&Arrêter le débogage", -- src\editor\menu_project.lua
|
||||
["S&top Process"] = "&Arrêter le processus", -- src\editor\menu_project.lua
|
||||
["Save &As..."] = "Enregistrer &sous...", -- src\editor\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\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\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
|
||||
["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 all text in the editor"] = "Sélectionne tout le texte dans l'éditeur", -- src\editor\menu_edit.lua
|
||||
["Select And Find Next"] = "Sélectionner et rechercher le suivant", -- src\editor\menu_search.lua
|
||||
["Select And Find Previous"] = "Sélectionner et rerchercher le précédent", -- src\editor\menu_search.lua
|
||||
["Select the word under cursor and find its next occurrence"] = "Sélectionne le mot sous le curseur et recherche son occurence suivante", -- src\editor\menu_search.lua
|
||||
["Select the word under cursor and find its previous occurrence"] = "Sélectionne le mot sous le curseur et recherche son occurence précédente", -- src\editor\menu_search.lua
|
||||
["Set From Current File"] = "Définir à partir du fichier courant", -- src\editor\menu_project.lua
|
||||
["Set project directory from current file"] = "Définit le répertoire de projet à partir du fichier courant", -- src\editor\menu_project.lua
|
||||
["Set the interpreter to be used"] = "Définit l'interpréteur à utiliser", -- src\editor\menu_project.lua
|
||||
["Set the project directory to be used"] = "Définit le répertoire de projet à utiliser", -- src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Settings: System"] = "Paramètres : Système", -- src\editor\menu_edit.lua
|
||||
["Settings: User"] = "Paramètres : Utilisateur", -- src\editor\menu_edit.lua
|
||||
["Show &Tooltip"] = "Afficher l'info-&bulle", -- src\editor\menu_edit.lua
|
||||
["Show All Files"] = "Afficher tous les fichiers", -- src\editor\filetree.lua
|
||||
["Show Hidden Files"] = "Afficher les fichiers masqués", -- src\editor\filetree.lua
|
||||
["Show Location"] = "Afficher l'emplacement", -- src\editor\gui.lua, src\editor\filetree.lua
|
||||
["Show tooltip for current position; place cursor after opening bracket of function"] = "Afficher l'info-bulle pour la position actuelle ; placez le curseur après la parenthèse ouvrante de la fonction", -- src\editor\menu_edit.lua
|
||||
["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 files previously hidden"] = "Affiche les fichiers précédemment masqués", -- src\editor\filetree.lua
|
||||
["Show tooltip for current position; place cursor after opening bracket of function"] = "Affiche l'info-bulle pour la position courante ; placez le curseur après la parenthèse ouvrante de la fonction", -- src\editor\menu_edit.lua
|
||||
["Show/Hide the status bar"] = "Affiche/Masque la barre d'état", -- src\editor\menu_view.lua
|
||||
["Show/Hide the toolbar"] = "Affiche/Masque la barre d'outils", -- src\editor\menu_view.lua
|
||||
["Sort selected lines"] = "Trie les lignes sélectionnées", -- src\editor\menu_edit.lua
|
||||
["Source"] = "Code", -- src\editor\menu_edit.lua
|
||||
["Stack"] = "Pile d'exécution", -- src\editor\debugger.lua
|
||||
["Start &Debugging"] = "Lancer le &débogage", -- src\editor\menu_project.lua
|
||||
["Start 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\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\menu_project.lua
|
||||
["Step out of the current function"] = "Sort de la fonction courante", -- src\editor\menu_project.lua
|
||||
["Step over"] = "Enjambe l'instruction suivante", -- src\editor\menu_project.lua
|
||||
["Stop debugging and continue running the process"] = "Arrête le débogage et continue l'exécution du processus", -- src\editor\menu_project.lua
|
||||
["Stop the currently running process"] = "Arrête le processus en cours d'exécution", -- src\editor\menu_project.lua
|
||||
["Switch to or from full screen mode"] = "Active ou désactive le mode plein écran", -- src\editor\menu_view.lua
|
||||
["Text not found."] = "Texte non trouvé.", -- src\editor\findreplace.lua
|
||||
["The API file must be located in a subdirectory of the API directory."] = "Le fichier d'API doit être placé dans un sous-répertoire du répertoire d'API.", -- src\editor\autocomplete.lua
|
||||
["Toggle Bookmark"] = "Créer/Supprimer un marque-page", -- src\editor\menu_edit.lua
|
||||
["Toggle Break&point"] = "Créer/Supprimer un &point d'arrêt", -- src\editor\menu_project.lua
|
||||
["Toggle breakpoint"] = "Créer ou supprimer un point d'arrêt", -- src\editor\gui.lua, src\editor\menu_project.lua
|
||||
["Toggle bookmark"] = "Crée ou supprime un marque-page", -- src\editor\menu_edit.lua
|
||||
["Toggle breakpoint"] = "Crée ou supprime un point d'arrêt", -- src\editor\menu_project.lua
|
||||
["Tr&ace"] = "&Tracer", -- src\editor\menu_project.lua
|
||||
["Trace execution showing each executed line"] = "Tracer l'exécution en montrant chaque ligne de code exécutée", -- src\editor\menu_project.lua
|
||||
["Trace execution showing each executed line"] = "Trace l'exécution en affichant chaque ligne de code exécutée", -- src\editor\menu_project.lua
|
||||
["Unable to create directory '%s'."] = "Impossible de créer le répertoire '%s'.", -- src\editor\filetree.lua
|
||||
["Unable to create file '%s'."] = "Impossible de créer le fichier '%s'.", -- src\editor\filetree.lua
|
||||
["Unable to delete directory '%s': %s"] = "Impossible de supprimer le répertoire '%s': %s", -- src\editor\filetree.lua
|
||||
["Unable to load file '%s'."] = "Impossible de charger le le fichier '%s'.", -- src\editor\commands.lua
|
||||
["Unable to rename file '%s'."] = "Impossible de renommer le fichier '%s'.", -- src\editor\filetree.lua
|
||||
["Unable to save file '%s': %s"] = "Impossible d'enregistrer le fichier '%s' : %s", -- src\editor\commands.lua
|
||||
["Unable to stop program (pid: %d), code %d."] = "Impossible d'arrêter le programme (pid : %d), code %d.", -- src\editor\debugger.lua
|
||||
["Undo last edit"] = "Annuler la dernière modification", -- src\editor\menu_edit.lua
|
||||
["Undo last edit"] = "Annule la dernière modification", -- src\editor\menu_edit.lua
|
||||
["Use '%s' to see full description."] = "Utilisez '%s' pour voir la description complète.", -- src\editor\editor.lua
|
||||
["Use '%s' to show line endings and '%s' to convert them."] = "Utilisez '%s' pour afficher les fins de ligne et '%s' pour les convertir.", -- src\editor\commands.lua
|
||||
["Use 'clear' to clear the shell output and the history."] = "Utilisez 'clear' pour effacer la sortie console et l´historique.", -- src\editor\shellbox.lua
|
||||
["Use Shift-Enter for multiline code."] = "Appuyez sur <Shift-Entrée> pour du code multiligne.", -- src\editor\shellbox.lua
|
||||
["Value"] = "Valeur", -- src\editor\debugger.lua
|
||||
["View the output/console window"] = "Afficher la fenêtre de sortie/console", -- src\editor\menu_view.lua
|
||||
["View the project/filetree window"] = "Afficher la fenêtre d'explorateur de projet", -- src\editor\menu_view.lua
|
||||
["View the stack window"] = "Afficher la fenêtre de pile d'exécution", -- src\editor\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 outline window"] = "Affiche la fenêtre de structure", -- src\editor\menu_view.lua
|
||||
["View the output/console window"] = "Affiche la fenêtre de sortie/console", -- src\editor\menu_view.lua
|
||||
["View the project/filetree window"] = "Affiche la fenêtre d'explorateur de projet", -- src\editor\menu_view.lua
|
||||
["View the stack window"] = "Affiche la fenêtre de pile d'exécution", -- src\editor\menu_view.lua
|
||||
["View the watch window"] = "Affiche la fenêtre d'expressions espionnes", -- src\editor\menu_view.lua
|
||||
["Watch"] = "Expressions espionnes", -- src\editor\debugger.lua
|
||||
["Welcome to the interactive Lua interpreter."] = "Bienvenue dans l´interpréteur interactif Lua.", -- src\editor\shellbox.lua
|
||||
["Wrap ar&ound"] = "B&oucler", -- src\editor\findreplace.lua
|
||||
["Wrap around"] = "Boucler", -- src\editor\findreplace.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
|
||||
|
||||
126
cfg/i18n/it.lua
126
cfg/i18n/it.lua
@@ -8,13 +8,14 @@ return {
|
||||
["&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"] = "&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
|
||||
@@ -24,16 +25,15 @@ return {
|
||||
["&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
|
||||
["&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
|
||||
@@ -47,11 +47,11 @@ return {
|
||||
["&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
|
||||
["&Undo"] = "Annulla", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Up"] = "Verso l'alto", -- src\editor\findreplace.lua
|
||||
["&View"] = "Visualizza", -- src\editor\menu_view.lua
|
||||
["&Watch Window"] = "Finestra Espressioni di Controllo", -- src\editor\menu_view.lua
|
||||
[".&bak on Replace"] = ".bak su Sostituisci", -- src\editor\findreplace.lua
|
||||
[".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
|
||||
@@ -62,11 +62,13 @@ return {
|
||||
["Auto Complete Identifiers"] = "Autocompletamento identificatori", -- src\editor\menu_edit.lua
|
||||
["Auto complete while typing"] = "Autocompletamento in linea", -- src\editor\menu_edit.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\menu_project.lua
|
||||
["C&lear Output Window"] = "Pulisci finestra di output", -- src\editor\gui.lua, src\editor\menu_project.lua
|
||||
["C&omment/Uncomment"] = "Commenta/Scommenta", -- src\editor\menu_edit.lua
|
||||
["Can't debug the script in the active editor window."] = "Impossibile farte debug dello script nella finestra attiva", -- src\editor\debugger.lua
|
||||
["Can't evaluate the expression while the application is running."] = "Impossibile interpretare l'espressione se l'applicazione è in esecuzione.", -- src\editor\debugger.lua
|
||||
["Can't find file '%s' in the current project to activate for debugging. Update the project or open the file in the editor before debugging."] = "File '%s' non trovato nel progetto per attivare il debug. Modificare il progetto o apire il file prima di lanciare il debug.", -- src\editor\debugger.lua
|
||||
["Can't open file '%s': %s"] = "Impossibile aprire il file '%s': %s", -- src\editor\singleinstance.lua
|
||||
["Can't process auto-recovery record; invalid format: %s."] = "Impossibile procedere all'auto-recovery; Formato non valido: %s.", -- src\editor\commands.lua
|
||||
["Can't run the entry point script ('%s')."] = "Impossibile eseguire il punto di ingresos dello script (%s).", -- src\editor\debugger.lua
|
||||
["Can't start debugger server at %s:%d: %s."] = "Impossibile lanciare il server debugger a %s:%d: %s.", -- src\editor\debugger.lua
|
||||
@@ -75,7 +77,7 @@ return {
|
||||
["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 a project directory"] = "Scegli la directory di un progetto", -- src\editor\findreplace.lua, src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Choose..."] = "Scegli...", -- src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Clear Items"] = "Pulisci elementi", -- src\editor\menu_file.lua
|
||||
["Clear items from this list"] = "Pulisci elementi della lista", -- src\editor\menu_file.lua
|
||||
@@ -94,17 +96,18 @@ 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\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
|
||||
["Do you want to delete '%s'?"] = "Vuoi eliminare '%s'?", -- src\editor\filetree.lua
|
||||
@@ -114,7 +117,7 @@ return {
|
||||
["E&xit"] = "Uscita", -- src\editor\menu_file.lua
|
||||
["Enter Lua code and press Enter to run it."] = "Inserisci codice Lua e premi <Enter> per eseguirlo.", -- src\editor\shellbox.lua
|
||||
["Enter 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
|
||||
@@ -125,10 +128,9 @@ return {
|
||||
["Execute the current project/file"] = "Esegue il progetto/file corrente", -- src\editor\menu_project.lua
|
||||
["Execution error"] = "Errore di esecuzione", -- src\editor\debugger.lua
|
||||
["Exit program"] = "Uscita dal programma", -- src\editor\menu_file.lua
|
||||
["Expr"] = "Expr.", -- src\editor\debugger.lua
|
||||
["Expression"] = "Espressione", -- src\editor\debugger.lua
|
||||
["File '%s' has been modified on disk."] = "Il file '%s' e' stato modificato sul disco.", -- src\editor\editor.lua
|
||||
["File '%s' has more recent timestamp than restored '%s'; please review before saving."] = "Il file '%s' ha un timestamp più recente di quello ripristinato '%s'; verificare prima di salvare.", -- src\editor\commands.lua
|
||||
["File '%s' 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
|
||||
@@ -136,11 +138,12 @@ return {
|
||||
["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 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\menu_search.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\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
|
||||
@@ -149,32 +152,43 @@ return {
|
||||
["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 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 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
|
||||
["Ignored error in debugger initialization code: %s."] = "Errore ignorato durante l'inizializzaione del debugger codice: %s.", -- src\editor\debugger.lua
|
||||
["In Files"] = "Nei Files", -- src\editor\findreplace.lua
|
||||
["Jump to a function definition..."] = "Salta alla definizione della funzione...", -- src\editor\editor.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
|
||||
["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
|
||||
["Match case"] = "Maiuscole/Minuscole", -- src\editor\findreplace.lua
|
||||
["Match whole word"] = "Intera parola", -- src\editor\findreplace.lua
|
||||
["Mixed end-of-line encodings detected."] = "Trovata codifica Fine-Riga mista.", -- src\editor\commands.lua
|
||||
["Navigate"] = "Naviga", -- src\editor\menu_search.lua
|
||||
["New &File"] = "Nuovo &File", -- src\editor\filetree.lua
|
||||
["OVR"] = "OVR", -- src\editor\editor.lua
|
||||
["Open 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\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
|
||||
["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
|
||||
["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
|
||||
@@ -184,81 +198,91 @@ 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
|
||||
["R/O"] = "R/O", -- src\editor\editor.lua
|
||||
["R/W"] = "R/W", -- src\editor\editor.lua
|
||||
["Re&place In Files"] = "Sostituisci nei files", -- src\editor\menu_search.lua
|
||||
["Re-indent selected lines"] = "Re-indenta le linee selezionate", -- src\editor\menu_edit.lua
|
||||
["Recent &Projects"] = "Progetti Recenti", -- src\editor\menu_file.lua
|
||||
["Recent Files"] = "Files recenti", -- src\editor\menu_file.lua
|
||||
["Redo last edit undone"] = "Ripeti l'ultima azione annullata", -- src\editor\menu_edit.lua
|
||||
["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\findreplace.lua
|
||||
["Remote console"] = "Console remota", -- src\editor\shellbox.lua
|
||||
["Rename All Instances"] = "Rinomina tutte le occorrenze", -- src\editor\editor.lua
|
||||
["Replace A&ll"] = "Sostituisci Tutto", -- src\editor\findreplace.lua
|
||||
["Replace all"] = "Sostituisci Tutto", -- src\editor\findreplace.lua
|
||||
["Replace All Selections"] = "Sostituisci Tutte le Selezioni", -- src\editor\editor.lua
|
||||
["Replace"] = "Sostituisci", -- src\editor\findreplace.lua
|
||||
["Replaced an invalid UTF8 character with %s."] = "Sostituito un carattere UTF8 invalido con %s.", -- src\editor\commands.lua
|
||||
["Replaced"] = "Sostituiti :", -- src\editor\findreplace.lua
|
||||
["Replacing"] = "Sostituzione", -- src\editor\findreplace.lua
|
||||
["Reset to default layout"] = "Ritorna al default layout", -- src\editor\menu_view.lua
|
||||
["Run As Scratchpad"] = "Esegui in Scratchpad (Live coding)", -- src\editor\menu_project.lua
|
||||
["Run as Scratchpad"] = "Esegui in Scratchpad (Live coding)", -- src\editor\menu_project.lua
|
||||
["S&top Debugging"] = "Ferma il debugger", -- src\editor\menu_project.lua
|
||||
["S&top Process"] = "Ferma il processo", -- src\editor\menu_project.lua
|
||||
["Save &As..."] = "S&alva con nome...", -- src\editor\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\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\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
|
||||
["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 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 And Find Next"] = "Seleziona e trova successivo", -- src\editor\menu_search.lua
|
||||
["Select And Find Previous"] = "Seleziona e trova precedente", -- src\editor\menu_search.lua
|
||||
["Select the word under cursor and find its next occurrence"] = "Seleziona la parola e trova successivo", -- src\editor\menu_search.lua
|
||||
["Select the word under cursor and find its previous occurrence"] = "Seleziona la parola e trova precedente", -- src\editor\menu_search.lua
|
||||
["Set From Current File"] = "Impostato da file corrente", -- src\editor\menu_project.lua
|
||||
["Set project directory from current file"] = "Definisci la directory del progeetto dal file corrente", -- src\editor\gui.lua, src\editor\menu_project.lua
|
||||
["Set project directory from current file"] = "Definisci la directory del progeetto dal file corrente", -- src\editor\menu_project.lua
|
||||
["Set the interpreter to be used"] = "Definisci l'interprete da utilizzare", -- src\editor\menu_project.lua
|
||||
["Set the project directory to be used"] = "Imposta la directory di progetto da usare", -- src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Settings: System"] = "Impostazioni: Sistema", -- src\editor\menu_edit.lua
|
||||
["Settings: User"] = "Impostazioni: Utente", -- src\editor\menu_edit.lua
|
||||
["Show &Tooltip"] = "Mos&tra i consigli", -- src\editor\menu_edit.lua
|
||||
["Show All Files"] = "Mostra Tutti i File", -- src\editor\filetree.lua
|
||||
["Show Hidden Files"] = "Mostra File nascosti", -- src\editor\filetree.lua
|
||||
["Show Location"] = "Mostra posizione", -- src\editor\gui.lua, src\editor\filetree.lua
|
||||
["Show all files"] = "Mostra tutti i file", -- src\editor\filetree.lua
|
||||
["Show files previously hidden"] = "Mostra i file precedentemente nascosti", -- src\editor\filetree.lua
|
||||
["Show tooltip for current position; place cursor after opening bracket of function"] = "Mostra i consigli per la posizione corrente; muovi il cursore dopo la parentesi o la funzione", -- src\editor\menu_edit.lua
|
||||
["Show/Hide the status bar"] = "Mostra/Nascondi la barra di stato", -- src\editor\menu_view.lua
|
||||
["Show/Hide the toolbar"] = "Mostra/Nascondi la barra degli strumenti", -- src\editor\menu_view.lua
|
||||
["Sort selected lines"] = "Ordina le righe selezionate", -- src\editor\menu_edit.lua
|
||||
["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
|
||||
["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\menu_project.lua
|
||||
["Step out of the current function"] = "Contina fino all'uscita della funzione", -- src\editor\menu_project.lua
|
||||
["Step over"] = "Continua senza entrare nella funzione", -- src\editor\menu_project.lua
|
||||
["Stop debugging and continue running the process"] = "Ferma il debug e continua l'esecuzione del processo", -- src\editor\menu_project.lua
|
||||
["Stop the currently running process"] = "Ferma il processo in esecuzione", -- src\editor\menu_project.lua
|
||||
["Switch to or from full screen mode"] = "Passa da tutto schermo a finestra", -- src\editor\menu_view.lua
|
||||
["Text not found."] = "Testo non trovato.", -- src\editor\findreplace.lua
|
||||
["The API file must be located in a subdirectory of the API directory."] = "Il file API deve essere presente in una sottodirectory o nella direcotory API.", -- src\editor\autocomplete.lua
|
||||
["Toggle Bookmark"] = "Attiva/Disattiva Segnalibro", -- src\editor\menu_edit.lua
|
||||
["Toggle Break&point"] = "Attiva/Disattiva Break&point", -- src\editor\menu_project.lua
|
||||
["Toggle breakpoint"] = "Attiva/Disattiva Breakpoint", -- src\editor\gui.lua, src\editor\menu_project.lua
|
||||
["Toggle bookmark"] = "Attiva/Disattiva Segnalibro", -- src\editor\menu_edit.lua
|
||||
["Toggle breakpoint"] = "Attiva/Disattiva Breakpoint", -- src\editor\menu_project.lua
|
||||
["Tr&ace"] = "Tr&ace", -- src\editor\menu_project.lua
|
||||
["Trace execution showing each executed line"] = "Traccia l'esecuzione mostrando le righe eseguite", -- src\editor\menu_project.lua
|
||||
["Unable to create directory '%s'."] = "Impossibile creare la directory '%s'.", -- src\editor\filetree.lua
|
||||
["Unable to create file '%s'."] = "Impossibile creare il file '%s'.", -- src\editor\filetree.lua
|
||||
["Unable to delete directory '%s': %s"] = "Impossibile cancellare la directory '%s': %s", -- src\editor\filetree.lua
|
||||
["Unable to load file '%s'."] = "Impossibile aprire il file '%s'.", -- src\editor\commands.lua
|
||||
["Unable to rename file '%s'."] = "Impossibile rinominare il file '%s'.", -- src\editor\filetree.lua
|
||||
["Unable to save file '%s': %s"] = "Impossibile salvare il file '%s': %s", -- src\editor\commands.lua
|
||||
@@ -268,14 +292,14 @@ return {
|
||||
["Use '%s' to show line endings and '%s' to convert them."] = "Utilizza '%s' per vedere la fine della riga e '%s' per convertirli.", -- src\editor\commands.lua
|
||||
["Use 'clear' to clear the shell output and the history."] = "Utilizza 'clear' per pulire l`output e lo storico.", -- src\editor\shellbox.lua
|
||||
["Use Shift-Enter for multiline code."] = "Premi <Shift-Invio> per inserire piu` righe di codice.", -- src\editor\shellbox.lua
|
||||
["Value"] = "Valore", -- src\editor\debugger.lua
|
||||
["View the outline window"] = "Visualizza la finestra di outline", -- src\editor\menu_view.lua
|
||||
["View the output/console window"] = "Mostra la finestra di output/console", -- src\editor\menu_view.lua
|
||||
["View the project/filetree window"] = "Mostra la finestra di progetto/explorer", -- src\editor\menu_view.lua
|
||||
["View the stack window"] = "Mostra la finestra dello Stack", -- src\editor\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\menu_view.lua
|
||||
["View the watch window"] = "Mostra la finestra delle Espressioni di Controllo", -- src\editor\menu_view.lua
|
||||
["Watch"] = "Watch", -- src\editor\debugger.lua
|
||||
["Welcome to the interactive Lua interpreter."] = "Benvenuti nell`interprete interattivo Lua.", -- src\editor\shellbox.lua
|
||||
["Wrap ar&ound"] = "Wrap ar&ound", -- src\editor\findreplace.lua
|
||||
["Wrap around"] = "Wrap around", -- src\editor\findreplace.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
|
||||
|
||||
314
cfg/i18n/pt-br.lua
Normal file
314
cfg/i18n/pt-br.lua
Normal file
@@ -0,0 +1,314 @@
|
||||
---
|
||||
-- @author Evandro Costa <evandro.co>
|
||||
-- @date 26/12/2014
|
||||
return {
|
||||
[0] = function(c) return c == 1 and 1 or 2 end, -- plural
|
||||
["%d instance"] = {"%d ocorrência", "%d ocorrências"}, -- src\editor\findreplace.lua
|
||||
["%s event failed: %s"] = "Evento %s falhou: %s", -- src\editor\package.lua
|
||||
["&About"] = "Sobre", -- src\editor\menu_help.lua
|
||||
["&Add Watch"] = "&Adicionar observador", -- src\editor\debugger.lua
|
||||
["&Break"] = "Interromper", -- src\editor\menu_project.lua
|
||||
["&Close Page"] = "Fe&char guia", -- src\editor\gui.lua, src\editor\menu_file.lua
|
||||
["&Community"] = "&Comunidade", -- src\editor\menu_help.lua
|
||||
["&Compile"] = "&Compilar", -- src\editor\menu_project.lua
|
||||
["&Copy"] = "&Copiar", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Default Layout"] = "Re&definir painéis", -- src\editor\menu_view.lua
|
||||
["&Delete Watch"] = "Remover observa&dor", -- src\editor\debugger.lua
|
||||
["&Delete"] = "Apagar", -- src\editor\filetree.lua
|
||||
["&Documentation"] = "&Documentação", -- src\editor\menu_help.lua
|
||||
["&Down"] = "&Descendente", -- src\editor\findreplace.lua
|
||||
["&Edit Project Directory"] = "&Editar pasta do projeto", -- src\editor\filetree.lua
|
||||
["&Edit Value"] = "&Editar valor", -- src\editor\debugger.lua
|
||||
["&Edit Watch"] = "&Editar observador", -- src\editor\debugger.lua
|
||||
["&Edit"] = "&Editar", -- src\editor\menu_edit.lua
|
||||
["&File"] = "Arquivo", -- src\editor\menu_file.lua
|
||||
["&Find All"] = "Localizar tudo", -- src\editor\findreplace.lua
|
||||
["&Find Next"] = "Localizar próxima", -- src\editor\findreplace.lua
|
||||
["&Find"] = "Localizar", -- src\editor\menu_search.lua
|
||||
["&Fold/Unfold All"] = "Expandir/Recolher tudo", -- src\editor\menu_edit.lua
|
||||
["&Frequently Asked Questions"] = "Perguntas &frequentes", -- src\editor\menu_help.lua
|
||||
["&Getting Started Guide"] = "Primeiros passos", -- src\editor\menu_help.lua
|
||||
["&Help"] = "Ajuda", -- src\editor\menu_help.lua
|
||||
["&New Directory"] = "&Nova pasta", -- src\editor\filetree.lua
|
||||
["&New"] = "&Novo", -- src\editor\menu_file.lua
|
||||
["&Open..."] = "Abrir...", -- src\editor\menu_file.lua
|
||||
["&Output/Console Window"] = "Saída/Console", -- src\editor\menu_view.lua
|
||||
["&Paste"] = "Colar", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Project Page"] = "&Página do projeto", -- src\editor\menu_help.lua
|
||||
["&Project"] = "&Projeto", -- src\editor\menu_project.lua
|
||||
["&Redo"] = "&Refazer", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Rename"] = "&Renomear", -- src\editor\filetree.lua
|
||||
["&Replace All"] = "Substitui&r tudo", -- src\editor\findreplace.lua
|
||||
["&Replace"] = "Substitui&r", -- src\editor\findreplace.lua, src\editor\menu_search.lua
|
||||
["&Run"] = "Executa&r", -- src\editor\menu_project.lua
|
||||
["&Save"] = "&Salvar", -- src\editor\gui.lua, src\editor\menu_file.lua
|
||||
["&Search"] = "Localizar", -- src\editor\menu_search.lua
|
||||
["&Sort"] = "Ordenar", -- src\editor\menu_edit.lua
|
||||
["&Stack Window"] = "Pilha de execução", -- src\editor\menu_view.lua
|
||||
["&Start Debugger Server"] = "Iniciar &servidor de depuração", -- src\editor\menu_project.lua
|
||||
["&Status Bar"] = "Barra de &status", -- src\editor\menu_view.lua
|
||||
["&Subdirectories"] = "&Subpastas", -- src\editor\findreplace.lua
|
||||
["&Tool Bar"] = "Barra de ferramen&tas", -- src\editor\menu_view.lua
|
||||
["&Tutorials"] = "&Tutoriais", -- src\editor\menu_help.lua
|
||||
["&Undo"] = "Desfazer", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Up"] = "Ascendente", -- src\editor\findreplace.lua
|
||||
["&View"] = "Exibir", -- src\editor\menu_view.lua
|
||||
["&Watch Window"] = "Observador", -- src\editor\menu_view.lua
|
||||
[".bak on replace"] = ".bak ao substituir", -- src\editor\findreplace.lua
|
||||
["About %s"] = "Sobre %s", -- src\editor\menu_help.lua
|
||||
["Add To Scratchpad"] = "Adicionar ao rascunho", -- src\editor\editor.lua
|
||||
["Add Watch Expression"] = "Adicionar observador", -- src\editor\editor.lua
|
||||
["All files"] = "Todos os arquivos", -- src\editor\commands.lua
|
||||
["Allow external process to start debugging"] = "Permitir processo externo para iniciar a depuração", -- src\editor\menu_project.lua
|
||||
["Analyze the source code"] = "Analisar o código-fonte", -- src\editor\inspect.lua
|
||||
["Analyze"] = "Analisar", -- src\editor\inspect.lua
|
||||
["Auto Complete Identifiers"] = "Autocompletar identificadores", -- src\editor\menu_edit.lua
|
||||
["Auto complete while typing"] = "Autocompletar ao digitar", -- src\editor\menu_edit.lua
|
||||
["Bookmark"] = "Marcador", -- src\editor\menu_edit.lua
|
||||
["Break execution at the next executed line of code"] = "Interromper execução na próxima linha de código", -- src\editor\menu_project.lua
|
||||
["C&lear Output Window"] = "&Limpar janela de saída", -- src\editor\gui.lua, src\editor\menu_project.lua
|
||||
["C&omment/Uncomment"] = "C&omentar/Descomentar", -- src\editor\menu_edit.lua
|
||||
["Can't debug the script in the active editor window."] = "Impossível de depurar o script na janela ativa do editor.", -- src\editor\debugger.lua
|
||||
["Can't evaluate the expression while the application is running."] = "Impossível executar a expressão enquanto a aplicação estiver em execução.", -- src\editor\debugger.lua
|
||||
["Can't find file '%s' in the current project to activate for debugging. Update the project or open the file in the editor before debugging."] = "Impossível localizar o arquivo '%s' no projeto atual para iniciar a depuração. Atualize o projeto ou abra o arquivo no editor antes de depurar.", -- src\editor\debugger.lua
|
||||
["Can't open file '%s': %s"] = "Impossível abrir o arquivo '%s': %s", -- src\editor\singleinstance.lua
|
||||
["Can't process auto-recovery record; invalid format: %s."] = "Impossível de processar registro de autorrecuperação; formato inválido: %s.", -- src\editor\commands.lua
|
||||
["Can't run the entry point script ('%s')."] = "Impossível de executar o ponto de entrada do script ('%s').", -- src\editor\debugger.lua
|
||||
["Can't start debugger server at %s:%d: %s."] = "Impossível de iniciar o sevidor de depuração em %s:%d: %s.", -- src\editor\debugger.lua
|
||||
["Can't start debugging session due to internal error '%s'."] = "Impossível iniciar sessão de depuração devido ao erro interno '%s'.", -- src\editor\debugger.lua
|
||||
["Can't start debugging without an opened file or with the current file not being saved ('%s')."] = "Impossível iniciar depuração sem abrir um arquivo ou se o arquivo atual não foi salvo ainda ('%s').", -- src\editor\debugger.lua
|
||||
["Can't stop debugger server as it is not started."] = "Impossível interromper servidor de depuração se ele não foi iniciado.", -- src\editor\debugger.lua
|
||||
["Cancel"] = "Cancelar", -- src\editor\findreplace.lua
|
||||
["Cancelled by the user."] = "Cancelado pelo usuário", -- src\editor\findreplace.lua
|
||||
["Choose a project directory"] = "Selecionar pasta do projeto", -- src\editor\findreplace.lua, src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Choose..."] = "Selecionar...", -- src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Clear Items"] = "Limpar itens", -- src\editor\menu_file.lua
|
||||
["Clear items from this list"] = "Limpar itens desta lista", -- src\editor\menu_file.lua
|
||||
["Clear the output window before compiling or debugging"] = "Limpar janela de saída antes de compilar ou depurar", -- src\editor\menu_project.lua
|
||||
["Close &Other Pages"] = "Fechar &outras guias", -- src\editor\gui.lua
|
||||
["Close A&ll Pages"] = "Fechar todas as guias", -- src\editor\gui.lua
|
||||
["Close the current editor window"] = "Fechar janela do editor atual", -- src\editor\menu_file.lua
|
||||
["Co&ntinue"] = "Co&ntinuar", -- src\editor\menu_project.lua
|
||||
["Col: %d"] = "Col: %d", -- src\editor\editor.lua
|
||||
["Command Line Parameters..."] = "Parâmetros da linha de comandos...", -- src\editor\menu_project.lua
|
||||
["Command line parameters"] = "Parâmetros da linha de comandos", -- src\editor\menu_project.lua
|
||||
["Comment or uncomment current or selected lines"] = {"Comentar ou descomentar a linha atual", "Comentar ou descomentar as linhas selecionadas"}, -- src\editor\menu_edit.lua
|
||||
["Compilation error"] = "Erro na compilação", -- src\editor\commands.lua, src\editor\debugger.lua
|
||||
["Compilation successful; %.0f%% success rate (%d/%d)."] = "Compilação com êxito; taxa de sucesso: %.0f%% (%d/%d).", -- src\editor\commands.lua
|
||||
["Compile the current file"] = "Compilar arquivo atual", -- src\editor\menu_project.lua
|
||||
["Complete &Identifier"] = "Completar &identificador", -- src\editor\menu_edit.lua
|
||||
["Complete the current identifier"] = "Completar o identificador atual", -- src\editor\menu_edit.lua
|
||||
["Consider removing backslash from escape sequence '%s'."] = "Considere a remoção da contrabarra da sequência de escape '%s'.", -- src\editor\commands.lua
|
||||
["Copy Full Path"] = "Copiar o caminho completo", -- src\editor\gui.lua, src\editor\filetree.lua
|
||||
["Copy selected text to clipboard"] = "Copiar texto selecionado para a área de transfêrencia", -- src\editor\menu_edit.lua
|
||||
["Correct &Indentation"] = "Corr&igir recuo", -- src\editor\menu_edit.lua
|
||||
["Couldn't activate file '%s' for debugging; continuing without it."] = "Impossível ativar o arquivo '%s' para a depuração; continuando sem ele.", -- src\editor\debugger.lua
|
||||
["Create an empty document"] = "Criar um documento em branco", -- src\editor\menu_file.lua
|
||||
["Cu&t"] = "Recor&tar", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["Cut selected text to clipboard"] = "Recortar texto selecionado para a área de transfêrencia", -- src\editor\menu_edit.lua
|
||||
["Debugger server started at %s:%d."] = "Servidor de depuração iniciado em %s:%d.", -- src\editor\debugger.lua
|
||||
["Debugger server stopped at %s:%d."] = "Servidor de depuração interrompido em %s:%d.", -- src\editor\debugger.lua
|
||||
["Debugging session completed (%s)."] = "Sessão de depuração completada (%s).", -- src\editor\debugger.lua
|
||||
["Debugging session started in '%s'."] = "Sessão de depuração iniciada em '%s'.", -- src\editor\debugger.lua
|
||||
["Debugging suspended at '%s:%s' (couldn't activate the file)."] = "Depuração suspendida em '%s:%s' (impossível ativar o arquivo).", -- src\editor\debugger.lua
|
||||
["Detach &Process"] = "Separar &processo", -- src\editor\menu_project.lua
|
||||
["Directory"] = "Pasta", -- src\editor\findreplace.lua
|
||||
["Do you want to delete '%s'?"] = "Deseja mesmo apagar '%s'?", -- src\editor\filetree.lua
|
||||
["Do you want to overwrite it?"] = "Deseja mesmo sobrescrevê-lo?", -- src\editor\commands.lua
|
||||
["Do you want to reload it?"] = "Deseja mesmo atualizá-lo?", -- src\editor\editor.lua
|
||||
["Do you want to save the changes to '%s'?"] = "Deseja salvar as alterações em '%s'?", -- src\editor\commands.lua
|
||||
["E&xit"] = "Sair", -- src\editor\menu_file.lua
|
||||
["Enter Lua code and press Enter to run it."] = "Digite o código Lua e pressione Enter para executá-lo.", -- src\editor\shellbox.lua
|
||||
["Enter command line parameters (use Cancel to clear)"] = "Digite os parâmetros da linha de comandos (use Cancelar para limpar)", -- src\editor\menu_project.lua
|
||||
["Enter replacement text"] = "Digite o texto para substituir", -- src\editor\editor.lua
|
||||
["Error while loading API file: %s"] = "Erro ao carregar arquivo de API: %s", -- src\editor\autocomplete.lua
|
||||
["Error while loading configuration file: %s"] = "Erro ao carregar arquivo de configuração: %s", -- src\editor\style.lua
|
||||
["Error while processing API file: %s"] = "Erro ao processar arquivo de API: %s", -- src\editor\autocomplete.lua
|
||||
["Error while processing configuration file: %s"] = "Erro ao processar arquivo de configuração: %s", -- src\editor\style.lua
|
||||
["Error"] = "Erro", -- src\editor\commands.lua
|
||||
["Evaluate In Console"] = "Executar no console", -- src\editor\editor.lua
|
||||
["Execute the current project/file and keep updating the code to see immediate results"] = "Executar o projeto/arquivo atual, mantendo o código atualizado para ver os resultados em tempo real", -- src\editor\menu_project.lua
|
||||
["Execute the current project/file"] = "Executar o projeto/arquivo atual", -- src\editor\menu_project.lua
|
||||
["Execution error"] = "Erro na execução", -- src\editor\debugger.lua
|
||||
["Exit program"] = "Sair do programa", -- src\editor\menu_file.lua
|
||||
["File '%s' has been modified on disk."] = "Arquivo '%s' foi alterado no disco.", -- src\editor\editor.lua
|
||||
["File '%s' has more recent timestamp than restored '%s'; please review before saving."] = "Arquivo '%s' possui uma data mais recente do que o restaurado '%s'; verifique antes de salvar.", -- src\editor\commands.lua
|
||||
["File '%s' is missing and can't be recovered."] = "Arquivo '%s' está faltando e não pode ser restaurado.", -- src\editor\commands.lua
|
||||
["File '%s' no longer exists."] = "Arquivo '%s' não existe mais.", -- src\editor\menu_file.lua, src\editor\editor.lua
|
||||
["File Type"] = "Tipo de arquivo", -- src\editor\findreplace.lua
|
||||
["File already exists."] = "Arquivo já existe", -- src\editor\commands.lua
|
||||
["File history"] = "Histórico do arquivo", -- src\editor\menu_file.lua
|
||||
["Find &In Files"] = "Local&izar em arquivos", -- src\editor\menu_search.lua
|
||||
["Find &Next"] = "Localizar próximo", -- src\editor\menu_search.lua
|
||||
["Find &Previous"] = "Localizar anterior", -- src\editor\menu_search.lua
|
||||
["Find in files"] = "Localizar em arquivos", -- src\editor\findreplace.lua
|
||||
["Find and insert library function"] = "Localizar e inserir função de biblioteca", -- src\editor\menu_search.lua
|
||||
["Find and replace text in files"] = "Localizar e substituir texto em arquivos", -- src\editor\menu_search.lua
|
||||
["Find and replace text"] = "Localizar e substituir texto", -- src\editor\menu_search.lua
|
||||
["Find text in files"] = "Localizar texto em arquivos", -- src\editor\menu_search.lua
|
||||
["Find text"] = "Localizar texto", -- src\editor\menu_search.lua
|
||||
["Find the earlier text occurence"] = "Localizar a ocorrência anterior do texto", -- src\editor\menu_search.lua
|
||||
["Find the next text occurrence"] = "Localizar a ocorrência posterior do texto", -- src\editor\menu_search.lua
|
||||
["Find"] = "Localizar", -- src\editor\findreplace.lua
|
||||
["Fold or unfold all code folds"] = "Expandir ou recolher todos os blocos do código", -- src\editor\menu_edit.lua
|
||||
["Found auto-recovery record and restored saved session."] = "Registro de autorrecuperação encontrado e sessão restaurada.", -- src\editor\commands.lua
|
||||
["Found"] = "Encontrado", -- src\editor\findreplace.lua
|
||||
["Full &Screen"] = "Tela inteira", -- src\editor\menu_view.lua
|
||||
["Go To Definition"] = "Ir para a definição", -- src\editor\editor.lua
|
||||
["Go To File..."] = "Ir para o arquivo...", -- src\editor\menu_search.lua
|
||||
["Go To Line..."] = "Ir para a linha...", -- src\editor\menu_search.lua
|
||||
["Go To Next Bookmark"] = "Ir para o próximo marcador", -- src\editor\menu_edit.lua
|
||||
["Go To Previous Bookmark"] = "Ir para o marcador anterior", -- src\editor\menu_edit.lua
|
||||
["Go To Symbol..."] = "Ir para o símbolo...", -- src\editor\menu_search.lua
|
||||
["Go to file"] = "Ir para o arquivo", -- src\editor\menu_search.lua
|
||||
["Go to line"] = "Ir para a linha", -- src\editor\menu_search.lua
|
||||
["Go to symbol"] = "Ir para o símbolo", -- src\editor\menu_search.lua
|
||||
["Hide '.%s' Files"] = "Ocultar arquivos '.%s'", -- src\editor\filetree.lua
|
||||
["INS"] = "INS", -- src\editor\editor.lua
|
||||
["Ignored error in debugger initialization code: %s."] = "Erro ignorado no código de inicialização do depurador: %s.", -- src\editor\debugger.lua
|
||||
["In Files"] = "Em arquivos", -- src\editor\findreplace.lua
|
||||
["Insert Library Function..."] = "Inserir função de biblioteca...", -- src\editor\menu_search.lua
|
||||
["Known Files"] = "Arquivos conhecidos", -- src\editor\commands.lua
|
||||
["Ln: %d"] = "Ln: %d", -- src\editor\editor.lua
|
||||
["Local console"] = "Console local", -- src\editor\gui.lua, src\editor\shellbox.lua
|
||||
["Lua &Interpreter"] = "&Interpretador Lua", -- src\editor\menu_project.lua
|
||||
["Mapped remote request for '%s' to '%s'."] = "Solicitação remota '%s' mapeada para '%s'.", -- src\editor\debugger.lua
|
||||
["Match case"] = "Diferenciar maiúsc/minúsc", -- src\editor\findreplace.lua
|
||||
["Match whole word"] = "Somente palavras inteiras", -- src\editor\findreplace.lua
|
||||
["Mixed end-of-line encodings detected."] = "Multíplas codificações de fim-de-linha encontradas.", -- src\editor\commands.lua
|
||||
["Navigate"] = "Navegar", -- src\editor\menu_search.lua
|
||||
["New &File"] = "Novo arquivo", -- src\editor\filetree.lua
|
||||
["OVR"] = "OVR", -- src\editor\editor.lua
|
||||
["Open With Default Program"] = "Abrir com o programa padrão", -- src\editor\filetree.lua
|
||||
["Open an existing document"] = "Abrir um documento existente", -- src\editor\menu_file.lua
|
||||
["Open file"] = "Abrir arquivo", -- src\editor\commands.lua
|
||||
["Options"] = "Opções", -- src\editor\findreplace.lua
|
||||
["Outline Window"] = "Saída", -- src\editor\menu_view.lua
|
||||
["Outline"] = "Definições", -- src\editor\outline.lua
|
||||
["Output (running)"] = "Saída (executando)", -- src\editor\debugger.lua, src\editor\output.lua
|
||||
["Output (suspended)"] = "Saída (suspendido)", -- src\editor\debugger.lua
|
||||
["Output"] = "Saída", -- src\editor\debugger.lua, src\editor\output.lua, src\editor\gui.lua, src\editor\settings.lua
|
||||
["Paste text from the clipboard"] = "Colar texto da área de transfêrencia", -- src\editor\menu_edit.lua
|
||||
["Preferences"] = "Preferências", -- src\editor\menu_edit.lua
|
||||
["Prepend '!' to force local execution."] = "Prefixe com '!' para forçar a execução local.", -- src\editor\shellbox.lua
|
||||
["Prepend '=' to show complex values on multiple lines."] = "Prefixe com '=' para exibir valores complexos em multíplas linhas.", -- src\editor\shellbox.lua
|
||||
["Press cancel to abort."] = "Pressionar cancelar para abortar.", -- src\editor\commands.lua
|
||||
["Program '%s' started in '%s' (pid: %d)."] = "Programa '%s' iniciado em '%s' (pid: %d).", -- src\editor\output.lua
|
||||
["Program can't start because conflicting process is running as '%s'."] = "Impossível iniciar programa porque um processo conflitante está em execução como '%s'.", -- src\editor\output.lua
|
||||
["Program completed in %.2f seconds (pid: %d)."] = "Programa completado em %.2f segundos (pid: %d).", -- src\editor\output.lua
|
||||
["Program starting as '%s'."] = "Iniciando programa como '%s'.", -- src\editor\output.lua
|
||||
["Program stopped (pid: %d)."] = "Programa interrompido (pid: %d).", -- src\editor\debugger.lua
|
||||
["Program unable to run as '%s'."] = "Impossível de executar programa como '%s'.", -- src\editor\output.lua
|
||||
["Project Directory"] = "Pasta do projeto", -- src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Project history"] = "Histórico do projeto", -- src\editor\menu_file.lua
|
||||
["Project"] = "Projeto", -- src\editor\filetree.lua
|
||||
["Project/&FileTree Window"] = "Projeto/Hierarquia de arquivos", -- src\editor\menu_view.lua
|
||||
["Provide command line parameters"] = "Informar os parâmetros da linha de comandos", -- src\editor\menu_project.lua
|
||||
["R/O"] = "R/O", -- src\editor\editor.lua
|
||||
["R/W"] = "R/W", -- src\editor\editor.lua
|
||||
["Re&place In Files"] = "Substituir em arquivos", -- src\editor\menu_search.lua
|
||||
["Re-indent selected lines"] = "Inserir recuos nas linhas selecionadas", -- src\editor\menu_edit.lua
|
||||
["Recent &Projects"] = "&Projetos recentes", -- src\editor\menu_file.lua
|
||||
["Recent Files"] = "Arquivos recentes", -- src\editor\menu_file.lua
|
||||
["Redo last edit undone"] = "Refazer última edição desfeita", -- src\editor\menu_edit.lua
|
||||
["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\findreplace.lua
|
||||
["Remote console"] = "Console remoto", -- src\editor\shellbox.lua
|
||||
["Rename All Instances"] = "Renomear todas as instâncias", -- src\editor\editor.lua
|
||||
["Replace all"] = "Substituir tudo", -- src\editor\findreplace.lua
|
||||
["Replace All Selections"] = "Substituir todas as seleções", -- src\editor\editor.lua
|
||||
["Replace"] = "Substituir", -- src\editor\findreplace.lua
|
||||
["Replaced an invalid UTF8 character with %s."] = "Caractere UTF8 inválido susbtituído por %s.", -- src\editor\commands.lua
|
||||
["Replaced"] = "Substituído", -- src\editor\findreplace.lua
|
||||
["Replacing"] = "Substituindo", -- src\editor\findreplace.lua
|
||||
["Reset to default layout"] = "Redefinir painéis para o padrão", -- src\editor\menu_view.lua
|
||||
["Run As Scratchpad"] = "Executar como rascunho", -- src\editor\menu_project.lua
|
||||
["Run as Scratchpad"] = "Executar como rascunho", -- src\editor\menu_project.lua
|
||||
["S&top Debugging"] = "In&terromper depuração", -- src\editor\menu_project.lua
|
||||
["S&top Process"] = "In&terromper processo", -- src\editor\menu_project.lua
|
||||
["Save &As..."] = "S&alvar como...", -- src\editor\gui.lua, src\editor\menu_file.lua
|
||||
["Save A&ll"] = "Sa&lvar tudo", -- src\editor\menu_file.lua
|
||||
["Save Changes?"] = "Salvar alterações?", -- src\editor\commands.lua
|
||||
["Save all open documents"] = "Salvar todos os documentos abertos", -- src\editor\menu_file.lua
|
||||
["Save file as"] = "Salvar arquivo como", -- src\editor\commands.lua
|
||||
["Save file?"] = "Salvar arquivo?", -- src\editor\commands.lua
|
||||
["Save the current document to a file with a new name"] = "Salvar documento atual para um arquivo com outro nome", -- src\editor\menu_file.lua
|
||||
["Save the current document"] = "Salvar documento atual", -- src\editor\menu_file.lua
|
||||
["Saved auto-recover at %s."] = "Autorrecuperação salvo às %s.", -- src\editor\commands.lua
|
||||
["Scope"] = "Direção", -- src\editor\findreplace.lua
|
||||
["Scratchpad error"] = "Erro no rascunho", -- src\editor\debugger.lua
|
||||
["Searching for"] = "Localizando por", -- src\editor\findreplace.lua
|
||||
["Sel: %d/%d"] = "Sel: %d/%d", -- src\editor\editor.lua
|
||||
["Select &All"] = "Selecion&ar tudo", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["Select all text in the editor"] = "Selecionar todo o texto do editor", -- src\editor\menu_edit.lua
|
||||
["Select And Find Next"] = "Selecionar e localizar próxima", -- src\editor\menu_search.lua
|
||||
["Select And Find Previous"] = "Selecionar e localizar anterior", -- src\editor\menu_search.lua
|
||||
["Select the word under cursor and find its next occurrence"] = "Selecionar palavra no cursor e localizar sua próxima ocorrência", -- src\editor\menu_search.lua
|
||||
["Select the word under cursor and find its previous occurrence"] = "Selecionar palavra no cursor e localizar sua ocorrência anterior", -- src\editor\menu_search.lua
|
||||
["Set From Current File"] = "Alterar para o arquivo atual", -- src\editor\menu_project.lua
|
||||
["Set project directory from current file"] = "Alterar pasta do projeto para a pasta do arquivo atual", -- src\editor\menu_project.lua
|
||||
["Set the interpreter to be used"] = "Alterar interpretador a ser utilizado", -- src\editor\menu_project.lua
|
||||
["Set the project directory to be used"] = "Alterar pasta do projeto a ser utilizado", -- src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Settings: System"] = "Opções: Sistema", -- src\editor\menu_edit.lua
|
||||
["Settings: User"] = "Opções: Usuário", -- src\editor\menu_edit.lua
|
||||
["Show &Tooltip"] = "Exibir dica", -- src\editor\menu_edit.lua
|
||||
["Show All Files"] = "Exibir todos os arquivos", -- src\editor\filetree.lua
|
||||
["Show Hidden Files"] = "Exibir arquivos ocultos", -- src\editor\filetree.lua
|
||||
["Show Location"] = "Exibir pasta no sistema", -- src\editor\gui.lua, src\editor\filetree.lua
|
||||
["Show all files"] = "Exibir todos os arquivos", -- src\editor\filetree.lua
|
||||
["Show files previously hidden"] = "Exibir arquivos anteriormente ocultos", -- src\editor\filetree.lua
|
||||
["Show tooltip for current position; place cursor after opening bracket of function"] = "Exibir dica para a posição atual; posicione o cursor após abrir o parênteses da função", -- src\editor\menu_edit.lua
|
||||
["Show/Hide the status bar"] = "Exibir/Ocultar a barra de status", -- src\editor\menu_view.lua
|
||||
["Show/Hide the toolbar"] = "Exibir/Ocultar a barra de ferramentas", -- src\editor\menu_view.lua
|
||||
["Sort selected lines"] = "Ordenar linhas selecionadas", -- src\editor\menu_edit.lua
|
||||
["Source"] = "Código", -- src\editor\menu_edit.lua
|
||||
["Stack"] = "Pilha de execução", -- src\editor\debugger.lua
|
||||
["Start &Debugging"] = "Iniciar &depuração", -- src\editor\menu_project.lua
|
||||
["Start or continue debugging"] = "Iniciar ou continuar depuração", -- src\editor\menu_project.lua
|
||||
["Step &Into"] = "Passar para dentro", -- src\editor\menu_project.lua
|
||||
["Step &Over"] = "Passar s&obre", -- src\editor\menu_project.lua
|
||||
["Step O&ut"] = "Passar para fora", -- src\editor\menu_project.lua
|
||||
["Step into"] = "Passar para dentro", -- src\editor\menu_project.lua
|
||||
["Step out of the current function"] = "Passar para fora da função atual", -- src\editor\menu_project.lua
|
||||
["Step over"] = "Passar para fora", -- src\editor\menu_project.lua
|
||||
["Stop debugging and continue running the process"] = "Interromper depuração e continuar executando o processo", -- src\editor\menu_project.lua
|
||||
["Stop the currently running process"] = "Interromper o processo atual em execução", -- src\editor\menu_project.lua
|
||||
["Switch to or from full screen mode"] = "Entrar/Sair do modo tela inteira", -- src\editor\menu_view.lua
|
||||
["Text not found."] = "Texto não encontrado.", -- src\editor\findreplace.lua
|
||||
["The API file must be located in a subdirectory of the API directory."] = "O arquivo de API deve estar localizado em uma subpasta da pasta de API", -- src\editor\autocomplete.lua
|
||||
["Toggle Bookmark"] = "Alternar marcador", -- src\editor\menu_edit.lua
|
||||
["Toggle Break&point"] = "Alternar &ponto de interrupção", -- src\editor\menu_project.lua
|
||||
["Toggle bookmark"] = "Alternar marcador", -- src\editor\menu_edit.lua
|
||||
["Toggle breakpoint"] = "Alternar ponto de interrupção", -- src\editor\menu_project.lua
|
||||
["Tr&ace"] = "R&astrear", -- src\editor\menu_project.lua
|
||||
["Trace execution showing each executed line"] = "Rastrear execução exibindo cada linha de código executada", -- src\editor\menu_project.lua
|
||||
["Unable to create directory '%s'."] = "Impossível criar pasta '%s'.", -- src\editor\filetree.lua
|
||||
["Unable to create file '%s'."] = "Impossível criar arquivo '%s'.", -- src\editor\filetree.lua
|
||||
["Unable to delete directory '%s': %s"] = "Impossível apagar a pasta '%s': %s", -- src\editor\filetree.lua
|
||||
["Unable to load file '%s'."] = "Impossível carregar o arquivo '%s'.", -- src\editor\commands.lua
|
||||
["Unable to rename file '%s'."] = "Impossível renomear o arquivo '%s'.", -- src\editor\filetree.lua
|
||||
["Unable to save file '%s': %s"] = "Impossível salvar o arquivo '%s': %s", -- src\editor\commands.lua
|
||||
["Unable to stop program (pid: %d), code %d."] = "Impossível de interromper programa (pid: %d), código %d.", -- src\editor\debugger.lua
|
||||
["Undo last edit"] = "Refazer última edição", -- src\editor\menu_edit.lua
|
||||
["Use '%s' to see full description."] = "Use '%s' para ver a descrição completa.", -- src\editor\editor.lua
|
||||
["Use '%s' to show line endings and '%s' to convert them."] = "Use '%s' para exibir os finais de linha e '%s' para convertê-los.", -- src\editor\commands.lua
|
||||
["Use 'clear' to clear the shell output and the history."] = "Use 'clear' para limpar a saída e o histórico.", -- src\editor\shellbox.lua
|
||||
["Use Shift-Enter for multiline code."] = "Usar Shift-Enter para adicionar uma nova linha ao código.", -- src\editor\shellbox.lua
|
||||
["View the outline window"] = "Exibir a janela de definições", -- src\editor\menu_view.lua
|
||||
["View the output/console window"] = "Exibir a janela de saída/console", -- src\editor\menu_view.lua
|
||||
["View the project/filetree window"] = "Exibir janela do projeto/hierarquia de arquivos", -- src\editor\menu_view.lua
|
||||
["View the stack window"] = "Exibir janela da pilha de execução", -- src\editor\menu_view.lua
|
||||
["View the watch window"] = "Exibir janela do observador", -- src\editor\menu_view.lua
|
||||
["Watch"] = "Observador", -- src\editor\debugger.lua
|
||||
["Welcome to the interactive Lua interpreter."] = "Bem-vindo ao interpretador do Lua.", -- src\editor\shellbox.lua
|
||||
["Wrap around"] = "Repetir direção", -- src\editor\findreplace.lua
|
||||
["You must save the program first."] = "Você deve salvar o programa primeiro.", -- src\editor\commands.lua
|
||||
["Zoom In"] = "Ampliar", -- src\editor\menu_view.lua
|
||||
["Zoom Out"] = "Afastar", -- src\editor\menu_view.lua
|
||||
["Zoom to 100%"] = "Ir para 100%", -- src\editor\menu_view.lua
|
||||
["Zoom"] = "Zoom", -- src\editor\menu_view.lua
|
||||
["on line %d"] = "na linha %d", -- src\editor\debugger.lua, src\editor\editor.lua, src\editor\commands.lua
|
||||
["traced %d instruction"] = {"%d instrução rastreada", "%d instruções rastreadas"}, -- src\editor\debugger.lua
|
||||
["unknown error"] = "erro desconhecido", -- src\editor\debugger.lua
|
||||
}
|
||||
136
cfg/i18n/ru.lua
136
cfg/i18n/ru.lua
@@ -8,13 +8,14 @@ return {
|
||||
["&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"] = "&Копировать", -- 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
|
||||
@@ -24,16 +25,15 @@ return {
|
||||
["&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
|
||||
["&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
|
||||
@@ -47,11 +47,11 @@ return {
|
||||
["&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
|
||||
["&Undo"] = "&Отменить", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["&Up"] = "Вверх", -- src\editor\findreplace.lua
|
||||
["&View"] = "&Вид", -- src\editor\menu_view.lua
|
||||
["&Watch Window"] = "Окно &выражений", -- src\editor\menu_view.lua
|
||||
[".&bak on Replace"] = ".&bak после замены", -- src\editor\findreplace.lua
|
||||
[".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
|
||||
@@ -62,20 +62,22 @@ return {
|
||||
["Auto Complete Identifiers"] = "Автодополнение идентификаторов", -- src\editor\menu_edit.lua
|
||||
["Auto complete while typing"] = "Автоматически дополнять идентификаторы при наборе", -- src\editor\menu_edit.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\menu_project.lua
|
||||
["C&lear Output Window"] = "Очистка ок&на вывода", -- src\editor\gui.lua, src\editor\menu_project.lua
|
||||
["C&omment/Uncomment"] = "Зако&мментировать/раскомментировать", -- src\editor\menu_edit.lua
|
||||
["Can't debug the script in the active editor window."] = "Невозможно отладить скрипт в текущем окне редактирования.", -- src\editor\debugger.lua
|
||||
["Can't find file '%s' in the current project to activate for debugging. Update the project or open the file in the editor before debugging."] = "Файл '%s', необходимый для отладки, не найден в текущем проекте. Обновите проект или откройте файл в редакторе перед началом отладки.", -- src\editor\debugger.lua
|
||||
["Can't evaluate the expression while the application is running."] = "Невозможно вычеслить значение выражения пока приложение выполняется.", -- src\editor\debugger.lua
|
||||
["Can't open file '%s': %s"] = "Ошибка открытия файла '%s': %s", -- src\editor\singleinstance.lua
|
||||
["Can't process auto-recovery record; invalid format: %s."] = "Ошибка обработки записи автоматического восстановления; неверный формат: %s.", -- src\editor\commands.lua
|
||||
["Can't run the entry point script ('%s')."] = "Ошибка выполнения стартового скрипта ('%s').", -- src\editor\debugger.lua
|
||||
["Can't start debugger server at %s:%d: %s."] = "Невозможно запустить сервер отладки %s:%d: %s", -- src\editor\debugger.lua
|
||||
["Can't start debugging for '%s'."] = "Невозможно начать отладку для '%s'.", -- src\editor\debugger.lua
|
||||
["Can't start debugging session due to internal error '%s'."] = "Невозможно начать отладочную сессию из-за внутренней ошибки '%s'.", -- src\editor\debugger.lua
|
||||
["Can't start debugging without an opened file or with the current file not being saved ('%s')."] = "Невозможно начать отладку без открытого файла или с несохраненным текущим файлом ('%s').", -- src\editor\debugger.lua
|
||||
["Can't stop debugger server as it is not started."] = "Невозможно остановить сервер отладки пока он не запущен", -- src\editor\debugger.lua
|
||||
["Cancel"] = "Отмена", -- src\editor\findreplace.lua
|
||||
["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 a directory to map"] = "Выберите папку для добавления в список", -- src\editor\filetree.lua
|
||||
["Choose a project directory"] = "Выберите папку проекта", -- src\editor\findreplace.lua, src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Choose..."] = "Выбрать...", -- src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Clear Items"] = "Очистить список", -- src\editor\menu_file.lua
|
||||
["Clear items from this list"] = "Удалить элементы из списка", -- src\editor\menu_file.lua
|
||||
@@ -94,17 +96,18 @@ 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\menu_file.lua
|
||||
["Cu&t"] = "Вы&резать", -- src\editor\gui.lua, src\editor\editor.lua, src\editor\menu_edit.lua
|
||||
["Cut selected text to clipboard"] = "Вырезать выделенный текст в буфер обмена", -- src\editor\menu_edit.lua
|
||||
["Debugger server started at %s:%d."] = "Сервер отладки запущен на %s:%d.", -- src\editor\debugger.lua
|
||||
["Debugger server stopped at %s:%d."] = "Сервер отладки остановлен %s:%d.", -- src\editor\debugger.lua
|
||||
["Debugging session completed (%s)."] = "Отладочная сессия завершена (%s).", -- src\editor\debugger.lua
|
||||
["Debugging session started in '%s'."] = "Отладочная сессия запущена в '%s'.", -- src\editor\debugger.lua
|
||||
["Debugging suspended at %s:%s (couldn't activate the file)."] = "Отладка остановлена на %s:%s (невозможно открыть файл).", -- src\editor\debugger.lua
|
||||
["Debugging suspended at '%s:%s' (couldn't activate the file)."] = "Отладка остановлена в '%s:%s' (невозможно активировать файл).", -- src\editor\debugger.lua
|
||||
["Detach &Process"] = "Отсоединить процесс", -- src\editor\menu_project.lua
|
||||
["Directory"] = "Папка", -- src\editor\findreplace.lua
|
||||
["Do you want to delete '%s'?"] = "Удалить '%s'?", -- src\editor\filetree.lua
|
||||
@@ -114,7 +117,7 @@ return {
|
||||
["E&xit"] = "Вы&ход", -- src\editor\menu_file.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
|
||||
@@ -125,10 +128,9 @@ return {
|
||||
["Execute the current project/file"] = "Запустить текущий проект/файл", -- src\editor\menu_project.lua
|
||||
["Execution error"] = "Ошибка выполнения", -- src\editor\debugger.lua
|
||||
["Exit program"] = "Выйти из программы", -- src\editor\menu_file.lua
|
||||
["Expr"] = "Выр.", -- src\editor\debugger.lua
|
||||
["Expression"] = "Выражение", -- src\editor\debugger.lua
|
||||
["File '%s' has been modified on disk."] = "Файл '%s' был изменен на диске.", -- src\editor\editor.lua
|
||||
["File '%s' has more recent timestamp than restored '%s'; please review before saving."] = "Файл '%s' имеет более позднее время модификации, чем восстановленный '%s'; пожалуйста просмотрите его перед сохранением.", -- src\editor\commands.lua
|
||||
["File '%s' 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
|
||||
@@ -136,11 +138,12 @@ return {
|
||||
["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 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\menu_search.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\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
|
||||
@@ -149,31 +152,43 @@ return {
|
||||
["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 Previous Bookmark"] = "Перейти к предыдущей закладке", -- src\editor\menu_edit.lua
|
||||
["Go to a selected line"] = "Перейти к заданной строке", -- src\editor\menu_search.lua
|
||||
["Go To Symbol..."] = "Перейти к символу...", -- src\editor\menu_search.lua
|
||||
["Go to file"] = "Перейти к файлу", -- src\editor\menu_search.lua
|
||||
["Go to line"] = "Перейти к строке", -- src\editor\menu_search.lua
|
||||
["Go to symbol"] = "Перейти к символу", -- src\editor\menu_search.lua
|
||||
["Hide '.%s' Files"] = "Спрятать '.%s' файлы", -- src\editor\filetree.lua
|
||||
["INS"] = "ВСТ", -- src\editor\editor.lua
|
||||
["Ignored error in debugger initialization code: %s."] = nil, -- src\editor\debugger.lua
|
||||
["In Files"] = "Установки файлов", -- src\editor\findreplace.lua
|
||||
["Jump to a function definition..."] = "Перейти к определению функции...", -- src\editor\editor.lua
|
||||
["Insert Library Function..."] = "Вставить библиотечную функцию...", -- src\editor\menu_search.lua
|
||||
["Known Files"] = "Файлы Lua", -- src\editor\commands.lua
|
||||
["Ln: %d"] = "Стр: %d", -- src\editor\editor.lua
|
||||
["Local console"] = "Локальная консоль", -- src\editor\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
|
||||
["Match case"] = "Совпадение регистра", -- src\editor\findreplace.lua
|
||||
["Match whole word"] = "Совпадение целого слова", -- src\editor\findreplace.lua
|
||||
["Mixed end-of-line encodings detected."] = "Обнаружены смешанные символы конца строки.", -- src\editor\commands.lua
|
||||
["Navigate"] = "Перейти", -- src\editor\menu_search.lua
|
||||
["New &File"] = "Новый файл", -- src\editor\filetree.lua
|
||||
["OVR"] = "ЗАМ", -- src\editor\editor.lua
|
||||
["Open 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\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
|
||||
["Paste text from the clipboard"] = "Вставить текст из буфера обмена", -- src\editor\menu_edit.lua
|
||||
["Preferences"] = "Настройки", -- src\editor\menu_edit.lua
|
||||
["Prepend '!' to force local execution."] = "Укажите '=' в начале выражения для выполнения в локальной консоли", -- src\editor\shellbox.lua
|
||||
["Prepend '=' to show complex values on multiple lines."] = "Укажите '=' в начале выражения для отображения сложных значений на нескольких строках.", -- src\editor\shellbox.lua
|
||||
["Press cancel to abort."] = "Нажмите Отмена для завершения.", -- src\editor\commands.lua
|
||||
["Program '%s' started in '%s' (pid: %d)."] = "Программа '%s' запущена в '%s' (pid: %d).", -- src\editor\output.lua
|
||||
@@ -184,98 +199,113 @@ 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
|
||||
["R/O"] = "R/O", -- src\editor\editor.lua
|
||||
["R/W"] = "R/W", -- src\editor\editor.lua
|
||||
["Re&place In Files"] = "Замени&ть в файлах", -- src\editor\menu_search.lua
|
||||
["Re-indent selected lines"] = "Исправить отступ в выделенных строчках", -- src\editor\menu_edit.lua
|
||||
["Recent &Projects"] = "Недавние &проекты", -- src\editor\menu_file.lua
|
||||
["Recent Files"] = "Недавние файлы", -- src\editor\menu_file.lua
|
||||
["Redo last edit undone"] = "Вернуть последнее отмененное изменение", -- src\editor\menu_edit.lua
|
||||
["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\findreplace.lua
|
||||
["Remote console"] = "Удаленная консоль", -- src\editor\shellbox.lua
|
||||
["Rename All Instances"] = "Переименовать все совпадения", -- src\editor\editor.lua
|
||||
["Replace A&ll"] = "Заменить все", -- src\editor\findreplace.lua
|
||||
["Replace all"] = "Заменить все", -- src\editor\findreplace.lua
|
||||
["Replace All Selections"] = "Заменить все выделенные фрагменты", -- src\editor\editor.lua
|
||||
["Replace"] = "Заменить", -- src\editor\findreplace.lua
|
||||
["Replaced an invalid UTF8 character with %s."] = "Некорректный символ UTF8 заменен на %s.", -- src\editor\commands.lua
|
||||
["Replaced"] = "Заменено", -- src\editor\findreplace.lua
|
||||
["Replacing"] = "Замена", -- src\editor\findreplace.lua
|
||||
["Reset to default layout"] = "Установить расположение окон по умолчанию", -- src\editor\menu_view.lua
|
||||
["Run as Scratchpad"] = "Запустить как черновик", -- src\editor\menu_project.lua
|
||||
["Run As Scratchpad"] = "Запустить как черновик", -- src\editor\menu_project.lua
|
||||
["Run To Cursor"] = "Выполнить до курсора", -- src\editor\menu_project.lua
|
||||
["Run as Scratchpad"] = "Запустить как черновик", -- src\editor\toolbar.lua
|
||||
["Run to cursor"] = "Выполнить до курсора", -- src\editor\menu_project.lua
|
||||
["S&top Debugging"] = "&Завершить отладку", -- src\editor\menu_project.lua
|
||||
["S&top Process"] = "&Завершить процесс", -- src\editor\menu_project.lua
|
||||
["Save &As..."] = "Сохранить &как...", -- src\editor\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\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\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
|
||||
["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 project directory from current file"] = "Установить папку проекта по текущему файлу", -- src\editor\menu_project.lua
|
||||
["Set the interpreter to be used"] = "Установить используемый интерпретатор", -- src\editor\menu_project.lua
|
||||
["Set the project directory to be used"] = "Установить используемую папку проекта", -- src\editor\menu_project.lua, src\editor\filetree.lua
|
||||
["Settings: System"] = "Установки: Системы", -- src\editor\menu_edit.lua
|
||||
["Settings: User"] = "Установки: Пользователя", -- src\editor\menu_edit.lua
|
||||
["Show &Tooltip"] = "Показать &подсказку", -- src\editor\menu_edit.lua
|
||||
["Show All Files"] = "Показать все файлы", -- src\editor\filetree.lua
|
||||
["Show Hidden Files"] = "Показать спрятанные файлы", -- src\editor\filetree.lua
|
||||
["Show Location"] = "Показать файл в папке", -- src\editor\gui.lua, src\editor\filetree.lua
|
||||
["Show all files"] = "Показать все файлы", -- src\editor\filetree.lua
|
||||
["Show files previously hidden"] = "Показать ранее спрятанные файлы", -- src\editor\filetree.lua
|
||||
["Show tooltip for current position; place cursor after opening bracket of function"] = "Показать подсказку в текущей позиции; переместите курсор в позицию после открывающей скобки функции", -- src\editor\menu_edit.lua
|
||||
["Show/Hide the status bar"] = "Показать/спрятать панель состояния", -- src\editor\menu_view.lua
|
||||
["Show/Hide the toolbar"] = "Показать/спрятать панель инструментов", -- src\editor\menu_view.lua
|
||||
["Sort selected lines"] = "Отсортировать выделенные строки", -- src\editor\menu_edit.lua
|
||||
["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
|
||||
["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\menu_project.lua
|
||||
["Step out of the current function"] = "Выйти из текущей функции", -- src\editor\menu_project.lua
|
||||
["Step over"] = "Перейти на следующую строку", -- src\editor\menu_project.lua
|
||||
["Stop debugging and continue running the process"] = "Завершить отладку и продолжить текущий процесс", -- src\editor\menu_project.lua
|
||||
["Stop the currently running process"] = "Завершить текущий процесс", -- src\editor\menu_project.lua
|
||||
["Switch to or from full screen mode"] = "Переключить полноэкранный режим", -- src\editor\menu_view.lua
|
||||
["Text not found."] = "Текст не найден.", -- src\editor\findreplace.lua
|
||||
["The API file must be located in a subdirectory of the API directory."] = "Файл определений API должен быть расположен внутри папки API.", -- src\editor\autocomplete.lua
|
||||
["Toggle Bookmark"] = "Установить/Снять закладку", -- src\editor\menu_edit.lua
|
||||
["Toggle Break&point"] = "&Точка останова", -- src\editor\menu_project.lua
|
||||
["Toggle breakpoint"] = "Переключить точку останова", -- src\editor\gui.lua, src\editor\menu_project.lua
|
||||
["Toggle bookmark"] = "Установить/Снять закладку", -- src\editor\menu_edit.lua
|
||||
["Toggle breakpoint"] = "Переключить точку останова", -- src\editor\menu_project.lua
|
||||
["Tr&ace"] = "Т&рассировка", -- src\editor\menu_project.lua
|
||||
["Trace execution showing each executed line"] = "Отслеживать выполнение, показывая каждую выполненную строку", -- src\editor\menu_project.lua
|
||||
["Unable to create directory '%s'."] = "Ошибка создания папки '%s'.", -- src\editor\filetree.lua
|
||||
["Unable to create file '%s'."] = "Ошибка создания файла '%s'.", -- src\editor\filetree.lua
|
||||
["Unable to delete directory '%s': %s"] = "Ошибка удаления директории '%s': %s", -- src\editor\filetree.lua
|
||||
["Unable to load file '%s'."] = "Ошибка загрузки файла '%s'.", -- src\editor\commands.lua
|
||||
["Unable to rename file '%s'."] = "Ошибка переименования файла '%s'.", -- src\editor\filetree.lua
|
||||
["Unable to save file '%s': %s"] = "Ошибка сохранения файла '%s': %s", -- src\editor\commands.lua
|
||||
["Unable to stop program (pid: %d), code %d."] = "Невозможно завершить программу (pid: %d), код %d.", -- src\editor\debugger.lua
|
||||
["Undo last edit"] = "Отменить последнее действие", -- src\editor\menu_edit.lua
|
||||
["Unmap Directory"] = "Убрать папку из списка", -- src\editor\filetree.lua
|
||||
["Unset '%s' As Start File"] = "Отменить '%s' как файл запуска", -- src\editor\filetree.lua
|
||||
["Use '%s' to see full description."] = "Используйте '%s' для полного описания.", -- src\editor\editor.lua
|
||||
["Use '%s' to show line endings and '%s' to convert them."] = "Используйте '%s' для отображения символов конца строки и '%s' для их преобразования.", -- src\editor\commands.lua
|
||||
["Use 'clear' to clear the shell output and the history."] = "Используйте команду 'clear' для очистки содержимого окна и истории.", -- src\editor\shellbox.lua
|
||||
["Use Shift-Enter for multiline code."] = "Используйте Shift-Enter для многострочного кода.", -- src\editor\shellbox.lua
|
||||
["Value"] = "Значение", -- src\editor\debugger.lua
|
||||
["View the outline window"] = "Показать окно структуры", -- src\editor\menu_view.lua
|
||||
["View the output/console window"] = "Показать окно вывода/консоли", -- src\editor\menu_view.lua
|
||||
["View the project/filetree window"] = "Показать окно проекта/списка файлов", -- src\editor\menu_view.lua
|
||||
["View the stack window"] = "Показать окно стека", -- src\editor\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\menu_view.lua
|
||||
["View the watch window"] = "Показать окно выражений", -- src\editor\menu_view.lua
|
||||
["Watch"] = "Выражение", -- src\editor\debugger.lua
|
||||
["Welcome to the interactive Lua interpreter."] = "Добро пожаловать в интерактивный интерпретатор Lua.", -- src\editor\shellbox.lua
|
||||
["Wrap ar&ound"] = "Продолжить сначала", -- src\editor\findreplace.lua
|
||||
["Wrap around"] = "Продолжить сначала", -- src\editor\findreplace.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
|
||||
|
||||
@@ -16,8 +16,8 @@ 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
|
||||
@@ -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`;
|
||||
@@ -153,3 +153,12 @@ luaspec.keywords[1] = luaspec.keywords[1]:gsub(' return', ''):gsub(' break', '')
|
||||
|
||||
-- assign new style to the added slot (starting from 0)
|
||||
styles["keywords"..num] = {fg = {240, 0, 0}, b = true}
|
||||
|
||||
-- enable `Opt+Shift+Left/Right` shortcut on OSX
|
||||
editor.keymap[#editor.keymap+1] = {wxstc.wxSTC_KEY_LEFT, wxstc.wxSTC_SCMOD_ALT+wxstc.wxSTC_SCMOD_SHIFT, wxstc.wxSTC_CMD_WORDLEFTEXTEND, "Macintosh"}
|
||||
editor.keymap[#editor.keymap+1] = {wxstc.wxSTC_KEY_RIGHT, wxstc.wxSTC_SCMOD_ALT+wxstc.wxSTC_SCMOD_SHIFT, wxstc.wxSTC_CMD_WORDRIGHTENDEXTEND, "Macintosh"}
|
||||
|
||||
-- enable Emacs bindings to use `Ctrl-A` and `Ctrl-E` to go to the line start/end
|
||||
editor.keymap[#editor.keymap+1] = {('A'):byte(), wxstc.wxSTC_SCMOD_CTRL, wxstc.wxSTC_CMD_HOME}
|
||||
editor.keymap[#editor.keymap+1] = {('E'):byte(), wxstc.wxSTC_SCMOD_CTRL, wxstc.wxSTC_CMD_LINEEND}
|
||||
keymap[ID.SELECTALL] = nil -- remove `Ctrl-A` shortcut from `SelectAll`
|
||||
|
||||
@@ -1,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.TOGGLEBREAKPOINT] = "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
|
||||
|
||||
@@ -19,8 +19,8 @@ return {
|
||||
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
|
||||
@@ -39,7 +39,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)
|
||||
@@ -55,12 +55,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,
|
||||
}
|
||||
|
||||
@@ -26,21 +26,22 @@ return {
|
||||
table.insert(paths, p)
|
||||
end
|
||||
if not corona then
|
||||
DisplayOutput("Can't find corona executable in any of the folders in PATH: "
|
||||
..table.concat(paths, ", ").."\n")
|
||||
DisplayOutputLn("Can't find corona executable in any of the folders in PATH: "
|
||||
..table.concat(paths, ", "))
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
local file = GetFullPathIfExists(self:fworkdir(wfilename), 'main.lua')
|
||||
if not file then
|
||||
DisplayOutput("Can't find 'main.lua' file in the current project folder.\n")
|
||||
DisplayOutputLn(("Can't find 'main.lua' file in the current project folder: '%s'.")
|
||||
:format(self:fworkdir(wfilename)))
|
||||
return
|
||||
end
|
||||
|
||||
if rundebug then
|
||||
-- start running the application right away
|
||||
DebuggerAttachDefault({startwith = file, redirect = mac and "r" or "c",
|
||||
DebuggerAttachDefault({startwith = file, redirect = "r",
|
||||
runstart = ide.config.debugger.runonstart ~= false})
|
||||
|
||||
local function needRefresh(mdbl, mdbc)
|
||||
@@ -79,19 +80,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 "..ide.config.corona.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,
|
||||
|
||||
@@ -52,9 +52,6 @@ return {
|
||||
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)
|
||||
|
||||
@@ -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,7 +13,7 @@ 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)
|
||||
@@ -30,7 +30,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)
|
||||
@@ -51,29 +51,32 @@ return {
|
||||
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,
|
||||
|
||||
@@ -114,12 +114,6 @@ return {
|
||||
-- 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,
|
||||
|
||||
@@ -83,6 +83,7 @@ end
|
||||
|
||||
local sym = newset("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_")
|
||||
local dig = newset('0123456789')
|
||||
local name = "([_A-Za-z][_A-Za-z0-9]*)"
|
||||
local op = newset('=~<>.+-*/%^#=<>;:,.{}[]()')
|
||||
|
||||
op['=='] = true
|
||||
@@ -90,11 +91,14 @@ op['<='] = true
|
||||
op['>='] = true
|
||||
op['~='] = true
|
||||
op['..'] = true
|
||||
op['<<'] = true
|
||||
op['>>'] = true
|
||||
op['//'] = true
|
||||
|
||||
local is_keyword = qws[[
|
||||
and break do else elseif end false for function if
|
||||
in local nil not or repeat return
|
||||
then true until while]]
|
||||
then true until while goto]]
|
||||
|
||||
function M.lex(code, f, pos)
|
||||
local pos = pos or 1
|
||||
@@ -106,7 +110,7 @@ function M.lex(code, f, pos)
|
||||
pos = p2
|
||||
|
||||
if sym[n1] then
|
||||
local tok = code:match('^([_A-Za-z][_A-Za-z0-9]*)', pos)
|
||||
local tok = code:match('^'..name, pos)
|
||||
assert(tok)
|
||||
if is_keyword[tok] then
|
||||
f('Keyword', tok, pos)
|
||||
@@ -119,6 +123,15 @@ function M.lex(code, f, pos)
|
||||
assert(tok)
|
||||
f('Comment', tok, pos)
|
||||
pos = pos2
|
||||
elseif n2 == '::' then
|
||||
local tok = code:match('^(::%s*'..name..'%s*::)', pos)
|
||||
if tok then
|
||||
f('Label', tok, pos)
|
||||
pos = pos + #tok
|
||||
else
|
||||
f('Unknown', code:sub(pos, pos+1), pos) -- unterminated label
|
||||
pos = pos + 2
|
||||
end
|
||||
elseif n1 == '\'' or n1 == '\"' or n2 == '[[' or n2 == '[=' then
|
||||
local tok = match_string(code, pos)
|
||||
if tok then
|
||||
|
||||
@@ -6,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'.
|
||||
@@ -159,15 +176,34 @@ function PARSE.parse_scope(lx, f, level)
|
||||
local cnext = lx:peek()
|
||||
if cnext.tag == 'Keyword' and (cnext[1] == '(' or cnext[1] == '{')
|
||||
or cnext.tag == 'String' then
|
||||
f('FunctionCall', c[1], c.lineinfo)
|
||||
f('FunctionCall', c[1], c.lineinfo, scopes[#scopes].inside_local ~= nil)
|
||||
end
|
||||
if scopes[#scopes].inside_table and cnext.tag == 'Keyword' and cnext[1] == '=' then
|
||||
-- table field
|
||||
f('String', c[1], c.lineinfo)
|
||||
local scope = #scopes
|
||||
local inside_local = scopes[scope].inside_local ~= nil
|
||||
-- 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 (scopes[scope].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
|
||||
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
|
||||
|
||||
@@ -203,7 +239,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 +257,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 +271,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
|
||||
@@ -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
|
||||
@@ -820,8 +839,7 @@ function M.infer_values(top_ast, tokenlist, src, report)
|
||||
local x
|
||||
local val = function() x=nil end
|
||||
local fpos = LA.ast_pos_range(ast, tokenlist)
|
||||
local source = 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?
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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.62,
|
||||
_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
|
||||
@@ -60,7 +62,7 @@ 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
|
||||
|
||||
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 +97,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
|
||||
@@ -126,7 +127,7 @@ end
|
||||
local function q(s) return s:gsub('([%(%)%.%%%+%-%*%?%[%^%$%]])','%%%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.28 -- (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}
|
||||
@@ -146,8 +147,8 @@ local function s(t, opts)
|
||||
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 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
|
||||
@@ -160,7 +161,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))
|
||||
@@ -202,8 +203,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 +233,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 +274,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 +333,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
|
||||
@@ -640,7 +648,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 os.exit(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 +680,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 +740,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 +775,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 +793,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 +817,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 +833,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 +857,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 +873,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 +894,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
|
||||
@@ -906,7 +917,7 @@ local function debugger_loop(sev, svars, sfile, sline)
|
||||
-- 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 +929,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
|
||||
@@ -945,7 +956,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 +974,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 +999,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 +1053,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
|
||||
@@ -1067,6 +1086,8 @@ local function controller(controller_host, controller_port, scratchpad)
|
||||
-- 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,
|
||||
@@ -1199,7 +1220,7 @@ local function handle(params, client, options)
|
||||
if client:receive() ~= "200 OK" then
|
||||
print("Unknown error")
|
||||
os.exit(1, true)
|
||||
return nil, nil, "Debugger error: unexpected response after 'done'"
|
||||
return nil, nil, "Debugger error: unexpected response after DONE"
|
||||
end
|
||||
elseif command == "setb" or command == "asetb" then
|
||||
_, _, _, file, line = string.find(params, "^([a-z]+)%s+(.-)%s+(%d+)%s*$")
|
||||
@@ -1257,15 +1278,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 +1324,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 +1342,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 +1469,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)
|
||||
@@ -1579,6 +1601,7 @@ mobdebug.coro = coro
|
||||
mobdebug.done = done
|
||||
mobdebug.pause = function() step_into = true end
|
||||
mobdebug.yield = nil -- callback
|
||||
mobdebug.basedir = function(b) if b then basedir = b end return basedir end
|
||||
|
||||
-- this is needed to make "require 'modebug'" to work when mobdebug
|
||||
-- module is loaded manually
|
||||
|
||||
@@ -30,8 +30,9 @@ 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
|
||||
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,
|
||||
|
||||
32
spec/cbase.lua
Normal file
32
spec/cbase.lua
Normal file
@@ -0,0 +1,32 @@
|
||||
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("([\r\n]%s*)"..funcdeftmpl, pos)
|
||||
if (not s) then
|
||||
s,e,pref,cap,parms = str:find("^(%s*)"..funcdeftmpl, pos)
|
||||
end
|
||||
if parms and #parms > 0 and not parms:find(idtmpl) 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,},
|
||||
|
||||
196
spec/lua.lua
196
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,17 @@ 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('".-"','')
|
||||
:gsub('%-%-.*','') -- strip comments after strings are processed
|
||||
:gsub("%b()","()") -- remove all function calls
|
||||
)
|
||||
-- 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
|
||||
-- strip comments after strings are processed and remove all function calls
|
||||
str = str:gsub('%-%-.*',''):gsub("%b()","()")
|
||||
|
||||
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 +103,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 +123,90 @@ 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","")
|
||||
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]) 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
|
||||
@@ -277,6 +268,7 @@ return {
|
||||
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,
|
||||
|
||||
17
src/defs.lua
17
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
|
||||
|
||||
@@ -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)
|
||||
---------------------------------------------------------
|
||||
|
||||
@@ -111,24 +111,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 +129,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 +147,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 +189,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 +226,19 @@ local function resolveAssign(editor,tx)
|
||||
local c
|
||||
if (assigns) then
|
||||
-- find assign
|
||||
local change = true
|
||||
local change, n, 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
|
||||
@@ -255,6 +256,8 @@ local function resolveAssign(editor,tx)
|
||||
end
|
||||
end
|
||||
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 +270,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 +305,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
|
||||
@@ -461,7 +466,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 +482,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 +511,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,7 +522,7 @@ 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
|
||||
@@ -588,6 +591,27 @@ function CreateAutoCompList(editor,key)
|
||||
-- handle (multiple) inheritance; add matches from the parent class/lib
|
||||
addInheritance(tab, apilist, {[tab] = true})
|
||||
|
||||
-- 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 ~= key and var:find(key, 1, true) == 1 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
|
||||
|
||||
local compstr = ""
|
||||
if apilist then
|
||||
if (#rest > 0) then
|
||||
|
||||
337
src/editor/commandbar.lua
Normal file
337
src/editor/commandbar.lua
Normal file
@@ -0,0 +1,337 @@
|
||||
-- Copyright 2011-15 Paul Kulchenko, ZeroBrane LLC
|
||||
---------------------------------------------------------
|
||||
|
||||
local maxlines = 8
|
||||
local row_height = 46
|
||||
local row_width = 450
|
||||
|
||||
function CommandBarShow(params)
|
||||
local onDone, onUpdate, onItem, onSelection, defaultText, selectedText =
|
||||
params.onDone, params.onUpdate, params.onItem, params.onSelection,
|
||||
params.defaultText, params.selectedText
|
||||
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)
|
||||
|
||||
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 <= #t
|
||||
and pattern:gsub("[^%w_]+",""):lower():gsub(".", "%1.*"):gsub("%.%*$","")
|
||||
or nil
|
||||
for _, v in ipairs(t) do
|
||||
if #v >= plen and (not prefilter or v:lower():find(prefilter)) 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
|
||||
table.sort(r, function(a, b) return a[2] > b[2] end)
|
||||
if limit then r[limit] = nil end -- limit the list to be displayed
|
||||
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)
|
||||
@@ -89,7 +93,7 @@ function LoadFile(filePath, editor, file_must_exist, skipselection)
|
||||
-- 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
|
||||
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
|
||||
@@ -107,6 +111,7 @@ function LoadFile(filePath, editor, file_must_exist, skipselection)
|
||||
end
|
||||
|
||||
editor:Colourise(0, -1)
|
||||
editor:ResetTokenList() -- reset list of tokens if this is a reused editor
|
||||
editor:Thaw()
|
||||
|
||||
local edcfg = ide.config.editor
|
||||
@@ -137,18 +142,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.
|
||||
@@ -200,8 +206,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)
|
||||
@@ -214,18 +224,10 @@ function ActivateFile(filename)
|
||||
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 exts = ide:GetKnownExtensions()
|
||||
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)
|
||||
@@ -277,12 +279,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)
|
||||
|
||||
@@ -337,12 +341,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
|
||||
@@ -501,62 +505,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 +524,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
|
||||
|
||||
@@ -589,9 +545,7 @@ function CompileProgram(editor, params)
|
||||
local func, err = loadstring(StripShebang(editor:GetText()), '@'..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
|
||||
@@ -737,20 +691,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)
|
||||
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 +717,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:GetText() 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()
|
||||
@@ -936,7 +893,8 @@ 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()
|
||||
end
|
||||
@@ -954,7 +912,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 +919,8 @@ 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
|
||||
pcall(function() ide.infocus:SetFocus() end)
|
||||
return
|
||||
end
|
||||
|
||||
@@ -983,43 +940,52 @@ 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() ide.infocus:SetFocus() 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
|
||||
-- also collect all the garbage
|
||||
if not active then collectgarbage() 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)
|
||||
|
||||
@@ -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,15 @@ 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.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 +38,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(...)
|
||||
@@ -96,7 +87,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
|
||||
|
||||
@@ -210,7 +201,7 @@ 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,7 +210,7 @@ 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)
|
||||
@@ -227,6 +218,12 @@ local function updateWatches(item)
|
||||
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 +245,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 +260,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)
|
||||
@@ -313,7 +311,15 @@ 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)
|
||||
|
||||
-- found and marked what we are looking for;
|
||||
-- don't need to activate with CHECKONLY (this assumes line is given)
|
||||
@@ -401,7 +407,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 +447,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 +532,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 +570,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 +637,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 +653,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 +691,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 +700,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 +730,11 @@ debugger.listen = function(start)
|
||||
activateDocument(file, line)
|
||||
end
|
||||
end
|
||||
|
||||
-- refresh toolbar and menus in case the main app is not active
|
||||
if ide.config.debugger.requestattention then RequestAttention() end
|
||||
ide:GetMainFrame():UpdateWindowUI(wx.wxUPDATE_UI_FROMIDLE)
|
||||
ide:GetToolBar():UpdateWindowUI(wx.wxUPDATE_UI_FROMIDLE)
|
||||
end)
|
||||
debugger.listening = server
|
||||
end
|
||||
@@ -720,7 +742,7 @@ 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)
|
||||
@@ -745,9 +767,11 @@ debugger.handle = function(command, server, options)
|
||||
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 +807,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
|
||||
@@ -875,6 +899,12 @@ do
|
||||
end
|
||||
end
|
||||
|
||||
local function isemptyline(editor, line)
|
||||
local text = editor:GetLine(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,6 +920,42 @@ 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
|
||||
@@ -938,14 +1004,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 +1023,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
|
||||
|
||||
@@ -1023,23 +1082,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 +1152,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 +1164,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 +1190,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)
|
||||
@@ -1164,6 +1241,7 @@ local function debuggerCreateWatchWindow()
|
||||
{ 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) },
|
||||
})
|
||||
item = nil
|
||||
end)
|
||||
@@ -1181,6 +1259,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 +1315,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 +1350,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
|
||||
@@ -1281,13 +1372,19 @@ local function debuggerMakeFileName(editor)
|
||||
end
|
||||
|
||||
function DebuggerToggleBreakpoint(editor, line)
|
||||
local markers = editor:MarkerGet(line)
|
||||
local filePath = debugger.editormap and debugger.editormap[editor]
|
||||
or debuggerMakeFileName(editor)
|
||||
if bit.band(markers, BREAKPOINT_MARKER_VALUE) > 0 then
|
||||
if bit.band(editor:MarkerGet(line), BREAKPOINT_MARKER_VALUE) > 0 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
|
||||
@@ -1315,7 +1412,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 +1431,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)
|
||||
|
||||
@@ -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)
|
||||
---------------------------------------------------------
|
||||
@@ -8,10 +8,10 @@ local editorID = 100 -- window id to create editor pages with, incremented for n
|
||||
local openDocuments = ide.openDocuments
|
||||
local statusBar = ide.frame.statusBar
|
||||
local notebook = ide.frame.notebook
|
||||
local funclist = ide.frame.toolBar.funclist
|
||||
local edcfg = ide.config.editor
|
||||
local styles = ide.config.styles
|
||||
local unpack = table.unpack or unpack
|
||||
local q = EscapeMagic
|
||||
|
||||
local margin = { LINENUMBER = 0, MARKER = 1, FOLD = 2 }
|
||||
local linenummask = "99999"
|
||||
@@ -37,14 +37,10 @@ local foldtypes = {
|
||||
-- Only update if the text has changed.
|
||||
local statusTextTable = { "OVR?", "R/O?", "Cursor Pos" }
|
||||
|
||||
funclist:SetFont(ide.font.dNormal)
|
||||
|
||||
local function updateStatusText(editor)
|
||||
local texts = { "", "", "" }
|
||||
if ide.frame and editor then
|
||||
local pos = editor:GetCurrentPos()
|
||||
local line = editor:LineFromPosition(pos)
|
||||
local col = 1 + pos - editor:PositionFromLine(line)
|
||||
local selected = #editor:GetSelectedText()
|
||||
local selections = ide.wxver >= "2.9.5" and editor:GetSelections() or 1
|
||||
|
||||
@@ -52,8 +48,8 @@ local function updateStatusText(editor)
|
||||
iff(editor:GetOvertype(), TR("OVR"), TR("INS")),
|
||||
iff(editor:GetReadOnly(), TR("R/O"), TR("R/W")),
|
||||
table.concat({
|
||||
TR("Ln: %d"):format(line + 1),
|
||||
TR("Col: %d"):format(col),
|
||||
TR("Ln: %d"):format(editor:LineFromPosition(pos) + 1),
|
||||
TR("Col: %d"):format(editor:GetColumn(pos) + 1),
|
||||
selected > 0 and TR("Sel: %d/%d"):format(selected, selections) or "",
|
||||
}, ' ')}
|
||||
end
|
||||
@@ -176,9 +172,6 @@ function SetEditorSelection(selection)
|
||||
ide.frame:SetTitle(ExpandPlaceholders(ide.config.format.apptitle))
|
||||
|
||||
if editor then
|
||||
if funclist:IsEmpty() then funclist:Append(TR("Jump to a function definition..."), 0) end
|
||||
funclist:SetSelection(0)
|
||||
|
||||
editor:SetFocus()
|
||||
editor:SetSTCFocus(true)
|
||||
|
||||
@@ -215,17 +208,6 @@ function GetEditorFileAndCurInfo(nochecksave)
|
||||
return fn,info
|
||||
end
|
||||
|
||||
-- Set if the document is modified and update the notebook page text
|
||||
function SetDocumentModified(id, modified, text)
|
||||
local modpref, doc = '* ', openDocuments[id]
|
||||
if not doc then return end
|
||||
local pageText = text or notebook:GetPageText(doc.index):gsub("^"..EscapeMagic(modpref), "")
|
||||
|
||||
if modified then pageText = modpref..pageText end
|
||||
openDocuments[id].isModified = modified
|
||||
notebook:SetPageText(doc.index, pageText)
|
||||
end
|
||||
|
||||
function EditorAutoComplete(editor)
|
||||
if not (editor and editor.spec) then return end
|
||||
|
||||
@@ -248,17 +230,19 @@ function EditorAutoComplete(editor)
|
||||
lt = lt:gsub("%b()","")
|
||||
lt = lt:gsub("%b{}","")
|
||||
lt = lt:gsub("%b[]",".0")
|
||||
-- match from starting brace
|
||||
lt = lt:match("[^%[%(%{%s,]*$")
|
||||
-- remove everything that can't be auto-completed
|
||||
lt = lt:match("[%w_"..q(editor.spec.sep).."]*$")
|
||||
|
||||
-- know now which string is to be completed
|
||||
local userList = CreateAutoCompList(editor,lt)
|
||||
local userList = CreateAutoCompList(editor, lt, pos)
|
||||
|
||||
-- remove any suggestions that match the word the cursor is on
|
||||
-- for example, if typing 'foo' in front of 'bar', 'foobar' is not offered
|
||||
local right = linetx:sub(localpos+1,#linetx):match("^([%a_]+[%w_]*)")
|
||||
if userList and right then
|
||||
userList = userList:gsub("%f[%w_]"..lt..right.."%f[%W]",""):gsub(" +"," ")
|
||||
-- remove all spaces that may be left if "foo" removed from "foo foo"
|
||||
userList = (userList:gsub("%f[%w_]"..lt..right.."%f[%W]","")
|
||||
:gsub("^ +",""):gsub(" +$",""):gsub(" +"," "))
|
||||
end
|
||||
|
||||
-- don't show the list if it only suggests what's already typed
|
||||
@@ -328,6 +312,21 @@ local function getValAtPosition(editor, pos)
|
||||
return var, funccall
|
||||
end
|
||||
|
||||
local function formatUpToX(s)
|
||||
local x = math.max(20, ide.config.acandtip.width)
|
||||
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 callTipFitAndShow(editor, pos, tip)
|
||||
local point = editor:PointFromPosition(pos)
|
||||
local height = editor:TextHeight(pos)
|
||||
@@ -339,7 +338,7 @@ local function callTipFitAndShow(editor, pos, tip)
|
||||
-- find the longest line in terms of width in pixels.
|
||||
local maxwidth = 0
|
||||
local lines = {}
|
||||
for line in tip:gmatch("[^\n]*\n?") do
|
||||
for line in formatUpToX(tip):gmatch("[^\n]*\n?") do
|
||||
local width = editor:TextWidth(wxstc.wxSTC_STYLE_DEFAULT, line)
|
||||
if width > maxwidth then maxwidth = width end
|
||||
table.insert(lines, line)
|
||||
@@ -369,13 +368,13 @@ function EditorCallTip(editor, pos, x, y)
|
||||
-- don't activate if the window itself is not active (in the background)
|
||||
if not ide.frame:IsActive() then return end
|
||||
|
||||
local var, funccall = getValAtPosition(editor, pos)
|
||||
local var, funccall = editor:ValueFromPosition(pos)
|
||||
-- if this is a value type rather than a function/method call, then use
|
||||
-- full match to avoid calltip about coroutine.status for "status" vars
|
||||
local tip = GetTipInfo(editor, funccall or var, false, not funccall)
|
||||
local limit = ide.config.acandtip.maxlength
|
||||
if ide.debugger and ide.debugger.server then
|
||||
if var then
|
||||
local limit = 128
|
||||
ide.debugger.quickeval(var, function(val)
|
||||
if #val > limit then val = val:sub(1, limit-3).."..." end
|
||||
-- check if the mouse position is specified and the mouse has moved,
|
||||
@@ -384,19 +383,21 @@ function EditorCallTip(editor, pos, x, y)
|
||||
local mpos = wx.wxGetMousePosition()
|
||||
if mpos.x ~= x or mpos.y ~= y then return end
|
||||
end
|
||||
callTipFitAndShow(editor, pos, val)
|
||||
if PackageEventHandle("onEditorCallTip", editor, val, funccall or var, true) ~= false then
|
||||
callTipFitAndShow(editor, pos, val)
|
||||
end
|
||||
end)
|
||||
end
|
||||
elseif tip then
|
||||
local oncalltip = PackageEventHandle("onEditorCallTip", editor, tip, funccall or var, false)
|
||||
-- only shorten if shown on mouse-over. Use shortcut to get full info.
|
||||
local shortento = 450
|
||||
local showtooltip = ide.frame.menuBar:FindItem(ID_SHOWTOOLTIP)
|
||||
local suffix = "...\n"
|
||||
..TR("Use '%s' to see full description."):format(showtooltip:GetLabel())
|
||||
if x and y and #tip > shortento then
|
||||
tip = tip:sub(1, shortento-#suffix):gsub("%W*%w*$","")..suffix
|
||||
if x and y and #tip > limit then
|
||||
tip = tip:sub(1, limit-#suffix):gsub("%W*%w*$","")..suffix
|
||||
end
|
||||
callTipFitAndShow(editor, pos, tip)
|
||||
if oncalltip ~= false then callTipFitAndShow(editor, pos, tip) end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -411,11 +412,14 @@ function EditorIsModified(editor)
|
||||
end
|
||||
|
||||
-- Indicator handling for functions and local/global variables
|
||||
local function indicateFunctionsOnly(editor, lines, linee)
|
||||
if not (edcfg.showfncall and editor.spec and editor.spec.isfncall)
|
||||
or not (styles.indicator and styles.indicator.fncall) then return end
|
||||
-- indicator.MASKED is handled separately, so don't include in MAX
|
||||
local indicator = {FNCALL = 0, LOCAL = 1, GLOBAL = 2, MASKING = 3, MASKED = 4, MAX = 3}
|
||||
|
||||
function IndicateFunctionsOnly(editor, lines, linee)
|
||||
local sindic = styles.indicator
|
||||
if not (edcfg.showfncall and editor.spec and editor.spec.isfncall)
|
||||
or not (sindic and sindic.fncall and sindic.fncall.st ~= wxstc.wxSTC_INDIC_HIDDEN) then return end
|
||||
|
||||
local es = editor:GetEndStyled()
|
||||
local lines = lines or 0
|
||||
local linee = linee or editor:GetLineCount()-1
|
||||
|
||||
@@ -427,18 +431,14 @@ local function indicateFunctionsOnly(editor, lines, linee)
|
||||
for i,v in pairs(editor.spec.iskeyword0) do isinvalid[i] = v end
|
||||
for i,v in pairs(editor.spec.isstring) do isinvalid[i] = v end
|
||||
|
||||
local INDICS_MASK = wxstc.wxSTC_INDICS_MASK
|
||||
local INDIC0_MASK = wxstc.wxSTC_INDIC0_MASK
|
||||
|
||||
editor:SetIndicatorCurrent(indicator.FNCALL)
|
||||
for line=lines,linee do
|
||||
local tx = editor:GetLine(line)
|
||||
local ls = editor:PositionFromLine(line)
|
||||
editor:IndicatorClearRange(ls, #tx)
|
||||
|
||||
local from = 1
|
||||
local off = -1
|
||||
|
||||
editor:StartStyling(ls,INDICS_MASK)
|
||||
editor:SetStyling(#tx,0)
|
||||
while from do
|
||||
tx = from==1 and tx or string.sub(tx,from)
|
||||
|
||||
@@ -447,21 +447,15 @@ local function indicateFunctionsOnly(editor, lines, linee)
|
||||
if (f) then
|
||||
local p = ls+f+off
|
||||
local s = bit.band(editor:GetStyleAt(p),31)
|
||||
editor:StartStyling(p,INDICS_MASK)
|
||||
editor:SetStyling(#w,isinvalid[s] and 0 or (INDIC0_MASK + 1))
|
||||
if not isinvalid[s] then editor:IndicatorFillRange(p, #w) end
|
||||
off = off + t
|
||||
end
|
||||
from = t and (t+1)
|
||||
end
|
||||
end
|
||||
editor:StartStyling(es,31)
|
||||
end
|
||||
|
||||
local delayed = {}
|
||||
local tokenlists = {}
|
||||
|
||||
-- indicator.MASKED is handled separately, so don't include in MAX
|
||||
local indicator = {FNCALL = 0, LOCAL = 1, GLOBAL = 2, MASKING = 3, MASKED = 4, MAX = 3}
|
||||
|
||||
function IndicateIfNeeded()
|
||||
local editor = GetEditor()
|
||||
@@ -473,7 +467,7 @@ end
|
||||
-- find all instances of a symbol at pos
|
||||
-- return table with [0] as the definition position (if local)
|
||||
local function indicateFindInstances(editor, name, pos)
|
||||
local tokens = tokenlists[editor] or {}
|
||||
local tokens = editor:GetTokenList()
|
||||
local instances = {{[-1] = 1}}
|
||||
local this
|
||||
for _, token in ipairs(tokens) do
|
||||
@@ -506,18 +500,19 @@ local function indicateFindInstances(editor, name, pos)
|
||||
return this and instances[#instances] or {}
|
||||
end
|
||||
|
||||
function IndicateAll(editor, lines, linee)
|
||||
function IndicateAll(editor, lines)
|
||||
if not ide.config.autoanalyzer then return end
|
||||
|
||||
local d = delayed[editor]
|
||||
delayed[editor] = nil -- assume this can be finished for now
|
||||
|
||||
-- this function can be called for an editor tab that is already closed
|
||||
-- when there are still some pending events for it, so handle it.
|
||||
if not pcall(function() editor:GetId() end) then return end
|
||||
if not ide:IsValidCtrl(editor) then return end
|
||||
|
||||
-- if markvars is not set in the spec, nothing else to do
|
||||
if not (editor.spec and editor.spec.marksymbols) then return end
|
||||
|
||||
-- if markvars is not set in the spec, check for functions-only indicators
|
||||
if not (editor.spec and editor.spec.markvars) then
|
||||
return indicateFunctionsOnly(editor, lines, linee)
|
||||
end
|
||||
local indic = styles.indicator or {}
|
||||
|
||||
local pos, vars = d and d[1] or 1, d and d[2] or nil
|
||||
@@ -527,8 +522,7 @@ function IndicateAll(editor, lines, linee)
|
||||
pos, vars = 1, nil
|
||||
end
|
||||
|
||||
tokenlists[editor] = tokenlists[editor] or {}
|
||||
local tokens = tokenlists[editor]
|
||||
local tokens = editor:GetTokenList()
|
||||
|
||||
if start then -- if the range is specified
|
||||
local curindic = editor:GetIndicatorCurrent()
|
||||
@@ -536,7 +530,7 @@ function IndicateAll(editor, lines, linee)
|
||||
for n = #tokens, 1, -1 do
|
||||
local token = tokens[n]
|
||||
-- find the last token before the range
|
||||
if token[1] == 'EndScope' and token.name and token.fpos+#token.name < start then
|
||||
if not token.nobreak and token.name and token.fpos+#token.name < start then
|
||||
pos, vars = token.fpos+#token.name, token.context
|
||||
break
|
||||
end
|
||||
@@ -574,8 +568,7 @@ function IndicateAll(editor, lines, linee)
|
||||
end
|
||||
else
|
||||
if pos == 1 then -- if not continuing, then trim the list
|
||||
tokens = {}
|
||||
tokenlists[editor] = tokens
|
||||
tokens = editor:ResetTokenList()
|
||||
end
|
||||
end
|
||||
|
||||
@@ -591,19 +584,21 @@ function IndicateAll(editor, lines, linee)
|
||||
|
||||
local s = TimeGet()
|
||||
local canwork = start and 0.010 or 0.100 -- use shorter interval when typing
|
||||
local f = editor.spec.markvars(editor:GetText(), pos, vars)
|
||||
|
||||
local f = editor.spec.marksymbols(editor:GetText(), pos, vars)
|
||||
while true do
|
||||
local op, name, lineinfo, vars, at = f()
|
||||
local op, name, lineinfo, vars, at, nobreak = f()
|
||||
if not op then break end
|
||||
local var = vars and vars[name]
|
||||
local token = {op, name=name, fpos=lineinfo, at=at, context=vars,
|
||||
self = (op == 'VarSelf') or nil }
|
||||
self = (op == 'VarSelf') or nil, nobreak=nobreak}
|
||||
if op == 'Function' then
|
||||
vars['function'] = (vars['function'] or 0) + 1
|
||||
end
|
||||
if op == 'FunctionCall' then
|
||||
if indic.fncall and edcfg.showfncall then
|
||||
IndicateOne(indicator.FNCALL, lineinfo, #name)
|
||||
end
|
||||
elseif op ~= 'VarNext' and op ~= 'VarInside' and op ~= 'Statement' then
|
||||
elseif op ~= 'VarNext' and op ~= 'VarInside' and op ~= 'Statement' and op ~= 'String' then
|
||||
table.insert(tokens, token)
|
||||
end
|
||||
|
||||
@@ -620,13 +615,15 @@ function IndicateAll(editor, lines, linee)
|
||||
if indic.varmasked and not var.masked.self then
|
||||
editor:SetIndicatorCurrent(indicator.MASKED)
|
||||
editor:IndicatorFillRange(fpos-1, #name)
|
||||
table.insert(tokens, {"Masked", name=name, fpos=fpos})
|
||||
table.insert(tokens, {"Masked", name=name, fpos=fpos, nobreak=nobreak})
|
||||
end
|
||||
|
||||
if indic.varmasking then IndicateOne(indicator.MASKING, lineinfo, #name) end
|
||||
end
|
||||
if op == 'EndScope' and name and TimeGet()-s > canwork then
|
||||
delayed[editor] = {lineinfo+#name, vars}
|
||||
-- in some rare cases `nobreak` may be a number indicating a desired
|
||||
-- position from which to start in case of a break
|
||||
if lineinfo and nobreak ~= true and (op == 'Statement' or op == 'String') and TimeGet()-s > canwork then
|
||||
delayed[editor] = {tonumber(nobreak) or lineinfo, vars}
|
||||
break
|
||||
end
|
||||
end
|
||||
@@ -637,30 +634,37 @@ function IndicateAll(editor, lines, linee)
|
||||
-- don't clear "masked" indicators as those can be set out of order (so
|
||||
-- last updated fragment is not always the last in terms of its position);
|
||||
-- these indicators should be up-to-date to the end of the code fragment.
|
||||
for indic = 0, indicator.MAX do IndicateOne(indic, pos, 0) end
|
||||
-- also don't clear "funccall" indicators as those can be set based on
|
||||
-- IndicateFunctionsOnly processing, which is dealt with separately
|
||||
local funconly = ide.config.editor.showfncall and editor.spec.isfncall
|
||||
for indic = funconly and indicator.LOCAL or indicator.FNCALL, indicator.MAX do
|
||||
IndicateOne(indic, pos, 0)
|
||||
end
|
||||
|
||||
return delayed[editor] ~= nil -- request more events if still need to work
|
||||
end
|
||||
|
||||
if ide.wxver < "2.9.5" or not ide.config.autoanalyzer then
|
||||
IndicateAll = indicateFunctionsOnly
|
||||
local needmore = delayed[editor] ~= nil
|
||||
if ide.config.outlineinactivity then
|
||||
if needmore then ide.timers.outline:Stop()
|
||||
else ide.timers.outline:Start(ide.config.outlineinactivity*1000, wx.wxTIMER_ONE_SHOT)
|
||||
end
|
||||
end
|
||||
return needmore -- request more events if still need to work
|
||||
end
|
||||
|
||||
-- ----------------------------------------------------------------------------
|
||||
-- Create an editor
|
||||
function CreateEditor()
|
||||
local editor = wxstc.wxStyledTextCtrl(notebook, editorID,
|
||||
wx.wxDefaultPosition, wx.wxSize(0, 0),
|
||||
wx.wxBORDER_NONE)
|
||||
function CreateEditor(bare)
|
||||
local editor = ide:CreateStyledTextCtrl(notebook, editorID,
|
||||
wx.wxDefaultPosition, wx.wxSize(0, 0), wx.wxBORDER_NONE)
|
||||
|
||||
editorID = editorID + 1 -- increment so they're always unique
|
||||
|
||||
editor.matchon = false
|
||||
editor.assignscache = false
|
||||
editor.autocomplete = false
|
||||
editor.bom = false
|
||||
editor.jumpstack = {}
|
||||
editor.ctrlcache = {}
|
||||
editor.tokenlist = {}
|
||||
editor.onidle = {}
|
||||
-- populate cache with Ctrl-<letter> combinations for workaround on Linux
|
||||
-- http://wxwidgets.10942.n7.nabble.com/Menu-shortcuts-inconsistentcy-issue-td85065.html
|
||||
for id, shortcut in pairs(ide.config.keymap) do
|
||||
@@ -689,7 +693,7 @@ function CreateEditor()
|
||||
editor:SetTabWidth(tonumber(edcfg.tabwidth) or 2)
|
||||
editor:SetIndent(tonumber(edcfg.tabwidth) or 2)
|
||||
editor:SetUseTabs(edcfg.usetabs and true or false)
|
||||
editor:SetIndentationGuides(true)
|
||||
editor:SetIndentationGuides(edcfg.indentguide and true or false)
|
||||
editor:SetViewWhiteSpace(edcfg.whitespace and true or false)
|
||||
|
||||
if (edcfg.usewrap) then
|
||||
@@ -728,7 +732,7 @@ function CreateEditor()
|
||||
|
||||
editor:SetMarginWidth(margin.MARKER, 18)
|
||||
editor:SetMarginType(margin.MARKER, wxstc.wxSTC_MARGIN_SYMBOL)
|
||||
editor:SetMarginMask(margin.MARKER, bit.bnot(wxstc.wxSTC_MASK_FOLDERS))
|
||||
editor:SetMarginMask(margin.MARKER, 0xffffffff - wxstc.wxSTC_MASK_FOLDERS)
|
||||
editor:SetMarginSensitive(margin.MARKER, true)
|
||||
|
||||
editor:MarkerDefine(StylesGetMarker("currentline"))
|
||||
@@ -774,10 +778,13 @@ function CreateEditor()
|
||||
editor:AutoCompStops([[ \n\t=-+():.,;*/!"'$%&~'#°^@?´`<>][|}{]])
|
||||
end
|
||||
|
||||
function editor:GotoPosEnforcePolicy(pos)
|
||||
self:GotoPos(pos)
|
||||
self:EnsureVisibleEnforcePolicy(self:LineFromPosition(pos))
|
||||
end
|
||||
function editor:GetTokenList() return self.tokenlist end
|
||||
function editor:ResetTokenList() self.tokenlist = {}; return self.tokenlist end
|
||||
|
||||
function editor:SetupKeywords(...) return SetupKeywords(self, ...) end
|
||||
function editor:ValueFromPosition(pos) return getValAtPosition(self, pos) end
|
||||
|
||||
function editor:DoWhenIdle(func) table.insert(self.onidle, func) end
|
||||
|
||||
-- GotoPos should work by itself, but it doesn't (wx 2.9.5).
|
||||
-- This is likely because the editor window hasn't been refreshed yet,
|
||||
@@ -807,7 +814,7 @@ function CreateEditor()
|
||||
end
|
||||
end
|
||||
|
||||
function editor:SetupKeywords(...) return SetupKeywords(self, ...) end
|
||||
if bare then return editor end -- bare editor doesn't have any event handlers
|
||||
|
||||
editor.ev = {}
|
||||
editor:Connect(wxstc.wxEVT_STC_MARGINCLICK,
|
||||
@@ -817,13 +824,12 @@ function CreateEditor()
|
||||
if marginno == margin.MARKER then
|
||||
DebuggerToggleBreakpoint(editor, line)
|
||||
elseif marginno == margin.FOLD then
|
||||
local header = bit.band(editor:GetFoldLevel(line),
|
||||
wxstc.wxSTC_FOLDLEVELHEADERFLAG) == wxstc.wxSTC_FOLDLEVELHEADERFLAG
|
||||
if wx.wxGetKeyState(wx.WXK_SHIFT) and wx.wxGetKeyState(wx.WXK_CONTROL) then
|
||||
FoldSome()
|
||||
else
|
||||
local level = editor:GetFoldLevel(line)
|
||||
if HasBit(level, wxstc.wxSTC_FOLDLEVELHEADERFLAG) then
|
||||
editor:ToggleFold(line)
|
||||
end
|
||||
editor:FoldSome()
|
||||
elseif header then
|
||||
editor:ToggleFold(line)
|
||||
end
|
||||
end
|
||||
end)
|
||||
@@ -834,14 +840,15 @@ function CreateEditor()
|
||||
editor.assignscache = false
|
||||
end
|
||||
local evtype = event:GetModificationType()
|
||||
local pos = event:GetPosition()
|
||||
local firstLine = editor:LineFromPosition(pos)
|
||||
local inserted = bit.band(evtype, wxstc.wxSTC_MOD_INSERTTEXT) ~= 0
|
||||
local deleted = bit.band(evtype, wxstc.wxSTC_MOD_DELETETEXT) ~= 0
|
||||
if (inserted or deleted) then
|
||||
SetAutoRecoveryMark()
|
||||
|
||||
local firstLine = editor:LineFromPosition(event:GetPosition())
|
||||
local linesChanged = inserted and event:GetLinesAdded() or 0
|
||||
table.insert(editor.ev, {event:GetPosition(), linesChanged})
|
||||
table.insert(editor.ev, {pos, linesChanged})
|
||||
DynamicWordsAdd(editor, nil, firstLine, linesChanged)
|
||||
end
|
||||
|
||||
@@ -850,21 +857,37 @@ function CreateEditor()
|
||||
|
||||
if (beforeInserted or beforeDeleted) then
|
||||
-- unfold the current line being changed if folded
|
||||
local firstLine = editor:LineFromPosition(event:GetPosition())
|
||||
if not editor:GetFoldExpanded(firstLine) then editor:ToggleFold(firstLine) end
|
||||
local lastLine = editor:LineFromPosition(pos+event:GetLength())
|
||||
if not editor:GetFoldExpanded(firstLine)
|
||||
or not editor:GetLineVisible(firstLine)
|
||||
or not editor:GetLineVisible(lastLine) then
|
||||
editor:ToggleFold(firstLine)
|
||||
for line = firstLine, lastLine do
|
||||
if not editor:GetLineVisible(line) then editor:ToggleFold(line) end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- hide calltip/auto-complete after undo/redo/delete
|
||||
local undodelete = (wxstc.wxSTC_MOD_DELETETEXT
|
||||
+ wxstc.wxSTC_PERFORMED_UNDO + wxstc.wxSTC_PERFORMED_REDO)
|
||||
if bit.band(evtype, undodelete) ~= 0 then
|
||||
editor:DoWhenIdle(function(editor)
|
||||
if editor:CallTipActive() then editor:CallTipCancel() end
|
||||
if editor:AutoCompActive() then editor:AutoCompCancel() end
|
||||
end)
|
||||
end
|
||||
|
||||
if ide.config.acandtip.nodynwords then return end
|
||||
-- only required to track changes
|
||||
|
||||
if beforeDeleted then
|
||||
local pos = event:GetPosition()
|
||||
local text = editor:GetTextRange(pos, pos+event:GetLength())
|
||||
local _, numlines = text:gsub("\r?\n","%1")
|
||||
DynamicWordsRem(editor,nil,editor:LineFromPosition(pos), numlines)
|
||||
DynamicWordsRem(editor,nil,firstLine, numlines)
|
||||
end
|
||||
if beforeInserted then
|
||||
DynamicWordsRem(editor,nil,editor:LineFromPosition(event:GetPosition()), 0)
|
||||
DynamicWordsRem(editor,nil,firstLine, 0)
|
||||
end
|
||||
end)
|
||||
|
||||
@@ -902,7 +925,9 @@ function CreateEditor()
|
||||
|
||||
if edcfg.smartindent
|
||||
-- don't apply smartindent to multi-line comments or strings
|
||||
and not (editor.spec.iscomment[style] or editor.spec.isstring[style])
|
||||
and not (editor.spec.iscomment[style]
|
||||
or editor.spec.isstring[style]
|
||||
or (MarkupIsAny and MarkupIsAny(style)))
|
||||
and editor.spec.isdecindent and editor.spec.isincindent then
|
||||
local closed, blockend = editor.spec.isdecindent(linedone)
|
||||
local opened = editor.spec.isincindent(linedone)
|
||||
@@ -928,14 +953,16 @@ function CreateEditor()
|
||||
local tip = GetTipInfo(editor,linetxtopos,ide.config.acandtip.shorttip)
|
||||
if tip then
|
||||
if editor:CallTipActive() then editor:CallTipCancel() end
|
||||
callTipFitAndShow(editor, pos, tip)
|
||||
if PackageEventHandle("onEditorCallTip", editor, tip) ~= false then
|
||||
callTipFitAndShow(editor, pos, tip)
|
||||
end
|
||||
end
|
||||
|
||||
elseif ide.config.autocomplete then -- code completion prompt
|
||||
local trigger = linetxtopos:match("["..editor.spec.sep.."%w_]+$")
|
||||
-- make sure .autocomplete is never `nil` or editor.autocomplete fails
|
||||
editor.autocomplete = trigger and (#trigger > 1 or trigger:match("["..editor.spec.sep.."]"))
|
||||
and true or false
|
||||
if trigger and (#trigger > 1 or trigger:match("["..editor.spec.sep.."]")) then
|
||||
editor:DoWhenIdle(function(editor) EditorAutoComplete(editor) end)
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
@@ -1023,12 +1050,14 @@ function CreateEditor()
|
||||
|
||||
editor:Connect(wxstc.wxEVT_STC_SAVEPOINTREACHED,
|
||||
function ()
|
||||
SetDocumentModified(editor:GetId(), false)
|
||||
local doc = ide:GetDocument(editor)
|
||||
if doc then doc:SetModified(false) end
|
||||
end)
|
||||
|
||||
editor:Connect(wxstc.wxEVT_STC_SAVEPOINTLEFT,
|
||||
function ()
|
||||
SetDocumentModified(editor:GetId(), true)
|
||||
local doc = ide:GetDocument(editor)
|
||||
if doc then doc:SetModified(true) end
|
||||
end)
|
||||
|
||||
-- "updateStatusText" should be called in UPDATEUI event, but it creates
|
||||
@@ -1042,7 +1071,11 @@ function CreateEditor()
|
||||
PackageEventHandle("onEditorPainted", editor, event)
|
||||
|
||||
if ide.osname == 'Windows' then
|
||||
updateStatusText(editor)
|
||||
-- STC_PAINTED is called on multiple editors when they point to
|
||||
-- the same document; only update status for the active one
|
||||
if notebook:GetSelection() == notebook:GetPageIndex(editor) then
|
||||
updateStatusText(editor)
|
||||
end
|
||||
|
||||
if edcfg.usewrap ~= true and editor:AutoCompActive() then
|
||||
-- showing auto-complete list leaves artifacts on the screen,
|
||||
@@ -1054,10 +1087,26 @@ function CreateEditor()
|
||||
end
|
||||
end)
|
||||
|
||||
local alreadyProcessed = 0
|
||||
editor:Connect(wxstc.wxEVT_STC_UPDATEUI,
|
||||
function (event)
|
||||
PackageEventHandle("onEditorUpdateUI", editor, event)
|
||||
|
||||
-- some of UPDATEUI events are triggered by blinking cursor, and since
|
||||
-- there are no changes, the rest of the processing can be skipped;
|
||||
-- the reason for `alreadyProcessed` is that it is not possible
|
||||
-- to completely skip all of these updates as this causes the issue
|
||||
-- of markup styling becoming visible after text deletion by Backspace.
|
||||
-- to avoid this, we allow the first update after any updates caused
|
||||
-- by real changes; the rest of UPDATEUI events are skipped.
|
||||
if event:GetUpdated() == wxstc.wxSTC_UPDATE_CONTENT
|
||||
and not next(editor.ev) then
|
||||
if alreadyProcessed > 1 then return end
|
||||
else
|
||||
alreadyProcessed = 0
|
||||
end
|
||||
alreadyProcessed = alreadyProcessed + 1
|
||||
|
||||
if ide.osname ~= 'Windows' then updateStatusText(editor) end
|
||||
|
||||
editor:GotoPosDelayed()
|
||||
@@ -1066,8 +1115,9 @@ function CreateEditor()
|
||||
for _,iv in ipairs(editor.ev) do
|
||||
local line = editor:LineFromPosition(iv[1])
|
||||
if not minupdated or line < minupdated then minupdated = line end
|
||||
local ok, res = pcall(IndicateAll, editor,line,line+iv[2])
|
||||
local ok, res = pcall(IndicateAll, editor, line)
|
||||
if not ok then DisplayOutputLn("Internal error: ",res,line,line+iv[2]) end
|
||||
IndicateFunctionsOnly(editor,line,line+iv[2])
|
||||
end
|
||||
local firstvisible = editor:DocLineFromVisible(editor:GetFirstVisibleLine())
|
||||
local lastline = math.min(editor:GetLineCount(),
|
||||
@@ -1081,11 +1131,7 @@ function CreateEditor()
|
||||
|
||||
editor:Connect(wx.wxEVT_IDLE,
|
||||
function (event)
|
||||
-- show auto-complete if needed
|
||||
if editor.autocomplete then
|
||||
EditorAutoComplete(editor)
|
||||
editor.autocomplete = false
|
||||
end
|
||||
while #editor.onidle > 0 do table.remove(editor.onidle)(editor) end
|
||||
end)
|
||||
|
||||
editor:Connect(wx.wxEVT_LEFT_DOWN,
|
||||
@@ -1102,7 +1148,7 @@ function CreateEditor()
|
||||
and not event:ShiftDown() and not event:MetaDown() then
|
||||
local point = event:GetPosition()
|
||||
local pos = editor:PositionFromPointClose(point.x, point.y)
|
||||
local value = pos ~= wxstc.wxSTC_INVALID_POSITION and getValAtPosition(editor, pos) or nil
|
||||
local value = pos ~= wxstc.wxSTC_INVALID_POSITION and editor:ValueFromPosition(pos) or nil
|
||||
local instances = value and indicateFindInstances(editor, value, pos+1)
|
||||
if instances and instances[0] then
|
||||
navigateToPosition(editor, pos, instances[0]-1, #value)
|
||||
@@ -1140,8 +1186,14 @@ function CreateEditor()
|
||||
local first, last = 0, notebook:GetPageCount()-1
|
||||
if PackageEventHandle("onEditorKeyDown", editor, event) == false then
|
||||
-- this event has already been handled
|
||||
elseif keycode == wx.WXK_ESCAPE and ide.frame:IsFullScreen() then
|
||||
ShowFullScreen(false)
|
||||
elseif keycode == wx.WXK_ESCAPE then
|
||||
if editor:CallTipActive() or editor:AutoCompActive() then
|
||||
event:Skip()
|
||||
elseif ide.findReplace:IsShown() then
|
||||
ide.findReplace:Hide()
|
||||
elseif ide:GetMainFrame():IsFullScreen() then
|
||||
ShowFullScreen(false)
|
||||
end
|
||||
-- Ctrl-Home and Ctrl-End don't work on OSX with 2.9.5+; fix it
|
||||
elseif ide.osname == 'Macintosh' and ide.wxver >= "2.9.5"
|
||||
and (mod == wx.wxMOD_RAW_CONTROL or mod == (wx.wxMOD_RAW_CONTROL + wx.wxMOD_SHIFT))
|
||||
@@ -1164,18 +1216,7 @@ function CreateEditor()
|
||||
and (mod == wx.wxMOD_NONE) then
|
||||
-- Delete and Backspace behave the same way for selected text
|
||||
if #(editor:GetSelectedText()) > 0 then
|
||||
local length = editor:GetLength()
|
||||
local selections = ide.wxver >= "2.9.5" and editor:GetSelections() or 1
|
||||
editor:Clear() -- remove selected fragments
|
||||
|
||||
-- check if the modification has failed, which may happen
|
||||
-- if there is "invisible" text in the selected fragment.
|
||||
-- if there is only one selection, then delete manually.
|
||||
if length == editor:GetLength() and selections == 1 then
|
||||
editor:SetTargetStart(editor:GetSelectionStart())
|
||||
editor:SetTargetEnd(editor:GetSelectionEnd())
|
||||
editor:ReplaceTarget("")
|
||||
end
|
||||
editor:ClearAny()
|
||||
else
|
||||
local pos = editor:GetCurrentPos()
|
||||
if keycode == wx.WXK_BACK then
|
||||
@@ -1189,6 +1230,20 @@ function CreateEditor()
|
||||
-- auto-complete suggestions.
|
||||
local style = bit.band(editor:GetStyleAt(pos), 31)
|
||||
if not MarkupIsSpecial or not MarkupIsSpecial(style) then
|
||||
-- if BACKSPACE is used at tab stop, with spaces for indentation,
|
||||
-- and only whilespaces on the left, reduce indent
|
||||
if edcfg.backspaceunindent and keycode == wx.WXK_BACK and not editor:GetUseTabs() then
|
||||
-- get the line number from the *current* position of the cursor
|
||||
local line = editor:LineFromPosition(pos+1)
|
||||
local text = editor:GetLine(line):sub(1, pos-editor:PositionFromLine(line)+1)
|
||||
local tw = editor:GetIndent()
|
||||
-- if on the tab stop position and only white spaces on the left
|
||||
if text:find('^%s+$') and #text % tw == 0 then
|
||||
editor:SetLineIndentation(line, editor:GetLineIndentation(line) - tw)
|
||||
editor:GotoPos(pos+1-tw)
|
||||
return
|
||||
end
|
||||
end
|
||||
event:Skip()
|
||||
return
|
||||
end
|
||||
@@ -1243,7 +1298,7 @@ function CreateEditor()
|
||||
-- only activate selection of instances on Ctrl/Cmd-DoubleClick
|
||||
if event:GetModifiers() == wx.wxMOD_CONTROL then
|
||||
local pos = event:GetPosition()
|
||||
local value = pos ~= wxstc.wxSTC_INVALID_POSITION and getValAtPosition(editor, pos) or nil
|
||||
local value = pos ~= wxstc.wxSTC_INVALID_POSITION and editor:ValueFromPosition(pos) or nil
|
||||
local instances = value and indicateFindInstances(editor, value, pos+1)
|
||||
if instances and (instances[0] or #instances > 0) then
|
||||
selectAllInstances(instances, value, pos)
|
||||
@@ -1274,7 +1329,7 @@ function CreateEditor()
|
||||
function (event)
|
||||
local point = editor:ScreenToClient(event:GetPosition())
|
||||
pos = editor:PositionFromPointClose(point.x, point.y)
|
||||
value = pos ~= wxstc.wxSTC_INVALID_POSITION and getValAtPosition(editor, pos) or nil
|
||||
value = pos ~= wxstc.wxSTC_INVALID_POSITION and editor:ValueFromPosition(pos) or nil
|
||||
instances = value and indicateFindInstances(editor, value, pos+1)
|
||||
|
||||
local occurrences = (not instances or #instances == 0) and ""
|
||||
@@ -1392,19 +1447,26 @@ end
|
||||
-- Add an editor to the notebook
|
||||
function AddEditor(editor, name)
|
||||
assert(notebook:GetPageIndex(editor) == -1, "Editor being added is not in the notebook: failed")
|
||||
if notebook:AddPage(editor, name, true) then
|
||||
local id = editor:GetId()
|
||||
local document = setmetatable({}, ide.proto.Document)
|
||||
document.editor = editor
|
||||
|
||||
-- set the document properties
|
||||
local id = editor:GetId()
|
||||
local document = setmetatable({}, ide.proto.Document)
|
||||
document.editor = editor
|
||||
document.fileName = name
|
||||
document.filePath = nil
|
||||
document.modTime = nil
|
||||
document.isModified = false
|
||||
openDocuments[id] = document
|
||||
|
||||
-- add page only after document is created as there may be handlers
|
||||
-- that expect the document (for example, onEditorFocusSet)
|
||||
if not notebook:AddPage(editor, name, true) then
|
||||
openDocuments[id] = nil
|
||||
return
|
||||
else
|
||||
document.index = notebook:GetPageIndex(editor)
|
||||
document.fileName = name
|
||||
document.filePath = nil
|
||||
document.modTime = nil
|
||||
document.isModified = false
|
||||
openDocuments[id] = document
|
||||
return document
|
||||
end
|
||||
return
|
||||
end
|
||||
|
||||
function GetSpec(ext,forcespec)
|
||||
@@ -1469,69 +1531,12 @@ function SetupKeywords(editor, ext, forcespec, styles, font, fontitalic)
|
||||
editor:SetProperty("lexer.cpp.track.preprocessor", "0")
|
||||
editor:SetProperty("lexer.cpp.update.preprocessor", "0")
|
||||
|
||||
-- create italic font if only main font is provided
|
||||
if font and not fontitalic then
|
||||
fontitalic = wx.wxFont(font)
|
||||
fontitalic:SetStyle(wx.wxFONTSTYLE_ITALIC)
|
||||
end
|
||||
|
||||
StylesApplyToEditor(styles or ide.config.styles, editor,
|
||||
font or ide.font.eNormal,fontitalic or ide.font.eItalic,lexerstyleconvert)
|
||||
end
|
||||
|
||||
----------------------------------------------------
|
||||
-- function list for current file
|
||||
|
||||
local function refreshFunctionList(event)
|
||||
event:Skip()
|
||||
|
||||
local editor = GetEditor()
|
||||
if (editor and not (editor.spec and editor.spec.isfndef)) then return end
|
||||
|
||||
-- parse current file and update list
|
||||
-- first populate with the current label to minimize flicker
|
||||
-- then populate the list and update the label
|
||||
local current = funclist:GetCurrentSelection()
|
||||
local label = funclist:GetString(current)
|
||||
local default = funclist:GetString(0)
|
||||
funclist:Clear()
|
||||
funclist:Append(current ~= wx.wxNOT_FOUND and label or default, 0)
|
||||
funclist:SetSelection(0)
|
||||
|
||||
local lines = 0
|
||||
local linee = (editor and editor:GetLineCount() or 0)-1
|
||||
for line=lines,linee do
|
||||
local tx = editor:GetLine(line)
|
||||
local s,_,cap,l = editor.spec.isfndef(tx)
|
||||
if (s) then
|
||||
local ls = editor:PositionFromLine(line)
|
||||
local style = bit.band(editor:GetStyleAt(ls+s),31)
|
||||
if not (editor.spec.iscomment[style] or editor.spec.isstring[style]) then
|
||||
funclist:Append((l and " " or "")..cap,line)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
funclist:SetString(0, default)
|
||||
funclist:SetSelection(current ~= wx.wxNOT_FOUND and current or 0)
|
||||
end
|
||||
|
||||
-- wx.wxEVT_SET_FOCUS is not triggered for wxChoice on Mac (wx 2.8.12),
|
||||
-- so use wx.wxEVT_LEFT_DOWN instead; none of the events are triggered for
|
||||
-- wxChoice on Linux (wx 2.9.5+), so use EVT_ENTER_WINDOW attached to the
|
||||
-- toolbar itself until something better is available.
|
||||
if ide.osname == 'Unix' then
|
||||
ide.frame.toolBar:Connect(wx.wxEVT_ENTER_WINDOW, refreshFunctionList)
|
||||
else
|
||||
local event = ide.osname == 'Macintosh' and wx.wxEVT_LEFT_DOWN or wx.wxEVT_SET_FOCUS
|
||||
funclist:Connect(event, refreshFunctionList)
|
||||
end
|
||||
|
||||
funclist:Connect(wx.wxEVT_COMMAND_CHOICE_SELECTED,
|
||||
function (event)
|
||||
-- test if updated
|
||||
-- jump to line
|
||||
event:Skip()
|
||||
local l = event:GetClientData()
|
||||
if (l and l > 0) then
|
||||
local editor = GetEditor()
|
||||
editor:GotoLine(l)
|
||||
editor:SetFocus()
|
||||
editor:SetSTCFocus(true)
|
||||
editor:EnsureVisibleEnforcePolicy(l)
|
||||
end
|
||||
end)
|
||||
|
||||
@@ -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)
|
||||
---------------------------------------------------------
|
||||
|
||||
@@ -11,26 +11,33 @@ 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 +50,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 +167,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
|
||||
|
||||
@@ -169,6 +195,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 +228,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 +237,41 @@ 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 isdir = tree:IsDirectory(itemsrc)
|
||||
local isnew = tree:GetItemText(itemsrc) == empty
|
||||
local source = 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,12 +279,16 @@ 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 wx.wxFileName(source):SameAs(fn)
|
||||
and not ApproveFileOverwrite() then return false end
|
||||
|
||||
if not fn:Mkdir(tonumber(755,8), wx.wxPATH_MKDIR_FULL) then
|
||||
@@ -251,7 +319,10 @@ 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))
|
||||
LoadFile(path, doc.editor)
|
||||
if not isdir then PackageEventHandle("onEditorSave", doc.editor) end
|
||||
end
|
||||
else -- refresh the tree and select the new item
|
||||
local itemdst = tree:FindItem(target)
|
||||
@@ -265,7 +336,13 @@ local function treeSetConnectorsAndIcons(tree)
|
||||
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
|
||||
@@ -301,9 +378,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 +405,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 +437,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 +459,44 @@ 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(wx.wxEVT_COMMAND_TREE_ITEM_MENU,
|
||||
function (event)
|
||||
@@ -368,17 +506,47 @@ 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")},
|
||||
@@ -386,21 +554,29 @@ local function treeSetConnectorsAndIcons(tree)
|
||||
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])
|
||||
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)
|
||||
|
||||
@@ -430,7 +606,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 +623,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)
|
||||
@@ -504,12 +680,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
|
||||
-- ---------------
|
||||
@@ -630,7 +805,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 +813,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,13 +25,6 @@ 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
|
||||
-- ----------------------------------------------------------------------------
|
||||
@@ -45,7 +38,7 @@ 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)
|
||||
@@ -61,6 +54,8 @@ local function createFrame()
|
||||
|
||||
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
|
||||
@@ -90,14 +85,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 +101,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 +134,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 +203,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()
|
||||
@@ -286,29 +277,28 @@ 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()
|
||||
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 +321,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 +342,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,44 +358,64 @@ 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,
|
||||
@@ -426,11 +436,9 @@ local function createBottomNotebook(frame)
|
||||
end)
|
||||
|
||||
errorlog:Connect(ID_CLEAROUTPUT, wx.wxEVT_COMMAND_MENU_SELECTED,
|
||||
function(event)
|
||||
ClearOutput()
|
||||
end)
|
||||
function(event) ClearOutput(true) end)
|
||||
|
||||
local shellbox = wxstc.wxStyledTextCtrl(bottomnotebook, wx.wxID_ANY,
|
||||
local shellbox = ide:CreateStyledTextCtrl(bottomnotebook, wx.wxID_ANY,
|
||||
wx.wxDefaultPosition, wx.wxDefaultSize, wx.wxBORDER_NONE)
|
||||
|
||||
bottomnotebook:AddPage(errorlog, TR("Output"), true)
|
||||
@@ -446,9 +454,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 +489,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 +499,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,17 @@ ID_NEWFILE = NewID()
|
||||
ID_NEWDIRECTORY = NewID()
|
||||
ID_RENAMEFILE = NewID()
|
||||
ID_DELETEFILE = NewID()
|
||||
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_SAVE = linux and NewID() or wx.wxID_SAVE
|
||||
ID_SAVEAS = linux and NewID() or wx.wxID_SAVEAS
|
||||
ID_SAVEALL = NewID()
|
||||
@@ -58,6 +66,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 +85,13 @@ 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_VIEWTOOLBAR = NewID()
|
||||
ID_VIEWSTATUSBAR = NewID()
|
||||
ID_VIEWDEFAULTLAYOUT = NewID()
|
||||
@@ -101,6 +114,7 @@ ID_DETACHDEBUG = NewID()
|
||||
ID_STEP = NewID()
|
||||
ID_STEPOVER = NewID()
|
||||
ID_STEPOUT = NewID()
|
||||
ID_RUNTO = NewID()
|
||||
ID_BREAK = NewID()
|
||||
ID_TRACE = NewID()
|
||||
ID_CLEAROUTPUT = NewID()
|
||||
@@ -121,6 +135,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 +143,29 @@ ID_REPLACEALLSELECTIONS = NewID()
|
||||
ID_QUICKADDWATCH = NewID()
|
||||
ID_QUICKEVAL = NewID()
|
||||
ID_ADDTOSCRATCHPAD = 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_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,26 +15,32 @@ 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
|
||||
if ide.config.staticanalyzer.infervalue then
|
||||
local tokenlist = LA.ast_to_tokenlist(ast, src)
|
||||
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 = {}
|
||||
@@ -44,6 +49,7 @@ function M.warnings_from_string(src, file)
|
||||
globinit[k] = true
|
||||
end
|
||||
|
||||
M.src, M.file = src, file
|
||||
return M.show_warnings(ast, globinit)
|
||||
end
|
||||
|
||||
@@ -64,19 +70,25 @@ 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 +130,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 +138,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
|
||||
@@ -184,10 +204,9 @@ if compilepos then
|
||||
end
|
||||
|
||||
local debugger = ide.debugger
|
||||
local openDocuments = ide.openDocuments
|
||||
|
||||
local function analyzeProgram(editor)
|
||||
if ide:GetMenuBar():IsChecked(ID_CLEAROUTPUT) then ClearOutput() end
|
||||
ClearOutput()
|
||||
DisplayOutput("Analyzing the source code")
|
||||
frame:Update()
|
||||
|
||||
@@ -196,13 +215,13 @@ local function analyzeProgram(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
|
||||
|
||||
@@ -53,6 +53,10 @@ ide.config.keymap = {
|
||||
[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",
|
||||
@@ -62,7 +66,6 @@ ide.config.keymap = {
|
||||
[ID_REPLACE] = "Ctrl-R",
|
||||
[ID_FINDINFILES] = "Ctrl-Shift-F",
|
||||
[ID_REPLACEINFILES] = "Ctrl-Shift-R",
|
||||
[ID_GOTOLINE] = "Ctrl-G",
|
||||
[ID_SORT] = "",
|
||||
-- View menu
|
||||
[ID_VIEWFILETREE] = "Ctrl-Shift-P",
|
||||
@@ -85,6 +88,7 @@ ide.config.keymap = {
|
||||
[ID_STEP] = "F10",
|
||||
[ID_STEPOVER] = "Shift-F10",
|
||||
[ID_STEPOUT] = "Ctrl-F10",
|
||||
[ID_RUNTO] = "Ctrl-Shift-F10",
|
||||
[ID_TRACE] = "",
|
||||
[ID_BREAK] = "Shift-F9",
|
||||
[ID_TOGGLEBREAKPOINT] = "F9",
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
-- Copyright 2011-14 Paul Kulchenko, ZeroBrane LLC
|
||||
-- Copyright 2011-15 Paul Kulchenko, ZeroBrane LLC
|
||||
-- styles for comment markup
|
||||
---------------------------------------------------------
|
||||
|
||||
@@ -62,8 +62,8 @@ function MarkupHotspotClick(pos, editor)
|
||||
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)
|
||||
@@ -99,7 +99,7 @@ local function ismarkup (tx)
|
||||
local marksep = "[%s!%?%.,;:%(%)]"
|
||||
while true do
|
||||
-- find a separator first
|
||||
local st,_,sep,more = string.find(tx, "(["..MD_MARK_PTRN.."])(.)", start)
|
||||
local st,_,sep,more = string.find(tx, "(["..MD_MARK_PTRN.."]+)(.)", start)
|
||||
if not st then return end
|
||||
|
||||
-- check if this is a first character of a multi-character separator
|
||||
|
||||
@@ -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) },
|
||||
})
|
||||
@@ -60,7 +61,10 @@ local function onUpdateUIEditMenu(event)
|
||||
}
|
||||
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]
|
||||
@@ -89,13 +93,22 @@ local function onEditMenu(event)
|
||||
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:Copy() 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:Copy() 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:Paste()
|
||||
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,12 +129,6 @@ 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())
|
||||
@@ -183,11 +190,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)
|
||||
@@ -224,18 +226,12 @@ frame:Connect(ID_COMMENT, wx.wxEVT_COMMAND_MENU_SELECTED,
|
||||
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)
|
||||
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)
|
||||
@@ -277,11 +273,11 @@ 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 = ''
|
||||
-- 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
|
||||
@@ -293,9 +289,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)
|
||||
@@ -330,8 +329,13 @@ 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
|
||||
|
||||
@@ -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({
|
||||
@@ -186,12 +185,14 @@ 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()))
|
||||
event:Enable(ide.findReplace:CanSave(GetEditorWithFocus())
|
||||
and true or EditorIsModified(GetEditor()))
|
||||
end)
|
||||
|
||||
frame:Connect(ID_SAVEAS, wx.wxEVT_COMMAND_MENU_SELECTED,
|
||||
@@ -210,7 +211,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 +222,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,7 +58,7 @@ 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>
|
||||
@@ -77,7 +77,7 @@ local function DisplayAbout(event)
|
||||
</td></tr></table>
|
||||
</body>
|
||||
</html>]])
|
||||
:format(logoimg, ide.VERSION, mobdebug._VERSION,
|
||||
:format(logoimg, ide.VERSION, mobdebug._VERSION, ide:GetAppName(),
|
||||
wxlua.wxLUA_VERSION_STRING, wx.wxVERSION_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,6 +26,7 @@ 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") },
|
||||
{ },
|
||||
@@ -60,9 +61,11 @@ 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]
|
||||
|
||||
@@ -74,15 +77,19 @@ 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))
|
||||
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 +103,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
|
||||
@@ -117,13 +124,14 @@ function UpdateInterpreters()
|
||||
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
|
||||
@@ -131,11 +139,9 @@ function ProjectUpdateProjectDir(projdir,skiptree)
|
||||
ide.config.path.projectdir = projdir ~= "" and projdir or nil
|
||||
frame:SetStatusText(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 +149,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,6 +173,11 @@ 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
|
||||
@@ -186,12 +195,12 @@ 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)
|
||||
if not doc:GetFilePath() 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(ide:GetProjectStartFile() or doc:GetFilePath())
|
||||
end
|
||||
|
||||
function ActivateOutput()
|
||||
@@ -209,7 +218,7 @@ function ActivateOutput()
|
||||
end
|
||||
|
||||
local function runInterpreter(wfilename, withdebugger)
|
||||
if ide.frame.menuBar:IsChecked(ID_CLEAROUTPUT) then ClearOutput() end
|
||||
ClearOutput()
|
||||
ActivateOutput()
|
||||
|
||||
ClearAllCurrentLineMarkers()
|
||||
@@ -319,7 +328,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)
|
||||
@@ -359,6 +367,18 @@ frame:Connect(ID_DETACHDEBUG, wx.wxEVT_UPDATE_UI,
|
||||
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 (editor ~= nil) and (not debugger.scratchpad))
|
||||
end)
|
||||
|
||||
frame:Connect(ID_STEP, wx.wxEVT_COMMAND_MENU_SELECTED,
|
||||
function () debugger.step() end)
|
||||
frame:Connect(ID_STEP, wx.wxEVT_UPDATE_UI,
|
||||
|
||||
@@ -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,280 @@ 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 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 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) and tabindex then
|
||||
ed:GotoPos(tabindex-1)
|
||||
ed:EnsureVisibleEnforcePolicy(ed:LineFromPosition(tabindex-1))
|
||||
ed:SetFocus() -- in case the focus is on some other panel
|
||||
-- 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:InsertText(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)
|
||||
if 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 ed and text and text:find(special.SYMBOL) then
|
||||
if not functions then
|
||||
local funcs, nums = OutlineFunctions(ed), {}
|
||||
functions = {pos = {}, src = {}}
|
||||
for _, func in ipairs(funcs) do
|
||||
table.insert(functions, func.name)
|
||||
nums[func.name] = (nums[func.name] or 0) + 1
|
||||
local num = nums[func.name]
|
||||
local line = ed:LineFromPosition(func.pos-1)
|
||||
functions.src[func.name..num] = ed:GetLine(line):gsub("^%s+","")
|
||||
functions.pos[func.name..num] = func.pos
|
||||
end
|
||||
end
|
||||
local symbol = text:match(special.SYMBOL..'(.*)')
|
||||
local nums = {}
|
||||
if #symbol > 0 then
|
||||
local topscore
|
||||
for _, item in ipairs(CommandBarScoreItems(functions, symbol, 100)) 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
|
||||
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, 100)) 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, 100)) 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)
|
||||
if text and text:find(special.SYMBOL) then
|
||||
local ed = ide:GetEditor()
|
||||
if ed then markLine(ed, ed:LineFromPosition(tabindex-1)+1) end
|
||||
return
|
||||
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)
|
||||
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)
|
||||
|
||||
@@ -1,11 +1,10 @@
|
||||
-- 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 frame = ide.frame
|
||||
local menuBar = frame.menuBar
|
||||
local openDocuments = ide.openDocuments
|
||||
local unpack = table.unpack or unpack
|
||||
|
||||
--[=[
|
||||
@@ -19,17 +18,17 @@ tool = {
|
||||
-- quick exec action
|
||||
name = "",
|
||||
description = "",
|
||||
fn = function(wxfilename,projectdir),
|
||||
fn = function(filename, projectdir),
|
||||
}
|
||||
}
|
||||
|
||||
]=]
|
||||
|
||||
local toolArgs = {{},}
|
||||
local toolArgs = {}
|
||||
local cnt = 1
|
||||
|
||||
-- fill in tools that have a automatic execution
|
||||
-- function
|
||||
local function name2id(name) return ID("tools.exec."..name) end
|
||||
|
||||
do
|
||||
local maxcnt = 10
|
||||
|
||||
@@ -44,10 +43,10 @@ do
|
||||
table.sort(tools,function(a,b) return a.exec.name < b.exec.name end)
|
||||
|
||||
-- todo config specifc ignore/priority list
|
||||
for i,tool in ipairs(tools) do
|
||||
for _, tool in ipairs(tools) do
|
||||
local exec = tool.exec
|
||||
if (exec and cnt < maxcnt and exec.name and exec.fn and exec.description) then
|
||||
local id = ID("tools.exec."..tool.fname)
|
||||
local id = name2id(tool.fname)
|
||||
table.insert(toolArgs,{id, exec.name, exec.description})
|
||||
-- flag it
|
||||
tool._execid = id
|
||||
@@ -56,6 +55,20 @@ do
|
||||
end
|
||||
end
|
||||
|
||||
local function addHandler(menu, id, command, updateui)
|
||||
menu:Connect(id, wx.wxEVT_COMMAND_MENU_SELECTED,
|
||||
function (event)
|
||||
local editor = GetEditor()
|
||||
if (not editor) then return end
|
||||
|
||||
command(ide:GetDocument(editor):GetFilePath(), ide:GetProject())
|
||||
|
||||
return true
|
||||
end)
|
||||
menu:Connect(id, wx.wxEVT_UPDATE_UI,
|
||||
updateui or function(event) event:Enable(GetEditor() ~= nil) end)
|
||||
end
|
||||
|
||||
if (cnt > 1) then
|
||||
|
||||
-- Build Menu
|
||||
@@ -65,29 +78,34 @@ if (cnt > 1) then
|
||||
menuBar:Append(toolMenu, "&Tools")
|
||||
|
||||
-- connect auto execs
|
||||
for name,tool in pairs(ide.tools) do
|
||||
if (tool._execid) then
|
||||
frame:Connect(tool._execid, wx.wxEVT_COMMAND_MENU_SELECTED,
|
||||
function (event)
|
||||
local editor = GetEditor()
|
||||
if (not editor) then return end
|
||||
|
||||
local id = editor:GetId()
|
||||
local saved = false
|
||||
local fn = wx.wxFileName(openDocuments[id].filePath or "")
|
||||
fn:Normalize()
|
||||
|
||||
tool.exec.fn(fn,ide.config.path.projectdir)
|
||||
|
||||
return true
|
||||
end)
|
||||
end
|
||||
for _, tool in pairs(ide.tools) do
|
||||
if tool._execid then addHandler(toolMenu, tool._execid, tool.exec.fn) end
|
||||
end
|
||||
end
|
||||
|
||||
-- Generate Custom Menus/Init
|
||||
for name,tool in pairs(ide.tools) do
|
||||
if (tool.fninit) then
|
||||
tool.fninit(frame,menuBar)
|
||||
for _, tool in pairs(ide.tools) do
|
||||
if tool.fninit then tool.fninit(frame, menuBar) end
|
||||
end
|
||||
|
||||
function ToolsAddTool(name, command, updateui)
|
||||
local toolMenu = ide:FindTopMenu('&Tools')
|
||||
if not toolMenu then
|
||||
local helpMenu, helpindex = ide:FindTopMenu('&Help')
|
||||
if not helpMenu then helpindex = ide:GetMenuBar():GetMenuCount() end
|
||||
|
||||
toolMenu = wx.wxMenu{}
|
||||
menuBar:Insert(helpindex, toolMenu, "&Tools")
|
||||
end
|
||||
local id = name2id(name)
|
||||
toolMenu:Append(id, name)
|
||||
addHandler(toolMenu, id, command, updateui)
|
||||
end
|
||||
|
||||
function ToolsRemoveTool(name)
|
||||
ide:RemoveMenuItem(name2id(name))
|
||||
local toolMenu, toolindex = ide:FindTopMenu('&Tools')
|
||||
if toolMenu and toolMenu:GetMenuItemCount() == 0 then
|
||||
ide:GetMenuBar():Remove(toolindex)
|
||||
end
|
||||
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)
|
||||
---------------------------------------------------------
|
||||
@@ -13,6 +13,7 @@ local viewMenu = wx.wxMenu {
|
||||
{ ID_VIEWOUTPUT, TR("&Output/Console Window")..KSC(ID_VIEWOUTPUT), TR("View the output/console window"), wx.wxITEM_CHECK },
|
||||
{ ID_VIEWWATCHWINDOW, TR("&Watch Window")..KSC(ID_VIEWWATCHWINDOW), TR("View the watch window"), wx.wxITEM_CHECK },
|
||||
{ ID_VIEWCALLSTACK, TR("&Stack Window")..KSC(ID_VIEWCALLSTACK), TR("View the stack window"), wx.wxITEM_CHECK },
|
||||
{ ID_VIEWOUTLINE, TR("Outline Window")..KSC(ID_VIEWOUTLINE), TR("View the outline window"), wx.wxITEM_CHECK },
|
||||
{ },
|
||||
{ ID_VIEWTOOLBAR, TR("&Tool Bar")..KSC(ID_VIEWTOOLBAR), TR("Show/Hide the toolbar"), wx.wxITEM_CHECK },
|
||||
{ ID_VIEWSTATUSBAR, TR("&Status Bar")..KSC(ID_VIEWSTATUSBAR), TR("Show/Hide the status bar"), wx.wxITEM_CHECK },
|
||||
@@ -54,13 +55,16 @@ local panels = {
|
||||
[ID_VIEWFILETREE] = "projpanel",
|
||||
[ID_VIEWWATCHWINDOW] = "watchpanel",
|
||||
[ID_VIEWCALLSTACK] = "stackpanel",
|
||||
[ID_VIEWOUTLINE] = "outlinepanel",
|
||||
[ID_VIEWTOOLBAR] = "toolbar",
|
||||
}
|
||||
|
||||
local function togglePanel(event)
|
||||
local panel = panels[event:GetId()]
|
||||
local shown = not uimgr:GetPane(panel):IsShown()
|
||||
uimgr:GetPane(panel):Show(shown)
|
||||
local pane = uimgr:GetPane(panel)
|
||||
local shown = not pane:IsShown()
|
||||
if not shown then pane:BestSize(pane.window:GetSize()) end
|
||||
pane:Show(shown)
|
||||
uimgr:Update()
|
||||
|
||||
return shown
|
||||
@@ -68,7 +72,7 @@ end
|
||||
|
||||
local function checkPanel(event)
|
||||
local pane = uimgr:GetPane(panels[event:GetId()])
|
||||
menuBar:Enable(event:GetId(), pane:IsOk()) -- disable if doesn't exist
|
||||
event:Enable(pane:IsOk()) -- disable if doesn't exist
|
||||
menuBar:Check(event:GetId(), pane:IsOk() and pane:IsShown())
|
||||
end
|
||||
|
||||
@@ -89,6 +93,7 @@ frame:Connect(ID_VIEWFULLSCREEN, wx.wxEVT_UPDATE_UI,
|
||||
frame:Connect(ID_VIEWOUTPUT, wx.wxEVT_COMMAND_MENU_SELECTED, togglePanel)
|
||||
frame:Connect(ID_VIEWFILETREE, wx.wxEVT_COMMAND_MENU_SELECTED, togglePanel)
|
||||
frame:Connect(ID_VIEWTOOLBAR, wx.wxEVT_COMMAND_MENU_SELECTED, togglePanel)
|
||||
frame:Connect(ID_VIEWOUTLINE, wx.wxEVT_COMMAND_MENU_SELECTED, togglePanel)
|
||||
frame:Connect(ID_VIEWWATCHWINDOW, wx.wxEVT_COMMAND_MENU_SELECTED,
|
||||
function (event) if togglePanel(event) then DebuggerRefreshPanels() end end)
|
||||
frame:Connect(ID_VIEWCALLSTACK, wx.wxEVT_COMMAND_MENU_SELECTED,
|
||||
|
||||
330
src/editor/outline.lua
Normal file
330
src/editor/outline.lua
Normal file
@@ -0,0 +1,330 @@
|
||||
-- Copyright 2014-15 Paul Kulchenko, ZeroBrane LLC
|
||||
|
||||
local ide = ide
|
||||
ide.outline = {
|
||||
imglist = ide:CreateImageList("OUTLINE", "FILE-NORMAL", "VALUE-LCALL",
|
||||
"VALUE-GCALL", "VALUE-ACALL", "VALUE-SCALL", "VALUE-MCALL"),
|
||||
}
|
||||
|
||||
local image = { FILE = 0, LFUNCTION = 1, GFUNCTION = 2, AFUNCTION = 3,
|
||||
SMETHOD = 4, METHOD = 5,
|
||||
}
|
||||
local q = EscapeMagic
|
||||
local caches = {}
|
||||
|
||||
local function setData(ctrl, item, value)
|
||||
if ide.wxver >= "2.9.5" then
|
||||
local data = wx.wxLuaTreeItemData()
|
||||
data:SetData(value)
|
||||
ctrl:SetItemData(item, data)
|
||||
end
|
||||
end
|
||||
|
||||
local function outlineRefresh(editor, force)
|
||||
if not editor then return end
|
||||
local tokens = editor:GetTokenList()
|
||||
local text = editor:GetText()
|
||||
local sep = editor.spec.sep
|
||||
local varname = "([%w_][%w_"..q(sep:sub(1,1)).."]*)"
|
||||
local funcs = {}
|
||||
local var = {}
|
||||
local outcfg = ide.config.outline or {}
|
||||
for _, token in ipairs(tokens) do
|
||||
local op = token[1]
|
||||
if op == 'Var' or op == 'Id' then
|
||||
var = {name = token.name, fpos = token.fpos, global = token.context[token.name] == nil}
|
||||
elseif op == 'Function' then
|
||||
local depth = token.context['function'] or 1
|
||||
local name, pos = token.name, token.fpos
|
||||
local _, _, rname, params = text:find('([^%(]*)(%b())', pos)
|
||||
if name and rname:find(token.name, 1, true) ~= 1 then
|
||||
name = rname:gsub("%s+$","")
|
||||
end
|
||||
if not name then
|
||||
local s = editor:PositionFromLine(editor:LineFromPosition(pos-1))
|
||||
local rest
|
||||
rest, pos, name = text:sub(s+1, pos-1):match('%s*(.-)()'..varname..'%s*=%s*function%s*$')
|
||||
if rest then
|
||||
pos = s + pos
|
||||
-- guard against "foo, bar = function() end" as it would get "bar"
|
||||
if #rest>0 and rest:find(',') then name = nil end
|
||||
end
|
||||
end
|
||||
local ftype = image.LFUNCTION
|
||||
if not name then
|
||||
ftype = image.AFUNCTION
|
||||
elseif outcfg.showmethodindicator and name:find('['..q(sep)..']') then
|
||||
ftype = name:find(q(sep:sub(1,1))) and image.SMETHOD or image.METHOD
|
||||
elseif var.name == name and var.fpos == pos
|
||||
or var.name and name:find('^'..var.name..'['..q(sep)..']') then
|
||||
ftype = var.global and image.GFUNCTION or image.LFUNCTION
|
||||
end
|
||||
if name or outcfg.showanonymous then
|
||||
funcs[#funcs+1] = {
|
||||
name = (name or outcfg.showanonymous)..params,
|
||||
depth = depth,
|
||||
image = ftype,
|
||||
pos = name and pos or token.fpos,
|
||||
}
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local ctrl = ide.outline.outlineCtrl
|
||||
local cache = caches[editor] or {}
|
||||
caches[editor] = cache
|
||||
|
||||
-- add file
|
||||
local filename = ide:GetDocument(editor):GetTabText()
|
||||
local fileitem = cache.fileitem
|
||||
if not fileitem then
|
||||
local root = ctrl:GetRootItem()
|
||||
if not root or not root:IsOk() then return end
|
||||
|
||||
if outcfg.showonefile then
|
||||
fileitem = root
|
||||
else
|
||||
fileitem = ctrl:AppendItem(root, filename, image.FILE)
|
||||
setData(ctrl, fileitem, editor)
|
||||
ctrl:SetItemBold(fileitem, true)
|
||||
ctrl:SortChildren(root)
|
||||
end
|
||||
cache.fileitem = fileitem
|
||||
end
|
||||
|
||||
do -- check if any changes in the cached function list
|
||||
local prevfuncs = cache.funcs or {}
|
||||
local nochange = #funcs == #prevfuncs
|
||||
local resort = {} -- items that need to be re-sorted
|
||||
if nochange then
|
||||
for n, func in ipairs(funcs) do
|
||||
func.item = prevfuncs[n].item -- carry over cached items
|
||||
if func.depth ~= prevfuncs[n].depth then
|
||||
nochange = false
|
||||
elseif nochange then
|
||||
if func.name ~= prevfuncs[n].name then
|
||||
ctrl:SetItemText(prevfuncs[n].item, func.name)
|
||||
if outcfg.sort then resort[ctrl:GetItemParent(prevfuncs[n].item)] = true end
|
||||
end
|
||||
if func.image ~= prevfuncs[n].image then
|
||||
ctrl:SetItemImage(prevfuncs[n].item, func.image)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
cache.funcs = funcs -- set new cache as positions may change
|
||||
if nochange and not force then -- return if no visible changes
|
||||
if outcfg.sort then -- resort items for all parents that have been modified
|
||||
for item in pairs(resort) do ctrl:SortChildren(item) end
|
||||
end
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
-- refresh the tree
|
||||
-- refreshing shouldn't change the focus of the current element,
|
||||
-- but it appears that DeleteChildren (wxwidgets 2.9.5 on Windows)
|
||||
-- moves the focus from the current element to wxTreeCtrl.
|
||||
-- need to save the window having focus and restore after the refresh.
|
||||
local win = ide:GetMainFrame():FindFocus()
|
||||
|
||||
ctrl:Freeze()
|
||||
|
||||
-- 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)
|
||||
|
||||
local stack = {fileitem}
|
||||
local resort = {} -- items that need to be re-sorted
|
||||
for n, func in ipairs(funcs) do
|
||||
local depth = outcfg.showflat and 1 or func.depth
|
||||
local parent = stack[depth]
|
||||
while not parent do depth = depth - 1; parent = stack[depth] end
|
||||
local item = ctrl:AppendItem(parent, func.name, func.image)
|
||||
if outcfg.sort then resort[parent] = true end
|
||||
setData(ctrl, item, n)
|
||||
func.item = item
|
||||
stack[func.depth+1] = item
|
||||
end
|
||||
if outcfg.sort then -- resort items for all parents that have been modified
|
||||
for item in pairs(resort) do ctrl:SortChildren(item) end
|
||||
end
|
||||
ctrl:ExpandAllChildren(fileitem)
|
||||
-- scroll to the fileitem, but only if it's not a root item (as it's hidden)
|
||||
if fileitem:GetValue() ~= ctrl:GetRootItem():GetValue() then
|
||||
ctrl:ScrollTo(fileitem)
|
||||
ctrl:SetScrollPos(wx.wxHORIZONTAL, 0, true)
|
||||
else -- otherwise, scroll to the top
|
||||
ctrl:SetScrollPos(wx.wxVERTICAL, 0, true)
|
||||
end
|
||||
ctrl:Thaw()
|
||||
|
||||
if win and win ~= ide:GetMainFrame():FindFocus() then win:SetFocus() end
|
||||
end
|
||||
|
||||
local function outlineCreateOutlineWindow()
|
||||
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_SINGLE
|
||||
+ wx.wxTR_HIDE_ROOT + wx.wxNO_BORDER)
|
||||
|
||||
ide.outline.outlineCtrl = ctrl
|
||||
ide.timers.outline = wx.wxTimer(ctrl)
|
||||
|
||||
ctrl:AddRoot("Outline")
|
||||
ctrl:SetImageList(ide.outline.imglist)
|
||||
ctrl:SetFont(ide.font.fNormal)
|
||||
|
||||
function ctrl:ActivateItem(item_id)
|
||||
ctrl:SelectItem(item_id, true)
|
||||
local data = ctrl:GetItemData(item_id)
|
||||
if ctrl:GetItemImage(item_id) == image.FILE then
|
||||
-- activate editor tab
|
||||
local editor = data:GetData()
|
||||
if not ide:GetEditorWithFocus(editor) then ide:GetDocument(editor):SetActive() end
|
||||
else
|
||||
-- activate tab and move cursor based on stored pos
|
||||
-- get file parent
|
||||
local onefile = (ide.config.outline or {}).showonefile
|
||||
local parent = ctrl:GetItemParent(item_id)
|
||||
if not onefile then -- find the proper parent
|
||||
while parent:IsOk() and ctrl:GetItemImage(parent) ~= image.FILE do
|
||||
parent = ctrl:GetItemParent(parent)
|
||||
end
|
||||
if not parent:IsOk() then return end
|
||||
end
|
||||
-- activate editor tab
|
||||
local editor = onefile and GetEditor() or ctrl:GetItemData(parent):GetData()
|
||||
local cache = caches[editor]
|
||||
if editor and cache then
|
||||
-- move to position in the file
|
||||
editor:GotoPosEnforcePolicy(cache.funcs[data:GetData()].pos-1)
|
||||
-- only set editor active after positioning as this may change focus,
|
||||
-- which may regenerate the outline, which may invalidate `data` value
|
||||
if not ide:GetEditorWithFocus(editor) then ide:GetDocument(editor):SetActive() end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function activateByPosition(event)
|
||||
-- only toggle if this is a folder and the click is on the item line
|
||||
-- (exclude the label as it's used for renaming and dragging)
|
||||
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)
|
||||
else
|
||||
event:Skip()
|
||||
end
|
||||
return true
|
||||
end
|
||||
|
||||
ctrl:Connect(wx.wxEVT_TIMER, function() outlineRefresh(GetEditor()) 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)
|
||||
|
||||
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("outlinepanel") then
|
||||
ide:AddPanelDocked(ide:GetProjectNotebook(), ctrl, "outlinepanel", TR("Outline"), reconfigure, false)
|
||||
else
|
||||
ide:AddPanel(ctrl, "outlinepanel", TR("Outline"), reconfigure)
|
||||
end
|
||||
end
|
||||
|
||||
local function eachNode(eachFunc, root)
|
||||
local ctrl = ide.outline.outlineCtrl
|
||||
local item = ctrl:GetFirstChild(root or ctrl:GetRootItem())
|
||||
while true do
|
||||
if not item:IsOk() then break end
|
||||
if eachFunc and eachFunc(ctrl, item) then break end
|
||||
item = ctrl:GetNextSibling(item)
|
||||
end
|
||||
end
|
||||
|
||||
outlineCreateOutlineWindow()
|
||||
|
||||
function OutlineFunctions(editor)
|
||||
-- force token refresh (as these may be not updated yet)
|
||||
if #editor:GetTokenList() == 0 then
|
||||
while IndicateAll(editor) do end
|
||||
end
|
||||
|
||||
outlineRefresh(editor, true)
|
||||
return caches[editor].funcs
|
||||
end
|
||||
|
||||
ide:AddPackage('core.outline', {
|
||||
-- remove the editor from the list
|
||||
onEditorClose = function(self, editor)
|
||||
local cache = caches[editor]
|
||||
local fileitem = cache and cache.fileitem
|
||||
caches[editor] = nil -- remove from cache
|
||||
if (ide.config.outline or {}).showonefile then return end
|
||||
if fileitem then ide.outline.outlineCtrl:Delete(fileitem) end
|
||||
end,
|
||||
|
||||
-- handle rename of the file in the current editor
|
||||
onEditorSave = function(self, editor)
|
||||
if (ide.config.outline or {}).showonefile then return end
|
||||
local cache = caches[editor]
|
||||
local fileitem = cache and cache.fileitem
|
||||
local doc = ide:GetDocument(editor)
|
||||
local ctrl = ide.outline.outlineCtrl
|
||||
if doc and fileitem and ctrl:GetItemText(fileitem) ~= doc:GetTabText() then
|
||||
ctrl:SetItemText(fileitem, doc:GetTabText())
|
||||
end
|
||||
end,
|
||||
|
||||
-- go over the file items to turn bold on/off or collapse/expand
|
||||
onEditorFocusSet = function(self, editor)
|
||||
if (ide.config.outline or {}).showonefile and ide.config.outlineinactivity then
|
||||
outlineRefresh(editor, true)
|
||||
return
|
||||
end
|
||||
|
||||
local cache = caches[editor]
|
||||
local fileitem = cache and cache.fileitem
|
||||
local ctrl = ide.outline.outlineCtrl
|
||||
local itemname = ide:GetDocument(editor):GetTabText()
|
||||
|
||||
-- fix file name if it changed in the editor
|
||||
if fileitem and ctrl:GetItemText(fileitem) ~= itemname then
|
||||
ctrl:SetItemText(fileitem, itemname)
|
||||
end
|
||||
|
||||
-- if the editor is not in the cache, which may happen if the user
|
||||
-- quickly switches between tabs that don't have outline generated,
|
||||
-- regenerate it manually
|
||||
if not cache and ide.config.outlineinactivity then
|
||||
ide.timers.outline:Start(ide.config.outlineinactivity*1000, wx.wxTIMER_ONE_SHOT)
|
||||
end
|
||||
|
||||
eachNode(function(ctrl, item)
|
||||
local found = fileitem and item:GetValue() == fileitem:GetValue()
|
||||
if not found and ctrl:IsBold(item) then
|
||||
ctrl:SetItemBold(item, false)
|
||||
ctrl:CollapseAllChildren(item)
|
||||
end
|
||||
end)
|
||||
|
||||
if fileitem and not ctrl:IsBold(fileitem) then
|
||||
ctrl:SetItemBold(fileitem, true)
|
||||
ctrl:ExpandAllChildren(fileitem)
|
||||
ctrl:ScrollTo(fileitem)
|
||||
ctrl:SetScrollPos(wx.wxHORIZONTAL, 0, true)
|
||||
end
|
||||
end,
|
||||
})
|
||||
@@ -1,11 +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
|
||||
local frame = ide.frame
|
||||
local notebook = frame.notebook
|
||||
local bottomnotebook = frame.bottomnotebook
|
||||
local errorlog = bottomnotebook.errorlog
|
||||
|
||||
@@ -34,7 +33,8 @@ end
|
||||
|
||||
StylesApplyToEditor(ide.config.stylesoutshell,errorlog,ide.font.oNormal,ide.font.oItalic)
|
||||
|
||||
function ClearOutput()
|
||||
function ClearOutput(force)
|
||||
if not (force or ide:GetMenuBar():IsChecked(ID_CLEAROUTPUT)) then return end
|
||||
errorlog:SetReadOnly(false)
|
||||
errorlog:ClearAll()
|
||||
errorlog:SetReadOnly(true)
|
||||
@@ -145,12 +145,31 @@ end
|
||||
|
||||
local function nameTab(tab, name)
|
||||
local index = bottomnotebook:GetPageIndex(tab)
|
||||
if index then bottomnotebook:SetPageText(index, name) end
|
||||
if index ~= -1 then bottomnotebook:SetPageText(index, name) end
|
||||
end
|
||||
|
||||
function OutputSetCallbacks(pid, proc, callback, endcallback)
|
||||
local streamin = proc and proc:GetInputStream()
|
||||
local streamerr = proc and proc:GetErrorStream()
|
||||
if streamin then
|
||||
streamins[pid] = {stream=streamin, callback=callback,
|
||||
proc=proc, check=proc and proc.IsInputAvailable}
|
||||
end
|
||||
if streamerr then
|
||||
streamerrs[pid] = {stream=streamerr, callback=callback,
|
||||
proc=proc, check=proc and proc.IsErrorAvailable}
|
||||
end
|
||||
customprocs[pid] = {proc=proc, endcallback=endcallback}
|
||||
end
|
||||
|
||||
function CommandLineRun(cmd,wdir,tooutput,nohide,stringcallback,uid,endcallback)
|
||||
if (not cmd) then return end
|
||||
|
||||
-- expand ~ at the beginning of the command
|
||||
if ide.oshome and cmd:find('~') then
|
||||
cmd = cmd:gsub([[^(['"]?)~]], '%1'..ide.oshome:gsub('[\\/]$',''), 1)
|
||||
end
|
||||
|
||||
-- try to extract the name of the executable from the command
|
||||
-- the executable may not have the extension and may be in quotes
|
||||
local exename = string.gsub(cmd, "\\", "/")
|
||||
@@ -182,9 +201,7 @@ function CommandLineRun(cmd,wdir,tooutput,nohide,stringcallback,uid,endcallback)
|
||||
local params = wx.wxEXEC_ASYNC + wx.wxEXEC_MAKE_GROUP_LEADER + (nohide and wx.wxEXEC_NOHIDE or 0)
|
||||
local pid = wx.wxExecute(cmd, params, proc)
|
||||
|
||||
if (oldcwd) then
|
||||
wx.wxFileName.SetCwd(oldcwd)
|
||||
end
|
||||
if oldcwd then wx.wxFileName.SetCwd(oldcwd) end
|
||||
|
||||
-- For asynchronous execution, the return value is the process id and
|
||||
-- zero value indicates that the command could not be executed.
|
||||
@@ -197,20 +214,13 @@ function CommandLineRun(cmd,wdir,tooutput,nohide,stringcallback,uid,endcallback)
|
||||
|
||||
DisplayOutputLn(TR("Program '%s' started in '%s' (pid: %d).")
|
||||
:format(uid, (wdir and wdir or wx.wxFileName.GetCwd()), pid))
|
||||
customprocs[pid] = {proc=proc, uid=uid, endcallback=endcallback, started = TimeGet()}
|
||||
|
||||
local streamin = proc and proc:GetInputStream()
|
||||
local streamerr = proc and proc:GetErrorStream()
|
||||
OutputSetCallbacks(pid, proc, stringcallback, endcallback)
|
||||
customprocs[pid].uid=uid
|
||||
customprocs[pid].started = TimeGet()
|
||||
|
||||
local streamout = proc and proc:GetOutputStream()
|
||||
if (streamin) then
|
||||
streamins[pid] = {stream=streamin, callback=stringcallback}
|
||||
end
|
||||
if (streamerr) then
|
||||
streamerrs[pid] = {stream=streamerr, callback=stringcallback}
|
||||
end
|
||||
if (streamout) then
|
||||
streamouts[pid] = {stream=streamout, callback=stringcallback, out=true}
|
||||
end
|
||||
if streamout then streamouts[pid] = {stream=streamout, callback=stringcallback, out=true} end
|
||||
|
||||
unHideWindow(pid)
|
||||
nameTab(errorlog, TR("Output (running)"))
|
||||
@@ -241,15 +251,19 @@ local function getStreams()
|
||||
for _,v in pairs(tab) do
|
||||
-- periodically stop reading to get a chance to process other events
|
||||
local processed = 0
|
||||
while (v.stream:CanRead() and processed <= maxread) do
|
||||
while (v.check(v.proc) and processed <= maxread) do
|
||||
local str = v.stream:Read(readonce)
|
||||
-- the buffer has readonce bytes, so cut it to the actual size
|
||||
str = str:sub(1, v.stream:LastRead())
|
||||
processed = processed + #str
|
||||
|
||||
local pfn
|
||||
if (v.callback) then
|
||||
str,pfn = v.callback(str)
|
||||
end
|
||||
if (v.toshell) then
|
||||
if not str then
|
||||
-- skip if nothing to display
|
||||
elseif (v.toshell) then
|
||||
DisplayShell(str)
|
||||
else
|
||||
DisplayOutputNoMarker(str)
|
||||
@@ -288,6 +302,15 @@ errorlog:Connect(wx.wxEVT_END_PROCESS, function(event)
|
||||
local pid = event:GetPid()
|
||||
if (pid ~= -1) then
|
||||
getStreams()
|
||||
streamins[pid] = nil
|
||||
streamerrs[pid] = nil
|
||||
streamouts[pid] = nil
|
||||
|
||||
if not customprocs[pid] then return end
|
||||
if customprocs[pid].endcallback then customprocs[pid].endcallback() end
|
||||
-- if this wasn't started with CommandLineRun, skip the rest
|
||||
if not customprocs[pid].uid then return end
|
||||
|
||||
-- delete markers and set focus to the editor if there is an input marker
|
||||
if errorlog:MarkerPrevious(errorlog:GetLineCount(), PROMPT_MARKER_VALUE) > -1 then
|
||||
errorlog:MarkerDeleteAll(PROMPT_MARKER)
|
||||
@@ -296,19 +319,12 @@ errorlog:Connect(wx.wxEVT_END_PROCESS, function(event)
|
||||
if editor then editor:SetFocus() end
|
||||
end
|
||||
nameTab(errorlog, TR("Output"))
|
||||
local runtime = TimeGet() - customprocs[pid].started
|
||||
|
||||
streamins[pid] = nil
|
||||
streamerrs[pid] = nil
|
||||
streamouts[pid] = nil
|
||||
if (customprocs[pid].endcallback) then
|
||||
customprocs[pid].endcallback()
|
||||
end
|
||||
customprocs[pid] = nil
|
||||
unHideWindow(0)
|
||||
DebuggerStop(true)
|
||||
DisplayOutputLn(TR("Program completed in %.2f seconds (pid: %d).")
|
||||
:format(runtime, pid))
|
||||
:format(TimeGet() - customprocs[pid].started, pid))
|
||||
customprocs[pid] = nil
|
||||
end
|
||||
end)
|
||||
|
||||
@@ -324,6 +340,8 @@ local jumptopatterns = {
|
||||
"^%s*(.-)%((%d+).*%)%s*:",
|
||||
--[string "<filename>"]:line:
|
||||
'^.-%[string "([^"]+)"%]:(%d+)%s*:',
|
||||
-- <filename>:line:linepos
|
||||
"^%s*(.-):(%d+):(%d+):",
|
||||
-- <filename>:line:
|
||||
"^%s*(.-):(%d+)%s*:",
|
||||
}
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
-- Copyright 2013-14 Paul Kulchenko, ZeroBrane LLC
|
||||
-- Copyright 2013-15 Paul Kulchenko, ZeroBrane LLC
|
||||
---------------------------------------------------------
|
||||
|
||||
local ide = ide
|
||||
local iscaseinsensitive = wx.wxFileName("A"):SameAs(wx.wxFileName("a"))
|
||||
local unpack = table.unpack or unpack
|
||||
local q = EscapeMagic
|
||||
|
||||
function PackageEventHandle(event, ...)
|
||||
@@ -64,16 +65,25 @@ function PackageRegister(file, ...)
|
||||
return PackageEventHandleOne(file, "onRegister", ...)
|
||||
end
|
||||
|
||||
function ide:GetRootPath() return GetPathWithSep(ide.editorFilename) end
|
||||
function ide:GetRootPath(path)
|
||||
return MergeFullPath(GetPathWithSep(ide.editorFilename), path or '')
|
||||
end
|
||||
function ide:GetPackagePath(packname)
|
||||
return MergeFullPath(
|
||||
ide.oshome and MergeFullPath(ide.oshome, '.zbstudio/') or ide:GetRootPath(),
|
||||
ide.oshome and MergeFullPath(ide.oshome, '.'..ide:GetAppName()..'/') or ide:GetRootPath(),
|
||||
MergeFullPath('packages', packname or '')
|
||||
)
|
||||
end
|
||||
function ide:GetApp() return self.editorApp end
|
||||
function ide:GetAppName() return ide.appname end
|
||||
function ide:GetEditor(index) return GetEditor(index) end
|
||||
function ide:GetEditorWithFocus(ed) return GetEditorWithFocus(ed) end
|
||||
function ide:GetEditorWithLastFocus()
|
||||
-- make sure ide.infocus is still a valid component and not "some" userdata
|
||||
return (self:IsValidCtrl(self.infocus)
|
||||
and self.infocus:GetClassInfo():GetClassName() == "wxStyledTextCtrl"
|
||||
and self.infocus:DynamicCast("wxStyledTextCtrl") or nil)
|
||||
end
|
||||
function ide:GetMenuBar() return self.frame.menuBar end
|
||||
function ide:GetStatusBar() return self.frame.statusBar end
|
||||
function ide:GetToolBar() return self.frame.toolBar end
|
||||
@@ -82,6 +92,22 @@ function ide:GetMainFrame() return self.frame end
|
||||
function ide:GetUIManager() return self.frame.uimgr end
|
||||
function ide:GetDocument(ed) return self.openDocuments[ed:GetId()] end
|
||||
function ide:GetDocuments() return self.openDocuments end
|
||||
function ide:GetKnownExtensions(ext)
|
||||
local knownexts, extmatch = {}, ext and ext:lower()
|
||||
for _, spec in pairs(ide.specs) do
|
||||
for _, ext in ipairs(spec.exts or {}) do
|
||||
if not extmatch or extmatch == ext:lower() then
|
||||
table.insert(knownexts, ext)
|
||||
end
|
||||
end
|
||||
end
|
||||
return knownexts
|
||||
end
|
||||
|
||||
function ide:FindTopMenu(item)
|
||||
local index = ide:GetMenuBar():FindMenu((TR)(item))
|
||||
return ide:GetMenuBar():GetMenu(index), index
|
||||
end
|
||||
function ide:FindMenuItem(itemid, menu)
|
||||
local item, imenu = ide:GetMenuBar():FindItem(itemid, menu)
|
||||
if menu and not item then item = menu:FindItem(itemid) end
|
||||
@@ -126,13 +152,134 @@ function ide:GetInterpreter() return self.interpreter end
|
||||
function ide:GetInterpreters() return self.interpreters end
|
||||
function ide:GetConfig() return self.config end
|
||||
function ide:GetOutput() return self.frame.bottomnotebook.errorlog end
|
||||
function ide:GetConsole() return self.frame.bottomnotebook.shellbox end
|
||||
function ide:GetEditorNotebook() return self.frame.notebook end
|
||||
function ide:GetOutputNotebook() return self.frame.bottomnotebook end
|
||||
function ide:GetProjectNotebook() return self.frame.projnotebook end
|
||||
function ide:GetProject() return FileTreeGetDir() end
|
||||
function ide:GetProjectStartFile()
|
||||
local projectdir = FileTreeGetDir()
|
||||
local startfile = ide.filetree.settings.startfile[projectdir]
|
||||
return MergeFullPath(projectdir, startfile), startfile
|
||||
end
|
||||
function ide:GetLaunchedProcess() return self.debugger and self.debugger.pid end
|
||||
function ide:GetProjectTree() return ide.filetree.projtree end
|
||||
function ide:GetProjectTree() return ide.filetree.projtreeCtrl end
|
||||
function ide:GetOutlineTree() return ide.outline.outlineCtrl end
|
||||
function ide:GetWatch() return self.debugger and self.debugger.watchCtrl end
|
||||
function ide:GetStack() return self.debugger and self.debugger.stackCtrl end
|
||||
function ide:Yield() wx.wxYield() end
|
||||
function ide:CreateBareEditor() return CreateEditor(true) end
|
||||
function ide:CreateStyledTextCtrl(...)
|
||||
local editor = wxstc.wxStyledTextCtrl(...)
|
||||
function editor:GotoPosEnforcePolicy(pos)
|
||||
self:GotoPos(pos)
|
||||
self:EnsureVisibleEnforcePolicy(self:LineFromPosition(pos))
|
||||
end
|
||||
|
||||
function editor:CanFold()
|
||||
local foldable = false
|
||||
for m = 0, ide.MAXMARGIN do
|
||||
if editor:GetMarginWidth(m) > 0
|
||||
and editor:GetMarginMask(m) == wxstc.wxSTC_MASK_FOLDERS then
|
||||
foldable = true
|
||||
end
|
||||
end
|
||||
return foldable
|
||||
end
|
||||
|
||||
-- circle through "fold all" => "hide base lines" => "unfold all"
|
||||
function editor:FoldSome()
|
||||
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
|
||||
local lines = editor:GetLineCount()
|
||||
|
||||
for ln = 0, lines-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, lines-1) end
|
||||
|
||||
for ln = 0, lines-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
|
||||
|
||||
local function getMarginWidth(editor)
|
||||
local width = 0
|
||||
for m = 0, ide.MAXMARGIN do width = width + editor:GetMarginWidth(m) end
|
||||
return width
|
||||
end
|
||||
|
||||
function editor:ShowPosEnforcePolicy(pos)
|
||||
local line = self:LineFromPosition(pos)
|
||||
self:EnsureVisibleEnforcePolicy(line)
|
||||
-- skip the rest if line wrapping is on
|
||||
if editor:GetWrapMode() ~= wxstc.wxSTC_WRAP_NONE then return end
|
||||
local xwidth = self:GetClientSize():GetWidth() - getMarginWidth(self)
|
||||
local xoffset = self:GetTextExtent(self:GetLine(line):sub(1, pos-self:PositionFromLine(line)+1))
|
||||
self:SetXOffset(xoffset > xwidth and xoffset-xwidth or 0)
|
||||
end
|
||||
|
||||
function editor:ClearAny()
|
||||
local length = self:GetLength()
|
||||
local selections = ide.wxver >= "2.9.5" and self:GetSelections() or 1
|
||||
self:Clear() -- remove selected fragments
|
||||
|
||||
-- check if the modification has failed, which may happen
|
||||
-- if there is "invisible" text in the selected fragment.
|
||||
-- if there is only one selection, then delete manually.
|
||||
if length == self:GetLength() and selections == 1 then
|
||||
self:SetTargetStart(self:GetSelectionStart())
|
||||
self:SetTargetEnd(self:GetSelectionEnd())
|
||||
self:ReplaceTarget("")
|
||||
end
|
||||
end
|
||||
|
||||
return editor
|
||||
end
|
||||
|
||||
function ide:LoadFile(...) return LoadFile(...) end
|
||||
|
||||
function ide:CopyToClipboard(text)
|
||||
if wx.wxClipboard:Get():Open() then
|
||||
wx.wxClipboard:Get():SetData(wx.wxTextDataObject(text))
|
||||
wx.wxClipboard:Get():Close()
|
||||
return true
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
function ide:GetSetting(path, setting)
|
||||
local settings = self.settings
|
||||
@@ -146,12 +293,15 @@ end
|
||||
function ide:RemoveMenuItem(id, menu)
|
||||
local _, menu, pos = ide:FindMenuItem(id, menu)
|
||||
if menu then
|
||||
ide:GetMainFrame():Disconnect(id, wx.wxID_ANY, wx.wxEVT_COMMAND_MENU_SELECTED)
|
||||
ide:GetMainFrame():Disconnect(id, wx.wxID_ANY, wx.wxEVT_UPDATE_UI)
|
||||
menu:Disconnect(id, wx.wxID_ANY, wx.wxEVT_COMMAND_MENU_SELECTED)
|
||||
menu:Disconnect(id, wx.wxID_ANY, wx.wxEVT_UPDATE_UI)
|
||||
menu:Remove(id)
|
||||
|
||||
local positem = menu:FindItemByPosition(pos)
|
||||
if (not positem or positem:GetKind() == wx.wxITEM_SEPARATOR)
|
||||
and pos > 0
|
||||
and (menu:FindItemByPosition(pos-1):GetKind() == wx.wxITEM_SEPARATOR) then
|
||||
menu:Destroy(menu:FindItemByPosition(pos-1))
|
||||
end
|
||||
@@ -160,6 +310,102 @@ function ide:RemoveMenuItem(id, menu)
|
||||
return false
|
||||
end
|
||||
|
||||
function ide:ExecuteCommand(cmd, wdir, callback, endcallback)
|
||||
local proc = wx.wxProcess(ide:GetOutput())
|
||||
proc:Redirect()
|
||||
|
||||
local cwd
|
||||
if (wdir and #wdir > 0) then -- ignore empty directory
|
||||
cwd = wx.wxFileName.GetCwd()
|
||||
cwd = wx.wxFileName.SetCwd(wdir) and cwd
|
||||
end
|
||||
|
||||
local pid = wx.wxExecute(cmd, wx.wxEXEC_ASYNC, proc)
|
||||
pid = pid ~= -1 and pid ~= 0 and pid or nil
|
||||
if cwd then wx.wxFileName.SetCwd(cwd) end -- restore workdir
|
||||
if not pid then return pid, wx.wxSysErrorMsg() end
|
||||
|
||||
OutputSetCallbacks(pid, proc, callback or function() end, endcallback)
|
||||
return pid
|
||||
end
|
||||
|
||||
function ide:CreateImageList(group, ...)
|
||||
local _ = wx.wxLogNull() -- disable error reporting in popup
|
||||
local size = wx.wxSize(16,16)
|
||||
local imglist = wx.wxImageList(16,16)
|
||||
for i = 1, select('#', ...) do
|
||||
local icon, file = self:GetBitmap(select(i, ...), group, size)
|
||||
if imglist:Add(icon) == -1 then
|
||||
DisplayOutputLn(("Failed to add image '%s' to the image list.")
|
||||
:format(file or select(i, ...)))
|
||||
end
|
||||
end
|
||||
return imglist
|
||||
end
|
||||
|
||||
local tintdef = 100
|
||||
local function iconFilter(bitmap, tint)
|
||||
if type(tint) == 'function' then return tint(bitmap) end
|
||||
if type(tint) ~= 'table' or #tint ~= 3 then return bitmap end
|
||||
|
||||
local tr, tg, tb = tint[1]/255, tint[2]/255, tint[3]/255
|
||||
local pi = 0.299*tr + 0.587*tg + 0.114*tb -- pixel intensity
|
||||
local perc = (tint[0] or tintdef)/tintdef
|
||||
tr, tg, tb = tr*perc, tg*perc, tb*perc
|
||||
|
||||
local img = bitmap:ConvertToImage()
|
||||
for x = 0, img:GetWidth()-1 do
|
||||
for y = 0, img:GetHeight()-1 do
|
||||
if not img:IsTransparent(x, y) then
|
||||
local r, g, b = img:GetRed(x, y)/255, img:GetGreen(x, y)/255, img:GetBlue(x, y)/255
|
||||
local gs = (r + g + b) / 3
|
||||
local weight = 1-4*(gs-0.5)*(gs-0.5)
|
||||
r = math.max(0, math.min(255, math.floor(255 * (gs + (tr-pi) * weight))))
|
||||
g = math.max(0, math.min(255, math.floor(255 * (gs + (tg-pi) * weight))))
|
||||
b = math.max(0, math.min(255, math.floor(255 * (gs + (tb-pi) * weight))))
|
||||
img:SetRGB(x, y, r, g, b)
|
||||
end
|
||||
end
|
||||
end
|
||||
return wx.wxBitmap(img)
|
||||
end
|
||||
|
||||
local icons = {} -- icon cache to avoid reloading the same icons
|
||||
function ide:GetBitmap(id, client, size)
|
||||
local im = ide.config.imagemap
|
||||
local width = size:GetWidth()
|
||||
local key = width.."/"..id
|
||||
local keyclient = key.."-"..client
|
||||
local mapped = im[keyclient] or im[id.."-"..client] or im[key] or im[id]
|
||||
-- mapped may be a file name/path or wxImage object; take that into account
|
||||
if type(im[id.."-"..client]) == 'string' then keyclient = width.."/"..im[id.."-"..client]
|
||||
elseif type(im[keyclient]) == 'string' then keyclient = im[keyclient]
|
||||
elseif type(im[id]) == 'string' then
|
||||
id = im[id]
|
||||
key = width.."/"..id
|
||||
keyclient = key.."-"..client
|
||||
end
|
||||
|
||||
local fileClient = ide:GetAppName() .. "/res/" .. keyclient .. ".png"
|
||||
local fileKey = ide:GetAppName() .. "/res/" .. key .. ".png"
|
||||
local isImage = type(mapped) == 'userdata' and mapped:GetClassInfo():GetClassName() == 'wxImage'
|
||||
local file
|
||||
if mapped and (isImage or wx.wxFileName(mapped):FileExists()) then file = mapped
|
||||
elseif wx.wxFileName(fileClient):FileExists() then file = fileClient
|
||||
elseif wx.wxFileName(fileKey):FileExists() then file = fileKey
|
||||
else return wx.wxArtProvider.GetBitmap(id, client, size) end
|
||||
local icon = icons[file] or iconFilter(wx.wxBitmap(file), ide.config.imagetint)
|
||||
icons[file] = icon
|
||||
return icon, file
|
||||
end
|
||||
|
||||
function ide:AddPackage(name, package)
|
||||
ide.packages[name] = setmetatable(package, ide.proto.Plugin)
|
||||
ide.packages[name].fname = name
|
||||
return ide.packages[name]
|
||||
end
|
||||
function ide:RemovePackage(name) ide.packages[name] = nil end
|
||||
|
||||
function ide:AddWatch(watch, value)
|
||||
local mgr = ide.frame.uimgr
|
||||
local pane = mgr:GetPane("watchpanel")
|
||||
@@ -184,18 +430,18 @@ function ide:AddWatch(watch, value)
|
||||
item = watchCtrl:GetNextSibling(item)
|
||||
end
|
||||
|
||||
local item = watchCtrl:AppendItem(root, watch, 1)
|
||||
item = watchCtrl:AppendItem(root, watch, 1)
|
||||
watchCtrl:SetItemExpression(item, watch, value)
|
||||
return item
|
||||
end
|
||||
|
||||
function ide:AddInterpreter(name, interpreter)
|
||||
self.interpreters[name] = setmetatable(interpreter, ide.proto.Interpreter)
|
||||
UpdateInterpreters()
|
||||
ProjectUpdateInterpreters()
|
||||
end
|
||||
function ide:RemoveInterpreter(name)
|
||||
self.interpreters[name] = nil
|
||||
UpdateInterpreters()
|
||||
ProjectUpdateInterpreters()
|
||||
end
|
||||
|
||||
function ide:AddSpec(name, spec)
|
||||
@@ -236,6 +482,7 @@ function ide:RemoveConfig(name)
|
||||
ReApplySpecAndStyles() -- apply current config to the UI
|
||||
end
|
||||
|
||||
local panels = {}
|
||||
function ide:AddPanel(ctrl, panel, name, conf)
|
||||
local width, height = 360, 200
|
||||
local notebook = wxaui.wxAuiNotebook(ide.frame, wx.wxID_ANY,
|
||||
@@ -245,6 +492,8 @@ function ide:AddPanel(ctrl, panel, name, conf)
|
||||
notebook:AddPage(ctrl, name, true)
|
||||
notebook:Connect(wxaui.wxEVT_COMMAND_AUINOTEBOOK_BG_DCLICK,
|
||||
function() PaneFloatToggle(notebook) end)
|
||||
notebook:Connect(wxaui.wxEVT_COMMAND_AUINOTEBOOK_PAGE_CLOSE,
|
||||
function(event) event:Veto() end)
|
||||
|
||||
local mgr = ide.frame.uimgr
|
||||
mgr:AddPane(notebook, wxaui.wxAuiPaneInfo():
|
||||
@@ -255,5 +504,33 @@ function ide:AddPanel(ctrl, panel, name, conf)
|
||||
if type(conf) == "function" then conf(mgr:GetPane(panel)) end
|
||||
mgr.defaultPerspective = mgr:SavePerspective() -- resave default perspective
|
||||
|
||||
panels[name] = {ctrl, panel, name, conf}
|
||||
return mgr:GetPane(panel), notebook
|
||||
end
|
||||
|
||||
function ide:AddPanelDocked(notebook, ctrl, panel, name, conf, activate)
|
||||
notebook:AddPage(ctrl, name, activate ~= false)
|
||||
panels[name] = {ctrl, panel, name, conf}
|
||||
return notebook
|
||||
end
|
||||
function ide:IsPanelDocked(panel)
|
||||
local layout = ide:GetSetting("/view", "uimgrlayout")
|
||||
return layout and not layout:find(panel)
|
||||
end
|
||||
|
||||
function ide:IsValidCtrl(ctrl)
|
||||
return ctrl and pcall(function() ctrl:GetId() end)
|
||||
end
|
||||
|
||||
function ide:RestorePanelByLabel(name)
|
||||
if not panels[name] then return end
|
||||
return ide:AddPanel(unpack(panels[name]))
|
||||
end
|
||||
|
||||
function ide:AddTool(name, command, updateui)
|
||||
return ToolsAddTool(name, command, updateui)
|
||||
end
|
||||
|
||||
function ide:RemoveTool(name)
|
||||
return ToolsRemoveTool(name)
|
||||
end
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
-- Copyright 2013-14 Paul Kulchenko, ZeroBrane LLC
|
||||
-- Copyright 2013-15 Paul Kulchenko, ZeroBrane LLC
|
||||
---------------------------------------------------------
|
||||
|
||||
local q = EscapeMagic
|
||||
local modpref = ide.MODPREF
|
||||
|
||||
ide.proto.Document = {__index = {
|
||||
GetFileName = function(self) return self.fileName end,
|
||||
GetFilePath = function(self) return self.filePath end,
|
||||
@@ -9,8 +12,20 @@ ide.proto.Document = {__index = {
|
||||
GetEditor = function(self) return self.editor end,
|
||||
GetTabIndex = function(self) return self.index end,
|
||||
IsModified = function(self) return self.isModified end,
|
||||
SetModified = function(self, modified) SetDocumentModified(self.editor:GetId(), modified) end,
|
||||
SetTabText = function(self, text) SetDocumentModified(self.editor:GetId(), self.isModified, text) end,
|
||||
SetModified = function(self, modified)
|
||||
self.isModified = modified
|
||||
self:SetTabText()
|
||||
end,
|
||||
SetTabText = function(self, text)
|
||||
ide:GetEditorNotebook():SetPageText(self.index,
|
||||
(self.isModified and modpref or '')..(text or self:GetTabText()))
|
||||
end,
|
||||
GetTabText = function(self)
|
||||
if self.index == nil then return self.fileName end
|
||||
return ide:GetEditorNotebook():GetPageText(self.index):gsub("^"..q(modpref), "")
|
||||
end,
|
||||
SetActive = function(self) SetEditorSelection(self.index) end,
|
||||
Save = function(self) return SaveFile(self.editor, self.filePath) end
|
||||
}}
|
||||
|
||||
ide.proto.Plugin = {__index = {
|
||||
@@ -24,6 +39,14 @@ ide.proto.Plugin = {__index = {
|
||||
ide.proto.Interpreter = {__index = {
|
||||
GetName = function(self) return self.name end,
|
||||
GetFileName = function(self) return self.fname end,
|
||||
GetAPI = function(self) return self.api end,
|
||||
fprojdir = function(self,wfilename)
|
||||
return wfilename:GetPath(wx.wxPATH_GET_VOLUME)
|
||||
end,
|
||||
fworkdir = function (self,wfilename)
|
||||
local proj = ide:GetProject()
|
||||
return proj and proj:gsub("[\\/]$","") or wfilename:GetPath(wx.wxPATH_GET_VOLUME)
|
||||
end,
|
||||
}}
|
||||
|
||||
ide.proto.Debugger = {__index = {
|
||||
@@ -32,3 +55,8 @@ ide.proto.Debugger = {__index = {
|
||||
GetHostName = function(self) return self.hostname end,
|
||||
GetPortNumber = function(self) return self.portnumber end,
|
||||
}}
|
||||
|
||||
ide.proto.ID = {
|
||||
__index = function(_, id) return _G['ID_'..id] end,
|
||||
__call = function(_, id) return IDgen(id) end,
|
||||
}
|
||||
|
||||
@@ -1,9 +1,19 @@
|
||||
-- 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
|
||||
local layoutlabel = {
|
||||
UIMANAGER = "uimgrlayout",
|
||||
NOTEBOOK = "nblayout",
|
||||
NOTEBOOKOUTPUT = "nbbtmlayout",
|
||||
NOTEBOOKPROJECT = "nbprojlayout",
|
||||
DOCKNOTEBOOK = "nbdocklayout",
|
||||
DOCKNOTEBOOKOUTPUT = "nbbtmdocklayout",
|
||||
DOCKNOTEBOOKPROJECT = "nbprojdocklayout",
|
||||
STATUSBAR = "statusbar",
|
||||
}
|
||||
|
||||
-- ----------------------------------------------------------------------------
|
||||
-- Initialize the wxConfig for loading/saving the preferences
|
||||
@@ -281,7 +291,7 @@ local function saveNotebook(nb)
|
||||
|
||||
local function sortedPages(tab)
|
||||
local t = {}
|
||||
for i,v in pairs(tab) do
|
||||
for i in pairs(tab) do
|
||||
table.insert(t,i)
|
||||
end
|
||||
table.sort(t)
|
||||
@@ -309,9 +319,9 @@ local function saveNotebook(nb)
|
||||
split = "<Y>"
|
||||
end
|
||||
|
||||
for i,v in ipairs(sortedUse) do
|
||||
for _, v in ipairs(sortedUse) do
|
||||
local pages = pagesUse[v]
|
||||
for n,id in ipairs(pages) do
|
||||
for _, id in ipairs(pages) do
|
||||
str = str..id.."|"
|
||||
end
|
||||
str = str..split.."|"
|
||||
@@ -390,23 +400,23 @@ function SettingsRestoreView()
|
||||
local uimgr = frame.uimgr
|
||||
|
||||
local layoutcur = uimgr:SavePerspective()
|
||||
local layout = settingsReadSafe(settings,"uimgrlayout",layoutcur)
|
||||
local layout = settingsReadSafe(settings,layoutlabel.UIMANAGER,layoutcur)
|
||||
if (layout ~= layoutcur) then
|
||||
-- save the current toolbar configuration and restore re-apply it
|
||||
-- as it's always correct (to avoid storing minh and minw values)
|
||||
-- save the current toolbar besth and re-apply after perspective is loaded
|
||||
-- bestw and besth has two separate issues:
|
||||
-- (1) layout includes bestw that is only as wide as the toolbar size,
|
||||
-- this leaves default background on the right side of the toolbar;
|
||||
-- fix it by explicitly replacing with the screen width.
|
||||
-- (2) besth may be wrong after icon size changes.
|
||||
local toolbar = frame.uimgr:GetPane("toolbar")
|
||||
local toolbarlayout = (toolbar:IsOk()
|
||||
-- layout includes bestw that is only as wide as the toolbar size,
|
||||
-- this leaves default background on the right side of the toolbar;
|
||||
-- fix it by explicitly replacing with the screen width
|
||||
and uimgr:SavePaneInfo(toolbar):gsub("(bestw=)[^;]+",
|
||||
function(s) return s..wx.wxSystemSettings.GetMetric(wx.wxSYS_SCREEN_X) end)
|
||||
or nil)
|
||||
local besth = toolbar:IsOk() and tonumber(uimgr:SavePaneInfo(toolbar):match("besth=([^;]+)"))
|
||||
uimgr:LoadPerspective(layout, false)
|
||||
if toolbarlayout then uimgr:LoadPaneInfo(toolbarlayout, toolbar) end
|
||||
if toolbar:IsOk() then -- fix bestw and besth values
|
||||
toolbar:BestSize(wx.wxSystemSettings.GetMetric(wx.wxSYS_SCREEN_X), besth or -1)
|
||||
end
|
||||
|
||||
-- check if debugging panes are not mentioned and float them
|
||||
for _, name in pairs({"stackpanel", "watchpanel"}) do
|
||||
for _, name in pairs({"stackpanel", "watchpanel", "searchpanel"}) do
|
||||
local pane = frame.uimgr:GetPane(name)
|
||||
if pane:IsOk() and not layout:find(name) then pane:Float() end
|
||||
end
|
||||
@@ -424,26 +434,32 @@ function SettingsRestoreView()
|
||||
end
|
||||
end
|
||||
|
||||
frame:GetStatusBar():Show(settingsReadSafe(settings,"statusbar",true))
|
||||
frame:GetStatusBar():Show(settingsReadSafe(settings,layoutlabel.STATUSBAR,true))
|
||||
|
||||
uimgr:Update()
|
||||
|
||||
local layoutcur = saveNotebook(frame.bottomnotebook)
|
||||
local layout = settingsReadSafe(settings,"nbbtmlayout",layoutcur)
|
||||
layoutcur = saveNotebook(ide:GetOutputNotebook())
|
||||
layout = settingsReadSafe(settings,layoutlabel.NOTEBOOKOUTPUT,layoutcur)
|
||||
if (layout ~= layoutcur) then
|
||||
loadNotebook(ide.frame.bottomnotebook,layout,
|
||||
loadNotebook(ide:GetOutputNotebook(),layout,
|
||||
-- treat "Output (running)" same as "Output"
|
||||
function(name) return
|
||||
name:match(TR("Output")) or name:match("Output") or name end)
|
||||
end
|
||||
|
||||
layoutcur = saveNotebook(ide:GetProjectNotebook())
|
||||
layout = settingsReadSafe(settings,layoutlabel.NOTEBOOKPROJECT,layoutcur)
|
||||
if (layout ~= layoutcur) then
|
||||
loadNotebook(ide:GetProjectNotebook(),layout)
|
||||
end
|
||||
|
||||
-- always select Output tab
|
||||
local bottomnotebook = frame.bottomnotebook
|
||||
local bottomnotebook = ide:GetOutputNotebook()
|
||||
local index = bottomnotebook:GetPageIndex(bottomnotebook.errorlog)
|
||||
if index >= 0 then bottomnotebook:SetSelection(index) end
|
||||
|
||||
local layoutcur = saveNotebook(frame.notebook)
|
||||
local layout = settingsReadSafe(settings,"nblayout",layoutcur)
|
||||
layoutcur = saveNotebook(frame.notebook)
|
||||
layout = settingsReadSafe(settings,layoutlabel.NOTEBOOK,layoutcur)
|
||||
if (layout ~= layoutcur) then
|
||||
loadNotebook(ide.frame.notebook,layout)
|
||||
local openDocuments = ide.openDocuments
|
||||
@@ -457,10 +473,10 @@ function SettingsRestoreView()
|
||||
-- restore configuration for notebook pages that have been split;
|
||||
-- load saved dock_size values and update current values with saved ones
|
||||
-- where dock_size configuration matches
|
||||
local docksizemask = '(dock_size[^=]+=)(%d+)'
|
||||
for l, m in pairs({
|
||||
nbdocklayout = frame.notebook:GetAuiManager(),
|
||||
nbbtmdocklayout = frame.bottomnotebook:GetAuiManager(),
|
||||
[layoutlabel.DOCKNOTEBOOK] = ide:GetEditorNotebook():GetAuiManager(),
|
||||
[layoutlabel.DOCKNOTEBOOKOUTPUT] = ide:GetOutputNotebook():GetAuiManager(),
|
||||
[layoutlabel.DOCKNOTEBOOKPROJECT] = ide:GetProjectNotebook():GetAuiManager(),
|
||||
}) do
|
||||
-- ...|dock_size(5,0,0)=20|dock_size(2,1,0)=200|...
|
||||
local prevlayout = settingsReadSafe(settings, l, "")
|
||||
@@ -469,7 +485,7 @@ function SettingsRestoreView()
|
||||
local val = prevlayout:match(EscapeMagic(t)..'(%d+)')
|
||||
return t..(val or v)
|
||||
end)
|
||||
if newlayout ~= curlayour then m:LoadPerspective(newlayout) end
|
||||
if newlayout ~= curlayout then m:LoadPerspective(newlayout) end
|
||||
end
|
||||
|
||||
local editor = GetEditor()
|
||||
@@ -487,12 +503,14 @@ function SettingsSaveView()
|
||||
local frame = ide.frame
|
||||
local uimgr = frame.uimgr
|
||||
|
||||
settings:Write("uimgrlayout", uimgr:SavePerspective())
|
||||
settings:Write("nblayout", saveNotebook(frame.notebook))
|
||||
settings:Write("nbbtmlayout", saveNotebook(frame.bottomnotebook))
|
||||
settings:Write("statusbar", frame:GetStatusBar():IsShown())
|
||||
settings:Write("nbdocklayout", frame.notebook:GetAuiManager():SavePerspective())
|
||||
settings:Write("nbbtmdocklayout", frame.bottomnotebook:GetAuiManager():SavePerspective())
|
||||
settings:Write(layoutlabel.UIMANAGER, uimgr:SavePerspective())
|
||||
settings:Write(layoutlabel.NOTEBOOK, saveNotebook(ide:GetEditorNotebook()))
|
||||
settings:Write(layoutlabel.NOTEBOOKOUTPUT, saveNotebook(ide:GetOutputNotebook()))
|
||||
settings:Write(layoutlabel.NOTEBOOKPROJECT, saveNotebook(ide:GetProjectNotebook()))
|
||||
settings:Write(layoutlabel.DOCKNOTEBOOK, ide:GetEditorNotebook():GetAuiManager():SavePerspective())
|
||||
settings:Write(layoutlabel.DOCKNOTEBOOKOUTPUT, ide:GetOutputNotebook():GetAuiManager():SavePerspective())
|
||||
settings:Write(layoutlabel.DOCKNOTEBOOKPROJECT, ide:GetProjectNotebook():GetAuiManager():SavePerspective())
|
||||
settings:Write(layoutlabel.STATUSBAR, frame:GetStatusBar():IsShown())
|
||||
|
||||
settings:SetPath(path)
|
||||
end
|
||||
@@ -504,6 +522,8 @@ function SettingsRestoreEditorSettings()
|
||||
|
||||
ide.config.interpreter = settingsReadSafe(settings,"interpreter",ide.config.interpreter)
|
||||
ProjectSetInterpreter(ide.config.interpreter)
|
||||
|
||||
settings:SetPath(path)
|
||||
end
|
||||
|
||||
function SettingsSaveEditorSettings()
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user